@carbon/ibm-products-web-components 0.45.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/custom-elements.json +494 -19
  2. package/es/components/add-select/add-select-body.d.ts +15 -10
  3. package/es/components/add-select/add-select-body.d.ts.map +1 -1
  4. package/es/components/add-select/add-select-body.js +95 -73
  5. package/es/components/add-select/add-select-body.js.map +1 -1
  6. package/es/components/add-select/add-select-body.scss.js +1 -1
  7. package/es/components/add-select/add-select-body.scss.js.map +1 -1
  8. package/es/components/add-select/add-select-column.d.ts +83 -0
  9. package/es/components/add-select/add-select-column.d.ts.map +1 -0
  10. package/es/components/add-select/add-select-column.js +217 -0
  11. package/es/components/add-select/add-select-column.js.map +1 -0
  12. package/es/components/add-select/add-select-column.scss.js +14 -0
  13. package/es/components/add-select/add-select-column.scss.js.map +1 -0
  14. package/es/components/add-select/add-select-item-panel.d.ts +58 -0
  15. package/es/components/add-select/add-select-item-panel.d.ts.map +1 -0
  16. package/es/components/add-select/add-select-item-panel.js +162 -0
  17. package/es/components/add-select/add-select-item-panel.js.map +1 -0
  18. package/es/components/add-select/add-select-item-panel.scss.js +14 -0
  19. package/es/components/add-select/add-select-item-panel.scss.js.map +1 -0
  20. package/es/components/add-select/add-select-row.d.ts +42 -2
  21. package/es/components/add-select/add-select-row.d.ts.map +1 -1
  22. package/es/components/add-select/add-select-row.js +143 -23
  23. package/es/components/add-select/add-select-row.js.map +1 -1
  24. package/es/components/add-select/add-select-row.scss.js +1 -1
  25. package/es/components/add-select/add-select-row.scss.js.map +1 -1
  26. package/es/components/add-select/add-select-selection-summary-item.d.ts +64 -0
  27. package/es/components/add-select/add-select-selection-summary-item.d.ts.map +1 -0
  28. package/es/components/add-select/add-select-selection-summary-item.js +279 -0
  29. package/es/components/add-select/add-select-selection-summary-item.js.map +1 -0
  30. package/es/components/add-select/add-select-selection-summary-item.scss.js +14 -0
  31. package/es/components/add-select/add-select-selection-summary-item.scss.js.map +1 -0
  32. package/es/components/add-select/add-select-selection-summary.d.ts +48 -0
  33. package/es/components/add-select/add-select-selection-summary.d.ts.map +1 -0
  34. package/es/components/add-select/add-select-selection-summary.js +118 -0
  35. package/es/components/add-select/add-select-selection-summary.js.map +1 -0
  36. package/es/components/add-select/add-select-selection-summary.scss.js +14 -0
  37. package/es/components/add-select/add-select-selection-summary.scss.js.map +1 -0
  38. package/es/components/add-select/add-select.scss.js +1 -1
  39. package/es/components/add-select/index.d.ts +4 -1
  40. package/es/components/add-select/index.d.ts.map +1 -1
  41. package/es/components/add-select/index.js +4 -1
  42. package/es/components/coachmark/coachmark-header.js +2 -2
  43. package/es/components/coachmark/coachmark-header.js.map +1 -1
  44. package/es/components/edit-in-place/edit-in-place.js +2 -2
  45. package/es/components/edit-in-place/edit-in-place.js.map +1 -1
  46. package/es/components/guide-banner/guide-banner.js +2 -2
  47. package/es/components/guide-banner/guide-banner.js.map +1 -1
  48. package/es/components/notification-panel/notification.js +2 -2
  49. package/es/components/notification-panel/notification.js.map +1 -1
  50. package/es/components/side-panel/side-panel.js +2 -2
  51. package/es/components/side-panel/side-panel.js.map +1 -1
  52. package/es/components/tearsheet/tearsheet.scss.js +1 -1
  53. package/es/ibm-products-utilities/src/utils/add-select/add-select-data.js.map +1 -1
  54. package/es/ibm-products-web-components/package.js +1 -1
  55. package/es-custom/components/add-select/add-select-body.js +95 -73
  56. package/es-custom/components/add-select/add-select-body.js.map +1 -1
  57. package/es-custom/components/add-select/add-select-body.scss.js +1 -1
  58. package/es-custom/components/add-select/add-select-body.scss.js.map +1 -1
  59. package/es-custom/components/add-select/add-select-column.js +217 -0
  60. package/es-custom/components/add-select/add-select-column.js.map +1 -0
  61. package/es-custom/components/add-select/add-select-column.scss.js +14 -0
  62. package/es-custom/components/add-select/add-select-column.scss.js.map +1 -0
  63. package/es-custom/components/add-select/add-select-item-panel.js +162 -0
  64. package/es-custom/components/add-select/add-select-item-panel.js.map +1 -0
  65. package/es-custom/components/add-select/add-select-item-panel.scss.js +14 -0
  66. package/es-custom/components/add-select/add-select-item-panel.scss.js.map +1 -0
  67. package/es-custom/components/add-select/add-select-row.js +143 -23
  68. package/es-custom/components/add-select/add-select-row.js.map +1 -1
  69. package/es-custom/components/add-select/add-select-row.scss.js +1 -1
  70. package/es-custom/components/add-select/add-select-row.scss.js.map +1 -1
  71. package/es-custom/components/add-select/add-select-selection-summary-item.js +279 -0
  72. package/es-custom/components/add-select/add-select-selection-summary-item.js.map +1 -0
  73. package/es-custom/components/add-select/add-select-selection-summary-item.scss.js +14 -0
  74. package/es-custom/components/add-select/add-select-selection-summary-item.scss.js.map +1 -0
  75. package/es-custom/components/add-select/add-select-selection-summary.js +118 -0
  76. package/es-custom/components/add-select/add-select-selection-summary.js.map +1 -0
  77. package/es-custom/components/add-select/add-select-selection-summary.scss.js +14 -0
  78. package/es-custom/components/add-select/add-select-selection-summary.scss.js.map +1 -0
  79. package/es-custom/components/add-select/add-select.scss.js +1 -1
  80. package/es-custom/components/add-select/index.js +4 -1
  81. package/es-custom/components/coachmark/coachmark-header.js +2 -2
  82. package/es-custom/components/coachmark/coachmark-header.js.map +1 -1
  83. package/es-custom/components/edit-in-place/edit-in-place.js +2 -2
  84. package/es-custom/components/edit-in-place/edit-in-place.js.map +1 -1
  85. package/es-custom/components/guide-banner/guide-banner.js +2 -2
  86. package/es-custom/components/guide-banner/guide-banner.js.map +1 -1
  87. package/es-custom/components/notification-panel/notification.js +2 -2
  88. package/es-custom/components/notification-panel/notification.js.map +1 -1
  89. package/es-custom/components/side-panel/side-panel.js +2 -2
  90. package/es-custom/components/side-panel/side-panel.js.map +1 -1
  91. package/es-custom/components/tearsheet/tearsheet.scss.js +1 -1
  92. package/es-custom/ibm-products-utilities/src/utils/add-select/add-select-data.js.map +1 -1
  93. package/es-custom/ibm-products-web-components/package.js +1 -1
  94. package/lib/components/add-select/add-select-body.d.ts +15 -10
  95. package/lib/components/add-select/add-select-body.d.ts.map +1 -1
  96. package/lib/components/add-select/add-select-column.d.ts +83 -0
  97. package/lib/components/add-select/add-select-column.d.ts.map +1 -0
  98. package/lib/components/add-select/add-select-item-panel.d.ts +58 -0
  99. package/lib/components/add-select/add-select-item-panel.d.ts.map +1 -0
  100. package/lib/components/add-select/add-select-row.d.ts +42 -2
  101. package/lib/components/add-select/add-select-row.d.ts.map +1 -1
  102. package/lib/components/add-select/add-select-selection-summary-item.d.ts +64 -0
  103. package/lib/components/add-select/add-select-selection-summary-item.d.ts.map +1 -0
  104. package/lib/components/add-select/add-select-selection-summary.d.ts +48 -0
  105. package/lib/components/add-select/add-select-selection-summary.d.ts.map +1 -0
  106. package/lib/components/add-select/index.d.ts +4 -1
  107. package/lib/components/add-select/index.d.ts.map +1 -1
  108. package/package.json +7 -6
  109. package/scss/components/add-select/add-select-body.scss +36 -4
  110. package/scss/components/add-select/add-select-column.scss +81 -0
  111. package/scss/components/add-select/add-select-item-panel.scss +85 -0
  112. package/scss/components/add-select/add-select-row.scss +76 -9
  113. package/scss/components/add-select/add-select-selection-summary-item.scss +227 -0
  114. package/scss/components/add-select/add-select-selection-summary.scss +58 -0
  115. package/telemetry.yml +34 -5
  116. package/es/components/add-select/add-select-content.d.ts +0 -57
  117. package/es/components/add-select/add-select-content.d.ts.map +0 -1
  118. package/es/components/add-select/add-select-content.js +0 -188
  119. package/es/components/add-select/add-select-content.js.map +0 -1
  120. package/es/components/add-select/add-select-content.scss.js +0 -14
  121. package/es/components/add-select/add-select-content.scss.js.map +0 -1
  122. package/es-custom/components/add-select/add-select-content.js +0 -188
  123. package/es-custom/components/add-select/add-select-content.js.map +0 -1
  124. package/es-custom/components/add-select/add-select-content.scss.js +0 -14
  125. package/es-custom/components/add-select/add-select-content.scss.js.map +0 -1
  126. package/lib/components/add-select/add-select-content.d.ts +0 -57
  127. package/lib/components/add-select/add-select-content.d.ts.map +0 -1
  128. package/scss/components/add-select/add-select-content.scss +0 -42
package/telemetry.yml CHANGED
@@ -21,15 +21,16 @@ collect:
21
21
  - expand-label
22
22
  - expandText
23
23
  - hide-close-button
24
+ - hide-search
24
25
  - id
25
26
  - influencer-width
26
27
  - is-flush
28
+ - item-count
27
29
  - kind
28
30
  - label
29
31
  - label-text
30
32
  - lines
31
- - onc4p-add-select-row-navigate
32
- - onc4p-add-select-row-select
33
+ - multi
33
34
  - open
34
35
  - overflow-aria-label
35
36
  - prevent-close-on-click-outside
@@ -56,22 +57,50 @@ collect:
56
57
  - version
57
58
  # c4p-action-set
58
59
  - disable-stacking
59
- # c4p-add-select
60
- - multi
61
60
  # c4p-add-select-body
62
61
  - global-search-label
63
62
  - global-search-placeholder
64
- - item-count
65
63
  - items-label
64
+ - onc4p-add-select-body-breadcrumb-click
66
65
  - onc4p-add-select-body-search
67
66
  - path
68
67
  - search-results-title
68
+ # c4p-add-select-column
69
+ - all-indeterminate
70
+ - all-selected
71
+ - onc4p-add-select-column-search
72
+ - onc4p-add-select-column-select-all
73
+ - search-label
74
+ - search-placeholder
75
+ - show-select-all
76
+ # c4p-add-select-item-panel
77
+ - onc4p-add-select-item-panel-close
78
+ - show-close-button
69
79
  # c4p-add-select-row
80
+ - _column-multi
70
81
  - disabled
71
82
  - has-children
83
+ - has-item-panel
84
+ - indeterminate
72
85
  - item-id
86
+ - item-panel-icon-description
87
+ - item-panel-open
88
+ - onc4p-add-select-row-item-panel-click
89
+ - onc4p-add-select-row-navigate
90
+ - onc4p-add-select-row-select
73
91
  - parent-id
74
92
  - selected
93
+ - skeleton
94
+ # c4p-add-select-selection-summary
95
+ - edit-icon-description
96
+ - onc4p-add-select-selection-summary-edit
97
+ - selected-item-count
98
+ - show-edit-icon
99
+ # c4p-add-select-selection-summary-item
100
+ - hide-remove-button
101
+ - onc4p-add-select-selection-summary-item-remove
102
+ - remove-button-label
103
+ - use-accordion
75
104
  # c4p-big-number
76
105
  - fraction-digits
77
106
  - loading
@@ -1,57 +0,0 @@
1
- /**
2
- * @license
3
- *
4
- * Copyright IBM Corp. 2026
5
- *
6
- * This source code is licensed under the Apache-2.0 license found in the
7
- * LICENSE file in the root directory of this source tree.
8
- */
9
- import { LitElement } from 'lit';
10
- /**
11
- * Add Select Content component - contains the list of selectable items
12
- * @element c4p-add-select-content
13
- * @slot default - Contains c4p-add-select-row components
14
- */
15
- declare class CDSAddSelectContent extends LitElement {
16
- /**
17
- * Whether this is a multi-select list (inherited from parent c4p-add-select)
18
- * @private
19
- */
20
- private get _multi();
21
- /**
22
- * Current focused item index
23
- */
24
- private _focusedIndex;
25
- /**
26
- * Track if user has interacted with keyboard navigation
27
- */
28
- private _hasKeyboardInteraction;
29
- /**
30
- * Get all item elements
31
- */
32
- private _getItems;
33
- /**
34
- * Update focus on items - only one item should have tabindex="0"
35
- */
36
- private _updateItemFocus;
37
- /**
38
- * Handle keyboard navigation
39
- */
40
- private _handleKeyDown;
41
- /**
42
- * Initialize focus management after first update
43
- */
44
- firstUpdated(): void;
45
- /**
46
- * Handle slot change to update focus management
47
- */
48
- private _handleSlotChange;
49
- /**
50
- * Update lifecycle - ensure focus is maintained when items change
51
- */
52
- updated(changedProperties: Map<string, any>): void;
53
- render(): import("lit-html").TemplateResult<1>;
54
- static styles: any;
55
- }
56
- export default CDSAddSelectContent;
57
- //# sourceMappingURL=add-select-content.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-select-content.d.ts","sourceRoot":"","sources":["../../../src/components/add-select/add-select-content.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAQvC;;;;GAIG;AACH,cACM,mBAAoB,SAAQ,UAAU;IAC1C;;;OAGG;IACH,OAAO,KAAK,MAAM,GAGjB;IAED;;OAEG;IACH,OAAO,CAAC,aAAa,CAAK;IAE1B;;OAEG;IACH,OAAO,CAAC,uBAAuB,CAAS;IAExC;;OAEG;IACH,OAAO,CAAC,SAAS;IAYjB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgGtB;;OAEG;IACH,YAAY;IAKZ;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAiB3C,MAAM;IAyBN,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,eAAe,mBAAmB,CAAC"}
@@ -1,188 +0,0 @@
1
- /**
2
- * Copyright IBM Corp. 2020, 2026
3
- *
4
- * This source code is licensed under the Apache-2.0 license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- import "../../globals/settings.js";
9
- import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.js";
10
- import add_select_content_default$1 from "./add-select-content.scss.js";
11
- import { classMap } from "lit/directives/class-map.js";
12
- import { LitElement, html } from "lit";
13
- import { carbonElement } from "@carbon/web-components/es/globals/decorators/carbon-element.js";
14
- //#region src/components/add-select/add-select-content.ts
15
- /**
16
- * @license
17
- *
18
- * Copyright IBM Corp. 2026
19
- *
20
- * This source code is licensed under the Apache-2.0 license found in the
21
- * LICENSE file in the root directory of this source tree.
22
- */
23
- const blockClass = `c4p--add-select__next-list`;
24
- /**
25
- * Add Select Content component - contains the list of selectable items
26
- * @element c4p-add-select-content
27
- * @slot default - Contains c4p-add-select-row components
28
- */
29
- let CDSAddSelectContent = class CDSAddSelectContent extends LitElement {
30
- constructor(..._args) {
31
- super(..._args);
32
- this._focusedIndex = 0;
33
- this._hasKeyboardInteraction = false;
34
- }
35
- /**
36
- * Whether this is a multi-select list (inherited from parent c4p-add-select)
37
- * @private
38
- */
39
- get _multi() {
40
- return this.closest(`c4p-add-select`)?.multi ?? false;
41
- }
42
- /**
43
- * Get all item elements
44
- */
45
- _getItems() {
46
- const slot = this.shadowRoot?.querySelector("slot");
47
- if (!slot) return [];
48
- return slot.assignedElements({ flatten: true }).filter((el) => el.tagName.toLowerCase() === `c4p-add-select-row`);
49
- }
50
- /**
51
- * Update focus on items - only one item should have tabindex="0"
52
- */
53
- _updateItemFocus(focusIndex, shouldFocus = true) {
54
- const items = this._getItems();
55
- if (items.length === 0) return;
56
- this._focusedIndex = Math.max(0, Math.min(focusIndex, items.length - 1));
57
- items.forEach((item, index) => {
58
- if (index === this._focusedIndex) {
59
- item.setAttribute("tabindex", "0");
60
- if (shouldFocus) item.focus();
61
- } else item.setAttribute("tabindex", "-1");
62
- });
63
- }
64
- /**
65
- * Handle keyboard navigation
66
- */
67
- _handleKeyDown(event) {
68
- const items = this._getItems();
69
- if (items.length === 0) return;
70
- this._hasKeyboardInteraction = true;
71
- const currentItem = items[this._focusedIndex];
72
- let handled = false;
73
- switch (event.key) {
74
- case "ArrowDown":
75
- event.preventDefault();
76
- this._updateItemFocus(this._focusedIndex + 1);
77
- handled = true;
78
- break;
79
- case "ArrowUp":
80
- event.preventDefault();
81
- this._updateItemFocus(this._focusedIndex - 1);
82
- handled = true;
83
- break;
84
- case "ArrowRight":
85
- if (currentItem && currentItem.hasAttribute("has-children")) {
86
- event.preventDefault();
87
- const navigateEvent = new CustomEvent("c4p-add-select-row-navigate", {
88
- bubbles: true,
89
- composed: true,
90
- detail: {
91
- itemId: currentItem.getAttribute("item-id"),
92
- title: currentItem.getAttribute("title"),
93
- parentId: currentItem.getAttribute("parent-id") || ""
94
- }
95
- });
96
- currentItem.dispatchEvent(navigateEvent);
97
- handled = true;
98
- }
99
- break;
100
- case "Enter":
101
- case " ":
102
- event.preventDefault();
103
- if (currentItem) {
104
- const newSelected = !currentItem.hasAttribute("selected");
105
- if (newSelected) currentItem.setAttribute("selected", "");
106
- else currentItem.removeAttribute("selected");
107
- const selectEvent = new CustomEvent("c4p-add-select-row-select", {
108
- bubbles: true,
109
- composed: true,
110
- detail: {
111
- itemId: currentItem.getAttribute("item-id"),
112
- selected: newSelected,
113
- value: currentItem.getAttribute("value")
114
- }
115
- });
116
- currentItem.dispatchEvent(selectEvent);
117
- }
118
- handled = true;
119
- break;
120
- case "Home":
121
- if (event.ctrlKey) {
122
- event.preventDefault();
123
- this._updateItemFocus(0);
124
- handled = true;
125
- }
126
- break;
127
- case "End":
128
- if (event.ctrlKey) {
129
- event.preventDefault();
130
- this._updateItemFocus(items.length - 1);
131
- handled = true;
132
- }
133
- break;
134
- }
135
- if (handled) event.stopPropagation();
136
- }
137
- /**
138
- * Initialize focus management after first update
139
- */
140
- firstUpdated() {
141
- this._updateItemFocus(0, false);
142
- }
143
- /**
144
- * Handle slot change to update focus management
145
- */
146
- _handleSlotChange() {
147
- const items = this._getItems();
148
- if (items.length > 0) {
149
- if (this._focusedIndex >= items.length) this._focusedIndex = 0;
150
- this._updateItemFocus(this._focusedIndex, this._hasKeyboardInteraction);
151
- }
152
- }
153
- /**
154
- * Update lifecycle - ensure focus is maintained when items change
155
- */
156
- updated(changedProperties) {
157
- super.updated(changedProperties);
158
- const items = this._getItems();
159
- if (items.length > 0) {
160
- if (!items.some((item) => item.getAttribute("tabindex") === "0")) this._updateItemFocus(0, this._hasKeyboardInteraction);
161
- }
162
- }
163
- render() {
164
- const { _handleKeyDown: handleKeyDown, _handleSlotChange: handleSlotChange } = this;
165
- return html`
166
- <div
167
- class=${classMap({ [`${blockClass}-list`]: true })}
168
- role="grid"
169
- aria-multiselectable=${this._multi}
170
- tabindex="0"
171
- @keydown=${handleKeyDown}
172
- >
173
- <div class="${blockClass}-list-body">
174
- <slot @slotchange=${handleSlotChange}></slot>
175
- </div>
176
- </div>
177
- `;
178
- }
179
- static {
180
- this.styles = add_select_content_default$1;
181
- }
182
- };
183
- CDSAddSelectContent = __decorate([carbonElement(`c4p-add-select-content`)], CDSAddSelectContent);
184
- var add_select_content_default = CDSAddSelectContent;
185
- //#endregion
186
- export { add_select_content_default as default };
187
-
188
- //# sourceMappingURL=add-select-content.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-select-content.js","names":["styles","customElement"],"sources":["../../../src/components/add-select/add-select-content.ts"],"sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { LitElement, html } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport { prefix } from '../../globals/settings';\nimport styles from './add-select-content.scss?lit';\n\nconst blockClass = `${prefix}--add-select__next-list`;\n\n/**\n * Add Select Content component - contains the list of selectable items\n * @element c4p-add-select-content\n * @slot default - Contains c4p-add-select-row components\n */\n@customElement(`${prefix}-add-select-content`)\nclass CDSAddSelectContent extends LitElement {\n /**\n * Whether this is a multi-select list (inherited from parent c4p-add-select)\n * @private\n */\n private get _multi(): boolean {\n const parent = this.closest(`${prefix}-add-select`) as any;\n return parent?.multi ?? false;\n }\n\n /**\n * Current focused item index\n */\n private _focusedIndex = 0;\n\n /**\n * Track if user has interacted with keyboard navigation\n */\n private _hasKeyboardInteraction = false;\n\n /**\n * Get all item elements\n */\n private _getItems(): HTMLElement[] {\n const slot = this.shadowRoot?.querySelector('slot');\n if (!slot) {\n return [];\n }\n\n const assignedElements = slot.assignedElements({ flatten: true });\n return assignedElements.filter(\n (el) => el.tagName.toLowerCase() === `${prefix}-add-select-row`\n ) as HTMLElement[];\n }\n\n /**\n * Update focus on items - only one item should have tabindex=\"0\"\n */\n private _updateItemFocus(focusIndex: number, shouldFocus = true) {\n const items = this._getItems();\n if (items.length === 0) {\n return;\n }\n\n // Ensure focusIndex is within bounds\n this._focusedIndex = Math.max(0, Math.min(focusIndex, items.length - 1));\n\n items.forEach((item, index) => {\n if (index === this._focusedIndex) {\n item.setAttribute('tabindex', '0');\n if (shouldFocus) {\n item.focus();\n }\n } else {\n item.setAttribute('tabindex', '-1');\n }\n });\n }\n\n /**\n * Handle keyboard navigation\n */\n private _handleKeyDown(event: KeyboardEvent) {\n const items = this._getItems();\n if (items.length === 0) {\n return;\n }\n\n // Mark that keyboard interaction has occurred\n this._hasKeyboardInteraction = true;\n\n const currentItem = items[this._focusedIndex];\n let handled = false;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this._updateItemFocus(this._focusedIndex + 1);\n handled = true;\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n this._updateItemFocus(this._focusedIndex - 1);\n handled = true;\n break;\n\n case 'ArrowRight':\n // Check if current item has children\n if (currentItem && currentItem.hasAttribute('has-children')) {\n event.preventDefault();\n // Trigger the item's navigate event\n const navigateEvent = new CustomEvent('c4p-add-select-row-navigate', {\n bubbles: true,\n composed: true,\n detail: {\n itemId: currentItem.getAttribute('item-id'),\n title: currentItem.getAttribute('title'),\n parentId: currentItem.getAttribute('parent-id') || '',\n },\n });\n currentItem.dispatchEvent(navigateEvent);\n handled = true;\n }\n break;\n\n case 'Enter':\n case ' ':\n event.preventDefault();\n // Trigger the item's selection\n if (currentItem) {\n const isSelected = currentItem.hasAttribute('selected');\n const newSelected = !isSelected;\n\n // Update the item's selected attribute\n if (newSelected) {\n currentItem.setAttribute('selected', '');\n } else {\n currentItem.removeAttribute('selected');\n }\n\n // Dispatch selection event\n const selectEvent = new CustomEvent('c4p-add-select-row-select', {\n bubbles: true,\n composed: true,\n detail: {\n itemId: currentItem.getAttribute('item-id'),\n selected: newSelected,\n value: currentItem.getAttribute('value'),\n },\n });\n currentItem.dispatchEvent(selectEvent);\n }\n handled = true;\n break;\n\n case 'Home':\n if (event.ctrlKey) {\n event.preventDefault();\n this._updateItemFocus(0);\n handled = true;\n }\n break;\n\n case 'End':\n if (event.ctrlKey) {\n event.preventDefault();\n this._updateItemFocus(items.length - 1);\n handled = true;\n }\n break;\n }\n\n if (handled) {\n event.stopPropagation();\n }\n }\n\n /**\n * Initialize focus management after first update\n */\n firstUpdated() {\n // Set initial tabindex but don't focus\n this._updateItemFocus(0, false);\n }\n\n /**\n * Handle slot change to update focus management\n */\n private _handleSlotChange() {\n // Ensure focus is maintained when items change\n const items = this._getItems();\n if (items.length > 0) {\n // Reset to first item if current index is out of bounds\n if (this._focusedIndex >= items.length) {\n this._focusedIndex = 0;\n }\n // Re-apply focus management to new items, but only actually focus if keyboard interaction occurred\n this._updateItemFocus(this._focusedIndex, this._hasKeyboardInteraction);\n }\n }\n\n /**\n * Update lifecycle - ensure focus is maintained when items change\n */\n updated(changedProperties: Map<string, any>) {\n super.updated(changedProperties);\n\n // Re-initialize focus when items might have changed\n const items = this._getItems();\n if (items.length > 0) {\n // Ensure at least one item has tabindex=\"0\"\n const hasFocusableItem = items.some(\n (item) => item.getAttribute('tabindex') === '0'\n );\n if (!hasFocusableItem) {\n // Set tabindex but don't focus unless keyboard interaction occurred\n this._updateItemFocus(0, this._hasKeyboardInteraction);\n }\n }\n }\n\n render() {\n const {\n _handleKeyDown: handleKeyDown,\n _handleSlotChange: handleSlotChange,\n } = this;\n\n const listClasses = classMap({\n [`${blockClass}-list`]: true,\n });\n\n return html`\n <div\n class=${listClasses}\n role=\"grid\"\n aria-multiselectable=${this._multi}\n tabindex=\"0\"\n @keydown=${handleKeyDown}\n >\n <div class=\"${blockClass}-list-body\">\n <slot @slotchange=${handleSlotChange}></slot>\n </div>\n </div>\n `;\n }\n\n static styles = styles;\n}\n\nexport default CDSAddSelectContent;\n"],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Copyright IBM Corp. 2020, 2026
3
- *
4
- * This source code is licensed under the Apache-2.0 license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- import { css } from "lit";
9
- //#region src/components/add-select/add-select-content.scss?lit
10
- var add_select_content_default = css([".c4p--add-select__next{position:relative}.c4p--add-select__next,.c4p--add-select__next__body{block-size:100%;display:flex;flex-direction:column;inline-size:100%}.c4p--add-select__next__header{border-block-end:1px solid var(--cds-border-subtle-01,#c6c6c6);padding-block-end:.5rem;padding-block-start:1rem;padding-inline:1rem}.c4p--add-select__next__search{margin-block-end:1rem}.c4p--add-select__next__search--with-actions{align-items:flex-end;display:flex}.c4p--add-select__next__search-input{flex:1}.c4p--add-select__next__global-actions{align-items:flex-end;display:flex}.c4p--add-select__next__sub-header{align-items:center;display:flex;justify-content:space-between}.c4p--add-select__next__tags{align-items:center;display:flex;gap:.5rem}.c4p--add-select__next__tags-label{color:var(--cds-text-primary,#161616);font-size:var(--cds-heading-compact-02-font-size,1rem);font-weight:var(--cds-heading-compact-02-font-weight,600);letter-spacing:var(--cds-heading-compact-02-letter-spacing,0);line-height:var(--cds-heading-compact-02-line-height,1.375);margin:0}.c4p--add-select__next__sub-header-actions{align-items:center;display:flex;gap:.5rem;margin-inline-start:1rem}.c4p--add-select__next__content{display:flex;flex:1;flex-direction:column;overflow:auto}.c4p--add-select__next-list{display:flex;flex:1;flex-direction:column;overflow-y:auto}@supports (overflow-block:auto){.c4p--add-select__next-list{overflow-block:auto}}.c4p--add-select__next-list:focus{outline:none}.c4p--add-select__next-list-body{display:flex;flex-direction:column}.c4p--add-select__next-list-body--horizontal{align-items:stretch;block-size:100%;flex-direction:row}.c4p--add-select__next-list-body--horizontal .c4p--add-select__next-column{padding-block:1rem;padding-inline:1rem}.c4p--add-select__next-row{border-inline-start:.125rem solid transparent;display:flex;transition:background-color 70ms cubic-bezier(.2,0,.38,.9)}.c4p--add-select__next-row:focus{outline:.125rem solid var(--cds-focus,#0f62fe);outline-offset:-.125rem}.c4p--add-select__next-row:focus:not(:focus-visible){outline:none}.c4p--add-select__next-row--selected{background-color:var(--cds-layer-selected-01,#e0e0e0)}.c4p--add-select__next-row--selected .c4p--add-select__next-row__cell-wrapper{border-block-end-color:var(--cds-border-subtle-selected-01,#c6c6c6)}.c4p--add-select__next-row--disabled{cursor:not-allowed}.c4p--add-select__next-row--disabled .c4p--add-select__next-row__subtitle,.c4p--add-select__next-row--disabled .c4p--add-select__next-row__title{color:var(--cds-text-disabled,hsla(0,0%,9%,.25))}.c4p--add-select__next-row--disabled .c4p--add-select__next-row__icon svg,.c4p--add-select__next-row--disabled .c4p--add-select__next-row__nav-indicator svg,.c4p--add-select__next-row--disabled .c4p--add-select__next-row__view-item-panel svg{fill:var(--cds-icon-disabled,hsla(0,0%,9%,.25))}.c4p--add-select__next-row:hover:not(.c4p--add-select__next-row--disabled){background:var(--cds-layer-hover-01,#e8e8e8)}.c4p--add-select__next-row:hover:not(.c4p--add-select__next-row--disabled) .c4p--add-select__next-row__title{color:var(--cds-link-primary,#0f62fe)}.c4p--add-select__next-row:hover:not(.c4p--add-select__next-row--disabled) .c4p--add-select__next-row__nav-indicator svg,.c4p--add-select__next-row:hover:not(.c4p--add-select__next-row--disabled) .c4p--add-select__next-row__view-item-panel svg{fill:var(--cds-icon-disabled,hsla(0,0%,9%,.25))}.c4p--add-select__next-row--selected:hover:not(.c4p--add-select__next-row--disabled){background:var(--cds-layer-selected-hover-01,#d1d1d1)}.c4p--add-select__next-row--selected:hover:not(.c4p--add-select__next-row--disabled) .c4p--add-select__next-row__title{color:var(--cds-text-primary,#161616)}.c4p--add-select__next-row--selected:hover:not(.c4p--add-select__next-row--disabled) .c4p--add-select__next-row__nav-indicator svg,.c4p--add-select__next-row--selected:hover:not(.c4p--add-select__next-row--disabled) .c4p--add-select__next-row__view-item-panel svg{fill:var(--cds-icon-primary,#161616)}.c4p--add-select__next-row__cell{display:flex;flex:1;flex-direction:column}.c4p--add-select__next-row__cell-wrapper{align-items:center;border-block-end:1px solid var(--cds-border-subtle-01,#c6c6c6);display:flex;justify-content:space-between;min-block-size:3rem;padding-block:.5rem;padding-inline:1rem}.c4p--add-select__next-row__content{align-items:center;align-self:center;display:flex;flex:1}.c4p--add-select__next-row__checkbox{align-self:center;flex:none;margin-inline-end:1rem}.c4p--add-select__next-row__radio{align-self:center}.c4p--add-select__next-row__radio .cds--radio-button__appearance{margin-inline-end:0}.c4p--add-select__next-row__icon{align-items:center;display:flex;margin-inline-end:.5rem}.c4p--add-select__next-row__text{display:flex;flex:1;flex-direction:column}.c4p--add-select__next-row__title{color:var(--cds-text-primary,#161616);display:block;font-size:var(--cds-body-compact-01-font-size,.875rem);font-weight:var(--cds-body-compact-01-font-weight,400);letter-spacing:var(--cds-body-compact-01-letter-spacing,.16px);line-height:var(--cds-body-compact-01-line-height,1.28572)}.c4p--add-select__next-row__subtitle{color:var(--cds-text-secondary,#525252);display:block;font-size:var(--cds-helper-text-01-font-size,.75rem);letter-spacing:var(--cds-helper-text-01-letter-spacing,.32px);line-height:var(--cds-helper-text-01-line-height,1.33333)}.c4p--add-select__next-row__meta{align-items:center;display:flex;margin-inline-start:.5rem}.c4p--add-select__next-row__view-item-panel{margin-inline-start:auto}.c4p--add-select__next-row-item-panel--selected{background-color:var(--cds-layer-hover-01,#e8e8e8);border-inline-start:.125rem solid var(--cds-interactive,#0f62fe)}@media screen and (prefers-reduced-motion:reduce){.c4p--add-select__next-row__nav-indicator{align-items:center;cursor:pointer;display:flex;justify-content:center;margin-inline-start:.5rem;padding-block:.25rem;padding-inline:.25rem;transition:none}.c4p--add-select__next-row__nav-indicator:hover{background-color:var(--cds-background-hover,hsla(0,0%,55%,.12))}.c4p--add-select__next-row__nav-indicator:focus{outline:.125rem solid var(--cds-focus,#0f62fe);outline-offset:-.125rem}.c4p--add-select__next-row__nav-indicator svg{fill:var(--cds-icon-primary,#161616)}}.c4p--add-select__next-row__nav-indicator{align-items:center;cursor:pointer;display:flex;justify-content:center;margin-inline-start:.5rem;padding-block:.25rem;padding-inline:.25rem;transition:background-color 70ms cubic-bezier(.2,0,.38,.9)}.c4p--add-select__next-row__nav-indicator:hover{background-color:var(--cds-background-hover,hsla(0,0%,55%,.12))}.c4p--add-select__next-row__nav-indicator:focus{outline:.125rem solid var(--cds-focus,#0f62fe);outline-offset:-.125rem}.c4p--add-select__next-row__nav-indicator svg{fill:var(--cds-icon-primary,#161616)}.c4p--add-select__next-row--skeleton{cursor:default;pointer-events:none}.c4p--add-select__next-row--skeleton:hover{background:none}.c4p--add-select__next-row--skeleton .c4p--add-select__next-row__skeleton-control{background-color:var(--cds-skeleton-element,#c6c6c6);block-size:1rem;border-radius:.125rem;flex:none;inline-size:1rem;margin-inline-end:1rem}.c4p--add-select__next-row--skeleton .c4p--add-select__next-row__icon .cds--icon--skeleton{block-size:2rem;border-radius:50%;inline-size:2rem}.c4p--add-select__next-row--skeleton .c4p--add-select__next-row__icon .cds--icon--skeleton:before{animation:none;border-radius:50%}.c4p--add-select__next-row--skeleton .c4p--add-select__next-row__skeleton-title{margin-block-end:0}.c4p--add-select__next-column{block-size:100%;border-inline-end:1px solid var(--cds-border-subtle-01,#c6c6c6);display:flex;flex-direction:column;min-inline-size:300px;padding-block:1rem;padding-inline:1rem}.c4p--add-select__next-column:last-child{border-inline-end:none}.c4p--add-select__next-list-body--horizontal .c4p--add-select__next-column:last-child{border-inline-end:1px solid var(--cds-border-subtle-01,#c6c6c6)}.c4p--add-select__next-column__actions,.c4p--add-select__next-column__search--with-actions{align-items:flex-end;display:flex}.c4p--add-select__next-column__search-bar{padding-block-end:0;padding-block-start:1rem;padding-inline:1rem}.c4p--add-select__next-column__search-wrapper{align-items:center;display:flex;gap:0}.c4p--add-select__next-column__search-input{flex:1}.c4p--add-select__next-column__controls{align-items:center;display:flex;gap:0}.c4p--add-select__next-column__filter-button,.c4p--add-select__next-column__sort-button{flex:none}.c4p--add-select__next-column__filter-popover{padding-block:1rem;padding-inline:1rem}.c4p--add-select__next-column__filter-popover .cds--checkbox-wrapper{margin-block-end:.5rem}.c4p--add-select__next-column__filter-popover .cds--checkbox-wrapper:last-child{margin-block-end:0}.c4p--add-select__next-column__header{align-items:center;border-block-end:1px solid var(--cds-border-subtle-01,#c6c6c6);display:flex;padding-block:1rem;padding-inline:1rem}.c4p--add-select__next-column__select-all .cds--checkbox-label{align-items:center;display:flex;gap:0}.c4p--add-select__next-column__select-all .cds--checkbox-label-text{align-items:center;display:flex;gap:.5rem;margin-inline-start:.5rem}.c4p--add-select__next-column__title-wrapper{align-items:center;display:flex;gap:.5rem}.c4p--add-select__next-column__title{font-size:var(--cds-heading-compact-01-font-size,.875rem);font-weight:var(--cds-heading-compact-01-font-weight,600);letter-spacing:var(--cds-heading-compact-01-letter-spacing,.16px);line-height:var(--cds-heading-compact-01-line-height,1.28572)}.c4p--add-select__next-column__rows{display:flex;flex:1;flex-direction:column;overflow-y:auto}@supports (overflow-block:auto){.c4p--add-select__next-column__rows{overflow-block:auto}}.c4p--add-select__next__breadcrumbs{flex-wrap:wrap}.c4p--add-select__next__breadcrumb-item,.c4p--add-select__next__breadcrumbs{align-items:center;display:flex;gap:.25rem}.c4p--add-select__next__breadcrumb-button{background:none;border:none;color:var(--cds-link-primary,#0f62fe);cursor:pointer;font-size:var(--cds-body-compact-01-font-size,.875rem);font-weight:var(--cds-body-compact-01-font-weight,400);letter-spacing:var(--cds-body-compact-01-letter-spacing,.16px);line-height:var(--cds-body-compact-01-line-height,1.28572);padding-block:0;padding-inline:0;text-decoration:none}.c4p--add-select__next__breadcrumb-button:hover{color:var(--cds-link-primary-hover,#0043ce);text-decoration:underline}.c4p--add-select__next__breadcrumb-button:focus{outline:.125rem solid var(--cds-focus,#0f62fe);outline-offset:.125rem}.c4p--add-select__next__breadcrumb-separator{align-items:center;color:var(--cds-text-secondary,#525252);display:flex}.c4p--add-select__next__breadcrumb-separator svg{fill:currentColor}.c4p--add-select__next__breadcrumb-current{color:var(--cds-text-primary,#161616);font-size:var(--cds-body-compact-01-font-size,.875rem);font-weight:var(--cds-body-compact-01-font-weight,400);letter-spacing:var(--cds-body-compact-01-letter-spacing,.16px);line-height:var(--cds-body-compact-01-line-height,1.28572)}.c4p--add-select__next__selection-summary{display:flex;flex-direction:column}.c4p--add-select__next__selection-summary-header{align-items:center;border-block-end:1px solid var(--cds-layer-accent-01,#e0e0e0);display:flex;padding-block-end:.5rem;padding-block-start:1.5rem;padding-inline:1rem}.c4p--add-select__next__selection-summary-title{font-size:var(--cds-heading-compact-02-font-size,1rem);font-weight:var(--cds-heading-compact-02-font-weight,600);letter-spacing:var(--cds-heading-compact-02-letter-spacing,0);line-height:var(--cds-heading-compact-02-line-height,1.375);margin-inline-end:.5rem}.c4p--add-select__next__selection-summary-header-actions{align-items:center;display:flex;gap:.5rem;margin-inline-start:auto}.c4p--add-select__next__selection-summary-item-default{border-block-end:1px solid var(--cds-border-subtle-01,#c6c6c6);padding-block:.75rem;padding-inline:1rem}.c4p--add-select__next__selection-summary-item-default-title{color:var(--cds-text-primary,#161616);font-size:var(--cds-body-compact-01-font-size,.875rem);font-weight:var(--cds-body-compact-01-font-weight,400);letter-spacing:var(--cds-body-compact-01-letter-spacing,.16px);line-height:var(--cds-body-compact-01-line-height,1.28572)}.c4p--add-select__next__selection-summary-item-default-subtitle{color:var(--cds-text-secondary,#525252);font-size:var(--cds-body-01-font-size,.875rem);font-weight:var(--cds-body-01-font-weight,400);letter-spacing:var(--cds-body-01-letter-spacing,.16px);line-height:var(--cds-body-01-line-height,1.42857)}.c4p--add-select__next__selection-summary-item{background-color:var(--cds-layer-01,#f4f4f4);border-block-end:1px solid var(--cds-border-subtle-01,#c6c6c6);position:relative}.c4p--add-select__next__selection-summary-item:hover{background-color:var(--cds-layer-hover-01,#e8e8e8)}.c4p--add-select__next__selection-summary-item--accordion .cds--accordion__item,.c4p--add-select__next__selection-summary-item--accordion .cds--accordion__item:last-child{border-block-end:none;border-block-start:none}.c4p--add-select__next__selection-summary-item--accordion .cds--accordion__heading{min-block-size:unset;padding-block:.75rem;padding-inline-end:1rem}.c4p--add-select__next__selection-summary-item--default .c4p--add-select__next__selection-summary-item-title-wrapper{align-items:center;display:flex;justify-content:space-between;padding-block:.75rem;padding-inline:1rem}.c4p--add-select__next__selection-summary-item--default .c4p--add-select__next__selection-summary-item-content{padding-block-end:.75rem;padding-inline:1rem}.c4p--add-select__next__selection-summary-item--default .c4p--add-select__next__selection-summary-item-title{font-size:var(--cds-heading-compact-01-font-size,.875rem);font-weight:var(--cds-heading-compact-01-font-weight,600);letter-spacing:var(--cds-heading-compact-01-letter-spacing,.16px);line-height:var(--cds-heading-compact-01-line-height,1.28572)}.c4p--add-select__next__selection-summary-item-title-wrapper{align-items:center;display:flex;justify-content:space-between}.c4p--add-select__next__selection-summary-item-selected-item{flex:1}.c4p--add-select__next__selection-summary-item-title{color:var(--cds-text-primary,#161616);font-size:var(--cds-body-compact-01-font-size,.875rem);font-weight:var(--cds-body-compact-01-font-weight,400);letter-spacing:var(--cds-body-compact-01-letter-spacing,.16px);line-height:var(--cds-body-compact-01-line-height,1.28572)}.c4p--add-select__next__selection-summary-item-subtitle{color:var(--cds-text-secondary,#525252);font-size:var(--cds-body-01-font-size,.875rem);font-weight:var(--cds-body-01-font-weight,400);letter-spacing:var(--cds-body-01-letter-spacing,.16px);line-height:var(--cds-body-01-line-height,1.42857)}.c4p--add-select__next__selection-summary-item-entry{margin-block-end:1rem}.c4p--add-select__next__selection-summary-item-header{color:var(--cds-text-secondary,#525252);font-size:var(--cds-label-01-font-size,.75rem);font-weight:var(--cds-label-01-font-weight,400);letter-spacing:var(--cds-label-01-letter-spacing,.32px);line-height:var(--cds-label-01-line-height,1.33333);margin-block-end:.5rem}.c4p--add-select__next__selection-summary-item-body{font-size:var(--cds-body-01-font-size,.875rem);font-weight:var(--cds-body-01-font-weight,400);letter-spacing:var(--cds-body-01-letter-spacing,.16px);line-height:var(--cds-body-01-line-height,1.42857);margin-block-end:1rem}.c4p--add-select__next__selection-summary-item-remove-button-container{align-items:center;display:inline-flex;justify-content:center;padding-inline-start:.5rem}.c4p--add-select__next__selection-summary-item--accordion .c4p--add-select__next__selection-summary-item-remove-button-container{inset-block-start:50%;inset-inline-end:1rem;padding-inline-start:0;position:absolute;transform:translateY(-50%)}.c4p--add-select__next__selection-summary-item-remove-button{opacity:0;transition:opacity 70ms cubic-bezier(.2,0,.38,.9)}@media screen and (prefers-reduced-motion:reduce){.c4p--add-select__next__selection-summary-item-remove-button{transition:none}}.c4p--add-select__next__selection-summary-item:focus-within .c4p--add-select__next__selection-summary-item-remove-button,.c4p--add-select__next__selection-summary-item:hover .c4p--add-select__next__selection-summary-item-remove-button{opacity:1}.c4p--add-select__next__selection-summary-item-content{margin-block-start:0}.c4p--add-select__next__selection-summary .cds--accordion__arrow{transform:rotate(90deg)}.c4p--add-select__next__selection-summary .cds--accordion__item--active .cds--accordion__arrow{transform:rotate(-90deg)}.c4p--add-select__next__selection-summary .cds--accordion--start .cds--accordion__arrow{margin-block:0;margin-inline-end:0;margin-inline-start:1rem}.c4p--add-select__next__selection-summary .cds--accordion--start .cds--accordion__title{margin-inline-end:0;margin-inline-start:.5rem;padding-inline-end:2rem}.c4p--add-select__next__selection-summary .cds--accordion__item--active .cds--accordion__content{margin-block-start:0;padding-block:1rem;padding-inline:1rem}.c4p--add-select__next__item-summary-panel-header{align-items:center;border-block-end:1px solid var(--cds-layer-accent-01,#e0e0e0);display:flex;gap:.5rem;justify-content:space-between;padding-block-end:.5rem;padding-block-start:2rem;padding-inline:1rem}.c4p--add-select__next__item-summary-panel-title{font-size:var(--cds-heading-compact-02-font-size,1rem);font-weight:var(--cds-heading-compact-02-font-weight,600);letter-spacing:var(--cds-heading-compact-02-letter-spacing,0);line-height:var(--cds-heading-compact-02-line-height,1.375)}.c4p--add-select__next__item-summary-panel-body{padding-block:1rem;padding-inline:1rem}.c4p--add-select__next__item-summary-panel-entry{margin-block-end:1rem}.c4p--add-select__next__item-summary-panel-entry-title{font-size:var(--cds-heading-compact-01-font-size,.875rem);font-weight:var(--cds-heading-compact-01-font-weight,600);letter-spacing:var(--cds-heading-compact-01-letter-spacing,.16px);line-height:var(--cds-heading-compact-01-line-height,1.28572)}.c4p--add-select__next__item-summary-panel-entry-body{font-size:var(--cds-body-compact-01-font-size,.875rem);font-weight:var(--cds-body-compact-01-font-weight,400);letter-spacing:var(--cds-body-compact-01-letter-spacing,.16px);line-height:var(--cds-body-compact-01-line-height,1.28572)}:host(c4p-add-select-content){display:block}:host(c4p-add-select-content) .c4p--add-select__next-list{display:flex;flex-direction:column;overflow-y:auto}@supports (overflow-block:auto){:host(c4p-add-select-content) .c4p--add-select__next-list{overflow-block:auto}}:host(c4p-add-select-content) .c4p--add-select__next-list:focus{outline:none}:host(c4p-add-select-content) .c4p--add-select__next-list-body{display:flex;flex-direction:column}"]);
11
- //#endregion
12
- export { add_select_content_default as default };
13
-
14
- //# sourceMappingURL=add-select-content.scss.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-select-content.scss.js","names":[],"sources":["../../../src/components/add-select/add-select-content.scss?lit"],"sourcesContent":["/**\n * Copyright IBM Corp. 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n$css--plex: true !default;\n\n/* Carbon and IBM Products styles */\n@use '@carbon/styles/scss/theme' as *;\n@use '@carbon/styles/scss/spacing' as *;\n\n$prefix: 'c4p';\n\n/* Import shared AddSelect composable/next styles from ibm-products-styles */\n@use '@carbon/ibm-products-styles/scss/components/AddSelect/add-select_next'\n as *;\n\n/* Web Component specific overrides */\n:host(#{$prefix}-add-select-content) {\n display: block;\n\n /* Apply shared styles within shadow DOM */\n .#{$block-class__next}-list {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n @supports (overflow-block: auto) {\n overflow-block: auto;\n }\n\n &:focus {\n outline: none;\n }\n }\n\n .#{$block-class__next}-list-body {\n display: flex;\n flex-direction: column;\n }\n}\n"],"mappings":""}
@@ -1,188 +0,0 @@
1
- /**
2
- * Copyright IBM Corp. 2020, 2026
3
- *
4
- * This source code is licensed under the Apache-2.0 license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- import "../../globals/settings.js";
9
- import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.js";
10
- import add_select_content_default$1 from "./add-select-content.scss.js";
11
- import { classMap } from "lit/directives/class-map.js";
12
- import { LitElement, html } from "lit";
13
- import { carbonElement } from "@carbon/web-components/es/globals/decorators/carbon-element.js";
14
- //#region src/components/add-select/add-select-content.ts
15
- /**
16
- * @license
17
- *
18
- * Copyright IBM Corp. 2026
19
- *
20
- * This source code is licensed under the Apache-2.0 license found in the
21
- * LICENSE file in the root directory of this source tree.
22
- */
23
- const blockClass = `c4p--add-select__next-list`;
24
- /**
25
- * Add Select Content component - contains the list of selectable items
26
- * @element c4p-add-select-content
27
- * @slot default - Contains c4p-add-select-row components
28
- */
29
- let CDSAddSelectContent = class CDSAddSelectContent extends LitElement {
30
- constructor(..._args) {
31
- super(..._args);
32
- this._focusedIndex = 0;
33
- this._hasKeyboardInteraction = false;
34
- }
35
- /**
36
- * Whether this is a multi-select list (inherited from parent c4p-add-select)
37
- * @private
38
- */
39
- get _multi() {
40
- return this.closest(`c4p-add-select`)?.multi ?? false;
41
- }
42
- /**
43
- * Get all item elements
44
- */
45
- _getItems() {
46
- const slot = this.shadowRoot?.querySelector("slot");
47
- if (!slot) return [];
48
- return slot.assignedElements({ flatten: true }).filter((el) => el.tagName.toLowerCase() === `c4p-add-select-row`);
49
- }
50
- /**
51
- * Update focus on items - only one item should have tabindex="0"
52
- */
53
- _updateItemFocus(focusIndex, shouldFocus = true) {
54
- const items = this._getItems();
55
- if (items.length === 0) return;
56
- this._focusedIndex = Math.max(0, Math.min(focusIndex, items.length - 1));
57
- items.forEach((item, index) => {
58
- if (index === this._focusedIndex) {
59
- item.setAttribute("tabindex", "0");
60
- if (shouldFocus) item.focus();
61
- } else item.setAttribute("tabindex", "-1");
62
- });
63
- }
64
- /**
65
- * Handle keyboard navigation
66
- */
67
- _handleKeyDown(event) {
68
- const items = this._getItems();
69
- if (items.length === 0) return;
70
- this._hasKeyboardInteraction = true;
71
- const currentItem = items[this._focusedIndex];
72
- let handled = false;
73
- switch (event.key) {
74
- case "ArrowDown":
75
- event.preventDefault();
76
- this._updateItemFocus(this._focusedIndex + 1);
77
- handled = true;
78
- break;
79
- case "ArrowUp":
80
- event.preventDefault();
81
- this._updateItemFocus(this._focusedIndex - 1);
82
- handled = true;
83
- break;
84
- case "ArrowRight":
85
- if (currentItem && currentItem.hasAttribute("has-children")) {
86
- event.preventDefault();
87
- const navigateEvent = new CustomEvent("c4p-add-select-row-navigate", {
88
- bubbles: true,
89
- composed: true,
90
- detail: {
91
- itemId: currentItem.getAttribute("item-id"),
92
- title: currentItem.getAttribute("title"),
93
- parentId: currentItem.getAttribute("parent-id") || ""
94
- }
95
- });
96
- currentItem.dispatchEvent(navigateEvent);
97
- handled = true;
98
- }
99
- break;
100
- case "Enter":
101
- case " ":
102
- event.preventDefault();
103
- if (currentItem) {
104
- const newSelected = !currentItem.hasAttribute("selected");
105
- if (newSelected) currentItem.setAttribute("selected", "");
106
- else currentItem.removeAttribute("selected");
107
- const selectEvent = new CustomEvent("c4p-add-select-row-select", {
108
- bubbles: true,
109
- composed: true,
110
- detail: {
111
- itemId: currentItem.getAttribute("item-id"),
112
- selected: newSelected,
113
- value: currentItem.getAttribute("value")
114
- }
115
- });
116
- currentItem.dispatchEvent(selectEvent);
117
- }
118
- handled = true;
119
- break;
120
- case "Home":
121
- if (event.ctrlKey) {
122
- event.preventDefault();
123
- this._updateItemFocus(0);
124
- handled = true;
125
- }
126
- break;
127
- case "End":
128
- if (event.ctrlKey) {
129
- event.preventDefault();
130
- this._updateItemFocus(items.length - 1);
131
- handled = true;
132
- }
133
- break;
134
- }
135
- if (handled) event.stopPropagation();
136
- }
137
- /**
138
- * Initialize focus management after first update
139
- */
140
- firstUpdated() {
141
- this._updateItemFocus(0, false);
142
- }
143
- /**
144
- * Handle slot change to update focus management
145
- */
146
- _handleSlotChange() {
147
- const items = this._getItems();
148
- if (items.length > 0) {
149
- if (this._focusedIndex >= items.length) this._focusedIndex = 0;
150
- this._updateItemFocus(this._focusedIndex, this._hasKeyboardInteraction);
151
- }
152
- }
153
- /**
154
- * Update lifecycle - ensure focus is maintained when items change
155
- */
156
- updated(changedProperties) {
157
- super.updated(changedProperties);
158
- const items = this._getItems();
159
- if (items.length > 0) {
160
- if (!items.some((item) => item.getAttribute("tabindex") === "0")) this._updateItemFocus(0, this._hasKeyboardInteraction);
161
- }
162
- }
163
- render() {
164
- const { _handleKeyDown: handleKeyDown, _handleSlotChange: handleSlotChange } = this;
165
- return html`
166
- <div
167
- class=${classMap({ [`${blockClass}-list`]: true })}
168
- role="grid"
169
- aria-multiselectable=${this._multi}
170
- tabindex="0"
171
- @keydown=${handleKeyDown}
172
- >
173
- <div class="${blockClass}-list-body">
174
- <slot @slotchange=${handleSlotChange}></slot>
175
- </div>
176
- </div>
177
- `;
178
- }
179
- static {
180
- this.styles = add_select_content_default$1;
181
- }
182
- };
183
- CDSAddSelectContent = __decorate([carbonElement(`c4p-add-select-content`)], CDSAddSelectContent);
184
- var add_select_content_default = CDSAddSelectContent;
185
- //#endregion
186
- export { add_select_content_default as default };
187
-
188
- //# sourceMappingURL=add-select-content.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-select-content.js","names":["styles","customElement"],"sources":["../../../src/components/add-select/add-select-content.ts"],"sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { LitElement, html } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport { prefix } from '../../globals/settings';\nimport styles from './add-select-content.scss?lit';\n\nconst blockClass = `${prefix}--add-select__next-list`;\n\n/**\n * Add Select Content component - contains the list of selectable items\n * @element c4p-add-select-content\n * @slot default - Contains c4p-add-select-row components\n */\n@customElement(`${prefix}-add-select-content`)\nclass CDSAddSelectContent extends LitElement {\n /**\n * Whether this is a multi-select list (inherited from parent c4p-add-select)\n * @private\n */\n private get _multi(): boolean {\n const parent = this.closest(`${prefix}-add-select`) as any;\n return parent?.multi ?? false;\n }\n\n /**\n * Current focused item index\n */\n private _focusedIndex = 0;\n\n /**\n * Track if user has interacted with keyboard navigation\n */\n private _hasKeyboardInteraction = false;\n\n /**\n * Get all item elements\n */\n private _getItems(): HTMLElement[] {\n const slot = this.shadowRoot?.querySelector('slot');\n if (!slot) {\n return [];\n }\n\n const assignedElements = slot.assignedElements({ flatten: true });\n return assignedElements.filter(\n (el) => el.tagName.toLowerCase() === `${prefix}-add-select-row`\n ) as HTMLElement[];\n }\n\n /**\n * Update focus on items - only one item should have tabindex=\"0\"\n */\n private _updateItemFocus(focusIndex: number, shouldFocus = true) {\n const items = this._getItems();\n if (items.length === 0) {\n return;\n }\n\n // Ensure focusIndex is within bounds\n this._focusedIndex = Math.max(0, Math.min(focusIndex, items.length - 1));\n\n items.forEach((item, index) => {\n if (index === this._focusedIndex) {\n item.setAttribute('tabindex', '0');\n if (shouldFocus) {\n item.focus();\n }\n } else {\n item.setAttribute('tabindex', '-1');\n }\n });\n }\n\n /**\n * Handle keyboard navigation\n */\n private _handleKeyDown(event: KeyboardEvent) {\n const items = this._getItems();\n if (items.length === 0) {\n return;\n }\n\n // Mark that keyboard interaction has occurred\n this._hasKeyboardInteraction = true;\n\n const currentItem = items[this._focusedIndex];\n let handled = false;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this._updateItemFocus(this._focusedIndex + 1);\n handled = true;\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n this._updateItemFocus(this._focusedIndex - 1);\n handled = true;\n break;\n\n case 'ArrowRight':\n // Check if current item has children\n if (currentItem && currentItem.hasAttribute('has-children')) {\n event.preventDefault();\n // Trigger the item's navigate event\n const navigateEvent = new CustomEvent('c4p-add-select-row-navigate', {\n bubbles: true,\n composed: true,\n detail: {\n itemId: currentItem.getAttribute('item-id'),\n title: currentItem.getAttribute('title'),\n parentId: currentItem.getAttribute('parent-id') || '',\n },\n });\n currentItem.dispatchEvent(navigateEvent);\n handled = true;\n }\n break;\n\n case 'Enter':\n case ' ':\n event.preventDefault();\n // Trigger the item's selection\n if (currentItem) {\n const isSelected = currentItem.hasAttribute('selected');\n const newSelected = !isSelected;\n\n // Update the item's selected attribute\n if (newSelected) {\n currentItem.setAttribute('selected', '');\n } else {\n currentItem.removeAttribute('selected');\n }\n\n // Dispatch selection event\n const selectEvent = new CustomEvent('c4p-add-select-row-select', {\n bubbles: true,\n composed: true,\n detail: {\n itemId: currentItem.getAttribute('item-id'),\n selected: newSelected,\n value: currentItem.getAttribute('value'),\n },\n });\n currentItem.dispatchEvent(selectEvent);\n }\n handled = true;\n break;\n\n case 'Home':\n if (event.ctrlKey) {\n event.preventDefault();\n this._updateItemFocus(0);\n handled = true;\n }\n break;\n\n case 'End':\n if (event.ctrlKey) {\n event.preventDefault();\n this._updateItemFocus(items.length - 1);\n handled = true;\n }\n break;\n }\n\n if (handled) {\n event.stopPropagation();\n }\n }\n\n /**\n * Initialize focus management after first update\n */\n firstUpdated() {\n // Set initial tabindex but don't focus\n this._updateItemFocus(0, false);\n }\n\n /**\n * Handle slot change to update focus management\n */\n private _handleSlotChange() {\n // Ensure focus is maintained when items change\n const items = this._getItems();\n if (items.length > 0) {\n // Reset to first item if current index is out of bounds\n if (this._focusedIndex >= items.length) {\n this._focusedIndex = 0;\n }\n // Re-apply focus management to new items, but only actually focus if keyboard interaction occurred\n this._updateItemFocus(this._focusedIndex, this._hasKeyboardInteraction);\n }\n }\n\n /**\n * Update lifecycle - ensure focus is maintained when items change\n */\n updated(changedProperties: Map<string, any>) {\n super.updated(changedProperties);\n\n // Re-initialize focus when items might have changed\n const items = this._getItems();\n if (items.length > 0) {\n // Ensure at least one item has tabindex=\"0\"\n const hasFocusableItem = items.some(\n (item) => item.getAttribute('tabindex') === '0'\n );\n if (!hasFocusableItem) {\n // Set tabindex but don't focus unless keyboard interaction occurred\n this._updateItemFocus(0, this._hasKeyboardInteraction);\n }\n }\n }\n\n render() {\n const {\n _handleKeyDown: handleKeyDown,\n _handleSlotChange: handleSlotChange,\n } = this;\n\n const listClasses = classMap({\n [`${blockClass}-list`]: true,\n });\n\n return html`\n <div\n class=${listClasses}\n role=\"grid\"\n aria-multiselectable=${this._multi}\n tabindex=\"0\"\n @keydown=${handleKeyDown}\n >\n <div class=\"${blockClass}-list-body\">\n <slot @slotchange=${handleSlotChange}></slot>\n </div>\n </div>\n `;\n }\n\n static styles = styles;\n}\n\nexport default CDSAddSelectContent;\n"],"mappings":"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"}