@slotted/angular 0.1.0-beta.3 → 0.1.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/docs/AGENTS.snippet.md +2 -0
  2. package/docs/app-shell.examples.md +1 -1
  3. package/docs/app-shell.json +4 -4
  4. package/docs/app-shell.md +2 -2
  5. package/docs/calendar.json +7 -0
  6. package/docs/calendar.md +1 -0
  7. package/docs/date-field.json +8 -1
  8. package/docs/date-field.md +2 -1
  9. package/docs/date-picker.examples.md +36 -0
  10. package/docs/date-picker.json +20 -5
  11. package/docs/date-picker.md +5 -4
  12. package/docs/guidelines/README.md +2 -2
  13. package/docs/guidelines/composition.md +10 -0
  14. package/docs/guidelines/index.md +3 -1
  15. package/docs/guidelines/list-pages.md +12 -1
  16. package/docs/guidelines/own-elements.md +1 -1
  17. package/docs/page-header.json +1 -0
  18. package/docs/page-header.md +1 -1
  19. package/docs/page.json +1 -0
  20. package/docs/page.md +1 -0
  21. package/docs/skills/build-own-element/SKILL.md +6 -6
  22. package/docs/skills/compose-screen/SKILL.md +13 -6
  23. package/docs/skills/review-screen/SKILL.md +6 -6
  24. package/docs/skills/theme-app/SKILL.md +1 -1
  25. package/docs/skills/waiting-states/SKILL.md +2 -2
  26. package/docs/table.json +13 -0
  27. package/docs/table.md +3 -1
  28. package/docs/tabs.json +13 -3
  29. package/docs/tabs.md +3 -2
  30. package/docs/text-field.json +1 -1
  31. package/docs/text-field.md +1 -1
  32. package/fesm2022/slotted-angular-app-shell.mjs +15 -9
  33. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
  34. package/fesm2022/slotted-angular-calendar.mjs +158 -33
  35. package/fesm2022/slotted-angular-calendar.mjs.map +1 -1
  36. package/fesm2022/slotted-angular-cascader.mjs +7 -1
  37. package/fesm2022/slotted-angular-cascader.mjs.map +1 -1
  38. package/fesm2022/slotted-angular-chart.mjs +13 -3
  39. package/fesm2022/slotted-angular-chart.mjs.map +1 -1
  40. package/fesm2022/slotted-angular-combobox.mjs +25 -4
  41. package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
  42. package/fesm2022/slotted-angular-data-grid.mjs +2 -2
  43. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
  44. package/fesm2022/slotted-angular-date-field.mjs +35 -12
  45. package/fesm2022/slotted-angular-date-field.mjs.map +1 -1
  46. package/fesm2022/slotted-angular-date-picker.mjs +95 -33
  47. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -1
  48. package/fesm2022/slotted-angular-date-range-picker.mjs +5 -7
  49. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -1
  50. package/fesm2022/slotted-angular-datetime-picker.mjs +5 -7
  51. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -1
  52. package/fesm2022/slotted-angular-datetime-range-picker.mjs +5 -7
  53. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -1
  54. package/fesm2022/slotted-angular-entity-picker.mjs +7 -1
  55. package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -1
  56. package/fesm2022/slotted-angular-filter-bar.mjs +1 -1
  57. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
  58. package/fesm2022/slotted-angular-import-export-center.mjs +1 -1
  59. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -1
  60. package/fesm2022/slotted-angular-multi-select.mjs +24 -3
  61. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -1
  62. package/fesm2022/slotted-angular-page-header.mjs +2 -2
  63. package/fesm2022/slotted-angular-page-header.mjs.map +1 -1
  64. package/fesm2022/slotted-angular-page.mjs +20 -1
  65. package/fesm2022/slotted-angular-page.mjs.map +1 -1
  66. package/fesm2022/slotted-angular-popover.mjs +7 -1
  67. package/fesm2022/slotted-angular-popover.mjs.map +1 -1
  68. package/fesm2022/slotted-angular-scroll-area.mjs +6 -2
  69. package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -1
  70. package/fesm2022/slotted-angular-select.mjs +49 -17
  71. package/fesm2022/slotted-angular-select.mjs.map +1 -1
  72. package/fesm2022/slotted-angular-stat-card.mjs +2 -2
  73. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
  74. package/fesm2022/slotted-angular-table.mjs +24 -6
  75. package/fesm2022/slotted-angular-table.mjs.map +1 -1
  76. package/fesm2022/slotted-angular-tabs.mjs +13 -6
  77. package/fesm2022/slotted-angular-tabs.mjs.map +1 -1
  78. package/fesm2022/slotted-angular-time-picker.mjs +4 -6
  79. package/fesm2022/slotted-angular-time-picker.mjs.map +1 -1
  80. package/fesm2022/slotted-angular-time-range-picker.mjs +4 -6
  81. package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -1
  82. package/fesm2022/slotted-angular-tooltip.mjs +7 -1
  83. package/fesm2022/slotted-angular-tooltip.mjs.map +1 -1
  84. package/package.json +3 -3
  85. package/types/slotted-angular-app-shell.d.ts +5 -3
  86. package/types/slotted-angular-app-shell.d.ts.map +1 -1
  87. package/types/slotted-angular-calendar.d.ts +28 -2
  88. package/types/slotted-angular-calendar.d.ts.map +1 -1
  89. package/types/slotted-angular-cascader.d.ts.map +1 -1
  90. package/types/slotted-angular-chart.d.ts +1 -0
  91. package/types/slotted-angular-chart.d.ts.map +1 -1
  92. package/types/slotted-angular-combobox.d.ts +4 -0
  93. package/types/slotted-angular-combobox.d.ts.map +1 -1
  94. package/types/slotted-angular-date-field.d.ts +11 -1
  95. package/types/slotted-angular-date-field.d.ts.map +1 -1
  96. package/types/slotted-angular-date-picker.d.ts +38 -12
  97. package/types/slotted-angular-date-picker.d.ts.map +1 -1
  98. package/types/slotted-angular-date-range-picker.d.ts +0 -1
  99. package/types/slotted-angular-date-range-picker.d.ts.map +1 -1
  100. package/types/slotted-angular-datetime-picker.d.ts +0 -1
  101. package/types/slotted-angular-datetime-picker.d.ts.map +1 -1
  102. package/types/slotted-angular-datetime-range-picker.d.ts +0 -1
  103. package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -1
  104. package/types/slotted-angular-entity-picker.d.ts.map +1 -1
  105. package/types/slotted-angular-multi-select.d.ts +4 -0
  106. package/types/slotted-angular-multi-select.d.ts.map +1 -1
  107. package/types/slotted-angular-page.d.ts.map +1 -1
  108. package/types/slotted-angular-popover.d.ts.map +1 -1
  109. package/types/slotted-angular-scroll-area.d.ts.map +1 -1
  110. package/types/slotted-angular-select.d.ts +12 -2
  111. package/types/slotted-angular-select.d.ts.map +1 -1
  112. package/types/slotted-angular-table.d.ts +17 -2
  113. package/types/slotted-angular-table.d.ts.map +1 -1
  114. package/types/slotted-angular-tabs.d.ts +3 -4
  115. package/types/slotted-angular-tabs.d.ts.map +1 -1
  116. package/types/slotted-angular-time-picker.d.ts +0 -1
  117. package/types/slotted-angular-time-picker.d.ts.map +1 -1
  118. package/types/slotted-angular-time-range-picker.d.ts +0 -1
  119. package/types/slotted-angular-time-range-picker.d.ts.map +1 -1
  120. package/types/slotted-angular-tooltip.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-page.mjs","sources":["../../page/src/page-defaults.ts","../../page/src/page.ts","../../page/src/slotted-angular-page.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\n\n/** The width of the content column: the container's own sizes. */\nexport type PageWidth = 'measure' | 'content' | 'wide' | 'full' | 'bleed';\n\n/** The inset of the content column from the edge of the page: the container's own steps. */\nexport type PageInset = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\n/**\n * Who scrolls. `ancestor` puts the page inside whatever scrolls and makes it\n * at least as tall as that, so the footer has a bottom to stick to. `self`\n * makes the page's own scroll part the scroller, with the footer below it.\n */\nexport type PageScroll = 'ancestor' | 'self';\n\n/** The ground: the sunken canvas of an application, or the plain surface of a document. */\nexport type PageGround = 'sunken' | 'surface';\n\n/** Whether the root is the document's `main` landmark. */\nexport type PageLandmark = 'main' | 'none';\n\nexport interface PageDefaults {\n ground: PageGround;\n inset: PageInset;\n landmark: PageLandmark;\n scroll: PageScroll;\n width: PageWidth;\n}\n\nconst FALLBACK: PageDefaults = {\n ground: 'sunken',\n inset: 6,\n landmark: 'main',\n scroll: 'ancestor',\n width: 'wide',\n};\n\nexport const PAGE_DEFAULTS = new InjectionToken<PageDefaults>('slotted page defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once how its pages are laid out — the measure, the\n * inset, who scrolls, the ground — rather than repeating the same inputs on\n * every route. A page that states any of them itself still wins. Its words\n * come from the language in force (`provideSlotted`).\n */\nexport function providePageDefaults(defaults: Partial<PageDefaults>) {\n return {\n provide: PAGE_DEFAULTS,\n useFactory: (): PageDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a page renders as here, before it states anything of its own. */\nexport function injectPageDefaults(): PageDefaults {\n return inject(PAGE_DEFAULTS);\n}\n","import { createPresence } from '@slotted/core/presence';\nimport type { PresenceStatus } from '@slotted/core/presence';\nimport { findScrollParent } from '@slotted/core/sticky-header';\nimport { SlContainer } from '@slotted/angular/container';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlHeadingLevel } from '@slotted/angular/typography';\nimport { pageMessages, type PageMessages, type PartialMessages } from '@slotted/core/i18n';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectPageDefaults } from './page-defaults';\nimport type { PageGround, PageInset, PageLandmark, PageScroll, PageWidth } from './page-defaults';\n\nexport type {\n PageDefaults,\n PageGround,\n PageInset,\n PageLandmark,\n PageScroll,\n PageWidth,\n} from './page-defaults';\n\n/** The custom property the scroller carries for what sticks above the footer. */\nexport const STICKY_BOTTOM_PROPERTY = '--slotted-page-sticky-bottom';\n\n/**\n * The column of a screen: who scrolls, how wide the content is, where the\n * footer stays, how much air the body has.\n *\n * **The header is a direct child of what scrolls.** There is no header part: a\n * `sticky` element never leaves the box that contains it, so a wrapper exactly\n * the header's height would pin nothing. The element carrying `slPageHeader`\n * is projected first into the scroll part, beside the body.\n *\n * **The footer is projected outside the scroll part** — below the scroller\n * under `self`, stuck to the bottom of the root under `ancestor` — which is\n * what content projection is for. It keeps its box through its exit on\n * `open`, so the bar slides out rather than vanishing.\n *\n * **The element is the consumer's.** `<main slPage>` is the main landmark and\n * the directive adds nothing; `<div slPage>` gets `role=\"main\"` unless\n * `landmark=\"none\"` says the document already has one.\n */\n@Component({\n selector: '[slPage]',\n standalone: true,\n exportAs: 'slPage',\n template: `<div data-part=\"scroll\">\n <ng-content select=\"[slPageHeader]\" />\n <ng-content />\n </div>\n <ng-content select=\"[slPageFooter]\" />`,\n styleUrl: '../../../styles/src/page/page.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'page',\n 'data-part': 'root',\n '[attr.role]': 'role()',\n '[attr.data-width]': 'resolvedWidth()',\n '[attr.data-scroll]': 'resolvedScroll()',\n '[attr.data-ground]': 'resolvedGround()',\n '[attr.data-fill]': \"fill() ? '' : null\",\n '[attr.data-loading]': \"loading() ? '' : null\",\n },\n})\nexport class SlPage {\n /** Defaults to the provider, then `wide`. */\n readonly width = input<PageWidth | undefined>(undefined);\n /** Defaults to the provider, then `6`. */\n readonly inset = input<PageInset | undefined>(undefined);\n /** Defaults to the provider, then `ancestor`. */\n readonly scroll = input<PageScroll | undefined>(undefined);\n /** Defaults to the provider, then `sunken`. */\n readonly ground = input<PageGround | undefined>(undefined);\n /** Defaults to the provider, then `main`. */\n readonly landmark = input<PageLandmark | undefined>(undefined);\n /**\n * Fills the height it was given: the body stops growing with its content and\n * the container inside it stretches to what is left. With `scroll=\"self\"`\n * nothing then scrolls outside the body, so the body's principal scroller —\n * not a form control, and at least half the body's height — is what\n * collapses the header: past 16 pixels down it snaps the area shut, and back\n * at its top it opens it again. From 600 pixels of the page's width up;\n * below it the page scrolls as it does without `fill`.\n */\n readonly fill = input(false, { transform: booleanAttribute });\n /** The body carries `aria-busy`; what stands in for the content is each family's own placeholder. */\n readonly loading = input(false, { transform: booleanAttribute });\n /**\n * Words laid over the catalog of the language in force: the footer's\n * accessible name (`footer`). A static `aria-label` on the footer still wins.\n */\n readonly messages = input<PartialMessages<PageMessages> | undefined>(undefined);\n\n private readonly defaults = injectPageDefaults();\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n private readonly writtenRole = inject(new HostAttributeToken('role'), { optional: true });\n\n readonly resolvedWidth = computed(() => this.width() ?? this.defaults.width);\n readonly resolvedInset = computed(() => this.inset() ?? this.defaults.inset);\n readonly resolvedScroll = computed(() => this.scroll() ?? this.defaults.scroll);\n readonly resolvedGround = computed(() => this.ground() ?? this.defaults.ground);\n readonly resolvedLandmark = computed(() => this.landmark() ?? this.defaults.landmark);\n /** The family's words in the language in force, with this page's `messages` laid over them. */\n readonly t = injectMessages(pageMessages, this.messages);\n\n /** `role=\"main\"` only where the element is not already `main`, and only when asked. */\n protected readonly role = computed(() => {\n if (this.writtenRole !== null) return this.writtenRole;\n if (this.resolvedLandmark() !== 'main') return null;\n return this.native.tagName === 'MAIN' ? null : 'main';\n });\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n afterNextRender(() => {\n if (typeof ResizeObserver === 'undefined') return;\n const target = findScrollParent(this.native) ?? this.native.ownerDocument.documentElement;\n const bar = () => this.native.querySelector<HTMLElement>(':scope > [data-part=\"footer\"]');\n const publish = () => {\n const height = this.resolvedScroll() === 'self' ? 0 : (bar()?.offsetHeight ?? 0);\n target.style.setProperty(STICKY_BOTTOM_PROPERTY, `${height}px`);\n };\n const observer = new ResizeObserver(publish);\n observer.observe(this.native);\n const footer = bar();\n if (footer !== null) observer.observe(footer);\n publish();\n destroyRef.onDestroy(() => {\n observer.disconnect();\n target.style.removeProperty(STICKY_BOTTOM_PROPERTY);\n });\n });\n }\n}\n\n/**\n * The padded column: one container at the page's width and inset, and one\n * outline step deeper than the header — `slHeadingLevel` is a host directive,\n * so a section written directly in the body takes `h2`.\n */\n@Component({\n selector: '[slPageBody]',\n standalone: true,\n exportAs: 'slPageBody',\n imports: [SlContainer],\n hostDirectives: [SlHeadingLevel],\n template: `<div slContainer [size]=\"page?.resolvedWidth()\" [inset]=\"page?.resolvedInset()\">\n <ng-content />\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-part': 'body',\n '[attr.aria-busy]': \"page?.loading() ? 'true' : null\",\n },\n})\nexport class SlPageBody {\n protected readonly page = inject(SlPage, { optional: true });\n}\n\n/**\n * The bar for the actions that finish the task. In the flow and never fixed:\n * it takes its own height, so the last line of content scrolls up to it\n * rather than under it. `open` keeps the element through its exit, so the bar\n * slides out rather than vanishing; the status reaches the DOM for the\n * stylesheet to transition on.\n */\n@Component({\n selector: '[slPageFooter]',\n standalone: true,\n exportAs: 'slPageFooter',\n imports: [SlContainer],\n template: `<div slContainer [size]=\"page?.resolvedWidth()\" [inset]=\"page?.resolvedInset()\">\n <div data-part=\"actions\"><ng-content /></div>\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-part': 'footer',\n '[attr.aria-label]': 'label()',\n '[attr.data-status]': 'status()',\n '[attr.hidden]': \"status() === 'unmounted' ? '' : null\",\n },\n})\nexport class SlPageFooter {\n /** Whether the bar is shown. `false` slides it out and hides it once it has left. */\n readonly open = input(true, { transform: booleanAttribute });\n\n protected readonly page = inject(SlPage, { optional: true });\n private readonly written = inject(new HostAttributeToken('aria-label'), { optional: true });\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n protected readonly status = signal<PresenceStatus>('open');\n /** A footer outside a page still speaks the language in force. */\n private readonly own = injectMessages(pageMessages);\n\n protected readonly label = computed(\n () => this.written ?? (this.page === null ? this.own('footer') : this.page.t('footer')),\n );\n\n constructor() {\n const presence = createPresence({\n present: this.open(),\n skipInitialAnimation: true,\n onStatusChange: (next) => this.status.set(next),\n });\n presence.setNode(this.native);\n effect(() => presence.sync(this.open()));\n inject(DestroyRef).onDestroy(() => presence.destroy());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slotted-angular-page.mjs","sources":["../../page/src/page-defaults.ts","../../page/src/page.ts","../../page/src/slotted-angular-page.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\n\n/** The width of the content column: the container's own sizes. */\nexport type PageWidth = 'measure' | 'content' | 'wide' | 'full' | 'bleed';\n\n/** The inset of the content column from the edge of the page: the container's own steps. */\nexport type PageInset = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\n/**\n * Who scrolls. `ancestor` puts the page inside whatever scrolls and makes it\n * at least as tall as that, so the footer has a bottom to stick to. `self`\n * makes the page's own scroll part the scroller, with the footer below it.\n */\nexport type PageScroll = 'ancestor' | 'self';\n\n/** The ground: the sunken canvas of an application, or the plain surface of a document. */\nexport type PageGround = 'sunken' | 'surface';\n\n/** Whether the root is the document's `main` landmark. */\nexport type PageLandmark = 'main' | 'none';\n\nexport interface PageDefaults {\n ground: PageGround;\n inset: PageInset;\n landmark: PageLandmark;\n scroll: PageScroll;\n width: PageWidth;\n}\n\nconst FALLBACK: PageDefaults = {\n ground: 'sunken',\n inset: 6,\n landmark: 'main',\n scroll: 'ancestor',\n width: 'wide',\n};\n\nexport const PAGE_DEFAULTS = new InjectionToken<PageDefaults>('slotted page defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once how its pages are laid out — the measure, the\n * inset, who scrolls, the ground — rather than repeating the same inputs on\n * every route. A page that states any of them itself still wins. Its words\n * come from the language in force (`provideSlotted`).\n */\nexport function providePageDefaults(defaults: Partial<PageDefaults>) {\n return {\n provide: PAGE_DEFAULTS,\n useFactory: (): PageDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a page renders as here, before it states anything of its own. */\nexport function injectPageDefaults(): PageDefaults {\n return inject(PAGE_DEFAULTS);\n}\n","import { createPresence } from '@slotted/core/presence';\nimport type { PresenceStatus } from '@slotted/core/presence';\nimport { findScrollParent } from '@slotted/core/sticky-header';\nimport { SlContainer } from '@slotted/angular/container';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlHeadingLevel } from '@slotted/angular/typography';\nimport { pageMessages, type PageMessages, type PartialMessages } from '@slotted/core/i18n';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n isDevMode,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectPageDefaults } from './page-defaults';\nimport type { PageGround, PageInset, PageLandmark, PageScroll, PageWidth } from './page-defaults';\n\nexport type {\n PageDefaults,\n PageGround,\n PageInset,\n PageLandmark,\n PageScroll,\n PageWidth,\n} from './page-defaults';\n\n/** The custom property the scroller carries for what sticks above the footer. */\nexport const STICKY_BOTTOM_PROPERTY = '--slotted-page-sticky-bottom';\n\n/**\n * The inset lives on the body, so content written straight into the page is\n * drawn against the viewport's edges and nothing else says why. A header is\n * not that content — it carries its own inset — so it is the one child the\n * check passes over.\n */\nfunction warnWithoutBody(root: HTMLElement) {\n const scroll = root.querySelector(':scope > [data-part=\"scroll\"]');\n if (scroll === null) return;\n const content = [...scroll.children].filter(\n (child) => child.getAttribute('data-ui') !== 'page-header',\n );\n if (content.length === 0) return;\n if (content.some((child) => child.getAttribute('data-part') === 'body')) return;\n console.warn(\n 'slPage has content outside slPageBody. Content outside the body receives no inset: wrap it in an element carrying slPageBody.',\n );\n}\n\n/**\n * The column of a screen: who scrolls, how wide the content is, where the\n * footer stays, how much air the body has.\n *\n * **The header is a direct child of what scrolls.** There is no header part: a\n * `sticky` element never leaves the box that contains it, so a wrapper exactly\n * the header's height would pin nothing. The element carrying `slPageHeader`\n * is projected first into the scroll part, beside the body.\n *\n * **The footer is projected outside the scroll part** — below the scroller\n * under `self`, stuck to the bottom of the root under `ancestor` — which is\n * what content projection is for. It keeps its box through its exit on\n * `open`, so the bar slides out rather than vanishing.\n *\n * **The element is the consumer's.** `<main slPage>` is the main landmark and\n * the directive adds nothing; `<div slPage>` gets `role=\"main\"` unless\n * `landmark=\"none\"` says the document already has one.\n */\n@Component({\n selector: '[slPage]',\n standalone: true,\n exportAs: 'slPage',\n template: `<div data-part=\"scroll\">\n <ng-content select=\"[slPageHeader]\" />\n <ng-content />\n </div>\n <ng-content select=\"[slPageFooter]\" />`,\n styleUrl: '../../../styles/src/page/page.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'page',\n 'data-part': 'root',\n '[attr.role]': 'role()',\n '[attr.data-width]': 'resolvedWidth()',\n '[attr.data-scroll]': 'resolvedScroll()',\n '[attr.data-ground]': 'resolvedGround()',\n '[attr.data-fill]': \"fill() ? '' : null\",\n '[attr.data-loading]': \"loading() ? '' : null\",\n },\n})\nexport class SlPage {\n /** Defaults to the provider, then `wide`. */\n readonly width = input<PageWidth | undefined>(undefined);\n /** Defaults to the provider, then `6`. */\n readonly inset = input<PageInset | undefined>(undefined);\n /** Defaults to the provider, then `ancestor`. */\n readonly scroll = input<PageScroll | undefined>(undefined);\n /** Defaults to the provider, then `sunken`. */\n readonly ground = input<PageGround | undefined>(undefined);\n /** Defaults to the provider, then `main`. */\n readonly landmark = input<PageLandmark | undefined>(undefined);\n /**\n * Fills the height it was given: the body stops growing with its content and\n * the container inside it stretches to what is left. With `scroll=\"self\"`\n * nothing then scrolls outside the body, so the body's principal scroller —\n * not a form control, and at least half the body's height — is what\n * collapses the header: past 16 pixels down it snaps the area shut, and back\n * at its top it opens it again. From 600 pixels of the page's width up;\n * below it the page scrolls as it does without `fill`.\n */\n readonly fill = input(false, { transform: booleanAttribute });\n /** The body carries `aria-busy`; what stands in for the content is each family's own placeholder. */\n readonly loading = input(false, { transform: booleanAttribute });\n /**\n * Words laid over the catalog of the language in force: the footer's\n * accessible name (`footer`). A static `aria-label` on the footer still wins.\n */\n readonly messages = input<PartialMessages<PageMessages> | undefined>(undefined);\n\n private readonly defaults = injectPageDefaults();\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n private readonly writtenRole = inject(new HostAttributeToken('role'), { optional: true });\n\n readonly resolvedWidth = computed(() => this.width() ?? this.defaults.width);\n readonly resolvedInset = computed(() => this.inset() ?? this.defaults.inset);\n readonly resolvedScroll = computed(() => this.scroll() ?? this.defaults.scroll);\n readonly resolvedGround = computed(() => this.ground() ?? this.defaults.ground);\n readonly resolvedLandmark = computed(() => this.landmark() ?? this.defaults.landmark);\n /** The family's words in the language in force, with this page's `messages` laid over them. */\n readonly t = injectMessages(pageMessages, this.messages);\n\n /** `role=\"main\"` only where the element is not already `main`, and only when asked. */\n protected readonly role = computed(() => {\n if (this.writtenRole !== null) return this.writtenRole;\n if (this.resolvedLandmark() !== 'main') return null;\n return this.native.tagName === 'MAIN' ? null : 'main';\n });\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n afterNextRender(() => {\n if (isDevMode()) warnWithoutBody(this.native);\n if (typeof ResizeObserver === 'undefined') return;\n const target = findScrollParent(this.native) ?? this.native.ownerDocument.documentElement;\n const bar = () => this.native.querySelector<HTMLElement>(':scope > [data-part=\"footer\"]');\n const publish = () => {\n const height = this.resolvedScroll() === 'self' ? 0 : (bar()?.offsetHeight ?? 0);\n target.style.setProperty(STICKY_BOTTOM_PROPERTY, `${height}px`);\n };\n const observer = new ResizeObserver(publish);\n observer.observe(this.native);\n const footer = bar();\n if (footer !== null) observer.observe(footer);\n publish();\n destroyRef.onDestroy(() => {\n observer.disconnect();\n target.style.removeProperty(STICKY_BOTTOM_PROPERTY);\n });\n });\n }\n}\n\n/**\n * The padded column: one container at the page's width and inset, and one\n * outline step deeper than the header — `slHeadingLevel` is a host directive,\n * so a section written directly in the body takes `h2`.\n */\n@Component({\n selector: '[slPageBody]',\n standalone: true,\n exportAs: 'slPageBody',\n imports: [SlContainer],\n hostDirectives: [SlHeadingLevel],\n template: `<div slContainer [size]=\"page?.resolvedWidth()\" [inset]=\"page?.resolvedInset()\">\n <ng-content />\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-part': 'body',\n '[attr.aria-busy]': \"page?.loading() ? 'true' : null\",\n },\n})\nexport class SlPageBody {\n protected readonly page = inject(SlPage, { optional: true });\n}\n\n/**\n * The bar for the actions that finish the task. In the flow and never fixed:\n * it takes its own height, so the last line of content scrolls up to it\n * rather than under it. `open` keeps the element through its exit, so the bar\n * slides out rather than vanishing; the status reaches the DOM for the\n * stylesheet to transition on.\n */\n@Component({\n selector: '[slPageFooter]',\n standalone: true,\n exportAs: 'slPageFooter',\n imports: [SlContainer],\n template: `<div slContainer [size]=\"page?.resolvedWidth()\" [inset]=\"page?.resolvedInset()\">\n <div data-part=\"actions\"><ng-content /></div>\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-part': 'footer',\n '[attr.aria-label]': 'label()',\n '[attr.data-status]': 'status()',\n '[attr.hidden]': \"status() === 'unmounted' ? '' : null\",\n },\n})\nexport class SlPageFooter {\n /** Whether the bar is shown. `false` slides it out and hides it once it has left. */\n readonly open = input(true, { transform: booleanAttribute });\n\n protected readonly page = inject(SlPage, { optional: true });\n private readonly written = inject(new HostAttributeToken('aria-label'), { optional: true });\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n protected readonly status = signal<PresenceStatus>('open');\n /** A footer outside a page still speaks the language in force. */\n private readonly own = injectMessages(pageMessages);\n\n protected readonly label = computed(\n () => this.written ?? (this.page === null ? this.own('footer') : this.page.t('footer')),\n );\n\n constructor() {\n const presence = createPresence({\n present: this.open(),\n skipInitialAnimation: true,\n onStatusChange: (next) => this.status.set(next),\n });\n presence.setNode(this.native);\n effect(() => presence.sync(this.open()));\n inject(DestroyRef).onDestroy(() => presence.destroy());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -492,7 +492,13 @@ class SlPopoverLayer {
492
492
  ...options,
493
493
  ...(arrow ? { arrow, arrowPadding: this.popover.resolvedArrowPadding() } : {}),
494
494
  });
495
- void this.positioner.update().then(() => this.positioned.set(true));
495
+ /* `data-open` is written on the element in the task that opened the panel,
496
+ with the position, rather than by the effect on the next check. */
497
+ void this.positioner.update().then(() => {
498
+ if (this.popover.isOpen())
499
+ layer.setAttribute('data-open', '');
500
+ this.positioned.set(true);
501
+ });
496
502
  }
497
503
  /**
498
504
  * One layer in the single stack, and only while it is open. It is not modal:
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-popover.mjs","sources":["../../popover/src/popover-defaults.ts","../../popover/src/popover.ts","../../popover/src/popover-parts.ts","../../popover/src/slotted-angular-popover.ts"],"sourcesContent":["import type { ChangeRequest } from '@slotted/core/state';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\nimport type { Provider } from '@angular/core';\n\n/** The width and type step the panel sits at. */\nexport type PopoverSize = 'sm' | 'md' | 'lg';\n\n/**\n * How wide the panel is. `anchor` makes it exactly as wide as the element it\n * hangs from, which is what a filter panel under a search field wants.\n */\nexport type PopoverWidth = 'auto' | 'anchor';\n\n/** The edge of the anchor the layer prefers. The two logical values mirror. */\nexport type PopoverSide = 'top' | 'bottom' | 'inline-start' | 'inline-end' | 'left' | 'right';\n\n/** Where the layer sits along the side it took. */\nexport type PopoverAlign = 'start' | 'center' | 'end';\n\n/** When the layer exists. `lazy` is what a panel holding an expensive form wants. */\nexport type PopoverMount = 'active' | 'lazy' | 'eager';\n\n/** `fixed` for a layer inside `overflow: hidden`, `absolute` for one inside a transform. */\nexport type PopoverStrategy = 'absolute' | 'fixed';\n\n/** Why the panel opened or closed. */\nexport type PopoverOpenReason = Extract<\n ChangeRequest<boolean>['reason'],\n 'pointer' | 'keyboard' | 'escape' | 'outsidePress' | 'dismiss' | 'programmatic'\n>;\n\n/** The request `openChangeRequest` emits before the panel moves, as React's `PopoverChangeRequest`. */\nexport type PopoverChangeRequest = ChangeRequest<boolean>;\n\n/** Somewhere to put the focus: an element, or a selector read inside the panel. */\nexport type PopoverFocusTarget = Element | string;\n\n/** What an application sets once for every popover under it. */\nexport interface PopoverDefaults {\n align: PopoverAlign;\n alignOffset: number;\n arrow: boolean;\n arrowPadding: number;\n autoFocus: boolean;\n closeOnEscape: boolean;\n closeOnOutsidePress: boolean;\n collisionPadding: number;\n flip: boolean;\n hideWhenDetached: boolean;\n mount: PopoverMount;\n portal: boolean;\n shift: boolean;\n side: PopoverSide;\n sideOffset: number;\n size: PopoverSize;\n strategy: PopoverStrategy;\n width: PopoverWidth;\n}\n\n/**\n * `arrowPadding` is larger than the tooltip's because the panel's corner radius\n * is larger. `hideWhenDetached` is off: a task the reader is halfway through\n * must not blink because the row behind it scrolled.\n */\nexport const POPOVER_FALLBACK: PopoverDefaults = {\n align: 'center',\n alignOffset: 0,\n arrow: true,\n arrowPadding: 12,\n autoFocus: true,\n closeOnEscape: true,\n closeOnOutsidePress: true,\n collisionPadding: 8,\n flip: true,\n hideWhenDetached: false,\n mount: 'active',\n portal: true,\n shift: true,\n side: 'bottom',\n sideOffset: 0,\n size: 'md',\n strategy: 'absolute',\n width: 'auto',\n};\n\nexport const POPOVER_DEFAULTS = new InjectionToken<PopoverDefaults>('slotted popover defaults', {\n providedIn: 'root',\n factory: () => POPOVER_FALLBACK,\n});\n\n/**\n * An application decides once how its popovers behave and look. The close\n * control's accessible name comes from the language in force\n * (`provideSlotted`).\n *\n * What is stated here is written over the defaults already in force rather than\n * over the fallback, which is what React's provider does: a section that sets\n * `width` for itself keeps the application's `size`.\n */\nexport function providePopoverDefaults(defaults: Partial<PopoverDefaults>): Provider {\n return {\n provide: POPOVER_DEFAULTS,\n useFactory: (): PopoverDefaults => ({\n ...(inject(POPOVER_DEFAULTS, { optional: true, skipSelf: true }) ?? POPOVER_FALLBACK),\n ...defaults,\n }),\n };\n}\n\n/** What a popover renders as here, before it states anything of its own. */\nexport function injectPopoverDefaults(): PopoverDefaults {\n return inject(POPOVER_DEFAULTS);\n}\n\n/**\n * Application-scoped rather than module-scoped, for the reason `field` records:\n * a module-level counter produces colliding sequences when two applications\n * render in one server process, and the two sequences have to match for\n * hydration.\n */\n@Injectable({ providedIn: 'root' })\nexport class SlPopoverIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-popover-${this.count}`;\n }\n}\n","import { type PartialMessages, popoverMessages, type PopoverMessages } from '@slotted/core/i18n';\nimport { createControllable } from '@slotted/core/state';\nimport {\n booleanAttribute,\n computed,\n Directive,\n inject,\n input,\n model,\n numberAttribute,\n type OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\n\nimport { injectPopoverDefaults, SlPopoverIdFactory } from './popover-defaults';\nimport type {\n PopoverAlign,\n PopoverChangeRequest,\n PopoverFocusTarget,\n PopoverMount,\n PopoverOpenReason,\n PopoverSide,\n PopoverSize,\n PopoverStrategy,\n PopoverWidth,\n} from './popover-defaults';\n\nexport type {\n PopoverAlign,\n PopoverChangeRequest,\n PopoverDefaults,\n PopoverFocusTarget,\n PopoverMount,\n PopoverOpenReason,\n PopoverSide,\n PopoverSize,\n PopoverStrategy,\n PopoverWidth,\n} from './popover-defaults';\n\nconst optionalBoolean = (state: boolean | string | undefined) =>\n state === undefined ? undefined : booleanAttribute(state);\n\nconst optionalNumber = (value: number | string | undefined) =>\n value === undefined ? undefined : numberAttribute(value);\n\n/**\n * Interactive, non-modal content anchored to the control that opened it.\n *\n * It is the APG's non-modal dialog — the pattern the tooltip page names for a\n * surface that holds focusable elements — and it is deliberately **not** modal.\n * Nothing behind it becomes `inert`, the page keeps scrolling, `aria-modal` is\n * never written and focus is not contained. The modal surface is `slDialog`.\n *\n * Written on an `ng-container`, because it renders nothing: the trigger stays\n * where the consumer wrote it and the layer is portalled.\n */\n@Directive({\n selector: '[slPopover]',\n standalone: true,\n exportAs: 'slPopover',\n})\nexport class SlPopover implements OnInit {\n /** Whether the panel is showing. Two-way, so a template may bind it directly. */\n readonly open = model<boolean>(false);\n /** The state an uncontrolled popover starts in, read once in `ngOnInit`. */\n readonly defaultOpen = input(false, { transform: booleanAttribute });\n /** The popover never opens. The trigger's own `disabled` is the consumer's. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly size = input<PopoverSize | undefined>(undefined);\n readonly width = input<PopoverWidth | undefined>(undefined);\n readonly side = input<PopoverSide | undefined>(undefined);\n readonly align = input<PopoverAlign | undefined>(undefined);\n readonly mount = input<PopoverMount | undefined>(undefined);\n readonly strategy = input<PopoverStrategy | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * close control's accessible name (`close`).\n */\n readonly messages = input<PartialMessages<PopoverMessages> | undefined>(undefined);\n\n /** What takes focus on open instead of the panel — a search field, usually. */\n readonly initialFocus = input<PopoverFocusTarget | undefined>(undefined);\n /** Where focus lands after it closes, for a trigger that is gone by then. */\n readonly finalFocus = input<PopoverFocusTarget | undefined>(undefined);\n\n readonly arrow = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly autoFocus = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly closeOnEscape = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly closeOnOutsidePress = input<boolean | undefined, boolean | string | undefined>(\n undefined,\n { transform: optionalBoolean },\n );\n readonly flip = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly shift = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly hideWhenDetached = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly portal = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n\n readonly sideOffset = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly alignOffset = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly collisionPadding = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly arrowPadding = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n\n /** One output for one transition, carrying the reason and the event. */\n readonly openChangeRequest = output<PopoverChangeRequest>();\n\n private readonly defaults = injectPopoverDefaults();\n /** The family's words in the language in force, with this popover's `messages` laid over them. */\n readonly t = injectMessages(popoverMessages, this.messages);\n private readonly base = inject(SlPopoverIdFactory).next();\n\n readonly contentId = `${this.base}-panel`;\n readonly titleId = `${this.base}-title`;\n readonly descriptionId = `${this.base}-description`;\n\n /** The elements the parts register, which the layer measures and focuses. */\n readonly triggerNode = signal<HTMLElement | null>(null);\n readonly anchorNode = signal<HTMLElement | null>(null);\n readonly arrowNode = signal<HTMLElement | null>(null);\n readonly contentNode = signal<HTMLElement | null>(null);\n readonly hasTitle = signal(false);\n readonly hasDescription = signal(false);\n\n readonly isOpen = computed(() => this.open() && !this.disabled());\n\n readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n readonly resolvedWidth = computed(() => this.width() ?? this.defaults.width);\n readonly resolvedSide = computed(() => this.side() ?? this.defaults.side);\n readonly resolvedAlign = computed(() => this.align() ?? this.defaults.align);\n readonly resolvedMount = computed(() => this.mount() ?? this.defaults.mount);\n readonly resolvedStrategy = computed(() => this.strategy() ?? this.defaults.strategy);\n readonly resolvedArrow = computed(() => (this.arrow() ?? this.defaults.arrow) === true);\n readonly resolvedAutoFocus = computed(\n () => (this.autoFocus() ?? this.defaults.autoFocus) === true,\n );\n /**\n * The role the panel carries when the consumer wrote none. A family that\n * provides itself as this one — `slHoverCard` — decides it here: a card\n * nothing can enter is `presentation`, not a dialog nobody is told about.\n */\n readonly contentRole = computed<string>(() => 'dialog');\n readonly resolvedCloseOnEscape = computed(\n () => (this.closeOnEscape() ?? this.defaults.closeOnEscape) === true,\n );\n readonly resolvedCloseOnOutsidePress = computed(\n () => (this.closeOnOutsidePress() ?? this.defaults.closeOnOutsidePress) === true,\n );\n readonly resolvedFlip = computed(() => (this.flip() ?? this.defaults.flip) === true);\n readonly resolvedShift = computed(() => (this.shift() ?? this.defaults.shift) === true);\n readonly resolvedHideWhenDetached = computed(\n () => (this.hideWhenDetached() ?? this.defaults.hideWhenDetached) === true,\n );\n readonly resolvedPortal = computed(() => (this.portal() ?? this.defaults.portal) === true);\n readonly resolvedSideOffset = computed(() => this.sideOffset() ?? this.defaults.sideOffset);\n readonly resolvedAlignOffset = computed(() => this.alignOffset() ?? this.defaults.alignOffset);\n readonly resolvedCollisionPadding = computed(\n () => this.collisionPadding() ?? this.defaults.collisionPadding,\n );\n readonly resolvedArrowPadding = computed(() => this.arrowPadding() ?? this.defaults.arrowPadding);\n\n private readonly everOpened = signal(false);\n readonly seen = computed(() => this.everOpened() || this.isOpen());\n\n /**\n * Read here rather than in the constructor, because inputs are not set yet\n * there, and once: a later change to it is not new state.\n */\n ngOnInit() {\n if (this.defaultOpen() && !this.open()) {\n this.everOpened.set(true);\n this.open.set(true);\n }\n }\n\n /** Opens now. One of the two imperative actions a template cannot express. */\n show() {\n this.toggle(true, 'programmatic');\n }\n\n /** Closes now. */\n hide() {\n this.toggle(false, 'programmatic');\n }\n\n toggle(next: boolean, reason: PopoverOpenReason, source?: Event) {\n if (next === this.isOpen()) return;\n\n let cancelled = false;\n const state = createControllable<boolean>({\n initial: this.isOpen(),\n onRequest: (request) => {\n this.openChangeRequest.emit(request);\n cancelled = request.cancelled;\n },\n });\n const moved = state.request(next, reason, source);\n if (cancelled) return;\n\n if (next) this.everOpened.set(true);\n if (moved) this.open.set(next);\n }\n}\n","import { createDismissableLayer } from '@slotted/core/dismissable-layer';\nimport type { DismissableLayerHandle } from '@slotted/core/dismissable-layer';\nimport { createPortalRoot } from '@slotted/core/portal';\nimport type { PortalRootHandle } from '@slotted/core/portal';\nimport { createPositioner } from '@slotted/core/positioner';\nimport type { PositionerHandle } from '@slotted/core/positioner';\nimport { createPresence } from '@slotted/core/presence';\nimport type { PresenceStatus } from '@slotted/core/presence';\nimport {\n afterEveryRender,\n type AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n signal,\n TemplateRef,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { EmbeddedViewRef } from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\n\nimport { SlPopover } from './popover';\nimport type {\n PopoverAlign,\n PopoverFocusTarget,\n PopoverSide,\n PopoverWidth,\n} from './popover-defaults';\n\n/** An element, or a selector read inside the panel. */\nfunction resolveFocus(\n target: PopoverFocusTarget | undefined,\n scope: HTMLElement | null,\n): HTMLElement | null {\n if (target === undefined) return null;\n if (typeof target === 'string') return scope?.querySelector<HTMLElement>(target) ?? null;\n return target as HTMLElement;\n}\n\n/**\n * How far the layer moves along its alignment axis so the panel's edge, not\n * the layer's, meets the anchor's. The layer's padding is the gap around the\n * panel, the same on every side, so a layer aligned to the anchor's start edge\n * leaves the panel one gap inside it. A centred layer needs nothing, and\n * neither does one as wide as its anchor, which the positioner centres.\n */\nfunction alignInset(\n layer: HTMLElement,\n side: PopoverSide,\n align: PopoverAlign,\n width: PopoverWidth,\n): number {\n if (align === 'center') return 0;\n if (width === 'anchor' && (side === 'top' || side === 'bottom')) return 0;\n const style = layer.ownerDocument.defaultView?.getComputedStyle(layer);\n const gap = Number.parseFloat(style?.paddingTop ?? '') || 0;\n return align === 'start' ? -gap : gap;\n}\n\n/**\n * The control that opens the panel.\n *\n * The directive goes on the consumer's own control — a `button`, which is what\n * gives `Enter` and `Space` for free. It carries the wiring and `data-open`,\n * and **no `data-part`**: a trigger is very often another family's root, and\n * claiming it would unstyle that family.\n */\n@Directive({\n selector: '[slPopoverTrigger]',\n standalone: true,\n exportAs: 'slPopoverTrigger',\n host: {\n '[attr.aria-controls]': 'popover.contentNode() !== null ? popover.contentId : null',\n '[attr.aria-expanded]': 'popover.isOpen()',\n 'aria-haspopup': 'dialog',\n '[attr.data-open]': \"popover.isOpen() ? '' : null\",\n },\n})\nexport class SlPopoverTrigger implements AfterViewInit {\n protected readonly popover = inject(SlPopover);\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n this.popover.triggerNode.set(this.native);\n this.destroyRef.onDestroy(() => this.popover.triggerNode.set(null));\n }\n\n /**\n * After the view, not as a host listener. A `(click)` the consumer wrote on\n * the same element is bound when the view is created, so a listener bound any\n * earlier runs first and reads `defaultPrevented` before the consumer has had\n * the chance to set it — the order `slIconButton` records.\n */\n ngAfterViewInit() {\n const onClick = (event: MouseEvent) => {\n if (event.defaultPrevented) return;\n const reason = event.detail === 0 ? 'keyboard' : 'pointer';\n this.popover.toggle(!this.popover.isOpen(), reason, event);\n };\n this.native.addEventListener('click', onClick);\n this.destroyRef.onDestroy(() => this.native.removeEventListener('click', onClick));\n }\n}\n\n/**\n * What the panel points at, when that is not the button that opened it — a row\n * whose action menu hangs off the row rather than off its own control. It\n * carries no attributes: it is only measured.\n */\n@Directive({\n selector: '[slPopoverAnchor]',\n standalone: true,\n exportAs: 'slPopoverAnchor',\n})\nexport class SlPopoverAnchor {\n constructor() {\n const popover = inject(SlPopover);\n const native: HTMLElement = inject(ElementRef).nativeElement;\n popover.anchorNode.set(native);\n inject(DestroyRef).onDestroy(() => popover.anchorNode.set(null));\n }\n}\n\n/**\n * The positioned layer, built from a template rather than from an element, for\n * the reason `slTooltipLayer` sets out: `mount=\"active\"` means the layer exists\n * only while it is open, and a component cannot remove its own host.\n *\n * It also builds the two focus guards. Focus reaching one arrived by `Tab` at\n * the edge of a layer that lives at the end of the document, so the family\n * closes and puts focus back on the trigger, from which the reader's next `Tab`\n * continues down the page. It is the only answer that keeps the reading order\n * intact without trapping focus in a layer that is not modal.\n */\n@Directive({\n selector: 'ng-template[slPopoverLayer]',\n standalone: true,\n exportAs: 'slPopoverLayer',\n})\nexport class SlPopoverLayer {\n private readonly popover = inject(SlPopover);\n private readonly template = inject(TemplateRef<unknown>);\n private readonly viewContainer = inject(ViewContainerRef);\n private readonly comment: Comment = this.viewContainer.element.nativeElement;\n private readonly arrowPlaceholder: Comment =\n this.comment.ownerDocument.createComment('slPopoverArrow');\n\n /** A signal, so every effect that reads it re-runs when the layer arrives. */\n private readonly layerNode = signal<HTMLElement | null>(null);\n private view: EmbeddedViewRef<unknown> | null = null;\n private portal: PortalRootHandle | null = null;\n private positioner: PositionerHandle | null = null;\n private dismissable: DismissableLayerHandle | null = null;\n\n private readonly status = signal<PresenceStatus>('unmounted');\n private readonly positioned = signal(false);\n private wasOpen = false;\n private readonly presence = createPresence({\n present: false,\n onStatusChange: (next) => this.status.set(next),\n });\n\n readonly mounted = computed(() => {\n const mount = this.popover.resolvedMount();\n if (mount === 'eager') return true;\n if (mount === 'lazy') return this.popover.seen();\n return this.status() !== 'unmounted';\n });\n\n constructor() {\n effect(() => this.presence.sync(this.popover.isOpen()));\n effect(() => (this.mounted() ? this.build() : this.teardown()));\n effect(() => this.place());\n effect(() => this.stack());\n effect(() => this.paint());\n effect(() => this.showArrow());\n effect(() => this.moveFocus());\n\n inject(DestroyRef).onDestroy(() => {\n this.presence.destroy();\n this.teardown();\n });\n }\n\n /** Measures and places the layer again. */\n reposition() {\n void this.positioner?.update();\n }\n\n private build() {\n if (this.layerNode() !== null) return;\n\n const document = this.comment.ownerDocument;\n const layer = document.createElement('div');\n layer.setAttribute('data-ui', 'popover');\n layer.setAttribute('data-part', 'root');\n\n const view = this.viewContainer.createEmbeddedView(this.template);\n view.detectChanges();\n\n layer.appendChild(this.guard(document));\n for (const node of view.rootNodes as Node[]) layer.appendChild(node);\n layer.appendChild(this.guard(document));\n\n const portal = createPortalRoot({\n origin: this.popover.anchorNode() ?? this.popover.triggerNode(),\n disabled: !this.popover.resolvedPortal(),\n });\n const container = portal.container ?? this.comment.parentNode;\n if (container === this.comment.parentNode) container?.insertBefore(layer, this.comment);\n else container?.appendChild(layer);\n\n this.view = view;\n this.portal = portal;\n this.presence.setNode(layer);\n this.layerNode.set(layer);\n }\n\n private guard(document: Document): HTMLElement {\n const guard = document.createElement('span');\n guard.setAttribute('data-part', 'focus-guard');\n guard.setAttribute('aria-hidden', 'true');\n guard.tabIndex = 0;\n guard.addEventListener('focus', () => {\n this.popover.toggle(false, 'keyboard');\n this.popover.triggerNode()?.focus();\n });\n return guard;\n }\n\n private teardown() {\n this.positioner?.destroy();\n this.positioner = null;\n this.dismissable?.destroy();\n this.dismissable = null;\n this.presence.setNode(null);\n this.layerNode()?.remove();\n this.layerNode.set(null);\n this.view?.destroy();\n this.view = null;\n this.portal?.release();\n this.portal = null;\n this.positioned.set(false);\n }\n\n private place() {\n const layer = this.layerNode();\n const anchor = this.popover.anchorNode() ?? this.popover.triggerNode();\n const align = this.popover.resolvedAlign();\n const side = this.popover.resolvedSide();\n const width = this.popover.resolvedWidth();\n const options = {\n align,\n alignOffset:\n this.popover.resolvedAlignOffset() +\n (layer === null ? 0 : alignInset(layer, side, align, width)),\n boundaryPadding: this.popover.resolvedCollisionPadding(),\n flip: this.popover.resolvedFlip(),\n hideWhenDetached: this.popover.resolvedHideWhenDetached(),\n matchWidth: width === 'anchor',\n shift: this.popover.resolvedShift(),\n side,\n sideOffset: this.popover.resolvedSideOffset(),\n strategy: this.popover.resolvedStrategy(),\n };\n const arrow = this.popover.resolvedArrow() ? this.popover.arrowNode() : null;\n\n this.positioner?.destroy();\n this.positioner = null;\n if (layer === null || anchor === null) return;\n\n this.positioner = createPositioner(anchor, layer, {\n ...options,\n ...(arrow ? { arrow, arrowPadding: this.popover.resolvedArrowPadding() } : {}),\n });\n void this.positioner.update().then(() => this.positioned.set(true));\n }\n\n /**\n * One layer in the single stack, and only while it is open. It is not modal:\n * nothing outside becomes `inert` and the page keeps scrolling. The trigger\n * and the anchor are branches, so pressing either is inside the layer.\n */\n private stack() {\n const layer = this.layerNode();\n const open = this.popover.isOpen();\n const branches = [this.popover.triggerNode(), this.popover.anchorNode()].filter(\n (element): element is HTMLElement => element !== null,\n );\n\n this.dismissable?.destroy();\n this.dismissable = null;\n if (layer === null || !open) return;\n\n this.dismissable = createDismissableLayer(layer, {\n escape: this.popover.resolvedCloseOnEscape(),\n focusOutside: false,\n modal: false,\n outsidePress: this.popover.resolvedCloseOnOutsidePress(),\n scrollLock: false,\n ...(branches.length > 0 ? { branches } : {}),\n onDismiss: (request) => {\n this.popover.toggle(\n false,\n request.reason === 'escape' ? 'escape' : 'outsidePress',\n request.source,\n );\n },\n });\n }\n\n private paint() {\n const layer = this.layerNode();\n if (layer === null) return;\n\n layer.setAttribute('data-align', this.popover.resolvedAlign());\n layer.setAttribute('data-size', this.popover.resolvedSize());\n layer.setAttribute('data-width', this.popover.resolvedWidth());\n if (this.popover.isOpen() && this.positioned()) layer.setAttribute('data-open', '');\n else layer.removeAttribute('data-open');\n }\n\n /**\n * The arrow the consumer wrote leaves the layer while `arrow` resolves to\n * false, and a comment holds its place, so the layer holds no arrow — as\n * React's `PopoverArrow` renders none — and the positioner measures none.\n */\n private showArrow() {\n const layer = this.layerNode();\n const arrow = this.popover.arrowNode();\n if (layer === null || arrow === null) return;\n\n if (this.popover.resolvedArrow()) {\n if (this.arrowPlaceholder.parentNode === layer) this.arrowPlaceholder.replaceWith(arrow);\n } else if (arrow.parentNode === layer) {\n arrow.replaceWith(this.arrowPlaceholder);\n }\n }\n\n /**\n * Focus goes to the panel itself rather than to its first control, so a\n * reader hears the panel's name before its contents. It waits for the first\n * measurement, because focusing a layer still at the origin scrolls the page\n * to it.\n */\n private moveFocus() {\n const open = this.popover.isOpen();\n const layer = this.layerNode();\n const content = this.popover.contentNode();\n const positioned = this.positioned();\n\n if (open && positioned && !this.wasOpen) {\n this.wasOpen = true;\n if (!this.popover.resolvedAutoFocus()) return;\n (resolveFocus(this.popover.initialFocus(), content) ?? content)?.focus();\n return;\n }\n\n if (!open && this.wasOpen) {\n this.wasOpen = false;\n /**\n * Only while the focus is still inside the layer. A reader who closed the\n * popover by pressing something else on the page keeps the focus they\n * moved to; taking it back would undo their own move.\n */\n const active = layer?.ownerDocument.activeElement ?? null;\n if (layer !== null && active !== null && !layer.contains(active)) return;\n (resolveFocus(this.popover.finalFocus(), content) ?? this.popover.triggerNode())?.focus();\n }\n }\n}\n\n/**\n * The panel. `role=\"dialog\"`, named by its title and described by its\n * description when those parts are present, and `aria-modal` is never written —\n * saying it would tell a reader the rest of the page is gone while it is not.\n *\n * A popover with no title gets no `aria-labelledby`; the family invents no\n * name, and a consumer writes `aria-label` here instead — which is why the\n * host attribute they wrote is read before the binding is computed.\n *\n * It is the one part written as a component, because a component is what can\n * carry `styleUrl`: this is where the family's authored stylesheet enters an\n * Angular application.\n */\n@Component({\n selector: '[slPopoverContent]',\n standalone: true,\n exportAs: 'slPopoverContent',\n template: '<ng-content />',\n styleUrl: '../../../styles/src/popover/popover.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-part': 'content',\n tabindex: '-1',\n '[attr.role]': 'role()',\n '[attr.id]': 'popover.contentId',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[attr.aria-describedby]': 'describedBy()',\n },\n})\nexport class SlPopoverContent {\n protected readonly popover = inject(SlPopover);\n private readonly writtenLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n private readonly writtenRole = inject(new HostAttributeToken('role'), { optional: true });\n\n /* The consumer's own `role` wins; the popover decides the rest. */\n protected readonly role = computed(() => this.writtenRole ?? this.popover.contentRole());\n protected readonly labelledBy = computed(() =>\n this.popover.hasTitle() && this.writtenLabel === null ? this.popover.titleId : null,\n );\n protected readonly describedBy = computed(() =>\n this.popover.hasDescription() ? this.popover.descriptionId : null,\n );\n\n constructor() {\n const native: HTMLElement = inject(ElementRef).nativeElement;\n this.popover.contentNode.set(native);\n inject(DestroyRef).onDestroy(() => this.popover.contentNode.set(null));\n }\n}\n\n/** The title, the description and the close control, on the row that stays put. */\n@Directive({\n selector: '[slPopoverHeader]',\n standalone: true,\n exportAs: 'slPopoverHeader',\n host: { 'data-part': 'header' },\n})\nexport class SlPopoverHeader {}\n\n/**\n * The panel's accessible name. The consumer writes the element, so a heading\n * that belongs in the document outline is theirs to choose — the reason\n * `result-state` records for the same decision.\n */\n@Directive({\n selector: '[slPopoverTitle]',\n standalone: true,\n exportAs: 'slPopoverTitle',\n host: { 'data-part': 'title', '[attr.id]': 'popover.titleId' },\n})\nexport class SlPopoverTitle {\n protected readonly popover = inject(SlPopover);\n\n constructor() {\n this.popover.hasTitle.set(true);\n inject(DestroyRef).onDestroy(() => this.popover.hasTitle.set(false));\n }\n}\n\n/** One line under the title, referenced by the panel rather than announced. */\n@Directive({\n selector: '[slPopoverDescription]',\n standalone: true,\n exportAs: 'slPopoverDescription',\n host: { 'data-part': 'description', '[attr.id]': 'popover.descriptionId' },\n})\nexport class SlPopoverDescription {\n protected readonly popover = inject(SlPopover);\n\n constructor() {\n this.popover.hasDescription.set(true);\n inject(DestroyRef).onDestroy(() => this.popover.hasDescription.set(false));\n }\n}\n\n/**\n * The only part that scrolls, bounded by the height the engine says is left.\n * Bounding the whole panel would scroll the title out of sight, which is how a\n * reader loses track of what they are in.\n */\n@Directive({\n selector: '[slPopoverBody]',\n standalone: true,\n exportAs: 'slPopoverBody',\n host: { 'data-part': 'body' },\n})\nexport class SlPopoverBody {}\n\n/** The actions row, which keeps its height while the body scrolls under it. */\n@Directive({\n selector: '[slPopoverFooter]',\n standalone: true,\n exportAs: 'slPopoverFooter',\n host: { 'data-part': 'footer' },\n})\nexport class SlPopoverFooter {}\n\n/**\n * The pointer's way out. The keyboard has Escape, and a reader on a touch\n * device has no Escape key at all. A close control with no text of its own —\n * the drawn cross, or the consumer's icon — is named by the catalog's `close`;\n * one that shows words, such as \"Done\", is named by them, and a name the\n * consumer wrote on the element wins over both.\n */\n@Component({\n selector: 'button[slPopoverClose]',\n standalone: true,\n exportAs: 'slPopoverClose',\n imports: [SlGlyph, SlIcon],\n /* The cross is drawn unless the consumer wrote content of their own. */\n template: `<ng-content\n ><span slIcon size=\"sm\"><svg slGlyph name=\"x\"></svg></span\n ></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'data-part': 'close',\n type: 'button',\n '[attr.aria-label]': 'label()',\n '(click)': 'popover.toggle(false, \"dismiss\", $event)',\n },\n})\nexport class SlPopoverClose {\n protected readonly popover = inject(SlPopover);\n private readonly written = inject(new HostAttributeToken('aria-label'), { optional: true });\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n /** Whether the content shows text, read after every render because it may change. */\n private readonly hasText = signal(false);\n\n protected readonly label = computed(\n () => this.written ?? (this.hasText() ? null : this.popover.t('close')),\n );\n\n constructor() {\n afterEveryRender(() => this.hasText.set((this.native.textContent ?? '').trim() !== ''));\n }\n}\n\n/**\n * The mark that points at the anchor. The family draws it; the positioner\n * measures it and says where it goes. It is hidden from assistive technology.\n * While `arrow` resolves to false the layer takes it out (`slPopoverLayer`).\n */\n@Directive({\n selector: '[slPopoverArrow]',\n standalone: true,\n exportAs: 'slPopoverArrow',\n host: { 'data-part': 'arrow', 'aria-hidden': 'true' },\n})\nexport class SlPopoverArrow {\n constructor() {\n const popover = inject(SlPopover);\n const native: HTMLElement = inject(ElementRef).nativeElement;\n popover.arrowNode.set(native);\n inject(DestroyRef).onDestroy(() => popover.arrowNode.set(null));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slotted-angular-popover.mjs","sources":["../../popover/src/popover-defaults.ts","../../popover/src/popover.ts","../../popover/src/popover-parts.ts","../../popover/src/slotted-angular-popover.ts"],"sourcesContent":["import type { ChangeRequest } from '@slotted/core/state';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\nimport type { Provider } from '@angular/core';\n\n/** The width and type step the panel sits at. */\nexport type PopoverSize = 'sm' | 'md' | 'lg';\n\n/**\n * How wide the panel is. `anchor` makes it exactly as wide as the element it\n * hangs from, which is what a filter panel under a search field wants.\n */\nexport type PopoverWidth = 'auto' | 'anchor';\n\n/** The edge of the anchor the layer prefers. The two logical values mirror. */\nexport type PopoverSide = 'top' | 'bottom' | 'inline-start' | 'inline-end' | 'left' | 'right';\n\n/** Where the layer sits along the side it took. */\nexport type PopoverAlign = 'start' | 'center' | 'end';\n\n/** When the layer exists. `lazy` is what a panel holding an expensive form wants. */\nexport type PopoverMount = 'active' | 'lazy' | 'eager';\n\n/** `fixed` for a layer inside `overflow: hidden`, `absolute` for one inside a transform. */\nexport type PopoverStrategy = 'absolute' | 'fixed';\n\n/** Why the panel opened or closed. */\nexport type PopoverOpenReason = Extract<\n ChangeRequest<boolean>['reason'],\n 'pointer' | 'keyboard' | 'escape' | 'outsidePress' | 'dismiss' | 'programmatic'\n>;\n\n/** The request `openChangeRequest` emits before the panel moves, as React's `PopoverChangeRequest`. */\nexport type PopoverChangeRequest = ChangeRequest<boolean>;\n\n/** Somewhere to put the focus: an element, or a selector read inside the panel. */\nexport type PopoverFocusTarget = Element | string;\n\n/** What an application sets once for every popover under it. */\nexport interface PopoverDefaults {\n align: PopoverAlign;\n alignOffset: number;\n arrow: boolean;\n arrowPadding: number;\n autoFocus: boolean;\n closeOnEscape: boolean;\n closeOnOutsidePress: boolean;\n collisionPadding: number;\n flip: boolean;\n hideWhenDetached: boolean;\n mount: PopoverMount;\n portal: boolean;\n shift: boolean;\n side: PopoverSide;\n sideOffset: number;\n size: PopoverSize;\n strategy: PopoverStrategy;\n width: PopoverWidth;\n}\n\n/**\n * `arrowPadding` is larger than the tooltip's because the panel's corner radius\n * is larger. `hideWhenDetached` is off: a task the reader is halfway through\n * must not blink because the row behind it scrolled.\n */\nexport const POPOVER_FALLBACK: PopoverDefaults = {\n align: 'center',\n alignOffset: 0,\n arrow: true,\n arrowPadding: 12,\n autoFocus: true,\n closeOnEscape: true,\n closeOnOutsidePress: true,\n collisionPadding: 8,\n flip: true,\n hideWhenDetached: false,\n mount: 'active',\n portal: true,\n shift: true,\n side: 'bottom',\n sideOffset: 0,\n size: 'md',\n strategy: 'absolute',\n width: 'auto',\n};\n\nexport const POPOVER_DEFAULTS = new InjectionToken<PopoverDefaults>('slotted popover defaults', {\n providedIn: 'root',\n factory: () => POPOVER_FALLBACK,\n});\n\n/**\n * An application decides once how its popovers behave and look. The close\n * control's accessible name comes from the language in force\n * (`provideSlotted`).\n *\n * What is stated here is written over the defaults already in force rather than\n * over the fallback, which is what React's provider does: a section that sets\n * `width` for itself keeps the application's `size`.\n */\nexport function providePopoverDefaults(defaults: Partial<PopoverDefaults>): Provider {\n return {\n provide: POPOVER_DEFAULTS,\n useFactory: (): PopoverDefaults => ({\n ...(inject(POPOVER_DEFAULTS, { optional: true, skipSelf: true }) ?? POPOVER_FALLBACK),\n ...defaults,\n }),\n };\n}\n\n/** What a popover renders as here, before it states anything of its own. */\nexport function injectPopoverDefaults(): PopoverDefaults {\n return inject(POPOVER_DEFAULTS);\n}\n\n/**\n * Application-scoped rather than module-scoped, for the reason `field` records:\n * a module-level counter produces colliding sequences when two applications\n * render in one server process, and the two sequences have to match for\n * hydration.\n */\n@Injectable({ providedIn: 'root' })\nexport class SlPopoverIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-popover-${this.count}`;\n }\n}\n","import { type PartialMessages, popoverMessages, type PopoverMessages } from '@slotted/core/i18n';\nimport { createControllable } from '@slotted/core/state';\nimport {\n booleanAttribute,\n computed,\n Directive,\n inject,\n input,\n model,\n numberAttribute,\n type OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\n\nimport { injectPopoverDefaults, SlPopoverIdFactory } from './popover-defaults';\nimport type {\n PopoverAlign,\n PopoverChangeRequest,\n PopoverFocusTarget,\n PopoverMount,\n PopoverOpenReason,\n PopoverSide,\n PopoverSize,\n PopoverStrategy,\n PopoverWidth,\n} from './popover-defaults';\n\nexport type {\n PopoverAlign,\n PopoverChangeRequest,\n PopoverDefaults,\n PopoverFocusTarget,\n PopoverMount,\n PopoverOpenReason,\n PopoverSide,\n PopoverSize,\n PopoverStrategy,\n PopoverWidth,\n} from './popover-defaults';\n\nconst optionalBoolean = (state: boolean | string | undefined) =>\n state === undefined ? undefined : booleanAttribute(state);\n\nconst optionalNumber = (value: number | string | undefined) =>\n value === undefined ? undefined : numberAttribute(value);\n\n/**\n * Interactive, non-modal content anchored to the control that opened it.\n *\n * It is the APG's non-modal dialog — the pattern the tooltip page names for a\n * surface that holds focusable elements — and it is deliberately **not** modal.\n * Nothing behind it becomes `inert`, the page keeps scrolling, `aria-modal` is\n * never written and focus is not contained. The modal surface is `slDialog`.\n *\n * Written on an `ng-container`, because it renders nothing: the trigger stays\n * where the consumer wrote it and the layer is portalled.\n */\n@Directive({\n selector: '[slPopover]',\n standalone: true,\n exportAs: 'slPopover',\n})\nexport class SlPopover implements OnInit {\n /** Whether the panel is showing. Two-way, so a template may bind it directly. */\n readonly open = model<boolean>(false);\n /** The state an uncontrolled popover starts in, read once in `ngOnInit`. */\n readonly defaultOpen = input(false, { transform: booleanAttribute });\n /** The popover never opens. The trigger's own `disabled` is the consumer's. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly size = input<PopoverSize | undefined>(undefined);\n readonly width = input<PopoverWidth | undefined>(undefined);\n readonly side = input<PopoverSide | undefined>(undefined);\n readonly align = input<PopoverAlign | undefined>(undefined);\n readonly mount = input<PopoverMount | undefined>(undefined);\n readonly strategy = input<PopoverStrategy | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * close control's accessible name (`close`).\n */\n readonly messages = input<PartialMessages<PopoverMessages> | undefined>(undefined);\n\n /** What takes focus on open instead of the panel — a search field, usually. */\n readonly initialFocus = input<PopoverFocusTarget | undefined>(undefined);\n /** Where focus lands after it closes, for a trigger that is gone by then. */\n readonly finalFocus = input<PopoverFocusTarget | undefined>(undefined);\n\n readonly arrow = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly autoFocus = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly closeOnEscape = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly closeOnOutsidePress = input<boolean | undefined, boolean | string | undefined>(\n undefined,\n { transform: optionalBoolean },\n );\n readonly flip = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly shift = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly hideWhenDetached = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly portal = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n\n readonly sideOffset = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly alignOffset = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly collisionPadding = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly arrowPadding = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n\n /** One output for one transition, carrying the reason and the event. */\n readonly openChangeRequest = output<PopoverChangeRequest>();\n\n private readonly defaults = injectPopoverDefaults();\n /** The family's words in the language in force, with this popover's `messages` laid over them. */\n readonly t = injectMessages(popoverMessages, this.messages);\n private readonly base = inject(SlPopoverIdFactory).next();\n\n readonly contentId = `${this.base}-panel`;\n readonly titleId = `${this.base}-title`;\n readonly descriptionId = `${this.base}-description`;\n\n /** The elements the parts register, which the layer measures and focuses. */\n readonly triggerNode = signal<HTMLElement | null>(null);\n readonly anchorNode = signal<HTMLElement | null>(null);\n readonly arrowNode = signal<HTMLElement | null>(null);\n readonly contentNode = signal<HTMLElement | null>(null);\n readonly hasTitle = signal(false);\n readonly hasDescription = signal(false);\n\n readonly isOpen = computed(() => this.open() && !this.disabled());\n\n readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n readonly resolvedWidth = computed(() => this.width() ?? this.defaults.width);\n readonly resolvedSide = computed(() => this.side() ?? this.defaults.side);\n readonly resolvedAlign = computed(() => this.align() ?? this.defaults.align);\n readonly resolvedMount = computed(() => this.mount() ?? this.defaults.mount);\n readonly resolvedStrategy = computed(() => this.strategy() ?? this.defaults.strategy);\n readonly resolvedArrow = computed(() => (this.arrow() ?? this.defaults.arrow) === true);\n readonly resolvedAutoFocus = computed(\n () => (this.autoFocus() ?? this.defaults.autoFocus) === true,\n );\n /**\n * The role the panel carries when the consumer wrote none. A family that\n * provides itself as this one — `slHoverCard` — decides it here: a card\n * nothing can enter is `presentation`, not a dialog nobody is told about.\n */\n readonly contentRole = computed<string>(() => 'dialog');\n readonly resolvedCloseOnEscape = computed(\n () => (this.closeOnEscape() ?? this.defaults.closeOnEscape) === true,\n );\n readonly resolvedCloseOnOutsidePress = computed(\n () => (this.closeOnOutsidePress() ?? this.defaults.closeOnOutsidePress) === true,\n );\n readonly resolvedFlip = computed(() => (this.flip() ?? this.defaults.flip) === true);\n readonly resolvedShift = computed(() => (this.shift() ?? this.defaults.shift) === true);\n readonly resolvedHideWhenDetached = computed(\n () => (this.hideWhenDetached() ?? this.defaults.hideWhenDetached) === true,\n );\n readonly resolvedPortal = computed(() => (this.portal() ?? this.defaults.portal) === true);\n readonly resolvedSideOffset = computed(() => this.sideOffset() ?? this.defaults.sideOffset);\n readonly resolvedAlignOffset = computed(() => this.alignOffset() ?? this.defaults.alignOffset);\n readonly resolvedCollisionPadding = computed(\n () => this.collisionPadding() ?? this.defaults.collisionPadding,\n );\n readonly resolvedArrowPadding = computed(() => this.arrowPadding() ?? this.defaults.arrowPadding);\n\n private readonly everOpened = signal(false);\n readonly seen = computed(() => this.everOpened() || this.isOpen());\n\n /**\n * Read here rather than in the constructor, because inputs are not set yet\n * there, and once: a later change to it is not new state.\n */\n ngOnInit() {\n if (this.defaultOpen() && !this.open()) {\n this.everOpened.set(true);\n this.open.set(true);\n }\n }\n\n /** Opens now. One of the two imperative actions a template cannot express. */\n show() {\n this.toggle(true, 'programmatic');\n }\n\n /** Closes now. */\n hide() {\n this.toggle(false, 'programmatic');\n }\n\n toggle(next: boolean, reason: PopoverOpenReason, source?: Event) {\n if (next === this.isOpen()) return;\n\n let cancelled = false;\n const state = createControllable<boolean>({\n initial: this.isOpen(),\n onRequest: (request) => {\n this.openChangeRequest.emit(request);\n cancelled = request.cancelled;\n },\n });\n const moved = state.request(next, reason, source);\n if (cancelled) return;\n\n if (next) this.everOpened.set(true);\n if (moved) this.open.set(next);\n }\n}\n","import { createDismissableLayer } from '@slotted/core/dismissable-layer';\nimport type { DismissableLayerHandle } from '@slotted/core/dismissable-layer';\nimport { createPortalRoot } from '@slotted/core/portal';\nimport type { PortalRootHandle } from '@slotted/core/portal';\nimport { createPositioner } from '@slotted/core/positioner';\nimport type { PositionerHandle } from '@slotted/core/positioner';\nimport { createPresence } from '@slotted/core/presence';\nimport type { PresenceStatus } from '@slotted/core/presence';\nimport {\n afterEveryRender,\n type AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n signal,\n TemplateRef,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { EmbeddedViewRef } from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\n\nimport { SlPopover } from './popover';\nimport type {\n PopoverAlign,\n PopoverFocusTarget,\n PopoverSide,\n PopoverWidth,\n} from './popover-defaults';\n\n/** An element, or a selector read inside the panel. */\nfunction resolveFocus(\n target: PopoverFocusTarget | undefined,\n scope: HTMLElement | null,\n): HTMLElement | null {\n if (target === undefined) return null;\n if (typeof target === 'string') return scope?.querySelector<HTMLElement>(target) ?? null;\n return target as HTMLElement;\n}\n\n/**\n * How far the layer moves along its alignment axis so the panel's edge, not\n * the layer's, meets the anchor's. The layer's padding is the gap around the\n * panel, the same on every side, so a layer aligned to the anchor's start edge\n * leaves the panel one gap inside it. A centred layer needs nothing, and\n * neither does one as wide as its anchor, which the positioner centres.\n */\nfunction alignInset(\n layer: HTMLElement,\n side: PopoverSide,\n align: PopoverAlign,\n width: PopoverWidth,\n): number {\n if (align === 'center') return 0;\n if (width === 'anchor' && (side === 'top' || side === 'bottom')) return 0;\n const style = layer.ownerDocument.defaultView?.getComputedStyle(layer);\n const gap = Number.parseFloat(style?.paddingTop ?? '') || 0;\n return align === 'start' ? -gap : gap;\n}\n\n/**\n * The control that opens the panel.\n *\n * The directive goes on the consumer's own control — a `button`, which is what\n * gives `Enter` and `Space` for free. It carries the wiring and `data-open`,\n * and **no `data-part`**: a trigger is very often another family's root, and\n * claiming it would unstyle that family.\n */\n@Directive({\n selector: '[slPopoverTrigger]',\n standalone: true,\n exportAs: 'slPopoverTrigger',\n host: {\n '[attr.aria-controls]': 'popover.contentNode() !== null ? popover.contentId : null',\n '[attr.aria-expanded]': 'popover.isOpen()',\n 'aria-haspopup': 'dialog',\n '[attr.data-open]': \"popover.isOpen() ? '' : null\",\n },\n})\nexport class SlPopoverTrigger implements AfterViewInit {\n protected readonly popover = inject(SlPopover);\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n this.popover.triggerNode.set(this.native);\n this.destroyRef.onDestroy(() => this.popover.triggerNode.set(null));\n }\n\n /**\n * After the view, not as a host listener. A `(click)` the consumer wrote on\n * the same element is bound when the view is created, so a listener bound any\n * earlier runs first and reads `defaultPrevented` before the consumer has had\n * the chance to set it — the order `slIconButton` records.\n */\n ngAfterViewInit() {\n const onClick = (event: MouseEvent) => {\n if (event.defaultPrevented) return;\n const reason = event.detail === 0 ? 'keyboard' : 'pointer';\n this.popover.toggle(!this.popover.isOpen(), reason, event);\n };\n this.native.addEventListener('click', onClick);\n this.destroyRef.onDestroy(() => this.native.removeEventListener('click', onClick));\n }\n}\n\n/**\n * What the panel points at, when that is not the button that opened it — a row\n * whose action menu hangs off the row rather than off its own control. It\n * carries no attributes: it is only measured.\n */\n@Directive({\n selector: '[slPopoverAnchor]',\n standalone: true,\n exportAs: 'slPopoverAnchor',\n})\nexport class SlPopoverAnchor {\n constructor() {\n const popover = inject(SlPopover);\n const native: HTMLElement = inject(ElementRef).nativeElement;\n popover.anchorNode.set(native);\n inject(DestroyRef).onDestroy(() => popover.anchorNode.set(null));\n }\n}\n\n/**\n * The positioned layer, built from a template rather than from an element, for\n * the reason `slTooltipLayer` sets out: `mount=\"active\"` means the layer exists\n * only while it is open, and a component cannot remove its own host.\n *\n * It also builds the two focus guards. Focus reaching one arrived by `Tab` at\n * the edge of a layer that lives at the end of the document, so the family\n * closes and puts focus back on the trigger, from which the reader's next `Tab`\n * continues down the page. It is the only answer that keeps the reading order\n * intact without trapping focus in a layer that is not modal.\n */\n@Directive({\n selector: 'ng-template[slPopoverLayer]',\n standalone: true,\n exportAs: 'slPopoverLayer',\n})\nexport class SlPopoverLayer {\n private readonly popover = inject(SlPopover);\n private readonly template = inject(TemplateRef<unknown>);\n private readonly viewContainer = inject(ViewContainerRef);\n private readonly comment: Comment = this.viewContainer.element.nativeElement;\n private readonly arrowPlaceholder: Comment =\n this.comment.ownerDocument.createComment('slPopoverArrow');\n\n /** A signal, so every effect that reads it re-runs when the layer arrives. */\n private readonly layerNode = signal<HTMLElement | null>(null);\n private view: EmbeddedViewRef<unknown> | null = null;\n private portal: PortalRootHandle | null = null;\n private positioner: PositionerHandle | null = null;\n private dismissable: DismissableLayerHandle | null = null;\n\n private readonly status = signal<PresenceStatus>('unmounted');\n private readonly positioned = signal(false);\n private wasOpen = false;\n private readonly presence = createPresence({\n present: false,\n onStatusChange: (next) => this.status.set(next),\n });\n\n readonly mounted = computed(() => {\n const mount = this.popover.resolvedMount();\n if (mount === 'eager') return true;\n if (mount === 'lazy') return this.popover.seen();\n return this.status() !== 'unmounted';\n });\n\n constructor() {\n effect(() => this.presence.sync(this.popover.isOpen()));\n effect(() => (this.mounted() ? this.build() : this.teardown()));\n effect(() => this.place());\n effect(() => this.stack());\n effect(() => this.paint());\n effect(() => this.showArrow());\n effect(() => this.moveFocus());\n\n inject(DestroyRef).onDestroy(() => {\n this.presence.destroy();\n this.teardown();\n });\n }\n\n /** Measures and places the layer again. */\n reposition() {\n void this.positioner?.update();\n }\n\n private build() {\n if (this.layerNode() !== null) return;\n\n const document = this.comment.ownerDocument;\n const layer = document.createElement('div');\n layer.setAttribute('data-ui', 'popover');\n layer.setAttribute('data-part', 'root');\n\n const view = this.viewContainer.createEmbeddedView(this.template);\n view.detectChanges();\n\n layer.appendChild(this.guard(document));\n for (const node of view.rootNodes as Node[]) layer.appendChild(node);\n layer.appendChild(this.guard(document));\n\n const portal = createPortalRoot({\n origin: this.popover.anchorNode() ?? this.popover.triggerNode(),\n disabled: !this.popover.resolvedPortal(),\n });\n const container = portal.container ?? this.comment.parentNode;\n if (container === this.comment.parentNode) container?.insertBefore(layer, this.comment);\n else container?.appendChild(layer);\n\n this.view = view;\n this.portal = portal;\n this.presence.setNode(layer);\n this.layerNode.set(layer);\n }\n\n private guard(document: Document): HTMLElement {\n const guard = document.createElement('span');\n guard.setAttribute('data-part', 'focus-guard');\n guard.setAttribute('aria-hidden', 'true');\n guard.tabIndex = 0;\n guard.addEventListener('focus', () => {\n this.popover.toggle(false, 'keyboard');\n this.popover.triggerNode()?.focus();\n });\n return guard;\n }\n\n private teardown() {\n this.positioner?.destroy();\n this.positioner = null;\n this.dismissable?.destroy();\n this.dismissable = null;\n this.presence.setNode(null);\n this.layerNode()?.remove();\n this.layerNode.set(null);\n this.view?.destroy();\n this.view = null;\n this.portal?.release();\n this.portal = null;\n this.positioned.set(false);\n }\n\n private place() {\n const layer = this.layerNode();\n const anchor = this.popover.anchorNode() ?? this.popover.triggerNode();\n const align = this.popover.resolvedAlign();\n const side = this.popover.resolvedSide();\n const width = this.popover.resolvedWidth();\n const options = {\n align,\n alignOffset:\n this.popover.resolvedAlignOffset() +\n (layer === null ? 0 : alignInset(layer, side, align, width)),\n boundaryPadding: this.popover.resolvedCollisionPadding(),\n flip: this.popover.resolvedFlip(),\n hideWhenDetached: this.popover.resolvedHideWhenDetached(),\n matchWidth: width === 'anchor',\n shift: this.popover.resolvedShift(),\n side,\n sideOffset: this.popover.resolvedSideOffset(),\n strategy: this.popover.resolvedStrategy(),\n };\n const arrow = this.popover.resolvedArrow() ? this.popover.arrowNode() : null;\n\n this.positioner?.destroy();\n this.positioner = null;\n if (layer === null || anchor === null) return;\n\n this.positioner = createPositioner(anchor, layer, {\n ...options,\n ...(arrow ? { arrow, arrowPadding: this.popover.resolvedArrowPadding() } : {}),\n });\n /* `data-open` is written on the element in the task that opened the panel,\n with the position, rather than by the effect on the next check. */\n void this.positioner.update().then(() => {\n if (this.popover.isOpen()) layer.setAttribute('data-open', '');\n this.positioned.set(true);\n });\n }\n\n /**\n * One layer in the single stack, and only while it is open. It is not modal:\n * nothing outside becomes `inert` and the page keeps scrolling. The trigger\n * and the anchor are branches, so pressing either is inside the layer.\n */\n private stack() {\n const layer = this.layerNode();\n const open = this.popover.isOpen();\n const branches = [this.popover.triggerNode(), this.popover.anchorNode()].filter(\n (element): element is HTMLElement => element !== null,\n );\n\n this.dismissable?.destroy();\n this.dismissable = null;\n if (layer === null || !open) return;\n\n this.dismissable = createDismissableLayer(layer, {\n escape: this.popover.resolvedCloseOnEscape(),\n focusOutside: false,\n modal: false,\n outsidePress: this.popover.resolvedCloseOnOutsidePress(),\n scrollLock: false,\n ...(branches.length > 0 ? { branches } : {}),\n onDismiss: (request) => {\n this.popover.toggle(\n false,\n request.reason === 'escape' ? 'escape' : 'outsidePress',\n request.source,\n );\n },\n });\n }\n\n private paint() {\n const layer = this.layerNode();\n if (layer === null) return;\n\n layer.setAttribute('data-align', this.popover.resolvedAlign());\n layer.setAttribute('data-size', this.popover.resolvedSize());\n layer.setAttribute('data-width', this.popover.resolvedWidth());\n if (this.popover.isOpen() && this.positioned()) layer.setAttribute('data-open', '');\n else layer.removeAttribute('data-open');\n }\n\n /**\n * The arrow the consumer wrote leaves the layer while `arrow` resolves to\n * false, and a comment holds its place, so the layer holds no arrow — as\n * React's `PopoverArrow` renders none — and the positioner measures none.\n */\n private showArrow() {\n const layer = this.layerNode();\n const arrow = this.popover.arrowNode();\n if (layer === null || arrow === null) return;\n\n if (this.popover.resolvedArrow()) {\n if (this.arrowPlaceholder.parentNode === layer) this.arrowPlaceholder.replaceWith(arrow);\n } else if (arrow.parentNode === layer) {\n arrow.replaceWith(this.arrowPlaceholder);\n }\n }\n\n /**\n * Focus goes to the panel itself rather than to its first control, so a\n * reader hears the panel's name before its contents. It waits for the first\n * measurement, because focusing a layer still at the origin scrolls the page\n * to it.\n */\n private moveFocus() {\n const open = this.popover.isOpen();\n const layer = this.layerNode();\n const content = this.popover.contentNode();\n const positioned = this.positioned();\n\n if (open && positioned && !this.wasOpen) {\n this.wasOpen = true;\n if (!this.popover.resolvedAutoFocus()) return;\n (resolveFocus(this.popover.initialFocus(), content) ?? content)?.focus();\n return;\n }\n\n if (!open && this.wasOpen) {\n this.wasOpen = false;\n /**\n * Only while the focus is still inside the layer. A reader who closed the\n * popover by pressing something else on the page keeps the focus they\n * moved to; taking it back would undo their own move.\n */\n const active = layer?.ownerDocument.activeElement ?? null;\n if (layer !== null && active !== null && !layer.contains(active)) return;\n (resolveFocus(this.popover.finalFocus(), content) ?? this.popover.triggerNode())?.focus();\n }\n }\n}\n\n/**\n * The panel. `role=\"dialog\"`, named by its title and described by its\n * description when those parts are present, and `aria-modal` is never written —\n * saying it would tell a reader the rest of the page is gone while it is not.\n *\n * A popover with no title gets no `aria-labelledby`; the family invents no\n * name, and a consumer writes `aria-label` here instead — which is why the\n * host attribute they wrote is read before the binding is computed.\n *\n * It is the one part written as a component, because a component is what can\n * carry `styleUrl`: this is where the family's authored stylesheet enters an\n * Angular application.\n */\n@Component({\n selector: '[slPopoverContent]',\n standalone: true,\n exportAs: 'slPopoverContent',\n template: '<ng-content />',\n styleUrl: '../../../styles/src/popover/popover.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-part': 'content',\n tabindex: '-1',\n '[attr.role]': 'role()',\n '[attr.id]': 'popover.contentId',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[attr.aria-describedby]': 'describedBy()',\n },\n})\nexport class SlPopoverContent {\n protected readonly popover = inject(SlPopover);\n private readonly writtenLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n private readonly writtenRole = inject(new HostAttributeToken('role'), { optional: true });\n\n /* The consumer's own `role` wins; the popover decides the rest. */\n protected readonly role = computed(() => this.writtenRole ?? this.popover.contentRole());\n protected readonly labelledBy = computed(() =>\n this.popover.hasTitle() && this.writtenLabel === null ? this.popover.titleId : null,\n );\n protected readonly describedBy = computed(() =>\n this.popover.hasDescription() ? this.popover.descriptionId : null,\n );\n\n constructor() {\n const native: HTMLElement = inject(ElementRef).nativeElement;\n this.popover.contentNode.set(native);\n inject(DestroyRef).onDestroy(() => this.popover.contentNode.set(null));\n }\n}\n\n/** The title, the description and the close control, on the row that stays put. */\n@Directive({\n selector: '[slPopoverHeader]',\n standalone: true,\n exportAs: 'slPopoverHeader',\n host: { 'data-part': 'header' },\n})\nexport class SlPopoverHeader {}\n\n/**\n * The panel's accessible name. The consumer writes the element, so a heading\n * that belongs in the document outline is theirs to choose — the reason\n * `result-state` records for the same decision.\n */\n@Directive({\n selector: '[slPopoverTitle]',\n standalone: true,\n exportAs: 'slPopoverTitle',\n host: { 'data-part': 'title', '[attr.id]': 'popover.titleId' },\n})\nexport class SlPopoverTitle {\n protected readonly popover = inject(SlPopover);\n\n constructor() {\n this.popover.hasTitle.set(true);\n inject(DestroyRef).onDestroy(() => this.popover.hasTitle.set(false));\n }\n}\n\n/** One line under the title, referenced by the panel rather than announced. */\n@Directive({\n selector: '[slPopoverDescription]',\n standalone: true,\n exportAs: 'slPopoverDescription',\n host: { 'data-part': 'description', '[attr.id]': 'popover.descriptionId' },\n})\nexport class SlPopoverDescription {\n protected readonly popover = inject(SlPopover);\n\n constructor() {\n this.popover.hasDescription.set(true);\n inject(DestroyRef).onDestroy(() => this.popover.hasDescription.set(false));\n }\n}\n\n/**\n * The only part that scrolls, bounded by the height the engine says is left.\n * Bounding the whole panel would scroll the title out of sight, which is how a\n * reader loses track of what they are in.\n */\n@Directive({\n selector: '[slPopoverBody]',\n standalone: true,\n exportAs: 'slPopoverBody',\n host: { 'data-part': 'body' },\n})\nexport class SlPopoverBody {}\n\n/** The actions row, which keeps its height while the body scrolls under it. */\n@Directive({\n selector: '[slPopoverFooter]',\n standalone: true,\n exportAs: 'slPopoverFooter',\n host: { 'data-part': 'footer' },\n})\nexport class SlPopoverFooter {}\n\n/**\n * The pointer's way out. The keyboard has Escape, and a reader on a touch\n * device has no Escape key at all. A close control with no text of its own —\n * the drawn cross, or the consumer's icon — is named by the catalog's `close`;\n * one that shows words, such as \"Done\", is named by them, and a name the\n * consumer wrote on the element wins over both.\n */\n@Component({\n selector: 'button[slPopoverClose]',\n standalone: true,\n exportAs: 'slPopoverClose',\n imports: [SlGlyph, SlIcon],\n /* The cross is drawn unless the consumer wrote content of their own. */\n template: `<ng-content\n ><span slIcon size=\"sm\"><svg slGlyph name=\"x\"></svg></span\n ></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'data-part': 'close',\n type: 'button',\n '[attr.aria-label]': 'label()',\n '(click)': 'popover.toggle(false, \"dismiss\", $event)',\n },\n})\nexport class SlPopoverClose {\n protected readonly popover = inject(SlPopover);\n private readonly written = inject(new HostAttributeToken('aria-label'), { optional: true });\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n /** Whether the content shows text, read after every render because it may change. */\n private readonly hasText = signal(false);\n\n protected readonly label = computed(\n () => this.written ?? (this.hasText() ? null : this.popover.t('close')),\n );\n\n constructor() {\n afterEveryRender(() => this.hasText.set((this.native.textContent ?? '').trim() !== ''));\n }\n}\n\n/**\n * The mark that points at the anchor. The family draws it; the positioner\n * measures it and says where it goes. It is hidden from assistive technology.\n * While `arrow` resolves to false the layer takes it out (`slPopoverLayer`).\n */\n@Directive({\n selector: '[slPopoverArrow]',\n standalone: true,\n exportAs: 'slPopoverArrow',\n host: { 'data-part': 'arrow', 'aria-hidden': 'true' },\n})\nexport class SlPopoverArrow {\n constructor() {\n const popover = inject(SlPopover);\n const native: HTMLElement = inject(ElementRef).nativeElement;\n popover.arrowNode.set(native);\n inject(DestroyRef).onDestroy(() => popover.arrowNode.set(null));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { createFocusOrigin } from '@slotted/core/focus';
1
2
  import { NO_SCROLL_EDGES, scrollEdgeAttributes, createScrollEdges } from '@slotted/core/overflow';
2
3
  import * as i0 from '@angular/core';
3
4
  import { InjectionToken, inject, input, booleanAttribute, output, ElementRef, DestroyRef, viewChild, signal, computed, afterNextRender, ViewEncapsulation, ChangeDetectionStrategy, Component, Directive } from '@angular/core';
@@ -168,6 +169,9 @@ class SlScrollArea {
168
169
  this.edges = handle;
169
170
  this.measured.set(handle.state());
170
171
  this.sideways.set(handle.sideways());
172
+ /** A click on the content focuses the scrollport; its ring is for the keyboard (`createFocusOrigin`). */
173
+ const origin = createFocusOrigin(viewport);
174
+ this.destroyRef.onDestroy(origin.destroy);
171
175
  });
172
176
  this.destroyRef.onDestroy(() => {
173
177
  this.edges?.destroy();
@@ -228,7 +232,7 @@ class SlScrollArea {
228
232
  >
229
233
  <ng-content />
230
234
  </div>
231
- `, isInline: true, styles: ["@layer slotted.components{[data-ui=scroll-area]{--_fade: min(var(--slotted-scroll-area-fade-size, var(--slotted-space-8, 1.5rem)), 20%);--_thumb: var(--slotted-scroll-area-thumb-color, var(--slotted-border-strong, ButtonBorder));--_track: var(--slotted-scroll-area-track-color, var(--slotted-surface-sunken, Canvas));display:grid;box-sizing:border-box;min-block-size:0;min-inline-size:0}[data-ui=scroll-area]>[data-part=viewport]{--_scroll-area-fade-block-start: var(--_fade);--_scroll-area-fade-block-end: var(--_fade);--_scroll-area-fade-inline-start: var(--_fade);--_scroll-area-fade-inline-end: var(--_fade);--_fade-top: var(--_scroll-area-fade-block-start);--_fade-bottom: var(--_scroll-area-fade-block-end);--_fade-left: var(--_scroll-area-fade-inline-start);--_fade-right: var(--_scroll-area-fade-inline-end);box-sizing:border-box;min-block-size:0;min-inline-size:0;border-radius:inherit;scrollbar-gutter:stable;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--_thumb) var(--_track);-webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 var(--_fade-top),#000 calc(100% - var(--_fade-bottom)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--_fade-left),#000 calc(100% - var(--_fade-right)),transparent 100%);mask-image:linear-gradient(to bottom,transparent 0,#000 var(--_fade-top),#000 calc(100% - var(--_fade-bottom)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--_fade-left),#000 calc(100% - var(--_fade-right)),transparent 100%);-webkit-mask-composite:source-in;mask-composite:intersect;transition:--_scroll-area-fade-block-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-end var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-end var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=scroll-area]:dir(rtl)>[data-part=viewport]{--_fade-left: var(--_scroll-area-fade-inline-end);--_fade-right: var(--_scroll-area-fade-inline-start)}[data-ui=scroll-area][data-axis=block]>[data-part=viewport]{overflow-x:hidden;overflow-y:auto;overflow-inline:hidden;overflow-block:auto}[data-ui=scroll-area][data-axis=inline]>[data-part=viewport]{overflow-x:auto;overflow-y:hidden;overflow-inline:auto;overflow-block:hidden}[data-ui=scroll-area][data-axis=both]>[data-part=viewport]{overflow:auto}[data-ui=scroll-area][data-scrollbars=always][data-axis=block]>[data-part=viewport]{overflow-y:scroll;overflow-block:scroll}[data-ui=scroll-area][data-scrollbars=always][data-axis=inline]>[data-part=viewport]{overflow-x:scroll;overflow-inline:scroll}[data-ui=scroll-area][data-scrollbars=always][data-axis=both]>[data-part=viewport]{overflow:scroll}[data-ui=scroll-area][data-scrollbars=none]>[data-part=viewport]{scrollbar-width:none}[data-ui=scroll-area][data-scrollbars=hover]>[data-part=viewport]{scrollbar-color:transparent transparent;transition:scrollbar-color var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-end var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-end var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=scroll-area][data-scrollbars=hover]:not([data-disabled]):hover>[data-part=viewport],[data-ui=scroll-area][data-scrollbars=hover]:focus-within>[data-part=viewport]{scrollbar-color:var(--_thumb) var(--_track)}[data-ui=scroll-area][data-gutter=auto]>[data-part=viewport]{scrollbar-gutter:auto}[data-ui=scroll-area][data-gutter=both-edges]>[data-part=viewport]{scrollbar-gutter:stable both-edges}[data-ui=scroll-area][data-overscroll=auto]>[data-part=viewport]{overscroll-behavior:auto}[data-ui=scroll-area][data-overscroll=none]>[data-part=viewport]{overscroll-behavior:none}[data-ui=scroll-area][data-axis=inline]>[data-part=viewport]{overscroll-behavior-y:auto;overscroll-behavior-block:auto}[data-ui=scroll-area][data-axis=block]>[data-part=viewport]{overscroll-behavior-x:auto;overscroll-behavior-inline:auto}[data-ui=scroll-area][data-at-block-start]>[data-part=viewport]{--_scroll-area-fade-block-start: 0px}[data-ui=scroll-area][data-at-block-end]>[data-part=viewport]{--_scroll-area-fade-block-end: 0px}[data-ui=scroll-area][data-at-inline-start]>[data-part=viewport]{--_scroll-area-fade-inline-start: 0px}[data-ui=scroll-area][data-at-inline-end]>[data-part=viewport]{--_scroll-area-fade-inline-end: 0px}[data-ui=scroll-area][data-fade=end]>[data-part=viewport]{--_scroll-area-fade-block-start: 0px;--_scroll-area-fade-inline-start: 0px}[data-ui=scroll-area][data-fade=none]>[data-part=viewport],[data-ui=scroll-area][data-sideways]>[data-part=viewport]{-webkit-mask-image:none;mask-image:none}[data-ui=scroll-area]>[data-part=viewport]>[data-part=content]{box-sizing:border-box;min-inline-size:fit-content;padding:var(--slotted-scroll-area-inset, var(--slotted-space-5, .75rem))}[data-ui=scroll-area]:has(>[data-part=viewport]:focus-visible){outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}@media print{[data-ui=scroll-area],[data-ui=scroll-area]>[data-part=viewport]{max-block-size:none;max-inline-size:none;overflow:visible;-webkit-mask-image:none;mask-image:none}}@media(forced-colors:active){[data-ui=scroll-area]>[data-part=viewport]{-webkit-mask-image:none;mask-image:none;scrollbar-color:auto}}}@property --_scroll-area-fade-block-start{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-block-end{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-inline-start{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-inline-end{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
235
+ `, isInline: true, styles: ["@layer slotted.components{[data-ui=scroll-area]{--_fade: min(var(--slotted-scroll-area-fade-size, var(--slotted-space-8, 1.5rem)), 20%);--_thumb: var(--slotted-scroll-area-thumb-color, var(--slotted-border-strong, ButtonBorder));--_track: var(--slotted-scroll-area-track-color, var(--slotted-surface-sunken, Canvas));display:grid;box-sizing:border-box;min-block-size:0;min-inline-size:0}[data-ui=scroll-area]>[data-part=viewport]{--_scroll-area-fade-block-start: var(--_fade);--_scroll-area-fade-block-end: var(--_fade);--_scroll-area-fade-inline-start: var(--_fade);--_scroll-area-fade-inline-end: var(--_fade);--_fade-top: var(--_scroll-area-fade-block-start);--_fade-bottom: var(--_scroll-area-fade-block-end);--_fade-left: var(--_scroll-area-fade-inline-start);--_fade-right: var(--_scroll-area-fade-inline-end);box-sizing:border-box;min-block-size:0;min-inline-size:0;border-radius:inherit;scrollbar-gutter:stable;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--_thumb) var(--_track);-webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 var(--_fade-top),#000 calc(100% - var(--_fade-bottom)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--_fade-left),#000 calc(100% - var(--_fade-right)),transparent 100%);mask-image:linear-gradient(to bottom,transparent 0,#000 var(--_fade-top),#000 calc(100% - var(--_fade-bottom)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--_fade-left),#000 calc(100% - var(--_fade-right)),transparent 100%);-webkit-mask-composite:source-in;mask-composite:intersect;transition:--_scroll-area-fade-block-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-end var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-end var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=scroll-area]:dir(rtl)>[data-part=viewport]{--_fade-left: var(--_scroll-area-fade-inline-end);--_fade-right: var(--_scroll-area-fade-inline-start)}[data-ui=scroll-area][data-axis=block]>[data-part=viewport]{overflow-x:hidden;overflow-y:auto;overflow-inline:hidden;overflow-block:auto}[data-ui=scroll-area][data-axis=inline]>[data-part=viewport]{overflow-x:auto;overflow-y:hidden;overflow-inline:auto;overflow-block:hidden}[data-ui=scroll-area][data-axis=both]>[data-part=viewport]{overflow:auto}[data-ui=scroll-area][data-scrollbars=always][data-axis=block]>[data-part=viewport]{overflow-y:scroll;overflow-block:scroll}[data-ui=scroll-area][data-scrollbars=always][data-axis=inline]>[data-part=viewport]{overflow-x:scroll;overflow-inline:scroll}[data-ui=scroll-area][data-scrollbars=always][data-axis=both]>[data-part=viewport]{overflow:scroll}[data-ui=scroll-area][data-scrollbars=none]>[data-part=viewport]{scrollbar-width:none}[data-ui=scroll-area][data-scrollbars=hover]>[data-part=viewport]{scrollbar-color:transparent transparent;transition:scrollbar-color var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-end var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-end var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=scroll-area][data-scrollbars=hover]:not([data-disabled]):hover>[data-part=viewport],[data-ui=scroll-area][data-scrollbars=hover]:focus-within>[data-part=viewport]{scrollbar-color:var(--_thumb) var(--_track)}[data-ui=scroll-area][data-gutter=auto]>[data-part=viewport]{scrollbar-gutter:auto}[data-ui=scroll-area][data-gutter=both-edges]>[data-part=viewport]{scrollbar-gutter:stable both-edges}[data-ui=scroll-area][data-overscroll=auto]>[data-part=viewport]{overscroll-behavior:auto}[data-ui=scroll-area][data-overscroll=none]>[data-part=viewport]{overscroll-behavior:none}[data-ui=scroll-area][data-axis=inline]>[data-part=viewport]{overscroll-behavior-y:auto;overscroll-behavior-block:auto}[data-ui=scroll-area][data-axis=block]>[data-part=viewport]{overscroll-behavior-x:auto;overscroll-behavior-inline:auto}[data-ui=scroll-area][data-at-block-start]>[data-part=viewport]{--_scroll-area-fade-block-start: 0px}[data-ui=scroll-area][data-at-block-end]>[data-part=viewport]{--_scroll-area-fade-block-end: 0px}[data-ui=scroll-area][data-at-inline-start]>[data-part=viewport]{--_scroll-area-fade-inline-start: 0px}[data-ui=scroll-area][data-at-inline-end]>[data-part=viewport]{--_scroll-area-fade-inline-end: 0px}[data-ui=scroll-area][data-fade=end]>[data-part=viewport]{--_scroll-area-fade-block-start: 0px;--_scroll-area-fade-inline-start: 0px}[data-ui=scroll-area][data-fade=none]>[data-part=viewport],[data-ui=scroll-area][data-sideways]>[data-part=viewport]{-webkit-mask-image:none;mask-image:none}[data-ui=scroll-area]>[data-part=viewport]>[data-part=content]{box-sizing:border-box;min-inline-size:fit-content;padding:var(--slotted-scroll-area-inset, var(--slotted-space-5, .75rem))}[data-ui=scroll-area]>[data-part=viewport]:focus{outline:none}[data-ui=scroll-area]:has(>[data-part=viewport]:focus-visible[data-focus-origin=keyboard]){outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}@media print{[data-ui=scroll-area],[data-ui=scroll-area]>[data-part=viewport]{max-block-size:none;max-inline-size:none;overflow:visible;-webkit-mask-image:none;mask-image:none}}@media(forced-colors:active){[data-ui=scroll-area]>[data-part=viewport]{-webkit-mask-image:none;mask-image:none;scrollbar-color:auto}}}@property --_scroll-area-fade-block-start{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-block-end{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-inline-start{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-inline-end{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
232
236
  }
233
237
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlScrollArea, decorators: [{
234
238
  type: Component,
@@ -260,7 +264,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
260
264
  '[attr.data-sideways]': "sideways() ? '' : null",
261
265
  '[style.max-block-size]': 'maxBlockSize() ?? null',
262
266
  '[style.max-inline-size]': 'maxInlineSize() ?? null',
263
- }, styles: ["@layer slotted.components{[data-ui=scroll-area]{--_fade: min(var(--slotted-scroll-area-fade-size, var(--slotted-space-8, 1.5rem)), 20%);--_thumb: var(--slotted-scroll-area-thumb-color, var(--slotted-border-strong, ButtonBorder));--_track: var(--slotted-scroll-area-track-color, var(--slotted-surface-sunken, Canvas));display:grid;box-sizing:border-box;min-block-size:0;min-inline-size:0}[data-ui=scroll-area]>[data-part=viewport]{--_scroll-area-fade-block-start: var(--_fade);--_scroll-area-fade-block-end: var(--_fade);--_scroll-area-fade-inline-start: var(--_fade);--_scroll-area-fade-inline-end: var(--_fade);--_fade-top: var(--_scroll-area-fade-block-start);--_fade-bottom: var(--_scroll-area-fade-block-end);--_fade-left: var(--_scroll-area-fade-inline-start);--_fade-right: var(--_scroll-area-fade-inline-end);box-sizing:border-box;min-block-size:0;min-inline-size:0;border-radius:inherit;scrollbar-gutter:stable;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--_thumb) var(--_track);-webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 var(--_fade-top),#000 calc(100% - var(--_fade-bottom)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--_fade-left),#000 calc(100% - var(--_fade-right)),transparent 100%);mask-image:linear-gradient(to bottom,transparent 0,#000 var(--_fade-top),#000 calc(100% - var(--_fade-bottom)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--_fade-left),#000 calc(100% - var(--_fade-right)),transparent 100%);-webkit-mask-composite:source-in;mask-composite:intersect;transition:--_scroll-area-fade-block-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-end var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-end var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=scroll-area]:dir(rtl)>[data-part=viewport]{--_fade-left: var(--_scroll-area-fade-inline-end);--_fade-right: var(--_scroll-area-fade-inline-start)}[data-ui=scroll-area][data-axis=block]>[data-part=viewport]{overflow-x:hidden;overflow-y:auto;overflow-inline:hidden;overflow-block:auto}[data-ui=scroll-area][data-axis=inline]>[data-part=viewport]{overflow-x:auto;overflow-y:hidden;overflow-inline:auto;overflow-block:hidden}[data-ui=scroll-area][data-axis=both]>[data-part=viewport]{overflow:auto}[data-ui=scroll-area][data-scrollbars=always][data-axis=block]>[data-part=viewport]{overflow-y:scroll;overflow-block:scroll}[data-ui=scroll-area][data-scrollbars=always][data-axis=inline]>[data-part=viewport]{overflow-x:scroll;overflow-inline:scroll}[data-ui=scroll-area][data-scrollbars=always][data-axis=both]>[data-part=viewport]{overflow:scroll}[data-ui=scroll-area][data-scrollbars=none]>[data-part=viewport]{scrollbar-width:none}[data-ui=scroll-area][data-scrollbars=hover]>[data-part=viewport]{scrollbar-color:transparent transparent;transition:scrollbar-color var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-end var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-end var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=scroll-area][data-scrollbars=hover]:not([data-disabled]):hover>[data-part=viewport],[data-ui=scroll-area][data-scrollbars=hover]:focus-within>[data-part=viewport]{scrollbar-color:var(--_thumb) var(--_track)}[data-ui=scroll-area][data-gutter=auto]>[data-part=viewport]{scrollbar-gutter:auto}[data-ui=scroll-area][data-gutter=both-edges]>[data-part=viewport]{scrollbar-gutter:stable both-edges}[data-ui=scroll-area][data-overscroll=auto]>[data-part=viewport]{overscroll-behavior:auto}[data-ui=scroll-area][data-overscroll=none]>[data-part=viewport]{overscroll-behavior:none}[data-ui=scroll-area][data-axis=inline]>[data-part=viewport]{overscroll-behavior-y:auto;overscroll-behavior-block:auto}[data-ui=scroll-area][data-axis=block]>[data-part=viewport]{overscroll-behavior-x:auto;overscroll-behavior-inline:auto}[data-ui=scroll-area][data-at-block-start]>[data-part=viewport]{--_scroll-area-fade-block-start: 0px}[data-ui=scroll-area][data-at-block-end]>[data-part=viewport]{--_scroll-area-fade-block-end: 0px}[data-ui=scroll-area][data-at-inline-start]>[data-part=viewport]{--_scroll-area-fade-inline-start: 0px}[data-ui=scroll-area][data-at-inline-end]>[data-part=viewport]{--_scroll-area-fade-inline-end: 0px}[data-ui=scroll-area][data-fade=end]>[data-part=viewport]{--_scroll-area-fade-block-start: 0px;--_scroll-area-fade-inline-start: 0px}[data-ui=scroll-area][data-fade=none]>[data-part=viewport],[data-ui=scroll-area][data-sideways]>[data-part=viewport]{-webkit-mask-image:none;mask-image:none}[data-ui=scroll-area]>[data-part=viewport]>[data-part=content]{box-sizing:border-box;min-inline-size:fit-content;padding:var(--slotted-scroll-area-inset, var(--slotted-space-5, .75rem))}[data-ui=scroll-area]:has(>[data-part=viewport]:focus-visible){outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}@media print{[data-ui=scroll-area],[data-ui=scroll-area]>[data-part=viewport]{max-block-size:none;max-inline-size:none;overflow:visible;-webkit-mask-image:none;mask-image:none}}@media(forced-colors:active){[data-ui=scroll-area]>[data-part=viewport]{-webkit-mask-image:none;mask-image:none;scrollbar-color:auto}}}@property --_scroll-area-fade-block-start{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-block-end{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-inline-start{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-inline-end{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}\n"] }]
267
+ }, styles: ["@layer slotted.components{[data-ui=scroll-area]{--_fade: min(var(--slotted-scroll-area-fade-size, var(--slotted-space-8, 1.5rem)), 20%);--_thumb: var(--slotted-scroll-area-thumb-color, var(--slotted-border-strong, ButtonBorder));--_track: var(--slotted-scroll-area-track-color, var(--slotted-surface-sunken, Canvas));display:grid;box-sizing:border-box;min-block-size:0;min-inline-size:0}[data-ui=scroll-area]>[data-part=viewport]{--_scroll-area-fade-block-start: var(--_fade);--_scroll-area-fade-block-end: var(--_fade);--_scroll-area-fade-inline-start: var(--_fade);--_scroll-area-fade-inline-end: var(--_fade);--_fade-top: var(--_scroll-area-fade-block-start);--_fade-bottom: var(--_scroll-area-fade-block-end);--_fade-left: var(--_scroll-area-fade-inline-start);--_fade-right: var(--_scroll-area-fade-inline-end);box-sizing:border-box;min-block-size:0;min-inline-size:0;border-radius:inherit;scrollbar-gutter:stable;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--_thumb) var(--_track);-webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 var(--_fade-top),#000 calc(100% - var(--_fade-bottom)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--_fade-left),#000 calc(100% - var(--_fade-right)),transparent 100%);mask-image:linear-gradient(to bottom,transparent 0,#000 var(--_fade-top),#000 calc(100% - var(--_fade-bottom)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--_fade-left),#000 calc(100% - var(--_fade-right)),transparent 100%);-webkit-mask-composite:source-in;mask-composite:intersect;transition:--_scroll-area-fade-block-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-end var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-end var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=scroll-area]:dir(rtl)>[data-part=viewport]{--_fade-left: var(--_scroll-area-fade-inline-end);--_fade-right: var(--_scroll-area-fade-inline-start)}[data-ui=scroll-area][data-axis=block]>[data-part=viewport]{overflow-x:hidden;overflow-y:auto;overflow-inline:hidden;overflow-block:auto}[data-ui=scroll-area][data-axis=inline]>[data-part=viewport]{overflow-x:auto;overflow-y:hidden;overflow-inline:auto;overflow-block:hidden}[data-ui=scroll-area][data-axis=both]>[data-part=viewport]{overflow:auto}[data-ui=scroll-area][data-scrollbars=always][data-axis=block]>[data-part=viewport]{overflow-y:scroll;overflow-block:scroll}[data-ui=scroll-area][data-scrollbars=always][data-axis=inline]>[data-part=viewport]{overflow-x:scroll;overflow-inline:scroll}[data-ui=scroll-area][data-scrollbars=always][data-axis=both]>[data-part=viewport]{overflow:scroll}[data-ui=scroll-area][data-scrollbars=none]>[data-part=viewport]{scrollbar-width:none}[data-ui=scroll-area][data-scrollbars=hover]>[data-part=viewport]{scrollbar-color:transparent transparent;transition:scrollbar-color var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-end var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-end var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=scroll-area][data-scrollbars=hover]:not([data-disabled]):hover>[data-part=viewport],[data-ui=scroll-area][data-scrollbars=hover]:focus-within>[data-part=viewport]{scrollbar-color:var(--_thumb) var(--_track)}[data-ui=scroll-area][data-gutter=auto]>[data-part=viewport]{scrollbar-gutter:auto}[data-ui=scroll-area][data-gutter=both-edges]>[data-part=viewport]{scrollbar-gutter:stable both-edges}[data-ui=scroll-area][data-overscroll=auto]>[data-part=viewport]{overscroll-behavior:auto}[data-ui=scroll-area][data-overscroll=none]>[data-part=viewport]{overscroll-behavior:none}[data-ui=scroll-area][data-axis=inline]>[data-part=viewport]{overscroll-behavior-y:auto;overscroll-behavior-block:auto}[data-ui=scroll-area][data-axis=block]>[data-part=viewport]{overscroll-behavior-x:auto;overscroll-behavior-inline:auto}[data-ui=scroll-area][data-at-block-start]>[data-part=viewport]{--_scroll-area-fade-block-start: 0px}[data-ui=scroll-area][data-at-block-end]>[data-part=viewport]{--_scroll-area-fade-block-end: 0px}[data-ui=scroll-area][data-at-inline-start]>[data-part=viewport]{--_scroll-area-fade-inline-start: 0px}[data-ui=scroll-area][data-at-inline-end]>[data-part=viewport]{--_scroll-area-fade-inline-end: 0px}[data-ui=scroll-area][data-fade=end]>[data-part=viewport]{--_scroll-area-fade-block-start: 0px;--_scroll-area-fade-inline-start: 0px}[data-ui=scroll-area][data-fade=none]>[data-part=viewport],[data-ui=scroll-area][data-sideways]>[data-part=viewport]{-webkit-mask-image:none;mask-image:none}[data-ui=scroll-area]>[data-part=viewport]>[data-part=content]{box-sizing:border-box;min-inline-size:fit-content;padding:var(--slotted-scroll-area-inset, var(--slotted-space-5, .75rem))}[data-ui=scroll-area]>[data-part=viewport]:focus{outline:none}[data-ui=scroll-area]:has(>[data-part=viewport]:focus-visible[data-focus-origin=keyboard]){outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}@media print{[data-ui=scroll-area],[data-ui=scroll-area]>[data-part=viewport]{max-block-size:none;max-inline-size:none;overflow:visible;-webkit-mask-image:none;mask-image:none}}@media(forced-colors:active){[data-ui=scroll-area]>[data-part=viewport]{-webkit-mask-image:none;mask-image:none;scrollbar-color:auto}}}@property --_scroll-area-fade-block-start{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-block-end{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-inline-start{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-inline-end{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}\n"] }]
264
268
  }], ctorParameters: () => [], propDecorators: { axis: [{ type: i0.Input, args: [{ isSignal: true, alias: "axis", required: false }] }], scrollbars: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbars", required: false }] }], gutter: [{ type: i0.Input, args: [{ isSignal: true, alias: "gutter", required: false }] }], fade: [{ type: i0.Input, args: [{ isSignal: true, alias: "fade", required: false }] }], overscroll: [{ type: i0.Input, args: [{ isSignal: true, alias: "overscroll", required: false }] }], maxBlockSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxBlockSize", required: false }] }], maxInlineSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxInlineSize", required: false }] }], tabbable: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabbable", required: false }] }], labelledBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelledBy", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], scrollChange: [{ type: i0.Output, args: ["scrollChange"] }], overflowChange: [{ type: i0.Output, args: ["overflowChange"] }], viewportRef: [{ type: i0.ViewChild, args: ['viewport', { isSignal: true }] }] } });
265
269
  /**
266
270
  * The inset that scrolls with the content.