routie dev init since i didn't adhere to any proper guidance up until now

This commit is contained in:
2026-04-29 22:27:29 -06:00
commit e1dabb71e2
15301 changed files with 3562618 additions and 0 deletions
@@ -0,0 +1,27 @@
.v-pull-to-refresh {
overflow: hidden;
position: relative;
}
.v-pull-to-refresh__pull-down {
position: absolute;
width: 100%;
transition: top 0.3s ease-out;
}
.v-pull-to-refresh__pull-down--touching {
transition: none;
}
.v-pull-to-refresh__pull-down-default {
display: flex;
width: 100%;
height: 100%;
justify-content: center;
align-items: flex-end;
padding-bottom: 10px;
}
.v-pull-to-refresh__scroll-container {
position: relative;
transition: top 0.3s ease-out;
}
.v-pull-to-refresh__scroll-container--touching {
transition: none;
}
@@ -0,0 +1,173 @@
export type VPullToRefreshSlots = {
default: never;
pullDownPanel: {
canRefresh: boolean;
goingUp: boolean;
refreshing: boolean;
};
};
export declare const VPullToRefresh: {
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<{
disabled: boolean;
pullDownThreshold: number;
} & {} & {
$children?: {
default?: (() => import("vue").VNodeChild) | undefined;
pullDownPanel?: ((arg: {
canRefresh: boolean;
goingUp: boolean;
refreshing: boolean;
}) => import("vue").VNodeChild) | undefined;
} | {
$stable?: boolean;
} | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
'v-slots'?: {
default?: false | (() => import("vue").VNodeChild) | undefined;
pullDownPanel?: false | ((arg: {
canRefresh: boolean;
goingUp: boolean;
refreshing: boolean;
}) => import("vue").VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
"v-slot:pullDownPanel"?: false | ((arg: {
canRefresh: boolean;
goingUp: boolean;
refreshing: boolean;
}) => import("vue").VNodeChild) | undefined;
} & {
onLoad?: ((options: {
done: () => void;
}) => any) | undefined;
}, void, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
load: (options: {
done: () => void;
}) => true;
}, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, {
disabled: boolean;
pullDownThreshold: number;
}, true, {}, import("vue").SlotsType<Partial<{
default: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
[key: string]: any;
}>[];
pullDownPanel: (arg: {
canRefresh: boolean;
goingUp: boolean;
refreshing: boolean;
}) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
[key: string]: any;
}>[];
}>>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
P: {};
B: {};
D: {};
C: {};
M: {};
Defaults: {};
}, {
disabled: boolean;
pullDownThreshold: number;
} & {} & {
$children?: {
default?: (() => import("vue").VNodeChild) | undefined;
pullDownPanel?: ((arg: {
canRefresh: boolean;
goingUp: boolean;
refreshing: boolean;
}) => import("vue").VNodeChild) | undefined;
} | {
$stable?: boolean;
} | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
'v-slots'?: {
default?: false | (() => import("vue").VNodeChild) | undefined;
pullDownPanel?: false | ((arg: {
canRefresh: boolean;
goingUp: boolean;
refreshing: boolean;
}) => import("vue").VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
"v-slot:pullDownPanel"?: false | ((arg: {
canRefresh: boolean;
goingUp: boolean;
refreshing: boolean;
}) => import("vue").VNodeChild) | undefined;
} & {
onLoad?: ((options: {
done: () => void;
}) => any) | undefined;
}, {}, {}, {}, {}, {
disabled: boolean;
pullDownThreshold: number;
}>;
__isFragment?: never;
__isTeleport?: never;
__isSuspense?: never;
} & import("vue").ComponentOptionsBase<{
disabled: boolean;
pullDownThreshold: number;
} & {} & {
$children?: {
default?: (() => import("vue").VNodeChild) | undefined;
pullDownPanel?: ((arg: {
canRefresh: boolean;
goingUp: boolean;
refreshing: boolean;
}) => import("vue").VNodeChild) | undefined;
} | {
$stable?: boolean;
} | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
'v-slots'?: {
default?: false | (() => import("vue").VNodeChild) | undefined;
pullDownPanel?: false | ((arg: {
canRefresh: boolean;
goingUp: boolean;
refreshing: boolean;
}) => import("vue").VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
"v-slot:pullDownPanel"?: false | ((arg: {
canRefresh: boolean;
goingUp: boolean;
refreshing: boolean;
}) => import("vue").VNodeChild) | undefined;
} & {
onLoad?: ((options: {
done: () => void;
}) => any) | undefined;
}, void, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
load: (options: {
done: () => void;
}) => true;
}, string, {
disabled: boolean;
pullDownThreshold: number;
}, {}, string, import("vue").SlotsType<Partial<{
default: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
[key: string]: any;
}>[];
pullDownPanel: (arg: {
canRefresh: boolean;
goingUp: boolean;
refreshing: boolean;
}) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
[key: string]: any;
}>[];
}>>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & import("../../util/index.js").FilterPropsOptions<{
disabled: BooleanConstructor;
pullDownThreshold: {
type: NumberConstructor;
default: number;
};
}, import("vue").ExtractPropTypes<{
disabled: BooleanConstructor;
pullDownThreshold: {
type: NumberConstructor;
default: number;
};
}>>;
export type VPullToRefresh = InstanceType<typeof VPullToRefresh>;
+117
View File
@@ -0,0 +1,117 @@
import { createVNode as _createVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode } from "vue";
// Styles
import "./VPullToRefresh.css";
// Components
import { VIcon } from "../../components/VIcon/index.js";
import { VProgressCircular } from "../../components/VProgressCircular/index.js"; // Utilities
import { computed, onMounted, ref, shallowRef, watch } from 'vue';
import { clamp, convertToUnit, genericComponent, getScrollParents, useRender } from "../../util/index.js";
export const VPullToRefresh = genericComponent()({
name: 'VPullToRefresh',
props: {
disabled: Boolean,
pullDownThreshold: {
type: Number,
default: 64
}
},
emits: {
load: options => true
},
setup(props, {
slots,
emit
}) {
let touchstartY = 0;
let scrollParents = [];
const touchDiff = shallowRef(0);
const containerRef = ref();
const refreshing = shallowRef(false);
const goingUp = shallowRef(false);
const touching = shallowRef(false);
const canRefresh = computed(() => touchDiff.value >= props.pullDownThreshold && !refreshing.value);
const topOffset = computed(() => clamp(touchDiff.value, 0, props.pullDownThreshold));
function onTouchstart(e) {
if (refreshing.value || props.disabled) return;
touching.value = true;
touchstartY = 'clientY' in e ? e.clientY : e.touches[0].clientY;
}
function onTouchmove(e) {
if (refreshing.value || !touching.value || props.disabled) return;
const touchY = 'clientY' in e ? e.clientY : e.touches[0].clientY;
if (scrollParents.length && !scrollParents[0].scrollTop) {
touchDiff.value = touchY - touchstartY;
}
}
function onTouchend(e) {
if (refreshing.value || props.disabled) return;
touching.value = false;
if (canRefresh.value) {
function done() {
if (!refreshing.value) return;
touchDiff.value = 0;
refreshing.value = false;
}
emit('load', {
done
});
refreshing.value = true;
} else {
touchDiff.value = 0;
}
}
onMounted(() => {
scrollParents = getScrollParents(containerRef.value);
});
watch([topOffset, refreshing], () => {
if (scrollParents.length) {
const stopScrolling = topOffset.value && !refreshing.value;
scrollParents.forEach(p => p.style.overflow = stopScrolling ? 'hidden' : 'auto');
}
});
watch(topOffset, (newVal, oldVal) => {
goingUp.value = newVal < oldVal;
});
useRender(() => {
return _createElementVNode("div", {
"class": _normalizeClass(['v-pull-to-refresh']),
"onTouchstart": onTouchstart,
"onTouchmove": onTouchmove,
"onTouchend": onTouchend,
"onMousedown": onTouchstart,
"onMouseup": onTouchend,
"onMouseleave": onTouchend,
"onMousemove": onTouchmove,
"ref": containerRef
}, [_createElementVNode("div", {
"class": _normalizeClass(['v-pull-to-refresh__pull-down', {
'v-pull-to-refresh__pull-down--touching': touching.value
}]),
"style": {
top: convertToUnit(-1 * props.pullDownThreshold + topOffset.value),
height: convertToUnit(props.pullDownThreshold)
}
}, [slots.pullDownPanel ? slots.pullDownPanel({
canRefresh: canRefresh.value,
goingUp: goingUp.value,
refreshing: refreshing.value
}) : _createElementVNode("div", {
"class": _normalizeClass(['v-pull-to-refresh__pull-down-default'])
}, [refreshing.value ? _createVNode(VProgressCircular, {
"indeterminate": true,
"active": false
}, null) : _createVNode(VIcon, {
"icon": canRefresh.value || goingUp.value ? '$sortAsc' : '$sortDesc'
}, null)])]), _createElementVNode("div", {
"class": _normalizeClass(['v-pull-to-refresh__scroll-container', {
'v-pull-to-refresh__scroll-container--touching': touching.value
}]),
"style": {
top: convertToUnit(topOffset.value)
}
}, [slots.default?.()])]);
});
}
});
//# sourceMappingURL=VPullToRefresh.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,23 @@
.v-pull-to-refresh
overflow: hidden
position: relative
&__pull-down
position: absolute
width: 100%
transition: top .3s ease-out
&--touching
transition: none
&__pull-down-default
display: flex
width: 100%
height: 100%
justify-content: center
align-items: flex-end
padding-bottom: 10px
&__scroll-container
position: relative
transition: top .3s ease-out
&--touching
transition: none
+1
View File
@@ -0,0 +1 @@
export { VPullToRefresh } from './VPullToRefresh.js';
+2
View File
@@ -0,0 +1,2 @@
export { VPullToRefresh } from "./VPullToRefresh.js";
//# sourceMappingURL=index.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.js","names":["VPullToRefresh"],"sources":["../../../src/labs/VPullToRefresh/index.ts"],"sourcesContent":["export { VPullToRefresh } from './VPullToRefresh'\n"],"mappings":"SAASA,cAAc","ignoreList":[]}