@xplortech/apollo-core 2.6.0 → 2.7.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.
- package/.typings/apollo-components.html-data.json +737 -63
- package/build/style.css +5415 -1805
- package/dist/apollo-core/apollo-core.css +62 -22
- package/dist/apollo-core/apollo-core.esm.js +1 -1
- package/dist/apollo-core/{p-8a1affce.entry.js → p-084d26ed.entry.js} +1 -1
- package/dist/apollo-core/p-146d5d55.entry.js +1 -0
- package/dist/apollo-core/p-16742606.entry.js +1 -0
- package/dist/apollo-core/{p-42016063.entry.js → p-28d12fd3.entry.js} +1 -1
- package/dist/apollo-core/p-3eb5eb7c.entry.js +1 -0
- package/dist/apollo-core/p-4882f0bd.entry.js +1 -0
- package/dist/apollo-core/p-64b34268.entry.js +1 -0
- package/dist/apollo-core/p-6c956d4e.entry.js +1 -0
- package/dist/apollo-core/p-71b75f36.entry.js +1 -0
- package/dist/apollo-core/{p-02167464.entry.js → p-7eb86c63.entry.js} +1 -1
- package/dist/apollo-core/{p-1fd3dc87.entry.js → p-84254a24.entry.js} +1 -1
- package/dist/apollo-core/p-9f2a0321.entry.js +1 -0
- package/dist/apollo-core/{p-C_Z2nG0p.js → p-C7bgJs6C.js} +2 -2
- package/dist/apollo-core/p-cde83ab0.entry.js +1 -0
- package/dist/apollo-core/p-e7363036.entry.js +1 -0
- package/dist/cjs/apollo-core.cjs.js +3 -3
- package/dist/cjs/{index-DH6pgWru.js → index-BQ97-AWw.js} +18 -15
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/xpl-accordion.cjs.entry.js +3 -3
- package/dist/cjs/xpl-application-shell.cjs.entry.js +2 -2
- package/dist/cjs/{xpl-avatar_47.cjs.entry.js → xpl-avatar_61.cjs.entry.js} +6096 -1461
- package/dist/cjs/xpl-button-row.cjs.entry.js +2 -2
- package/dist/cjs/xpl-calendar.cjs.entry.js +2 -2
- package/dist/cjs/xpl-dynamic-table-cell.cjs.entry.js +3 -3
- package/dist/cjs/xpl-dynamic-table-row.cjs.entry.js +3 -3
- package/dist/cjs/xpl-dynamic-table.cjs.entry.js +2 -2
- package/dist/cjs/xpl-grid-item.cjs.entry.js +2 -2
- package/dist/cjs/xpl-grid.cjs.entry.js +2 -2
- package/dist/cjs/xpl-large-card.cjs.entry.js +2 -2
- package/dist/cjs/xpl-main-nav.cjs.entry.js +2 -2
- package/dist/cjs/xpl-toggle.cjs.entry.js +4 -4
- package/dist/cjs/xpl-toolbar.cjs.entry.js +3 -3
- package/dist/collection/collection-manifest.json +18 -7
- package/dist/collection/components/xpl-accordion/xpl-accordion.js +2 -2
- package/dist/collection/components/xpl-application-shell/xpl-application-shell.js +1 -1
- package/dist/collection/components/xpl-avatar/avatar.stories.js +122 -107
- package/dist/collection/components/xpl-avatar/xpl-avatar.js +249 -15
- package/dist/collection/components/xpl-backdrop/xpl-backdrop.js +1 -1
- package/dist/collection/components/xpl-badge/badge.stories.js +1 -33
- package/dist/collection/components/xpl-badge/xpl-badge.js +1 -1
- package/dist/collection/components/xpl-banner/xpl-banner.js +4 -3
- package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumb-item/xpl-breadcrumb-item.js +1 -1
- package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumbs/xpl-breadcrumbs.js +1 -1
- package/dist/collection/components/xpl-button/xpl-button.js +21 -3
- package/dist/collection/components/xpl-button-row/xpl-button-row.js +1 -1
- package/dist/collection/components/xpl-calendar/xpl-calendar.js +1 -1
- package/dist/collection/components/xpl-checkbox/xpl-checkbox.js +47 -25
- package/dist/collection/components/xpl-choicelist/xpl-choicelist.js +1 -1
- package/dist/collection/components/xpl-content-area/xpl-content-area.js +1 -1
- package/dist/collection/components/xpl-dashboard/xpl-dashboard.js +1 -1
- package/dist/collection/components/xpl-data-card/xpl-data-card.js +2 -2
- package/dist/collection/components/xpl-divider/xpl-divider.js +1 -1
- package/dist/collection/components/xpl-dropdown/xpl-dropdown-group/xpl-dropdown-group.js +1 -1
- package/dist/collection/components/xpl-dropdown/xpl-dropdown-heading/xpl-dropdown-heading.js +1 -1
- package/dist/collection/components/xpl-dropdown/xpl-dropdown-option/xpl-dropdown-option.js +2 -2
- package/dist/collection/components/xpl-dropdown/xpl-dropdown.js +2 -2
- package/dist/collection/components/xpl-dynamic-table/xpl-dynamic-table.js +1 -1
- package/dist/collection/components/xpl-dynamic-table-cell/xpl-dynamic-table-cell.js +2 -2
- package/dist/collection/components/xpl-dynamic-table-row/xpl-dynamic-table-row.js +2 -2
- package/dist/collection/components/xpl-grid/xpl-grid.js +1 -1
- package/dist/collection/components/xpl-grid-item/xpl-grid-item.js +1 -1
- package/dist/collection/components/xpl-header-accordion/xpl-header-accordion.js +46 -53
- package/dist/collection/components/xpl-icon/xpl-icon.js +2 -2
- package/dist/collection/components/xpl-input/input.stories.js +96 -1
- package/dist/collection/components/xpl-input/xpl-input-color/xpl-input-color.js +8 -8
- package/dist/collection/components/xpl-input/xpl-input-date/xpl-input-date.js +3 -3
- package/dist/collection/components/xpl-input/xpl-input-file/xpl-input-file.js +4 -4
- package/dist/collection/components/xpl-input/xpl-input-phone/xpl-input-phone.js +5 -5
- package/dist/collection/components/xpl-input/xpl-input-search/xpl-input-search.js +485 -0
- package/dist/collection/components/xpl-input/xpl-input-time/xpl-input-time.js +2 -2
- package/dist/collection/components/xpl-input/xpl-input.js +130 -18
- package/dist/collection/components/xpl-large-card/xpl-large-card.js +1 -1
- package/dist/collection/components/xpl-list/list.stories.js +300 -63
- package/dist/collection/components/xpl-list/xpl-list-item/xpl-list-item.js +818 -0
- package/dist/collection/components/xpl-list/xpl-list.js +579 -21
- package/dist/collection/components/xpl-main-nav/xpl-main-nav.js +1 -1
- package/dist/collection/components/xpl-modal/xpl-modal.js +1 -1
- package/dist/collection/components/xpl-nav-item/xpl-nav-item.js +2 -2
- package/dist/collection/components/xpl-pagination/xpl-pagination.js +3 -3
- package/dist/collection/components/xpl-panel/panel.stories.js +5 -3
- package/dist/collection/components/xpl-panel/xpl-panel.js +3 -3
- package/dist/collection/components/xpl-popover/xpl-popover.js +4 -4
- package/dist/collection/components/xpl-progress-bar/xpl-progress-bar.js +2 -2
- package/dist/collection/components/xpl-progress-indicator/progress-indicator.stories.js +118 -0
- package/dist/collection/components/xpl-progress-indicator/xpl-progress-indicator.js +171 -0
- package/dist/collection/components/xpl-radio/xpl-radio.js +3 -3
- package/dist/collection/components/xpl-secondary-nav/xpl-secondary-nav.js +1 -1
- package/dist/collection/components/xpl-select/xpl-select.js +6 -6
- package/dist/collection/components/xpl-side-nav/xpl-side-nav-item/xpl-side-nav-item.js +2 -2
- package/dist/collection/components/xpl-side-nav/xpl-side-nav.js +2 -2
- package/dist/collection/components/xpl-skeleton/xpl-skeleton.js +1 -1
- package/dist/collection/components/xpl-slideout/xpl-slideout.js +1 -1
- package/dist/collection/components/xpl-spotlight/spotlight.stories.js +385 -0
- package/dist/collection/components/xpl-spotlight/xpl-spotlight.js +1085 -0
- package/dist/collection/components/xpl-tab/xpl-tab.js +261 -8
- package/dist/collection/components/xpl-tab-panel/xpl-tab-panel.js +22 -15
- package/dist/collection/components/xpl-table/table.stories.js +319 -67
- package/dist/collection/components/xpl-table/utils/move-row-dom.js +50 -0
- package/dist/collection/components/xpl-table/utils/table-internal.js +58 -0
- package/dist/collection/components/xpl-table/xpl-table-body/xpl-table-body.js +7 -0
- package/dist/collection/components/xpl-table/xpl-table-cell/xpl-table-cell.js +155 -0
- package/dist/collection/components/xpl-table/xpl-table-footer/xpl-table-footer.js +7 -0
- package/dist/collection/components/xpl-table/xpl-table-footer-cell/xpl-table-footer-cell.js +37 -0
- package/dist/collection/components/xpl-table/xpl-table-header/table-header.stories.js +131 -0
- package/dist/collection/components/xpl-table/xpl-table-header/xpl-table-header.js +7 -0
- package/dist/collection/components/xpl-table/xpl-table-header-cell/table-header-cell.stories.js +105 -0
- package/dist/collection/components/xpl-table/xpl-table-header-cell/xpl-table-header-cell.js +402 -0
- package/dist/collection/components/xpl-table/xpl-table-row/xpl-table-row.js +121 -0
- package/dist/collection/components/xpl-table/xpl-table.js +1448 -143
- package/dist/collection/components/xpl-tabs/segment-control.stories.js +31 -0
- package/dist/collection/components/xpl-tabs/tabs.shared.js +156 -0
- package/dist/collection/components/xpl-tabs/tabs.stories.js +10 -60
- package/dist/collection/components/xpl-tabs/xpl-tabs.js +338 -62
- package/dist/collection/components/xpl-tag/tag.stories.js +153 -0
- package/dist/collection/components/xpl-tag/xpl-tag.js +312 -9
- package/dist/collection/components/xpl-toast/xpl-toast.js +2 -2
- package/dist/collection/components/xpl-toggle/xpl-toggle.js +3 -3
- package/dist/collection/components/xpl-toolbar/xpl-toolbar.js +2 -2
- package/dist/collection/components/xpl-tooltip/xpl-tooltip.js +1 -1
- package/dist/collection/components/xpl-top-nav/top-nav.stories.js +625 -0
- package/dist/collection/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.js +122 -0
- package/dist/collection/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.js +481 -0
- package/dist/collection/components/xpl-top-nav/xpl-top-nav.js +433 -0
- package/dist/collection/components/xpl-utility-bar/xpl-utility-bar.js +1 -1
- package/dist/collection/utils/lifecycle.js +79 -0
- package/dist/collection/utils/tab-a11y-ids.js +22 -0
- package/dist/components/floating-ui.dom.js +1 -0
- package/dist/components/index.js +1 -1
- package/dist/components/lifecycle.js +1 -0
- package/dist/components/tab-a11y-ids.js +1 -0
- package/dist/components/xpl-accordion.js +1 -1
- package/dist/components/xpl-application-shell.js +1 -1
- package/dist/components/xpl-avatar2.js +1 -1
- package/dist/components/xpl-backdrop2.js +1 -1
- package/dist/components/xpl-badge2.js +1 -1
- package/dist/components/xpl-banner.js +1 -1
- package/dist/components/xpl-breadcrumb-item.js +1 -1
- package/dist/components/xpl-breadcrumbs.js +1 -1
- package/dist/components/xpl-button-row.js +1 -1
- package/dist/components/xpl-button2.js +1 -1
- package/dist/components/xpl-calendar.js +1 -1
- package/dist/components/xpl-checkbox2.js +1 -1
- package/dist/components/xpl-choicelist.js +1 -1
- package/dist/components/xpl-content-area.js +1 -1
- package/dist/components/xpl-dashboard.js +1 -1
- package/dist/components/xpl-data-card.js +1 -1
- package/dist/components/xpl-divider2.js +1 -1
- package/dist/components/xpl-dropdown-group2.js +1 -1
- package/dist/components/xpl-dropdown-heading2.js +1 -1
- package/dist/components/xpl-dropdown-option2.js +1 -1
- package/dist/components/xpl-dropdown2.js +1 -1
- package/dist/components/xpl-dynamic-table-cell.js +1 -1
- package/dist/components/xpl-dynamic-table-row.js +1 -1
- package/dist/components/xpl-dynamic-table.js +1 -1
- package/dist/components/xpl-grid-item.js +1 -1
- package/dist/components/xpl-grid.js +1 -1
- package/dist/components/xpl-header-accordion.js +1 -1
- package/dist/components/xpl-icon2.js +1 -1
- package/dist/components/xpl-input-date2.js +1 -1
- package/dist/components/xpl-input-file2.js +1 -1
- package/dist/components/xpl-input-search.d.ts +11 -0
- package/dist/components/xpl-input-search.js +1 -0
- package/dist/components/xpl-input-search2.js +1 -0
- package/dist/components/xpl-input2.js +1 -1
- package/dist/components/xpl-large-card.js +1 -1
- package/dist/components/{xpl-progress.d.ts → xpl-list-item.d.ts} +4 -4
- package/dist/components/xpl-list-item.js +1 -0
- package/dist/components/xpl-list-item2.js +1 -0
- package/dist/components/xpl-list.js +1 -1
- package/dist/components/xpl-main-nav.js +1 -1
- package/dist/components/xpl-modal.js +1 -1
- package/dist/components/xpl-nav-header-menu.d.ts +11 -0
- package/dist/components/xpl-nav-header-menu.js +1 -0
- package/dist/components/xpl-nav-item.js +1 -1
- package/dist/components/xpl-pagination.js +1 -1
- package/dist/components/xpl-panel.js +1 -1
- package/dist/components/xpl-popover2.js +1 -1
- package/dist/components/xpl-progress-bar.js +1 -1
- package/dist/components/xpl-progress-indicator.d.ts +11 -0
- package/dist/components/xpl-progress-indicator.js +1 -0
- package/dist/components/xpl-radio2.js +1 -1
- package/dist/components/xpl-secondary-nav.js +1 -1
- package/dist/components/xpl-select2.js +1 -1
- package/dist/components/xpl-side-nav-item.js +1 -1
- package/dist/components/xpl-side-nav.js +1 -1
- package/dist/components/xpl-skeleton.js +1 -1
- package/dist/components/xpl-slideout.js +1 -1
- package/dist/components/xpl-spotlight.d.ts +11 -0
- package/dist/components/xpl-spotlight.js +1 -0
- package/dist/components/xpl-tab-panel.js +1 -1
- package/dist/components/xpl-tab.js +1 -1
- package/dist/components/xpl-table-body.d.ts +11 -0
- package/dist/components/xpl-table-body.js +1 -0
- package/dist/components/xpl-table-cell.d.ts +11 -0
- package/dist/components/xpl-table-cell.js +1 -0
- package/dist/components/xpl-table-cell2.js +1 -0
- package/dist/components/xpl-table-footer-cell.d.ts +11 -0
- package/dist/components/xpl-table-footer-cell.js +1 -0
- package/dist/components/xpl-table-footer-cell2.js +1 -0
- package/dist/components/xpl-table-footer.d.ts +11 -0
- package/dist/components/xpl-table-footer.js +1 -0
- package/dist/components/xpl-table-header-cell.js +1 -1
- package/dist/components/xpl-table-header-cell2.js +1 -0
- package/dist/components/xpl-table-header.js +1 -1
- package/dist/components/xpl-table-row.d.ts +11 -0
- package/dist/components/xpl-table-row.js +1 -0
- package/dist/components/xpl-table.js +1 -1
- package/dist/components/xpl-tabs.js +1 -1
- package/dist/components/xpl-tag2.js +1 -1
- package/dist/components/xpl-toast.js +1 -1
- package/dist/components/xpl-toggle.js +1 -1
- package/dist/components/xpl-toolbar.js +1 -1
- package/dist/components/xpl-tooltip2.js +1 -1
- package/dist/components/xpl-top-nav-item.d.ts +11 -0
- package/dist/components/xpl-top-nav-item.js +1 -0
- package/dist/components/xpl-top-nav-item2.js +1 -0
- package/dist/components/xpl-top-nav.d.ts +11 -0
- package/dist/components/xpl-top-nav.js +1 -0
- package/dist/components/xpl-utility-bar.js +1 -1
- package/dist/docs/xpl-avatar/readme.md +289 -15
- package/dist/docs/xpl-badge/readme.md +14 -9
- package/dist/docs/xpl-banner/readme.md +48 -11
- package/dist/docs/xpl-button/readme.md +28 -18
- package/dist/docs/xpl-calendar/readme.md +1 -1
- package/dist/docs/xpl-checkbox/readme.md +19 -16
- package/dist/docs/xpl-divider/readme.md +6 -4
- package/dist/docs/xpl-dropdown/readme.md +1 -1
- package/dist/docs/xpl-dynamic-table/readme.md +22 -19
- package/dist/docs/xpl-dynamic-table-cell/readme.md +20 -18
- package/dist/docs/xpl-dynamic-table-row/readme.md +21 -19
- package/dist/docs/xpl-icon/readme.md +15 -3
- package/dist/docs/xpl-input/readme.md +66 -41
- package/dist/docs/xpl-input/xpl-input-color/readme.md +1 -0
- package/dist/docs/xpl-input/xpl-input-phone/readme.md +1 -0
- package/dist/docs/xpl-input/xpl-input-search/readme.md +175 -0
- package/dist/docs/xpl-input/xpl-input-time/readme.md +1 -0
- package/dist/docs/xpl-list/readme.md +320 -10
- package/dist/docs/xpl-list/xpl-list-item/readme.md +99 -0
- package/dist/docs/xpl-pagination/readme.md +1 -0
- package/dist/docs/xpl-panel/readme.md +108 -17
- package/dist/docs/xpl-popover/readme.md +2 -0
- package/dist/docs/xpl-progress-indicator/readme.md +234 -0
- package/dist/docs/xpl-radio/readme.md +6 -4
- package/dist/docs/xpl-select/readme.md +2 -1
- package/dist/docs/xpl-side-nav/readme.md +2 -2
- package/dist/docs/xpl-slideout/readme.md +1 -1
- package/dist/docs/xpl-spotlight/readme.md +235 -0
- package/dist/docs/xpl-tab/readme.md +43 -7
- package/dist/docs/xpl-tab-panel/readme.md +42 -0
- package/dist/docs/xpl-table/readme.md +110 -46
- package/dist/docs/xpl-table/xpl-table-body/readme.md +10 -0
- package/dist/docs/xpl-table/xpl-table-cell/readme.md +33 -0
- package/dist/docs/xpl-table/xpl-table-footer/readme.md +10 -0
- package/dist/docs/xpl-table/xpl-table-footer-cell/readme.md +30 -0
- package/dist/docs/{xpl-table-header → xpl-table/xpl-table-header}/readme.md +13 -13
- package/dist/docs/xpl-table/xpl-table-header-cell/readme.md +66 -0
- package/dist/docs/xpl-table/xpl-table-row/readme.md +19 -0
- package/dist/docs/xpl-tabs/readme.md +62 -8
- package/dist/docs/xpl-tag/readme.md +379 -4
- package/dist/docs/xpl-toast/readme.md +1 -1
- package/dist/docs/xpl-top-nav/readme.md +179 -0
- package/dist/docs/xpl-top-nav/xpl-nav-header-menu/readme.md +81 -0
- package/dist/docs/xpl-top-nav/xpl-top-nav-item/readme.md +87 -0
- package/dist/esm/apollo-core.js +4 -4
- package/dist/esm/{index-C_Z2nG0p.js → index-C7bgJs6C.js} +18 -16
- package/dist/esm/loader.js +3 -3
- package/dist/esm/xpl-accordion.entry.js +3 -3
- package/dist/esm/xpl-application-shell.entry.js +2 -2
- package/dist/esm/{xpl-avatar_47.entry.js → xpl-avatar_61.entry.js} +6082 -1461
- package/dist/esm/xpl-button-row.entry.js +2 -2
- package/dist/esm/xpl-calendar.entry.js +2 -2
- package/dist/esm/xpl-dynamic-table-cell.entry.js +3 -3
- package/dist/esm/xpl-dynamic-table-row.entry.js +3 -3
- package/dist/esm/xpl-dynamic-table.entry.js +2 -2
- package/dist/esm/xpl-grid-item.entry.js +2 -2
- package/dist/esm/xpl-grid.entry.js +2 -2
- package/dist/esm/xpl-large-card.entry.js +2 -2
- package/dist/esm/xpl-main-nav.entry.js +2 -2
- package/dist/esm/xpl-toggle.entry.js +4 -4
- package/dist/esm/xpl-toolbar.entry.js +3 -3
- package/dist/types/components/xpl-avatar/avatar.stories.d.ts +88 -29
- package/dist/types/components/xpl-avatar/xpl-avatar.d.ts +29 -2
- package/dist/types/components/xpl-badge/badge.stories.d.ts +0 -19
- package/dist/types/components/xpl-button/xpl-button.d.ts +7 -0
- package/dist/types/components/xpl-checkbox/xpl-checkbox.d.ts +4 -3
- package/dist/types/components/xpl-header-accordion/xpl-header-accordion.d.ts +9 -10
- package/dist/types/components/xpl-input/input.stories.d.ts +1 -0
- package/dist/types/components/xpl-input/xpl-input-search/xpl-input-search.d.ts +39 -0
- package/dist/types/components/xpl-input/xpl-input.d.ts +13 -5
- package/dist/types/components/xpl-list/list.stories.d.ts +299 -13
- package/dist/types/components/xpl-list/listitem.d.ts +13 -0
- package/dist/types/components/xpl-list/xpl-list-item/xpl-list-item.d.ts +71 -0
- package/dist/types/components/xpl-list/xpl-list.d.ts +55 -2
- package/dist/types/components/xpl-panel/panel.stories.d.ts +2 -0
- package/dist/types/components/xpl-progress-indicator/progress-indicator.stories.d.ts +62 -0
- package/dist/types/components/xpl-progress-indicator/xpl-progress-indicator.d.ts +11 -0
- package/dist/types/components/xpl-spotlight/spotlight.stories.d.ts +197 -0
- package/dist/types/components/xpl-spotlight/xpl-spotlight.d.ts +101 -0
- package/dist/types/components/xpl-tab/xpl-tab.d.ts +14 -1
- package/dist/types/components/xpl-tab-panel/xpl-tab-panel.d.ts +2 -1
- package/dist/types/components/xpl-table/table.stories.d.ts +161 -19
- package/dist/types/components/xpl-table/utils/move-row-dom.d.ts +3 -0
- package/dist/types/components/xpl-table/utils/table-internal.d.ts +8 -0
- package/dist/types/components/xpl-table/xpl-table-body/xpl-table-body.d.ts +3 -0
- package/dist/types/components/xpl-table/xpl-table-cell/xpl-table-cell.d.ts +11 -0
- package/dist/types/components/xpl-table/xpl-table-footer/xpl-table-footer.d.ts +3 -0
- package/dist/types/components/xpl-table/xpl-table-footer-cell/xpl-table-footer-cell.d.ts +4 -0
- package/dist/types/components/{xpl-table-header → xpl-table/xpl-table-header}/table-header.stories.d.ts +13 -16
- package/dist/types/components/{xpl-table-header-cell → xpl-table/xpl-table-header-cell}/table-header-cell.stories.d.ts +24 -20
- package/dist/types/components/xpl-table/xpl-table-header-cell/xpl-table-header-cell.d.ts +32 -0
- package/dist/types/components/xpl-table/xpl-table-row/xpl-table-row.d.ts +13 -0
- package/dist/types/components/xpl-table/xpl-table.d.ts +123 -21
- package/dist/types/components/xpl-tabs/segment-control.stories.d.ts +112 -0
- package/dist/types/components/xpl-tabs/tabs.shared.d.ts +156 -0
- package/dist/types/components/xpl-tabs/tabs.stories.d.ts +65 -12
- package/dist/types/components/xpl-tabs/xpl-tabs.d.ts +37 -18
- package/dist/types/components/xpl-tag/tag.stories.d.ts +65 -0
- package/dist/types/components/xpl-tag/xpl-tag.d.ts +36 -1
- package/dist/types/components/xpl-top-nav/top-nav.stories.d.ts +471 -0
- package/dist/types/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.d.ts +18 -0
- package/dist/types/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.d.ts +48 -0
- package/dist/types/components/xpl-top-nav/xpl-top-nav.d.ts +51 -0
- package/dist/types/components.d.ts +1888 -148
- package/dist/types/utils/lifecycle.d.ts +16 -0
- package/dist/types/utils/tab-a11y-ids.d.ts +4 -0
- package/package.json +3 -3
- package/dist/apollo-core/p-0bce3874.entry.js +0 -1
- package/dist/apollo-core/p-5549756c.entry.js +0 -1
- package/dist/apollo-core/p-56fa4941.entry.js +0 -1
- package/dist/apollo-core/p-76c324da.entry.js +0 -1
- package/dist/apollo-core/p-7a3224b4.entry.js +0 -1
- package/dist/apollo-core/p-7e924697.entry.js +0 -1
- package/dist/apollo-core/p-9efca9e1.entry.js +0 -1
- package/dist/apollo-core/p-b252b380.entry.js +0 -1
- package/dist/apollo-core/p-c91daac1.entry.js +0 -1
- package/dist/apollo-core/p-d9b62508.entry.js +0 -1
- package/dist/apollo-core/p-eaea16d1.entry.js +0 -1
- package/dist/apollo-core/p-eed13bca.entry.js +0 -1
- package/dist/apollo-core/p-f5af9539.entry.js +0 -1
- package/dist/cjs/xpl-list.cjs.entry.js +0 -32
- package/dist/cjs/xpl-table-header-cell.cjs.entry.js +0 -57
- package/dist/cjs/xpl-table-header.cjs.entry.js +0 -14
- package/dist/collection/components/xpl-progress/progress.stories.js +0 -106
- package/dist/collection/components/xpl-progress/xpl-progress.js +0 -60
- package/dist/collection/components/xpl-table-header/table-header.stories.js +0 -126
- package/dist/collection/components/xpl-table-header/xpl-table-header.js +0 -7
- package/dist/collection/components/xpl-table-header-cell/table-header-cell.stories.js +0 -75
- package/dist/collection/components/xpl-table-header-cell/xpl-table-header-cell.js +0 -188
- package/dist/components/xpl-progress.js +0 -1
- package/dist/docs/xpl-progress/readme.md +0 -22
- package/dist/docs/xpl-table-header-cell/readme.md +0 -47
- package/dist/esm/xpl-list.entry.js +0 -30
- package/dist/esm/xpl-table-header-cell.entry.js +0 -55
- package/dist/esm/xpl-table-header.entry.js +0 -12
- package/dist/types/components/xpl-progress/progress.stories.d.ts +0 -38
- package/dist/types/components/xpl-progress/xpl-progress.d.ts +0 -6
- package/dist/types/components/xpl-table-header-cell/xpl-table-header-cell.d.ts +0 -13
- /package/dist/types/components/{xpl-table-header → xpl-table/xpl-table-header}/xpl-table-header.d.ts +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# xpl-table-footer-cell
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
<!-- Auto Generated Below -->
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## Properties
|
|
9
|
+
|
|
10
|
+
| Property | Attribute | Description | Type | Default |
|
|
11
|
+
| -------- | --------- | ------------------------------------------ | ------------------------------- | -------- |
|
|
12
|
+
| `align` | `align` | Horizontal text alignment within the cell. | `"center" \| "left" \| "right"` | `'left'` |
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## Dependencies
|
|
16
|
+
|
|
17
|
+
### Used by
|
|
18
|
+
|
|
19
|
+
- [xpl-table](..)
|
|
20
|
+
|
|
21
|
+
### Graph
|
|
22
|
+
```mermaid
|
|
23
|
+
graph TD;
|
|
24
|
+
xpl-table --> xpl-table-footer-cell
|
|
25
|
+
style xpl-table-footer-cell fill:#f9f,stroke:#333,stroke-width:4px
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
----------------------------------------------
|
|
29
|
+
|
|
30
|
+
*Built with [StencilJS](https://stenciljs.com/)*
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# xpl-table-header
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
> **Note:** This component is currently in beta. Use with caution as it may have breaking changes in future releases.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<!-- Auto Generated Below -->
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
----------------------------------------------
|
|
12
|
-
|
|
13
|
-
*Built with [StencilJS](https://stenciljs.com/)*
|
|
1
|
+
# xpl-table-header
|
|
2
|
+
|
|
3
|
+
Semantic wrapper for the header **row group** in a compositional `xpl-table` (`role="rowgroup"`). Place one `xpl-table-row` (with `xpl-table-header-cell` children) inside.
|
|
4
|
+
|
|
5
|
+
> **Note:** This component is currently in beta. Use with caution as it may have breaking changes in future releases.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
<!-- Auto Generated Below -->
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
----------------------------------------------
|
|
12
|
+
|
|
13
|
+
*Built with [StencilJS](https://stenciljs.com/)*
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# xpl-table-header-cell
|
|
2
|
+
|
|
3
|
+
> **Note:** This component is currently in beta. Use with caution as it may have breaking changes in future releases.
|
|
4
|
+
|
|
5
|
+
The `icon` property accepts icon names as strings. See [xpl-icon available icons](../xpl-icon/ICONS.md) for the complete list.
|
|
6
|
+
|
|
7
|
+
When this cell is used inside a compositional [`xpl-table`](../xpl-table) with `selectable`, **you** add a `type="checkbox"` header cell for select-all; `xpl-table` keeps `checked` and `indeterminate` in sync with row selection.
|
|
8
|
+
|
|
9
|
+
For **sortable** columns (`type="label"`), set **`sortable`** and optionally **`sort-key`**; the parent table emits **`sortChanged`** (see [`xpl-table` events](../xpl-table#events)).
|
|
10
|
+
|
|
11
|
+
**Column width (compositional grid):** Each header cell defines one grid column on the parent `xpl-table`. By default the track is **`auto`** (sizes from content). Set **`width`** for a fixed pixel width (minimum 48px), or **`column-width`** for any CSS grid track string (`1fr`, `minmax(120px, 1fr)`, etc.). When both are set, **`column-width` wins**.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<!-- Auto Generated Below -->
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## Properties
|
|
19
|
+
|
|
20
|
+
| Property | Attribute | Description | Type | Default |
|
|
21
|
+
| ------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------- | ----------- |
|
|
22
|
+
| `align` | `align` | Horizontal text alignment within the header cell. | `"center" \| "left" \| "right"` | `'left'` |
|
|
23
|
+
| `checkboxAriaLabel` | `checkbox-aria-label` | Accessible name for the header checkbox (native `aria-label`). Defaults to “Select all rows” when `type` is `checkbox`. | `string` | `undefined` |
|
|
24
|
+
| `checked` | `checked` | Whether the header checkbox is checked | `boolean` | `false` |
|
|
25
|
+
| `columnWidth` | `column-width` | CSS grid track size for this column (e.g. `1fr`, `minmax(120px, 1fr)`, `auto`). When set, overrides `width`. Use this when you need flexible columns; default layout uses `auto` per column unless you set a track here. | `string` | `undefined` |
|
|
26
|
+
| `icon` | `icon` | Icon to display in the cell. See [xpl-icon available icons](../xpl-icon/ICONS.md) for valid icon names. | `string` | `undefined` |
|
|
27
|
+
| `indeterminate` | `indeterminate` | Whether the checkbox is in indeterminate (partially selected) state | `boolean` | `false` |
|
|
28
|
+
| `label` | `label` | Text to display in the cell. | `string` | `''` |
|
|
29
|
+
| `sortDirection` | `sort-direction` | Active sort direction for this column when `sortable`. Set by `xpl-table` when used inside a compositional table; may be set by the app for controlled updates. | `"asc" \| "desc"` | `undefined` |
|
|
30
|
+
| `sortKey` | `sort-key` | When `sortable` is true, optional stable id used as the key in `sortChanged`’s detail object. Falls back to a slug of `label` when omitted. | `string` | `undefined` |
|
|
31
|
+
| `sortable` | `sortable` | When true (and `type` is `label`), renders a sort control (button + affordance icon). | `boolean` | `false` |
|
|
32
|
+
| `type` | `type` | The type of cell to render. | `"checkbox" \| "empty" \| "icon" \| "label"` | `'label'` |
|
|
33
|
+
| `width` | `width` | Fixed width for this column in pixels (minimum 48px). Sets the grid track to `Npx`. Ignored when `columnWidth` is set. When omitted, the column track defaults to `auto` (content-sized). | `number` | `undefined` |
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## Events
|
|
37
|
+
|
|
38
|
+
| Event | Description | Type |
|
|
39
|
+
| ---------------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------- |
|
|
40
|
+
| `headerCheckboxChange` | Emitted when header checkbox changes | `CustomEvent<boolean>` |
|
|
41
|
+
| `headerSortChange` | Emitted when a sortable label header is activated. Parent `xpl-table` coordinates columns and emits `sortChanged`. | `CustomEvent<HeaderSortChangeDetail>` |
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
## Dependencies
|
|
45
|
+
|
|
46
|
+
### Used by
|
|
47
|
+
|
|
48
|
+
- [xpl-table](..)
|
|
49
|
+
|
|
50
|
+
### Depends on
|
|
51
|
+
|
|
52
|
+
- [xpl-icon](../../xpl-icon)
|
|
53
|
+
- [xpl-checkbox](../../xpl-checkbox)
|
|
54
|
+
|
|
55
|
+
### Graph
|
|
56
|
+
```mermaid
|
|
57
|
+
graph TD;
|
|
58
|
+
xpl-table-header-cell --> xpl-icon
|
|
59
|
+
xpl-table-header-cell --> xpl-checkbox
|
|
60
|
+
xpl-table --> xpl-table-header-cell
|
|
61
|
+
style xpl-table-header-cell fill:#f9f,stroke:#333,stroke-width:4px
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
----------------------------------------------
|
|
65
|
+
|
|
66
|
+
*Built with [StencilJS](https://stenciljs.com/)*
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# xpl-table-row
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
<!-- Auto Generated Below -->
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## Properties
|
|
9
|
+
|
|
10
|
+
| Property | Attribute | Description | Type | Default |
|
|
11
|
+
| ---------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------- | ----------- |
|
|
12
|
+
| `disabled` | `disabled` | Whether the row and its cells are disabled. | `boolean` | `false` |
|
|
13
|
+
| `rowId` | `row-id` | Stable identifier for this row when used with a selectable compositional `xpl-table`. If omitted, the parent table assigns a unique id. | `string` | `undefined` |
|
|
14
|
+
| `selected` | `selected` | Whether the row is visually selected. | `boolean` | `false` |
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
----------------------------------------------
|
|
18
|
+
|
|
19
|
+
*Built with [StencilJS](https://stenciljs.com/)*
|
|
@@ -1,23 +1,76 @@
|
|
|
1
1
|
# xpl-tabs
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`xpl-tabs` groups related views into a single surface: users pick a **tab** to show the matching **panel**. It implements the WAI-ARIA tabs pattern with a horizontal tab list, optional full-width layout, and two visual styles—**underline** (`type="tabs"`, default) and **segment** (`type="segment"`, pill controls in a bordered track)—selected with the **`type`** prop. On narrow viewports the heading row is replaced by an `xpl-select` so the same targets and keyboard behavior stay consistent.
|
|
4
|
+
|
|
5
|
+
The **Tabs** and **Segment control** Storybook entries document this **one component** with different defaults and Figma references. Each page adds variant-specific guidance (when to use, examples, tokens); the sections below describe behavior that is **the same for both** styles.
|
|
6
|
+
|
|
7
|
+
Pair **`xpl-tab` (slot `heading`)** with **`xpl-tab-panel` (slot `panel`)** and use the same **`target`** string on each pair so selection stays in sync.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
### Web component (`<xpl-tabs>`)
|
|
12
|
+
|
|
13
|
+
Minimal group with two tabs: each `xpl-tab` and `xpl-tab-panel` shares a `target` value. Set `value` on `xpl-tabs` to control the selected tab (defaults to the first tab’s `target` if omitted).
|
|
14
|
+
|
|
15
|
+
```html
|
|
16
|
+
<xpl-tabs value="one">
|
|
17
|
+
<xpl-tab slot="heading" target="one">First</xpl-tab>
|
|
18
|
+
<xpl-tab slot="heading" target="two">Second</xpl-tab>
|
|
19
|
+
<xpl-tab-panel slot="panel" target="one">Content for first tab.</xpl-tab-panel>
|
|
20
|
+
<xpl-tab-panel slot="panel" target="two">Content for second tab.</xpl-tab-panel>
|
|
21
|
+
</xpl-tabs>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Listen for selection changes with the **`tabChange`** event (detail is the selected `target` string):
|
|
25
|
+
|
|
26
|
+
```html
|
|
27
|
+
<xpl-tabs id="demo" value="a">
|
|
28
|
+
<xpl-tab slot="heading" target="a">A</xpl-tab>
|
|
29
|
+
<xpl-tab slot="heading" target="b">B</xpl-tab>
|
|
30
|
+
<xpl-tab-panel slot="panel" target="a">…</xpl-tab-panel>
|
|
31
|
+
<xpl-tab-panel slot="panel" target="b">…</xpl-tab-panel>
|
|
32
|
+
</xpl-tabs>
|
|
33
|
+
<script>
|
|
34
|
+
document.getElementById('demo').addEventListener('tabChange', (e) => {
|
|
35
|
+
console.log(e.detail); // "a" | "b"
|
|
36
|
+
});
|
|
37
|
+
</script>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Disable the entire group (headings, mobile select, and segment pills) with **`disabled`** on `xpl-tabs`. Disable individual tabs with **`disabled`** on `xpl-tab`.
|
|
41
|
+
|
|
42
|
+
### Plain HTML (BEM classes)
|
|
43
|
+
|
|
44
|
+
When styling with `tabs.css` without the Stencil component, mirror the structure: `xpl-tabs`, `xpl-tabs__headings` with `role="tablist"` and `aria-orientation="horizontal"`, `xpl-tabs__active-bar` for the underline variant (position/size normally set by JS), **`button.xpl-tab__button`** with **`role="tab"`** (not links), and **`xpl-tab-panel`** for panels. For **segment** (`xpl-tabs--segment`), each heading is **`xpl-tab.xpl-tab--segment`** wrapping **`xpl-button`** (not `.xpl-tab__button`). On small viewports, include **`xpl-tabs__mobile-select`** with **`xpl-select`** for parity with the component.
|
|
45
|
+
|
|
46
|
+
## Accessibility
|
|
47
|
+
|
|
48
|
+
- Each **`xpl-tabs`** root gets a unique **`data-tabs-instance-id`** (for example `xpl-tg-1`). **`xpl-tab`** and **`xpl-tab-panel`** derive matching DOM **`id`** values from that id plus the shared **`target`** string: the tab control is **`…-tab-<target>`**, the panel is **`…-panel-<target>`** (with `target` sanitized for HTML `id` rules). The tab exposes **`aria-controls`** pointing at the panel id, **`aria-selected`**, and the panel uses **`aria-labelledby`** pointing at the tab id. **Segment (pill) tabs** render **`xpl-button`**; because **`xpl-button`** does not forward **`id`** / **`role`** / **`aria-*`** to its inner `<button>`, **`xpl-tab`** sets those on the native button after render so focus order and **`aria-labelledby`** stay correct (same pattern as underline tabs, different host element).
|
|
49
|
+
- The tab list container is **`role="tablist"`** with **`aria-orientation="horizontal"`**. Underline tabs use **`role="tab"`** on the inner `<button>`; panels use **`role="tabpanel"`** on **`xpl-tab-panel`**.
|
|
50
|
+
- **Roving tabindex:** only the active tab’s control is in the tab order (`tabindex="0"`); others use `tabindex="-1"` until focused with arrows.
|
|
51
|
+
- **Keyboard:** **Arrow Left/Right** (and **Arrow Up/Down** as next/previous), **Home**, and **End** move between enabled tabs; **Enter** and **Space** activate (via `xpl-button` in segment mode). Direction mirrors in **RTL**.
|
|
52
|
+
- When **`disabled`** is set on `xpl-tabs`, tab keyboard navigation and selection are suppressed for the group.
|
|
53
|
+
|
|
54
|
+
Variant-specific Foundation mappings for underline vs. segment live in the **Tabs** and **Segment control** Storybook pages. The **`xpl-select`** mobile row reuses **`xpl-select`** / **`xpl-dropdown`** tokens from those components.
|
|
4
55
|
|
|
5
56
|
<!-- Auto Generated Below -->
|
|
6
57
|
|
|
7
58
|
|
|
8
59
|
## Properties
|
|
9
60
|
|
|
10
|
-
| Property | Attribute | Description
|
|
11
|
-
| ----------- | ------------ |
|
|
12
|
-
| `
|
|
13
|
-
| `
|
|
61
|
+
| Property | Attribute | Description | Type | Default |
|
|
62
|
+
| ----------- | ------------ | ----------------------------------------------------------------------------- | --------------------- | ----------- |
|
|
63
|
+
| `disabled` | `disabled` | Disables the whole tab group (headings, mobile select, and segment pills). | `boolean` | `false` |
|
|
64
|
+
| `fullWidth` | `full-width` | Whether to make the tabs full width | `boolean` | `false` |
|
|
65
|
+
| `type` | `type` | Visual and layout variant: classic underline tabs or segment (pill) controls. | `"segment" \| "tabs"` | `'tabs'` |
|
|
66
|
+
| `value` | `value` | The selected tab target value, defaults to the first tab | `string` | `undefined` |
|
|
14
67
|
|
|
15
68
|
|
|
16
69
|
## Events
|
|
17
70
|
|
|
18
|
-
| Event | Description
|
|
19
|
-
| ----------- |
|
|
20
|
-
| `tabChange` |
|
|
71
|
+
| Event | Description | Type |
|
|
72
|
+
| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
|
|
73
|
+
| `tabChange` | Emitted when the selected tab changes (click, keyboard, or mobile `xpl-select`). The event `detail` is the selected tab’s `target` string. Always dispatched from this host (including after heading clicks) so `event.target` is consistent for listeners on `xpl-tabs` or bubbling ancestors. | `CustomEvent<string>` |
|
|
21
74
|
|
|
22
75
|
|
|
23
76
|
## Slots
|
|
@@ -41,6 +94,7 @@ graph TD;
|
|
|
41
94
|
xpl-select --> xpl-tag
|
|
42
95
|
xpl-select --> xpl-icon
|
|
43
96
|
xpl-select --> xpl-dropdown
|
|
97
|
+
xpl-tag --> xpl-icon
|
|
44
98
|
xpl-dropdown --> xpl-dropdown-group
|
|
45
99
|
xpl-dropdown --> xpl-dropdown-option
|
|
46
100
|
xpl-dropdown-group --> xpl-dropdown-group
|
|
@@ -1,15 +1,385 @@
|
|
|
1
1
|
# xpl-tag
|
|
2
2
|
|
|
3
|
-
Tags represent a set of interactive keywords that help label, organize, and categorize objects. Tags can be added or removed from an object by the user. Unlike Badges, Tags are clickable,
|
|
3
|
+
Tags represent a set of interactive keywords that help label, organize, and categorize objects. Tags can be added or removed from an object by the user. Unlike Badges, Tags are clickable, used in dropdowns, multi-select, search bars, etc.
|
|
4
|
+
|
|
5
|
+
## Usage Examples
|
|
6
|
+
|
|
7
|
+
### Basic tag with dismiss
|
|
8
|
+
|
|
9
|
+
```html
|
|
10
|
+
<xpl-tag>Label</xpl-tag>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### Small size variant
|
|
14
|
+
|
|
15
|
+
```html
|
|
16
|
+
<xpl-tag size="sm">Small Tag</xpl-tag>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Non-dismissible tag (no close button)
|
|
20
|
+
|
|
21
|
+
```html
|
|
22
|
+
<xpl-tag dismissible="false">Static Tag</xpl-tag>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Disabled tag
|
|
26
|
+
|
|
27
|
+
```html
|
|
28
|
+
<xpl-tag disabled>Disabled Tag</xpl-tag>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Handling events
|
|
32
|
+
|
|
33
|
+
> **⚠️ Deprecation Notice:** The `close` event is **deprecated** and will be removed in a future major version. Use `tagRemove` for dismiss button clicks only.
|
|
34
|
+
|
|
35
|
+
#### Why This Change?
|
|
36
|
+
|
|
37
|
+
The `close` event name conflicts with a **native HTML event** used by `<dialog>` elements. The React wrapper's `isCoveredByReact()` function detects `onclose` as a native event and passes handlers to React's synthetic event system — but React doesn't actually handle `close` events this way, so handlers silently fail in React applications.
|
|
38
|
+
|
|
39
|
+
**Why `tagRemove` works:** `ontagremove` is not a native event, so the wrapper correctly falls back to `addEventListener`.
|
|
40
|
+
|
|
41
|
+
#### Event Behavior
|
|
42
|
+
|
|
43
|
+
| Interaction | `close` (deprecated) | `tagRemove` (use this) |
|
|
44
|
+
|-------------|------------------------|------------------------|
|
|
45
|
+
| Dismiss (×) button clicked | ✅ Fires | ✅ Fires |
|
|
46
|
+
| Content clicked (non-draggable) | ✅ Fires | ❌ Does NOT fire |
|
|
47
|
+
| Content clicked (draggable) | ❌ Does NOT fire | ❌ Does NOT fire |
|
|
48
|
+
| Keyboard Space/Enter on content (non-draggable) | ✅ Fires | ❌ Does NOT fire |
|
|
49
|
+
| Keyboard Space/Enter on draggable label | ❌ Does NOT fire | ❌ Does NOT fire |
|
|
50
|
+
|
|
51
|
+
#### Migration Examples
|
|
52
|
+
|
|
53
|
+
**Before (deprecated):**
|
|
54
|
+
```tsx
|
|
55
|
+
// React — this may silently fail!
|
|
56
|
+
<XplTag onClose={() => tag.remove()}>Label</XplTag>
|
|
57
|
+
|
|
58
|
+
// Vanilla JS
|
|
59
|
+
const tag = document.querySelector('xpl-tag');
|
|
60
|
+
tag.addEventListener('close', () => tag.remove());
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**After (recommended):**
|
|
64
|
+
```tsx
|
|
65
|
+
// React — works reliably
|
|
66
|
+
<XplTag onTagRemove={() => tag.remove()}>Label</XplTag>
|
|
67
|
+
|
|
68
|
+
// Vanilla JS — same pattern, clearer intent
|
|
69
|
+
const tag = document.querySelector('xpl-tag');
|
|
70
|
+
tag.addEventListener('tagRemove', () => tag.remove());
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**React with Refs (if you must use deprecated `close`):**
|
|
74
|
+
```tsx
|
|
75
|
+
import { useEffect, useRef } from 'react';
|
|
76
|
+
import { XplTag } from '@xplortech/apollo-react';
|
|
77
|
+
|
|
78
|
+
function MyComponent() {
|
|
79
|
+
const tagRef = useRef<HTMLElement | null>(null);
|
|
80
|
+
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
const el = tagRef.current;
|
|
83
|
+
if (!el) return;
|
|
84
|
+
|
|
85
|
+
const handleClose = () => el.remove();
|
|
86
|
+
el.addEventListener('close', handleClose);
|
|
87
|
+
return () => el.removeEventListener('close', handleClose);
|
|
88
|
+
}, []);
|
|
89
|
+
|
|
90
|
+
return <XplTag ref={tagRef}>Label</XplTag>;
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Drag and drop
|
|
95
|
+
|
|
96
|
+
Tags support **native HTML5 drag and drop**. Set the boolean prop **`isDraggable`** (HTML attribute **`is-draggable`**) to enable dragging. Optionally set **`tag-id`** so `dataTransfer` and `tagDragStart` / `tagDragEnd` detail carry a stable id.
|
|
97
|
+
|
|
98
|
+
### How it works (important for handlers)
|
|
99
|
+
|
|
100
|
+
- The **drag source** is an inner **label** element (a `div` with `role="button"`), not the `<xpl-tag>` host. Browsers do not start drags reliably on the custom element host; the **`is-draggable`** prop does **not** mirror the native host **`draggable`** attribute (see the `isDraggable` prop docs below).
|
|
101
|
+
- On **`dragstart`**, the component uses **`setDragImage`** so the floating preview (“ghost”) looks like the **whole tag** (label + dismiss control), not only the label strip.
|
|
102
|
+
- **Start the drag from the label text**, not from the dismiss (×) button.
|
|
103
|
+
- In container listeners, **`dragstart`** may bubble with `event.target` equal to that inner node. Resolve the tag with:
|
|
104
|
+
|
|
105
|
+
```js
|
|
106
|
+
const tag = event.target instanceof Element ? event.target.closest('xpl-tag') : null;
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Making a tag draggable
|
|
110
|
+
|
|
111
|
+
```html
|
|
112
|
+
<xpl-tag is-draggable>Draggable tag</xpl-tag>
|
|
113
|
+
|
|
114
|
+
<xpl-tag is-draggable tag-id="my-tag-1">Design</xpl-tag>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Reordering tags within a container
|
|
118
|
+
|
|
119
|
+
```html
|
|
120
|
+
<div id="tag-container" style="display: flex; flex-wrap: wrap; gap: 8px">
|
|
121
|
+
<xpl-tag tag-id="t1" is-draggable>Design</xpl-tag>
|
|
122
|
+
<xpl-tag tag-id="t2" is-draggable>Development</xpl-tag>
|
|
123
|
+
<xpl-tag tag-id="t3" is-draggable>QA</xpl-tag>
|
|
124
|
+
</div>
|
|
125
|
+
|
|
126
|
+
<script>
|
|
127
|
+
const container = document.getElementById('tag-container');
|
|
128
|
+
let draggedEl = null;
|
|
129
|
+
|
|
130
|
+
container.addEventListener('dragstart', (e) => {
|
|
131
|
+
const tag = e.target instanceof Element ? e.target.closest('xpl-tag') : null;
|
|
132
|
+
if (tag) draggedEl = tag;
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
container.addEventListener('dragend', () => {
|
|
136
|
+
draggedEl = null;
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
container.addEventListener('dragover', (e) => {
|
|
140
|
+
e.preventDefault();
|
|
141
|
+
if (!draggedEl) return;
|
|
142
|
+
const afterEl = getDragAfterElement(container, e.clientX);
|
|
143
|
+
if (afterEl == null) container.appendChild(draggedEl);
|
|
144
|
+
else container.insertBefore(draggedEl, afterEl);
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
function getDragAfterElement(container, x) {
|
|
148
|
+
const tags = [...container.querySelectorAll('xpl-tag')].filter((el) => el !== draggedEl);
|
|
149
|
+
return tags.reduce(
|
|
150
|
+
(closest, child) => {
|
|
151
|
+
const box = child.getBoundingClientRect();
|
|
152
|
+
const offset = x - box.left - box.width / 2;
|
|
153
|
+
return offset < 0 && offset > closest.offset ? { offset, element: child } : closest;
|
|
154
|
+
},
|
|
155
|
+
{ offset: Number.NEGATIVE_INFINITY },
|
|
156
|
+
).element;
|
|
157
|
+
}
|
|
158
|
+
</script>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Dragging tags between containers
|
|
162
|
+
|
|
163
|
+
```html
|
|
164
|
+
<div
|
|
165
|
+
class="drop-zone"
|
|
166
|
+
style="display: flex; gap: 8px; padding: 16px; border: 2px dashed var(--xpl-border-default); border-radius: 8px"
|
|
167
|
+
>
|
|
168
|
+
<xpl-tag tag-id="a1" is-draggable>Frontend</xpl-tag>
|
|
169
|
+
<xpl-tag tag-id="a2" is-draggable>Backend</xpl-tag>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
<div
|
|
173
|
+
class="drop-zone"
|
|
174
|
+
style="
|
|
175
|
+
display: flex;
|
|
176
|
+
gap: 8px;
|
|
177
|
+
padding: 16px;
|
|
178
|
+
border: 2px dashed var(--xpl-border-default);
|
|
179
|
+
border-radius: 8px;
|
|
180
|
+
margin-top: 8px;
|
|
181
|
+
"
|
|
182
|
+
>
|
|
183
|
+
<xpl-tag tag-id="b1" is-draggable>DevOps</xpl-tag>
|
|
184
|
+
</div>
|
|
185
|
+
|
|
186
|
+
<script>
|
|
187
|
+
document.querySelectorAll('.drop-zone').forEach((zone) => {
|
|
188
|
+
let draggedEl = null;
|
|
189
|
+
|
|
190
|
+
zone.addEventListener('dragstart', (e) => {
|
|
191
|
+
const tag = e.target instanceof Element ? e.target.closest('xpl-tag') : null;
|
|
192
|
+
if (tag) draggedEl = tag;
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
zone.addEventListener('dragend', () => {
|
|
196
|
+
draggedEl = null;
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
zone.addEventListener('dragover', (e) => e.preventDefault());
|
|
200
|
+
|
|
201
|
+
zone.addEventListener('drop', (e) => {
|
|
202
|
+
e.preventDefault();
|
|
203
|
+
if (draggedEl && draggedEl.parentNode !== zone) zone.appendChild(draggedEl);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
</script>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### `tagDragStart` / `tagDragEnd` events
|
|
210
|
+
|
|
211
|
+
The component emits **`tagDragStart`** and **`tagDragEnd`** (Stencil camelCase). They bubble and are composed.
|
|
212
|
+
|
|
213
|
+
```html
|
|
214
|
+
<xpl-tag is-draggable tag-id="my-tag">Drag me</xpl-tag>
|
|
215
|
+
|
|
216
|
+
<script>
|
|
217
|
+
const tag = document.querySelector('xpl-tag[tag-id="my-tag"]');
|
|
218
|
+
|
|
219
|
+
tag.addEventListener('tagDragStart', (e) => {
|
|
220
|
+
const { tagId, content, originalEvent } = e.detail;
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
tag.addEventListener('tagDragEnd', (e) => {
|
|
224
|
+
const { dropped, tagId, originalEvent } = e.detail;
|
|
225
|
+
if (dropped) {
|
|
226
|
+
/* dropEffect was 'move' */
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
</script>
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### React (`@xplortech/apollo-react`)
|
|
233
|
+
|
|
234
|
+
Ensure the app loads Apollo **defineCustomElements** (see the main React package docs). Import **`XplTag`** and use **`isDraggable`**, **`tagId`**, and children for the label.
|
|
235
|
+
|
|
236
|
+
`HTMLXplTagElement` is provided by Apollo’s Stencil typings (the same setup that types `defineCustomElements`). If your editor cannot resolve it, use `useRef<HTMLElement | null>(null)` and attach listeners on `ref.current`.
|
|
237
|
+
|
|
238
|
+
`XplTag` is a thin wrapper around the web component. Custom events use the same names as in the DOM (`tagDragStart`, `tagDragEnd`, `tagRemove`). If your TypeScript definitions use different prop names for listeners, attach them with a **ref** (always works):
|
|
239
|
+
|
|
240
|
+
```tsx
|
|
241
|
+
import { useEffect, useRef } from 'react';
|
|
242
|
+
import { XplTag } from '@xplortech/apollo-react';
|
|
243
|
+
|
|
244
|
+
function TagBoard() {
|
|
245
|
+
const tagRef = useRef<HTMLXplTagElement | null>(null);
|
|
246
|
+
|
|
247
|
+
useEffect(() => {
|
|
248
|
+
const el = tagRef.current;
|
|
249
|
+
if (!el) return;
|
|
250
|
+
|
|
251
|
+
const onDragStart = (e: CustomEvent) => {
|
|
252
|
+
const { tagId, content } = e.detail;
|
|
253
|
+
};
|
|
254
|
+
const onDragEnd = (e: CustomEvent) => {
|
|
255
|
+
const { dropped, tagId } = e.detail;
|
|
256
|
+
};
|
|
257
|
+
const onTagRemove = () => {
|
|
258
|
+
el.remove(); // Handle dismiss button click
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
el.addEventListener('tagDragStart', onDragStart as EventListener);
|
|
262
|
+
el.addEventListener('tagDragEnd', onDragEnd as EventListener);
|
|
263
|
+
el.addEventListener('tagRemove', onTagRemove);
|
|
264
|
+
return () => {
|
|
265
|
+
el.removeEventListener('tagDragStart', onDragStart as EventListener);
|
|
266
|
+
el.removeEventListener('tagDragEnd', onDragEnd as EventListener);
|
|
267
|
+
el.removeEventListener('tagRemove', onTagRemove);
|
|
268
|
+
};
|
|
269
|
+
}, []);
|
|
270
|
+
|
|
271
|
+
return (
|
|
272
|
+
<XplTag ref={tagRef} isDraggable tagId="react-1">
|
|
273
|
+
Movable
|
|
274
|
+
</XplTag>
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Reorder / multi-container logic is unchanged: listen for native `dragstart`, `dragover`, `drop` on a React parent `div` (use refs) and call `closest('xpl-tag')` as in the HTML examples.
|
|
280
|
+
|
|
281
|
+
### `DataTransfer` payload
|
|
282
|
+
|
|
283
|
+
| MIME type | Value | Purpose |
|
|
284
|
+
|-----------|-------|---------|
|
|
285
|
+
| `application/x-tag-id` | `tag-id` prop, if set | Identify the tag in drop handlers |
|
|
286
|
+
| `text/plain` | Trimmed text content of the tag | Fallback for external targets |
|
|
287
|
+
|
|
288
|
+
`effectAllowed` is set to `move`.
|
|
289
|
+
|
|
290
|
+
**`originalEvent` in `tagDragStart` / `tagDragEnd`:** the native `DragEvent` is included for convenience, but browsers may clear `dataTransfer` after the synchronous handler completes. Use `tagId`, `content`, and `dropped` from the custom event detail for anything needed after the current turn; only read `originalEvent.dataTransfer` synchronously in the listener.
|
|
291
|
+
|
|
292
|
+
### Disabled tags
|
|
293
|
+
|
|
294
|
+
`disabled` wins: the tag is not draggable and keep using a normal `<button>` label (no HTML5 drag on the host).
|
|
295
|
+
|
|
296
|
+
```html
|
|
297
|
+
<xpl-tag is-draggable disabled>Cannot drag</xpl-tag>
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## Design Tokens
|
|
301
|
+
|
|
302
|
+
| Property | Token |
|
|
303
|
+
|----------|-------|
|
|
304
|
+
| Border (default) | `var(--xpl-border-accent-information)` |
|
|
305
|
+
| Border (disabled) | `var(--xpl-border-accent-subtle)` |
|
|
306
|
+
| Background (default) | `var(--xpl-background-surface-default)` |
|
|
307
|
+
| Background (hover) | `var(--xpl-background-surface-information-bold)` |
|
|
308
|
+
| Background (disabled) | `var(--xpl-background-surface-subtle)` |
|
|
309
|
+
| Text | `var(--xpl-text-strong)` |
|
|
310
|
+
| Text (disabled) | `var(--xpl-text-disabled)` |
|
|
311
|
+
| Dismiss icon | `var(--xpl-icon-default)` |
|
|
312
|
+
| Dismiss icon (disabled) | `var(--xpl-icon-disabled)` |
|
|
313
|
+
| Spacing (default) | `var(--xpl-space-2)` vertical, `var(--xpl-space-12)` horizontal |
|
|
314
|
+
| Spacing (small) | `var(--xpl-space-2)` vertical, `var(--xpl-space-8)` horizontal |
|
|
315
|
+
| Height (default) | `var(--xpl-size-150)` (24px) |
|
|
316
|
+
| Height (small) | `var(--xpl-size-125)` (20px) |
|
|
317
|
+
| Border radius | `var(--xpl-border-radius-button)` |
|
|
318
|
+
| Typography (default) | `var(--xpl-font-size-body)` / `var(--xpl-font-weight-normal)` |
|
|
319
|
+
| Typography (small) | `var(--xpl-font-size-callout)` / `var(--xpl-font-weight-semibold)` |
|
|
320
|
+
| Background (dragging) | `var(--xpl-background-surface-information-bold)` |
|
|
321
|
+
| Cursor (draggable) | `cursor: grab` → `cursor: grabbing` while dragging |
|
|
322
|
+
|
|
323
|
+
## Accessibility
|
|
324
|
+
|
|
325
|
+
### Keyboard Navigation
|
|
326
|
+
|
|
327
|
+
| Key | Action |
|
|
328
|
+
|-----|--------|
|
|
329
|
+
| Tab | Focus tag content or dismiss button |
|
|
330
|
+
| Enter/Space | Activate the focused control: on **dismiss**, emits deprecated `close` and `tagRemove`; on **content**, emits deprecated `close` only when the tag is **not** in drag mode (native `<button>` behavior). |
|
|
331
|
+
|
|
332
|
+
### Drag mode
|
|
333
|
+
|
|
334
|
+
- With `isDraggable`, focus moves to the **label** (`role="button"`). Enter/Space on the label does **not** dismiss the tag (same as click on draggable content).
|
|
335
|
+
- Start drags from the **label**; the dismiss control remains a separate focus stop and is not the drag handle.
|
|
336
|
+
|
|
337
|
+
### ARIA Attributes
|
|
338
|
+
|
|
339
|
+
- Dismiss button sets `aria-label` to `Dismiss` plus the host element’s `textContent` (trimmed), or the word `tag` when empty, so multiple tags stay distinguishable in screen readers
|
|
340
|
+
- When `disabled={true}`, buttons have `disabled` attribute preventing interaction
|
|
341
|
+
- When `isDraggable` is set, **`aria-grabbed`** on the **label** reflects drag state (`"false"` at rest, `"true"` while dragging)
|
|
342
|
+
|
|
343
|
+
### Icon Mapping
|
|
344
|
+
|
|
345
|
+
| Element | Icon |
|
|
346
|
+
|---------|------|
|
|
347
|
+
| Dismiss button | `xmark` (size 10) |
|
|
348
|
+
|
|
349
|
+
## Backward Compatibility (CSS class aliases)
|
|
350
|
+
|
|
351
|
+
The refactored component preserves legacy CSS classes so existing consumer selectors keep working:
|
|
352
|
+
|
|
353
|
+
| Legacy class | Element | Replaces / alias for |
|
|
354
|
+
|---|---|---|
|
|
355
|
+
| `xpl-tag-container` | Host (`<xpl-tag>`) | Old root class — now an alias; styles come from `.xpl-tag` |
|
|
356
|
+
| `xpl-tag` | Content `<button>` / `<div>` | Old content selector (`button.xpl-tag`) — kept so `.xpl-tag-container .xpl-tag` selectors match |
|
|
357
|
+
| `xpl-tag__close` | Dismiss `<button>` | Old dismiss selector — alias for `.xpl-tag__dismiss` |
|
|
358
|
+
|
|
359
|
+
These aliases will be removed in a future major version. New code should target `.xpl-tag`, `.xpl-tag__content`, and `.xpl-tag__dismiss`.
|
|
4
360
|
|
|
5
361
|
<!-- Auto Generated Below -->
|
|
6
362
|
|
|
7
363
|
|
|
364
|
+
## Properties
|
|
365
|
+
|
|
366
|
+
| Property | Attribute | Description | Type | Default |
|
|
367
|
+
| ------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------- | ----------- |
|
|
368
|
+
| `disabled` | `disabled` | Whether the tag is disabled | `boolean` | `false` |
|
|
369
|
+
| `dismissible` | `dismissible` | Whether the tag shows a dismiss button | `boolean` | `true` |
|
|
370
|
+
| `isDraggable` | `is-draggable` | When true, the tag label uses native HTML5 drag (the inner label is the drag source). Named `isDraggable` so the Stencil prop does not collide with the native `HTMLElement.draggable` API. `reflect: false` avoids syncing a `draggable` attribute onto the host; the inner label remains the drag source. Host `onDragStart` still suppresses stray native drags from host chrome. | `boolean` | `false` |
|
|
371
|
+
| `size` | `size` | The size of the tag | `"default" \| "sm"` | `'default'` |
|
|
372
|
+
| `tagId` | `tag-id` | Optional stable id for the tag. When set, it is included in `tagDragStart` / `tagDragEnd` detail and written to `dataTransfer` as `application/x-tag-id`. | `string` | `undefined` |
|
|
373
|
+
|
|
374
|
+
|
|
8
375
|
## Events
|
|
9
376
|
|
|
10
|
-
| Event
|
|
11
|
-
|
|
|
12
|
-
| `close`
|
|
377
|
+
| Event | Description | Type |
|
|
378
|
+
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------- |
|
|
379
|
+
| `close` | <span style="color:red">**[DEPRECATED]**</span> Use `tagRemove` for dismiss button clicks only. The `close` event will be removed in a future major version.<br/><br/>Emitted when the tag is dismissed (content click when `isDraggable` is false, or dismiss button click). | `CustomEvent<void>` |
|
|
380
|
+
| `tagDragEnd` | Emitted when a drag operation ends. `event.detail`: `{ tagId?, dropped, originalEvent }`. `dropped` is `true` when `dataTransfer.dropEffect === 'move'`. `originalEvent` is the native `DragEvent`; browsers may clear `dataTransfer` after the synchronous handler runs — do not read `originalEvent.dataTransfer.getData(...)` asynchronously. | `CustomEvent<TagDragEndDetail>` |
|
|
381
|
+
| `tagDragStart` | Emitted when a drag operation starts (native `dragstart` on the inner label). `event.detail`: `{ tagId?, content, originalEvent }`. `originalEvent` is the native `DragEvent`; browsers may clear `dataTransfer` after the synchronous handler runs — do not read `originalEvent.dataTransfer.getData(...)` asynchronously. | `CustomEvent<TagDragStartDetail>` |
|
|
382
|
+
| `tagRemove` | Emitted when the tag dismiss (×) button is clicked | `CustomEvent<void>` |
|
|
13
383
|
|
|
14
384
|
|
|
15
385
|
## Dependencies
|
|
@@ -18,9 +388,14 @@ Tags represent a set of interactive keywords that help label, organize, and cate
|
|
|
18
388
|
|
|
19
389
|
- [xpl-select](../xpl-select)
|
|
20
390
|
|
|
391
|
+
### Depends on
|
|
392
|
+
|
|
393
|
+
- [xpl-icon](../xpl-icon)
|
|
394
|
+
|
|
21
395
|
### Graph
|
|
22
396
|
```mermaid
|
|
23
397
|
graph TD;
|
|
398
|
+
xpl-tag --> xpl-icon
|
|
24
399
|
xpl-select --> xpl-tag
|
|
25
400
|
style xpl-tag fill:#f9f,stroke:#333,stroke-width:4px
|
|
26
401
|
```
|