yuyeon 0.0.47-rc.9 → 0.0.48
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/yuyeon.js +3068 -2971
- package/dist/yuyeon.umd.cjs +6 -6
- package/lib/components/button/YButton.mjs +3 -2
- package/lib/components/button/YButton.mjs.map +1 -1
- package/lib/components/dropdown/YDropdown.mjs +5 -1
- package/lib/components/dropdown/YDropdown.mjs.map +1 -1
- package/lib/components/field-input/YFieldInput.mjs +8 -11
- package/lib/components/field-input/YFieldInput.mjs.map +1 -1
- package/lib/components/form/YForm.mjs +53 -68
- package/lib/components/form/YForm.mjs.map +1 -1
- package/lib/components/input/YInput.mjs +22 -18
- package/lib/components/input/YInput.mjs.map +1 -1
- package/lib/components/layer/base.mjs +9 -5
- package/lib/components/layer/base.mjs.map +1 -1
- package/lib/components/table/YDataTable.mjs +5 -2
- package/lib/components/table/YDataTable.mjs.map +1 -1
- package/lib/components/table/YDataTableBody.mjs +2 -1
- package/lib/components/table/YDataTableBody.mjs.map +1 -1
- package/lib/components/table/YDataTableRow.mjs +2 -1
- package/lib/components/table/YDataTableRow.mjs.map +1 -1
- package/lib/components/table/YDataTableServer.mjs +3 -1
- package/lib/components/table/YDataTableServer.mjs.map +1 -1
- package/lib/components/table/YTable.mjs +10 -3
- package/lib/components/table/YTable.mjs.map +1 -1
- package/lib/components/table/composibles/selection.mjs +11 -2
- package/lib/components/table/composibles/selection.mjs.map +1 -1
- package/lib/components/textarea/YTextarea.mjs +2 -8
- package/lib/components/textarea/YTextarea.mjs.map +1 -1
- package/lib/composables/communication.mjs.map +1 -1
- package/lib/composables/form.mjs +100 -0
- package/lib/composables/form.mjs.map +1 -0
- package/lib/composables/validation.mjs +26 -1
- package/lib/composables/validation.mjs.map +1 -1
- package/lib/index.mjs +6 -1
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
- package/types/components/checkbox/YCheckbox.d.ts +2 -2
- package/types/components/checkbox/YInputCheckbox.d.ts +2 -2
- package/types/components/dropdown/YDropdown.d.ts +11 -2
- package/types/components/field-input/YFieldInput.d.ts +11 -7
- package/types/components/form/YForm.d.ts +32 -23
- package/types/components/input/YInput.d.ts +17 -20
- package/types/components/select/YSelect.d.ts +7 -0
- package/types/components/table/YDataTable.d.ts +29 -0
- package/types/components/table/YDataTableRow.d.ts +7 -0
- package/types/components/table/YDataTableServer.d.ts +27 -0
- package/types/components/table/YTable.d.ts +11 -2
- package/types/components/table/composibles/selection.d.ts +13 -0
- package/types/components/textarea/YTextarea.d.ts +21 -45
- package/types/composables/communication.d.ts +1 -1
- package/types/composables/form.d.ts +126 -0
- package/types/composables/validation.d.ts +6 -0
- package/types/index.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection.mjs","names":["computed","inject","provide","useModelDuplex","wrapInArray","propsFactory","pressDataTableSelectionProps","enableSelect","Boolean","selectStrategy","type","String","Object","default","modelValue","Array","singleSelectStrategy","showSelectAll","allSelected","select","_ref","items","value","Set","selectAll","_ref2","selected","pageSelectStrategy","_ref3","pageItems","_ref4","item","add","delete","_ref5","allSelectStrategy","_ref6","allItems","_ref7","_ref8","Y_DATA_TABLE_SELECTION_KEY","Symbol","for","provideSelection","props","_ref9","v","values","allSelectables","filter","selectable","pageSelectables","isSelected","every","has","isSomeSelected","some","toggleSelect","selectables","someSelected","size","data","useSelection","Error","description"],"sources":["../../../../src/components/table/composibles/selection.ts"],"sourcesContent":["import { InjectionKey, PropType, Ref, computed, inject, provide } from 'vue';\n\nimport { useModelDuplex } from '../../../composables/communication';\nimport { wrapInArray } from '../../../util/array';\nimport { propsFactory } from '../../../util/vue-component';\n\nimport { DataTableProvideSelectionData } from '../types';\nimport { DataTableItemsProps } from './items';\n\nexport interface SelectableItem {\n value: any;\n selectable: boolean;\n}\n\nexport interface DataTableSelectStrategy {\n showSelectAll: boolean;\n allSelected: (data: {\n allItems: SelectableItem[];\n pageItems: SelectableItem[];\n }) => SelectableItem[];\n select: (data: {\n items: SelectableItem[];\n value: boolean;\n selected: Set<unknown>;\n }) => Set<unknown>;\n selectAll: (data: {\n value: boolean;\n allItems: SelectableItem[];\n pageItems: SelectableItem[];\n selected: Set<unknown>;\n }) => Set<unknown>;\n}\n\nexport const pressDataTableSelectionProps = propsFactory(\n {\n enableSelect: Boolean,\n selectStrategy: {\n type: [String, Object] as PropType<'single' | 'page' | 'all'>,\n default: 'page',\n },\n modelValue: {\n type: Array as PropType<readonly any[]>,\n default: () => [],\n },\n },\n 'YDataTable--selection',\n);\n\ntype DataTableSelectionProps = Pick<DataTableItemsProps, 'itemKey'> & {\n modelValue: readonly any[];\n selectStrategy: 'single' | 'page' | 'all';\n 'onUpdate:modelValue': ((value: any[]) => void) | undefined;\n};\n\nconst singleSelectStrategy: DataTableSelectStrategy = {\n showSelectAll: false,\n allSelected: () => [],\n select: ({ items, value }) => {\n return new Set(value ? [items[0]?.value] : []);\n },\n selectAll: ({ selected }) => selected,\n};\n\nconst pageSelectStrategy: DataTableSelectStrategy = {\n showSelectAll: true,\n allSelected: ({ pageItems }) => pageItems,\n select: ({ items, value, selected }) => {\n for (const item of items) {\n if (value) selected.add(item.value);\n else selected.delete(item.value);\n }\n\n return selected;\n },\n selectAll: ({ value, pageItems, selected }) =>\n pageSelectStrategy.select({ items: pageItems, value, selected }),\n};\n\nconst allSelectStrategy: DataTableSelectStrategy = {\n showSelectAll: true,\n allSelected: ({ allItems }) => allItems,\n select: ({ items, value, selected }) => {\n for (const item of items) {\n if (value) selected.add(item.value);\n else selected.delete(item.value);\n }\n\n return selected;\n },\n selectAll: ({ value, allItems, selected }) =>\n allSelectStrategy.select({ items: allItems, value, selected }),\n};\n\nexport const Y_DATA_TABLE_SELECTION_KEY: InjectionKey<\n ReturnType<typeof provideSelection>\n> = Symbol.for('yuyeon.data-table.selection');\n\nexport function provideSelection(\n props: DataTableSelectionProps,\n {\n allItems,\n pageItems,\n }: { allItems: Ref<SelectableItem[]>; pageItems: Ref<SelectableItem[]> },\n) {\n const selected = useModelDuplex(\n props,\n 'modelValue',\n props.modelValue,\n (v) => {\n return new Set(v);\n },\n (v) => {\n return [...v.values()];\n },\n );\n\n const allSelectables = computed(() =>\n allItems.value.filter((item) => item.selectable),\n );\n\n const pageSelectables = computed(() =>\n pageItems.value.filter((item) => item.selectable),\n );\n\n const selectStrategy = computed(() => {\n if (typeof props.selectStrategy === 'object') {\n return props.selectStrategy;\n }\n switch (props.selectStrategy) {\n case 'single':\n return singleSelectStrategy;\n case 'all':\n return allSelectStrategy;\n case 'page':\n default:\n return pageSelectStrategy;\n }\n });\n\n function isSelected(items: SelectableItem | SelectableItem[]) {\n return wrapInArray(items).every((item) => selected.value.has(item.value));\n }\n\n function isSomeSelected(items: SelectableItem | SelectableItem[]) {\n return wrapInArray(items).some((item) => selected.value.has(item.value));\n }\n\n function select(items: SelectableItem[], value: boolean) {\n selected.value = selectStrategy.value.select({\n items,\n value,\n selected: new Set(selected.value),\n });\n }\n\n function toggleSelect(item: SelectableItem) {\n select([item], !isSelected([item]));\n }\n\n function selectAll(value: boolean) {\n selected.value = selectStrategy.value.selectAll({\n value,\n allItems: allSelectables.value,\n pageItems: pageSelectables.value,\n selected: new Set(selected.value),\n });\n }\n\n const selectables = computed(() => {\n return selectStrategy.value.allSelected({\n allItems: allSelectables.value,\n pageItems: pageSelectables.value,\n });\n });\n\n const someSelected = computed(() => selected.value.size > 0);\n\n const allSelected = computed(() => {\n return isSelected(selectables.value);\n });\n\n const data: DataTableProvideSelectionData = {\n toggleSelect,\n select,\n selectAll,\n isSelected,\n isSomeSelected,\n someSelected,\n allSelected,\n showSelectAll: selectStrategy.value.showSelectAll,\n selectables,\n };\n\n provide(Y_DATA_TABLE_SELECTION_KEY, data);\n\n return data;\n}\n\nexport function useSelection() {\n const data = inject(Y_DATA_TABLE_SELECTION_KEY);\n if (!data) {\n throw new Error(`Not provided: ${Y_DATA_TABLE_SELECTION_KEY.description}`);\n }\n\n return data;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"selection.mjs","names":["computed","inject","provide","useModelDuplex","deepEqual","wrapInArray","propsFactory","pressDataTableSelectionProps","enableSelect","Boolean","selectStrategy","type","String","Object","default","modelValue","Array","valueEqual","Function","singleSelectStrategy","showSelectAll","allSelected","select","_ref","items","value","Set","selectAll","_ref2","selected","pageSelectStrategy","_ref3","pageItems","_ref4","item","add","delete","_ref5","allSelectStrategy","_ref6","allItems","_ref7","_ref8","Y_DATA_TABLE_SELECTION_KEY","Symbol","for","provideSelection","props","_ref9","v","map","find","values","allSelectables","filter","selectable","pageSelectables","isSelected","every","has","isSomeSelected","some","toggleSelect","selectables","someSelected","data","useSelection","Error","description"],"sources":["../../../../src/components/table/composibles/selection.ts"],"sourcesContent":["import { InjectionKey, PropType, Ref, computed, inject, provide } from 'vue';\n\nimport { useModelDuplex } from '../../../composables/communication';\nimport { deepEqual } from '../../../util';\nimport { wrapInArray } from '../../../util/array';\nimport { propsFactory } from '../../../util/vue-component';\nimport { DataTableProvideSelectionData } from '../types';\nimport { DataTableItemsProps } from './items';\n\nexport interface SelectableItem {\n value: any;\n selectable: boolean;\n}\n\nexport interface DataTableSelectStrategy {\n showSelectAll: boolean;\n allSelected: (data: {\n allItems: SelectableItem[];\n pageItems: SelectableItem[];\n }) => SelectableItem[];\n select: (data: {\n items: SelectableItem[];\n value: boolean;\n selected: Set<unknown>;\n }) => Set<unknown>;\n selectAll: (data: {\n value: boolean;\n allItems: SelectableItem[];\n pageItems: SelectableItem[];\n selected: Set<unknown>;\n }) => Set<unknown>;\n}\n\nexport const pressDataTableSelectionProps = propsFactory(\n {\n enableSelect: Boolean,\n selectStrategy: {\n type: [String, Object] as PropType<'single' | 'page' | 'all'>,\n default: 'page',\n },\n modelValue: {\n type: Array as PropType<readonly any[]>,\n default: () => [],\n },\n valueEqual: {\n type: Function as PropType<typeof deepEqual>,\n default: deepEqual,\n },\n },\n 'YDataTable--selection',\n);\n\ntype DataTableSelectionProps = Pick<DataTableItemsProps, 'itemKey'> & {\n modelValue: readonly any[];\n selectStrategy: 'single' | 'page' | 'all';\n 'onUpdate:modelValue': ((value: any[]) => void) | undefined;\n valueEqual: (a: any, b: any) => boolean;\n};\n\nconst singleSelectStrategy: DataTableSelectStrategy = {\n showSelectAll: false,\n allSelected: () => [],\n select: ({ items, value }) => {\n return new Set(value ? [items[0]?.value] : []);\n },\n selectAll: ({ selected }) => selected,\n};\n\nconst pageSelectStrategy: DataTableSelectStrategy = {\n showSelectAll: true,\n allSelected: ({ pageItems }) => pageItems,\n select: ({ items, value, selected }) => {\n for (const item of items) {\n if (value) selected.add(item.value);\n else selected.delete(item.value);\n }\n\n return selected;\n },\n selectAll: ({ value, pageItems, selected }) =>\n pageSelectStrategy.select({ items: pageItems, value, selected }),\n};\n\nconst allSelectStrategy: DataTableSelectStrategy = {\n showSelectAll: true,\n allSelected: ({ allItems }) => allItems,\n select: ({ items, value, selected }) => {\n for (const item of items) {\n if (value) selected.add(item.value);\n else selected.delete(item.value);\n }\n\n return selected;\n },\n selectAll: ({ value, allItems, selected }) =>\n allSelectStrategy.select({ items: allItems, value, selected }),\n};\n\nexport const Y_DATA_TABLE_SELECTION_KEY: InjectionKey<\n ReturnType<typeof provideSelection>\n> = Symbol.for('yuyeon.data-table.selection');\n\nexport function provideSelection(\n props: DataTableSelectionProps,\n {\n allItems,\n pageItems,\n }: { allItems: Ref<SelectableItem[]>; pageItems: Ref<SelectableItem[]> },\n) {\n const selected = useModelDuplex(\n props,\n 'modelValue',\n props.modelValue,\n (v) => {\n return new Set(\n wrapInArray(v).map((v) => {\n return (\n allItems.value.find((item) => props.valueEqual(v, item.value))\n ?.value ?? v\n );\n }),\n );\n },\n (v) => {\n return [...v.values()];\n },\n );\n\n const allSelectables = computed(() =>\n allItems.value.filter((item) => item.selectable),\n );\n\n const pageSelectables = computed(() =>\n pageItems.value.filter((item) => item.selectable),\n );\n\n const selectStrategy = computed(() => {\n if (typeof props.selectStrategy === 'object') {\n return props.selectStrategy;\n }\n switch (props.selectStrategy) {\n case 'single':\n return singleSelectStrategy;\n case 'all':\n return allSelectStrategy;\n case 'page':\n default:\n return pageSelectStrategy;\n }\n });\n\n function isSelected(items: SelectableItem | SelectableItem[]) {\n return wrapInArray(items).every((item) => selected.value.has(item.value));\n }\n\n function isSomeSelected(items: SelectableItem | SelectableItem[]) {\n return wrapInArray(items).some((item) => selected.value.has(item.value));\n }\n\n function select(items: SelectableItem[], value: boolean) {\n selected.value = selectStrategy.value.select({\n items,\n value,\n selected: new Set(selected.value),\n });\n }\n\n function toggleSelect(item: SelectableItem) {\n select([item], !isSelected([item]));\n }\n\n function selectAll(value: boolean) {\n selected.value = selectStrategy.value.selectAll({\n value,\n allItems: allSelectables.value,\n pageItems: pageSelectables.value,\n selected: new Set(selected.value),\n });\n }\n\n const selectables = computed(() => {\n return selectStrategy.value.allSelected({\n allItems: allSelectables.value,\n pageItems: pageSelectables.value,\n });\n });\n\n const someSelected = computed(() => {\n return isSomeSelected(pageSelectables.value);\n });\n\n const allSelected = computed(() => {\n return isSelected(selectables.value);\n });\n\n const data: DataTableProvideSelectionData = {\n toggleSelect,\n select,\n selectAll,\n isSelected,\n isSomeSelected,\n someSelected,\n allSelected,\n showSelectAll: selectStrategy.value.showSelectAll,\n selectables,\n };\n\n provide(Y_DATA_TABLE_SELECTION_KEY, data);\n\n return data;\n}\n\nexport function useSelection() {\n const data = inject(Y_DATA_TABLE_SELECTION_KEY);\n if (!data) {\n throw new Error(`Not provided: ${Y_DATA_TABLE_SELECTION_KEY.description}`);\n }\n\n return data;\n}\n"],"mappings":"AAAA,SAAsCA,QAAQ,EAAEC,MAAM,EAAEC,OAAO,QAAQ,KAAK;AAAC,SAEpEC,cAAc;AAAA,SACdC,SAAS;AAAA,SACTC,WAAW;AAAA,SACXC,YAAY;AA4BrB,OAAO,MAAMC,4BAA4B,GAAGD,YAAY,CACtD;EACEE,YAAY,EAAEC,OAAO;EACrBC,cAAc,EAAE;IACdC,IAAI,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAwC;IAC7DC,OAAO,EAAE;EACX,CAAC;EACDC,UAAU,EAAE;IACVJ,IAAI,EAAEK,KAAiC;IACvCF,OAAO,EAAEA,CAAA,KAAM;EACjB,CAAC;EACDG,UAAU,EAAE;IACVN,IAAI,EAAEO,QAAsC;IAC5CJ,OAAO,EAAEV;EACX;AACF,CAAC,EACD,uBACF,CAAC;AASD,MAAMe,oBAA6C,GAAG;EACpDC,aAAa,EAAE,KAAK;EACpBC,WAAW,EAAEA,CAAA,KAAM,EAAE;EACrBC,MAAM,EAAEC,IAAA,IAAsB;IAAA,IAArB;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAAF,IAAA;IACvB,OAAO,IAAIG,GAAG,CAACD,KAAK,GAAG,CAACD,KAAK,CAAC,CAAC,CAAC,EAAEC,KAAK,CAAC,GAAG,EAAE,CAAC;EAChD,CAAC;EACDE,SAAS,EAAEC,KAAA;IAAA,IAAC;MAAEC;IAAS,CAAC,GAAAD,KAAA;IAAA,OAAKC,QAAQ;EAAA;AACvC,CAAC;AAED,MAAMC,kBAA2C,GAAG;EAClDV,aAAa,EAAE,IAAI;EACnBC,WAAW,EAAEU,KAAA;IAAA,IAAC;MAAEC;IAAU,CAAC,GAAAD,KAAA;IAAA,OAAKC,SAAS;EAAA;EACzCV,MAAM,EAAEW,KAAA,IAAgC;IAAA,IAA/B;MAAET,KAAK;MAAEC,KAAK;MAAEI;IAAS,CAAC,GAAAI,KAAA;IACjC,KAAK,MAAMC,IAAI,IAAIV,KAAK,EAAE;MACxB,IAAIC,KAAK,EAAEI,QAAQ,CAACM,GAAG,CAACD,IAAI,CAACT,KAAK,CAAC,CAAC,KAC/BI,QAAQ,CAACO,MAAM,CAACF,IAAI,CAACT,KAAK,CAAC;IAClC;IAEA,OAAOI,QAAQ;EACjB,CAAC;EACDF,SAAS,EAAEU,KAAA;IAAA,IAAC;MAAEZ,KAAK;MAAEO,SAAS;MAAEH;IAAS,CAAC,GAAAQ,KAAA;IAAA,OACxCP,kBAAkB,CAACR,MAAM,CAAC;MAAEE,KAAK,EAAEQ,SAAS;MAAEP,KAAK;MAAEI;IAAS,CAAC,CAAC;EAAA;AACpE,CAAC;AAED,MAAMS,iBAA0C,GAAG;EACjDlB,aAAa,EAAE,IAAI;EACnBC,WAAW,EAAEkB,KAAA;IAAA,IAAC;MAAEC;IAAS,CAAC,GAAAD,KAAA;IAAA,OAAKC,QAAQ;EAAA;EACvClB,MAAM,EAAEmB,KAAA,IAAgC;IAAA,IAA/B;MAAEjB,KAAK;MAAEC,KAAK;MAAEI;IAAS,CAAC,GAAAY,KAAA;IACjC,KAAK,MAAMP,IAAI,IAAIV,KAAK,EAAE;MACxB,IAAIC,KAAK,EAAEI,QAAQ,CAACM,GAAG,CAACD,IAAI,CAACT,KAAK,CAAC,CAAC,KAC/BI,QAAQ,CAACO,MAAM,CAACF,IAAI,CAACT,KAAK,CAAC;IAClC;IAEA,OAAOI,QAAQ;EACjB,CAAC;EACDF,SAAS,EAAEe,KAAA;IAAA,IAAC;MAAEjB,KAAK;MAAEe,QAAQ;MAAEX;IAAS,CAAC,GAAAa,KAAA;IAAA,OACvCJ,iBAAiB,CAAChB,MAAM,CAAC;MAAEE,KAAK,EAAEgB,QAAQ;MAAEf,KAAK;MAAEI;IAAS,CAAC,CAAC;EAAA;AAClE,CAAC;AAED,OAAO,MAAMc,0BAEZ,GAAGC,MAAM,CAACC,GAAG,CAAC,6BAA6B,CAAC;AAE7C,OAAO,SAASC,gBAAgBA,CAC9BC,KAA8B,EAAAC,KAAA,EAK9B;EAAA,IAJA;IACER,QAAQ;IACRR;EACqE,CAAC,GAAAgB,KAAA;EAExE,MAAMnB,QAAQ,GAAG1B,cAAc,CAC7B4C,KAAK,EACL,YAAY,EACZA,KAAK,CAAChC,UAAU,EACfkC,CAAC,IAAK;IACL,OAAO,IAAIvB,GAAG,CACZrB,WAAW,CAAC4C,CAAC,CAAC,CAACC,GAAG,CAAED,CAAC,IAAK;MACxB,OACET,QAAQ,CAACf,KAAK,CAAC0B,IAAI,CAAEjB,IAAI,IAAKa,KAAK,CAAC9B,UAAU,CAACgC,CAAC,EAAEf,IAAI,CAACT,KAAK,CAAC,CAAC,EAC1DA,KAAK,IAAIwB,CAAC;IAElB,CAAC,CACH,CAAC;EACH,CAAC,EACAA,CAAC,IAAK;IACL,OAAO,CAAC,GAAGA,CAAC,CAACG,MAAM,CAAC,CAAC,CAAC;EACxB,CACF,CAAC;EAED,MAAMC,cAAc,GAAGrD,QAAQ,CAAC,MAC9BwC,QAAQ,CAACf,KAAK,CAAC6B,MAAM,CAAEpB,IAAI,IAAKA,IAAI,CAACqB,UAAU,CACjD,CAAC;EAED,MAAMC,eAAe,GAAGxD,QAAQ,CAAC,MAC/BgC,SAAS,CAACP,KAAK,CAAC6B,MAAM,CAAEpB,IAAI,IAAKA,IAAI,CAACqB,UAAU,CAClD,CAAC;EAED,MAAM7C,cAAc,GAAGV,QAAQ,CAAC,MAAM;IACpC,IAAI,OAAO+C,KAAK,CAACrC,cAAc,KAAK,QAAQ,EAAE;MAC5C,OAAOqC,KAAK,CAACrC,cAAc;IAC7B;IACA,QAAQqC,KAAK,CAACrC,cAAc;MAC1B,KAAK,QAAQ;QACX,OAAOS,oBAAoB;MAC7B,KAAK,KAAK;QACR,OAAOmB,iBAAiB;MAC1B,KAAK,MAAM;MACX;QACE,OAAOR,kBAAkB;IAC7B;EACF,CAAC,CAAC;EAEF,SAAS2B,UAAUA,CAACjC,KAAwC,EAAE;IAC5D,OAAOnB,WAAW,CAACmB,KAAK,CAAC,CAACkC,KAAK,CAAExB,IAAI,IAAKL,QAAQ,CAACJ,KAAK,CAACkC,GAAG,CAACzB,IAAI,CAACT,KAAK,CAAC,CAAC;EAC3E;EAEA,SAASmC,cAAcA,CAACpC,KAAwC,EAAE;IAChE,OAAOnB,WAAW,CAACmB,KAAK,CAAC,CAACqC,IAAI,CAAE3B,IAAI,IAAKL,QAAQ,CAACJ,KAAK,CAACkC,GAAG,CAACzB,IAAI,CAACT,KAAK,CAAC,CAAC;EAC1E;EAEA,SAASH,MAAMA,CAACE,KAAuB,EAAEC,KAAc,EAAE;IACvDI,QAAQ,CAACJ,KAAK,GAAGf,cAAc,CAACe,KAAK,CAACH,MAAM,CAAC;MAC3CE,KAAK;MACLC,KAAK;MACLI,QAAQ,EAAE,IAAIH,GAAG,CAACG,QAAQ,CAACJ,KAAK;IAClC,CAAC,CAAC;EACJ;EAEA,SAASqC,YAAYA,CAAC5B,IAAoB,EAAE;IAC1CZ,MAAM,CAAC,CAACY,IAAI,CAAC,EAAE,CAACuB,UAAU,CAAC,CAACvB,IAAI,CAAC,CAAC,CAAC;EACrC;EAEA,SAASP,SAASA,CAACF,KAAc,EAAE;IACjCI,QAAQ,CAACJ,KAAK,GAAGf,cAAc,CAACe,KAAK,CAACE,SAAS,CAAC;MAC9CF,KAAK;MACLe,QAAQ,EAAEa,cAAc,CAAC5B,KAAK;MAC9BO,SAAS,EAAEwB,eAAe,CAAC/B,KAAK;MAChCI,QAAQ,EAAE,IAAIH,GAAG,CAACG,QAAQ,CAACJ,KAAK;IAClC,CAAC,CAAC;EACJ;EAEA,MAAMsC,WAAW,GAAG/D,QAAQ,CAAC,MAAM;IACjC,OAAOU,cAAc,CAACe,KAAK,CAACJ,WAAW,CAAC;MACtCmB,QAAQ,EAAEa,cAAc,CAAC5B,KAAK;MAC9BO,SAAS,EAAEwB,eAAe,CAAC/B;IAC7B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,MAAMuC,YAAY,GAAGhE,QAAQ,CAAC,MAAM;IAClC,OAAO4D,cAAc,CAACJ,eAAe,CAAC/B,KAAK,CAAC;EAC9C,CAAC,CAAC;EAEF,MAAMJ,WAAW,GAAGrB,QAAQ,CAAC,MAAM;IACjC,OAAOyD,UAAU,CAACM,WAAW,CAACtC,KAAK,CAAC;EACtC,CAAC,CAAC;EAEF,MAAMwC,IAAmC,GAAG;IAC1CH,YAAY;IACZxC,MAAM;IACNK,SAAS;IACT8B,UAAU;IACVG,cAAc;IACdI,YAAY;IACZ3C,WAAW;IACXD,aAAa,EAAEV,cAAc,CAACe,KAAK,CAACL,aAAa;IACjD2C;EACF,CAAC;EAED7D,OAAO,CAACyC,0BAA0B,EAAEsB,IAAI,CAAC;EAEzC,OAAOA,IAAI;AACb;AAEA,OAAO,SAASC,YAAYA,CAAA,EAAG;EAC7B,MAAMD,IAAI,GAAGhE,MAAM,CAAC0C,0BAA0B,CAAC;EAC/C,IAAI,CAACsB,IAAI,EAAE;IACT,MAAM,IAAIE,KAAK,CAAE,iBAAgBxB,0BAA0B,CAACyB,WAAY,EAAC,CAAC;EAC5E;EAEA,OAAOH,IAAI;AACb"}
|
|
@@ -67,17 +67,11 @@ export const YTextarea = defineComponent({
|
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
function invokeValidators() {
|
|
71
|
-
//
|
|
72
|
-
}
|
|
73
70
|
function onInput(event) {
|
|
74
71
|
emit('input', event);
|
|
75
72
|
const target = event.target;
|
|
76
73
|
inValue.value = target?.value;
|
|
77
74
|
displayValue.value = target?.value;
|
|
78
|
-
if (props.whenInputValid) {
|
|
79
|
-
invokeValidators();
|
|
80
|
-
}
|
|
81
75
|
}
|
|
82
76
|
function onChange(event) {
|
|
83
77
|
emit('change', inValue.value, event);
|
|
@@ -89,7 +83,6 @@ export const YTextarea = defineComponent({
|
|
|
89
83
|
}
|
|
90
84
|
function onBlur(event) {
|
|
91
85
|
whenBlur();
|
|
92
|
-
invokeValidators();
|
|
93
86
|
emit('blur', event);
|
|
94
87
|
changeDisplay();
|
|
95
88
|
}
|
|
@@ -117,7 +110,8 @@ export const YTextarea = defineComponent({
|
|
|
117
110
|
});
|
|
118
111
|
expose({
|
|
119
112
|
el$,
|
|
120
|
-
input
|
|
113
|
+
input$,
|
|
114
|
+
validate: () => el$.value?.invokeValidators()
|
|
121
115
|
});
|
|
122
116
|
useRender(() => {
|
|
123
117
|
const yInputProps = chooseProps(props, YInput.props);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YTextarea.mjs","names":["defineComponent","getCurrentInstance","nextTick","ref","watch","useRender","useFocus","chooseProps","getUid","propsFactory","YInput","pressYInputPropsOptions","pressYTextareaPropsOptions","displayText","String","Function","whenInputValid","Boolean","Number","variation","CLASS_NAME","YTextarea","name","props","emits","v","e","input","change","focus","blur","click","keydown","keyup","slots","Object","setup","_ref","attrs","emit","expose","UID","el$","input$","inValue","displayValue","focused","whenFocus","whenBlur","onUpdateModel","value","changeDisplay","vm","undefined","text","call","invokeValidators","onInput","event","target","onChange","onFocus","onBlur","onKeydown","onKeyup","onClick","modelValue","neo","immediate","yInputProps","_createVNode","_mergeProps","$event","default","defaultProps","attrId","floating","createLabel","disabled","placeholder","label"],"sources":["../../../src/components/textarea/YTextarea.tsx"],"sourcesContent":["import {\r\n SlotsType,\r\n defineComponent,\r\n getCurrentInstance,\r\n nextTick,\r\n ref,\r\n watch,\r\n} from 'vue';\r\nimport type { PropType } from 'vue';\r\n\r\nimport { useRender } from '../../composables/component';\r\nimport { useFocus } from '../../composables/focus';\r\nimport { chooseProps, getUid, propsFactory } from '../../util';\r\nimport { YInput, pressYInputPropsOptions } from '../input';\r\n\r\nimport './YTextarea.scss';\r\n\r\nexport const pressYTextareaPropsOptions = propsFactory(\r\n {\r\n displayText: [String, Function] as PropType<\r\n string | ((value: any) => string)\r\n >,\r\n whenInputValid: [Boolean, Number] as PropType<boolean | number>,\r\n ...pressYInputPropsOptions({\r\n variation: 'filled',\r\n }),\r\n },\r\n 'YTextarea',\r\n);\r\n\r\nconst CLASS_NAME = 'y-textarea';\r\n\r\nexport const YTextarea = defineComponent({\r\n name: 'YTextarea',\r\n props: pressYTextareaPropsOptions(),\r\n emits: {\r\n 'update:modelValue': (v: any) => true,\r\n 'update:focused': (v: boolean) => true,\r\n 'mousedown:display': (e: MouseEvent) => true,\r\n input: (v: any) => true,\r\n change: (v: any, e: Event) => true,\r\n focus: (e: FocusEvent) => true,\r\n blur: (e: FocusEvent) => true,\r\n click: (e: MouseEvent) => true,\r\n keydown: (e: KeyboardEvent) => true,\r\n keyup: (e: KeyboardEvent) => true,\r\n },\r\n slots: Object as SlotsType<{\r\n default: any;\r\n label: any;\r\n 'helper-text': any;\r\n }>,\r\n setup(props, { attrs, emit, slots, expose }) {\r\n const UID = getUid();\r\n const el$ = ref<YInput>();\r\n const input$ = ref();\r\n const inValue = ref<any>('');\r\n const displayValue = ref('');\r\n const { focused, whenFocus, whenBlur } = useFocus(props, 'y-field-input');\r\n\r\n function onUpdateModel(value: any) {\r\n emit('update:modelValue', value);\r\n }\r\n\r\n function changeDisplay() {\r\n const vm = getCurrentInstance();\r\n const { displayText } = props;\r\n if (displayText !== undefined) {\r\n let text = inValue.value;\r\n if (typeof displayText === 'string') {\r\n text = displayText;\r\n }\r\n if (displayText && typeof displayText === 'function') {\r\n text = (displayText as any).call(vm, text);\r\n }\r\n nextTick(() => {\r\n displayValue.value = text as string;\r\n });\r\n }\r\n }\r\n\r\n function invokeValidators() {\r\n //\r\n }\r\n\r\n function onInput(event: Event) {\r\n emit('input', event);\r\n const target = event.target as HTMLInputElement | null;\r\n inValue.value = target?.value;\r\n displayValue.value = target?.value as string;\r\n if (props.whenInputValid) {\r\n invokeValidators();\r\n }\r\n }\r\n\r\n function onChange(event: Event) {\r\n emit('change', inValue.value, event);\r\n }\r\n\r\n function onFocus(event: FocusEvent) {\r\n whenFocus();\r\n displayValue.value = inValue.value as string;\r\n emit('focus', event);\r\n }\r\n\r\n function onBlur(event: FocusEvent) {\r\n whenBlur();\r\n invokeValidators();\r\n emit('blur', event);\r\n changeDisplay();\r\n }\r\n\r\n function onKeydown(event: KeyboardEvent) {\r\n emit('keydown', event);\r\n }\r\n\r\n function onKeyup(event: KeyboardEvent) {\r\n emit('keyup', event);\r\n }\r\n\r\n function onClick(event: MouseEvent) {\r\n emit('click', event);\r\n }\r\n\r\n watch(\r\n () => props.modelValue,\r\n (neo: any) => {\r\n inValue.value = neo;\r\n displayValue.value = neo;\r\n },\r\n {\r\n immediate: true,\r\n },\r\n );\r\n\r\n watch(inValue, (neo: string) => {\r\n if (!focused.value) {\r\n changeDisplay();\r\n } else {\r\n displayValue.value = neo;\r\n }\r\n });\r\n\r\n expose({\r\n el$,\r\n input$,\r\n });\r\n\r\n useRender(() => {\r\n const yInputProps = chooseProps(props, YInput.props);\r\n return (\r\n <YInput\r\n class={[CLASS_NAME]}\r\n {...yInputProps}\r\n modelValue={inValue.value}\r\n onUpdate:modelValue={onUpdateModel}\r\n focused={focused.value}\r\n onClick={onClick}\r\n onMousedown:display={($event) => emit('mousedown:display', $event)}\r\n >\r\n {{\r\n default: (defaultProps: any) => (\r\n <div\r\n class={[`${CLASS_NAME}__field`]}\r\n data-id={defaultProps.attrId}\r\n ref={'field'}\r\n >\r\n {props.floating\r\n ? el$.value?.createLabel?.()\r\n : undefined}\r\n {slots.default ? () => slots.default(defaultProps) : undefined}\r\n {\r\n <textarea\r\n ref={input$}\r\n value={displayValue.value}\r\n id={`y-input--${UID}`}\r\n disabled={props.disabled}\r\n placeholder={props.placeholder}\r\n {...attrs}\r\n onInput={onInput}\r\n onFocus={onFocus}\r\n onBlur={onBlur}\r\n onChange={onChange}\r\n onKeydown={onKeydown}\r\n onKeyup={onKeyup}\r\n ></textarea>\r\n }\r\n </div>\r\n ),\r\n label: slots.label ? () => slots.label?.() : undefined,\r\n 'helper-text': slots['helper-text']\r\n ? () => slots['helper-text']?.()\r\n : undefined,\r\n }}\r\n </YInput>\r\n );\r\n });\r\n\r\n return {\r\n el$,\r\n input$,\r\n };\r\n },\r\n});\r\n\r\nexport type YTextarea = InstanceType<typeof YTextarea>;\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"YTextarea.mjs","names":["defineComponent","getCurrentInstance","nextTick","ref","watch","useRender","useFocus","chooseProps","getUid","propsFactory","YInput","pressYInputPropsOptions","pressYTextareaPropsOptions","displayText","String","Function","whenInputValid","Boolean","Number","variation","CLASS_NAME","YTextarea","name","props","emits","v","e","input","change","focus","blur","click","keydown","keyup","slots","Object","setup","_ref","attrs","emit","expose","UID","el$","input$","inValue","displayValue","focused","whenFocus","whenBlur","onUpdateModel","value","changeDisplay","vm","undefined","text","call","onInput","event","target","onChange","onFocus","onBlur","onKeydown","onKeyup","onClick","modelValue","neo","immediate","validate","invokeValidators","yInputProps","_createVNode","_mergeProps","$event","default","defaultProps","attrId","floating","createLabel","disabled","placeholder","label"],"sources":["../../../src/components/textarea/YTextarea.tsx"],"sourcesContent":["import {\r\n SlotsType,\r\n defineComponent,\r\n getCurrentInstance,\r\n nextTick,\r\n ref,\r\n watch,\r\n} from 'vue';\r\nimport type { PropType } from 'vue';\r\n\r\nimport { useRender } from '../../composables/component';\r\nimport { useFocus } from '../../composables/focus';\r\nimport { chooseProps, getUid, propsFactory } from '../../util';\r\nimport { YInput, pressYInputPropsOptions } from '../input';\r\n\r\nimport './YTextarea.scss';\r\n\r\nexport const pressYTextareaPropsOptions = propsFactory(\r\n {\r\n displayText: [String, Function] as PropType<\r\n string | ((value: any) => string)\r\n >,\r\n whenInputValid: [Boolean, Number] as PropType<boolean | number>,\r\n ...pressYInputPropsOptions({\r\n variation: 'filled',\r\n }),\r\n },\r\n 'YTextarea',\r\n);\r\n\r\nconst CLASS_NAME = 'y-textarea';\r\n\r\nexport const YTextarea = defineComponent({\r\n name: 'YTextarea',\r\n props: pressYTextareaPropsOptions(),\r\n emits: {\r\n 'update:modelValue': (v: any) => true,\r\n 'update:focused': (v: boolean) => true,\r\n 'mousedown:display': (e: MouseEvent) => true,\r\n input: (v: any) => true,\r\n change: (v: any, e: Event) => true,\r\n focus: (e: FocusEvent) => true,\r\n blur: (e: FocusEvent) => true,\r\n click: (e: MouseEvent) => true,\r\n keydown: (e: KeyboardEvent) => true,\r\n keyup: (e: KeyboardEvent) => true,\r\n },\r\n slots: Object as SlotsType<{\r\n default: any;\r\n label: any;\r\n 'helper-text': any;\r\n }>,\r\n setup(props, { attrs, emit, slots, expose }) {\r\n const UID = getUid();\r\n const el$ = ref<YInput>();\r\n const input$ = ref();\r\n const inValue = ref<any>('');\r\n const displayValue = ref('');\r\n const { focused, whenFocus, whenBlur } = useFocus(props, 'y-field-input');\r\n\r\n function onUpdateModel(value: any) {\r\n emit('update:modelValue', value);\r\n }\r\n\r\n function changeDisplay() {\r\n const vm = getCurrentInstance();\r\n const { displayText } = props;\r\n if (displayText !== undefined) {\r\n let text = inValue.value;\r\n if (typeof displayText === 'string') {\r\n text = displayText;\r\n }\r\n if (displayText && typeof displayText === 'function') {\r\n text = (displayText as any).call(vm, text);\r\n }\r\n nextTick(() => {\r\n displayValue.value = text as string;\r\n });\r\n }\r\n }\r\n\r\n function onInput(event: Event) {\r\n emit('input', event);\r\n const target = event.target as HTMLInputElement | null;\r\n inValue.value = target?.value;\r\n displayValue.value = target?.value as string;\r\n }\r\n\r\n function onChange(event: Event) {\r\n emit('change', inValue.value, event);\r\n }\r\n\r\n function onFocus(event: FocusEvent) {\r\n whenFocus();\r\n displayValue.value = inValue.value as string;\r\n emit('focus', event);\r\n }\r\n\r\n function onBlur(event: FocusEvent) {\r\n whenBlur();\r\n emit('blur', event);\r\n changeDisplay();\r\n }\r\n\r\n function onKeydown(event: KeyboardEvent) {\r\n emit('keydown', event);\r\n }\r\n\r\n function onKeyup(event: KeyboardEvent) {\r\n emit('keyup', event);\r\n }\r\n\r\n function onClick(event: MouseEvent) {\r\n emit('click', event);\r\n }\r\n\r\n watch(\r\n () => props.modelValue,\r\n (neo: any) => {\r\n inValue.value = neo;\r\n displayValue.value = neo;\r\n },\r\n {\r\n immediate: true,\r\n },\r\n );\r\n\r\n watch(inValue, (neo: string) => {\r\n if (!focused.value) {\r\n changeDisplay();\r\n } else {\r\n displayValue.value = neo;\r\n }\r\n });\r\n\r\n expose({\r\n el$,\r\n input$,\r\n validate: () => el$.value?.invokeValidators(),\r\n });\r\n\r\n useRender(() => {\r\n const yInputProps = chooseProps(props, YInput.props);\r\n return (\r\n <YInput\r\n class={[CLASS_NAME]}\r\n {...yInputProps}\r\n modelValue={inValue.value}\r\n onUpdate:modelValue={onUpdateModel}\r\n focused={focused.value}\r\n onClick={onClick}\r\n onMousedown:display={($event) => emit('mousedown:display', $event)}\r\n >\r\n {{\r\n default: (defaultProps: any) => (\r\n <div\r\n class={[`${CLASS_NAME}__field`]}\r\n data-id={defaultProps.attrId}\r\n ref={'field'}\r\n >\r\n {props.floating\r\n ? el$.value?.createLabel?.()\r\n : undefined}\r\n {slots.default ? () => slots.default(defaultProps) : undefined}\r\n {\r\n <textarea\r\n ref={input$}\r\n value={displayValue.value}\r\n id={`y-input--${UID}`}\r\n disabled={props.disabled}\r\n placeholder={props.placeholder}\r\n {...attrs}\r\n onInput={onInput}\r\n onFocus={onFocus}\r\n onBlur={onBlur}\r\n onChange={onChange}\r\n onKeydown={onKeydown}\r\n onKeyup={onKeyup}\r\n ></textarea>\r\n }\r\n </div>\r\n ),\r\n label: slots.label ? () => slots.label?.() : undefined,\r\n 'helper-text': slots['helper-text']\r\n ? () => slots['helper-text']?.()\r\n : undefined,\r\n }}\r\n </YInput>\r\n );\r\n });\r\n\r\n return {\r\n el$,\r\n input$,\r\n };\r\n },\r\n});\r\n\r\nexport type YTextarea = InstanceType<typeof YTextarea>;\r\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"communication.mjs","names":["computed","getCurrentInstance","ref","toRaw","watch","hasOwnProperty","kebabToCamel","toKebabCase","useToggleScope","useModelDuplex","props","prop","arguments","length","undefined","defaultValue","getIn","v","setOut","vm","kebabProp","property","txValue","getProp","isDefinedProp","registeredProps","vnode","value","model","get","set","neo","current","emit","Object","defineProperty","useProvided","provided","internal"],"sources":["../../src/composables/communication.ts"],"sourcesContent":["import { computed, getCurrentInstance, ref, toRaw, watch } from 'vue';\
|
|
1
|
+
{"version":3,"file":"communication.mjs","names":["computed","getCurrentInstance","ref","toRaw","watch","hasOwnProperty","kebabToCamel","toKebabCase","useToggleScope","useModelDuplex","props","prop","arguments","length","undefined","defaultValue","getIn","v","setOut","vm","kebabProp","property","txValue","getProp","isDefinedProp","registeredProps","vnode","value","model","get","set","neo","current","emit","Object","defineProperty","useProvided","provided","internal"],"sources":["../../src/composables/communication.ts"],"sourcesContent":["import { WritableComputedRef } from '@vue/runtime-core';\nimport { computed, getCurrentInstance, ref, toRaw, watch } from 'vue';\nimport type { Ref } from 'vue';\n\nimport { hasOwnProperty } from '../util/common';\nimport { kebabToCamel, toKebabCase } from '../util/string';\nimport { useToggleScope } from './scope';\n\nexport function useModelDuplex(\n props: any,\n prop: string = 'modelValue',\n defaultValue?: any,\n getIn: (value?: any) => any = (v: any) => v,\n setOut: (value: any) => any = (v: any) => v,\n) {\n const vm = getCurrentInstance()!;\n const kebabProp = toKebabCase(prop);\n const property = kebabProp === prop ? kebabToCamel(prop) : prop;\n const txValue = ref(\n props[property] !== undefined ? props[property] : defaultValue,\n );\n\n function getProp() {\n return props[property];\n }\n\n const isDefinedProp = computed(() => {\n getProp();\n const registeredProps = vm.vnode.props;\n return (\n (hasOwnProperty(registeredProps, kebabProp) ||\n hasOwnProperty(registeredProps, property)) &&\n (hasOwnProperty(registeredProps, `onUpdate:${kebabProp}`) ||\n hasOwnProperty(registeredProps, `onUpdate:${property}`))\n );\n });\n\n useToggleScope(\n () => !isDefinedProp.value,\n () => {\n watch(\n () => getProp(),\n (value) => {\n txValue.value = value;\n },\n );\n },\n );\n\n const model = computed({\n get(): any {\n return getIn(isDefinedProp.value ? getProp() : txValue.value);\n },\n set(value) {\n const neo = setOut(value);\n const current = toRaw(isDefinedProp.value ? getProp() : txValue.value);\n if (current === neo || getIn(current) === value) {\n return;\n }\n txValue.value = neo;\n vm?.emit(`update:${property}`, neo);\n },\n }) as WritableComputedRef<any> & { readonly rxValue: any };\n\n Object.defineProperty(model, 'rxValue', {\n get: () => (isDefinedProp.value ? getProp() : txValue.value),\n });\n\n return model;\n}\n\nexport function useProvided<T>(props: any, prop: string, provided: Ref<T>) {\n const internal = useModelDuplex(props, prop, props[prop] ?? provided.value);\n\n watch(provided, (value) => {\n if (props[prop] == null) {\n internal.value = value;\n }\n });\n return internal;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { computed, inject, provide, ref, shallowRef, toRef } from 'vue';
|
|
2
|
+
import { propsFactory } from "../util/vue-component.mjs";
|
|
3
|
+
import { useModelDuplex } from "./communication.mjs";
|
|
4
|
+
export const YUYEON_FORM_KEY = Symbol.for('yuyeon.form');
|
|
5
|
+
export const pressFormPropsOptions = propsFactory({
|
|
6
|
+
readonly: Boolean,
|
|
7
|
+
disabled: Boolean,
|
|
8
|
+
loading: Boolean,
|
|
9
|
+
modelValue: {
|
|
10
|
+
type: Boolean,
|
|
11
|
+
default: null
|
|
12
|
+
},
|
|
13
|
+
validateOn: {
|
|
14
|
+
type: String,
|
|
15
|
+
default: 'input'
|
|
16
|
+
}
|
|
17
|
+
}, 'form');
|
|
18
|
+
export function createForm(props) {
|
|
19
|
+
const model = useModelDuplex(props);
|
|
20
|
+
const isValidating = shallowRef(false);
|
|
21
|
+
const inputs = ref([]);
|
|
22
|
+
const errors = ref([]);
|
|
23
|
+
const isReadonly = computed(() => props.readonly);
|
|
24
|
+
const isDisabled = computed(() => props.disabled);
|
|
25
|
+
const isLoading = computed(() => props.loading);
|
|
26
|
+
async function validate() {
|
|
27
|
+
const results = [];
|
|
28
|
+
let valid = true;
|
|
29
|
+
errors.value = [];
|
|
30
|
+
isValidating.value = true;
|
|
31
|
+
for (const item of inputs.value) {
|
|
32
|
+
const itemErrors = await item.validate();
|
|
33
|
+
if (itemErrors.length > 0) {
|
|
34
|
+
valid = false;
|
|
35
|
+
results.push({
|
|
36
|
+
id: item.id,
|
|
37
|
+
vnode: item.vnode,
|
|
38
|
+
exposed: item.vnode.component?.exposed,
|
|
39
|
+
errors: itemErrors
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
errors.value = results;
|
|
44
|
+
isValidating.value = false;
|
|
45
|
+
return {
|
|
46
|
+
valid,
|
|
47
|
+
errors: errors.value
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function register(input) {
|
|
51
|
+
const {
|
|
52
|
+
id,
|
|
53
|
+
validate,
|
|
54
|
+
vnode
|
|
55
|
+
} = input;
|
|
56
|
+
inputs.value.push({
|
|
57
|
+
id,
|
|
58
|
+
validate,
|
|
59
|
+
vnode,
|
|
60
|
+
isError: null,
|
|
61
|
+
errors: []
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function unregister(id) {
|
|
65
|
+
inputs.value = inputs.value.filter(input => input.id !== id);
|
|
66
|
+
}
|
|
67
|
+
function update(id, isError, errors) {
|
|
68
|
+
const found = inputs.value.find(item => item.id === id);
|
|
69
|
+
if (!found) return;
|
|
70
|
+
found.isError = isError;
|
|
71
|
+
found.errors = errors;
|
|
72
|
+
}
|
|
73
|
+
const provideInstance = {
|
|
74
|
+
inputs,
|
|
75
|
+
isDisabled,
|
|
76
|
+
isReadonly,
|
|
77
|
+
isLoading,
|
|
78
|
+
isValid: model,
|
|
79
|
+
isValidating,
|
|
80
|
+
register,
|
|
81
|
+
unregister,
|
|
82
|
+
update,
|
|
83
|
+
validateOn: toRef(props, 'validateOn')
|
|
84
|
+
};
|
|
85
|
+
provide(YUYEON_FORM_KEY, provideInstance);
|
|
86
|
+
return {
|
|
87
|
+
inputs,
|
|
88
|
+
errors,
|
|
89
|
+
isValid: model,
|
|
90
|
+
isDisabled,
|
|
91
|
+
isReadonly,
|
|
92
|
+
isLoading,
|
|
93
|
+
isValidating,
|
|
94
|
+
validate
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export function useForm() {
|
|
98
|
+
return inject(YUYEON_FORM_KEY, null);
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=form.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.mjs","names":["computed","inject","provide","ref","shallowRef","toRef","propsFactory","useModelDuplex","YUYEON_FORM_KEY","Symbol","for","pressFormPropsOptions","readonly","Boolean","disabled","loading","modelValue","type","default","validateOn","String","createForm","props","model","isValidating","inputs","errors","isReadonly","isDisabled","isLoading","validate","results","valid","value","item","itemErrors","length","push","id","vnode","exposed","component","register","input","isError","unregister","filter","update","found","find","provideInstance","isValid","useForm"],"sources":["../../src/composables/form.ts"],"sourcesContent":["import {\n ComputedRef,\n InjectionKey,\n PropType,\n Ref,\n computed,\n inject,\n provide,\n ref,\n shallowRef,\n toRef, VNode,\n} from 'vue';\n\nimport { EventProp, propsFactory } from '../util/vue-component';\nimport { useModelDuplex } from './communication';\nimport { ValidationProps } from './validation';\n\nexport interface FormInput {\n id: number | string;\n vnode: VNode;\n validate: () => Promise<any[]>;\n isError: boolean | undefined | null;\n errors: any[];\n}\n\nexport interface InputValidationResult {\n id: number | string;\n vnode: VNode;\n exposed: any;\n errors: any[];\n}\n\nexport interface FormValidationResult {\n valid: boolean;\n errors: InputValidationResult[];\n}\n\nexport interface SubmitEventPromise\n extends SubmitEvent,\n Promise<FormValidationResult> {}\n\nexport interface FormInstance {\n register: (input: {\n id: number | string;\n vnode: VNode;\n validate: () => Promise<any[]>;\n resetValidation: () => Promise<void>;\n }) => void;\n unregister: (id: number | string) => void;\n update: (\n id: number | string,\n isError: boolean | undefined | null,\n errors: any[],\n ) => void;\n inputs: Ref<FormInput[]>;\n isDisabled: ComputedRef<boolean>;\n isReadonly: ComputedRef<boolean>;\n isLoading: ComputedRef<boolean>;\n isValidating: Ref<boolean>;\n isValid: Ref<boolean | null>;\n validateOn: Ref<FormProps['validateOn']>;\n}\n\nexport const YUYEON_FORM_KEY: InjectionKey<FormInstance> =\n Symbol.for('yuyeon.form');\n\nexport interface FormProps {\n readonly: boolean;\n disabled: boolean;\n loading: boolean;\n modelValue: boolean | null;\n 'onUpdate:modelValue': EventProp<[boolean | null]> | undefined;\n validateOn: ValidationProps['validateOn'];\n}\n\nexport const pressFormPropsOptions = propsFactory(\n {\n readonly: Boolean,\n disabled: Boolean,\n loading: Boolean,\n modelValue: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n validateOn: {\n type: String as PropType<ValidationProps['validateOn']>,\n default: 'input',\n },\n },\n 'form',\n);\n\nexport function createForm(props: FormProps) {\n const model = useModelDuplex(props);\n const isValidating = shallowRef(false);\n const inputs = ref<FormInput[]>([]);\n const errors = ref<InputValidationResult[]>([]);\n\n const isReadonly = computed(() => props.readonly);\n const isDisabled = computed(() => props.disabled);\n const isLoading = computed(() => props.loading);\n\n async function validate() {\n const results: InputValidationResult[] = [];\n let valid = true;\n\n errors.value = [];\n isValidating.value = true;\n\n for (const item of inputs.value) {\n const itemErrors = await item.validate();\n\n if (itemErrors.length > 0) {\n valid = false;\n\n results.push({\n id: item.id,\n vnode: item.vnode,\n exposed: item.vnode.component?.exposed,\n errors: itemErrors,\n });\n }\n }\n\n errors.value = results;\n isValidating.value = false;\n\n return { valid, errors: errors.value };\n }\n\n function register(input: {\n id: number | string;\n vnode: VNode;\n validate: () => Promise<any[]>;\n }) {\n const { id, validate, vnode } = input;\n inputs.value.push({\n id,\n validate,\n vnode,\n isError: null,\n errors: [],\n });\n }\n\n function unregister(id: number | string) {\n inputs.value = inputs.value.filter((input) => input.id !== id);\n }\n\n function update(\n id: number | string,\n isError: boolean | undefined | null,\n errors: any[],\n ) {\n const found = inputs.value.find((item) => item.id === id);\n\n if (!found) return;\n\n found.isError = isError;\n found.errors = errors;\n }\n\n const provideInstance: FormInstance = {\n inputs,\n isDisabled,\n isReadonly,\n isLoading,\n isValid: model,\n isValidating,\n register,\n unregister,\n update,\n validateOn: toRef(props, 'validateOn'),\n };\n\n provide(YUYEON_FORM_KEY, provideInstance);\n\n return {\n inputs,\n errors,\n isValid: model,\n isDisabled,\n isReadonly,\n isLoading,\n isValidating,\n validate,\n };\n}\n\nexport function useForm() {\n return inject(YUYEON_FORM_KEY, null);\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { computed, ref, watch } from 'vue';
|
|
1
|
+
import { computed, getCurrentInstance, onBeforeMount, ref, watch } from 'vue';
|
|
2
2
|
import { getUid, propsFactory } from "../util/index.mjs";
|
|
3
3
|
import { useModelDuplex } from "./communication.mjs";
|
|
4
|
+
import { useForm } from "./form.mjs";
|
|
4
5
|
import { useToggleScope } from "./scope.mjs";
|
|
5
6
|
export const pressValidationPropsOptions = propsFactory({
|
|
6
7
|
readonly: Boolean,
|
|
@@ -24,8 +25,11 @@ export const pressValidationPropsOptions = propsFactory({
|
|
|
24
25
|
}, 'validation');
|
|
25
26
|
export function useValidation(props, name) {
|
|
26
27
|
let uid = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getUid();
|
|
28
|
+
const cid = computed(() => props.name ?? uid);
|
|
27
29
|
const model = useModelDuplex(props, 'modelValue');
|
|
28
30
|
const validationModel = computed(() => props.validationValue === undefined ? model.value : props.validationValue);
|
|
31
|
+
const vm = getCurrentInstance();
|
|
32
|
+
const form = useForm();
|
|
29
33
|
const validating = ref(false);
|
|
30
34
|
const validateOn = computed(() => {
|
|
31
35
|
let value = props.validateOn || 'input';
|
|
@@ -40,6 +44,9 @@ export function useValidation(props, name) {
|
|
|
40
44
|
});
|
|
41
45
|
const errorResult = ref();
|
|
42
46
|
const errors = ref([]);
|
|
47
|
+
const isReadonly = computed(() => props.readonly ?? form?.isReadonly.value);
|
|
48
|
+
const isDisabled = computed(() => props.disabled ?? form?.isDisabled.value);
|
|
49
|
+
const isLoading = computed(() => props.loading ?? form?.isLoading.value);
|
|
43
50
|
const isError = computed(() => {
|
|
44
51
|
return props.status === 'error' || errors.value.length > 0;
|
|
45
52
|
});
|
|
@@ -87,6 +94,21 @@ export function useValidation(props, name) {
|
|
|
87
94
|
errors.value = [];
|
|
88
95
|
errorResult.value = undefined;
|
|
89
96
|
}
|
|
97
|
+
async function resetValidation() {
|
|
98
|
+
if (!validateOn.value.lazy) {
|
|
99
|
+
await invokeValidators();
|
|
100
|
+
} else {
|
|
101
|
+
resetError();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
onBeforeMount(() => {
|
|
105
|
+
form?.register({
|
|
106
|
+
id: cid.value,
|
|
107
|
+
vnode: vm.vnode,
|
|
108
|
+
resetValidation,
|
|
109
|
+
validate: invokeValidators
|
|
110
|
+
});
|
|
111
|
+
});
|
|
90
112
|
return {
|
|
91
113
|
invokeValidators,
|
|
92
114
|
resetError,
|
|
@@ -94,6 +116,9 @@ export function useValidation(props, name) {
|
|
|
94
116
|
validateOn,
|
|
95
117
|
errorResult,
|
|
96
118
|
errors,
|
|
119
|
+
isReadonly,
|
|
120
|
+
isDisabled,
|
|
121
|
+
isLoading,
|
|
97
122
|
isError,
|
|
98
123
|
isSuccess
|
|
99
124
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.mjs","names":["computed","ref","watch","getUid","propsFactory","useModelDuplex","useToggleScope","pressValidationPropsOptions","readonly","Boolean","disabled","status","type","String","validator","value","includes","helperText","validators","Array","validateOn","validationValue","maxErrors","Number","default","useValidation","props","name","uid","arguments","length","undefined","model","validationModel","validating","onSet","Set","split","blur","has","input","lazy","submit","errorResult","errors","isError","isSuccess","invokeValidators","focused","unwatch","val","results","isArray","handler","result","console","warn","push","resetError"],"sources":["../../src/composables/validation.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"validation.mjs","names":["computed","getCurrentInstance","onBeforeMount","ref","watch","getUid","propsFactory","useModelDuplex","useForm","useToggleScope","pressValidationPropsOptions","readonly","Boolean","disabled","status","type","String","validator","value","includes","helperText","validators","Array","validateOn","validationValue","maxErrors","Number","default","useValidation","props","name","uid","arguments","length","undefined","cid","model","validationModel","vm","form","validating","onSet","Set","split","blur","has","input","lazy","submit","errorResult","errors","isReadonly","isDisabled","isLoading","loading","isError","isSuccess","invokeValidators","focused","unwatch","val","results","isArray","handler","result","console","warn","push","resetError","resetValidation","register","id","vnode","validate"],"sources":["../../src/composables/validation.ts"],"sourcesContent":["import {\n PropType,\n computed,\n getCurrentInstance,\n onBeforeMount,\n ref,\n watch,\n} from 'vue';\n\nimport { getUid, propsFactory } from '../util';\nimport { useModelDuplex } from './communication';\nimport { useForm } from './form';\nimport { useToggleScope } from './scope';\n\nexport interface ValidationProps {\n validateOn: 'input' | 'blur' | 'lazy' | 'submit' | string;\n}\n\nexport const pressValidationPropsOptions = propsFactory(\n {\n readonly: Boolean as PropType<boolean>,\n disabled: Boolean as PropType<boolean>,\n status: {\n type: String as PropType<'success' | 'warning' | 'error' | undefined>,\n validator(value: string) {\n return ['success', 'warning', 'error'].includes(value);\n },\n },\n helperText: String,\n validators: Array as PropType<((v: any) => boolean | string)[] | string[]>,\n validateOn: {\n type: String as PropType<ValidationProps['validateOn']>,\n },\n validationValue: null,\n maxErrors: {\n type: [Number, String] as PropType<number | string>,\n default: 1,\n },\n },\n 'validation',\n);\n\nexport function useValidation(props: any, name: string, uid = getUid()) {\n const cid = computed(() => props.name ?? uid);\n const model = useModelDuplex(props, 'modelValue');\n const validationModel = computed(() =>\n props.validationValue === undefined ? model.value : props.validationValue,\n );\n const vm = getCurrentInstance()!;\n const form = useForm();\n const validating = ref(false);\n const validateOn = computed(() => {\n let value = props.validateOn || 'input';\n if (value === 'lazy') value = 'input,lazy';\n const onSet = new Set(value?.split(',') ?? []);\n\n return {\n blur: onSet.has('blur') || onSet.has('input'),\n input: onSet.has('input'),\n lazy: onSet.has('lazy'),\n submit: onSet.has('submit'),\n };\n });\n\n const errorResult = ref();\n const errors = ref<any[]>([]);\n\n const isReadonly = computed(() => props.readonly ?? form?.isReadonly.value);\n\n const isDisabled = computed(() => props.disabled ?? form?.isDisabled.value);\n\n const isLoading = computed(() => props.loading ?? form?.isLoading.value);\n\n const isError = computed(() => {\n return props.status === 'error' || errors.value.length > 0;\n });\n\n const isSuccess = computed(() => {\n return !isError.value && props.status === 'success';\n });\n\n useToggleScope(\n () => validateOn.value.input,\n () => {\n watch(validationModel, () => {\n if (validationModel.value != null) {\n invokeValidators();\n } else if (props.focused) {\n const unwatch = watch(\n () => props.focused,\n (val) => {\n if (!val) invokeValidators();\n\n unwatch();\n },\n );\n }\n });\n },\n );\n\n async function invokeValidators() {\n const results: any[] = [];\n validating.value = true;\n\n if (Array.isArray(props.validators)) {\n for (const validator of props.validators) {\n if (results.length >= +(props.maxErrors ?? 1)) {\n break;\n }\n\n const handler =\n typeof validator === 'function' ? validator : () => validator;\n const result = await handler(validationModel.value);\n\n if (result === true) {\n continue;\n }\n\n if (result !== false && typeof result !== 'string') {\n console.warn('Wrong validator return type');\n continue;\n }\n results.push(result || '');\n }\n }\n validating.value = false;\n errors.value = results;\n errorResult.value = results?.[0];\n\n return results;\n }\n\n function resetError() {\n errors.value = [];\n errorResult.value = undefined;\n }\n\n async function resetValidation() {\n if (!validateOn.value.lazy) {\n await invokeValidators();\n } else {\n resetError();\n }\n }\n\n onBeforeMount(() => {\n form?.register({\n id: cid.value,\n vnode: vm.vnode,\n resetValidation,\n validate: invokeValidators,\n });\n });\n\n return {\n invokeValidators,\n resetError,\n validating,\n validateOn,\n errorResult,\n errors,\n isReadonly,\n isDisabled,\n isLoading,\n isError,\n isSuccess,\n };\n}\n"],"mappings":"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"}
|
package/lib/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { nextTick, reactive } from 'vue';
|
|
1
|
+
import { getCurrentInstance, nextTick, reactive } from 'vue';
|
|
2
2
|
import * as components from "./components/index.mjs";
|
|
3
3
|
import { YUYEON_DATE_KEY, YUYEON_DATE_OPTIONS_KEY, createDateModule } from "./composables/date/index.mjs";
|
|
4
4
|
import { createI18nModule } from "./composables/i18n/index.mjs";
|
|
@@ -70,5 +70,10 @@ export function init() {
|
|
|
70
70
|
install
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
|
+
export function useYuyeon() {
|
|
74
|
+
const vm = getCurrentInstance();
|
|
75
|
+
if (!vm) throw new Error('[yuyeon] Called outside of setup context');
|
|
76
|
+
return vm.appContext.config.globalProperties.$yuyeon;
|
|
77
|
+
}
|
|
73
78
|
export { useTheme };
|
|
74
79
|
//# sourceMappingURL=index.mjs.map
|
package/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["nextTick","reactive","components","YUYEON_DATE_KEY","YUYEON_DATE_OPTIONS_KEY","createDateModule","createI18nModule","YUYEON_I18N_KEY","YUYEON_THEME_KEY","createThemeModule","useTheme","PlateWave","YUYEON_LOGO","createIconModule","YUYEON_ICON_KEY","defaultOptions","credit","init","options","arguments","length","undefined","themeModule","theme","i18nModule","i18n","dateModule","date","localeModule","iconModule","icon","install","app","yuyeon","root","instance","rtlModule","Object","keys","forEach","componentName","comp","component","directive","provide","config","globalProperties","$yuyeon","_instance","_container","Error","$el","classList","add","setAttribute","console","log","unmount","scope","stop"],"sources":["../src/index.ts"],"sourcesContent":["import { Component, ComponentInternalInstance } from '@vue/runtime-core';\r\nimport type { App } from 'vue';\r\nimport { nextTick, reactive } from 'vue';\r\n\r\nimport * as components from './components';\r\nimport {\r\n YUYEON_DATE_KEY,\r\n YUYEON_DATE_OPTIONS_KEY,\r\n createDateModule,\r\n} from './composables/date';\r\nimport { createI18nModule } from './composables/i18n';\r\nimport { YUYEON_I18N_KEY } from './composables/i18n/share';\r\nimport {\r\n YUYEON_THEME_KEY,\r\n createThemeModule,\r\n useTheme,\r\n} from './composables/theme';\r\nimport PlateWave from './directives/plate-wave';\r\nimport { YUYEON_LOGO } from './etc';\r\n\r\n//\r\nimport './styles/base.scss';\r\nimport {createIconModule, YUYEON_ICON_KEY} from \"./composables/icon\";\r\n\r\nconst defaultOptions = {\r\n credit: true,\r\n};\r\n\r\ndeclare module 'vue' {\r\n interface ComponentCustomProperties {\r\n $yuyeon: any;\r\n }\r\n}\r\n\r\nexport function init(options: any = defaultOptions) {\r\n const themeModule = createThemeModule(options?.theme);\r\n const i18nModule = createI18nModule(options?.i18n);\r\n const dateModule = createDateModule(options?.date, i18nModule.localeModule);\r\n const iconModule = createIconModule(options?.icon);\r\n const install = (app: App): any => {\r\n themeModule.install(app);\r\n\r\n const yuyeon = reactive({\r\n app: null as ComponentInternalInstance | null,\r\n root: null as HTMLElement | null,\r\n theme: themeModule.instance,\r\n i18n: {\r\n ...i18nModule.localeModule,\r\n ...i18nModule.rtlModule,\r\n },\r\n date: dateModule,\r\n });\r\n\r\n Object.keys(components).forEach((componentName) => {\r\n const comp = components[componentName as keyof typeof components];\r\n app.component(componentName, comp as Component);\r\n });\r\n\r\n app.directive('plate-wave', PlateWave);\r\n\r\n app.provide(YUYEON_THEME_KEY, themeModule.instance);\r\n app.provide(YUYEON_ICON_KEY, iconModule);\r\n app.provide(YUYEON_I18N_KEY, {\r\n ...i18nModule.localeModule,\r\n ...i18nModule.rtlModule,\r\n });\r\n app.provide(YUYEON_DATE_OPTIONS_KEY, dateModule.options);\r\n app.provide(YUYEON_DATE_KEY, dateModule.instance);\r\n\r\n app.config.globalProperties.$yuyeon = yuyeon;\r\n\r\n nextTick(() => {\r\n yuyeon.app = app._instance as any;\r\n yuyeon.root = app._container;\r\n if (!yuyeon.root) {\r\n throw new Error(`yuyeon: Can't found instance`);\r\n }\r\n const $el = yuyeon.root;\r\n $el.classList.add('y-root');\r\n $el.setAttribute('data-y-root', '');\r\n themeModule.init(yuyeon);\r\n });\r\n if (options?.credit) {\r\n console.log(YUYEON_LOGO);\r\n }\r\n const { unmount } = app;\r\n app.unmount = () => {\r\n unmount();\r\n themeModule.scope.stop();\r\n app.unmount = unmount;\r\n };\r\n };\r\n\r\n return {\r\n install,\r\n };\r\n}\r\n\r\nexport { useTheme };\r\n"],"mappings":"AAEA,SAASA,QAAQ,EAAEC,QAAQ,QAAQ,KAAK;AAAC,
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["getCurrentInstance","nextTick","reactive","components","YUYEON_DATE_KEY","YUYEON_DATE_OPTIONS_KEY","createDateModule","createI18nModule","YUYEON_I18N_KEY","YUYEON_THEME_KEY","createThemeModule","useTheme","PlateWave","YUYEON_LOGO","createIconModule","YUYEON_ICON_KEY","defaultOptions","credit","init","options","arguments","length","undefined","themeModule","theme","i18nModule","i18n","dateModule","date","localeModule","iconModule","icon","install","app","yuyeon","root","instance","rtlModule","Object","keys","forEach","componentName","comp","component","directive","provide","config","globalProperties","$yuyeon","_instance","_container","Error","$el","classList","add","setAttribute","console","log","unmount","scope","stop","useYuyeon","vm","appContext"],"sources":["../src/index.ts"],"sourcesContent":["import { Component, ComponentInternalInstance } from '@vue/runtime-core';\r\nimport type { App } from 'vue';\r\nimport { getCurrentInstance, nextTick, reactive } from 'vue';\r\n\r\nimport * as components from './components';\r\nimport {\r\n YUYEON_DATE_KEY,\r\n YUYEON_DATE_OPTIONS_KEY,\r\n createDateModule,\r\n} from './composables/date';\r\nimport { createI18nModule } from './composables/i18n';\r\nimport { YUYEON_I18N_KEY } from './composables/i18n/share';\r\nimport {\r\n YUYEON_THEME_KEY,\r\n createThemeModule,\r\n useTheme,\r\n} from './composables/theme';\r\nimport PlateWave from './directives/plate-wave';\r\nimport { YUYEON_LOGO } from './etc';\r\n\r\n//\r\nimport './styles/base.scss';\r\nimport {createIconModule, YUYEON_ICON_KEY} from \"./composables/icon\";\r\n\r\nconst defaultOptions = {\r\n credit: true,\r\n};\r\n\r\ndeclare module 'vue' {\r\n interface ComponentCustomProperties {\r\n $yuyeon: any;\r\n }\r\n}\r\n\r\nexport function init(options: any = defaultOptions) {\r\n const themeModule = createThemeModule(options?.theme);\r\n const i18nModule = createI18nModule(options?.i18n);\r\n const dateModule = createDateModule(options?.date, i18nModule.localeModule);\r\n const iconModule = createIconModule(options?.icon);\r\n const install = (app: App): any => {\r\n themeModule.install(app);\r\n\r\n const yuyeon = reactive({\r\n app: null as ComponentInternalInstance | null,\r\n root: null as HTMLElement | null,\r\n theme: themeModule.instance,\r\n i18n: {\r\n ...i18nModule.localeModule,\r\n ...i18nModule.rtlModule,\r\n },\r\n date: dateModule,\r\n });\r\n\r\n Object.keys(components).forEach((componentName) => {\r\n const comp = components[componentName as keyof typeof components];\r\n app.component(componentName, comp as Component);\r\n });\r\n\r\n app.directive('plate-wave', PlateWave);\r\n\r\n app.provide(YUYEON_THEME_KEY, themeModule.instance);\r\n app.provide(YUYEON_ICON_KEY, iconModule);\r\n app.provide(YUYEON_I18N_KEY, {\r\n ...i18nModule.localeModule,\r\n ...i18nModule.rtlModule,\r\n });\r\n app.provide(YUYEON_DATE_OPTIONS_KEY, dateModule.options);\r\n app.provide(YUYEON_DATE_KEY, dateModule.instance);\r\n\r\n app.config.globalProperties.$yuyeon = yuyeon;\r\n\r\n nextTick(() => {\r\n yuyeon.app = app._instance as any;\r\n yuyeon.root = app._container;\r\n if (!yuyeon.root) {\r\n throw new Error(`yuyeon: Can't found instance`);\r\n }\r\n const $el = yuyeon.root;\r\n $el.classList.add('y-root');\r\n $el.setAttribute('data-y-root', '');\r\n themeModule.init(yuyeon);\r\n });\r\n if (options?.credit) {\r\n console.log(YUYEON_LOGO);\r\n }\r\n const { unmount } = app;\r\n app.unmount = () => {\r\n unmount();\r\n themeModule.scope.stop();\r\n app.unmount = unmount;\r\n };\r\n };\r\n\r\n return {\r\n install,\r\n };\r\n}\r\n\r\nexport function useYuyeon() {\r\n const vm = getCurrentInstance();\r\n if (!vm) throw new Error('[yuyeon] Called outside of setup context');\r\n\r\n return vm.appContext.config.globalProperties.$yuyeon;\r\n}\r\n\r\nexport { useTheme };\r\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -18,7 +18,7 @@ export declare const YCheckbox: import("vue").DefineComponent<{
|
|
|
18
18
|
readonly: PropType<boolean>;
|
|
19
19
|
}, {
|
|
20
20
|
checked: import("vue").Ref<boolean>;
|
|
21
|
-
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("click" | "
|
|
21
|
+
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("click" | "blur" | "focus" | "update:modelValue" | "change")[], "click" | "blur" | "focus" | "update:modelValue" | "change", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
22
22
|
modelValue: PropType<boolean | any[]>;
|
|
23
23
|
value: PropType<any>;
|
|
24
24
|
label: PropType<string>;
|
|
@@ -37,8 +37,8 @@ export declare const YCheckbox: import("vue").DefineComponent<{
|
|
|
37
37
|
readonly: PropType<boolean>;
|
|
38
38
|
}>> & {
|
|
39
39
|
onClick?: ((...args: any[]) => any) | undefined;
|
|
40
|
-
onFocus?: ((...args: any[]) => any) | undefined;
|
|
41
40
|
onBlur?: ((...args: any[]) => any) | undefined;
|
|
41
|
+
onFocus?: ((...args: any[]) => any) | undefined;
|
|
42
42
|
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
43
43
|
onChange?: ((...args: any[]) => any) | undefined;
|
|
44
44
|
}, {
|
|
@@ -34,7 +34,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
34
34
|
onFocus(e: FocusEvent): void;
|
|
35
35
|
onBlur(e: FocusEvent): void;
|
|
36
36
|
onClick(event: MouseEvent): void;
|
|
37
|
-
}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("click" | "
|
|
37
|
+
}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("click" | "blur" | "focus")[], "click" | "blur" | "focus", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
38
38
|
id: PropType<string>;
|
|
39
39
|
value: PropType<boolean>;
|
|
40
40
|
icon: PropType<string>;
|
|
@@ -46,8 +46,8 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
46
46
|
readonly: PropType<boolean>;
|
|
47
47
|
}>> & {
|
|
48
48
|
onClick?: ((...args: any[]) => any) | undefined;
|
|
49
|
-
onFocus?: ((...args: any[]) => any) | undefined;
|
|
50
49
|
onBlur?: ((...args: any[]) => any) | undefined;
|
|
50
|
+
onFocus?: ((...args: any[]) => any) | undefined;
|
|
51
51
|
}, {
|
|
52
52
|
color: string;
|
|
53
53
|
}, {}>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PropType } from 'vue';
|
|
1
|
+
import { PropType, SlotsType } from 'vue';
|
|
2
2
|
import { YIconIconProp } from '../icon';
|
|
3
3
|
export declare const pressYDropdownPropsOptions: <Defaults extends {
|
|
4
4
|
items?: unknown;
|
|
@@ -237,4 +237,13 @@ export declare const YDropdown: import("vue").DefineComponent<{
|
|
|
237
237
|
itemText: string;
|
|
238
238
|
itemChildren: string | boolean;
|
|
239
239
|
dropdownIcon: YIconIconProp;
|
|
240
|
-
}, {
|
|
240
|
+
}, SlotsType<{
|
|
241
|
+
base: any;
|
|
242
|
+
default: any;
|
|
243
|
+
'dropdown-icon': any;
|
|
244
|
+
menu: any;
|
|
245
|
+
item: {
|
|
246
|
+
text: string;
|
|
247
|
+
item: any;
|
|
248
|
+
};
|
|
249
|
+
}>>;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { PropType, SlotsType } from 'vue';
|
|
2
|
+
import { YInputDefaultSlotProps } from '../input';
|
|
2
3
|
export declare const pressYFieldInputPropsOptions: <Defaults extends {
|
|
4
|
+
extended?: unknown;
|
|
3
5
|
focused?: unknown;
|
|
4
6
|
'onUpdate:focused'?: unknown;
|
|
5
7
|
readonly?: unknown;
|
|
@@ -33,6 +35,10 @@ export declare const pressYFieldInputPropsOptions: <Defaults extends {
|
|
|
33
35
|
tabindex?: unknown;
|
|
34
36
|
type?: unknown;
|
|
35
37
|
} = {}>(defaults?: Defaults | undefined) => {
|
|
38
|
+
extended: unknown extends Defaults["extended"] ? PropType<any> : {
|
|
39
|
+
type: PropType<unknown extends Defaults["extended"] ? any : any>;
|
|
40
|
+
default: unknown extends Defaults["extended"] ? any : any;
|
|
41
|
+
};
|
|
36
42
|
focused: unknown extends Defaults["focused"] ? BooleanConstructor : {
|
|
37
43
|
type: PropType<unknown extends Defaults["focused"] ? boolean : boolean | Defaults["focused"]>;
|
|
38
44
|
default: unknown extends Defaults["focused"] ? boolean : boolean | Defaults["focused"];
|
|
@@ -229,6 +235,7 @@ export declare const pressYFieldInputPropsOptions: <Defaults extends {
|
|
|
229
235
|
};
|
|
230
236
|
};
|
|
231
237
|
export declare const YFieldInput: import("vue").DefineComponent<{
|
|
238
|
+
extended: PropType<any>;
|
|
232
239
|
focused: BooleanConstructor;
|
|
233
240
|
'onUpdate:focused': PropType<(v: boolean) => void>;
|
|
234
241
|
readonly: PropType<boolean>;
|
|
@@ -299,7 +306,8 @@ export declare const YFieldInput: import("vue").DefineComponent<{
|
|
|
299
306
|
readonly rxValue: any;
|
|
300
307
|
};
|
|
301
308
|
inValue: any;
|
|
302
|
-
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("click" | "
|
|
309
|
+
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("click" | "input" | "blur" | "focus" | "mousedown" | "mouseup" | "mousedown:display" | "update:modelValue" | "update:focused" | "change" | "keydown" | "keyup")[], "click" | "input" | "blur" | "focus" | "mousedown" | "mouseup" | "mousedown:display" | "update:modelValue" | "update:focused" | "change" | "keydown" | "keyup", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
310
|
+
extended: PropType<any>;
|
|
303
311
|
focused: BooleanConstructor;
|
|
304
312
|
'onUpdate:focused': PropType<(v: boolean) => void>;
|
|
305
313
|
readonly: PropType<boolean>;
|
|
@@ -368,10 +376,10 @@ export declare const YFieldInput: import("vue").DefineComponent<{
|
|
|
368
376
|
}>> & {
|
|
369
377
|
onClick?: ((...args: any[]) => any) | undefined;
|
|
370
378
|
"onUpdate:focused"?: ((...args: any[]) => any) | undefined;
|
|
379
|
+
onBlur?: ((...args: any[]) => any) | undefined;
|
|
371
380
|
onFocus?: ((...args: any[]) => any) | undefined;
|
|
372
381
|
onMousedown?: ((...args: any[]) => any) | undefined;
|
|
373
382
|
onMouseup?: ((...args: any[]) => any) | undefined;
|
|
374
|
-
onBlur?: ((...args: any[]) => any) | undefined;
|
|
375
383
|
"onMousedown:display"?: ((...args: any[]) => any) | undefined;
|
|
376
384
|
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
377
385
|
onInput?: ((...args: any[]) => any) | undefined;
|
|
@@ -392,11 +400,7 @@ export declare const YFieldInput: import("vue").DefineComponent<{
|
|
|
392
400
|
prepend: any;
|
|
393
401
|
append: any;
|
|
394
402
|
label: any;
|
|
395
|
-
default:
|
|
396
|
-
value: any;
|
|
397
|
-
formLoading: boolean;
|
|
398
|
-
attrId: string;
|
|
399
|
-
};
|
|
403
|
+
default: YInputDefaultSlotProps;
|
|
400
404
|
leading: {
|
|
401
405
|
error: boolean;
|
|
402
406
|
};
|