@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
@@ -1 +1 @@
1
- {"version":3,"file":"add-select-data.js","names":[],"sources":["../../../../../../ibm-products-utilities/src/utils/add-select/add-select-data.ts"],"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\nimport { ReactNode } from 'react';\n\n/**\n * Status types for items in the hierarchical data structure\n */\nexport type ItemStatus = 'checked' | 'unchecked' | 'indeterminate';\n\n/**\n * Interface for item details metadata\n */\nexport interface ItemDetails {\n [key: string]: unknown;\n}\n\n/**\n * Interface for hierarchical data items\n */\nexport interface AddSelectItem {\n /** Unique identifier for the item */\n id: string;\n /** Display title for the item */\n title?: string;\n /** Value associated with the item */\n value?: string;\n /** Subtitle or secondary text */\n subtitle?: string;\n /** Whether the item is currently selected */\n selected?: boolean;\n /** Selection status (checked, unchecked, or indeterminate for parent nodes) */\n status?: ItemStatus;\n /** Whether the item is disabled and cannot be selected */\n disabled?: boolean;\n /** Icon or visual element to display with the item */\n icon?: ReactNode;\n /** Nested children items */\n children?: {\n entries: AddSelectItem[];\n };\n /** Additional metadata and details about the item */\n itemDetails?: ItemDetails;\n [key: string]: unknown; // Allow additional properties\n}\n\n/**\n * Options for search functionality\n */\nexport interface SearchOptions {\n caseSensitive?: boolean;\n searchFields?: string[]; // Fields to search in (default: ['title', 'value'])\n maxResults?: number; // Maximum number of results to return\n}\n\n/**\n * AddSelectData - A lightweight, framework-agnostic utility for managing hierarchical data\n *\n * This utility provides standard APIs for common operations such as setting, selecting,\n * traversing, searching, and sorting hierarchical data structures. It encapsulates data\n * logic separate from UI, allowing both React and Web Components to reuse the same\n * data management functions.\n */\nexport class AddSelectData {\n private items: AddSelectItem[] = [];\n private itemMap: Map<string, AddSelectItem> = new Map();\n private parentMap: Map<string, string> = new Map(); // child id -> parent id\n private selectedIds: Set<string> = new Set(); // Track selected IDs for O(1) lookup\n private depthCache: Map<string, number> = new Map(); // Cache item depths\n private selectedItemsCache: AddSelectItem[] | null = null; // Memoized selected items\n\n /**\n * Initialize or replace the hierarchical data\n * @param items - Array of hierarchical items\n */\n setItems(items: AddSelectItem[]): void {\n this.items = items;\n this._invalidateCaches();\n this._buildMaps(items);\n }\n\n /**\n * Get the full list of items\n * @returns Array of all items\n */\n getItems(): AddSelectItem[] {\n return this.items;\n }\n\n /**\n * Retrieve a single item by its id\n * @param id - The item id\n * @returns The item or undefined if not found\n */\n getItem(id: string): AddSelectItem | undefined {\n return this.itemMap.get(id);\n }\n\n /**\n * Update a given item with new properties\n * @param id - The item id\n * @param newProperties - Properties to update\n * @returns true if item was found and updated, false otherwise\n */\n setItem(id: string, newProperties: Partial<AddSelectItem>): boolean {\n const item = this.itemMap.get(id);\n if (!item) {\n return false;\n }\n\n Object.assign(item, newProperties);\n\n // Invalidate cache if selection-related properties changed\n if ('selected' in newProperties || 'status' in newProperties) {\n this._invalidateSelectionCache();\n }\n\n return true;\n }\n\n /**\n * Returns an array of items marked as selected (memoized)\n * @returns Array of selected items\n */\n getSelectedItems(): AddSelectItem[] {\n // Return cached result if available\n if (this.selectedItemsCache !== null) {\n return this.selectedItemsCache;\n }\n\n // Build and cache the result\n const selected: AddSelectItem[] = [];\n this.selectedIds.forEach((id) => {\n const item = this.itemMap.get(id);\n if (item) {\n selected.push(item);\n }\n });\n\n this.selectedItemsCache = selected;\n return selected;\n }\n\n /**\n * Mark one or more items (by id) as selected\n * @param ids - Single id or array of ids to select\n * @param exclusive - If true, deselect all other items (default: false)\n */\n setSelectedItems(ids: string | string[], exclusive: boolean = false): void {\n const idArray = Array.isArray(ids) ? ids : [ids];\n\n if (exclusive) {\n // Efficiently clear all selections using the Set\n this.selectedIds.forEach((id) => {\n const item = this.itemMap.get(id);\n if (item) {\n item.selected = false;\n item.status = 'unchecked';\n }\n });\n this.selectedIds.clear();\n }\n\n // Select specified items\n idArray.forEach((id) => {\n const item = this.itemMap.get(id);\n if (item) {\n item.selected = true;\n item.status = 'checked';\n this.selectedIds.add(id);\n }\n });\n\n this._invalidateSelectionCache();\n }\n\n /**\n * Get direct children of a node\n * @param id - The parent item id\n * @returns Array of child items or empty array if no children\n */\n getItemChildren(id: string): AddSelectItem[] {\n const item = this.itemMap.get(id);\n if (!item) {\n return [];\n }\n return item.children?.entries ?? [];\n }\n\n /**\n * Get the parent of a node\n * @param id - The child item id\n * @returns The parent item or undefined if no parent (root level)\n */\n getItemParent(id: string): AddSelectItem | undefined {\n const parentId = this.parentMap.get(id);\n return parentId ? this.itemMap.get(parentId) : undefined;\n }\n\n /**\n * Get all ancestors (parents up to the root) of a node\n * @param id - The item id\n * @returns Array of ancestor items from immediate parent to root\n */\n getItemParents(id: string): AddSelectItem[] {\n const parents: AddSelectItem[] = [];\n let currentId: string | undefined = id;\n\n while (currentId) {\n const parentId = this.parentMap.get(currentId);\n if (!parentId) {\n break;\n }\n\n const parent = this.itemMap.get(parentId);\n if (parent) {\n parents.push(parent);\n }\n currentId = parentId;\n }\n\n return parents;\n }\n\n /**\n * Retrieve the selected state status of an item\n * @param id - The item id\n * @returns The status or undefined if item not found\n */\n getItemStatus(id: string): ItemStatus | undefined {\n return this.itemMap.get(id)?.status;\n }\n\n /**\n * Set or update the status of an item\n * @param id - The item id\n * @param status - The new status\n * @returns true if item was found and updated, false otherwise\n */\n setItemStatus(id: string, status: ItemStatus): boolean {\n const item = this.itemMap.get(id);\n if (!item) {\n return false;\n }\n\n const wasSelected = item.selected;\n item.status = status;\n item.selected = status === 'checked';\n\n // Update selectedIds Set\n if (item.selected) {\n this.selectedIds.add(id);\n } else {\n this.selectedIds.delete(id);\n }\n\n // Invalidate cache if selection changed\n if (wasSelected !== item.selected) {\n this._invalidateSelectionCache();\n }\n\n return true;\n }\n\n /**\n * Check whether an item is selected (O(1) lookup)\n * @param id - The item id\n * @returns true if selected, false otherwise\n */\n isSelected(id: string): boolean {\n return this.selectedIds.has(id);\n }\n\n /**\n * Search items based on a query and return matching items\n * @param query - The search query string\n * @param options - Search options\n * @returns Array of matching items\n */\n search(query: string, options: SearchOptions = {}): AddSelectItem[] {\n // Early return for empty query\n if (!query) {\n return [];\n }\n\n const {\n caseSensitive = false,\n searchFields = ['title', 'value'],\n maxResults,\n } = options;\n\n const searchTerm = caseSensitive ? query : query.toLowerCase();\n const results: AddSelectItem[] = [];\n\n // Use early termination if maxResults is specified\n const shouldContinue = (): boolean => {\n return !maxResults || results.length < maxResults;\n };\n\n this._traverseItems(this.items, (item) => {\n if (!shouldContinue()) {\n return;\n }\n\n for (const field of searchFields) {\n const fieldValue = item[field];\n if (fieldValue) {\n const valueToSearch = caseSensitive\n ? String(fieldValue)\n : String(fieldValue).toLowerCase();\n\n if (valueToSearch.includes(searchTerm)) {\n results.push(item);\n break; // Don't add the same item multiple times\n }\n }\n }\n });\n\n return results;\n }\n\n /**\n * Sort items based on a comparator function\n * @param compareFn - Comparison function for sorting\n * @param recursive - If true, sort children recursively (default: false)\n */\n sort(\n compareFn: (a: AddSelectItem, b: AddSelectItem) => number,\n recursive: boolean = false\n ): void {\n // Sort recursively first if needed\n if (recursive) {\n this._sortRecursive(this.items, compareFn);\n }\n\n // Then sort the top level\n this.items.sort(compareFn);\n\n // Rebuild maps and caches after sorting\n this._invalidateCaches();\n this._buildMaps(this.items);\n }\n\n /**\n * Clear all selections (optimized with Set)\n */\n clearSelections(): void {\n // Efficiently clear using the selectedIds Set\n this.selectedIds.forEach((id) => {\n const item = this.itemMap.get(id);\n if (item) {\n item.selected = false;\n item.status = 'unchecked';\n }\n });\n this.selectedIds.clear();\n this._invalidateSelectionCache();\n }\n\n /**\n * Get the depth/level of an item in the hierarchy (cached)\n * @param id - The item id\n * @returns The depth (0 for root level items) or -1 if not found\n */\n getItemDepth(id: string): number {\n // Check cache first\n const cachedDepth = this.depthCache.get(id);\n if (cachedDepth !== undefined) {\n return cachedDepth;\n }\n\n // Item doesn't exist\n if (!this.itemMap.has(id)) {\n return -1;\n }\n\n // Calculate and cache depth\n let depth = 0;\n let currentId: string | undefined = id;\n\n while (currentId) {\n const parentId = this.parentMap.get(currentId);\n if (!parentId) {\n break;\n }\n depth++;\n currentId = parentId;\n }\n\n this.depthCache.set(id, depth);\n return depth;\n }\n\n /**\n * Check if an item has children\n * @param id - The item id\n * @returns true if item has children, false otherwise\n */\n hasChildren(id: string): boolean {\n const item = this.itemMap.get(id);\n return !!item?.children?.entries?.length;\n }\n\n /**\n * Get all descendant items of a node\n * @param id - The parent item id\n * @returns Array of all descendant items\n */\n getItemDescendants(id: string): AddSelectItem[] {\n const item = this.itemMap.get(id);\n if (!item?.children?.entries) {\n return [];\n }\n\n const descendants: AddSelectItem[] = [];\n this._traverseItems(item.children.entries, (child) => {\n descendants.push(child);\n });\n\n return descendants;\n }\n\n /**\n * Check if an item has any selected descendants (optimized)\n * @param id - The item id\n * @param selectedIds - Set of selected item IDs (defaults to internal selectedIds)\n * @returns true if any descendant is selected, false otherwise\n */\n hasSelectedDescendants(\n id: string,\n selectedIds: Set<string> = this.selectedIds\n ): boolean {\n const children = this.getItemChildren(id);\n if (!children.length) {\n return false;\n }\n\n // Check if any child or their descendants are selected\n for (const child of children) {\n if (\n selectedIds.has(child.id) ||\n this.hasSelectedDescendants(child.id, selectedIds)\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Check if all descendants of an item are selected (optimized)\n * @param id - The item id\n * @param selectedIds - Set of selected item IDs (defaults to internal selectedIds)\n * @returns true if all descendants are selected, false otherwise\n */\n allDescendantsSelected(\n id: string,\n selectedIds: Set<string> = this.selectedIds\n ): boolean {\n const item = this.itemMap.get(id);\n if (!item) {\n return false;\n }\n\n const children = this.getItemChildren(id);\n if (!children.length) {\n return selectedIds.has(item.id);\n }\n\n // All children must be selected and all their descendants must be selected\n for (const child of children) {\n if (\n !selectedIds.has(child.id) ||\n !this.allDescendantsSelected(child.id, selectedIds)\n ) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Get all descendant IDs from an item (including the item itself)\n * @param id - The item id\n * @returns Array of all descendant IDs including the item itself\n */\n getAllDescendantIds(id: string): string[] {\n const item = this.itemMap.get(id);\n if (!item) {\n return [];\n }\n\n const ids: string[] = [id];\n const children = this.getItemChildren(id);\n\n for (const child of children) {\n ids.push(...this.getAllDescendantIds(child.id));\n }\n\n return ids;\n }\n\n /**\n * Get only top-level selected items (items without selected ancestors)\n * @param selectedIds - Set of selected item IDs (defaults to internal selectedIds)\n * @returns Array of top-level selected items\n */\n getTopLevelSelectedItems(\n selectedIds: Set<string> = this.selectedIds\n ): AddSelectItem[] {\n const topLevelItems: AddSelectItem[] = [];\n const processedIds = new Set<string>();\n\n // Helper to check if any ancestor is selected\n const hasSelectedAncestor = (itemId: string): boolean => {\n const parents = this.getItemParents(itemId);\n return parents.some((parent) => selectedIds.has(parent.id));\n };\n\n // Collect all selected items that don't have a selected ancestor\n selectedIds.forEach((id) => {\n if (!processedIds.has(id) && !hasSelectedAncestor(id)) {\n const item = this.itemMap.get(id);\n if (item) {\n topLevelItems.push(item);\n // Mark all descendants as processed\n const descendantIds = this.getAllDescendantIds(id);\n descendantIds.forEach((descId) => processedIds.add(descId));\n }\n }\n });\n\n return topLevelItems;\n }\n\n /**\n * Invalidate all caches\n * @private\n */\n private _invalidateCaches(): void {\n this.selectedItemsCache = null;\n this.depthCache.clear();\n }\n\n /**\n * Invalidate selection cache only\n * @private\n */\n private _invalidateSelectionCache(): void {\n this.selectedItemsCache = null;\n }\n\n /**\n * Build internal maps for efficient lookups (optimized with depth caching)\n * @private\n */\n private _buildMaps(\n items: AddSelectItem[],\n parentId?: string,\n depth: number = 0\n ): void {\n if (!parentId) {\n // Clear maps when building from root\n this.itemMap.clear();\n this.parentMap.clear();\n this.selectedIds.clear();\n this.depthCache.clear();\n }\n\n items.forEach((item) => {\n this.itemMap.set(item.id, item);\n this.depthCache.set(item.id, depth);\n\n if (parentId) {\n this.parentMap.set(item.id, parentId);\n }\n\n // Track selected items\n if (item.selected) {\n this.selectedIds.add(item.id);\n }\n\n if (item.children?.entries) {\n this._buildMaps(item.children.entries, item.id, depth + 1);\n }\n });\n }\n\n /**\n * Traverse all items and apply a callback function\n * @private\n */\n private _traverseItems(\n items: AddSelectItem[],\n callback: (item: AddSelectItem) => void\n ): void {\n for (const item of items) {\n callback(item);\n if (item.children?.entries) {\n this._traverseItems(item.children.entries, callback);\n }\n }\n }\n\n /**\n * Sort items recursively\n * @private\n */\n private _sortRecursive(\n items: AddSelectItem[],\n compareFn: (a: AddSelectItem, b: AddSelectItem) => number\n ): void {\n for (const item of items) {\n if (item.children?.entries) {\n item.children.entries.sort(compareFn);\n this._sortRecursive(item.children.entries, compareFn);\n }\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"add-select-data.js","names":[],"sources":["../../../../../../ibm-products-utilities/src/utils/add-select/add-select-data.ts"],"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\nimport { ReactNode } from 'react';\n\n/**\n * Status types for items in the hierarchical data structure\n */\nexport type ItemStatus = 'checked' | 'unchecked' | 'indeterminate';\n\n/**\n * A single labelled detail entry for display in `defaultContent()`.\n * Use this form when you want `AddSelectItemPanel` or\n * `AddSelectSelectionSummaryItem` to render key-value pairs automatically.\n */\nexport interface ItemDetailEntry {\n /** User-visible label shown as the row heading */\n label: string;\n /** Value displayed beneath the label */\n value: string | number;\n}\n\n/**\n * Item details metadata.\n *\n * **Preferred form** — labelled array consumed by `defaultContent()`:\n * ```ts\n * itemDetails: [\n * { label: 'Category', value: 'Analytics' },\n * { label: 'Owner', value: 'Marketing Team' },\n * ]\n * ```\n *\n * **Legacy form** — arbitrary record for custom renderers that access\n * named keys directly (e.g. `item.itemDetails.description`). Not rendered\n * by `defaultContent()`.\n */\nexport type ItemDetails = ItemDetailEntry[] | Record<string, unknown>;\n\n/**\n * Interface for hierarchical data items\n */\nexport interface AddSelectItem {\n /** Unique identifier for the item */\n id: string;\n /** Display title for the item */\n title?: string;\n /** Value associated with the item */\n value?: string;\n /** Subtitle or secondary text */\n subtitle?: string;\n /** Whether the item is currently selected */\n selected?: boolean;\n /** Selection status (checked, unchecked, or indeterminate for parent nodes) */\n status?: ItemStatus;\n /** Whether the item is disabled and cannot be selected */\n disabled?: boolean;\n /** Icon or visual element to display with the item */\n icon?: ReactNode;\n /** Nested children items */\n children?: {\n entries: AddSelectItem[];\n };\n /** Additional metadata and details about the item */\n itemDetails?: ItemDetails;\n [key: string]: unknown; // Allow additional properties\n}\n\n/**\n * Options for search functionality\n */\nexport interface SearchOptions {\n caseSensitive?: boolean;\n searchFields?: string[]; // Fields to search in (default: ['title', 'value'])\n maxResults?: number; // Maximum number of results to return\n}\n\n/**\n * AddSelectData - A lightweight, framework-agnostic utility for managing hierarchical data\n *\n * This utility provides standard APIs for common operations such as setting, selecting,\n * traversing, searching, and sorting hierarchical data structures. It encapsulates data\n * logic separate from UI, allowing both React and Web Components to reuse the same\n * data management functions.\n */\nexport class AddSelectData {\n private items: AddSelectItem[] = [];\n private itemMap: Map<string, AddSelectItem> = new Map();\n private parentMap: Map<string, string> = new Map(); // child id -> parent id\n private selectedIds: Set<string> = new Set(); // Track selected IDs for O(1) lookup\n private depthCache: Map<string, number> = new Map(); // Cache item depths\n private selectedItemsCache: AddSelectItem[] | null = null; // Memoized selected items\n\n /**\n * Initialize or replace the hierarchical data\n * @param items - Array of hierarchical items\n */\n setItems(items: AddSelectItem[]): void {\n this.items = items;\n this._invalidateCaches();\n this._buildMaps(items);\n }\n\n /**\n * Get the full list of items\n * @returns Array of all items\n */\n getItems(): AddSelectItem[] {\n return this.items;\n }\n\n /**\n * Retrieve a single item by its id\n * @param id - The item id\n * @returns The item or undefined if not found\n */\n getItem(id: string): AddSelectItem | undefined {\n return this.itemMap.get(id);\n }\n\n /**\n * Update a given item with new properties\n * @param id - The item id\n * @param newProperties - Properties to update\n * @returns true if item was found and updated, false otherwise\n */\n setItem(id: string, newProperties: Partial<AddSelectItem>): boolean {\n const item = this.itemMap.get(id);\n if (!item) {\n return false;\n }\n\n Object.assign(item, newProperties);\n\n // Invalidate cache if selection-related properties changed\n if ('selected' in newProperties || 'status' in newProperties) {\n this._invalidateSelectionCache();\n }\n\n return true;\n }\n\n /**\n * Returns an array of items marked as selected (memoized)\n * @returns Array of selected items\n */\n getSelectedItems(): AddSelectItem[] {\n // Return cached result if available\n if (this.selectedItemsCache !== null) {\n return this.selectedItemsCache;\n }\n\n // Build and cache the result\n const selected: AddSelectItem[] = [];\n this.selectedIds.forEach((id) => {\n const item = this.itemMap.get(id);\n if (item) {\n selected.push(item);\n }\n });\n\n this.selectedItemsCache = selected;\n return selected;\n }\n\n /**\n * Mark one or more items (by id) as selected\n * @param ids - Single id or array of ids to select\n * @param exclusive - If true, deselect all other items (default: false)\n */\n setSelectedItems(ids: string | string[], exclusive: boolean = false): void {\n const idArray = Array.isArray(ids) ? ids : [ids];\n\n if (exclusive) {\n // Efficiently clear all selections using the Set\n this.selectedIds.forEach((id) => {\n const item = this.itemMap.get(id);\n if (item) {\n item.selected = false;\n item.status = 'unchecked';\n }\n });\n this.selectedIds.clear();\n }\n\n // Select specified items\n idArray.forEach((id) => {\n const item = this.itemMap.get(id);\n if (item) {\n item.selected = true;\n item.status = 'checked';\n this.selectedIds.add(id);\n }\n });\n\n this._invalidateSelectionCache();\n }\n\n /**\n * Get direct children of a node\n * @param id - The parent item id\n * @returns Array of child items or empty array if no children\n */\n getItemChildren(id: string): AddSelectItem[] {\n const item = this.itemMap.get(id);\n if (!item) {\n return [];\n }\n return item.children?.entries ?? [];\n }\n\n /**\n * Get the parent of a node\n * @param id - The child item id\n * @returns The parent item or undefined if no parent (root level)\n */\n getItemParent(id: string): AddSelectItem | undefined {\n const parentId = this.parentMap.get(id);\n return parentId ? this.itemMap.get(parentId) : undefined;\n }\n\n /**\n * Get all ancestors (parents up to the root) of a node\n * @param id - The item id\n * @returns Array of ancestor items from immediate parent to root\n */\n getItemParents(id: string): AddSelectItem[] {\n const parents: AddSelectItem[] = [];\n let currentId: string | undefined = id;\n\n while (currentId) {\n const parentId = this.parentMap.get(currentId);\n if (!parentId) {\n break;\n }\n\n const parent = this.itemMap.get(parentId);\n if (parent) {\n parents.push(parent);\n }\n currentId = parentId;\n }\n\n return parents;\n }\n\n /**\n * Retrieve the selected state status of an item\n * @param id - The item id\n * @returns The status or undefined if item not found\n */\n getItemStatus(id: string): ItemStatus | undefined {\n return this.itemMap.get(id)?.status;\n }\n\n /**\n * Set or update the status of an item\n * @param id - The item id\n * @param status - The new status\n * @returns true if item was found and updated, false otherwise\n */\n setItemStatus(id: string, status: ItemStatus): boolean {\n const item = this.itemMap.get(id);\n if (!item) {\n return false;\n }\n\n const wasSelected = item.selected;\n item.status = status;\n item.selected = status === 'checked';\n\n // Update selectedIds Set\n if (item.selected) {\n this.selectedIds.add(id);\n } else {\n this.selectedIds.delete(id);\n }\n\n // Invalidate cache if selection changed\n if (wasSelected !== item.selected) {\n this._invalidateSelectionCache();\n }\n\n return true;\n }\n\n /**\n * Check whether an item is selected (O(1) lookup)\n * @param id - The item id\n * @returns true if selected, false otherwise\n */\n isSelected(id: string): boolean {\n return this.selectedIds.has(id);\n }\n\n /**\n * Search items based on a query and return matching items\n * @param query - The search query string\n * @param options - Search options\n * @returns Array of matching items\n */\n search(query: string, options: SearchOptions = {}): AddSelectItem[] {\n // Early return for empty query\n if (!query) {\n return [];\n }\n\n const {\n caseSensitive = false,\n searchFields = ['title', 'value'],\n maxResults,\n } = options;\n\n const searchTerm = caseSensitive ? query : query.toLowerCase();\n const results: AddSelectItem[] = [];\n\n // Use early termination if maxResults is specified\n const shouldContinue = (): boolean => {\n return !maxResults || results.length < maxResults;\n };\n\n this._traverseItems(this.items, (item) => {\n if (!shouldContinue()) {\n return;\n }\n\n for (const field of searchFields) {\n const fieldValue = item[field];\n if (fieldValue) {\n const valueToSearch = caseSensitive\n ? String(fieldValue)\n : String(fieldValue).toLowerCase();\n\n if (valueToSearch.includes(searchTerm)) {\n results.push(item);\n break; // Don't add the same item multiple times\n }\n }\n }\n });\n\n return results;\n }\n\n /**\n * Sort items based on a comparator function\n * @param compareFn - Comparison function for sorting\n * @param recursive - If true, sort children recursively (default: false)\n */\n sort(\n compareFn: (a: AddSelectItem, b: AddSelectItem) => number,\n recursive: boolean = false\n ): void {\n // Sort recursively first if needed\n if (recursive) {\n this._sortRecursive(this.items, compareFn);\n }\n\n // Then sort the top level\n this.items.sort(compareFn);\n\n // Rebuild maps and caches after sorting\n this._invalidateCaches();\n this._buildMaps(this.items);\n }\n\n /**\n * Clear all selections (optimized with Set)\n */\n clearSelections(): void {\n // Efficiently clear using the selectedIds Set\n this.selectedIds.forEach((id) => {\n const item = this.itemMap.get(id);\n if (item) {\n item.selected = false;\n item.status = 'unchecked';\n }\n });\n this.selectedIds.clear();\n this._invalidateSelectionCache();\n }\n\n /**\n * Get the depth/level of an item in the hierarchy (cached)\n * @param id - The item id\n * @returns The depth (0 for root level items) or -1 if not found\n */\n getItemDepth(id: string): number {\n // Check cache first\n const cachedDepth = this.depthCache.get(id);\n if (cachedDepth !== undefined) {\n return cachedDepth;\n }\n\n // Item doesn't exist\n if (!this.itemMap.has(id)) {\n return -1;\n }\n\n // Calculate and cache depth\n let depth = 0;\n let currentId: string | undefined = id;\n\n while (currentId) {\n const parentId = this.parentMap.get(currentId);\n if (!parentId) {\n break;\n }\n depth++;\n currentId = parentId;\n }\n\n this.depthCache.set(id, depth);\n return depth;\n }\n\n /**\n * Check if an item has children\n * @param id - The item id\n * @returns true if item has children, false otherwise\n */\n hasChildren(id: string): boolean {\n const item = this.itemMap.get(id);\n return !!item?.children?.entries?.length;\n }\n\n /**\n * Get all descendant items of a node\n * @param id - The parent item id\n * @returns Array of all descendant items\n */\n getItemDescendants(id: string): AddSelectItem[] {\n const item = this.itemMap.get(id);\n if (!item?.children?.entries) {\n return [];\n }\n\n const descendants: AddSelectItem[] = [];\n this._traverseItems(item.children.entries, (child) => {\n descendants.push(child);\n });\n\n return descendants;\n }\n\n /**\n * Check if an item has any selected descendants (optimized)\n * @param id - The item id\n * @param selectedIds - Set of selected item IDs (defaults to internal selectedIds)\n * @returns true if any descendant is selected, false otherwise\n */\n hasSelectedDescendants(\n id: string,\n selectedIds: Set<string> = this.selectedIds\n ): boolean {\n const children = this.getItemChildren(id);\n if (!children.length) {\n return false;\n }\n\n // Check if any child or their descendants are selected\n for (const child of children) {\n if (\n selectedIds.has(child.id) ||\n this.hasSelectedDescendants(child.id, selectedIds)\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Check if all descendants of an item are selected (optimized)\n * @param id - The item id\n * @param selectedIds - Set of selected item IDs (defaults to internal selectedIds)\n * @returns true if all descendants are selected, false otherwise\n */\n allDescendantsSelected(\n id: string,\n selectedIds: Set<string> = this.selectedIds\n ): boolean {\n const item = this.itemMap.get(id);\n if (!item) {\n return false;\n }\n\n const children = this.getItemChildren(id);\n if (!children.length) {\n return selectedIds.has(item.id);\n }\n\n // All children must be selected and all their descendants must be selected\n for (const child of children) {\n if (\n !selectedIds.has(child.id) ||\n !this.allDescendantsSelected(child.id, selectedIds)\n ) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Get all descendant IDs from an item (including the item itself)\n * @param id - The item id\n * @returns Array of all descendant IDs including the item itself\n */\n getAllDescendantIds(id: string): string[] {\n const item = this.itemMap.get(id);\n if (!item) {\n return [];\n }\n\n const ids: string[] = [id];\n const children = this.getItemChildren(id);\n\n for (const child of children) {\n ids.push(...this.getAllDescendantIds(child.id));\n }\n\n return ids;\n }\n\n /**\n * Get only top-level selected items (items without selected ancestors)\n * @param selectedIds - Set of selected item IDs (defaults to internal selectedIds)\n * @returns Array of top-level selected items\n */\n getTopLevelSelectedItems(\n selectedIds: Set<string> = this.selectedIds\n ): AddSelectItem[] {\n const topLevelItems: AddSelectItem[] = [];\n const processedIds = new Set<string>();\n\n // Helper to check if any ancestor is selected\n const hasSelectedAncestor = (itemId: string): boolean => {\n const parents = this.getItemParents(itemId);\n return parents.some((parent) => selectedIds.has(parent.id));\n };\n\n // Collect all selected items that don't have a selected ancestor\n selectedIds.forEach((id) => {\n if (!processedIds.has(id) && !hasSelectedAncestor(id)) {\n const item = this.itemMap.get(id);\n if (item) {\n topLevelItems.push(item);\n // Mark all descendants as processed\n const descendantIds = this.getAllDescendantIds(id);\n descendantIds.forEach((descId) => processedIds.add(descId));\n }\n }\n });\n\n return topLevelItems;\n }\n\n /**\n * Invalidate all caches\n * @private\n */\n private _invalidateCaches(): void {\n this.selectedItemsCache = null;\n this.depthCache.clear();\n }\n\n /**\n * Invalidate selection cache only\n * @private\n */\n private _invalidateSelectionCache(): void {\n this.selectedItemsCache = null;\n }\n\n /**\n * Build internal maps for efficient lookups (optimized with depth caching)\n * @private\n */\n private _buildMaps(\n items: AddSelectItem[],\n parentId?: string,\n depth: number = 0\n ): void {\n if (!parentId) {\n // Clear maps when building from root\n this.itemMap.clear();\n this.parentMap.clear();\n this.selectedIds.clear();\n this.depthCache.clear();\n }\n\n items.forEach((item) => {\n this.itemMap.set(item.id, item);\n this.depthCache.set(item.id, depth);\n\n if (parentId) {\n this.parentMap.set(item.id, parentId);\n }\n\n // Track selected items\n if (item.selected) {\n this.selectedIds.add(item.id);\n }\n\n if (item.children?.entries) {\n this._buildMaps(item.children.entries, item.id, depth + 1);\n }\n });\n }\n\n /**\n * Traverse all items and apply a callback function\n * @private\n */\n private _traverseItems(\n items: AddSelectItem[],\n callback: (item: AddSelectItem) => void\n ): void {\n for (const item of items) {\n callback(item);\n if (item.children?.entries) {\n this._traverseItems(item.children.entries, callback);\n }\n }\n }\n\n /**\n * Sort items recursively\n * @private\n */\n private _sortRecursive(\n items: AddSelectItem[],\n compareFn: (a: AddSelectItem, b: AddSelectItem) => number\n ): void {\n for (const item of items) {\n if (item.children?.entries) {\n item.children.entries.sort(compareFn);\n this._sortRecursive(item.children.entries, compareFn);\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  //#region package.json
9
- var version = "0.45.0-rc.0";
9
+ var version = "0.46.0-rc.0";
10
10
  //#endregion
11
11
  export { version };
12
12
 
@@ -15,16 +15,14 @@ import '@carbon/web-components/es/components/link/index.js';
15
15
  /**
16
16
  * Add Select Body component - contains the main content area
17
17
  * @element c4p-add-select-body
18
- * @slot default - The main content area containing c4p-add-select-content
19
- * @slot header - Custom header content
20
- * @fires c4p-add-select-body-search - Fired when search term changes
18
+ * @slot default - The main content area containing c4p-add-select-column or rows
19
+ * @slot header - Replaces the entire header section
20
+ * @slot actions - Custom actions (filter/sort) rendered next to the search input
21
+ * @slot sub-header-actions - Custom content rendered after breadcrumbs and item count
22
+ * @fires c4p-add-select-body-search - Fired when search term changes; detail: { searchTerm }
23
+ * @fires c4p-add-select-body-breadcrumb-click - Fired when a breadcrumb link is clicked; detail: { index }
21
24
  */
22
25
  declare class CDSAddSelectBody extends LitElement {
23
- /**
24
- * Whether this is a multi-select (inherited from parent c4p-add-select)
25
- * @private
26
- */
27
- private get _multi();
28
26
  /**
29
27
  * Label for items section
30
28
  */
@@ -52,9 +50,13 @@ declare class CDSAddSelectBody extends LitElement {
52
50
  */
53
51
  private _searchTerm;
54
52
  /**
55
- * Item count for display
53
+ * Item count for display. When undefined, no count badge is rendered.
54
+ */
55
+ itemCount: number | undefined;
56
+ /**
57
+ * Whether to hide the search input
56
58
  */
57
- itemCount: number;
59
+ hideSearch: boolean;
58
60
  /**
59
61
  * Navigation path for breadcrumbs
60
62
  */
@@ -66,6 +68,9 @@ declare class CDSAddSelectBody extends LitElement {
66
68
  * Handle search input
67
69
  */
68
70
  private _handleSearch;
71
+ /** Tracks whether the header slot has been filled by the consumer */
72
+ private _hasHeaderSlot;
73
+ private _handleHeaderSlotChange;
69
74
  render(): import("lit-html").TemplateResult<1>;
70
75
  /**
71
76
  * The name of the custom event fired when search term changes
@@ -1 +1 @@
1
- {"version":3,"file":"add-select-body.d.ts","sourceRoot":"","sources":["../../../src/components/add-select/add-select-body.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAIvC,OAAO,sDAAsD,CAAC;AAC9D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,mDAAmD,CAAC;AAC3D,OAAO,0DAA0D,CAAC;AAClE,OAAO,oDAAoD,CAAC;AAM5D;;;;;;GAMG;AACH,cACM,gBAAiB,SAAQ,UAAU;IACvC;;;OAGG;IACH,OAAO,KAAK,MAAM,GAGjB;IAED;;OAEG;IAEH,UAAU,SAAM;IAEhB;;OAEG;IAEH,iBAAiB,SAAM;IAEvB;;OAEG;IAEH,uBAAuB,SAAY;IAEnC;;OAEG;IAIH;;OAEG;IAIH;;OAEG;IAEH,kBAAkB,SAAoB;IAEtC;;OAEG;IAEH,OAAO,CAAC,WAAW,CAAM;IAEzB;;OAEG;IAEH,SAAS,SAAK;IAEd;;OAEG;IAEH,IAAI,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IAEhD;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB,MAAM;IA2GN;;OAEG;IACH,MAAM,KAAK,WAAW,WAErB;IAED;;OAEG;IACH,MAAM,KAAK,oBAAoB,WAE9B;IAED,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"add-select-body.d.ts","sourceRoot":"","sources":["../../../src/components/add-select/add-select-body.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;AAGhD,OAAO,sDAAsD,CAAC;AAC9D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,mDAAmD,CAAC;AAC3D,OAAO,0DAA0D,CAAC;AAClE,OAAO,oDAAoD,CAAC;AAM5D;;;;;;;;;GASG;AACH,cACM,gBAAiB,SAAQ,UAAU;IACvC;;OAEG;IAEH,UAAU,SAAM;IAEhB;;OAEG;IAEH,iBAAiB,SAAM;IAEvB;;OAEG;IAEH,uBAAuB,SAAY;IAEnC;;OAEG;IAIH;;OAEG;IAIH;;OAEG;IAEH,kBAAkB,SAAoB;IAEtC;;OAEG;IAEH,OAAO,CAAC,WAAW,CAAM;IAEzB;;OAEG;IAEH,SAAS,EAAE,MAAM,GAAG,SAAS,CAAa;IAE1C;;OAEG;IAEH,UAAU,UAAS;IAEnB;;OAEG;IAEH,IAAI,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IAEhD;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB,qEAAqE;IAErE,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,uBAAuB;IAK/B,MAAM;IA4IN;;OAEG;IACH,MAAM,KAAK,WAAW,WAErB;IAED;;OAEG;IACH,MAAM,KAAK,oBAAoB,WAE9B;IAED,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,83 @@
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
+ import '@carbon/web-components/es/components/search/index.js';
11
+ import '@carbon/web-components/es/components/tag/index.js';
12
+ import '@carbon/web-components/es/components/checkbox/index.js';
13
+ /**
14
+ * Add Select Column component — optional column wrapper providing column-level
15
+ * search, title, and "Select All" functionality. Propagates `multi` context to
16
+ * child rows via the `multi` property/attribute.
17
+ * @element c4p-add-select-column
18
+ * @slot default - AddSelectRow elements
19
+ * @slot actions - Custom actions (filter/sort) placed next to column search
20
+ * @fires c4p-add-select-column-search - Fired when column search changes; detail: { searchTerm }
21
+ * @fires c4p-add-select-column-select-all - Fired when "Select All" checkbox changes; detail: { checked }
22
+ */
23
+ declare class CDSAddSelectColumn extends LitElement {
24
+ /**
25
+ * Column title shown in the header
26
+ */
27
+ title: string;
28
+ /**
29
+ * Label text for the column search input (accessibility)
30
+ */
31
+ searchLabel: string;
32
+ /**
33
+ * Placeholder text for the column search input
34
+ */
35
+ searchPlaceholder: string;
36
+ /**
37
+ * Whether to hide the column search input
38
+ */
39
+ hideSearch: boolean;
40
+ /**
41
+ * Whether this column uses multi-selection (checkboxes) or single-selection (radio buttons)
42
+ */
43
+ multi: boolean;
44
+ /**
45
+ * Whether to show the "Select All" checkbox (only when multi is true)
46
+ */
47
+ showSelectAll: boolean;
48
+ /**
49
+ * Total number of items in the column (shown in tag badge)
50
+ */
51
+ itemCount: number;
52
+ /**
53
+ * Whether all items are currently selected
54
+ */
55
+ allSelected: boolean;
56
+ /**
57
+ * Whether the "Select All" checkbox is in an indeterminate state
58
+ */
59
+ allIndeterminate: boolean;
60
+ /** Internal column search term */
61
+ private _searchTerm;
62
+ /** Whether the actions slot has any assigned content */
63
+ private _hasActionsSlot;
64
+ private _handleActionsSlotChange;
65
+ private _handleSearch;
66
+ private _handleSelectAll;
67
+ private _handleSlotChange;
68
+ updated(changed: Map<string, unknown>): void;
69
+ render(): import("lit-html").TemplateResult<1>;
70
+ /**
71
+ * The name of the custom event fired when column search changes.
72
+ * detail: { searchTerm: string }
73
+ */
74
+ static get eventSearch(): string;
75
+ /**
76
+ * The name of the custom event fired when "Select All" is toggled.
77
+ * detail: { checked: boolean }
78
+ */
79
+ static get eventSelectAll(): string;
80
+ static styles: any;
81
+ }
82
+ export default CDSAddSelectColumn;
83
+ //# sourceMappingURL=add-select-column.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-select-column.d.ts","sourceRoot":"","sources":["../../../src/components/add-select/add-select-column.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;AAIhD,OAAO,sDAAsD,CAAC;AAC9D,OAAO,mDAAmD,CAAC;AAC3D,OAAO,wDAAwD,CAAC;AAMhE;;;;;;;;;GASG;AACH,cACM,kBAAmB,SAAQ,UAAU;IACzC;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,WAAW,SAAY;IAEvB;;OAEG;IAEH,iBAAiB,SAAY;IAE7B;;OAEG;IAEH,UAAU,UAAS;IAEnB;;OAEG;IAEH,KAAK,UAAS;IAEd;;OAEG;IAEH,aAAa,UAAS;IAEtB;;OAEG;IAEH,SAAS,SAAK;IAEd;;OAEG;IAEH,WAAW,UAAS;IAEpB;;OAEG;IAEH,gBAAgB,UAAS;IAEzB,kCAAkC;IAElC,OAAO,CAAC,WAAW,CAAM;IAEzB,wDAAwD;IAExD,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAMrC,MAAM;IAkGN;;;OAGG;IACH,MAAM,KAAK,WAAW,WAErB;IAED;;;OAGG;IACH,MAAM,KAAK,cAAc,WAExB;IAED,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,58 @@
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
+ import '@carbon/web-components/es/components/icon-button/index.js';
11
+ import type { AddSelectItem } from '@carbon/ibm-products-utilities';
12
+ /**
13
+ * Add Select Item Panel — side panel displaying detailed information about an item.
14
+ * CSS modifier `${blockClass}__item-summary-panel--open` is added when `open` is true,
15
+ * enabling CSS-driven slide-in/out transitions.
16
+ * @element c4p-add-select-item-panel
17
+ * @slot default - Highest priority: replaces all body rendering when populated
18
+ * @slot render-item - Medium priority: receives item for custom rendering
19
+ * @fires c4p-add-select-item-panel-close - Fired when close icon is clicked
20
+ */
21
+ declare class CDSAddSelectItemPanel extends LitElement {
22
+ /**
23
+ * Panel title
24
+ */
25
+ title: string;
26
+ /**
27
+ * Item data (set via JS property)
28
+ */
29
+ item: AddSelectItem | null;
30
+ /**
31
+ * Controls panel visibility via CSS modifier class (enables CSS transitions)
32
+ */
33
+ open: boolean;
34
+ /**
35
+ * Accessible label for the close icon button
36
+ */
37
+ closeIconDescription: string;
38
+ /**
39
+ * Whether to show the close button
40
+ */
41
+ showCloseButton: boolean;
42
+ private _handleClose;
43
+ private _renderDefaultContent;
44
+ /** Whether the default slot has assigned elements */
45
+ private _hasDefaultSlot;
46
+ /** Whether the render-item slot has assigned elements */
47
+ private _hasRenderItemSlot;
48
+ private _handleDefaultSlotChange;
49
+ private _handleRenderItemSlotChange;
50
+ render(): import("lit-html").TemplateResult<1>;
51
+ /**
52
+ * The name of the custom event fired when the close icon is clicked.
53
+ */
54
+ static get eventClose(): string;
55
+ static styles: any;
56
+ }
57
+ export default CDSAddSelectItemPanel;
58
+ //# sourceMappingURL=add-select-item-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-select-item-panel.d.ts","sourceRoot":"","sources":["../../../src/components/add-select/add-select-item-panel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;AAIhD,OAAO,2DAA2D,CAAC;AAInE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAKpE;;;;;;;;GAQG;AACH,cACM,qBAAsB,SAAQ,UAAU;IAC5C;;OAEG;IAEH,KAAK,SAAkB;IAEvB;;OAEG;IAEH,IAAI,EAAE,aAAa,GAAG,IAAI,CAAQ;IAElC;;OAEG;IAEH,IAAI,UAAS;IAEb;;OAEG;IAEH,oBAAoB,SAAW;IAE/B;;OAEG;IAEH,eAAe,UAAQ;IAEvB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,qBAAqB;IA6B7B,qDAAqD;IAErD,OAAO,CAAC,eAAe,CAAS;IAEhC,yDAAyD;IAEzD,OAAO,CAAC,kBAAkB,CAAS;IAEnC,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,2BAA2B;IAMnC,MAAM;IAwDN;;OAEG;IACH,MAAM,KAAK,UAAU,WAEpB;IAED,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,eAAe,qBAAqB,CAAC"}
@@ -9,6 +9,9 @@
9
9
  import { LitElement } from 'lit';
10
10
  import '@carbon/web-components/es/components/checkbox/index.js';
11
11
  import '@carbon/web-components/es/components/radio-button/index.js';
12
+ import '@carbon/web-components/es/components/skeleton-text/index.js';
13
+ import '@carbon/web-components/es/components/skeleton-icon/index.js';
14
+ import '@carbon/web-components/es/components/icon-button/index.js';
12
15
  /**
13
16
  * Add Select Row component - represents a single selectable row
14
17
  * @element c4p-add-select-row
@@ -17,12 +20,15 @@ import '@carbon/web-components/es/components/radio-button/index.js';
17
20
  * @slot meta - Optional metadata slot
18
21
  * @fires c4p-add-select-row-select - Fired when row is selected/deselected
19
22
  * @fires c4p-add-select-row-navigate - Fired when navigating to children
23
+ * @fires c4p-add-select-row-item-panel-click - Fired when the item panel icon button is clicked
20
24
  */
21
25
  declare class CDSAddSelectRow extends LitElement {
22
26
  /**
23
- * Whether this is part of a multi-select list (inherited from parent c4p-add-select)
24
- * @private
27
+ * Whether this row renders a checkbox (multi) or radio button (single).
28
+ * Set by the parent c4p-add-select-column via the _column-multi attribute.
29
+ * Falls back to reading the nearest c4p-add-select wrapper when not set.
25
30
  */
31
+ private _columnMulti;
26
32
  private get _multi();
27
33
  /**
28
34
  * Unique identifier for the item
@@ -44,10 +50,36 @@ declare class CDSAddSelectRow extends LitElement {
44
50
  * Whether the item is selected
45
51
  */
46
52
  selected: boolean;
53
+ /**
54
+ * Whether the checkbox is in an indeterminate state (multi hierarchical)
55
+ */
56
+ indeterminate: boolean;
47
57
  /**
48
58
  * Whether the item is disabled
49
59
  */
50
60
  disabled: boolean;
61
+ /**
62
+ * Whether to render the row as a skeleton (loading) state
63
+ */
64
+ skeleton: boolean;
65
+ /** Whether the icon slot has assigned content */
66
+ private _hasIconSlot;
67
+ private _handleIconSlotChange;
68
+ /** Whether the rowContent slot has assigned content */
69
+ private _hasRowContentSlot;
70
+ private _handleRowContentSlotChange;
71
+ /**
72
+ * Whether to show the item details icon button
73
+ */
74
+ hasItemPanel: boolean;
75
+ /**
76
+ * Whether the item panel is currently open for this item
77
+ */
78
+ itemPanelOpen: boolean;
79
+ /**
80
+ * Accessible label for the item panel icon button
81
+ */
82
+ itemPanelIconDescription: string;
51
83
  /**
52
84
  * Whether the item has children (for navigation)
53
85
  */
@@ -56,6 +88,10 @@ declare class CDSAddSelectRow extends LitElement {
56
88
  * Parent ID for hierarchical navigation
57
89
  */
58
90
  parentId: string;
91
+ /**
92
+ * Handle item panel icon button click
93
+ */
94
+ private _handleItemPanelClick;
59
95
  /**
60
96
  * Handle navigation to children
61
97
  */
@@ -77,6 +113,10 @@ declare class CDSAddSelectRow extends LitElement {
77
113
  * The name of the custom event fired when navigating to children
78
114
  */
79
115
  static get eventNavigate(): string;
116
+ /**
117
+ * The name of the custom event fired when item panel icon button is clicked
118
+ */
119
+ static get eventItemPanelClick(): string;
80
120
  static styles: any;
81
121
  }
82
122
  export default CDSAddSelectRow;
@@ -1 +1 @@
1
- {"version":3,"file":"add-select-row.d.ts","sourceRoot":"","sources":["../../../src/components/add-select/add-select-row.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;AAIhD,OAAO,wDAAwD,CAAC;AAChE,OAAO,4DAA4D,CAAC;AASpE;;;;;;;;GAQG;AACH,cACM,eAAgB,SAAQ,UAAU;IACtC;;;OAGG;IACH,OAAO,KAAK,MAAM,GAGjB;IACD;;OAEG;IAEH,MAAM,SAAM;IAEZ;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,QAAQ,SAAM;IAEd;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,WAAW,UAAS;IAEpB;;OAEG;IAEH,QAAQ,SAAM;IAEd;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B,MAAM;IAsFN;;OAEG;IACH,MAAM,KAAK,WAAW,WAErB;IAED;;OAEG;IACH,MAAM,KAAK,aAAa,WAEvB;IAED,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"add-select-row.d.ts","sourceRoot":"","sources":["../../../src/components/add-select/add-select-row.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;AAIhD,OAAO,wDAAwD,CAAC;AAChE,OAAO,4DAA4D,CAAC;AACpE,OAAO,6DAA6D,CAAC;AACrE,OAAO,6DAA6D,CAAC;AACrE,OAAO,2DAA2D,CAAC;AAUnE;;;;;;;;;GASG;AACH,cACM,eAAgB,SAAQ,UAAU;IACtC;;;;OAIG;IAEH,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,KAAK,MAAM,GAMjB;IAED;;OAEG;IAEH,MAAM,SAAM;IAEZ;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,QAAQ,SAAM;IAEd;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,aAAa,UAAS;IAEtB;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,QAAQ,UAAS;IAEjB,iDAAiD;IAEjD,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,qBAAqB;IAK7B,uDAAuD;IAEvD,OAAO,CAAC,kBAAkB,CAAS;IAEnC,OAAO,CAAC,2BAA2B;IAMnC;;OAEG;IAEH,YAAY,UAAS;IAErB;;OAEG;IAEH,aAAa,UAAS;IAEtB;;OAEG;IAEH,wBAAwB,SAAkB;IAE1C;;OAEG;IAEH,WAAW,UAAS;IAEpB;;OAEG;IAEH,QAAQ,SAAM;IAEd;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B,MAAM;IA4JN;;OAEG;IACH,MAAM,KAAK,WAAW,WAErB;IAED;;OAEG;IACH,MAAM,KAAK,aAAa,WAEvB;IAED;;OAEG;IACH,MAAM,KAAK,mBAAmB,WAE7B;IAED,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,64 @@
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
+ import '@carbon/web-components/es/components/icon-button/index.js';
11
+ import type { AddSelectItem } from '@carbon/ibm-products-utilities';
12
+ /**
13
+ * Add Select Selection Summary Item — individual selected item display.
14
+ * @element c4p-add-select-selection-summary-item
15
+ * @slot default - Highest priority: replaces all rendering when populated
16
+ * @slot render-item - Custom full-row renderer; replaces title/subtitle/body but keeps remove button (second priority after default slot)
17
+ * @slot accordion-title - Custom accordion title (used when use-accordion is true)
18
+ * @slot accordion-body - Custom accordion body (used when use-accordion is true)
19
+ * @fires c4p-add-select-selection-summary-item-remove - Fired when remove button clicked; detail: { itemId }
20
+ */
21
+ declare class CDSAddSelectSelectionSummaryItem extends LitElement {
22
+ /**
23
+ * Item data (set via JS property)
24
+ */
25
+ item: AddSelectItem | null;
26
+ /**
27
+ * Use accordion pattern for display
28
+ */
29
+ useAccordion: boolean;
30
+ /**
31
+ * Accessible label for the remove button
32
+ */
33
+ removeButtonLabel: string;
34
+ /**
35
+ * When true, the remove button is not rendered
36
+ */
37
+ hideRemoveButton: boolean;
38
+ /** Whether the default slot has assigned elements */
39
+ private _hasDefaultSlot;
40
+ /** Whether the render-item slot has assigned elements */
41
+ private _hasRenderItemSlot;
42
+ /** Whether the accordion-title slot has assigned elements */
43
+ private _hasAccordionTitleSlot;
44
+ /** Whether the accordion-body slot has assigned elements */
45
+ private _hasAccordionBodySlot;
46
+ /** Whether the custom accordion is open */
47
+ private _accordionOpen;
48
+ private _handleDefaultSlotChange;
49
+ private _handleAccordionTitleSlotChange;
50
+ private _handleAccordionBodySlotChange;
51
+ private _handleRenderItemSlotChange;
52
+ private _handleRemove;
53
+ private _renderDefaultItemDetails;
54
+ private _renderRemoveButton;
55
+ render(): import("lit-html").TemplateResult<1>;
56
+ /**
57
+ * The name of the custom event fired when the remove button is clicked.
58
+ * detail: { itemId: string }
59
+ */
60
+ static get eventRemove(): string;
61
+ static styles: any;
62
+ }
63
+ export default CDSAddSelectSelectionSummaryItem;
64
+ //# sourceMappingURL=add-select-selection-summary-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-select-selection-summary-item.d.ts","sourceRoot":"","sources":["../../../src/components/add-select/add-select-selection-summary-item.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;AAIhD,OAAO,2DAA2D,CAAC;AAKnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAKpE;;;;;;;;GAQG;AACH,cACM,gCAAiC,SAAQ,UAAU;IACvD;;OAEG;IAEH,IAAI,EAAE,aAAa,GAAG,IAAI,CAAQ;IAElC;;OAEG;IAEH,YAAY,UAAS;IAErB;;OAEG;IAEH,iBAAiB,SAAiB;IAElC;;OAEG;IAEH,gBAAgB,UAAS;IAEzB,qDAAqD;IAErD,OAAO,CAAC,eAAe,CAAS;IAEhC,yDAAyD;IAEzD,OAAO,CAAC,kBAAkB,CAAS;IAEnC,6DAA6D;IAE7D,OAAO,CAAC,sBAAsB,CAAS;IAEvC,4DAA4D;IAE5D,OAAO,CAAC,qBAAqB,CAAS;IAEtC,2CAA2C;IAE3C,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,+BAA+B;IAMvC,OAAO,CAAC,8BAA8B;IAMtC,OAAO,CAAC,2BAA2B;IAMnC,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,yBAAyB;IAsBjC,OAAO,CAAC,mBAAmB;IAyB3B,MAAM;IAuJN;;;OAGG;IACH,MAAM,KAAK,WAAW,WAErB;IAED,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,eAAe,gCAAgC,CAAC"}
@@ -0,0 +1,48 @@
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
+ import '@carbon/web-components/es/components/tag/index.js';
11
+ import '@carbon/web-components/es/components/icon-button/index.js';
12
+ /**
13
+ * Add Select Selection Summary — displays the list of selected items.
14
+ * @element c4p-add-select-selection-summary
15
+ * @slot default - SelectionSummaryItem components or custom body content
16
+ * @slot header - Replaces the entire header section
17
+ * @slot header-actions - Custom actions alongside the edit icon
18
+ * @slot empty-state - Shown when selectedItemCount is 0 or not set
19
+ * @fires c4p-add-select-selection-summary-edit - Fired when edit icon is clicked
20
+ */
21
+ declare class CDSAddSelectSelectionSummary extends LitElement {
22
+ /**
23
+ * Panel title
24
+ */
25
+ title: string;
26
+ /**
27
+ * Number of selected items — shown as a badge next to the title when provided.
28
+ * Badge is hidden when this is omitted/undefined.
29
+ */
30
+ selectedItemCount: number | undefined;
31
+ /**
32
+ * Show edit icon next to title
33
+ */
34
+ showEditIcon: boolean;
35
+ /**
36
+ * Accessible label for the edit icon button
37
+ */
38
+ editIconDescription: string;
39
+ private _handleEdit;
40
+ render(): import("lit-html").TemplateResult<1>;
41
+ /**
42
+ * The name of the custom event fired when the edit icon is clicked.
43
+ */
44
+ static get eventEdit(): string;
45
+ static styles: any;
46
+ }
47
+ export default CDSAddSelectSelectionSummary;
48
+ //# sourceMappingURL=add-select-selection-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-select-selection-summary.d.ts","sourceRoot":"","sources":["../../../src/components/add-select/add-select-selection-summary.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;AAGhD,OAAO,mDAAmD,CAAC;AAC3D,OAAO,2DAA2D,CAAC;AAQnE;;;;;;;;GAQG;AACH,cACM,4BAA6B,SAAQ,UAAU;IACnD;;OAEG;IAEH,KAAK,SAAoB;IAEzB;;;OAGG;IAEH,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAa;IAElD;;OAEG;IAEH,YAAY,UAAS;IAErB;;OAEG;IAEH,mBAAmB,SAAqB;IAExC,OAAO,CAAC,WAAW;IASnB,MAAM;IA+CN;;OAEG;IACH,MAAM,KAAK,SAAS,WAEnB;IAED,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,eAAe,4BAA4B,CAAC"}
@@ -8,6 +8,9 @@
8
8
  */
9
9
  import './add-select';
10
10
  import './add-select-body';
11
+ import './add-select-column';
11
12
  import './add-select-row';
12
- import './add-select-content';
13
+ import './add-select-selection-summary';
14
+ import './add-select-selection-summary-item';
15
+ import './add-select-item-panel';
13
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/add-select/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,cAAc,CAAC;AACtB,OAAO,mBAAmB,CAAC;AAC3B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/add-select/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,cAAc,CAAC;AACtB,OAAO,mBAAmB,CAAC;AAC3B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,gCAAgC,CAAC;AACxC,OAAO,qCAAqC,CAAC;AAC7C,OAAO,yBAAyB,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carbon/ibm-products-web-components",
3
3
  "description": "Carbon for IBM Products Web Components",
4
- "version": "0.45.0",
4
+ "version": "0.46.0",
5
5
  "license": "Apache-2.0",
6
6
  "main": "es/index.js",
7
7
  "module": "es/index.js",
@@ -25,6 +25,7 @@
25
25
  "provenance": true
26
26
  },
27
27
  "exports": {
28
+ ".": "./es/index.js",
28
29
  "./es/*": "./es/*",
29
30
  "./es-custom/*": "./es-custom/*",
30
31
  "./lib/*": "./lib/*",
@@ -58,7 +59,7 @@
58
59
  "dependencies": {
59
60
  "@carbon-labs/wc-empty-state": "^0.22.0",
60
61
  "@carbon-labs/wc-resizer": "^0.3.0",
61
- "@carbon/ibm-products-styles": "^2.92.0",
62
+ "@carbon/ibm-products-styles": "^2.93.0",
62
63
  "@carbon/layout": "^11.54.0",
63
64
  "@carbon/styles": "^1.110.1",
64
65
  "@carbon/utilities": "^0.21.0",
@@ -71,14 +72,14 @@
71
72
  "devDependencies": {
72
73
  "@aarsteinmedia/dotlottie-player": "^6.0.5",
73
74
  "@blockquote/rollup-plugin-externalize-source-dependencies": "^1.0.0",
74
- "@carbon/ibm-products-utilities": "1.5.0",
75
+ "@carbon/ibm-products-utilities": "1.6.0",
75
76
  "@carbon/icon-helpers": "^10.77.0",
76
77
  "@carbon/icons": "^11.83.0",
77
78
  "@carbon/motion": "^11.47.0",
78
79
  "@figma/code-connect": "^1.4.0",
79
80
  "@ibm/telemetry-js-config-generator": "^2.1.0",
80
81
  "@mordech/vite-lit-loader": "^0.40.0",
81
- "@open-wc/testing": "^4.0.0",
82
+ "@open-wc/testing": "^5.0.0",
82
83
  "@stackblitz/sdk": "^1.11.0",
83
84
  "@storybook/addon-a11y": "^10.3.5",
84
85
  "@storybook/addon-docs": "^10.3.5",
@@ -88,7 +89,7 @@
88
89
  "@vitest/browser": "^3.2.0",
89
90
  "@vitest/coverage-v8": "^3.2.0",
90
91
  "autoprefixer": "^10.4.20",
91
- "c8": "^11.0.0",
92
+ "c8": "^12.0.0",
92
93
  "cssnano": "^7.0.6",
93
94
  "eslint": "^9.14.0",
94
95
  "eslint-config-carbon": "^3.25.0",
@@ -109,5 +110,5 @@
109
110
  "vitest": "^3.2.0",
110
111
  "web-component-analyzer": "2.0.0"
111
112
  },
112
- "gitHead": "452f9b6ddfcc5e76fc88cc005bfc5455944872cb"
113
+ "gitHead": "91d179a76c469fdcccc0c3a60900146b452e4055"
113
114
  }