@cdevhub/ngx-tw 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +264 -49
  2. package/fesm2022/cdevhub-ngx-tw-accordion.mjs +11 -7
  3. package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
  4. package/fesm2022/cdevhub-ngx-tw-alert.mjs +43 -29
  5. package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
  6. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs +103 -0
  7. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs.map +1 -0
  8. package/fesm2022/cdevhub-ngx-tw-avatar.mjs +56 -31
  9. package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
  10. package/fesm2022/cdevhub-ngx-tw-badge.mjs +61 -35
  11. package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
  12. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +154 -93
  13. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
  14. package/fesm2022/cdevhub-ngx-tw-button.mjs +24 -15
  15. package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
  16. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +3 -3
  17. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
  18. package/fesm2022/cdevhub-ngx-tw-calendar.mjs +408 -215
  19. package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
  20. package/fesm2022/cdevhub-ngx-tw-card.mjs +33 -24
  21. package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
  22. package/fesm2022/cdevhub-ngx-tw-carousel.mjs +144 -79
  23. package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
  24. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +99 -47
  25. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
  26. package/fesm2022/cdevhub-ngx-tw-code-block.mjs +34 -20
  27. package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
  28. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +46 -29
  29. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
  30. package/fesm2022/cdevhub-ngx-tw-combobox.mjs +195 -110
  31. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
  32. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +140 -73
  33. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
  34. package/fesm2022/cdevhub-ngx-tw-core.mjs +16 -11
  35. package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
  36. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +393 -149
  37. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
  38. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +305 -150
  39. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
  40. package/fesm2022/cdevhub-ngx-tw-dialog.mjs +56 -43
  41. package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
  42. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +51 -33
  43. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
  44. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +905 -0
  45. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -0
  46. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +49 -26
  47. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
  48. package/fesm2022/cdevhub-ngx-tw-form-field.mjs +133 -74
  49. package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
  50. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +2 -2
  51. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -1
  52. package/fesm2022/cdevhub-ngx-tw-icon.mjs +28 -17
  53. package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
  54. package/fesm2022/cdevhub-ngx-tw-input.mjs +37 -21
  55. package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
  56. package/fesm2022/cdevhub-ngx-tw-item.mjs +33 -24
  57. package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
  58. package/fesm2022/cdevhub-ngx-tw-menu.mjs +63 -48
  59. package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
  60. package/fesm2022/cdevhub-ngx-tw-number-input.mjs +622 -0
  61. package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -0
  62. package/fesm2022/cdevhub-ngx-tw-paginator.mjs +137 -71
  63. package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
  64. package/fesm2022/cdevhub-ngx-tw-popover.mjs +101 -46
  65. package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
  66. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +57 -30
  67. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
  68. package/fesm2022/cdevhub-ngx-tw-radio.mjs +108 -57
  69. package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
  70. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +46 -26
  71. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
  72. package/fesm2022/cdevhub-ngx-tw-select.mjs +217 -122
  73. package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
  74. package/fesm2022/cdevhub-ngx-tw-separator.mjs +21 -12
  75. package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
  76. package/fesm2022/cdevhub-ngx-tw-sheet.mjs +58 -44
  77. package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
  78. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +25 -14
  79. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -1
  80. package/fesm2022/cdevhub-ngx-tw-slider.mjs +155 -79
  81. package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
  82. package/fesm2022/cdevhub-ngx-tw-sort.mjs +44 -25
  83. package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
  84. package/fesm2022/cdevhub-ngx-tw-spinner.mjs +29 -16
  85. package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -1
  86. package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -42
  87. package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
  88. package/fesm2022/cdevhub-ngx-tw-stat.mjs +107 -64
  89. package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
  90. package/fesm2022/cdevhub-ngx-tw-stepper.mjs +113 -47
  91. package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
  92. package/fesm2022/cdevhub-ngx-tw-switch.mjs +61 -32
  93. package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
  94. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +88 -42
  95. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
  96. package/fesm2022/cdevhub-ngx-tw-table.mjs +266 -118
  97. package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
  98. package/fesm2022/cdevhub-ngx-tw-tabs.mjs +101 -51
  99. package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
  100. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +798 -0
  101. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -0
  102. package/fesm2022/cdevhub-ngx-tw-textarea.mjs +11 -7
  103. package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
  104. package/fesm2022/cdevhub-ngx-tw-theme.mjs +22 -14
  105. package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
  106. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +243 -95
  107. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
  108. package/fesm2022/cdevhub-ngx-tw-timeline.mjs +149 -82
  109. package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
  110. package/fesm2022/cdevhub-ngx-tw-toast.mjs +89 -55
  111. package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
  112. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +50 -28
  113. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
  114. package/fesm2022/cdevhub-ngx-tw-transfer.mjs +1129 -0
  115. package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -0
  116. package/fesm2022/cdevhub-ngx-tw-tree.mjs +554 -0
  117. package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -0
  118. package/fesm2022/cdevhub-ngx-tw.mjs +7 -0
  119. package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -1
  120. package/index.json +1 -0
  121. package/package.json +45 -20
  122. package/theme/index.css +10 -2
  123. package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
  124. package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
  125. package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
  126. package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
  127. package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
  128. package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
  129. package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
  130. package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
  131. package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
  132. package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
  133. package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
  134. package/types/cdevhub-ngx-tw-table.d.ts +30 -1
  135. package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
  136. package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
  137. package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
  138. package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
  139. package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
  140. package/types/cdevhub-ngx-tw.d.ts +7 -0
@@ -1 +1 @@
1
- {"version":3,"file":"cdevhub-ngx-tw-sheet.mjs","sources":["../../../projects/ngx-tw/sheet/sheet-config.ts","../../../projects/ngx-tw/sheet/sheet-container.ts","../../../projects/ngx-tw/sheet/sheet-ref.ts","../../../projects/ngx-tw/sheet/sheet.ts","../../../projects/ngx-tw/sheet/sheet-content.ts","../../../projects/ngx-tw/sheet/cdevhub-ngx-tw-sheet.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport {\n type AutoFocusTarget,\n DialogConfig as CdkDialogConfig,\n type DialogRole,\n type RestoreFocusValue,\n} from '@angular/cdk/dialog';\n\n/** Edge the sheet anchors against. */\nexport type SheetSide = 'top' | 'right' | 'bottom' | 'left';\n\n/**\n * Preset size for the sheet panel.\n *\n * Sizing is axis-dependent:\n * - `'left' | 'right'` — controls panel width (height is always `100vh`).\n * - `'top' | 'bottom'` — controls panel height (width is always `100vw`).\n */\nexport type SheetSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/** ARIA role of the sheet element. Use `'alertdialog'` for destructive confirmation surfaces. */\nexport type SheetRole = DialogRole;\n\n/** Where to move focus when the sheet opens. */\nexport type SheetAutoFocus = AutoFocusTarget | string | boolean;\n\n/** How to restore focus on close. `true` restores to the previously focused element; a selector or element targets a specific node. */\nexport type SheetRestoreFocus = RestoreFocusValue;\n\n/** Scroll behavior for content underneath the sheet. */\nexport type SheetScrollStrategy = 'block' | 'close' | 'reposition' | 'noop';\n\n/**\n * Configuration for opening a sheet with {@link Sheet.open}.\n *\n * Extends `@angular/cdk/dialog`'s `DialogConfig` with sheet-specific options\n * (`side`, `size`, animation durations, split close flags).\n */\nexport class SheetConfig<D = unknown, R = unknown> extends CdkDialogConfig<D, R> {\n /** Edge the sheet anchors against. Defaults to `'right'`. */\n side?: SheetSide = 'right';\n\n /** Preset size for the sheet panel. Axis-dependent (width for left/right, height for top/bottom). Defaults to `'md'`. */\n size?: SheetSize = 'md';\n\n /** Duration of the open slide animation in ms. Defaults to `200`. Use `0` to disable. */\n enterAnimationDuration?: number = 200;\n\n /**\n * Duration of the close slide animation in ms. Defaults to `160`. Use `0` to disable.\n * Asymmetric with `enterAnimationDuration` by design — the close transition is slightly\n * faster so the sheet feels dismissive rather than reluctant.\n */\n exitAnimationDuration?: number = 160;\n\n /** Scroll strategy preset applied when `scrollStrategy` isn't set. Defaults to `'block'`. */\n scrollBehavior?: SheetScrollStrategy = 'block';\n\n /**\n * Whether the sheet is modal — sets `aria-modal` on the container. Defaults to `true`:\n * a sheet opened over the page is modal by default and the rest of the document is\n * inert while it is open. Set to `false` only for non-modal surfaces.\n */\n override ariaModal?: boolean = true;\n\n /** Whether the sheet renders a backdrop. Defaults to `true`. */\n override hasBackdrop?: boolean = true;\n\n /**\n * Whether pressing `Escape` closes the sheet.\n *\n * Defaults to `true` — Escape is the universal dismiss key for modal surfaces; the\n * \"swallow Escape\" variant is the special case. `disableClose` overrides this when\n * `true`.\n */\n closeOnEscape?: boolean = true;\n\n /**\n * Whether clicking the backdrop closes the sheet.\n *\n * Defaults to `true` — clicking outside a modal sheet is the expected dismiss\n * gesture; enforcing an explicit dismiss button is the special case. `disableClose`\n * overrides this when `true`.\n */\n closeOnBackdropClick?: boolean = true;\n\n /**\n * Whether Escape AND backdrop clicks are blocked. Defaults to `false`.\n * When `true`, this overrides both `closeOnEscape` and `closeOnBackdropClick`.\n */\n override disableClose?: boolean = false;\n\n /** Whether navigation (e.g. router) closes the sheet. Defaults to `true`. */\n override closeOnNavigation?: boolean = true;\n\n /** Where to move focus when the sheet opens. Defaults to `'first-tabbable'`. */\n override autoFocus?: SheetAutoFocus = 'first-tabbable';\n\n /** Whether to restore focus to the previously focused element after close. Defaults to `true`. */\n override restoreFocus?: SheetRestoreFocus = true;\n}\n\n/** Injection token carrying the `data` value passed via {@link SheetConfig.data}. */\nexport const SHEET_DATA = new InjectionToken<unknown>('SHEET_DATA');\n\n/** Injection token for application-wide default sheet options. Set via `provideSheet()`. */\nexport const SHEET_DEFAULT_OPTIONS = new InjectionToken<Partial<SheetConfig>>(\n 'SHEET_DEFAULT_OPTIONS',\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n type EventEmitter,\n inject,\n type Signal,\n ViewEncapsulation,\n computed,\n} from '@angular/core';\nimport { CdkDialogContainer } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport {\n coerceOverlayDuration,\n mergeOverlayPanelClass,\n OverlayContainerCoordinator,\n type OverlayContainerAnimationEvent,\n type OverlayContainerState,\n} from '@cdevhub/ngx-tw/core';\nimport { tv } from 'tailwind-variants';\nimport { type SheetConfig } from './sheet-config';\n\n/** Lifecycle states a sheet passes through. */\nexport type SheetState = OverlayContainerState;\n\n/** Event emitted when the sheet's animation state transitions. */\nexport type SheetAnimationEvent = OverlayContainerAnimationEvent;\n\n// Sheet uses a `data-[state]` + `data-[side]` driven CSS transition rather than\n// the project's `animate.enter`/`animate.leave` keyframes. Same rationale as\n// the dialog container (see `dialog-container.ts`):\n// 1. The ref owns the open/close lifecycle (state signal, observables) and\n// needs runtime-configurable enter/exit durations per `Sheet.open()` call\n// — `animate.enter` only accepts a static class name.\n// 2. The transform direction depends on `side`, and encoding four pairs of\n// keyframe classes (slide-in/out × 4 sides) is noisier than four\n// `data-[side=…]` selectors on a single transition rule.\n// All other library overlays (popover, menu, tooltip) use animate.enter/leave;\n// this divergence is intentional and isolated to the sheet container.\nconst sheetContainerVariants = tv(\n {\n slots: {\n host: 'fixed flex flex-col outline-none bg-surface-raised text-fg shadow-md overflow-hidden transition-[transform,opacity] ease-out motion-reduce:transition-none opacity-0 data-[state=open]:opacity-100',\n },\n variants: {\n side: {\n right: {\n host: 'h-screen right-0 top-0 border-l border-border data-[state=opening]:translate-x-full data-[state=closing]:translate-x-full data-[state=open]:translate-x-0',\n },\n left: {\n host: 'h-screen left-0 top-0 border-r border-border data-[state=opening]:-translate-x-full data-[state=closing]:-translate-x-full data-[state=open]:translate-x-0',\n },\n top: {\n host: 'w-screen left-0 top-0 border-b border-border data-[state=opening]:-translate-y-full data-[state=closing]:-translate-y-full data-[state=open]:translate-y-0',\n },\n bottom: {\n host: 'w-screen left-0 bottom-0 border-t border-border data-[state=opening]:translate-y-full data-[state=closing]:translate-y-full data-[state=open]:translate-y-0',\n },\n },\n size: {\n xs: { host: '' },\n sm: { host: '' },\n md: { host: '' },\n lg: { host: '' },\n xl: { host: '' },\n full: { host: '' },\n },\n },\n // Sheets are axis-aware: `size` controls width on horizontal sides and\n // height on vertical sides. Encoded as compound variants so a single\n // {side, size} pair resolves to one set of utility classes.\n compoundVariants: [\n // ── Right-anchored ─────────────────────────────────────────────\n { side: 'right', size: 'xs', class: { host: 'w-full max-w-xs' } },\n { side: 'right', size: 'sm', class: { host: 'w-full max-w-sm' } },\n { side: 'right', size: 'md', class: { host: 'w-full max-w-md' } },\n { side: 'right', size: 'lg', class: { host: 'w-full max-w-xl' } },\n { side: 'right', size: 'xl', class: { host: 'w-full max-w-2xl' } },\n { side: 'right', size: 'full', class: { host: 'w-screen max-w-none' } },\n // ── Left-anchored ──────────────────────────────────────────────\n { side: 'left', size: 'xs', class: { host: 'w-full max-w-xs' } },\n { side: 'left', size: 'sm', class: { host: 'w-full max-w-sm' } },\n { side: 'left', size: 'md', class: { host: 'w-full max-w-md' } },\n { side: 'left', size: 'lg', class: { host: 'w-full max-w-xl' } },\n { side: 'left', size: 'xl', class: { host: 'w-full max-w-2xl' } },\n { side: 'left', size: 'full', class: { host: 'w-screen max-w-none' } },\n // ── Top-anchored ───────────────────────────────────────────────\n { side: 'top', size: 'xs', class: { host: 'h-[20vh]' } },\n { side: 'top', size: 'sm', class: { host: 'h-[33vh]' } },\n { side: 'top', size: 'md', class: { host: 'h-[50vh]' } },\n { side: 'top', size: 'lg', class: { host: 'h-[66vh]' } },\n { side: 'top', size: 'xl', class: { host: 'h-[80vh]' } },\n { side: 'top', size: 'full', class: { host: 'h-screen' } },\n // ── Bottom-anchored ────────────────────────────────────────────\n { side: 'bottom', size: 'xs', class: { host: 'h-[20vh]' } },\n { side: 'bottom', size: 'sm', class: { host: 'h-[33vh]' } },\n { side: 'bottom', size: 'md', class: { host: 'h-[50vh]' } },\n { side: 'bottom', size: 'lg', class: { host: 'h-[66vh]' } },\n { side: 'bottom', size: 'xl', class: { host: 'h-[80vh]' } },\n { side: 'bottom', size: 'full', class: { host: 'h-screen' } },\n ],\n defaultVariants: { side: 'right', size: 'md' },\n },\n { twMerge: true },\n);\n\n/**\n * Sheet container rendered inside the CDK overlay. Wraps the user-provided\n * content in a Tailwind-styled, edge-anchored surface and coordinates slide\n * enter/exit transitions with {@link SheetRef}.\n *\n * The animation state machine, `aria-describedby` queue, and panel-class\n * merge are shared with `DialogContainer` via {@link OverlayContainerCoordinator}\n * (component-scoped — see `providers: [OverlayContainerCoordinator]`).\n *\n * @docs-private\n */\n@Component({\n selector: 'tw-sheet-container',\n template: '<ng-template cdkPortalOutlet />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CdkPortalOutlet],\n providers: [OverlayContainerCoordinator],\n host: {\n tabindex: '-1',\n '[attr.id]': '_config.id || null',\n '[attr.role]': '_config.role',\n '[attr.aria-modal]': '_config.ariaModal',\n '[attr.aria-labelledby]': '_config.ariaLabel ? null : _ariaLabelledByQueue[0]',\n '[attr.aria-label]': '_config.ariaLabel',\n '[attr.aria-describedby]': 'ariaDescribedByAttr()',\n '[attr.data-state]': 'state()',\n '[attr.data-side]': 'sideAttr()',\n '[class]': 'hostClasses()',\n '[style.transition-duration.ms]': 'transitionDuration()',\n },\n})\nexport class SheetContainer extends CdkDialogContainer<SheetConfig> {\n private readonly coordinator = inject(OverlayContainerCoordinator);\n\n /** Lifecycle state of the sheet's enter/exit animation. */\n readonly state: Signal<SheetState> = this.coordinator.state;\n\n /** Emits whenever the animation state transitions. */\n readonly animationStateChanged: EventEmitter<SheetAnimationEvent> =\n this.coordinator.animationStateChanged;\n\n /** Resolved enter-animation duration in ms. */\n readonly enterAnimationDuration: number;\n /** Resolved exit-animation duration in ms. */\n readonly exitAnimationDuration: number;\n\n protected readonly sideAttr = computed(() => this._config.side ?? 'right');\n\n private readonly variants = computed(() => {\n const side = this._config.side ?? 'right';\n const size = this._config.size ?? 'md';\n return sheetContainerVariants({ side, size });\n });\n\n protected readonly hostClasses = computed(() =>\n mergeOverlayPanelClass(this.variants().host(), this._config.panelClass),\n );\n\n protected readonly ariaDescribedByAttr = computed(\n () =>\n this._config.ariaDescribedBy ||\n this.coordinator.describedByIds()[0] ||\n null,\n );\n\n protected readonly transitionDuration = this.coordinator.transitionDuration;\n\n constructor() {\n super();\n this.enterAnimationDuration = coerceOverlayDuration(this._config.enterAnimationDuration, 200);\n this.exitAnimationDuration = coerceOverlayDuration(this._config.exitAnimationDuration, 160);\n this.coordinator.setDurations(this.enterAnimationDuration, this.exitAnimationDuration);\n }\n\n protected override _contentAttached(): void {\n super._contentAttached();\n this.coordinator.startEnterAnimation();\n }\n\n /** Triggered by the sheet ref to play the exit transition before disposing the overlay. */\n _startExitAnimation(): void {\n this.coordinator.startExitAnimation();\n }\n\n /** Registers a description id for the container's `aria-describedby`. */\n _addAriaDescribedBy(id: string): void {\n this.coordinator.addAriaDescribedBy(id);\n }\n\n /** Removes a previously registered description id. */\n _removeAriaDescribedBy(id: string): void {\n this.coordinator.removeAriaDescribedBy(id);\n }\n}\n","import { type ComponentRef, signal, type Signal } from '@angular/core';\nimport { type DialogRef as CdkDialogRef } from '@angular/cdk/dialog';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { filter, merge, type Observable, ReplaySubject, take } from 'rxjs';\nimport type { FocusOrigin } from '@angular/cdk/a11y';\nimport type { SheetConfig } from './sheet-config';\nimport type { SheetContainer, SheetState } from './sheet-container';\n\n/**\n * Reference to a sheet opened via {@link Sheet.open}. Drives the sheet\n * lifecycle (close, state, observables) and forwards useful overlay streams.\n */\nexport class SheetRef<R = unknown, C = unknown> {\n /** Unique ID of the sheet. */\n readonly id: string;\n\n /** Instance of the component rendered inside the sheet, or `null` for template sheets. */\n componentInstance: C | null = null;\n\n /** `ComponentRef` of the content component, or `null` for template sheets. */\n readonly componentRef: ComponentRef<C> | null = null;\n\n /** Current lifecycle state. Reactively readable. */\n readonly state: Signal<SheetState>;\n\n /** When `true`, close-via-escape AND close-via-backdrop are both disabled. */\n disableClose: boolean | undefined;\n\n /** When `false`, pressing Escape does not close the sheet. */\n closeOnEscape: boolean | undefined;\n\n /** When `false`, clicking the backdrop does not close the sheet. */\n closeOnBackdropClick: boolean | undefined;\n\n private readonly stateSignal = signal<SheetState>('opening');\n private readonly afterOpenedSubject = new ReplaySubject<void>(1);\n private readonly beforeClosedSubject = new ReplaySubject<R | undefined>(1);\n private readonly afterClosedSubject = new ReplaySubject<R | undefined>(1);\n\n private pendingResult: R | undefined;\n private closeFocusOrigin: FocusOrigin | undefined;\n\n constructor(\n private readonly cdkRef: CdkDialogRef<R, C>,\n readonly config: SheetConfig<unknown, R>,\n readonly containerInstance: SheetContainer,\n ) {\n this.id = cdkRef.id;\n this.disableClose = config.disableClose;\n this.closeOnEscape = config.closeOnEscape;\n this.closeOnBackdropClick = config.closeOnBackdropClick;\n this.state = this.stateSignal.asReadonly();\n\n cdkRef.addPanelClass('tw-sheet-panel');\n\n const animationChanges = containerInstance.animationStateChanged;\n\n animationChanges\n .pipe(\n filter((event) => event.state === 'open'),\n take(1),\n )\n .subscribe(() => {\n this.stateSignal.set('open');\n this.afterOpenedSubject.next();\n this.afterOpenedSubject.complete();\n });\n\n // The container owns the exit-animation fallback timer\n // (ANIMATION_FALLBACK_PADDING in sheet-container.ts), so we trust its\n // `closed` emission and run finishClose exactly once from here.\n animationChanges\n .pipe(\n filter((event) => event.state === 'closed'),\n take(1),\n )\n .subscribe(() => this.finishClose());\n\n cdkRef.overlayRef.detachments().subscribe(() => {\n if (this.stateSignal() !== 'closed') {\n this.beforeClosedSubject.next(this.pendingResult);\n this.beforeClosedSubject.complete();\n this.finishClose();\n }\n });\n\n merge(\n cdkRef.backdropClick.pipe(\n filter(() => !this.disableClose && this.closeOnBackdropClick !== false),\n ),\n cdkRef.keydownEvents.pipe(\n filter(\n (event) =>\n event.keyCode === ESCAPE &&\n !this.disableClose &&\n this.closeOnEscape !== false &&\n !hasModifierKey(event),\n ),\n ),\n ).subscribe((event) => {\n event.preventDefault();\n this.closeWithOrigin(event.type === 'keydown' ? 'keyboard' : 'mouse');\n });\n }\n\n /**\n * Closes the sheet. The exit slide animation runs before the overlay is disposed.\n * @param result Value forwarded to `afterClosed()` subscribers.\n */\n close(result?: R): void {\n this.closeWithOrigin('program', result);\n }\n\n /** Observable that emits once after the enter animation finishes. */\n afterOpened(): Observable<void> {\n return this.afterOpenedSubject.asObservable();\n }\n\n /** Observable that emits once when the close animation starts. */\n beforeClosed(): Observable<R | undefined> {\n return this.beforeClosedSubject.asObservable();\n }\n\n /** Observable that emits once after the sheet has fully closed and the overlay is disposed. */\n afterClosed(): Observable<R | undefined> {\n return this.afterClosedSubject.asObservable();\n }\n\n /** Backdrop click stream (emits even when `closeOnBackdropClick` / `disableClose` is set). */\n backdropClick(): Observable<MouseEvent> {\n return this.cdkRef.backdropClick;\n }\n\n /** Keydown event stream for the overlay. */\n keydownEvents(): Observable<KeyboardEvent> {\n return this.cdkRef.keydownEvents;\n }\n\n /** Adds CSS classes to the overlay panel. */\n addPanelClass(classes: string | string[]): this {\n this.cdkRef.addPanelClass(classes);\n return this;\n }\n\n /** Removes CSS classes from the overlay panel. */\n removePanelClass(classes: string | string[]): this {\n this.cdkRef.removePanelClass(classes);\n return this;\n }\n\n private closeWithOrigin(origin: FocusOrigin, result?: R): void {\n if (this.stateSignal() === 'closing' || this.stateSignal() === 'closed') return;\n\n const predicate = this.config.closePredicate;\n if (\n predicate &&\n !predicate(\n result,\n this.config as unknown as Parameters<typeof predicate>[1],\n this.componentInstance,\n )\n ) {\n return;\n }\n\n this.pendingResult = result;\n this.closeFocusOrigin = origin;\n this.stateSignal.set('closing');\n\n this.beforeClosedSubject.next(result);\n this.beforeClosedSubject.complete();\n\n this.cdkRef.overlayRef.detachBackdrop();\n this.containerInstance._startExitAnimation();\n }\n\n private finishClose(): void {\n if (this.stateSignal() === 'closed') return;\n this.stateSignal.set('closed');\n\n this.afterClosedSubject.next(this.pendingResult);\n this.afterClosedSubject.complete();\n\n if (this.cdkRef.containerInstance) {\n this.cdkRef.close(this.pendingResult, { focusOrigin: this.closeFocusOrigin });\n }\n\n this.componentInstance = null;\n }\n}\n","import {\n type ComponentRef,\n inject,\n Injectable,\n Injector,\n type OnDestroy,\n type Provider,\n type StaticProvider,\n type TemplateRef,\n signal,\n type Signal,\n makeEnvironmentProviders,\n type EnvironmentProviders,\n} from '@angular/core';\nimport { Dialog, DialogConfig as CdkDialogConfig } from '@angular/cdk/dialog';\nimport {\n createBlockScrollStrategy,\n createCloseScrollStrategy,\n createGlobalPositionStrategy,\n createNoopScrollStrategy,\n createRepositionScrollStrategy,\n type GlobalPositionStrategy,\n type ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport type { ComponentType } from '@angular/cdk/portal';\nimport { defer, type Observable, startWith, Subject } from 'rxjs';\nimport {\n SHEET_DATA,\n SHEET_DEFAULT_OPTIONS,\n SheetConfig,\n type SheetScrollStrategy,\n type SheetSide,\n} from './sheet-config';\nimport { SheetContainer } from './sheet-container';\nimport { SheetRef } from './sheet-ref';\n\n/**\n * Opens edge-anchored sheet (drawer) overlays. Composes `@angular/cdk/dialog`\n * for focus trapping, portals, and overlay plumbing — adds a `GlobalPositionStrategy`\n * pinned to the requested viewport edge, a Tailwind container with axis-aware\n * sizing, slide enter/exit animations, and split close-behavior flags.\n *\n * Not `providedIn: 'root'` — register it via {@link provideSheet}.\n */\n@Injectable()\nexport class Sheet implements OnDestroy {\n private readonly cdkDialog = inject(Dialog);\n private readonly injector = inject(Injector);\n private readonly defaultOptions = inject(SHEET_DEFAULT_OPTIONS, { optional: true }) ?? {};\n private readonly parentSheet = inject(Sheet, { optional: true, skipSelf: true });\n\n private readonly openSheetsAtThisLevel = signal<readonly SheetRef<unknown, unknown>[]>([]);\n private readonly afterOpenedSubject = new Subject<SheetRef<unknown, unknown>>();\n private readonly afterAllClosedSubject = new Subject<void>();\n\n /** Reactively-readable list of currently-open sheets across the full sheet tree. */\n readonly openSheets: Signal<readonly SheetRef<unknown, unknown>[]> = this.parentSheet\n ? this.parentSheet.openSheets\n : this.openSheetsAtThisLevel.asReadonly();\n\n /** Emits every time a sheet is opened. */\n readonly afterOpened: Observable<SheetRef<unknown, unknown>> = this.parentSheet\n ? this.parentSheet.afterOpened\n : this.afterOpenedSubject.asObservable();\n\n /**\n * Emits when every open sheet has closed. Emits immediately on subscribe if\n * there are none open.\n */\n readonly afterAllClosed: Observable<void> = defer(() =>\n this.openSheets().length\n ? this.getAfterAllClosedSource()\n : this.getAfterAllClosedSource().pipe(startWith(undefined as void)),\n );\n\n /**\n * Opens a sheet using the given component or template.\n * @param content Component class or `TemplateRef`.\n * @param config Options merged over the application defaults.\n * @returns Reference controlling the opened sheet.\n */\n open<R = unknown, D = unknown, C = unknown>(\n content: ComponentType<C> | TemplateRef<C>,\n config?: SheetConfig<D, R>,\n ): SheetRef<R, C> {\n const merged = this.resolveConfig<D, R>(config);\n let sheetRef!: SheetRef<R, C>;\n\n const cdkRef = this.cdkDialog.open<R, D, C>(content, {\n id: merged.id,\n role: merged.role,\n data: merged.data,\n panelClass: merged.panelClass,\n backdropClass: merged.backdropClass || 'tw-sheet-backdrop',\n hasBackdrop: merged.hasBackdrop,\n // Sheet sizing happens on the container element (axis-aware width/height\n // utilities). The overlay pane itself is the full-edge bounding box.\n direction: merged.direction,\n ariaDescribedBy: merged.ariaDescribedBy,\n ariaLabelledBy: merged.ariaLabelledBy,\n ariaLabel: merged.ariaLabel,\n ariaModal: merged.ariaModal,\n autoFocus: merged.autoFocus,\n restoreFocus: merged.restoreFocus,\n scrollStrategy: merged.scrollStrategy ?? this.resolveScrollStrategy(merged.scrollBehavior),\n positionStrategy:\n merged.positionStrategy ?? this.resolvePositionStrategy(merged.side ?? 'right'),\n closeOnNavigation: merged.closeOnNavigation,\n viewContainerRef: merged.viewContainerRef,\n injector: merged.injector,\n // We handle close/Escape/backdrop ourselves so we can run the exit slide animation.\n disableClose: true,\n closeOnOverlayDetachments: false,\n container: {\n type: SheetContainer,\n providers: () => [\n { provide: SheetConfig, useValue: merged },\n { provide: CdkDialogConfig, useValue: merged },\n ],\n },\n providers: (_cdkRef, _cdkConfig, container) => {\n sheetRef = new SheetRef<R, C>(\n _cdkRef,\n merged as unknown as SheetConfig<unknown, R>,\n container as SheetContainer,\n );\n const providers: StaticProvider[] = [\n { provide: SheetRef, useValue: sheetRef },\n { provide: SHEET_DATA, useValue: merged.data ?? null },\n ];\n if (Array.isArray(merged.providers)) providers.push(...merged.providers);\n return providers;\n },\n });\n\n // After CDK attaches the component, copy references onto our ref.\n (sheetRef as { componentRef: ComponentRef<C> | null }).componentRef = cdkRef.componentRef;\n sheetRef.componentInstance = cdkRef.componentInstance as C | null;\n\n const scope = this.parentSheet ?? this;\n scope.registerOpen(sheetRef as unknown as SheetRef<unknown, unknown>);\n\n sheetRef.afterClosed().subscribe(() => {\n scope.unregister(sheetRef as unknown as SheetRef<unknown, unknown>);\n });\n\n return sheetRef;\n }\n\n /** Closes every open sheet managed by this service (and child services). */\n closeAll(): void {\n const sheets = [...this.openSheets()];\n for (let i = sheets.length - 1; i >= 0; i--) sheets[i].close();\n }\n\n /** Looks up an open sheet by its id. */\n getSheetById<R = unknown, C = unknown>(id: string): SheetRef<R, C> | undefined {\n return this.openSheets().find((sheet) => sheet.id === id) as SheetRef<R, C> | undefined;\n }\n\n ngOnDestroy(): void {\n const sheets = [...this.openSheetsAtThisLevel()];\n for (let i = sheets.length - 1; i >= 0; i--) sheets[i].close();\n this.afterOpenedSubject.complete();\n this.afterAllClosedSubject.complete();\n }\n\n private registerOpen(ref: SheetRef<unknown, unknown>): void {\n if (this.parentSheet) {\n this.parentSheet.registerOpen(ref);\n } else {\n this.openSheetsAtThisLevel.update((list) => [...list, ref]);\n this.afterOpenedSubject.next(ref);\n }\n }\n\n private unregister(ref: SheetRef<unknown, unknown>): void {\n if (this.parentSheet) {\n this.parentSheet.unregister(ref);\n } else {\n this.openSheetsAtThisLevel.update((list) => list.filter((d) => d !== ref));\n if (this.openSheetsAtThisLevel().length === 0) {\n this.afterAllClosedSubject.next();\n }\n }\n }\n\n private getAfterAllClosedSource(): Subject<void> {\n return this.parentSheet\n ? this.parentSheet.getAfterAllClosedSource()\n : this.afterAllClosedSubject;\n }\n\n private resolveConfig<D, R>(config: SheetConfig<D, R> | undefined): SheetConfig<D, R> {\n const merged = new SheetConfig<D, R>();\n Object.assign(merged, this.defaultOptions, config);\n return merged;\n }\n\n private resolveScrollStrategy(strategy: SheetScrollStrategy | undefined): ScrollStrategy {\n switch (strategy) {\n case 'close':\n return createCloseScrollStrategy(this.injector);\n case 'reposition':\n return createRepositionScrollStrategy(this.injector);\n case 'noop':\n return createNoopScrollStrategy();\n case 'block':\n default:\n return createBlockScrollStrategy(this.injector);\n }\n }\n\n private resolvePositionStrategy(side: SheetSide): GlobalPositionStrategy {\n const strategy = createGlobalPositionStrategy(this.injector);\n switch (side) {\n case 'left':\n return strategy.top('0').left('0').bottom('0');\n case 'top':\n return strategy.top('0').left('0').right('0');\n case 'bottom':\n return strategy.bottom('0').left('0').right('0');\n case 'right':\n default:\n return strategy.top('0').right('0').bottom('0');\n }\n }\n}\n\n/**\n * Registers the {@link Sheet} service for dependency injection.\n *\n * @param defaultOptions Optional defaults merged into every `open()` call.\n * @example\n * ```ts\n * provideSheet({ side: 'left', size: 'lg' })\n * ```\n */\nexport function provideSheet(defaultOptions?: Partial<SheetConfig>): EnvironmentProviders {\n const providers: Provider[] = [Sheet];\n if (defaultOptions) {\n providers.push({ provide: SHEET_DEFAULT_OPTIONS, useValue: defaultOptions });\n }\n return makeEnvironmentProviders(providers);\n}\n","import {\n computed,\n Directive,\n inject,\n input,\n type OnDestroy,\n type OnInit,\n} from '@angular/core';\nimport { _IdGenerator } from '@angular/cdk/a11y';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport type { TwColor } from '@cdevhub/ngx-tw/core';\nimport { SheetRef } from './sheet-ref';\nimport { SheetContainer } from './sheet-container';\n\n/**\n * Header wrapper for a sheet. Provides consistent padding and spacing for\n * title + subtitle + leading icon, and separates the header from scrollable\n * content below.\n */\n@Directive({\n selector: '[twSheetHeader], tw-sheet-header',\n host: {\n class: 'flex items-start gap-3 px-6 pt-6 pb-4',\n },\n})\nexport class SheetHeaderDirective {}\n\n// Slot tokens own light/dark contrast — no `dark:` overrides, no shade picks.\n// See role slot conventions in `projects/ngx-tw/theme/_semantic.css`.\nconst ICON_COLOR_CLASSES: Record<TwColor, string> = {\n primary: 'bg-primary-soft text-primary-icon',\n secondary: 'bg-secondary-soft text-secondary-icon',\n accent: 'bg-accent-soft text-accent-icon',\n neutral: 'bg-neutral-soft text-neutral-icon',\n info: 'bg-info-soft text-info-icon',\n success: 'bg-success-soft text-success-icon',\n warning: 'bg-warning-soft text-warning-icon',\n error: 'bg-error-soft text-error-icon',\n};\n\n/**\n * Decorative leading icon for a sheet header. Use with a semantic `color` to\n * match destructive / informational / success sheets.\n */\n@Directive({\n selector: '[twSheetIcon]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class SheetIconDirective {\n /** Semantic color for the icon container. Defaults to a neutral surface. */\n readonly color = input<TwColor | undefined>(undefined);\n\n protected readonly classes = computed(() => {\n const base = 'flex size-10 shrink-0 items-center justify-center rounded-full';\n const color = this.color();\n return color ? `${base} ${ICON_COLOR_CLASSES[color]}` : `${base} bg-surface-muted text-fg`;\n });\n}\n\n/**\n * Sheet title. Registers its ID with the container's `aria-labelledby` queue\n * so screen readers announce it automatically.\n */\n@Directive({\n selector: '[twSheetTitle], tw-sheet-title',\n host: {\n class: 'text-sm font-semibold text-fg',\n '[id]': 'id()',\n },\n})\nexport class SheetTitleDirective implements OnInit, OnDestroy {\n private readonly generatedId = inject(_IdGenerator).getId('tw-sheet-title-');\n private readonly sheetRef = inject<SheetRef<unknown, unknown>>(SheetRef, { optional: true });\n // Ancestor-DI fallback for the rare case where `SheetRef` is not in the\n // directive's injector chain (e.g. heavily nested template portals). The\n // container ALWAYS resolves via element-injector traversal because the\n // directive lives inside `<tw-sheet-container>`'s DOM tree.\n private readonly container = inject(SheetContainer, { optional: true, skipSelf: true });\n\n /** Custom id for the title element. Defaults to a generated unique id. */\n readonly id = input<string>(this.generatedId);\n\n ngOnInit(): void {\n const containerInstance = this.sheetRef?.containerInstance ?? this.container;\n if (containerInstance) containerInstance._addAriaLabelledBy(this.id());\n }\n\n ngOnDestroy(): void {\n const containerInstance = this.sheetRef?.containerInstance ?? this.container;\n if (containerInstance) containerInstance._removeAriaLabelledBy(this.id());\n }\n}\n\n/** Secondary line beneath the sheet title — intended for a short description. */\n@Directive({\n selector: '[twSheetSubtitle], tw-sheet-subtitle',\n host: {\n class: 'text-sm text-fg-muted',\n },\n})\nexport class SheetSubtitleDirective {}\n\n/**\n * Sheet description. Registers its ID with the container's `aria-describedby`\n * queue so screen readers announce the descriptive paragraph after the title.\n * Mirrors {@link SheetTitleDirective} but for `aria-describedby`.\n */\n@Directive({\n selector: '[twSheetDescription], tw-sheet-description',\n host: {\n '[id]': 'id()',\n },\n})\nexport class SheetDescriptionDirective implements OnInit, OnDestroy {\n private readonly generatedId = inject(_IdGenerator).getId('tw-sheet-description-');\n private readonly sheetRef = inject<SheetRef<unknown, unknown>>(SheetRef, { optional: true });\n // Ancestor-DI fallback — see SheetTitleDirective.\n private readonly container = inject(SheetContainer, { optional: true, skipSelf: true });\n\n /** Custom id for the description element. Defaults to a generated unique id. */\n readonly id = input<string>(this.generatedId);\n\n ngOnInit(): void {\n const containerInstance = this.sheetRef?.containerInstance ?? this.container;\n if (containerInstance) containerInstance._addAriaDescribedBy(this.id());\n }\n\n ngOnDestroy(): void {\n const containerInstance = this.sheetRef?.containerInstance ?? this.container;\n if (containerInstance) containerInstance._removeAriaDescribedBy(this.id());\n }\n}\n\n/**\n * Scrollable content region of the sheet. Apply between the header and the\n * actions bar. Inherits CDK's `CdkScrollable` to play nicely with scroll\n * strategies and nested scrollables.\n */\n@Directive({\n selector: '[twSheetContent], tw-sheet-content',\n hostDirectives: [CdkScrollable],\n host: {\n class: 'flex-1 overflow-y-auto px-6 py-4 text-sm text-fg',\n },\n})\nexport class SheetContentDirective {}\n\n/** Horizontal alignment for sheet action buttons. */\nexport type SheetActionsAlign = 'start' | 'center' | 'end';\n\n/**\n * Bottom action bar of a sheet. Use inside the sheet content or template to\n * host Cancel/Confirm buttons. Stays pinned below scrollable content.\n */\n@Directive({\n selector: '[twSheetActions], tw-sheet-actions',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class SheetActionsDirective {\n /** Horizontal alignment of the action buttons. Defaults to `'end'`. */\n readonly align = input<SheetActionsAlign>('end');\n\n protected readonly classes = computed(() => {\n const align = this.align();\n const justify =\n align === 'start' ? 'justify-start' : align === 'center' ? 'justify-center' : 'justify-end';\n return `flex flex-wrap items-center gap-2 px-6 py-4 border-t border-border-muted ${justify}`;\n });\n}\n\n/**\n * Closes the enclosing sheet when the host button is clicked. Provide a\n * `[twSheetClose]` value to pass a result to `afterClosed()` subscribers.\n */\n@Directive({\n selector: '[twSheetClose]',\n host: {\n '(click)': 'onClick()',\n '[attr.type]': 'type()',\n },\n})\nexport class SheetCloseDirective {\n /** Value passed to `afterClosed()` when the button is clicked. */\n readonly twSheetClose = input<unknown>(undefined);\n\n /** Native button `type`. Defaults to `'button'` to avoid accidental form submission. */\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n\n private readonly sheetRef = inject<SheetRef<unknown, unknown>>(SheetRef, { optional: true });\n\n protected onClick(): void {\n this.sheetRef?.close(this.twSheetClose());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["CdkDialogConfig"],"mappings":"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"}
1
+ {"version":3,"file":"cdevhub-ngx-tw-sheet.mjs","sources":["../../../projects/ngx-tw/sheet/sheet-config.ts","../../../projects/ngx-tw/sheet/sheet-container.ts","../../../projects/ngx-tw/sheet/sheet-ref.ts","../../../projects/ngx-tw/sheet/sheet.ts","../../../projects/ngx-tw/sheet/sheet-content.ts","../../../projects/ngx-tw/sheet/cdevhub-ngx-tw-sheet.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport {\n type AutoFocusTarget,\n DialogConfig as CdkDialogConfig,\n type DialogRole,\n type RestoreFocusValue,\n} from '@angular/cdk/dialog';\n\n/** Edge the sheet anchors against. */\nexport type SheetSide = 'top' | 'right' | 'bottom' | 'left';\n\n/**\n * Preset size for the sheet panel.\n *\n * Sizing is axis-dependent:\n * - `'left' | 'right'` — controls panel width (height is always `100vh`).\n * - `'top' | 'bottom'` — controls panel height (width is always `100vw`).\n */\nexport type SheetSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/** ARIA role of the sheet element. Use `'alertdialog'` for destructive confirmation surfaces. */\nexport type SheetRole = DialogRole;\n\n/** Where to move focus when the sheet opens. */\nexport type SheetAutoFocus = AutoFocusTarget | string | boolean;\n\n/** How to restore focus on close. `true` restores to the previously focused element; a selector or element targets a specific node. */\nexport type SheetRestoreFocus = RestoreFocusValue;\n\n/** Scroll behavior for content underneath the sheet. */\nexport type SheetScrollStrategy = 'block' | 'close' | 'reposition' | 'noop';\n\n/**\n * Configuration for opening a sheet with {@link Sheet.open}.\n *\n * Extends `@angular/cdk/dialog`'s `DialogConfig` with sheet-specific options\n * (`side`, `size`, animation durations, split close flags).\n */\nexport class SheetConfig<D = unknown, R = unknown> extends CdkDialogConfig<D, R> {\n /** Edge the sheet anchors against. Defaults to `'right'`. */\n side?: SheetSide = 'right';\n\n /** Preset size for the sheet panel. Axis-dependent (width for left/right, height for top/bottom). Defaults to `'md'`. */\n size?: SheetSize = 'md';\n\n /** Duration of the open slide animation in ms. Defaults to `200`. Use `0` to disable. */\n enterAnimationDuration?: number = 200;\n\n /**\n * Duration of the close slide animation in ms. Defaults to `160`. Use `0` to disable.\n * Asymmetric with `enterAnimationDuration` by design — the close transition is slightly\n * faster so the sheet feels dismissive rather than reluctant.\n */\n exitAnimationDuration?: number = 160;\n\n /** Scroll strategy preset applied when `scrollStrategy` isn't set. Defaults to `'block'`. */\n scrollBehavior?: SheetScrollStrategy = 'block';\n\n /**\n * Whether the sheet is modal — sets `aria-modal` on the container. Defaults to `true`:\n * a sheet opened over the page is modal by default and the rest of the document is\n * inert while it is open. Set to `false` only for non-modal surfaces.\n */\n override ariaModal?: boolean = true;\n\n /** Whether the sheet renders a backdrop. Defaults to `true`. */\n override hasBackdrop?: boolean = true;\n\n /**\n * Whether pressing `Escape` closes the sheet.\n *\n * Defaults to `true` — Escape is the universal dismiss key for modal surfaces; the\n * \"swallow Escape\" variant is the special case. `disableClose` overrides this when\n * `true`.\n */\n closeOnEscape?: boolean = true;\n\n /**\n * Whether clicking the backdrop closes the sheet.\n *\n * Defaults to `true` — clicking outside a modal sheet is the expected dismiss\n * gesture; enforcing an explicit dismiss button is the special case. `disableClose`\n * overrides this when `true`.\n */\n closeOnBackdropClick?: boolean = true;\n\n /**\n * Whether Escape AND backdrop clicks are blocked. Defaults to `false`.\n * When `true`, this overrides both `closeOnEscape` and `closeOnBackdropClick`.\n */\n override disableClose?: boolean = false;\n\n /** Whether navigation (e.g. router) closes the sheet. Defaults to `true`. */\n override closeOnNavigation?: boolean = true;\n\n /** Where to move focus when the sheet opens. Defaults to `'first-tabbable'`. */\n override autoFocus?: SheetAutoFocus = 'first-tabbable';\n\n /** Whether to restore focus to the previously focused element after close. Defaults to `true`. */\n override restoreFocus?: SheetRestoreFocus = true;\n}\n\n/** Injection token carrying the `data` value passed via {@link SheetConfig.data}. */\nexport const SHEET_DATA = new InjectionToken<unknown>('SHEET_DATA');\n\n/** Injection token for application-wide default sheet options. Set via `provideSheet()`. */\nexport const SHEET_DEFAULT_OPTIONS = new InjectionToken<Partial<SheetConfig>>(\n 'SHEET_DEFAULT_OPTIONS',\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n type EventEmitter,\n inject,\n type Signal,\n ViewEncapsulation,\n computed,\n} from '@angular/core';\nimport { CdkDialogContainer } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport {\n coerceOverlayDuration,\n mergeOverlayPanelClass,\n OverlayContainerCoordinator,\n type OverlayContainerAnimationEvent,\n type OverlayContainerState,\n} from '@cdevhub/ngx-tw/core';\nimport { tv } from 'tailwind-variants';\nimport { type SheetConfig } from './sheet-config';\n\n/** Lifecycle states a sheet passes through. */\nexport type SheetState = OverlayContainerState;\n\n/** Event emitted when the sheet's animation state transitions. */\nexport type SheetAnimationEvent = OverlayContainerAnimationEvent;\n\n// Sheet uses a `data-[state]` + `data-[side]` driven CSS transition rather than\n// the project's `animate.enter`/`animate.leave` keyframes. Same rationale as\n// the dialog container (see `dialog-container.ts`):\n// 1. The ref owns the open/close lifecycle (state signal, observables) and\n// needs runtime-configurable enter/exit durations per `Sheet.open()` call\n// — `animate.enter` only accepts a static class name.\n// 2. The transform direction depends on `side`, and encoding four pairs of\n// keyframe classes (slide-in/out × 4 sides) is noisier than four\n// `data-[side=…]` selectors on a single transition rule.\n// All other library overlays (popover, menu, tooltip) use animate.enter/leave;\n// this divergence is intentional and isolated to the sheet container.\nconst sheetContainerVariants = tv(\n {\n slots: {\n host: 'fixed flex flex-col outline-none bg-surface-raised text-fg shadow-md overflow-hidden transition-[transform,opacity] ease-out motion-reduce:transition-none opacity-0 data-[state=open]:opacity-100',\n },\n variants: {\n side: {\n right: {\n host: 'h-screen right-0 top-0 border-l border-border data-[state=opening]:translate-x-full data-[state=closing]:translate-x-full data-[state=open]:translate-x-0',\n },\n left: {\n host: 'h-screen left-0 top-0 border-r border-border data-[state=opening]:-translate-x-full data-[state=closing]:-translate-x-full data-[state=open]:translate-x-0',\n },\n top: {\n host: 'w-screen left-0 top-0 border-b border-border data-[state=opening]:-translate-y-full data-[state=closing]:-translate-y-full data-[state=open]:translate-y-0',\n },\n bottom: {\n host: 'w-screen left-0 bottom-0 border-t border-border data-[state=opening]:translate-y-full data-[state=closing]:translate-y-full data-[state=open]:translate-y-0',\n },\n },\n size: {\n xs: { host: '' },\n sm: { host: '' },\n md: { host: '' },\n lg: { host: '' },\n xl: { host: '' },\n full: { host: '' },\n },\n },\n // Sheets are axis-aware: `size` controls width on horizontal sides and\n // height on vertical sides. Encoded as compound variants so a single\n // {side, size} pair resolves to one set of utility classes.\n compoundVariants: [\n // ── Right-anchored ─────────────────────────────────────────────\n { side: 'right', size: 'xs', class: { host: 'w-full max-w-xs' } },\n { side: 'right', size: 'sm', class: { host: 'w-full max-w-sm' } },\n { side: 'right', size: 'md', class: { host: 'w-full max-w-md' } },\n { side: 'right', size: 'lg', class: { host: 'w-full max-w-xl' } },\n { side: 'right', size: 'xl', class: { host: 'w-full max-w-2xl' } },\n { side: 'right', size: 'full', class: { host: 'w-screen max-w-none' } },\n // ── Left-anchored ──────────────────────────────────────────────\n { side: 'left', size: 'xs', class: { host: 'w-full max-w-xs' } },\n { side: 'left', size: 'sm', class: { host: 'w-full max-w-sm' } },\n { side: 'left', size: 'md', class: { host: 'w-full max-w-md' } },\n { side: 'left', size: 'lg', class: { host: 'w-full max-w-xl' } },\n { side: 'left', size: 'xl', class: { host: 'w-full max-w-2xl' } },\n { side: 'left', size: 'full', class: { host: 'w-screen max-w-none' } },\n // ── Top-anchored ───────────────────────────────────────────────\n { side: 'top', size: 'xs', class: { host: 'h-[20vh]' } },\n { side: 'top', size: 'sm', class: { host: 'h-[33vh]' } },\n { side: 'top', size: 'md', class: { host: 'h-[50vh]' } },\n { side: 'top', size: 'lg', class: { host: 'h-[66vh]' } },\n { side: 'top', size: 'xl', class: { host: 'h-[80vh]' } },\n { side: 'top', size: 'full', class: { host: 'h-screen' } },\n // ── Bottom-anchored ────────────────────────────────────────────\n { side: 'bottom', size: 'xs', class: { host: 'h-[20vh]' } },\n { side: 'bottom', size: 'sm', class: { host: 'h-[33vh]' } },\n { side: 'bottom', size: 'md', class: { host: 'h-[50vh]' } },\n { side: 'bottom', size: 'lg', class: { host: 'h-[66vh]' } },\n { side: 'bottom', size: 'xl', class: { host: 'h-[80vh]' } },\n { side: 'bottom', size: 'full', class: { host: 'h-screen' } },\n ],\n defaultVariants: { side: 'right', size: 'md' },\n },\n { twMerge: true },\n);\n\n/**\n * Sheet container rendered inside the CDK overlay. Wraps the user-provided\n * content in a Tailwind-styled, edge-anchored surface and coordinates slide\n * enter/exit transitions with {@link SheetRef}.\n *\n * The animation state machine, `aria-describedby` queue, and panel-class\n * merge are shared with `DialogContainer` via {@link OverlayContainerCoordinator}\n * (component-scoped — see `providers: [OverlayContainerCoordinator]`).\n *\n * @docs-private\n */\n@Component({\n selector: 'tw-sheet-container',\n template: '<ng-template cdkPortalOutlet />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CdkPortalOutlet],\n providers: [OverlayContainerCoordinator],\n host: {\n tabindex: '-1',\n '[attr.id]': '_config.id || null',\n '[attr.role]': '_config.role',\n '[attr.aria-modal]': '_config.ariaModal',\n '[attr.aria-labelledby]': '_config.ariaLabel ? null : _ariaLabelledByQueue[0]',\n '[attr.aria-label]': '_config.ariaLabel',\n '[attr.aria-describedby]': 'ariaDescribedByAttr()',\n '[attr.data-state]': 'state()',\n '[attr.data-side]': 'sideAttr()',\n '[class]': 'hostClasses()',\n '[style.transition-duration.ms]': 'transitionDuration()',\n },\n})\nexport class SheetContainer extends CdkDialogContainer<SheetConfig> {\n private readonly coordinator = inject(OverlayContainerCoordinator);\n\n /** Lifecycle state of the sheet's enter/exit animation. */\n readonly state: Signal<SheetState> = this.coordinator.state;\n\n /** Emits whenever the animation state transitions. */\n readonly animationStateChanged: EventEmitter<SheetAnimationEvent> =\n this.coordinator.animationStateChanged;\n\n /** Resolved enter-animation duration in ms. */\n readonly enterAnimationDuration: number;\n /** Resolved exit-animation duration in ms. */\n readonly exitAnimationDuration: number;\n\n protected readonly sideAttr = computed(() => this._config.side ?? 'right');\n\n private readonly variants = computed(() => {\n const side = this._config.side ?? 'right';\n const size = this._config.size ?? 'md';\n return sheetContainerVariants({ side, size });\n });\n\n protected readonly hostClasses = computed(() =>\n mergeOverlayPanelClass(this.variants().host(), this._config.panelClass),\n );\n\n protected readonly ariaDescribedByAttr = computed(\n () =>\n this._config.ariaDescribedBy ||\n this.coordinator.describedByIds()[0] ||\n null,\n );\n\n protected readonly transitionDuration = this.coordinator.transitionDuration;\n\n constructor() {\n super();\n this.enterAnimationDuration = coerceOverlayDuration(this._config.enterAnimationDuration, 200);\n this.exitAnimationDuration = coerceOverlayDuration(this._config.exitAnimationDuration, 160);\n this.coordinator.setDurations(this.enterAnimationDuration, this.exitAnimationDuration);\n }\n\n protected override _contentAttached(): void {\n super._contentAttached();\n this.coordinator.startEnterAnimation();\n }\n\n /** Triggered by the sheet ref to play the exit transition before disposing the overlay. */\n _startExitAnimation(): void {\n this.coordinator.startExitAnimation();\n }\n\n /** Registers a description id for the container's `aria-describedby`. */\n _addAriaDescribedBy(id: string): void {\n this.coordinator.addAriaDescribedBy(id);\n }\n\n /** Removes a previously registered description id. */\n _removeAriaDescribedBy(id: string): void {\n this.coordinator.removeAriaDescribedBy(id);\n }\n}\n","import { type ComponentRef, signal, type Signal } from '@angular/core';\nimport { type DialogRef as CdkDialogRef } from '@angular/cdk/dialog';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { filter, merge, type Observable, ReplaySubject, take } from 'rxjs';\nimport type { FocusOrigin } from '@angular/cdk/a11y';\nimport type { SheetConfig } from './sheet-config';\nimport type { SheetContainer, SheetState } from './sheet-container';\n\n/**\n * Reference to a sheet opened via {@link Sheet.open}. Drives the sheet\n * lifecycle (close, state, observables) and forwards useful overlay streams.\n */\nexport class SheetRef<R = unknown, C = unknown> {\n /** Unique ID of the sheet. */\n readonly id: string;\n\n /** Instance of the component rendered inside the sheet, or `null` for template sheets. */\n componentInstance: C | null = null;\n\n /** `ComponentRef` of the content component, or `null` for template sheets. */\n readonly componentRef: ComponentRef<C> | null = null;\n\n /** Current lifecycle state. Reactively readable. */\n readonly state: Signal<SheetState>;\n\n /** When `true`, close-via-escape AND close-via-backdrop are both disabled. */\n disableClose: boolean | undefined;\n\n /** When `false`, pressing Escape does not close the sheet. */\n closeOnEscape: boolean | undefined;\n\n /** When `false`, clicking the backdrop does not close the sheet. */\n closeOnBackdropClick: boolean | undefined;\n\n private readonly stateSignal = signal<SheetState>('opening');\n private readonly afterOpenedSubject = new ReplaySubject<void>(1);\n private readonly beforeClosedSubject = new ReplaySubject<R | undefined>(1);\n private readonly afterClosedSubject = new ReplaySubject<R | undefined>(1);\n\n private pendingResult: R | undefined;\n private closeFocusOrigin: FocusOrigin | undefined;\n\n constructor(\n private readonly cdkRef: CdkDialogRef<R, C>,\n readonly config: SheetConfig<unknown, R>,\n readonly containerInstance: SheetContainer,\n ) {\n this.id = cdkRef.id;\n this.disableClose = config.disableClose;\n this.closeOnEscape = config.closeOnEscape;\n this.closeOnBackdropClick = config.closeOnBackdropClick;\n this.state = this.stateSignal.asReadonly();\n\n cdkRef.addPanelClass('tw-sheet-panel');\n\n const animationChanges = containerInstance.animationStateChanged;\n\n animationChanges\n .pipe(\n filter((event) => event.state === 'open'),\n take(1),\n )\n .subscribe(() => {\n this.stateSignal.set('open');\n this.afterOpenedSubject.next();\n this.afterOpenedSubject.complete();\n });\n\n // The container owns the exit-animation fallback timer\n // (ANIMATION_FALLBACK_PADDING in sheet-container.ts), so we trust its\n // `closed` emission and run finishClose exactly once from here.\n animationChanges\n .pipe(\n filter((event) => event.state === 'closed'),\n take(1),\n )\n .subscribe(() => this.finishClose());\n\n cdkRef.overlayRef.detachments().subscribe(() => {\n if (this.stateSignal() !== 'closed') {\n this.beforeClosedSubject.next(this.pendingResult);\n this.beforeClosedSubject.complete();\n this.finishClose();\n }\n });\n\n merge(\n cdkRef.backdropClick.pipe(\n filter(() => !this.disableClose && this.closeOnBackdropClick !== false),\n ),\n cdkRef.keydownEvents.pipe(\n filter(\n (event) =>\n event.keyCode === ESCAPE &&\n !this.disableClose &&\n this.closeOnEscape !== false &&\n !hasModifierKey(event),\n ),\n ),\n ).subscribe((event) => {\n event.preventDefault();\n this.closeWithOrigin(event.type === 'keydown' ? 'keyboard' : 'mouse');\n });\n }\n\n /**\n * Closes the sheet. The exit slide animation runs before the overlay is disposed.\n * @param result Value forwarded to `afterClosed()` subscribers.\n */\n close(result?: R): void {\n this.closeWithOrigin('program', result);\n }\n\n /** Observable that emits once after the enter animation finishes. */\n afterOpened(): Observable<void> {\n return this.afterOpenedSubject.asObservable();\n }\n\n /** Observable that emits once when the close animation starts. */\n beforeClosed(): Observable<R | undefined> {\n return this.beforeClosedSubject.asObservable();\n }\n\n /** Observable that emits once after the sheet has fully closed and the overlay is disposed. */\n afterClosed(): Observable<R | undefined> {\n return this.afterClosedSubject.asObservable();\n }\n\n /** Backdrop click stream (emits even when `closeOnBackdropClick` / `disableClose` is set). */\n backdropClick(): Observable<MouseEvent> {\n return this.cdkRef.backdropClick;\n }\n\n /** Keydown event stream for the overlay. */\n keydownEvents(): Observable<KeyboardEvent> {\n return this.cdkRef.keydownEvents;\n }\n\n /** Adds CSS classes to the overlay panel. */\n addPanelClass(classes: string | string[]): this {\n this.cdkRef.addPanelClass(classes);\n return this;\n }\n\n /** Removes CSS classes from the overlay panel. */\n removePanelClass(classes: string | string[]): this {\n this.cdkRef.removePanelClass(classes);\n return this;\n }\n\n private closeWithOrigin(origin: FocusOrigin, result?: R): void {\n if (this.stateSignal() === 'closing' || this.stateSignal() === 'closed') return;\n\n const predicate = this.config.closePredicate;\n if (\n predicate &&\n !predicate(\n result,\n this.config as unknown as Parameters<typeof predicate>[1],\n this.componentInstance,\n )\n ) {\n return;\n }\n\n this.pendingResult = result;\n this.closeFocusOrigin = origin;\n this.stateSignal.set('closing');\n\n this.beforeClosedSubject.next(result);\n this.beforeClosedSubject.complete();\n\n this.cdkRef.overlayRef.detachBackdrop();\n this.containerInstance._startExitAnimation();\n }\n\n private finishClose(): void {\n if (this.stateSignal() === 'closed') return;\n this.stateSignal.set('closed');\n\n this.afterClosedSubject.next(this.pendingResult);\n this.afterClosedSubject.complete();\n\n if (this.cdkRef.containerInstance) {\n this.cdkRef.close(this.pendingResult, { focusOrigin: this.closeFocusOrigin });\n }\n\n this.componentInstance = null;\n }\n}\n","import {\n type ComponentRef,\n inject,\n Injectable,\n Injector,\n type OnDestroy,\n type Provider,\n type StaticProvider,\n type TemplateRef,\n signal,\n type Signal,\n makeEnvironmentProviders,\n type EnvironmentProviders,\n} from '@angular/core';\nimport { Dialog, DialogConfig as CdkDialogConfig } from '@angular/cdk/dialog';\nimport {\n createBlockScrollStrategy,\n createCloseScrollStrategy,\n createGlobalPositionStrategy,\n createNoopScrollStrategy,\n createRepositionScrollStrategy,\n type GlobalPositionStrategy,\n type ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport type { ComponentType } from '@angular/cdk/portal';\nimport { defer, type Observable, startWith, Subject } from 'rxjs';\nimport {\n SHEET_DATA,\n SHEET_DEFAULT_OPTIONS,\n SheetConfig,\n type SheetScrollStrategy,\n type SheetSide,\n} from './sheet-config';\nimport { SheetContainer } from './sheet-container';\nimport { SheetRef } from './sheet-ref';\n\n/**\n * Opens edge-anchored sheet (drawer) overlays. Composes `@angular/cdk/dialog`\n * for focus trapping, portals, and overlay plumbing — adds a `GlobalPositionStrategy`\n * pinned to the requested viewport edge, a Tailwind container with axis-aware\n * sizing, slide enter/exit animations, and split close-behavior flags.\n *\n * Not `providedIn: 'root'` — register it via {@link provideSheet}.\n */\n@Injectable()\nexport class Sheet implements OnDestroy {\n private readonly cdkDialog = inject(Dialog);\n private readonly injector = inject(Injector);\n private readonly defaultOptions = inject(SHEET_DEFAULT_OPTIONS, { optional: true }) ?? {};\n private readonly parentSheet = inject(Sheet, { optional: true, skipSelf: true });\n\n private readonly openSheetsAtThisLevel = signal<readonly SheetRef<unknown, unknown>[]>([]);\n private readonly afterOpenedSubject = new Subject<SheetRef<unknown, unknown>>();\n private readonly afterAllClosedSubject = new Subject<void>();\n\n /** Reactively-readable list of currently-open sheets across the full sheet tree. */\n readonly openSheets: Signal<readonly SheetRef<unknown, unknown>[]> = this.parentSheet\n ? this.parentSheet.openSheets\n : this.openSheetsAtThisLevel.asReadonly();\n\n /** Emits every time a sheet is opened. */\n readonly afterOpened: Observable<SheetRef<unknown, unknown>> = this.parentSheet\n ? this.parentSheet.afterOpened\n : this.afterOpenedSubject.asObservable();\n\n /**\n * Emits when every open sheet has closed. Emits immediately on subscribe if\n * there are none open.\n */\n readonly afterAllClosed: Observable<void> = defer(() =>\n this.openSheets().length\n ? this.getAfterAllClosedSource()\n : this.getAfterAllClosedSource().pipe(startWith(undefined as void)),\n );\n\n /**\n * Opens a sheet using the given component or template.\n * @param content Component class or `TemplateRef`.\n * @param config Options merged over the application defaults.\n * @returns Reference controlling the opened sheet.\n */\n open<R = unknown, D = unknown, C = unknown>(\n content: ComponentType<C> | TemplateRef<C>,\n config?: SheetConfig<D, R>,\n ): SheetRef<R, C> {\n const merged = this.resolveConfig<D, R>(config);\n let sheetRef!: SheetRef<R, C>;\n\n const cdkRef = this.cdkDialog.open<R, D, C>(content, {\n id: merged.id,\n role: merged.role,\n data: merged.data,\n panelClass: merged.panelClass,\n backdropClass: merged.backdropClass || 'tw-sheet-backdrop',\n hasBackdrop: merged.hasBackdrop,\n // Sheet sizing happens on the container element (axis-aware width/height\n // utilities). The overlay pane itself is the full-edge bounding box.\n direction: merged.direction,\n ariaDescribedBy: merged.ariaDescribedBy,\n ariaLabelledBy: merged.ariaLabelledBy,\n ariaLabel: merged.ariaLabel,\n ariaModal: merged.ariaModal,\n autoFocus: merged.autoFocus,\n restoreFocus: merged.restoreFocus,\n scrollStrategy: merged.scrollStrategy ?? this.resolveScrollStrategy(merged.scrollBehavior),\n positionStrategy:\n merged.positionStrategy ?? this.resolvePositionStrategy(merged.side ?? 'right'),\n closeOnNavigation: merged.closeOnNavigation,\n viewContainerRef: merged.viewContainerRef,\n injector: merged.injector,\n // We handle close/Escape/backdrop ourselves so we can run the exit slide animation.\n disableClose: true,\n closeOnOverlayDetachments: false,\n container: {\n type: SheetContainer,\n providers: () => [\n { provide: SheetConfig, useValue: merged },\n { provide: CdkDialogConfig, useValue: merged },\n ],\n },\n providers: (_cdkRef, _cdkConfig, container) => {\n sheetRef = new SheetRef<R, C>(\n _cdkRef,\n merged as unknown as SheetConfig<unknown, R>,\n container as SheetContainer,\n );\n const providers: StaticProvider[] = [\n { provide: SheetRef, useValue: sheetRef },\n { provide: SHEET_DATA, useValue: merged.data ?? null },\n ];\n if (Array.isArray(merged.providers)) providers.push(...merged.providers);\n return providers;\n },\n });\n\n // After CDK attaches the component, copy references onto our ref.\n (sheetRef as { componentRef: ComponentRef<C> | null }).componentRef = cdkRef.componentRef;\n sheetRef.componentInstance = cdkRef.componentInstance as C | null;\n\n const scope = this.parentSheet ?? this;\n scope.registerOpen(sheetRef as unknown as SheetRef<unknown, unknown>);\n\n sheetRef.afterClosed().subscribe(() => {\n scope.unregister(sheetRef as unknown as SheetRef<unknown, unknown>);\n });\n\n return sheetRef;\n }\n\n /** Closes every open sheet managed by this service (and child services). */\n closeAll(): void {\n const sheets = [...this.openSheets()];\n for (let i = sheets.length - 1; i >= 0; i--) sheets[i].close();\n }\n\n /** Looks up an open sheet by its id. */\n getSheetById<R = unknown, C = unknown>(id: string): SheetRef<R, C> | undefined {\n return this.openSheets().find((sheet) => sheet.id === id) as SheetRef<R, C> | undefined;\n }\n\n ngOnDestroy(): void {\n const sheets = [...this.openSheetsAtThisLevel()];\n for (let i = sheets.length - 1; i >= 0; i--) sheets[i].close();\n this.afterOpenedSubject.complete();\n this.afterAllClosedSubject.complete();\n }\n\n private registerOpen(ref: SheetRef<unknown, unknown>): void {\n if (this.parentSheet) {\n this.parentSheet.registerOpen(ref);\n } else {\n this.openSheetsAtThisLevel.update((list) => [...list, ref]);\n this.afterOpenedSubject.next(ref);\n }\n }\n\n private unregister(ref: SheetRef<unknown, unknown>): void {\n if (this.parentSheet) {\n this.parentSheet.unregister(ref);\n } else {\n this.openSheetsAtThisLevel.update((list) => list.filter((d) => d !== ref));\n if (this.openSheetsAtThisLevel().length === 0) {\n this.afterAllClosedSubject.next();\n }\n }\n }\n\n private getAfterAllClosedSource(): Subject<void> {\n return this.parentSheet\n ? this.parentSheet.getAfterAllClosedSource()\n : this.afterAllClosedSubject;\n }\n\n private resolveConfig<D, R>(config: SheetConfig<D, R> | undefined): SheetConfig<D, R> {\n const merged = new SheetConfig<D, R>();\n Object.assign(merged, this.defaultOptions, config);\n return merged;\n }\n\n private resolveScrollStrategy(strategy: SheetScrollStrategy | undefined): ScrollStrategy {\n switch (strategy) {\n case 'close':\n return createCloseScrollStrategy(this.injector);\n case 'reposition':\n return createRepositionScrollStrategy(this.injector);\n case 'noop':\n return createNoopScrollStrategy();\n case 'block':\n default:\n return createBlockScrollStrategy(this.injector);\n }\n }\n\n private resolvePositionStrategy(side: SheetSide): GlobalPositionStrategy {\n const strategy = createGlobalPositionStrategy(this.injector);\n switch (side) {\n case 'left':\n return strategy.top('0').left('0').bottom('0');\n case 'top':\n return strategy.top('0').left('0').right('0');\n case 'bottom':\n return strategy.bottom('0').left('0').right('0');\n case 'right':\n default:\n return strategy.top('0').right('0').bottom('0');\n }\n }\n}\n\n/**\n * Registers the {@link Sheet} service for dependency injection.\n *\n * @param defaultOptions Optional defaults merged into every `open()` call.\n * @example\n * ```ts\n * provideSheet({ side: 'left', size: 'lg' })\n * ```\n */\nexport function provideSheet(defaultOptions?: Partial<SheetConfig>): EnvironmentProviders {\n const providers: Provider[] = [Sheet];\n if (defaultOptions) {\n providers.push({ provide: SHEET_DEFAULT_OPTIONS, useValue: defaultOptions });\n }\n return makeEnvironmentProviders(providers);\n}\n","import {\n computed,\n Directive,\n inject,\n input,\n type OnDestroy,\n type OnInit,\n} from '@angular/core';\nimport { _IdGenerator } from '@angular/cdk/a11y';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport type { TwColor } from '@cdevhub/ngx-tw/core';\nimport { SheetRef } from './sheet-ref';\nimport { SheetContainer } from './sheet-container';\n\n/**\n * Header wrapper for a sheet. Provides consistent padding and spacing for\n * title + subtitle + leading icon, and separates the header from scrollable\n * content below.\n */\n@Directive({\n selector: '[twSheetHeader], tw-sheet-header',\n host: {\n class: 'flex items-start gap-3 px-6 pt-6 pb-4',\n },\n})\nexport class SheetHeaderDirective {}\n\n// Slot tokens own light/dark contrast — no `dark:` overrides, no shade picks.\n// See role slot conventions in `projects/ngx-tw/theme/_semantic.css`.\nconst ICON_COLOR_CLASSES: Record<TwColor, string> = {\n primary: 'bg-primary-soft text-primary-icon',\n secondary: 'bg-secondary-soft text-secondary-icon',\n accent: 'bg-accent-soft text-accent-icon',\n neutral: 'bg-neutral-soft text-neutral-icon',\n info: 'bg-info-soft text-info-icon',\n success: 'bg-success-soft text-success-icon',\n warning: 'bg-warning-soft text-warning-icon',\n error: 'bg-error-soft text-error-icon',\n};\n\n/**\n * Decorative leading icon for a sheet header. Use with a semantic `color` to\n * match destructive / informational / success sheets.\n */\n@Directive({\n selector: '[twSheetIcon]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class SheetIconDirective {\n /** Semantic color for the icon container. Defaults to a neutral surface. */\n readonly color = input<TwColor | undefined>(undefined);\n\n protected readonly classes = computed(() => {\n const base = 'flex size-10 shrink-0 items-center justify-center rounded-full';\n const color = this.color();\n return color ? `${base} ${ICON_COLOR_CLASSES[color]}` : `${base} bg-surface-muted text-fg`;\n });\n}\n\n/**\n * Sheet title. Registers its ID with the container's `aria-labelledby` queue\n * so screen readers announce it automatically.\n */\n@Directive({\n selector: '[twSheetTitle], tw-sheet-title',\n host: {\n class: 'text-sm font-semibold text-fg',\n '[id]': 'id()',\n },\n})\nexport class SheetTitleDirective implements OnInit, OnDestroy {\n private readonly generatedId = inject(_IdGenerator).getId('tw-sheet-title-');\n private readonly sheetRef = inject<SheetRef<unknown, unknown>>(SheetRef, { optional: true });\n // Ancestor-DI fallback for the rare case where `SheetRef` is not in the\n // directive's injector chain (e.g. heavily nested template portals). The\n // container ALWAYS resolves via element-injector traversal because the\n // directive lives inside `<tw-sheet-container>`'s DOM tree.\n private readonly container = inject(SheetContainer, { optional: true, skipSelf: true });\n\n /** Custom id for the title element. Defaults to a generated unique id. */\n readonly id = input<string>(this.generatedId);\n\n ngOnInit(): void {\n const containerInstance = this.sheetRef?.containerInstance ?? this.container;\n if (containerInstance) containerInstance._addAriaLabelledBy(this.id());\n }\n\n ngOnDestroy(): void {\n const containerInstance = this.sheetRef?.containerInstance ?? this.container;\n if (containerInstance) containerInstance._removeAriaLabelledBy(this.id());\n }\n}\n\n/** Secondary line beneath the sheet title — intended for a short description. */\n@Directive({\n selector: '[twSheetSubtitle], tw-sheet-subtitle',\n host: {\n class: 'text-sm text-fg-muted',\n },\n})\nexport class SheetSubtitleDirective {}\n\n/**\n * Sheet description. Registers its ID with the container's `aria-describedby`\n * queue so screen readers announce the descriptive paragraph after the title.\n * Mirrors {@link SheetTitleDirective} but for `aria-describedby`.\n */\n@Directive({\n selector: '[twSheetDescription], tw-sheet-description',\n host: {\n '[id]': 'id()',\n },\n})\nexport class SheetDescriptionDirective implements OnInit, OnDestroy {\n private readonly generatedId = inject(_IdGenerator).getId('tw-sheet-description-');\n private readonly sheetRef = inject<SheetRef<unknown, unknown>>(SheetRef, { optional: true });\n // Ancestor-DI fallback — see SheetTitleDirective.\n private readonly container = inject(SheetContainer, { optional: true, skipSelf: true });\n\n /** Custom id for the description element. Defaults to a generated unique id. */\n readonly id = input<string>(this.generatedId);\n\n ngOnInit(): void {\n const containerInstance = this.sheetRef?.containerInstance ?? this.container;\n if (containerInstance) containerInstance._addAriaDescribedBy(this.id());\n }\n\n ngOnDestroy(): void {\n const containerInstance = this.sheetRef?.containerInstance ?? this.container;\n if (containerInstance) containerInstance._removeAriaDescribedBy(this.id());\n }\n}\n\n/**\n * Scrollable content region of the sheet. Apply between the header and the\n * actions bar. Inherits CDK's `CdkScrollable` to play nicely with scroll\n * strategies and nested scrollables.\n */\n@Directive({\n selector: '[twSheetContent], tw-sheet-content',\n hostDirectives: [CdkScrollable],\n host: {\n class: 'flex-1 overflow-y-auto px-6 py-4 text-sm text-fg',\n },\n})\nexport class SheetContentDirective {}\n\n/** Horizontal alignment for sheet action buttons. */\nexport type SheetActionsAlign = 'start' | 'center' | 'end';\n\n/**\n * Bottom action bar of a sheet. Use inside the sheet content or template to\n * host Cancel/Confirm buttons. Stays pinned below scrollable content.\n */\n@Directive({\n selector: '[twSheetActions], tw-sheet-actions',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class SheetActionsDirective {\n /** Horizontal alignment of the action buttons. Defaults to `'end'`. */\n readonly align = input<SheetActionsAlign>('end');\n\n protected readonly classes = computed(() => {\n const align = this.align();\n const justify =\n align === 'start' ? 'justify-start' : align === 'center' ? 'justify-center' : 'justify-end';\n return `flex flex-wrap items-center gap-2 px-6 py-4 border-t border-border-muted ${justify}`;\n });\n}\n\n/**\n * Closes the enclosing sheet when the host button is clicked. Provide a\n * `[twSheetClose]` value to pass a result to `afterClosed()` subscribers.\n */\n@Directive({\n selector: '[twSheetClose]',\n host: {\n '(click)': 'onClick()',\n '[attr.type]': 'type()',\n },\n})\nexport class SheetCloseDirective {\n /** Value passed to `afterClosed()` when the button is clicked. */\n readonly twSheetClose = input<unknown>(undefined);\n\n /** Native button `type`. Defaults to `'button'` to avoid accidental form submission. */\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n\n private readonly sheetRef = inject<SheetRef<unknown, unknown>>(SheetRef, { optional: true });\n\n protected onClick(): void {\n this.sheetRef?.close(this.twSheetClose());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["CdkDialogConfig"],"mappings":"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"}
@@ -52,33 +52,44 @@ function dimensionToCss(value) {
52
52
  */
53
53
  class SkeletonComponent {
54
54
  /** Geometric shape of the placeholder. `'text'` renders a short rectangle with text-line proportions; `'rectangle'` a free-form block sized by `width`/`height`; `'circle'` a perfect circle (avatar / icon placeholder). Defaults to `'text'`. */
55
- shape = input('text', ...(ngDevMode ? [{ debugName: "shape" }] : /* istanbul ignore next */ []));
55
+ shape = input('text', /* @ts-ignore */
56
+ ...(ngDevMode ? [{ debugName: "shape" }] : /* istanbul ignore next */ []));
56
57
  /** Animation style. `'pulse'` fades opacity in and out; `'wave'` sweeps a shimmer across; `'none'` renders a static block. All animations are halted under `prefers-reduced-motion`. Defaults to `'pulse'`. */
57
- animation = input('pulse', ...(ngDevMode ? [{ debugName: "animation" }] : /* istanbul ignore next */ []));
58
+ animation = input('pulse', /* @ts-ignore */
59
+ ...(ngDevMode ? [{ debugName: "animation" }] : /* istanbul ignore next */ []));
58
60
  /** Optional explicit width. Numbers are treated as pixels; strings pass through (e.g. `'50%'`, `'12rem'`, `'auto'`). When undefined, the skeleton fills its container's width (or its shape default for circle). */
59
- width = input(undefined, ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
61
+ width = input(undefined, /* @ts-ignore */
62
+ ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
60
63
  /** Optional explicit height. Numbers are treated as pixels; strings pass through. When undefined, the skeleton uses its shape default (text-line height for text, `1rem` for rectangle, equal-to-width for circle). */
61
- height = input(undefined, ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
64
+ height = input(undefined, /* @ts-ignore */
65
+ ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
62
66
  /** Number of stacked text rows to render. Only applies when `shape` is `'text'`. Values greater than 1 render N rows in a vertical stack with a `0.5rem` gap; the last row is rendered at 60% width to mimic a paragraph's final line. Ignored for `'rectangle'` and `'circle'`. Defaults to `1`. */
63
- lines = input(1, ...(ngDevMode ? [{ debugName: "lines" }] : /* istanbul ignore next */ []));
67
+ lines = input(1, /* @ts-ignore */
68
+ ...(ngDevMode ? [{ debugName: "lines" }] : /* istanbul ignore next */ []));
64
69
  /** When true, the skeleton announces itself as a busy live region via `role="status"`, `aria-busy="true"`, `aria-live="polite"`, and a visually-hidden label. When false, the skeleton is fully hidden from assistive technology with `aria-hidden="true"` — appropriate when a parent already owns the loading announcement. Defaults to `false`. */
65
70
  announce = input(false, { ...(ngDevMode ? { debugName: "announce" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
66
- mode = computed(() => this.shape() === 'text' && this.lines() > 1 ? 'multi' : 'single', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
67
- variantResult = computed(() => skeletonVariants({ shape: this.shape(), animation: this.animation() }), ...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
71
+ mode = computed(() => this.shape() === 'text' && this.lines() > 1 ? 'multi' : 'single', /* @ts-ignore */
72
+ ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
73
+ variantResult = computed(() => skeletonVariants({ shape: this.shape(), animation: this.animation() }), /* @ts-ignore */
74
+ ...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
68
75
  rootClasses = computed(() => {
69
76
  if (this.mode() === 'multi') {
70
77
  return skeletonVariants({ shape: this.shape(), animation: 'none' }).container();
71
78
  }
72
79
  return this.variantResult().root();
73
- }, ...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
74
- srClasses = computed(() => this.variantResult().sr(), ...(ngDevMode ? [{ debugName: "srClasses" }] : /* istanbul ignore next */ []));
75
- rowsArray = computed(() => new Array(Math.max(1, this.lines())).fill(0), ...(ngDevMode ? [{ debugName: "rowsArray" }] : /* istanbul ignore next */ []));
80
+ }, /* @ts-ignore */
81
+ ...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
82
+ srClasses = computed(() => this.variantResult().sr(), /* @ts-ignore */
83
+ ...(ngDevMode ? [{ debugName: "srClasses" }] : /* istanbul ignore next */ []));
84
+ rowsArray = computed(() => new Array(Math.max(1, this.lines())).fill(0), /* @ts-ignore */
85
+ ...(ngDevMode ? [{ debugName: "rowsArray" }] : /* istanbul ignore next */ []));
76
86
  rootStyle = computed(() => {
77
87
  if (this.mode() === 'multi') {
78
88
  return '';
79
89
  }
80
90
  return this.styleString(this.width(), this.height());
81
- }, ...(ngDevMode ? [{ debugName: "rootStyle" }] : /* istanbul ignore next */ []));
91
+ }, /* @ts-ignore */
92
+ ...(ngDevMode ? [{ debugName: "rootStyle" }] : /* istanbul ignore next */ []));
82
93
  rowClass(index) {
83
94
  const base = this.variantResult().row();
84
95
  const isLast = index === this.lines() - 1;
@@ -103,8 +114,8 @@ class SkeletonComponent {
103
114
  }
104
115
  return parts.length ? `${parts.join('; ')};` : '';
105
116
  }
106
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: SkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
107
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: SkeletonComponent, isStandalone: true, selector: "tw-skeleton", inputs: { shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, animation: { classPropertyName: "animation", publicName: "animation", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null }, announce: { classPropertyName: "announce", publicName: "announce", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "rootClasses()", "style": "rootStyle()", "attr.aria-hidden": "announce() ? null : \"true\"", "attr.role": "announce() ? \"status\" : null", "attr.aria-busy": "announce() ? \"true\" : null", "attr.aria-live": "announce() ? \"polite\" : null" } }, ngImport: i0, template: `
117
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
118
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SkeletonComponent, isStandalone: true, selector: "tw-skeleton", inputs: { shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, animation: { classPropertyName: "animation", publicName: "animation", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null }, announce: { classPropertyName: "announce", publicName: "announce", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "rootClasses()", "style": "rootStyle()", "attr.aria-hidden": "announce() ? null : \"true\"", "attr.role": "announce() ? \"status\" : null", "attr.aria-busy": "announce() ? \"true\" : null", "attr.aria-live": "announce() ? \"polite\" : null" } }, ngImport: i0, template: `
108
119
  @if (mode() === 'multi') {
109
120
  @for (_ of rowsArray(); track $index) {
110
121
  <span [class]="rowClass($index)" [style]="rowStyle($index)"></span>
@@ -115,7 +126,7 @@ class SkeletonComponent {
115
126
  }
116
127
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
117
128
  }
118
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: SkeletonComponent, decorators: [{
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SkeletonComponent, decorators: [{
119
130
  type: Component,
120
131
  args: [{
121
132
  selector: 'tw-skeleton',
@@ -1 +1 @@
1
- {"version":3,"file":"cdevhub-ngx-tw-skeleton.mjs","sources":["../../../projects/ngx-tw/skeleton/skeleton.ts","../../../projects/ngx-tw/skeleton/cdevhub-ngx-tw-skeleton.ts"],"sourcesContent":["import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { tv } from 'tailwind-variants';\n\n/** Geometric shape of the skeleton placeholder. */\nexport type SkeletonShape = 'text' | 'rectangle' | 'circle';\n\n/** Animation style applied to the skeleton. */\nexport type SkeletonAnimation = 'pulse' | 'wave' | 'none';\n\nconst skeletonVariants = tv(\n {\n slots: {\n root: 'block bg-surface-muted overflow-hidden relative isolate',\n container: 'relative flex flex-col gap-2',\n row: 'block bg-surface-muted overflow-hidden relative isolate w-full',\n sr: 'sr-only',\n },\n variants: {\n shape: {\n text: { root: 'h-4 w-full rounded-md', row: 'h-4 rounded-md' },\n rectangle: { root: 'h-4 w-full rounded-md', row: 'h-4 rounded-md' },\n circle: { root: 'rounded-full aspect-square', row: 'rounded-full aspect-square' },\n },\n animation: {\n pulse: { root: 'skeleton-pulse', row: 'skeleton-pulse' },\n wave: { root: 'skeleton-wave', row: 'skeleton-wave' },\n none: { root: '', row: '' },\n },\n },\n defaultVariants: {\n shape: 'text',\n animation: 'pulse',\n },\n },\n { twMerge: true },\n);\n\nfunction dimensionToCss(value: string | number | undefined): string {\n if (value === undefined || value === null || value === '') {\n return '';\n }\n return typeof value === 'number' ? `${value}px` : value;\n}\n\n/**\n * Placeholder loading shape (the standard \"shimmer\" / \"pulse\") shown where real\n * content will appear. Use inside lists, cards, tables, and detail views to\n * communicate \"this region is loading\" without layout jump when content arrives.\n *\n * Three shapes (`text`, `rectangle`, `circle`), three animations (`pulse`,\n * `wave`, `none`), arbitrary `width` / `height`, and an optional multi-line\n * text mode. By default the skeleton is hidden from assistive technology\n * (parent owns the announcement); set `announce` to expose `role=\"status\"`.\n *\n * @example\n * ```html\n * <tw-skeleton />\n * <tw-skeleton [lines]=\"3\" />\n * <tw-skeleton shape=\"circle\" [width]=\"40\" [height]=\"40\" />\n * <tw-skeleton shape=\"rectangle\" animation=\"wave\" height=\"12rem\" />\n * ```\n */\n@Component({\n selector: 'tw-skeleton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'rootClasses()',\n '[style]': 'rootStyle()',\n '[attr.aria-hidden]': 'announce() ? null : \"true\"',\n '[attr.role]': 'announce() ? \"status\" : null',\n '[attr.aria-busy]': 'announce() ? \"true\" : null',\n '[attr.aria-live]': 'announce() ? \"polite\" : null',\n },\n template: `\n @if (mode() === 'multi') {\n @for (_ of rowsArray(); track $index) {\n <span [class]=\"rowClass($index)\" [style]=\"rowStyle($index)\"></span>\n }\n }\n @if (announce()) {\n <span [class]=\"srClasses()\">Loading</span>\n }\n `,\n})\nexport class SkeletonComponent {\n /** Geometric shape of the placeholder. `'text'` renders a short rectangle with text-line proportions; `'rectangle'` a free-form block sized by `width`/`height`; `'circle'` a perfect circle (avatar / icon placeholder). Defaults to `'text'`. */\n readonly shape = input<SkeletonShape>('text');\n\n /** Animation style. `'pulse'` fades opacity in and out; `'wave'` sweeps a shimmer across; `'none'` renders a static block. All animations are halted under `prefers-reduced-motion`. Defaults to `'pulse'`. */\n readonly animation = input<SkeletonAnimation>('pulse');\n\n /** Optional explicit width. Numbers are treated as pixels; strings pass through (e.g. `'50%'`, `'12rem'`, `'auto'`). When undefined, the skeleton fills its container's width (or its shape default for circle). */\n readonly width = input<string | number | undefined>(undefined);\n\n /** Optional explicit height. Numbers are treated as pixels; strings pass through. When undefined, the skeleton uses its shape default (text-line height for text, `1rem` for rectangle, equal-to-width for circle). */\n readonly height = input<string | number | undefined>(undefined);\n\n /** Number of stacked text rows to render. Only applies when `shape` is `'text'`. Values greater than 1 render N rows in a vertical stack with a `0.5rem` gap; the last row is rendered at 60% width to mimic a paragraph's final line. Ignored for `'rectangle'` and `'circle'`. Defaults to `1`. */\n readonly lines = input<number>(1);\n\n /** When true, the skeleton announces itself as a busy live region via `role=\"status\"`, `aria-busy=\"true\"`, `aria-live=\"polite\"`, and a visually-hidden label. When false, the skeleton is fully hidden from assistive technology with `aria-hidden=\"true\"` — appropriate when a parent already owns the loading announcement. Defaults to `false`. */\n readonly announce = input(false, { transform: booleanAttribute });\n\n protected readonly mode = computed<'single' | 'multi'>(() =>\n this.shape() === 'text' && this.lines() > 1 ? 'multi' : 'single',\n );\n\n private readonly variantResult = computed(() =>\n skeletonVariants({ shape: this.shape(), animation: this.animation() }),\n );\n\n protected readonly rootClasses = computed(() => {\n if (this.mode() === 'multi') {\n return skeletonVariants({ shape: this.shape(), animation: 'none' }).container();\n }\n return this.variantResult().root();\n });\n\n protected readonly srClasses = computed(() => this.variantResult().sr());\n\n protected readonly rowsArray = computed(() => new Array(Math.max(1, this.lines())).fill(0));\n\n protected readonly rootStyle = computed(() => {\n if (this.mode() === 'multi') {\n return '';\n }\n return this.styleString(this.width(), this.height());\n });\n\n protected rowClass(index: number): string {\n const base = this.variantResult().row();\n const isLast = index === this.lines() - 1;\n return isLast ? `${base} w-3/5` : base;\n }\n\n protected rowStyle(index: number): string {\n const isLast = index === this.lines() - 1;\n if (isLast) {\n return this.styleString(undefined, this.height());\n }\n return this.styleString(this.width(), this.height());\n }\n\n private styleString(width: string | number | undefined, height: string | number | undefined): string {\n const parts: string[] = [];\n const w = dimensionToCss(width);\n const h = dimensionToCss(height);\n if (w) {\n parts.push(`width: ${w}`);\n }\n if (h) {\n parts.push(`height: ${h}`);\n }\n return parts.length ? `${parts.join('; ')};` : '';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cdevhub-ngx-tw-skeleton.mjs","sources":["../../../projects/ngx-tw/skeleton/skeleton.ts","../../../projects/ngx-tw/skeleton/cdevhub-ngx-tw-skeleton.ts"],"sourcesContent":["import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { tv } from 'tailwind-variants';\n\n/** Geometric shape of the skeleton placeholder. */\nexport type SkeletonShape = 'text' | 'rectangle' | 'circle';\n\n/** Animation style applied to the skeleton. */\nexport type SkeletonAnimation = 'pulse' | 'wave' | 'none';\n\nconst skeletonVariants = tv(\n {\n slots: {\n root: 'block bg-surface-muted overflow-hidden relative isolate',\n container: 'relative flex flex-col gap-2',\n row: 'block bg-surface-muted overflow-hidden relative isolate w-full',\n sr: 'sr-only',\n },\n variants: {\n shape: {\n text: { root: 'h-4 w-full rounded-md', row: 'h-4 rounded-md' },\n rectangle: { root: 'h-4 w-full rounded-md', row: 'h-4 rounded-md' },\n circle: { root: 'rounded-full aspect-square', row: 'rounded-full aspect-square' },\n },\n animation: {\n pulse: { root: 'skeleton-pulse', row: 'skeleton-pulse' },\n wave: { root: 'skeleton-wave', row: 'skeleton-wave' },\n none: { root: '', row: '' },\n },\n },\n defaultVariants: {\n shape: 'text',\n animation: 'pulse',\n },\n },\n { twMerge: true },\n);\n\nfunction dimensionToCss(value: string | number | undefined): string {\n if (value === undefined || value === null || value === '') {\n return '';\n }\n return typeof value === 'number' ? `${value}px` : value;\n}\n\n/**\n * Placeholder loading shape (the standard \"shimmer\" / \"pulse\") shown where real\n * content will appear. Use inside lists, cards, tables, and detail views to\n * communicate \"this region is loading\" without layout jump when content arrives.\n *\n * Three shapes (`text`, `rectangle`, `circle`), three animations (`pulse`,\n * `wave`, `none`), arbitrary `width` / `height`, and an optional multi-line\n * text mode. By default the skeleton is hidden from assistive technology\n * (parent owns the announcement); set `announce` to expose `role=\"status\"`.\n *\n * @example\n * ```html\n * <tw-skeleton />\n * <tw-skeleton [lines]=\"3\" />\n * <tw-skeleton shape=\"circle\" [width]=\"40\" [height]=\"40\" />\n * <tw-skeleton shape=\"rectangle\" animation=\"wave\" height=\"12rem\" />\n * ```\n */\n@Component({\n selector: 'tw-skeleton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'rootClasses()',\n '[style]': 'rootStyle()',\n '[attr.aria-hidden]': 'announce() ? null : \"true\"',\n '[attr.role]': 'announce() ? \"status\" : null',\n '[attr.aria-busy]': 'announce() ? \"true\" : null',\n '[attr.aria-live]': 'announce() ? \"polite\" : null',\n },\n template: `\n @if (mode() === 'multi') {\n @for (_ of rowsArray(); track $index) {\n <span [class]=\"rowClass($index)\" [style]=\"rowStyle($index)\"></span>\n }\n }\n @if (announce()) {\n <span [class]=\"srClasses()\">Loading</span>\n }\n `,\n})\nexport class SkeletonComponent {\n /** Geometric shape of the placeholder. `'text'` renders a short rectangle with text-line proportions; `'rectangle'` a free-form block sized by `width`/`height`; `'circle'` a perfect circle (avatar / icon placeholder). Defaults to `'text'`. */\n readonly shape = input<SkeletonShape>('text');\n\n /** Animation style. `'pulse'` fades opacity in and out; `'wave'` sweeps a shimmer across; `'none'` renders a static block. All animations are halted under `prefers-reduced-motion`. Defaults to `'pulse'`. */\n readonly animation = input<SkeletonAnimation>('pulse');\n\n /** Optional explicit width. Numbers are treated as pixels; strings pass through (e.g. `'50%'`, `'12rem'`, `'auto'`). When undefined, the skeleton fills its container's width (or its shape default for circle). */\n readonly width = input<string | number | undefined>(undefined);\n\n /** Optional explicit height. Numbers are treated as pixels; strings pass through. When undefined, the skeleton uses its shape default (text-line height for text, `1rem` for rectangle, equal-to-width for circle). */\n readonly height = input<string | number | undefined>(undefined);\n\n /** Number of stacked text rows to render. Only applies when `shape` is `'text'`. Values greater than 1 render N rows in a vertical stack with a `0.5rem` gap; the last row is rendered at 60% width to mimic a paragraph's final line. Ignored for `'rectangle'` and `'circle'`. Defaults to `1`. */\n readonly lines = input<number>(1);\n\n /** When true, the skeleton announces itself as a busy live region via `role=\"status\"`, `aria-busy=\"true\"`, `aria-live=\"polite\"`, and a visually-hidden label. When false, the skeleton is fully hidden from assistive technology with `aria-hidden=\"true\"` — appropriate when a parent already owns the loading announcement. Defaults to `false`. */\n readonly announce = input(false, { transform: booleanAttribute });\n\n protected readonly mode = computed<'single' | 'multi'>(() =>\n this.shape() === 'text' && this.lines() > 1 ? 'multi' : 'single',\n );\n\n private readonly variantResult = computed(() =>\n skeletonVariants({ shape: this.shape(), animation: this.animation() }),\n );\n\n protected readonly rootClasses = computed(() => {\n if (this.mode() === 'multi') {\n return skeletonVariants({ shape: this.shape(), animation: 'none' }).container();\n }\n return this.variantResult().root();\n });\n\n protected readonly srClasses = computed(() => this.variantResult().sr());\n\n protected readonly rowsArray = computed(() => new Array(Math.max(1, this.lines())).fill(0));\n\n protected readonly rootStyle = computed(() => {\n if (this.mode() === 'multi') {\n return '';\n }\n return this.styleString(this.width(), this.height());\n });\n\n protected rowClass(index: number): string {\n const base = this.variantResult().row();\n const isLast = index === this.lines() - 1;\n return isLast ? `${base} w-3/5` : base;\n }\n\n protected rowStyle(index: number): string {\n const isLast = index === this.lines() - 1;\n if (isLast) {\n return this.styleString(undefined, this.height());\n }\n return this.styleString(this.width(), this.height());\n }\n\n private styleString(width: string | number | undefined, height: string | number | undefined): string {\n const parts: string[] = [];\n const w = dimensionToCss(width);\n const h = dimensionToCss(height);\n if (w) {\n parts.push(`width: ${w}`);\n }\n if (h) {\n parts.push(`height: ${h}`);\n }\n return parts.length ? `${parts.join('; ')};` : '';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}