fds-vue-core 1.2.2 → 1.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"App.vue.d.ts","sourceRoot":"","sources":["../src/App.vue"],"names":[],"mappings":";AAyTA,wBACG"}
1
+ {"version":3,"file":"App.vue.d.ts","sourceRoot":"","sources":["../src/App.vue"],"names":[],"mappings":";AA2TA,wBACG"}
@@ -14,6 +14,7 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
14
14
  searchEnabled: boolean;
15
15
  searchMatchParams: string[];
16
16
  searchExpandNodes: boolean;
17
+ horizontalScroll: boolean;
17
18
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
19
  export default _default;
19
20
  //# sourceMappingURL=FdsTreeView.vue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FdsTreeView.vue.d.ts","sourceRoot":"","sources":["../../../src/components/fds-tree-view/FdsTreeView.vue"],"names":[],"mappings":"AAyMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,KAAK,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAA;AAE1D,KAAK,WAAW,GAAG,KAAK,CAAC;;;;;;;;;;;;;;;AAuazB,wBAGG"}
1
+ {"version":3,"file":"FdsTreeView.vue.d.ts","sourceRoot":"","sources":["../../../src/components/fds-tree-view/FdsTreeView.vue"],"names":[],"mappings":"AAyMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,KAAK,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAA;AAE1D,KAAK,WAAW,GAAG,KAAK,CAAC;;;;;;;;;;;;;;;;AAsazB,wBAGG"}
@@ -67,7 +67,15 @@ export interface TreeViewProps<T = Record<string, unknown>> {
67
67
  * Defaults to ['title', 'nodeId']
68
68
  * */
69
69
  searchMatchParams?: string[];
70
- /** Whether to expand nodes when searching */
70
+ /** Expand nodes automatically when searching */
71
71
  searchExpandNodes?: boolean;
72
+ /** Enable horizontal scroll for the tree view */
73
+ horizontalScroll?: boolean;
74
+ /** Styles for the tree view */
75
+ style?: TreeViewStyles;
76
+ }
77
+ export interface TreeViewStyles {
78
+ /** Styles for the outer container */
79
+ container?: string;
72
80
  }
73
81
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/fds-tree-view/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAE3B;;;GAGG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACnD,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IACxB,oDAAoD;IACpD,IAAI,CAAC,EAAE,CAAC,CAAA;CACT;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAE5D;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxD,kEAAkE;IAClE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IACpB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAA;IACtB,mDAAmD;IACnD,gBAAgB,EAAE,MAAM,CAAA;IACxB,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAA;IACnB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,IAAI,CAAC,EAAE,CAAC,CAAA;IACR,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,sFAAsF;IACtF,wCAAwC,CAAC,EAAE,OAAO,CAAA;IAClD,wDAAwD;IACxD,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC,wEAAwE;IACxE,8BAA8B,CAAC,EAAE,OAAO,CAAA;IACxC,2CAA2C;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;SAEK;IACL,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/fds-tree-view/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAE3B;;;GAGG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACnD,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IACxB,oDAAoD;IACpD,IAAI,CAAC,EAAE,CAAC,CAAA;CACT;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAE5D;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxD,kEAAkE;IAClE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IACpB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAA;IACtB,mDAAmD;IACnD,gBAAgB,EAAE,MAAM,CAAA;IACxB,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAA;IACnB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,IAAI,CAAC,EAAE,CAAC,CAAA;IACR,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,sFAAsF;IACtF,wCAAwC,CAAC,EAAE,OAAO,CAAA;IAClD,wDAAwD;IACxD,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC,wEAAwE;IACxE,8BAA8B,CAAC,EAAE,OAAO,CAAA;IACxC,2CAA2C;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;SAEK;IACL,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,+BAA+B;IAC/B,KAAK,CAAC,EAAE,cAAc,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB"}
@@ -183,22 +183,25 @@ const _hoisted_1 = {
183
183
  class: "mb-4"
184
184
  };
185
185
  const _hoisted_2 = ["value", "label"];
186
- const _hoisted_3 = { class: "flex" };
187
- const _hoisted_4 = ["name"];
188
- const _hoisted_5 = { class: "pl-0 flex-1 flex items-center" };
189
- const _hoisted_6 = ["id", "checked", "indeterminate"];
190
- const _hoisted_7 = ["for"];
191
- const _hoisted_8 = {
186
+ const _hoisted_3 = {
187
+ class: /* @__PURE__ */ vue.normalizeClass("bg-white-solid p-2 rounded-md")
188
+ };
189
+ const _hoisted_4 = { class: "flex" };
190
+ const _hoisted_5 = ["name"];
191
+ const _hoisted_6 = { class: "pl-0 flex-1 flex items-center" };
192
+ const _hoisted_7 = ["id", "checked", "indeterminate"];
193
+ const _hoisted_8 = ["for"];
194
+ const _hoisted_9 = {
192
195
  key: 0,
193
196
  type: "default"
194
197
  };
195
- const _hoisted_9 = { key: 1 };
196
- const _hoisted_10 = {
198
+ const _hoisted_10 = { key: 1 };
199
+ const _hoisted_11 = {
197
200
  key: 0,
198
201
  type: "meta",
199
202
  class: "flex-1"
200
203
  };
201
- const _hoisted_11 = { key: 0 };
204
+ const _hoisted_12 = { key: 0 };
202
205
  const _sfc_main = /* @__PURE__ */ vue.defineComponent({
203
206
  ...{
204
207
  name: "FdsTreeView"
@@ -223,7 +226,9 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
223
226
  searchEnabled: { type: Boolean, default: false },
224
227
  searchLabel: {},
225
228
  searchMatchParams: { default: () => ["title", "nodeId"] },
226
- searchExpandNodes: { type: Boolean, default: false }
229
+ searchExpandNodes: { type: Boolean, default: false },
230
+ horizontalScroll: { type: Boolean, default: false },
231
+ style: {}
227
232
  },
228
233
  setup(__props) {
229
234
  const props = __props;
@@ -289,7 +294,9 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
289
294
  );
290
295
  return (_ctx, _cache) => {
291
296
  const _component_FdsTreeView = vue.resolveComponent("FdsTreeView", true);
292
- return vue.openBlock(), vue.createElementBlock("div", null, [
297
+ return vue.openBlock(), vue.createElementBlock("div", {
298
+ class: vue.normalizeClass(props?.style?.container)
299
+ }, [
293
300
  isRootComponent && _ctx.searchEnabled ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
294
301
  vue.createElementVNode("fds-input", {
295
302
  value: vue.unref(treeState)?.searchTerm || "",
@@ -301,15 +308,13 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
301
308
  ])], 40, _hoisted_2)
302
309
  ])) : vue.createCommentVNode("", true),
303
310
  vue.createElementVNode("div", {
304
- class: vue.normalizeClass({ "overflow-x-auto": isRootComponent })
311
+ class: vue.normalizeClass(isRootComponent && _ctx.horizontalScroll ? "overflow-x-auto" : "")
305
312
  }, [
306
- vue.createElementVNode("div", {
307
- class: vue.normalizeClass({ "bg-white-solid p-2 rounded-md min-w-max": isRootComponent })
308
- }, [
313
+ vue.createElementVNode("div", _hoisted_3, [
309
314
  vue.createElementVNode("div", {
310
315
  style: vue.normalizeStyle(indent.value)
311
316
  }, [
312
- vue.createElementVNode("div", _hoisted_3, [
317
+ vue.createElementVNode("div", _hoisted_4, [
313
318
  hasChildrenNodes.value ? (vue.openBlock(), vue.createElementBlock("fds-icon", {
314
319
  key: 0,
315
320
  onClick: _cache[1] || (_cache[1] = ($event) => vue.unref(treeState)?.toggleExpandNode(props.nodeId, props.nodes)),
@@ -322,12 +327,12 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
322
327
  size: "24px",
323
328
  class: "text-blue-500 mr-3",
324
329
  style: { "margin-top": "3px" }
325
- }, null, 8, _hoisted_4)) : vue.createCommentVNode("", true),
330
+ }, null, 8, _hoisted_5)) : vue.createCommentVNode("", true),
326
331
  !hasChildrenNodes.value ? (vue.openBlock(), vue.createElementBlock("div", {
327
332
  key: 1,
328
333
  style: vue.normalizeStyle({ width: `${_ctx.indentation}px` })
329
334
  }, null, 4)) : vue.createCommentVNode("", true),
330
- vue.createElementVNode("fds-checkbox", _hoisted_5, [
335
+ vue.createElementVNode("fds-checkbox", _hoisted_6, [
331
336
  vue.createElementVNode("input", {
332
337
  id: `checkbox-${props.nodeId}`,
333
338
  style: { "margin": "0px", "margin-top": "3px" },
@@ -335,21 +340,21 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
335
340
  checked: vue.unref(treeState)?.isNodeSelected(props.nodeId),
336
341
  indeterminate: _ctx.showIndeterminate && isIndeterminate.value,
337
342
  onChange: _cache[2] || (_cache[2] = ($event) => vue.unref(treeState)?.toggleSelectNode(props.nodes, props.nodeId, props.title, props.data))
338
- }, null, 40, _hoisted_6),
343
+ }, null, 40, _hoisted_7),
339
344
  vue.createElementVNode("label", {
340
345
  for: `checkbox-${props.nodeId}`,
341
346
  class: "flex flex-col pl-0"
342
347
  }, [
343
348
  vue.createElementVNode("div", null, [
344
- _ctx.title ? (vue.openBlock(), vue.createElementBlock("fds-text", _hoisted_8, vue.toDisplayString(_ctx.title), 1)) : vue.createCommentVNode("", true),
345
- _ctx.showChildrenCount && hasChildrenNodes.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_9, " (+" + vue.toDisplayString(props.nodes.length) + ") ", 1)) : vue.createCommentVNode("", true)
349
+ _ctx.title ? (vue.openBlock(), vue.createElementBlock("fds-text", _hoisted_9, vue.toDisplayString(_ctx.title), 1)) : vue.createCommentVNode("", true),
350
+ _ctx.showChildrenCount && hasChildrenNodes.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_10, " (+" + vue.toDisplayString(props.nodes.length) + ") ", 1)) : vue.createCommentVNode("", true)
346
351
  ]),
347
- _ctx.showNodeDescription ? (vue.openBlock(), vue.createElementBlock("fds-text", _hoisted_10, vue.toDisplayString(props.nodeId), 1)) : vue.createCommentVNode("", true)
348
- ], 8, _hoisted_7)
352
+ _ctx.showNodeDescription ? (vue.openBlock(), vue.createElementBlock("fds-text", _hoisted_11, vue.toDisplayString(props.nodeId), 1)) : vue.createCommentVNode("", true)
353
+ ], 8, _hoisted_8)
349
354
  ])
350
355
  ])
351
356
  ], 4),
352
- vue.unref(expandedNodes).has(props.nodeId) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_11, [
357
+ vue.unref(expandedNodes).has(props.nodeId) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_12, [
353
358
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(filteredNodes.value, (child) => {
354
359
  return vue.openBlock(), vue.createBlock(_component_FdsTreeView, {
355
360
  key: child.nodeId,
@@ -374,9 +379,9 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
374
379
  }, null, 8, ["nodes", "title", "nodeId", "data", "depth", "indentation", "nodeExpandIcon", "nodeCollapseIcon", "showNodeDescription", "showChildrenCount", "expandChildrenOnSelect", "showIndeterminate", "showIndeterminateOnlyOnChildrenSelection", "expandChildrenOnParentCheck", "expandAllChildrenOnParentCheck", "searchEnabled", "searchExpandNodes", "searchMatchParams"]);
375
380
  }), 128))
376
381
  ])) : vue.createCommentVNode("", true)
377
- ], 2)
382
+ ])
378
383
  ], 2)
379
- ]);
384
+ ], 2);
380
385
  };
381
386
  }
382
387
  });
@@ -1 +1 @@
1
- {"version":3,"file":"fds-vue-core.cjs.js","sources":["../src/components/fds-tree-view/useTreeState.ts","../src/components/fds-tree-view/FdsTreeView.vue","../src/index.ts"],"sourcesContent":["import { reactive, ref } from 'vue'\nimport type { TreeNode, NodeId, TreeNodeArray, TreeNodeItem } from './types'\n\ninterface TreeStateOptions {\n expandChildrenOnParentCheck?: boolean\n expandAllChildrenOnParentCheck?: boolean\n showIndeterminateOnlyOnChildrenSelection?: boolean\n}\n\nconst useTreeState = (options: TreeStateOptions = {}) => {\n /**\n * The set of selected nodes\n */\n const selectedNodes = reactive<Set<NodeId>>(new Set())\n /**\n * The array of selected node objects\n */\n const selectedNodeObjects = reactive<TreeNode[]>([])\n /**\n * The set of expanded nodes\n */\n const expandedNodes = reactive<Set<NodeId>>(new Set())\n /**\n * The search term for filtering nodes\n */\n const searchTerm = ref<string>('')\n\n /**\n * Clears all selected nodes. Can be used to reset the selections to the initial state.\n */\n const clearAllSelectedNodes = () => {\n selectedNodes.clear()\n selectedNodeObjects.length = 0\n }\n\n /**\n * Collapses all expanded nodes. Can be used to reset the tree to the initial state.\n */\n const collapseAllExpandedNodes = () => expandedNodes.clear()\n\n /**\n * Returns true if the node is selected\n */\n const isNodeSelected = (nodeId: NodeId) => selectedNodes.has(nodeId)\n\n /**\n * Returns true if the node is expanded\n */\n const isNodeExpanded = (nodeId: NodeId) => expandedNodes.has(nodeId)\n\n /**\n * Expands the specific node\n */\n const expandNode = (nodeId: NodeId) => expandedNodes.add(nodeId)\n\n /**\n * Collapses the specific node\n */\n const collapseNode = (nodeId: NodeId) => expandedNodes.delete(nodeId)\n\n /**\n * Selects the specific node and adds it to the selectedNodeObjects array.\n * Used to access the node object and it's underlying data\n */\n const injectNode = (nodeObject: TreeNode) => {\n selectedNodes.add(nodeObject.nodeId)\n selectedNodeObjects.push(nodeObject)\n }\n\n /**\n * Expands all children of the specific node\n */\n const expandAllChildren = (node: TreeNode) => {\n expandNode(node.nodeId)\n if (node.children && node.children.length > 0) {\n node.children.forEach(expandAllChildren)\n }\n }\n\n /**\n * Selects this node and recursively selects all children nodes\n */\n const selectAllChildren = (node: TreeNode) => {\n // Deselect all children to avoid duplicates\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectAllChildren)\n }\n\n // Inject the current node\n injectNode(node)\n\n if (node.children && node.children.length > 0) {\n node.children.forEach(selectAllChildren)\n }\n\n // Only expand children if the option is enabled\n if (options.expandChildrenOnParentCheck) {\n expandAllChildren(node)\n }\n }\n\n /**\n * Deselects the specific node\n */\n const deselectNode = (nodeId: NodeId) => {\n selectedNodes.delete(nodeId)\n const index = selectedNodeObjects.findIndex((node) => node.nodeId === nodeId)\n\n if (index > -1) {\n selectedNodeObjects.splice(index, 1)\n }\n }\n\n /**\n * Deselects this node and recursively deselects all children nodes\n */\n const deselectAllChildren = (node: TreeNode) => {\n // Remove the current node\n deselectNode(node.nodeId)\n\n // Recursively remove all children\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectAllChildren)\n }\n }\n\n /**\n * Finds a node by ID\n */\n const findNodeById = (nodes: TreeNodeArray, nodeId: string): TreeNodeItem | null => {\n for (const node of nodes) {\n if (node.nodeId === nodeId) {\n return node\n }\n if (node.children) {\n const found = findNodeById(node.children, nodeId)\n if (found) return found\n }\n }\n return null\n }\n\n /**\n * Checks if a node has children\n */\n const hasChildrenNodes = (nodes: TreeNodeArray) => nodes.length > 0\n\n /**\n * Checks if a node is indeterminate (partially selected)\n */\n const isNodeIndeterminate = (nodes: TreeNodeArray, parentNodeId?: string): boolean => {\n if (!hasChildrenNodes(nodes)) return false\n\n // Check each child's state\n const childStates = nodes.map((node) => ({\n isSelected: selectedNodes.has(node.nodeId),\n isIndeterminate:\n node.children && node.children.length > 0\n ? isNodeIndeterminate(node.children, node.nodeId)\n : false,\n }))\n\n const hasSelected = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) => child.isSelected,\n )\n const hasUnselected = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) =>\n !child.isSelected && !child.isIndeterminate,\n )\n const hasIndeterminate = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) => child.isIndeterminate,\n )\n\n // If parent is selected, never show indeterminate\n if (parentNodeId && selectedNodes.has(parentNodeId)) return false\n\n // Standard behavior: some selected + some unselected, OR any child is indeterminate\n if (!options.showIndeterminateOnlyOnChildrenSelection) {\n return (hasSelected && hasUnselected) || hasIndeterminate\n }\n\n // Special behavior: any child selected OR any child indeterminate\n return hasSelected || hasIndeterminate\n }\n\n /**\n * Toggles the selection state of the specific node\n */\n const toggleSelectNode = (\n nodes: TreeNodeArray,\n nodeId: string,\n title?: string,\n data?: Record<string, unknown>,\n ) => {\n let node = findNodeById(nodes, nodeId)\n\n if (!node && nodeId) {\n node = {\n nodeId: nodeId,\n title: title,\n children: nodes || [],\n data: data,\n }\n }\n\n if (!node) return\n\n if (selectedNodes.has(nodeId)) {\n deselectAllChildren(node)\n } else {\n selectAllChildren(node)\n\n if (\n selectedNodes.has(nodeId) &&\n !expandedNodes.has(nodeId) &&\n options.expandChildrenOnParentCheck\n ) {\n toggleExpandNode(nodeId, nodes)\n }\n }\n }\n\n /**\n * Toggles the expansion state of the specific node\n */\n const toggleExpandNode = (nodeId: NodeId, nodes: TreeNodeArray) => {\n if (isNodeExpanded(nodeId)) {\n collapseNode(nodeId)\n } else {\n if (!hasChildrenNodes(nodes)) return\n expandNode(nodeId)\n }\n }\n\n /**\n * Gets the icons for expanded and collapsed nodes\n */\n const getNodeIcon = (\n nodeId: NodeId,\n nodes: TreeNodeArray,\n expandIcon: string,\n collapseIcon: string,\n ) => {\n return isNodeExpanded(nodeId) && hasChildrenNodes(nodes) ? collapseIcon : expandIcon\n }\n\n /**\n * Checks if a node matches the search term by searching through specified properties\n */\n const nodeMatchesSearch = (node: TreeNode, term: string, searchParams?: string[]): boolean => {\n if (!term.trim()) return true\n if (!searchParams || !Array.isArray(searchParams)) return false\n\n const searchLower = term.toLowerCase()\n\n for (const param of searchParams) {\n if (param === 'title' && node.title?.toLowerCase().includes(searchLower)) return true\n if (param === 'nodeId' && node.nodeId.toLowerCase().includes(searchLower)) return true\n\n // Check nested data properties\n if (node.data && typeof node.data === 'object') {\n const value = (node.data as Record<string, unknown>)[param]\n if (value && String(value).toLowerCase().includes(searchLower)) return true\n }\n }\n\n return false\n }\n\n /**\n * Filters nodes based on search term, including children that match\n */\n const filterNodes = (\n nodes: TreeNodeArray,\n term: string,\n searchParams?: string[],\n ): TreeNodeArray => {\n if (!term.trim()) return nodes\n\n const filtered: TreeNodeArray = []\n\n for (const node of nodes) {\n const nodeMatches = nodeMatchesSearch(node, term, searchParams)\n const filteredChildren = node.children ? filterNodes(node.children, term, searchParams) : []\n\n // Include node if it matches OR has matching children\n if (nodeMatches || filteredChildren.length > 0) {\n filtered.push({\n ...node,\n children: filteredChildren.length > 0 ? filteredChildren : node.children,\n })\n }\n }\n\n return filtered\n }\n\n /**\n * Sets the search term\n */\n const setSearchTerm = (term: string) => {\n searchTerm.value = term\n }\n\n /**\n * Clears the search term\n */\n const clearSearch = () => {\n searchTerm.value = ''\n }\n\n return {\n selectedNodes,\n selectedNodeObjects,\n expandedNodes,\n searchTerm,\n clearAllSelectedNodes,\n collapseAllExpandedNodes,\n isNodeSelected,\n isNodeExpanded,\n injectNode,\n selectAllChildren,\n deselectNode,\n deselectAllChildren,\n expandNode,\n collapseNode,\n expandAllChildren,\n findNodeById,\n hasChildrenNodes,\n isNodeIndeterminate,\n toggleSelectNode,\n toggleExpandNode,\n getNodeIcon,\n nodeMatchesSearch,\n filterNodes,\n setSearchTerm,\n clearSearch,\n }\n}\n\nexport default useTreeState\n","<script setup lang=\"ts\">\nimport { computed, inject, reactive, provide, watch } from 'vue'\nimport useTreeState from './useTreeState'\nimport type { TreeViewProps } from './types.ts'\n\ntype Props<T = Record<string, unknown>> = TreeViewProps<T>\n\nconst props = withDefaults(defineProps<Props>(), {\n nodes: () => [],\n depth: 0,\n showNodeDescription: false,\n showChildrenCount: false,\n expandChildrenOnSelect: false,\n showIndeterminate: false,\n expandChildrenOnParentCheck: false,\n expandAllChildrenOnParentCheck: true,\n showIndeterminateOnlyOnChildrenSelection: false,\n searchEnabled: false,\n searchExpandNodes: false,\n searchMatchParams: () => ['title', 'nodeId'],\n})\n\ndefineOptions({\n name: 'FdsTreeView',\n})\n\nconst isRootComponent = props.depth === 0\nconst injectedTreeState = inject<ReturnType<typeof useTreeState> | null>('treeState', null)\n\nlet treeState: ReturnType<typeof useTreeState>\nif (isRootComponent) {\n // This is the root component, create and provide treeState with props\n treeState = useTreeState({\n expandChildrenOnParentCheck: props.expandChildrenOnParentCheck,\n expandAllChildrenOnParentCheck: props.expandAllChildrenOnParentCheck,\n showIndeterminateOnlyOnChildrenSelection: props.showIndeterminateOnlyOnChildrenSelection,\n })\n provide('treeState', treeState)\n} else {\n // This is a child component, use injected treeState\n treeState = injectedTreeState!\n}\n\nconst expandedNodes = treeState?.expandedNodes ?? reactive(new Set())\n\nconst indentValue = props.depth * props.indentation\n\nconst indent = computed(() => ({\n display: 'flex',\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n transform: `translate(${indentValue}px)`,\n}))\n\nconst hasChildrenNodes = computed(() => {\n const nodesToCheck =\n props.searchEnabled && treeState?.searchTerm?.value ? filteredNodes.value : props.nodes\n return treeState?.hasChildrenNodes(nodesToCheck) ?? false\n})\n\nconst isIndeterminate = computed(\n () => treeState?.isNodeIndeterminate(props.nodes, props.nodeId) ?? false,\n)\n\nconst filteredNodes = computed(() => {\n if (!props.searchEnabled || !treeState?.searchTerm?.value) {\n return props.nodes\n }\n return treeState.filterNodes(props.nodes, treeState.searchTerm.value, props.searchMatchParams)\n})\n\n// Auto-expand nodes when searching\nwatch(\n () => treeState?.searchTerm?.value,\n (newSearchTerm) => {\n if (props.searchEnabled && props.searchExpandNodes && newSearchTerm && newSearchTerm.trim()) {\n // Expand all nodes that have matching children\n const expandMatchingNodes = (nodes: typeof props.nodes) => {\n nodes.forEach((node) => {\n if (node.children && node.children.length > 0) {\n const hasMatchingChildren =\n treeState?.filterNodes(node.children, newSearchTerm, props.searchMatchParams).length >\n 0\n if (hasMatchingChildren) {\n treeState?.expandNode(node.nodeId)\n }\n expandMatchingNodes(node.children)\n }\n })\n }\n\n // Auto-expand nodes that have matching children\n if (props.nodes && props.nodes.length > 0) {\n const hasMatchingChildren =\n treeState?.filterNodes(props.nodes, newSearchTerm, props.searchMatchParams).length > 0\n if (hasMatchingChildren) {\n treeState?.expandNode(props.nodeId)\n }\n }\n\n // Also expand individual child nodes recursively\n expandMatchingNodes(props.nodes)\n }\n },\n { immediate: false },\n)\n</script>\n\n<template>\n <div>\n <div v-if=\"isRootComponent && searchEnabled\" class=\"mb-4\">\n <fds-input\n :value=\"treeState?.searchTerm || ''\"\n @input=\"treeState?.setSearchTerm($event.target.value)\"\n class=\"w-full\"\n :label=\"searchLabel\"\n >\n <input id=\"tree-view-search-input\" />\n </fds-input>\n </div>\n\n <div :class=\"{ 'overflow-x-auto': isRootComponent }\">\n <div :class=\"{ 'bg-white-solid p-2 rounded-md min-w-max': isRootComponent }\">\n <div :style=\"indent\">\n <div class=\"flex\">\n <fds-icon\n v-if=\"hasChildrenNodes\"\n @click=\"treeState?.toggleExpandNode(props.nodeId, props.nodes)\"\n :name=\"\n treeState?.getNodeIcon(\n props.nodeId,\n props.nodes,\n props.nodeExpandIcon,\n props.nodeCollapseIcon,\n ) ?? props.nodeExpandIcon\n \"\n size=\"24px\"\n class=\"text-blue-500 mr-3\"\n style=\"margin-top: 3px\"\n />\n <div v-if=\"!hasChildrenNodes\" :style=\"{ width: `${indentation}px` }\" />\n\n <fds-checkbox class=\"pl-0 flex-1 flex items-center\">\n <input\n :id=\"`checkbox-${props.nodeId}`\"\n style=\"margin: 0px; margin-top: 3px\"\n type=\"checkbox\"\n :checked=\"treeState?.isNodeSelected(props.nodeId)\"\n :indeterminate=\"showIndeterminate && isIndeterminate\"\n @change=\"\n treeState?.toggleSelectNode(props.nodes, props.nodeId, props.title, props.data)\n \"\n />\n <label :for=\"`checkbox-${props.nodeId}`\" class=\"flex flex-col pl-0\">\n <div>\n <fds-text v-if=\"title\" type=\"default\">{{ title }}</fds-text>\n <span v-if=\"showChildrenCount && hasChildrenNodes\">\n (+{{ props.nodes.length }})\n </span>\n </div>\n <fds-text v-if=\"showNodeDescription\" type=\"meta\" class=\"flex-1\">\n {{ props.nodeId }}\n </fds-text>\n </label>\n </fds-checkbox>\n </div>\n </div>\n\n <div v-if=\"expandedNodes.has(props.nodeId)\">\n <FdsTreeView\n v-for=\"child in filteredNodes\"\n :key=\"child.nodeId\"\n :nodes=\"child.children || []\"\n :title=\"child.title\"\n :nodeId=\"child.nodeId\"\n :data=\"child.data\"\n :depth=\"props.depth + 1\"\n :indentation=\"props.indentation\"\n :nodeExpandIcon=\"props.nodeExpandIcon\"\n :nodeCollapseIcon=\"props.nodeCollapseIcon\"\n :showNodeDescription=\"showNodeDescription\"\n :showChildrenCount=\"showChildrenCount\"\n :expandChildrenOnSelect=\"expandChildrenOnSelect\"\n :showIndeterminate=\"showIndeterminate\"\n :showIndeterminateOnlyOnChildrenSelection=\"showIndeterminateOnlyOnChildrenSelection\"\n :expandChildrenOnParentCheck=\"expandChildrenOnParentCheck\"\n :expandAllChildrenOnParentCheck=\"expandAllChildrenOnParentCheck\"\n :searchEnabled=\"searchEnabled\"\n :searchExpandNodes=\"searchExpandNodes\"\n :searchMatchParams=\"searchMatchParams\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n","import type { App } from 'vue'\n\n// Import all components\nimport FdsTreeView from './components/fds-tree-view/FdsTreeView.vue'\n\n// Import composables\nimport useTreeState from './components/fds-tree-view/useTreeState'\n\n// Export individual components\nexport { FdsTreeView }\n\n// Export composables\nexport { useTreeState }\n\n// Export component library plugin\nexport default {\n install(app: App) {\n // Register all components globally\n app.component('FdsTreeView', FdsTreeView)\n },\n}\n\nexport type {\n TreeNode,\n TreeNodeArray,\n TreeNodeItem,\n TreeViewProps,\n NodeId,\n} from './components/fds-tree-view/types.js'\n\nimport type { TreeViewProps } from './components/fds-tree-view/types.js'\nexport type FdsTreeViewProps<T = Record<string, unknown>> = TreeViewProps<T>\n"],"names":["reactive","ref","index","inject","provide","computed","watch","_createElementBlock","searchEnabled","_openBlock","_createElementVNode","_unref","searchLabel","indentation","showIndeterminate","title","_toDisplayString","showChildrenCount","showNodeDescription","_Fragment","_renderList","_createBlock","expandChildrenOnSelect","showIndeterminateOnlyOnChildrenSelection","expandChildrenOnParentCheck","expandAllChildrenOnParentCheck","searchExpandNodes","searchMatchParams","FdsTreeView"],"mappings":"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"}
1
+ {"version":3,"file":"fds-vue-core.cjs.js","sources":["../src/components/fds-tree-view/useTreeState.ts","../src/components/fds-tree-view/FdsTreeView.vue","../src/index.ts"],"sourcesContent":["import { reactive, ref } from 'vue'\nimport type { TreeNode, NodeId, TreeNodeArray, TreeNodeItem } from './types'\n\ninterface TreeStateOptions {\n expandChildrenOnParentCheck?: boolean\n expandAllChildrenOnParentCheck?: boolean\n showIndeterminateOnlyOnChildrenSelection?: boolean\n}\n\nconst useTreeState = (options: TreeStateOptions = {}) => {\n /**\n * The set of selected nodes\n */\n const selectedNodes = reactive<Set<NodeId>>(new Set())\n /**\n * The array of selected node objects\n */\n const selectedNodeObjects = reactive<TreeNode[]>([])\n /**\n * The set of expanded nodes\n */\n const expandedNodes = reactive<Set<NodeId>>(new Set())\n /**\n * The search term for filtering nodes\n */\n const searchTerm = ref<string>('')\n\n /**\n * Clears all selected nodes. Can be used to reset the selections to the initial state.\n */\n const clearAllSelectedNodes = () => {\n selectedNodes.clear()\n selectedNodeObjects.length = 0\n }\n\n /**\n * Collapses all expanded nodes. Can be used to reset the tree to the initial state.\n */\n const collapseAllExpandedNodes = () => expandedNodes.clear()\n\n /**\n * Returns true if the node is selected\n */\n const isNodeSelected = (nodeId: NodeId) => selectedNodes.has(nodeId)\n\n /**\n * Returns true if the node is expanded\n */\n const isNodeExpanded = (nodeId: NodeId) => expandedNodes.has(nodeId)\n\n /**\n * Expands the specific node\n */\n const expandNode = (nodeId: NodeId) => expandedNodes.add(nodeId)\n\n /**\n * Collapses the specific node\n */\n const collapseNode = (nodeId: NodeId) => expandedNodes.delete(nodeId)\n\n /**\n * Selects the specific node and adds it to the selectedNodeObjects array.\n * Used to access the node object and it's underlying data\n */\n const injectNode = (nodeObject: TreeNode) => {\n selectedNodes.add(nodeObject.nodeId)\n selectedNodeObjects.push(nodeObject)\n }\n\n /**\n * Expands all children of the specific node\n */\n const expandAllChildren = (node: TreeNode) => {\n expandNode(node.nodeId)\n if (node.children && node.children.length > 0) {\n node.children.forEach(expandAllChildren)\n }\n }\n\n /**\n * Selects this node and recursively selects all children nodes\n */\n const selectAllChildren = (node: TreeNode) => {\n // Deselect all children to avoid duplicates\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectAllChildren)\n }\n\n // Inject the current node\n injectNode(node)\n\n if (node.children && node.children.length > 0) {\n node.children.forEach(selectAllChildren)\n }\n\n // Only expand children if the option is enabled\n if (options.expandChildrenOnParentCheck) {\n expandAllChildren(node)\n }\n }\n\n /**\n * Deselects the specific node\n */\n const deselectNode = (nodeId: NodeId) => {\n selectedNodes.delete(nodeId)\n const index = selectedNodeObjects.findIndex((node) => node.nodeId === nodeId)\n\n if (index > -1) {\n selectedNodeObjects.splice(index, 1)\n }\n }\n\n /**\n * Deselects this node and recursively deselects all children nodes\n */\n const deselectAllChildren = (node: TreeNode) => {\n // Remove the current node\n deselectNode(node.nodeId)\n\n // Recursively remove all children\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectAllChildren)\n }\n }\n\n /**\n * Finds a node by ID\n */\n const findNodeById = (nodes: TreeNodeArray, nodeId: string): TreeNodeItem | null => {\n for (const node of nodes) {\n if (node.nodeId === nodeId) {\n return node\n }\n if (node.children) {\n const found = findNodeById(node.children, nodeId)\n if (found) return found\n }\n }\n return null\n }\n\n /**\n * Checks if a node has children\n */\n const hasChildrenNodes = (nodes: TreeNodeArray) => nodes.length > 0\n\n /**\n * Checks if a node is indeterminate (partially selected)\n */\n const isNodeIndeterminate = (nodes: TreeNodeArray, parentNodeId?: string): boolean => {\n if (!hasChildrenNodes(nodes)) return false\n\n // Check each child's state\n const childStates = nodes.map((node) => ({\n isSelected: selectedNodes.has(node.nodeId),\n isIndeterminate:\n node.children && node.children.length > 0\n ? isNodeIndeterminate(node.children, node.nodeId)\n : false,\n }))\n\n const hasSelected = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) => child.isSelected,\n )\n const hasUnselected = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) =>\n !child.isSelected && !child.isIndeterminate,\n )\n const hasIndeterminate = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) => child.isIndeterminate,\n )\n\n // If parent is selected, never show indeterminate\n if (parentNodeId && selectedNodes.has(parentNodeId)) return false\n\n // Standard behavior: some selected + some unselected, OR any child is indeterminate\n if (!options.showIndeterminateOnlyOnChildrenSelection) {\n return (hasSelected && hasUnselected) || hasIndeterminate\n }\n\n // Special behavior: any child selected OR any child indeterminate\n return hasSelected || hasIndeterminate\n }\n\n /**\n * Toggles the selection state of the specific node\n */\n const toggleSelectNode = (\n nodes: TreeNodeArray,\n nodeId: string,\n title?: string,\n data?: Record<string, unknown>,\n ) => {\n let node = findNodeById(nodes, nodeId)\n\n if (!node && nodeId) {\n node = {\n nodeId: nodeId,\n title: title,\n children: nodes || [],\n data: data,\n }\n }\n\n if (!node) return\n\n if (selectedNodes.has(nodeId)) {\n deselectAllChildren(node)\n } else {\n selectAllChildren(node)\n\n if (\n selectedNodes.has(nodeId) &&\n !expandedNodes.has(nodeId) &&\n options.expandChildrenOnParentCheck\n ) {\n toggleExpandNode(nodeId, nodes)\n }\n }\n }\n\n /**\n * Toggles the expansion state of the specific node\n */\n const toggleExpandNode = (nodeId: NodeId, nodes: TreeNodeArray) => {\n if (isNodeExpanded(nodeId)) {\n collapseNode(nodeId)\n } else {\n if (!hasChildrenNodes(nodes)) return\n expandNode(nodeId)\n }\n }\n\n /**\n * Gets the icons for expanded and collapsed nodes\n */\n const getNodeIcon = (\n nodeId: NodeId,\n nodes: TreeNodeArray,\n expandIcon: string,\n collapseIcon: string,\n ) => {\n return isNodeExpanded(nodeId) && hasChildrenNodes(nodes) ? collapseIcon : expandIcon\n }\n\n /**\n * Checks if a node matches the search term by searching through specified properties\n */\n const nodeMatchesSearch = (node: TreeNode, term: string, searchParams?: string[]): boolean => {\n if (!term.trim()) return true\n if (!searchParams || !Array.isArray(searchParams)) return false\n\n const searchLower = term.toLowerCase()\n\n for (const param of searchParams) {\n if (param === 'title' && node.title?.toLowerCase().includes(searchLower)) return true\n if (param === 'nodeId' && node.nodeId.toLowerCase().includes(searchLower)) return true\n\n // Check nested data properties\n if (node.data && typeof node.data === 'object') {\n const value = (node.data as Record<string, unknown>)[param]\n if (value && String(value).toLowerCase().includes(searchLower)) return true\n }\n }\n\n return false\n }\n\n /**\n * Filters nodes based on search term, including children that match\n */\n const filterNodes = (\n nodes: TreeNodeArray,\n term: string,\n searchParams?: string[],\n ): TreeNodeArray => {\n if (!term.trim()) return nodes\n\n const filtered: TreeNodeArray = []\n\n for (const node of nodes) {\n const nodeMatches = nodeMatchesSearch(node, term, searchParams)\n const filteredChildren = node.children ? filterNodes(node.children, term, searchParams) : []\n\n // Include node if it matches OR has matching children\n if (nodeMatches || filteredChildren.length > 0) {\n filtered.push({\n ...node,\n children: filteredChildren.length > 0 ? filteredChildren : node.children,\n })\n }\n }\n\n return filtered\n }\n\n /**\n * Sets the search term\n */\n const setSearchTerm = (term: string) => {\n searchTerm.value = term\n }\n\n /**\n * Clears the search term\n */\n const clearSearch = () => {\n searchTerm.value = ''\n }\n\n return {\n selectedNodes,\n selectedNodeObjects,\n expandedNodes,\n searchTerm,\n clearAllSelectedNodes,\n collapseAllExpandedNodes,\n isNodeSelected,\n isNodeExpanded,\n injectNode,\n selectAllChildren,\n deselectNode,\n deselectAllChildren,\n expandNode,\n collapseNode,\n expandAllChildren,\n findNodeById,\n hasChildrenNodes,\n isNodeIndeterminate,\n toggleSelectNode,\n toggleExpandNode,\n getNodeIcon,\n nodeMatchesSearch,\n filterNodes,\n setSearchTerm,\n clearSearch,\n }\n}\n\nexport default useTreeState\n","<script setup lang=\"ts\">\nimport { computed, inject, reactive, provide, watch } from 'vue'\nimport useTreeState from './useTreeState'\nimport type { TreeViewProps } from './types.ts'\n\ntype Props<T = Record<string, unknown>> = TreeViewProps<T>\n\nconst props = withDefaults(defineProps<Props>(), {\n nodes: () => [],\n depth: 0,\n showNodeDescription: false,\n showChildrenCount: false,\n expandChildrenOnSelect: false,\n showIndeterminate: false,\n expandChildrenOnParentCheck: false,\n expandAllChildrenOnParentCheck: true,\n showIndeterminateOnlyOnChildrenSelection: false,\n searchEnabled: false,\n searchExpandNodes: false,\n horizontalScroll: false,\n searchMatchParams: () => ['title', 'nodeId'],\n})\n\ndefineOptions({\n name: 'FdsTreeView',\n})\n\nconst isRootComponent = props.depth === 0\nconst injectedTreeState = inject<ReturnType<typeof useTreeState> | null>('treeState', null)\n\nlet treeState: ReturnType<typeof useTreeState>\nif (isRootComponent) {\n // This is the root component, create and provide treeState with props\n treeState = useTreeState({\n expandChildrenOnParentCheck: props.expandChildrenOnParentCheck,\n expandAllChildrenOnParentCheck: props.expandAllChildrenOnParentCheck,\n showIndeterminateOnlyOnChildrenSelection: props.showIndeterminateOnlyOnChildrenSelection,\n })\n provide('treeState', treeState)\n} else {\n // This is a child component, use injected treeState\n treeState = injectedTreeState!\n}\n\nconst expandedNodes = treeState?.expandedNodes ?? reactive(new Set())\n\nconst indentValue = props.depth * props.indentation\n\nconst indent = computed(() => ({\n display: 'flex',\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n transform: `translate(${indentValue}px)`,\n}))\n\nconst hasChildrenNodes = computed(() => {\n const nodesToCheck =\n props.searchEnabled && treeState?.searchTerm?.value ? filteredNodes.value : props.nodes\n return treeState?.hasChildrenNodes(nodesToCheck) ?? false\n})\n\nconst isIndeterminate = computed(\n () => treeState?.isNodeIndeterminate(props.nodes, props.nodeId) ?? false,\n)\n\nconst filteredNodes = computed(() => {\n if (!props.searchEnabled || !treeState?.searchTerm?.value) {\n return props.nodes\n }\n return treeState.filterNodes(props.nodes, treeState.searchTerm.value, props.searchMatchParams)\n})\n\n// Auto-expand nodes when searching\nwatch(\n () => treeState?.searchTerm?.value,\n (newSearchTerm) => {\n if (props.searchEnabled && props.searchExpandNodes && newSearchTerm && newSearchTerm.trim()) {\n // Expand all nodes that have matching children\n const expandMatchingNodes = (nodes: typeof props.nodes) => {\n nodes.forEach((node) => {\n if (node.children && node.children.length > 0) {\n const hasMatchingChildren =\n treeState?.filterNodes(node.children, newSearchTerm, props.searchMatchParams).length >\n 0\n if (hasMatchingChildren) {\n treeState?.expandNode(node.nodeId)\n }\n expandMatchingNodes(node.children)\n }\n })\n }\n\n // Auto-expand nodes that have matching children\n if (props.nodes && props.nodes.length > 0) {\n const hasMatchingChildren =\n treeState?.filterNodes(props.nodes, newSearchTerm, props.searchMatchParams).length > 0\n if (hasMatchingChildren) {\n treeState?.expandNode(props.nodeId)\n }\n }\n\n // Also expand individual child nodes recursively\n expandMatchingNodes(props.nodes)\n }\n },\n { immediate: false },\n)\n</script>\n\n<template>\n <div :class=\"props?.style?.container\">\n <div v-if=\"isRootComponent && searchEnabled\" class=\"mb-4\">\n <fds-input\n :value=\"treeState?.searchTerm || ''\"\n @input=\"treeState?.setSearchTerm($event.target.value)\"\n class=\"w-full\"\n :label=\"searchLabel\"\n >\n <input id=\"tree-view-search-input\" />\n </fds-input>\n </div>\n\n <div :class=\"isRootComponent && horizontalScroll ? 'overflow-x-auto' : ''\">\n <div :class=\"'bg-white-solid p-2 rounded-md'\">\n <div :style=\"indent\">\n <div class=\"flex\">\n <fds-icon\n v-if=\"hasChildrenNodes\"\n @click=\"treeState?.toggleExpandNode(props.nodeId, props.nodes)\"\n :name=\"\n treeState?.getNodeIcon(\n props.nodeId,\n props.nodes,\n props.nodeExpandIcon,\n props.nodeCollapseIcon,\n ) ?? props.nodeExpandIcon\n \"\n size=\"24px\"\n class=\"text-blue-500 mr-3\"\n style=\"margin-top: 3px\"\n />\n <div v-if=\"!hasChildrenNodes\" :style=\"{ width: `${indentation}px` }\" />\n\n <fds-checkbox class=\"pl-0 flex-1 flex items-center\">\n <input\n :id=\"`checkbox-${props.nodeId}`\"\n style=\"margin: 0px; margin-top: 3px\"\n type=\"checkbox\"\n :checked=\"treeState?.isNodeSelected(props.nodeId)\"\n :indeterminate=\"showIndeterminate && isIndeterminate\"\n @change=\"\n treeState?.toggleSelectNode(props.nodes, props.nodeId, props.title, props.data)\n \"\n />\n <label :for=\"`checkbox-${props.nodeId}`\" class=\"flex flex-col pl-0\">\n <div>\n <fds-text v-if=\"title\" type=\"default\">{{ title }}</fds-text>\n <span v-if=\"showChildrenCount && hasChildrenNodes\">\n (+{{ props.nodes.length }})\n </span>\n </div>\n <fds-text v-if=\"showNodeDescription\" type=\"meta\" class=\"flex-1\">\n {{ props.nodeId }}\n </fds-text>\n </label>\n </fds-checkbox>\n </div>\n </div>\n\n <div v-if=\"expandedNodes.has(props.nodeId)\">\n <FdsTreeView\n v-for=\"child in filteredNodes\"\n :key=\"child.nodeId\"\n :nodes=\"child.children || []\"\n :title=\"child.title\"\n :nodeId=\"child.nodeId\"\n :data=\"child.data\"\n :depth=\"props.depth + 1\"\n :indentation=\"props.indentation\"\n :nodeExpandIcon=\"props.nodeExpandIcon\"\n :nodeCollapseIcon=\"props.nodeCollapseIcon\"\n :showNodeDescription=\"showNodeDescription\"\n :showChildrenCount=\"showChildrenCount\"\n :expandChildrenOnSelect=\"expandChildrenOnSelect\"\n :showIndeterminate=\"showIndeterminate\"\n :showIndeterminateOnlyOnChildrenSelection=\"showIndeterminateOnlyOnChildrenSelection\"\n :expandChildrenOnParentCheck=\"expandChildrenOnParentCheck\"\n :expandAllChildrenOnParentCheck=\"expandAllChildrenOnParentCheck\"\n :searchEnabled=\"searchEnabled\"\n :searchExpandNodes=\"searchExpandNodes\"\n :searchMatchParams=\"searchMatchParams\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n","import type { App } from 'vue'\n\n// Import all components\nimport FdsTreeView from './components/fds-tree-view/FdsTreeView.vue'\n\n// Import composables\nimport useTreeState from './components/fds-tree-view/useTreeState'\n\n// Export individual components\nexport { FdsTreeView }\n\n// Export composables\nexport { useTreeState }\n\n// Export component library plugin\nexport default {\n install(app: App) {\n // Register all components globally\n app.component('FdsTreeView', FdsTreeView)\n },\n}\n\nexport type {\n TreeNode,\n TreeNodeArray,\n TreeNodeItem,\n TreeViewProps,\n NodeId,\n} from './components/fds-tree-view/types.js'\n\nimport type { TreeViewProps } from './components/fds-tree-view/types.js'\nexport type FdsTreeViewProps<T = Record<string, unknown>> = TreeViewProps<T>\n"],"names":["reactive","ref","index","inject","provide","computed","watch","_createElementBlock","_normalizeClass","searchEnabled","_openBlock","_createElementVNode","_unref","searchLabel","horizontalScroll","indentation","showIndeterminate","title","_toDisplayString","showChildrenCount","showNodeDescription","_Fragment","_renderList","_createBlock","expandChildrenOnSelect","showIndeterminateOnlyOnChildrenSelection","expandChildrenOnParentCheck","expandAllChildrenOnParentCheck","searchExpandNodes","searchMatchParams","FdsTreeView"],"mappings":";;;AASA,MAAM,eAAe,CAAC,UAA4B,OAAO;AAIvD,QAAM,gBAAgBA,IAAAA,SAAsB,oBAAI,KAAK;AAIrD,QAAM,sBAAsBA,IAAAA,SAAqB,EAAE;AAInD,QAAM,gBAAgBA,IAAAA,SAAsB,oBAAI,KAAK;AAIrD,QAAM,aAAaC,IAAAA,IAAY,EAAE;AAKjC,QAAM,wBAAwB,MAAM;AAClC,kBAAc,MAAA;AACd,wBAAoB,SAAS;AAAA,EAC/B;AAKA,QAAM,2BAA2B,MAAM,cAAc,MAAA;AAKrD,QAAM,iBAAiB,CAAC,WAAmB,cAAc,IAAI,MAAM;AAKnE,QAAM,iBAAiB,CAAC,WAAmB,cAAc,IAAI,MAAM;AAKnE,QAAM,aAAa,CAAC,WAAmB,cAAc,IAAI,MAAM;AAK/D,QAAM,eAAe,CAAC,WAAmB,cAAc,OAAO,MAAM;AAMpE,QAAM,aAAa,CAAC,eAAyB;AAC3C,kBAAc,IAAI,WAAW,MAAM;AACnC,wBAAoB,KAAK,UAAU;AAAA,EACrC;AAKA,QAAM,oBAAoB,CAAC,SAAmB;AAC5C,eAAW,KAAK,MAAM;AACtB,QAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,WAAK,SAAS,QAAQ,iBAAiB;AAAA,IACzC;AAAA,EACF;AAKA,QAAM,oBAAoB,CAAC,SAAmB;AAE5C,QAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,WAAK,SAAS,QAAQ,mBAAmB;AAAA,IAC3C;AAGA,eAAW,IAAI;AAEf,QAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,WAAK,SAAS,QAAQ,iBAAiB;AAAA,IACzC;AAGA,QAAI,QAAQ,6BAA6B;AACvC,wBAAkB,IAAI;AAAA,IACxB;AAAA,EACF;AAKA,QAAM,eAAe,CAAC,WAAmB;AACvC,kBAAc,OAAO,MAAM;AAC3B,UAAMC,SAAQ,oBAAoB,UAAU,CAAC,SAAS,KAAK,WAAW,MAAM;AAE5E,QAAIA,SAAQ,IAAI;AACd,0BAAoB,OAAOA,QAAO,CAAC;AAAA,IACrC;AAAA,EACF;AAKA,QAAM,sBAAsB,CAAC,SAAmB;AAE9C,iBAAa,KAAK,MAAM;AAGxB,QAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,WAAK,SAAS,QAAQ,mBAAmB;AAAA,IAC3C;AAAA,EACF;AAKA,QAAM,eAAe,CAAC,OAAsB,WAAwC;AAClF,eAAW,QAAQ,OAAO;AACxB,UAAI,KAAK,WAAW,QAAQ;AAC1B,eAAO;AAAA,MACT;AACA,UAAI,KAAK,UAAU;AACjB,cAAM,QAAQ,aAAa,KAAK,UAAU,MAAM;AAChD,YAAI,MAAO,QAAO;AAAA,MACpB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAKA,QAAM,mBAAmB,CAAC,UAAyB,MAAM,SAAS;AAKlE,QAAM,sBAAsB,CAAC,OAAsB,iBAAmC;AACpF,QAAI,CAAC,iBAAiB,KAAK,EAAG,QAAO;AAGrC,UAAM,cAAc,MAAM,IAAI,CAAC,UAAU;AAAA,MACvC,YAAY,cAAc,IAAI,KAAK,MAAM;AAAA,MACzC,iBACE,KAAK,YAAY,KAAK,SAAS,SAAS,IACpC,oBAAoB,KAAK,UAAU,KAAK,MAAM,IAC9C;AAAA,IAAA,EACN;AAEF,UAAM,cAAc,YAAY;AAAA,MAC9B,CAAC,UAA6D,MAAM;AAAA,IAAA;AAEtE,UAAM,gBAAgB,YAAY;AAAA,MAChC,CAAC,UACC,CAAC,MAAM,cAAc,CAAC,MAAM;AAAA,IAAA;AAEhC,UAAM,mBAAmB,YAAY;AAAA,MACnC,CAAC,UAA6D,MAAM;AAAA,IAAA;AAItE,QAAI,gBAAgB,cAAc,IAAI,YAAY,EAAG,QAAO;AAG5D,QAAI,CAAC,QAAQ,0CAA0C;AACrD,aAAQ,eAAe,iBAAkB;AAAA,IAC3C;AAGA,WAAO,eAAe;AAAA,EACxB;AAKA,QAAM,mBAAmB,CACvB,OACA,QACA,OACA,SACG;AACH,QAAI,OAAO,aAAa,OAAO,MAAM;AAErC,QAAI,CAAC,QAAQ,QAAQ;AACnB,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,UAAU,SAAS,CAAA;AAAA,QACnB;AAAA,MAAA;AAAA,IAEJ;AAEA,QAAI,CAAC,KAAM;AAEX,QAAI,cAAc,IAAI,MAAM,GAAG;AAC7B,0BAAoB,IAAI;AAAA,IAC1B,OAAO;AACL,wBAAkB,IAAI;AAEtB,UACE,cAAc,IAAI,MAAM,KACxB,CAAC,cAAc,IAAI,MAAM,KACzB,QAAQ,6BACR;AACA,yBAAiB,QAAQ,KAAK;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAKA,QAAM,mBAAmB,CAAC,QAAgB,UAAyB;AACjE,QAAI,eAAe,MAAM,GAAG;AAC1B,mBAAa,MAAM;AAAA,IACrB,OAAO;AACL,UAAI,CAAC,iBAAiB,KAAK,EAAG;AAC9B,iBAAW,MAAM;AAAA,IACnB;AAAA,EACF;AAKA,QAAM,cAAc,CAClB,QACA,OACA,YACA,iBACG;AACH,WAAO,eAAe,MAAM,KAAK,iBAAiB,KAAK,IAAI,eAAe;AAAA,EAC5E;AAKA,QAAM,oBAAoB,CAAC,MAAgB,MAAc,iBAAqC;AAC5F,QAAI,CAAC,KAAK,KAAA,EAAQ,QAAO;AACzB,QAAI,CAAC,gBAAgB,CAAC,MAAM,QAAQ,YAAY,EAAG,QAAO;AAE1D,UAAM,cAAc,KAAK,YAAA;AAEzB,eAAW,SAAS,cAAc;AAChC,UAAI,UAAU,WAAW,KAAK,OAAO,cAAc,SAAS,WAAW,EAAG,QAAO;AACjF,UAAI,UAAU,YAAY,KAAK,OAAO,cAAc,SAAS,WAAW,EAAG,QAAO;AAGlF,UAAI,KAAK,QAAQ,OAAO,KAAK,SAAS,UAAU;AAC9C,cAAM,QAAS,KAAK,KAAiC,KAAK;AAC1D,YAAI,SAAS,OAAO,KAAK,EAAE,cAAc,SAAS,WAAW,EAAG,QAAO;AAAA,MACzE;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAKA,QAAM,cAAc,CAClB,OACA,MACA,iBACkB;AAClB,QAAI,CAAC,KAAK,KAAA,EAAQ,QAAO;AAEzB,UAAM,WAA0B,CAAA;AAEhC,eAAW,QAAQ,OAAO;AACxB,YAAM,cAAc,kBAAkB,MAAM,MAAM,YAAY;AAC9D,YAAM,mBAAmB,KAAK,WAAW,YAAY,KAAK,UAAU,MAAM,YAAY,IAAI,CAAA;AAG1F,UAAI,eAAe,iBAAiB,SAAS,GAAG;AAC9C,iBAAS,KAAK;AAAA,UACZ,GAAG;AAAA,UACH,UAAU,iBAAiB,SAAS,IAAI,mBAAmB,KAAK;AAAA,QAAA,CACjE;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAKA,QAAM,gBAAgB,CAAC,SAAiB;AACtC,eAAW,QAAQ;AAAA,EACrB;AAKA,QAAM,cAAc,MAAM;AACxB,eAAW,QAAQ;AAAA,EACrB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3UA,UAAM,QAAQ;AAoBd,UAAM,kBAAkB,MAAM,UAAU;AACxC,UAAM,oBAAoBC,IAAAA,OAA+C,aAAa,IAAI;AAE1F,QAAI;AACJ,QAAI,iBAAiB;AAEnB,kBAAY,aAAa;AAAA,QACvB,6BAA6B,MAAM;AAAA,QACnC,gCAAgC,MAAM;AAAA,QACtC,0CAA0C,MAAM;AAAA,MAAA,CACjD;AACDC,UAAAA,QAAQ,aAAa,SAAS;AAAA,IAChC,OAAO;AAEL,kBAAY;AAAA,IACd;AAEA,UAAM,gBAAgB,WAAW,iBAAiBJ,IAAAA,SAAS,oBAAI,KAAK;AAEpE,UAAM,cAAc,MAAM,QAAQ,MAAM;AAExC,UAAM,SAASK,IAAAA,SAAS,OAAO;AAAA,MAC7B,SAAS;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,WAAW,aAAa,WAAW;AAAA,IAAA,EACnC;AAEF,UAAM,mBAAmBA,IAAAA,SAAS,MAAM;AACtC,YAAM,eACJ,MAAM,iBAAiB,WAAW,YAAY,QAAQ,cAAc,QAAQ,MAAM;AACpF,aAAO,WAAW,iBAAiB,YAAY,KAAK;AAAA,IACtD,CAAC;AAED,UAAM,kBAAkBA,IAAAA;AAAAA,MACtB,MAAM,WAAW,oBAAoB,MAAM,OAAO,MAAM,MAAM,KAAK;AAAA,IAAA;AAGrE,UAAM,gBAAgBA,IAAAA,SAAS,MAAM;AACnC,UAAI,CAAC,MAAM,iBAAiB,CAAC,WAAW,YAAY,OAAO;AACzD,eAAO,MAAM;AAAA,MACf;AACA,aAAO,UAAU,YAAY,MAAM,OAAO,UAAU,WAAW,OAAO,MAAM,iBAAiB;AAAA,IAC/F,CAAC;AAGDC,QAAAA;AAAAA,MACE,MAAM,WAAW,YAAY;AAAA,MAC7B,CAAC,kBAAkB;AACjB,YAAI,MAAM,iBAAiB,MAAM,qBAAqB,iBAAiB,cAAc,QAAQ;AAE3F,gBAAM,sBAAsB,CAAC,UAA8B;AACzD,kBAAM,QAAQ,CAAC,SAAS;AACtB,kBAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,sBAAM,sBACJ,WAAW,YAAY,KAAK,UAAU,eAAe,MAAM,iBAAiB,EAAE,SAC9E;AACF,oBAAI,qBAAqB;AACvB,6BAAW,WAAW,KAAK,MAAM;AAAA,gBACnC;AACA,oCAAoB,KAAK,QAAQ;AAAA,cACnC;AAAA,YACF,CAAC;AAAA,UACH;AAGA,cAAI,MAAM,SAAS,MAAM,MAAM,SAAS,GAAG;AACzC,kBAAM,sBACJ,WAAW,YAAY,MAAM,OAAO,eAAe,MAAM,iBAAiB,EAAE,SAAS;AACvF,gBAAI,qBAAqB;AACvB,yBAAW,WAAW,MAAM,MAAM;AAAA,YACpC;AAAA,UACF;AAGA,8BAAoB,MAAM,KAAK;AAAA,QACjC;AAAA,MACF;AAAA,MACA,EAAE,WAAW,MAAA;AAAA,IAAM;;;8BAKnBC,IAAAA,mBAqFM,OAAA;AAAA,QArFA,OAAKC,IAAAA,eAAE,OAAO,OAAO,SAAS;AAAA,MAAA;QACvB,mBAAmBC,KAAAA,iBAA9BC,IAAAA,aAAAH,IAAAA,mBASM,OATN,YASM;AAAA,UARJI,IAAAA,mBAOY,aAAA;AAAA,YANT,OAAOC,IAAAA,MAAA,SAAA,GAAW,cAAU;AAAA,YAC5B,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAEA,IAAAA,kBAAW,cAAc,OAAO,OAAO,KAAK;AAAA,YACpD,OAAM;AAAA,YACL,OAAOC,KAAAA;AAAAA,UAAAA;YAERF,IAAAA,mBAAqC,SAAA,EAA9B,IAAG,yBAAA,GAAwB,MAAA,EAAA;AAAA,UAAA;;QAItCA,IAAAA,mBAwEM,OAAA;AAAA,UAxEA,OAAKH,IAAAA,eAAE,mBAAmBM,KAAAA,mBAAgB,oBAAA,EAAA;AAAA,QAAA;UAC9CH,IAAAA,mBAsEM,OAtEN,YAsEM;AAAA,YArEJA,IAAAA,mBA2CM,OAAA;AAAA,cA3CA,0BAAO,OAAA,KAAM;AAAA,YAAA;cACjBA,IAAAA,mBAyCM,OAzCN,YAyCM;AAAA,gBAvCI,iBAAA,0BADRJ,IAAAA,mBAcE,YAAA;AAAA;kBAZC,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAEK,IAAAA,MAAA,SAAA,GAAW,iBAAiB,MAAM,QAAQ,MAAM,KAAK;AAAA,kBAC5D,MAAuBA,IAAAA,MAAA,SAAA,GAAW;AAAA,oBAA+B,MAAM;AAAA,oBAA0B,MAAM;AAAA,oBAAyB,MAAM;AAAA,oBAAkC,MAAM;AAAA,kBAAA,KAAuC,MAAM;AAAA,kBAQ5N,MAAK;AAAA,kBACL,OAAM;AAAA,kBACN,OAAA,EAAA,cAAA,MAAA;AAAA,gBAAA;iBAEU,iBAAA,0BAAZL,IAAAA,mBAAuE,OAAA;AAAA;kBAAxC,sCAAmBQ,KAAAA,WAAW,MAAA;AAAA,gBAAA;gBAE7DJ,IAAAA,mBAsBe,gBAtBf,YAsBe;AAAA,kBArBbA,IAAAA,mBASE,SAAA;AAAA,oBARC,IAAE,YAAc,MAAM,MAAM;AAAA,oBAC7B,OAAA,EAAA,UAAA,OAAA,cAAA,MAAA;AAAA,oBACA,MAAK;AAAA,oBACJ,SAASC,IAAAA,MAAA,SAAA,GAAW,eAAe,MAAM,MAAM;AAAA,oBAC/C,eAAeI,KAAAA,qBAAqB,gBAAA;AAAA,oBACpC,UAAM,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAqBJ,UAAA,SAAA,GAAW,iBAAiB,MAAM,OAAO,MAAM,QAAQ,MAAM,OAAO,MAAM,IAAI;AAAA,kBAAA;kBAI5GD,IAAAA,mBAUQ,SAAA;AAAA,oBAVA,KAAG,YAAc,MAAM,MAAM;AAAA,oBAAI,OAAM;AAAA,kBAAA;oBAC7CA,IAAAA,mBAKM,OAAA,MAAA;AAAA,sBAJYM,KAAAA,0BAAhBV,IAAAA,mBAA4D,YAA5D,YAA4DW,IAAAA,gBAAnBD,KAAAA,KAAK,GAAA,CAAA;sBAClCE,KAAAA,qBAAqB,iBAAA,0BAAjCZ,IAAAA,mBAEO,QAAA,aAF4C,QAC/CW,IAAAA,gBAAG,MAAM,MAAM,MAAM,IAAG,MAC5B,CAAA;;oBAEcE,KAAAA,uBAAhBV,IAAAA,UAAA,GAAAH,IAAAA,mBAEW,YAFX,aAEWW,IAAAA,gBADN,MAAM,MAAM,GAAA,CAAA;;;;;YAOdN,IAAAA,MAAA,aAAA,EAAc,IAAI,MAAM,MAAM,sBAAzCL,IAAAA,mBAuBM,OAAA,aAAA;AAAA,oCAtBJA,IAAAA,mBAqBEc,IAAAA,UAAA,MAAAC,IAAAA,WApBgB,cAAA,OAAa,CAAtB,UAAK;wCADdC,IAAAA,YAqBE,wBAAA;AAAA,kBAnBC,KAAK,MAAM;AAAA,kBACX,OAAO,MAAM,YAAQ,CAAA;AAAA,kBACrB,OAAO,MAAM;AAAA,kBACb,QAAQ,MAAM;AAAA,kBACd,MAAM,MAAM;AAAA,kBACZ,OAAO,MAAM,QAAK;AAAA,kBAClB,aAAa,MAAM;AAAA,kBACnB,gBAAgB,MAAM;AAAA,kBACtB,kBAAkB,MAAM;AAAA,kBACxB,qBAAqBH,KAAAA;AAAAA,kBACrB,mBAAmBD,KAAAA;AAAAA,kBACnB,wBAAwBK,KAAAA;AAAAA,kBACxB,mBAAmBR,KAAAA;AAAAA,kBACnB,0CAA0CS,KAAAA;AAAAA,kBAC1C,6BAA6BC,KAAAA;AAAAA,kBAC7B,gCAAgCC,KAAAA;AAAAA,kBAChC,eAAelB,KAAAA;AAAAA,kBACf,mBAAmBmB,KAAAA;AAAAA,kBACnB,mBAAmBC,KAAAA;AAAAA,gBAAAA;;;;;;;;;AC/KhC,MAAA,QAAe;AAAA,EACb,QAAQ,KAAU;AAEhB,QAAI,UAAU,eAAeC,SAAW;AAAA,EAC1C;AACF;;;;"}
@@ -1,4 +1,4 @@
1
- import { reactive, ref, defineComponent, inject, provide, computed, watch, resolveComponent, createElementBlock, openBlock, createCommentVNode, createElementVNode, unref, normalizeClass, normalizeStyle, toDisplayString, Fragment, renderList, createBlock } from "vue";
1
+ import { reactive, ref, defineComponent, inject, provide, computed, watch, resolveComponent, createElementBlock, openBlock, normalizeClass, createCommentVNode, createElementVNode, unref, normalizeStyle, toDisplayString, Fragment, renderList, createBlock } from "vue";
2
2
  const useTreeState = (options = {}) => {
3
3
  const selectedNodes = reactive(/* @__PURE__ */ new Set());
4
4
  const selectedNodeObjects = reactive([]);
@@ -181,22 +181,25 @@ const _hoisted_1 = {
181
181
  class: "mb-4"
182
182
  };
183
183
  const _hoisted_2 = ["value", "label"];
184
- const _hoisted_3 = { class: "flex" };
185
- const _hoisted_4 = ["name"];
186
- const _hoisted_5 = { class: "pl-0 flex-1 flex items-center" };
187
- const _hoisted_6 = ["id", "checked", "indeterminate"];
188
- const _hoisted_7 = ["for"];
189
- const _hoisted_8 = {
184
+ const _hoisted_3 = {
185
+ class: /* @__PURE__ */ normalizeClass("bg-white-solid p-2 rounded-md")
186
+ };
187
+ const _hoisted_4 = { class: "flex" };
188
+ const _hoisted_5 = ["name"];
189
+ const _hoisted_6 = { class: "pl-0 flex-1 flex items-center" };
190
+ const _hoisted_7 = ["id", "checked", "indeterminate"];
191
+ const _hoisted_8 = ["for"];
192
+ const _hoisted_9 = {
190
193
  key: 0,
191
194
  type: "default"
192
195
  };
193
- const _hoisted_9 = { key: 1 };
194
- const _hoisted_10 = {
196
+ const _hoisted_10 = { key: 1 };
197
+ const _hoisted_11 = {
195
198
  key: 0,
196
199
  type: "meta",
197
200
  class: "flex-1"
198
201
  };
199
- const _hoisted_11 = { key: 0 };
202
+ const _hoisted_12 = { key: 0 };
200
203
  const _sfc_main = /* @__PURE__ */ defineComponent({
201
204
  ...{
202
205
  name: "FdsTreeView"
@@ -221,7 +224,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
221
224
  searchEnabled: { type: Boolean, default: false },
222
225
  searchLabel: {},
223
226
  searchMatchParams: { default: () => ["title", "nodeId"] },
224
- searchExpandNodes: { type: Boolean, default: false }
227
+ searchExpandNodes: { type: Boolean, default: false },
228
+ horizontalScroll: { type: Boolean, default: false },
229
+ style: {}
225
230
  },
226
231
  setup(__props) {
227
232
  const props = __props;
@@ -287,7 +292,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
287
292
  );
288
293
  return (_ctx, _cache) => {
289
294
  const _component_FdsTreeView = resolveComponent("FdsTreeView", true);
290
- return openBlock(), createElementBlock("div", null, [
295
+ return openBlock(), createElementBlock("div", {
296
+ class: normalizeClass(props?.style?.container)
297
+ }, [
291
298
  isRootComponent && _ctx.searchEnabled ? (openBlock(), createElementBlock("div", _hoisted_1, [
292
299
  createElementVNode("fds-input", {
293
300
  value: unref(treeState)?.searchTerm || "",
@@ -299,15 +306,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
299
306
  ])], 40, _hoisted_2)
300
307
  ])) : createCommentVNode("", true),
301
308
  createElementVNode("div", {
302
- class: normalizeClass({ "overflow-x-auto": isRootComponent })
309
+ class: normalizeClass(isRootComponent && _ctx.horizontalScroll ? "overflow-x-auto" : "")
303
310
  }, [
304
- createElementVNode("div", {
305
- class: normalizeClass({ "bg-white-solid p-2 rounded-md min-w-max": isRootComponent })
306
- }, [
311
+ createElementVNode("div", _hoisted_3, [
307
312
  createElementVNode("div", {
308
313
  style: normalizeStyle(indent.value)
309
314
  }, [
310
- createElementVNode("div", _hoisted_3, [
315
+ createElementVNode("div", _hoisted_4, [
311
316
  hasChildrenNodes.value ? (openBlock(), createElementBlock("fds-icon", {
312
317
  key: 0,
313
318
  onClick: _cache[1] || (_cache[1] = ($event) => unref(treeState)?.toggleExpandNode(props.nodeId, props.nodes)),
@@ -320,12 +325,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
320
325
  size: "24px",
321
326
  class: "text-blue-500 mr-3",
322
327
  style: { "margin-top": "3px" }
323
- }, null, 8, _hoisted_4)) : createCommentVNode("", true),
328
+ }, null, 8, _hoisted_5)) : createCommentVNode("", true),
324
329
  !hasChildrenNodes.value ? (openBlock(), createElementBlock("div", {
325
330
  key: 1,
326
331
  style: normalizeStyle({ width: `${_ctx.indentation}px` })
327
332
  }, null, 4)) : createCommentVNode("", true),
328
- createElementVNode("fds-checkbox", _hoisted_5, [
333
+ createElementVNode("fds-checkbox", _hoisted_6, [
329
334
  createElementVNode("input", {
330
335
  id: `checkbox-${props.nodeId}`,
331
336
  style: { "margin": "0px", "margin-top": "3px" },
@@ -333,21 +338,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
333
338
  checked: unref(treeState)?.isNodeSelected(props.nodeId),
334
339
  indeterminate: _ctx.showIndeterminate && isIndeterminate.value,
335
340
  onChange: _cache[2] || (_cache[2] = ($event) => unref(treeState)?.toggleSelectNode(props.nodes, props.nodeId, props.title, props.data))
336
- }, null, 40, _hoisted_6),
341
+ }, null, 40, _hoisted_7),
337
342
  createElementVNode("label", {
338
343
  for: `checkbox-${props.nodeId}`,
339
344
  class: "flex flex-col pl-0"
340
345
  }, [
341
346
  createElementVNode("div", null, [
342
- _ctx.title ? (openBlock(), createElementBlock("fds-text", _hoisted_8, toDisplayString(_ctx.title), 1)) : createCommentVNode("", true),
343
- _ctx.showChildrenCount && hasChildrenNodes.value ? (openBlock(), createElementBlock("span", _hoisted_9, " (+" + toDisplayString(props.nodes.length) + ") ", 1)) : createCommentVNode("", true)
347
+ _ctx.title ? (openBlock(), createElementBlock("fds-text", _hoisted_9, toDisplayString(_ctx.title), 1)) : createCommentVNode("", true),
348
+ _ctx.showChildrenCount && hasChildrenNodes.value ? (openBlock(), createElementBlock("span", _hoisted_10, " (+" + toDisplayString(props.nodes.length) + ") ", 1)) : createCommentVNode("", true)
344
349
  ]),
345
- _ctx.showNodeDescription ? (openBlock(), createElementBlock("fds-text", _hoisted_10, toDisplayString(props.nodeId), 1)) : createCommentVNode("", true)
346
- ], 8, _hoisted_7)
350
+ _ctx.showNodeDescription ? (openBlock(), createElementBlock("fds-text", _hoisted_11, toDisplayString(props.nodeId), 1)) : createCommentVNode("", true)
351
+ ], 8, _hoisted_8)
347
352
  ])
348
353
  ])
349
354
  ], 4),
350
- unref(expandedNodes).has(props.nodeId) ? (openBlock(), createElementBlock("div", _hoisted_11, [
355
+ unref(expandedNodes).has(props.nodeId) ? (openBlock(), createElementBlock("div", _hoisted_12, [
351
356
  (openBlock(true), createElementBlock(Fragment, null, renderList(filteredNodes.value, (child) => {
352
357
  return openBlock(), createBlock(_component_FdsTreeView, {
353
358
  key: child.nodeId,
@@ -372,9 +377,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
372
377
  }, null, 8, ["nodes", "title", "nodeId", "data", "depth", "indentation", "nodeExpandIcon", "nodeCollapseIcon", "showNodeDescription", "showChildrenCount", "expandChildrenOnSelect", "showIndeterminate", "showIndeterminateOnlyOnChildrenSelection", "expandChildrenOnParentCheck", "expandAllChildrenOnParentCheck", "searchEnabled", "searchExpandNodes", "searchMatchParams"]);
373
378
  }), 128))
374
379
  ])) : createCommentVNode("", true)
375
- ], 2)
380
+ ])
376
381
  ], 2)
377
- ]);
382
+ ], 2);
378
383
  };
379
384
  }
380
385
  });
@@ -1 +1 @@
1
- {"version":3,"file":"fds-vue-core.es.js","sources":["../src/components/fds-tree-view/useTreeState.ts","../src/components/fds-tree-view/FdsTreeView.vue","../src/index.ts"],"sourcesContent":["import { reactive, ref } from 'vue'\nimport type { TreeNode, NodeId, TreeNodeArray, TreeNodeItem } from './types'\n\ninterface TreeStateOptions {\n expandChildrenOnParentCheck?: boolean\n expandAllChildrenOnParentCheck?: boolean\n showIndeterminateOnlyOnChildrenSelection?: boolean\n}\n\nconst useTreeState = (options: TreeStateOptions = {}) => {\n /**\n * The set of selected nodes\n */\n const selectedNodes = reactive<Set<NodeId>>(new Set())\n /**\n * The array of selected node objects\n */\n const selectedNodeObjects = reactive<TreeNode[]>([])\n /**\n * The set of expanded nodes\n */\n const expandedNodes = reactive<Set<NodeId>>(new Set())\n /**\n * The search term for filtering nodes\n */\n const searchTerm = ref<string>('')\n\n /**\n * Clears all selected nodes. Can be used to reset the selections to the initial state.\n */\n const clearAllSelectedNodes = () => {\n selectedNodes.clear()\n selectedNodeObjects.length = 0\n }\n\n /**\n * Collapses all expanded nodes. Can be used to reset the tree to the initial state.\n */\n const collapseAllExpandedNodes = () => expandedNodes.clear()\n\n /**\n * Returns true if the node is selected\n */\n const isNodeSelected = (nodeId: NodeId) => selectedNodes.has(nodeId)\n\n /**\n * Returns true if the node is expanded\n */\n const isNodeExpanded = (nodeId: NodeId) => expandedNodes.has(nodeId)\n\n /**\n * Expands the specific node\n */\n const expandNode = (nodeId: NodeId) => expandedNodes.add(nodeId)\n\n /**\n * Collapses the specific node\n */\n const collapseNode = (nodeId: NodeId) => expandedNodes.delete(nodeId)\n\n /**\n * Selects the specific node and adds it to the selectedNodeObjects array.\n * Used to access the node object and it's underlying data\n */\n const injectNode = (nodeObject: TreeNode) => {\n selectedNodes.add(nodeObject.nodeId)\n selectedNodeObjects.push(nodeObject)\n }\n\n /**\n * Expands all children of the specific node\n */\n const expandAllChildren = (node: TreeNode) => {\n expandNode(node.nodeId)\n if (node.children && node.children.length > 0) {\n node.children.forEach(expandAllChildren)\n }\n }\n\n /**\n * Selects this node and recursively selects all children nodes\n */\n const selectAllChildren = (node: TreeNode) => {\n // Deselect all children to avoid duplicates\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectAllChildren)\n }\n\n // Inject the current node\n injectNode(node)\n\n if (node.children && node.children.length > 0) {\n node.children.forEach(selectAllChildren)\n }\n\n // Only expand children if the option is enabled\n if (options.expandChildrenOnParentCheck) {\n expandAllChildren(node)\n }\n }\n\n /**\n * Deselects the specific node\n */\n const deselectNode = (nodeId: NodeId) => {\n selectedNodes.delete(nodeId)\n const index = selectedNodeObjects.findIndex((node) => node.nodeId === nodeId)\n\n if (index > -1) {\n selectedNodeObjects.splice(index, 1)\n }\n }\n\n /**\n * Deselects this node and recursively deselects all children nodes\n */\n const deselectAllChildren = (node: TreeNode) => {\n // Remove the current node\n deselectNode(node.nodeId)\n\n // Recursively remove all children\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectAllChildren)\n }\n }\n\n /**\n * Finds a node by ID\n */\n const findNodeById = (nodes: TreeNodeArray, nodeId: string): TreeNodeItem | null => {\n for (const node of nodes) {\n if (node.nodeId === nodeId) {\n return node\n }\n if (node.children) {\n const found = findNodeById(node.children, nodeId)\n if (found) return found\n }\n }\n return null\n }\n\n /**\n * Checks if a node has children\n */\n const hasChildrenNodes = (nodes: TreeNodeArray) => nodes.length > 0\n\n /**\n * Checks if a node is indeterminate (partially selected)\n */\n const isNodeIndeterminate = (nodes: TreeNodeArray, parentNodeId?: string): boolean => {\n if (!hasChildrenNodes(nodes)) return false\n\n // Check each child's state\n const childStates = nodes.map((node) => ({\n isSelected: selectedNodes.has(node.nodeId),\n isIndeterminate:\n node.children && node.children.length > 0\n ? isNodeIndeterminate(node.children, node.nodeId)\n : false,\n }))\n\n const hasSelected = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) => child.isSelected,\n )\n const hasUnselected = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) =>\n !child.isSelected && !child.isIndeterminate,\n )\n const hasIndeterminate = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) => child.isIndeterminate,\n )\n\n // If parent is selected, never show indeterminate\n if (parentNodeId && selectedNodes.has(parentNodeId)) return false\n\n // Standard behavior: some selected + some unselected, OR any child is indeterminate\n if (!options.showIndeterminateOnlyOnChildrenSelection) {\n return (hasSelected && hasUnselected) || hasIndeterminate\n }\n\n // Special behavior: any child selected OR any child indeterminate\n return hasSelected || hasIndeterminate\n }\n\n /**\n * Toggles the selection state of the specific node\n */\n const toggleSelectNode = (\n nodes: TreeNodeArray,\n nodeId: string,\n title?: string,\n data?: Record<string, unknown>,\n ) => {\n let node = findNodeById(nodes, nodeId)\n\n if (!node && nodeId) {\n node = {\n nodeId: nodeId,\n title: title,\n children: nodes || [],\n data: data,\n }\n }\n\n if (!node) return\n\n if (selectedNodes.has(nodeId)) {\n deselectAllChildren(node)\n } else {\n selectAllChildren(node)\n\n if (\n selectedNodes.has(nodeId) &&\n !expandedNodes.has(nodeId) &&\n options.expandChildrenOnParentCheck\n ) {\n toggleExpandNode(nodeId, nodes)\n }\n }\n }\n\n /**\n * Toggles the expansion state of the specific node\n */\n const toggleExpandNode = (nodeId: NodeId, nodes: TreeNodeArray) => {\n if (isNodeExpanded(nodeId)) {\n collapseNode(nodeId)\n } else {\n if (!hasChildrenNodes(nodes)) return\n expandNode(nodeId)\n }\n }\n\n /**\n * Gets the icons for expanded and collapsed nodes\n */\n const getNodeIcon = (\n nodeId: NodeId,\n nodes: TreeNodeArray,\n expandIcon: string,\n collapseIcon: string,\n ) => {\n return isNodeExpanded(nodeId) && hasChildrenNodes(nodes) ? collapseIcon : expandIcon\n }\n\n /**\n * Checks if a node matches the search term by searching through specified properties\n */\n const nodeMatchesSearch = (node: TreeNode, term: string, searchParams?: string[]): boolean => {\n if (!term.trim()) return true\n if (!searchParams || !Array.isArray(searchParams)) return false\n\n const searchLower = term.toLowerCase()\n\n for (const param of searchParams) {\n if (param === 'title' && node.title?.toLowerCase().includes(searchLower)) return true\n if (param === 'nodeId' && node.nodeId.toLowerCase().includes(searchLower)) return true\n\n // Check nested data properties\n if (node.data && typeof node.data === 'object') {\n const value = (node.data as Record<string, unknown>)[param]\n if (value && String(value).toLowerCase().includes(searchLower)) return true\n }\n }\n\n return false\n }\n\n /**\n * Filters nodes based on search term, including children that match\n */\n const filterNodes = (\n nodes: TreeNodeArray,\n term: string,\n searchParams?: string[],\n ): TreeNodeArray => {\n if (!term.trim()) return nodes\n\n const filtered: TreeNodeArray = []\n\n for (const node of nodes) {\n const nodeMatches = nodeMatchesSearch(node, term, searchParams)\n const filteredChildren = node.children ? filterNodes(node.children, term, searchParams) : []\n\n // Include node if it matches OR has matching children\n if (nodeMatches || filteredChildren.length > 0) {\n filtered.push({\n ...node,\n children: filteredChildren.length > 0 ? filteredChildren : node.children,\n })\n }\n }\n\n return filtered\n }\n\n /**\n * Sets the search term\n */\n const setSearchTerm = (term: string) => {\n searchTerm.value = term\n }\n\n /**\n * Clears the search term\n */\n const clearSearch = () => {\n searchTerm.value = ''\n }\n\n return {\n selectedNodes,\n selectedNodeObjects,\n expandedNodes,\n searchTerm,\n clearAllSelectedNodes,\n collapseAllExpandedNodes,\n isNodeSelected,\n isNodeExpanded,\n injectNode,\n selectAllChildren,\n deselectNode,\n deselectAllChildren,\n expandNode,\n collapseNode,\n expandAllChildren,\n findNodeById,\n hasChildrenNodes,\n isNodeIndeterminate,\n toggleSelectNode,\n toggleExpandNode,\n getNodeIcon,\n nodeMatchesSearch,\n filterNodes,\n setSearchTerm,\n clearSearch,\n }\n}\n\nexport default useTreeState\n","<script setup lang=\"ts\">\nimport { computed, inject, reactive, provide, watch } from 'vue'\nimport useTreeState from './useTreeState'\nimport type { TreeViewProps } from './types.ts'\n\ntype Props<T = Record<string, unknown>> = TreeViewProps<T>\n\nconst props = withDefaults(defineProps<Props>(), {\n nodes: () => [],\n depth: 0,\n showNodeDescription: false,\n showChildrenCount: false,\n expandChildrenOnSelect: false,\n showIndeterminate: false,\n expandChildrenOnParentCheck: false,\n expandAllChildrenOnParentCheck: true,\n showIndeterminateOnlyOnChildrenSelection: false,\n searchEnabled: false,\n searchExpandNodes: false,\n searchMatchParams: () => ['title', 'nodeId'],\n})\n\ndefineOptions({\n name: 'FdsTreeView',\n})\n\nconst isRootComponent = props.depth === 0\nconst injectedTreeState = inject<ReturnType<typeof useTreeState> | null>('treeState', null)\n\nlet treeState: ReturnType<typeof useTreeState>\nif (isRootComponent) {\n // This is the root component, create and provide treeState with props\n treeState = useTreeState({\n expandChildrenOnParentCheck: props.expandChildrenOnParentCheck,\n expandAllChildrenOnParentCheck: props.expandAllChildrenOnParentCheck,\n showIndeterminateOnlyOnChildrenSelection: props.showIndeterminateOnlyOnChildrenSelection,\n })\n provide('treeState', treeState)\n} else {\n // This is a child component, use injected treeState\n treeState = injectedTreeState!\n}\n\nconst expandedNodes = treeState?.expandedNodes ?? reactive(new Set())\n\nconst indentValue = props.depth * props.indentation\n\nconst indent = computed(() => ({\n display: 'flex',\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n transform: `translate(${indentValue}px)`,\n}))\n\nconst hasChildrenNodes = computed(() => {\n const nodesToCheck =\n props.searchEnabled && treeState?.searchTerm?.value ? filteredNodes.value : props.nodes\n return treeState?.hasChildrenNodes(nodesToCheck) ?? false\n})\n\nconst isIndeterminate = computed(\n () => treeState?.isNodeIndeterminate(props.nodes, props.nodeId) ?? false,\n)\n\nconst filteredNodes = computed(() => {\n if (!props.searchEnabled || !treeState?.searchTerm?.value) {\n return props.nodes\n }\n return treeState.filterNodes(props.nodes, treeState.searchTerm.value, props.searchMatchParams)\n})\n\n// Auto-expand nodes when searching\nwatch(\n () => treeState?.searchTerm?.value,\n (newSearchTerm) => {\n if (props.searchEnabled && props.searchExpandNodes && newSearchTerm && newSearchTerm.trim()) {\n // Expand all nodes that have matching children\n const expandMatchingNodes = (nodes: typeof props.nodes) => {\n nodes.forEach((node) => {\n if (node.children && node.children.length > 0) {\n const hasMatchingChildren =\n treeState?.filterNodes(node.children, newSearchTerm, props.searchMatchParams).length >\n 0\n if (hasMatchingChildren) {\n treeState?.expandNode(node.nodeId)\n }\n expandMatchingNodes(node.children)\n }\n })\n }\n\n // Auto-expand nodes that have matching children\n if (props.nodes && props.nodes.length > 0) {\n const hasMatchingChildren =\n treeState?.filterNodes(props.nodes, newSearchTerm, props.searchMatchParams).length > 0\n if (hasMatchingChildren) {\n treeState?.expandNode(props.nodeId)\n }\n }\n\n // Also expand individual child nodes recursively\n expandMatchingNodes(props.nodes)\n }\n },\n { immediate: false },\n)\n</script>\n\n<template>\n <div>\n <div v-if=\"isRootComponent && searchEnabled\" class=\"mb-4\">\n <fds-input\n :value=\"treeState?.searchTerm || ''\"\n @input=\"treeState?.setSearchTerm($event.target.value)\"\n class=\"w-full\"\n :label=\"searchLabel\"\n >\n <input id=\"tree-view-search-input\" />\n </fds-input>\n </div>\n\n <div :class=\"{ 'overflow-x-auto': isRootComponent }\">\n <div :class=\"{ 'bg-white-solid p-2 rounded-md min-w-max': isRootComponent }\">\n <div :style=\"indent\">\n <div class=\"flex\">\n <fds-icon\n v-if=\"hasChildrenNodes\"\n @click=\"treeState?.toggleExpandNode(props.nodeId, props.nodes)\"\n :name=\"\n treeState?.getNodeIcon(\n props.nodeId,\n props.nodes,\n props.nodeExpandIcon,\n props.nodeCollapseIcon,\n ) ?? props.nodeExpandIcon\n \"\n size=\"24px\"\n class=\"text-blue-500 mr-3\"\n style=\"margin-top: 3px\"\n />\n <div v-if=\"!hasChildrenNodes\" :style=\"{ width: `${indentation}px` }\" />\n\n <fds-checkbox class=\"pl-0 flex-1 flex items-center\">\n <input\n :id=\"`checkbox-${props.nodeId}`\"\n style=\"margin: 0px; margin-top: 3px\"\n type=\"checkbox\"\n :checked=\"treeState?.isNodeSelected(props.nodeId)\"\n :indeterminate=\"showIndeterminate && isIndeterminate\"\n @change=\"\n treeState?.toggleSelectNode(props.nodes, props.nodeId, props.title, props.data)\n \"\n />\n <label :for=\"`checkbox-${props.nodeId}`\" class=\"flex flex-col pl-0\">\n <div>\n <fds-text v-if=\"title\" type=\"default\">{{ title }}</fds-text>\n <span v-if=\"showChildrenCount && hasChildrenNodes\">\n (+{{ props.nodes.length }})\n </span>\n </div>\n <fds-text v-if=\"showNodeDescription\" type=\"meta\" class=\"flex-1\">\n {{ props.nodeId }}\n </fds-text>\n </label>\n </fds-checkbox>\n </div>\n </div>\n\n <div v-if=\"expandedNodes.has(props.nodeId)\">\n <FdsTreeView\n v-for=\"child in filteredNodes\"\n :key=\"child.nodeId\"\n :nodes=\"child.children || []\"\n :title=\"child.title\"\n :nodeId=\"child.nodeId\"\n :data=\"child.data\"\n :depth=\"props.depth + 1\"\n :indentation=\"props.indentation\"\n :nodeExpandIcon=\"props.nodeExpandIcon\"\n :nodeCollapseIcon=\"props.nodeCollapseIcon\"\n :showNodeDescription=\"showNodeDescription\"\n :showChildrenCount=\"showChildrenCount\"\n :expandChildrenOnSelect=\"expandChildrenOnSelect\"\n :showIndeterminate=\"showIndeterminate\"\n :showIndeterminateOnlyOnChildrenSelection=\"showIndeterminateOnlyOnChildrenSelection\"\n :expandChildrenOnParentCheck=\"expandChildrenOnParentCheck\"\n :expandAllChildrenOnParentCheck=\"expandAllChildrenOnParentCheck\"\n :searchEnabled=\"searchEnabled\"\n :searchExpandNodes=\"searchExpandNodes\"\n :searchMatchParams=\"searchMatchParams\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n","import type { App } from 'vue'\n\n// Import all components\nimport FdsTreeView from './components/fds-tree-view/FdsTreeView.vue'\n\n// Import composables\nimport useTreeState from './components/fds-tree-view/useTreeState'\n\n// Export individual components\nexport { FdsTreeView }\n\n// Export composables\nexport { useTreeState }\n\n// Export component library plugin\nexport default {\n install(app: App) {\n // Register all components globally\n app.component('FdsTreeView', FdsTreeView)\n },\n}\n\nexport type {\n TreeNode,\n TreeNodeArray,\n TreeNodeItem,\n TreeViewProps,\n NodeId,\n} from './components/fds-tree-view/types.js'\n\nimport type { TreeViewProps } from './components/fds-tree-view/types.js'\nexport type FdsTreeViewProps<T = Record<string, unknown>> = TreeViewProps<T>\n"],"names":["index","_createElementBlock","searchEnabled","_openBlock","_createElementVNode","_unref","searchLabel","indentation","showIndeterminate","title","_toDisplayString","showChildrenCount","showNodeDescription","_Fragment","_renderList","_createBlock","expandChildrenOnSelect","showIndeterminateOnlyOnChildrenSelection","expandChildrenOnParentCheck","expandAllChildrenOnParentCheck","searchExpandNodes","searchMatchParams","FdsTreeView"],"mappings":"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"}
1
+ {"version":3,"file":"fds-vue-core.es.js","sources":["../src/components/fds-tree-view/useTreeState.ts","../src/components/fds-tree-view/FdsTreeView.vue","../src/index.ts"],"sourcesContent":["import { reactive, ref } from 'vue'\nimport type { TreeNode, NodeId, TreeNodeArray, TreeNodeItem } from './types'\n\ninterface TreeStateOptions {\n expandChildrenOnParentCheck?: boolean\n expandAllChildrenOnParentCheck?: boolean\n showIndeterminateOnlyOnChildrenSelection?: boolean\n}\n\nconst useTreeState = (options: TreeStateOptions = {}) => {\n /**\n * The set of selected nodes\n */\n const selectedNodes = reactive<Set<NodeId>>(new Set())\n /**\n * The array of selected node objects\n */\n const selectedNodeObjects = reactive<TreeNode[]>([])\n /**\n * The set of expanded nodes\n */\n const expandedNodes = reactive<Set<NodeId>>(new Set())\n /**\n * The search term for filtering nodes\n */\n const searchTerm = ref<string>('')\n\n /**\n * Clears all selected nodes. Can be used to reset the selections to the initial state.\n */\n const clearAllSelectedNodes = () => {\n selectedNodes.clear()\n selectedNodeObjects.length = 0\n }\n\n /**\n * Collapses all expanded nodes. Can be used to reset the tree to the initial state.\n */\n const collapseAllExpandedNodes = () => expandedNodes.clear()\n\n /**\n * Returns true if the node is selected\n */\n const isNodeSelected = (nodeId: NodeId) => selectedNodes.has(nodeId)\n\n /**\n * Returns true if the node is expanded\n */\n const isNodeExpanded = (nodeId: NodeId) => expandedNodes.has(nodeId)\n\n /**\n * Expands the specific node\n */\n const expandNode = (nodeId: NodeId) => expandedNodes.add(nodeId)\n\n /**\n * Collapses the specific node\n */\n const collapseNode = (nodeId: NodeId) => expandedNodes.delete(nodeId)\n\n /**\n * Selects the specific node and adds it to the selectedNodeObjects array.\n * Used to access the node object and it's underlying data\n */\n const injectNode = (nodeObject: TreeNode) => {\n selectedNodes.add(nodeObject.nodeId)\n selectedNodeObjects.push(nodeObject)\n }\n\n /**\n * Expands all children of the specific node\n */\n const expandAllChildren = (node: TreeNode) => {\n expandNode(node.nodeId)\n if (node.children && node.children.length > 0) {\n node.children.forEach(expandAllChildren)\n }\n }\n\n /**\n * Selects this node and recursively selects all children nodes\n */\n const selectAllChildren = (node: TreeNode) => {\n // Deselect all children to avoid duplicates\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectAllChildren)\n }\n\n // Inject the current node\n injectNode(node)\n\n if (node.children && node.children.length > 0) {\n node.children.forEach(selectAllChildren)\n }\n\n // Only expand children if the option is enabled\n if (options.expandChildrenOnParentCheck) {\n expandAllChildren(node)\n }\n }\n\n /**\n * Deselects the specific node\n */\n const deselectNode = (nodeId: NodeId) => {\n selectedNodes.delete(nodeId)\n const index = selectedNodeObjects.findIndex((node) => node.nodeId === nodeId)\n\n if (index > -1) {\n selectedNodeObjects.splice(index, 1)\n }\n }\n\n /**\n * Deselects this node and recursively deselects all children nodes\n */\n const deselectAllChildren = (node: TreeNode) => {\n // Remove the current node\n deselectNode(node.nodeId)\n\n // Recursively remove all children\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectAllChildren)\n }\n }\n\n /**\n * Finds a node by ID\n */\n const findNodeById = (nodes: TreeNodeArray, nodeId: string): TreeNodeItem | null => {\n for (const node of nodes) {\n if (node.nodeId === nodeId) {\n return node\n }\n if (node.children) {\n const found = findNodeById(node.children, nodeId)\n if (found) return found\n }\n }\n return null\n }\n\n /**\n * Checks if a node has children\n */\n const hasChildrenNodes = (nodes: TreeNodeArray) => nodes.length > 0\n\n /**\n * Checks if a node is indeterminate (partially selected)\n */\n const isNodeIndeterminate = (nodes: TreeNodeArray, parentNodeId?: string): boolean => {\n if (!hasChildrenNodes(nodes)) return false\n\n // Check each child's state\n const childStates = nodes.map((node) => ({\n isSelected: selectedNodes.has(node.nodeId),\n isIndeterminate:\n node.children && node.children.length > 0\n ? isNodeIndeterminate(node.children, node.nodeId)\n : false,\n }))\n\n const hasSelected = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) => child.isSelected,\n )\n const hasUnselected = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) =>\n !child.isSelected && !child.isIndeterminate,\n )\n const hasIndeterminate = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) => child.isIndeterminate,\n )\n\n // If parent is selected, never show indeterminate\n if (parentNodeId && selectedNodes.has(parentNodeId)) return false\n\n // Standard behavior: some selected + some unselected, OR any child is indeterminate\n if (!options.showIndeterminateOnlyOnChildrenSelection) {\n return (hasSelected && hasUnselected) || hasIndeterminate\n }\n\n // Special behavior: any child selected OR any child indeterminate\n return hasSelected || hasIndeterminate\n }\n\n /**\n * Toggles the selection state of the specific node\n */\n const toggleSelectNode = (\n nodes: TreeNodeArray,\n nodeId: string,\n title?: string,\n data?: Record<string, unknown>,\n ) => {\n let node = findNodeById(nodes, nodeId)\n\n if (!node && nodeId) {\n node = {\n nodeId: nodeId,\n title: title,\n children: nodes || [],\n data: data,\n }\n }\n\n if (!node) return\n\n if (selectedNodes.has(nodeId)) {\n deselectAllChildren(node)\n } else {\n selectAllChildren(node)\n\n if (\n selectedNodes.has(nodeId) &&\n !expandedNodes.has(nodeId) &&\n options.expandChildrenOnParentCheck\n ) {\n toggleExpandNode(nodeId, nodes)\n }\n }\n }\n\n /**\n * Toggles the expansion state of the specific node\n */\n const toggleExpandNode = (nodeId: NodeId, nodes: TreeNodeArray) => {\n if (isNodeExpanded(nodeId)) {\n collapseNode(nodeId)\n } else {\n if (!hasChildrenNodes(nodes)) return\n expandNode(nodeId)\n }\n }\n\n /**\n * Gets the icons for expanded and collapsed nodes\n */\n const getNodeIcon = (\n nodeId: NodeId,\n nodes: TreeNodeArray,\n expandIcon: string,\n collapseIcon: string,\n ) => {\n return isNodeExpanded(nodeId) && hasChildrenNodes(nodes) ? collapseIcon : expandIcon\n }\n\n /**\n * Checks if a node matches the search term by searching through specified properties\n */\n const nodeMatchesSearch = (node: TreeNode, term: string, searchParams?: string[]): boolean => {\n if (!term.trim()) return true\n if (!searchParams || !Array.isArray(searchParams)) return false\n\n const searchLower = term.toLowerCase()\n\n for (const param of searchParams) {\n if (param === 'title' && node.title?.toLowerCase().includes(searchLower)) return true\n if (param === 'nodeId' && node.nodeId.toLowerCase().includes(searchLower)) return true\n\n // Check nested data properties\n if (node.data && typeof node.data === 'object') {\n const value = (node.data as Record<string, unknown>)[param]\n if (value && String(value).toLowerCase().includes(searchLower)) return true\n }\n }\n\n return false\n }\n\n /**\n * Filters nodes based on search term, including children that match\n */\n const filterNodes = (\n nodes: TreeNodeArray,\n term: string,\n searchParams?: string[],\n ): TreeNodeArray => {\n if (!term.trim()) return nodes\n\n const filtered: TreeNodeArray = []\n\n for (const node of nodes) {\n const nodeMatches = nodeMatchesSearch(node, term, searchParams)\n const filteredChildren = node.children ? filterNodes(node.children, term, searchParams) : []\n\n // Include node if it matches OR has matching children\n if (nodeMatches || filteredChildren.length > 0) {\n filtered.push({\n ...node,\n children: filteredChildren.length > 0 ? filteredChildren : node.children,\n })\n }\n }\n\n return filtered\n }\n\n /**\n * Sets the search term\n */\n const setSearchTerm = (term: string) => {\n searchTerm.value = term\n }\n\n /**\n * Clears the search term\n */\n const clearSearch = () => {\n searchTerm.value = ''\n }\n\n return {\n selectedNodes,\n selectedNodeObjects,\n expandedNodes,\n searchTerm,\n clearAllSelectedNodes,\n collapseAllExpandedNodes,\n isNodeSelected,\n isNodeExpanded,\n injectNode,\n selectAllChildren,\n deselectNode,\n deselectAllChildren,\n expandNode,\n collapseNode,\n expandAllChildren,\n findNodeById,\n hasChildrenNodes,\n isNodeIndeterminate,\n toggleSelectNode,\n toggleExpandNode,\n getNodeIcon,\n nodeMatchesSearch,\n filterNodes,\n setSearchTerm,\n clearSearch,\n }\n}\n\nexport default useTreeState\n","<script setup lang=\"ts\">\nimport { computed, inject, reactive, provide, watch } from 'vue'\nimport useTreeState from './useTreeState'\nimport type { TreeViewProps } from './types.ts'\n\ntype Props<T = Record<string, unknown>> = TreeViewProps<T>\n\nconst props = withDefaults(defineProps<Props>(), {\n nodes: () => [],\n depth: 0,\n showNodeDescription: false,\n showChildrenCount: false,\n expandChildrenOnSelect: false,\n showIndeterminate: false,\n expandChildrenOnParentCheck: false,\n expandAllChildrenOnParentCheck: true,\n showIndeterminateOnlyOnChildrenSelection: false,\n searchEnabled: false,\n searchExpandNodes: false,\n horizontalScroll: false,\n searchMatchParams: () => ['title', 'nodeId'],\n})\n\ndefineOptions({\n name: 'FdsTreeView',\n})\n\nconst isRootComponent = props.depth === 0\nconst injectedTreeState = inject<ReturnType<typeof useTreeState> | null>('treeState', null)\n\nlet treeState: ReturnType<typeof useTreeState>\nif (isRootComponent) {\n // This is the root component, create and provide treeState with props\n treeState = useTreeState({\n expandChildrenOnParentCheck: props.expandChildrenOnParentCheck,\n expandAllChildrenOnParentCheck: props.expandAllChildrenOnParentCheck,\n showIndeterminateOnlyOnChildrenSelection: props.showIndeterminateOnlyOnChildrenSelection,\n })\n provide('treeState', treeState)\n} else {\n // This is a child component, use injected treeState\n treeState = injectedTreeState!\n}\n\nconst expandedNodes = treeState?.expandedNodes ?? reactive(new Set())\n\nconst indentValue = props.depth * props.indentation\n\nconst indent = computed(() => ({\n display: 'flex',\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n transform: `translate(${indentValue}px)`,\n}))\n\nconst hasChildrenNodes = computed(() => {\n const nodesToCheck =\n props.searchEnabled && treeState?.searchTerm?.value ? filteredNodes.value : props.nodes\n return treeState?.hasChildrenNodes(nodesToCheck) ?? false\n})\n\nconst isIndeterminate = computed(\n () => treeState?.isNodeIndeterminate(props.nodes, props.nodeId) ?? false,\n)\n\nconst filteredNodes = computed(() => {\n if (!props.searchEnabled || !treeState?.searchTerm?.value) {\n return props.nodes\n }\n return treeState.filterNodes(props.nodes, treeState.searchTerm.value, props.searchMatchParams)\n})\n\n// Auto-expand nodes when searching\nwatch(\n () => treeState?.searchTerm?.value,\n (newSearchTerm) => {\n if (props.searchEnabled && props.searchExpandNodes && newSearchTerm && newSearchTerm.trim()) {\n // Expand all nodes that have matching children\n const expandMatchingNodes = (nodes: typeof props.nodes) => {\n nodes.forEach((node) => {\n if (node.children && node.children.length > 0) {\n const hasMatchingChildren =\n treeState?.filterNodes(node.children, newSearchTerm, props.searchMatchParams).length >\n 0\n if (hasMatchingChildren) {\n treeState?.expandNode(node.nodeId)\n }\n expandMatchingNodes(node.children)\n }\n })\n }\n\n // Auto-expand nodes that have matching children\n if (props.nodes && props.nodes.length > 0) {\n const hasMatchingChildren =\n treeState?.filterNodes(props.nodes, newSearchTerm, props.searchMatchParams).length > 0\n if (hasMatchingChildren) {\n treeState?.expandNode(props.nodeId)\n }\n }\n\n // Also expand individual child nodes recursively\n expandMatchingNodes(props.nodes)\n }\n },\n { immediate: false },\n)\n</script>\n\n<template>\n <div :class=\"props?.style?.container\">\n <div v-if=\"isRootComponent && searchEnabled\" class=\"mb-4\">\n <fds-input\n :value=\"treeState?.searchTerm || ''\"\n @input=\"treeState?.setSearchTerm($event.target.value)\"\n class=\"w-full\"\n :label=\"searchLabel\"\n >\n <input id=\"tree-view-search-input\" />\n </fds-input>\n </div>\n\n <div :class=\"isRootComponent && horizontalScroll ? 'overflow-x-auto' : ''\">\n <div :class=\"'bg-white-solid p-2 rounded-md'\">\n <div :style=\"indent\">\n <div class=\"flex\">\n <fds-icon\n v-if=\"hasChildrenNodes\"\n @click=\"treeState?.toggleExpandNode(props.nodeId, props.nodes)\"\n :name=\"\n treeState?.getNodeIcon(\n props.nodeId,\n props.nodes,\n props.nodeExpandIcon,\n props.nodeCollapseIcon,\n ) ?? props.nodeExpandIcon\n \"\n size=\"24px\"\n class=\"text-blue-500 mr-3\"\n style=\"margin-top: 3px\"\n />\n <div v-if=\"!hasChildrenNodes\" :style=\"{ width: `${indentation}px` }\" />\n\n <fds-checkbox class=\"pl-0 flex-1 flex items-center\">\n <input\n :id=\"`checkbox-${props.nodeId}`\"\n style=\"margin: 0px; margin-top: 3px\"\n type=\"checkbox\"\n :checked=\"treeState?.isNodeSelected(props.nodeId)\"\n :indeterminate=\"showIndeterminate && isIndeterminate\"\n @change=\"\n treeState?.toggleSelectNode(props.nodes, props.nodeId, props.title, props.data)\n \"\n />\n <label :for=\"`checkbox-${props.nodeId}`\" class=\"flex flex-col pl-0\">\n <div>\n <fds-text v-if=\"title\" type=\"default\">{{ title }}</fds-text>\n <span v-if=\"showChildrenCount && hasChildrenNodes\">\n (+{{ props.nodes.length }})\n </span>\n </div>\n <fds-text v-if=\"showNodeDescription\" type=\"meta\" class=\"flex-1\">\n {{ props.nodeId }}\n </fds-text>\n </label>\n </fds-checkbox>\n </div>\n </div>\n\n <div v-if=\"expandedNodes.has(props.nodeId)\">\n <FdsTreeView\n v-for=\"child in filteredNodes\"\n :key=\"child.nodeId\"\n :nodes=\"child.children || []\"\n :title=\"child.title\"\n :nodeId=\"child.nodeId\"\n :data=\"child.data\"\n :depth=\"props.depth + 1\"\n :indentation=\"props.indentation\"\n :nodeExpandIcon=\"props.nodeExpandIcon\"\n :nodeCollapseIcon=\"props.nodeCollapseIcon\"\n :showNodeDescription=\"showNodeDescription\"\n :showChildrenCount=\"showChildrenCount\"\n :expandChildrenOnSelect=\"expandChildrenOnSelect\"\n :showIndeterminate=\"showIndeterminate\"\n :showIndeterminateOnlyOnChildrenSelection=\"showIndeterminateOnlyOnChildrenSelection\"\n :expandChildrenOnParentCheck=\"expandChildrenOnParentCheck\"\n :expandAllChildrenOnParentCheck=\"expandAllChildrenOnParentCheck\"\n :searchEnabled=\"searchEnabled\"\n :searchExpandNodes=\"searchExpandNodes\"\n :searchMatchParams=\"searchMatchParams\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n","import type { App } from 'vue'\n\n// Import all components\nimport FdsTreeView from './components/fds-tree-view/FdsTreeView.vue'\n\n// Import composables\nimport useTreeState from './components/fds-tree-view/useTreeState'\n\n// Export individual components\nexport { FdsTreeView }\n\n// Export composables\nexport { useTreeState }\n\n// Export component library plugin\nexport default {\n install(app: App) {\n // Register all components globally\n app.component('FdsTreeView', FdsTreeView)\n },\n}\n\nexport type {\n TreeNode,\n TreeNodeArray,\n TreeNodeItem,\n TreeViewProps,\n NodeId,\n} from './components/fds-tree-view/types.js'\n\nimport type { TreeViewProps } from './components/fds-tree-view/types.js'\nexport type FdsTreeViewProps<T = Record<string, unknown>> = TreeViewProps<T>\n"],"names":["index","_createElementBlock","_normalizeClass","searchEnabled","_openBlock","_createElementVNode","_unref","searchLabel","horizontalScroll","indentation","showIndeterminate","title","_toDisplayString","showChildrenCount","showNodeDescription","_Fragment","_renderList","_createBlock","expandChildrenOnSelect","showIndeterminateOnlyOnChildrenSelection","expandChildrenOnParentCheck","expandAllChildrenOnParentCheck","searchExpandNodes","searchMatchParams","FdsTreeView"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fds-vue-core",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
4
4
  "description": "FDS Vue Core Component Library",
5
5
  "type": "module",
6
6
  "main": "./dist/fds-vue-core.cjs.js",