@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.
- package/components.d.ts +100 -99
- package/dist/cjs/evance-ui.css +226 -172
- package/dist/cjs/fonts/Inter/Inter-Bold.woff2 +0 -0
- package/dist/cjs/fonts/Inter/Inter-Medium.woff2 +0 -0
- package/dist/cjs/fonts/Inter/Inter-Regular.woff2 +0 -0
- package/dist/cjs/fonts/Inter/Inter-SemiBold.woff2 +0 -0
- package/dist/cjs/fonts/JetBrainsMono/JetBrainsMono-Bold.woff2 +0 -0
- package/dist/cjs/fonts/JetBrainsMono/JetBrainsMono-Medium.woff2 +0 -0
- package/dist/cjs/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 +0 -0
- package/dist/cjs/fonts/JetBrainsMono/JetBrainsMono-SemiBold.woff2 +0 -0
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/src/components/EvList/EvList.cjs +3 -2
- package/dist/cjs/src/components/EvList/EvList.cjs.map +1 -1
- package/dist/cjs/src/components/EvList/EvList.vue.cjs +5 -2
- package/dist/cjs/src/components/EvList/EvList.vue.cjs.map +1 -1
- package/dist/cjs/src/components/EvList/EvListChildren.vue.cjs +35 -4
- package/dist/cjs/src/components/EvList/EvListChildren.vue.cjs.map +1 -1
- package/dist/cjs/src/components/EvListItem/EvListItem.cjs +8 -5
- package/dist/cjs/src/components/EvListItem/EvListItem.cjs.map +1 -1
- package/dist/cjs/src/components/EvListItem/EvListItem.vue.cjs +153 -92
- package/dist/cjs/src/components/EvListItem/EvListItem.vue.cjs.map +1 -1
- package/dist/cjs/src/components/EvTooltip/EvTooltip.vue.cjs.map +1 -1
- package/dist/cjs/src/composables/lists/list-items.cjs +2 -0
- package/dist/cjs/src/composables/lists/list-items.cjs.map +1 -1
- package/dist/cjs/src/composables/lists/nested.cjs +26 -8
- package/dist/cjs/src/composables/lists/nested.cjs.map +1 -1
- package/dist/cjs/src/icons/glyph/DotIcon.svg.cjs +1 -1
- package/dist/cjs/src/icons/glyph/DotIcon.svg.cjs.map +1 -1
- package/dist/esm/evance-ui.css +226 -172
- package/dist/esm/fonts/Inter/Inter-Bold.woff2 +0 -0
- package/dist/esm/fonts/Inter/Inter-Medium.woff2 +0 -0
- package/dist/esm/fonts/Inter/Inter-Regular.woff2 +0 -0
- package/dist/esm/fonts/Inter/Inter-SemiBold.woff2 +0 -0
- package/dist/esm/fonts/JetBrainsMono/JetBrainsMono-Bold.woff2 +0 -0
- package/dist/esm/fonts/JetBrainsMono/JetBrainsMono-Medium.woff2 +0 -0
- package/dist/esm/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 +0 -0
- package/dist/esm/fonts/JetBrainsMono/JetBrainsMono-SemiBold.woff2 +0 -0
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/src/components/EvList/EvList.mjs +3 -2
- package/dist/esm/src/components/EvList/EvList.mjs.map +1 -1
- package/dist/esm/src/components/EvList/EvList.vue.mjs +5 -2
- package/dist/esm/src/components/EvList/EvList.vue.mjs.map +1 -1
- package/dist/esm/src/components/EvList/EvListChildren.vue.mjs +37 -6
- package/dist/esm/src/components/EvList/EvListChildren.vue.mjs.map +1 -1
- package/dist/esm/src/components/EvListItem/EvListItem.mjs +8 -5
- package/dist/esm/src/components/EvListItem/EvListItem.mjs.map +1 -1
- package/dist/esm/src/components/EvListItem/EvListItem.vue.mjs +157 -96
- package/dist/esm/src/components/EvListItem/EvListItem.vue.mjs.map +1 -1
- package/dist/esm/src/components/EvTooltip/EvTooltip.vue.mjs.map +1 -1
- package/dist/esm/src/composables/lists/list-items.mjs +2 -0
- package/dist/esm/src/composables/lists/list-items.mjs.map +1 -1
- package/dist/esm/src/composables/lists/nested.mjs +27 -9
- package/dist/esm/src/composables/lists/nested.mjs.map +1 -1
- package/dist/esm/src/icons/glyph/DotIcon.svg.mjs +1 -1
- package/dist/esm/src/icons/glyph/DotIcon.svg.mjs.map +1 -1
- package/dist/evance-ui.css +1 -1
- package/dist/evance-ui.js +2 -2
- package/dist/evance-ui.js.map +1 -1
- package/dist/evance-ui.mjs +4553 -4443
- package/dist/evance-ui.mjs.map +1 -1
- package/dist/fonts/Inter/Inter-Bold.woff2 +0 -0
- package/dist/fonts/Inter/Inter-Medium.woff2 +0 -0
- package/dist/fonts/Inter/Inter-Regular.woff2 +0 -0
- package/dist/fonts/Inter/Inter-SemiBold.woff2 +0 -0
- package/dist/fonts/JetBrainsMono/JetBrainsMono-Bold.woff2 +0 -0
- package/dist/fonts/JetBrainsMono/JetBrainsMono-Medium.woff2 +0 -0
- package/dist/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 +0 -0
- package/dist/fonts/JetBrainsMono/JetBrainsMono-SemiBold.woff2 +0 -0
- package/dist/types/components/EvDataTable/EvDataTable.vue.d.ts +1 -1
- package/dist/types/components/EvEmptyState/EvEmptyState.vue.d.ts +1 -1
- package/dist/types/components/EvList/EvList.d.ts +5 -0
- package/dist/types/components/EvList/EvList.d.ts.map +1 -1
- package/dist/types/components/EvList/EvListChildren.vue.d.ts +11 -1
- package/dist/types/components/EvList/EvListChildren.vue.d.ts.map +1 -1
- package/dist/types/components/EvListItem/EvListItem.d.ts +33 -16
- package/dist/types/components/EvListItem/EvListItem.d.ts.map +1 -1
- package/dist/types/components/EvListItem/EvListItem.vue.d.ts +20 -11
- package/dist/types/components/EvListItem/EvListItem.vue.d.ts.map +1 -1
- package/dist/types/components/EvTooltip/EvTooltip.vue.d.ts +4 -1
- package/dist/types/components/EvTooltip/EvTooltip.vue.d.ts.map +1 -1
- package/dist/types/composables/lists/list-items.d.ts +1 -0
- package/dist/types/composables/lists/list-items.d.ts.map +1 -1
- package/dist/types/composables/lists/nested.d.ts +6 -6
- package/dist/types/composables/lists/nested.d.ts.map +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/EvListGroup.cjs +0 -8
- package/dist/cjs/EvListGroup.cjs.map +0 -1
- package/dist/cjs/src/components/EvListGroup/EvListGroup.cjs +0 -13
- package/dist/cjs/src/components/EvListGroup/EvListGroup.cjs.map +0 -1
- package/dist/cjs/src/components/EvListGroup/EvListGroup.vue.cjs +0 -96
- package/dist/cjs/src/components/EvListGroup/EvListGroup.vue.cjs.map +0 -1
- package/dist/cjs/src/components/EvListGroup/EvListGroup.vue2.cjs +0 -6
- package/dist/cjs/src/components/EvListGroup/EvListGroup.vue2.cjs.map +0 -1
- package/dist/esm/EvListGroup.mjs +0 -8
- package/dist/esm/EvListGroup.mjs.map +0 -1
- package/dist/esm/src/components/EvListGroup/EvListGroup.mjs +0 -13
- package/dist/esm/src/components/EvListGroup/EvListGroup.mjs.map +0 -1
- package/dist/esm/src/components/EvListGroup/EvListGroup.vue.mjs +0 -96
- package/dist/esm/src/components/EvListGroup/EvListGroup.vue.mjs.map +0 -1
- package/dist/esm/src/components/EvListGroup/EvListGroup.vue2.mjs +0 -6
- package/dist/esm/src/components/EvListGroup/EvListGroup.vue2.mjs.map +0 -1
- package/dist/types/EvListGroup.d.ts +0 -1
- package/dist/types/components/EvListGroup/EvListGroup.d.ts +0 -155
- package/dist/types/components/EvListGroup/EvListGroup.d.ts.map +0 -1
- package/dist/types/components/EvListGroup/EvListGroup.vue.d.ts +0 -118
- package/dist/types/components/EvListGroup/EvListGroup.vue.d.ts.map +0 -1
- package/dist/types/components/EvListGroup/index.d.ts +0 -3
- package/dist/types/components/EvListGroup/index.d.ts.map +0 -1
|
@@ -35,6 +35,7 @@ const makeListItemsProps = propsFactory(
|
|
|
35
35
|
);
|
|
36
36
|
let lastItemKey = 0;
|
|
37
37
|
function transformItem(props, item) {
|
|
38
|
+
const type = getPropertyValue(item, props.itemType, "item");
|
|
38
39
|
const title = getPropertyValue(item, props.itemTitle, item);
|
|
39
40
|
const value = getPropertyValue(item, props.itemValue, title);
|
|
40
41
|
const children = getPropertyValue(item, props.itemChildren);
|
|
@@ -45,6 +46,7 @@ function transformItem(props, item) {
|
|
|
45
46
|
...itemProps
|
|
46
47
|
};
|
|
47
48
|
return {
|
|
49
|
+
type,
|
|
48
50
|
key: ++lastItemKey,
|
|
49
51
|
title: String(transformedItemProps.title ?? ""),
|
|
50
52
|
value: transformedItemProps.value,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-items.mjs","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":["value"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"list-items.mjs","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":["value"],"mappings":";;;;;AA4EO,MAAM,qBAAqB;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,SAAS;AAAA,IAAA;AAAA,EAEjB;AAAA,EACA;AACJ;AAGA,IAAI,cAAc;AAQF,SAAA,cACZ,OACA,MACQ;AACR,QAAM,OAAO,iBAAiB,MAAM,MAAM,UAAU,MAAM;AAC1D,QAAM,QAAQ,iBAAiB,MAAM,MAAM,WAAW,IAAI;AAC1D,QAAM,QAAQ,iBAAiB,MAAM,MAAM,WAAW,KAAK;AAC3D,QAAM,WAAW,iBAAiB,MAAM,MAAM,YAAY;AACpD,QAAA,YACF,MAAM,cAAc,OACd,SAAS,IAAI,KAAK,QAAQ,QAAQ,CAAC,QAAQ,IAAI,IAC3C,cAAc,OACV,KAAK,MAAM,CAAC,UAAU,CAAC,IACvB,OACJ,SACJ,iBAAiB,MAAM,MAAM,SAAS;AAEhD,QAAM,uBAAuB;AAAA,IACzB;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP;AAEO,SAAA;AAAA,IACH;AAAA,IACA,KAAK,EAAE;AAAA,IACP,OAAO,OAAO,qBAAqB,SAAS,EAAE;AAAA,IAC9C,OAAO,qBAAqB;AAAA,IAC5B,OAAO;AAAA,IACP,UAAU,QAAQ,QAAQ,IACpB,eAAe,OAAO,QAAQ,IAC9B;AAAA,IACN,KAAK;AAAA,EACT;AACJ;AAKgB,SAAA,eACZ,OACA,OACF;AACE,QAAM,YAAwB,CAAC;AAC/B,aAAW,QAAQ,OAAO;AACtB,cAAU,KAAK,cAAc,OAAO,IAAI,CAAC;AAAA,EAAA;AAEtC,SAAA;AACX;AAOO,SAAS,SAAS,OAAY;AAC3B,QAAA,QAAQ,SAAS,MAAM;AAClB,WAAA,eAAe,OAAO,MAAM,KAAK;AAAA,EAAA,CAC3C;AAEK,QAAA,cAAc,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,UAAI,MAAM,gBAAgB,OAAO,MAAM,UAAU;AAGtC,eAAA,cAAc,OAAO,CAAC;AAAA,MAAA;AAEjC,aACI,MAAM,MAAM;AAAA,QAAK,CAAC,SACd,MAAM,gBAAgB,GAAG,KAAK,KAAK;AAAA,MAAA,KAClC,cAAc,OAAO,CAAC;AAAA,IAAA,CAElC;AAAA,EAAA;AAGL,WAAS,aAAa,OAA0B;AAC5C,WAAO,MAAM,eACP,MAAM,IAAI,CAAC,EAAE,IAAI,MAAM,GAAG,IAC1B,MAAM,IAAI,CAAC,EAAE,OAAAA,aAAYA,MAAK;AAAA,EAAA;AAGjC,SAAA,EAAE,OAAO,aAAa,aAAa;AAC9C;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*! Evance UI v1.1.2 | MIT License */
|
|
2
2
|
import { useSelectStrategy, useSelectedValues, makeSelectedProps } from "./select-strategies.mjs";
|
|
3
|
-
import { ref, onBeforeMount, shallowRef, provide, inject,
|
|
3
|
+
import { ref, toRaw, onBeforeMount, computed, shallowRef, provide, inject, toValue, onBeforeUnmount } from "vue";
|
|
4
4
|
import { useModelProxy } from "../modelProxy.mjs";
|
|
5
5
|
import { useOpenStrategy, makeOpenStrategyProps } from "./open-strategies.mjs";
|
|
6
6
|
import { propsFactory } from "../../util/props.mjs";
|
|
@@ -19,7 +19,8 @@ const emptyNestedList = {
|
|
|
19
19
|
register: () => null,
|
|
20
20
|
unregister: () => null,
|
|
21
21
|
open: () => null,
|
|
22
|
-
openOnSelect: () => null
|
|
22
|
+
openOnSelect: () => null,
|
|
23
|
+
isNested: ref(false)
|
|
23
24
|
}
|
|
24
25
|
};
|
|
25
26
|
const makeNestedProps = propsFactory(
|
|
@@ -60,7 +61,9 @@ const useNestedList = (props) => {
|
|
|
60
61
|
"opened",
|
|
61
62
|
props.opened,
|
|
62
63
|
(values) => {
|
|
63
|
-
return new Set(
|
|
64
|
+
return new Set(
|
|
65
|
+
Array.isArray(values) ? values.map((value) => toRaw(value)) : values
|
|
66
|
+
);
|
|
64
67
|
},
|
|
65
68
|
(values) => {
|
|
66
69
|
return [...values.values()];
|
|
@@ -159,7 +162,8 @@ const useNestedList = (props) => {
|
|
|
159
162
|
event
|
|
160
163
|
});
|
|
161
164
|
newOpened && (opened.value = newOpened);
|
|
162
|
-
}
|
|
165
|
+
},
|
|
166
|
+
isNested: computed(() => parents.value.size > 0)
|
|
163
167
|
}
|
|
164
168
|
};
|
|
165
169
|
provide(EvNestedSymbol, nested);
|
|
@@ -169,11 +173,23 @@ const useNestedListItem = (id, isGroup) => {
|
|
|
169
173
|
const parent = inject(EvNestedSymbol, emptyNestedList);
|
|
170
174
|
const idSymbol = Symbol(getNextId());
|
|
171
175
|
const idComputed = computed(() => {
|
|
172
|
-
|
|
176
|
+
const idValue = toRaw(toValue(id));
|
|
177
|
+
return idValue !== void 0 ? idValue : idSymbol;
|
|
173
178
|
});
|
|
174
179
|
const item = {
|
|
175
180
|
...parent,
|
|
176
181
|
id: idComputed,
|
|
182
|
+
open: (open, e) => {
|
|
183
|
+
parent.root.open(idComputed.value, open, e);
|
|
184
|
+
},
|
|
185
|
+
openOnSelect: (open, e) => {
|
|
186
|
+
parent.root.openOnSelect(idComputed.value, open, e);
|
|
187
|
+
},
|
|
188
|
+
isOpen: computed(() => {
|
|
189
|
+
console.log(idComputed.value);
|
|
190
|
+
console.log(parent.root.opened.value);
|
|
191
|
+
return parent.root.opened.value.has(idComputed.value);
|
|
192
|
+
}),
|
|
177
193
|
parent: computed(() => parent.root.parents.value.get(idComputed.value)),
|
|
178
194
|
select: (selected, e) => {
|
|
179
195
|
return parent.root.select(idComputed.value, selected, e);
|
|
@@ -186,13 +202,15 @@ const useNestedListItem = (id, isGroup) => {
|
|
|
186
202
|
}),
|
|
187
203
|
isLeaf: computed(() => {
|
|
188
204
|
return !parent.root.children.value.get(idComputed.value);
|
|
189
|
-
})
|
|
190
|
-
isGroupActivator: parent.isGroupActivator
|
|
205
|
+
})
|
|
191
206
|
};
|
|
192
|
-
|
|
207
|
+
parent.root.register(idComputed.value, parent.id.value, isGroup);
|
|
193
208
|
onBeforeUnmount(() => {
|
|
194
|
-
|
|
209
|
+
parent.root.unregister(idComputed.value);
|
|
195
210
|
});
|
|
211
|
+
if (isGroup) {
|
|
212
|
+
provide(EvNestedSymbol, item);
|
|
213
|
+
}
|
|
196
214
|
return item;
|
|
197
215
|
};
|
|
198
216
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nested.mjs","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":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nested.mjs","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":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DotIcon.svg.mjs","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: \"
|
|
1
|
+
{"version":3,"file":"DotIcon.svg.mjs","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,mCAAoB,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,UAAU,GAAIC,mBAAoB,OAAO,YAAY,UAAU;AACzE;AACA,MAAe,UAAA,EAAE,OAAc;"}
|