@skra/ui 0.5.0 → 0.6.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/consumer-guide/README.md +88 -85
- package/consumer-guide/custom-components.md +154 -0
- package/consumer-guide/wrapping-patterns.md +98 -90
- package/fesm2022/skra-ui-button.mjs +2 -2
- package/fesm2022/skra-ui-button.mjs.map +1 -1
- package/fesm2022/skra-ui-checkbox.mjs +2 -2
- package/fesm2022/skra-ui-checkbox.mjs.map +1 -1
- package/fesm2022/skra-ui-core.mjs +28 -3
- package/fesm2022/skra-ui-core.mjs.map +1 -1
- package/fesm2022/skra-ui-input.mjs +2 -2
- package/fesm2022/skra-ui-input.mjs.map +1 -1
- package/fesm2022/skra-ui-menu.mjs +38 -14
- package/fesm2022/skra-ui-menu.mjs.map +1 -1
- package/fesm2022/skra-ui-popover.mjs +25 -9
- package/fesm2022/skra-ui-popover.mjs.map +1 -1
- package/fesm2022/skra-ui-radio.mjs +2 -2
- package/fesm2022/skra-ui-radio.mjs.map +1 -1
- package/fesm2022/skra-ui-rating-display.mjs +2 -2
- package/fesm2022/skra-ui-rating-display.mjs.map +1 -1
- package/fesm2022/skra-ui-star-rating.mjs +2 -2
- package/fesm2022/skra-ui-star-rating.mjs.map +1 -1
- package/fesm2022/skra-ui-switch.mjs +2 -2
- package/fesm2022/skra-ui-switch.mjs.map +1 -1
- package/fesm2022/skra-ui-tooltip.mjs +7 -2
- package/fesm2022/skra-ui-tooltip.mjs.map +1 -1
- package/package.json +2 -2
- package/types/skra-ui-core.d.ts.map +1 -1
- package/types/skra-ui-menu.d.ts +18 -6
- package/types/skra-ui-menu.d.ts.map +1 -1
- package/types/skra-ui-popover.d.ts +13 -4
- package/types/skra-ui-popover.d.ts.map +1 -1
- package/types/skra-ui-tooltip.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skra-ui-tooltip.mjs","sources":["../../../../libs/ui/tooltip/src/lib/tooltip/tooltip-panel.ts","../../../../libs/ui/tooltip/src/lib/tooltip/tooltip.ts","../../../../libs/ui/tooltip/src/skra-ui-tooltip.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n} from '@angular/core';\n\nlet nextId = 0;\n\n/**\n * SkraTooltipPanel — the floating tooltip surface (ADR 0044 native top layer via the Popover API).\n *\n * INTERNAL: never placed by consumers in a template. `SkraTooltip` creates it programmatically with\n * `ViewContainerRef.createComponent` (Angular-idiomatic, in-tree → inherits the design-context cascade\n * + the O-8 Shadow-DOM bridge per ADR 0044 §3 rule 3) and drives `showPopover()`/`hidePopover()` on the\n * host element.\n *\n * `popover=\"manual\"` (NOT `auto`): a hover/focus tooltip's show/hide is Forge-owned, not click-toggle\n * light-dismiss. `role=\"tooltip\"` is the AT semantics; the trigger references this panel's `id` via\n * `aria-describedby` (wired by the directive). The 13-axis Universal Surface (ADR 025) + motion live in\n * `tooltip.scss`; geometry (`left`/`top` + `data-skra-placement`) is written by `SkraPositioner`.\n *\n * Full contract: adr/specs/component-tooltip-spec.md.\n */\n@Component({\n selector: 'skra-tooltip-panel',\n standalone: true,\n template: '{{ text() }}',\n styleUrl: './tooltip.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n role: 'tooltip',\n popover: 'manual',\n '[id]': 'panelId',\n },\n})\nexport class SkraTooltipPanel {\n /** Tooltip text; set by the directive and kept in sync. */\n readonly text = input<string>('');\n\n /** Stable unique id — target of the trigger's `aria-describedby`. */\n readonly panelId = `skra-tooltip-${nextId++}`;\n}\n","import {\n ComponentRef,\n DestroyRef,\n Directive,\n ElementRef,\n Renderer2,\n ViewContainerRef,\n effect,\n inject,\n input,\n} from '@angular/core';\n\nimport {\n _attachPositioner,\n type SkraPlacement,\n type _PositionerHandle,\n} from '@skra/ui/core';\nimport { SkraTooltipPanel } from './tooltip-panel';\n\ndeclare const ngDevMode: boolean | undefined;\n\n/** A focusable trigger is required (WCAG 2.1.1); used only for the dev-mode nudge. */\nconst FOCUSABLE_SELECTOR =\n 'a[href],area[href],button,input,select,textarea,[tabindex],summary,' +\n '[contenteditable]:not([contenteditable=\"false\"])';\n\n/**\n * SkraTooltip — a supplementary, non-interactive text description on a focusable trigger, shown on\n * hover AND keyboard focus (ADR 0044 native top layer via the Popover API). Applied to the consumer's\n * own trigger: `<button skraButton [skraTooltip]=\"'Settings'\">`.\n *\n * The bulk of this directive is the WCAG 1.4.13 (Content on Hover or Focus) state machine — the\n * platform's `popover=\"manual\"` gives top-layer rendering but no dismiss/Escape, so Forge wires it:\n * - Dismissible: Escape hides WITHOUT moving focus.\n * - Hoverable: a hide grace-delay lets the pointer travel trigger→panel; hovering the panel keeps it.\n * - Persistent: no auto-timeout.\n * - Keyboard: focus shows immediately (no delay).\n *\n * Accessible-name contract (ADR 033, describedby-only): the tooltip is a DESCRIPTION, never the name —\n * it MERGES its panel id into the trigger's `aria-describedby` (preserving any existing value) and\n * removes only its own token on destroy. The trigger owns its own accessible name (an icon-only button\n * still needs its own `aria-label`). No `ariaLabel` input, no `aria-labelledby` wiring.\n *\n * The panel is created EAGERLY (hidden) so `aria-describedby` resolves and a screen reader announces\n * the description on first focus. Positioning is delegated to `SkraPositioner` (single JS path,\n * geometry-only inline; ADR 0044 §3 rules 4–5). Full contract: adr/specs/component-tooltip-spec.md.\n */\n@Directive({\n selector: '[skraTooltip]',\n standalone: true,\n exportAs: 'skraTooltip',\n host: {\n '(pointerenter)': 'onPointerEnter()',\n '(pointerleave)': 'onPointerLeave()',\n '(focusin)': 'onFocusIn()',\n '(focusout)': 'onFocusOut()',\n },\n})\nexport class SkraTooltip {\n /** The tooltip text (bound as `[skraTooltip]=\"...\"`). */\n readonly skraTooltip = input.required<string>();\n /** Placement intent; `flip`/`shift` adjust at runtime. */\n readonly placement = input<SkraPlacement>('top');\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly vcr = inject(ViewContainerRef);\n private readonly renderer = inject(Renderer2);\n\n private readonly panelRef: ComponentRef<SkraTooltipPanel>;\n private readonly panelEl: HTMLElement;\n private readonly panelId: string;\n\n private positioner?: _PositionerHandle;\n private showTimer?: ReturnType<typeof setTimeout>;\n private hideTimer?: ReturnType<typeof setTimeout>;\n private docEscapeUnlisten?: () => void;\n\n private open = false;\n private hovered = false;\n private focused = false;\n private panelHovered = false;\n\n constructor() {\n // Eager, in-tree panel (ADR 0044 §3 rule 3): inherits the design-context cascade + O-8 bridge.\n this.panelRef = this.vcr.createComponent(SkraTooltipPanel);\n this.panelEl = this.panelRef.location.nativeElement as HTMLElement;\n this.panelId = this.panelRef.instance.panelId;\n\n // Describedby-only (ADR 033) — merge, never overwrite.\n this.wireDescribedBy();\n\n // Keep the panel text in sync with the input (effect runs after inputs are set).\n effect(() => this.panelRef.setInput('text', this.skraTooltip()));\n\n // Hoverable (WCAG 1.4.13): hovering the panel itself keeps the tooltip open.\n this.renderer.listen(this.panelEl, 'pointerenter', () => {\n this.panelHovered = true;\n clearTimeout(this.hideTimer);\n });\n this.renderer.listen(this.panelEl, 'pointerleave', () => {\n this.panelHovered = false;\n this.scheduleHide();\n });\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n this.warnIfTriggerNotFocusable();\n }\n\n inject(DestroyRef).onDestroy(() => this.teardown());\n }\n\n // ── Trigger events ──────────────────────────────────────────────────────────\n protected onPointerEnter(): void {\n this.hovered = true;\n this.scheduleShow();\n }\n\n protected onPointerLeave(): void {\n this.hovered = false;\n this.scheduleHide();\n }\n\n protected onFocusIn(): void {\n this.focused = true;\n // Keyboard users get it immediately (WCAG 2.1.1) — no show-delay.\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.show();\n }\n\n protected onFocusOut(): void {\n this.focused = false;\n this.scheduleHide();\n }\n\n // ── Show / hide state machine ─────────────────────────────────────────────────\n private scheduleShow(): void {\n clearTimeout(this.hideTimer);\n if (this.open) return;\n clearTimeout(this.showTimer);\n this.showTimer = setTimeout(\n () => this.show(),\n this.cssTimeMs('--skra-comp-tooltip-show-delay'),\n );\n }\n\n private scheduleHide(): void {\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.hideTimer = setTimeout(() => {\n // Only hide once nothing keeps it engaged (hoverable + focus coordination).\n if (!this.hovered && !this.focused && !this.panelHovered) this.hide();\n }, this.cssTimeMs('--skra-comp-tooltip-hide-delay'));\n }\n\n private show(): void {\n clearTimeout(this.showTimer);\n if (this.open) return;\n this.open = true;\n\n this.panelEl.showPopover?.();\n\n this.positioner?.destroy();\n this.positioner = _attachPositioner(\n this.host.nativeElement,\n this.panelEl,\n () => ({\n placement: this.placement(),\n offset: this.cssLenPx('--skra-comp-tooltip-offset'),\n viewportPadding: this.cssLenPx('--skra-comp-tooltip-viewport-padding'),\n }),\n );\n\n // Dismissible (WCAG 1.4.13): Escape hides without moving focus. Transient document listener\n // (active only while open) so Escape works even for a hover-triggered tooltip whose trigger is\n // not focused — `popover=\"manual\"` does not provide platform Escape.\n this.docEscapeUnlisten = this.renderer.listen(\n 'document',\n 'keydown',\n (event: KeyboardEvent) => {\n if (event.key === 'Escape') this.hide();\n },\n );\n }\n\n private hide(): void {\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n if (!this.open) return;\n this.open = false;\n\n this.panelEl.hidePopover?.();\n this.positioner?.destroy();\n this.positioner = undefined;\n this.docEscapeUnlisten?.();\n this.docEscapeUnlisten = undefined;\n }\n\n // ── aria-describedby merge (ADR 033 / ADR 013-style wiring) ───────────────────\n private wireDescribedBy(): void {\n const tokens = this.describedByTokens();\n if (!tokens.includes(this.panelId)) tokens.push(this.panelId);\n this.renderer.setAttribute(\n this.host.nativeElement,\n 'aria-describedby',\n tokens.join(' '),\n );\n }\n\n private unwireDescribedBy(): void {\n const remaining = this.describedByTokens().filter(\n (t) => t !== this.panelId,\n );\n if (remaining.length) {\n this.renderer.setAttribute(\n this.host.nativeElement,\n 'aria-describedby',\n remaining.join(' '),\n );\n } else {\n this.renderer.removeAttribute(\n this.host.nativeElement,\n 'aria-describedby',\n );\n }\n }\n\n private describedByTokens(): string[] {\n return (this.host.nativeElement.getAttribute('aria-describedby') ?? '')\n .split(/\\s+/)\n .filter(Boolean);\n }\n\n // ── token resolution helpers (read computed comp tokens at runtime) ───────────\n private cssTimeMs(prop: string): number {\n const raw = getComputedStyle(this.panelEl).getPropertyValue(prop).trim();\n if (raw.endsWith('ms')) return parseFloat(raw);\n if (raw.endsWith('s')) return parseFloat(raw) * 1000;\n return parseFloat(raw) || 0;\n }\n\n private cssLenPx(prop: string): number {\n const raw = getComputedStyle(this.panelEl).getPropertyValue(prop).trim();\n if (raw.endsWith('px')) return parseFloat(raw);\n if (raw.endsWith('rem')) {\n const rootFontSize =\n parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\n return parseFloat(raw) * rootFontSize;\n }\n return parseFloat(raw) || 0;\n }\n\n private warnIfTriggerNotFocusable(): void {\n const el = this.host.nativeElement;\n if (!el.matches(FOCUSABLE_SELECTOR)) {\n console.warn(\n '[skraTooltip] host is not focusable — the tooltip is unreachable by keyboard ' +\n '(WCAG 2.1.1) and never shows on focus. Apply it to a button/link/form control, ' +\n 'or add tabindex to the trigger.',\n );\n }\n }\n\n private teardown(): void {\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.docEscapeUnlisten?.();\n this.positioner?.destroy();\n this.unwireDescribedBy();\n this.panelRef.destroy();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skra-ui-tooltip.mjs","sources":["../../../../libs/ui/tooltip/src/lib/tooltip/tooltip-panel.ts","../../../../libs/ui/tooltip/src/lib/tooltip/tooltip.ts","../../../../libs/ui/tooltip/src/skra-ui-tooltip.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n} from '@angular/core';\n\nlet nextId = 0;\n\n/**\n * SkraTooltipPanel — the floating tooltip surface (ADR 0044 native top layer via the Popover API).\n *\n * INTERNAL: never placed by consumers in a template. `SkraTooltip` creates it programmatically with\n * `ViewContainerRef.createComponent` (Angular-idiomatic, in-tree → inherits the design-context cascade\n * + the O-8 Shadow-DOM bridge per ADR 0044 §3 rule 3) and drives `showPopover()`/`hidePopover()` on the\n * host element.\n *\n * `popover=\"manual\"` (NOT `auto`): a hover/focus tooltip's show/hide is Forge-owned, not click-toggle\n * light-dismiss. `role=\"tooltip\"` is the AT semantics; the trigger references this panel's `id` via\n * `aria-describedby` (wired by the directive). The 13-axis Universal Surface (ADR 025) + motion live in\n * `tooltip.scss`; geometry (`left`/`top` + `data-skra-placement`) is written by `SkraPositioner`.\n *\n * Full contract: adr/specs/component-tooltip-spec.md.\n */\n@Component({\n selector: 'skra-tooltip-panel',\n standalone: true,\n template: '{{ text() }}',\n styleUrl: './tooltip.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n role: 'tooltip',\n popover: 'manual',\n '[id]': 'panelId',\n },\n})\nexport class SkraTooltipPanel {\n /** Tooltip text; set by the directive and kept in sync. */\n readonly text = input<string>('');\n\n /** Stable unique id — target of the trigger's `aria-describedby`. */\n readonly panelId = `skra-tooltip-${nextId++}`;\n}\n","import {\r\n ComponentRef,\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n ViewContainerRef,\r\n effect,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\n\r\nimport {\r\n _attachPositioner,\r\n type SkraPlacement,\r\n type _PositionerHandle,\r\n} from '@skra/ui/core';\r\nimport { SkraTooltipPanel } from './tooltip-panel';\r\n\r\ndeclare const ngDevMode: boolean | undefined;\r\n\r\n/** A focusable trigger is required (WCAG 2.1.1); used only for the dev-mode nudge. */\r\n// Keyboard-reachable only: a `disabled` control is not focusable (and in most engines fires no\r\n// pointer events either), and `tabindex=\"-1\"` is programmatically focusable but not tab-reachable.\r\n// Both were false negatives before — and a tooltip on a `<button disabled>` is THE canonical\r\n// tooltip a11y trap, i.e. exactly what this dev-mode guard exists to catch.\r\nconst FOCUSABLE_SELECTOR =\r\n 'a[href],area[href],button:not([disabled]),input:not([disabled]),' +\r\n 'select:not([disabled]),textarea:not([disabled]),summary,' +\r\n '[tabindex]:not([tabindex^=\"-\"]),[contenteditable]:not([contenteditable=\"false\"])';\r\n\r\n/**\r\n * SkraTooltip — a supplementary, non-interactive text description on a focusable trigger, shown on\r\n * hover AND keyboard focus (ADR 0044 native top layer via the Popover API). Applied to the consumer's\r\n * own trigger: `<button skraButton [skraTooltip]=\"'Settings'\">`.\r\n *\r\n * The bulk of this directive is the WCAG 1.4.13 (Content on Hover or Focus) state machine — the\r\n * platform's `popover=\"manual\"` gives top-layer rendering but no dismiss/Escape, so Forge wires it:\r\n * - Dismissible: Escape hides WITHOUT moving focus.\r\n * - Hoverable: a hide grace-delay lets the pointer travel trigger→panel; hovering the panel keeps it.\r\n * - Persistent: no auto-timeout.\r\n * - Keyboard: focus shows immediately (no delay).\r\n *\r\n * Accessible-name contract (ADR 033, describedby-only): the tooltip is a DESCRIPTION, never the name —\r\n * it MERGES its panel id into the trigger's `aria-describedby` (preserving any existing value) and\r\n * removes only its own token on destroy. The trigger owns its own accessible name (an icon-only button\r\n * still needs its own `aria-label`). No `ariaLabel` input, no `aria-labelledby` wiring.\r\n *\r\n * The panel is created EAGERLY (hidden) so `aria-describedby` resolves and a screen reader announces\r\n * the description on first focus. Positioning is delegated to `SkraPositioner` (single JS path,\r\n * geometry-only inline; ADR 0044 §3 rules 4–5). Full contract: adr/specs/component-tooltip-spec.md.\r\n */\r\n@Directive({\r\n selector: '[skraTooltip]',\r\n standalone: true,\r\n exportAs: 'skraTooltip',\r\n host: {\r\n '(pointerenter)': 'onPointerEnter()',\r\n '(pointerleave)': 'onPointerLeave()',\r\n '(focusin)': 'onFocusIn()',\r\n '(focusout)': 'onFocusOut()',\r\n },\r\n})\r\nexport class SkraTooltip {\r\n /** The tooltip text (bound as `[skraTooltip]=\"...\"`). */\r\n readonly skraTooltip = input.required<string>();\r\n /** Placement intent; `flip`/`shift` adjust at runtime. */\r\n readonly placement = input<SkraPlacement>('top');\r\n\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly renderer = inject(Renderer2);\r\n\r\n private readonly panelRef: ComponentRef<SkraTooltipPanel>;\r\n private readonly panelEl: HTMLElement;\r\n private readonly panelId: string;\r\n\r\n private positioner?: _PositionerHandle;\r\n private showTimer?: ReturnType<typeof setTimeout>;\r\n private hideTimer?: ReturnType<typeof setTimeout>;\r\n private docEscapeUnlisten?: () => void;\r\n\r\n private open = false;\r\n private hovered = false;\r\n private focused = false;\r\n private panelHovered = false;\r\n\r\n constructor() {\r\n // Eager, in-tree panel (ADR 0044 §3 rule 3): inherits the design-context cascade + O-8 bridge.\r\n this.panelRef = this.vcr.createComponent(SkraTooltipPanel);\r\n this.panelEl = this.panelRef.location.nativeElement as HTMLElement;\r\n this.panelId = this.panelRef.instance.panelId;\r\n\r\n // Describedby-only (ADR 033) — merge, never overwrite.\r\n this.wireDescribedBy();\r\n\r\n // Keep the panel text in sync with the input (effect runs after inputs are set).\r\n effect(() => this.panelRef.setInput('text', this.skraTooltip()));\r\n\r\n // Hoverable (WCAG 1.4.13): hovering the panel itself keeps the tooltip open.\r\n this.renderer.listen(this.panelEl, 'pointerenter', () => {\r\n this.panelHovered = true;\r\n clearTimeout(this.hideTimer);\r\n });\r\n this.renderer.listen(this.panelEl, 'pointerleave', () => {\r\n this.panelHovered = false;\r\n this.scheduleHide();\r\n });\r\n\r\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\r\n this.warnIfTriggerNotFocusable();\r\n }\r\n\r\n inject(DestroyRef).onDestroy(() => this.teardown());\r\n }\r\n\r\n // ── Trigger events ──────────────────────────────────────────────────────────\r\n protected onPointerEnter(): void {\r\n this.hovered = true;\r\n this.scheduleShow();\r\n }\r\n\r\n protected onPointerLeave(): void {\r\n this.hovered = false;\r\n this.scheduleHide();\r\n }\r\n\r\n protected onFocusIn(): void {\r\n this.focused = true;\r\n // Keyboard users get it immediately (WCAG 2.1.1) — no show-delay.\r\n clearTimeout(this.showTimer);\r\n clearTimeout(this.hideTimer);\r\n this.show();\r\n }\r\n\r\n protected onFocusOut(): void {\r\n this.focused = false;\r\n this.scheduleHide();\r\n }\r\n\r\n // ── Show / hide state machine ─────────────────────────────────────────────────\r\n private scheduleShow(): void {\r\n clearTimeout(this.hideTimer);\r\n if (this.open) return;\r\n clearTimeout(this.showTimer);\r\n this.showTimer = setTimeout(\r\n () => this.show(),\r\n this.cssTimeMs('--skra-comp-tooltip-show-delay'),\r\n );\r\n }\r\n\r\n private scheduleHide(): void {\r\n clearTimeout(this.showTimer);\r\n clearTimeout(this.hideTimer);\r\n this.hideTimer = setTimeout(() => {\r\n // Only hide once nothing keeps it engaged (hoverable + focus coordination).\r\n if (!this.hovered && !this.focused && !this.panelHovered) this.hide();\r\n }, this.cssTimeMs('--skra-comp-tooltip-hide-delay'));\r\n }\r\n\r\n private show(): void {\r\n clearTimeout(this.showTimer);\r\n if (this.open) return;\r\n this.open = true;\r\n\r\n this.panelEl.showPopover?.();\r\n\r\n this.positioner?.destroy();\r\n this.positioner = _attachPositioner(\r\n this.host.nativeElement,\r\n this.panelEl,\r\n () => ({\r\n placement: this.placement(),\r\n offset: this.cssLenPx('--skra-comp-tooltip-offset'),\r\n viewportPadding: this.cssLenPx('--skra-comp-tooltip-viewport-padding'),\r\n }),\r\n );\r\n\r\n // Dismissible (WCAG 1.4.13): Escape hides without moving focus. Transient document listener\r\n // (active only while open) so Escape works even for a hover-triggered tooltip whose trigger is\r\n // not focused — `popover=\"manual\"` does not provide platform Escape.\r\n this.docEscapeUnlisten = this.renderer.listen(\r\n 'document',\r\n 'keydown',\r\n (event: KeyboardEvent) => {\r\n if (event.key === 'Escape') this.hide();\r\n },\r\n );\r\n }\r\n\r\n private hide(): void {\r\n clearTimeout(this.showTimer);\r\n clearTimeout(this.hideTimer);\r\n if (!this.open) return;\r\n this.open = false;\r\n\r\n this.panelEl.hidePopover?.();\r\n this.positioner?.destroy();\r\n this.positioner = undefined;\r\n this.docEscapeUnlisten?.();\r\n this.docEscapeUnlisten = undefined;\r\n }\r\n\r\n // ── aria-describedby merge (ADR 033 / ADR 013-style wiring) ───────────────────\r\n private wireDescribedBy(): void {\r\n const tokens = this.describedByTokens();\r\n if (!tokens.includes(this.panelId)) tokens.push(this.panelId);\r\n this.renderer.setAttribute(\r\n this.host.nativeElement,\r\n 'aria-describedby',\r\n tokens.join(' '),\r\n );\r\n }\r\n\r\n private unwireDescribedBy(): void {\r\n const remaining = this.describedByTokens().filter(\r\n (t) => t !== this.panelId,\r\n );\r\n if (remaining.length) {\r\n this.renderer.setAttribute(\r\n this.host.nativeElement,\r\n 'aria-describedby',\r\n remaining.join(' '),\r\n );\r\n } else {\r\n this.renderer.removeAttribute(\r\n this.host.nativeElement,\r\n 'aria-describedby',\r\n );\r\n }\r\n }\r\n\r\n private describedByTokens(): string[] {\r\n return (this.host.nativeElement.getAttribute('aria-describedby') ?? '')\r\n .split(/\\s+/)\r\n .filter(Boolean);\r\n }\r\n\r\n // ── token resolution helpers (read computed comp tokens at runtime) ───────────\r\n private cssTimeMs(prop: string): number {\r\n const raw = getComputedStyle(this.panelEl).getPropertyValue(prop).trim();\r\n if (raw.endsWith('ms')) return parseFloat(raw);\r\n if (raw.endsWith('s')) return parseFloat(raw) * 1000;\r\n return parseFloat(raw) || 0;\r\n }\r\n\r\n private cssLenPx(prop: string): number {\r\n const raw = getComputedStyle(this.panelEl).getPropertyValue(prop).trim();\r\n if (raw.endsWith('px')) return parseFloat(raw);\r\n if (raw.endsWith('rem')) {\r\n const rootFontSize =\r\n parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\r\n return parseFloat(raw) * rootFontSize;\r\n }\r\n return parseFloat(raw) || 0;\r\n }\r\n\r\n private warnIfTriggerNotFocusable(): void {\r\n const el = this.host.nativeElement;\r\n if (!el.matches(FOCUSABLE_SELECTOR)) {\r\n console.warn(\r\n '[skraTooltip] host is not focusable — the tooltip is unreachable by keyboard ' +\r\n '(WCAG 2.1.1) and never shows on focus. Apply it to a button/link/form control, ' +\r\n 'or add tabindex to the trigger.',\r\n );\r\n }\r\n }\r\n\r\n private teardown(): void {\r\n clearTimeout(this.showTimer);\r\n clearTimeout(this.hideTimer);\r\n this.docEscapeUnlisten?.();\r\n this.positioner?.destroy();\r\n this.unwireDescribedBy();\r\n this.panelRef.destroy();\r\n }\r\n}\r\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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skra/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"@angular/core": ">=22.0.0 <23.0.0",
|
|
11
11
|
"@angular/common": ">=22.0.0 <23.0.0",
|
|
12
12
|
"@angular/cdk": ">=22.0.0 <23.0.0",
|
|
13
|
-
"@skra/tokens": "^0.
|
|
13
|
+
"@skra/tokens": "^0.6.0"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@floating-ui/dom": "^1.7.6",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skra-ui-core.d.ts","sources":["../../../../libs/ui/core/src/lib/select/select-types.ts","../../../../libs/ui/core/src/lib/select/option.ts","../../../../libs/ui/core/src/lib/select/option.directives.ts","../../../../libs/ui/core/src/lib/select/select-trigger.ts","../../../../libs/ui/core/src/lib/positioning/positioner.ts","../../../../libs/ui/core/src/lib/select/listbox-keyboard.ts","../../../../libs/ui/core/src/lib/select/listbox-widget-base.ts","../../../../libs/ui/core/src/lib/select/select-base.ts"],"mappings":";;;;AAEA;;;;;AAKG;UACc,gBAAgB;;AAE/B;AACA;;;;AAIG;AACH;AACA;;;;AAIG;AACH;AACD;AAED;;;;;AAKG;UACc,uBAAuB;AACtC;;;;;AAKA;AACD;AAED;;;;AAIG;AACH,cAAa,kBAAkB,EAAA,cAAA,CAAA,gBAAA;;ACvB/B;;;;;;;;;;;;;;;AAeG;AACH,cAkCa,UAAU,yBAAyB,uBAAuB;;oBAEvD,aAAA,CAAA,WAAA;;;AAKd;AACA;AAEA;AACA;AACA,mCAA6B,aAAA,CAAA,MAAA;AAC7B,kCAA4B,aAAA,CAAA,MAAA;;AAG5B,+BAAyB,aAAA,CAAA,cAAA;AAEzB;;;;AAIG;AACH,iCAA2B,aAAA,CAAA,MAAA;;AAG3B,iCAA2B,aAAA,CAAA,MAAA;;AAgB3B;AAGA;AAIA;;;;;AAKG;AACH;AAqBA;;;;oDA5EW,UAAU;sDAAV,UAAU;AAyFtB;;AC/JD;;;AAGG;AACH,cAIa,iBAAiB;oDAAjB,iBAAiB;sDAAjB,iBAAiB;AAAG;AAEjC;;;AAGG;AACH,cAIa,gBAAgB;oDAAhB,gBAAgB;sDAAhB,gBAAgB;AAAG;;AClBhC;;;;;;;;;;;;;AAaG;AACH,cAIa,iBAAiB;oDAAjB,iBAAiB;sDAAjB,iBAAiB;AAAG;;ACXjC;;;;;;;;;;;;;;AAcG;AAEH;AACM,KAAM,aAAa;UAER,kBAAkB;;eAEtB,aAAa;;;;;AAKzB;UAEgB,iBAAiB;;;AAGjC;AAED;;;;;AAKG;AACH,iBAAgB,iBAAiB,YACpB,WAAW,YACZ,WAAW,iBACN,kBAAkB,GAChC,iBAAiB;;AChDpB;;;;;;;;;;AAUG;AACH,cAAa,oBAAoB;;;;;AAM/B,mCACkB,uBAAuB;AAKzC;;;;AAIG;AACH,6BAAyB,uBAAuB;;AAiBhD,qBAAiB,aAAa;AAI9B,sBAAkB,uBAAuB;;AAKzC,oBAAgB,uBAAuB;;AAOvC;AAIA;AAID;;AC/CD;;;;;;;;;;;;;;;;;;;;;AAqBG;AACH,uBAQsB,sBAAsB,yBAC/B,gBAAgB;;0BAGP,aAAA,CAAA,WAAA;;0BAEA,aAAA,CAAA,WAAA;;wBAEF,aAAA,CAAA,WAAA,CAAA,aAAA;;uBAED,aAAA,CAAA,wBAAA;uBACA,aAAA,CAAA,wBAAA;AAEjB,gCAA0B,aAAA,CAAA,MAAA,UAAA,UAAA;AAE1B,mCAA6B,aAAA,CAAA,MAAA,CAAA,UAAA,CAAA,WAAA;AAC7B,iCAA2B,aAAA,CAAA,MAAA,CAAA,UAAA,CAAA,WAAA;AAE3B,gCAA0B,gBAAA;AAC1B,iCAA2B,oBAAA;;AAG3B,+BAAyB,aAAA,CAAA,cAAA;AACzB,uCAAiC,aAAA,CAAA,cAAA;;;;AAQjC,mCAA6B,aAAA,CAAA,MAAA;AAG7B,mCAA6B,aAAA,CAAA,MAAA;AAG7B,iCAA2B,aAAA,CAAA,MAAA;AAG3B,mCAA6B,aAAA,CAAA,MAAA;AAG7B,kCAA4B,aAAA,CAAA,MAAA;AAG5B,oCAA8B,aAAA,CAAA,MAAA;;;AAgB9B;;AAEA;;AAEA;;AAEA,yCAAqC,uBAAuB;AAG5D,mCAA+B,KAAK;AAOpC;;;;;AAKG;AACH,mCAA+B,WAAW;AAI1C;AAqBA;;;;;;AAqBA;AAaA;oDA/IoB,sBAAsB;sDAAtB,sBAAsB;AAmJ3C;;ACtMD;;;;;;;;;;;;AAYG;AACH,uBACsB,eAAe,sBAE3B,sBAAsB;;AAE9B;;AAGA,wCAAkC,aAAA,CAAA,MAAA,CAAA,WAAA;AAKlC,oCAAgC,UAAU;AAK1C,sCAAkC,aAAa;oDAjB3B,eAAe;sDAAf,eAAe;
|
|
1
|
+
{"version":3,"file":"skra-ui-core.d.ts","sources":["../../../../libs/ui/core/src/lib/select/select-types.ts","../../../../libs/ui/core/src/lib/select/option.ts","../../../../libs/ui/core/src/lib/select/option.directives.ts","../../../../libs/ui/core/src/lib/select/select-trigger.ts","../../../../libs/ui/core/src/lib/positioning/positioner.ts","../../../../libs/ui/core/src/lib/select/listbox-keyboard.ts","../../../../libs/ui/core/src/lib/select/listbox-widget-base.ts","../../../../libs/ui/core/src/lib/select/select-base.ts"],"mappings":";;;;AAEA;;;;;AAKG;UACc,gBAAgB;;AAE/B;AACA;;;;AAIG;AACH;AACA;;;;AAIG;AACH;AACD;AAED;;;;;AAKG;UACc,uBAAuB;AACtC;;;;;AAKA;AACD;AAED;;;;AAIG;AACH,cAAa,kBAAkB,EAAA,cAAA,CAAA,gBAAA;;ACvB/B;;;;;;;;;;;;;;;AAeG;AACH,cAkCa,UAAU,yBAAyB,uBAAuB;;oBAEvD,aAAA,CAAA,WAAA;;;AAKd;AACA;AAEA;AACA;AACA,mCAA6B,aAAA,CAAA,MAAA;AAC7B,kCAA4B,aAAA,CAAA,MAAA;;AAG5B,+BAAyB,aAAA,CAAA,cAAA;AAEzB;;;;AAIG;AACH,iCAA2B,aAAA,CAAA,MAAA;;AAG3B,iCAA2B,aAAA,CAAA,MAAA;;AAgB3B;AAGA;AAIA;;;;;AAKG;AACH;AAqBA;;;;oDA5EW,UAAU;sDAAV,UAAU;AAyFtB;;AC/JD;;;AAGG;AACH,cAIa,iBAAiB;oDAAjB,iBAAiB;sDAAjB,iBAAiB;AAAG;AAEjC;;;AAGG;AACH,cAIa,gBAAgB;oDAAhB,gBAAgB;sDAAhB,gBAAgB;AAAG;;AClBhC;;;;;;;;;;;;;AAaG;AACH,cAIa,iBAAiB;oDAAjB,iBAAiB;sDAAjB,iBAAiB;AAAG;;ACXjC;;;;;;;;;;;;;;AAcG;AAEH;AACM,KAAM,aAAa;UAER,kBAAkB;;eAEtB,aAAa;;;;;AAKzB;UAEgB,iBAAiB;;;AAGjC;AAED;;;;;AAKG;AACH,iBAAgB,iBAAiB,YACpB,WAAW,YACZ,WAAW,iBACN,kBAAkB,GAChC,iBAAiB;;AChDpB;;;;;;;;;;AAUG;AACH,cAAa,oBAAoB;;;;;AAM/B,mCACkB,uBAAuB;AAKzC;;;;AAIG;AACH,6BAAyB,uBAAuB;;AAiBhD,qBAAiB,aAAa;AAI9B,sBAAkB,uBAAuB;;AAKzC,oBAAgB,uBAAuB;;AAOvC;AAIA;AAID;;AC/CD;;;;;;;;;;;;;;;;;;;;;AAqBG;AACH,uBAQsB,sBAAsB,yBAC/B,gBAAgB;;0BAGP,aAAA,CAAA,WAAA;;0BAEA,aAAA,CAAA,WAAA;;wBAEF,aAAA,CAAA,WAAA,CAAA,aAAA;;uBAED,aAAA,CAAA,wBAAA;uBACA,aAAA,CAAA,wBAAA;AAEjB,gCAA0B,aAAA,CAAA,MAAA,UAAA,UAAA;AAE1B,mCAA6B,aAAA,CAAA,MAAA,CAAA,UAAA,CAAA,WAAA;AAC7B,iCAA2B,aAAA,CAAA,MAAA,CAAA,UAAA,CAAA,WAAA;AAE3B,gCAA0B,gBAAA;AAC1B,iCAA2B,oBAAA;;AAG3B,+BAAyB,aAAA,CAAA,cAAA;AACzB,uCAAiC,aAAA,CAAA,cAAA;;;;AAQjC,mCAA6B,aAAA,CAAA,MAAA;AAG7B,mCAA6B,aAAA,CAAA,MAAA;AAG7B,iCAA2B,aAAA,CAAA,MAAA;AAG3B,mCAA6B,aAAA,CAAA,MAAA;AAG7B,kCAA4B,aAAA,CAAA,MAAA;AAG5B,oCAA8B,aAAA,CAAA,MAAA;;;AAgB9B;;AAEA;;AAEA;;AAEA,yCAAqC,uBAAuB;AAG5D,mCAA+B,KAAK;AAOpC;;;;;AAKG;AACH,mCAA+B,WAAW;AAI1C;AAqBA;;;;;;AAqBA;AAaA;oDA/IoB,sBAAsB;sDAAtB,sBAAsB;AAmJ3C;;ACtMD;;;;;;;;;;;;AAYG;AACH,uBACsB,eAAe,sBAE3B,sBAAsB;;AAE9B;;AAGA,wCAAkC,aAAA,CAAA,MAAA,CAAA,WAAA;AAKlC,oCAAgC,UAAU;AAK1C,sCAAkC,aAAa;oDAjB3B,eAAe;sDAAf,eAAe;AAgEpC;;;;","names":[]}
|
package/types/skra-ui-menu.d.ts
CHANGED
|
@@ -31,11 +31,16 @@ interface SkraMenuPanel {
|
|
|
31
31
|
* <button skraButton popovertarget="actions" aria-haspopup="menu">Actions</button>
|
|
32
32
|
* <skra-menu id="actions">
|
|
33
33
|
* <button skraMenuItem (click)="edit()">Edit</button>
|
|
34
|
-
* <button skraMenuItem disabled (click)="archive()">Archive</button>
|
|
34
|
+
* <button skraMenuItem aria-disabled="true" (click)="archive()">Archive</button>
|
|
35
35
|
* <button skraMenuItem (click)="remove()">Delete</button>
|
|
36
36
|
* </skra-menu>
|
|
37
37
|
*
|
|
38
|
-
*
|
|
38
|
+
* A disabled item is `aria-disabled="true"` set by the CONSUMER — never native `disabled` (boundary
|
|
39
|
+
* #9, native-attr-first): the item stays focusable and in the roving order per APG, and a
|
|
40
|
+
* capture-phase guard on the panel blocks activation. Native `disabled` would keep it in the roving
|
|
41
|
+
* order but make `focus()` a no-op, so arrow navigation would silently dead-end on that row.
|
|
42
|
+
*
|
|
43
|
+
* Skra adds, on top of the Popover substrate: the `role="menu"` keyboard model via `SkraMenuKeyboard`
|
|
39
44
|
* (CDK `FocusKeyManager` — Down/Up roving + wrap, Home/End, type-ahead, Tab-dismiss), **focus moving
|
|
40
45
|
* INTO the menu on open** (a composite widget — unlike non-modal Popover; the per-component ADR 0044
|
|
41
46
|
* §3 rule-8 decision), and the trigger's disclosure ARIA (`aria-haspopup="menu"` / `aria-controls` /
|
|
@@ -52,9 +57,10 @@ declare class SkraMenu implements SkraMenuPanel {
|
|
|
52
57
|
private readonly host;
|
|
53
58
|
private readonly renderer;
|
|
54
59
|
private readonly keyboard;
|
|
55
|
-
/** The consumer's `[popovertarget]` button
|
|
60
|
+
/** The consumer's `[popovertarget]` button; resolution is retried until it succeeds. */
|
|
56
61
|
private trigger;
|
|
57
|
-
|
|
62
|
+
/** Latches the dev warning, NOT the resolution — see `ensureTrigger()`. */
|
|
63
|
+
private warned;
|
|
58
64
|
private positioner?;
|
|
59
65
|
constructor();
|
|
60
66
|
/** SKRA_MENU contract — close on item activation (native focus-return to the trigger). */
|
|
@@ -67,8 +73,14 @@ declare class SkraMenu implements SkraMenuPanel {
|
|
|
67
73
|
private onClose;
|
|
68
74
|
/**
|
|
69
75
|
* Resolve the `[popovertarget]` trigger and establish the menu disclosure ARIA on it (sanctioned a11y
|
|
70
|
-
* wiring, ADR 013-style — not style mutation).
|
|
71
|
-
*
|
|
76
|
+
* wiring, ADR 013-style — not style mutation). Returns the trigger (or null for an orphan menu,
|
|
77
|
+
* dev-warned once).
|
|
78
|
+
*
|
|
79
|
+
* Idempotent on SUCCESS only — see the same note on `SkraPopover.ensureTrigger()`. Latching on
|
|
80
|
+
* failure would permanently strand a trigger rendered behind an `@if` / lazy route / `@defer`:
|
|
81
|
+
* no disclosure ARIA, and `onOpen()` bails on the null anchor so the panel opens unpositioned at
|
|
82
|
+
* viewport 0,0 — the exact signature of impl-finding #1 in the spec. The dev warning latches
|
|
83
|
+
* separately via `warned`.
|
|
72
84
|
*/
|
|
73
85
|
private ensureTrigger;
|
|
74
86
|
/** Read a length comp token (px/rem) off the host computed style for the positioner. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skra-ui-menu.d.ts","sources":["../../../../libs/ui/menu/src/lib/menu/menu-types.ts","../../../../libs/ui/menu/src/lib/menu/menu.ts","../../../../libs/ui/menu/src/lib/menu/menu-item.ts"],"mappings":";;;;AAEA;;;;AAIG;UACc,oBAAoB;;;;AAIpC;AAED;UACiB,aAAa;;;AAG7B;;ACQD
|
|
1
|
+
{"version":3,"file":"skra-ui-menu.d.ts","sources":["../../../../libs/ui/menu/src/lib/menu/menu-types.ts","../../../../libs/ui/menu/src/lib/menu/menu.ts","../../../../libs/ui/menu/src/lib/menu/menu-item.ts"],"mappings":";;;;AAEA;;;;AAIG;UACc,oBAAoB;;;;AAIpC;AAED;UACiB,aAAa;;;AAG7B;;ACQD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BG;AACH,cAoBa,QAAS,YAAW,aAAa;;wBAE1BA,EAAA,CAAA,WAAA,CAAA,aAAA;AAElB;AAIA;AACA;AACA;;;;;;;;AAqCA;;AAKA;AAWA;AAKA;AAIA;AAmBA;AAQA;;;;;;;;;;AAUG;AACH;;AAgDA;;AAcA;AAUA;yCAtLW,QAAQ;2CAAR,QAAQ;AAmMpB;;ACpQD;;;;;;;;;;;;;;;;;AAiBG;AACH,cAea,YAAa,YAAW,oBAAoB;AACvD;AACA;;AAcA;AAGA;;AAIA;AAIA,gCAA4B,UAAU;yCA3B3B,YAAY;2CAAZ,YAAY;AAyCxB;;;;","names":["_angular_core"]}
|
|
@@ -32,9 +32,10 @@ declare class SkraPopover {
|
|
|
32
32
|
readonly placement: i0.InputSignal<SkraPlacement>;
|
|
33
33
|
private readonly host;
|
|
34
34
|
private readonly renderer;
|
|
35
|
-
/** The consumer's `[popovertarget]` button
|
|
35
|
+
/** The consumer's `[popovertarget]` button; resolution is retried until it succeeds. */
|
|
36
36
|
private trigger;
|
|
37
|
-
|
|
37
|
+
/** Latches the dev warning, NOT the resolution — see `ensureTrigger()`. */
|
|
38
|
+
private warned;
|
|
38
39
|
private positioner?;
|
|
39
40
|
constructor();
|
|
40
41
|
private readonly onToggleNative;
|
|
@@ -42,8 +43,16 @@ declare class SkraPopover {
|
|
|
42
43
|
private onClose;
|
|
43
44
|
/**
|
|
44
45
|
* Resolve the `[popovertarget]` trigger and establish the disclosure ARIA on it (sanctioned a11y
|
|
45
|
-
* wiring, ADR 013-style — not style mutation).
|
|
46
|
-
*
|
|
46
|
+
* wiring, ADR 013-style — not style mutation). Returns the trigger (or null for an orphan
|
|
47
|
+
* popover, dev-warned once).
|
|
48
|
+
*
|
|
49
|
+
* Idempotent on SUCCESS only. It deliberately does NOT latch on failure: a trigger behind an
|
|
50
|
+
* `@if`, a lazy route or a `@defer` block is simply not in the DOM at the `afterNextRender` tick,
|
|
51
|
+
* and latching there would strand it forever — no disclosure ARIA and, because `onOpen()` bails
|
|
52
|
+
* on a null anchor, an unpositioned panel at viewport 0,0. Retrying on each open is cheap (one
|
|
53
|
+
* `querySelectorAll` per open, only while still unresolved) and makes the `onOpen()` call a real
|
|
54
|
+
* safety net rather than the dead code it was. The dev warning latches separately via `warned`
|
|
55
|
+
* so a late-rendered trigger does not spam the console once per open.
|
|
47
56
|
*/
|
|
48
57
|
private ensureTrigger;
|
|
49
58
|
/** Read a length comp token (px/rem) off the host computed style for the positioner. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skra-ui-popover.d.ts","sources":["../../../../libs/ui/popover/src/lib/popover/popover.ts"],"mappings":";;;;AAoBA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACH,cAkBa,WAAW;;wBAEJA,EAAA,CAAA,WAAA,CAAA,aAAA;AAElB;AACA
|
|
1
|
+
{"version":3,"file":"skra-ui-popover.d.ts","sources":["../../../../libs/ui/popover/src/lib/popover/popover.ts"],"mappings":";;;;AAoBA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACH,cAkBa,WAAW;;wBAEJA,EAAA,CAAA,WAAA,CAAA,aAAA;AAElB;AACA;;;;;;;AAsBA;AAKA;AAoBA;AAQA;;;;;;;;;;;;AAYG;AACH;;AAgDA;AAaA;yCAtIW,WAAW;2CAAX,WAAW;AA8IvB;;;;","names":["_angular_core"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skra-ui-tooltip.d.ts","sources":["../../../../libs/ui/tooltip/src/lib/tooltip/tooltip.ts","../../../../libs/ui/tooltip/src/lib/tooltip/tooltip-panel.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"skra-ui-tooltip.d.ts","sources":["../../../../libs/ui/tooltip/src/lib/tooltip/tooltip.ts","../../../../libs/ui/tooltip/src/lib/tooltip/tooltip-panel.ts"],"mappings":";;;;AA+BA;;;;;;;;;;;;;;;;;;;;AAoBG;AACH,cAWa,WAAW;;0BAEFA,EAAA,CAAA,WAAA;;wBAEFA,EAAA,CAAA,WAAA,CAAA,aAAA;AAElB;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;AAkEA;AAUA;AASA;AA8BA;AAcA;AAUA;AAkBA;AAOA;AAOA;AAWA;AAWA;yCA7MW,WAAW;2CAAX,WAAW;AAqNvB;;AC3QD;;;;;;;;;;;;;;AAcG;AACH,cAaa,gBAAgB;;mBAEdA,EAAA,CAAA,WAAA;;;yCAFF,gBAAgB;2CAAhB,gBAAgB;AAM5B;;;;","names":["_angular_core"]}
|