@mintplayer/ng-bootstrap 21.29.0 → 21.31.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/fesm2022/mintplayer-ng-bootstrap-a11y.mjs +455 -0
- package/fesm2022/mintplayer-ng-bootstrap-a11y.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs +8 -5
- package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-breadcrumb.mjs +10 -4
- package/fesm2022/mintplayer-ng-bootstrap-breadcrumb.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-button-group.mjs +7 -4
- package/fesm2022/mintplayer-ng-bootstrap-button-group.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs +131 -3
- package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs +80 -48
- package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs +4 -1
- package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs +218 -14
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs +4 -3
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs +2 -2
- package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dock.mjs +294 -3
- package/fesm2022/mintplayer-ng-bootstrap-dock.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs +163 -18
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs +179 -7
- package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs +14 -4
- package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-has-overlay.mjs +14 -0
- package/fesm2022/mintplayer-ng-bootstrap-has-overlay.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-list-group.mjs +2 -1
- package/fesm2022/mintplayer-ng-bootstrap-list-group.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-marquee.mjs +7 -4
- package/fesm2022/mintplayer-ng-bootstrap-marquee.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-modal.mjs +70 -6
- package/fesm2022/mintplayer-ng-bootstrap-modal.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-multi-range.mjs +693 -0
- package/fesm2022/mintplayer-ng-bootstrap-multi-range.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs +5 -4
- package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs +45 -13
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs +51 -5
- package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs +5 -3
- package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs +18 -4
- package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-popover.mjs +61 -6
- package/fesm2022/mintplayer-ng-bootstrap-popover.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-priority-nav.mjs +19 -4
- package/fesm2022/mintplayer-ng-bootstrap-priority-nav.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs +8 -5
- package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-range.mjs +4 -3
- package/fesm2022/mintplayer-ng-bootstrap-range.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-rating.mjs +34 -4
- package/fesm2022/mintplayer-ng-bootstrap-rating.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-reduced-motion.mjs +59 -0
- package/fesm2022/mintplayer-ng-bootstrap-reduced-motion.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs +91 -2
- package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs +16 -5
- package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs +2 -2
- package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs +28 -5
- package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-select.mjs +4 -3
- package/fesm2022/mintplayer-ng-bootstrap-select.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-select2.mjs +18 -4
- package/fesm2022/mintplayer-ng-bootstrap-select2.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs +4 -3
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs +2 -2
- package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-table.mjs +10 -3
- package/fesm2022/mintplayer-ng-bootstrap-table.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tile-manager.mjs +143 -29
- package/fesm2022/mintplayer-ng-bootstrap-tile-manager.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs +2 -2
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-toast.mjs +7 -4
- package/fesm2022/mintplayer-ng-bootstrap-toast.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs +42 -21
- package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs +33 -4
- package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs +17 -7
- package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs +50 -8
- package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-virtual-datatable.mjs +34 -12
- package/fesm2022/mintplayer-ng-bootstrap-virtual-datatable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-web-components-a11y.mjs +74 -0
- package/fesm2022/mintplayer-ng-bootstrap-web-components-a11y.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-web-components-scheduler.mjs +1476 -71
- package/fesm2022/mintplayer-ng-bootstrap-web-components-scheduler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-web-components-splitter.mjs +194 -2
- package/fesm2022/mintplayer-ng-bootstrap-web-components-splitter.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-web-components-tab-control.mjs +4 -0
- package/fesm2022/mintplayer-ng-bootstrap-web-components-tab-control.mjs.map +1 -1
- package/package.json +18 -2
- package/types/mintplayer-ng-bootstrap-a11y.d.ts +196 -0
- package/types/mintplayer-ng-bootstrap-accordion.d.ts +4 -2
- package/types/mintplayer-ng-bootstrap-breadcrumb.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-button-group.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-calendar.d.ts +32 -0
- package/types/mintplayer-ng-bootstrap-carousel.d.ts +56 -3
- package/types/mintplayer-ng-bootstrap-code-snippet.d.ts +1 -0
- package/types/mintplayer-ng-bootstrap-color-picker.d.ts +75 -4
- package/types/mintplayer-ng-bootstrap-datatable.d.ts +1 -1
- package/types/mintplayer-ng-bootstrap-dock.d.ts +51 -0
- package/types/mintplayer-ng-bootstrap-dropdown-menu.d.ts +54 -9
- package/types/mintplayer-ng-bootstrap-dropdown.d.ts +57 -2
- package/types/mintplayer-ng-bootstrap-file-upload.d.ts +4 -1
- package/types/mintplayer-ng-bootstrap-has-overlay.d.ts +14 -0
- package/types/mintplayer-ng-bootstrap-marquee.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-modal.d.ts +25 -1
- package/types/mintplayer-ng-bootstrap-multi-range.d.ts +170 -0
- package/types/mintplayer-ng-bootstrap-multiselect.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-navbar-toggler.d.ts +4 -2
- package/types/mintplayer-ng-bootstrap-navbar.d.ts +25 -1
- package/types/mintplayer-ng-bootstrap-offcanvas.d.ts +23 -1
- package/types/mintplayer-ng-bootstrap-pagination.d.ts +3 -1
- package/types/mintplayer-ng-bootstrap-placeholder.d.ts +5 -1
- package/types/mintplayer-ng-bootstrap-playlist-toggler.d.ts +4 -2
- package/types/mintplayer-ng-bootstrap-popover.d.ts +21 -1
- package/types/mintplayer-ng-bootstrap-priority-nav.d.ts +4 -1
- package/types/mintplayer-ng-bootstrap-progress-bar.d.ts +4 -2
- package/types/mintplayer-ng-bootstrap-range.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-rating.d.ts +3 -0
- package/types/mintplayer-ng-bootstrap-reduced-motion.d.ts +36 -0
- package/types/mintplayer-ng-bootstrap-resizable.d.ts +4 -0
- package/types/mintplayer-ng-bootstrap-scheduler.d.ts +42 -9
- package/types/mintplayer-ng-bootstrap-scrollspy.d.ts +1 -1
- package/types/mintplayer-ng-bootstrap-searchbox.d.ts +8 -1
- package/types/mintplayer-ng-bootstrap-select.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-select2.d.ts +3 -0
- package/types/mintplayer-ng-bootstrap-signature-pad.d.ts +2 -1
- package/types/mintplayer-ng-bootstrap-table.d.ts +8 -1
- package/types/mintplayer-ng-bootstrap-tile-manager.d.ts +21 -2
- package/types/mintplayer-ng-bootstrap-toast.d.ts +6 -1
- package/types/mintplayer-ng-bootstrap-toggle-button.d.ts +11 -0
- package/types/mintplayer-ng-bootstrap-tooltip.d.ts +5 -0
- package/types/mintplayer-ng-bootstrap-treeview.d.ts +12 -1
- package/types/mintplayer-ng-bootstrap-typeahead.d.ts +11 -3
- package/types/mintplayer-ng-bootstrap-virtual-datatable.d.ts +14 -1
- package/types/mintplayer-ng-bootstrap-web-components-a11y.d.ts +34 -0
- package/types/mintplayer-ng-bootstrap-web-components-scheduler-core.d.ts +35 -11
- package/types/mintplayer-ng-bootstrap-web-components-scheduler.d.ts +246 -0
- package/types/mintplayer-ng-bootstrap-web-components-splitter.d.ts +95 -37
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mintplayer-ng-bootstrap-web-components-tab-control.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/web-components/tab-control/src/styles/tab-control.styles.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/tab-control/src/components/mp-tab-control.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/tab-control/src/components/mp-tab-page.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/tab-control/src/index.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/tab-control/mintplayer-ng-bootstrap-web-components-tab-control.ts"],"sourcesContent":["// AUTO-GENERATED — do not edit by hand.\n// Source: tab-control.styles.scss\n// Regenerate with the codegen-wc Nx target.\n\nimport { unsafeCSS } from 'lit';\n\nexport const tabControlStyles = unsafeCSS(`.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n background: none;\n border: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link:focus-visible {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.nav-link.disabled, .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: var(--bs-border-width);\n --bs-nav-tabs-border-color: var(--bs-border-color);\n --bs-nav-tabs-border-radius: var(--bs-border-radius);\n --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: var(--bs-border-radius);\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-underline {\n --bs-nav-underline-gap: 1rem;\n --bs-nav-underline-border-width: 0.125rem;\n --bs-nav-underline-link-active-color: var(--bs-emphasis-color);\n gap: var(--bs-nav-underline-gap);\n}\n.nav-underline .nav-link {\n padding-right: 0;\n padding-left: 0;\n border-bottom: var(--bs-nav-underline-border-width) solid transparent;\n}\n.nav-underline .nav-link:hover, .nav-underline .nav-link:focus {\n border-bottom-color: currentcolor;\n}\n.nav-underline .nav-link.active,\n.nav-underline .show > .nav-link {\n font-weight: 700;\n color: var(--bs-nav-underline-link-active-color);\n border-bottom-color: currentcolor;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-grow: 1;\n flex-basis: 0;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n:host {\n display: flex;\n flex-direction: column;\n position: relative;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap;\n}\n\n.flex-grow-1 {\n flex-grow: 1;\n}\n\n.overflow-auto {\n overflow: auto;\n}\n\n.overflow-x-auto {\n overflow-x: auto;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden;\n}\n\n.text-nowrap {\n white-space: nowrap;\n}\n\n.border {\n border: var(--bs-border-width, 1px) var(--bs-border-style, solid) var(--bs-border-color, #dee2e6) !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width, 1px) var(--bs-border-style, solid) var(--bs-border-color, #dee2e6) !important;\n}\n\n.tsc {\n max-height: 41px;\n overflow: hidden;\n flex-shrink: 0;\n z-index: 1;\n}\n.tsc .nav.nav-tabs {\n margin-top: 0;\n border-bottom: 0;\n}\n.tsc.bottom-tabs {\n margin-top: -1px;\n}\n.tsc.bottom-tabs .nav.nav-tabs {\n border-bottom-width: 0;\n}\n.tsc.bottom-tabs .nav.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n.tsc.bottom-tabs .nav.nav-tabs .nav-item {\n margin-bottom: 2px;\n margin-top: -1px;\n}\n.tsc.bottom-tabs .nav.nav-tabs .nav-item.show .nav-link,\n.tsc.bottom-tabs .nav.nav-tabs .nav-link.active {\n border-color: #fff #dee2e6 #dee2e6 #dee2e6;\n}\n\n.tsc .nav-link {\n cursor: pointer;\n background: transparent;\n font: inherit;\n text-align: inherit;\n}\n\n.tsc .nav-link.disabled {\n cursor: not-allowed;\n}\n\n.tab-content {\n margin-top: -1px;\n}`);\nexport default tabControlStyles;\n","import { LitElement, html, nothing, type TemplateResult } from 'lit';\nimport { tabControlStyles } from '../styles';\nimport type { TabsPosition } from '../types';\n\nexport interface TabActivateEventDetail {\n /** The `tab-id` of the tab the user activated. */\n tabId: string;\n /** The original DOM event (click or keydown) that triggered the activation. */\n originalEvent: Event;\n}\n\ninterface TabInfo {\n tabId: string;\n disabled: boolean;\n}\n\nconst isHidden = (el: Element): boolean =>\n el.hasAttribute('data-hidden') &&\n el.getAttribute('data-hidden') !== 'false';\n\n/**\n * <mp-tab-control>\n *\n * Bootstrap-styled tab strip. Pages live in named `${id}-content` slots and\n * headers in `${id}-header` slots. The shadow DOM dynamically projects only\n * the currently-active page via `<slot name=\"${activeId}-content\">`, so\n * inactive panels never enter the rendered tree.\n *\n * Authoring (vanilla):\n *\n * <mp-tab-control active-tab=\"overview\">\n * <span slot=\"overview-header\">Overview</span>\n * <div slot=\"overview-content\">Hello</div>\n * <span slot=\"details-header\">Details</span>\n * <div slot=\"details-content\">Details body</div>\n * </mp-tab-control>\n *\n * To mark a tab disabled, set `data-disabled` on the `*-content` element.\n *\n * Active state is **controlled by the host** — the host sets `active-tab` and\n * listens for `tab-activate` events. The Angular wrapper (`bs-tab-control`)\n * drives this via signals.\n */\nexport class MpTabControl extends LitElement {\n static override styles = [tabControlStyles];\n\n static override get observedAttributes(): string[] {\n return [\n ...(super.observedAttributes ?? []),\n 'tabs-position',\n 'border',\n 'active-tab',\n 'select-first-tab',\n ];\n }\n\n private tabs: TabInfo[] = [];\n private mutationObserver: MutationObserver | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n // role=\"tablist\" lives on the inner <ul> that directly contains the tab\n // buttons — we deliberately don't repeat it on the host.\n this.mutationObserver = new MutationObserver(() => this.refreshTabs());\n this.mutationObserver.observe(this, {\n childList: true,\n subtree: false,\n attributes: true,\n attributeFilter: ['slot', 'data-disabled', 'data-hidden'],\n });\n }\n\n override disconnectedCallback(): void {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n super.disconnectedCallback();\n }\n\n override attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null,\n ): void {\n super.attributeChangedCallback(name, oldValue, newValue);\n if (oldValue === newValue) return;\n this.requestUpdate();\n }\n\n protected override firstUpdated(): void {\n this.refreshTabs();\n }\n\n private get tabsPosition(): TabsPosition {\n const v = this.getAttribute('tabs-position');\n return v === 'bottom' ? 'bottom' : 'top';\n }\n\n private get border(): 'full' | 'top' | 'none' {\n if (!this.hasAttribute('border')) return 'full';\n const v = this.getAttribute('border');\n if (v === 'false') return 'none';\n if (v === 'top') return 'top';\n return 'full';\n }\n\n private get selectFirstTab(): boolean {\n return this.hasAttribute('select-first-tab')\n ? this.getAttribute('select-first-tab') !== 'false'\n : true;\n }\n\n private get activeTabId(): string | null {\n return this.getAttribute('active-tab');\n }\n\n private refreshTabs(): void {\n const found = new Map<string, TabInfo>();\n for (const child of Array.from(this.children)) {\n const slot = child.getAttribute('slot');\n if (!slot) continue;\n const m = slot.match(/^(.+)-content$/);\n if (!m) continue;\n // `data-hidden` excludes a tab from the strip and content entirely.\n // Used by hosts (like the dock manager) to suppress a tab visually\n // mid-drag without churning slot projection.\n if (isHidden(child)) continue;\n const tabId = m[1];\n const disabled = child.hasAttribute('data-disabled') &&\n child.getAttribute('data-disabled') !== 'false';\n // First occurrence wins on duplicate slot names.\n if (!found.has(tabId)) {\n found.set(tabId, { tabId, disabled });\n }\n }\n this.tabs = Array.from(found.values());\n this.requestUpdate();\n }\n\n private resolvedActiveTabId(): string | null {\n const explicit = this.activeTabId;\n if (\n explicit !== null &&\n this.tabs.some((t) => t.tabId === explicit && !t.disabled)\n ) {\n return explicit;\n }\n if (!this.selectFirstTab) return null;\n const firstEnabled = this.tabs.find((t) => !t.disabled);\n return firstEnabled?.tabId ?? null;\n }\n\n override render(): TemplateResult {\n const activeId = this.resolvedActiveTabId();\n const strip = html`\n <div class=\"tsc${this.tabsPosition === 'bottom' ? ' bottom-tabs' : ''}\">\n <ul\n class=\"nav nav-tabs flex-nowrap overflow-x-auto overflow-y-hidden\"\n role=\"tablist\"\n >\n ${this.tabs.map((tab) => this.renderTabHeader(tab, activeId))}\n </ul>\n </div>\n `;\n const borderMode = this.border;\n const borderClass =\n borderMode === 'none'\n ? ''\n : borderMode === 'top'\n ? ' border-top'\n : activeId\n ? ' border'\n : ' border-top';\n const content = html`\n <div\n class=\"tab-content flex-grow-1 overflow-auto${borderClass}\"\n >\n <slot name=${activeId ? `${activeId}-content` : '__none__'}></slot>\n </div>\n `;\n return html`\n ${this.tabsPosition === 'top' ? strip : nothing}\n ${content}\n ${this.tabsPosition === 'bottom' ? strip : nothing}\n `;\n }\n\n private renderTabHeader(\n tab: TabInfo,\n activeId: string | null,\n ): TemplateResult {\n const isActive = tab.tabId === activeId;\n return html`\n <li class=\"nav-item\" role=\"presentation\">\n <button\n type=\"button\"\n class=\"nav-link text-nowrap${isActive ? ' active' : ''}${tab.disabled\n ? ' disabled'\n : ''}\"\n role=\"tab\"\n id=${`${tab.tabId}-header-button`}\n aria-controls=${`${tab.tabId}-panel`}\n aria-selected=${isActive ? 'true' : 'false'}\n ?disabled=${tab.disabled}\n tabindex=${tab.disabled ? -1 : isActive ? 0 : -1}\n @click=${(ev: Event) => this.activate(tab, ev)}\n @keydown=${(ev: KeyboardEvent) => this.handleKeydown(tab, ev)}\n >\n <slot name=${`${tab.tabId}-header`}></slot>\n </button>\n </li>\n `;\n }\n\n private activate(tab: TabInfo, ev: Event): void {\n if (tab.disabled) return;\n ev.preventDefault();\n this.dispatchEvent(\n new CustomEvent<TabActivateEventDetail>('tab-activate', {\n detail: { tabId: tab.tabId, originalEvent: ev },\n bubbles: true,\n composed: true,\n }),\n );\n this.setAttribute('active-tab', tab.tabId);\n }\n\n private handleKeydown(tab: TabInfo, ev: KeyboardEvent): void {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.activate(tab, ev);\n return;\n case 'Home':\n case 'End': {\n ev.preventDefault();\n const enabled = this.tabs.filter((t) => !t.disabled);\n if (enabled.length === 0) return;\n const target = ev.key === 'Home' ? enabled[0] : enabled[enabled.length - 1];\n this.moveFocusAndActivate(target, ev);\n return;\n }\n case 'ArrowLeft':\n case 'ArrowRight': {\n ev.preventDefault();\n const dir = ev.key === 'ArrowRight' ? 1 : -1;\n const enabled = this.tabs.filter((t) => !t.disabled);\n if (enabled.length === 0) return;\n const currentIdx = enabled.findIndex((t) => t.tabId === tab.tabId);\n const nextIdx =\n (currentIdx + dir + enabled.length) % enabled.length;\n this.moveFocusAndActivate(enabled[nextIdx], ev);\n return;\n }\n }\n }\n\n private moveFocusAndActivate(target: TabInfo, ev: Event): void {\n this.setAttribute('active-tab', target.tabId);\n const button = this.shadowRoot?.querySelector<HTMLButtonElement>(\n `button[id=\"${target.tabId}-header-button\"]`,\n );\n button?.focus();\n this.dispatchEvent(\n new CustomEvent<TabActivateEventDetail>('tab-activate', {\n detail: { tabId: target.tabId, originalEvent: ev },\n bubbles: true,\n composed: true,\n }),\n );\n }\n}\n\nif (\n typeof customElements !== 'undefined' &&\n !customElements.get('mp-tab-control')\n) {\n customElements.define('mp-tab-control', MpTabControl);\n}\n","import { LitElement, html, css, type TemplateResult } from 'lit';\n\n/**\n * <mp-tab-page>\n *\n * Optional convenience wrapper for vanilla consumers. Sets `slot=\"${tabId}-content\"`\n * on itself based on its `tab-id` attribute, so the parent `<mp-tab-control>`\n * picks it up via named-slot projection.\n *\n * Also mirrors `disabled` to `data-disabled` so the tab-control can read the\n * disabled state without inspecting child types.\n *\n * Use directly:\n *\n * <mp-tab-control>\n * <span slot=\"t1-header\">Tab 1</span>\n * <mp-tab-page tab-id=\"t1\">Content 1</mp-tab-page>\n * </mp-tab-control>\n *\n * Or skip this element entirely and put the slot/data-disabled attributes\n * directly on whatever element holds your tab content:\n *\n * <mp-tab-control>\n * <span slot=\"t1-header\">Tab 1</span>\n * <div slot=\"t1-content\">Content 1</div>\n * </mp-tab-control>\n */\nexport class MpTabPage extends LitElement {\n static override styles = css`\n :host {\n display: block;\n }\n `;\n\n static override get observedAttributes(): string[] {\n return [\n ...(super.observedAttributes ?? []),\n 'tab-id',\n 'disabled',\n ];\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.syncSlot();\n this.syncDisabled();\n }\n\n override attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null,\n ): void {\n super.attributeChangedCallback(name, oldValue, newValue);\n if (oldValue === newValue) return;\n if (name === 'tab-id') this.syncSlot();\n if (name === 'disabled') this.syncDisabled();\n }\n\n private syncSlot(): void {\n const tabId = this.getAttribute('tab-id');\n if (tabId) {\n this.setAttribute('slot', `${tabId}-content`);\n } else {\n this.removeAttribute('slot');\n }\n }\n\n private syncDisabled(): void {\n if (this.hasAttribute('disabled')) {\n this.setAttribute('data-disabled', '');\n } else {\n this.removeAttribute('data-disabled');\n }\n }\n\n override render(): TemplateResult {\n return html`<slot></slot>`;\n }\n}\n\nif (\n typeof customElements !== 'undefined' &&\n !customElements.get('mp-tab-page')\n) {\n customElements.define('mp-tab-page', MpTabPage);\n}\n","// Components\nexport { MpTabControl, MpTabPage } from './components';\nexport type { TabActivateEventDetail } from './components';\n\n// Types\nexport type { TabsPosition } from './types';\n\n// Styles (for custom styling extensions)\nexport { tabControlStyles } from './styles';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mintplayer-ng-bootstrap-web-components-tab-control.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/web-components/tab-control/src/styles/tab-control.styles.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/tab-control/src/components/mp-tab-control.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/tab-control/src/components/mp-tab-page.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/tab-control/src/index.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/tab-control/mintplayer-ng-bootstrap-web-components-tab-control.ts"],"sourcesContent":["// AUTO-GENERATED — do not edit by hand.\n// Source: tab-control.styles.scss\n// Regenerate with the codegen-wc Nx target.\n\nimport { unsafeCSS } from 'lit';\n\nexport const tabControlStyles = unsafeCSS(`.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n background: none;\n border: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link:focus-visible {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.nav-link.disabled, .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: var(--bs-border-width);\n --bs-nav-tabs-border-color: var(--bs-border-color);\n --bs-nav-tabs-border-radius: var(--bs-border-radius);\n --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: var(--bs-border-radius);\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-underline {\n --bs-nav-underline-gap: 1rem;\n --bs-nav-underline-border-width: 0.125rem;\n --bs-nav-underline-link-active-color: var(--bs-emphasis-color);\n gap: var(--bs-nav-underline-gap);\n}\n.nav-underline .nav-link {\n padding-right: 0;\n padding-left: 0;\n border-bottom: var(--bs-nav-underline-border-width) solid transparent;\n}\n.nav-underline .nav-link:hover, .nav-underline .nav-link:focus {\n border-bottom-color: currentcolor;\n}\n.nav-underline .nav-link.active,\n.nav-underline .show > .nav-link {\n font-weight: 700;\n color: var(--bs-nav-underline-link-active-color);\n border-bottom-color: currentcolor;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-grow: 1;\n flex-basis: 0;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n:host {\n display: flex;\n flex-direction: column;\n position: relative;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap;\n}\n\n.flex-grow-1 {\n flex-grow: 1;\n}\n\n.overflow-auto {\n overflow: auto;\n}\n\n.overflow-x-auto {\n overflow-x: auto;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden;\n}\n\n.text-nowrap {\n white-space: nowrap;\n}\n\n.border {\n border: var(--bs-border-width, 1px) var(--bs-border-style, solid) var(--bs-border-color, #dee2e6) !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width, 1px) var(--bs-border-style, solid) var(--bs-border-color, #dee2e6) !important;\n}\n\n.tsc {\n max-height: 41px;\n overflow: hidden;\n flex-shrink: 0;\n z-index: 1;\n}\n.tsc .nav.nav-tabs {\n margin-top: 0;\n border-bottom: 0;\n}\n.tsc.bottom-tabs {\n margin-top: -1px;\n}\n.tsc.bottom-tabs .nav.nav-tabs {\n border-bottom-width: 0;\n}\n.tsc.bottom-tabs .nav.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n.tsc.bottom-tabs .nav.nav-tabs .nav-item {\n margin-bottom: 2px;\n margin-top: -1px;\n}\n.tsc.bottom-tabs .nav.nav-tabs .nav-item.show .nav-link,\n.tsc.bottom-tabs .nav.nav-tabs .nav-link.active {\n border-color: #fff #dee2e6 #dee2e6 #dee2e6;\n}\n\n.tsc .nav-link {\n cursor: pointer;\n background: transparent;\n font: inherit;\n text-align: inherit;\n}\n\n.tsc .nav-link.disabled {\n cursor: not-allowed;\n}\n\n.tab-content {\n margin-top: -1px;\n}`);\nexport default tabControlStyles;\n","import { LitElement, html, nothing, type TemplateResult } from 'lit';\nimport { tabControlStyles } from '../styles';\nimport type { TabsPosition } from '../types';\n\nexport interface TabActivateEventDetail {\n /** The `tab-id` of the tab the user activated. */\n tabId: string;\n /** The original DOM event (click or keydown) that triggered the activation. */\n originalEvent: Event;\n}\n\ninterface TabInfo {\n tabId: string;\n disabled: boolean;\n}\n\nconst isHidden = (el: Element): boolean =>\n el.hasAttribute('data-hidden') &&\n el.getAttribute('data-hidden') !== 'false';\n\n/**\n * <mp-tab-control>\n *\n * Bootstrap-styled tab strip. Pages live in named `${id}-content` slots and\n * headers in `${id}-header` slots. The shadow DOM dynamically projects only\n * the currently-active page via `<slot name=\"${activeId}-content\">`, so\n * inactive panels never enter the rendered tree.\n *\n * Authoring (vanilla):\n *\n * <mp-tab-control active-tab=\"overview\">\n * <span slot=\"overview-header\">Overview</span>\n * <div slot=\"overview-content\">Hello</div>\n * <span slot=\"details-header\">Details</span>\n * <div slot=\"details-content\">Details body</div>\n * </mp-tab-control>\n *\n * To mark a tab disabled, set `data-disabled` on the `*-content` element.\n *\n * Active state is **controlled by the host** — the host sets `active-tab` and\n * listens for `tab-activate` events. The Angular wrapper (`bs-tab-control`)\n * drives this via signals.\n */\nexport class MpTabControl extends LitElement {\n static override styles = [tabControlStyles];\n\n static override get observedAttributes(): string[] {\n return [\n ...(super.observedAttributes ?? []),\n 'tabs-position',\n 'border',\n 'active-tab',\n 'select-first-tab',\n ];\n }\n\n private tabs: TabInfo[] = [];\n private mutationObserver: MutationObserver | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n // role=\"tablist\" lives on the inner <ul> that directly contains the tab\n // buttons — we deliberately don't repeat it on the host.\n this.mutationObserver = new MutationObserver(() => this.refreshTabs());\n this.mutationObserver.observe(this, {\n childList: true,\n subtree: false,\n attributes: true,\n attributeFilter: ['slot', 'data-disabled', 'data-hidden'],\n });\n }\n\n override disconnectedCallback(): void {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n super.disconnectedCallback();\n }\n\n override attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null,\n ): void {\n super.attributeChangedCallback(name, oldValue, newValue);\n if (oldValue === newValue) return;\n this.requestUpdate();\n }\n\n protected override firstUpdated(): void {\n this.refreshTabs();\n }\n\n private get tabsPosition(): TabsPosition {\n const v = this.getAttribute('tabs-position');\n return v === 'bottom' ? 'bottom' : 'top';\n }\n\n private get border(): 'full' | 'top' | 'none' {\n if (!this.hasAttribute('border')) return 'full';\n const v = this.getAttribute('border');\n if (v === 'false') return 'none';\n if (v === 'top') return 'top';\n return 'full';\n }\n\n private get selectFirstTab(): boolean {\n return this.hasAttribute('select-first-tab')\n ? this.getAttribute('select-first-tab') !== 'false'\n : true;\n }\n\n private get activeTabId(): string | null {\n return this.getAttribute('active-tab');\n }\n\n private refreshTabs(): void {\n const found = new Map<string, TabInfo>();\n for (const child of Array.from(this.children)) {\n const slot = child.getAttribute('slot');\n if (!slot) continue;\n const m = slot.match(/^(.+)-content$/);\n if (!m) continue;\n // `data-hidden` excludes a tab from the strip and content entirely.\n // Used by hosts (like the dock manager) to suppress a tab visually\n // mid-drag without churning slot projection.\n if (isHidden(child)) continue;\n const tabId = m[1];\n const disabled = child.hasAttribute('data-disabled') &&\n child.getAttribute('data-disabled') !== 'false';\n // First occurrence wins on duplicate slot names.\n if (!found.has(tabId)) {\n found.set(tabId, { tabId, disabled });\n }\n }\n this.tabs = Array.from(found.values());\n this.requestUpdate();\n }\n\n private resolvedActiveTabId(): string | null {\n const explicit = this.activeTabId;\n if (\n explicit !== null &&\n this.tabs.some((t) => t.tabId === explicit && !t.disabled)\n ) {\n return explicit;\n }\n if (!this.selectFirstTab) return null;\n const firstEnabled = this.tabs.find((t) => !t.disabled);\n return firstEnabled?.tabId ?? null;\n }\n\n override render(): TemplateResult {\n const activeId = this.resolvedActiveTabId();\n const strip = html`\n <div class=\"tsc${this.tabsPosition === 'bottom' ? ' bottom-tabs' : ''}\">\n <ul\n class=\"nav nav-tabs flex-nowrap overflow-x-auto overflow-y-hidden\"\n role=\"tablist\"\n >\n ${this.tabs.map((tab) => this.renderTabHeader(tab, activeId))}\n </ul>\n </div>\n `;\n const borderMode = this.border;\n const borderClass =\n borderMode === 'none'\n ? ''\n : borderMode === 'top'\n ? ' border-top'\n : activeId\n ? ' border'\n : ' border-top';\n const content = html`\n <div\n class=\"tab-content flex-grow-1 overflow-auto${borderClass}\"\n role=${activeId ? 'tabpanel' : nothing}\n id=${activeId ? `${activeId}-panel` : nothing}\n aria-labelledby=${activeId ? `${activeId}-header-button` : nothing}\n tabindex=${activeId ? '0' : nothing}\n >\n <slot name=${activeId ? `${activeId}-content` : '__none__'}></slot>\n </div>\n `;\n return html`\n ${this.tabsPosition === 'top' ? strip : nothing}\n ${content}\n ${this.tabsPosition === 'bottom' ? strip : nothing}\n `;\n }\n\n private renderTabHeader(\n tab: TabInfo,\n activeId: string | null,\n ): TemplateResult {\n const isActive = tab.tabId === activeId;\n return html`\n <li class=\"nav-item\" role=\"presentation\">\n <button\n type=\"button\"\n class=\"nav-link text-nowrap${isActive ? ' active' : ''}${tab.disabled\n ? ' disabled'\n : ''}\"\n role=\"tab\"\n id=${`${tab.tabId}-header-button`}\n aria-controls=${`${tab.tabId}-panel`}\n aria-selected=${isActive ? 'true' : 'false'}\n ?disabled=${tab.disabled}\n tabindex=${tab.disabled ? -1 : isActive ? 0 : -1}\n @click=${(ev: Event) => this.activate(tab, ev)}\n @keydown=${(ev: KeyboardEvent) => this.handleKeydown(tab, ev)}\n >\n <slot name=${`${tab.tabId}-header`}></slot>\n </button>\n </li>\n `;\n }\n\n private activate(tab: TabInfo, ev: Event): void {\n if (tab.disabled) return;\n ev.preventDefault();\n this.dispatchEvent(\n new CustomEvent<TabActivateEventDetail>('tab-activate', {\n detail: { tabId: tab.tabId, originalEvent: ev },\n bubbles: true,\n composed: true,\n }),\n );\n this.setAttribute('active-tab', tab.tabId);\n }\n\n private handleKeydown(tab: TabInfo, ev: KeyboardEvent): void {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.activate(tab, ev);\n return;\n case 'Home':\n case 'End': {\n ev.preventDefault();\n const enabled = this.tabs.filter((t) => !t.disabled);\n if (enabled.length === 0) return;\n const target = ev.key === 'Home' ? enabled[0] : enabled[enabled.length - 1];\n this.moveFocusAndActivate(target, ev);\n return;\n }\n case 'ArrowLeft':\n case 'ArrowRight': {\n ev.preventDefault();\n const dir = ev.key === 'ArrowRight' ? 1 : -1;\n const enabled = this.tabs.filter((t) => !t.disabled);\n if (enabled.length === 0) return;\n const currentIdx = enabled.findIndex((t) => t.tabId === tab.tabId);\n const nextIdx =\n (currentIdx + dir + enabled.length) % enabled.length;\n this.moveFocusAndActivate(enabled[nextIdx], ev);\n return;\n }\n }\n }\n\n private moveFocusAndActivate(target: TabInfo, ev: Event): void {\n this.setAttribute('active-tab', target.tabId);\n const button = this.shadowRoot?.querySelector<HTMLButtonElement>(\n `button[id=\"${target.tabId}-header-button\"]`,\n );\n button?.focus();\n this.dispatchEvent(\n new CustomEvent<TabActivateEventDetail>('tab-activate', {\n detail: { tabId: target.tabId, originalEvent: ev },\n bubbles: true,\n composed: true,\n }),\n );\n }\n}\n\nif (\n typeof customElements !== 'undefined' &&\n !customElements.get('mp-tab-control')\n) {\n customElements.define('mp-tab-control', MpTabControl);\n}\n","import { LitElement, html, css, type TemplateResult } from 'lit';\n\n/**\n * <mp-tab-page>\n *\n * Optional convenience wrapper for vanilla consumers. Sets `slot=\"${tabId}-content\"`\n * on itself based on its `tab-id` attribute, so the parent `<mp-tab-control>`\n * picks it up via named-slot projection.\n *\n * Also mirrors `disabled` to `data-disabled` so the tab-control can read the\n * disabled state without inspecting child types.\n *\n * Use directly:\n *\n * <mp-tab-control>\n * <span slot=\"t1-header\">Tab 1</span>\n * <mp-tab-page tab-id=\"t1\">Content 1</mp-tab-page>\n * </mp-tab-control>\n *\n * Or skip this element entirely and put the slot/data-disabled attributes\n * directly on whatever element holds your tab content:\n *\n * <mp-tab-control>\n * <span slot=\"t1-header\">Tab 1</span>\n * <div slot=\"t1-content\">Content 1</div>\n * </mp-tab-control>\n */\nexport class MpTabPage extends LitElement {\n static override styles = css`\n :host {\n display: block;\n }\n `;\n\n static override get observedAttributes(): string[] {\n return [\n ...(super.observedAttributes ?? []),\n 'tab-id',\n 'disabled',\n ];\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.syncSlot();\n this.syncDisabled();\n }\n\n override attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null,\n ): void {\n super.attributeChangedCallback(name, oldValue, newValue);\n if (oldValue === newValue) return;\n if (name === 'tab-id') this.syncSlot();\n if (name === 'disabled') this.syncDisabled();\n }\n\n private syncSlot(): void {\n const tabId = this.getAttribute('tab-id');\n if (tabId) {\n this.setAttribute('slot', `${tabId}-content`);\n } else {\n this.removeAttribute('slot');\n }\n }\n\n private syncDisabled(): void {\n if (this.hasAttribute('disabled')) {\n this.setAttribute('data-disabled', '');\n } else {\n this.removeAttribute('data-disabled');\n }\n }\n\n override render(): TemplateResult {\n return html`<slot></slot>`;\n }\n}\n\nif (\n typeof customElements !== 'undefined' &&\n !customElements.get('mp-tab-page')\n) {\n customElements.define('mp-tab-page', MpTabPage);\n}\n","// Components\nexport { MpTabControl, MpTabPage } from './components';\nexport type { TabActivateEventDetail } from './components';\n\n// Types\nexport type { TabsPosition } from './types';\n\n// Styles (for custom styling extensions)\nexport { tabControlStyles } from './styles';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mintplayer/ng-bootstrap",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "21.
|
|
4
|
+
"version": "21.31.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/MintPlayer/mintplayer-ng-bootstrap",
|
|
@@ -16,6 +16,10 @@
|
|
|
16
16
|
"types": "./types/mintplayer-ng-bootstrap.d.ts",
|
|
17
17
|
"default": "./fesm2022/mintplayer-ng-bootstrap.mjs"
|
|
18
18
|
},
|
|
19
|
+
"./a11y": {
|
|
20
|
+
"types": "./types/mintplayer-ng-bootstrap-a11y.d.ts",
|
|
21
|
+
"default": "./fesm2022/mintplayer-ng-bootstrap-a11y.mjs"
|
|
22
|
+
},
|
|
19
23
|
"./accordion": {
|
|
20
24
|
"types": "./types/mintplayer-ng-bootstrap-accordion.d.ts",
|
|
21
25
|
"default": "./fesm2022/mintplayer-ng-bootstrap-accordion.mjs"
|
|
@@ -184,6 +188,10 @@
|
|
|
184
188
|
"types": "./types/mintplayer-ng-bootstrap-modal.d.ts",
|
|
185
189
|
"default": "./fesm2022/mintplayer-ng-bootstrap-modal.mjs"
|
|
186
190
|
},
|
|
191
|
+
"./multi-range": {
|
|
192
|
+
"types": "./types/mintplayer-ng-bootstrap-multi-range.d.ts",
|
|
193
|
+
"default": "./fesm2022/mintplayer-ng-bootstrap-multi-range.mjs"
|
|
194
|
+
},
|
|
187
195
|
"./multiselect": {
|
|
188
196
|
"types": "./types/mintplayer-ng-bootstrap-multiselect.d.ts",
|
|
189
197
|
"default": "./fesm2022/mintplayer-ng-bootstrap-multiselect.mjs"
|
|
@@ -248,6 +256,10 @@
|
|
|
248
256
|
"types": "./types/mintplayer-ng-bootstrap-rating.d.ts",
|
|
249
257
|
"default": "./fesm2022/mintplayer-ng-bootstrap-rating.mjs"
|
|
250
258
|
},
|
|
259
|
+
"./reduced-motion": {
|
|
260
|
+
"types": "./types/mintplayer-ng-bootstrap-reduced-motion.d.ts",
|
|
261
|
+
"default": "./fesm2022/mintplayer-ng-bootstrap-reduced-motion.mjs"
|
|
262
|
+
},
|
|
251
263
|
"./resizable": {
|
|
252
264
|
"types": "./types/mintplayer-ng-bootstrap-resizable.d.ts",
|
|
253
265
|
"default": "./fesm2022/mintplayer-ng-bootstrap-resizable.mjs"
|
|
@@ -352,6 +364,10 @@
|
|
|
352
364
|
"types": "./types/mintplayer-ng-bootstrap-virtual-datatable.d.ts",
|
|
353
365
|
"default": "./fesm2022/mintplayer-ng-bootstrap-virtual-datatable.mjs"
|
|
354
366
|
},
|
|
367
|
+
"./web-components/a11y": {
|
|
368
|
+
"types": "./types/mintplayer-ng-bootstrap-web-components-a11y.d.ts",
|
|
369
|
+
"default": "./fesm2022/mintplayer-ng-bootstrap-web-components-a11y.mjs"
|
|
370
|
+
},
|
|
355
371
|
"./web-components/scheduler": {
|
|
356
372
|
"types": "./types/mintplayer-ng-bootstrap-web-components-scheduler.d.ts",
|
|
357
373
|
"default": "./fesm2022/mintplayer-ng-bootstrap-web-components-scheduler.mjs"
|
|
@@ -389,7 +405,7 @@
|
|
|
389
405
|
"@mintplayer/ng-animations": "^21.1.0",
|
|
390
406
|
"@mintplayer/pagination": "^2.3.0",
|
|
391
407
|
"@mintplayer/ng-focus-on-load": "^21.2.0",
|
|
392
|
-
"@mintplayer/ng-swiper": "^21.
|
|
408
|
+
"@mintplayer/ng-swiper": "^21.9.0"
|
|
393
409
|
},
|
|
394
410
|
"dependencies": {
|
|
395
411
|
"tslib": "^2.3.0"
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ElementRef } from '@angular/core';
|
|
3
|
+
import { AriaLivePoliteness } from '@angular/cdk/a11y';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* App-wide unique ID generator for ARIA wiring (`aria-controls`,
|
|
7
|
+
* `aria-labelledby`, `aria-activedescendant`, etc.).
|
|
8
|
+
*
|
|
9
|
+
* Why a service instead of `crypto.randomUUID()` or per-component counters:
|
|
10
|
+
* IDs need to stay short and human-readable in DevTools, and per-component
|
|
11
|
+
* counters collide when the same component is instantiated more than once on
|
|
12
|
+
* a page (two `bs-dropdown`s would each assign `bs-dropdown-1`). The shared
|
|
13
|
+
* counter guarantees uniqueness across the whole app without UUID noise.
|
|
14
|
+
*/
|
|
15
|
+
declare class BsIdService {
|
|
16
|
+
private counter;
|
|
17
|
+
/** Returns `${prefix}-N` where N monotonically increases for the lifetime of the app. */
|
|
18
|
+
next(prefix: string): string;
|
|
19
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsIdService, never>;
|
|
20
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<BsIdService>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* One marker per focusable child of a `bsRovingFocus` container.
|
|
25
|
+
*
|
|
26
|
+
* - Mirrors the parent's mode into the host `tabindex` (0 if active in
|
|
27
|
+
* `tabindex` mode, -1 otherwise).
|
|
28
|
+
* - Toggles the `.bs-rovingfocus-active` class so SCSS can paint a focused-
|
|
29
|
+
* look highlight on the active item — important in `activedescendant`
|
|
30
|
+
* mode, where the item never receives `:focus` and the browser's focus
|
|
31
|
+
* ring never paints.
|
|
32
|
+
* - Auto-generates an `id` if the host doesn't already have one, so combobox
|
|
33
|
+
* `aria-activedescendant` always has a stable target. Honours an
|
|
34
|
+
* externally-supplied id when present.
|
|
35
|
+
*
|
|
36
|
+
* Consumers normally don't interact with this directive directly — they
|
|
37
|
+
* just stamp it on each list/menu/option element inside `bsRovingFocus`.
|
|
38
|
+
*/
|
|
39
|
+
declare class BsRovingFocusItemDirective {
|
|
40
|
+
private parent;
|
|
41
|
+
elementRef: ElementRef<HTMLElement>;
|
|
42
|
+
private ids;
|
|
43
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* The host element's id. Honoured if set externally (e.g. by a sibling
|
|
46
|
+
* component's [attr.id] host binding); otherwise generated in afterNextRender
|
|
47
|
+
* so combobox-style aria-activedescendant has a stable target.
|
|
48
|
+
*
|
|
49
|
+
* Backed by a signal so parent computeds (like BsRovingFocusDirective's
|
|
50
|
+
* activeDescendantId) re-run when the id is resolved post-mount. A plain
|
|
51
|
+
* `nativeElement.id` getter would be silently cached during the first
|
|
52
|
+
* computation and never re-read — leading to aria-activedescendant="" on
|
|
53
|
+
* combobox inputs even after the items got real ids.
|
|
54
|
+
*/
|
|
55
|
+
private readonly _itemId;
|
|
56
|
+
get itemId(): string;
|
|
57
|
+
readonly index: _angular_core.Signal<any>;
|
|
58
|
+
readonly isActive: _angular_core.Signal<boolean>;
|
|
59
|
+
readonly tabindex: _angular_core.Signal<0 | -1>;
|
|
60
|
+
constructor();
|
|
61
|
+
onFocus(): void;
|
|
62
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsRovingFocusItemDirective, never>;
|
|
63
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BsRovingFocusItemDirective, "[bsRovingFocusItem]", ["bsRovingFocusItem"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
type BsRovingFocusOrientation = 'vertical' | 'horizontal' | 'both';
|
|
67
|
+
type BsRovingFocusMode = 'tabindex' | 'activedescendant';
|
|
68
|
+
/**
|
|
69
|
+
* APG roving-tabindex / active-descendant container.
|
|
70
|
+
*
|
|
71
|
+
* Place on a list/menu/listbox; mark each focusable child with
|
|
72
|
+
* `bsRovingFocusItem`. Arrow keys, Home, and End move the active item; the
|
|
73
|
+
* directive auto-handles disabled items, wrap-around, and orientation.
|
|
74
|
+
*
|
|
75
|
+
* Two modes:
|
|
76
|
+
* - **`tabindex`** (default) — only the active item has `tabindex="0"`; real
|
|
77
|
+
* DOM focus moves. Right for menus, treeviews, tablists.
|
|
78
|
+
* - **`activedescendant`** — items keep `tabindex="-1"`; DOM focus stays on
|
|
79
|
+
* an external owner (e.g. a combobox `<input>`) which mirrors the active
|
|
80
|
+
* item's id via `aria-activedescendant`. Right for comboboxes/listboxes
|
|
81
|
+
* where the user is also typing.
|
|
82
|
+
*
|
|
83
|
+
* Consumers that need to react to the active item externally read
|
|
84
|
+
* `activeIndex()` (signal) or `activeDescendantId()` (computed).
|
|
85
|
+
*/
|
|
86
|
+
declare class BsRovingFocusDirective {
|
|
87
|
+
private elementRef;
|
|
88
|
+
readonly orientation: _angular_core.InputSignal<BsRovingFocusOrientation>;
|
|
89
|
+
readonly mode: _angular_core.InputSignal<BsRovingFocusMode>;
|
|
90
|
+
readonly wrap: _angular_core.InputSignal<boolean>;
|
|
91
|
+
readonly items: _angular_core.Signal<readonly BsRovingFocusItemDirective[]>;
|
|
92
|
+
readonly activeIndex: _angular_core.WritableSignal<number>;
|
|
93
|
+
readonly activeDescendantId: _angular_core.Signal<string | null>;
|
|
94
|
+
focusFirst(): void;
|
|
95
|
+
focusLast(): void;
|
|
96
|
+
next(): void;
|
|
97
|
+
prev(): void;
|
|
98
|
+
setActiveItem(item: BsRovingFocusItemDirective): void;
|
|
99
|
+
onKeydown(event: KeyboardEvent): void;
|
|
100
|
+
/** Public so consumers (e.g. BsComboboxDirective's TAB handling) can detect edges without re-implementing the disabled-aware scan. */
|
|
101
|
+
firstEnabledIndex(): number;
|
|
102
|
+
lastEnabledIndex(): number;
|
|
103
|
+
private step;
|
|
104
|
+
private moveTo;
|
|
105
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsRovingFocusDirective, never>;
|
|
106
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BsRovingFocusDirective, "[bsRovingFocus]", ["bsRovingFocus"], { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; }, {}, ["items"], never, true, never>;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
type BsOverlayInitialFocus = HTMLElement | 'first' | 'self' | 'none';
|
|
110
|
+
/**
|
|
111
|
+
* Activates a CDK focus trap on the host element while `bsOverlayFocus` is true,
|
|
112
|
+
* captures the trigger before activation, and returns focus to it on deactivation.
|
|
113
|
+
*
|
|
114
|
+
* Initial focus inside the trap defaults to the first tabbable descendant; pass
|
|
115
|
+
* an explicit HTMLElement, 'self' (focus the host), or 'none' to opt out.
|
|
116
|
+
*
|
|
117
|
+
* Background `inert` / `aria-hidden` is intentionally not handled here — it is
|
|
118
|
+
* the consuming component's job (a modal hides app-root, a popover does not).
|
|
119
|
+
*/
|
|
120
|
+
declare class BsOverlayFocusDirective {
|
|
121
|
+
private elementRef;
|
|
122
|
+
private trapFactory;
|
|
123
|
+
private interactivityChecker;
|
|
124
|
+
private destroyRef;
|
|
125
|
+
readonly active: _angular_core.InputSignal<boolean>;
|
|
126
|
+
readonly initialFocus: _angular_core.InputSignal<BsOverlayInitialFocus>;
|
|
127
|
+
readonly returnFocus: _angular_core.InputSignal<boolean>;
|
|
128
|
+
private trap;
|
|
129
|
+
private restoreTo;
|
|
130
|
+
constructor();
|
|
131
|
+
private engage;
|
|
132
|
+
private focusFirstTabbable;
|
|
133
|
+
private disengage;
|
|
134
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsOverlayFocusDirective, never>;
|
|
135
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BsOverlayFocusDirective, "[bsOverlayFocus]", ["bsOverlayFocus"], { "active": { "alias": "bsOverlayFocus"; "required": false; "isSignal": true; }; "initialFocus": { "alias": "initialFocus"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Thin wrapper over CDK's LiveAnnouncer that dedupes consecutive identical
|
|
140
|
+
* messages — typeahead-style "5 results" announcements often re-fire with the
|
|
141
|
+
* same content and screen readers re-read them, which is noise.
|
|
142
|
+
*/
|
|
143
|
+
declare class BsLiveAnnouncerService {
|
|
144
|
+
private cdk;
|
|
145
|
+
private last;
|
|
146
|
+
announce(message: string, politeness?: AriaLivePoliteness, durationMs?: number): Promise<void>;
|
|
147
|
+
clear(): void;
|
|
148
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsLiveAnnouncerService, never>;
|
|
149
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<BsLiveAnnouncerService>;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* LIFO registry that tracks open overlays so each overlay can decide whether
|
|
154
|
+
* its global Escape listener should fire.
|
|
155
|
+
*
|
|
156
|
+
* The problem: popover, tooltip, dropdown-menu, priority-nav, and modal each
|
|
157
|
+
* bind a `(document:keydown.escape)` (or equivalent host listener) that closes
|
|
158
|
+
* the overlay unconditionally. With nesting (popover-under-modal,
|
|
159
|
+
* tooltip-under-popover), a single Escape closes both because both handlers
|
|
160
|
+
* fire on the same event.
|
|
161
|
+
*
|
|
162
|
+
* The fix: every overlay calls `push()` when it opens and `release(token)`
|
|
163
|
+
* when it closes; its Escape handler runs only when `isTop(token)` returns
|
|
164
|
+
* true. The top-most overlay consumes Escape; lower frames stay open.
|
|
165
|
+
*
|
|
166
|
+
* Identity is a per-call `symbol` token rather than a string, so two opens of
|
|
167
|
+
* the same directive don't collide and a stale token can't accidentally match
|
|
168
|
+
* a future frame.
|
|
169
|
+
*
|
|
170
|
+
* **What this does NOT promise:**
|
|
171
|
+
* - **Visual z-order.** The stack tracks logical open-order (the sequence of
|
|
172
|
+
* `push()` calls). A consumer that manually reorders overlays in the DOM
|
|
173
|
+
* could see Escape close a logically-deeper overlay. We don't support that.
|
|
174
|
+
* - **Coordination with non-overlay listeners.** A consumer's own
|
|
175
|
+
* `keydown.escape` listener that doesn't ask the stack will still fire.
|
|
176
|
+
*/
|
|
177
|
+
declare class BsOverlayStackService {
|
|
178
|
+
private stack;
|
|
179
|
+
/** Allocate a new frame on top of the stack and return its token. */
|
|
180
|
+
push(): symbol;
|
|
181
|
+
/**
|
|
182
|
+
* Remove `token` from the stack. Releasing a non-top token is allowed —
|
|
183
|
+
* it's how an inner overlay closes itself programmatically without an
|
|
184
|
+
* Escape press (e.g. a popover closed by clicking its trigger again).
|
|
185
|
+
*/
|
|
186
|
+
release(token: symbol): void;
|
|
187
|
+
/** True if `token` is the top of the stack. */
|
|
188
|
+
isTop(token: symbol): boolean;
|
|
189
|
+
/** Token at the top of the stack, or null if empty. */
|
|
190
|
+
peek(): symbol | null;
|
|
191
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsOverlayStackService, never>;
|
|
192
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<BsOverlayStackService>;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export { BsIdService, BsLiveAnnouncerService, BsOverlayFocusDirective, BsOverlayStackService, BsRovingFocusDirective, BsRovingFocusItemDirective };
|
|
196
|
+
export type { BsOverlayInitialFocus, BsRovingFocusMode, BsRovingFocusOrientation };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
+
import * as i1 from '@mintplayer/ng-bootstrap/reduced-motion';
|
|
2
3
|
|
|
3
4
|
declare class BsAccordionTabComponent {
|
|
4
5
|
accordion: BsAccordionComponent;
|
|
@@ -13,9 +14,10 @@ declare class BsAccordionTabComponent {
|
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
declare class BsAccordionComponent {
|
|
17
|
+
private readonly reducedMotion;
|
|
16
18
|
constructor();
|
|
17
19
|
readonly tabPages: _angular_core.Signal<readonly BsAccordionTabComponent[]>;
|
|
18
|
-
|
|
20
|
+
readonly animationsDisabled: _angular_core.Signal<boolean>;
|
|
19
21
|
highlightActiveTab: _angular_core.InputSignal<boolean>;
|
|
20
22
|
multi: _angular_core.InputSignal<boolean>;
|
|
21
23
|
accordionId: _angular_core.WritableSignal<number>;
|
|
@@ -23,7 +25,7 @@ declare class BsAccordionComponent {
|
|
|
23
25
|
accordionTabCounter: number;
|
|
24
26
|
static accordionCounter: number;
|
|
25
27
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsAccordionComponent, never>;
|
|
26
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BsAccordionComponent, "bs-accordion", never, { "highlightActiveTab": { "alias": "highlightActiveTab"; "required": false; "isSignal": true; }; "multi": { "alias": "multi"; "required": false; "isSignal": true; }; }, {}, ["tabPages"], ["*"], true,
|
|
28
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BsAccordionComponent, "bs-accordion", never, { "highlightActiveTab": { "alias": "highlightActiveTab"; "required": false; "isSignal": true; }; "multi": { "alias": "multi"; "required": false; "isSignal": true; }; }, {}, ["tabPages"], ["*"], true, [{ directive: typeof i1.BsReducedMotionDirective; inputs: {}; outputs: {}; }]>;
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
declare class BsAccordionTabHeaderComponent {
|
|
@@ -6,8 +6,9 @@ declare class BsBreadcrumbComponent {
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
declare class BsBreadcrumbItemComponent {
|
|
9
|
+
readonly active: i0.InputSignal<boolean>;
|
|
9
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<BsBreadcrumbItemComponent, never>;
|
|
10
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<BsBreadcrumbItemComponent, "bs-breadcrumb-item", never, {}, {}, never, ["*"], true, never>;
|
|
11
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BsBreadcrumbItemComponent, "bs-breadcrumb-item", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
export { BsBreadcrumbComponent, BsBreadcrumbItemComponent };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
|
|
3
3
|
declare class BsButtonGroupComponent {
|
|
4
|
+
ariaLabel: i0.InputSignal<string | null>;
|
|
4
5
|
static ɵfac: i0.ɵɵFactoryDeclaration<BsButtonGroupComponent, never>;
|
|
5
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<BsButtonGroupComponent, "bs-button-group", never, {}, {}, never, ["*"], true, never>;
|
|
6
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BsButtonGroupComponent, "bs-button-group", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
6
7
|
}
|
|
7
8
|
|
|
8
9
|
export { BsButtonGroupComponent };
|
|
@@ -6,18 +6,50 @@ import { SafeHtml } from '@angular/platform-browser';
|
|
|
6
6
|
declare class BsCalendarComponent {
|
|
7
7
|
private sanitizer;
|
|
8
8
|
private calendarMonthService;
|
|
9
|
+
private elementRef;
|
|
10
|
+
private idService;
|
|
11
|
+
private injector;
|
|
9
12
|
constructor();
|
|
10
13
|
chevronLeft: _angular_core.WritableSignal<SafeHtml | undefined>;
|
|
11
14
|
chevronRight: _angular_core.WritableSignal<SafeHtml | undefined>;
|
|
12
15
|
currentMonth: _angular_core.ModelSignal<Date>;
|
|
13
16
|
selectedDate: _angular_core.ModelSignal<Date>;
|
|
14
17
|
disableDateFn: _angular_core.InputSignal<((date: Date) => boolean) | undefined>;
|
|
18
|
+
/**
|
|
19
|
+
* The date that owns the grid's single tab stop (roving tabindex). Defaults
|
|
20
|
+
* to selectedDate when it lands inside currentMonth, then today, then the
|
|
21
|
+
* first enabled day of the month — matching APG Date Picker Dialog
|
|
22
|
+
* convention. Set imperatively by the keymap; re-focused after Angular
|
|
23
|
+
* re-renders via afterNextRender.
|
|
24
|
+
*/
|
|
25
|
+
readonly focusedDate: _angular_core.WritableSignal<Date | null>;
|
|
26
|
+
/** Whether to push focus to the focused cell after the next render. */
|
|
27
|
+
private pendingFocusMove;
|
|
28
|
+
/** Stable id for the month-title cell, used by the grid's aria-labelledby. */
|
|
29
|
+
readonly monthLabelId: string;
|
|
30
|
+
/** Stable id-per-cell so afterNextRender focus restoration can find the new cell. */
|
|
31
|
+
cellId(date: Date): string;
|
|
15
32
|
weeks: _angular_core.Signal<_mintplayer_ng_bootstrap_calendar_month.Week[]>;
|
|
33
|
+
isToday(date: Date): boolean;
|
|
16
34
|
shownDays: _angular_core.Signal<WeekDay[]>;
|
|
17
35
|
previousMonth(): boolean;
|
|
18
36
|
nextMonth(): boolean;
|
|
19
37
|
isSameDate(date1: Date | null, date2: Date | null): boolean;
|
|
20
38
|
goto(day: DateDayOfMonth | null): void;
|
|
39
|
+
/**
|
|
40
|
+
* Compute the cell that should carry tabindex="0". One per month — the
|
|
41
|
+
* focused-date if it's inside this month, else the selected date, else
|
|
42
|
+
* today, else the first enabled day. Mirrors APG Date Picker convention.
|
|
43
|
+
*/
|
|
44
|
+
readonly focusableDate: _angular_core.Signal<Date | null>;
|
|
45
|
+
/**
|
|
46
|
+
* APG Date Picker keymap. Tab into the grid lands on the focusableDate
|
|
47
|
+
* cell; arrow keys then navigate days/weeks; PageUp/Down change month;
|
|
48
|
+
* Ctrl+PageUp/Down change year; Home/End jump to week edges; Enter/Space
|
|
49
|
+
* selects.
|
|
50
|
+
*/
|
|
51
|
+
onCellKeyDown(event: KeyboardEvent, day: DateDayOfMonth | null): void;
|
|
52
|
+
private moveFocusTo;
|
|
21
53
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsCalendarComponent, never>;
|
|
22
54
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BsCalendarComponent, "bs-calendar", never, { "currentMonth": { "alias": "currentMonth"; "required": false; "isSignal": true; }; "selectedDate": { "alias": "selectedDate"; "required": false; "isSignal": true; }; "disableDateFn": { "alias": "disableDateFn"; "required": false; "isSignal": true; }; }, { "currentMonth": "currentMonthChange"; "selectedDate": "selectedDateChange"; }, never, never, true, never>;
|
|
23
55
|
}
|
|
@@ -2,6 +2,7 @@ import * as _angular_core from '@angular/core';
|
|
|
2
2
|
import { TemplateRef, AfterViewInit, OnDestroy, ElementRef } from '@angular/core';
|
|
3
3
|
import { Color } from '@mintplayer/ng-bootstrap';
|
|
4
4
|
import { BsSwipeContainerDirective } from '@mintplayer/ng-swiper/swiper';
|
|
5
|
+
import * as i1 from '@mintplayer/ng-bootstrap/reduced-motion';
|
|
5
6
|
|
|
6
7
|
declare class BsCarouselImageDirective {
|
|
7
8
|
private templateRef;
|
|
@@ -15,9 +16,37 @@ declare class BsCarouselImageDirective {
|
|
|
15
16
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BsCarouselImageDirective, "*[bsCarouselImage]", never, {}, {}, never, never, true, never>;
|
|
16
17
|
}
|
|
17
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Context exposed to a `*bsCarouselPlayPause` template — the consumer reads
|
|
21
|
+
* `paused` to render the right glyph/label and calls `toggle` on click.
|
|
22
|
+
*
|
|
23
|
+
* Per PRD aria-accessibility-audit §13.2 (and the WAI-ARIA Authoring
|
|
24
|
+
* Practices Carousel pattern): when a carousel auto-advances, it MUST
|
|
25
|
+
* expose a visible, keyboard-operable play/pause control. The carousel
|
|
26
|
+
* itself doesn't impose a button style — the consumer projects whatever
|
|
27
|
+
* UI fits their app and reads the `paused` flag from this context.
|
|
28
|
+
*/
|
|
29
|
+
interface BsCarouselPlayPauseContext {
|
|
30
|
+
/** Whether the carousel is currently paused. Same value as `paused`. */
|
|
31
|
+
$implicit: boolean;
|
|
32
|
+
/** Whether the carousel is currently paused. */
|
|
33
|
+
paused: boolean;
|
|
34
|
+
/** Toggle the paused state. Mirrors the carousel's two-way `[(paused)]`. */
|
|
35
|
+
toggle: () => void;
|
|
36
|
+
}
|
|
37
|
+
declare class BsCarouselPlayPauseDirective {
|
|
38
|
+
private templateRef;
|
|
39
|
+
private carousel;
|
|
40
|
+
static ngTemplateContextGuard(_dir: BsCarouselPlayPauseDirective, ctx: unknown): ctx is BsCarouselPlayPauseContext;
|
|
41
|
+
constructor();
|
|
42
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsCarouselPlayPauseDirective, never>;
|
|
43
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BsCarouselPlayPauseDirective, "[bsCarouselPlayPause]", never, {}, {}, never, never, true, never>;
|
|
44
|
+
}
|
|
45
|
+
|
|
18
46
|
declare class BsCarouselComponent implements AfterViewInit, OnDestroy {
|
|
19
47
|
private platformId;
|
|
20
48
|
private destroyRef;
|
|
49
|
+
private readonly reducedMotion;
|
|
21
50
|
readonly colors: typeof Color;
|
|
22
51
|
readonly isServerSide: boolean;
|
|
23
52
|
currentImageIndex: _angular_core.WritableSignal<number>;
|
|
@@ -31,6 +60,15 @@ declare class BsCarouselComponent implements AfterViewInit, OnDestroy {
|
|
|
31
60
|
animation: _angular_core.InputSignal<"fade" | "slide" | "none">;
|
|
32
61
|
interval: _angular_core.InputSignal<number | null>;
|
|
33
62
|
wrap: _angular_core.InputSignal<boolean>;
|
|
63
|
+
ariaLabel: _angular_core.InputSignal<string | null>;
|
|
64
|
+
paused: _angular_core.ModelSignal<boolean>;
|
|
65
|
+
/**
|
|
66
|
+
* Template projected via `*bsCarouselPlayPause`. When set, the carousel
|
|
67
|
+
* renders it in a control row above the slides. Per APG, auto-advancing
|
|
68
|
+
* carousels must expose a play/pause control — this is how consumers
|
|
69
|
+
* provide one without us imposing a button style.
|
|
70
|
+
*/
|
|
71
|
+
readonly playPauseTemplate: _angular_core.WritableSignal<TemplateRef<BsCarouselPlayPauseContext> | null>;
|
|
34
72
|
slideChange: _angular_core.OutputEmitterRef<number>;
|
|
35
73
|
animationStart: _angular_core.OutputEmitterRef<void>;
|
|
36
74
|
animationEnd: _angular_core.OutputEmitterRef<void>;
|
|
@@ -41,8 +79,22 @@ declare class BsCarouselComponent implements AfterViewInit, OnDestroy {
|
|
|
41
79
|
firstImageTemplate: _angular_core.Signal<TemplateRef<any> | null>;
|
|
42
80
|
lastImageTemplate: _angular_core.Signal<TemplateRef<any> | null>;
|
|
43
81
|
readonly animationsDisabled: _angular_core.WritableSignal<boolean>;
|
|
44
|
-
|
|
82
|
+
/**
|
|
83
|
+
* `aria-live` value for the slide viewport. Stays `off` while
|
|
84
|
+
* auto-advance is actually rotating — otherwise the SR would re-read the
|
|
85
|
+
* active slide every interval — and switches to `polite` whenever the
|
|
86
|
+
* rotation is paused (by `paused`, missing/zero `interval`, or
|
|
87
|
+
* `prefers-reduced-motion`), so manual prev/next/indicator clicks get
|
|
88
|
+
* announced.
|
|
89
|
+
*/
|
|
90
|
+
readonly slideAriaLive: _angular_core.Signal<"off" | "polite">;
|
|
45
91
|
constructor();
|
|
92
|
+
/** Resume auto-advance. No-op if `interval` is unset or reduce-motion is on. */
|
|
93
|
+
play(): void;
|
|
94
|
+
/** Pause auto-advance. Manual prev/next/goto still work. */
|
|
95
|
+
pause(): void;
|
|
96
|
+
/** Toggle the paused state. Used as the `toggle` callback in `BsCarouselPlayPauseContext`. */
|
|
97
|
+
togglePaused: () => void;
|
|
46
98
|
private clearAutoAdvance;
|
|
47
99
|
previous(): void;
|
|
48
100
|
next(): void;
|
|
@@ -54,7 +106,7 @@ declare class BsCarouselComponent implements AfterViewInit, OnDestroy {
|
|
|
54
106
|
onContainerAnimationEnd(): void;
|
|
55
107
|
onImageIndexChange(index: number): void;
|
|
56
108
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsCarouselComponent, never>;
|
|
57
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BsCarouselComponent, "bs-carousel", never, { "indicators": { "alias": "indicators"; "required": false; "isSignal": true; }; "keyboardEvents": { "alias": "keyboardEvents"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "interval": { "alias": "interval"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; }, { "slideChange": "slideChange"; "animationStart": "animationStart"; "animationEnd": "animationEnd"; }, ["images"], never, true,
|
|
109
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BsCarouselComponent, "bs-carousel", never, { "indicators": { "alias": "indicators"; "required": false; "isSignal": true; }; "keyboardEvents": { "alias": "keyboardEvents"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "interval": { "alias": "interval"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "paused": { "alias": "paused"; "required": false; "isSignal": true; }; }, { "paused": "pausedChange"; "slideChange": "slideChange"; "animationStart": "animationStart"; "animationEnd": "animationEnd"; }, ["images"], never, true, [{ directive: typeof i1.BsReducedMotionDirective; inputs: {}; outputs: {}; }]>;
|
|
58
110
|
}
|
|
59
111
|
|
|
60
112
|
declare class BsCarouselImgDirective {
|
|
@@ -65,4 +117,5 @@ declare class BsCarouselImgDirective {
|
|
|
65
117
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BsCarouselImgDirective, "img", never, {}, {}, never, never, true, never>;
|
|
66
118
|
}
|
|
67
119
|
|
|
68
|
-
export { BsCarouselComponent, BsCarouselImageDirective, BsCarouselImgDirective };
|
|
120
|
+
export { BsCarouselComponent, BsCarouselImageDirective, BsCarouselImgDirective, BsCarouselPlayPauseDirective };
|
|
121
|
+
export type { BsCarouselPlayPauseContext };
|
|
@@ -3,6 +3,7 @@ import { TemplateRef } from '@angular/core';
|
|
|
3
3
|
import { HighlightResult } from 'highlight.js';
|
|
4
4
|
|
|
5
5
|
declare class BsCodeSnippetComponent {
|
|
6
|
+
private announcer;
|
|
6
7
|
constructor();
|
|
7
8
|
offcanvasVisible: _angular_core.ModelSignal<boolean>;
|
|
8
9
|
codeToCopy: _angular_core.InputSignal<string>;
|