@digital-realty/ix-generic-tree 1.0.2 → 2.0.2

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.
@@ -66,6 +66,16 @@ export class IxGenericTreeNode extends LitElement {
66
66
  </ix-icon-button>`;
67
67
  }
68
68
  checkbox() {
69
+ if (this.node.inherited) {
70
+ return html ` <div class="pl-2">
71
+ <ix-icon
72
+ data-testid="${IxGenericTreeTestIds.CHECK_BOX_ID(this.node.id)}"
73
+ class="inherited"
74
+ >
75
+ arrow_drop_up
76
+ </ix-icon>
77
+ </div>`;
78
+ }
69
79
  return this.showCheckbox
70
80
  ? html `<div class="pl-2" style="margin-top: 0.65rem">
71
81
  <ix-checkbox
@@ -1 +1 @@
1
- {"version":3,"file":"IxGenericTreeNode.js","sourceRoot":"","sources":["../src/IxGenericTreeNode.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\n\nimport '@digital-realty/ix-checkbox/ix-checkbox.js';\nimport '@digital-realty/ix-icon/ix-icon.js';\nimport '@digital-realty/ix-icon-button/ix-icon-button.js';\nimport '@digital-realty/ix-progress/ix-progress.js';\n\nimport type { IGenericTreeNode } from './ix-generic-tree-types.js';\nimport { IxGenericTreeNodeStyles } from './ix-generic-tree-styles.js';\nimport { IxGenericTreeTestIds } from './IxGenericTreeTestIds.js';\n\nexport class IxGenericTreeNode extends LitElement {\n static readonly styles = [IxGenericTreeNodeStyles];\n\n @property({ type: Object }) node!: IGenericTreeNode;\n\n @property({ type: Boolean }) showCheckbox: boolean = false;\n\n @property({ type: Boolean }) expanded: boolean = false;\n\n @property({ type: Boolean }) loading: boolean = false;\n\n @property({ type: Boolean }) disabled: boolean = false;\n\n @property({ type: Boolean }) selected: boolean = false;\n\n @property({ type: Number }) level = 0;\n\n @property({ type: Boolean }) filledIcons = false;\n\n private onCheck() {\n this.node.isDirty = true;\n if (this.node.checked) {\n this.node.checked = false;\n this.node.indeterminate = false;\n } else {\n this.node.checked = true;\n this.node.indeterminate = false;\n }\n const event = new CustomEvent('check-toggle', {\n detail: {\n message: {\n node: this.node,\n },\n },\n });\n\n this.dispatchEvent(event);\n }\n\n private onNodeExpand(): void {\n if (!this.expandable) {\n return;\n }\n\n const event = new CustomEvent('expand-toggle', {\n detail: {\n message: {\n node: this.node,\n },\n },\n });\n\n this.dispatchEvent(event);\n }\n\n private get expandable() {\n const childrenDataIsPresent: boolean =\n this.node.children !== undefined && this.node.children.length > 0;\n const hasChildrenToLoad: boolean =\n this.node.childrenCount !== undefined && this.node.childrenCount > 0;\n return childrenDataIsPresent || hasChildrenToLoad;\n }\n\n private arrowIcon() {\n const icon = this.expanded ? 'arrow_drop_down' : 'arrow_right';\n return html`<ix-icon-button\n @click=${() => this.onNodeExpand()}\n style=\"visibility: ${this.expandable ? 'visible' : 'hidden'}\"\n icon=${icon}\n test-id=\"tree-node-expand-toggle\"\n >\n </ix-icon-button>`;\n }\n\n private checkbox() {\n return this.showCheckbox\n ? html`<div class=\"pl-2\" style=\"margin-top: 0.65rem\">\n <ix-checkbox\n .disabled=${this.loading || this.disabled}\n .checked=${this.node.checked}\n .indeterminate=${this.node.indeterminate}\n @click=${() => this.onCheck()}\n data-testid=\"${IxGenericTreeTestIds.CHECK_BOX_ID(this.node.id)}\"\n ></ix-checkbox>\n </div>`\n : nothing;\n }\n\n private nodeIcon() {\n const { icon } = this.node;\n return icon\n ? html`<div class=\"pl-4 mt-2\">\n <ix-icon\n style=\"color: #092241; opacity: 0.6; font-size: 20px;\"\n ?filled=${this.filledIcons}\n >\n ${icon}\n </ix-icon>\n </div> `\n : nothing;\n }\n\n private label() {\n return html`\n <p\n class=\"label dlr-text-small\"\n data-testid=\"${IxGenericTreeTestIds.NODE_LABEL(this.node.id)}\"\n >\n ${this.node.label}\n </p>\n `;\n }\n\n private childCount() {\n const count =\n this.node.childrenCount === undefined ? 0 : this.node.childrenCount;\n return html`<p\n class=\"pl-2 child-count dlr-text-small\"\n data-testid=\"${IxGenericTreeTestIds.NODE_COUNT(this.node.id)}\"\n >\n ${count !== 0 ? count : nothing}\n </p>`;\n }\n\n private secondaryLabel() {\n return this.node.secondaryLabel\n ? html`<p class=\"secondary-label dlr-text-caption\">\n ${this.node.secondaryLabel}\n </p>`\n : nothing;\n }\n\n private loadingCircle() {\n return html`<div\n style=\"visibility: ${this.loading\n ? 'visible'\n : 'hidden'}; padding-left: 1rem;\"\n class=\"animate-pulse\"\n >\n <ix-progress .linear=${false} .indeterminate=${true}></ix-progress>\n </div>`;\n }\n\n render() {\n return html`\n <div style=\"padding-left: ${this.level > 0 ? '2.2rem' : '0'}\">\n <div class=\"node-item ${this.selected ? 'selected' : ''}\">\n ${this.arrowIcon()} ${this.checkbox()} ${this.nodeIcon()}\n <div\n class=\"node-item-label\"\n @click=${this.onNodeExpand}\n @keydown=${this.onNodeExpand}\n >\n <div class=\"node-item-inner\">\n ${this.label()} ${this.childCount()}\n </div>\n ${this.secondaryLabel()}\n </div>\n ${this.loadingCircle()}\n </div>\n <slot></slot>\n </div>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"IxGenericTreeNode.js","sourceRoot":"","sources":["../src/IxGenericTreeNode.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\n\nimport '@digital-realty/ix-checkbox/ix-checkbox.js';\nimport '@digital-realty/ix-icon/ix-icon.js';\nimport '@digital-realty/ix-icon-button/ix-icon-button.js';\nimport '@digital-realty/ix-progress/ix-progress.js';\n\nimport type { IGenericTreeNode } from './ix-generic-tree-types.js';\nimport { IxGenericTreeNodeStyles } from './ix-generic-tree-styles.js';\nimport { IxGenericTreeTestIds } from './IxGenericTreeTestIds.js';\n\nexport class IxGenericTreeNode extends LitElement {\n static readonly styles = [IxGenericTreeNodeStyles];\n\n @property({ type: Object }) node!: IGenericTreeNode;\n\n @property({ type: Boolean }) showCheckbox: boolean = false;\n\n @property({ type: Boolean }) expanded: boolean = false;\n\n @property({ type: Boolean }) loading: boolean = false;\n\n @property({ type: Boolean }) disabled: boolean = false;\n\n @property({ type: Boolean }) selected: boolean = false;\n\n @property({ type: Number }) level = 0;\n\n @property({ type: Boolean }) filledIcons = false;\n\n private onCheck() {\n this.node.isDirty = true;\n if (this.node.checked) {\n this.node.checked = false;\n this.node.indeterminate = false;\n } else {\n this.node.checked = true;\n this.node.indeterminate = false;\n }\n const event = new CustomEvent('check-toggle', {\n detail: {\n message: {\n node: this.node,\n },\n },\n });\n\n this.dispatchEvent(event);\n }\n\n private onNodeExpand(): void {\n if (!this.expandable) {\n return;\n }\n\n const event = new CustomEvent('expand-toggle', {\n detail: {\n message: {\n node: this.node,\n },\n },\n });\n\n this.dispatchEvent(event);\n }\n\n private get expandable() {\n const childrenDataIsPresent: boolean =\n this.node.children !== undefined && this.node.children.length > 0;\n const hasChildrenToLoad: boolean =\n this.node.childrenCount !== undefined && this.node.childrenCount > 0;\n return childrenDataIsPresent || hasChildrenToLoad;\n }\n\n private arrowIcon() {\n const icon = this.expanded ? 'arrow_drop_down' : 'arrow_right';\n return html`<ix-icon-button\n @click=${() => this.onNodeExpand()}\n style=\"visibility: ${this.expandable ? 'visible' : 'hidden'}\"\n icon=${icon}\n test-id=\"tree-node-expand-toggle\"\n >\n </ix-icon-button>`;\n }\n\n private checkbox() {\n if (this.node.inherited) {\n return html` <div class=\"pl-2\">\n <ix-icon\n data-testid=\"${IxGenericTreeTestIds.CHECK_BOX_ID(this.node.id)}\"\n class=\"inherited\"\n >\n arrow_drop_up\n </ix-icon>\n </div>`;\n }\n\n return this.showCheckbox\n ? html`<div class=\"pl-2\" style=\"margin-top: 0.65rem\">\n <ix-checkbox\n .disabled=${this.loading || this.disabled}\n .checked=${this.node.checked}\n .indeterminate=${this.node.indeterminate}\n @click=${() => this.onCheck()}\n data-testid=\"${IxGenericTreeTestIds.CHECK_BOX_ID(this.node.id)}\"\n ></ix-checkbox>\n </div>`\n : nothing;\n }\n\n private nodeIcon() {\n const { icon } = this.node;\n return icon\n ? html`<div class=\"pl-4 mt-2\">\n <ix-icon\n style=\"color: #092241; opacity: 0.6; font-size: 20px;\"\n ?filled=${this.filledIcons}\n >\n ${icon}\n </ix-icon>\n </div> `\n : nothing;\n }\n\n private label() {\n return html`\n <p\n class=\"label dlr-text-small\"\n data-testid=\"${IxGenericTreeTestIds.NODE_LABEL(this.node.id)}\"\n >\n ${this.node.label}\n </p>\n `;\n }\n\n private childCount() {\n const count =\n this.node.childrenCount === undefined ? 0 : this.node.childrenCount;\n return html`<p\n class=\"pl-2 child-count dlr-text-small\"\n data-testid=\"${IxGenericTreeTestIds.NODE_COUNT(this.node.id)}\"\n >\n ${count !== 0 ? count : nothing}\n </p>`;\n }\n\n private secondaryLabel() {\n return this.node.secondaryLabel\n ? html`<p class=\"secondary-label dlr-text-caption\">\n ${this.node.secondaryLabel}\n </p>`\n : nothing;\n }\n\n private loadingCircle() {\n return html`<div\n style=\"visibility: ${this.loading\n ? 'visible'\n : 'hidden'}; padding-left: 1rem;\"\n class=\"animate-pulse\"\n >\n <ix-progress .linear=${false} .indeterminate=${true}></ix-progress>\n </div>`;\n }\n\n render() {\n return html`\n <div style=\"padding-left: ${this.level > 0 ? '2.2rem' : '0'}\">\n <div class=\"node-item ${this.selected ? 'selected' : ''}\">\n ${this.arrowIcon()} ${this.checkbox()} ${this.nodeIcon()}\n <div\n class=\"node-item-label\"\n @click=${this.onNodeExpand}\n @keydown=${this.onNodeExpand}\n >\n <div class=\"node-item-inner\">\n ${this.label()} ${this.childCount()}\n </div>\n ${this.secondaryLabel()}\n </div>\n ${this.loadingCircle()}\n </div>\n <slot></slot>\n </div>\n `;\n }\n}\n"]}
@@ -7,9 +7,6 @@ export const IxGenericTreeNodeStyles = css `
7
7
  --md-circular-progress-active-indicator-width: 10;
8
8
  --md-filled-text-field-top-space: 8px;
9
9
  --md-filled-text-field-bottom-space: 8px;
10
- --md-checkbox-selected-hover-container-color: #6b7a8d;
11
- --md-checkbox-selected-pressed-container-color: #6b7a8d;
12
- --md-checkbox-outline-color: #6b7a8d;
13
10
  --md-filled-text-field-container-color: #f5f7ff;
14
11
  --md-filled-text-field-container-shape-end-end: 4px;
15
12
  --md-filled-text-field-container-shape-end-start: 4px;
@@ -26,22 +23,53 @@ export const IxGenericTreeNodeStyles = css `
26
23
  padding: 0;
27
24
  }
28
25
 
26
+ md-checkbox {
27
+ --md-checkbox-outline-color: var(
28
+ --ix-generic-tree-node-outline-colour,
29
+ rgb(91, 107, 124)
30
+ );
31
+ }
32
+
33
+ md-checkbox[indeterminate] {
34
+ --md-checkbox-selected-container-color: var(
35
+ --ix-generic-tree-indeterminate-node-background-color,
36
+ #53657a
37
+ );
38
+ --md-checkbox-selected-hover-container-color: var(
39
+ --ix-generic-tree-indeterminate-node-background-color,
40
+ #53657a
41
+ );
42
+ }
43
+
44
+ .inherited {
45
+ display: flex;
46
+ cursor: default;
47
+ background: var(--ix-generic-tree-inherited-node-background-color, #53657a);
48
+ height: var(--ix-generic-tree-inherited-node-height, 18px);
49
+ width: var(--ix-generic-tree-inherited-node-width, 18px);
50
+ border-radius: var(--ix-generic-tree-inherited-node-border-radius, 2px);
51
+ color: var(--ix-generic-tree-inherited-node-icon-color, #ffffff);
52
+ line-height: var(--ix-generic-tree-inherited-node-icon-line-height, 1);
53
+ --ix-icon-font-size: var(--ix-tree-inherited-node-icon-font-size, 18px);
54
+ }
55
+
29
56
  ix-icon-button {
30
57
  --md-sys-color-on-surface-variant: #6b7a8d;
31
58
  }
59
+
32
60
  md-filled-text-field {
33
61
  width: 100%;
34
62
  }
35
- [indeterminate] {
36
- --md-checkbox-selected-container-color: #6b7a8d;
37
- }
63
+
38
64
  .secondary-label {
39
65
  color: #6b7a8d;
40
66
  text-align: left;
41
67
  }
68
+
42
69
  .child-count {
43
70
  margin: 0px;
44
71
  }
72
+
45
73
  .label {
46
74
  letter-spacing: 0.25px;
47
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ix-generic-tree-styles.js","sourceRoot":"","sources":["../src/ix-generic-tree-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsHzC,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const IxGenericTreeNodeStyles = css`\n :root,\n :host :root,\n :host {\n --md-circular-progress-size: 14px;\n --md-circular-progress-active-indicator-width: 10;\n --md-filled-text-field-top-space: 8px;\n --md-filled-text-field-bottom-space: 8px;\n --md-checkbox-selected-hover-container-color: #6b7a8d;\n --md-checkbox-selected-pressed-container-color: #6b7a8d;\n --md-checkbox-outline-color: #6b7a8d;\n --md-filled-text-field-container-color: #f5f7ff;\n --md-filled-text-field-container-shape-end-end: 4px;\n --md-filled-text-field-container-shape-end-start: 4px;\n --md-filled-text-field-focus-active-indicator-height: 0px;\n --md-filled-text-field-hover-active-indicator-height: 0px;\n --md-filled-text-field-active-indicator-height: 0px;\n }\n\n *,\n :before,\n :after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n ix-icon-button {\n --md-sys-color-on-surface-variant: #6b7a8d;\n }\n md-filled-text-field {\n width: 100%;\n }\n [indeterminate] {\n --md-checkbox-selected-container-color: #6b7a8d;\n }\n .secondary-label {\n color: #6b7a8d;\n text-align: left;\n }\n .child-count {\n margin: 0px;\n }\n .label {\n letter-spacing: 0.25px;\n }\n\n .node-item {\n width: -moz-max-content;\n width: max-content;\n display: flex;\n align-items: center;\n user-select: none;\n }\n\n .node-item.selected {\n border-top-right-radius: 1rem;\n border-bottom-right-radius: 1rem;\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));\n }\n\n .node-item-label {\n padding-left: 0.75rem;\n cursor: pointer;\n }\n\n .node-item-inner {\n display: flex;\n align-items: center;\n }\n\n @keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n }\n\n .animate-pulse {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n .dlr-text-caption {\n font-family: var(--root-primary-font);\n font-size: var(--text-caption-size);\n line-height: var(--text-caption-line-height);\n letter-spacing: var(--text-caption-letter-spacing);\n font-weight: var(--text-caption-weight);\n text-decoration: var(--text-caption-decoration);\n text-transform: var(--text-caption-transform);\n }\n\n .dlr-text-small {\n font-family: var(--root-primary-font);\n font-size: var(--text-small-size);\n line-height: var(--text-small-line-height);\n letter-spacing: var(--text-small-letter-spacing);\n font-weight: var(--text-small-weight);\n text-decoration: var(--text-small-decoration);\n text-transform: var(--text-small-transform);\n }\n\n .pl-2 {\n padding-left: 0.5rem;\n }\n\n .pl-4 {\n padding-left: 1rem;\n }\n\n .mt-2 {\n margin-top: 0.5rem;\n }\n\n ix-textbox {\n display: block;\n margin-bottom: 1rem;\n }\n`;\n"]}
1
+ {"version":3,"file":"ix-generic-tree-styles.js","sourceRoot":"","sources":["../src/ix-generic-tree-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkJzC,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const IxGenericTreeNodeStyles = css`\n :root,\n :host :root,\n :host {\n --md-circular-progress-size: 14px;\n --md-circular-progress-active-indicator-width: 10;\n --md-filled-text-field-top-space: 8px;\n --md-filled-text-field-bottom-space: 8px;\n --md-filled-text-field-container-color: #f5f7ff;\n --md-filled-text-field-container-shape-end-end: 4px;\n --md-filled-text-field-container-shape-end-start: 4px;\n --md-filled-text-field-focus-active-indicator-height: 0px;\n --md-filled-text-field-hover-active-indicator-height: 0px;\n --md-filled-text-field-active-indicator-height: 0px;\n }\n\n *,\n :before,\n :after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n md-checkbox {\n --md-checkbox-outline-color: var(\n --ix-generic-tree-node-outline-colour,\n rgb(91, 107, 124)\n );\n }\n\n md-checkbox[indeterminate] {\n --md-checkbox-selected-container-color: var(\n --ix-generic-tree-indeterminate-node-background-color,\n #53657a\n );\n --md-checkbox-selected-hover-container-color: var(\n --ix-generic-tree-indeterminate-node-background-color,\n #53657a\n );\n }\n\n .inherited {\n display: flex;\n cursor: default;\n background: var(--ix-generic-tree-inherited-node-background-color, #53657a);\n height: var(--ix-generic-tree-inherited-node-height, 18px);\n width: var(--ix-generic-tree-inherited-node-width, 18px);\n border-radius: var(--ix-generic-tree-inherited-node-border-radius, 2px);\n color: var(--ix-generic-tree-inherited-node-icon-color, #ffffff);\n line-height: var(--ix-generic-tree-inherited-node-icon-line-height, 1);\n --ix-icon-font-size: var(--ix-tree-inherited-node-icon-font-size, 18px);\n }\n\n ix-icon-button {\n --md-sys-color-on-surface-variant: #6b7a8d;\n }\n\n md-filled-text-field {\n width: 100%;\n }\n\n .secondary-label {\n color: #6b7a8d;\n text-align: left;\n }\n\n .child-count {\n margin: 0px;\n }\n\n .label {\n letter-spacing: 0.25px;\n }\n\n .node-item {\n width: -moz-max-content;\n width: max-content;\n display: flex;\n align-items: center;\n user-select: none;\n }\n\n .node-item.selected {\n border-top-right-radius: 1rem;\n border-bottom-right-radius: 1rem;\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));\n }\n\n .node-item-label {\n padding-left: 0.75rem;\n cursor: pointer;\n }\n\n .node-item-inner {\n display: flex;\n align-items: center;\n }\n\n @keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n }\n\n .animate-pulse {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n .dlr-text-caption {\n font-family: var(--root-primary-font);\n font-size: var(--text-caption-size);\n line-height: var(--text-caption-line-height);\n letter-spacing: var(--text-caption-letter-spacing);\n font-weight: var(--text-caption-weight);\n text-decoration: var(--text-caption-decoration);\n text-transform: var(--text-caption-transform);\n }\n\n .dlr-text-small {\n font-family: var(--root-primary-font);\n font-size: var(--text-small-size);\n line-height: var(--text-small-line-height);\n letter-spacing: var(--text-small-letter-spacing);\n font-weight: var(--text-small-weight);\n text-decoration: var(--text-small-decoration);\n text-transform: var(--text-small-transform);\n }\n\n .pl-2 {\n padding-left: 0.5rem;\n }\n\n .pl-4 {\n padding-left: 1rem;\n }\n\n .mt-2 {\n margin-top: 0.5rem;\n }\n\n ix-textbox {\n display: block;\n margin-bottom: 1rem;\n }\n`;\n"]}
@@ -14,4 +14,5 @@ export interface IGenericTreeNode {
14
14
  selected?: boolean;
15
15
  isDirty?: boolean;
16
16
  disabled?: boolean;
17
+ inherited?: boolean;
17
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ix-generic-tree-types.js","sourceRoot":"","sources":["../src/ix-generic-tree-types.ts"],"names":[],"mappings":"","sourcesContent":["export interface IGenericTreeNode {\n children?: IGenericTreeNode[];\n\n expanded?: boolean;\n\n icon?: string;\n\n id: string;\n\n label: string | undefined;\n\n secondaryLabel?: string | null;\n\n parentId?: string;\n\n checked?: boolean;\n\n indeterminate?: boolean;\n\n loading?: boolean;\n\n childrenCount?: number;\n\n checkedChildrenCount?: number;\n\n selected?: boolean;\n\n isDirty?: boolean; // set to true whenever a user checks or unchecks a node\n\n disabled?: boolean;\n}\n"]}
1
+ {"version":3,"file":"ix-generic-tree-types.js","sourceRoot":"","sources":["../src/ix-generic-tree-types.ts"],"names":[],"mappings":"","sourcesContent":["export interface IGenericTreeNode {\n children?: IGenericTreeNode[];\n\n expanded?: boolean;\n\n icon?: string;\n\n id: string;\n\n label: string | undefined;\n\n secondaryLabel?: string | null;\n\n parentId?: string;\n\n checked?: boolean;\n\n indeterminate?: boolean;\n\n loading?: boolean;\n\n childrenCount?: number;\n\n checkedChildrenCount?: number;\n\n selected?: boolean;\n\n isDirty?: boolean; // set to true whenever a user checks or unchecks a node\n\n disabled?: boolean;\n\n inherited?: boolean;\n}\n"]}
@@ -32,10 +32,11 @@ export function findChildNodeById(node, id) {
32
32
  export function updateNodeCheckedStatus(node, rootNode) {
33
33
  /* eslint-disable no-param-reassign */
34
34
  function updateChildren(n, checked = false) {
35
- n.checked = checked;
36
35
  n.indeterminate = false;
37
36
  if (n.children) {
38
37
  n.children.forEach(child => {
38
+ child.inherited = checked;
39
+ child.checked = false;
39
40
  updateChildren(child, checked);
40
41
  });
41
42
  }
@@ -46,10 +47,8 @@ export function updateNodeCheckedStatus(node, rootNode) {
46
47
  const currentParent = findChildNodeById(rootNode, n.parentId);
47
48
  if (!currentParent || !currentParent.children)
48
49
  return;
49
- const allChildrenChecked = currentParent.children.every(child => child.checked);
50
50
  const someChildrenChecked = currentParent.children.some(child => child.checked || child.indeterminate);
51
- currentParent.checked = allChildrenChecked;
52
- currentParent.indeterminate = !allChildrenChecked && someChildrenChecked;
51
+ currentParent.indeterminate = someChildrenChecked;
53
52
  updateParents(currentParent);
54
53
  }
55
54
  // update all children to match current node checked status
@@ -183,7 +182,7 @@ export function updateChildrenCount(rootNode) {
183
182
  export function getCheckedNodesCount(node) {
184
183
  let count = 0;
185
184
  function getCheckedNodes(n) {
186
- if (n.checked) {
185
+ if (n.checked || n.inherited) {
187
186
  count += 1;
188
187
  }
189
188
  if (n.children) {
@@ -207,7 +206,7 @@ export function calculateCheckedEndNodesCount(node) {
207
206
  let count = 0;
208
207
  function getCheckedEndNodes(n) {
209
208
  var _a, _b, _c;
210
- if (n.checked && n.childrenCount === 0) {
209
+ if ((n.checked || n.inherited) && n.childrenCount === 0) {
211
210
  count += 1;
212
211
  }
213
212
  if (n.children) {
@@ -1 +1 @@
1
- {"version":3,"file":"ix-generic-tree-utils.js","sourceRoot":"","sources":["../src/ix-generic-tree-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-nested-ternary */\nimport type { IGenericTreeNode } from './ix-generic-tree-types.js';\n\nexport const IconTypeMap = {\n Global: 'globe',\n Continent: 'map',\n Country: 'flag',\n City: 'domain',\n Campus: 'device_hub',\n Site: 'location_on',\n Floor: 'view_stream',\n Room: 'meeting_room',\n Cage: 'view_column',\n Row: 'view_headline',\n Cabinet: 'dock',\n Panel: 'calendar_view_day',\n Port: '',\n Fallback: 'chevron_right',\n};\n\nexport function findChildNodeById(\n node: IGenericTreeNode,\n id: string,\n): IGenericTreeNode | null {\n if (node.id === id) {\n return node;\n }\n if (!node.children) {\n return null;\n }\n\n for (const childNode of node.children) {\n const foundNode = findChildNodeById(childNode, id);\n\n if (foundNode) {\n return foundNode;\n }\n }\n\n return null;\n}\n\nexport function updateNodeCheckedStatus(\n node: IGenericTreeNode,\n rootNode: IGenericTreeNode,\n): void {\n /* eslint-disable no-param-reassign */\n function updateChildren(n: IGenericTreeNode, checked = false): void {\n n.checked = checked;\n n.indeterminate = false;\n if (n.children) {\n n.children.forEach(child => {\n updateChildren(child, checked);\n });\n }\n }\n function updateParents(n: IGenericTreeNode): void {\n if (!n.parentId) return;\n\n const currentParent = findChildNodeById(rootNode, n.parentId);\n if (!currentParent || !currentParent.children) return;\n\n const allChildrenChecked = currentParent.children.every(\n child => child.checked,\n );\n const someChildrenChecked = currentParent.children.some(\n child => child.checked || child.indeterminate,\n );\n\n currentParent.checked = allChildrenChecked;\n currentParent.indeterminate = !allChildrenChecked && someChildrenChecked;\n\n updateParents(currentParent);\n }\n\n // update all children to match current node checked status\n updateChildren(node, node.checked);\n\n // update all parents checked and indeterminate status\n updateParents(node);\n}\n\nexport function getFlatArrayOfCheckedNodes(\n node: IGenericTreeNode,\n): IGenericTreeNode[] {\n const checkedNodes: IGenericTreeNode[] = [];\n\n function getCheckedNodes(n: IGenericTreeNode): void {\n if (n.checked) {\n checkedNodes.push(n);\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedNodes(child);\n });\n }\n }\n\n getCheckedNodes(node);\n return checkedNodes;\n}\n\nexport function flattenTree(rootNode: IGenericTreeNode): IGenericTreeNode[] {\n const flatArray: IGenericTreeNode[] = [];\n\n function flatten(n: IGenericTreeNode): void {\n flatArray.push(n);\n if (n.children) {\n n.children.forEach(child => {\n flatten(child);\n });\n }\n }\n\n flatten(rootNode);\n return flatArray;\n}\n\nexport function buildTreeFromFlatArray(\n flatArray: IGenericTreeNode[],\n): IGenericTreeNode {\n const rootNode: IGenericTreeNode = {\n id: 'root',\n label: '',\n children: [],\n };\n\n rootNode.children = flatArray.filter(child => !child.parentId);\n\n function buildTree(n: IGenericTreeNode): void {\n const children = flatArray.filter(child => child.parentId === n.id);\n n.children = children;\n n.children.forEach(child => {\n buildTree(child);\n });\n }\n\n rootNode.children.forEach(child => {\n buildTree(child);\n });\n return rootNode;\n}\n\nexport function isAnyNodeChecked(node: IGenericTreeNode): boolean {\n if (node.checked || node.indeterminate) {\n return true;\n }\n if (!node.children) {\n return false;\n }\n\n for (const childNode of node.children) {\n const checked = isAnyNodeChecked(childNode);\n\n if (checked) {\n return checked;\n }\n }\n\n return false;\n}\n\nexport function resetCheckedAndIndeterminateStatus(\n node: IGenericTreeNode,\n): void {\n node.checked = false;\n node.indeterminate = false;\n\n if (node.children) {\n node.children.forEach(child => {\n resetCheckedAndIndeterminateStatus(child);\n });\n }\n}\n\nexport function getCheckedAndIndeterminateNodesOnly(\n node: IGenericTreeNode,\n): IGenericTreeNode[] {\n const checkedNodes: IGenericTreeNode[] = [];\n\n function getCheckedNodes(n: IGenericTreeNode): void {\n if (n.checked || n.indeterminate) {\n checkedNodes.push(n);\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedNodes(child);\n });\n }\n }\n\n getCheckedNodes(node);\n return checkedNodes;\n}\n\nexport function findDeepestNode(\n root: IGenericTreeNode,\n): IGenericTreeNode | null {\n let maxDepth = -1;\n let deepestNode = null;\n function dfs(node: IGenericTreeNode, depth: number) {\n if (!node) return;\n if (depth > maxDepth) {\n maxDepth = depth;\n deepestNode = node;\n }\n if (!node.children) return;\n for (const child of node.children) {\n dfs(child, depth + 1);\n }\n }\n dfs(root, 0);\n return deepestNode;\n}\n\nexport function updateChildrenCount(rootNode: IGenericTreeNode): void {\n const deepestNode = findDeepestNode(rootNode);\n if (!deepestNode) return;\n\n function updateParents(n: IGenericTreeNode): void {\n if (!n.parentId) return;\n\n const currentParent = findChildNodeById(rootNode, n.parentId);\n if (!currentParent) return;\n currentParent.childrenCount = 0;\n if (currentParent.children) {\n currentParent.childrenCount += currentParent.children.reduce(\n (prev, curr) =>\n prev + (curr.childrenCount === 0 ? 1 : (curr.childrenCount ?? 0)),\n 0,\n );\n }\n updateParents(currentParent);\n }\n\n updateParents(deepestNode);\n}\n\nexport function getCheckedNodesCount(node: IGenericTreeNode): number {\n let count = 0;\n function getCheckedNodes(n: IGenericTreeNode): void {\n if (n.checked) {\n count += 1;\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedNodes(child);\n });\n }\n }\n getCheckedNodes(node);\n return count;\n}\n\nexport function collapseAllNodes(node: IGenericTreeNode): void {\n node.expanded = false;\n if (node.children) {\n node.children.forEach(child => {\n collapseAllNodes(child);\n });\n }\n}\n\nexport function calculateCheckedEndNodesCount(node: IGenericTreeNode): number {\n let count = 0;\n function getCheckedEndNodes(n: IGenericTreeNode): void {\n if (n.checked && n.childrenCount === 0) {\n count += 1;\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedEndNodes(child);\n });\n }\n if (!n.children?.length && n.childrenCount !== 0) {\n if (n.checked) count += n.childrenCount ?? 0;\n if (n.indeterminate) count += n.checkedChildrenCount ?? 0;\n }\n }\n getCheckedEndNodes(node);\n return count;\n}\n"]}
1
+ {"version":3,"file":"ix-generic-tree-utils.js","sourceRoot":"","sources":["../src/ix-generic-tree-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-nested-ternary */\nimport type { IGenericTreeNode } from './ix-generic-tree-types.js';\n\nexport const IconTypeMap = {\n Global: 'globe',\n Continent: 'map',\n Country: 'flag',\n City: 'domain',\n Campus: 'device_hub',\n Site: 'location_on',\n Floor: 'view_stream',\n Room: 'meeting_room',\n Cage: 'view_column',\n Row: 'view_headline',\n Cabinet: 'dock',\n Panel: 'calendar_view_day',\n Port: '',\n Fallback: 'chevron_right',\n};\n\nexport function findChildNodeById(\n node: IGenericTreeNode,\n id: string,\n): IGenericTreeNode | null {\n if (node.id === id) {\n return node;\n }\n if (!node.children) {\n return null;\n }\n\n for (const childNode of node.children) {\n const foundNode = findChildNodeById(childNode, id);\n\n if (foundNode) {\n return foundNode;\n }\n }\n\n return null;\n}\n\nexport function updateNodeCheckedStatus(\n node: IGenericTreeNode,\n rootNode: IGenericTreeNode,\n): void {\n /* eslint-disable no-param-reassign */\n function updateChildren(n: IGenericTreeNode, checked = false): void {\n n.indeterminate = false;\n if (n.children) {\n n.children.forEach(child => {\n child.inherited = checked;\n child.checked = false;\n updateChildren(child, checked);\n });\n }\n }\n\n function updateParents(n: IGenericTreeNode): void {\n if (!n.parentId) return;\n\n const currentParent = findChildNodeById(rootNode, n.parentId);\n if (!currentParent || !currentParent.children) return;\n\n const someChildrenChecked = currentParent.children.some(\n child => child.checked || child.indeterminate,\n );\n\n currentParent.indeterminate = someChildrenChecked;\n\n updateParents(currentParent);\n }\n\n // update all children to match current node checked status\n updateChildren(node, node.checked);\n\n // update all parents checked and indeterminate status\n updateParents(node);\n}\n\nexport function getFlatArrayOfCheckedNodes(\n node: IGenericTreeNode,\n): IGenericTreeNode[] {\n const checkedNodes: IGenericTreeNode[] = [];\n\n function getCheckedNodes(n: IGenericTreeNode): void {\n if (n.checked) {\n checkedNodes.push(n);\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedNodes(child);\n });\n }\n }\n\n getCheckedNodes(node);\n return checkedNodes;\n}\n\nexport function flattenTree(rootNode: IGenericTreeNode): IGenericTreeNode[] {\n const flatArray: IGenericTreeNode[] = [];\n\n function flatten(n: IGenericTreeNode): void {\n flatArray.push(n);\n if (n.children) {\n n.children.forEach(child => {\n flatten(child);\n });\n }\n }\n\n flatten(rootNode);\n return flatArray;\n}\n\nexport function buildTreeFromFlatArray(\n flatArray: IGenericTreeNode[],\n): IGenericTreeNode {\n const rootNode: IGenericTreeNode = {\n id: 'root',\n label: '',\n children: [],\n };\n\n rootNode.children = flatArray.filter(child => !child.parentId);\n\n function buildTree(n: IGenericTreeNode): void {\n const children = flatArray.filter(child => child.parentId === n.id);\n n.children = children;\n n.children.forEach(child => {\n buildTree(child);\n });\n }\n\n rootNode.children.forEach(child => {\n buildTree(child);\n });\n return rootNode;\n}\n\nexport function isAnyNodeChecked(node: IGenericTreeNode): boolean {\n if (node.checked || node.indeterminate) {\n return true;\n }\n if (!node.children) {\n return false;\n }\n\n for (const childNode of node.children) {\n const checked = isAnyNodeChecked(childNode);\n\n if (checked) {\n return checked;\n }\n }\n\n return false;\n}\n\nexport function resetCheckedAndIndeterminateStatus(\n node: IGenericTreeNode,\n): void {\n node.checked = false;\n node.indeterminate = false;\n\n if (node.children) {\n node.children.forEach(child => {\n resetCheckedAndIndeterminateStatus(child);\n });\n }\n}\n\nexport function getCheckedAndIndeterminateNodesOnly(\n node: IGenericTreeNode,\n): IGenericTreeNode[] {\n const checkedNodes: IGenericTreeNode[] = [];\n\n function getCheckedNodes(n: IGenericTreeNode): void {\n if (n.checked || n.indeterminate) {\n checkedNodes.push(n);\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedNodes(child);\n });\n }\n }\n\n getCheckedNodes(node);\n return checkedNodes;\n}\n\nexport function findDeepestNode(\n root: IGenericTreeNode,\n): IGenericTreeNode | null {\n let maxDepth = -1;\n let deepestNode = null;\n function dfs(node: IGenericTreeNode, depth: number) {\n if (!node) return;\n if (depth > maxDepth) {\n maxDepth = depth;\n deepestNode = node;\n }\n if (!node.children) return;\n for (const child of node.children) {\n dfs(child, depth + 1);\n }\n }\n dfs(root, 0);\n return deepestNode;\n}\n\nexport function updateChildrenCount(rootNode: IGenericTreeNode): void {\n const deepestNode = findDeepestNode(rootNode);\n if (!deepestNode) return;\n\n function updateParents(n: IGenericTreeNode): void {\n if (!n.parentId) return;\n\n const currentParent = findChildNodeById(rootNode, n.parentId);\n if (!currentParent) return;\n currentParent.childrenCount = 0;\n if (currentParent.children) {\n currentParent.childrenCount += currentParent.children.reduce(\n (prev, curr) =>\n prev + (curr.childrenCount === 0 ? 1 : (curr.childrenCount ?? 0)),\n 0,\n );\n }\n updateParents(currentParent);\n }\n\n updateParents(deepestNode);\n}\n\nexport function getCheckedNodesCount(node: IGenericTreeNode): number {\n let count = 0;\n function getCheckedNodes(n: IGenericTreeNode): void {\n if (n.checked || n.inherited) {\n count += 1;\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedNodes(child);\n });\n }\n }\n getCheckedNodes(node);\n return count;\n}\n\nexport function collapseAllNodes(node: IGenericTreeNode): void {\n node.expanded = false;\n if (node.children) {\n node.children.forEach(child => {\n collapseAllNodes(child);\n });\n }\n}\n\nexport function calculateCheckedEndNodesCount(node: IGenericTreeNode): number {\n let count = 0;\n function getCheckedEndNodes(n: IGenericTreeNode): void {\n if ((n.checked || n.inherited) && n.childrenCount === 0) {\n count += 1;\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedEndNodes(child);\n });\n }\n if (!n.children?.length && n.childrenCount !== 0) {\n if (n.checked) count += n.childrenCount ?? 0;\n if (n.indeterminate) count += n.checkedChildrenCount ?? 0;\n }\n }\n getCheckedEndNodes(node);\n return count;\n}\n"]}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Webcomponent ix-generic-tree following open-wc recommendations",
4
4
  "license": "MIT",
5
5
  "author": "Digital Realty",
6
- "version": "1.0.2",
6
+ "version": "2.0.2",
7
7
  "type": "module",
8
8
  "main": "dist/index.js",
9
9
  "module": "dist/index.js",
@@ -97,5 +97,5 @@
97
97
  "README.md",
98
98
  "LICENSE"
99
99
  ],
100
- "gitHead": "58274d28e3928c90e1e3dc91a629bfe530325ae0"
100
+ "gitHead": "d37e3ce6b4ce957dac894bab5320e2f21b83a57b"
101
101
  }