@redvars/peacock 3.8.4 → 3.8.6

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 (62) hide show
  1. package/dist/accordion-item.js +28 -38
  2. package/dist/accordion-item.js.map +1 -1
  3. package/dist/accordion.js +8 -0
  4. package/dist/accordion.js.map +1 -1
  5. package/dist/button.js +21 -17
  6. package/dist/button.js.map +1 -1
  7. package/dist/custom-elements-jsdocs.json +212 -33
  8. package/dist/custom-elements.json +852 -143
  9. package/dist/floating-controller-CZYwnRVu.js +185 -0
  10. package/dist/floating-controller-CZYwnRVu.js.map +1 -0
  11. package/dist/{floating-controller-CnUZnOhK.js → floating-ui.dom-oQieRCpS.js} +2 -183
  12. package/dist/floating-ui.dom-oQieRCpS.js.map +1 -0
  13. package/dist/html-editor.js +3 -21091
  14. package/dist/html-editor.js.map +1 -1
  15. package/dist/index-DcbiqHpf.js +21091 -0
  16. package/dist/index-DcbiqHpf.js.map +1 -0
  17. package/dist/index.js +5 -2
  18. package/dist/index.js.map +1 -1
  19. package/dist/loader.js +7 -2
  20. package/dist/loader.js.map +1 -1
  21. package/dist/markdown-editor.js +4439 -0
  22. package/dist/markdown-editor.js.map +1 -0
  23. package/dist/menu.js +2 -1
  24. package/dist/menu.js.map +1 -1
  25. package/dist/pagination.js +15 -10
  26. package/dist/pagination.js.map +1 -1
  27. package/dist/popover.js +2 -1
  28. package/dist/popover.js.map +1 -1
  29. package/dist/{select-D85kpjUt.js → select-CnnPbvpQ.js} +68 -71
  30. package/dist/select-CnnPbvpQ.js.map +1 -0
  31. package/dist/src/accordion/accordion-item.d.ts +0 -6
  32. package/dist/src/accordion/accordion.d.ts +5 -0
  33. package/dist/src/button/button/button.d.ts +16 -16
  34. package/dist/src/index.d.ts +1 -0
  35. package/dist/src/input/input.d.ts +5 -5
  36. package/dist/src/markdown-editor/index.d.ts +2 -0
  37. package/dist/src/markdown-editor/markdown-editor.d.ts +116 -0
  38. package/dist/sub-menu.js +2 -1
  39. package/dist/sub-menu.js.map +1 -1
  40. package/dist/table.js +4 -9
  41. package/dist/table.js.map +1 -1
  42. package/dist/tooltip.js +2 -1
  43. package/dist/tooltip.js.map +1 -1
  44. package/dist/tsconfig.tsbuildinfo +1 -1
  45. package/package.json +5 -1
  46. package/readme.md +2 -2
  47. package/src/accordion/accordion-item.scss +34 -12
  48. package/src/accordion/accordion-item.ts +27 -38
  49. package/src/accordion/accordion.ts +7 -0
  50. package/src/button/button/button-sizes.scss +4 -0
  51. package/src/button/button/button.ts +17 -17
  52. package/src/index.ts +1 -0
  53. package/src/input/input.ts +85 -82
  54. package/src/loader.ts +4 -0
  55. package/src/markdown-editor/index.ts +3 -0
  56. package/src/markdown-editor/markdown-editor.scss +378 -0
  57. package/src/markdown-editor/markdown-editor.ts +994 -0
  58. package/src/pagination/pagination.scss +15 -10
  59. package/src/table/table.scss +3 -9
  60. package/src/table/table.ts +1 -1
  61. package/dist/floating-controller-CnUZnOhK.js.map +0 -1
  62. package/dist/select-D85kpjUt.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sub-menu.js","sources":["../../src/menu/sub-menu/sub-menu.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { property, queryAssignedElements } from 'lit/decorators.js';\nimport styles from './sub-menu.scss';\nimport { MenuItem } from '../menu-item/menu-item.js';\nimport { Menu } from '../menu/menu.js';\nimport IndividualComponent from '@/IndividualComponent.js';\n\nlet subMenuIdCounter = 0;\n\n/**\n * @label Sub Menu\n * @tag wc-sub-menu\n * @rawTag sub-menu\n * @summary Connects a menu item to a nested menu.\n */\n@IndividualComponent\nexport class SubMenu extends LitElement {\n static styles = [styles];\n\n @property({ type: Number, attribute: 'hover-open-delay' })\n hoverOpenDelay = 120;\n\n @property({ type: Number, attribute: 'hover-close-delay' })\n hoverCloseDelay = 180;\n\n @property({ type: String, attribute: 'anchor-corner' })\n anchorCorner = 'start-end';\n\n @property({ type: String, attribute: 'menu-corner' })\n menuCorner = 'start-start';\n\n @queryAssignedElements({ slot: 'item' })\n private readonly _items!: Element[];\n\n @queryAssignedElements({ slot: 'menu' })\n private readonly _menus!: Element[];\n\n private _openTimeout?: number;\n\n private _closeTimeout?: number;\n\n private _resolveAnchorElement(item: MenuItem) {\n //@ts-ignore\n return item.itemElement?.itemElement ?? item.itemElement ?? item;\n }\n\n private readonly _onChildMenuOpened = () => {\n const { item } = this;\n if (!item) {\n return;\n }\n\n item.submenuOpen = true;\n item.setAttribute('aria-expanded', 'true');\n };\n\n private readonly _onChildMenuClosed = () => {\n const { item } = this;\n if (!item) {\n return;\n }\n\n item.submenuOpen = false;\n item.setAttribute('aria-expanded', 'false');\n };\n\n get item(): MenuItem | null {\n const [candidate] = this._items ?? [];\n return candidate instanceof MenuItem ? candidate : null;\n }\n\n get menu(): Menu | null {\n const [candidate] = this._menus ?? [];\n return candidate instanceof Menu ? candidate : null;\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener('mouseenter', this._onMouseEnter);\n this.addEventListener('mouseleave', this._onMouseLeave);\n }\n\n disconnectedCallback() {\n const { menu } = this;\n menu?.removeEventListener('opened', this._onChildMenuOpened);\n menu?.removeEventListener('closed', this._onChildMenuClosed);\n this.removeEventListener('mouseenter', this._onMouseEnter);\n this.removeEventListener('mouseleave', this._onMouseLeave);\n window.clearTimeout(this._openTimeout);\n window.clearTimeout(this._closeTimeout);\n super.disconnectedCallback();\n }\n\n async show() {\n const { item, menu } = this;\n if (!item || !menu) {\n return;\n }\n\n menu.anchorElement = this._resolveAnchorElement(item);\n menu.isSubmenu = true;\n menu.show();\n\n item.hasSubmenu = true;\n item.submenuOpen = true;\n item.setAttribute('aria-expanded', 'true');\n }\n\n async close() {\n const { item, menu } = this;\n if (!item || !menu) {\n return;\n }\n\n menu.close({ kind: 'programmatic' });\n item.submenuOpen = false;\n item.setAttribute('aria-expanded', 'false');\n }\n\n render() {\n return html`\n <slot\n name=\"item\"\n @slotchange=${this._onSlotChange}\n @click=${this._onItemClick}\n @keydown=${this._onItemKeyDown}\n ></slot>\n <slot\n name=\"menu\"\n @slotchange=${this._onSlotChange}\n @close-menu=${this._onCloseMenu}\n @keydown=${this._onMenuKeyDown}\n ></slot>\n `;\n }\n\n private _onSlotChange = () => {\n const { item, menu } = this;\n if (!item || !menu) {\n return;\n }\n\n if (!menu.id) {\n subMenuIdCounter += 1;\n menu.id = `wc-sub-menu-${subMenuIdCounter}`;\n }\n\n item.keepOpen = true;\n item.hasSubmenu = true;\n item.submenuOpen = menu.open;\n item.setAttribute('aria-haspopup', 'menu');\n item.setAttribute('aria-expanded', String(menu.open));\n item.setAttribute('aria-controls', menu.id);\n\n menu.removeEventListener('opened', this._onChildMenuOpened);\n menu.removeEventListener('closed', this._onChildMenuClosed);\n menu.addEventListener('opened', this._onChildMenuOpened);\n menu.addEventListener('closed', this._onChildMenuClosed);\n\n menu.isSubmenu = true;\n menu.anchorElement = this._resolveAnchorElement(item);\n menu.placement =\n getComputedStyle(this).direction === 'rtl' ? 'left-start' : 'right-start';\n menu.offset = 4;\n };\n\n private _onItemClick = () => {\n if (this.menu?.open) {\n this.close();\n return;\n }\n\n this.show();\n };\n\n private _onItemKeyDown = async (event: KeyboardEvent) => {\n const isRtl = getComputedStyle(this).direction === 'rtl';\n const arrowEnter = isRtl ? 'ArrowLeft' : 'ArrowRight';\n\n const shouldOpen =\n event.key === arrowEnter || event.key === 'Enter' || event.key === ' ';\n\n if (!shouldOpen) {\n return;\n }\n\n event.preventDefault();\n if (event.key === arrowEnter) {\n event.stopPropagation();\n }\n\n await this.show();\n const firstItem = this.menu?.items.find(menuItem => !menuItem.disabled);\n if (firstItem) {\n firstItem.tabIndex = 0;\n firstItem.focus();\n }\n };\n\n private _onMenuKeyDown = async (event: KeyboardEvent) => {\n const isRtl = getComputedStyle(this).direction === 'rtl';\n const arrowExit = isRtl ? 'ArrowRight' : 'ArrowLeft';\n\n if (event.key !== 'Escape' && event.key !== arrowExit) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n await this.close();\n\n const { item } = this;\n if (item) {\n item.tabIndex = 0;\n item.focus();\n }\n };\n\n private _onCloseMenu = async (\n event: CustomEvent<{ reason?: { kind?: string; key?: string } }>,\n ) => {\n const { reason } = event.detail ?? {};\n const { key } = reason ?? {};\n if (reason?.kind === 'keydown' && key === 'Escape') {\n event.stopPropagation();\n await this.close();\n this.item?.focus();\n }\n };\n\n private _onMouseEnter = () => {\n window.clearTimeout(this._closeTimeout);\n this._openTimeout = window.setTimeout(() => {\n this.show();\n }, this.hoverOpenDelay);\n };\n\n private _onMouseLeave = (event: MouseEvent) => {\n const { relatedTarget: related } = event;\n if (related instanceof Node && this.contains(related)) {\n return;\n }\n\n window.clearTimeout(this._openTimeout);\n this._closeTimeout = window.setTimeout(() => {\n this.close();\n }, this.hoverCloseDelay);\n };\n}\n"],"names":["LitElement","html","styles","property","queryAssignedElements"],"mappings":"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"}
1
+ {"version":3,"file":"sub-menu.js","sources":["../../src/menu/sub-menu/sub-menu.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { property, queryAssignedElements } from 'lit/decorators.js';\nimport styles from './sub-menu.scss';\nimport { MenuItem } from '../menu-item/menu-item.js';\nimport { Menu } from '../menu/menu.js';\nimport IndividualComponent from '@/IndividualComponent.js';\n\nlet subMenuIdCounter = 0;\n\n/**\n * @label Sub Menu\n * @tag wc-sub-menu\n * @rawTag sub-menu\n * @summary Connects a menu item to a nested menu.\n */\n@IndividualComponent\nexport class SubMenu extends LitElement {\n static styles = [styles];\n\n @property({ type: Number, attribute: 'hover-open-delay' })\n hoverOpenDelay = 120;\n\n @property({ type: Number, attribute: 'hover-close-delay' })\n hoverCloseDelay = 180;\n\n @property({ type: String, attribute: 'anchor-corner' })\n anchorCorner = 'start-end';\n\n @property({ type: String, attribute: 'menu-corner' })\n menuCorner = 'start-start';\n\n @queryAssignedElements({ slot: 'item' })\n private readonly _items!: Element[];\n\n @queryAssignedElements({ slot: 'menu' })\n private readonly _menus!: Element[];\n\n private _openTimeout?: number;\n\n private _closeTimeout?: number;\n\n private _resolveAnchorElement(item: MenuItem) {\n //@ts-ignore\n return item.itemElement?.itemElement ?? item.itemElement ?? item;\n }\n\n private readonly _onChildMenuOpened = () => {\n const { item } = this;\n if (!item) {\n return;\n }\n\n item.submenuOpen = true;\n item.setAttribute('aria-expanded', 'true');\n };\n\n private readonly _onChildMenuClosed = () => {\n const { item } = this;\n if (!item) {\n return;\n }\n\n item.submenuOpen = false;\n item.setAttribute('aria-expanded', 'false');\n };\n\n get item(): MenuItem | null {\n const [candidate] = this._items ?? [];\n return candidate instanceof MenuItem ? candidate : null;\n }\n\n get menu(): Menu | null {\n const [candidate] = this._menus ?? [];\n return candidate instanceof Menu ? candidate : null;\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener('mouseenter', this._onMouseEnter);\n this.addEventListener('mouseleave', this._onMouseLeave);\n }\n\n disconnectedCallback() {\n const { menu } = this;\n menu?.removeEventListener('opened', this._onChildMenuOpened);\n menu?.removeEventListener('closed', this._onChildMenuClosed);\n this.removeEventListener('mouseenter', this._onMouseEnter);\n this.removeEventListener('mouseleave', this._onMouseLeave);\n window.clearTimeout(this._openTimeout);\n window.clearTimeout(this._closeTimeout);\n super.disconnectedCallback();\n }\n\n async show() {\n const { item, menu } = this;\n if (!item || !menu) {\n return;\n }\n\n menu.anchorElement = this._resolveAnchorElement(item);\n menu.isSubmenu = true;\n menu.show();\n\n item.hasSubmenu = true;\n item.submenuOpen = true;\n item.setAttribute('aria-expanded', 'true');\n }\n\n async close() {\n const { item, menu } = this;\n if (!item || !menu) {\n return;\n }\n\n menu.close({ kind: 'programmatic' });\n item.submenuOpen = false;\n item.setAttribute('aria-expanded', 'false');\n }\n\n render() {\n return html`\n <slot\n name=\"item\"\n @slotchange=${this._onSlotChange}\n @click=${this._onItemClick}\n @keydown=${this._onItemKeyDown}\n ></slot>\n <slot\n name=\"menu\"\n @slotchange=${this._onSlotChange}\n @close-menu=${this._onCloseMenu}\n @keydown=${this._onMenuKeyDown}\n ></slot>\n `;\n }\n\n private _onSlotChange = () => {\n const { item, menu } = this;\n if (!item || !menu) {\n return;\n }\n\n if (!menu.id) {\n subMenuIdCounter += 1;\n menu.id = `wc-sub-menu-${subMenuIdCounter}`;\n }\n\n item.keepOpen = true;\n item.hasSubmenu = true;\n item.submenuOpen = menu.open;\n item.setAttribute('aria-haspopup', 'menu');\n item.setAttribute('aria-expanded', String(menu.open));\n item.setAttribute('aria-controls', menu.id);\n\n menu.removeEventListener('opened', this._onChildMenuOpened);\n menu.removeEventListener('closed', this._onChildMenuClosed);\n menu.addEventListener('opened', this._onChildMenuOpened);\n menu.addEventListener('closed', this._onChildMenuClosed);\n\n menu.isSubmenu = true;\n menu.anchorElement = this._resolveAnchorElement(item);\n menu.placement =\n getComputedStyle(this).direction === 'rtl' ? 'left-start' : 'right-start';\n menu.offset = 4;\n };\n\n private _onItemClick = () => {\n if (this.menu?.open) {\n this.close();\n return;\n }\n\n this.show();\n };\n\n private _onItemKeyDown = async (event: KeyboardEvent) => {\n const isRtl = getComputedStyle(this).direction === 'rtl';\n const arrowEnter = isRtl ? 'ArrowLeft' : 'ArrowRight';\n\n const shouldOpen =\n event.key === arrowEnter || event.key === 'Enter' || event.key === ' ';\n\n if (!shouldOpen) {\n return;\n }\n\n event.preventDefault();\n if (event.key === arrowEnter) {\n event.stopPropagation();\n }\n\n await this.show();\n const firstItem = this.menu?.items.find(menuItem => !menuItem.disabled);\n if (firstItem) {\n firstItem.tabIndex = 0;\n firstItem.focus();\n }\n };\n\n private _onMenuKeyDown = async (event: KeyboardEvent) => {\n const isRtl = getComputedStyle(this).direction === 'rtl';\n const arrowExit = isRtl ? 'ArrowRight' : 'ArrowLeft';\n\n if (event.key !== 'Escape' && event.key !== arrowExit) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n await this.close();\n\n const { item } = this;\n if (item) {\n item.tabIndex = 0;\n item.focus();\n }\n };\n\n private _onCloseMenu = async (\n event: CustomEvent<{ reason?: { kind?: string; key?: string } }>,\n ) => {\n const { reason } = event.detail ?? {};\n const { key } = reason ?? {};\n if (reason?.kind === 'keydown' && key === 'Escape') {\n event.stopPropagation();\n await this.close();\n this.item?.focus();\n }\n };\n\n private _onMouseEnter = () => {\n window.clearTimeout(this._closeTimeout);\n this._openTimeout = window.setTimeout(() => {\n this.show();\n }, this.hoverOpenDelay);\n };\n\n private _onMouseLeave = (event: MouseEvent) => {\n const { relatedTarget: related } = event;\n if (related instanceof Node && this.contains(related)) {\n return;\n }\n\n window.clearTimeout(this._openTimeout);\n this._closeTimeout = window.setTimeout(() => {\n this.close();\n }, this.hoverCloseDelay);\n };\n}\n"],"names":["LitElement","html","styles","property","queryAssignedElements"],"mappings":"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"}
package/dist/table.js CHANGED
@@ -25,7 +25,8 @@ var css_248z = i`* {
25
25
  min-height: 20em;
26
26
  --table-border-color: var(--color-outline-variant);
27
27
  --table-border: 1px solid var(--table-border-color);
28
- --table-col-content-padding: var(--spacing-150, 0.75rem) var(--spacing-200, 1rem);
28
+ --table-col-content-padding: var(--spacing-150, 0.75rem)
29
+ var(--spacing-200, 1rem);
29
30
  }
30
31
 
31
32
  .table {
@@ -96,10 +97,7 @@ var css_248z = i`* {
96
97
  width: 100%;
97
98
  }
98
99
  .row .col .col-content .col-action {
99
- --button-border-radius: 0;
100
- }
101
- .row .col .col-content .col-action.has-focus {
102
- z-index: 12;
100
+ --button-container-shape: 0;
103
101
  }
104
102
  .row .col .col-content .checkbox {
105
103
  padding: 0 var(--spacing-100, 0.5rem);
@@ -113,14 +111,12 @@ var css_248z = i`* {
113
111
  .row .fixed-columns {
114
112
  position: sticky;
115
113
  left: 0;
116
- z-index: 1;
117
114
  }
118
115
  .row .scrollable-columns {
119
116
  flex: 0 0 auto;
120
117
  }
121
118
 
122
119
  .header {
123
- z-index: 2;
124
120
  position: sticky;
125
121
  top: 0;
126
122
  font-family: var(--typography-label-medium-font-family);
@@ -154,7 +150,6 @@ var css_248z = i`* {
154
150
  .body .row .col:focus {
155
151
  outline: none;
156
152
  border-bottom-color: var(--color-primary);
157
- z-index: 1;
158
153
  }
159
154
  .body .row .col:focus .col-content {
160
155
  border-color: var(--color-primary);
@@ -324,7 +319,7 @@ let Table = class Table extends i$1 {
324
319
  ? 'keyboard_arrow_up'
325
320
  : 'keyboard_arrow_down';
326
321
  }
327
- return '';
322
+ return 'unfold_more';
328
323
  }
329
324
  onSortClick(col) {
330
325
  if (this.sortBy === col.name) {
package/dist/table.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sources":["../../src/table/table.ts"],"sourcesContent":["import { html, LitElement, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\n\nimport { throttle } from '@/__internal/utils/throttle.js';\n\nimport styles from './table.scss';\nimport IndividualComponent from '@/IndividualComponent.js';\n\nconst DEFAULT_CELL_WIDTH = 16; // in rem\n\nexport interface TableColumn {\n name: string;\n label: string;\n width?: number;\n fixed?: boolean;\n template?: (row: any, column: TableColumn) => string;\n}\n\n/**\n * @label Table\n * @tag wc-table\n * @rawTag table\n * @summary A configurable component for displaying tabular data.\n * @overview\n * <p>The table component displays rows of data with support for sorting, pagination, row selection, and fixed columns.</p>\n *\n * @fires {CustomEvent} cell-click - Dispatched when a table cell is clicked.\n * @fires {CustomEvent} selection-change - Dispatched when the row selection changes.\n * @fires {CustomEvent} sort - Dispatched when the table is sorted.\n * @fires {CustomEvent} page - Dispatched when the page or page size changes.\n *\n * @example\n * ```html\n * <wc-table columns=\"[{'name': 'name','label': 'Name','width': 16},{'name': 'age','label': 'Age','width': 7}]\" data=\"[{'name': 'John','age': 30},{'name': 'Jane','age': 25}]\"></wc-table>\n * ```\n * @tags display, data\n */\n@IndividualComponent\nexport class Table extends LitElement {\n static styles = [styles];\n\n /**\n * Grid columns configuration.\n * Each column can have: name, label, width (px), fixed (boolean), template (function).\n */\n @property({ type: Array })\n columns: TableColumn[] = [];\n\n /**\n * Grid data to display on table.\n */\n @property({ type: Array })\n data: any[] = [];\n\n /**\n * Row selection type. Set to `\"checkbox\"` to enable checkbox selection.\n */\n @property({ type: String, attribute: 'selection-type' })\n selectionType: 'checkbox' | undefined;\n\n /**\n * Array of selected row key values.\n */\n @property({ type: Array, attribute: 'selected-row-keys' })\n selectedRowKeys: string[] = [];\n\n /**\n * The field name used as the unique key for each row. Defaults to `\"id\"`.\n */\n @property({ type: String, attribute: 'key-field' })\n keyField: string = 'id';\n\n /**\n * If true, sorting and pagination are managed externally (controlled mode).\n */\n @property({ type: Boolean })\n managed: boolean = false;\n\n /**\n * If true, columns are sortable. Defaults to `true`.\n */\n @property({ type: Boolean })\n sortable: boolean = true;\n\n /**\n * The field name currently used for sorting.\n */\n @property({ type: String, attribute: 'sort-by' })\n sortBy: string = '';\n\n /**\n * The current sort order. Possible values are `\"asc\"` and `\"desc\"`. Defaults to `\"asc\"`.\n */\n @property({ type: String, attribute: 'sort-order' })\n sortOrder: 'asc' | 'desc' = 'asc';\n\n /**\n * If true, pagination is enabled. Defaults to `true`.\n */\n @property({ type: Boolean })\n paginate: boolean = false;\n\n /**\n * The current page number (1-based). Defaults to `1`.\n */\n @property({ type: Number })\n page: number = 1;\n\n /**\n * The number of rows per page. Defaults to `10`.\n */\n @property({ type: Number, attribute: 'page-size' })\n pageSize: number = 10;\n\n /**\n * Total number of items (used in managed/controlled mode).\n */\n @property({ type: Number, attribute: 'total-items' })\n totalItems: number | undefined;\n\n /**\n * Headline text shown when the table has no data.\n */\n @property({ type: String, attribute: 'empty-state-headline' })\n emptyStateHeadline: string = 'No items';\n\n /**\n * Description text shown when the table has no data.\n */\n @property({ type: String, attribute: 'empty-state-description' })\n emptyStateDescription: string = 'There are no items to display';\n\n /** Tracks the currently hovered row and column for hover-highlight CSS. */\n @state()\n private hoveredCell: { row?: any; column?: any } = {};\n\n /** True when all rows on the current page are selected. */\n @state()\n private isSelectAll: boolean = false;\n\n /** True when some (but not all) rows on the current page are selected. */\n @state()\n private isSelectAllIntermediate: boolean = false;\n\n /** True when the scroll container has been scrolled horizontally. */\n @state()\n private isHorizontallyScrolled: boolean = false;\n\n // ── Private fields ────────────────────────────────────────────────────────\n\n /** Throttled version of the cell-mouseover handler to avoid excessive state updates. */\n private onCellMouseOverThrottled = throttle((row: any, column: any) => {\n this.hoveredCell = { row, column };\n }, 30);\n\n private onSelectAllClick = () => {\n this.isSelectAll = !this.isSelectAll;\n let selectedRowKeys: string[] = [];\n if (this.isSelectAll) {\n selectedRowKeys = this.data\n .slice((this.page - 1) * this.pageSize, this.page * this.pageSize)\n .map(row => row[this.keyField]);\n }\n this.onSelectChange(selectedRowKeys);\n };\n\n private onRowSelectClick = (row: any) => {\n let selectedRowKeys = [...this.selectedRowKeys];\n if (selectedRowKeys.includes(row[this.keyField])) {\n this.isSelectAll = false;\n selectedRowKeys = selectedRowKeys.filter(\n rowId => rowId !== row[this.keyField],\n );\n } else {\n selectedRowKeys.push(row[this.keyField]);\n }\n this.onSelectChange(selectedRowKeys);\n };\n\n private onSelectChange(selectedRowKeys: string[]) {\n this.selectedRowKeys = selectedRowKeys;\n this.dispatchEvent(\n new CustomEvent('selection-change', {\n detail: {\n value: this.selectedRowKeys,\n isSelectAll: this.isSelectAll,\n },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private onCellClick(row: any, col: TableColumn, evt: MouseEvent) {\n this.dispatchEvent(\n new CustomEvent('cell-click', {\n detail: {\n record: row,\n column: col,\n altKey: evt.altKey,\n ctrlKey: evt.ctrlKey,\n metaKey: evt.metaKey,\n shiftKey: evt.shiftKey,\n },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private onScrollContainer = (event: Event) => {\n const target = event.target as HTMLElement;\n this.isHorizontallyScrolled = !!target.scrollLeft;\n };\n\n private get totalColumnsWidth(): number {\n let total = 0;\n if (this.selectionType === 'checkbox') {\n total += 3; // approximate checkbox column width in rem\n }\n this.columns.forEach(col => {\n total += col.width ?? DEFAULT_CELL_WIDTH;\n });\n return total;\n }\n\n private getTotalItems(): number {\n if (this.paginate && !this.managed && this.data) return this.data.length;\n return this.totalItems ?? 0;\n }\n\n private getSortIcon(col: TableColumn): string {\n if (this.sortBy === col.name) {\n return this.sortOrder === 'asc'\n ? 'keyboard_arrow_up'\n : 'keyboard_arrow_down';\n }\n return '';\n }\n\n private onSortClick(col: TableColumn) {\n if (this.sortBy === col.name) {\n if (this.sortOrder === 'asc') {\n this.sortOrder = 'desc';\n } else {\n this.sortBy = '';\n }\n } else {\n this.sortBy = col.name;\n this.sortOrder = 'asc';\n }\n this.dispatchEvent(\n new CustomEvent('sort', {\n detail: { sortBy: this.sortBy, sortOrder: this.sortOrder },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private renderHeader() {\n const fixedCols: any[] = [];\n const scrollCols: any[] = [];\n\n if (this.selectionType === 'checkbox') {\n fixedCols.push(html`\n <div class=\"col col-checkbox center\">\n <div class=\"col-content\">\n <wc-checkbox\n class=\"checkbox\"\n .value=${this.isSelectAll}\n .indeterminate=${this.isSelectAllIntermediate}\n @change=${this.onSelectAllClick}\n ></wc-checkbox>\n </div>\n </div>\n `);\n }\n\n this.columns.forEach(col => {\n const colWidth = col.width\n ? parseInt(String(col.width), 10)\n : DEFAULT_CELL_WIDTH;\n const colEl = html`\n <div\n class=${classMap({ col: true, sort: this.sortBy === col.name })}\n style=\"width: ${colWidth}rem\"\n >\n <div class=\"col-content\">\n <div class=\"col-text\">${col.label}</div>\n <div class=\"col-actions\">\n ${this.sortable\n ? html`\n <wc-button\n class=\"col-action\"\n color=\"secondary\"\n variant=\"text\"\n @click=${() => this.onSortClick(col)}\n >\n <wc-icon\n slot=\"icon\"\n name=${this.getSortIcon(col)}\n ></wc-icon>\n </wc-button>\n `\n : nothing}\n </div>\n </div>\n </div>\n `;\n if (col.fixed) {\n fixedCols.push(colEl);\n } else {\n scrollCols.push(colEl);\n }\n });\n\n return html`\n <div class=\"header\">\n <div class=\"row\" style=\"min-width: ${this.totalColumnsWidth}rem\">\n <div class=\"fixed-columns columns-container\">${fixedCols}</div>\n <div class=\"scrollable-columns columns-container\">${scrollCols}</div>\n </div>\n </div>\n `;\n }\n\n private renderBody() {\n let data = [...this.data];\n\n if (!this.managed) {\n if (this.sortable && this.sortBy) {\n data = data.sort((a, b) => {\n if (a[this.sortBy] < b[this.sortBy])\n return this.sortOrder === 'asc' ? -1 : 1;\n if (a[this.sortBy] > b[this.sortBy])\n return this.sortOrder === 'asc' ? 1 : -1;\n return 0;\n });\n }\n if (this.paginate) {\n data = data.slice(\n (this.page - 1) * this.pageSize,\n this.page * this.pageSize,\n );\n }\n }\n\n const rows = data.map(row => {\n const fixedCols: any[] = [];\n const scrollCols: any[] = [];\n\n if (this.selectionType === 'checkbox') {\n fixedCols.push(html`\n <div class=\"col center col-checkbox\">\n <div class=\"col-content\">\n <wc-checkbox\n class=\"checkbox\"\n .value=${this.selectedRowKeys.includes(row[this.keyField])}\n @change=${() => this.onRowSelectClick(row)}\n ></wc-checkbox>\n </div>\n </div>\n `);\n }\n\n this.columns.forEach(column => {\n const colWidth = column.width\n ? parseInt(String(column.width), 10)\n : DEFAULT_CELL_WIDTH;\n const colEl = html`\n <div\n tabindex=\"0\"\n class=${classMap({\n col: true,\n 'col-hover':\n this.hoveredCell.row === row &&\n this.hoveredCell.column === column,\n })}\n style=\"width: ${colWidth}rem\"\n @mouseover=${() => this.onCellMouseOverThrottled(row, column)}\n @focus=${() => this.onCellMouseOverThrottled(row, column)}\n @keydown=${(event: KeyboardEvent) => {\n if ((event.ctrlKey || event.metaKey) && event.key === 'c') {\n const elem = event.target as HTMLElement;\n window.navigator.clipboard\n .writeText(elem.innerText)\n .catch(() => {});\n }\n }}\n @click=${(evt: MouseEvent) => {\n const selection = window.getSelection();\n if (selection?.type !== 'Range') {\n this.onCellClick(row, column, evt);\n }\n }}\n >\n <div class=\"col-content\">\n ${column.template\n ? html`<div class=\"col-template\">\n ${unsafeHTML(column.template(row, column))}\n </div>`\n : html`<div class=\"col-text\" title=${row?.[column.name] ?? ''}>\n ${row?.[column.name]}\n </div>`}\n </div>\n </div>\n `;\n if (column.fixed) {\n fixedCols.push(colEl);\n } else {\n scrollCols.push(colEl);\n }\n });\n\n return html`\n <div\n class=${classMap({\n row: true,\n 'row-hover': this.hoveredCell.row === row,\n })}\n style=\"min-width: ${this.totalColumnsWidth}rem\"\n >\n <div class=\"fixed-columns columns-container\">${fixedCols}</div>\n <div class=\"scrollable-columns columns-container\">${scrollCols}</div>\n </div>\n `;\n });\n\n return html`<div class=\"body\">${rows}</div>`;\n }\n\n private renderEmptyState() {\n return html`\n <div class=\"empty-table\">\n <wc-empty-state\n class=\"empty-state content-center\"\n headline=${this.emptyStateHeadline}\n description=${this.emptyStateDescription}\n ></wc-empty-state>\n </div>\n `;\n }\n\n private renderPagination() {\n if (!this.paginate) return nothing;\n\n return html`\n <wc-pagination\n .page=${this.page}\n .pageSize=${this.pageSize}\n .totalItems=${this.getTotalItems()}\n @page=${(e: CustomEvent) => {\n this.page = e.detail.page;\n this.pageSize = e.detail.pageSize;\n this.dispatchEvent(\n new CustomEvent('page', {\n detail: { page: this.page, pageSize: this.pageSize },\n bubbles: true,\n composed: true,\n }),\n );\n }}\n ></wc-pagination>\n `;\n }\n\n render() {\n const tableClasses = {\n table: true,\n sortable: this.sortable,\n paginate: this.paginate,\n 'horizontal-scrolled': this.isHorizontallyScrolled,\n };\n\n return html`\n <div class=${classMap(tableClasses)}>\n <div class=\"table-scroll-container\" @scroll=${this.onScrollContainer}>\n ${this.renderHeader()}\n ${this.data && this.data.length\n ? this.renderBody()\n : this.renderEmptyState()}\n </div>\n <div class=\"table-footer\">${this.renderPagination()}</div>\n </div>\n `;\n }\n}\n"],"names":["LitElement","html","classMap","nothing","unsafeHTML","styles","property","state"],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sources":["../../src/table/table.ts"],"sourcesContent":["import { html, LitElement, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\n\nimport { throttle } from '@/__internal/utils/throttle.js';\n\nimport styles from './table.scss';\nimport IndividualComponent from '@/IndividualComponent.js';\n\nconst DEFAULT_CELL_WIDTH = 16; // in rem\n\nexport interface TableColumn {\n name: string;\n label: string;\n width?: number;\n fixed?: boolean;\n template?: (row: any, column: TableColumn) => string;\n}\n\n/**\n * @label Table\n * @tag wc-table\n * @rawTag table\n * @summary A configurable component for displaying tabular data.\n * @overview\n * <p>The table component displays rows of data with support for sorting, pagination, row selection, and fixed columns.</p>\n *\n * @fires {CustomEvent} cell-click - Dispatched when a table cell is clicked.\n * @fires {CustomEvent} selection-change - Dispatched when the row selection changes.\n * @fires {CustomEvent} sort - Dispatched when the table is sorted.\n * @fires {CustomEvent} page - Dispatched when the page or page size changes.\n *\n * @example\n * ```html\n * <wc-table columns=\"[{'name': 'name','label': 'Name','width': 16},{'name': 'age','label': 'Age','width': 7}]\" data=\"[{'name': 'John','age': 30},{'name': 'Jane','age': 25}]\"></wc-table>\n * ```\n * @tags display, data\n */\n@IndividualComponent\nexport class Table extends LitElement {\n static styles = [styles];\n\n /**\n * Grid columns configuration.\n * Each column can have: name, label, width (px), fixed (boolean), template (function).\n */\n @property({ type: Array })\n columns: TableColumn[] = [];\n\n /**\n * Grid data to display on table.\n */\n @property({ type: Array })\n data: any[] = [];\n\n /**\n * Row selection type. Set to `\"checkbox\"` to enable checkbox selection.\n */\n @property({ type: String, attribute: 'selection-type' })\n selectionType: 'checkbox' | undefined;\n\n /**\n * Array of selected row key values.\n */\n @property({ type: Array, attribute: 'selected-row-keys' })\n selectedRowKeys: string[] = [];\n\n /**\n * The field name used as the unique key for each row. Defaults to `\"id\"`.\n */\n @property({ type: String, attribute: 'key-field' })\n keyField: string = 'id';\n\n /**\n * If true, sorting and pagination are managed externally (controlled mode).\n */\n @property({ type: Boolean })\n managed: boolean = false;\n\n /**\n * If true, columns are sortable. Defaults to `true`.\n */\n @property({ type: Boolean })\n sortable: boolean = true;\n\n /**\n * The field name currently used for sorting.\n */\n @property({ type: String, attribute: 'sort-by' })\n sortBy: string = '';\n\n /**\n * The current sort order. Possible values are `\"asc\"` and `\"desc\"`. Defaults to `\"asc\"`.\n */\n @property({ type: String, attribute: 'sort-order' })\n sortOrder: 'asc' | 'desc' = 'asc';\n\n /**\n * If true, pagination is enabled. Defaults to `true`.\n */\n @property({ type: Boolean })\n paginate: boolean = false;\n\n /**\n * The current page number (1-based). Defaults to `1`.\n */\n @property({ type: Number })\n page: number = 1;\n\n /**\n * The number of rows per page. Defaults to `10`.\n */\n @property({ type: Number, attribute: 'page-size' })\n pageSize: number = 10;\n\n /**\n * Total number of items (used in managed/controlled mode).\n */\n @property({ type: Number, attribute: 'total-items' })\n totalItems: number | undefined;\n\n /**\n * Headline text shown when the table has no data.\n */\n @property({ type: String, attribute: 'empty-state-headline' })\n emptyStateHeadline: string = 'No items';\n\n /**\n * Description text shown when the table has no data.\n */\n @property({ type: String, attribute: 'empty-state-description' })\n emptyStateDescription: string = 'There are no items to display';\n\n /** Tracks the currently hovered row and column for hover-highlight CSS. */\n @state()\n private hoveredCell: { row?: any; column?: any } = {};\n\n /** True when all rows on the current page are selected. */\n @state()\n private isSelectAll: boolean = false;\n\n /** True when some (but not all) rows on the current page are selected. */\n @state()\n private isSelectAllIntermediate: boolean = false;\n\n /** True when the scroll container has been scrolled horizontally. */\n @state()\n private isHorizontallyScrolled: boolean = false;\n\n // ── Private fields ────────────────────────────────────────────────────────\n\n /** Throttled version of the cell-mouseover handler to avoid excessive state updates. */\n private onCellMouseOverThrottled = throttle((row: any, column: any) => {\n this.hoveredCell = { row, column };\n }, 30);\n\n private onSelectAllClick = () => {\n this.isSelectAll = !this.isSelectAll;\n let selectedRowKeys: string[] = [];\n if (this.isSelectAll) {\n selectedRowKeys = this.data\n .slice((this.page - 1) * this.pageSize, this.page * this.pageSize)\n .map(row => row[this.keyField]);\n }\n this.onSelectChange(selectedRowKeys);\n };\n\n private onRowSelectClick = (row: any) => {\n let selectedRowKeys = [...this.selectedRowKeys];\n if (selectedRowKeys.includes(row[this.keyField])) {\n this.isSelectAll = false;\n selectedRowKeys = selectedRowKeys.filter(\n rowId => rowId !== row[this.keyField],\n );\n } else {\n selectedRowKeys.push(row[this.keyField]);\n }\n this.onSelectChange(selectedRowKeys);\n };\n\n private onSelectChange(selectedRowKeys: string[]) {\n this.selectedRowKeys = selectedRowKeys;\n this.dispatchEvent(\n new CustomEvent('selection-change', {\n detail: {\n value: this.selectedRowKeys,\n isSelectAll: this.isSelectAll,\n },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private onCellClick(row: any, col: TableColumn, evt: MouseEvent) {\n this.dispatchEvent(\n new CustomEvent('cell-click', {\n detail: {\n record: row,\n column: col,\n altKey: evt.altKey,\n ctrlKey: evt.ctrlKey,\n metaKey: evt.metaKey,\n shiftKey: evt.shiftKey,\n },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private onScrollContainer = (event: Event) => {\n const target = event.target as HTMLElement;\n this.isHorizontallyScrolled = !!target.scrollLeft;\n };\n\n private get totalColumnsWidth(): number {\n let total = 0;\n if (this.selectionType === 'checkbox') {\n total += 3; // approximate checkbox column width in rem\n }\n this.columns.forEach(col => {\n total += col.width ?? DEFAULT_CELL_WIDTH;\n });\n return total;\n }\n\n private getTotalItems(): number {\n if (this.paginate && !this.managed && this.data) return this.data.length;\n return this.totalItems ?? 0;\n }\n\n private getSortIcon(col: TableColumn): string {\n if (this.sortBy === col.name) {\n return this.sortOrder === 'asc'\n ? 'keyboard_arrow_up'\n : 'keyboard_arrow_down';\n }\n return 'unfold_more';\n }\n\n private onSortClick(col: TableColumn) {\n if (this.sortBy === col.name) {\n if (this.sortOrder === 'asc') {\n this.sortOrder = 'desc';\n } else {\n this.sortBy = '';\n }\n } else {\n this.sortBy = col.name;\n this.sortOrder = 'asc';\n }\n this.dispatchEvent(\n new CustomEvent('sort', {\n detail: { sortBy: this.sortBy, sortOrder: this.sortOrder },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private renderHeader() {\n const fixedCols: any[] = [];\n const scrollCols: any[] = [];\n\n if (this.selectionType === 'checkbox') {\n fixedCols.push(html`\n <div class=\"col col-checkbox center\">\n <div class=\"col-content\">\n <wc-checkbox\n class=\"checkbox\"\n .value=${this.isSelectAll}\n .indeterminate=${this.isSelectAllIntermediate}\n @change=${this.onSelectAllClick}\n ></wc-checkbox>\n </div>\n </div>\n `);\n }\n\n this.columns.forEach(col => {\n const colWidth = col.width\n ? parseInt(String(col.width), 10)\n : DEFAULT_CELL_WIDTH;\n const colEl = html`\n <div\n class=${classMap({ col: true, sort: this.sortBy === col.name })}\n style=\"width: ${colWidth}rem\"\n >\n <div class=\"col-content\">\n <div class=\"col-text\">${col.label}</div>\n <div class=\"col-actions\">\n ${this.sortable\n ? html`\n <wc-button\n class=\"col-action\"\n color=\"secondary\"\n variant=\"text\"\n @click=${() => this.onSortClick(col)}\n >\n <wc-icon\n slot=\"icon\"\n name=${this.getSortIcon(col)}\n ></wc-icon>\n </wc-button>\n `\n : nothing}\n </div>\n </div>\n </div>\n `;\n if (col.fixed) {\n fixedCols.push(colEl);\n } else {\n scrollCols.push(colEl);\n }\n });\n\n return html`\n <div class=\"header\">\n <div class=\"row\" style=\"min-width: ${this.totalColumnsWidth}rem\">\n <div class=\"fixed-columns columns-container\">${fixedCols}</div>\n <div class=\"scrollable-columns columns-container\">${scrollCols}</div>\n </div>\n </div>\n `;\n }\n\n private renderBody() {\n let data = [...this.data];\n\n if (!this.managed) {\n if (this.sortable && this.sortBy) {\n data = data.sort((a, b) => {\n if (a[this.sortBy] < b[this.sortBy])\n return this.sortOrder === 'asc' ? -1 : 1;\n if (a[this.sortBy] > b[this.sortBy])\n return this.sortOrder === 'asc' ? 1 : -1;\n return 0;\n });\n }\n if (this.paginate) {\n data = data.slice(\n (this.page - 1) * this.pageSize,\n this.page * this.pageSize,\n );\n }\n }\n\n const rows = data.map(row => {\n const fixedCols: any[] = [];\n const scrollCols: any[] = [];\n\n if (this.selectionType === 'checkbox') {\n fixedCols.push(html`\n <div class=\"col center col-checkbox\">\n <div class=\"col-content\">\n <wc-checkbox\n class=\"checkbox\"\n .value=${this.selectedRowKeys.includes(row[this.keyField])}\n @change=${() => this.onRowSelectClick(row)}\n ></wc-checkbox>\n </div>\n </div>\n `);\n }\n\n this.columns.forEach(column => {\n const colWidth = column.width\n ? parseInt(String(column.width), 10)\n : DEFAULT_CELL_WIDTH;\n const colEl = html`\n <div\n tabindex=\"0\"\n class=${classMap({\n col: true,\n 'col-hover':\n this.hoveredCell.row === row &&\n this.hoveredCell.column === column,\n })}\n style=\"width: ${colWidth}rem\"\n @mouseover=${() => this.onCellMouseOverThrottled(row, column)}\n @focus=${() => this.onCellMouseOverThrottled(row, column)}\n @keydown=${(event: KeyboardEvent) => {\n if ((event.ctrlKey || event.metaKey) && event.key === 'c') {\n const elem = event.target as HTMLElement;\n window.navigator.clipboard\n .writeText(elem.innerText)\n .catch(() => {});\n }\n }}\n @click=${(evt: MouseEvent) => {\n const selection = window.getSelection();\n if (selection?.type !== 'Range') {\n this.onCellClick(row, column, evt);\n }\n }}\n >\n <div class=\"col-content\">\n ${column.template\n ? html`<div class=\"col-template\">\n ${unsafeHTML(column.template(row, column))}\n </div>`\n : html`<div class=\"col-text\" title=${row?.[column.name] ?? ''}>\n ${row?.[column.name]}\n </div>`}\n </div>\n </div>\n `;\n if (column.fixed) {\n fixedCols.push(colEl);\n } else {\n scrollCols.push(colEl);\n }\n });\n\n return html`\n <div\n class=${classMap({\n row: true,\n 'row-hover': this.hoveredCell.row === row,\n })}\n style=\"min-width: ${this.totalColumnsWidth}rem\"\n >\n <div class=\"fixed-columns columns-container\">${fixedCols}</div>\n <div class=\"scrollable-columns columns-container\">${scrollCols}</div>\n </div>\n `;\n });\n\n return html`<div class=\"body\">${rows}</div>`;\n }\n\n private renderEmptyState() {\n return html`\n <div class=\"empty-table\">\n <wc-empty-state\n class=\"empty-state content-center\"\n headline=${this.emptyStateHeadline}\n description=${this.emptyStateDescription}\n ></wc-empty-state>\n </div>\n `;\n }\n\n private renderPagination() {\n if (!this.paginate) return nothing;\n\n return html`\n <wc-pagination\n .page=${this.page}\n .pageSize=${this.pageSize}\n .totalItems=${this.getTotalItems()}\n @page=${(e: CustomEvent) => {\n this.page = e.detail.page;\n this.pageSize = e.detail.pageSize;\n this.dispatchEvent(\n new CustomEvent('page', {\n detail: { page: this.page, pageSize: this.pageSize },\n bubbles: true,\n composed: true,\n }),\n );\n }}\n ></wc-pagination>\n `;\n }\n\n render() {\n const tableClasses = {\n table: true,\n sortable: this.sortable,\n paginate: this.paginate,\n 'horizontal-scrolled': this.isHorizontallyScrolled,\n };\n\n return html`\n <div class=${classMap(tableClasses)}>\n <div class=\"table-scroll-container\" @scroll=${this.onScrollContainer}>\n ${this.renderHeader()}\n ${this.data && this.data.length\n ? this.renderBody()\n : this.renderEmptyState()}\n </div>\n <div class=\"table-footer\">${this.renderPagination()}</div>\n </div>\n `;\n }\n}\n"],"names":["LitElement","html","classMap","nothing","unsafeHTML","styles","property","state"],"mappings":"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"}
package/dist/tooltip.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import { i, _ as __decorate, I as IndividualComponent, a as i$1, b } from './IndividualComponent-Bdwyrvd6.js';
2
2
  import { n } from './property-B49QQ8pS.js';
3
3
  import { e } from './class-map-DG7CA1et.js';
4
- import { F as FloatingController } from './floating-controller-CnUZnOhK.js';
4
+ import { F as FloatingController } from './floating-controller-CZYwnRVu.js';
5
5
  import './directive-ZPhl09Yt.js';
6
+ import './floating-ui.dom-oQieRCpS.js';
6
7
 
7
8
  var css_248z = i`* {
8
9
  box-sizing: border-box;
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.js","sources":["../../src/tooltip/tooltip.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport styles from './tooltip.scss';\nimport { FloatingController } from '../__internal/controllers/floating-controller.js';\nimport IndividualComponent from '@/IndividualComponent.js';\n\n// Define a type for valid trigger combinations\nexport type TooltipTrigger = 'hover' | 'focus' | 'click';\n\n/**\n * @label Tooltip\n * @tag wc-tooltip\n * @rawTag tooltip\n * @summary Displays a tooltip for an element.\n * @tags display\n *\n * @example\n * ```html\n * <wc-tooltip preview>Tooltip</wc-tooltip>\n * ```\n */\n@IndividualComponent\nexport class Tooltip extends LitElement {\n static styles = [styles];\n\n @property() content: string = '';\n\n /**\n * The ID of the element the tooltip should attach to.\n * If not provided, it defaults to the parent element.\n */\n @property() for: string = '';\n\n @property({ type: String }) trigger: string = 'hover focus';\n\n @property({ type: Boolean, reflect: true }) open = false;\n\n @property({ type: String, reflect: true }) variant: 'plain' | 'rich' =\n 'plain';\n\n @property({ type: Boolean, reflect: true }) preview = false;\n\n private _target: HTMLElement | null = null;\n\n private _floating: FloatingController | null = null;\n\n private resolveTrigger():\n | 'hover'\n | 'click'\n | 'focus'\n | 'manual'\n | 'hover-focus' {\n if (this.preview) return 'manual';\n\n const triggerTokens = this.trigger.split(' ');\n const hasHover = triggerTokens.includes('hover');\n const hasFocus = triggerTokens.includes('focus');\n const hasClick = triggerTokens.includes('click');\n\n if (hasClick) return 'click';\n if (hasHover && hasFocus) return 'hover-focus';\n if (hasFocus) return 'focus';\n if (hasHover) return 'hover';\n return 'manual';\n }\n\n private detachListeners() {\n if (this._floating) {\n this._floating.close();\n this._floating = null;\n }\n this._target = null;\n }\n\n _focusTarget?: HTMLElement;\n\n set forElement(value: HTMLElement | null) {\n if (value) {\n this._focusTarget = value;\n } else {\n this._focusTarget = undefined;\n }\n }\n\n __getFocusTarget(): HTMLElement | null {\n if (this._focusTarget) {\n return this._focusTarget;\n }\n\n const focusTarget = document.getElementById(this.for);\n if (focusTarget) {\n return focusTarget;\n }\n\n return this.parentElement;\n }\n\n private attachListeners() {\n this.detachListeners();\n\n // Resolve target: ID-based lookup or fallback to parent\n const root = this.getRootNode() as ShadowRoot | Document;\n this._target = this.for\n ? (root.getElementById(this.for) as HTMLElement)\n : this.parentElement;\n\n if (!this._target) return;\n\n this._floating = new FloatingController(this, {\n placement: 'top',\n strategy: 'fixed',\n offset: 0,\n trigger: this.resolveTrigger(),\n closeOnClickOutside: true,\n onOpenChange: isOpen => {\n if (this.open === isOpen) return;\n this.open = isOpen;\n },\n });\n\n this._floating.setElements(this._target, this);\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.attachListeners();\n }\n\n disconnectedCallback() {\n this.detachListeners();\n super.disconnectedCallback();\n }\n\n protected updated(changedProps: Map<string, any>) {\n // If the 'for' property changes, re-bind listeners to the new target\n if (changedProps.has('for')) {\n this.attachListeners();\n }\n\n if (changedProps.has('trigger') || changedProps.has('preview')) {\n this.attachListeners();\n }\n\n if (this._floating && this._target) {\n this._floating.setElements(this._target, this);\n\n if (changedProps.has('open') && this.open && !this._floating.isOpen) {\n this._floating.open();\n }\n\n if (changedProps.has('open') && !this.open && this._floating.isOpen) {\n this._floating.close();\n }\n }\n }\n\n render() {\n return html` <div\n class=${classMap({\n tooltip: true,\n [`variant-${this.variant}`]: true,\n })}\n id=\"tooltip\"\n role=\"tooltip\"\n aria-hidden=${!this.open}\n aria-labelledby=\"tooltip-labelledby\"\n >\n ${this.variant === 'plain'\n ? this.__renderPlainTooltip()\n : this.__renderRichTooltip()}\n </div>`;\n }\n\n // eslint-disable-next-line class-methods-use-this\n __renderPlainTooltip() {\n return html`<div class=\"tooltip-content\" id=\"tooltip-labelledby\">\n <slot></slot>\n </div>`;\n }\n\n // eslint-disable-next-line class-methods-use-this\n __renderRichTooltip() {\n return html`\n <div class=\"tooltip-content\">\n <wc-elevation class=\"elevation\"></wc-elevation>\n\n <div class=\"tooltip-title\" id=\"tooltip-labelledby\">\n <slot name=\"title\"></slot>\n </div>\n <div class=\"tooltip-support-text\">\n <slot></slot>\n </div>\n <div class=\"tooltip-actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n `;\n }\n}\n"],"names":["LitElement","html","classMap","styles","property"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA;;;;;;;;;;;AAWG;AAEI,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQA,GAAU,CAAA;AAAhC,IAAA,WAAA,GAAA;;QAGO,IAAA,CAAA,OAAO,GAAW,EAAE;AAEhC;;;AAGG;QACS,IAAA,CAAA,GAAG,GAAW,EAAE;QAEA,IAAA,CAAA,OAAO,GAAW,aAAa;QAEf,IAAA,CAAA,IAAI,GAAG,KAAK;QAEb,IAAA,CAAA,OAAO,GAChD,OAAO;QAEmC,IAAA,CAAA,OAAO,GAAG,KAAK;QAEnD,IAAA,CAAA,OAAO,GAAuB,IAAI;QAElC,IAAA,CAAA,SAAS,GAA8B,IAAI;IA0JrD;IAxJU,cAAc,GAAA;QAMpB,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,QAAQ;QAEjC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;QAC7C,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;QAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;QAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;AAEhD,QAAA,IAAI,QAAQ;AAAE,YAAA,OAAO,OAAO;QAC5B,IAAI,QAAQ,IAAI,QAAQ;AAAE,YAAA,OAAO,aAAa;AAC9C,QAAA,IAAI,QAAQ;AAAE,YAAA,OAAO,OAAO;AAC5B,QAAA,IAAI,QAAQ;AAAE,YAAA,OAAO,OAAO;AAC5B,QAAA,OAAO,QAAQ;IACjB;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACrB;IAIA,IAAI,UAAU,CAAC,KAAyB,EAAA;QACtC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QAC3B;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS;QAC/B;IACF;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,IAAI,CAAC,YAAY;QAC1B;QAEA,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;QACrD,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,WAAW;QACpB;QAEA,OAAO,IAAI,CAAC,aAAa;IAC3B;IAEQ,eAAe,GAAA;QACrB,IAAI,CAAC,eAAe,EAAE;;AAGtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAA2B;AACxD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;cACf,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG;AAC/B,cAAE,IAAI,CAAC,aAAa;QAEtB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AAEnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,kBAAkB,CAAC,IAAI,EAAE;AAC5C,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE;AAC9B,YAAA,mBAAmB,EAAE,IAAI;YACzB,YAAY,EAAE,MAAM,IAAG;AACrB,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;oBAAE;AAC1B,gBAAA,IAAI,CAAC,IAAI,GAAG,MAAM;YACpB,CAAC;AACF,SAAA,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;IAChD;IAEA,iBAAiB,GAAA;QACf,KAAK,CAAC,iBAAiB,EAAE;QACzB,IAAI,CAAC,eAAe,EAAE;IACxB;IAEA,oBAAoB,GAAA;QAClB,IAAI,CAAC,eAAe,EAAE;QACtB,KAAK,CAAC,oBAAoB,EAAE;IAC9B;AAEU,IAAA,OAAO,CAAC,YAA8B,EAAA;;AAE9C,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC3B,IAAI,CAAC,eAAe,EAAE;QACxB;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAC9D,IAAI,CAAC,eAAe,EAAE;QACxB;QAEA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;YAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AAE9C,YAAA,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACnE,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACvB;AAEA,YAAA,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACnE,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB;QACF;IACF;IAEA,MAAM,GAAA;AACJ,QAAA,OAAOC,CAAI,CAAA,CAAA;AACD,YAAA,EAAAC,CAAQ,CAAC;AACf,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,CAAC,WAAW,IAAI,CAAC,OAAO,CAAA,CAAE,GAAG,IAAI;SAClC,CAAC;;;oBAGY,CAAC,IAAI,CAAC,IAAI;;;QAGtB,IAAI,CAAC,OAAO,KAAK;AACjB,cAAE,IAAI,CAAC,oBAAoB;AAC3B,cAAE,IAAI,CAAC,mBAAmB,EAAE;WACzB;IACT;;IAGA,oBAAoB,GAAA;AAClB,QAAA,OAAOD,CAAI,CAAA,CAAA;;WAEJ;IACT;;IAGA,mBAAmB,GAAA;AACjB,QAAA,OAAOA,CAAI,CAAA;;;;;;;;;;;;;;KAcV;IACH;;AA9KO,OAAA,CAAA,MAAM,GAAG,CAACE,QAAM,CAAC;AAEZ,UAAA,CAAA;AAAX,IAAAC,CAAQ;AAAwB,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAMrB,UAAA,CAAA;AAAX,IAAAA,CAAQ;AAAoB,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,KAAA,EAAA,MAAA,CAAA;AAED,UAAA,CAAA;AAA3B,IAAAA,CAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AAAkC,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAEhB,UAAA,CAAA;IAA3CA,CAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAAe,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AAEd,UAAA,CAAA;IAA1CA,CAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;AAC/B,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAEkC,UAAA,CAAA;IAA3CA,CAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAAkB,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAlBjD,OAAO,GAAA,UAAA,CAAA;IADnB;AACY,CAAA,EAAA,OAAO,CAgLnB;;;;"}
1
+ {"version":3,"file":"tooltip.js","sources":["../../src/tooltip/tooltip.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport styles from './tooltip.scss';\nimport { FloatingController } from '../__internal/controllers/floating-controller.js';\nimport IndividualComponent from '@/IndividualComponent.js';\n\n// Define a type for valid trigger combinations\nexport type TooltipTrigger = 'hover' | 'focus' | 'click';\n\n/**\n * @label Tooltip\n * @tag wc-tooltip\n * @rawTag tooltip\n * @summary Displays a tooltip for an element.\n * @tags display\n *\n * @example\n * ```html\n * <wc-tooltip preview>Tooltip</wc-tooltip>\n * ```\n */\n@IndividualComponent\nexport class Tooltip extends LitElement {\n static styles = [styles];\n\n @property() content: string = '';\n\n /**\n * The ID of the element the tooltip should attach to.\n * If not provided, it defaults to the parent element.\n */\n @property() for: string = '';\n\n @property({ type: String }) trigger: string = 'hover focus';\n\n @property({ type: Boolean, reflect: true }) open = false;\n\n @property({ type: String, reflect: true }) variant: 'plain' | 'rich' =\n 'plain';\n\n @property({ type: Boolean, reflect: true }) preview = false;\n\n private _target: HTMLElement | null = null;\n\n private _floating: FloatingController | null = null;\n\n private resolveTrigger():\n | 'hover'\n | 'click'\n | 'focus'\n | 'manual'\n | 'hover-focus' {\n if (this.preview) return 'manual';\n\n const triggerTokens = this.trigger.split(' ');\n const hasHover = triggerTokens.includes('hover');\n const hasFocus = triggerTokens.includes('focus');\n const hasClick = triggerTokens.includes('click');\n\n if (hasClick) return 'click';\n if (hasHover && hasFocus) return 'hover-focus';\n if (hasFocus) return 'focus';\n if (hasHover) return 'hover';\n return 'manual';\n }\n\n private detachListeners() {\n if (this._floating) {\n this._floating.close();\n this._floating = null;\n }\n this._target = null;\n }\n\n _focusTarget?: HTMLElement;\n\n set forElement(value: HTMLElement | null) {\n if (value) {\n this._focusTarget = value;\n } else {\n this._focusTarget = undefined;\n }\n }\n\n __getFocusTarget(): HTMLElement | null {\n if (this._focusTarget) {\n return this._focusTarget;\n }\n\n const focusTarget = document.getElementById(this.for);\n if (focusTarget) {\n return focusTarget;\n }\n\n return this.parentElement;\n }\n\n private attachListeners() {\n this.detachListeners();\n\n // Resolve target: ID-based lookup or fallback to parent\n const root = this.getRootNode() as ShadowRoot | Document;\n this._target = this.for\n ? (root.getElementById(this.for) as HTMLElement)\n : this.parentElement;\n\n if (!this._target) return;\n\n this._floating = new FloatingController(this, {\n placement: 'top',\n strategy: 'fixed',\n offset: 0,\n trigger: this.resolveTrigger(),\n closeOnClickOutside: true,\n onOpenChange: isOpen => {\n if (this.open === isOpen) return;\n this.open = isOpen;\n },\n });\n\n this._floating.setElements(this._target, this);\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.attachListeners();\n }\n\n disconnectedCallback() {\n this.detachListeners();\n super.disconnectedCallback();\n }\n\n protected updated(changedProps: Map<string, any>) {\n // If the 'for' property changes, re-bind listeners to the new target\n if (changedProps.has('for')) {\n this.attachListeners();\n }\n\n if (changedProps.has('trigger') || changedProps.has('preview')) {\n this.attachListeners();\n }\n\n if (this._floating && this._target) {\n this._floating.setElements(this._target, this);\n\n if (changedProps.has('open') && this.open && !this._floating.isOpen) {\n this._floating.open();\n }\n\n if (changedProps.has('open') && !this.open && this._floating.isOpen) {\n this._floating.close();\n }\n }\n }\n\n render() {\n return html` <div\n class=${classMap({\n tooltip: true,\n [`variant-${this.variant}`]: true,\n })}\n id=\"tooltip\"\n role=\"tooltip\"\n aria-hidden=${!this.open}\n aria-labelledby=\"tooltip-labelledby\"\n >\n ${this.variant === 'plain'\n ? this.__renderPlainTooltip()\n : this.__renderRichTooltip()}\n </div>`;\n }\n\n // eslint-disable-next-line class-methods-use-this\n __renderPlainTooltip() {\n return html`<div class=\"tooltip-content\" id=\"tooltip-labelledby\">\n <slot></slot>\n </div>`;\n }\n\n // eslint-disable-next-line class-methods-use-this\n __renderRichTooltip() {\n return html`\n <div class=\"tooltip-content\">\n <wc-elevation class=\"elevation\"></wc-elevation>\n\n <div class=\"tooltip-title\" id=\"tooltip-labelledby\">\n <slot name=\"title\"></slot>\n </div>\n <div class=\"tooltip-support-text\">\n <slot></slot>\n </div>\n <div class=\"tooltip-actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n `;\n }\n}\n"],"names":["LitElement","html","classMap","styles","property"],"mappings":"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"}