yuyeon 0.0.6 → 0.0.8

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 (42) hide show
  1. package/dist/style.css +1 -1
  2. package/dist/yuyeon.mjs +1670 -1429
  3. package/dist/yuyeon.umd.js +1 -1
  4. package/lib/components/icons/YIconCheckbox.mjs +11 -2
  5. package/lib/components/icons/YIconCheckbox.mjs.map +1 -1
  6. package/lib/components/icons/YIconCheckbox.scss +34 -0
  7. package/lib/components/icons/YIconPageControl.mjs +9 -5
  8. package/lib/components/icons/YIconPageControl.mjs.map +1 -1
  9. package/lib/components/pagination/YPagination.mjs +13 -5
  10. package/lib/components/pagination/YPagination.mjs.map +1 -1
  11. package/lib/components/table/pagination.mjs +60 -1
  12. package/lib/components/table/pagination.mjs.map +1 -1
  13. package/lib/components/tree-view/YTreeView.mjs +251 -26
  14. package/lib/components/tree-view/YTreeView.mjs.map +1 -1
  15. package/lib/components/tree-view/YTreeView.scss +34 -1
  16. package/lib/components/tree-view/YTreeViewNode.mjs +95 -31
  17. package/lib/components/tree-view/YTreeViewNode.mjs.map +1 -1
  18. package/lib/components/tree-view/types.mjs +2 -0
  19. package/lib/components/tree-view/types.mjs.map +1 -0
  20. package/lib/components/tree-view/util.mjs +14 -0
  21. package/lib/components/tree-view/util.mjs.map +1 -0
  22. package/lib/util/array.mjs +10 -0
  23. package/lib/util/array.mjs.map +1 -0
  24. package/lib/util/collection.mjs +10 -0
  25. package/lib/util/collection.mjs.map +1 -0
  26. package/lib/util/common.mjs +14 -0
  27. package/lib/util/common.mjs.map +1 -1
  28. package/lib/util/vue-component.mjs +9 -1
  29. package/lib/util/vue-component.mjs.map +1 -1
  30. package/package.json +1 -1
  31. package/types/components/checkbox/YInputCheckbox.d.ts +10 -1
  32. package/types/components/icons/YIconCheckbox.d.ts +10 -1
  33. package/types/components/icons/YIconPageControl.d.ts +8 -0
  34. package/types/components/pagination/YPagination.d.ts +28 -0
  35. package/types/components/table/pagination.d.ts +41 -1
  36. package/types/components/tree-view/YTreeView.d.ts +99 -11
  37. package/types/components/tree-view/YTreeViewNode.d.ts +97 -6
  38. package/types/components/tree-view/types.d.ts +13 -0
  39. package/types/components/tree-view/util.d.ts +2 -0
  40. package/types/util/array.d.ts +1 -0
  41. package/types/util/common.d.ts +1 -0
  42. package/types/util/vue-component.d.ts +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"YPagination.mjs","names":["computed","defineComponent","shallowRef","useModelDuplex","useRender","useRefs","useResizeObserver","getRangeArr","toStyleSizeValue","propsFactory","YButton","YIconPageControl","pressYPaginationProps","start","type","Number","String","default","modelValue","props","disabled","Boolean","length","validator","val","totalVisible","showEndButton","gap","color","activeColor","YPagination","name","components","emits","value","change","control","setup","_ref","slots","emit","page","parseInt","itemCount","resizeObservedRef","entries","target","contentRect","firstItem","querySelector","listWidth","width","itemWidth","offsetWidth","parseFloat","getComputedStyle","marginRight","calcItemCount","fixedCount","fixedWidth","Math","max","floor","toFixed","innerWidth","controls","prevDisabled","nextDisabled","first","onClick","e","preventDefault","prev","to","next","min","last","range","isNaN","MAX_SAFE_INTEGER","even","middle","left","right","rangeLength","rangeStart","ceil","refs","updateRef","changePage","event","arguments","undefined","items","map","item","index","ref","active","key","ellipsis","styles","_createVNode"],"sources":["../../../src/components/pagination/YPagination.tsx"],"sourcesContent":["import {\r\n ComponentPublicInstance,\r\n computed,\r\n defineComponent,\r\n shallowRef,\r\n} from 'vue';\r\n\r\nimport { useModelDuplex } from '../../composables/communication';\r\nimport { useRender } from '../../composables/component';\r\nimport { useRefs } from '../../composables/ref';\r\nimport { useResizeObserver } from '../../composables/resize-observer';\r\nimport { getRangeArr } from '../../util/common';\r\nimport { toStyleSizeValue } from '../../util/ui';\r\nimport { propsFactory } from '../../util/vue-component';\r\nimport { YButton } from '../button';\r\nimport { YIconPageControl } from '../icons/YIconPageControl';\r\n\r\nimport './YPagination.scss';\r\n\r\nexport const pressYPaginationProps = propsFactory(\r\n {\r\n start: {\r\n type: [Number, String],\r\n default: 1,\r\n },\r\n modelValue: {\r\n type: Number,\r\n default: (props: any) => props.start as number,\r\n },\r\n disabled: Boolean,\r\n length: {\r\n type: [Number, String],\r\n default: 1,\r\n validator: (val: number) => val % 1 === 0,\r\n },\r\n totalVisible: [Number, String],\r\n showEndButton: Boolean,\r\n gap: {\r\n type: [String, Number],\r\n default: 4,\r\n },\r\n color: String,\r\n activeColor: String,\r\n },\r\n 'y-pagination',\r\n);\r\n\r\nexport const YPagination = defineComponent({\r\n name: 'YPagination',\r\n components: {\r\n YButton,\r\n },\r\n props: {\r\n ...pressYPaginationProps(),\r\n },\r\n emits: {\r\n 'update:modelValue': (value: number) => true,\r\n change: (value: number, control?: string) => true,\r\n },\r\n setup(props, { slots, emit }) {\r\n const page = useModelDuplex(props);\r\n\r\n const length = computed(() => parseInt(props.length as string, 10));\r\n const start = computed(() => parseInt(props.start as string, 10));\r\n\r\n const itemCount = shallowRef(-1);\r\n\r\n const { resizeObservedRef } = useResizeObserver((entries) => {\r\n if (1 > entries.length) return;\r\n const { target, contentRect } = entries[0];\r\n\r\n const firstItem = target.querySelector(\r\n '.y-pagination__list > *',\r\n ) as HTMLElement;\r\n if (firstItem) {\r\n const listWidth = contentRect.width;\r\n const itemWidth =\r\n firstItem.offsetWidth +\r\n parseFloat(getComputedStyle(firstItem).marginRight) * 2;\r\n itemCount.value = calcItemCount(listWidth, itemWidth);\r\n }\r\n });\r\n\r\n function calcItemCount(listWidth: number, itemWidth: number) {\r\n const fixedCount = props.showEndButton ? 5 : 3;\r\n const fixedWidth = itemWidth * fixedCount;\r\n const gap = +(props.gap ?? 4);\r\n return Math.max(\r\n 0,\r\n Math.floor(\r\n +((listWidth - fixedWidth - gap) / (itemWidth + gap)).toFixed(2),\r\n ),\r\n );\r\n }\r\n\r\n const totalVisible = computed(() => {\r\n if (props.totalVisible) return parseInt(props.totalVisible as string, 10);\r\n else if (itemCount.value >= 0) return itemCount.value;\r\n return calcItemCount(innerWidth, 58);\r\n });\r\n\r\n const controls = computed(() => {\r\n const prevDisabled = !!props.disabled || page.value <= start.value;\r\n const nextDisabled =\r\n !!props.disabled || page.value >= start.value + length.value - 1;\r\n return {\r\n first: {\r\n disabled: prevDisabled,\r\n onClick: (e: MouseEvent) => {\r\n e.preventDefault();\r\n page.value = 1;\r\n emit('change', 1, 'first');\r\n },\r\n },\r\n prev: {\r\n disabled: prevDisabled,\r\n onClick: (e: MouseEvent) => {\r\n e.preventDefault();\r\n const to = Math.max(1, page.value - 1);\r\n page.value = to;\r\n emit('change', to, 'prev');\r\n },\r\n },\r\n next: {\r\n disabled: nextDisabled,\r\n onClick: (e: MouseEvent) => {\r\n e.preventDefault();\r\n const to = Math.min(+length.value, page.value + 1);\r\n page.value = to;\r\n emit('change', to, 'next');\r\n },\r\n },\r\n last: {\r\n disabled: nextDisabled,\r\n onClick: (e: MouseEvent) => {\r\n e.preventDefault();\r\n const to = +length.value;\r\n page.value = +length.value;\r\n emit('change', to, 'last');\r\n },\r\n },\r\n };\r\n });\r\n\r\n const range = computed(() => {\r\n if (\r\n length.value <= 0 ||\r\n isNaN(length.value) ||\r\n length.value > Number.MAX_SAFE_INTEGER\r\n )\r\n return [];\r\n if (totalVisible.value <= 1) return [page.value];\r\n if (length.value <= totalVisible.value) {\r\n return getRangeArr(length.value, start.value);\r\n }\r\n const even = totalVisible.value % 2 === 0;\r\n const middle = even\r\n ? totalVisible.value / 2\r\n : Math.floor(totalVisible.value / 2);\r\n const left = even ? middle : middle + 1;\r\n const right = length.value - middle;\r\n\r\n if (left - page.value >= 0) {\r\n return [\r\n ...getRangeArr(Math.max(1, totalVisible.value - 1), start.value),\r\n 'ellipsis',\r\n length.value,\r\n ];\r\n } else if (page.value - right >= (even ? 1 : 0)) {\r\n const rangeLength = totalVisible.value - 1;\r\n const rangeStart = length.value - rangeLength + start.value;\r\n return [\r\n start.value,\r\n 'ellipsis',\r\n ...getRangeArr(rangeLength, rangeStart),\r\n ];\r\n } else {\r\n const rangeLength = Math.max(1, totalVisible.value - 3);\r\n const rangeStart =\r\n rangeLength === 1\r\n ? page.value\r\n : page.value - Math.ceil(rangeLength / 2) + start.value;\r\n return [\r\n start.value,\r\n 'ellipsis',\r\n ...getRangeArr(rangeLength, rangeStart),\r\n 'ellipsis',\r\n length.value,\r\n ];\r\n }\r\n });\r\n\r\n const { refs, updateRef } = useRefs<ComponentPublicInstance>();\r\n\r\n function changePage(event: Event, to = 1) {\r\n event.preventDefault();\r\n page.value = to;\r\n emit('change', to);\r\n }\r\n\r\n const items = computed(() => {\r\n return range.value.map((item, index) => {\r\n const ref = (e: any) => updateRef(e, index);\r\n\r\n if (item === 'ellipsis') {\r\n return {\r\n active: false,\r\n key: `ellipsis-${index}`,\r\n page: item,\r\n props: {\r\n ref,\r\n ellipsis: true,\r\n disabled: true, // TODO: skipper\r\n },\r\n };\r\n } else {\r\n const active = item === page.value;\r\n return {\r\n active,\r\n key: `item-${item}`,\r\n page: item,\r\n props: {\r\n ref,\r\n ellipsis: false,\r\n disabled: !!props.disabled || +props.length < 2,\r\n color: active ? props.activeColor : props.color,\r\n onClick: (e: MouseEvent) => changePage(e, item),\r\n },\r\n };\r\n }\r\n });\r\n });\r\n\r\n const styles = computed(() => {\r\n let gap = undefined;\r\n if (props.gap) {\r\n const value = +props.gap;\r\n if (!isNaN(value)) {\r\n gap = toStyleSizeValue(value);\r\n } else if (typeof props.gap === 'string') {\r\n gap = props.gap;\r\n }\r\n }\r\n return {\r\n '--y-pagination__gap': gap,\r\n };\r\n });\r\n\r\n useRender(() => {\r\n return (\r\n <div\r\n class={['y-pagination']}\r\n role={'navigation'}\r\n style={styles.value}\r\n ref={resizeObservedRef}\r\n >\r\n <ul class={['y-pagination__list']}>\r\n {props.showEndButton && (\r\n <li key=\"first\" class=\"y-pagination__first\">\r\n {slots.first ? (\r\n slots.first(controls.value.first)\r\n ) : (\r\n <YButton {...controls.value.first}>\r\n <YIconPageControl type={'first'}></YIconPageControl>\r\n </YButton>\r\n )}\r\n </li>\r\n )}\r\n <li key=\"prev\" class=\"y-pagination__prev\">\r\n {slots.prev ? (\r\n slots.prev(controls.value.prev)\r\n ) : (\r\n <YButton {...controls.value.prev}>\r\n <YIconPageControl type={'prev'}></YIconPageControl>\r\n </YButton>\r\n )}\r\n </li>\r\n {items.value.map((item, index) => {\r\n return (\r\n <li\r\n key={item.key}\r\n class={[\r\n 'y-pagination__item',\r\n { 'y-pagination__item--active': item.active },\r\n ]}\r\n >\r\n <YButton {...item.props}>\r\n {item.props.ellipsis ? '...' : item.page}\r\n </YButton>\r\n </li>\r\n );\r\n })}\r\n <li key=\"next\" class=\"y-pagination__next\">\r\n {slots.next ? (\r\n slots.next(controls.value.next)\r\n ) : (\r\n <YButton {...controls.value.next}>\r\n <YIconPageControl type={'next'}></YIconPageControl>\r\n </YButton>\r\n )}\r\n </li>\r\n {props.showEndButton && (\r\n <li key=\"last\" class=\"y-pagination__last\">\r\n {slots.last ? (\r\n slots.last(controls.value.last)\r\n ) : (\r\n <YButton {...controls.value.last}>\r\n <YIconPageControl type={'last'}></YIconPageControl>\r\n </YButton>\r\n )}\r\n </li>\r\n )}\r\n </ul>\r\n </div>\r\n );\r\n });\r\n\r\n return {\r\n itemCount,\r\n page,\r\n refs,\r\n };\r\n },\r\n});\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"YPagination.mjs","names":["computed","defineComponent","shallowRef","useModelDuplex","useRender","useRefs","useResizeObserver","getRangeArr","toStyleSizeValue","propsFactory","YButton","YIconPageControl","pressYPaginationProps","start","type","Number","String","default","modelValue","props","disabled","Boolean","length","validator","val","totalVisible","showEndButton","gap","color","activeColor","firstIcon","lastIcon","prevIcon","nextIcon","YPagination","name","components","emits","value","change","control","setup","_ref","slots","emit","page","parseInt","itemCount","resizeObservedRef","entries","target","contentRect","firstItem","querySelector","listWidth","width","itemWidth","offsetWidth","parseFloat","getComputedStyle","marginRight","calcItemCount","fixedCount","fixedWidth","Math","max","floor","toFixed","innerWidth","controls","prevDisabled","nextDisabled","first","onClick","e","preventDefault","prev","to","next","min","last","range","isNaN","MAX_SAFE_INTEGER","even","middle","left","right","rangeLength","rangeStart","ceil","refs","updateRef","changePage","event","arguments","undefined","items","map","item","index","ref","active","key","ellipsis","styles","_createVNode"],"sources":["../../../src/components/pagination/YPagination.tsx"],"sourcesContent":["import {\r\n ComponentPublicInstance,\r\n computed,\r\n defineComponent,\r\n shallowRef,\r\n} from 'vue';\r\n\r\nimport { useModelDuplex } from '../../composables/communication';\r\nimport { useRender } from '../../composables/component';\r\nimport { useRefs } from '../../composables/ref';\r\nimport { useResizeObserver } from '../../composables/resize-observer';\r\nimport { getRangeArr } from '../../util/common';\r\nimport { toStyleSizeValue } from '../../util/ui';\r\nimport { propsFactory } from '../../util/vue-component';\r\nimport { YButton } from '../button';\r\nimport { YIconPageControl } from '../icons/YIconPageControl';\r\n\r\nimport './YPagination.scss';\r\n\r\nexport const pressYPaginationProps = propsFactory(\r\n {\r\n start: {\r\n type: [Number, String],\r\n default: 1,\r\n },\r\n modelValue: {\r\n type: Number,\r\n default: (props: any) => props.start as number,\r\n },\r\n disabled: Boolean,\r\n length: {\r\n type: [Number, String],\r\n default: 1,\r\n validator: (val: number) => val % 1 === 0,\r\n },\r\n totalVisible: [Number, String],\r\n showEndButton: Boolean,\r\n gap: {\r\n type: [String, Number],\r\n default: 4,\r\n },\r\n color: String,\r\n activeColor: String,\r\n firstIcon: String,\r\n lastIcon: String,\r\n prevIcon: String,\r\n nextIcon: String,\r\n },\r\n 'y-pagination',\r\n);\r\n\r\nexport const YPagination = defineComponent({\r\n name: 'YPagination',\r\n components: {\r\n YButton,\r\n },\r\n props: {\r\n ...pressYPaginationProps(),\r\n },\r\n emits: {\r\n 'update:modelValue': (value: number) => true,\r\n change: (value: number, control?: string) => true,\r\n },\r\n setup(props, { slots, emit }) {\r\n const page = useModelDuplex(props);\r\n\r\n const length = computed(() => parseInt(props.length as string, 10));\r\n const start = computed(() => parseInt(props.start as string, 10));\r\n\r\n const itemCount = shallowRef(-1);\r\n\r\n const { resizeObservedRef } = useResizeObserver((entries) => {\r\n if (1 > entries.length) return;\r\n const { target, contentRect } = entries[0];\r\n\r\n const firstItem = target.querySelector(\r\n '.y-pagination__list > *',\r\n ) as HTMLElement;\r\n if (firstItem) {\r\n const listWidth = contentRect.width;\r\n const itemWidth =\r\n firstItem.offsetWidth +\r\n parseFloat(getComputedStyle(firstItem).marginRight) * 2;\r\n itemCount.value = calcItemCount(listWidth, itemWidth);\r\n }\r\n });\r\n\r\n function calcItemCount(listWidth: number, itemWidth: number) {\r\n const fixedCount = props.showEndButton ? 5 : 3;\r\n const fixedWidth = itemWidth * fixedCount;\r\n const gap = +(props.gap ?? 4);\r\n return Math.max(\r\n 0,\r\n Math.floor(\r\n +((listWidth - fixedWidth - gap) / (itemWidth + gap)).toFixed(2),\r\n ),\r\n );\r\n }\r\n\r\n const totalVisible = computed(() => {\r\n if (props.totalVisible) return parseInt(props.totalVisible as string, 10);\r\n else if (itemCount.value >= 0) return itemCount.value;\r\n return calcItemCount(innerWidth, 58);\r\n });\r\n\r\n const controls = computed(() => {\r\n const prevDisabled = !!props.disabled || page.value <= start.value;\r\n const nextDisabled =\r\n !!props.disabled || page.value >= start.value + length.value - 1;\r\n return {\r\n first: {\r\n disabled: prevDisabled,\r\n onClick: (e: MouseEvent) => {\r\n e.preventDefault();\r\n page.value = 1;\r\n emit('change', 1, 'first');\r\n },\r\n },\r\n prev: {\r\n disabled: prevDisabled,\r\n onClick: (e: MouseEvent) => {\r\n e.preventDefault();\r\n const to = Math.max(1, page.value - 1);\r\n page.value = to;\r\n emit('change', to, 'prev');\r\n },\r\n },\r\n next: {\r\n disabled: nextDisabled,\r\n onClick: (e: MouseEvent) => {\r\n e.preventDefault();\r\n const to = Math.min(+length.value, page.value + 1);\r\n page.value = to;\r\n emit('change', to, 'next');\r\n },\r\n },\r\n last: {\r\n disabled: nextDisabled,\r\n onClick: (e: MouseEvent) => {\r\n e.preventDefault();\r\n const to = +length.value;\r\n page.value = +length.value;\r\n emit('change', to, 'last');\r\n },\r\n },\r\n };\r\n });\r\n\r\n const range = computed(() => {\r\n if (\r\n length.value <= 0 ||\r\n isNaN(length.value) ||\r\n length.value > Number.MAX_SAFE_INTEGER\r\n )\r\n return [];\r\n if (totalVisible.value <= 1) return [page.value];\r\n if (length.value <= totalVisible.value) {\r\n return getRangeArr(length.value, start.value);\r\n }\r\n const even = totalVisible.value % 2 === 0;\r\n const middle = even\r\n ? totalVisible.value / 2\r\n : Math.floor(totalVisible.value / 2);\r\n const left = even ? middle : middle + 1;\r\n const right = length.value - middle;\r\n\r\n if (left - page.value >= 0) {\r\n return [\r\n ...getRangeArr(Math.max(1, totalVisible.value - 1), start.value),\r\n 'ellipsis',\r\n length.value,\r\n ];\r\n } else if (page.value - right >= (even ? 1 : 0)) {\r\n const rangeLength = totalVisible.value - 1;\r\n const rangeStart = length.value - rangeLength + start.value;\r\n return [\r\n start.value,\r\n 'ellipsis',\r\n ...getRangeArr(rangeLength, rangeStart),\r\n ];\r\n } else {\r\n const rangeLength = Math.max(1, totalVisible.value - 3);\r\n const rangeStart =\r\n rangeLength === 1\r\n ? page.value\r\n : page.value - Math.ceil(rangeLength / 2) + start.value;\r\n return [\r\n start.value,\r\n 'ellipsis',\r\n ...getRangeArr(rangeLength, rangeStart),\r\n 'ellipsis',\r\n length.value,\r\n ];\r\n }\r\n });\r\n\r\n const { refs, updateRef } = useRefs<ComponentPublicInstance>();\r\n\r\n function changePage(event: Event, to = 1) {\r\n event.preventDefault();\r\n page.value = to;\r\n emit('change', to);\r\n }\r\n\r\n const items = computed(() => {\r\n return range.value.map((item, index) => {\r\n const ref = (e: any) => updateRef(e, index);\r\n\r\n if (item === 'ellipsis') {\r\n return {\r\n active: false,\r\n key: `ellipsis-${index}`,\r\n page: item,\r\n props: {\r\n ref,\r\n ellipsis: true,\r\n disabled: true, // TODO: skipper\r\n },\r\n };\r\n } else {\r\n const active = item === page.value;\r\n return {\r\n active,\r\n key: `item-${item}`,\r\n page: item,\r\n props: {\r\n ref,\r\n ellipsis: false,\r\n disabled: !!props.disabled || +props.length < 2,\r\n color: active ? props.activeColor : props.color,\r\n onClick: (e: MouseEvent) => changePage(e, item),\r\n },\r\n };\r\n }\r\n });\r\n });\r\n\r\n const styles = computed(() => {\r\n let gap = undefined;\r\n if (props.gap) {\r\n const value = +props.gap;\r\n if (!isNaN(value)) {\r\n gap = toStyleSizeValue(value);\r\n } else if (typeof props.gap === 'string') {\r\n gap = props.gap;\r\n }\r\n }\r\n return {\r\n '--y-pagination__gap': gap,\r\n };\r\n });\r\n\r\n useRender(() => {\r\n return (\r\n <div\r\n class={['y-pagination']}\r\n role={'navigation'}\r\n style={styles.value}\r\n ref={resizeObservedRef}\r\n >\r\n <ul class={['y-pagination__list']}>\r\n {props.showEndButton && (\r\n <li key=\"first\" class=\"y-pagination__first\">\r\n {slots.first ? (\r\n slots.first(controls.value.first)\r\n ) : (\r\n <YButton {...controls.value.first}>\r\n <YIconPageControl type={'first'} first={props.firstIcon}></YIconPageControl>\r\n </YButton>\r\n )}\r\n </li>\r\n )}\r\n <li key=\"prev\" class=\"y-pagination__prev\">\r\n {slots.prev ? (\r\n slots.prev(controls.value.prev)\r\n ) : (\r\n <YButton {...controls.value.prev}>\r\n <YIconPageControl type={'prev'} prev={props.prevIcon}></YIconPageControl>\r\n </YButton>\r\n )}\r\n </li>\r\n {items.value.map((item, index) => {\r\n return (\r\n <li\r\n key={item.key}\r\n class={[\r\n 'y-pagination__item',\r\n { 'y-pagination__item--active': item.active },\r\n ]}\r\n >\r\n <YButton {...item.props}>\r\n {item.props.ellipsis ? '...' : item.page}\r\n </YButton>\r\n </li>\r\n );\r\n })}\r\n <li key=\"next\" class=\"y-pagination__next\">\r\n {slots.next ? (\r\n slots.next(controls.value.next)\r\n ) : (\r\n <YButton {...controls.value.next}>\r\n <YIconPageControl type={'next'} next={props.nextIcon}></YIconPageControl>\r\n </YButton>\r\n )}\r\n </li>\r\n {props.showEndButton && (\r\n <li key=\"last\" class=\"y-pagination__last\">\r\n {slots.last ? (\r\n slots.last(controls.value.last)\r\n ) : (\r\n <YButton {...controls.value.last}>\r\n <YIconPageControl type={'last'} last={props.lastIcon}></YIconPageControl>\r\n </YButton>\r\n )}\r\n </li>\r\n )}\r\n </ul>\r\n </div>\r\n );\r\n });\r\n\r\n return {\r\n itemCount,\r\n page,\r\n refs,\r\n };\r\n },\r\n});\r\n"],"mappings":"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"}
@@ -1,5 +1,8 @@
1
- import { propsFactory } from "../../util/vue-component.mjs";
1
+ import { computed, inject, provide, watchEffect } from 'vue';
2
2
  import { useModelDuplex } from "../../composables/communication.mjs";
3
+ import { clamp } from "../../util/common.mjs";
4
+ import { propsFactory } from "../../util/vue-component.mjs";
5
+ export const Y_DATA_TABLE_PAGINATION_KEY = Symbol.for('yuyeon.data-table.pagination');
3
6
  export const pressDataTablePaginationProps = propsFactory({
4
7
  page: {
5
8
  type: [Number, String],
@@ -18,4 +21,60 @@ export function createPagination(props) {
18
21
  pageSize
19
22
  };
20
23
  }
24
+ export function providePagination(options) {
25
+ const {
26
+ page,
27
+ pageSize,
28
+ total
29
+ } = options;
30
+ const startIndex = computed(() => {
31
+ if (pageSize.value === -1) return 0;
32
+ return pageSize.value * (page.value - 1);
33
+ });
34
+ const endIndex = computed(() => {
35
+ if (pageSize.value === -1) return total.value;
36
+ return Math.min(total.value, startIndex.value + pageSize.value);
37
+ });
38
+ const pageLength = computed(() => {
39
+ if (pageSize.value === -1 || total.value === 0) return 1;
40
+ return Math.ceil(total.value / pageSize.value);
41
+ });
42
+ watchEffect(() => {
43
+ if (page.value > pageLength.value) {
44
+ page.value = pageLength.value;
45
+ }
46
+ });
47
+ function setPageSize(value) {
48
+ pageSize.value = value;
49
+ page.value = 1;
50
+ }
51
+ function nextPage() {
52
+ page.value = clamp(page.value + 1, 1, pageLength.value);
53
+ }
54
+ function prevPage() {
55
+ page.value = clamp(page.value - 1, 1, pageLength.value);
56
+ }
57
+ function setPage(value) {
58
+ page.value = clamp(value, 1, pageLength.value);
59
+ }
60
+ const data = {
61
+ page,
62
+ pageSize,
63
+ startIndex,
64
+ endIndex,
65
+ pageLength,
66
+ total,
67
+ nextPage,
68
+ prevPage,
69
+ setPage,
70
+ setPageSize
71
+ };
72
+ provide(Y_DATA_TABLE_PAGINATION_KEY, data);
73
+ return data;
74
+ }
75
+ export function usePagination() {
76
+ const data = inject(Y_DATA_TABLE_PAGINATION_KEY);
77
+ if (!data) throw new Error('Missing pagination!');
78
+ return data;
79
+ }
21
80
  //# sourceMappingURL=pagination.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.mjs","names":["propsFactory","useModelDuplex","pressDataTablePaginationProps","page","type","Number","String","default","pageSize","createPagination","props","undefined","value"],"sources":["../../../src/components/table/pagination.ts"],"sourcesContent":["import { PropType } from 'vue';\nimport { propsFactory } from \"../../util/vue-component\";\nimport { useModelDuplex } from \"../../composables/communication\";\n\nexport const pressDataTablePaginationProps = propsFactory(\n {\n page: {\n type: [Number, String] as PropType<number | string>,\n default: 0,\n },\n pageSize: {\n type: [Number, String] as PropType<number | string>,\n default: 10,\n },\n },\n 'YDataTable__pagination',\n);\n\ntype PaginationProps = {\n page: number | string;\n 'onUpdate:page': ((v: any) => void) | undefined;\n pageSize: number | string;\n 'onUpdate:pageSize': ((v: any) => void) | undefined;\n total?: number | string;\n};\n\nexport function createPagination(props: PaginationProps) {\n const page = useModelDuplex(\n props,\n 'page',\n undefined,\n (value) => +(value ?? 0),\n );\n const pageSize = useModelDuplex(\n props,\n 'pageSize',\n undefined,\n (value) => +(value ?? 10),\n );\n return { page, pageSize };\n}\n"],"mappings":"SACSA,YAAY;AAAA,SACZC,cAAc;AAEvB,OAAO,MAAMC,6BAA6B,GAAGF,YAAY,CACvD;EACEG,IAAI,EAAE;IACJC,IAAI,EAAE,CAACC,MAAM,EAAEC,MAAM,CAA8B;IACnDC,OAAO,EAAE;EACX,CAAC;EACDC,QAAQ,EAAE;IACRJ,IAAI,EAAE,CAACC,MAAM,EAAEC,MAAM,CAA8B;IACnDC,OAAO,EAAE;EACX;AACF,CAAC,EACD,wBACF,CAAC;AAUD,OAAO,SAASE,gBAAgBA,CAACC,KAAsB,EAAE;EACvD,MAAMP,IAAI,GAAGF,cAAc,CACzBS,KAAK,EACL,MAAM,EACNC,SAAS,EACRC,KAAK,IAAK,EAAEA,KAAK,IAAI,CAAC,CACzB,CAAC;EACD,MAAMJ,QAAQ,GAAGP,cAAc,CAC7BS,KAAK,EACL,UAAU,EACVC,SAAS,EACRC,KAAK,IAAK,EAAEA,KAAK,IAAI,EAAE,CAC1B,CAAC;EACD,OAAO;IAAET,IAAI;IAAEK;EAAS,CAAC;AAC3B"}
1
+ {"version":3,"file":"pagination.mjs","names":["computed","inject","provide","watchEffect","useModelDuplex","clamp","propsFactory","Y_DATA_TABLE_PAGINATION_KEY","Symbol","for","pressDataTablePaginationProps","page","type","Number","String","default","pageSize","createPagination","props","undefined","value","providePagination","options","total","startIndex","endIndex","Math","min","pageLength","ceil","setPageSize","nextPage","prevPage","setPage","data","usePagination","Error"],"sources":["../../../src/components/table/pagination.ts"],"sourcesContent":["import {\r\n InjectionKey,\r\n PropType,\r\n Ref,\r\n computed,\r\n inject,\r\n provide,\r\n watchEffect,\r\n} from 'vue';\r\n\r\nimport { useModelDuplex } from '../../composables/communication';\r\nimport { clamp } from '../../util/common';\r\nimport { propsFactory } from '../../util/vue-component';\r\n\r\nexport const Y_DATA_TABLE_PAGINATION_KEY: InjectionKey<{\r\n page: Ref<number>;\r\n pageSize: Ref<number>;\r\n startIndex: Ref<number>;\r\n endIndex: Ref<number>;\r\n pageLength: Ref<number>;\r\n total: Ref<number>;\r\n prevPage: () => void;\r\n nextPage: () => void;\r\n setPage: (page: number) => void;\r\n setPageSize: (size: number) => void;\r\n}> = Symbol.for('yuyeon.data-table.pagination');\r\n\r\nexport const pressDataTablePaginationProps = propsFactory(\r\n {\r\n page: {\r\n type: [Number, String] as PropType<number | string>,\r\n default: 0,\r\n },\r\n pageSize: {\r\n type: [Number, String] as PropType<number | string>,\r\n default: 10,\r\n },\r\n },\r\n 'YDataTable__pagination',\r\n);\r\n\r\ntype PaginationProps = {\r\n page: number | string;\r\n 'onUpdate:page': ((v: any) => void) | undefined;\r\n pageSize: number | string;\r\n 'onUpdate:pageSize': ((v: any) => void) | undefined;\r\n total?: number | string;\r\n};\r\n\r\nexport function createPagination(props: PaginationProps) {\r\n const page = useModelDuplex(\r\n props,\r\n 'page',\r\n undefined,\r\n (value) => +(value ?? 0),\r\n );\r\n const pageSize = useModelDuplex(\r\n props,\r\n 'pageSize',\r\n undefined,\r\n (value) => +(value ?? 10),\r\n );\r\n return { page, pageSize };\r\n}\r\n\r\nexport function providePagination(options: {\r\n page: Ref<number>;\r\n pageSize: Ref<number>;\r\n total: Ref<number>;\r\n}) {\r\n const { page, pageSize, total } = options;\r\n\r\n const startIndex = computed(() => {\r\n if (pageSize.value === -1) return 0;\r\n\r\n return pageSize.value * (page.value - 1);\r\n });\r\n const endIndex = computed(() => {\r\n if (pageSize.value === -1) return total.value;\r\n\r\n return Math.min(total.value, startIndex.value + pageSize.value);\r\n });\r\n\r\n const pageLength = computed(() => {\r\n if (pageSize.value === -1 || total.value === 0) return 1;\r\n\r\n return Math.ceil(total.value / pageSize.value);\r\n });\r\n\r\n watchEffect(() => {\r\n if (page.value > pageLength.value) {\r\n page.value = pageLength.value;\r\n }\r\n });\r\n\r\n function setPageSize(value: number) {\r\n pageSize.value = value;\r\n page.value = 1;\r\n }\r\n\r\n function nextPage() {\r\n page.value = clamp(page.value + 1, 1, pageLength.value);\r\n }\r\n\r\n function prevPage() {\r\n page.value = clamp(page.value - 1, 1, pageLength.value);\r\n }\r\n\r\n function setPage(value: number) {\r\n page.value = clamp(value, 1, pageLength.value);\r\n }\r\n\r\n const data = {\r\n page,\r\n pageSize,\r\n startIndex,\r\n endIndex,\r\n pageLength,\r\n total,\r\n nextPage,\r\n prevPage,\r\n setPage,\r\n setPageSize,\r\n };\r\n\r\n provide(Y_DATA_TABLE_PAGINATION_KEY, data);\r\n\r\n return data;\r\n}\r\n\r\nexport function usePagination() {\r\n const data = inject(Y_DATA_TABLE_PAGINATION_KEY);\r\n if (!data) throw new Error('Missing pagination!');\r\n return data;\r\n}\r\n"],"mappings":"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"}
@@ -1,9 +1,15 @@
1
1
  import { createTextVNode as _createTextVNode, createVNode as _createVNode, resolveDirective as _resolveDirective, Fragment as _Fragment } from "vue";
2
- import { computed, defineComponent, provide, ref, watch } from 'vue';
2
+ import { computed, defineComponent, onMounted, provide, ref, watch } from 'vue';
3
+ import { useModelDuplex } from "../../composables/communication.mjs";
3
4
  import { useRender } from "../../composables/component.mjs";
4
- import { getObjectValueByPath, hasOwnProperty } from "../../util/common.mjs";
5
- import { YTreeViewNode } from "./YTreeViewNode.mjs";
5
+ import { differenceBetween } from "../../util/array.mjs";
6
+ import { deepEqual, getObjectValueByPath, hasOwnProperty } from "../../util/common.mjs";
7
+ import { isColorValue } from "../../util/ui.mjs";
8
+ import { chooseProps } from "../../util/vue-component.mjs";
9
+ import { YTreeViewNode, pressYTreeViewNodeProps } from "./YTreeViewNode.mjs";
10
+ import { getKeys } from "./util.mjs";
6
11
  import "./YTreeView.scss";
12
+ const treeViewNodeProps = pressYTreeViewNodeProps();
7
13
  export const YTreeView = defineComponent({
8
14
  name: 'YTreeView',
9
15
  props: {
@@ -11,81 +17,300 @@ export const YTreeView = defineComponent({
11
17
  type: Array,
12
18
  default: () => []
13
19
  },
14
- itemKey: {
20
+ expanded: {
21
+ type: [Array],
22
+ default: () => []
23
+ },
24
+ active: {
25
+ type: [Array],
26
+ default: () => []
27
+ },
28
+ multipleActive: Boolean,
29
+ activeStrategy: {
15
30
  type: String,
16
- default: 'id'
31
+ // TODO: 'leaf'
32
+ default: 'independent'
17
33
  },
18
- childrenKey: {
34
+ selected: {
35
+ type: [Array],
36
+ default: () => []
37
+ },
38
+ selectStrategy: {
19
39
  type: String,
20
- default: 'children'
21
- }
40
+ // TODO: 'leaf'
41
+ default: 'leaf'
42
+ },
43
+ returnItem: Boolean,
44
+ defaultExpand: [Boolean, String, Number],
45
+ ...treeViewNodeProps
22
46
  },
47
+ emits: ['update:expanded', 'update:active', 'update:selected'],
23
48
  setup(props, _ref) {
24
49
  let {
25
- slots
50
+ slots,
51
+ emit,
52
+ expose
26
53
  } = _ref;
27
- const classes = computed(() => {
28
- return {
29
- 'y-tree-view': true
30
- };
31
- });
32
54
  const nodes = ref({});
33
- const expanded = ref([]);
55
+ const expanded = useModelDuplex(props, 'expanded');
56
+ const active = useModelDuplex(props, 'active');
57
+ const selected = useModelDuplex(props, 'selected');
58
+ const expandedSet = ref(new Set());
59
+ const selectedSet = ref(new Set());
60
+ const activeSet = ref(new Set());
61
+ const expandedCache = ref([]);
62
+
63
+ // Util Methods
64
+ function getDescendants(key) {
65
+ let descendants = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
66
+ const {
67
+ childKeys
68
+ } = nodes.value[key];
69
+ descendants.push(...childKeys);
70
+ for (const childKey of childKeys) {
71
+ descendants = getDescendants(childKey, descendants);
72
+ }
73
+ return descendants;
74
+ }
75
+ function getNodeKey(itemOrKey) {
76
+ return props.returnItem ? getObjectValueByPath(itemOrKey, props.itemKey) : itemOrKey;
77
+ }
78
+
79
+ // State Methods
34
80
  function updateNodes(items) {
35
81
  let parentKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
82
+ let level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
36
83
  for (const item of items) {
37
84
  const key = getObjectValueByPath(item, props.itemKey);
38
85
  const children = getObjectValueByPath(item, props.childrenKey) ?? [];
39
86
  const exist = hasOwnProperty(nodes.value, key);
40
- const oldNode = exist ? nodes.value[key] : {
87
+ const existNode = exist ? nodes.value[key] : {
88
+ vnode: null,
41
89
  selected: false,
42
90
  indeterminate: false,
43
91
  active: false,
44
- opened: false,
45
- vnode: null
92
+ expanded: false
46
93
  };
47
94
  const node = {
48
- vnode: oldNode.vnode,
95
+ vnode: existNode.vnode,
49
96
  item,
97
+ level,
50
98
  parentKey,
51
- childKeys: children.map(child => getObjectValueByPath(child, props.itemKey))
99
+ childKeys: children.map(child => getObjectValueByPath(child, props.itemKey)),
100
+ expanded: children.length > 0 && existNode.expanded,
101
+ active: existNode.active,
102
+ indeterminate: existNode.indeterminate,
103
+ selected: existNode.selected
52
104
  };
53
- updateNodes(children, key);
105
+ updateNodes(children, key, level + 1);
54
106
  nodes.value[key] = node;
107
+ if (nodes.value[key].expanded) {
108
+ expandedSet.value.add(key);
109
+ }
110
+ if (nodes.value[key].selected) {
111
+ expandedSet.value.add(key);
112
+ }
113
+ if (nodes.value[key].active) {
114
+ activeSet.value.add(key);
115
+ }
116
+ issueVnodeState(key);
55
117
  }
56
118
  }
57
- updateNodes(props.items);
119
+ function updateExpanded(key, to) {
120
+ if (!(key in nodes.value)) return;
121
+ const node = nodes.value[key];
122
+ const children = getObjectValueByPath(node.item, props.childrenKey);
123
+ if (Array.isArray(children) && children.length > 0) {
124
+ to ? expandedSet.value.add(key) : expandedSet.value.delete(key);
125
+ node.expanded = to;
126
+ issueVnodeState(key);
127
+ }
128
+ }
129
+ function expand() {
130
+ let until = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
131
+ Object.entries(nodes.value).forEach(_ref2 => {
132
+ let [key, node] = _ref2;
133
+ if (until === true || until >= node.level) {
134
+ updateExpanded(key, true);
135
+ }
136
+ });
137
+ emitExpanded();
138
+ }
139
+ function updateActive(key, to) {
140
+ if (!(key in nodes.value)) return;
141
+ const node = nodes.value[key];
142
+ let inactiveKey = !to ? key : '';
143
+ if (!props.multipleActive) {
144
+ [inactiveKey] = activeSet.value.keys();
145
+ }
146
+ if (to) {
147
+ activeSet.value.add(key);
148
+ node.active = true;
149
+ }
150
+ if (inactiveKey && inactiveKey in nodes.value) {
151
+ activeSet.value.delete(inactiveKey);
152
+ nodes.value[inactiveKey].active = false;
153
+ issueVnodeState(inactiveKey);
154
+ }
155
+ if (props.multipleActive && props.activeStrategy === 'cascade') {
156
+ for (const descendant of getDescendants(key)) {
157
+ if (descendant in nodes.value) {
158
+ to ? activeSet.value.add(descendant) : activeSet.value.delete(descendant);
159
+ nodes.value[descendant].active = to;
160
+ issueVnodeState(descendant);
161
+ }
162
+ }
163
+ }
164
+ }
165
+ function updateSelected(key, to) {
166
+ if (!(key in nodes.value)) return;
167
+ const node = nodes.value[key];
168
+ if (to) {
169
+ selectedSet.value.add(key);
170
+ node.selected = true;
171
+ }
172
+ if (!to && key in nodes.value) {
173
+ selectedSet.value.delete(key);
174
+ nodes.value[key].selected = false;
175
+ issueVnodeState(key);
176
+ }
177
+ if (props.selectStrategy === 'cascade') {
178
+ for (const descendant of getDescendants(key)) {
179
+ if (descendant in nodes.value) {
180
+ to ? selectedSet.value.add(descendant) : selectedSet.value.delete(descendant);
181
+ nodes.value[descendant].selected = to;
182
+ issueVnodeState(descendant);
183
+ }
184
+ }
185
+ }
186
+ }
187
+ function emitExpanded() {
188
+ const arr = [...expandedSet.value];
189
+ expanded.value = props.returnItem ? arr.map(key => nodes.value[key].item) : arr;
190
+ }
191
+ function emitActive() {
192
+ const arr = [...activeSet.value];
193
+ active.value = props.returnItem ? arr.map(key => nodes.value[key].item) : arr;
194
+ }
195
+ function emitSelected() {
196
+ const arr = [...selectedSet.value];
197
+ selected.value = props.returnItem ? arr.map(key => nodes.value[key].item) : arr;
198
+ }
199
+ function stateWatcher(value, stateSet, updater, emitter) {
200
+ const valuesOfKey = props.returnItem ? value.map(v => getObjectValueByPath(v, props.itemKey)) : value;
201
+ const old = [...stateSet.value];
202
+ if (deepEqual(old, valuesOfKey)) {
203
+ return;
204
+ }
205
+ old.forEach(key => updater(key, false));
206
+ valuesOfKey.forEach(key => updater(key, true));
207
+ emitter();
208
+ }
209
+ watch(expanded, neo => {
210
+ stateWatcher(neo, expandedSet, updateExpanded, emitExpanded);
211
+ });
212
+ watch(active, neo => {
213
+ stateWatcher(neo, activeSet, updateActive, emitActive);
214
+ });
215
+ watch(selected, neo => {
216
+ stateWatcher(neo, selectedSet, updateSelected, emitSelected);
217
+ });
58
218
  watch(() => props.items, neo => {
219
+ const oldKeys = Object.keys(nodes.value).map(nodeKey => getObjectValueByPath(nodes.value[nodeKey].item, props.itemKey));
220
+ const neoKeys = getKeys(neo, props.itemKey, props.childrenKey);
221
+ const diff = differenceBetween(oldKeys, neoKeys);
222
+ if (diff.length < 1 && neoKeys.length < oldKeys.length) {
223
+ return;
224
+ }
225
+ diff.forEach(k => delete nodes.value[k]);
226
+
227
+ // init
228
+ const oldSelected = [...selectedSet.value];
229
+ selectedSet.value.clear();
230
+ expandedSet.value.clear();
231
+ activeSet.value.clear();
59
232
  updateNodes(neo);
233
+ if (!deepEqual(oldSelected, [...selectedSet.value])) {
234
+ emitSelected();
235
+ }
60
236
  }, {
61
237
  deep: true
62
238
  });
239
+
240
+ // Provide & Issue
241
+ function issueVnodeState(key) {
242
+ const node = nodes.value[key];
243
+ if (node && node.vnode) {
244
+ node.vnode.active = node.active;
245
+ node.vnode.selected = node.selected;
246
+ node.vnode.indeterminate = node.indeterminate;
247
+ node.vnode.expanded = node.expanded;
248
+ }
249
+ }
63
250
  function register(key, vnode) {
64
251
  if (nodes.value[key]) {
65
252
  nodes.value[key].vnode = vnode;
66
253
  }
254
+ issueVnodeState(key);
67
255
  }
256
+ updateNodes(props.items);
68
257
  provide('tree-view', {
69
- register
258
+ register,
259
+ updateExpanded,
260
+ updateActive,
261
+ updateSelected,
262
+ emitExpanded,
263
+ emitActive,
264
+ emitSelected
70
265
  });
71
266
  const renderLeaves = computed(() => {
72
267
  return props.items;
73
268
  });
269
+ const classes = computed(() => {
270
+ return {
271
+ 'y-tree-view': true
272
+ };
273
+ });
274
+ const styles = computed(() => {
275
+ let color = props.activeColor;
276
+ if (props.activeColor && !isColorValue(props.activeColor)) {
277
+ color = `rgba(var(--y-theme--${props.activeColor}), 1)`;
278
+ }
279
+ return {
280
+ [`--y-tree-view__active-color`]: color
281
+ };
282
+ });
283
+ onMounted(() => {
284
+ if (props.defaultExpand !== undefined) {
285
+ expand(props.defaultExpand);
286
+ } else {
287
+ expanded.value.forEach(v => updateExpanded(getNodeKey(v), true));
288
+ emitExpanded();
289
+ }
290
+ });
291
+ expose({
292
+ expand
293
+ });
74
294
  useRender(() => {
75
295
  return _createVNode(_Fragment, null, [_createVNode("div", {
76
296
  "class": classes.value,
297
+ "style": styles.value,
77
298
  "role": "tree"
78
299
  }, [renderLeaves.value.length > 0 ? renderLeaves.value.map(leaf => {
79
300
  return _createVNode(YTreeViewNode, {
80
- "item": leaf,
81
- "level": 0
301
+ ...chooseProps(props, treeViewNodeProps),
302
+ item: leaf,
303
+ level: 0
82
304
  }, slots);
83
305
  }) : _createVNode("div", {
84
306
  "class": "y-tree-view__no-data"
85
307
  }, [slots['no-data'] ? slots['no-data']() : _createVNode("span", null, [_createTextVNode("No Data")])])])]);
86
308
  });
87
309
  return {
88
- nodes
310
+ nodes,
311
+ expandedSet,
312
+ selectedSet,
313
+ activeSet
89
314
  };
90
315
  }
91
316
  });
@@ -1 +1 @@
1
- {"version":3,"file":"YTreeView.mjs","names":["computed","defineComponent","provide","ref","watch","useRender","getObjectValueByPath","hasOwnProperty","YTreeViewNode","YTreeView","name","props","items","type","Array","default","itemKey","String","childrenKey","setup","_ref","slots","classes","nodes","expanded","updateNodes","parentKey","arguments","length","undefined","item","key","children","exist","value","oldNode","selected","indeterminate","active","opened","vnode","node","childKeys","map","child","neo","deep","register","renderLeaves","_createVNode","_Fragment","leaf","_createTextVNode"],"sources":["../../../src/components/tree-view/YTreeView.tsx"],"sourcesContent":["import {\r\n PropType,\r\n VNode,\r\n computed,\r\n defineComponent,\r\n provide,\r\n ref,\r\n watch,\r\n} from 'vue';\r\n\r\nimport { useRender } from '../../composables/component';\r\nimport { getObjectValueByPath, hasOwnProperty } from '../../util/common';\r\nimport { YTreeViewNode } from './YTreeViewNode';\r\n\r\nimport './YTreeView.scss';\r\n\r\ntype NodeKey = string | number;\r\n\r\nexport const YTreeView = defineComponent({\r\n name: 'YTreeView',\r\n props: {\r\n items: {\r\n type: Array as PropType<any[]>,\r\n default: () => [],\r\n },\r\n itemKey: {\r\n type: String as PropType<string>,\r\n default: 'id',\r\n },\r\n childrenKey: {\r\n type: String as PropType<string>,\r\n default: 'children',\r\n },\r\n },\r\n setup(props, { slots }) {\r\n const classes = computed(() => {\r\n return {\r\n 'y-tree-view': true,\r\n };\r\n });\r\n\r\n const nodes = ref<Record<NodeKey, any>>({});\r\n\r\n const expanded = ref<string[]>([]);\r\n\r\n function updateNodes(items: any[], parentKey: NodeKey | null = null) {\r\n for (const item of items) {\r\n const key = getObjectValueByPath(item, props.itemKey);\r\n const children = getObjectValueByPath(item, props.childrenKey) ?? [];\r\n const exist = hasOwnProperty(nodes.value, key);\r\n const oldNode = exist\r\n ? nodes.value[key]\r\n : {\r\n selected: false,\r\n indeterminate: false,\r\n active: false,\r\n opened: false,\r\n vnode: null,\r\n };\r\n const node = {\r\n vnode: oldNode.vnode,\r\n item,\r\n parentKey,\r\n childKeys: children.map((child: any) =>\r\n getObjectValueByPath(child, props.itemKey),\r\n ),\r\n };\r\n\r\n updateNodes(children, key);\r\n\r\n nodes.value[key] = node;\r\n }\r\n }\r\n\r\n updateNodes(props.items);\r\n watch(\r\n () => props.items,\r\n (neo: any[]) => {\r\n updateNodes(neo);\r\n },\r\n { deep: true },\r\n );\r\n\r\n function register(key: string | number, vnode: VNode) {\r\n if (nodes.value[key]) {\r\n nodes.value[key].vnode = vnode;\r\n }\r\n }\r\n\r\n provide('tree-view', { register });\r\n\r\n const renderLeaves = computed(() => {\r\n return props.items;\r\n });\r\n\r\n useRender(() => {\r\n return (\r\n <>\r\n <div class={classes.value} role=\"tree\">\r\n {renderLeaves.value.length > 0 ? (\r\n renderLeaves.value.map((leaf) => {\r\n return (\r\n <YTreeViewNode item={leaf} level={0} v-slots={slots}>\r\n </YTreeViewNode>\r\n );\r\n })\r\n ) : (\r\n <div class=\"y-tree-view__no-data\">\r\n {slots['no-data'] ? slots['no-data']() : <span>No Data</span>}\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n );\r\n });\r\n\r\n return {\r\n nodes,\r\n };\r\n },\r\n});\r\n\r\nexport type YTreeView = InstanceType<typeof YTreeView>;\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"YTreeView.mjs","names":["computed","defineComponent","onMounted","provide","ref","watch","useModelDuplex","useRender","differenceBetween","deepEqual","getObjectValueByPath","hasOwnProperty","isColorValue","chooseProps","YTreeViewNode","pressYTreeViewNodeProps","getKeys","treeViewNodeProps","YTreeView","name","props","items","type","Array","default","expanded","active","multipleActive","Boolean","activeStrategy","String","selected","selectStrategy","returnItem","defaultExpand","Number","emits","setup","_ref","slots","emit","expose","nodes","expandedSet","Set","selectedSet","activeSet","expandedCache","getDescendants","key","descendants","arguments","length","undefined","childKeys","value","push","childKey","getNodeKey","itemOrKey","itemKey","updateNodes","parentKey","level","item","children","childrenKey","exist","existNode","vnode","indeterminate","node","map","child","add","issueVnodeState","updateExpanded","to","isArray","delete","expand","until","Object","entries","forEach","_ref2","emitExpanded","updateActive","inactiveKey","keys","descendant","updateSelected","arr","emitActive","emitSelected","stateWatcher","stateSet","updater","emitter","valuesOfKey","v","old","neo","oldKeys","nodeKey","neoKeys","diff","k","oldSelected","clear","deep","register","renderLeaves","classes","styles","color","activeColor","_createVNode","_Fragment","leaf","_createTextVNode"],"sources":["../../../src/components/tree-view/YTreeView.tsx"],"sourcesContent":["import {\n PropType,\n Ref,\n VNode,\n computed,\n defineComponent,\n onMounted,\n provide,\n ref,\n watch,\n} from 'vue';\n\nimport { useModelDuplex } from '../../composables/communication';\nimport { useRender } from '../../composables/component';\nimport { differenceBetween } from '../../util/array';\nimport {\n deepEqual,\n getObjectValueByPath,\n hasOwnProperty,\n} from '../../util/common';\nimport { isColorValue } from '../../util/ui';\nimport { chooseProps } from '../../util/vue-component';\nimport { YTreeViewNode, pressYTreeViewNodeProps } from './YTreeViewNode';\nimport { getKeys } from './util';\n\nimport './YTreeView.scss';\nimport { NodeKey, NodeState } from './types';\n\nconst treeViewNodeProps = pressYTreeViewNodeProps();\n\nexport const YTreeView = defineComponent({\n name: 'YTreeView',\n props: {\n items: {\n type: Array as PropType<any[]>,\n default: () => [],\n },\n expanded: {\n type: [Array] as PropType<NodeKey[]>,\n default: () => [],\n },\n active: {\n type: [Array] as PropType<NodeKey[]>,\n default: () => [],\n },\n multipleActive: Boolean,\n activeStrategy: {\n type: String as PropType<'independent' | 'cascade'>, // TODO: 'leaf'\n default: 'independent',\n },\n selected: {\n type: [Array] as PropType<NodeKey[]>,\n default: () => [],\n },\n selectStrategy: {\n type: String as PropType<'independent' | 'cascade'>, // TODO: 'leaf'\n default: 'leaf',\n },\n returnItem: Boolean,\n defaultExpand: [Boolean, String, Number],\n ...treeViewNodeProps,\n },\n emits: ['update:expanded', 'update:active', 'update:selected'],\n setup(props, { slots, emit, expose }) {\n const nodes = ref<Record<NodeKey, any>>({});\n\n const expanded = useModelDuplex(props, 'expanded');\n const active = useModelDuplex(props, 'active');\n const selected = useModelDuplex(props, 'selected');\n\n const expandedSet = ref(new Set<NodeKey>());\n const selectedSet = ref(new Set<NodeKey>());\n const activeSet = ref(new Set<NodeKey>());\n\n const expandedCache = ref<NodeKey[]>([]);\n\n // Util Methods\n function getDescendants(key: NodeKey, descendants: NodeKey[] = []) {\n const { childKeys } = nodes.value[key];\n descendants.push(...childKeys);\n for (const childKey of childKeys) {\n descendants = getDescendants(childKey, descendants);\n }\n return descendants;\n }\n\n function getNodeKey(itemOrKey: any) {\n return props.returnItem\n ? getObjectValueByPath(itemOrKey, props.itemKey)\n : itemOrKey;\n }\n\n // State Methods\n function updateNodes(\n items: any[],\n parentKey: NodeKey | null = null,\n level = 0,\n ) {\n for (const item of items) {\n const key = getObjectValueByPath(item, props.itemKey);\n const children = getObjectValueByPath(item, props.childrenKey) ?? [];\n const exist = hasOwnProperty(nodes.value, key);\n const existNode = exist\n ? nodes.value[key]\n : {\n vnode: null,\n selected: false,\n indeterminate: false,\n active: false,\n expanded: false,\n };\n const node: NodeState = {\n vnode: existNode.vnode,\n item,\n level,\n parentKey,\n childKeys: children.map((child: any) =>\n getObjectValueByPath(child, props.itemKey),\n ),\n expanded: children.length > 0 && existNode.expanded,\n active: existNode.active,\n indeterminate: existNode.indeterminate,\n selected: existNode.selected,\n };\n\n updateNodes(children, key, level + 1);\n\n nodes.value[key] = node;\n if (nodes.value[key].expanded) {\n expandedSet.value.add(key);\n }\n if (nodes.value[key].selected) {\n expandedSet.value.add(key);\n }\n if (nodes.value[key].active) {\n activeSet.value.add(key);\n }\n\n issueVnodeState(key);\n }\n }\n\n function updateExpanded(key: NodeKey, to: boolean) {\n if (!(key in nodes.value)) return;\n const node = nodes.value[key];\n const children = getObjectValueByPath(node.item, props.childrenKey);\n if (Array.isArray(children) && children.length > 0) {\n to ? expandedSet.value.add(key) : expandedSet.value.delete(key)\n node.expanded = to;\n issueVnodeState(key);\n }\n }\n\n function expand(until: boolean | string | number = true) {\n Object.entries(nodes.value).forEach(([key, node]) => {\n if (until === true || until >= node.level) {\n updateExpanded(key, true);\n }\n });\n emitExpanded();\n }\n\n function updateActive(key: NodeKey, to: boolean) {\n if (!(key in nodes.value)) return;\n const node = nodes.value[key];\n let inactiveKey = !to ? key : '';\n if (!props.multipleActive) {\n [inactiveKey] = activeSet.value.keys();\n }\n if (to) {\n activeSet.value.add(key);\n node.active = true;\n }\n if (inactiveKey && inactiveKey in nodes.value) {\n activeSet.value.delete(inactiveKey);\n nodes.value[inactiveKey].active = false;\n issueVnodeState(inactiveKey);\n }\n\n if (props.multipleActive && props.activeStrategy === 'cascade') {\n for (const descendant of getDescendants(key)) {\n if (descendant in nodes.value) {\n to\n ? activeSet.value.add(descendant)\n : activeSet.value.delete(descendant);\n nodes.value[descendant].active = to;\n issueVnodeState(descendant);\n }\n }\n }\n }\n\n function updateSelected(key: NodeKey, to: boolean) {\n if (!(key in nodes.value)) return;\n const node = nodes.value[key];\n\n if (to) {\n selectedSet.value.add(key);\n node.selected = true;\n }\n\n if (!to && key in nodes.value) {\n selectedSet.value.delete(key);\n nodes.value[key].selected = false;\n issueVnodeState(key);\n }\n\n if (props.selectStrategy === 'cascade') {\n for (const descendant of getDescendants(key)) {\n if (descendant in nodes.value) {\n to\n ? selectedSet.value.add(descendant)\n : selectedSet.value.delete(descendant);\n nodes.value[descendant].selected = to;\n issueVnodeState(descendant);\n }\n }\n }\n }\n\n function emitExpanded() {\n const arr = [...expandedSet.value];\n expanded.value = props.returnItem\n ? arr.map((key) => nodes.value[key].item)\n : arr;\n }\n\n function emitActive() {\n const arr = [...activeSet.value];\n active.value = props.returnItem\n ? arr.map((key) => nodes.value[key].item)\n : arr;\n }\n\n function emitSelected() {\n const arr = [...selectedSet.value];\n selected.value = props.returnItem\n ? arr.map((key) => nodes.value[key].item)\n : arr;\n }\n\n function stateWatcher(\n value: any[],\n stateSet: Ref<Set<NodeKey>>,\n updater: (key: NodeKey, to: boolean) => void,\n emitter: () => void,\n ) {\n const valuesOfKey = props.returnItem\n ? value.map((v) => getObjectValueByPath(v, props.itemKey))\n : value;\n const old = [...stateSet.value];\n if (deepEqual(old, valuesOfKey)) {\n return;\n }\n old.forEach((key) => updater(key, false));\n valuesOfKey.forEach((key) => updater(key, true));\n emitter();\n }\n\n watch(expanded, (neo) => {\n stateWatcher(neo, expandedSet, updateExpanded, emitExpanded);\n });\n\n watch(active, (neo) => {\n stateWatcher(neo, activeSet, updateActive, emitActive);\n });\n\n watch(selected, (neo) => {\n stateWatcher(neo, selectedSet, updateSelected, emitSelected);\n });\n\n watch(\n () => props.items,\n (neo: any[]) => {\n const oldKeys = Object.keys(nodes.value).map((nodeKey) =>\n getObjectValueByPath(nodes.value[nodeKey].item, props.itemKey),\n );\n const neoKeys = getKeys(neo, props.itemKey, props.childrenKey);\n const diff = differenceBetween(oldKeys, neoKeys);\n if (diff.length < 1 && neoKeys.length < oldKeys.length) {\n return;\n }\n diff.forEach((k) => delete nodes.value[k]);\n\n // init\n const oldSelected = [...selectedSet.value];\n selectedSet.value.clear();\n expandedSet.value.clear();\n activeSet.value.clear();\n updateNodes(neo);\n if (!deepEqual(oldSelected, [...selectedSet.value])) {\n emitSelected();\n }\n },\n { deep: true },\n );\n\n // Provide & Issue\n function issueVnodeState(key: NodeKey) {\n const node = nodes.value[key];\n if (node && node.vnode) {\n node.vnode.active = node.active;\n node.vnode.selected = node.selected;\n node.vnode.indeterminate = node.indeterminate;\n node.vnode.expanded = node.expanded;\n }\n }\n\n function register(key: NodeKey, vnode: VNode) {\n if (nodes.value[key]) {\n nodes.value[key].vnode = vnode;\n }\n\n issueVnodeState(key);\n }\n\n updateNodes(props.items);\n\n provide('tree-view', {\n register,\n updateExpanded,\n updateActive,\n updateSelected,\n emitExpanded,\n emitActive,\n emitSelected,\n });\n\n const renderLeaves = computed(() => {\n return props.items;\n });\n\n const classes = computed(() => {\n return {\n 'y-tree-view': true,\n };\n });\n\n const styles = computed(() => {\n let color = props.activeColor;\n if (props.activeColor && !isColorValue(props.activeColor)) {\n color = `rgba(var(--y-theme--${props.activeColor}), 1)`;\n }\n return {\n [`--y-tree-view__active-color`]: color,\n };\n });\n\n onMounted(() => {\n if (props.defaultExpand !== undefined) {\n expand(props.defaultExpand);\n } else {\n expanded.value.forEach((v: any) => updateExpanded(getNodeKey(v), true));\n emitExpanded();\n }\n });\n\n expose({\n expand,\n });\n\n useRender(() => {\n return (\n <>\n <div class={classes.value} style={styles.value} role=\"tree\">\n {renderLeaves.value.length > 0 ? (\n renderLeaves.value.map((leaf) => {\n return (\n <YTreeViewNode\n v-slots={slots}\n {...{\n ...chooseProps(props, treeViewNodeProps),\n item: leaf,\n level: 0,\n }}\n ></YTreeViewNode>\n );\n })\n ) : (\n <div class=\"y-tree-view__no-data\">\n {slots['no-data'] ? slots['no-data']() : <span>No Data</span>}\n </div>\n )}\n </div>\n </>\n );\n });\n\n return {\n nodes,\n expandedSet,\n selectedSet,\n activeSet,\n };\n },\n});\n\nexport type YTreeView = InstanceType<typeof YTreeView>;\n"],"mappings":";AAAA,SAIEA,QAAQ,EACRC,eAAe,EACfC,SAAS,EACTC,OAAO,EACPC,GAAG,EACHC,KAAK,QACA,KAAK;AAAC,SAEJC,cAAc;AAAA,SACdC,SAAS;AAAA,SACTC,iBAAiB;AAAA,SAExBC,SAAS,EACTC,oBAAoB,EACpBC,cAAc;AAAA,SAEPC,YAAY;AAAA,SACZC,WAAW;AAAA,SACXC,aAAa,EAAEC,uBAAuB;AAAA,SACtCC,OAAO;AAEhB;AAGA,MAAMC,iBAAiB,GAAGF,uBAAuB,CAAC,CAAC;AAEnD,OAAO,MAAMG,SAAS,GAAGjB,eAAe,CAAC;EACvCkB,IAAI,EAAE,WAAW;EACjBC,KAAK,EAAE;IACLC,KAAK,EAAE;MACLC,IAAI,EAAEC,KAAwB;MAC9BC,OAAO,EAAEA,CAAA,KAAM;IACjB,CAAC;IACDC,QAAQ,EAAE;MACRH,IAAI,EAAE,CAACC,KAAK,CAAwB;MACpCC,OAAO,EAAEA,CAAA,KAAM;IACjB,CAAC;IACDE,MAAM,EAAE;MACNJ,IAAI,EAAE,CAACC,KAAK,CAAwB;MACpCC,OAAO,EAAEA,CAAA,KAAM;IACjB,CAAC;IACDG,cAAc,EAAEC,OAAO;IACvBC,cAAc,EAAE;MACdP,IAAI,EAAEQ,MAA6C;MAAE;MACrDN,OAAO,EAAE;IACX,CAAC;IACDO,QAAQ,EAAE;MACRT,IAAI,EAAE,CAACC,KAAK,CAAwB;MACpCC,OAAO,EAAEA,CAAA,KAAM;IACjB,CAAC;IACDQ,cAAc,EAAE;MACdV,IAAI,EAAEQ,MAA6C;MAAE;MACrDN,OAAO,EAAE;IACX,CAAC;IACDS,UAAU,EAAEL,OAAO;IACnBM,aAAa,EAAE,CAACN,OAAO,EAAEE,MAAM,EAAEK,MAAM,CAAC;IACxC,GAAGlB;EACL,CAAC;EACDmB,KAAK,EAAE,CAAC,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,CAAC;EAC9DC,KAAKA,CAACjB,KAAK,EAAAkB,IAAA,EAA2B;IAAA,IAAzB;MAAEC,KAAK;MAAEC,IAAI;MAAEC;IAAO,CAAC,GAAAH,IAAA;IAClC,MAAMI,KAAK,GAAGtC,GAAG,CAAuB,CAAC,CAAC,CAAC;IAE3C,MAAMqB,QAAQ,GAAGnB,cAAc,CAACc,KAAK,EAAE,UAAU,CAAC;IAClD,MAAMM,MAAM,GAAGpB,cAAc,CAACc,KAAK,EAAE,QAAQ,CAAC;IAC9C,MAAMW,QAAQ,GAAGzB,cAAc,CAACc,KAAK,EAAE,UAAU,CAAC;IAElD,MAAMuB,WAAW,GAAGvC,GAAG,CAAC,IAAIwC,GAAG,CAAU,CAAC,CAAC;IAC3C,MAAMC,WAAW,GAAGzC,GAAG,CAAC,IAAIwC,GAAG,CAAU,CAAC,CAAC;IAC3C,MAAME,SAAS,GAAG1C,GAAG,CAAC,IAAIwC,GAAG,CAAU,CAAC,CAAC;IAEzC,MAAMG,aAAa,GAAG3C,GAAG,CAAY,EAAE,CAAC;;IAExC;IACA,SAAS4C,cAAcA,CAACC,GAAY,EAA+B;MAAA,IAA7BC,WAAsB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;MAC/D,MAAM;QAAEG;MAAU,CAAC,GAAGZ,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC;MACtCC,WAAW,CAACM,IAAI,CAAC,GAAGF,SAAS,CAAC;MAC9B,KAAK,MAAMG,QAAQ,IAAIH,SAAS,EAAE;QAChCJ,WAAW,GAAGF,cAAc,CAACS,QAAQ,EAAEP,WAAW,CAAC;MACrD;MACA,OAAOA,WAAW;IACpB;IAEA,SAASQ,UAAUA,CAACC,SAAc,EAAE;MAClC,OAAOvC,KAAK,CAACa,UAAU,GACnBvB,oBAAoB,CAACiD,SAAS,EAAEvC,KAAK,CAACwC,OAAO,CAAC,GAC9CD,SAAS;IACf;;IAEA;IACA,SAASE,WAAWA,CAClBxC,KAAY,EAGZ;MAAA,IAFAyC,SAAyB,GAAAX,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;MAAA,IAChCY,KAAK,GAAAZ,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;MAET,KAAK,MAAMa,IAAI,IAAI3C,KAAK,EAAE;QACxB,MAAM4B,GAAG,GAAGvC,oBAAoB,CAACsD,IAAI,EAAE5C,KAAK,CAACwC,OAAO,CAAC;QACrD,MAAMK,QAAQ,GAAGvD,oBAAoB,CAACsD,IAAI,EAAE5C,KAAK,CAAC8C,WAAW,CAAC,IAAI,EAAE;QACpE,MAAMC,KAAK,GAAGxD,cAAc,CAAC+B,KAAK,CAACa,KAAK,EAAEN,GAAG,CAAC;QAC9C,MAAMmB,SAAS,GAAGD,KAAK,GACnBzB,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC,GAChB;UACEoB,KAAK,EAAE,IAAI;UACXtC,QAAQ,EAAE,KAAK;UACfuC,aAAa,EAAE,KAAK;UACpB5C,MAAM,EAAE,KAAK;UACbD,QAAQ,EAAE;QACZ,CAAC;QACL,MAAM8C,IAAe,GAAG;UACtBF,KAAK,EAAED,SAAS,CAACC,KAAK;UACtBL,IAAI;UACJD,KAAK;UACLD,SAAS;UACTR,SAAS,EAAEW,QAAQ,CAACO,GAAG,CAAEC,KAAU,IACjC/D,oBAAoB,CAAC+D,KAAK,EAAErD,KAAK,CAACwC,OAAO,CAC3C,CAAC;UACDnC,QAAQ,EAAEwC,QAAQ,CAACb,MAAM,GAAG,CAAC,IAAIgB,SAAS,CAAC3C,QAAQ;UACnDC,MAAM,EAAE0C,SAAS,CAAC1C,MAAM;UACxB4C,aAAa,EAAEF,SAAS,CAACE,aAAa;UACtCvC,QAAQ,EAAEqC,SAAS,CAACrC;QACtB,CAAC;QAED8B,WAAW,CAACI,QAAQ,EAAEhB,GAAG,EAAEc,KAAK,GAAG,CAAC,CAAC;QAErCrB,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC,GAAGsB,IAAI;QACvB,IAAI7B,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC,CAACxB,QAAQ,EAAE;UAC7BkB,WAAW,CAACY,KAAK,CAACmB,GAAG,CAACzB,GAAG,CAAC;QAC5B;QACA,IAAIP,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC,CAAClB,QAAQ,EAAE;UAC7BY,WAAW,CAACY,KAAK,CAACmB,GAAG,CAACzB,GAAG,CAAC;QAC5B;QACA,IAAIP,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC,CAACvB,MAAM,EAAE;UAC3BoB,SAAS,CAACS,KAAK,CAACmB,GAAG,CAACzB,GAAG,CAAC;QAC1B;QAEA0B,eAAe,CAAC1B,GAAG,CAAC;MACtB;IACF;IAEA,SAAS2B,cAAcA,CAAC3B,GAAY,EAAE4B,EAAW,EAAE;MACjD,IAAI,EAAE5B,GAAG,IAAIP,KAAK,CAACa,KAAK,CAAC,EAAE;MAC3B,MAAMgB,IAAI,GAAG7B,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC;MAC7B,MAAMgB,QAAQ,GAAGvD,oBAAoB,CAAC6D,IAAI,CAACP,IAAI,EAAE5C,KAAK,CAAC8C,WAAW,CAAC;MACnE,IAAI3C,KAAK,CAACuD,OAAO,CAACb,QAAQ,CAAC,IAAIA,QAAQ,CAACb,MAAM,GAAG,CAAC,EAAE;QAClDyB,EAAE,GAAGlC,WAAW,CAACY,KAAK,CAACmB,GAAG,CAACzB,GAAG,CAAC,GAAGN,WAAW,CAACY,KAAK,CAACwB,MAAM,CAAC9B,GAAG,CAAC;QAC/DsB,IAAI,CAAC9C,QAAQ,GAAGoD,EAAE;QAClBF,eAAe,CAAC1B,GAAG,CAAC;MACtB;IACF;IAEA,SAAS+B,MAAMA,CAAA,EAA0C;MAAA,IAAzCC,KAAgC,GAAA9B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;MACrD+B,MAAM,CAACC,OAAO,CAACzC,KAAK,CAACa,KAAK,CAAC,CAAC6B,OAAO,CAACC,KAAA,IAAiB;QAAA,IAAhB,CAACpC,GAAG,EAAEsB,IAAI,CAAC,GAAAc,KAAA;QAC9C,IAAIJ,KAAK,KAAK,IAAI,IAAIA,KAAK,IAAIV,IAAI,CAACR,KAAK,EAAE;UACzCa,cAAc,CAAC3B,GAAG,EAAE,IAAI,CAAC;QAC3B;MACF,CAAC,CAAC;MACFqC,YAAY,CAAC,CAAC;IAChB;IAEA,SAASC,YAAYA,CAACtC,GAAY,EAAE4B,EAAW,EAAE;MAC/C,IAAI,EAAE5B,GAAG,IAAIP,KAAK,CAACa,KAAK,CAAC,EAAE;MAC3B,MAAMgB,IAAI,GAAG7B,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC;MAC7B,IAAIuC,WAAW,GAAG,CAACX,EAAE,GAAG5B,GAAG,GAAG,EAAE;MAChC,IAAI,CAAC7B,KAAK,CAACO,cAAc,EAAE;QACzB,CAAC6D,WAAW,CAAC,GAAG1C,SAAS,CAACS,KAAK,CAACkC,IAAI,CAAC,CAAC;MACxC;MACA,IAAIZ,EAAE,EAAE;QACN/B,SAAS,CAACS,KAAK,CAACmB,GAAG,CAACzB,GAAG,CAAC;QACxBsB,IAAI,CAAC7C,MAAM,GAAG,IAAI;MACpB;MACA,IAAI8D,WAAW,IAAIA,WAAW,IAAI9C,KAAK,CAACa,KAAK,EAAE;QAC7CT,SAAS,CAACS,KAAK,CAACwB,MAAM,CAACS,WAAW,CAAC;QACnC9C,KAAK,CAACa,KAAK,CAACiC,WAAW,CAAC,CAAC9D,MAAM,GAAG,KAAK;QACvCiD,eAAe,CAACa,WAAW,CAAC;MAC9B;MAEA,IAAIpE,KAAK,CAACO,cAAc,IAAIP,KAAK,CAACS,cAAc,KAAK,SAAS,EAAE;QAC9D,KAAK,MAAM6D,UAAU,IAAI1C,cAAc,CAACC,GAAG,CAAC,EAAE;UAC5C,IAAIyC,UAAU,IAAIhD,KAAK,CAACa,KAAK,EAAE;YAC7BsB,EAAE,GACE/B,SAAS,CAACS,KAAK,CAACmB,GAAG,CAACgB,UAAU,CAAC,GAC/B5C,SAAS,CAACS,KAAK,CAACwB,MAAM,CAACW,UAAU,CAAC;YACtChD,KAAK,CAACa,KAAK,CAACmC,UAAU,CAAC,CAAChE,MAAM,GAAGmD,EAAE;YACnCF,eAAe,CAACe,UAAU,CAAC;UAC7B;QACF;MACF;IACF;IAEA,SAASC,cAAcA,CAAC1C,GAAY,EAAE4B,EAAW,EAAE;MACjD,IAAI,EAAE5B,GAAG,IAAIP,KAAK,CAACa,KAAK,CAAC,EAAE;MAC3B,MAAMgB,IAAI,GAAG7B,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC;MAE7B,IAAI4B,EAAE,EAAE;QACNhC,WAAW,CAACU,KAAK,CAACmB,GAAG,CAACzB,GAAG,CAAC;QAC1BsB,IAAI,CAACxC,QAAQ,GAAG,IAAI;MACtB;MAEA,IAAI,CAAC8C,EAAE,IAAI5B,GAAG,IAAIP,KAAK,CAACa,KAAK,EAAE;QAC7BV,WAAW,CAACU,KAAK,CAACwB,MAAM,CAAC9B,GAAG,CAAC;QAC7BP,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC,CAAClB,QAAQ,GAAG,KAAK;QACjC4C,eAAe,CAAC1B,GAAG,CAAC;MACtB;MAEA,IAAI7B,KAAK,CAACY,cAAc,KAAK,SAAS,EAAE;QACtC,KAAK,MAAM0D,UAAU,IAAI1C,cAAc,CAACC,GAAG,CAAC,EAAE;UAC5C,IAAIyC,UAAU,IAAIhD,KAAK,CAACa,KAAK,EAAE;YAC7BsB,EAAE,GACEhC,WAAW,CAACU,KAAK,CAACmB,GAAG,CAACgB,UAAU,CAAC,GACjC7C,WAAW,CAACU,KAAK,CAACwB,MAAM,CAACW,UAAU,CAAC;YACxChD,KAAK,CAACa,KAAK,CAACmC,UAAU,CAAC,CAAC3D,QAAQ,GAAG8C,EAAE;YACrCF,eAAe,CAACe,UAAU,CAAC;UAC7B;QACF;MACF;IACF;IAEA,SAASJ,YAAYA,CAAA,EAAG;MACtB,MAAMM,GAAG,GAAG,CAAC,GAAGjD,WAAW,CAACY,KAAK,CAAC;MAClC9B,QAAQ,CAAC8B,KAAK,GAAGnC,KAAK,CAACa,UAAU,GAC7B2D,GAAG,CAACpB,GAAG,CAAEvB,GAAG,IAAKP,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC,CAACe,IAAI,CAAC,GACvC4B,GAAG;IACT;IAEA,SAASC,UAAUA,CAAA,EAAG;MACpB,MAAMD,GAAG,GAAG,CAAC,GAAG9C,SAAS,CAACS,KAAK,CAAC;MAChC7B,MAAM,CAAC6B,KAAK,GAAGnC,KAAK,CAACa,UAAU,GAC3B2D,GAAG,CAACpB,GAAG,CAAEvB,GAAG,IAAKP,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC,CAACe,IAAI,CAAC,GACvC4B,GAAG;IACT;IAEA,SAASE,YAAYA,CAAA,EAAG;MACtB,MAAMF,GAAG,GAAG,CAAC,GAAG/C,WAAW,CAACU,KAAK,CAAC;MAClCxB,QAAQ,CAACwB,KAAK,GAAGnC,KAAK,CAACa,UAAU,GAC7B2D,GAAG,CAACpB,GAAG,CAAEvB,GAAG,IAAKP,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC,CAACe,IAAI,CAAC,GACvC4B,GAAG;IACT;IAEA,SAASG,YAAYA,CACnBxC,KAAY,EACZyC,QAA2B,EAC3BC,OAA4C,EAC5CC,OAAmB,EACnB;MACA,MAAMC,WAAW,GAAG/E,KAAK,CAACa,UAAU,GAChCsB,KAAK,CAACiB,GAAG,CAAE4B,CAAC,IAAK1F,oBAAoB,CAAC0F,CAAC,EAAEhF,KAAK,CAACwC,OAAO,CAAC,CAAC,GACxDL,KAAK;MACT,MAAM8C,GAAG,GAAG,CAAC,GAAGL,QAAQ,CAACzC,KAAK,CAAC;MAC/B,IAAI9C,SAAS,CAAC4F,GAAG,EAAEF,WAAW,CAAC,EAAE;QAC/B;MACF;MACAE,GAAG,CAACjB,OAAO,CAAEnC,GAAG,IAAKgD,OAAO,CAAChD,GAAG,EAAE,KAAK,CAAC,CAAC;MACzCkD,WAAW,CAACf,OAAO,CAAEnC,GAAG,IAAKgD,OAAO,CAAChD,GAAG,EAAE,IAAI,CAAC,CAAC;MAChDiD,OAAO,CAAC,CAAC;IACX;IAEA7F,KAAK,CAACoB,QAAQ,EAAG6E,GAAG,IAAK;MACvBP,YAAY,CAACO,GAAG,EAAE3D,WAAW,EAAEiC,cAAc,EAAEU,YAAY,CAAC;IAC9D,CAAC,CAAC;IAEFjF,KAAK,CAACqB,MAAM,EAAG4E,GAAG,IAAK;MACrBP,YAAY,CAACO,GAAG,EAAExD,SAAS,EAAEyC,YAAY,EAAEM,UAAU,CAAC;IACxD,CAAC,CAAC;IAEFxF,KAAK,CAAC0B,QAAQ,EAAGuE,GAAG,IAAK;MACvBP,YAAY,CAACO,GAAG,EAAEzD,WAAW,EAAE8C,cAAc,EAAEG,YAAY,CAAC;IAC9D,CAAC,CAAC;IAEFzF,KAAK,CACH,MAAMe,KAAK,CAACC,KAAK,EAChBiF,GAAU,IAAK;MACd,MAAMC,OAAO,GAAGrB,MAAM,CAACO,IAAI,CAAC/C,KAAK,CAACa,KAAK,CAAC,CAACiB,GAAG,CAAEgC,OAAO,IACnD9F,oBAAoB,CAACgC,KAAK,CAACa,KAAK,CAACiD,OAAO,CAAC,CAACxC,IAAI,EAAE5C,KAAK,CAACwC,OAAO,CAC/D,CAAC;MACD,MAAM6C,OAAO,GAAGzF,OAAO,CAACsF,GAAG,EAAElF,KAAK,CAACwC,OAAO,EAAExC,KAAK,CAAC8C,WAAW,CAAC;MAC9D,MAAMwC,IAAI,GAAGlG,iBAAiB,CAAC+F,OAAO,EAAEE,OAAO,CAAC;MAChD,IAAIC,IAAI,CAACtD,MAAM,GAAG,CAAC,IAAIqD,OAAO,CAACrD,MAAM,GAAGmD,OAAO,CAACnD,MAAM,EAAE;QACtD;MACF;MACAsD,IAAI,CAACtB,OAAO,CAAEuB,CAAC,IAAK,OAAOjE,KAAK,CAACa,KAAK,CAACoD,CAAC,CAAC,CAAC;;MAE1C;MACA,MAAMC,WAAW,GAAG,CAAC,GAAG/D,WAAW,CAACU,KAAK,CAAC;MAC1CV,WAAW,CAACU,KAAK,CAACsD,KAAK,CAAC,CAAC;MACzBlE,WAAW,CAACY,KAAK,CAACsD,KAAK,CAAC,CAAC;MACzB/D,SAAS,CAACS,KAAK,CAACsD,KAAK,CAAC,CAAC;MACvBhD,WAAW,CAACyC,GAAG,CAAC;MAChB,IAAI,CAAC7F,SAAS,CAACmG,WAAW,EAAE,CAAC,GAAG/D,WAAW,CAACU,KAAK,CAAC,CAAC,EAAE;QACnDuC,YAAY,CAAC,CAAC;MAChB;IACF,CAAC,EACD;MAAEgB,IAAI,EAAE;IAAK,CACf,CAAC;;IAED;IACA,SAASnC,eAAeA,CAAC1B,GAAY,EAAE;MACrC,MAAMsB,IAAI,GAAG7B,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC;MAC7B,IAAIsB,IAAI,IAAIA,IAAI,CAACF,KAAK,EAAE;QACtBE,IAAI,CAACF,KAAK,CAAC3C,MAAM,GAAG6C,IAAI,CAAC7C,MAAM;QAC/B6C,IAAI,CAACF,KAAK,CAACtC,QAAQ,GAAGwC,IAAI,CAACxC,QAAQ;QACnCwC,IAAI,CAACF,KAAK,CAACC,aAAa,GAAGC,IAAI,CAACD,aAAa;QAC7CC,IAAI,CAACF,KAAK,CAAC5C,QAAQ,GAAG8C,IAAI,CAAC9C,QAAQ;MACrC;IACF;IAEA,SAASsF,QAAQA,CAAC9D,GAAY,EAAEoB,KAAY,EAAE;MAC5C,IAAI3B,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC,EAAE;QACpBP,KAAK,CAACa,KAAK,CAACN,GAAG,CAAC,CAACoB,KAAK,GAAGA,KAAK;MAChC;MAEAM,eAAe,CAAC1B,GAAG,CAAC;IACtB;IAEAY,WAAW,CAACzC,KAAK,CAACC,KAAK,CAAC;IAExBlB,OAAO,CAAC,WAAW,EAAE;MACnB4G,QAAQ;MACRnC,cAAc;MACdW,YAAY;MACZI,cAAc;MACdL,YAAY;MACZO,UAAU;MACVC;IACF,CAAC,CAAC;IAEF,MAAMkB,YAAY,GAAGhH,QAAQ,CAAC,MAAM;MAClC,OAAOoB,KAAK,CAACC,KAAK;IACpB,CAAC,CAAC;IAEF,MAAM4F,OAAO,GAAGjH,QAAQ,CAAC,MAAM;MAC7B,OAAO;QACL,aAAa,EAAE;MACjB,CAAC;IACH,CAAC,CAAC;IAEF,MAAMkH,MAAM,GAAGlH,QAAQ,CAAC,MAAM;MAC5B,IAAImH,KAAK,GAAG/F,KAAK,CAACgG,WAAW;MAC7B,IAAIhG,KAAK,CAACgG,WAAW,IAAI,CAACxG,YAAY,CAACQ,KAAK,CAACgG,WAAW,CAAC,EAAE;QACzDD,KAAK,GAAI,uBAAsB/F,KAAK,CAACgG,WAAY,OAAM;MACzD;MACA,OAAO;QACL,CAAE,6BAA4B,GAAGD;MACnC,CAAC;IACH,CAAC,CAAC;IAEFjH,SAAS,CAAC,MAAM;MACd,IAAIkB,KAAK,CAACc,aAAa,KAAKmB,SAAS,EAAE;QACrC2B,MAAM,CAAC5D,KAAK,CAACc,aAAa,CAAC;MAC7B,CAAC,MAAM;QACLT,QAAQ,CAAC8B,KAAK,CAAC6B,OAAO,CAAEgB,CAAM,IAAKxB,cAAc,CAAClB,UAAU,CAAC0C,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACvEd,YAAY,CAAC,CAAC;MAChB;IACF,CAAC,CAAC;IAEF7C,MAAM,CAAC;MACLuC;IACF,CAAC,CAAC;IAEFzE,SAAS,CAAC,MAAM;MACd,OAAA8G,YAAA,CAAAC,SAAA,SAAAD,YAAA;QAAA,SAEgBJ,OAAO,CAAC1D,KAAK;QAAA,SAAS2D,MAAM,CAAC3D,KAAK;QAAA,QAAO;MAAM,IACxDyD,YAAY,CAACzD,KAAK,CAACH,MAAM,GAAG,CAAC,GAC5B4D,YAAY,CAACzD,KAAK,CAACiB,GAAG,CAAE+C,IAAI,IAAK;QAC/B,OAAAF,YAAA,CAAAvG,aAAA;UAIM,GAAGD,WAAW,CAACO,KAAK,EAAEH,iBAAiB,CAAC;UACxC+C,IAAI,EAAEuD,IAAI;UACVxD,KAAK,EAAE;QAAC,GAJDxB,KAAK;MAQpB,CAAC,CAAC,GAAA8E,YAAA;QAAA,SAES;MAAsB,IAC9B9E,KAAK,CAAC,SAAS,CAAC,GAAGA,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAA8E,YAAA,gBAAAG,gBAAA,aAAuB,EAEhE;IAIT,CAAC,CAAC;IAEF,OAAO;MACL9E,KAAK;MACLC,WAAW;MACXE,WAAW;MACXC;IACF,CAAC;EACH;AACF,CAAC,CAAC"}