yuyeon 0.2.2 → 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.
@@ -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 { defineComponent } from "../../util/component/index.mjs";
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
- let uidCounter = 0;
6
- export const YSwitch = defineComponent({
7
- name: 'YSwitch',
8
- model: {
9
- prop: 'input',
10
- event: 'change'
7
+ export const pressYSwitchPropsOptions = propsFactory({
8
+ modelValue: {
9
+ type: [Boolean, Array],
10
+ default: false
11
11
  },
12
- props: {
13
- input: {
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
- data() {
48
- return {
49
- innerValue: false,
50
- counterId: '',
51
- focused: false
52
- };
15
+ max: {
16
+ type: Number
53
17
  },
54
- created() {
55
- const iid = uidCounter.toString();
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
- computed: {
65
- isMultipleInput() {
66
- return Array.isArray(this.input);
67
- },
68
- multipleInputIndex() {
69
- if (!Array.isArray(this.input)) {
70
- return -1;
71
- }
72
- return this.input.findIndex(inp => {
73
- return inp === this.value;
74
- });
75
- },
76
- inputId() {
77
- const id = this.counterId;
78
- return `y-switch--${id}`;
79
- },
80
- trackStyles() {
81
- return {
82
- backgroundColor: this.color
83
- };
84
- },
85
- classes() {
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--disabled': this.disabled,
88
- 'y-switch--loading': this.loading,
89
- 'y-switch--active': this.innerValue,
90
- 'y-switch--stick-out': this.stickOut,
91
- 'y-switch--focused': this.focused
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
- methods: {
96
- inputByValue() {
97
- if (Array.isArray(this.input)) {
98
- const found = this.input.find(inp => {
99
- return inp === this.value;
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
- if (found !== undefined) {
102
- this.innerValue = true;
103
- } else {
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(checked) {
111
- if (Array.isArray(this.input)) {
112
- const multipleInput = this.input.slice();
113
- if (checked && this.max !== undefined && multipleInput.length >= this.max) {
114
- this.$emit('overmax');
115
- this.nextChange(false, multipleInput);
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 (checked && this.multipleInputIndex < 0) {
119
- multipleInput.push(this.value);
120
- } else if (this.multipleInputIndex > -1) {
121
- multipleInput.splice(this.multipleInputIndex, 1);
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
- this.$emit('change', multipleInput);
105
+ emit('change', multipleInput);
124
106
  }
125
- },
126
- nextChange(checked, value) {
127
- this.$nextTick(() => {
128
- this.innerValue = checked;
107
+ }
108
+ function nextChange(to, value) {
109
+ nextTick(() => {
110
+ checked.value = to;
129
111
  });
130
- },
131
- onClick($event) {
132
- if (this.disabled || this.loading) return;
133
- this.changeInput(!this.innerValue, $event);
134
- },
135
- onFocus() {
136
- this.focused = true;
137
- },
138
- onBlur() {
139
- this.focused = false;
140
- },
141
- onKeydown($event) {
142
- // nothing
143
- },
144
- onChange($event) {
145
- const $checkbox = $event.target;
146
- const {
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
- this.$emit('change', checked);
130
+ model.value = to;
131
+ emit('change', to);
158
132
  }
159
133
  }
160
- },
161
- watch: {
162
- input() {
163
- this.inputByValue();
134
+ function onKeydown($event) {
135
+ emit('keydown', $event);
164
136
  }
165
- },
166
- render() {
167
- const {
168
- $slots,
169
- classes,
170
- onClick,
171
- onKeydown,
172
- onFocus,
173
- onBlur,
174
- onChange,
175
- inputId,
176
- innerValue,
177
- disabled,
178
- trackStyles,
179
- stateLabel,
180
- labelOn,
181
- labelOff,
182
- loading
183
- } = this;
184
- return _createVNode("div", {
185
- "class": {
186
- 'y-switch': true,
187
- ...classes
188
- }
189
- }, [_createVNode("div", {
190
- "class": "y-switch__slot"
191
- }, [_createVNode("div", {
192
- "class": "y-switch__input",
193
- "onClick": withModifiers(onClick, ['exact']),
194
- "onKeydown": onKeydown
195
- }, [_createVNode("input", {
196
- "id": inputId,
197
- "aria-checked": innerValue,
198
- "type": "checkbox",
199
- "role": "switch",
200
- "onFocus": onFocus,
201
- "onBlur": onBlur,
202
- "onChange": onChange,
203
- "disabled": disabled,
204
- "checked": innerValue,
205
- "ref": "checkbox"
206
- }, null), _createVNode("div", {
207
- "class": "y-switch__track",
208
- "style": trackStyles
209
- }, [stateLabel && _createVNode("div", {
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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"}