yuyeon 0.0.18 → 0.0.20
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.mjs → yuyeon.js} +42 -35
- package/dist/{yuyeon.umd.js → yuyeon.umd.cjs} +2 -2
- package/lib/components/button/YButton.mjs +5 -2
- package/lib/components/button/YButton.mjs.map +1 -1
- package/lib/components/button/YButton.scss +4 -1
- package/lib/components/menu/YMenu.mjs +14 -4
- package/lib/components/menu/YMenu.mjs.map +1 -1
- package/lib/components/tab/YTab.mjs +17 -0
- package/lib/components/tab/YTab.mjs.map +1 -0
- package/lib/components/tab/YTabs.mjs +44 -0
- package/lib/components/tab/YTabs.mjs.map +1 -0
- package/lib/components/tab/index.mjs +3 -0
- package/lib/components/tab/index.mjs.map +1 -0
- package/lib/composables/group.mjs +194 -0
- package/lib/composables/group.mjs.map +1 -0
- package/package.json +10 -5
- package/types/components/button/YButton.d.ts +2 -2
- package/types/components/menu/YMenu.d.ts +10 -7
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { defineComponent, h, withDirectives } from 'vue';
|
|
2
2
|
import { PlateWave } from "../../directives/plate-wave/index.mjs";
|
|
3
|
+
import { isColorValue } from "../../util/color/index.mjs";
|
|
3
4
|
import { getSlot, propsFactory } from "../../util/vue-component.mjs";
|
|
4
5
|
import { YSpinnerRing } from "../loading/YSpinnerRing.mjs";
|
|
5
6
|
/**
|
|
6
7
|
* Style
|
|
7
8
|
*/
|
|
8
9
|
import "./YButton.scss";
|
|
9
|
-
import { isColorValue } from "../../util/color/index.mjs";
|
|
10
10
|
const NAME = 'y-button';
|
|
11
11
|
export const pressYButtonProps = propsFactory({
|
|
12
12
|
loading: Boolean,
|
|
@@ -90,11 +90,14 @@ export const YButton = defineComponent({
|
|
|
90
90
|
let {
|
|
91
91
|
color
|
|
92
92
|
} = this;
|
|
93
|
+
let textColor;
|
|
93
94
|
if (color && !isColorValue(color)) {
|
|
94
95
|
color = `rgba(var(--y-theme-${color}), 1)`;
|
|
96
|
+
textColor = `rgba(var(--y-theme-on-${this.color}), 1)`;
|
|
95
97
|
}
|
|
96
98
|
return {
|
|
97
|
-
[`--y-button__color`]: color
|
|
99
|
+
[`--y-button__color`]: color,
|
|
100
|
+
[`--y-button__text-color`]: textColor
|
|
98
101
|
};
|
|
99
102
|
}
|
|
100
103
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YButton.mjs","names":["defineComponent","h","withDirectives","PlateWave","getSlot","propsFactory","YSpinnerRing","
|
|
1
|
+
{"version":3,"file":"YButton.mjs","names":["defineComponent","h","withDirectives","PlateWave","isColorValue","getSlot","propsFactory","YSpinnerRing","NAME","pressYButtonProps","loading","Boolean","disabled","type","variation","String","small","icon","outlined","default","rounded","filled","text","color","noWave","YButton","name","directives","props","computed","variations","split","map","value","trim","classes","includes","styles","textColor","methods","createContent","defaultSlot","children","push","width","height","class","getClasses","onClick","e","preventDefault","render","style","undefined"],"sources":["../../../src/components/button/YButton.ts"],"sourcesContent":["import type { PropType, VNodeArrayChildren } from 'vue';\nimport { defineComponent, h, withDirectives } from 'vue';\n\nimport { PlateWave } from '../../directives/plate-wave';\nimport { isColorValue } from '../../util/color';\nimport { getSlot, propsFactory } from '../../util/vue-component';\nimport { YSpinnerRing } from '../loading/YSpinnerRing';\n\n/**\n * Style\n */\nimport './YButton.scss';\n\nconst NAME = 'y-button';\n\nexport const pressYButtonProps = propsFactory(\n {\n loading: Boolean,\n disabled: {\n type: Boolean,\n },\n //\n variation: {\n type: String as PropType<string>,\n },\n small: Boolean,\n icon: Boolean,\n outlined: {\n type: Boolean,\n default: false,\n },\n rounded: {\n type: Boolean,\n default: false,\n },\n filled: {\n type: Boolean,\n default: false,\n },\n text: {\n type: Boolean,\n },\n //\n color: {\n type: String,\n },\n noWave: {\n type: Boolean,\n default: false,\n },\n },\n 'YButton',\n);\n\nexport const YButton = defineComponent({\n name: 'YButton',\n directives: {\n PlateWave,\n },\n props: {\n ...pressYButtonProps(),\n },\n computed: {\n variations(): any[] {\n const { variation } = this;\n if (variation) {\n return variation.split(',').map((value) => {\n return value.trim();\n });\n }\n return [];\n },\n //\n classes() {\n const { variations, outlined, rounded, filled, text, small, icon } = this;\n return {\n [`${NAME}--outlined`]: variations.includes('outlined') || outlined,\n [`${NAME}--rounded`]: variations.includes('rounded') || rounded,\n [`${NAME}--filled`]: variations.includes('filled') || filled,\n [`${NAME}--text`]: variations.includes('text') || text,\n [`${NAME}--small`]: variations.includes('small') || small,\n [`${NAME}--icon`]: variations.includes('icon') || icon,\n [`${NAME}--color`]: this.color,\n [`${NAME}--loading`]: this.loading,\n [`${NAME}--disabled`]: this.disabled,\n };\n },\n styles(): Record<string, any> {\n let { color } = this;\n let textColor: string | undefined;\n if (color && !isColorValue(color)) {\n color = `rgba(var(--y-theme-${color}), 1)`;\n textColor = `rgba(var(--y-theme-on-${this.color}), 1)`;\n }\n return {\n [`--y-button__color`]: color,\n [`--y-button__text-color`]: textColor,\n };\n },\n },\n methods: {\n createContent() {\n const defaultSlot = getSlot(this, 'default');\n const children: VNodeArrayChildren = [];\n if (this.loading) {\n children.push(h(YSpinnerRing, { width: '24', height: '24' }));\n }\n children.push(defaultSlot);\n return h('span', { class: 'y-button__content' }, children);\n },\n getClasses() {\n return this.classes;\n },\n /// Events\n onClick(e: MouseEvent) {\n e.preventDefault();\n if (this.loading) {\n return;\n }\n },\n },\n render() {\n const { onClick, styles, noWave, loading } = this;\n return withDirectives(\n h(\n 'button',\n {\n class: {\n ...this.getClasses(),\n [`${NAME}`]: true,\n },\n style: styles,\n onClick,\n '^disabled': this.disabled ? true : undefined,\n },\n this.createContent(),\n ),\n [[PlateWave, !noWave && !loading]],\n );\n },\n});\n\nexport type YButton = InstanceType<typeof YButton>;\n"],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ $button-disabled-background: #d3d3d3 !default;
|
|
|
7
7
|
|
|
8
8
|
.y-button {
|
|
9
9
|
--y-button__color: var(--y-theme-primary);
|
|
10
|
+
--y-button__text-color: var(--y-theme-on-primary);
|
|
10
11
|
|
|
11
12
|
cursor: pointer;
|
|
12
13
|
display: inline-flex;
|
|
@@ -46,7 +47,7 @@ $button-disabled-background: #d3d3d3 !default;
|
|
|
46
47
|
|
|
47
48
|
&--filled {
|
|
48
49
|
background-color: var(--y-button__color);
|
|
49
|
-
color:
|
|
50
|
+
color: var(--y-button__text-color);
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
&--text {
|
|
@@ -83,6 +84,8 @@ $button-disabled-background: #d3d3d3 !default;
|
|
|
83
84
|
|
|
84
85
|
.y-spinner-ring {
|
|
85
86
|
margin-right: 0.4em;
|
|
87
|
+
width: 1em;
|
|
88
|
+
height: 1em;
|
|
86
89
|
}
|
|
87
90
|
}
|
|
88
91
|
|
|
@@ -21,8 +21,9 @@ export const YMenuPropOptions = {
|
|
|
21
21
|
type: Boolean,
|
|
22
22
|
default: true
|
|
23
23
|
},
|
|
24
|
-
|
|
25
|
-
type: Boolean
|
|
24
|
+
closeCondition: {
|
|
25
|
+
type: [Boolean, Function],
|
|
26
|
+
default: undefined
|
|
26
27
|
},
|
|
27
28
|
preventClip: {
|
|
28
29
|
type: Boolean,
|
|
@@ -33,8 +34,8 @@ export const YMenuPropOptions = {
|
|
|
33
34
|
})
|
|
34
35
|
};
|
|
35
36
|
|
|
36
|
-
/**
|
|
37
|
-
* # Component
|
|
37
|
+
/**
|
|
38
|
+
* # Component
|
|
38
39
|
*/
|
|
39
40
|
export const YMenu = defineComponent({
|
|
40
41
|
name: NAME,
|
|
@@ -90,6 +91,15 @@ export const YMenu = defineComponent({
|
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
93
|
function onComplementClick(e) {
|
|
94
|
+
if (props.closeCondition === false) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (typeof props.closeCondition === 'function') {
|
|
98
|
+
if (props.closeCondition(e) === false) {
|
|
99
|
+
active.value = false;
|
|
100
|
+
}
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
93
103
|
if (active.value) {
|
|
94
104
|
active.value = false;
|
|
95
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YMenu.mjs","names":["computed","defineComponent","ref","watch","useModelDuplex","useRender","polyTransitionPropOptions","toKebabCase","bindClasses","chooseProps","YLayer","pressYLayerProps","NAME","CLASS_NAME","YMenuPropOptions","menuClasses","type","Array","String","Object","openOnHover","Boolean","default","openOnClickBase","closeOnClick","preventClip","coordinateStrategy","YMenu","name","props","transition","emits","setup","_ref","slots","emit","expose","el$","classes","boundClasses","model","active","get","value","set","v","disabled","onMouseenter","e","onMouseleave","onClick","stopPropagation","currentActive","onComplementClick","bindHover","el","addEventListener","unbindHover","removeEventListener","baseEl","neo","old","computedContentClasses","contentClasses","_createVNode","_Fragment","_mergeProps","onAfterLeave","scrim","$event","_len","arguments","length","args","_key","base","_len2","_key2"],"sources":["../../../src/components/menu/YMenu.tsx"],"sourcesContent":["import type { PropType } from 'vue';\nimport { computed, defineComponent, ref, watch } from 'vue';\n\nimport { useModelDuplex } from '../../composables/communication';\nimport { useRender } from '../../composables/component';\nimport { pressCoordinateProps } from '../../composables/coordinate';\nimport { polyTransitionPropOptions } from '../../composables/transition';\nimport { toKebabCase } from '../../util/string';\nimport { bindClasses, chooseProps } from '../../util/vue-component';\nimport { YLayer, pressYLayerProps } from '../layer';\n\nimport './YMenu.scss';\n\nconst NAME = 'YMenu';\nconst CLASS_NAME = toKebabCase(NAME);\n\nexport const YMenuPropOptions = {\n menuClasses: {\n type: [Array, String, Object] as PropType<\n string[] | string | Record<string, any>\n >,\n },\n openOnHover: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n openOnClickBase: {\n type: Boolean as PropType<boolean>,\n default: true,\n },\n closeOnClick: {\n type: Boolean,\n },\n preventClip: {\n type: Boolean as PropType<boolean>,\n default: true,\n },\n ...pressYLayerProps({\n coordinateStrategy: 'levitation',\n }),\n};\n\n/**\n * # Component\n */\nexport const YMenu = defineComponent({\n name: NAME,\n props: {\n ...YMenuPropOptions,\n transition: {\n ...polyTransitionPropOptions.transition,\n default: 'fade',\n },\n },\n emits: ['update:modelValue', 'afterLeave'],\n setup(props, { slots, emit, expose }) {\n const el$ = ref<typeof YLayer>();\n\n const classes = computed(() => {\n const boundClasses = bindClasses(props.menuClasses);\n return {\n ...boundClasses,\n 'y-menu': true,\n };\n });\n\n const model = useModelDuplex(props);\n\n const active = computed({\n get: (): boolean => {\n return !!model.value;\n },\n set: (v: boolean) => {\n if (!(v && props.disabled)) model.value = v;\n },\n });\n\n function onMouseenter(e: MouseEvent) {\n if (props.openOnHover) {\n active.value = true;\n }\n }\n\n function onMouseleave(e: MouseEvent) {\n if (props.openOnHover) {\n active.value = false;\n }\n }\n\n function onClick(e: MouseEvent) {\n e.stopPropagation();\n if (!props.openOnClickBase) {\n return;\n }\n const currentActive = active.value;\n if (!props.disabled) {\n active.value = !currentActive;\n }\n }\n\n function onComplementClick(e: Event) {\n if (active.value) {\n active.value = false;\n }\n }\n\n function bindHover(el: HTMLElement) {\n el.addEventListener('mouseenter', onMouseenter);\n el.addEventListener('mouseleave', onMouseleave);\n }\n\n function unbindHover(el: HTMLElement) {\n el.removeEventListener('mouseenter', onMouseenter);\n el.removeEventListener('mouseleave', onMouseleave);\n }\n\n watch(\n () => el$.value?.baseEl,\n (neo, old) => {\n if (neo) {\n bindHover(neo);\n neo.addEventListener('click', onClick);\n } else if (old) {\n unbindHover(old);\n old.removeEventListener('click', onClick);\n }\n },\n );\n\n const computedContentClasses = computed<Record<string, boolean>>(() => {\n const boundClasses = bindClasses(props.contentClasses);\n return {\n ...boundClasses,\n };\n });\n\n useRender(() => {\n return (\n <>\n <YLayer\n ref={el$}\n transition={props.transition}\n onClick:complement={onComplementClick}\n onAfterLeave={() => emit('afterLeave')}\n {...{\n ...chooseProps(props, YLayer.props),\n classes: classes.value,\n scrim: false,\n contentClasses: {\n 'y-menu__content': true,\n ...computedContentClasses.value,\n },\n }}\n v-model={active.value}\n >\n {{\n default: (...args: any) => {\n return <>{slots.default?.(...args) ?? ''}</>;\n },\n base: (...args: any[]) => slots.base?.(...args),\n }}\n </YLayer>\n </>\n );\n });\n\n return {\n el$,\n classes,\n };\n },\n});\n\nexport type YMenu = InstanceType<typeof YMenu>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"YMenu.mjs","names":["computed","defineComponent","ref","watch","useModelDuplex","useRender","polyTransitionPropOptions","toKebabCase","bindClasses","chooseProps","YLayer","pressYLayerProps","NAME","CLASS_NAME","YMenuPropOptions","menuClasses","type","Array","String","Object","openOnHover","Boolean","default","openOnClickBase","closeCondition","Function","undefined","preventClip","coordinateStrategy","YMenu","name","props","transition","emits","setup","_ref","slots","emit","expose","el$","classes","boundClasses","model","active","get","value","set","v","disabled","onMouseenter","e","onMouseleave","onClick","stopPropagation","currentActive","onComplementClick","bindHover","el","addEventListener","unbindHover","removeEventListener","baseEl","neo","old","computedContentClasses","contentClasses","_createVNode","_Fragment","_mergeProps","onAfterLeave","scrim","$event","_len","arguments","length","args","_key","base","_len2","_key2"],"sources":["../../../src/components/menu/YMenu.tsx"],"sourcesContent":["import type { PropType } from 'vue';\r\nimport { computed, defineComponent, ref, watch } from 'vue';\r\n\r\nimport { useModelDuplex } from '../../composables/communication';\r\nimport { useRender } from '../../composables/component';\r\nimport { pressCoordinateProps } from '../../composables/coordinate';\r\nimport { polyTransitionPropOptions } from '../../composables/transition';\r\nimport { toKebabCase } from '../../util/string';\r\nimport { bindClasses, chooseProps } from '../../util/vue-component';\r\nimport { YLayer, pressYLayerProps } from '../layer';\r\n\r\nimport './YMenu.scss';\r\n\r\nconst NAME = 'YMenu';\r\nconst CLASS_NAME = toKebabCase(NAME);\r\n\r\nexport const YMenuPropOptions = {\r\n menuClasses: {\r\n type: [Array, String, Object] as PropType<\r\n string[] | string | Record<string, any>\r\n >,\r\n },\r\n openOnHover: {\r\n type: Boolean as PropType<boolean>,\r\n default: false,\r\n },\r\n openOnClickBase: {\r\n type: Boolean as PropType<boolean>,\r\n default: true,\r\n },\r\n closeCondition: {\r\n type: [Boolean, Function],\r\n default: undefined,\r\n },\r\n preventClip: {\r\n type: Boolean as PropType<boolean>,\r\n default: true,\r\n },\r\n ...pressYLayerProps({\r\n coordinateStrategy: 'levitation',\r\n }),\r\n};\r\n\r\n/**\r\n * # Component\r\n */\r\nexport const YMenu = defineComponent({\r\n name: NAME,\r\n props: {\r\n ...YMenuPropOptions,\r\n transition: {\r\n ...polyTransitionPropOptions.transition,\r\n default: 'fade',\r\n },\r\n },\r\n emits: ['update:modelValue', 'afterLeave'],\r\n setup(props, { slots, emit, expose }) {\r\n const el$ = ref<typeof YLayer>();\r\n\r\n const classes = computed(() => {\r\n const boundClasses = bindClasses(props.menuClasses);\r\n return {\r\n ...boundClasses,\r\n 'y-menu': true,\r\n };\r\n });\r\n\r\n const model = useModelDuplex(props);\r\n\r\n const active = computed({\r\n get: (): boolean => {\r\n return !!model.value;\r\n },\r\n set: (v: boolean) => {\r\n if (!(v && props.disabled)) model.value = v;\r\n },\r\n });\r\n\r\n function onMouseenter(e: MouseEvent) {\r\n if (props.openOnHover) {\r\n active.value = true;\r\n }\r\n }\r\n\r\n function onMouseleave(e: MouseEvent) {\r\n if (props.openOnHover) {\r\n active.value = false;\r\n }\r\n }\r\n\r\n function onClick(e: MouseEvent) {\r\n e.stopPropagation();\r\n if (!props.openOnClickBase) {\r\n return;\r\n }\r\n const currentActive = active.value;\r\n if (!props.disabled) {\r\n active.value = !currentActive;\r\n }\r\n }\r\n\r\n function onComplementClick(e: Event) {\r\n if (props.closeCondition === false) {\r\n return;\r\n }\r\n if (typeof props.closeCondition === 'function') {\r\n if (props.closeCondition(e) === false) {\r\n active.value = false;\r\n }\r\n return;\r\n }\r\n if (active.value) {\r\n active.value = false;\r\n }\r\n }\r\n\r\n function bindHover(el: HTMLElement) {\r\n el.addEventListener('mouseenter', onMouseenter);\r\n el.addEventListener('mouseleave', onMouseleave);\r\n }\r\n\r\n function unbindHover(el: HTMLElement) {\r\n el.removeEventListener('mouseenter', onMouseenter);\r\n el.removeEventListener('mouseleave', onMouseleave);\r\n }\r\n\r\n watch(\r\n () => el$.value?.baseEl,\r\n (neo, old) => {\r\n if (neo) {\r\n bindHover(neo);\r\n neo.addEventListener('click', onClick);\r\n } else if (old) {\r\n unbindHover(old);\r\n old.removeEventListener('click', onClick);\r\n }\r\n },\r\n );\r\n\r\n const computedContentClasses = computed<Record<string, boolean>>(() => {\r\n const boundClasses = bindClasses(props.contentClasses);\r\n return {\r\n ...boundClasses,\r\n };\r\n });\r\n\r\n useRender(() => {\r\n return (\r\n <>\r\n <YLayer\r\n ref={el$}\r\n transition={props.transition}\r\n onClick:complement={onComplementClick}\r\n onAfterLeave={() => emit('afterLeave')}\r\n {...{\r\n ...chooseProps(props, YLayer.props),\r\n classes: classes.value,\r\n scrim: false,\r\n contentClasses: {\r\n 'y-menu__content': true,\r\n ...computedContentClasses.value,\r\n },\r\n }}\r\n v-model={active.value}\r\n >\r\n {{\r\n default: (...args: any) => {\r\n return <>{slots.default?.(...args) ?? ''}</>;\r\n },\r\n base: (...args: any[]) => slots.base?.(...args),\r\n }}\r\n </YLayer>\r\n </>\r\n );\r\n });\r\n\r\n return {\r\n el$,\r\n classes,\r\n };\r\n },\r\n});\r\n\r\nexport type YMenu = InstanceType<typeof YMenu>;\r\n"],"mappings":";AACA,SAASA,QAAQ,EAAEC,eAAe,EAAEC,GAAG,EAAEC,KAAK,QAAQ,KAAK;AAAC,SAEnDC,cAAc;AAAA,SACdC,SAAS;AAAA,SAETC,yBAAyB;AAAA,SACzBC,WAAW;AAAA,SACXC,WAAW,EAAEC,WAAW;AAAA,SACxBC,MAAM,EAAEC,gBAAgB;AAEjC;AAEA,MAAMC,IAAI,GAAG,OAAO;AACpB,MAAMC,UAAU,GAAGN,WAAW,CAACK,IAAI,CAAC;AAEpC,OAAO,MAAME,gBAAgB,GAAG;EAC9BC,WAAW,EAAE;IACXC,IAAI,EAAE,CAACC,KAAK,EAAEC,MAAM,EAAEC,MAAM;EAG9B,CAAC;EACDC,WAAW,EAAE;IACXJ,IAAI,EAAEK,OAA4B;IAClCC,OAAO,EAAE;EACX,CAAC;EACDC,eAAe,EAAE;IACfP,IAAI,EAAEK,OAA4B;IAClCC,OAAO,EAAE;EACX,CAAC;EACDE,cAAc,EAAE;IACdR,IAAI,EAAE,CAACK,OAAO,EAAEI,QAAQ,CAAC;IACzBH,OAAO,EAAEI;EACX,CAAC;EACDC,WAAW,EAAE;IACXX,IAAI,EAAEK,OAA4B;IAClCC,OAAO,EAAE;EACX,CAAC;EACD,GAAGX,gBAAgB,CAAC;IAClBiB,kBAAkB,EAAE;EACtB,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMC,KAAK,GAAG5B,eAAe,CAAC;EACnC6B,IAAI,EAAElB,IAAI;EACVmB,KAAK,EAAE;IACL,GAAGjB,gBAAgB;IACnBkB,UAAU,EAAE;MACV,GAAG1B,yBAAyB,CAAC0B,UAAU;MACvCV,OAAO,EAAE;IACX;EACF,CAAC;EACDW,KAAK,EAAE,CAAC,mBAAmB,EAAE,YAAY,CAAC;EAC1CC,KAAKA,CAACH,KAAK,EAAAI,IAAA,EAA2B;IAAA,IAAzB;MAAEC,KAAK;MAAEC,IAAI;MAAEC;IAAO,CAAC,GAAAH,IAAA;IAClC,MAAMI,GAAG,GAAGrC,GAAG,CAAgB,CAAC;IAEhC,MAAMsC,OAAO,GAAGxC,QAAQ,CAAC,MAAM;MAC7B,MAAMyC,YAAY,GAAGjC,WAAW,CAACuB,KAAK,CAAChB,WAAW,CAAC;MACnD,OAAO;QACL,GAAG0B,YAAY;QACf,QAAQ,EAAE;MACZ,CAAC;IACH,CAAC,CAAC;IAEF,MAAMC,KAAK,GAAGtC,cAAc,CAAC2B,KAAK,CAAC;IAEnC,MAAMY,MAAM,GAAG3C,QAAQ,CAAC;MACtB4C,GAAG,EAAEA,CAAA,KAAe;QAClB,OAAO,CAAC,CAACF,KAAK,CAACG,KAAK;MACtB,CAAC;MACDC,GAAG,EAAGC,CAAU,IAAK;QACnB,IAAI,EAAEA,CAAC,IAAIhB,KAAK,CAACiB,QAAQ,CAAC,EAAEN,KAAK,CAACG,KAAK,GAAGE,CAAC;MAC7C;IACF,CAAC,CAAC;IAEF,SAASE,YAAYA,CAACC,CAAa,EAAE;MACnC,IAAInB,KAAK,CAACX,WAAW,EAAE;QACrBuB,MAAM,CAACE,KAAK,GAAG,IAAI;MACrB;IACF;IAEA,SAASM,YAAYA,CAACD,CAAa,EAAE;MACnC,IAAInB,KAAK,CAACX,WAAW,EAAE;QACrBuB,MAAM,CAACE,KAAK,GAAG,KAAK;MACtB;IACF;IAEA,SAASO,OAAOA,CAACF,CAAa,EAAE;MAC9BA,CAAC,CAACG,eAAe,CAAC,CAAC;MACnB,IAAI,CAACtB,KAAK,CAACR,eAAe,EAAE;QAC1B;MACF;MACA,MAAM+B,aAAa,GAAGX,MAAM,CAACE,KAAK;MAClC,IAAI,CAACd,KAAK,CAACiB,QAAQ,EAAE;QACnBL,MAAM,CAACE,KAAK,GAAG,CAACS,aAAa;MAC/B;IACF;IAEA,SAASC,iBAAiBA,CAACL,CAAQ,EAAE;MACnC,IAAInB,KAAK,CAACP,cAAc,KAAK,KAAK,EAAE;QAClC;MACF;MACA,IAAI,OAAOO,KAAK,CAACP,cAAc,KAAK,UAAU,EAAE;QAC9C,IAAIO,KAAK,CAACP,cAAc,CAAC0B,CAAC,CAAC,KAAK,KAAK,EAAE;UACrCP,MAAM,CAACE,KAAK,GAAG,KAAK;QACtB;QACA;MACF;MACA,IAAIF,MAAM,CAACE,KAAK,EAAE;QAChBF,MAAM,CAACE,KAAK,GAAG,KAAK;MACtB;IACF;IAEA,SAASW,SAASA,CAACC,EAAe,EAAE;MAClCA,EAAE,CAACC,gBAAgB,CAAC,YAAY,EAAET,YAAY,CAAC;MAC/CQ,EAAE,CAACC,gBAAgB,CAAC,YAAY,EAAEP,YAAY,CAAC;IACjD;IAEA,SAASQ,WAAWA,CAACF,EAAe,EAAE;MACpCA,EAAE,CAACG,mBAAmB,CAAC,YAAY,EAAEX,YAAY,CAAC;MAClDQ,EAAE,CAACG,mBAAmB,CAAC,YAAY,EAAET,YAAY,CAAC;IACpD;IAEAhD,KAAK,CACH,MAAMoC,GAAG,CAACM,KAAK,EAAEgB,MAAM,EACvB,CAACC,GAAG,EAAEC,GAAG,KAAK;MACZ,IAAID,GAAG,EAAE;QACPN,SAAS,CAACM,GAAG,CAAC;QACdA,GAAG,CAACJ,gBAAgB,CAAC,OAAO,EAAEN,OAAO,CAAC;MACxC,CAAC,MAAM,IAAIW,GAAG,EAAE;QACdJ,WAAW,CAACI,GAAG,CAAC;QAChBA,GAAG,CAACH,mBAAmB,CAAC,OAAO,EAAER,OAAO,CAAC;MAC3C;IACF,CACF,CAAC;IAED,MAAMY,sBAAsB,GAAGhE,QAAQ,CAA0B,MAAM;MACrE,MAAMyC,YAAY,GAAGjC,WAAW,CAACuB,KAAK,CAACkC,cAAc,CAAC;MACtD,OAAO;QACL,GAAGxB;MACL,CAAC;IACH,CAAC,CAAC;IAEFpC,SAAS,CAAC,MAAM;MACd,OAAA6D,YAAA,CAAAC,SAAA,SAAAD,YAAA,CAAAxD,MAAA,EAAA0D,WAAA;QAAA,OAGW7B,GAAG;QAAA,cACIR,KAAK,CAACC,UAAU;QAAA,sBACRuB,iBAAiB;QAAA,gBACvBc,CAAA,KAAMhC,IAAI,CAAC,YAAY;MAAC;QAEpC,GAAG5B,WAAW,CAACsB,KAAK,EAAErB,MAAM,CAACqB,KAAK,CAAC;QACnCS,OAAO,EAAEA,OAAO,CAACK,KAAK;QACtByB,KAAK,EAAE,KAAK;QACZL,cAAc,EAAE;UACd,iBAAiB,EAAE,IAAI;UACvB,GAAGD,sBAAsB,CAACnB;QAC5B;MAAC;QAAA,cAEMF,MAAM,CAACE,KAAK;QAAA,uBAAA0B,MAAA,IAAZ5B,MAAM,CAACE,KAAK,GAAA0B;MAAA;QAGnBjD,OAAO,EAAE,SAAAA,CAAA,EAAkB;UAAA,SAAAkD,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAdC,IAAI,OAAA1D,KAAA,CAAAuD,IAAA,GAAAI,IAAA,MAAAA,IAAA,GAAAJ,IAAA,EAAAI,IAAA;YAAJD,IAAI,CAAAC,IAAA,IAAAH,SAAA,CAAAG,IAAA;UAAA;UACf,OAAAV,YAAA,CAAAC,SAAA,SAAU/B,KAAK,CAACd,OAAO,GAAG,GAAGqD,IAAI,CAAC,IAAI,EAAE;QAC1C,CAAC;QACDE,IAAI,EAAE,SAAAA,CAAA;UAAA,SAAAC,KAAA,GAAAL,SAAA,CAAAC,MAAA,EAAIC,IAAI,OAAA1D,KAAA,CAAA6D,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;YAAJJ,IAAI,CAAAI,KAAA,IAAAN,SAAA,CAAAM,KAAA;UAAA;UAAA,OAAY3C,KAAK,CAACyC,IAAI,GAAG,GAAGF,IAAI,CAAC;QAAA;MAAA;IAKzD,CAAC,CAAC;IAEF,OAAO;MACLpC,GAAG;MACHC;IACF,CAAC;EACH;AACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createVNode as _createVNode, Fragment as _Fragment } from "vue";
|
|
2
|
+
import { defineComponent } from 'vue';
|
|
3
|
+
import { useRender } from "../../composables/component.mjs";
|
|
4
|
+
import { YButton } from "../button/index.mjs";
|
|
5
|
+
export const YTab = defineComponent({
|
|
6
|
+
name: 'YTab',
|
|
7
|
+
props: {},
|
|
8
|
+
setup() {
|
|
9
|
+
useRender(() => {
|
|
10
|
+
return _createVNode(_Fragment, null, [_createVNode(YButton, null, {
|
|
11
|
+
default: () => [_createVNode("slot", null, null)]
|
|
12
|
+
})]);
|
|
13
|
+
});
|
|
14
|
+
return {};
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=YTab.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YTab.mjs","names":["defineComponent","useRender","YButton","YTab","name","props","setup","_createVNode","_Fragment","default"],"sources":["../../../src/components/tab/YTab.tsx"],"sourcesContent":["import { defineComponent } from 'vue';\n\nimport { useRender } from '../../composables/component';\nimport { YButton } from '../button';\n\nexport const YTab = defineComponent({\n name: 'YTab',\n props: {},\n setup() {\n useRender(() => {\n return (\n <>\n <YButton>\n <slot></slot>\n </YButton>\n </>\n );\n });\n\n return {};\n },\n});\n"],"mappings":";AAAA,SAASA,eAAe,QAAQ,KAAK;AAAC,SAE7BC,SAAS;AAAA,SACTC,OAAO;AAEhB,OAAO,MAAMC,IAAI,GAAGH,eAAe,CAAC;EAClCI,IAAI,EAAE,MAAM;EACZC,KAAK,EAAE,CAAC,CAAC;EACTC,KAAKA,CAAA,EAAG;IACNL,SAAS,CAAC,MAAM;MACd,OAAAM,YAAA,CAAAC,SAAA,SAAAD,YAAA,CAAAL,OAAA;QAAAO,OAAA,EAAAA,CAAA,MAAAF,YAAA;MAAA;IAOF,CAAC,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createVNode as _createVNode } from "vue";
|
|
2
|
+
import { defineComponent } from 'vue';
|
|
3
|
+
import { useRender } from "../../composables/component.mjs";
|
|
4
|
+
import { useResizeObserver } from "../../composables/resize-observer.mjs";
|
|
5
|
+
import { propsFactory } from "../../util/vue-component.mjs";
|
|
6
|
+
export const pressYTabsPropOptions = propsFactory({}, 'YTabs');
|
|
7
|
+
export const YTabs = defineComponent({
|
|
8
|
+
name: 'YTabs',
|
|
9
|
+
props: {
|
|
10
|
+
tag: {
|
|
11
|
+
type: String,
|
|
12
|
+
default: 'div'
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
setup(props, _ref) {
|
|
16
|
+
let {
|
|
17
|
+
slots
|
|
18
|
+
} = _ref;
|
|
19
|
+
const {
|
|
20
|
+
resizeObservedRef: container$,
|
|
21
|
+
contentRect: containerRect
|
|
22
|
+
} = useResizeObserver();
|
|
23
|
+
const {
|
|
24
|
+
resizeObservedRef: content$,
|
|
25
|
+
contentRect
|
|
26
|
+
} = useResizeObserver();
|
|
27
|
+
useRender(() => {
|
|
28
|
+
return _createVNode(props.tag, {
|
|
29
|
+
"class": ['y-tabs']
|
|
30
|
+
}, {
|
|
31
|
+
default: () => [_createVNode("div", {
|
|
32
|
+
"key": "container",
|
|
33
|
+
"ref": container$,
|
|
34
|
+
"class": ['y-tabs__container']
|
|
35
|
+
}, [_createVNode("div", {
|
|
36
|
+
"key": "content",
|
|
37
|
+
"ref": content$
|
|
38
|
+
}, [slots.default?.()])])]
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
return {};
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=YTabs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YTabs.mjs","names":["defineComponent","useRender","useResizeObserver","propsFactory","pressYTabsPropOptions","YTabs","name","props","tag","type","String","default","setup","_ref","slots","resizeObservedRef","container$","contentRect","containerRect","content$","_createVNode"],"sources":["../../../src/components/tab/YTabs.tsx"],"sourcesContent":["import { PropType, defineComponent, ref } from 'vue';\n\nimport { useRender } from '../../composables/component';\nimport { useResizeObserver } from '../../composables/resize-observer';\nimport { propsFactory } from '../../util/vue-component';\n\nexport const pressYTabsPropOptions = propsFactory({}, 'YTabs');\n\nexport const YTabs = defineComponent({\n name: 'YTabs',\n props: {\n tag: {\n type: String as PropType<'div' | 'nav' | 'ol' | 'ul'>,\n default: 'div',\n },\n },\n setup(props, { slots }) {\n const { resizeObservedRef: container$, contentRect: containerRect } =\n useResizeObserver();\n const { resizeObservedRef: content$, contentRect } = useResizeObserver();\n\n useRender(() => {\n return (\n <props.tag class={['y-tabs']}>\n <div\n key=\"container\"\n ref={container$}\n class={['y-tabs__container']}\n >\n <div key=\"content\" ref={content$}>\n {slots.default?.()}\n </div>\n </div>\n </props.tag>\n );\n });\n\n return {};\n },\n});\n"],"mappings":";AAAA,SAAmBA,eAAe,QAAa,KAAK;AAAC,SAE5CC,SAAS;AAAA,SACTC,iBAAiB;AAAA,SACjBC,YAAY;AAErB,OAAO,MAAMC,qBAAqB,GAAGD,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AAE9D,OAAO,MAAME,KAAK,GAAGL,eAAe,CAAC;EACnCM,IAAI,EAAE,OAAO;EACbC,KAAK,EAAE;IACLC,GAAG,EAAE;MACHC,IAAI,EAAEC,MAA+C;MACrDC,OAAO,EAAE;IACX;EACF,CAAC;EACDC,KAAKA,CAACL,KAAK,EAAAM,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACpB,MAAM;MAAEE,iBAAiB,EAAEC,UAAU;MAAEC,WAAW,EAAEC;IAAc,CAAC,GACjEhB,iBAAiB,CAAC,CAAC;IACrB,MAAM;MAAEa,iBAAiB,EAAEI,QAAQ;MAAEF;IAAY,CAAC,GAAGf,iBAAiB,CAAC,CAAC;IAExED,SAAS,CAAC,MAAM;MACd,OAAAmB,YAAA,CAAAb,KAAA,CAAAC,GAAA;QAAA,SACoB,CAAC,QAAQ;MAAC;QAAAG,OAAA,EAAAA,CAAA,MAAAS,YAAA;UAAA,OAEpB,WAAW;UAAA,OACVJ,UAAU;UAAA,SACR,CAAC,mBAAmB;QAAC,IAAAI,YAAA;UAAA,OAEnB,SAAS;UAAA,OAAMD;QAAQ,IAC7BL,KAAK,CAACH,OAAO,GAAG,CAAC;MAAA;IAK5B,CAAC,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/components/tab/index.ts"],"sourcesContent":["export * from './YTabs';\nexport * from './YTab';\n"],"mappings":""}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { computed, getCurrentInstance, inject, onBeforeUnmount, onMounted, provide, reactive, toRef, watch } from 'vue';
|
|
2
|
+
import { wrapInArray } from "../util/array.mjs";
|
|
3
|
+
import { deepEqual } from "../util/common.mjs";
|
|
4
|
+
import { getUid, propsFactory } from "../util/vue-component.mjs";
|
|
5
|
+
import { useModelDuplex } from "./communication.mjs";
|
|
6
|
+
export const pressGroupPropsOptions = propsFactory({
|
|
7
|
+
modelValue: {
|
|
8
|
+
type: null,
|
|
9
|
+
default: undefined
|
|
10
|
+
},
|
|
11
|
+
multiple: Boolean,
|
|
12
|
+
mandatory: [Boolean, String],
|
|
13
|
+
max: Number,
|
|
14
|
+
selectedClass: String,
|
|
15
|
+
disabled: Boolean
|
|
16
|
+
}, 'group');
|
|
17
|
+
export const pressGroupItemPropsOptions = propsFactory({
|
|
18
|
+
value: null,
|
|
19
|
+
disabled: Boolean,
|
|
20
|
+
selectedClass: String
|
|
21
|
+
}, 'group-item');
|
|
22
|
+
export function useGroupItem(props, injectKey) {
|
|
23
|
+
let required = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
24
|
+
const vm = getCurrentInstance();
|
|
25
|
+
if (!vm) {
|
|
26
|
+
throw new Error('useGroupItem composable must be used inside a component setup function');
|
|
27
|
+
}
|
|
28
|
+
const id = getUid();
|
|
29
|
+
provide(Symbol.for(`${injectKey.description}:id`), id);
|
|
30
|
+
const group = inject(injectKey, null);
|
|
31
|
+
if (!group) {
|
|
32
|
+
if (!required) return group;
|
|
33
|
+
throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`);
|
|
34
|
+
}
|
|
35
|
+
const value = toRef(props, 'value');
|
|
36
|
+
const disabled = computed(() => !!(group.disabled.value || props.disabled));
|
|
37
|
+
group.register({
|
|
38
|
+
id,
|
|
39
|
+
value,
|
|
40
|
+
disabled
|
|
41
|
+
}, vm);
|
|
42
|
+
onBeforeUnmount(() => {
|
|
43
|
+
group.unregister(id);
|
|
44
|
+
});
|
|
45
|
+
const isSelected = computed(() => {
|
|
46
|
+
return group.isSelected(id);
|
|
47
|
+
});
|
|
48
|
+
const selectedClass = computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass]);
|
|
49
|
+
watch(isSelected, value => {
|
|
50
|
+
vm.emit('group:selected', {
|
|
51
|
+
value
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
return {
|
|
55
|
+
id,
|
|
56
|
+
isSelected,
|
|
57
|
+
toggle: () => group.select(id, !isSelected.value),
|
|
58
|
+
select: value => group.select(id, value),
|
|
59
|
+
selectedClass,
|
|
60
|
+
value,
|
|
61
|
+
disabled,
|
|
62
|
+
group
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export function useGroup(props, injectKey) {
|
|
66
|
+
let isUnmounted = false;
|
|
67
|
+
const items = reactive([]);
|
|
68
|
+
const selected = useModelDuplex(props, 'modelValue', [], v => {
|
|
69
|
+
if (v == null) return [];
|
|
70
|
+
return getIds(items, wrapInArray(v));
|
|
71
|
+
}, v => {
|
|
72
|
+
const arr = getValues(items, v);
|
|
73
|
+
return props.multiple ? arr : arr[0];
|
|
74
|
+
});
|
|
75
|
+
const groupVm = getCurrentInstance();
|
|
76
|
+
function register(item, vm) {
|
|
77
|
+
// Is there a better way to fix this typing?
|
|
78
|
+
const unwrapped = item;
|
|
79
|
+
const key = Symbol.for(`${injectKey.description}:id`);
|
|
80
|
+
const children = findChildrenWithProvide(key, groupVm?.vnode);
|
|
81
|
+
const index = children.indexOf(vm);
|
|
82
|
+
if (index > -1) {
|
|
83
|
+
items.splice(index, 0, unwrapped);
|
|
84
|
+
} else {
|
|
85
|
+
items.push(unwrapped);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function unregister(id) {
|
|
89
|
+
if (isUnmounted) return;
|
|
90
|
+
forceMandatoryValue();
|
|
91
|
+
const index = items.findIndex(item => item.id === id);
|
|
92
|
+
items.splice(index, 1);
|
|
93
|
+
}
|
|
94
|
+
function forceMandatoryValue() {
|
|
95
|
+
const item = items.find(item => !item.disabled);
|
|
96
|
+
if (item && props.mandatory === 'force' && !selected.value.length) {
|
|
97
|
+
selected.value = [item.id];
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
onMounted(() => {
|
|
101
|
+
forceMandatoryValue();
|
|
102
|
+
});
|
|
103
|
+
onBeforeUnmount(() => {
|
|
104
|
+
isUnmounted = true;
|
|
105
|
+
});
|
|
106
|
+
function select(id, value) {
|
|
107
|
+
const item = items.find(item => item.id === id);
|
|
108
|
+
if (value && item?.disabled) return;
|
|
109
|
+
if (props.multiple) {
|
|
110
|
+
const internalValue = selected.value.slice();
|
|
111
|
+
const index = internalValue.findIndex(v => v === id);
|
|
112
|
+
const isSelected = ~index;
|
|
113
|
+
value = value ?? !isSelected;
|
|
114
|
+
|
|
115
|
+
// We can't remove value if group is
|
|
116
|
+
// mandatory, value already exists,
|
|
117
|
+
// and it is the only value
|
|
118
|
+
if (isSelected && props.mandatory && internalValue.length <= 1) return;
|
|
119
|
+
|
|
120
|
+
// We can't add value if it would
|
|
121
|
+
// cause max limit to be exceeded
|
|
122
|
+
if (!isSelected && props.max != null && internalValue.length + 1 > props.max) return;
|
|
123
|
+
if (index < 0 && value) internalValue.push(id);else if (index >= 0 && !value) internalValue.splice(index, 1);
|
|
124
|
+
selected.value = internalValue;
|
|
125
|
+
} else {
|
|
126
|
+
const isSelected = selected.value.includes(id);
|
|
127
|
+
if (props.mandatory && isSelected) return;
|
|
128
|
+
selected.value = value ?? !isSelected ? [id] : [];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function step(offset) {
|
|
132
|
+
if (props.multiple) {}
|
|
133
|
+
if (!selected.value.length) {
|
|
134
|
+
const item = items.find(item => !item.disabled);
|
|
135
|
+
item && (selected.value = [item.id]);
|
|
136
|
+
} else {
|
|
137
|
+
const currentId = selected.value[0];
|
|
138
|
+
const currentIndex = items.findIndex(i => i.id === currentId);
|
|
139
|
+
let newIndex = (currentIndex + offset) % items.length;
|
|
140
|
+
let newItem = items[newIndex];
|
|
141
|
+
while (newItem.disabled && newIndex !== currentIndex) {
|
|
142
|
+
newIndex = (newIndex + offset) % items.length;
|
|
143
|
+
newItem = items[newIndex];
|
|
144
|
+
}
|
|
145
|
+
if (newItem.disabled) return;
|
|
146
|
+
selected.value = [items[newIndex].id];
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const state = {
|
|
150
|
+
register,
|
|
151
|
+
unregister,
|
|
152
|
+
selected,
|
|
153
|
+
select,
|
|
154
|
+
disabled: toRef(props, 'disabled'),
|
|
155
|
+
prev: () => step(items.length - 1),
|
|
156
|
+
next: () => step(1),
|
|
157
|
+
isSelected: id => selected.value.includes(id),
|
|
158
|
+
selectedClass: computed(() => props.selectedClass),
|
|
159
|
+
items: computed(() => items),
|
|
160
|
+
getItemIndex: value => getItemIndex(items, value)
|
|
161
|
+
};
|
|
162
|
+
provide(injectKey, state);
|
|
163
|
+
return state;
|
|
164
|
+
}
|
|
165
|
+
function getItemIndex(items, value) {
|
|
166
|
+
const ids = getIds(items, [value]);
|
|
167
|
+
if (!ids.length) return -1;
|
|
168
|
+
return items.findIndex(item => item.id === ids[0]);
|
|
169
|
+
}
|
|
170
|
+
function getIds(items, modelValue) {
|
|
171
|
+
const ids = [];
|
|
172
|
+
modelValue.forEach(value => {
|
|
173
|
+
const item = items.find(item => deepEqual(value, item.value));
|
|
174
|
+
const itemByIndex = items[value];
|
|
175
|
+
if (item?.value != null) {
|
|
176
|
+
ids.push(item.id);
|
|
177
|
+
} else if (itemByIndex != null) {
|
|
178
|
+
ids.push(itemByIndex.id);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
return ids;
|
|
182
|
+
}
|
|
183
|
+
function getValues(items, ids) {
|
|
184
|
+
const values = [];
|
|
185
|
+
ids.forEach(id => {
|
|
186
|
+
const itemIndex = items.findIndex(item => item.id === id);
|
|
187
|
+
if (~itemIndex) {
|
|
188
|
+
const item = items[itemIndex];
|
|
189
|
+
values.push(item.value != null ? item.value : itemIndex);
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
return values;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=group.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group.mjs","names":["computed","getCurrentInstance","inject","onBeforeUnmount","onMounted","provide","reactive","toRef","watch","wrapInArray","deepEqual","getUid","propsFactory","useModelDuplex","pressGroupPropsOptions","modelValue","type","default","undefined","multiple","Boolean","mandatory","String","max","Number","selectedClass","disabled","pressGroupItemPropsOptions","value","useGroupItem","props","injectKey","required","arguments","length","vm","Error","id","Symbol","for","description","group","register","unregister","isSelected","emit","toggle","select","useGroup","isUnmounted","items","selected","v","getIds","arr","getValues","groupVm","item","unwrapped","key","children","findChildrenWithProvide","vnode","index","indexOf","splice","push","forceMandatoryValue","findIndex","find","internalValue","slice","includes","step","offset","currentId","currentIndex","i","newIndex","newItem","state","prev","next","getItemIndex","ids","forEach","itemByIndex","values","itemIndex"],"sources":["../../src/composables/group.ts"],"sourcesContent":["import type {\n ComponentInternalInstance,\n ComputedRef,\n ExtractPropTypes,\n InjectionKey,\n PropType,\n Ref,\n UnwrapRef,\n} from 'vue';\nimport {\n computed,\n getCurrentInstance,\n inject,\n onBeforeUnmount,\n onMounted,\n provide,\n reactive,\n toRef,\n watch,\n} from 'vue';\n\nimport { wrapInArray } from '../util/array';\nimport { deepEqual } from '../util/common';\nimport { getUid, propsFactory } from '../util/vue-component';\nimport { useModelDuplex } from './communication';\n\nexport interface GroupItem {\n id: number;\n value: Ref<unknown>;\n disabled: Ref<boolean | undefined>;\n}\n\nexport interface GroupProps {\n disabled: boolean;\n modelValue: unknown;\n multiple?: boolean;\n mandatory?: boolean | 'force' | undefined;\n max?: number | undefined;\n selectedClass: string | undefined;\n 'onUpdate:modelValue': ((value: unknown) => void) | undefined;\n}\n\nexport interface GroupProvide {\n register: (item: GroupItem, instance: ComponentInternalInstance) => void;\n unregister: (id: number) => void;\n select: (id: number, value: boolean) => void;\n selected: Ref<Readonly<number[]>>;\n selectedClass: Ref<string | undefined>;\n isSelected: (id: number) => boolean;\n disabled: Ref<boolean | undefined>;\n getItemIndex: (value: unknown) => number;\n prev: () => void;\n next: () => void;\n items: ComputedRef<\n { id: number; value: unknown; disabled: boolean | undefined }[]\n >;\n}\n\nexport interface GroupItemProvide {\n id: number;\n isSelected: Ref<boolean>;\n toggle: () => void;\n select: (value: boolean) => void;\n selectedClass: Ref<(string | undefined)[] | false>;\n value: Ref<unknown>;\n disabled: Ref<boolean | undefined>;\n group: GroupProvide;\n}\n\nexport const pressGroupPropsOptions = propsFactory(\n {\n modelValue: {\n type: null,\n default: undefined,\n },\n multiple: Boolean,\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n max: Number,\n selectedClass: String,\n disabled: Boolean,\n },\n 'group',\n);\n\nexport const pressGroupItemPropsOptions = propsFactory(\n {\n value: null,\n disabled: Boolean,\n selectedClass: String,\n },\n 'group-item',\n);\n\nexport interface GroupItemProps\n extends ExtractPropTypes<ReturnType<typeof pressGroupItemPropsOptions>> {\n 'onGroup:selected': ((val: { value: boolean }) => void) | undefined;\n}\n\nexport function useGroupItem(\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required?: true,\n): GroupItemProvide;\nexport function useGroupItem(\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required: false,\n): GroupItemProvide | null;\nexport function useGroupItem(\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required = true,\n): GroupItemProvide | null {\n const vm = getCurrentInstance();\n\n if (!vm) {\n throw new Error(\n 'useGroupItem composable must be used inside a component setup function',\n );\n }\n\n const id = getUid();\n\n provide(Symbol.for(`${injectKey.description}:id`), id);\n\n const group = inject(injectKey, null);\n\n if (!group) {\n if (!required) return group;\n\n throw new Error(\n `[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`,\n );\n }\n\n const value = toRef(props, 'value');\n const disabled = computed(() => !!(group.disabled.value || props.disabled));\n\n group.register(\n {\n id,\n value,\n disabled,\n },\n vm,\n );\n\n onBeforeUnmount(() => {\n group.unregister(id);\n });\n\n const isSelected = computed(() => {\n return group.isSelected(id);\n });\n\n const selectedClass = computed(\n () => isSelected.value && [group.selectedClass.value, props.selectedClass],\n );\n\n watch(isSelected, (value) => {\n vm.emit('group:selected', { value });\n });\n\n return {\n id,\n isSelected,\n toggle: () => group.select(id, !isSelected.value),\n select: (value: boolean) => group.select(id, value),\n selectedClass,\n value,\n disabled,\n group,\n };\n}\n\nexport function useGroup(\n props: GroupProps,\n injectKey: InjectionKey<GroupProvide>,\n) {\n let isUnmounted = false;\n const items = reactive<GroupItem[]>([]);\n const selected = useModelDuplex(\n props,\n 'modelValue',\n [],\n (v) => {\n if (v == null) return [];\n\n return getIds(items, wrapInArray(v));\n },\n (v) => {\n const arr = getValues(items, v);\n\n return props.multiple ? arr : arr[0];\n },\n );\n\n const groupVm = getCurrentInstance();\n\n function register(item: GroupItem, vm: ComponentInternalInstance) {\n // Is there a better way to fix this typing?\n const unwrapped = item as unknown as UnwrapRef<GroupItem>;\n\n const key = Symbol.for(`${injectKey.description}:id`);\n const children = findChildrenWithProvide(key, groupVm?.vnode);\n const index = children.indexOf(vm);\n\n if (index > -1) {\n items.splice(index, 0, unwrapped);\n } else {\n items.push(unwrapped);\n }\n }\n\n function unregister(id: number) {\n if (isUnmounted) return;\n forceMandatoryValue();\n const index = items.findIndex((item) => item.id === id);\n items.splice(index, 1);\n }\n\n function forceMandatoryValue() {\n const item = items.find((item) => !item.disabled);\n if (item && props.mandatory === 'force' && !selected.value.length) {\n selected.value = [item.id];\n }\n }\n\n onMounted(() => {\n forceMandatoryValue();\n });\n\n onBeforeUnmount(() => {\n isUnmounted = true;\n });\n\n function select(id: number, value?: boolean) {\n const item = items.find((item) => item.id === id);\n if (value && item?.disabled) return;\n\n if (props.multiple) {\n const internalValue = selected.value.slice();\n const index = internalValue.findIndex((v) => v === id);\n const isSelected = ~index;\n value = value ?? !isSelected;\n\n // We can't remove value if group is\n // mandatory, value already exists,\n // and it is the only value\n if (isSelected && props.mandatory && internalValue.length <= 1) return;\n\n // We can't add value if it would\n // cause max limit to be exceeded\n if (\n !isSelected &&\n props.max != null &&\n internalValue.length + 1 > props.max\n )\n return;\n\n if (index < 0 && value) internalValue.push(id);\n else if (index >= 0 && !value) internalValue.splice(index, 1);\n\n selected.value = internalValue;\n } else {\n const isSelected = selected.value.includes(id);\n if (props.mandatory && isSelected) return;\n\n selected.value = value ?? !isSelected ? [id] : [];\n }\n }\n\n function step(offset: number) {\n if (props.multiple) {\n }\n\n if (!selected.value.length) {\n const item = items.find((item) => !item.disabled);\n item && (selected.value = [item.id]);\n } else {\n const currentId = selected.value[0];\n const currentIndex = items.findIndex((i) => i.id === currentId);\n\n let newIndex = (currentIndex + offset) % items.length;\n let newItem = items[newIndex];\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length;\n newItem = items[newIndex];\n }\n\n if (newItem.disabled) return;\n\n selected.value = [items[newIndex].id];\n }\n }\n\n const state: GroupProvide = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(props, 'disabled'),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: number) => selected.value.includes(id),\n selectedClass: computed(() => props.selectedClass),\n items: computed(() => items),\n getItemIndex: (value: unknown) => getItemIndex(items, value),\n };\n\n provide(injectKey, state);\n\n return state;\n}\n\nfunction getItemIndex(items: UnwrapRef<GroupItem[]>, value: unknown) {\n const ids = getIds(items, [value]);\n\n if (!ids.length) return -1;\n\n return items.findIndex((item) => item.id === ids[0]);\n}\n\nfunction getIds(items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids: number[] = [];\n\n modelValue.forEach((value) => {\n const item = items.find((item) => deepEqual(value, item.value));\n const itemByIndex = items[value];\n\n if (item?.value != null) {\n ids.push(item.id);\n } else if (itemByIndex != null) {\n ids.push(itemByIndex.id);\n }\n });\n\n return ids;\n}\n\nfunction getValues(items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values: unknown[] = [];\n\n ids.forEach((id) => {\n const itemIndex = items.findIndex((item) => item.id === id);\n if (~itemIndex) {\n const item = items[itemIndex];\n values.push(item.value != null ? item.value : itemIndex);\n }\n });\n\n return values;\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yuyeon",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.20",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"UI Library",
|
|
6
6
|
"Vue"
|
|
@@ -13,15 +13,20 @@
|
|
|
13
13
|
"author": "yeonyew",
|
|
14
14
|
"license": "Apache-2.0",
|
|
15
15
|
"files": [
|
|
16
|
-
"dist",
|
|
17
|
-
"lib",
|
|
18
|
-
"types"
|
|
16
|
+
"dist/",
|
|
17
|
+
"lib/",
|
|
18
|
+
"types/"
|
|
19
19
|
],
|
|
20
|
+
"type": "module",
|
|
20
21
|
"exports": {
|
|
21
22
|
".": {
|
|
23
|
+
"types": "./types/index.d.ts",
|
|
22
24
|
"default": "./lib/index.mjs"
|
|
23
25
|
},
|
|
24
26
|
"./styles/*": "./lib/styles/*",
|
|
27
|
+
"./lib": {
|
|
28
|
+
"types": "./types/index.d.ts"
|
|
29
|
+
},
|
|
25
30
|
"./components": {
|
|
26
31
|
"types": "./types/components/index.d.ts",
|
|
27
32
|
"module": "./lib/components/index.mjs"
|
|
@@ -32,7 +37,7 @@
|
|
|
32
37
|
},
|
|
33
38
|
"main": "lib/index.mjs",
|
|
34
39
|
"module": "lib/index.mjs",
|
|
35
|
-
"types": "types",
|
|
40
|
+
"types": "types/index.d.ts",
|
|
36
41
|
"typesVersions": {
|
|
37
42
|
"*": {
|
|
38
43
|
"lib/index.mjs": [
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { PropType } from 'vue';
|
|
2
2
|
/**
|
|
3
3
|
* Style
|
|
4
4
|
*/
|
|
@@ -146,7 +146,7 @@ export declare const YButton: import("vue").DefineComponent<{
|
|
|
146
146
|
[x: string]: string | boolean | undefined;
|
|
147
147
|
};
|
|
148
148
|
onClick(e: MouseEvent): void;
|
|
149
|
-
}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<ExtractPropTypes<{
|
|
149
|
+
}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
150
150
|
loading: BooleanConstructor;
|
|
151
151
|
disabled: {
|
|
152
152
|
type: BooleanConstructor;
|
|
@@ -77,8 +77,9 @@ export declare const YMenuPropOptions: {
|
|
|
77
77
|
type: PropType<boolean>;
|
|
78
78
|
default: boolean;
|
|
79
79
|
};
|
|
80
|
-
|
|
81
|
-
type: BooleanConstructor;
|
|
80
|
+
closeCondition: {
|
|
81
|
+
type: (BooleanConstructor | FunctionConstructor)[];
|
|
82
|
+
default: undefined;
|
|
82
83
|
};
|
|
83
84
|
preventClip: {
|
|
84
85
|
type: PropType<boolean>;
|
|
@@ -166,8 +167,9 @@ export declare const YMenu: import("vue").DefineComponent<{
|
|
|
166
167
|
type: PropType<boolean>;
|
|
167
168
|
default: boolean;
|
|
168
169
|
};
|
|
169
|
-
|
|
170
|
-
type: BooleanConstructor;
|
|
170
|
+
closeCondition: {
|
|
171
|
+
type: (BooleanConstructor | FunctionConstructor)[];
|
|
172
|
+
default: undefined;
|
|
171
173
|
};
|
|
172
174
|
preventClip: {
|
|
173
175
|
type: PropType<boolean>;
|
|
@@ -1981,8 +1983,9 @@ export declare const YMenu: import("vue").DefineComponent<{
|
|
|
1981
1983
|
type: PropType<boolean>;
|
|
1982
1984
|
default: boolean;
|
|
1983
1985
|
};
|
|
1984
|
-
|
|
1985
|
-
type: BooleanConstructor;
|
|
1986
|
+
closeCondition: {
|
|
1987
|
+
type: (BooleanConstructor | FunctionConstructor)[];
|
|
1988
|
+
default: undefined;
|
|
1986
1989
|
};
|
|
1987
1990
|
preventClip: {
|
|
1988
1991
|
type: PropType<boolean>;
|
|
@@ -2005,6 +2008,6 @@ export declare const YMenu: import("vue").DefineComponent<{
|
|
|
2005
2008
|
openOnHover: boolean;
|
|
2006
2009
|
preventClip: boolean;
|
|
2007
2010
|
openOnClickBase: boolean;
|
|
2008
|
-
|
|
2011
|
+
closeCondition: boolean | Function;
|
|
2009
2012
|
}, {}>;
|
|
2010
2013
|
export type YMenu = InstanceType<typeof YMenu>;
|