yuyeon 0.2.2-rc.8 → 0.2.3-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/style.css +1 -1
- package/dist/yuyeon.js +1801 -1848
- package/dist/yuyeon.umd.cjs +3 -3
- package/lib/components/dialog/YDialog.mjs +1 -1
- package/lib/components/dialog/YDialog.mjs.map +1 -1
- package/lib/components/switch/YSwitch.mjs +162 -209
- package/lib/components/switch/YSwitch.mjs.map +1 -1
- package/lib/components/switch/YSwitch.scss +211 -204
- package/lib/components/tree-view/YTreeView.mjs +1 -1
- package/lib/components/tree-view/YTreeView.mjs.map +1 -1
- package/lib/index.mjs +3 -2
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
- package/types/components/dropdown/YDropdown.d.ts +12 -12
- package/types/components/select/YSelect.d.ts +13 -13
- package/types/components/switch/YSwitch.d.ts +101 -30
|
@@ -142,7 +142,7 @@ export const YDialog = defineComponent({
|
|
|
142
142
|
const filtered = activeLayers?.filter(layer => {
|
|
143
143
|
return !layer$.value?.isMe(layer) && layer.ctx.modal;
|
|
144
144
|
});
|
|
145
|
-
if (!filtered?.length) {
|
|
145
|
+
if (!filtered?.length && root$) {
|
|
146
146
|
root$.classList.remove('y-dialog--virtual-scroll');
|
|
147
147
|
document.documentElement.classList.remove('y-dialog--prevent-scroll');
|
|
148
148
|
root$.style.top = '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YDialog.mjs","names":["computed","getCurrentInstance","onBeforeUnmount","ref","shallowRef","watch","useModelDuplex","useRender","omit","bindClasses","chooseProps","defineComponent","propsFactory","toStyleSizeValue","YCard","YLayer","pressYLayerProps","useActiveStack","pressYDialogPropsOptions","persistent","type","Boolean","default","dialogClasses","Array","String","Object","maximized","focusTrap","offset","scrim","YDialog","name","components","props","emits","setup","_ref","emit","slots","vm","$yuyeon","appContext","config","globalProperties","active","classes","boundClasses","styles","contentStyles","paddingTop","layer$","children","onFocusin","e","prevTarget","relatedTarget","target","excludeTarget","document","querySelector","isArray","excluded","some","exclude","testChildrenContains","layers","layer","content$","contains","value","includes","focusableSelector","focusables","querySelectorAll","filter","el","hasAttribute","matches","length","firstChild","lastChild","isSameNode","focus","installFocusTrap","addEventListener","dismantleFocusTrap","removeEventListener","tempScrollTop","tempScrollLeft","preventInteractionBackground","toggle","root$","root","activeLayers","getActiveLayers","filtered","ctx","modal","classList","scrollTop","documentElement","scrollLeft","add","style","top","left","isMe","remove","requestAnimationFrame","onUpdate","v","onClick","currentActive","disabled","baseEl","neo","old","immediate","setTimeout","_createVNode","_Fragment","_mergeProps","$event","_len","arguments","args","_key","base"],"sources":["../../../src/components/dialog/YDialog.tsx"],"sourcesContent":["import {\n type PropType,\n computed,\n getCurrentInstance,\n onBeforeUnmount,\n ref,\n shallowRef,\n watch,\n} from 'vue';\n\nimport { useModelDuplex } from '@/composables/communication';\nimport { useRender } from '@/composables/component';\nimport { omit } from '@/util/common';\nimport {\n bindClasses,\n chooseProps,\n defineComponent,\n propsFactory,\n} from '@/util/component';\nimport { toStyleSizeValue } from '@/util/ui';\n\nimport { YCard } from '../card';\nimport { YLayer, pressYLayerProps } from '../layer';\nimport { useActiveStack } from '../layer/active-stack';\n\nimport './YDialog.scss';\n\nexport const pressYDialogPropsOptions = propsFactory(\n {\n persistent: {\n type: Boolean as PropType<boolean>,\n default: true,\n },\n dialogClasses: {\n type: [Array, String, Object] as PropType<\n string[] | string | Record<string, any>\n >,\n },\n maximized: Boolean as PropType<boolean>,\n focusTrap: {\n type: [Boolean, String, Object, Array] as PropType<\n false | string | string[] | HTMLElement\n >,\n default: true,\n },\n offset: {\n type: String as PropType<string>,\n },\n ...omit(\n pressYLayerProps({\n scrim: true,\n }),\n ['offset', 'classes'],\n ),\n },\n 'YDialog',\n);\n\nexport const YDialog = defineComponent({\n name: 'YDialog',\n components: {\n YLayer,\n YCard,\n },\n props: pressYDialogPropsOptions(),\n emits: ['update:modelValue'],\n setup(props, { emit, slots }) {\n const vm = getCurrentInstance();\n const $yuyeon = vm?.appContext.config.globalProperties.$yuyeon;\n const active = useModelDuplex(props);\n\n const classes = computed(() => {\n const boundClasses = bindClasses(props.dialogClasses);\n return {\n ...boundClasses,\n 'y-dialog': true,\n 'y-dialog--maximized': props.maximized,\n };\n });\n\n const styles = computed(() => {\n return {\n ...(props.contentStyles ?? {}),\n paddingTop: toStyleSizeValue(props.offset),\n };\n });\n\n const layer$ = ref<typeof YLayer>();\n const { children } = useActiveStack(layer$, active, shallowRef(true));\n\n function onFocusin(e: FocusEvent) {\n if (props.focusTrap === false) {\n return;\n }\n\n const prevTarget = e.relatedTarget as HTMLElement | null;\n const target = e.target as HTMLElement | null;\n\n const excludeTarget = props.focusTrap;\n\n if (\n typeof excludeTarget === 'string' &&\n document.querySelector(excludeTarget) == target\n ) {\n return;\n }\n\n if (typeof excludeTarget === 'object') {\n if (Array.isArray(excludeTarget)) {\n const excluded = excludeTarget.some((exclude) => {\n if (typeof exclude === 'string') {\n return document.querySelector(exclude) == target;\n }\n if (typeof exclude === 'object') {\n return exclude == target;\n }\n });\n if (excluded) {\n return;\n }\n } else if (excludeTarget == target) {\n return;\n }\n }\n\n function testChildrenContains(layers: YLayer[]) {\n return layers.some((layer) => {\n return !layer.content$?.contains(target);\n });\n }\n\n if (\n prevTarget !== target &&\n layer$.value?.content$ &&\n ![document, layer$.value?.content$].includes(target) &&\n !layer$.value?.content$.contains(target) &&\n !testChildrenContains(children.value)\n ) {\n const focusableSelector =\n 'button, [href], input:not([type=\"hidden\"]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n const focusables = [\n ...layer$.value.content$.querySelectorAll(focusableSelector),\n ].filter(\n (el) =>\n !el.hasAttribute('disabled') && !el.matches('[tabindex=\"-1\"]'),\n ) as HTMLElement[];\n if (!focusables.length) return;\n const firstChild = focusables[0];\n const lastChild = focusables[focusables.length - 1];\n if (target?.isSameNode(firstChild) || target?.isSameNode(lastChild)) {\n return;\n }\n if (firstChild === lastChild) {\n lastChild.focus();\n } else {\n firstChild.focus();\n }\n }\n }\n\n function installFocusTrap() {\n document.addEventListener('focusin', onFocusin);\n }\n\n function dismantleFocusTrap() {\n document.removeEventListener('focusin', onFocusin);\n }\n\n const tempScrollTop = ref(0);\n const tempScrollLeft = ref(0);\n\n function preventInteractionBackground(toggle: boolean) {\n const root$ = $yuyeon.root as HTMLElement;\n const activeLayers = layer$.value?.getActiveLayers();\n if (toggle) {\n const filtered = activeLayers?.filter((layer: any) => {\n return layer.ctx.modal;\n });\n if (\n (filtered && !filtered.length) ||\n !root$.classList.contains('y-dialog--virtual-scroll')\n ) {\n const scrollTop = document.documentElement.scrollTop;\n const scrollLeft = document.documentElement.scrollLeft;\n tempScrollTop.value = scrollTop;\n tempScrollLeft.value = scrollLeft;\n if (props.maximized) {\n document.documentElement.classList.add('y-dialog--prevent-scroll');\n }\n root$.classList.add('y-dialog--virtual-scroll');\n root$.style.top = toStyleSizeValue(-1 * scrollTop) || '';\n root$.style.left = toStyleSizeValue(-1 * scrollLeft) || '';\n }\n } else {\n const filtered = activeLayers?.filter((layer: any) => {\n return !layer$.value?.isMe(layer) && layer.ctx.modal;\n });\n if (!filtered?.length) {\n root$.classList.remove('y-dialog--virtual-scroll');\n document.documentElement.classList.remove('y-dialog--prevent-scroll');\n root$.style.top = '';\n root$.style.left = '';\n requestAnimationFrame(() => {\n document.documentElement.scrollTop = tempScrollTop.value;\n document.documentElement.scrollLeft = tempScrollLeft.value;\n });\n }\n }\n }\n\n function onUpdate(v: boolean) {\n active.value = v;\n }\n\n function onClick(e: MouseEvent) {\n const currentActive = active.value;\n if (!props.disabled) {\n active.value = !currentActive;\n }\n }\n\n watch(\n () => layer$.value?.baseEl,\n (neo, old) => {\n if (neo) {\n neo.addEventListener('click', onClick);\n } else if (old) {\n old.removeEventListener('click', onClick);\n }\n },\n );\n\n watch(\n () => active.value,\n (neo) => {\n neo ? installFocusTrap() : dismantleFocusTrap();\n preventInteractionBackground(neo);\n },\n { immediate: true },\n );\n\n onBeforeUnmount(() => {\n if (active.value) {\n active.value = false;\n setTimeout(() => {\n preventInteractionBackground(false);\n }, 100);\n }\n });\n\n useRender(() => {\n return (\n <>\n <YLayer\n v-model={active.value}\n classes={classes.value}\n content-styles={styles.value}\n modal\n ref={layer$}\n {...omit(chooseProps(props, YLayer.props), ['contentStyles'])}\n >\n {{\n default: (...args: any[]) => slots.default?.(...args),\n base: slots.base,\n }}\n </YLayer>\n </>\n );\n });\n\n return {\n active,\n layer: layer$,\n classes,\n };\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"YDialog.mjs","names":["computed","getCurrentInstance","onBeforeUnmount","ref","shallowRef","watch","useModelDuplex","useRender","omit","bindClasses","chooseProps","defineComponent","propsFactory","toStyleSizeValue","YCard","YLayer","pressYLayerProps","useActiveStack","pressYDialogPropsOptions","persistent","type","Boolean","default","dialogClasses","Array","String","Object","maximized","focusTrap","offset","scrim","YDialog","name","components","props","emits","setup","_ref","emit","slots","vm","$yuyeon","appContext","config","globalProperties","active","classes","boundClasses","styles","contentStyles","paddingTop","layer$","children","onFocusin","e","prevTarget","relatedTarget","target","excludeTarget","document","querySelector","isArray","excluded","some","exclude","testChildrenContains","layers","layer","content$","contains","value","includes","focusableSelector","focusables","querySelectorAll","filter","el","hasAttribute","matches","length","firstChild","lastChild","isSameNode","focus","installFocusTrap","addEventListener","dismantleFocusTrap","removeEventListener","tempScrollTop","tempScrollLeft","preventInteractionBackground","toggle","root$","root","activeLayers","getActiveLayers","filtered","ctx","modal","classList","scrollTop","documentElement","scrollLeft","add","style","top","left","isMe","remove","requestAnimationFrame","onUpdate","v","onClick","currentActive","disabled","baseEl","neo","old","immediate","setTimeout","_createVNode","_Fragment","_mergeProps","$event","_len","arguments","args","_key","base"],"sources":["../../../src/components/dialog/YDialog.tsx"],"sourcesContent":["import {\n type PropType,\n computed,\n getCurrentInstance,\n onBeforeUnmount,\n ref,\n shallowRef,\n watch,\n} from 'vue';\n\nimport { useModelDuplex } from '@/composables/communication';\nimport { useRender } from '@/composables/component';\nimport { omit } from '@/util/common';\nimport {\n bindClasses,\n chooseProps,\n defineComponent,\n propsFactory,\n} from '@/util/component';\nimport { toStyleSizeValue } from '@/util/ui';\n\nimport { YCard } from '../card';\nimport { YLayer, pressYLayerProps } from '../layer';\nimport { useActiveStack } from '../layer/active-stack';\n\nimport './YDialog.scss';\n\nexport const pressYDialogPropsOptions = propsFactory(\n {\n persistent: {\n type: Boolean as PropType<boolean>,\n default: true,\n },\n dialogClasses: {\n type: [Array, String, Object] as PropType<\n string[] | string | Record<string, any>\n >,\n },\n maximized: Boolean as PropType<boolean>,\n focusTrap: {\n type: [Boolean, String, Object, Array] as PropType<\n false | string | string[] | HTMLElement\n >,\n default: true,\n },\n offset: {\n type: String as PropType<string>,\n },\n ...omit(\n pressYLayerProps({\n scrim: true,\n }),\n ['offset', 'classes'],\n ),\n },\n 'YDialog',\n);\n\nexport const YDialog = defineComponent({\n name: 'YDialog',\n components: {\n YLayer,\n YCard,\n },\n props: pressYDialogPropsOptions(),\n emits: ['update:modelValue'],\n setup(props, { emit, slots }) {\n const vm = getCurrentInstance();\n const $yuyeon = vm?.appContext.config.globalProperties.$yuyeon;\n const active = useModelDuplex(props);\n\n const classes = computed(() => {\n const boundClasses = bindClasses(props.dialogClasses);\n return {\n ...boundClasses,\n 'y-dialog': true,\n 'y-dialog--maximized': props.maximized,\n };\n });\n\n const styles = computed(() => {\n return {\n ...(props.contentStyles ?? {}),\n paddingTop: toStyleSizeValue(props.offset),\n };\n });\n\n const layer$ = ref<typeof YLayer>();\n const { children } = useActiveStack(layer$, active, shallowRef(true));\n\n function onFocusin(e: FocusEvent) {\n if (props.focusTrap === false) {\n return;\n }\n\n const prevTarget = e.relatedTarget as HTMLElement | null;\n const target = e.target as HTMLElement | null;\n\n const excludeTarget = props.focusTrap;\n\n if (\n typeof excludeTarget === 'string' &&\n document.querySelector(excludeTarget) == target\n ) {\n return;\n }\n\n if (typeof excludeTarget === 'object') {\n if (Array.isArray(excludeTarget)) {\n const excluded = excludeTarget.some((exclude) => {\n if (typeof exclude === 'string') {\n return document.querySelector(exclude) == target;\n }\n if (typeof exclude === 'object') {\n return exclude == target;\n }\n });\n if (excluded) {\n return;\n }\n } else if (excludeTarget == target) {\n return;\n }\n }\n\n function testChildrenContains(layers: YLayer[]) {\n return layers.some((layer) => {\n return !layer.content$?.contains(target);\n });\n }\n\n if (\n prevTarget !== target &&\n layer$.value?.content$ &&\n ![document, layer$.value?.content$].includes(target) &&\n !layer$.value?.content$.contains(target) &&\n !testChildrenContains(children.value)\n ) {\n const focusableSelector =\n 'button, [href], input:not([type=\"hidden\"]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n const focusables = [\n ...layer$.value.content$.querySelectorAll(focusableSelector),\n ].filter(\n (el) =>\n !el.hasAttribute('disabled') && !el.matches('[tabindex=\"-1\"]'),\n ) as HTMLElement[];\n if (!focusables.length) return;\n const firstChild = focusables[0];\n const lastChild = focusables[focusables.length - 1];\n if (target?.isSameNode(firstChild) || target?.isSameNode(lastChild)) {\n return;\n }\n if (firstChild === lastChild) {\n lastChild.focus();\n } else {\n firstChild.focus();\n }\n }\n }\n\n function installFocusTrap() {\n document.addEventListener('focusin', onFocusin);\n }\n\n function dismantleFocusTrap() {\n document.removeEventListener('focusin', onFocusin);\n }\n\n const tempScrollTop = ref(0);\n const tempScrollLeft = ref(0);\n\n function preventInteractionBackground(toggle: boolean) {\n const root$ = $yuyeon.root as HTMLElement;\n const activeLayers = layer$.value?.getActiveLayers();\n if (toggle) {\n const filtered = activeLayers?.filter((layer: any) => {\n return layer.ctx.modal;\n });\n if (\n (filtered && !filtered.length) ||\n !root$.classList.contains('y-dialog--virtual-scroll')\n ) {\n const scrollTop = document.documentElement.scrollTop;\n const scrollLeft = document.documentElement.scrollLeft;\n tempScrollTop.value = scrollTop;\n tempScrollLeft.value = scrollLeft;\n if (props.maximized) {\n document.documentElement.classList.add('y-dialog--prevent-scroll');\n }\n root$.classList.add('y-dialog--virtual-scroll');\n root$.style.top = toStyleSizeValue(-1 * scrollTop) || '';\n root$.style.left = toStyleSizeValue(-1 * scrollLeft) || '';\n }\n } else {\n const filtered = activeLayers?.filter((layer: any) => {\n return !layer$.value?.isMe(layer) && layer.ctx.modal;\n });\n if (!filtered?.length && root$) {\n root$.classList.remove('y-dialog--virtual-scroll');\n document.documentElement.classList.remove('y-dialog--prevent-scroll');\n root$.style.top = '';\n root$.style.left = '';\n requestAnimationFrame(() => {\n document.documentElement.scrollTop = tempScrollTop.value;\n document.documentElement.scrollLeft = tempScrollLeft.value;\n });\n }\n }\n }\n\n function onUpdate(v: boolean) {\n active.value = v;\n }\n\n function onClick(e: MouseEvent) {\n const currentActive = active.value;\n if (!props.disabled) {\n active.value = !currentActive;\n }\n }\n\n watch(\n () => layer$.value?.baseEl,\n (neo, old) => {\n if (neo) {\n neo.addEventListener('click', onClick);\n } else if (old) {\n old.removeEventListener('click', onClick);\n }\n },\n );\n\n watch(\n () => active.value,\n (neo) => {\n neo ? installFocusTrap() : dismantleFocusTrap();\n preventInteractionBackground(neo);\n },\n { immediate: true },\n );\n\n onBeforeUnmount(() => {\n if (active.value) {\n active.value = false;\n setTimeout(() => {\n preventInteractionBackground(false);\n }, 100);\n }\n });\n\n useRender(() => {\n return (\n <>\n <YLayer\n v-model={active.value}\n classes={classes.value}\n content-styles={styles.value}\n modal\n ref={layer$}\n {...omit(chooseProps(props, YLayer.props), ['contentStyles'])}\n >\n {{\n default: (...args: any[]) => slots.default?.(...args),\n base: slots.base,\n }}\n </YLayer>\n </>\n );\n });\n\n return {\n active,\n layer: layer$,\n classes,\n };\n },\n});\n"],"mappings":"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"}
|
|
@@ -1,231 +1,184 @@
|
|
|
1
1
|
import { createVNode as _createVNode } from "vue";
|
|
2
|
-
import { withModifiers } from 'vue';
|
|
3
|
-
import {
|
|
2
|
+
import { computed, nextTick, ref, watch, withModifiers } from 'vue';
|
|
3
|
+
import { useModelDuplex } from "../../composables/communication.mjs";
|
|
4
|
+
import { useRender } from "../../composables/component.mjs";
|
|
5
|
+
import { defineComponent, getUid, propsFactory } from "../../util/component/index.mjs";
|
|
4
6
|
import "./YSwitch.scss";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
prop: 'input',
|
|
10
|
-
event: 'change'
|
|
7
|
+
export const pressYSwitchPropsOptions = propsFactory({
|
|
8
|
+
modelValue: {
|
|
9
|
+
type: [Boolean, Array],
|
|
10
|
+
default: false
|
|
11
11
|
},
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
type: [Boolean, Array],
|
|
15
|
-
default: false
|
|
16
|
-
},
|
|
17
|
-
value: {
|
|
18
|
-
type: [String, Number, Object]
|
|
19
|
-
},
|
|
20
|
-
max: {
|
|
21
|
-
type: Number
|
|
22
|
-
},
|
|
23
|
-
loading: {
|
|
24
|
-
type: Boolean
|
|
25
|
-
},
|
|
26
|
-
disabled: {
|
|
27
|
-
type: Boolean
|
|
28
|
-
},
|
|
29
|
-
stickOut: {
|
|
30
|
-
type: Boolean
|
|
31
|
-
},
|
|
32
|
-
stateLabel: {
|
|
33
|
-
type: Boolean
|
|
34
|
-
},
|
|
35
|
-
color: {
|
|
36
|
-
type: String
|
|
37
|
-
},
|
|
38
|
-
labelOn: {
|
|
39
|
-
type: String,
|
|
40
|
-
default: 'ON'
|
|
41
|
-
},
|
|
42
|
-
labelOff: {
|
|
43
|
-
type: String,
|
|
44
|
-
default: 'OFF'
|
|
45
|
-
}
|
|
12
|
+
value: {
|
|
13
|
+
type: [String, Number, Object]
|
|
46
14
|
},
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
innerValue: false,
|
|
50
|
-
counterId: '',
|
|
51
|
-
focused: false
|
|
52
|
-
};
|
|
15
|
+
max: {
|
|
16
|
+
type: Number
|
|
53
17
|
},
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
uidCounter += 1;
|
|
57
|
-
this.counterId = iid;
|
|
58
|
-
if (Array.isArray(this.input)) {
|
|
59
|
-
this.inputByValue();
|
|
60
|
-
} else {
|
|
61
|
-
this.innerValue = this.input;
|
|
62
|
-
}
|
|
18
|
+
loading: {
|
|
19
|
+
type: Boolean
|
|
63
20
|
},
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
21
|
+
disabled: {
|
|
22
|
+
type: Boolean
|
|
23
|
+
},
|
|
24
|
+
stickOut: {
|
|
25
|
+
type: Boolean
|
|
26
|
+
},
|
|
27
|
+
stateLabel: {
|
|
28
|
+
type: Boolean
|
|
29
|
+
},
|
|
30
|
+
color: {
|
|
31
|
+
type: String
|
|
32
|
+
},
|
|
33
|
+
labelOn: {
|
|
34
|
+
type: String,
|
|
35
|
+
default: 'ON'
|
|
36
|
+
},
|
|
37
|
+
labelOff: {
|
|
38
|
+
type: String,
|
|
39
|
+
default: 'OFF'
|
|
40
|
+
}
|
|
41
|
+
}, 'YSwitch');
|
|
42
|
+
export const YSwitch = defineComponent({
|
|
43
|
+
name: 'YSwitch',
|
|
44
|
+
props: {
|
|
45
|
+
...pressYSwitchPropsOptions()
|
|
46
|
+
},
|
|
47
|
+
emits: ['update:modelValue', 'change', 'click', 'focus', 'blur', 'keydown', 'overmax'],
|
|
48
|
+
setup(props, _ref) {
|
|
49
|
+
let {
|
|
50
|
+
emit,
|
|
51
|
+
slots
|
|
52
|
+
} = _ref;
|
|
53
|
+
const counterId = (getUid() ?? '').toString();
|
|
54
|
+
const inputId = `input-${counterId}`;
|
|
55
|
+
const input$ = ref();
|
|
56
|
+
const model = useModelDuplex(props);
|
|
57
|
+
const checked = ref(false);
|
|
58
|
+
const focused = ref(false);
|
|
59
|
+
const isMultipleInput = computed(() => {
|
|
60
|
+
return Array.isArray(model.value);
|
|
61
|
+
});
|
|
62
|
+
const multipleInputIndex = computed(() => {
|
|
63
|
+
if (!isMultipleInput.value) return -1;
|
|
64
|
+
return model.value.findIndex(item => item === props.value);
|
|
65
|
+
});
|
|
66
|
+
const classes = computed(() => {
|
|
86
67
|
return {
|
|
87
|
-
'y-switch--
|
|
88
|
-
'y-switch--
|
|
89
|
-
'y-switch--
|
|
90
|
-
'y-switch--
|
|
91
|
-
'y-switch--
|
|
68
|
+
'y-switch--active': checked.value,
|
|
69
|
+
'y-switch--focused': focused.value,
|
|
70
|
+
'y-switch--disabled': !!props.disabled,
|
|
71
|
+
'y-switch--loading': !!props.loading,
|
|
72
|
+
'y-switch--stick-out': !!props.stickOut
|
|
92
73
|
};
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
74
|
+
});
|
|
75
|
+
watch(model, () => {
|
|
76
|
+
inputByProp();
|
|
77
|
+
}, {
|
|
78
|
+
immediate: true
|
|
79
|
+
});
|
|
80
|
+
function inputByProp() {
|
|
81
|
+
const modelValue = model.value;
|
|
82
|
+
if (Array.isArray(modelValue)) {
|
|
83
|
+
const found = modelValue.find(item => {
|
|
84
|
+
return item === props.value;
|
|
100
85
|
});
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
this.innerValue = false;
|
|
105
|
-
}
|
|
106
|
-
} else if (typeof this.input === 'boolean') {
|
|
107
|
-
this.innerValue = this.input;
|
|
86
|
+
checked.value = found !== undefined;
|
|
87
|
+
} else if (typeof modelValue === 'boolean') {
|
|
88
|
+
checked.value = modelValue;
|
|
108
89
|
}
|
|
109
|
-
}
|
|
110
|
-
changeMultipleInput(
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
90
|
+
}
|
|
91
|
+
function changeMultipleInput(to) {
|
|
92
|
+
const modelValue = model.value;
|
|
93
|
+
if (Array.isArray(modelValue)) {
|
|
94
|
+
const multipleInput = modelValue.slice();
|
|
95
|
+
if (to && props.max !== undefined && multipleInput.length >= props.max) {
|
|
96
|
+
emit('overmax');
|
|
97
|
+
nextChange(false, multipleInput);
|
|
116
98
|
return;
|
|
117
99
|
}
|
|
118
|
-
if (
|
|
119
|
-
multipleInput.push(
|
|
120
|
-
} else if (
|
|
121
|
-
multipleInput.splice(
|
|
100
|
+
if (to && multipleInputIndex.value < 0) {
|
|
101
|
+
multipleInput.push(props.value);
|
|
102
|
+
} else if (multipleInputIndex.value > -1) {
|
|
103
|
+
multipleInput.splice(multipleInputIndex.value, 1);
|
|
122
104
|
}
|
|
123
|
-
|
|
105
|
+
emit('change', multipleInput);
|
|
124
106
|
}
|
|
125
|
-
}
|
|
126
|
-
nextChange(
|
|
127
|
-
|
|
128
|
-
|
|
107
|
+
}
|
|
108
|
+
function nextChange(to, value) {
|
|
109
|
+
nextTick(() => {
|
|
110
|
+
checked.value = to;
|
|
129
111
|
});
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
checked
|
|
148
|
-
} = $checkbox;
|
|
149
|
-
$event.stopImmediatePropagation();
|
|
150
|
-
this.changeInput(checked, $event);
|
|
151
|
-
},
|
|
152
|
-
changeInput(checked, event) {
|
|
153
|
-
this.innerValue = checked;
|
|
154
|
-
if (this.isMultipleInput) {
|
|
155
|
-
this.changeMultipleInput(checked);
|
|
112
|
+
}
|
|
113
|
+
function onFocus(e) {
|
|
114
|
+
focused.value = true;
|
|
115
|
+
emit('focus', e);
|
|
116
|
+
}
|
|
117
|
+
function onBlur(e) {
|
|
118
|
+
focused.value = false;
|
|
119
|
+
emit('blur', e);
|
|
120
|
+
}
|
|
121
|
+
function onClick($event) {
|
|
122
|
+
if (props.disabled || props.loading) return;
|
|
123
|
+
changeInput(!checked.value, $event);
|
|
124
|
+
}
|
|
125
|
+
function changeInput(to, event) {
|
|
126
|
+
checked.value = to;
|
|
127
|
+
if (isMultipleInput.value) {
|
|
128
|
+
changeMultipleInput(to);
|
|
156
129
|
} else {
|
|
157
|
-
|
|
130
|
+
model.value = to;
|
|
131
|
+
emit('change', to);
|
|
158
132
|
}
|
|
159
133
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
input() {
|
|
163
|
-
this.inputByValue();
|
|
134
|
+
function onKeydown($event) {
|
|
135
|
+
emit('keydown', $event);
|
|
164
136
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
"
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
"
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
"
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
"
|
|
202
|
-
|
|
203
|
-
"
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
}
|
|
210
|
-
"class": "y-switch__state"
|
|
211
|
-
}, [_createVNode("span", {
|
|
212
|
-
"class": "y-switch__state-label y-switch__state-label--on"
|
|
213
|
-
}, {
|
|
214
|
-
labelOn
|
|
215
|
-
}), _createVNode("span", {
|
|
216
|
-
"class": "y-switch__state-label y-switch__state-label--off"
|
|
217
|
-
}, {
|
|
218
|
-
labelOff
|
|
219
|
-
})])]), _createVNode("div", {
|
|
220
|
-
"class": "y-switch__thumb"
|
|
221
|
-
}, [loading && _createVNode("div", {
|
|
222
|
-
"class": "y-switch__spinner"
|
|
223
|
-
}, null)])]), $slots.label && _createVNode("label", {
|
|
224
|
-
"for": inputId,
|
|
225
|
-
"class": "y-switch__label"
|
|
226
|
-
}, [$slots.label?.(), _createVNode("input", {
|
|
227
|
-
"hidden": true
|
|
228
|
-
}, null)])])]);
|
|
137
|
+
useRender(() => {
|
|
138
|
+
const trackStyles = {
|
|
139
|
+
backgroundColor: props.color
|
|
140
|
+
};
|
|
141
|
+
return _createVNode("div", {
|
|
142
|
+
"class": {
|
|
143
|
+
'y-switch': true,
|
|
144
|
+
...classes.value
|
|
145
|
+
}
|
|
146
|
+
}, [_createVNode("div", {
|
|
147
|
+
"class": "y-switch__slot"
|
|
148
|
+
}, [_createVNode("div", {
|
|
149
|
+
"class": "y-switch__input",
|
|
150
|
+
"onClick": withModifiers(onClick, ['exact']),
|
|
151
|
+
"onKeydown": onKeydown
|
|
152
|
+
}, [_createVNode("input", {
|
|
153
|
+
"ref": input$,
|
|
154
|
+
"id": inputId,
|
|
155
|
+
"aria-checked": checked.value,
|
|
156
|
+
"type": "checkbox",
|
|
157
|
+
"role": "switch",
|
|
158
|
+
"onFocus": onFocus,
|
|
159
|
+
"onBlur": onBlur,
|
|
160
|
+
"disabled": props.disabled,
|
|
161
|
+
"checked": checked.value
|
|
162
|
+
}, null), _createVNode("div", {
|
|
163
|
+
"class": "y-switch__track",
|
|
164
|
+
"style": trackStyles
|
|
165
|
+
}, [props.stateLabel && _createVNode("div", {
|
|
166
|
+
"class": "y-switch__state"
|
|
167
|
+
}, [_createVNode("span", {
|
|
168
|
+
"class": "y-switch__state-label y-switch__state-label--on"
|
|
169
|
+
}, [props.labelOn]), _createVNode("span", {
|
|
170
|
+
"class": "y-switch__state-label y-switch__state-label--off"
|
|
171
|
+
}, [props.labelOff])])]), _createVNode("div", {
|
|
172
|
+
"class": "y-switch__thumb"
|
|
173
|
+
}, [props.loading && _createVNode("div", {
|
|
174
|
+
"class": "y-switch__spinner"
|
|
175
|
+
}, null)])]), slots.label && _createVNode("label", {
|
|
176
|
+
"for": inputId,
|
|
177
|
+
"class": "y-switch__label"
|
|
178
|
+
}, [slots.label?.(), _createVNode("input", {
|
|
179
|
+
"hidden": true
|
|
180
|
+
}, null)])])]);
|
|
181
|
+
});
|
|
229
182
|
}
|
|
230
183
|
});
|
|
231
184
|
//# sourceMappingURL=YSwitch.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YSwitch.mjs","names":["withModifiers","defineComponent","uidCounter","YSwitch","name","model","prop","event","props","input","type","Boolean","Array","default","value","String","Number","Object","max","loading","disabled","stickOut","stateLabel","color","labelOn","labelOff","data","innerValue","counterId","focused","created","iid","toString","isArray","inputByValue","computed","isMultipleInput","multipleInputIndex","findIndex","inp","inputId","id","trackStyles","backgroundColor","classes","methods","found","find","undefined","changeMultipleInput","checked","multipleInput","slice","length","$emit","nextChange","push","splice","$nextTick","onClick","$event","changeInput","onFocus","onBlur","onKeydown","onChange","$checkbox","target","stopImmediatePropagation","watch","render","$slots","_createVNode","label"],"sources":["../../../src/components/switch/YSwitch.tsx"],"sourcesContent":["import { type PropType, withModifiers } from 'vue';\r\n\r\nimport { defineComponent } from '@/util/component';\r\n\r\nimport './YSwitch.scss';\r\n\r\nlet uidCounter = 0;\r\n\r\nexport const YSwitch = defineComponent({\r\n name: 'YSwitch',\r\n model: {\r\n prop: 'input',\r\n event: 'change',\r\n },\r\n props: {\r\n input: {\r\n type: [Boolean, Array] as PropType<boolean | any[]>,\r\n default: false,\r\n },\r\n value: {\r\n type: [String, Number, Object] as PropType<any>,\r\n },\r\n max: {\r\n type: Number,\r\n },\r\n loading: {\r\n type: Boolean,\r\n },\r\n disabled: {\r\n type: Boolean,\r\n },\r\n stickOut: {\r\n type: Boolean,\r\n },\r\n stateLabel: {\r\n type: Boolean,\r\n },\r\n color: {\r\n type: String,\r\n },\r\n labelOn: {\r\n type: String,\r\n default: 'ON',\r\n },\r\n labelOff: {\r\n type: String,\r\n default: 'OFF',\r\n },\r\n },\r\n data() {\r\n return {\r\n innerValue: false,\r\n counterId: '',\r\n focused: false,\r\n };\r\n },\r\n created() {\r\n const iid = uidCounter.toString();\r\n uidCounter += 1;\r\n this.counterId = iid;\r\n if (Array.isArray(this.input)) {\r\n this.inputByValue();\r\n } else {\r\n this.innerValue = this.input;\r\n }\r\n },\r\n computed: {\r\n isMultipleInput() {\r\n return Array.isArray(this.input);\r\n },\r\n multipleInputIndex() {\r\n if (!Array.isArray(this.input)) {\r\n return -1;\r\n }\r\n return this.input.findIndex((inp) => {\r\n return inp === this.value;\r\n });\r\n },\r\n inputId() {\r\n const id = this.counterId;\r\n return `y-switch--${id}`;\r\n },\r\n trackStyles() {\r\n return {\r\n backgroundColor: this.color,\r\n };\r\n },\r\n classes() {\r\n return {\r\n 'y-switch--disabled': this.disabled,\r\n 'y-switch--loading': this.loading,\r\n 'y-switch--active': this.innerValue,\r\n 'y-switch--stick-out': this.stickOut,\r\n 'y-switch--focused': this.focused,\r\n };\r\n },\r\n },\r\n methods: {\r\n inputByValue() {\r\n if (Array.isArray(this.input)) {\r\n const found = this.input.find((inp: any) => {\r\n return inp === this.value;\r\n });\r\n\r\n if (found !== undefined) {\r\n this.innerValue = true;\r\n } else {\r\n this.innerValue = false;\r\n }\r\n } else if (typeof this.input === 'boolean') {\r\n this.innerValue = this.input;\r\n }\r\n },\r\n changeMultipleInput(checked: boolean) {\r\n if (Array.isArray(this.input)) {\r\n const multipleInput = this.input.slice();\r\n if (\r\n checked &&\r\n this.max !== undefined &&\r\n multipleInput.length >= this.max\r\n ) {\r\n this.$emit('overmax');\r\n this.nextChange(false, multipleInput);\r\n return;\r\n }\r\n if (checked && this.multipleInputIndex < 0) {\r\n multipleInput.push(this.value);\r\n } else if (this.multipleInputIndex > -1) {\r\n multipleInput.splice(this.multipleInputIndex, 1);\r\n }\r\n this.$emit('change', multipleInput);\r\n }\r\n },\r\n nextChange(checked: boolean, value: any) {\r\n this.$nextTick(() => {\r\n this.innerValue = checked;\r\n });\r\n },\r\n onClick($event: Event) {\r\n if (this.disabled || this.loading) return;\r\n this.changeInput(!this.innerValue, $event);\r\n },\r\n onFocus() {\r\n this.focused = true;\r\n },\r\n onBlur() {\r\n this.focused = false;\r\n },\r\n onKeydown($event: KeyboardEvent) {\r\n // nothing\r\n },\r\n onChange($event: Event) {\r\n const $checkbox = $event.target as HTMLInputElement;\r\n const { checked } = $checkbox;\r\n $event.stopImmediatePropagation();\r\n this.changeInput(checked, $event);\r\n },\r\n changeInput(checked: boolean, event?: Event) {\r\n this.innerValue = checked;\r\n if (this.isMultipleInput) {\r\n this.changeMultipleInput(checked);\r\n } else {\r\n this.$emit('change', checked);\r\n }\r\n },\r\n },\r\n watch: {\r\n input() {\r\n this.inputByValue();\r\n },\r\n },\r\n render() {\r\n const {\r\n $slots,\r\n classes,\r\n onClick,\r\n onKeydown,\r\n onFocus,\r\n onBlur,\r\n onChange,\r\n inputId,\r\n innerValue,\r\n disabled,\r\n trackStyles,\r\n stateLabel,\r\n labelOn,\r\n labelOff,\r\n loading,\r\n } = this;\r\n return (\r\n <div class={{ 'y-switch': true, ...classes }}>\r\n <div class=\"y-switch__slot\">\r\n <div\r\n class=\"y-switch__input\"\r\n onClick={withModifiers(onClick, ['exact'])}\r\n onKeydown={onKeydown}\r\n >\r\n <input\r\n id={inputId}\r\n aria-checked={innerValue}\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n onFocus={onFocus}\r\n onBlur={onBlur}\r\n onChange={onChange}\r\n disabled={disabled}\r\n checked={innerValue}\r\n ref=\"checkbox\"\r\n />\r\n <div class=\"y-switch__track\" style={trackStyles}>\r\n {stateLabel && (\r\n <div class=\"y-switch__state\">\r\n <span class=\"y-switch__state-label y-switch__state-label--on\">\r\n {{ labelOn }}\r\n </span>\r\n <span class=\"y-switch__state-label y-switch__state-label--off\">\r\n {{ labelOff }}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n <div class=\"y-switch__thumb\">\r\n {loading && <div class=\"y-switch__spinner\"></div>}\r\n </div>\r\n </div>\r\n {$slots.label && (\r\n <label for={inputId} class=\"y-switch__label\">\r\n {$slots.label?.()}\r\n <input hidden />\r\n </label>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n },\r\n});\r\n\r\nexport type YSwitch = InstanceType<typeof YSwitch>;\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"YSwitch.mjs","names":["computed","nextTick","ref","watch","withModifiers","useModelDuplex","useRender","defineComponent","getUid","propsFactory","pressYSwitchPropsOptions","modelValue","type","Boolean","Array","default","value","String","Number","Object","max","loading","disabled","stickOut","stateLabel","color","labelOn","labelOff","YSwitch","name","props","emits","setup","_ref","emit","slots","counterId","toString","inputId","input$","model","checked","focused","isMultipleInput","isArray","multipleInputIndex","findIndex","item","classes","inputByProp","immediate","found","find","undefined","changeMultipleInput","to","multipleInput","slice","length","nextChange","push","splice","onFocus","e","onBlur","onClick","$event","changeInput","event","onKeydown","trackStyles","backgroundColor","_createVNode","label"],"sources":["../../../src/components/switch/YSwitch.tsx"],"sourcesContent":["import {\n type PropType,\n computed,\n nextTick,\n ref,\n watch,\n withModifiers,\n} from 'vue';\n\nimport { useModelDuplex } from '@/composables/communication';\nimport { useRender } from '@/composables/component';\nimport { defineComponent, getUid, propsFactory } from '@/util/component';\n\nimport './YSwitch.scss';\n\nexport const pressYSwitchPropsOptions = propsFactory(\n {\n modelValue: {\n type: [Boolean, Array] as PropType<boolean | any[]>,\n default: false,\n },\n value: {\n type: [String, Number, Object] as PropType<any>,\n },\n max: {\n type: Number,\n },\n loading: {\n type: Boolean,\n },\n disabled: {\n type: Boolean,\n },\n stickOut: {\n type: Boolean,\n },\n stateLabel: {\n type: Boolean,\n },\n color: {\n type: String,\n },\n labelOn: {\n type: String,\n default: 'ON',\n },\n labelOff: {\n type: String,\n default: 'OFF',\n },\n },\n 'YSwitch',\n);\n\nexport const YSwitch = defineComponent({\n name: 'YSwitch',\n props: {\n ...pressYSwitchPropsOptions(),\n },\n emits: [\n 'update:modelValue',\n 'change',\n 'click',\n 'focus',\n 'blur',\n 'keydown',\n 'overmax',\n ],\n setup(props, { emit, slots }) {\n const counterId = (getUid() ?? '').toString();\n const inputId = `input-${counterId}`;\n const input$ = ref<HTMLInputElement>();\n const model = useModelDuplex(props);\n const checked = ref(false);\n const focused = ref(false);\n\n const isMultipleInput = computed(() => {\n return Array.isArray(model.value);\n });\n\n const multipleInputIndex = computed(() => {\n if (!isMultipleInput.value) return -1;\n return model.value.findIndex((item: any) => item === props.value);\n });\n\n const classes = computed(() => {\n return {\n 'y-switch--active': checked.value,\n 'y-switch--focused': focused.value,\n 'y-switch--disabled': !!props.disabled,\n 'y-switch--loading': !!props.loading,\n 'y-switch--stick-out': !!props.stickOut,\n };\n });\n\n watch(model, () => {\n inputByProp();\n }, { immediate: true });\n\n function inputByProp() {\n const modelValue = model.value;\n if (Array.isArray(modelValue)) {\n const found = modelValue.find((item: any) => {\n return item === props.value;\n });\n checked.value = found !== undefined;\n } else if (typeof modelValue === 'boolean') {\n checked.value = modelValue;\n }\n }\n\n function changeMultipleInput(to: boolean) {\n const modelValue = model.value;\n if (Array.isArray(modelValue)) {\n const multipleInput = modelValue.slice();\n if (\n to &&\n props.max !== undefined &&\n multipleInput.length >= props.max\n ) {\n emit('overmax');\n nextChange(false, multipleInput);\n return;\n }\n if (to && multipleInputIndex.value < 0) {\n multipleInput.push(props.value);\n } else if (multipleInputIndex.value > -1) {\n multipleInput.splice(multipleInputIndex.value, 1);\n }\n emit('change', multipleInput);\n }\n }\n\n function nextChange(to: boolean, value: any) {\n nextTick(() => {\n checked.value = to;\n });\n }\n\n function onFocus(e: FocusEvent) {\n focused.value = true;\n emit('focus', e);\n }\n\n function onBlur(e: FocusEvent) {\n focused.value = false;\n emit('blur', e);\n }\n\n function onClick($event: Event) {\n if (props.disabled || props.loading) return;\n changeInput(!checked.value, $event);\n }\n\n function changeInput(to: boolean, event?: Event) {\n checked.value = to;\n if (isMultipleInput.value) {\n changeMultipleInput(to);\n } else {\n model.value = to;\n emit('change', to);\n }\n }\n\n function onKeydown($event: KeyboardEvent) {\n emit('keydown', $event);\n }\n\n useRender(() => {\n const trackStyles = {\n backgroundColor: props.color,\n };\n\n return (\n <div class={{ 'y-switch': true, ...classes.value }}>\n <div class=\"y-switch__slot\">\n <div\n class=\"y-switch__input\"\n onClick={withModifiers(onClick, ['exact'])}\n onKeydown={onKeydown}\n >\n <input\n ref={input$}\n id={inputId}\n aria-checked={checked.value}\n type=\"checkbox\"\n role=\"switch\"\n onFocus={onFocus}\n onBlur={onBlur}\n disabled={props.disabled}\n checked={checked.value}\n />\n <div class=\"y-switch__track\" style={trackStyles}>\n {props.stateLabel && (\n <div class=\"y-switch__state\">\n <span class=\"y-switch__state-label y-switch__state-label--on\">\n {props.labelOn}\n </span>\n <span class=\"y-switch__state-label y-switch__state-label--off\">\n {props.labelOff}\n </span>\n </div>\n )}\n </div>\n <div class=\"y-switch__thumb\">\n {props.loading && <div class=\"y-switch__spinner\"></div>}\n </div>\n </div>\n {slots.label && (\n <label for={inputId} class=\"y-switch__label\">\n {slots.label?.()}\n <input hidden />\n </label>\n )}\n </div>\n </div>\n );\n });\n },\n});\n\nexport type YSwitch = InstanceType<typeof YSwitch>;\n"],"mappings":"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"}
|