@evance/evance-ui 1.1.2 → 1.1.3

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 (111) hide show
  1. package/components.d.ts +100 -99
  2. package/dist/cjs/evance-ui.css +226 -172
  3. package/dist/cjs/fonts/Inter/Inter-Bold.woff2 +0 -0
  4. package/dist/cjs/fonts/Inter/Inter-Medium.woff2 +0 -0
  5. package/dist/cjs/fonts/Inter/Inter-Regular.woff2 +0 -0
  6. package/dist/cjs/fonts/Inter/Inter-SemiBold.woff2 +0 -0
  7. package/dist/cjs/fonts/JetBrainsMono/JetBrainsMono-Bold.woff2 +0 -0
  8. package/dist/cjs/fonts/JetBrainsMono/JetBrainsMono-Medium.woff2 +0 -0
  9. package/dist/cjs/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 +0 -0
  10. package/dist/cjs/fonts/JetBrainsMono/JetBrainsMono-SemiBold.woff2 +0 -0
  11. package/dist/cjs/index.cjs +1 -0
  12. package/dist/cjs/index.cjs.map +1 -1
  13. package/dist/cjs/src/components/EvList/EvList.cjs +3 -2
  14. package/dist/cjs/src/components/EvList/EvList.cjs.map +1 -1
  15. package/dist/cjs/src/components/EvList/EvList.vue.cjs +5 -2
  16. package/dist/cjs/src/components/EvList/EvList.vue.cjs.map +1 -1
  17. package/dist/cjs/src/components/EvList/EvListChildren.vue.cjs +35 -4
  18. package/dist/cjs/src/components/EvList/EvListChildren.vue.cjs.map +1 -1
  19. package/dist/cjs/src/components/EvListItem/EvListItem.cjs +8 -5
  20. package/dist/cjs/src/components/EvListItem/EvListItem.cjs.map +1 -1
  21. package/dist/cjs/src/components/EvListItem/EvListItem.vue.cjs +153 -92
  22. package/dist/cjs/src/components/EvListItem/EvListItem.vue.cjs.map +1 -1
  23. package/dist/cjs/src/components/EvTooltip/EvTooltip.vue.cjs.map +1 -1
  24. package/dist/cjs/src/composables/lists/list-items.cjs +2 -0
  25. package/dist/cjs/src/composables/lists/list-items.cjs.map +1 -1
  26. package/dist/cjs/src/composables/lists/nested.cjs +26 -8
  27. package/dist/cjs/src/composables/lists/nested.cjs.map +1 -1
  28. package/dist/cjs/src/icons/glyph/DotIcon.svg.cjs +1 -1
  29. package/dist/cjs/src/icons/glyph/DotIcon.svg.cjs.map +1 -1
  30. package/dist/esm/evance-ui.css +226 -172
  31. package/dist/esm/fonts/Inter/Inter-Bold.woff2 +0 -0
  32. package/dist/esm/fonts/Inter/Inter-Medium.woff2 +0 -0
  33. package/dist/esm/fonts/Inter/Inter-Regular.woff2 +0 -0
  34. package/dist/esm/fonts/Inter/Inter-SemiBold.woff2 +0 -0
  35. package/dist/esm/fonts/JetBrainsMono/JetBrainsMono-Bold.woff2 +0 -0
  36. package/dist/esm/fonts/JetBrainsMono/JetBrainsMono-Medium.woff2 +0 -0
  37. package/dist/esm/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 +0 -0
  38. package/dist/esm/fonts/JetBrainsMono/JetBrainsMono-SemiBold.woff2 +0 -0
  39. package/dist/esm/index.mjs +1 -0
  40. package/dist/esm/index.mjs.map +1 -1
  41. package/dist/esm/src/components/EvList/EvList.mjs +3 -2
  42. package/dist/esm/src/components/EvList/EvList.mjs.map +1 -1
  43. package/dist/esm/src/components/EvList/EvList.vue.mjs +5 -2
  44. package/dist/esm/src/components/EvList/EvList.vue.mjs.map +1 -1
  45. package/dist/esm/src/components/EvList/EvListChildren.vue.mjs +37 -6
  46. package/dist/esm/src/components/EvList/EvListChildren.vue.mjs.map +1 -1
  47. package/dist/esm/src/components/EvListItem/EvListItem.mjs +8 -5
  48. package/dist/esm/src/components/EvListItem/EvListItem.mjs.map +1 -1
  49. package/dist/esm/src/components/EvListItem/EvListItem.vue.mjs +157 -96
  50. package/dist/esm/src/components/EvListItem/EvListItem.vue.mjs.map +1 -1
  51. package/dist/esm/src/components/EvTooltip/EvTooltip.vue.mjs.map +1 -1
  52. package/dist/esm/src/composables/lists/list-items.mjs +2 -0
  53. package/dist/esm/src/composables/lists/list-items.mjs.map +1 -1
  54. package/dist/esm/src/composables/lists/nested.mjs +27 -9
  55. package/dist/esm/src/composables/lists/nested.mjs.map +1 -1
  56. package/dist/esm/src/icons/glyph/DotIcon.svg.mjs +1 -1
  57. package/dist/esm/src/icons/glyph/DotIcon.svg.mjs.map +1 -1
  58. package/dist/evance-ui.css +1 -1
  59. package/dist/evance-ui.js +2 -2
  60. package/dist/evance-ui.js.map +1 -1
  61. package/dist/evance-ui.mjs +4553 -4443
  62. package/dist/evance-ui.mjs.map +1 -1
  63. package/dist/fonts/Inter/Inter-Bold.woff2 +0 -0
  64. package/dist/fonts/Inter/Inter-Medium.woff2 +0 -0
  65. package/dist/fonts/Inter/Inter-Regular.woff2 +0 -0
  66. package/dist/fonts/Inter/Inter-SemiBold.woff2 +0 -0
  67. package/dist/fonts/JetBrainsMono/JetBrainsMono-Bold.woff2 +0 -0
  68. package/dist/fonts/JetBrainsMono/JetBrainsMono-Medium.woff2 +0 -0
  69. package/dist/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 +0 -0
  70. package/dist/fonts/JetBrainsMono/JetBrainsMono-SemiBold.woff2 +0 -0
  71. package/dist/types/components/EvDataTable/EvDataTable.vue.d.ts +1 -1
  72. package/dist/types/components/EvEmptyState/EvEmptyState.vue.d.ts +1 -1
  73. package/dist/types/components/EvList/EvList.d.ts +5 -0
  74. package/dist/types/components/EvList/EvList.d.ts.map +1 -1
  75. package/dist/types/components/EvList/EvListChildren.vue.d.ts +11 -1
  76. package/dist/types/components/EvList/EvListChildren.vue.d.ts.map +1 -1
  77. package/dist/types/components/EvListItem/EvListItem.d.ts +33 -16
  78. package/dist/types/components/EvListItem/EvListItem.d.ts.map +1 -1
  79. package/dist/types/components/EvListItem/EvListItem.vue.d.ts +20 -11
  80. package/dist/types/components/EvListItem/EvListItem.vue.d.ts.map +1 -1
  81. package/dist/types/components/EvTooltip/EvTooltip.vue.d.ts +4 -1
  82. package/dist/types/components/EvTooltip/EvTooltip.vue.d.ts.map +1 -1
  83. package/dist/types/composables/lists/list-items.d.ts +1 -0
  84. package/dist/types/composables/lists/list-items.d.ts.map +1 -1
  85. package/dist/types/composables/lists/nested.d.ts +6 -6
  86. package/dist/types/composables/lists/nested.d.ts.map +1 -1
  87. package/dist/types/index.d.ts.map +1 -1
  88. package/package.json +1 -1
  89. package/dist/cjs/EvListGroup.cjs +0 -8
  90. package/dist/cjs/EvListGroup.cjs.map +0 -1
  91. package/dist/cjs/src/components/EvListGroup/EvListGroup.cjs +0 -13
  92. package/dist/cjs/src/components/EvListGroup/EvListGroup.cjs.map +0 -1
  93. package/dist/cjs/src/components/EvListGroup/EvListGroup.vue.cjs +0 -96
  94. package/dist/cjs/src/components/EvListGroup/EvListGroup.vue.cjs.map +0 -1
  95. package/dist/cjs/src/components/EvListGroup/EvListGroup.vue2.cjs +0 -6
  96. package/dist/cjs/src/components/EvListGroup/EvListGroup.vue2.cjs.map +0 -1
  97. package/dist/esm/EvListGroup.mjs +0 -8
  98. package/dist/esm/EvListGroup.mjs.map +0 -1
  99. package/dist/esm/src/components/EvListGroup/EvListGroup.mjs +0 -13
  100. package/dist/esm/src/components/EvListGroup/EvListGroup.mjs.map +0 -1
  101. package/dist/esm/src/components/EvListGroup/EvListGroup.vue.mjs +0 -96
  102. package/dist/esm/src/components/EvListGroup/EvListGroup.vue.mjs.map +0 -1
  103. package/dist/esm/src/components/EvListGroup/EvListGroup.vue2.mjs +0 -6
  104. package/dist/esm/src/components/EvListGroup/EvListGroup.vue2.mjs.map +0 -1
  105. package/dist/types/EvListGroup.d.ts +0 -1
  106. package/dist/types/components/EvListGroup/EvListGroup.d.ts +0 -155
  107. package/dist/types/components/EvListGroup/EvListGroup.d.ts.map +0 -1
  108. package/dist/types/components/EvListGroup/EvListGroup.vue.d.ts +0 -118
  109. package/dist/types/components/EvListGroup/EvListGroup.vue.d.ts.map +0 -1
  110. package/dist/types/components/EvListGroup/index.d.ts +0 -3
  111. package/dist/types/components/EvListGroup/index.d.ts.map +0 -1
@@ -37,6 +37,7 @@ const makeListItemsProps = props.propsFactory(
37
37
  );
38
38
  let lastItemKey = 0;
39
39
  function transformItem(props2, item) {
40
+ const type = helpers.getPropertyValue(item, props2.itemType, "item");
40
41
  const title = helpers.getPropertyValue(item, props2.itemTitle, item);
41
42
  const value = helpers.getPropertyValue(item, props2.itemValue, title);
42
43
  const children = helpers.getPropertyValue(item, props2.itemChildren);
@@ -47,6 +48,7 @@ function transformItem(props2, item) {
47
48
  ...itemProps
48
49
  };
49
50
  return {
51
+ type,
50
52
  key: ++lastItemKey,
51
53
  title: String(transformedItemProps.title ?? ""),
52
54
  value: transformedItemProps.value,
@@ -1 +1 @@
1
- {"version":3,"file":"list-items.cjs","sources":["../../../../../src/composables/lists/list-items.ts"],"sourcesContent":["import {\n getPropertyValue,\n GetterPropertyKey,\n isArray,\n isDeepEqual,\n isObject,\n omit,\n propsFactory,\n} from \"@/util\";\nimport { computed, PropType } from \"vue\";\nimport { ListItemProps } from \"@/components/EvList\";\n\n/**\n * # List Item\n */\nexport interface ListItem<T = any> {\n key: number;\n title: string;\n value: any;\n props: {\n [key: string]: any;\n title: string;\n value: any;\n };\n children?: ListItem<T>[];\n raw: T;\n}\n\n/**\n * # List Item Key\n *\n * Defines where to look for item information.\n *\n * For example: each Item might have a `title` property.\n * So an Item key may represent either an array index, or an object property.\n *\n * - `boolean` - Ignored\n * - `string` - Property name, or use Object path notation.\n * - `array` of strings or numbers represent nested lookup - each array element represents a key in the hierarchy\n */\nexport type ListItemKey = GetterPropertyKey;\n\n/**\n * # List Items Props\n *\n * - `items` - the array of items to render within a list.\n * - `item-title` - the title property/key to use as the title in each list item.\n * - `item-value` - the value property/key to use for selection per list item.\n * - `item-props` - the props to assign to each list item.\n * - `return-object` - return the full item object on selection if `true`, or the `item-value` if `false`.\n */\nexport interface ListItemsProps {\n items: any[];\n itemTitle: ListItemKey;\n itemValue: ListItemKey;\n itemChildren: ListItemKey;\n itemProps: ListItemKey;\n returnObject: boolean;\n valueComparator: typeof isDeepEqual;\n}\n\n/**\n * # Make List Items Props\n *\n * Applies `ListItemProps` with the following defaults:\n *\n * - `items` - a blank array.\n * - `item-title` - 'title'\n * - `item-value` - 'value'\n * - `item-children` - 'children'\n * - `item-props` - 'props'\n * - `return-object` - `false`\n *\n * @see ListItemsProps\n */\nexport const makeListItemsProps = propsFactory(\n {\n items: {\n type: Array as PropType<ListItemsProps[\"items\"]>,\n default: () => [],\n },\n itemTitle: {\n type: [String, Array, Function] as PropType<ListItemKey>,\n default: \"title\",\n },\n itemValue: {\n type: [String, Array, Function] as PropType<ListItemKey>,\n default: \"value\",\n },\n itemChildren: {\n type: [Boolean, String, Array, Function] as PropType<ListItemKey>,\n default: \"children\",\n },\n itemProps: {\n type: [Boolean, String, Array, Function] as PropType<ListItemKey>,\n default: \"props\",\n },\n returnObject: Boolean,\n valueComparator: {\n type: Function as PropType<typeof isDeepEqual>,\n default: isDeepEqual,\n },\n },\n \"list-items\",\n);\n\n// Tracks unique item Ids\nlet lastItemKey = 0;\n\n/**\n * # Transform Item\n *\n * @param props\n * @param item\n */\nexport function transformItem(\n props: Omit<ListItemProps, \"items\">,\n item: any,\n): ListItem {\n const title = getPropertyValue(item, props.itemTitle, item);\n const value = getPropertyValue(item, props.itemValue, title);\n const children = getPropertyValue(item, props.itemChildren);\n const itemProps =\n props.itemProps === true\n ? isObject(item) && item != null && !isArray(item)\n ? \"children\" in item\n ? omit(item, [\"children\"])\n : item\n : undefined\n : getPropertyValue(item, props.itemProps);\n\n const transformedItemProps = {\n title,\n value,\n ...itemProps,\n };\n\n return {\n key: ++lastItemKey,\n title: String(transformedItemProps.title ?? \"\"),\n value: transformedItemProps.value,\n props: transformedItemProps,\n children: isArray(children)\n ? transformItems(props, children)\n : undefined,\n raw: item,\n };\n}\n\n/**\n * # Transform Items\n */\nexport function transformItems(\n props: Omit<ListItemProps, \"items\">,\n items: ListItemProps[\"items\"],\n) {\n const listItems: ListItem[] = [];\n for (const item of items) {\n listItems.push(transformItem(props, item));\n }\n return listItems;\n}\n\n/**\n * # Use Items\n *\n * @param props\n */\nexport function useItems(props: any) {\n const items = computed(() => {\n return transformItems(props, props.items);\n });\n\n const hasNullItem = computed(() => {\n return items.value.some((item) => item.value === null);\n });\n\n function transformIn(value: any[]): ListItem[] {\n if (!hasNullItem.value) {\n // When the model value is null, return an ListItem\n // based on null only if null is one of the items\n value = value.filter((v) => v !== null);\n }\n\n return value.map((v) => {\n if (props.returnObject && typeof v === \"string\") {\n // String model value means value is a custom input value\n // Don't look up existing items if the model value is a string\n return transformItem(props, v);\n }\n return (\n items.value.find((item) =>\n props.valueComparator(v, item.value),\n ) || transformItem(props, v)\n );\n });\n }\n\n function transformOut(value: ListItem[]): any[] {\n return props.returnObject\n ? value.map(({ raw }) => raw)\n : value.map(({ value }) => value);\n }\n\n return { items, transformIn, transformOut };\n}\n"],"names":["propsFactory","isDeepEqual","props","getPropertyValue","isObject","isArray","omit","computed","value"],"mappings":";;;;;;;AA2EO,MAAM,qBAAqBA,MAAA;AAAA,EAC9B;AAAA,IACI,OAAO;AAAA,MACH,MAAM;AAAA,MACN,SAAS,MAAM,CAAA;AAAA,IACnB;AAAA,IACA,WAAW;AAAA,MACP,MAAM,CAAC,QAAQ,OAAO,QAAQ;AAAA,MAC9B,SAAS;AAAA,IACb;AAAA,IACA,WAAW;AAAA,MACP,MAAM,CAAC,QAAQ,OAAO,QAAQ;AAAA,MAC9B,SAAS;AAAA,IACb;AAAA,IACA,cAAc;AAAA,MACV,MAAM,CAAC,SAAS,QAAQ,OAAO,QAAQ;AAAA,MACvC,SAAS;AAAA,IACb;AAAA,IACA,WAAW;AAAA,MACP,MAAM,CAAC,SAAS,QAAQ,OAAO,QAAQ;AAAA,MACvC,SAAS;AAAA,IACb;AAAA,IACA,cAAc;AAAA,IACd,iBAAiB;AAAA,MACb,MAAM;AAAA,MACN,SAASC,YAAAA;AAAAA,IAAA;AAAA,EAEjB;AAAA,EACA;AACJ;AAGA,IAAI,cAAc;AAQF,SAAA,cACZC,QACA,MACQ;AACR,QAAM,QAAQC,QAAAA,iBAAiB,MAAMD,OAAM,WAAW,IAAI;AAC1D,QAAM,QAAQC,QAAAA,iBAAiB,MAAMD,OAAM,WAAW,KAAK;AAC3D,QAAM,WAAWC,QAAA,iBAAiB,MAAMD,OAAM,YAAY;AACpD,QAAA,YACFA,OAAM,cAAc,OACdE,YAAA,SAAS,IAAI,KAAK,QAAQ,QAAQ,CAACC,YAAAA,QAAQ,IAAI,IAC3C,cAAc,OACVC,QAAA,KAAK,MAAM,CAAC,UAAU,CAAC,IACvB,OACJ,SACJH,QAAA,iBAAiB,MAAMD,OAAM,SAAS;AAEhD,QAAM,uBAAuB;AAAA,IACzB;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP;AAEO,SAAA;AAAA,IACH,KAAK,EAAE;AAAA,IACP,OAAO,OAAO,qBAAqB,SAAS,EAAE;AAAA,IAC9C,OAAO,qBAAqB;AAAA,IAC5B,OAAO;AAAA,IACP,UAAUG,YAAQ,QAAA,QAAQ,IACpB,eAAeH,QAAO,QAAQ,IAC9B;AAAA,IACN,KAAK;AAAA,EACT;AACJ;AAKgB,SAAA,eACZA,QACA,OACF;AACE,QAAM,YAAwB,CAAC;AAC/B,aAAW,QAAQ,OAAO;AACtB,cAAU,KAAK,cAAcA,QAAO,IAAI,CAAC;AAAA,EAAA;AAEtC,SAAA;AACX;AAOO,SAAS,SAASA,QAAY;AAC3B,QAAA,QAAQK,IAAAA,SAAS,MAAM;AAClB,WAAA,eAAeL,QAAOA,OAAM,KAAK;AAAA,EAAA,CAC3C;AAEK,QAAA,cAAcK,IAAAA,SAAS,MAAM;AAC/B,WAAO,MAAM,MAAM,KAAK,CAAC,SAAS,KAAK,UAAU,IAAI;AAAA,EAAA,CACxD;AAED,WAAS,YAAY,OAA0B;AACvC,QAAA,CAAC,YAAY,OAAO;AAGpB,cAAQ,MAAM,OAAO,CAAC,MAAM,MAAM,IAAI;AAAA,IAAA;AAGnC,WAAA,MAAM,IAAI,CAAC,MAAM;AACpB,UAAIL,OAAM,gBAAgB,OAAO,MAAM,UAAU;AAGtC,eAAA,cAAcA,QAAO,CAAC;AAAA,MAAA;AAEjC,aACI,MAAM,MAAM;AAAA,QAAK,CAAC,SACdA,OAAM,gBAAgB,GAAG,KAAK,KAAK;AAAA,MAAA,KAClC,cAAcA,QAAO,CAAC;AAAA,IAAA,CAElC;AAAA,EAAA;AAGL,WAAS,aAAa,OAA0B;AAC5C,WAAOA,OAAM,eACP,MAAM,IAAI,CAAC,EAAE,IAAI,MAAM,GAAG,IAC1B,MAAM,IAAI,CAAC,EAAE,OAAAM,aAAYA,MAAK;AAAA,EAAA;AAGjC,SAAA,EAAE,OAAO,aAAa,aAAa;AAC9C;;;;;"}
1
+ {"version":3,"file":"list-items.cjs","sources":["../../../../../src/composables/lists/list-items.ts"],"sourcesContent":["import {\n getPropertyValue,\n GetterPropertyKey,\n isArray,\n isDeepEqual,\n isObject,\n omit,\n propsFactory,\n} from \"@/util\";\nimport { computed, PropType } from \"vue\";\nimport { ListItemProps } from \"@/components/EvList\";\n\n/**\n * # List Item\n */\nexport interface ListItem<T = any> {\n type?: string;\n key: number;\n title: string;\n value: any;\n props: {\n [key: string]: any;\n title: string;\n value: any;\n };\n children?: ListItem<T>[];\n raw: T;\n}\n\n/**\n * # List Item Key\n *\n * Defines where to look for item information.\n *\n * For example: each Item might have a `title` property.\n * So an Item key may represent either an array index, or an object property.\n *\n * - `boolean` - Ignored\n * - `string` - Property name, or use Object path notation.\n * - `array` of strings or numbers represent nested lookup - each array element represents a key in the hierarchy\n */\nexport type ListItemKey = GetterPropertyKey;\n\n/**\n * # List Items Props\n *\n * - `items` - the array of items to render within a list.\n * - `item-title` - the title property/key to use as the title in each list item.\n * - `item-value` - the value property/key to use for selection per list item.\n * - `item-props` - the props to assign to each list item.\n * - `return-object` - return the full item object on selection if `true`, or the `item-value` if `false`.\n */\nexport interface ListItemsProps {\n items: any[];\n itemTitle: ListItemKey;\n itemValue: ListItemKey;\n itemChildren: ListItemKey;\n itemProps: ListItemKey;\n returnObject: boolean;\n valueComparator: typeof isDeepEqual;\n}\n\n/**\n * # Make List Items Props\n *\n * Applies `ListItemProps` with the following defaults:\n *\n * - `items` - a blank array.\n * - `item-title` - 'title'\n * - `item-value` - 'value'\n * - `item-children` - 'children'\n * - `item-props` - 'props'\n * - `return-object` - `false`\n *\n * @see ListItemsProps\n */\nexport const makeListItemsProps = propsFactory(\n {\n items: {\n type: Array as PropType<ListItemsProps[\"items\"]>,\n default: () => [],\n },\n itemTitle: {\n type: [String, Array, Function] as PropType<ListItemKey>,\n default: \"title\",\n },\n itemValue: {\n type: [String, Array, Function] as PropType<ListItemKey>,\n default: \"value\",\n },\n itemChildren: {\n type: [Boolean, String, Array, Function] as PropType<ListItemKey>,\n default: \"children\",\n },\n itemProps: {\n type: [Boolean, String, Array, Function] as PropType<ListItemKey>,\n default: \"props\",\n },\n returnObject: Boolean,\n valueComparator: {\n type: Function as PropType<typeof isDeepEqual>,\n default: isDeepEqual,\n },\n },\n \"list-items\",\n);\n\n// Tracks unique item Ids\nlet lastItemKey = 0;\n\n/**\n * # Transform Item\n *\n * @param props\n * @param item\n */\nexport function transformItem(\n props: Omit<ListItemProps, \"items\">,\n item: any,\n): ListItem {\n const type = getPropertyValue(item, props.itemType, \"item\");\n const title = getPropertyValue(item, props.itemTitle, item);\n const value = getPropertyValue(item, props.itemValue, title);\n const children = getPropertyValue(item, props.itemChildren);\n const itemProps =\n props.itemProps === true\n ? isObject(item) && item != null && !isArray(item)\n ? \"children\" in item\n ? omit(item, [\"children\"])\n : item\n : undefined\n : getPropertyValue(item, props.itemProps);\n\n const transformedItemProps = {\n title,\n value,\n ...itemProps,\n };\n\n return {\n type,\n key: ++lastItemKey,\n title: String(transformedItemProps.title ?? \"\"),\n value: transformedItemProps.value,\n props: transformedItemProps,\n children: isArray(children)\n ? transformItems(props, children)\n : undefined,\n raw: item,\n };\n}\n\n/**\n * # Transform Items\n */\nexport function transformItems(\n props: Omit<ListItemProps, \"items\">,\n items: ListItemProps[\"items\"],\n) {\n const listItems: ListItem[] = [];\n for (const item of items) {\n listItems.push(transformItem(props, item));\n }\n return listItems;\n}\n\n/**\n * # Use Items\n *\n * @param props\n */\nexport function useItems(props: any) {\n const items = computed(() => {\n return transformItems(props, props.items);\n });\n\n const hasNullItem = computed(() => {\n return items.value.some((item) => item.value === null);\n });\n\n function transformIn(value: any[]): ListItem[] {\n if (!hasNullItem.value) {\n // When the model value is null, return an ListItem\n // based on null only if null is one of the items\n value = value.filter((v) => v !== null);\n }\n\n return value.map((v) => {\n if (props.returnObject && typeof v === \"string\") {\n // String model value means value is a custom input value\n // Don't look up existing items if the model value is a string\n return transformItem(props, v);\n }\n return (\n items.value.find((item) =>\n props.valueComparator(v, item.value),\n ) || transformItem(props, v)\n );\n });\n }\n\n function transformOut(value: ListItem[]): any[] {\n return props.returnObject\n ? value.map(({ raw }) => raw)\n : value.map(({ value }) => value);\n }\n\n return { items, transformIn, transformOut };\n}\n"],"names":["propsFactory","isDeepEqual","props","getPropertyValue","isObject","isArray","omit","computed","value"],"mappings":"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"}
@@ -21,7 +21,8 @@ const emptyNestedList = {
21
21
  register: () => null,
22
22
  unregister: () => null,
23
23
  open: () => null,
24
- openOnSelect: () => null
24
+ openOnSelect: () => null,
25
+ isNested: vue.ref(false)
25
26
  }
26
27
  };
27
28
  const makeNestedProps = props.propsFactory(
@@ -62,7 +63,9 @@ const useNestedList = (props2) => {
62
63
  "opened",
63
64
  props2.opened,
64
65
  (values) => {
65
- return new Set(values);
66
+ return new Set(
67
+ Array.isArray(values) ? values.map((value) => vue.toRaw(value)) : values
68
+ );
66
69
  },
67
70
  (values) => {
68
71
  return [...values.values()];
@@ -161,7 +164,8 @@ const useNestedList = (props2) => {
161
164
  event
162
165
  });
163
166
  newOpened && (opened.value = newOpened);
164
- }
167
+ },
168
+ isNested: vue.computed(() => parents.value.size > 0)
165
169
  }
166
170
  };
167
171
  vue.provide(EvNestedSymbol, nested);
@@ -171,11 +175,23 @@ const useNestedListItem = (id, isGroup) => {
171
175
  const parent = vue.inject(EvNestedSymbol, emptyNestedList);
172
176
  const idSymbol = Symbol(helpers.getNextId());
173
177
  const idComputed = vue.computed(() => {
174
- return id.value !== void 0 ? id.value : idSymbol;
178
+ const idValue = vue.toRaw(vue.toValue(id));
179
+ return idValue !== void 0 ? idValue : idSymbol;
175
180
  });
176
181
  const item = {
177
182
  ...parent,
178
183
  id: idComputed,
184
+ open: (open, e) => {
185
+ parent.root.open(idComputed.value, open, e);
186
+ },
187
+ openOnSelect: (open, e) => {
188
+ parent.root.openOnSelect(idComputed.value, open, e);
189
+ },
190
+ isOpen: vue.computed(() => {
191
+ console.log(idComputed.value);
192
+ console.log(parent.root.opened.value);
193
+ return parent.root.opened.value.has(idComputed.value);
194
+ }),
179
195
  parent: vue.computed(() => parent.root.parents.value.get(idComputed.value)),
180
196
  select: (selected, e) => {
181
197
  return parent.root.select(idComputed.value, selected, e);
@@ -188,13 +204,15 @@ const useNestedListItem = (id, isGroup) => {
188
204
  }),
189
205
  isLeaf: vue.computed(() => {
190
206
  return !parent.root.children.value.get(idComputed.value);
191
- }),
192
- isGroupActivator: parent.isGroupActivator
207
+ })
193
208
  };
194
- !parent.isGroupActivator && parent.root.register(idComputed.value, parent.id.value, isGroup);
209
+ parent.root.register(idComputed.value, parent.id.value, isGroup);
195
210
  vue.onBeforeUnmount(() => {
196
- !parent.isGroupActivator && parent.root.unregister(idComputed.value);
211
+ parent.root.unregister(idComputed.value);
197
212
  });
213
+ if (isGroup) {
214
+ vue.provide(EvNestedSymbol, item);
215
+ }
198
216
  return item;
199
217
  };
200
218
  exports.EvNestedSymbol = EvNestedSymbol;
@@ -1 +1 @@
1
- {"version":3,"file":"nested.cjs","sources":["../../../../../src/composables/lists/nested.ts"],"sourcesContent":["import { SequencedPosition } from \"./sequenced\";\nimport {\n makeSelectedProps,\n Selected,\n SelectStrategyProps,\n useSelectedValues,\n useSelectStrategy,\n} from \"./select-strategies\";\nimport {\n computed,\n inject,\n InjectionKey,\n onBeforeMount,\n onBeforeUnmount,\n provide,\n Ref,\n ref,\n shallowRef,\n toRaw,\n} from \"vue\";\nimport { getCurrentComponent, getNextId, propsFactory } from \"@/util\";\nimport { useModelProxy } from \"../modelProxy\";\nimport {\n makeOpenStrategyProps,\n OpenStrategyProps,\n useOpenStrategy,\n} from \"@/composables/lists/open-strategies\";\n\n/**\n * # Nested Position\n *\n * Typically applies to requests to move a node within the nested data set.\n *\n * 'inside' - Position a node as a child of another node\n */\nexport type NestedPosition = SequencedPosition & \"inside\";\n\nexport interface NestedProps extends SelectStrategyProps, OpenStrategyProps {}\n\ntype NestedProvide = {\n id: Ref<unknown>;\n isGroupActivator?: boolean;\n root: {\n children: Ref<Map<unknown, unknown[]>>;\n parents: Ref<Map<unknown, unknown>>;\n opened: Ref<Set<unknown>>;\n select: (id: unknown, value: boolean, event?: Event) => void;\n selected: Ref<Map<unknown, Selected>>;\n selectedValues: Ref<unknown[]>;\n register: (id: unknown, parentId: unknown, isGroup?: boolean) => void;\n unregister: (id: unknown) => void;\n open: (id: unknown, value: boolean, event?: Event) => void;\n openOnSelect: (id: unknown, value: boolean, event?: Event) => void;\n };\n};\n\nexport const EvNestedSymbol: InjectionKey<NestedProvide> =\n Symbol.for(\"ev:nested\");\n\n/**\n * # Empty Nested List\n */\nexport const emptyNestedList: NestedProvide = {\n id: shallowRef(),\n root: {\n children: ref(new Map()),\n parents: ref(new Map()),\n opened: ref(new Set()),\n select: () => null,\n selected: ref(new Map()),\n selectedValues: ref([]),\n register: () => null,\n unregister: () => null,\n open: () => null,\n openOnSelect: () => null,\n },\n};\n\n/**\n * # Make Nested Props\n */\nexport const makeNestedProps = propsFactory(\n {\n ...makeSelectedProps(),\n ...makeOpenStrategyProps(),\n },\n \"nested\",\n);\n\n/**\n * # Use Nested List\n * @param props\n */\nexport const useNestedList = (props: NestedProps) => {\n let isUnmounted = false;\n const component = getCurrentComponent(\"nested\");\n const children = ref(new Map<unknown, unknown[]>());\n const parents = ref(new Map<unknown, unknown>());\n const selectStrategy = useSelectStrategy(props);\n const selected: Ref<Map<unknown, Selected>> = useModelProxy(\n props,\n \"selected\",\n props.selected,\n (values) => {\n return selectStrategy.value.in(\n values,\n children.value,\n parents.value,\n );\n },\n (values) => {\n return selectStrategy.value.out(\n values,\n children.value,\n parents.value,\n );\n },\n );\n const openStrategy = useOpenStrategy(props);\n const opened = useModelProxy(\n props,\n \"opened\",\n props.opened,\n (values) => {\n return new Set(values);\n },\n (values) => {\n return [...values.values()];\n },\n );\n\n onBeforeMount(() => {\n isUnmounted = true;\n });\n\n function getPath(id: unknown) {\n const path: unknown[] = [];\n let parent: unknown = id;\n while (parent != null) {\n path.unshift(parent);\n parent = parents.value.get(parent);\n }\n return path;\n }\n\n const nested: NestedProvide = {\n id: shallowRef(),\n root: {\n children: children,\n parents: parents,\n selected: selected,\n selectedValues: useSelectedValues(selected),\n select: (id, value, event) => {\n component.emit(\"click:select\", {\n id,\n value,\n path: getPath(id),\n event,\n });\n const newSelected = selectStrategy.value.select({\n id,\n value,\n selected: new Map(selected.value),\n children: children.value,\n parents: parents.value,\n event,\n });\n newSelected && (selected.value = newSelected);\n\n nested.root.openOnSelect(id, value, event);\n },\n register: (id, parentId, isGroup) => {\n parentId && id !== parentId && parents.value.set(id, parentId);\n if (isGroup) {\n children.value.set(id, []);\n }\n if (parentId != null) {\n children.value.set(parentId, [\n ...(children.value.get(parentId) || []),\n id,\n ]);\n }\n },\n unregister: (id) => {\n if (isUnmounted) {\n return;\n }\n children.value.delete(id);\n const parent = parents.value.get(id);\n if (parent) {\n const list = children.value.get(parent) ?? [];\n children.value.set(\n parent,\n list.filter((child) => child !== id),\n );\n }\n parents.value.delete(id);\n },\n opened: opened,\n open: (id, value, event) => {\n component.emit(\"click:open\", {\n id,\n value,\n path: getPath(id),\n event,\n });\n const newOpened = openStrategy.value.open({\n id,\n value,\n opened: new Set(opened.value),\n children: children.value,\n parents: parents.value,\n event,\n });\n newOpened && (opened.value = newOpened);\n },\n openOnSelect: (id, value, event) => {\n const newOpened = openStrategy.value.select({\n id,\n value,\n selected: new Map(selected.value),\n opened: new Set(opened.value),\n children: children.value,\n parents: parents.value,\n event,\n });\n newOpened && (opened.value = newOpened);\n },\n },\n };\n\n provide(EvNestedSymbol, nested);\n return nested.root;\n};\n\n/**\n * # Use Nested List Item\n * @param id\n * @param isGroup\n */\nexport const useNestedListItem = (id: Ref<unknown>, isGroup: boolean) => {\n const parent = inject(EvNestedSymbol, emptyNestedList);\n const idSymbol = Symbol(getNextId());\n const idComputed = computed(() => {\n return id.value !== undefined ? id.value : idSymbol;\n });\n const item = {\n ...parent,\n id: idComputed,\n parent: computed(() => parent.root.parents.value.get(idComputed.value)),\n select: (selected: boolean, e?: Event) => {\n return parent.root.select(idComputed.value, selected, e);\n },\n isSelected: computed(() => {\n return (\n parent.root.selected.value.get(toRaw(idComputed.value)) === \"on\"\n );\n }),\n isIndeterminate: computed(() => {\n return (\n parent.root.selected.value.get(idComputed.value) ===\n \"indeterminate\"\n );\n }),\n isLeaf: computed(() => {\n return !parent.root.children.value.get(idComputed.value);\n }),\n isGroupActivator: parent.isGroupActivator,\n };\n !parent.isGroupActivator &&\n parent.root.register(idComputed.value, parent.id.value, isGroup);\n onBeforeUnmount(() => {\n !parent.isGroupActivator && parent.root.unregister(idComputed.value);\n });\n if (isGroup) {\n provide(EvNestedSymbol, item);\n }\n return item;\n};\n\n/**\n *\n */\nexport const useNestedGroupActivator = () => {\n const parent = inject(EvNestedSymbol, emptyNestedList);\n provide(EvNestedSymbol, { ...parent, isGroupActivator: true });\n};\n"],"names":["shallowRef","ref","propsFactory","makeSelectedProps","makeOpenStrategyProps","props","getCurrentComponent","useSelectStrategy","useModelProxy","useOpenStrategy","onBeforeMount","useSelectedValues","provide","inject","getNextId","computed","toRaw","onBeforeUnmount"],"mappings":";;;;;;;;;;AAwDa,MAAA,iBACT,OAAO,IAAI,WAAW;AAKnB,MAAM,kBAAiC;AAAA,EAC1C,IAAIA,IAAAA,WAAW;AAAA,EACf,MAAM;AAAA,IACF,UAAUC,IAAAA,IAAQ,oBAAA,KAAK;AAAA,IACvB,SAASA,IAAAA,IAAQ,oBAAA,KAAK;AAAA,IACtB,QAAQA,IAAAA,IAAQ,oBAAA,KAAK;AAAA,IACrB,QAAQ,MAAM;AAAA,IACd,UAAUA,IAAAA,IAAQ,oBAAA,KAAK;AAAA,IACvB,gBAAgBA,IAAI,IAAA,EAAE;AAAA,IACtB,UAAU,MAAM;AAAA,IAChB,YAAY,MAAM;AAAA,IAClB,MAAM,MAAM;AAAA,IACZ,cAAc,MAAM;AAAA,EAAA;AAE5B;AAKO,MAAM,kBAAkBC,MAAA;AAAA,EAC3B;AAAA,IACI,GAAGC,mCAAkB;AAAA,IACrB,GAAGC,eAAsB,sBAAA;AAAA,EAC7B;AAAA,EACA;AACJ;AAMa,MAAA,gBAAgB,CAACC,WAAuB;AACjD,MAAI,cAAc;AACZ,QAAA,YAAYC,+BAAoB,QAAQ;AAC9C,QAAM,WAAWL,IAAAA,IAAQ,oBAAA,KAAyB;AAClD,QAAM,UAAUA,IAAAA,IAAQ,oBAAA,KAAuB;AACzC,QAAA,iBAAiBM,mCAAkBF,MAAK;AAC9C,QAAM,WAAwCG,WAAA;AAAA,IAC1CH;AAAA,IACA;AAAA,IACAA,OAAM;AAAA,IACN,CAAC,WAAW;AACR,aAAO,eAAe,MAAM;AAAA,QACxB;AAAA,QACA,SAAS;AAAA,QACT,QAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,IACA,CAAC,WAAW;AACR,aAAO,eAAe,MAAM;AAAA,QACxB;AAAA,QACA,SAAS;AAAA,QACT,QAAQ;AAAA,MACZ;AAAA,IAAA;AAAA,EAER;AACM,QAAA,eAAeI,+BAAgBJ,MAAK;AAC1C,QAAM,SAASG,WAAA;AAAA,IACXH;AAAA,IACA;AAAA,IACAA,OAAM;AAAA,IACN,CAAC,WAAW;AACD,aAAA,IAAI,IAAI,MAAM;AAAA,IACzB;AAAA,IACA,CAAC,WAAW;AACR,aAAO,CAAC,GAAG,OAAO,QAAQ;AAAA,IAAA;AAAA,EAElC;AAEAK,MAAAA,cAAc,MAAM;AACF,kBAAA;AAAA,EAAA,CACjB;AAED,WAAS,QAAQ,IAAa;AAC1B,UAAM,OAAkB,CAAC;AACzB,QAAI,SAAkB;AACtB,WAAO,UAAU,MAAM;AACnB,WAAK,QAAQ,MAAM;AACV,eAAA,QAAQ,MAAM,IAAI,MAAM;AAAA,IAAA;AAE9B,WAAA;AAAA,EAAA;AAGX,QAAM,SAAwB;AAAA,IAC1B,IAAIV,IAAAA,WAAW;AAAA,IACf,MAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgBW,mCAAkB,QAAQ;AAAA,MAC1C,QAAQ,CAAC,IAAI,OAAO,UAAU;AAC1B,kBAAU,KAAK,gBAAgB;AAAA,UAC3B;AAAA,UACA;AAAA,UACA,MAAM,QAAQ,EAAE;AAAA,UAChB;AAAA,QAAA,CACH;AACK,cAAA,cAAc,eAAe,MAAM,OAAO;AAAA,UAC5C;AAAA,UACA;AAAA,UACA,UAAU,IAAI,IAAI,SAAS,KAAK;AAAA,UAChC,UAAU,SAAS;AAAA,UACnB,SAAS,QAAQ;AAAA,UACjB;AAAA,QAAA,CACH;AACD,wBAAgB,SAAS,QAAQ;AAEjC,eAAO,KAAK,aAAa,IAAI,OAAO,KAAK;AAAA,MAC7C;AAAA,MACA,UAAU,CAAC,IAAI,UAAU,YAAY;AACjC,oBAAY,OAAO,YAAY,QAAQ,MAAM,IAAI,IAAI,QAAQ;AAC7D,YAAI,SAAS;AACT,mBAAS,MAAM,IAAI,IAAI,CAAA,CAAE;AAAA,QAAA;AAE7B,YAAI,YAAY,MAAM;AACT,mBAAA,MAAM,IAAI,UAAU;AAAA,YACzB,GAAI,SAAS,MAAM,IAAI,QAAQ,KAAK,CAAC;AAAA,YACrC;AAAA,UAAA,CACH;AAAA,QAAA;AAAA,MAET;AAAA,MACA,YAAY,CAAC,OAAO;AAChB,YAAI,aAAa;AACb;AAAA,QAAA;AAEK,iBAAA,MAAM,OAAO,EAAE;AACxB,cAAM,SAAS,QAAQ,MAAM,IAAI,EAAE;AACnC,YAAI,QAAQ;AACR,gBAAM,OAAO,SAAS,MAAM,IAAI,MAAM,KAAK,CAAC;AAC5C,mBAAS,MAAM;AAAA,YACX;AAAA,YACA,KAAK,OAAO,CAAC,UAAU,UAAU,EAAE;AAAA,UACvC;AAAA,QAAA;AAEI,gBAAA,MAAM,OAAO,EAAE;AAAA,MAC3B;AAAA,MACA;AAAA,MACA,MAAM,CAAC,IAAI,OAAO,UAAU;AACxB,kBAAU,KAAK,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,UACA,MAAM,QAAQ,EAAE;AAAA,UAChB;AAAA,QAAA,CACH;AACK,cAAA,YAAY,aAAa,MAAM,KAAK;AAAA,UACtC;AAAA,UACA;AAAA,UACA,QAAQ,IAAI,IAAI,OAAO,KAAK;AAAA,UAC5B,UAAU,SAAS;AAAA,UACnB,SAAS,QAAQ;AAAA,UACjB;AAAA,QAAA,CACH;AACD,sBAAc,OAAO,QAAQ;AAAA,MACjC;AAAA,MACA,cAAc,CAAC,IAAI,OAAO,UAAU;AAC1B,cAAA,YAAY,aAAa,MAAM,OAAO;AAAA,UACxC;AAAA,UACA;AAAA,UACA,UAAU,IAAI,IAAI,SAAS,KAAK;AAAA,UAChC,QAAQ,IAAI,IAAI,OAAO,KAAK;AAAA,UAC5B,UAAU,SAAS;AAAA,UACnB,SAAS,QAAQ;AAAA,UACjB;AAAA,QAAA,CACH;AACD,sBAAc,OAAO,QAAQ;AAAA,MAAA;AAAA,IACjC;AAAA,EAER;AAEAC,MAAA,QAAQ,gBAAgB,MAAM;AAC9B,SAAO,OAAO;AAClB;AAOa,MAAA,oBAAoB,CAAC,IAAkB,YAAqB;AAC/D,QAAA,SAASC,IAAAA,OAAO,gBAAgB,eAAe;AAC/C,QAAA,WAAW,OAAOC,QAAAA,WAAW;AAC7B,QAAA,aAAaC,IAAAA,SAAS,MAAM;AAC9B,WAAO,GAAG,UAAU,SAAY,GAAG,QAAQ;AAAA,EAAA,CAC9C;AACD,QAAM,OAAO;AAAA,IACT,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,QAAQA,IAAAA,SAAS,MAAM,OAAO,KAAK,QAAQ,MAAM,IAAI,WAAW,KAAK,CAAC;AAAA,IACtE,QAAQ,CAAC,UAAmB,MAAc;AACtC,aAAO,OAAO,KAAK,OAAO,WAAW,OAAO,UAAU,CAAC;AAAA,IAC3D;AAAA,IACA,YAAYA,aAAS,MAAM;AAEnB,aAAA,OAAO,KAAK,SAAS,MAAM,IAAIC,IAAAA,MAAM,WAAW,KAAK,CAAC,MAAM;AAAA,IAAA,CAEnE;AAAA,IACD,iBAAiBD,aAAS,MAAM;AAC5B,aACI,OAAO,KAAK,SAAS,MAAM,IAAI,WAAW,KAAK,MAC/C;AAAA,IAAA,CAEP;AAAA,IACD,QAAQA,aAAS,MAAM;AACnB,aAAO,CAAC,OAAO,KAAK,SAAS,MAAM,IAAI,WAAW,KAAK;AAAA,IAAA,CAC1D;AAAA,IACD,kBAAkB,OAAO;AAAA,EAC7B;AACC,GAAA,OAAO,oBACJ,OAAO,KAAK,SAAS,WAAW,OAAO,OAAO,GAAG,OAAO,OAAO;AACnEE,MAAAA,gBAAgB,MAAM;AAClB,KAAC,OAAO,oBAAoB,OAAO,KAAK,WAAW,WAAW,KAAK;AAAA,EAAA,CACtE;AAIM,SAAA;AACX;;;;;;"}
1
+ {"version":3,"file":"nested.cjs","sources":["../../../../../src/composables/lists/nested.ts"],"sourcesContent":["import { SequencedPosition } from \"./sequenced\";\nimport {\n makeSelectedProps,\n Selected,\n SelectStrategyProps,\n useSelectedValues,\n useSelectStrategy,\n} from \"./select-strategies\";\nimport {\n computed,\n inject,\n InjectionKey,\n onBeforeMount,\n onBeforeUnmount,\n provide,\n Ref,\n ref,\n shallowRef,\n toRaw,\n toValue,\n} from \"vue\";\nimport { getCurrentComponent, getNextId, propsFactory } from \"@/util\";\nimport { useModelProxy } from \"../modelProxy\";\nimport {\n makeOpenStrategyProps,\n OpenStrategyProps,\n useOpenStrategy,\n} from \"@/composables/lists/open-strategies\";\n\n/**\n * # Nested Position\n *\n * Typically applies to requests to move a node within the nested data set.\n *\n * 'inside' - Position a node as a child of another node\n */\nexport type NestedPosition = SequencedPosition & \"inside\";\n\nexport interface NestedProps extends SelectStrategyProps, OpenStrategyProps {}\n\ntype NestedProvide = {\n id: Ref<unknown>;\n root: {\n children: Ref<Map<unknown, unknown[]>>;\n parents: Ref<Map<unknown, unknown>>;\n opened: Ref<Set<unknown>>;\n select: (id: unknown, value: boolean, event?: Event) => void;\n selected: Ref<Map<unknown, Selected>>;\n selectedValues: Ref<unknown[]>;\n register: (id: unknown, parentId: unknown, isGroup?: boolean) => void;\n unregister: (id: unknown) => void;\n open: (id: unknown, value: boolean, event?: Event) => void;\n openOnSelect: (id: unknown, value: boolean, event?: Event) => void;\n isNested: Ref<boolean>;\n };\n};\n\nexport const EvNestedSymbol: InjectionKey<NestedProvide> =\n Symbol.for(\"ev:nested\");\n\n/**\n * # Empty Nested List\n */\nexport const emptyNestedList: NestedProvide = {\n id: shallowRef(),\n root: {\n children: ref(new Map()),\n parents: ref(new Map()),\n opened: ref(new Set()),\n select: () => null,\n selected: ref(new Map()),\n selectedValues: ref([]),\n register: () => null,\n unregister: () => null,\n open: () => null,\n openOnSelect: () => null,\n isNested: ref(false),\n },\n};\n\n/**\n * # Make Nested Props\n */\nexport const makeNestedProps = propsFactory(\n {\n ...makeSelectedProps(),\n ...makeOpenStrategyProps(),\n },\n \"nested\",\n);\n\n/**\n * # Use Nested List\n * @param props\n */\nexport const useNestedList = (props: NestedProps) => {\n let isUnmounted = false;\n const component = getCurrentComponent(\"nested\");\n const children = ref(new Map<unknown, unknown[]>());\n const parents = ref(new Map<unknown, unknown>());\n const selectStrategy = useSelectStrategy(props);\n const selected: Ref<Map<unknown, Selected>> = useModelProxy(\n props,\n \"selected\",\n props.selected,\n (values) => {\n return selectStrategy.value.in(\n values,\n children.value,\n parents.value,\n );\n },\n (values) => {\n return selectStrategy.value.out(\n values,\n children.value,\n parents.value,\n );\n },\n );\n const openStrategy = useOpenStrategy(props);\n const opened = useModelProxy(\n props,\n \"opened\",\n props.opened,\n (values) => {\n return new Set(\n Array.isArray(values)\n ? values.map((value) => toRaw(value))\n : values,\n );\n },\n (values) => {\n return [...values.values()];\n },\n );\n\n onBeforeMount(() => {\n isUnmounted = true;\n });\n\n function getPath(id: unknown) {\n const path: unknown[] = [];\n let parent: unknown = id;\n while (parent != null) {\n path.unshift(parent);\n parent = parents.value.get(parent);\n }\n return path;\n }\n\n const nested: NestedProvide = {\n id: shallowRef(),\n root: {\n children: children,\n parents: parents,\n selected: selected,\n selectedValues: useSelectedValues(selected),\n select: (id, value, event) => {\n component.emit(\"click:select\", {\n id,\n value,\n path: getPath(id),\n event,\n });\n const newSelected = selectStrategy.value.select({\n id,\n value,\n selected: new Map(selected.value),\n children: children.value,\n parents: parents.value,\n event,\n });\n newSelected && (selected.value = newSelected);\n\n nested.root.openOnSelect(id, value, event);\n },\n register: (id, parentId, isGroup) => {\n parentId && id !== parentId && parents.value.set(id, parentId);\n if (isGroup) {\n children.value.set(id, []);\n }\n if (parentId != null) {\n children.value.set(parentId, [\n ...(children.value.get(parentId) || []),\n id,\n ]);\n }\n },\n unregister: (id) => {\n if (isUnmounted) {\n return;\n }\n children.value.delete(id);\n const parent = parents.value.get(id);\n if (parent) {\n const list = children.value.get(parent) ?? [];\n children.value.set(\n parent,\n list.filter((child) => child !== id),\n );\n }\n parents.value.delete(id);\n },\n opened: opened,\n open: (id, value, event) => {\n component.emit(\"click:open\", {\n id,\n value,\n path: getPath(id),\n event,\n });\n const newOpened = openStrategy.value.open({\n id,\n value,\n opened: new Set(opened.value),\n children: children.value,\n parents: parents.value,\n event,\n });\n newOpened && (opened.value = newOpened);\n },\n openOnSelect: (id, value, event) => {\n const newOpened = openStrategy.value.select({\n id,\n value,\n selected: new Map(selected.value),\n opened: new Set(opened.value),\n children: children.value,\n parents: parents.value,\n event,\n });\n newOpened && (opened.value = newOpened);\n },\n isNested: computed(() => parents.value.size > 0),\n },\n };\n\n provide(EvNestedSymbol, nested);\n return nested.root;\n};\n\n/**\n * # Use Nested List Item\n * @param id\n * @param isGroup\n */\nexport const useNestedListItem = (id: Ref<unknown>, isGroup: boolean) => {\n const parent = inject(EvNestedSymbol, emptyNestedList);\n const idSymbol = Symbol(getNextId());\n const idComputed = computed(() => {\n const idValue = toRaw(toValue(id));\n return idValue !== undefined ? idValue : idSymbol;\n });\n const item = {\n ...parent,\n id: idComputed,\n open: (open: boolean, e: Event) => {\n parent.root.open(idComputed.value, open, e);\n },\n openOnSelect: (open: boolean, e?: Event) => {\n parent.root.openOnSelect(idComputed.value, open, e);\n },\n isOpen: computed(() => {\n console.log(idComputed.value);\n console.log(parent.root.opened.value);\n return parent.root.opened.value.has(idComputed.value);\n }),\n parent: computed(() => parent.root.parents.value.get(idComputed.value)),\n select: (selected: boolean, e?: Event) => {\n return parent.root.select(idComputed.value, selected, e);\n },\n isSelected: computed(() => {\n return (\n parent.root.selected.value.get(toRaw(idComputed.value)) === \"on\"\n );\n }),\n isIndeterminate: computed(() => {\n return (\n parent.root.selected.value.get(idComputed.value) ===\n \"indeterminate\"\n );\n }),\n isLeaf: computed(() => {\n return !parent.root.children.value.get(idComputed.value);\n }),\n };\n parent.root.register(idComputed.value, parent.id.value, isGroup);\n onBeforeUnmount(() => {\n parent.root.unregister(idComputed.value);\n });\n if (isGroup) {\n provide(EvNestedSymbol, item);\n }\n return item;\n};\n\n"],"names":["shallowRef","ref","propsFactory","makeSelectedProps","makeOpenStrategyProps","props","getCurrentComponent","useSelectStrategy","useModelProxy","useOpenStrategy","toRaw","onBeforeMount","useSelectedValues","computed","provide","inject","getNextId","toValue","onBeforeUnmount"],"mappings":";;;;;;;;;;AAyDa,MAAA,iBACT,OAAO,IAAI,WAAW;AAKnB,MAAM,kBAAiC;AAAA,EAC1C,IAAIA,IAAAA,WAAW;AAAA,EACf,MAAM;AAAA,IACF,UAAUC,IAAAA,IAAQ,oBAAA,KAAK;AAAA,IACvB,SAASA,IAAAA,IAAQ,oBAAA,KAAK;AAAA,IACtB,QAAQA,IAAAA,IAAQ,oBAAA,KAAK;AAAA,IACrB,QAAQ,MAAM;AAAA,IACd,UAAUA,IAAAA,IAAQ,oBAAA,KAAK;AAAA,IACvB,gBAAgBA,IAAI,IAAA,EAAE;AAAA,IACtB,UAAU,MAAM;AAAA,IAChB,YAAY,MAAM;AAAA,IAClB,MAAM,MAAM;AAAA,IACZ,cAAc,MAAM;AAAA,IACpB,UAAUA,QAAI,KAAK;AAAA,EAAA;AAE3B;AAKO,MAAM,kBAAkBC,MAAA;AAAA,EAC3B;AAAA,IACI,GAAGC,mCAAkB;AAAA,IACrB,GAAGC,eAAsB,sBAAA;AAAA,EAC7B;AAAA,EACA;AACJ;AAMa,MAAA,gBAAgB,CAACC,WAAuB;AACjD,MAAI,cAAc;AACZ,QAAA,YAAYC,+BAAoB,QAAQ;AAC9C,QAAM,WAAWL,IAAAA,IAAQ,oBAAA,KAAyB;AAClD,QAAM,UAAUA,IAAAA,IAAQ,oBAAA,KAAuB;AACzC,QAAA,iBAAiBM,mCAAkBF,MAAK;AAC9C,QAAM,WAAwCG,WAAA;AAAA,IAC1CH;AAAA,IACA;AAAA,IACAA,OAAM;AAAA,IACN,CAAC,WAAW;AACR,aAAO,eAAe,MAAM;AAAA,QACxB;AAAA,QACA,SAAS;AAAA,QACT,QAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,IACA,CAAC,WAAW;AACR,aAAO,eAAe,MAAM;AAAA,QACxB;AAAA,QACA,SAAS;AAAA,QACT,QAAQ;AAAA,MACZ;AAAA,IAAA;AAAA,EAER;AACM,QAAA,eAAeI,+BAAgBJ,MAAK;AAC1C,QAAM,SAASG,WAAA;AAAA,IACXH;AAAA,IACA;AAAA,IACAA,OAAM;AAAA,IACN,CAAC,WAAW;AACR,aAAO,IAAI;AAAA,QACP,MAAM,QAAQ,MAAM,IACd,OAAO,IAAI,CAAC,UAAUK,IAAAA,MAAM,KAAK,CAAC,IAClC;AAAA,MACV;AAAA,IACJ;AAAA,IACA,CAAC,WAAW;AACR,aAAO,CAAC,GAAG,OAAO,QAAQ;AAAA,IAAA;AAAA,EAElC;AAEAC,MAAAA,cAAc,MAAM;AACF,kBAAA;AAAA,EAAA,CACjB;AAED,WAAS,QAAQ,IAAa;AAC1B,UAAM,OAAkB,CAAC;AACzB,QAAI,SAAkB;AACtB,WAAO,UAAU,MAAM;AACnB,WAAK,QAAQ,MAAM;AACV,eAAA,QAAQ,MAAM,IAAI,MAAM;AAAA,IAAA;AAE9B,WAAA;AAAA,EAAA;AAGX,QAAM,SAAwB;AAAA,IAC1B,IAAIX,IAAAA,WAAW;AAAA,IACf,MAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgBY,mCAAkB,QAAQ;AAAA,MAC1C,QAAQ,CAAC,IAAI,OAAO,UAAU;AAC1B,kBAAU,KAAK,gBAAgB;AAAA,UAC3B;AAAA,UACA;AAAA,UACA,MAAM,QAAQ,EAAE;AAAA,UAChB;AAAA,QAAA,CACH;AACK,cAAA,cAAc,eAAe,MAAM,OAAO;AAAA,UAC5C;AAAA,UACA;AAAA,UACA,UAAU,IAAI,IAAI,SAAS,KAAK;AAAA,UAChC,UAAU,SAAS;AAAA,UACnB,SAAS,QAAQ;AAAA,UACjB;AAAA,QAAA,CACH;AACD,wBAAgB,SAAS,QAAQ;AAEjC,eAAO,KAAK,aAAa,IAAI,OAAO,KAAK;AAAA,MAC7C;AAAA,MACA,UAAU,CAAC,IAAI,UAAU,YAAY;AACjC,oBAAY,OAAO,YAAY,QAAQ,MAAM,IAAI,IAAI,QAAQ;AAC7D,YAAI,SAAS;AACT,mBAAS,MAAM,IAAI,IAAI,CAAA,CAAE;AAAA,QAAA;AAE7B,YAAI,YAAY,MAAM;AACT,mBAAA,MAAM,IAAI,UAAU;AAAA,YACzB,GAAI,SAAS,MAAM,IAAI,QAAQ,KAAK,CAAC;AAAA,YACrC;AAAA,UAAA,CACH;AAAA,QAAA;AAAA,MAET;AAAA,MACA,YAAY,CAAC,OAAO;AAChB,YAAI,aAAa;AACb;AAAA,QAAA;AAEK,iBAAA,MAAM,OAAO,EAAE;AACxB,cAAM,SAAS,QAAQ,MAAM,IAAI,EAAE;AACnC,YAAI,QAAQ;AACR,gBAAM,OAAO,SAAS,MAAM,IAAI,MAAM,KAAK,CAAC;AAC5C,mBAAS,MAAM;AAAA,YACX;AAAA,YACA,KAAK,OAAO,CAAC,UAAU,UAAU,EAAE;AAAA,UACvC;AAAA,QAAA;AAEI,gBAAA,MAAM,OAAO,EAAE;AAAA,MAC3B;AAAA,MACA;AAAA,MACA,MAAM,CAAC,IAAI,OAAO,UAAU;AACxB,kBAAU,KAAK,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,UACA,MAAM,QAAQ,EAAE;AAAA,UAChB;AAAA,QAAA,CACH;AACK,cAAA,YAAY,aAAa,MAAM,KAAK;AAAA,UACtC;AAAA,UACA;AAAA,UACA,QAAQ,IAAI,IAAI,OAAO,KAAK;AAAA,UAC5B,UAAU,SAAS;AAAA,UACnB,SAAS,QAAQ;AAAA,UACjB;AAAA,QAAA,CACH;AACD,sBAAc,OAAO,QAAQ;AAAA,MACjC;AAAA,MACA,cAAc,CAAC,IAAI,OAAO,UAAU;AAC1B,cAAA,YAAY,aAAa,MAAM,OAAO;AAAA,UACxC;AAAA,UACA;AAAA,UACA,UAAU,IAAI,IAAI,SAAS,KAAK;AAAA,UAChC,QAAQ,IAAI,IAAI,OAAO,KAAK;AAAA,UAC5B,UAAU,SAAS;AAAA,UACnB,SAAS,QAAQ;AAAA,UACjB;AAAA,QAAA,CACH;AACD,sBAAc,OAAO,QAAQ;AAAA,MACjC;AAAA,MACA,UAAUC,IAAAA,SAAS,MAAM,QAAQ,MAAM,OAAO,CAAC;AAAA,IAAA;AAAA,EAEvD;AAEAC,MAAA,QAAQ,gBAAgB,MAAM;AAC9B,SAAO,OAAO;AAClB;AAOa,MAAA,oBAAoB,CAAC,IAAkB,YAAqB;AAC/D,QAAA,SAASC,IAAAA,OAAO,gBAAgB,eAAe;AAC/C,QAAA,WAAW,OAAOC,QAAAA,WAAW;AAC7B,QAAA,aAAaH,IAAAA,SAAS,MAAM;AAC9B,UAAM,UAAUH,IAAAA,MAAMO,IAAQ,QAAA,EAAE,CAAC;AAC1B,WAAA,YAAY,SAAY,UAAU;AAAA,EAAA,CAC5C;AACD,QAAM,OAAO;AAAA,IACT,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,MAAM,CAAC,MAAe,MAAa;AAC/B,aAAO,KAAK,KAAK,WAAW,OAAO,MAAM,CAAC;AAAA,IAC9C;AAAA,IACA,cAAc,CAAC,MAAe,MAAc;AACxC,aAAO,KAAK,aAAa,WAAW,OAAO,MAAM,CAAC;AAAA,IACtD;AAAA,IACA,QAAQJ,aAAS,MAAM;AACX,cAAA,IAAI,WAAW,KAAK;AAC5B,cAAQ,IAAI,OAAO,KAAK,OAAO,KAAK;AACpC,aAAO,OAAO,KAAK,OAAO,MAAM,IAAI,WAAW,KAAK;AAAA,IAAA,CACvD;AAAA,IACD,QAAQA,IAAAA,SAAS,MAAM,OAAO,KAAK,QAAQ,MAAM,IAAI,WAAW,KAAK,CAAC;AAAA,IACtE,QAAQ,CAAC,UAAmB,MAAc;AACtC,aAAO,OAAO,KAAK,OAAO,WAAW,OAAO,UAAU,CAAC;AAAA,IAC3D;AAAA,IACA,YAAYA,aAAS,MAAM;AAEnB,aAAA,OAAO,KAAK,SAAS,MAAM,IAAIH,IAAAA,MAAM,WAAW,KAAK,CAAC,MAAM;AAAA,IAAA,CAEnE;AAAA,IACD,iBAAiBG,aAAS,MAAM;AAC5B,aACI,OAAO,KAAK,SAAS,MAAM,IAAI,WAAW,KAAK,MAC/C;AAAA,IAAA,CAEP;AAAA,IACD,QAAQA,aAAS,MAAM;AACnB,aAAO,CAAC,OAAO,KAAK,SAAS,MAAM,IAAI,WAAW,KAAK;AAAA,IAC1D,CAAA;AAAA,EACL;AACA,SAAO,KAAK,SAAS,WAAW,OAAO,OAAO,GAAG,OAAO,OAAO;AAC/DK,MAAAA,gBAAgB,MAAM;AACX,WAAA,KAAK,WAAW,WAAW,KAAK;AAAA,EAAA,CAC1C;AACD,MAAI,SAAS;AACTJ,QAAA,QAAQ,gBAAgB,IAAI;AAAA,EAAA;AAEzB,SAAA;AACX;;;;;;"}
@@ -11,7 +11,7 @@ const _hoisted_1 = {
11
11
  const _hoisted_2 = /* @__PURE__ */ vue.createElementVNode("circle", {
12
12
  cx: "12",
13
13
  cy: "12",
14
- r: "3"
14
+ r: "2"
15
15
  }, null, -1);
16
16
  const _hoisted_3 = [
17
17
  _hoisted_2
@@ -1 +1 @@
1
- {"version":3,"file":"DotIcon.svg.cjs","sources":["../../../../../src/icons/glyph/DotIcon.svg"],"sourcesContent":["import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"3\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }"],"names":["_createElementVNode","_openBlock","_createElementBlock"],"mappings":";;;;AAEA,MAAM,aAAa;AAAA,EACjB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;AACA,MAAM,aAA0BA,oBAAmB,mBAAC,UAAU;AAAA,EAC5D,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,GAAG;AACL,GAAG,MAAM,EAAE;AACX,MAAM,aAAa;AAAA,EACjB;AACF;AAEO,SAAS,OAAO,MAAM,QAAQ;AACnC,SAAQC,IAAU,UAAA,GAAIC,IAAAA,mBAAoB,OAAO,YAAY,UAAU;AACzE;AACA,MAAe,UAAA,EAAE,OAAc;;;"}
1
+ {"version":3,"file":"DotIcon.svg.cjs","sources":["../../../../../src/icons/glyph/DotIcon.svg"],"sourcesContent":["import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"2\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }"],"names":["_createElementVNode","_openBlock","_createElementBlock"],"mappings":";;;;AAEA,MAAM,aAAa;AAAA,EACjB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;AACA,MAAM,aAA0BA,oBAAmB,mBAAC,UAAU;AAAA,EAC5D,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,GAAG;AACL,GAAG,MAAM,EAAE;AACX,MAAM,aAAa;AAAA,EACjB;AACF;AAEO,SAAS,OAAO,MAAM,QAAQ;AACnC,SAAQC,IAAU,UAAA,GAAIC,IAAAA,mBAAoB,OAAO,YAAY,UAAU;AACzE;AACA,MAAe,UAAA,EAAE,OAAc;;;"}