@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":";;;;;;;;;;;;;;;;AAyFA,IAAa,gBAAb,MAA2B;;eACQ,EAAE;iCACW,IAAI,KAAK;mCACd,IAAI,KAAK;qCACf,IAAI,KAAK;oCACF,IAAI,KAAK;4BACE;;;;;;CAMrD,SAAS,OAA8B;AACrC,OAAK,QAAQ;AACb,OAAK,mBAAmB;AACxB,OAAK,WAAW,MAAM;;;;;;CAOxB,WAA4B;AAC1B,SAAO,KAAK;;;;;;;CAQd,QAAQ,IAAuC;AAC7C,SAAO,KAAK,QAAQ,IAAI,GAAG;;;;;;;;CAS7B,QAAQ,IAAY,eAAgD;EAClE,MAAM,OAAO,KAAK,QAAQ,IAAI,GAAG;AACjC,MAAI,CAAC,KACH,QAAO;AAGT,SAAO,OAAO,MAAM,cAAc;AAGlC,MAAI,cAAc,iBAAiB,YAAY,cAC7C,MAAK,2BAA2B;AAGlC,SAAO;;;;;;CAOT,mBAAoC;AAElC,MAAI,KAAK,uBAAuB,KAC9B,QAAO,KAAK;EAId,MAAM,WAA4B,EAAE;AACpC,OAAK,YAAY,SAAS,OAAO;GAC/B,MAAM,OAAO,KAAK,QAAQ,IAAI,GAAG;AACjC,OAAI,KACF,UAAS,KAAK,KAAK;IAErB;AAEF,OAAK,qBAAqB;AAC1B,SAAO;;;;;;;CAQT,iBAAiB,KAAwB,YAAqB,OAAa;EACzE,MAAM,UAAU,MAAM,QAAQ,IAAI,GAAG,MAAM,CAAC,IAAI;AAEhD,MAAI,WAAW;AAEb,QAAK,YAAY,SAAS,OAAO;IAC/B,MAAM,OAAO,KAAK,QAAQ,IAAI,GAAG;AACjC,QAAI,MAAM;AACR,UAAK,WAAW;AAChB,UAAK,SAAS;;KAEhB;AACF,QAAK,YAAY,OAAO;;AAI1B,UAAQ,SAAS,OAAO;GACtB,MAAM,OAAO,KAAK,QAAQ,IAAI,GAAG;AACjC,OAAI,MAAM;AACR,SAAK,WAAW;AAChB,SAAK,SAAS;AACd,SAAK,YAAY,IAAI,GAAG;;IAE1B;AAEF,OAAK,2BAA2B;;;;;;;CAQlC,gBAAgB,IAA6B;EAC3C,MAAM,OAAO,KAAK,QAAQ,IAAI,GAAG;AACjC,MAAI,CAAC,KACH,QAAO,EAAE;AAEX,SAAO,KAAK,UAAU,WAAW,EAAE;;;;;;;CAQrC,cAAc,IAAuC;EACnD,MAAM,WAAW,KAAK,UAAU,IAAI,GAAG;AACvC,SAAO,WAAW,KAAK,QAAQ,IAAI,SAAS,GAAG,KAAA;;;;;;;CAQjD,eAAe,IAA6B;EAC1C,MAAM,UAA2B,EAAE;EACnC,IAAI,YAAgC;AAEpC,SAAO,WAAW;GAChB,MAAM,WAAW,KAAK,UAAU,IAAI,UAAU;AAC9C,OAAI,CAAC,SACH;GAGF,MAAM,SAAS,KAAK,QAAQ,IAAI,SAAS;AACzC,OAAI,OACF,SAAQ,KAAK,OAAO;AAEtB,eAAY;;AAGd,SAAO;;;;;;;CAQT,cAAc,IAAoC;AAChD,SAAO,KAAK,QAAQ,IAAI,GAAG,EAAE;;;;;;;;CAS/B,cAAc,IAAY,QAA6B;EACrD,MAAM,OAAO,KAAK,QAAQ,IAAI,GAAG;AACjC,MAAI,CAAC,KACH,QAAO;EAGT,MAAM,cAAc,KAAK;AACzB,OAAK,SAAS;AACd,OAAK,WAAW,WAAW;AAG3B,MAAI,KAAK,SACP,MAAK,YAAY,IAAI,GAAG;MAExB,MAAK,YAAY,OAAO,GAAG;AAI7B,MAAI,gBAAgB,KAAK,SACvB,MAAK,2BAA2B;AAGlC,SAAO;;;;;;;CAQT,WAAW,IAAqB;AAC9B,SAAO,KAAK,YAAY,IAAI,GAAG;;;;;;;;CASjC,OAAO,OAAe,UAAyB,EAAE,EAAmB;AAElE,MAAI,CAAC,MACH,QAAO,EAAE;EAGX,MAAM,EACJ,gBAAgB,OAChB,eAAe,CAAC,SAAS,QAAQ,EACjC,eACE;EAEJ,MAAM,aAAa,gBAAgB,QAAQ,MAAM,aAAa;EAC9D,MAAM,UAA2B,EAAE;EAGnC,MAAM,uBAAgC;AACpC,UAAO,CAAC,cAAc,QAAQ,SAAS;;AAGzC,OAAK,eAAe,KAAK,QAAQ,SAAS;AACxC,OAAI,CAAC,gBAAgB,CACnB;AAGF,QAAK,MAAM,SAAS,cAAc;IAChC,MAAM,aAAa,KAAK;AACxB,QAAI;UACoB,gBAClB,OAAO,WAAW,GAClB,OAAO,WAAW,CAAC,aAAa,EAElB,SAAS,WAAW,EAAE;AACtC,cAAQ,KAAK,KAAK;AAClB;;;;IAIN;AAEF,SAAO;;;;;;;CAQT,KACE,WACA,YAAqB,OACf;AAEN,MAAI,UACF,MAAK,eAAe,KAAK,OAAO,UAAU;AAI5C,OAAK,MAAM,KAAK,UAAU;AAG1B,OAAK,mBAAmB;AACxB,OAAK,WAAW,KAAK,MAAM;;;;;CAM7B,kBAAwB;AAEtB,OAAK,YAAY,SAAS,OAAO;GAC/B,MAAM,OAAO,KAAK,QAAQ,IAAI,GAAG;AACjC,OAAI,MAAM;AACR,SAAK,WAAW;AAChB,SAAK,SAAS;;IAEhB;AACF,OAAK,YAAY,OAAO;AACxB,OAAK,2BAA2B;;;;;;;CAQlC,aAAa,IAAoB;EAE/B,MAAM,cAAc,KAAK,WAAW,IAAI,GAAG;AAC3C,MAAI,gBAAgB,KAAA,EAClB,QAAO;AAIT,MAAI,CAAC,KAAK,QAAQ,IAAI,GAAG,CACvB,QAAO;EAIT,IAAI,QAAQ;EACZ,IAAI,YAAgC;AAEpC,SAAO,WAAW;GAChB,MAAM,WAAW,KAAK,UAAU,IAAI,UAAU;AAC9C,OAAI,CAAC,SACH;AAEF;AACA,eAAY;;AAGd,OAAK,WAAW,IAAI,IAAI,MAAM;AAC9B,SAAO;;;;;;;CAQT,YAAY,IAAqB;AAE/B,SAAO,CAAC,CADK,KAAK,QAAQ,IAAI,GACjB,EAAE,UAAU,SAAS;;;;;;;CAQpC,mBAAmB,IAA6B;EAC9C,MAAM,OAAO,KAAK,QAAQ,IAAI,GAAG;AACjC,MAAI,CAAC,MAAM,UAAU,QACnB,QAAO,EAAE;EAGX,MAAM,cAA+B,EAAE;AACvC,OAAK,eAAe,KAAK,SAAS,UAAU,UAAU;AACpD,eAAY,KAAK,MAAM;IACvB;AAEF,SAAO;;;;;;;;CAST,uBACE,IACA,cAA2B,KAAK,aACvB;EACT,MAAM,WAAW,KAAK,gBAAgB,GAAG;AACzC,MAAI,CAAC,SAAS,OACZ,QAAO;AAIT,OAAK,MAAM,SAAS,SAClB,KACE,YAAY,IAAI,MAAM,GAAG,IACzB,KAAK,uBAAuB,MAAM,IAAI,YAAY,CAElD,QAAO;AAIX,SAAO;;;;;;;;CAST,uBACE,IACA,cAA2B,KAAK,aACvB;EACT,MAAM,OAAO,KAAK,QAAQ,IAAI,GAAG;AACjC,MAAI,CAAC,KACH,QAAO;EAGT,MAAM,WAAW,KAAK,gBAAgB,GAAG;AACzC,MAAI,CAAC,SAAS,OACZ,QAAO,YAAY,IAAI,KAAK,GAAG;AAIjC,OAAK,MAAM,SAAS,SAClB,KACE,CAAC,YAAY,IAAI,MAAM,GAAG,IAC1B,CAAC,KAAK,uBAAuB,MAAM,IAAI,YAAY,CAEnD,QAAO;AAIX,SAAO;;;;;;;CAQT,oBAAoB,IAAsB;AAExC,MAAI,CADS,KAAK,QAAQ,IAAI,GACrB,CACP,QAAO,EAAE;EAGX,MAAM,MAAgB,CAAC,GAAG;EAC1B,MAAM,WAAW,KAAK,gBAAgB,GAAG;AAEzC,OAAK,MAAM,SAAS,SAClB,KAAI,KAAK,GAAG,KAAK,oBAAoB,MAAM,GAAG,CAAC;AAGjD,SAAO;;;;;;;CAQT,yBACE,cAA2B,KAAK,aACf;EACjB,MAAM,gBAAiC,EAAE;EACzC,MAAM,+BAAe,IAAI,KAAa;EAGtC,MAAM,uBAAuB,WAA4B;AAEvD,UADgB,KAAK,eAAe,OACtB,CAAC,MAAM,WAAW,YAAY,IAAI,OAAO,GAAG,CAAC;;AAI7D,cAAY,SAAS,OAAO;AAC1B,OAAI,CAAC,aAAa,IAAI,GAAG,IAAI,CAAC,oBAAoB,GAAG,EAAE;IACrD,MAAM,OAAO,KAAK,QAAQ,IAAI,GAAG;AACjC,QAAI,MAAM;AACR,mBAAc,KAAK,KAAK;AAEF,UAAK,oBAAoB,GAClC,CAAC,SAAS,WAAW,aAAa,IAAI,OAAO,CAAC;;;IAG/D;AAEF,SAAO;;;;;;CAOT,oBAAkC;AAChC,OAAK,qBAAqB;AAC1B,OAAK,WAAW,OAAO;;;;;;CAOzB,4BAA0C;AACxC,OAAK,qBAAqB;;;;;;CAO5B,WACE,OACA,UACA,QAAgB,GACV;AACN,MAAI,CAAC,UAAU;AAEb,QAAK,QAAQ,OAAO;AACpB,QAAK,UAAU,OAAO;AACtB,QAAK,YAAY,OAAO;AACxB,QAAK,WAAW,OAAO;;AAGzB,QAAM,SAAS,SAAS;AACtB,QAAK,QAAQ,IAAI,KAAK,IAAI,KAAK;AAC/B,QAAK,WAAW,IAAI,KAAK,IAAI,MAAM;AAEnC,OAAI,SACF,MAAK,UAAU,IAAI,KAAK,IAAI,SAAS;AAIvC,OAAI,KAAK,SACP,MAAK,YAAY,IAAI,KAAK,GAAG;AAG/B,OAAI,KAAK,UAAU,QACjB,MAAK,WAAW,KAAK,SAAS,SAAS,KAAK,IAAI,QAAQ,EAAE;IAE5D;;;;;;CAOJ,eACE,OACA,UACM;AACN,OAAK,MAAM,QAAQ,OAAO;AACxB,YAAS,KAAK;AACd,OAAI,KAAK,UAAU,QACjB,MAAK,eAAe,KAAK,SAAS,SAAS,SAAS;;;;;;;CAS1D,eACE,OACA,WACM;AACN,OAAK,MAAM,QAAQ,MACjB,KAAI,KAAK,UAAU,SAAS;AAC1B,QAAK,SAAS,QAAQ,KAAK,UAAU;AACrC,QAAK,eAAe,KAAK,SAAS,SAAS,UAAU"}
@@ -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
 
@@ -8,8 +8,7 @@
8
8
  import "../../globals/settings.js";
9
9
  import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.js";
10
10
  import add_select_body_default$1 from "./add-select-body.scss.js";
11
- import { classMap } from "lit/directives/class-map.js";
12
- import { LitElement, html } from "lit";
11
+ import { LitElement, html, nothing } from "lit";
13
12
  import { property, state } from "lit/decorators.js";
14
13
  import '@carbon/web-components/es-custom/components/button/index.js';
15
14
  import { carbonElement } from "@carbon/web-components/es/globals/decorators/carbon-element.js";
@@ -30,9 +29,12 @@ const blockClass = `c4p--add-select__next`;
30
29
  /**
31
30
  * Add Select Body component - contains the main content area
32
31
  * @element c4p-add-select-body
33
- * @slot default - The main content area containing c4p-add-select-content
34
- * @slot header - Custom header content
35
- * @fires c4p-add-select-body-search - Fired when search term changes
32
+ * @slot default - The main content area containing c4p-add-select-column or rows
33
+ * @slot header - Replaces the entire header section
34
+ * @slot actions - Custom actions (filter/sort) rendered next to the search input
35
+ * @slot sub-header-actions - Custom content rendered after breadcrumbs and item count
36
+ * @fires c4p-add-select-body-search - Fired when search term changes; detail: { searchTerm }
37
+ * @fires c4p-add-select-body-breadcrumb-click - Fired when a breadcrumb link is clicked; detail: { index }
36
38
  */
37
39
  let CDSAddSelectBody = class CDSAddSelectBody extends LitElement {
38
40
  constructor(..._args) {
@@ -42,15 +44,10 @@ let CDSAddSelectBody = class CDSAddSelectBody extends LitElement {
42
44
  this.globalSearchPlaceholder = "Search";
43
45
  this.searchResultsTitle = "Search results";
44
46
  this._searchTerm = "";
45
- this.itemCount = 0;
47
+ this.itemCount = void 0;
48
+ this.hideSearch = false;
46
49
  this.path = [];
47
- }
48
- /**
49
- * Whether this is a multi-select (inherited from parent c4p-add-select)
50
- * @private
51
- */
52
- get _multi() {
53
- return this.closest(`c4p-add-select`)?.multi ?? false;
50
+ this._hasHeaderSlot = false;
54
51
  }
55
52
  /**
56
53
  * Handle search input
@@ -65,81 +62,100 @@ let CDSAddSelectBody = class CDSAddSelectBody extends LitElement {
65
62
  };
66
63
  this.dispatchEvent(new CustomEvent(this.constructor.eventSearch, init));
67
64
  }
65
+ _handleHeaderSlotChange(e) {
66
+ const slot = e.target;
67
+ this._hasHeaderSlot = slot.assignedElements({ flatten: true }).length > 0;
68
+ }
68
69
  render() {
69
- const { itemsLabel, globalSearchLabel, globalSearchPlaceholder, searchResultsTitle, itemCount, path, _searchTerm: searchTerm, _handleSearch: handleSearch } = this;
70
+ const { itemsLabel, globalSearchLabel, globalSearchPlaceholder, searchResultsTitle, itemCount, hideSearch, path, _searchTerm: searchTerm, _handleSearch: handleSearch } = this;
70
71
  return html`
71
- <div class=${classMap({
72
- [`${blockClass}__body`]: true,
73
- [`${blockClass}__body--single`]: !this._multi,
74
- [`${blockClass}__body--multi`]: this._multi
75
- })}>
76
- <!-- Header Section -->
77
- <div class="${blockClass}__header">
78
- <slot name="header">
79
- <!-- Search -->
80
- <div class="${blockClass}__search">
81
- <cds-custom-search
82
- label-text=${globalSearchLabel}
83
- placeholder=${globalSearchPlaceholder}
84
- size="lg"
85
- @cds-custom-search-input=${handleSearch}
86
- ></cds-custom-search>
87
- </div>
72
+ <div class="${blockClass}__body">
73
+ ${!hideSearch || this._hasHeaderSlot || itemCount !== void 0 || path && path.length > 0 ? html`
74
+ <div class="${blockClass}__header">
75
+ <!-- Named slot: consumer can replace the entire header -->
76
+ <slot
77
+ name="header"
78
+ @slotchange=${this._handleHeaderSlotChange}
79
+ ></slot>
88
80
 
89
- <!-- Sub-header with breadcrumbs or item label -->
90
- <div class="${blockClass}__sub-header">
91
- <div class="${blockClass}__tags">
92
- ${searchTerm ? html`
93
- <p class="${blockClass}__tags-label">
94
- ${searchResultsTitle}
95
- </p>
96
- ` : path && path.length > 0 ? html`
97
- <cds-custom-breadcrumb
98
- no-trailing-slash
99
- class="${classMap({
100
- [`c4p--add-select__next__breadcrumbs`]: true,
101
- [`c4p--add-select__next__breadcrumbs--multi`]: this._multi
102
- })}"
103
- >
104
- ${path.map((entry, idx) => {
81
+ ${!this._hasHeaderSlot ? html`
82
+ <!-- Search + optional actions -->
83
+ ${!hideSearch ? html`
84
+ <div
85
+ class="${blockClass}__search ${blockClass}__search--with-actions"
86
+ >
87
+ <div class="${blockClass}__search-input">
88
+ <cds-custom-search
89
+ label-text=${globalSearchLabel}
90
+ placeholder=${globalSearchPlaceholder}
91
+ size="lg"
92
+ @cds-custom-search-input=${handleSearch}
93
+ ></cds-custom-search>
94
+ </div>
95
+ <div class="${blockClass}__global-actions">
96
+ <slot name="actions"></slot>
97
+ </div>
98
+ </div>
99
+ ` : nothing}
100
+
101
+ <!-- Sub-header: breadcrumbs / label + item count + optional actions -->
102
+ <div class="${blockClass}__sub-header">
103
+ <div class="${blockClass}__tags">
104
+ ${searchTerm ? html`
105
+ <p class="${blockClass}__tags-label">
106
+ ${searchResultsTitle}
107
+ </p>
108
+ ` : path && path.length > 0 ? html`
109
+ <cds-custom-breadcrumb
110
+ no-trailing-slash
111
+ class="${blockClass}__breadcrumbs"
112
+ >
113
+ ${path.map((entry, idx) => {
105
114
  const isCurrentPage = idx === path.length - 1;
106
115
  return html`
107
- <cds-custom-breadcrumb-item
108
- ?is-current-page=${isCurrentPage}
109
- >
110
- ${isCurrentPage ? entry.title : html`
111
- <cds-custom-link
112
- href="#"
113
- @click=${(e) => {
116
+ <cds-custom-breadcrumb-item
117
+ ?is-current-page=${isCurrentPage}
118
+ >
119
+ ${isCurrentPage ? entry.title : html`
120
+ <cds-custom-link
121
+ href="#"
122
+ @click=${(e) => {
114
123
  e.preventDefault();
115
- const init = {
124
+ this.dispatchEvent(new CustomEvent(this.constructor.eventBreadcrumbClick, {
116
125
  bubbles: true,
117
126
  cancelable: true,
118
127
  composed: true,
119
128
  detail: { index: idx }
120
- };
121
- this.dispatchEvent(new CustomEvent(this.constructor.eventBreadcrumbClick, init));
129
+ }));
122
130
  }}
123
- >
124
- ${entry.title}
125
- </cds-custom-link>
126
- `}
127
- </cds-custom-breadcrumb-item>
128
- `;
131
+ >
132
+ ${entry.title}
133
+ </cds-custom-link>
134
+ `}
135
+ </cds-custom-breadcrumb-item>
136
+ `;
129
137
  })}
130
- </cds-custom-breadcrumb>
131
- ` : html`
132
- <p class="${blockClass}__tags-label">${itemsLabel}</p>
133
- `}
134
- <cds-custom-tag type="gray" size="sm">${itemCount}</cds-custom-tag>
138
+ </cds-custom-breadcrumb>
139
+ ` : html`
140
+ <p class="${blockClass}__tags-label">
141
+ ${itemsLabel}
142
+ </p>
143
+ `}
144
+ ${itemCount !== void 0 ? html`<cds-custom-tag type="gray" size="sm"
145
+ >${itemCount}</cds-custom-tag
146
+ >` : nothing}
147
+ </div>
148
+ <slot name="sub-header-actions"></slot>
149
+ </div>
150
+ ` : nothing}
135
151
  </div>
136
- </div>
137
- </slot>
138
- </div>
152
+ ` : nothing}
139
153
 
140
154
  <!-- Body Content -->
141
- <div class="${blockClass}__content">
142
- <slot></slot>
155
+ <div class="${blockClass}__content" role="grid" tabindex="0">
156
+ <div class="${blockClass}-list-body" role="rowgroup">
157
+ <slot></slot>
158
+ </div>
143
159
  </div>
144
160
  </div>
145
161
  `;
@@ -181,7 +197,13 @@ __decorate([property({
181
197
  type: Number,
182
198
  attribute: "item-count"
183
199
  })], CDSAddSelectBody.prototype, "itemCount", void 0);
200
+ __decorate([property({
201
+ type: Boolean,
202
+ attribute: "hide-search",
203
+ reflect: true
204
+ })], CDSAddSelectBody.prototype, "hideSearch", void 0);
184
205
  __decorate([property({ type: Array })], CDSAddSelectBody.prototype, "path", void 0);
206
+ __decorate([state()], CDSAddSelectBody.prototype, "_hasHeaderSlot", void 0);
185
207
  CDSAddSelectBody = __decorate([carbonElement(`c4p-add-select-body`)], CDSAddSelectBody);
186
208
  var add_select_body_default = CDSAddSelectBody;
187
209
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"add-select-body.js","names":["styles","customElement"],"sources":["../../../src/components/add-select/add-select-body.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 { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport '@carbon/web-components/es-custom/components/button/index.js';\nimport '@carbon/web-components/es-custom/components/search/index.js';\nimport '@carbon/web-components/es-custom/components/tag/index.js';\nimport '@carbon/web-components/es-custom/components/breadcrumb/index.js';\nimport '@carbon/web-components/es-custom/components/link/index.js';\nimport { prefix } from '../../globals/settings';\nimport styles from './add-select-body.scss?lit';\n\nconst blockClass = `${prefix}--add-select__next`;\n\n/**\n * Add Select Body component - contains the main content area\n * @element c4p-add-select-body\n * @slot default - The main content area containing c4p-add-select-content\n * @slot header - Custom header content\n * @fires c4p-add-select-body-search - Fired when search term changes\n */\n@customElement(`${prefix}-add-select-body`)\nclass CDSAddSelectBody extends LitElement {\n /**\n * Whether this is a multi-select (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 * Label for items section\n */\n @property({ type: String, attribute: 'items-label' })\n itemsLabel = '';\n\n /**\n * Global search label\n */\n @property({ type: String, attribute: 'global-search-label' })\n globalSearchLabel = '';\n\n /**\n * Global search placeholder\n */\n @property({ type: String, attribute: 'global-search-placeholder' })\n globalSearchPlaceholder = 'Search';\n\n /**\n * No results title\n */\n // @property({ type: String, attribute: 'no-results-title' })\n // noResultsTitle = 'No results found';\n\n /**\n * No results description\n */\n // @property({ type: String, attribute: 'no-results-description' })\n // noResultsDescription = 'Try adjusting your search or filter';\n\n /**\n * Search results title\n */\n @property({ type: String, attribute: 'search-results-title' })\n searchResultsTitle = 'Search results';\n\n /**\n * Current search term\n */\n @state()\n private _searchTerm = '';\n\n /**\n * Item count for display\n */\n @property({ type: Number, attribute: 'item-count' })\n itemCount = 0;\n\n /**\n * Navigation path for breadcrumbs\n */\n @property({ type: Array })\n path: Array<{ id: string; title: string }> = [];\n\n /**\n * Handle search input\n */\n private _handleSearch(event: CustomEvent) {\n this._searchTerm = event.detail.value || '';\n const init = {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: { searchTerm: this._searchTerm },\n };\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSAddSelectBody).eventSearch,\n init\n )\n );\n }\n\n render() {\n const {\n itemsLabel,\n globalSearchLabel,\n globalSearchPlaceholder,\n searchResultsTitle,\n itemCount,\n path,\n _searchTerm: searchTerm,\n _handleSearch: handleSearch,\n } = this;\n\n const bodyClasses = classMap({\n [`${blockClass}__body`]: true,\n [`${blockClass}__body--single`]: !this._multi,\n [`${blockClass}__body--multi`]: this._multi,\n });\n\n return html`\n <div class=${bodyClasses}>\n <!-- Header Section -->\n <div class=\"${blockClass}__header\">\n <slot name=\"header\">\n <!-- Search -->\n <div class=\"${blockClass}__search\">\n <cds-custom-search\n label-text=${globalSearchLabel}\n placeholder=${globalSearchPlaceholder}\n size=\"lg\"\n @cds-custom-search-input=${handleSearch}\n ></cds-custom-search>\n </div>\n\n <!-- Sub-header with breadcrumbs or item label -->\n <div class=\"${blockClass}__sub-header\">\n <div class=\"${blockClass}__tags\">\n ${searchTerm\n ? html`\n <p class=\"${blockClass}__tags-label\">\n ${searchResultsTitle}\n </p>\n `\n : path && path.length > 0\n ? html`\n <cds-custom-breadcrumb\n no-trailing-slash\n class=\"${classMap({\n [`${prefix}--add-select__next__breadcrumbs`]: true,\n [`${prefix}--add-select__next__breadcrumbs--multi`]:\n this._multi,\n })}\"\n >\n ${path.map((entry, idx) => {\n const isCurrentPage = idx === path.length - 1;\n return html`\n <cds-custom-breadcrumb-item\n ?is-current-page=${isCurrentPage}\n >\n ${isCurrentPage\n ? entry.title\n : html`\n <cds-custom-link\n href=\"#\"\n @click=${(e: Event) => {\n e.preventDefault();\n const init = {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: { index: idx },\n };\n this.dispatchEvent(\n new CustomEvent(\n (\n this\n .constructor as typeof CDSAddSelectBody\n ).eventBreadcrumbClick,\n init\n )\n );\n }}\n >\n ${entry.title}\n </cds-custom-link>\n `}\n </cds-custom-breadcrumb-item>\n `;\n })}\n </cds-custom-breadcrumb>\n `\n : html`\n <p class=\"${blockClass}__tags-label\">${itemsLabel}</p>\n `}\n <cds-custom-tag type=\"gray\" size=\"sm\">${itemCount}</cds-custom-tag>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Body Content -->\n <div class=\"${blockClass}__content\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n\n /**\n * The name of the custom event fired when search term changes\n */\n static get eventSearch() {\n return `${prefix}-add-select-body-search`;\n }\n\n /**\n * The name of the custom event fired when breadcrumb is clicked\n */\n static get eventBreadcrumbClick() {\n return `${prefix}-add-select-body-breadcrumb-click`;\n }\n\n static styles = styles;\n}\n\nexport default CDSAddSelectBody;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,MAAM,aAAa;;;;;;;;AASnB,IAAA,mBAAA,MACM,yBAAyB,WAAW;;;oBAc3B;2BAMO;iCAMM;4BAkBL;qBAMC;mBAMV;cAMiC,EAAE;;;;;;CAzD/C,IAAY,SAAkB;AAE5B,SADe,KAAK,QAAQ,iBACf,EAAE,SAAS;;;;;CA4D1B,cAAsB,OAAoB;AACxC,OAAK,cAAc,MAAM,OAAO,SAAS;EACzC,MAAM,OAAO;GACX,SAAS;GACT,YAAY;GACZ,UAAU;GACV,QAAQ,EAAE,YAAY,KAAK,aAAa;GACzC;AACD,OAAK,cACH,IAAI,YACD,KAAK,YAAwC,aAC9C,KACD,CACF;;CAGH,SAAS;EACP,MAAM,EACJ,YACA,mBACA,yBACA,oBACA,WACA,MACA,aAAa,YACb,eAAe,iBACb;AAQJ,SAAO,IAAI;mBANS,SAAS;IAC1B,GAAG,WAAW,UAAU;IACxB,GAAG,WAAW,kBAAkB,CAAC,KAAK;IACtC,GAAG,WAAW,iBAAiB,KAAK;GACtC,CAGyB,CAAC;;sBAET,WAAW;;;0BAGP,WAAW;;6BAER,kBAAkB;8BACjB,wBAAwB;;oCAElB,aAAa;;;;;0BAKvB,WAAW;4BACT,WAAW;kBACrB,aACE,IAAI;kCACU,WAAW;0BACnB,mBAAmB;;wBAGzB,QAAQ,KAAK,SAAS,IACpB,IAAI;;;mCAGS,SAAS;IACf,uCAA6C;IAC7C,8CACC,KAAK;GACR,CAAC,CAAC;;4BAED,KAAK,KAAK,OAAO,QAAQ;GACzB,MAAM,gBAAgB,QAAQ,KAAK,SAAS;AAC5C,UAAO,IAAI;;mDAEY,cAAc;;kCAE/B,gBACE,MAAM,QACN,IAAI;;;kDAGU,MAAa;AACrB,MAAE,gBAAgB;IAClB,MAAM,OAAO;KACX,SAAS;KACT,YAAY;KACZ,UAAU;KACV,QAAQ,EAAE,OAAO,KAAK;KACvB;AACD,SAAK,cACH,IAAI,YAEA,KACG,YACH,sBACF,KACD,CACF;KACD;;0CAEA,MAAM,MAAM;;sCAEhB;;;IAGV,CAAC;;0BAGP,IAAI;oCACU,WAAW,gBAAgB,WAAW;wBAClD;iDACyB,UAAU;;;;;;;sBAOrC,WAAW;;;;;;;;;CAU/B,WAAW,cAAc;AACvB,SAAO;;;;;CAMT,WAAW,uBAAuB;AAChC,SAAO;;;gBAGOA;;;YA/Lf,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAe,CAAC,CAAA,EAAA,iBAAA,WAAA,cAAA,KAAA,EAAA;YAMpD,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAuB,CAAC,CAAA,EAAA,iBAAA,WAAA,qBAAA,KAAA,EAAA;YAM5D,SAAS;CAAE,MAAM;CAAQ,WAAW;CAA6B,CAAC,CAAA,EAAA,iBAAA,WAAA,2BAAA,KAAA,EAAA;YAkBlE,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAwB,CAAC,CAAA,EAAA,iBAAA,WAAA,sBAAA,KAAA,EAAA;YAM7D,OAAO,CAAA,EAAA,iBAAA,WAAA,eAAA,KAAA,EAAA;YAMP,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAc,CAAC,CAAA,EAAA,iBAAA,WAAA,aAAA,KAAA,EAAA;YAMnD,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,EAAA,iBAAA,WAAA,QAAA,KAAA,EAAA;+BA9D3BC,cAAc,sBAA4B,CAAA,EAAA,iBAAA;AAgN3C,IAAA,0BAAe"}
1
+ {"version":3,"file":"add-select-body.js","names":["styles","customElement"],"sources":["../../../src/components/add-select/add-select-body.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, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport '@carbon/web-components/es-custom/components/button/index.js';\nimport '@carbon/web-components/es-custom/components/search/index.js';\nimport '@carbon/web-components/es-custom/components/tag/index.js';\nimport '@carbon/web-components/es-custom/components/breadcrumb/index.js';\nimport '@carbon/web-components/es-custom/components/link/index.js';\nimport { prefix } from '../../globals/settings';\nimport styles from './add-select-body.scss?lit';\n\nconst blockClass = `${prefix}--add-select__next`;\n\n/**\n * Add Select Body component - contains the main content area\n * @element c4p-add-select-body\n * @slot default - The main content area containing c4p-add-select-column or rows\n * @slot header - Replaces the entire header section\n * @slot actions - Custom actions (filter/sort) rendered next to the search input\n * @slot sub-header-actions - Custom content rendered after breadcrumbs and item count\n * @fires c4p-add-select-body-search - Fired when search term changes; detail: { searchTerm }\n * @fires c4p-add-select-body-breadcrumb-click - Fired when a breadcrumb link is clicked; detail: { index }\n */\n@customElement(`${prefix}-add-select-body`)\nclass CDSAddSelectBody extends LitElement {\n /**\n * Label for items section\n */\n @property({ type: String, attribute: 'items-label' })\n itemsLabel = '';\n\n /**\n * Global search label\n */\n @property({ type: String, attribute: 'global-search-label' })\n globalSearchLabel = '';\n\n /**\n * Global search placeholder\n */\n @property({ type: String, attribute: 'global-search-placeholder' })\n globalSearchPlaceholder = 'Search';\n\n /**\n * No results title\n */\n // @property({ type: String, attribute: 'no-results-title' })\n // noResultsTitle = 'No results found';\n\n /**\n * No results description\n */\n // @property({ type: String, attribute: 'no-results-description' })\n // noResultsDescription = 'Try adjusting your search or filter';\n\n /**\n * Search results title\n */\n @property({ type: String, attribute: 'search-results-title' })\n searchResultsTitle = 'Search results';\n\n /**\n * Current search term\n */\n @state()\n private _searchTerm = '';\n\n /**\n * Item count for display. When undefined, no count badge is rendered.\n */\n @property({ type: Number, attribute: 'item-count' })\n itemCount: number | undefined = undefined;\n\n /**\n * Whether to hide the search input\n */\n @property({ type: Boolean, attribute: 'hide-search', reflect: true })\n hideSearch = false;\n\n /**\n * Navigation path for breadcrumbs\n */\n @property({ type: Array })\n path: Array<{ id: string; title: string }> = [];\n\n /**\n * Handle search input\n */\n private _handleSearch(event: CustomEvent) {\n this._searchTerm = event.detail.value || '';\n const init = {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: { searchTerm: this._searchTerm },\n };\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSAddSelectBody).eventSearch,\n init\n )\n );\n }\n\n /** Tracks whether the header slot has been filled by the consumer */\n @state()\n private _hasHeaderSlot = false;\n\n private _handleHeaderSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n this._hasHeaderSlot = slot.assignedElements({ flatten: true }).length > 0;\n }\n\n render() {\n const {\n itemsLabel,\n globalSearchLabel,\n globalSearchPlaceholder,\n searchResultsTitle,\n itemCount,\n hideSearch,\n path,\n _searchTerm: searchTerm,\n _handleSearch: handleSearch,\n } = this;\n\n // Only render the __header div when it has visible content.\n // When hideSearch is true, no header slot is filled, no item count,\n // and no path — the div is omitted entirely to avoid blank space.\n const hasHeader =\n !hideSearch ||\n this._hasHeaderSlot ||\n itemCount !== undefined ||\n (path && path.length > 0);\n\n return html`\n <div class=\"${blockClass}__body\">\n ${hasHeader\n ? html`\n <div class=\"${blockClass}__header\">\n <!-- Named slot: consumer can replace the entire header -->\n <slot\n name=\"header\"\n @slotchange=${this._handleHeaderSlotChange}\n ></slot>\n\n ${!this._hasHeaderSlot\n ? html`\n <!-- Search + optional actions -->\n ${!hideSearch\n ? html`\n <div\n class=\"${blockClass}__search ${blockClass}__search--with-actions\"\n >\n <div class=\"${blockClass}__search-input\">\n <cds-custom-search\n label-text=${globalSearchLabel}\n placeholder=${globalSearchPlaceholder}\n size=\"lg\"\n @cds-custom-search-input=${handleSearch}\n ></cds-custom-search>\n </div>\n <div class=\"${blockClass}__global-actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n `\n : nothing}\n\n <!-- Sub-header: breadcrumbs / label + item count + optional actions -->\n <div class=\"${blockClass}__sub-header\">\n <div class=\"${blockClass}__tags\">\n ${searchTerm\n ? html`\n <p class=\"${blockClass}__tags-label\">\n ${searchResultsTitle}\n </p>\n `\n : path && path.length > 0\n ? html`\n <cds-custom-breadcrumb\n no-trailing-slash\n class=\"${blockClass}__breadcrumbs\"\n >\n ${path.map((entry, idx) => {\n const isCurrentPage =\n idx === path.length - 1;\n return html`\n <cds-custom-breadcrumb-item\n ?is-current-page=${isCurrentPage}\n >\n ${isCurrentPage\n ? entry.title\n : html`\n <cds-custom-link\n href=\"#\"\n @click=${(e: Event) => {\n e.preventDefault();\n this.dispatchEvent(\n new CustomEvent(\n (\n this\n .constructor as typeof CDSAddSelectBody\n ).eventBreadcrumbClick,\n {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: {\n index: idx,\n },\n }\n )\n );\n }}\n >\n ${entry.title}\n </cds-custom-link>\n `}\n </cds-custom-breadcrumb-item>\n `;\n })}\n </cds-custom-breadcrumb>\n `\n : html`\n <p class=\"${blockClass}__tags-label\">\n ${itemsLabel}\n </p>\n `}\n ${itemCount !== undefined\n ? html`<cds-custom-tag type=\"gray\" size=\"sm\"\n >${itemCount}</cds-custom-tag\n >`\n : nothing}\n </div>\n <slot name=\"sub-header-actions\"></slot>\n </div>\n `\n : nothing}\n </div>\n `\n : nothing}\n\n <!-- Body Content -->\n <div class=\"${blockClass}__content\" role=\"grid\" tabindex=\"0\">\n <div class=\"${blockClass}-list-body\" role=\"rowgroup\">\n <slot></slot>\n </div>\n </div>\n </div>\n `;\n }\n\n /**\n * The name of the custom event fired when search term changes\n */\n static get eventSearch() {\n return `${prefix}-add-select-body-search`;\n }\n\n /**\n * The name of the custom event fired when breadcrumb is clicked\n */\n static get eventBreadcrumbClick() {\n return `${prefix}-add-select-body-breadcrumb-click`;\n }\n\n static styles = styles;\n}\n\nexport default CDSAddSelectBody;\n"],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
 
8
8
  import { css } from "lit";
9
9
  //#region src/components/add-select/add-select-body.scss?lit
10
- var add_select_body_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-custom-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-custom-text-primary,#161616);font-size:var(--cds-custom-heading-compact-02-font-size,1rem);font-weight:var(--cds-custom-heading-compact-02-font-weight,600);letter-spacing:var(--cds-custom-heading-compact-02-letter-spacing,0);line-height:var(--cds-custom-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-custom-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-custom-layer-selected-01,#e0e0e0)}.c4p--add-select__next-row--selected .c4p--add-select__next-row__cell-wrapper{border-block-end-color:var(--cds-custom-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-custom-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-custom-icon-disabled,hsla(0,0%,9%,.25))}.c4p--add-select__next-row:hover:not(.c4p--add-select__next-row--disabled){background:var(--cds-custom-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-custom-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-custom-icon-disabled,hsla(0,0%,9%,.25))}.c4p--add-select__next-row--selected:hover:not(.c4p--add-select__next-row--disabled){background:var(--cds-custom-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-custom-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-custom-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-custom-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-custom--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-custom-text-primary,#161616);display:block;font-size:var(--cds-custom-body-compact-01-font-size,.875rem);font-weight:var(--cds-custom-body-compact-01-font-weight,400);letter-spacing:var(--cds-custom-body-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-body-compact-01-line-height,1.28572)}.c4p--add-select__next-row__subtitle{color:var(--cds-custom-text-secondary,#525252);display:block;font-size:var(--cds-custom-helper-text-01-font-size,.75rem);letter-spacing:var(--cds-custom-helper-text-01-letter-spacing,.32px);line-height:var(--cds-custom-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-custom-layer-hover-01,#e8e8e8);border-inline-start:.125rem solid var(--cds-custom-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-custom-background-hover,hsla(0,0%,55%,.12))}.c4p--add-select__next-row__nav-indicator:focus{outline:.125rem solid var(--cds-custom-focus,#0f62fe);outline-offset:-.125rem}.c4p--add-select__next-row__nav-indicator svg{fill:var(--cds-custom-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-custom-background-hover,hsla(0,0%,55%,.12))}.c4p--add-select__next-row__nav-indicator:focus{outline:.125rem solid var(--cds-custom-focus,#0f62fe);outline-offset:-.125rem}.c4p--add-select__next-row__nav-indicator svg{fill:var(--cds-custom-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-custom-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-custom--icon--skeleton{block-size:2rem;border-radius:50%;inline-size:2rem}.c4p--add-select__next-row--skeleton .c4p--add-select__next-row__icon .cds-custom--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-custom-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-custom-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-custom--checkbox-wrapper{margin-block-end:.5rem}.c4p--add-select__next-column__filter-popover .cds-custom--checkbox-wrapper:last-child{margin-block-end:0}.c4p--add-select__next-column__header{align-items:center;border-block-end:1px solid var(--cds-custom-border-subtle-01,#c6c6c6);display:flex;padding-block:1rem;padding-inline:1rem}.c4p--add-select__next-column__select-all .cds-custom--checkbox-label{align-items:center;display:flex;gap:0}.c4p--add-select__next-column__select-all .cds-custom--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-custom-heading-compact-01-font-size,.875rem);font-weight:var(--cds-custom-heading-compact-01-font-weight,600);letter-spacing:var(--cds-custom-heading-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-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-custom-link-primary,#0f62fe);cursor:pointer;font-size:var(--cds-custom-body-compact-01-font-size,.875rem);font-weight:var(--cds-custom-body-compact-01-font-weight,400);letter-spacing:var(--cds-custom-body-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-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-custom-link-primary-hover,#0043ce);text-decoration:underline}.c4p--add-select__next__breadcrumb-button:focus{outline:.125rem solid var(--cds-custom-focus,#0f62fe);outline-offset:.125rem}.c4p--add-select__next__breadcrumb-separator{align-items:center;color:var(--cds-custom-text-secondary,#525252);display:flex}.c4p--add-select__next__breadcrumb-separator svg{fill:currentColor}.c4p--add-select__next__breadcrumb-current{color:var(--cds-custom-text-primary,#161616);font-size:var(--cds-custom-body-compact-01-font-size,.875rem);font-weight:var(--cds-custom-body-compact-01-font-weight,400);letter-spacing:var(--cds-custom-body-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-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-custom-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-custom-heading-compact-02-font-size,1rem);font-weight:var(--cds-custom-heading-compact-02-font-weight,600);letter-spacing:var(--cds-custom-heading-compact-02-letter-spacing,0);line-height:var(--cds-custom-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-custom-border-subtle-01,#c6c6c6);padding-block:.75rem;padding-inline:1rem}.c4p--add-select__next__selection-summary-item-default-title{color:var(--cds-custom-text-primary,#161616);font-size:var(--cds-custom-body-compact-01-font-size,.875rem);font-weight:var(--cds-custom-body-compact-01-font-weight,400);letter-spacing:var(--cds-custom-body-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-body-compact-01-line-height,1.28572)}.c4p--add-select__next__selection-summary-item-default-subtitle{color:var(--cds-custom-text-secondary,#525252);font-size:var(--cds-custom-body-01-font-size,.875rem);font-weight:var(--cds-custom-body-01-font-weight,400);letter-spacing:var(--cds-custom-body-01-letter-spacing,.16px);line-height:var(--cds-custom-body-01-line-height,1.42857)}.c4p--add-select__next__selection-summary-item{background-color:var(--cds-custom-layer-01,#f4f4f4);border-block-end:1px solid var(--cds-custom-border-subtle-01,#c6c6c6);position:relative}.c4p--add-select__next__selection-summary-item:hover{background-color:var(--cds-custom-layer-hover-01,#e8e8e8)}.c4p--add-select__next__selection-summary-item--accordion .cds-custom--accordion__item,.c4p--add-select__next__selection-summary-item--accordion .cds-custom--accordion__item:last-child{border-block-end:none;border-block-start:none}.c4p--add-select__next__selection-summary-item--accordion .cds-custom--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-custom-heading-compact-01-font-size,.875rem);font-weight:var(--cds-custom-heading-compact-01-font-weight,600);letter-spacing:var(--cds-custom-heading-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-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-custom-text-primary,#161616);font-size:var(--cds-custom-body-compact-01-font-size,.875rem);font-weight:var(--cds-custom-body-compact-01-font-weight,400);letter-spacing:var(--cds-custom-body-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-body-compact-01-line-height,1.28572)}.c4p--add-select__next__selection-summary-item-subtitle{color:var(--cds-custom-text-secondary,#525252);font-size:var(--cds-custom-body-01-font-size,.875rem);font-weight:var(--cds-custom-body-01-font-weight,400);letter-spacing:var(--cds-custom-body-01-letter-spacing,.16px);line-height:var(--cds-custom-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-custom-text-secondary,#525252);font-size:var(--cds-custom-label-01-font-size,.75rem);font-weight:var(--cds-custom-label-01-font-weight,400);letter-spacing:var(--cds-custom-label-01-letter-spacing,.32px);line-height:var(--cds-custom-label-01-line-height,1.33333);margin-block-end:.5rem}.c4p--add-select__next__selection-summary-item-body{font-size:var(--cds-custom-body-01-font-size,.875rem);font-weight:var(--cds-custom-body-01-font-weight,400);letter-spacing:var(--cds-custom-body-01-letter-spacing,.16px);line-height:var(--cds-custom-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-custom--accordion__arrow{transform:rotate(90deg)}.c4p--add-select__next__selection-summary .cds-custom--accordion__item--active .cds-custom--accordion__arrow{transform:rotate(-90deg)}.c4p--add-select__next__selection-summary .cds-custom--accordion--start .cds-custom--accordion__arrow{margin-block:0;margin-inline-end:0;margin-inline-start:1rem}.c4p--add-select__next__selection-summary .cds-custom--accordion--start .cds-custom--accordion__title{margin-inline-end:0;margin-inline-start:.5rem;padding-inline-end:2rem}.c4p--add-select__next__selection-summary .cds-custom--accordion__item--active .cds-custom--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-custom-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-custom-heading-compact-02-font-size,1rem);font-weight:var(--cds-custom-heading-compact-02-font-weight,600);letter-spacing:var(--cds-custom-heading-compact-02-letter-spacing,0);line-height:var(--cds-custom-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-custom-heading-compact-01-font-size,.875rem);font-weight:var(--cds-custom-heading-compact-01-font-weight,600);letter-spacing:var(--cds-custom-heading-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-heading-compact-01-line-height,1.28572)}.c4p--add-select__next__item-summary-panel-entry-body{font-size:var(--cds-custom-body-compact-01-font-size,.875rem);font-weight:var(--cds-custom-body-compact-01-font-weight,400);letter-spacing:var(--cds-custom-body-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-body-compact-01-line-height,1.28572)}:host(c4p-add-select-body){display:block}:host(c4p-add-select-body) .c4p--add-select__next__body{block-size:100%;display:flex;flex-direction:column;inline-size:100%}:host(c4p-add-select-body) .c4p--add-select__next__header{border-block-end:1px solid var(--cds-custom-border-subtle-01,#c6c6c6);padding:1rem}:host(c4p-add-select-body) .c4p--add-select__next__search{margin-block-end:1rem}:host(c4p-add-select-body) .c4p--add-select__next__sub-header{align-items:center;display:flex;justify-content:space-between}:host(c4p-add-select-body) .c4p--add-select__next__tags{align-items:center;display:flex;gap:.5rem}:host(c4p-add-select-body) .c4p--add-select__next__tags-label{color:var(--cds-custom-text-secondary,#525252);font-size:var(--cds-custom-body-compact-01-font-size,.875rem);font-weight:var(--cds-custom-body-compact-01-font-weight,400);letter-spacing:var(--cds-custom-body-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-body-compact-01-line-height,1.28572);margin:0}:host(c4p-add-select-body) .c4p--add-select__next__content{flex:1;overflow:auto}"]);
10
+ var add_select_body_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-custom-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-custom-text-primary,#161616);font-size:var(--cds-custom-heading-compact-02-font-size,1rem);font-weight:var(--cds-custom-heading-compact-02-font-weight,600);letter-spacing:var(--cds-custom-heading-compact-02-letter-spacing,0);line-height:var(--cds-custom-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-custom-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-custom-layer-selected-01,#e0e0e0)}.c4p--add-select__next-row--selected .c4p--add-select__next-row__cell-wrapper{border-block-end-color:var(--cds-custom-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-custom-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-custom-icon-disabled,hsla(0,0%,9%,.25))}.c4p--add-select__next-row:hover:not(.c4p--add-select__next-row--disabled){background:var(--cds-custom-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-custom-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-custom-icon-disabled,hsla(0,0%,9%,.25))}.c4p--add-select__next-row--selected:hover:not(.c4p--add-select__next-row--disabled){background:var(--cds-custom-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-custom-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-custom-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-custom-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-custom--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-custom-text-primary,#161616);display:block;font-size:var(--cds-custom-body-compact-01-font-size,.875rem);font-weight:var(--cds-custom-body-compact-01-font-weight,400);letter-spacing:var(--cds-custom-body-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-body-compact-01-line-height,1.28572)}.c4p--add-select__next-row__subtitle{color:var(--cds-custom-text-secondary,#525252);display:block;font-size:var(--cds-custom-helper-text-01-font-size,.75rem);letter-spacing:var(--cds-custom-helper-text-01-letter-spacing,.32px);line-height:var(--cds-custom-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-custom-layer-hover-01,#e8e8e8);border-inline-start:.125rem solid var(--cds-custom-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-custom-background-hover,hsla(0,0%,55%,.12))}.c4p--add-select__next-row__nav-indicator:focus{outline:.125rem solid var(--cds-custom-focus,#0f62fe);outline-offset:-.125rem}.c4p--add-select__next-row__nav-indicator svg{fill:var(--cds-custom-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-custom-background-hover,hsla(0,0%,55%,.12))}.c4p--add-select__next-row__nav-indicator:focus{outline:.125rem solid var(--cds-custom-focus,#0f62fe);outline-offset:-.125rem}.c4p--add-select__next-row__nav-indicator svg{fill:var(--cds-custom-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-custom-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-custom--icon--skeleton{block-size:2rem;border-radius:50%;inline-size:2rem}.c4p--add-select__next-row--skeleton .c4p--add-select__next-row__icon .cds-custom--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-custom-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-custom-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-custom--checkbox-wrapper{margin-block-end:.5rem}.c4p--add-select__next-column__filter-popover .cds-custom--checkbox-wrapper:last-child{margin-block-end:0}.c4p--add-select__next-column__header{align-items:center;border-block-end:1px solid var(--cds-custom-border-subtle-01,#c6c6c6);display:flex;padding-block:1rem;padding-inline:1rem}.c4p--add-select__next-column__select-all .cds-custom--checkbox-label{align-items:center;display:flex;gap:0}.c4p--add-select__next-column__select-all .cds-custom--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-custom-heading-compact-01-font-size,.875rem);font-weight:var(--cds-custom-heading-compact-01-font-weight,600);letter-spacing:var(--cds-custom-heading-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-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-custom-link-primary,#0f62fe);cursor:pointer;font-size:var(--cds-custom-body-compact-01-font-size,.875rem);font-weight:var(--cds-custom-body-compact-01-font-weight,400);letter-spacing:var(--cds-custom-body-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-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-custom-link-primary-hover,#0043ce);text-decoration:underline}.c4p--add-select__next__breadcrumb-button:focus{outline:.125rem solid var(--cds-custom-focus,#0f62fe);outline-offset:.125rem}.c4p--add-select__next__breadcrumb-separator{align-items:center;color:var(--cds-custom-text-secondary,#525252);display:flex}.c4p--add-select__next__breadcrumb-separator svg{fill:currentColor}.c4p--add-select__next__breadcrumb-current{color:var(--cds-custom-text-primary,#161616);font-size:var(--cds-custom-body-compact-01-font-size,.875rem);font-weight:var(--cds-custom-body-compact-01-font-weight,400);letter-spacing:var(--cds-custom-body-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-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-custom-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-custom-heading-compact-02-font-size,1rem);font-weight:var(--cds-custom-heading-compact-02-font-weight,600);letter-spacing:var(--cds-custom-heading-compact-02-letter-spacing,0);line-height:var(--cds-custom-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{background-color:var(--cds-custom-layer-01,#f4f4f4);border-block-end:1px solid var(--cds-custom-border-subtle-01,#c6c6c6);position:relative}.c4p--add-select__next__selection-summary-item:hover{background-color:var(--cds-custom-layer-hover-01,#e8e8e8)}.c4p--add-select__next__selection-summary-item--accordion .cds-custom--accordion__item,.c4p--add-select__next__selection-summary-item--accordion .cds-custom--accordion__item:last-child{border-block-end:none;border-block-start:none}.c4p--add-select__next__selection-summary-item--accordion .cds-custom--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-custom-heading-compact-01-font-size,.875rem);font-weight:var(--cds-custom-heading-compact-01-font-weight,600);letter-spacing:var(--cds-custom-heading-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-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-custom-text-primary,#161616);font-size:var(--cds-custom-body-compact-01-font-size,.875rem);font-weight:var(--cds-custom-body-compact-01-font-weight,400);letter-spacing:var(--cds-custom-body-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-body-compact-01-line-height,1.28572)}.c4p--add-select__next__selection-summary-item-subtitle{color:var(--cds-custom-text-secondary,#525252);font-size:var(--cds-custom-body-01-font-size,.875rem);font-weight:var(--cds-custom-body-01-font-weight,400);letter-spacing:var(--cds-custom-body-01-letter-spacing,.16px);line-height:var(--cds-custom-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-custom-text-secondary,#525252);font-size:var(--cds-custom-label-01-font-size,.75rem);font-weight:var(--cds-custom-label-01-font-weight,400);letter-spacing:var(--cds-custom-label-01-letter-spacing,.32px);line-height:var(--cds-custom-label-01-line-height,1.33333);margin-block-end:.5rem}.c4p--add-select__next__selection-summary-item-body{font-size:var(--cds-custom-body-01-font-size,.875rem);font-weight:var(--cds-custom-body-01-font-weight,400);letter-spacing:var(--cds-custom-body-01-letter-spacing,.16px);line-height:var(--cds-custom-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-custom--accordion__arrow{transform:rotate(90deg)}.c4p--add-select__next__selection-summary .cds-custom--accordion__item--active .cds-custom--accordion__arrow{transform:rotate(-90deg)}.c4p--add-select__next__selection-summary .cds-custom--accordion--start .cds-custom--accordion__arrow{margin-block:0;margin-inline-end:0;margin-inline-start:1rem}.c4p--add-select__next__selection-summary .cds-custom--accordion--start .cds-custom--accordion__title{margin-inline-end:0;margin-inline-start:.5rem;padding-inline-end:2rem}.c4p--add-select__next__selection-summary .cds-custom--accordion__item--active .cds-custom--accordion__content{margin-block-start:0;padding-block:1rem;padding-inline:1rem}@keyframes add-select-item-panel-entrance{0%{opacity:0;transform:translateX(100%)}to{opacity:1;transform:translateX(0)}}@keyframes add-select-item-panel-exit{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(100%)}}@keyframes add-select-item-panel-entrance-reduced{0%{opacity:0}to{opacity:1}}@keyframes add-select-item-panel-exit-reduced{0%{opacity:1}to{opacity:0}}.c4p--add-select__next__item-summary-panel{block-size:100%;display:none;inline-size:100%;transform:translateX(0);transition-behavior:allow-discrete;transition-duration:.15s;transition-property:display,opacity,transform}.c4p--add-select__next__item-summary-panel--open{animation:add-select-item-panel-entrance .15s cubic-bezier(0,0,.38,.9) forwards;display:flex;flex-direction:column}@starting-style{.c4p--add-select__next__item-summary-panel--open{opacity:0;transform:translateX(100%)}}@media (prefers-reduced-motion){.c4p--add-select__next__item-summary-panel--open{animation:add-select-item-panel-entrance-reduced .15s cubic-bezier(0,0,.38,.9) forwards}@starting-style{.c4p--add-select__next__item-summary-panel--open{opacity:0;transform:translateX(0)}}}.c4p--add-select__next__item-summary-panel-header{align-items:center;border-block-end:1px solid var(--cds-custom-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-custom-heading-compact-02-font-size,1rem);font-weight:var(--cds-custom-heading-compact-02-font-weight,600);letter-spacing:var(--cds-custom-heading-compact-02-letter-spacing,0);line-height:var(--cds-custom-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-custom-heading-compact-01-font-size,.875rem);font-weight:var(--cds-custom-heading-compact-01-font-weight,600);letter-spacing:var(--cds-custom-heading-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-heading-compact-01-line-height,1.28572)}.c4p--add-select__next__item-summary-panel-entry-body{font-size:var(--cds-custom-body-compact-01-font-size,.875rem);font-weight:var(--cds-custom-body-compact-01-font-weight,400);letter-spacing:var(--cds-custom-body-compact-01-letter-spacing,.16px);line-height:var(--cds-custom-body-compact-01-line-height,1.28572)}:host(c4p-add-select-body){display:block}:host(c4p-add-select-body) .c4p--add-select__next__body{block-size:100%;display:flex;flex-direction:column;inline-size:100%}:host(c4p-add-select-body) .c4p--add-select__next__header{border-block-end:1px solid var(--cds-custom-border-subtle-01,#c6c6c6);padding:1rem}:host(c4p-add-select-body) .c4p--add-select__next__header--custom .c4p--add-select__next__search,:host(c4p-add-select-body) .c4p--add-select__next__header--custom .c4p--add-select__next__sub-header{display:none}:host(c4p-add-select-body) .c4p--add-select__next__search--with-actions{align-items:flex-end;display:flex;margin-block-end:1rem}:host(c4p-add-select-body) .c4p--add-select__next__search-input{flex:1}:host(c4p-add-select-body) .c4p--add-select__next__global-actions{align-items:flex-end;display:flex}:host(c4p-add-select-body) .c4p--add-select__next__sub-header{align-items:center;display:flex;justify-content:space-between}:host(c4p-add-select-body) .c4p--add-select__next__tags{align-items:center;display:flex;gap:.5rem}:host(c4p-add-select-body) .c4p--add-select__next__tags-label{color:var(--cds-custom-text-primary,#161616);font-size:var(--cds-custom-heading-compact-02-font-size,1rem);font-weight:var(--cds-custom-heading-compact-02-font-weight,600);letter-spacing:var(--cds-custom-heading-compact-02-letter-spacing,0);line-height:var(--cds-custom-heading-compact-02-line-height,1.375);margin:0}:host(c4p-add-select-body) .c4p--add-select__next__sub-header-actions{align-items:center;display:flex;gap:.5rem;margin-inline-start:1rem}:host(c4p-add-select-body) .c4p--add-select__next__content{flex:1;overflow:auto}:host(c4p-add-select-body) .c4p--add-select__next-list-body{display:flex;flex-direction:column}"]);
11
11
  //#endregion
12
12
  export { add_select_body_default as default };
13
13
 
@@ -1 +1 @@
1
- {"version":3,"file":"add-select-body.scss.js","names":[],"sources":["../../../src/components/add-select/add-select-body.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@use '@carbon/styles/scss/type';\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-body) {\n display: block;\n\n /* Apply shared styles within shadow DOM */\n .#{$block-class__next}__body {\n display: flex;\n flex-direction: column;\n block-size: 100%;\n inline-size: 100%;\n }\n\n .#{$block-class__next}__header {\n padding: $spacing-05;\n border-block-end: 1px solid $border-subtle-01;\n }\n\n .#{$block-class__next}__search {\n margin-block-end: $spacing-05;\n }\n\n .#{$block-class__next}__sub-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .#{$block-class__next}__tags {\n display: flex;\n align-items: center;\n gap: $spacing-03;\n }\n\n .#{$block-class__next}__tags-label {\n @include type.type-style('body-compact-01');\n\n margin: 0;\n color: $text-secondary;\n }\n\n .#{$block-class__next}__content {\n overflow: auto;\n flex: 1;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"add-select-body.scss.js","names":[],"sources":["../../../src/components/add-select/add-select-body.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@use '@carbon/styles/scss/type';\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-body) {\n display: block;\n\n .#{$block-class__next}__body {\n display: flex;\n flex-direction: column;\n block-size: 100%;\n inline-size: 100%;\n }\n\n .#{$block-class__next}__header {\n padding: $spacing-05;\n border-block-end: 1px solid $border-subtle-01;\n }\n\n // When consumer provides a custom header via slot=\"header\",\n // hide the default search/sub-header content.\n .#{$block-class__next}__header--custom {\n .#{$block-class__next}__search,\n .#{$block-class__next}__sub-header {\n display: none;\n }\n }\n\n // Search row: input + actions side by side (matches __search--with-actions)\n .#{$block-class__next}__search--with-actions {\n display: flex;\n align-items: flex-end;\n margin-block-end: $spacing-05;\n }\n\n .#{$block-class__next}__search-input {\n flex: 1;\n }\n\n .#{$block-class__next}__global-actions {\n display: flex;\n align-items: flex-end;\n }\n\n .#{$block-class__next}__sub-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .#{$block-class__next}__tags {\n display: flex;\n align-items: center;\n gap: $spacing-03;\n }\n\n .#{$block-class__next}__tags-label {\n @include type.type-style('heading-compact-02');\n\n margin: 0;\n color: $text-primary;\n }\n\n .#{$block-class__next}__sub-header-actions {\n display: flex;\n align-items: center;\n gap: $spacing-03;\n margin-inline-start: $spacing-05;\n }\n\n .#{$block-class__next}__content {\n overflow: auto;\n flex: 1;\n }\n\n .#{$block-class__next}-list-body {\n display: flex;\n flex-direction: column;\n }\n}\n"],"mappings":""}