yuyeon 0.0.42-rc6 → 0.0.42-rc8

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.
Files changed (85) hide show
  1. package/dist/style.css +1 -1
  2. package/dist/yuyeon.js +3129 -2941
  3. package/dist/yuyeon.umd.cjs +6 -6
  4. package/lib/components/dropdown/YDropdown.mjs +11 -5
  5. package/lib/components/dropdown/YDropdown.mjs.map +1 -1
  6. package/lib/components/dropdown/YDropdown.scss +3 -8
  7. package/lib/components/icon/YIcon.mjs +62 -0
  8. package/lib/components/icon/YIcon.mjs.map +1 -0
  9. package/lib/components/icon/YIcon.scss +18 -0
  10. package/lib/components/icon/index.mjs +2 -0
  11. package/lib/components/icon/index.mjs.map +1 -0
  12. package/lib/components/icon/poly.mjs +57 -0
  13. package/lib/components/icon/poly.mjs.map +1 -0
  14. package/lib/components/icons/index.mjs +14 -0
  15. package/lib/components/icons/index.mjs.map +1 -1
  16. package/lib/components/index.mjs +1 -0
  17. package/lib/components/index.mjs.map +1 -1
  18. package/lib/components/layer/YLayer.mjs +2 -0
  19. package/lib/components/layer/YLayer.mjs.map +1 -1
  20. package/lib/components/layer/active-stack.mjs.map +1 -1
  21. package/lib/components/menu/YMenu.mjs +16 -4
  22. package/lib/components/menu/YMenu.mjs.map +1 -1
  23. package/lib/components/select/YSelect.mjs +9 -6
  24. package/lib/components/select/YSelect.mjs.map +1 -1
  25. package/lib/components/select/YSelect.scss +3 -8
  26. package/lib/composables/icon.mjs +141 -0
  27. package/lib/composables/icon.mjs.map +1 -1
  28. package/lib/composables/theme/index.mjs.map +1 -1
  29. package/lib/index.mjs +3 -0
  30. package/lib/index.mjs.map +1 -1
  31. package/lib/types/index.mjs.map +1 -1
  32. package/lib/util/date/adapters/yuyeon-date-adapter.mjs +1 -1
  33. package/lib/util/date/adapters/yuyeon-date-adapter.mjs.map +1 -1
  34. package/lib/util/date/built-in.mjs +6 -2
  35. package/lib/util/date/built-in.mjs.map +1 -1
  36. package/package.json +2 -2
  37. package/types/abstract/items.d.ts +4 -4
  38. package/types/components/button/YButton.d.ts +10 -10
  39. package/types/components/checkbox/YInputCheckbox.d.ts +2 -2
  40. package/types/components/date-picker/YDateCalendar.d.ts +1 -1
  41. package/types/components/dialog/YDialog.d.ts +1 -0
  42. package/types/components/dropdown/YDropdown.d.ts +34 -13
  43. package/types/components/field-input/YFieldInput.d.ts +10 -10
  44. package/types/components/form/YForm.d.ts +1 -1
  45. package/types/components/icon/YIcon.d.ts +81 -0
  46. package/types/components/icon/index.d.ts +1 -0
  47. package/types/components/icons/YIconCheckbox.d.ts +2 -2
  48. package/types/components/icons/YIconSort.d.ts +2 -2
  49. package/types/components/icons/index.d.ts +48 -0
  50. package/types/components/index.d.ts +1 -0
  51. package/types/components/input/YInput.d.ts +7 -7
  52. package/types/components/layer/YLayer.d.ts +20 -19
  53. package/types/components/layer/active-stack.d.ts +1 -2
  54. package/types/components/list/YListItem.d.ts +2 -2
  55. package/types/components/menu/YMenu.d.ts +8 -3
  56. package/types/components/pagination/YPagination.d.ts +5 -5
  57. package/types/components/progress-bar/YProgressBar.d.ts +1 -1
  58. package/types/components/select/YSelect.d.ts +74 -58
  59. package/types/components/switch/YSwitch.d.ts +1 -1
  60. package/types/components/tab/YTab.d.ts +15 -15
  61. package/types/components/tab/YTabs.d.ts +5 -5
  62. package/types/components/table/YDataTable.d.ts +18 -18
  63. package/types/components/table/YDataTableBody.d.ts +5 -5
  64. package/types/components/table/YDataTableControl.d.ts +2 -2
  65. package/types/components/table/YDataTableHead.d.ts +2 -2
  66. package/types/components/table/YDataTableServer.d.ts +21 -21
  67. package/types/components/table/YTable.d.ts +4 -4
  68. package/types/components/table/composibles/header.d.ts +1 -1
  69. package/types/components/table/composibles/items.d.ts +3 -3
  70. package/types/components/table/composibles/pagination.d.ts +2 -2
  71. package/types/components/table/composibles/selection.d.ts +2 -2
  72. package/types/components/table/composibles/sorting.d.ts +1 -1
  73. package/types/components/textarea/YTextarea.d.ts +10 -10
  74. package/types/components/tooltip/YTooltip.d.ts +9 -8
  75. package/types/components/tree-view/YTreeView.d.ts +4 -4
  76. package/types/components/tree-view/YTreeViewNode.d.ts +9 -9
  77. package/types/composables/choice.d.ts +1 -1
  78. package/types/composables/coordinate/index.d.ts +6 -6
  79. package/types/composables/icon.d.ts +96 -0
  80. package/types/composables/list-items.d.ts +10 -10
  81. package/types/composables/theme/index.d.ts +2 -2
  82. package/types/globals.d.ts +12 -7
  83. package/types/shims.d.ts +88 -87
  84. package/types/types/index.d.ts +5 -0
  85. package/types/util/date/built-in.d.ts +2 -2
@@ -10,7 +10,7 @@ import { deepEqual, getObjectValueByPath, omit } from "../../util/common.mjs";
10
10
  import { chooseProps, propsFactory } from "../../util/vue-component.mjs";
11
11
  import { YCard } from "../card/index.mjs";
12
12
  import { YFieldInput, pressYFieldInputPropsOptions } from "../field-input/index.mjs";
13
- import { YIconDropdown } from "../icons/YIconDropdown.mjs";
13
+ import { YIcon } from "../icon/index.mjs";
14
14
  import { YList, YListItem } from "../list/index.mjs";
15
15
  import { YMenu } from "../menu/index.mjs";
16
16
  import "./YSelect.scss";
@@ -36,8 +36,9 @@ export const pressYSelectPropsOptions = propsFactory({
36
36
  type: [Number, String],
37
37
  default: 310
38
38
  },
39
- expandIcon: {
40
- type: Object
39
+ dropdownIcon: {
40
+ type: [String, Array, Object],
41
+ default: '$dropdown'
41
42
  },
42
43
  openDelay: {
43
44
  type: Number,
@@ -158,6 +159,7 @@ export const YSelect = defineComponent({
158
159
  });
159
160
  useRender(() => {
160
161
  const fieldInputProps = chooseProps(props, YFieldInput.props);
162
+ const dropdownIconProps = chooseProps(typeof props.dropdownIcon === 'object' ? props.dropdownIcon : {}, YIcon.props);
161
163
  return _createVNode(YMenu, {
162
164
  "modelValue": opened.value,
163
165
  "onUpdate:modelValue": $event => opened.value = $event,
@@ -208,9 +210,10 @@ export const YSelect = defineComponent({
208
210
  return slots.leading?.(...args);
209
211
  } : undefined,
210
212
  trailing: function () {
211
- return slots['expand-icon'] ? slots['expand-icon']() : _createVNode("i", {
212
- "class": "y-select__icon"
213
- }, [_createVNode(YIconDropdown, null, null)]);
213
+ return slots['dropdown-icon'] ? slots['dropdown-icon']() : _createVNode(YIcon, _mergeProps(mergeProps(dropdownIconProps), {
214
+ "icon": props.dropdownIcon,
215
+ "class": ['y-select__icon']
216
+ }), null);
214
217
  },
215
218
  'helper-text': slots['helper-text'] ? slots['helper-text']?.() : undefined
216
219
  });
@@ -1 +1 @@
1
- {"version":3,"file":"YSelect.mjs","names":["shallowRef","computed","defineComponent","mergeProps","onMounted","ref","useModelDuplex","useRender","pressCoordinateProps","pressListItemsPropsOptions","useItems","wrapInArray","deepEqual","getObjectValueByPath","omit","chooseProps","propsFactory","YCard","YFieldInput","pressYFieldInputPropsOptions","YIconDropdown","YList","YListItem","YMenu","returnItemEquals","optionsItem","valueItem","valueKey","arguments","length","undefined","valueItemType","itemValue","pressSelectPropsOptions","opened","Boolean","multiple","weakEquals","valueEquals","type","Function","default","defaultSelect","pressYSelectPropsOptions","maxHeight","Number","String","expandIcon","Object","openDelay","closeDelay","position","YSelect","name","inheritAttrs","props","emits","value","click:item","item","e","slots","setup","_ref","attrs","expose","fieldInputRef","menuRef","listRef","focused","items","toRefineItems","toEmitItems","model","v","emitValue","selections","map","find","selected","selection","isSelected","selectedItem","onMousedownDisplay","event","disabled","onBlur","onClickItem","select","onAfterLeave","focus","closeCondition","target","layer$","content$","contains","index","findIndex","neo","slice","splice","displayText","text","join","baseEl","fieldInputProps","_createVNode","$event","offset","align","origin","base","_len","args","Array","_key","_mergeProps","leading","_len2","_key2","trailing","menu","_createTextVNode","modelValue","isArray"],"sources":["../../../src/components/select/YSelect.tsx"],"sourcesContent":["import { shallowRef } from '@vue/runtime-core';\r\nimport type { PropType, SlotsType } from 'vue';\r\nimport { computed, defineComponent, mergeProps, onMounted, ref } from 'vue';\r\n\r\nimport { useModelDuplex } from '../../composables/communication';\r\nimport { useRender } from '../../composables/component';\r\nimport { pressCoordinateProps } from '../../composables/coordinate';\r\nimport {\r\n ListItem,\r\n pressListItemsPropsOptions,\r\n useItems,\r\n} from '../../composables/list-items';\r\nimport { wrapInArray } from '../../util/array';\r\nimport { deepEqual, getObjectValueByPath, omit } from '../../util/common';\r\nimport { chooseProps, propsFactory } from '../../util/vue-component';\r\nimport { YCard } from '../card';\r\nimport { YFieldInput, pressYFieldInputPropsOptions } from '../field-input';\r\nimport { YIconDropdown } from '../icons/YIconDropdown';\r\nimport { YList, YListItem } from '../list';\r\nimport { YMenu } from '../menu';\r\n\r\nimport './YSelect.scss';\r\n\r\nexport type SelectEquals = (\r\n optionsItem: any,\r\n valueItem: any,\r\n valueKey?: string,\r\n) => boolean;\r\n\r\nexport function returnItemEquals(\r\n optionsItem: any,\r\n valueItem: any,\r\n valueKey = 'value',\r\n) {\r\n const valueItemType = typeof valueItem;\r\n const itemValue =\r\n valueItemType === 'string' || valueItemType === 'number'\r\n ? getObjectValueByPath(optionsItem, valueKey)\r\n : optionsItem;\r\n return deepEqual(itemValue, valueItem);\r\n}\r\n\r\nexport const pressSelectPropsOptions = propsFactory(\r\n {\r\n opened: Boolean as PropType<boolean>,\r\n multiple: Boolean,\r\n weakEquals: Boolean,\r\n valueEquals: {\r\n type: Function as PropType<SelectEquals>,\r\n default: deepEqual,\r\n },\r\n defaultSelect: Boolean,\r\n ...pressListItemsPropsOptions(),\r\n },\r\n 'Select',\r\n);\r\n\r\nexport const pressYSelectPropsOptions = propsFactory(\r\n {\r\n maxHeight: {\r\n type: [Number, String],\r\n default: 310,\r\n },\r\n expandIcon: {\r\n type: Object,\r\n },\r\n openDelay: {\r\n type: Number as PropType<number>,\r\n default: 200,\r\n },\r\n closeDelay: {\r\n type: Number as PropType<number>,\r\n default: 200,\r\n },\r\n ...pressSelectPropsOptions(),\r\n ...pressYFieldInputPropsOptions(),\r\n ...omit(pressCoordinateProps({ position: 'bottom' as 'bottom' }), [\r\n 'coordinateStrategy',\r\n ]),\r\n },\r\n 'YSelect',\r\n);\r\n\r\nexport const YSelect = defineComponent({\r\n name: 'YSelect',\r\n inheritAttrs: false,\r\n props: {\r\n ...pressYSelectPropsOptions(),\r\n },\r\n emits: {\r\n 'update:modelValue': (value: any) => true,\r\n 'update:opened': (opened: boolean) => true,\r\n 'click:item': (item: any, e: MouseEvent) => true,\r\n },\r\n slots: Object as SlotsType<{\r\n base: any;\r\n selection: any;\r\n leading: any;\r\n 'helper-text': any;\r\n menu: any;\r\n 'menu-prepend': any;\r\n 'menu-append': any;\r\n 'expand-icon': any;\r\n item: { item: any; selected: boolean; select: () => void };\r\n }>,\r\n setup(props, { slots, attrs, expose }) {\r\n const fieldInputRef = ref();\r\n const menuRef = ref<InstanceType<typeof YMenu>>();\r\n const listRef = ref<InstanceType<typeof YList>>();\r\n\r\n const opened = useModelDuplex(props, 'opened');\r\n const focused = shallowRef(false);\r\n\r\n const { items, toRefineItems, toEmitItems } = useItems(props);\r\n const model = useModelDuplex(\r\n props,\r\n 'modelValue',\r\n [],\r\n (v) => toRefineItems(v === null ? [null] : wrapInArray(v)),\r\n (v) => {\r\n const emitValue = toEmitItems(wrapInArray(v));\r\n return props.multiple ? emitValue : emitValue[0] ?? null;\r\n },\r\n );\r\n\r\n const selections = computed<ListItem[]>(() => {\r\n return model.value.map((v: any) => {\r\n return items.value.find((item) => {\r\n return props.valueEquals(item.value, v.value);\r\n });\r\n });\r\n });\r\n\r\n const selected = computed(() => {\r\n return selections.value.map((selection) => selection.props.value);\r\n });\r\n\r\n function isSelected(item: ListItem) {\r\n return !!selections.value.find((selectedItem) => {\r\n return selectedItem?.value === item.value;\r\n });\r\n }\r\n\r\n // Field\r\n function onMousedownDisplay(event: MouseEvent) {\r\n if (props.disabled) {\r\n return;\r\n }\r\n opened.value = !opened.value;\r\n }\r\n\r\n function onBlur(event: FocusEvent) {\r\n // if (listRef.value?.$el.contains(event.relatedTarget)) {\r\n // opened.value = false;\r\n // }\r\n }\r\n\r\n // Menu Contents\r\n function onClickItem(item: ListItem, e: MouseEvent) {\r\n select(item);\r\n if (!props.multiple) {\r\n opened.value = false;\r\n }\r\n }\r\n\r\n function onAfterLeave() {\r\n if (focused.value) {\r\n fieldInputRef.value?.focus();\r\n }\r\n }\r\n\r\n function closeCondition(event: MouseEvent) {\r\n if (event.target && (menuRef.value as any)?.layer$?.content$.value) {\r\n return (event.target as HTMLElement)?.contains((menuRef.value as any)?.layer$?.content$.value)\r\n }\r\n }\r\n\r\n function select(item: ListItem) {\r\n if (props.multiple) {\r\n const index = selections.value.findIndex((selectedItem) => {\r\n return selectedItem.value === item.value;\r\n });\r\n if (index === -1) {\r\n model.value = [...model.value, item];\r\n } else {\r\n const neo = model.value.slice();\r\n neo.splice(index, 1);\r\n model.value = neo;\r\n }\r\n } else {\r\n model.value = [item];\r\n }\r\n }\r\n\r\n const displayText = computed(() => {\r\n if (props.multiple) {\r\n return selections.value.map((item) => item.text).join(', ');\r\n }\r\n return selections.value?.[0]?.text ?? '';\r\n });\r\n\r\n const baseEl = computed(() => {\r\n return menuRef.value?.baseEl;\r\n });\r\n\r\n useRender(() => {\r\n const fieldInputProps = chooseProps(props, YFieldInput.props);\r\n return (\r\n <YMenu\r\n v-model={opened.value}\r\n ref={menuRef}\r\n offset={props.offset}\r\n position={props.position}\r\n align={props.align}\r\n origin={props.origin}\r\n content-classes={['y-select__content']}\r\n maxHeight={props.maxHeight}\r\n open-on-click-base={false}\r\n onAfterLeave={onAfterLeave}\r\n open-delay={props.openDelay}\r\n close-delay={props.closeDelay}\r\n closeCondition={closeCondition}\r\n >\r\n {{\r\n base: (...args: any[]) =>\r\n slots.base ? (\r\n slots.base?.(...args)\r\n ) : (\r\n <YFieldInput\r\n {...{\r\n ...fieldInputProps,\r\n ...mergeProps({ ...args[0].props }, { ref: fieldInputRef }),\r\n }}\r\n onMousedown:display={onMousedownDisplay}\r\n onBlur={onBlur}\r\n readonly\r\n class={['y-select', { 'y-select--opened': opened.value }]}\r\n {...attrs}\r\n v-model:focused={focused.value}\r\n >\r\n {{\r\n default: () => {\r\n return (\r\n <div class={['y-select__selection']}>\r\n {slots.selection\r\n ? slots.selection?.()\r\n : displayText.value}\r\n </div>\r\n );\r\n },\r\n leading: slots.leading\r\n ? (...args: any[]) => slots.leading?.(...args)\r\n : undefined,\r\n trailing: (...args: any[]) => {\r\n return slots['expand-icon'] ? (\r\n slots['expand-icon']()\r\n ) : (\r\n <i class=\"y-select__icon\">\r\n <YIconDropdown></YIconDropdown>\r\n </i>\r\n );\r\n },\r\n 'helper-text': slots['helper-text']\r\n ? slots['helper-text']?.()\r\n : undefined,\r\n }}\r\n </YFieldInput>\r\n ),\r\n default: slots.menu\r\n ? () => slots.menu()\r\n : () => (\r\n <YCard>\r\n {slots['menu-prepend']?.()}\r\n {items.value.length > 0 ? (\r\n <YList ref={listRef}>\r\n {items.value.map((item) => {\r\n return (\r\n <YListItem\r\n onClick={(e) => onClickItem(item, e)}\r\n class={{\r\n 'y-list-item--active': isSelected(item),\r\n }}\r\n >\r\n {slots.item\r\n ? slots.item({\r\n item,\r\n selected: isSelected(item),\r\n select: () => {\r\n select(item);\r\n },\r\n })\r\n : item.text}\r\n </YListItem>\r\n );\r\n })}\r\n </YList>\r\n ) : (\r\n <div class=\"y-select__no-options\">항목이 없습니다.</div>\r\n )}\r\n {slots['menu-append']?.()}\r\n </YCard>\r\n ),\r\n }}\r\n </YMenu>\r\n );\r\n });\r\n\r\n onMounted(() => {\r\n if (\r\n props.defaultSelect &&\r\n (props.modelValue === undefined ||\r\n (Array.isArray(props.modelValue) && props.modelValue.length === 0)) &&\r\n items.value?.length\r\n ) {\r\n select(items.value[0]);\r\n }\r\n });\r\n\r\n expose({\r\n fieldInputRef,\r\n baseEl,\r\n });\r\n\r\n return {\r\n fieldInputRef,\r\n model,\r\n selections,\r\n selected,\r\n menuRef,\r\n baseEl,\r\n };\r\n },\r\n});\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"YSelect.mjs","names":["shallowRef","computed","defineComponent","mergeProps","onMounted","ref","useModelDuplex","useRender","pressCoordinateProps","pressListItemsPropsOptions","useItems","wrapInArray","deepEqual","getObjectValueByPath","omit","chooseProps","propsFactory","YCard","YFieldInput","pressYFieldInputPropsOptions","YIcon","YList","YListItem","YMenu","returnItemEquals","optionsItem","valueItem","valueKey","arguments","length","undefined","valueItemType","itemValue","pressSelectPropsOptions","opened","Boolean","multiple","weakEquals","valueEquals","type","Function","default","defaultSelect","pressYSelectPropsOptions","maxHeight","Number","String","dropdownIcon","Array","Object","openDelay","closeDelay","position","YSelect","name","inheritAttrs","props","emits","value","click:item","item","e","slots","setup","_ref","attrs","expose","fieldInputRef","menuRef","listRef","focused","items","toRefineItems","toEmitItems","model","v","emitValue","selections","map","find","selected","selection","isSelected","selectedItem","onMousedownDisplay","event","disabled","onBlur","onClickItem","select","onAfterLeave","focus","closeCondition","target","layer$","content$","contains","index","findIndex","neo","slice","splice","displayText","text","join","baseEl","fieldInputProps","dropdownIconProps","_createVNode","$event","offset","align","origin","base","_len","args","_key","_mergeProps","leading","_len2","_key2","trailing","menu","_createTextVNode","modelValue","isArray"],"sources":["../../../src/components/select/YSelect.tsx"],"sourcesContent":["import { shallowRef } from '@vue/runtime-core';\nimport type { PropType, SlotsType } from 'vue';\nimport { computed, defineComponent, mergeProps, onMounted, ref } from 'vue';\n\nimport { useModelDuplex } from '../../composables/communication';\nimport { useRender } from '../../composables/component';\nimport { pressCoordinateProps } from '../../composables/coordinate';\nimport {\n ListItem,\n pressListItemsPropsOptions,\n useItems,\n} from '../../composables/list-items';\nimport { wrapInArray } from '../../util/array';\nimport { deepEqual, getObjectValueByPath, omit } from '../../util/common';\nimport { chooseProps, propsFactory } from '../../util/vue-component';\nimport { YCard } from '../card';\nimport { YFieldInput, pressYFieldInputPropsOptions } from '../field-input';\nimport { YIcon, YIconIconProp } from '../icon';\nimport { YIconDropdown } from '../icons/YIconDropdown';\nimport { YList, YListItem } from '../list';\nimport { YMenu } from '../menu';\n\nimport './YSelect.scss';\n\nexport type SelectEquals = (\n optionsItem: any,\n valueItem: any,\n valueKey?: string,\n) => boolean;\n\nexport function returnItemEquals(\n optionsItem: any,\n valueItem: any,\n valueKey = 'value',\n) {\n const valueItemType = typeof valueItem;\n const itemValue =\n valueItemType === 'string' || valueItemType === 'number'\n ? getObjectValueByPath(optionsItem, valueKey)\n : optionsItem;\n return deepEqual(itemValue, valueItem);\n}\n\nexport const pressSelectPropsOptions = propsFactory(\n {\n opened: Boolean as PropType<boolean>,\n multiple: Boolean,\n weakEquals: Boolean,\n valueEquals: {\n type: Function as PropType<SelectEquals>,\n default: deepEqual,\n },\n defaultSelect: Boolean,\n ...pressListItemsPropsOptions(),\n },\n 'Select',\n);\n\nexport const pressYSelectPropsOptions = propsFactory(\n {\n maxHeight: {\n type: [Number, String],\n default: 310,\n },\n dropdownIcon: {\n type: [String, Array, Object] as PropType<YIconIconProp>,\n default: '$dropdown',\n },\n openDelay: {\n type: Number as PropType<number>,\n default: 200,\n },\n closeDelay: {\n type: Number as PropType<number>,\n default: 200,\n },\n ...pressSelectPropsOptions(),\n ...pressYFieldInputPropsOptions(),\n ...omit(pressCoordinateProps({ position: 'bottom' as 'bottom' }), [\n 'coordinateStrategy',\n ]),\n },\n 'YSelect',\n);\n\nexport const YSelect = defineComponent({\n name: 'YSelect',\n inheritAttrs: false,\n props: {\n ...pressYSelectPropsOptions(),\n },\n emits: {\n 'update:modelValue': (value: any) => true,\n 'update:opened': (opened: boolean) => true,\n 'click:item': (item: any, e: MouseEvent) => true,\n },\n slots: Object as SlotsType<{\n base: any;\n selection: any;\n leading: any;\n 'helper-text': any;\n menu: any;\n 'menu-prepend': any;\n 'menu-append': any;\n 'dropdown-icon': any;\n item: { item: any; selected: boolean; select: () => void };\n }>,\n setup(props, { slots, attrs, expose }) {\n const fieldInputRef = ref();\n const menuRef = ref<InstanceType<typeof YMenu>>();\n const listRef = ref<InstanceType<typeof YList>>();\n\n const opened = useModelDuplex(props, 'opened');\n const focused = shallowRef(false);\n\n const { items, toRefineItems, toEmitItems } = useItems(props);\n const model = useModelDuplex(\n props,\n 'modelValue',\n [],\n (v) => toRefineItems(v === null ? [null] : wrapInArray(v)),\n (v) => {\n const emitValue = toEmitItems(wrapInArray(v));\n return props.multiple ? emitValue : emitValue[0] ?? null;\n },\n );\n\n const selections = computed<ListItem[]>(() => {\n return model.value.map((v: any) => {\n return items.value.find((item) => {\n return props.valueEquals(item.value, v.value);\n });\n });\n });\n\n const selected = computed(() => {\n return selections.value.map((selection) => selection.props.value);\n });\n\n function isSelected(item: ListItem) {\n return !!selections.value.find((selectedItem) => {\n return selectedItem?.value === item.value;\n });\n }\n\n // Field\n function onMousedownDisplay(event: MouseEvent) {\n if (props.disabled) {\n return;\n }\n opened.value = !opened.value;\n }\n\n function onBlur(event: FocusEvent) {\n // if (listRef.value?.$el.contains(event.relatedTarget)) {\n // opened.value = false;\n // }\n }\n\n // Menu Contents\n function onClickItem(item: ListItem, e: MouseEvent) {\n select(item);\n if (!props.multiple) {\n opened.value = false;\n }\n }\n\n function onAfterLeave() {\n if (focused.value) {\n fieldInputRef.value?.focus();\n }\n }\n\n function closeCondition(event: MouseEvent) {\n if (event.target && (menuRef.value as any)?.layer$?.content$.value) {\n return (event.target as HTMLElement)?.contains(\n (menuRef.value as any)?.layer$?.content$.value,\n );\n }\n }\n\n function select(item: ListItem) {\n if (props.multiple) {\n const index = selections.value.findIndex((selectedItem) => {\n return selectedItem.value === item.value;\n });\n if (index === -1) {\n model.value = [...model.value, item];\n } else {\n const neo = model.value.slice();\n neo.splice(index, 1);\n model.value = neo;\n }\n } else {\n model.value = [item];\n }\n }\n\n const displayText = computed(() => {\n if (props.multiple) {\n return selections.value.map((item) => item.text).join(', ');\n }\n return selections.value?.[0]?.text ?? '';\n });\n\n const baseEl = computed(() => {\n return menuRef.value?.baseEl;\n });\n\n useRender(() => {\n const fieldInputProps = chooseProps(props, YFieldInput.props);\n const dropdownIconProps = chooseProps(\n typeof props.dropdownIcon === 'object' ? props.dropdownIcon : {},\n YIcon.props,\n );\n return (\n <YMenu\n v-model={opened.value}\n ref={menuRef}\n offset={props.offset}\n position={props.position}\n align={props.align}\n origin={props.origin}\n content-classes={['y-select__content']}\n maxHeight={props.maxHeight}\n open-on-click-base={false}\n onAfterLeave={onAfterLeave}\n open-delay={props.openDelay}\n close-delay={props.closeDelay}\n closeCondition={closeCondition}\n >\n {{\n base: (...args: any[]) =>\n slots.base ? (\n slots.base?.(...args)\n ) : (\n <YFieldInput\n {...{\n ...fieldInputProps,\n ...mergeProps({ ...args[0].props }, { ref: fieldInputRef }),\n }}\n onMousedown:display={onMousedownDisplay}\n onBlur={onBlur}\n readonly\n class={['y-select', { 'y-select--opened': opened.value }]}\n {...attrs}\n v-model:focused={focused.value}\n >\n {{\n default: () => {\n return (\n <div class={['y-select__selection']}>\n {slots.selection\n ? slots.selection?.()\n : displayText.value}\n </div>\n );\n },\n leading: slots.leading\n ? (...args: any[]) => slots.leading?.(...args)\n : undefined,\n trailing: (...args: any[]) => {\n return slots['dropdown-icon'] ? (\n slots['dropdown-icon']()\n ) : (\n <YIcon\n {...mergeProps(dropdownIconProps)}\n icon={props.dropdownIcon}\n class={['y-select__icon']}\n ></YIcon>\n );\n },\n 'helper-text': slots['helper-text']\n ? slots['helper-text']?.()\n : undefined,\n }}\n </YFieldInput>\n ),\n default: slots.menu\n ? () => slots.menu()\n : () => (\n <YCard>\n {slots['menu-prepend']?.()}\n {items.value.length > 0 ? (\n <YList ref={listRef}>\n {items.value.map((item) => {\n return (\n <YListItem\n onClick={(e) => onClickItem(item, e)}\n class={{\n 'y-list-item--active': isSelected(item),\n }}\n >\n {slots.item\n ? slots.item({\n item,\n selected: isSelected(item),\n select: () => {\n select(item);\n },\n })\n : item.text}\n </YListItem>\n );\n })}\n </YList>\n ) : (\n <div class=\"y-select__no-options\">항목이 없습니다.</div>\n )}\n {slots['menu-append']?.()}\n </YCard>\n ),\n }}\n </YMenu>\n );\n });\n\n onMounted(() => {\n if (\n props.defaultSelect &&\n (props.modelValue === undefined ||\n (Array.isArray(props.modelValue) && props.modelValue.length === 0)) &&\n items.value?.length\n ) {\n select(items.value[0]);\n }\n });\n\n expose({\n fieldInputRef,\n baseEl,\n });\n\n return {\n fieldInputRef,\n model,\n selections,\n selected,\n menuRef,\n baseEl,\n };\n },\n});\n"],"mappings":"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"}
@@ -1,18 +1,13 @@
1
1
  .y-select {
2
2
  &__icon {
3
3
  transition: 200ms ease;
4
- width: 1.5em;
5
- height: 1.5em;
6
4
  margin-right: 8px;
7
-
8
- > svg {
9
- width: 1.5em;
10
- height: 1.5em;
11
- }
5
+ width: 24px;
6
+ height: 24px;
12
7
  }
13
8
 
14
9
  &--opened &__icon {
15
- transform: rotate3d(1, 0, 0, 180deg) translateY(0.1em);
10
+ transform: rotate3d(1, 0, 0, 180deg);
16
11
  }
17
12
 
18
13
  &__content {
@@ -1,2 +1,143 @@
1
+ import { createVNode as _createVNode, Fragment as _Fragment } from "vue";
2
+ import { computed, defineComponent, inject, mergeProps, unref } from 'vue';
3
+ import { builtSet } from "../components/index.mjs";
4
+ import { mergeDeep, propsFactory } from "../util/index.mjs";
1
5
  export const IconPropOption = [String, Function, Object, Array];
6
+ export const IconValue = [String, Object, Array, Function];
7
+ export const pressIconPropsOptions = propsFactory({
8
+ icon: {
9
+ type: IconValue
10
+ },
11
+ tag: {
12
+ type: String,
13
+ required: true
14
+ }
15
+ }, 'icon');
16
+ export const YComponentIcon = defineComponent({
17
+ name: 'YComponentIcon',
18
+ props: pressIconPropsOptions(),
19
+ setup(props, _ref) {
20
+ let {
21
+ slots
22
+ } = _ref;
23
+ return () => {
24
+ const icon = props.icon;
25
+ let Icon = () => _createVNode(_Fragment, null, null);
26
+ let iconProps = {};
27
+ if (icon instanceof Object) {
28
+ Icon = icon;
29
+ if ('component' in icon) {
30
+ Icon = icon.component;
31
+ iconProps = icon?.props;
32
+ }
33
+ }
34
+ return _createVNode(props.tag, null, {
35
+ default: () => [props.icon ? _createVNode(Icon, mergeProps(iconProps), null) : slots.default?.()]
36
+ });
37
+ };
38
+ }
39
+ });
40
+ export const YSvgIcon = defineComponent({
41
+ name: 'YSvgIcon',
42
+ inheritAttrs: false,
43
+ props: pressIconPropsOptions(),
44
+ setup(props, _ref2) {
45
+ let {
46
+ attrs
47
+ } = _ref2;
48
+ return () => {
49
+ return _createVNode(props.tag, attrs, {
50
+ default: () => [_createVNode("svg", {
51
+ "class": "y-icon__svg",
52
+ "xmlns": "http://www.w3.org/2000/svg",
53
+ "viewBox": "0 0 24 24",
54
+ "role": "img",
55
+ "aria-hidden": "true"
56
+ }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? _createVNode("path", {
57
+ "d": path[0],
58
+ "fill-opacity": path[1]
59
+ }, null) : _createVNode("path", {
60
+ "d": path
61
+ }, null)) : _createVNode("path", {
62
+ "d": props.icon
63
+ }, null)])]
64
+ });
65
+ };
66
+ }
67
+ });
68
+ export const YUYEON_ICON_KEY = Symbol.for('yuyeon.icon');
69
+ export function createIconModule(options) {
70
+ return mergeDeep({
71
+ defaultSet: 'built',
72
+ sets: {
73
+ svg: {
74
+ component: YSvgIcon
75
+ }
76
+ },
77
+ aliases: {
78
+ ...builtSet
79
+ }
80
+ }, options);
81
+ }
82
+ export function useIcon(iconProp) {
83
+ const iconModule = inject(YUYEON_ICON_KEY);
84
+ if (!iconModule) throw new Error('Not found provided "IconModule"');
85
+ const iconData = computed(() => {
86
+ const iconMeta = unref(iconProp);
87
+ if (!iconMeta) return {
88
+ component: YComponentIcon
89
+ };
90
+ let icon = iconMeta;
91
+ if (typeof icon === 'object' && 'alias' in icon && typeof icon.alias === 'string') {
92
+ icon = icon.alias;
93
+ }
94
+ if (typeof icon === 'string') {
95
+ icon = icon.trim();
96
+ if (icon.startsWith('$')) {
97
+ icon = iconModule.aliases?.[icon.slice(1)];
98
+ }
99
+ }
100
+ if (!icon) throw new Error(`Could not find aliased icon "${iconMeta}"`);
101
+ if (Array.isArray(icon)) {
102
+ return {
103
+ component: YSvgIcon,
104
+ icon
105
+ };
106
+ } else if (typeof icon !== 'string') {
107
+ const iconValue = unref(iconProp);
108
+ console.log(iconValue);
109
+ if (iconValue && typeof iconValue === 'object' && 'iconProps' in iconValue) {
110
+ icon = {
111
+ component: 'component' in icon ? icon.component : icon,
112
+ props: 'props' in icon ? mergeDeep(icon.props, iconValue?.iconProps ?? {}) : iconValue.iconProps
113
+ };
114
+ }
115
+ return {
116
+ component: YComponentIcon,
117
+ icon
118
+ };
119
+ }
120
+ const iconSetName = Object.keys(iconModule.sets).find(setName => typeof icon === 'string' && icon.startsWith(`${setName}:`));
121
+ const iconName = iconSetName ? icon.slice(iconSetName.length + 1) : icon;
122
+ const iconSet = iconModule.sets[iconSetName ?? iconModule.defaultSet];
123
+ if (!iconSet?.component && typeof icon === 'string') {
124
+ const text = new DOMParser().parseFromString(icon, 'text/xml');
125
+ const svgNode = text.querySelector('svg');
126
+ if (svgNode) {
127
+ return {
128
+ component: () => {
129
+ template: svgNode;
130
+ }
131
+ };
132
+ }
133
+ }
134
+ return {
135
+ icon: iconName,
136
+ component: iconSet.component
137
+ };
138
+ });
139
+ return {
140
+ iconData
141
+ };
142
+ }
2
143
  //# sourceMappingURL=icon.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"icon.mjs","names":["IconPropOption","String","Function","Object","Array"],"sources":["../../src/composables/icon.ts"],"sourcesContent":["\r\nimport type { Component, PropType } from \"vue\";\r\n\r\nexport type IconValue = string | (string | [path: string, opacity: number])[] | Component;\r\n\r\nexport const IconPropOption = [String, Function, Object, Array] as PropType<IconValue>;\r\n\r\ntype IconProps = {\r\n tag: string;\r\n icon?: IconValue,\r\n disabled?: Boolean,\r\n}\r\n\r\ntype IconComponent = Component<IconProps>;\r\n"],"mappings":"AAKA,OAAO,MAAMA,cAAc,GAAG,CAACC,MAAM,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,KAAK,CAAwB"}
1
+ {"version":3,"file":"icon.mjs","names":["computed","defineComponent","inject","mergeProps","unref","builtSet","mergeDeep","propsFactory","IconPropOption","String","Function","Object","Array","IconValue","pressIconPropsOptions","icon","type","tag","required","YComponentIcon","name","props","setup","_ref","slots","Icon","_createVNode","_Fragment","iconProps","component","default","YSvgIcon","inheritAttrs","_ref2","attrs","isArray","map","path","YUYEON_ICON_KEY","Symbol","for","createIconModule","options","defaultSet","sets","svg","aliases","useIcon","iconProp","iconModule","Error","iconData","iconMeta","alias","trim","startsWith","slice","iconValue","console","log","iconSetName","keys","find","setName","iconName","length","iconSet","text","DOMParser","parseFromString","svgNode","querySelector","template"],"sources":["../../src/composables/icon.tsx"],"sourcesContent":["import { HTMLAttributes } from '@vue/runtime-dom';\nimport type { Component, InjectionKey, PropType, Ref } from 'vue';\nimport { computed, defineComponent, inject, mergeProps, unref } from 'vue';\n\nimport { builtSet } from '../components';\nimport { JSXComponent } from '../types';\nimport { mergeDeep, propsFactory } from '../util';\n\ntype IconComponent = JSXComponent<IconProps>;\n\nexport type IconValue =\n | string\n | (string | [path: string, opacity: number])[]\n | IconComponent\n | { component: JSXComponent; props?: any }\n | { alias: string; iconProps?: any };\n\nexport const IconPropOption = [\n String,\n Function,\n Object,\n Array,\n] as PropType<IconValue>;\n\ntype IconProps = {\n tag: string;\n icon?: IconValue;\n disabled?: Boolean;\n};\n\nexport interface IconSet {\n component: IconComponent;\n}\n\nexport const IconValue = [\n String,\n Object,\n Array,\n Function,\n] as PropType<IconValue>;\n\nexport type IconModuleOptions = {\n defaultSet?: string;\n sets?: Record<string, IconSet>;\n aliases?: Partial<Record<string, any>>;\n};\n\nexport const pressIconPropsOptions = propsFactory(\n {\n icon: {\n type: IconValue,\n },\n tag: {\n type: String,\n required: true,\n },\n },\n 'icon',\n);\n\nexport const YComponentIcon = defineComponent({\n name: 'YComponentIcon',\n props: pressIconPropsOptions(),\n setup(props, { slots }) {\n return () => {\n const icon = props.icon as unknown;\n let Icon: JSXComponent = () => <></>;\n let iconProps: any = {};\n if (icon instanceof Object) {\n Icon = icon as JSXComponent;\n if ('component' in icon) {\n Icon = icon.component as JSXComponent;\n iconProps = (icon as any)?.props;\n }\n }\n return (\n <props.tag>\n {props.icon ? <Icon {...mergeProps(iconProps)} /> : slots.default?.()}\n </props.tag>\n );\n };\n },\n});\nexport type YComponentIcon = InstanceType<typeof YComponentIcon>;\n\nexport const YSvgIcon = defineComponent({\n name: 'YSvgIcon',\n inheritAttrs: false,\n props: pressIconPropsOptions(),\n setup(props, { attrs }) {\n return () => {\n return (\n <props.tag {...attrs}>\n <svg\n class=\"y-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n {Array.isArray(props.icon) ? (\n props.icon.map((path) =>\n Array.isArray(path) ? (\n <path d={path[0] as string} fill-opacity={path[1]}></path>\n ) : (\n <path d={path as string}></path>\n ),\n )\n ) : (\n <path d={props.icon as string}></path>\n )}\n </svg>\n </props.tag>\n );\n };\n },\n});\nexport type YSvgIcon = InstanceType<typeof YSvgIcon>;\n\nexport const YUYEON_ICON_KEY: InjectionKey<Required<IconModuleOptions>> =\n Symbol.for('yuyeon.icon');\n\nexport function createIconModule(options?: IconModuleOptions) {\n return mergeDeep(\n {\n defaultSet: 'built',\n sets: {\n svg: {\n component: YSvgIcon,\n },\n },\n aliases: {\n ...builtSet,\n },\n },\n options,\n );\n}\n\ntype IconInstance = {\n component: IconComponent;\n icon?: IconValue;\n};\n\nexport function useIcon(iconProp: Ref<IconValue | undefined>) {\n const iconModule = inject(YUYEON_ICON_KEY);\n\n if (!iconModule) throw new Error('Not found provided \"IconModule\"');\n\n const iconData = computed<IconInstance>(() => {\n const iconMeta = unref(iconProp);\n\n if (!iconMeta) return { component: YComponentIcon };\n\n let icon: IconValue | undefined = iconMeta;\n\n if (\n typeof icon === 'object' &&\n 'alias' in icon &&\n typeof icon.alias === 'string'\n ) {\n icon = icon.alias;\n }\n\n if (typeof icon === 'string') {\n icon = icon.trim();\n\n if (icon.startsWith('$')) {\n icon = iconModule.aliases?.[icon.slice(1)];\n }\n }\n\n if (!icon) throw new Error(`Could not find aliased icon \"${iconMeta}\"`);\n\n if (Array.isArray(icon)) {\n return {\n component: YSvgIcon,\n icon,\n };\n } else if (typeof icon !== 'string') {\n const iconValue = unref(iconProp);\n console.log(iconValue);\n if (\n iconValue &&\n typeof iconValue === 'object' &&\n 'iconProps' in iconValue\n ) {\n icon = {\n component:\n 'component' in icon ? icon.component : (icon as JSXComponent),\n props:\n 'props' in icon\n ? mergeDeep(icon.props, iconValue?.iconProps ?? {})\n : iconValue.iconProps,\n };\n }\n\n return {\n component: YComponentIcon,\n icon,\n };\n }\n\n const iconSetName = Object.keys(iconModule.sets).find(\n (setName) => typeof icon === 'string' && icon.startsWith(`${setName}:`),\n );\n\n const iconName = iconSetName ? icon.slice(iconSetName.length + 1) : icon;\n const iconSet = iconModule.sets[iconSetName ?? iconModule.defaultSet];\n\n if (!iconSet?.component && typeof icon === 'string') {\n const text = new DOMParser().parseFromString(icon, 'text/xml');\n const svgNode = text.querySelector('svg');\n if (svgNode) {\n return {\n component: () => { template: svgNode }\n }\n }\n }\n\n return {\n icon: iconName,\n component: iconSet.component,\n };\n });\n\n return {\n iconData,\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["computed","effectScope","getCurrentInstance","inject","provide","reactive","readonly","ref","unref","watch","bindThemeClass","propsFactory","createPalette","createThemes","cssClass","cssVariables","configureOptions","Y_THEME_PREFIX","YUYEON_THEME_KEY","Symbol","for","pressThemePropsOptions","theme","String","isDarkMode","window","matchMedia","matches","isSupportAutoScheme","media","createThemeModule","options","appMountedScope","config","scheme","themes","palette","supportedAutoMode","preferColorScheme","darkModeWatcher","mediaQueryList","value","currentColorScheme","currentThemeKey","computedThemes","Array","isArray","computedPalette","styles","lines","push","themeKey","themeDefs","Object","entries","colors","variables","isDark","records","themeScheme","join","install","app","directive","styleEl","document","getElementById","updateStyleEl","immediate","el","createElement","type","id","cspNonce","setAttribute","head","appendChild","innerHTML","bindTheme","yuyeon","mql","addEventListener","neo","lightTheme","darkTheme","root","dataset","init","run","themeClasses","scope","instance","global","useLocalTheme","props","themeModule","Error","newTheme","useTheme"],"sources":["../../../src/composables/theme/index.ts"],"sourcesContent":["import type {App, ComputedRef, PropType, Ref} from 'vue';\r\nimport {\r\n computed,\r\n effectScope,\r\n getCurrentInstance,\r\n inject,\r\n provide,\r\n reactive,\r\n readonly,\r\n ref,\r\n unref,\r\n watch,\r\n} from 'vue';\r\n\r\nimport bindThemeClass from '../../directives/theme-class';\r\nimport { propsFactory } from '../../util/vue-component';\r\nimport { createPalette, createThemes } from './factory';\r\nimport { cssClass, cssVariables } from './helper';\r\nimport { ThemeScheme, configureOptions } from './setting';\r\nimport type { ThemeOptions } from './types';\r\n\r\nexport type { ThemeOptions };\r\n\r\nexport const Y_THEME_PREFIX = 'y-theme';\r\n\r\nexport interface ThemeModuleInstance {\r\n scheme: keyof typeof ThemeScheme | 'auto';\r\n theme: Ref<[string, string?]>;\r\n // theme values(schemes) for colors & variables\r\n readonly themes: any;\r\n readonly global: {\r\n // currentThemeKeys: [lightThemeKey, darkThemeKey]\r\n // If used manually, fix the scheme to 'light' and have a [lightThemeKey] value.\r\n // Use the appropriate default theme scheme if it does not match the themeKey\r\n scheme: keyof typeof ThemeScheme | 'auto';\r\n theme: Ref<[string, string?]>;\r\n };\r\n /* computed */\r\n readonly currentThemeKey: Readonly<ComputedRef<string>>;\r\n readonly themeClasses: Readonly<ComputedRef<string | undefined>>;\r\n readonly computedThemes: Readonly<ComputedRef<any>>;\r\n readonly computedPalette: Readonly<ComputedRef<any>>;\r\n /* */\r\n readonly supportedAutoMode: Readonly<Ref<boolean>>;\r\n readonly preferColorScheme: Readonly<Ref<'light' | 'dark'>>;\r\n}\r\n\r\nexport const YUYEON_THEME_KEY = Symbol.for('yuyeon.theme');\r\n\r\nexport const pressThemePropsOptions = propsFactory(\r\n {\r\n theme: String as PropType<string>,\r\n },\r\n 'theme',\r\n);\r\n\r\nexport function isDarkMode() {\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n}\r\n\r\nexport function isSupportAutoScheme() {\r\n return window.matchMedia('(prefers-color-scheme)').media !== 'not all';\r\n}\r\n\r\nexport function createThemeModule(options: ThemeOptions) {\r\n const appMountedScope = effectScope();\r\n const config = reactive(configureOptions(options));\r\n const scheme = ref<string>(config.scheme);\r\n const theme = ref<[string, string]>(config.theme);\r\n const themes = ref(config.themes);\r\n const palette = ref(config.palette);\r\n const supportedAutoMode = ref(true);\r\n const preferColorScheme = ref('');\r\n\r\n function darkModeWatcher(\r\n mediaQueryList: MediaQueryListEvent | MediaQueryList,\r\n ) {\r\n preferColorScheme.value = mediaQueryList.matches ? 'dark' : 'light';\r\n }\r\n\r\n const currentColorScheme = computed<'light' | 'dark'>(() => {\r\n if (scheme.value === 'auto') {\r\n return preferColorScheme.value as 'light' | 'dark';\r\n }\r\n if (scheme.value === 'dark') {\r\n return 'dark';\r\n }\r\n return 'light';\r\n });\r\n\r\n const currentThemeKey = computed(() => {\r\n if (typeof theme.value === 'string') {\r\n if (theme.value in computedThemes) {\r\n return theme.value;\r\n }\r\n }\r\n if (Array.isArray(theme.value)) {\r\n return currentColorScheme.value === 'dark'\r\n ? theme.value?.[1] ?? 'dark'\r\n : theme.value?.[0] ?? 'light';\r\n }\r\n return currentColorScheme.value;\r\n });\r\n\r\n const computedPalette = computed(() => {\r\n return createPalette(palette.value);\r\n });\r\n\r\n const computedThemes = computed(() => {\r\n return createThemes(themes.value);\r\n });\r\n\r\n const styles = computed(() => {\r\n const lines = [];\r\n lines.push(\r\n ...cssClass(':root', cssVariables(computedPalette.value, 'palette')),\r\n );\r\n for (const [themeKey, themeDefs] of Object.entries(computedThemes.value)) {\r\n const { colors, variables, isDark } = themeDefs;\r\n const records: Record<string, string> = {\r\n ...colors,\r\n ...variables,\r\n };\r\n // if (currentThemeKey.value === themeKey) {\r\n // lines.push(...cssClass(':root', cssVariables(records, 'theme')));\r\n // }\r\n const themeScheme = isDark ? 'dark' : 'light';\r\n if (scheme.value === 'auto') {\r\n lines.push(\r\n ...cssClass(\r\n `@media (prefers-color-scheme: ${themeScheme})`,\r\n cssClass(\r\n `[data-theme-scheme='auto'][data-${themeScheme}-theme='${themeKey}']`,\r\n cssVariables(records, 'theme'),\r\n ),\r\n ),\r\n );\r\n } else {\r\n lines.push(\r\n ...cssClass(\r\n `[data-theme-scheme='${themeScheme}'][data-${themeScheme}-theme='${themeKey}']`,\r\n cssVariables(records, 'theme'),\r\n ),\r\n );\r\n }\r\n\r\n lines.push(\r\n ...cssClass(`.y-theme--${themeKey}`, cssVariables(records, 'theme')),\r\n );\r\n }\r\n return lines.join('');\r\n });\r\n\r\n function install(app: App) {\r\n app.directive('theme', bindThemeClass);\r\n\r\n let styleEl = document.getElementById('yuyeon-theme-palette');\r\n\r\n watch(styles, updateStyleEl, { immediate: true });\r\n\r\n function updateStyleEl() {\r\n if (typeof document !== 'undefined' && !styleEl) {\r\n const el = document.createElement('style');\r\n el.type = 'text/css';\r\n el.id = 'yuyeon-theme-palette';\r\n if (options?.cspNonce) el.setAttribute('nonce', options.cspNonce);\r\n styleEl = el;\r\n document.head.appendChild(styleEl);\r\n }\r\n if (styleEl) {\r\n styleEl.innerHTML = styles.value;\r\n }\r\n }\r\n }\r\n\r\n function bindTheme(yuyeon: any) {\r\n supportedAutoMode.value = isSupportAutoScheme();\r\n if (supportedAutoMode.value) {\r\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\r\n darkModeWatcher(mql);\r\n mql.addEventListener('change' as 'change', darkModeWatcher);\r\n }\r\n watch(\r\n theme,\r\n (neo) => {\r\n const [lightTheme, darkTheme] = neo;\r\n yuyeon.root.dataset.lightTheme = lightTheme;\r\n yuyeon.root.dataset.darkTheme = darkTheme;\r\n },\r\n { immediate: true },\r\n );\r\n watch(\r\n scheme,\r\n (neo) => {\r\n yuyeon.root.setAttribute(\r\n 'data-theme-scheme',\r\n neo === 'auto' ? 'auto' : currentColorScheme.value,\r\n );\r\n },\r\n { immediate: true },\r\n );\r\n }\r\n\r\n function init(yuyeon: any) {\r\n appMountedScope.run(() => {\r\n bindTheme(yuyeon);\r\n });\r\n }\r\n\r\n const themeClasses = computed(() => `y-theme--${currentThemeKey.value}`);\r\n\r\n return {\r\n install,\r\n init,\r\n scope: appMountedScope,\r\n instance: {\r\n global: {\r\n scheme,\r\n theme,\r\n },\r\n themes,\r\n scheme,\r\n theme,\r\n currentThemeKey,\r\n themeClasses,\r\n computedThemes,\r\n computedPalette,\r\n supportedAutoMode: readonly(supportedAutoMode),\r\n preferColorScheme: readonly(preferColorScheme),\r\n },\r\n };\r\n}\r\n\r\nexport function useLocalTheme(props: { theme?: string }) {\r\n getCurrentInstance();\r\n\r\n const themeModule = inject<ThemeModuleInstance | null>(\r\n YUYEON_THEME_KEY,\r\n null,\r\n );\r\n\r\n if (!themeModule) throw new Error('Not found provided \"ThemeModule\"');\r\n\r\n const palette = themeModule.computedPalette;\r\n\r\n const currentThemeKey = computed<string>(() => {\r\n if (props.theme) {\r\n switch (props.theme) {\r\n case 'light':\r\n return themeModule.theme.value?.[0] ?? 'light';\r\n case 'dark':\r\n return themeModule.theme.value?.[1] ?? 'dark';\r\n // TODO: props.theme(themeKey) validation in themes\r\n default:\r\n return props.theme;\r\n }\r\n }\r\n return unref(themeModule.currentThemeKey);\r\n });\r\n\r\n const themeClasses = computed(() => `y-theme--${currentThemeKey.value}`);\r\n\r\n const newTheme: ThemeModuleInstance = {\r\n ...themeModule,\r\n currentThemeKey,\r\n themeClasses,\r\n };\r\n\r\n provide(YUYEON_THEME_KEY, newTheme);\r\n\r\n return newTheme;\r\n}\r\n\r\nexport function useTheme() {\r\n getCurrentInstance();\r\n\r\n const theme = inject<ThemeModuleInstance | null>(YUYEON_THEME_KEY, null);\r\n\r\n if (!theme) throw new Error('Not found provided \"ThemeModule\"');\r\n\r\n return theme;\r\n}\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["computed","effectScope","getCurrentInstance","inject","provide","reactive","readonly","ref","unref","watch","bindThemeClass","propsFactory","createPalette","createThemes","cssClass","cssVariables","configureOptions","Y_THEME_PREFIX","YUYEON_THEME_KEY","Symbol","for","pressThemePropsOptions","theme","String","isDarkMode","window","matchMedia","matches","isSupportAutoScheme","media","createThemeModule","options","appMountedScope","config","scheme","themes","palette","supportedAutoMode","preferColorScheme","darkModeWatcher","mediaQueryList","value","currentColorScheme","currentThemeKey","computedThemes","Array","isArray","computedPalette","styles","lines","push","themeKey","themeDefs","Object","entries","colors","variables","isDark","records","themeScheme","join","install","app","directive","styleEl","document","getElementById","updateStyleEl","immediate","el","createElement","type","id","cspNonce","setAttribute","head","appendChild","innerHTML","bindTheme","yuyeon","mql","addEventListener","neo","lightTheme","darkTheme","root","dataset","init","run","themeClasses","scope","instance","global","useLocalTheme","props","themeModule","Error","newTheme","useTheme"],"sources":["../../../src/composables/theme/index.ts"],"sourcesContent":["import type {App, ComputedRef, PropType, Ref} from 'vue';\r\nimport {\r\n computed,\r\n effectScope,\r\n getCurrentInstance,\r\n inject,\r\n provide,\r\n reactive,\r\n readonly,\r\n ref,\r\n unref,\r\n watch,\r\n} from 'vue';\r\n\r\nimport bindThemeClass from '../../directives/theme-class';\r\nimport { propsFactory } from '../../util/vue-component';\r\nimport { createPalette, createThemes } from './factory';\r\nimport { cssClass, cssVariables } from './helper';\r\nimport { ThemeScheme, configureOptions } from './setting';\r\nimport type { ThemeOptions } from './types';\r\n\r\nexport type { ThemeOptions };\r\n\r\nexport const Y_THEME_PREFIX = 'y-theme';\r\n\r\nexport interface ThemeModuleInstance {\r\n scheme: Ref<keyof typeof ThemeScheme | 'auto'>;\r\n theme: Ref<[string, string?]>;\r\n // theme values(schemes) for colors & variables\r\n readonly themes: any;\r\n readonly global: {\r\n // currentThemeKeys: [lightThemeKey, darkThemeKey]\r\n // If used manually, fix the scheme to 'light' and have a [lightThemeKey] value.\r\n // Use the appropriate default theme scheme if it does not match the themeKey\r\n scheme: Ref<keyof typeof ThemeScheme | 'auto'>;\r\n theme: Ref<[string, string?]>;\r\n };\r\n /* computed */\r\n readonly currentThemeKey: Readonly<ComputedRef<string>>;\r\n readonly themeClasses: Readonly<ComputedRef<string | undefined>>;\r\n readonly computedThemes: Readonly<ComputedRef<any>>;\r\n readonly computedPalette: Readonly<ComputedRef<any>>;\r\n /* */\r\n readonly supportedAutoMode: Readonly<Ref<boolean>>;\r\n readonly preferColorScheme: Readonly<Ref<'light' | 'dark'>>;\r\n}\r\n\r\nexport const YUYEON_THEME_KEY = Symbol.for('yuyeon.theme');\r\n\r\nexport const pressThemePropsOptions = propsFactory(\r\n {\r\n theme: String as PropType<string>,\r\n },\r\n 'theme',\r\n);\r\n\r\nexport function isDarkMode() {\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n}\r\n\r\nexport function isSupportAutoScheme() {\r\n return window.matchMedia('(prefers-color-scheme)').media !== 'not all';\r\n}\r\n\r\nexport function createThemeModule(options: ThemeOptions) {\r\n const appMountedScope = effectScope();\r\n const config = reactive(configureOptions(options));\r\n const scheme = ref<string>(config.scheme);\r\n const theme = ref<[string, string]>(config.theme);\r\n const themes = ref(config.themes);\r\n const palette = ref(config.palette);\r\n const supportedAutoMode = ref(true);\r\n const preferColorScheme = ref('');\r\n\r\n function darkModeWatcher(\r\n mediaQueryList: MediaQueryListEvent | MediaQueryList,\r\n ) {\r\n preferColorScheme.value = mediaQueryList.matches ? 'dark' : 'light';\r\n }\r\n\r\n const currentColorScheme = computed<'light' | 'dark'>(() => {\r\n if (scheme.value === 'auto') {\r\n return preferColorScheme.value as 'light' | 'dark';\r\n }\r\n if (scheme.value === 'dark') {\r\n return 'dark';\r\n }\r\n return 'light';\r\n });\r\n\r\n const currentThemeKey = computed(() => {\r\n if (typeof theme.value === 'string') {\r\n if (theme.value in computedThemes) {\r\n return theme.value;\r\n }\r\n }\r\n if (Array.isArray(theme.value)) {\r\n return currentColorScheme.value === 'dark'\r\n ? theme.value?.[1] ?? 'dark'\r\n : theme.value?.[0] ?? 'light';\r\n }\r\n return currentColorScheme.value;\r\n });\r\n\r\n const computedPalette = computed(() => {\r\n return createPalette(palette.value);\r\n });\r\n\r\n const computedThemes = computed(() => {\r\n return createThemes(themes.value);\r\n });\r\n\r\n const styles = computed(() => {\r\n const lines = [];\r\n lines.push(\r\n ...cssClass(':root', cssVariables(computedPalette.value, 'palette')),\r\n );\r\n for (const [themeKey, themeDefs] of Object.entries(computedThemes.value)) {\r\n const { colors, variables, isDark } = themeDefs;\r\n const records: Record<string, string> = {\r\n ...colors,\r\n ...variables,\r\n };\r\n // if (currentThemeKey.value === themeKey) {\r\n // lines.push(...cssClass(':root', cssVariables(records, 'theme')));\r\n // }\r\n const themeScheme = isDark ? 'dark' : 'light';\r\n if (scheme.value === 'auto') {\r\n lines.push(\r\n ...cssClass(\r\n `@media (prefers-color-scheme: ${themeScheme})`,\r\n cssClass(\r\n `[data-theme-scheme='auto'][data-${themeScheme}-theme='${themeKey}']`,\r\n cssVariables(records, 'theme'),\r\n ),\r\n ),\r\n );\r\n } else {\r\n lines.push(\r\n ...cssClass(\r\n `[data-theme-scheme='${themeScheme}'][data-${themeScheme}-theme='${themeKey}']`,\r\n cssVariables(records, 'theme'),\r\n ),\r\n );\r\n }\r\n\r\n lines.push(\r\n ...cssClass(`.y-theme--${themeKey}`, cssVariables(records, 'theme')),\r\n );\r\n }\r\n return lines.join('');\r\n });\r\n\r\n function install(app: App) {\r\n app.directive('theme', bindThemeClass);\r\n\r\n let styleEl = document.getElementById('yuyeon-theme-palette');\r\n\r\n watch(styles, updateStyleEl, { immediate: true });\r\n\r\n function updateStyleEl() {\r\n if (typeof document !== 'undefined' && !styleEl) {\r\n const el = document.createElement('style');\r\n el.type = 'text/css';\r\n el.id = 'yuyeon-theme-palette';\r\n if (options?.cspNonce) el.setAttribute('nonce', options.cspNonce);\r\n styleEl = el;\r\n document.head.appendChild(styleEl);\r\n }\r\n if (styleEl) {\r\n styleEl.innerHTML = styles.value;\r\n }\r\n }\r\n }\r\n\r\n function bindTheme(yuyeon: any) {\r\n supportedAutoMode.value = isSupportAutoScheme();\r\n if (supportedAutoMode.value) {\r\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\r\n darkModeWatcher(mql);\r\n mql.addEventListener('change' as 'change', darkModeWatcher);\r\n }\r\n watch(\r\n theme,\r\n (neo) => {\r\n const [lightTheme, darkTheme] = neo;\r\n yuyeon.root.dataset.lightTheme = lightTheme;\r\n yuyeon.root.dataset.darkTheme = darkTheme;\r\n },\r\n { immediate: true },\r\n );\r\n watch(\r\n scheme,\r\n (neo) => {\r\n yuyeon.root.setAttribute(\r\n 'data-theme-scheme',\r\n neo === 'auto' ? 'auto' : currentColorScheme.value,\r\n );\r\n },\r\n { immediate: true },\r\n );\r\n }\r\n\r\n function init(yuyeon: any) {\r\n appMountedScope.run(() => {\r\n bindTheme(yuyeon);\r\n });\r\n }\r\n\r\n const themeClasses = computed(() => `y-theme--${currentThemeKey.value}`);\r\n\r\n return {\r\n install,\r\n init,\r\n scope: appMountedScope,\r\n instance: {\r\n global: {\r\n scheme,\r\n theme,\r\n },\r\n themes,\r\n scheme,\r\n theme,\r\n currentThemeKey,\r\n themeClasses,\r\n computedThemes,\r\n computedPalette,\r\n supportedAutoMode: readonly(supportedAutoMode),\r\n preferColorScheme: readonly(preferColorScheme),\r\n },\r\n };\r\n}\r\n\r\nexport function useLocalTheme(props: { theme?: string }) {\r\n getCurrentInstance();\r\n\r\n const themeModule = inject<ThemeModuleInstance | null>(\r\n YUYEON_THEME_KEY,\r\n null,\r\n );\r\n\r\n if (!themeModule) throw new Error('Not found provided \"ThemeModule\"');\r\n\r\n const palette = themeModule.computedPalette;\r\n\r\n const currentThemeKey = computed<string>(() => {\r\n if (props.theme) {\r\n switch (props.theme) {\r\n case 'light':\r\n return themeModule.theme.value?.[0] ?? 'light';\r\n case 'dark':\r\n return themeModule.theme.value?.[1] ?? 'dark';\r\n // TODO: props.theme(themeKey) validation in themes\r\n default:\r\n return props.theme;\r\n }\r\n }\r\n return unref(themeModule.currentThemeKey);\r\n });\r\n\r\n const themeClasses = computed(() => `y-theme--${currentThemeKey.value}`);\r\n\r\n const newTheme: ThemeModuleInstance = {\r\n ...themeModule,\r\n currentThemeKey,\r\n themeClasses,\r\n };\r\n\r\n provide(YUYEON_THEME_KEY, newTheme);\r\n\r\n return newTheme;\r\n}\r\n\r\nexport function useTheme() {\r\n getCurrentInstance();\r\n\r\n const theme = inject<ThemeModuleInstance | null>(YUYEON_THEME_KEY, null);\r\n\r\n if (!theme) throw new Error('Not found provided \"ThemeModule\"');\r\n\r\n return theme;\r\n}\r\n"],"mappings":"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"}
package/lib/index.mjs CHANGED
@@ -7,6 +7,7 @@ import { YUYEON_THEME_KEY, createThemeModule, useTheme } from "./composables/the
7
7
  import PlateWave from "./directives/plate-wave/index.mjs";
8
8
  import { YUYEON_LOGO } from "./etc/index.mjs"; //
9
9
  import "./styles/base.scss";
10
+ import { createIconModule, YUYEON_ICON_KEY } from "./composables/icon.mjs";
10
11
  const defaultOptions = {
11
12
  credit: true
12
13
  };
@@ -15,6 +16,7 @@ export function init() {
15
16
  const themeModule = createThemeModule(options?.theme);
16
17
  const i18nModule = createI18nModule(options?.i18n);
17
18
  const dateModule = createDateModule(options?.date, i18nModule.localeModule);
19
+ const iconModule = createIconModule(options?.icon);
18
20
  const install = app => {
19
21
  themeModule.install(app);
20
22
  const yuyeon = reactive({
@@ -33,6 +35,7 @@ export function init() {
33
35
  });
34
36
  app.directive('plate-wave', PlateWave);
35
37
  app.provide(YUYEON_THEME_KEY, themeModule.instance);
38
+ app.provide(YUYEON_ICON_KEY, iconModule);
36
39
  app.provide(YUYEON_I18N_KEY, {
37
40
  ...i18nModule.localeModule,
38
41
  ...i18nModule.rtlModule
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","defaultOptions","credit","init","options","arguments","length","undefined","themeModule","theme","i18nModule","i18n","dateModule","date","localeModule","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\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\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_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":"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"}
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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/types/index.ts"],"sourcesContent":["export type CandidateKey = string | number;\r\n"],"mappings":""}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/types/index.ts"],"sourcesContent":["import { HTMLAttributes } from '@vue/runtime-dom';\nimport type { ComponentPublicInstance, FunctionalComponent } from 'vue';\n\nexport type CandidateKey = string | number;\nexport type JSXComponent<Props = any> =\n | FunctionalComponent<Props | Props & HTMLAttributes>\n | { new (): ComponentPublicInstance<Props | Props & HTMLAttributes> };\n"],"mappings":""}
@@ -90,7 +90,7 @@ export class YuyeonDateAdapter {
90
90
  return DateUtil.startOfYear(date);
91
91
  }
92
92
  toISO(date) {
93
- return DateUtil.toISO(date);
93
+ return DateUtil.toISO(this, date);
94
94
  }
95
95
  toJsDate(date) {
96
96
  return date;
@@ -1 +1 @@
1
- {"version":3,"file":"yuyeon-date-adapter.mjs","names":["DateUtil","YuyeonDateAdapter","constructor","options","_defineProperty","locale","formats","getWeekArray","date","startOfMonth","endOfMonth","addDays","amount","addMonths","value","endOfDay","endOfYear","format","formatString","getDiff","comparing","unit","getYear","getMonth","getDay","getNextMonth","getWeekdays","isAfter","isBefore","isEqual","isSameDay","isSameMonth","isValid","isWithinRange","range","parseISO","setMonth","month","setYear","year","startOfDay","startOfYear","toISO","toJsDate"],"sources":["../../../../src/util/date/adapters/yuyeon-date-adapter.ts"],"sourcesContent":["import { DateUtil } from '../built-in';\r\nimport { DateAdapter, DateFormatOptions } from '../types';\r\n\r\nexport class YuyeonDateAdapter implements DateAdapter<Date> {\r\n public locale = 'ko-kr';\r\n\r\n public formats?: Record<string, DateFormatOptions>;\r\n\r\n constructor(options: {\r\n locale: string;\r\n formats?: Record<string, DateFormatOptions>;\r\n }) {\r\n this.locale = options.locale;\r\n this.formats = options.formats;\r\n }\r\n\r\n public getWeekArray(date: Date) {\r\n return DateUtil.getWeekArray(date, this.locale);\r\n }\r\n\r\n public startOfMonth(date: Date) {\r\n return DateUtil.startOfMonth(date);\r\n }\r\n\r\n public endOfMonth(date: Date) {\r\n return DateUtil.endOfMonth(date);\r\n }\r\n\r\n public addDays(date: Date, amount: number): Date {\r\n return DateUtil.addDays(date, amount);\r\n }\r\n\r\n public addMonths(date: Date, amount: number): Date {\r\n return DateUtil.addMonths(date, amount);\r\n }\r\n\r\n public date(value?: any): Date | null {\r\n return DateUtil.date(value);\r\n }\r\n\r\n public endOfDay(date: Date): Date {\r\n return DateUtil.endOfDay(date);\r\n }\r\n\r\n public endOfYear(date: Date): Date {\r\n return DateUtil.endOfYear(date);\r\n }\r\n\r\n public format(date: Date, formatString: string): string {\r\n return DateUtil.format(date, formatString, this.locale, this.formats);\r\n }\r\n\r\n public getDiff(date: Date, comparing: string | Date, unit?: string): number {\r\n return DateUtil.getDiff(date, comparing, unit);\r\n }\r\n\r\n public getYear(date: Date): number {\r\n return DateUtil.getYear(date);\r\n }\r\n\r\n public getMonth(date: Date): number {\r\n return DateUtil.getMonth(date);\r\n }\r\n\r\n public getDay(date: Date): number {\r\n return DateUtil.getDay(date);\r\n }\r\n\r\n public getNextMonth(date: Date): Date {\r\n return DateUtil.getNextMonth(date);\r\n }\r\n\r\n public getWeekdays(): string[] {\r\n return DateUtil.getWeekdays(this.locale);\r\n }\r\n\r\n public isAfter(date: Date, comparing: Date): boolean {\r\n return DateUtil.isAfter(date, comparing);\r\n }\r\n\r\n public isBefore(date: Date, comparing: Date): boolean {\r\n return DateUtil.isBefore(date, comparing);\r\n }\r\n\r\n public isEqual(date: Date, comparing: Date): boolean {\r\n return DateUtil.isEqual(date, comparing);\r\n }\r\n\r\n public isSameDay(date: Date, comparing: Date): boolean {\r\n return DateUtil.isSameDay(date, comparing);\r\n }\r\n\r\n public isSameMonth(date: Date, comparing: Date): boolean {\r\n return DateUtil.isSameMonth(date, comparing);\r\n }\r\n\r\n public isValid(date: any): boolean {\r\n return DateUtil.isValid(date);\r\n }\r\n\r\n public isWithinRange(date: Date, range: [Date, Date]): boolean {\r\n return DateUtil.isWithinRange(date, range);\r\n }\r\n\r\n public parseISO(date: string): Date {\r\n return DateUtil.parseISO(date);\r\n }\r\n\r\n public setMonth(date: Date, month: number): Date {\r\n return DateUtil.setMonth(date, month);\r\n }\r\n\r\n public setYear(date: Date, year: number): Date {\r\n return DateUtil.setYear(date, year);\r\n }\r\n\r\n public startOfDay(date: Date): Date {\r\n return DateUtil.startOfDay(date);\r\n }\r\n\r\n public startOfYear(date: Date): Date {\r\n return DateUtil.startOfYear(date);\r\n }\r\n\r\n public toISO(date: Date): string {\r\n return DateUtil.toISO(date);\r\n }\r\n\r\n public toJsDate(date: Date): Date {\r\n return date;\r\n }\r\n}\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"yuyeon-date-adapter.mjs","names":["DateUtil","YuyeonDateAdapter","constructor","options","_defineProperty","locale","formats","getWeekArray","date","startOfMonth","endOfMonth","addDays","amount","addMonths","value","endOfDay","endOfYear","format","formatString","getDiff","comparing","unit","getYear","getMonth","getDay","getNextMonth","getWeekdays","isAfter","isBefore","isEqual","isSameDay","isSameMonth","isValid","isWithinRange","range","parseISO","setMonth","month","setYear","year","startOfDay","startOfYear","toISO","toJsDate"],"sources":["../../../../src/util/date/adapters/yuyeon-date-adapter.ts"],"sourcesContent":["import { DateUtil } from '../built-in';\r\nimport { DateAdapter, DateFormatOptions } from '../types';\r\n\r\nexport class YuyeonDateAdapter implements DateAdapter<Date> {\r\n public locale = 'ko-kr';\r\n\r\n public formats?: Record<string, DateFormatOptions>;\r\n\r\n constructor(options: {\r\n locale: string;\r\n formats?: Record<string, DateFormatOptions>;\r\n }) {\r\n this.locale = options.locale;\r\n this.formats = options.formats;\r\n }\r\n\r\n public getWeekArray(date: Date) {\r\n return DateUtil.getWeekArray(date, this.locale);\r\n }\r\n\r\n public startOfMonth(date: Date) {\r\n return DateUtil.startOfMonth(date);\r\n }\r\n\r\n public endOfMonth(date: Date) {\r\n return DateUtil.endOfMonth(date);\r\n }\r\n\r\n public addDays(date: Date, amount: number): Date {\r\n return DateUtil.addDays(date, amount);\r\n }\r\n\r\n public addMonths(date: Date, amount: number): Date {\r\n return DateUtil.addMonths(date, amount);\r\n }\r\n\r\n public date(value?: any): Date | null {\r\n return DateUtil.date(value);\r\n }\r\n\r\n public endOfDay(date: Date): Date {\r\n return DateUtil.endOfDay(date);\r\n }\r\n\r\n public endOfYear(date: Date): Date {\r\n return DateUtil.endOfYear(date);\r\n }\r\n\r\n public format(date: Date, formatString: string): string {\r\n return DateUtil.format(date, formatString, this.locale, this.formats);\r\n }\r\n\r\n public getDiff(date: Date, comparing: string | Date, unit?: string): number {\r\n return DateUtil.getDiff(date, comparing, unit);\r\n }\r\n\r\n public getYear(date: Date): number {\r\n return DateUtil.getYear(date);\r\n }\r\n\r\n public getMonth(date: Date): number {\r\n return DateUtil.getMonth(date);\r\n }\r\n\r\n public getDay(date: Date): number {\r\n return DateUtil.getDay(date);\r\n }\r\n\r\n public getNextMonth(date: Date): Date {\r\n return DateUtil.getNextMonth(date);\r\n }\r\n\r\n public getWeekdays(): string[] {\r\n return DateUtil.getWeekdays(this.locale);\r\n }\r\n\r\n public isAfter(date: Date, comparing: Date): boolean {\r\n return DateUtil.isAfter(date, comparing);\r\n }\r\n\r\n public isBefore(date: Date, comparing: Date): boolean {\r\n return DateUtil.isBefore(date, comparing);\r\n }\r\n\r\n public isEqual(date: Date, comparing: Date): boolean {\r\n return DateUtil.isEqual(date, comparing);\r\n }\r\n\r\n public isSameDay(date: Date, comparing: Date): boolean {\r\n return DateUtil.isSameDay(date, comparing);\r\n }\r\n\r\n public isSameMonth(date: Date, comparing: Date): boolean {\r\n return DateUtil.isSameMonth(date, comparing);\r\n }\r\n\r\n public isValid(date: any): boolean {\r\n return DateUtil.isValid(date);\r\n }\r\n\r\n public isWithinRange(date: Date, range: [Date, Date]): boolean {\r\n return DateUtil.isWithinRange(date, range);\r\n }\r\n\r\n public parseISO(date: string): Date {\r\n return DateUtil.parseISO(date);\r\n }\r\n\r\n public setMonth(date: Date, month: number): Date {\r\n return DateUtil.setMonth(date, month);\r\n }\r\n\r\n public setYear(date: Date, year: number): Date {\r\n return DateUtil.setYear(date, year);\r\n }\r\n\r\n public startOfDay(date: Date): Date {\r\n return DateUtil.startOfDay(date);\r\n }\r\n\r\n public startOfYear(date: Date): Date {\r\n return DateUtil.startOfYear(date);\r\n }\r\n\r\n public toISO(date: Date): string {\r\n return DateUtil.toISO(this, date);\r\n }\r\n\r\n public toJsDate(date: Date): Date {\r\n return date;\r\n }\r\n}\r\n"],"mappings":"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"}
@@ -256,8 +256,12 @@ export class DateUtil {
256
256
  const [year, month, day] = value.split('-').map(Number);
257
257
  return new Date(year, month - 1, day);
258
258
  }
259
- static toISO(date) {
260
- return date.toISOString().substring(0, 10);
259
+ static toISO(adapter, value) {
260
+ const date = adapter.toJsDate(value);
261
+ const year = date.getFullYear();
262
+ const month = date.getMonth() + 1 < 10 ? `0${date.getMonth() + 1}` : `${date.getMonth() + 1}`;
263
+ const day = date.getDate() < 10 ? `0${date.getDate()}` : `${date.getDate()}`;
264
+ return `${year}-${month}-${day}`;
261
265
  }
262
266
  static getWeekArray(date, locale) {
263
267
  const weeks = [];