@frame-ui-ng/components 0.3.0-beta.0 → 0.4.1

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 (172) hide show
  1. package/button/src/styles/button.css +5 -1
  2. package/button-group/src/styles/button-group.css +6 -0
  3. package/confirm-popover/src/styles/confirm-popover.css +20 -0
  4. package/drag-drop/src/styles/_vars.css +28 -0
  5. package/drag-drop/src/styles/drag-drop.css +132 -0
  6. package/fesm2022/frame-ui-ng-components-accordion.mjs +26 -21
  7. package/fesm2022/frame-ui-ng-components-accordion.mjs.map +1 -1
  8. package/fesm2022/frame-ui-ng-components-alert.mjs +4 -0
  9. package/fesm2022/frame-ui-ng-components-alert.mjs.map +1 -1
  10. package/fesm2022/frame-ui-ng-components-avatar.mjs +7 -0
  11. package/fesm2022/frame-ui-ng-components-avatar.mjs.map +1 -1
  12. package/fesm2022/frame-ui-ng-components-badge.mjs +4 -0
  13. package/fesm2022/frame-ui-ng-components-badge.mjs.map +1 -1
  14. package/fesm2022/frame-ui-ng-components-breadcrumb.mjs +13 -6
  15. package/fesm2022/frame-ui-ng-components-breadcrumb.mjs.map +1 -1
  16. package/fesm2022/frame-ui-ng-components-button-group.mjs +1 -0
  17. package/fesm2022/frame-ui-ng-components-button-group.mjs.map +1 -1
  18. package/fesm2022/frame-ui-ng-components-button.mjs +5 -0
  19. package/fesm2022/frame-ui-ng-components-button.mjs.map +1 -1
  20. package/fesm2022/frame-ui-ng-components-calendar.mjs +4 -0
  21. package/fesm2022/frame-ui-ng-components-calendar.mjs.map +1 -1
  22. package/fesm2022/frame-ui-ng-components-card.mjs +15 -15
  23. package/fesm2022/frame-ui-ng-components-card.mjs.map +1 -1
  24. package/fesm2022/frame-ui-ng-components-carousel.mjs +33 -16
  25. package/fesm2022/frame-ui-ng-components-carousel.mjs.map +1 -1
  26. package/fesm2022/frame-ui-ng-components-checkbox.mjs +7 -9
  27. package/fesm2022/frame-ui-ng-components-checkbox.mjs.map +1 -1
  28. package/fesm2022/frame-ui-ng-components-collapsible.mjs +24 -23
  29. package/fesm2022/frame-ui-ng-components-collapsible.mjs.map +1 -1
  30. package/fesm2022/frame-ui-ng-components-combobox.mjs +113 -68
  31. package/fesm2022/frame-ui-ng-components-combobox.mjs.map +1 -1
  32. package/fesm2022/frame-ui-ng-components-command.mjs +47 -16
  33. package/fesm2022/frame-ui-ng-components-command.mjs.map +1 -1
  34. package/fesm2022/frame-ui-ng-components-confirm-modal.mjs +165 -0
  35. package/fesm2022/frame-ui-ng-components-confirm-modal.mjs.map +1 -0
  36. package/fesm2022/frame-ui-ng-components-confirm-popover.mjs +423 -0
  37. package/fesm2022/frame-ui-ng-components-confirm-popover.mjs.map +1 -0
  38. package/fesm2022/frame-ui-ng-components-context-menu.mjs +71 -45
  39. package/fesm2022/frame-ui-ng-components-context-menu.mjs.map +1 -1
  40. package/fesm2022/frame-ui-ng-components-date-picker.mjs +3 -0
  41. package/fesm2022/frame-ui-ng-components-date-picker.mjs.map +1 -1
  42. package/fesm2022/frame-ui-ng-components-drag-drop.mjs +293 -0
  43. package/fesm2022/frame-ui-ng-components-drag-drop.mjs.map +1 -0
  44. package/fesm2022/frame-ui-ng-components-dropdown-menu.mjs +74 -37
  45. package/fesm2022/frame-ui-ng-components-dropdown-menu.mjs.map +1 -1
  46. package/fesm2022/frame-ui-ng-components-empty.mjs +6 -0
  47. package/fesm2022/frame-ui-ng-components-empty.mjs.map +1 -1
  48. package/fesm2022/frame-ui-ng-components-field.mjs +21 -12
  49. package/fesm2022/frame-ui-ng-components-field.mjs.map +1 -1
  50. package/fesm2022/frame-ui-ng-components-forms.mjs +1 -0
  51. package/fesm2022/frame-ui-ng-components-forms.mjs.map +1 -1
  52. package/fesm2022/frame-ui-ng-components-hover-card.mjs +49 -43
  53. package/fesm2022/frame-ui-ng-components-hover-card.mjs.map +1 -1
  54. package/fesm2022/frame-ui-ng-components-input-otp.mjs +69 -69
  55. package/fesm2022/frame-ui-ng-components-input-otp.mjs.map +1 -1
  56. package/fesm2022/frame-ui-ng-components-input.mjs +13 -0
  57. package/fesm2022/frame-ui-ng-components-input.mjs.map +1 -1
  58. package/fesm2022/frame-ui-ng-components-item.mjs +10 -0
  59. package/fesm2022/frame-ui-ng-components-item.mjs.map +1 -1
  60. package/fesm2022/frame-ui-ng-components-menubar.mjs +15 -0
  61. package/fesm2022/frame-ui-ng-components-menubar.mjs.map +1 -1
  62. package/fesm2022/frame-ui-ng-components-modal.mjs +221 -129
  63. package/fesm2022/frame-ui-ng-components-modal.mjs.map +1 -1
  64. package/fesm2022/frame-ui-ng-components-navigation-menu.mjs +14 -0
  65. package/fesm2022/frame-ui-ng-components-navigation-menu.mjs.map +1 -1
  66. package/fesm2022/frame-ui-ng-components-pagination.mjs +45 -36
  67. package/fesm2022/frame-ui-ng-components-pagination.mjs.map +1 -1
  68. package/fesm2022/frame-ui-ng-components-popover.mjs +63 -51
  69. package/fesm2022/frame-ui-ng-components-popover.mjs.map +1 -1
  70. package/fesm2022/frame-ui-ng-components-progress.mjs +4 -1
  71. package/fesm2022/frame-ui-ng-components-progress.mjs.map +1 -1
  72. package/fesm2022/frame-ui-ng-components-radio-group.mjs +5 -0
  73. package/fesm2022/frame-ui-ng-components-radio-group.mjs.map +1 -1
  74. package/fesm2022/frame-ui-ng-components-resizable.mjs +22 -26
  75. package/fesm2022/frame-ui-ng-components-resizable.mjs.map +1 -1
  76. package/fesm2022/frame-ui-ng-components-select.mjs +62 -14
  77. package/fesm2022/frame-ui-ng-components-select.mjs.map +1 -1
  78. package/fesm2022/frame-ui-ng-components-separator.mjs +1 -0
  79. package/fesm2022/frame-ui-ng-components-separator.mjs.map +1 -1
  80. package/fesm2022/frame-ui-ng-components-sheet.mjs +118 -104
  81. package/fesm2022/frame-ui-ng-components-sheet.mjs.map +1 -1
  82. package/fesm2022/frame-ui-ng-components-sidebar.mjs +45 -24
  83. package/fesm2022/frame-ui-ng-components-sidebar.mjs.map +1 -1
  84. package/fesm2022/frame-ui-ng-components-skeleton.mjs +1 -0
  85. package/fesm2022/frame-ui-ng-components-skeleton.mjs.map +1 -1
  86. package/fesm2022/frame-ui-ng-components-slider.mjs +82 -75
  87. package/fesm2022/frame-ui-ng-components-slider.mjs.map +1 -1
  88. package/fesm2022/frame-ui-ng-components-spinner.mjs +1 -0
  89. package/fesm2022/frame-ui-ng-components-spinner.mjs.map +1 -1
  90. package/fesm2022/frame-ui-ng-components-switch.mjs +6 -0
  91. package/fesm2022/frame-ui-ng-components-switch.mjs.map +1 -1
  92. package/fesm2022/frame-ui-ng-components-table.mjs +76 -50
  93. package/fesm2022/frame-ui-ng-components-table.mjs.map +1 -1
  94. package/fesm2022/frame-ui-ng-components-tabs.mjs +4 -0
  95. package/fesm2022/frame-ui-ng-components-tabs.mjs.map +1 -1
  96. package/fesm2022/frame-ui-ng-components-textarea.mjs +1 -0
  97. package/fesm2022/frame-ui-ng-components-textarea.mjs.map +1 -1
  98. package/fesm2022/frame-ui-ng-components-toast.mjs +2 -0
  99. package/fesm2022/frame-ui-ng-components-toast.mjs.map +1 -1
  100. package/fesm2022/frame-ui-ng-components-toggle.mjs +23 -16
  101. package/fesm2022/frame-ui-ng-components-toggle.mjs.map +1 -1
  102. package/fesm2022/frame-ui-ng-components-tooltip.mjs +74 -25
  103. package/fesm2022/frame-ui-ng-components-tooltip.mjs.map +1 -1
  104. package/fesm2022/frame-ui-ng-components-utils.mjs +20 -0
  105. package/fesm2022/frame-ui-ng-components-utils.mjs.map +1 -0
  106. package/fesm2022/frame-ui-ng-components-virtual-scroll.mjs +36 -20
  107. package/fesm2022/frame-ui-ng-components-virtual-scroll.mjs.map +1 -1
  108. package/fesm2022/frame-ui-ng-components.mjs +1737 -845
  109. package/fesm2022/frame-ui-ng-components.mjs.map +1 -1
  110. package/item/src/styles/item.css +188 -187
  111. package/modal/src/styles/modal.css +10 -1
  112. package/package.json +18 -2
  113. package/popover/src/styles/popover.css +106 -101
  114. package/sidebar/src/styles/sidebar.css +10 -4
  115. package/src/styles/blueprint.css +98 -0
  116. package/src/styles/components.css +2 -0
  117. package/styles/blueprint.css +98 -0
  118. package/styles/components.css +2 -0
  119. package/styles.css +2 -0
  120. package/tooltip/src/styles/tooltip.css +4 -4
  121. package/types/frame-ui-ng-components-accordion.d.ts +11 -4
  122. package/types/frame-ui-ng-components-alert.d.ts +4 -0
  123. package/types/frame-ui-ng-components-avatar.d.ts +7 -0
  124. package/types/frame-ui-ng-components-badge.d.ts +4 -0
  125. package/types/frame-ui-ng-components-breadcrumb.d.ts +7 -0
  126. package/types/frame-ui-ng-components-button-group.d.ts +1 -0
  127. package/types/frame-ui-ng-components-button.d.ts +5 -0
  128. package/types/frame-ui-ng-components-calendar.d.ts +1 -0
  129. package/types/frame-ui-ng-components-card.d.ts +8 -3
  130. package/types/frame-ui-ng-components-carousel.d.ts +11 -2
  131. package/types/frame-ui-ng-components-checkbox.d.ts +3 -2
  132. package/types/frame-ui-ng-components-collapsible.d.ts +9 -4
  133. package/types/frame-ui-ng-components-combobox.d.ts +33 -4
  134. package/types/frame-ui-ng-components-command.d.ts +26 -4
  135. package/types/frame-ui-ng-components-confirm-modal.d.ts +50 -0
  136. package/types/frame-ui-ng-components-confirm-popover.d.ts +87 -0
  137. package/types/frame-ui-ng-components-context-menu.d.ts +29 -10
  138. package/types/frame-ui-ng-components-date-picker.d.ts +1 -0
  139. package/types/frame-ui-ng-components-drag-drop.d.ts +103 -0
  140. package/types/frame-ui-ng-components-dropdown-menu.d.ts +32 -9
  141. package/types/frame-ui-ng-components-empty.d.ts +6 -0
  142. package/types/frame-ui-ng-components-field.d.ts +9 -0
  143. package/types/frame-ui-ng-components-forms.d.ts +1 -0
  144. package/types/frame-ui-ng-components-hover-card.d.ts +8 -2
  145. package/types/frame-ui-ng-components-input-otp.d.ts +5 -1
  146. package/types/frame-ui-ng-components-input.d.ts +13 -0
  147. package/types/frame-ui-ng-components-item.d.ts +10 -0
  148. package/types/frame-ui-ng-components-menubar.d.ts +15 -0
  149. package/types/frame-ui-ng-components-modal.d.ts +30 -7
  150. package/types/frame-ui-ng-components-navigation-menu.d.ts +14 -0
  151. package/types/frame-ui-ng-components-pagination.d.ts +8 -0
  152. package/types/frame-ui-ng-components-popover.d.ts +14 -2
  153. package/types/frame-ui-ng-components-progress.d.ts +2 -0
  154. package/types/frame-ui-ng-components-radio-group.d.ts +5 -0
  155. package/types/frame-ui-ng-components-resizable.d.ts +3 -0
  156. package/types/frame-ui-ng-components-select.d.ts +23 -2
  157. package/types/frame-ui-ng-components-separator.d.ts +1 -0
  158. package/types/frame-ui-ng-components-sheet.d.ts +13 -0
  159. package/types/frame-ui-ng-components-sidebar.d.ts +23 -2
  160. package/types/frame-ui-ng-components-skeleton.d.ts +1 -0
  161. package/types/frame-ui-ng-components-slider.d.ts +5 -2
  162. package/types/frame-ui-ng-components-spinner.d.ts +1 -0
  163. package/types/frame-ui-ng-components-switch.d.ts +6 -0
  164. package/types/frame-ui-ng-components-table.d.ts +26 -0
  165. package/types/frame-ui-ng-components-tabs.d.ts +4 -0
  166. package/types/frame-ui-ng-components-textarea.d.ts +1 -0
  167. package/types/frame-ui-ng-components-toast.d.ts +2 -0
  168. package/types/frame-ui-ng-components-toggle.d.ts +8 -2
  169. package/types/frame-ui-ng-components-tooltip.d.ts +11 -2
  170. package/types/frame-ui-ng-components-utils.d.ts +5 -0
  171. package/types/frame-ui-ng-components-virtual-scroll.d.ts +11 -2
  172. package/types/frame-ui-ng-components.d.ts +525 -96
@@ -1 +1 @@
1
- {"version":3,"file":"frame-ui-ng-components-sidebar.mjs","sources":["../../../projects/components/sidebar/src/sidebar.ts","../../../projects/components/sidebar/sidebar.module.ts","../../../projects/components/sidebar/frame-ui-ng-components-sidebar.ts"],"sourcesContent":["import {\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n InjectionToken,\r\n booleanAttribute,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n numberAttribute,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\nexport const FR_SIDEBAR_SIDES = ['left', 'right'] as const;\r\nexport const FR_SIDEBAR_VARIANTS = ['sidebar', 'floating', 'inset'] as const;\r\nexport const FR_SIDEBAR_COLLAPSIBLES = ['offcanvas', 'icon', 'none'] as const;\r\nexport const FR_SIDEBAR_MENU_BUTTON_SIZES = ['default', 'sm', 'lg'] as const;\r\nexport const FR_SIDEBAR_MENU_BUTTON_VARIANTS = ['default', 'outline'] as const;\r\n\r\nexport type FrSidebarSide = (typeof FR_SIDEBAR_SIDES)[number];\r\nexport type FrSidebarVariant = (typeof FR_SIDEBAR_VARIANTS)[number];\r\nexport type FrSidebarCollapsible = (typeof FR_SIDEBAR_COLLAPSIBLES)[number];\r\nexport type FrSidebarState = 'expanded' | 'collapsed';\r\nexport type FrSidebarMenuButtonSize = (typeof FR_SIDEBAR_MENU_BUTTON_SIZES)[number];\r\nexport type FrSidebarMenuButtonVariant = (typeof FR_SIDEBAR_MENU_BUTTON_VARIANTS)[number];\r\n\r\nexport const FR_SIDEBAR_PROVIDER = new InjectionToken<FrSidebarProvider>('FR_SIDEBAR_PROVIDER');\r\n\r\nfunction coerceSide(value: unknown): FrSidebarSide {\r\n return value === 'right' ? 'right' : 'left';\r\n}\r\n\r\nfunction coerceVariant(value: unknown): FrSidebarVariant {\r\n return value === 'floating' || value === 'inset' ? value : 'sidebar';\r\n}\r\n\r\nfunction coerceCollapsible(value: unknown): FrSidebarCollapsible {\r\n return value === 'icon' || value === 'none' ? value : 'offcanvas';\r\n}\r\n\r\nfunction coerceMenuButtonSize(value: unknown): FrSidebarMenuButtonSize {\r\n return value === 'sm' || value === 'lg' ? value : 'default';\r\n}\r\n\r\nfunction coerceMenuButtonVariant(value: unknown): FrSidebarMenuButtonVariant {\r\n return value === 'outline' ? 'outline' : 'default';\r\n}\r\n\r\nfunction coerceOptionalNumber(value: unknown): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const coerced = numberAttribute(value, Number.NaN);\r\n return Number.isFinite(coerced) ? coerced : null;\r\n}\r\n\r\n@Directive({\r\n selector: '[frSidebarProvider], frame-sidebar-provider',\r\n exportAs: 'frSidebarProvider',\r\n providers: [\r\n {\r\n provide: FR_SIDEBAR_PROVIDER,\r\n useExisting: FrSidebarProvider,\r\n },\r\n ],\r\n host: {\r\n class: 'frame-sidebar-provider',\r\n '[attr.data-state]': 'state()',\r\n '[attr.data-open]': 'open()',\r\n '[attr.data-mobile-open]': 'openMobile()',\r\n '[attr.data-mobile]': 'isMobile() ? \"\" : null',\r\n '[attr.data-resizing]': 'resizing() ? \"\" : null',\r\n },\r\n})\r\nexport class FrSidebarProvider {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly internalOpen = signal(true);\r\n private readonly internalOpenMobile = signal(false);\r\n protected readonly resizing = signal(false);\r\n\r\n readonly defaultOpen = input(true, { transform: booleanAttribute });\r\n readonly openInput = input<boolean | null>(null, { alias: 'open' });\r\n readonly openChange = output<boolean>();\r\n readonly openMobileChange = output<boolean>();\r\n readonly shortcut = input('b');\r\n readonly keyboardShortcut = input(true, { transform: booleanAttribute });\r\n readonly isMobile = signal(false);\r\n\r\n readonly open = computed(() => this.openInput() ?? this.internalOpen());\r\n readonly openMobile = computed(() => this.internalOpenMobile());\r\n readonly state = computed<FrSidebarState>(() => (this.open() ? 'expanded' : 'collapsed'));\r\n\r\n constructor() {\r\n this.internalOpen.set(this.defaultOpen());\r\n\r\n effect(() => {\r\n if (this.openInput() === null) {\r\n this.internalOpen.set(this.defaultOpen());\r\n }\r\n });\r\n\r\n effect(() => {\r\n this.elementRef.nativeElement.style.setProperty('--frame-sidebar-state', this.state());\r\n });\r\n\r\n const defaultView = this.document.defaultView;\r\n if (!defaultView?.matchMedia) {\r\n return;\r\n }\r\n\r\n const mediaQuery = defaultView.matchMedia('(max-width: 768px)');\r\n const updateMobile = () => this.isMobile.set(mediaQuery.matches);\r\n updateMobile();\r\n mediaQuery.addEventListener?.('change', updateMobile);\r\n }\r\n\r\n setOpen(open: boolean): void {\r\n if (this.openInput() === null) {\r\n this.internalOpen.set(open);\r\n }\r\n\r\n this.openChange.emit(open);\r\n }\r\n\r\n setOpenMobile(open: boolean): void {\r\n this.internalOpenMobile.set(open);\r\n this.openMobileChange.emit(open);\r\n }\r\n\r\n setSidebarWidth(width: number): void {\r\n this.elementRef.nativeElement.style.setProperty('--frame-sidebar-width', `${width}px`);\r\n }\r\n\r\n setResizing(resizing: boolean): void {\r\n this.resizing.set(resizing);\r\n }\r\n\r\n toggleSidebar(): void {\r\n if (this.isMobile()) {\r\n this.setOpenMobile(!this.openMobile());\r\n return;\r\n }\r\n\r\n this.setOpen(!this.open());\r\n }\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (!this.keyboardShortcut()) {\r\n return;\r\n }\r\n\r\n const key = this.shortcut().toLowerCase();\r\n if (event.key.toLowerCase() !== key || (!event.metaKey && !event.ctrlKey)) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n this.toggleSidebar();\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: '[frSidebar], frame-sidebar',\r\n host: {\r\n class: 'frame-sidebar',\r\n '[attr.data-side]': 'side()',\r\n '[attr.data-variant]': 'variant()',\r\n '[attr.data-collapsible]': 'collapsible()',\r\n '[attr.data-state]': 'provider?.state() ?? \"expanded\"',\r\n '[attr.data-mobile-open]': 'provider?.openMobile() ?? false',\r\n },\r\n})\r\nexport class FrSidebar {\r\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n readonly provider = inject(FR_SIDEBAR_PROVIDER, { optional: true });\r\n readonly side = input<FrSidebarSide, unknown>('left', { transform: coerceSide });\r\n readonly variant = input<FrSidebarVariant, unknown>('sidebar', { transform: coerceVariant });\r\n readonly collapsible = input<FrSidebarCollapsible, unknown>('offcanvas', {\r\n transform: coerceCollapsible,\r\n });\r\n readonly minSize = input<number | null, unknown>(null, { transform: coerceOptionalNumber });\r\n readonly maxSize = input<number | null, unknown>(384, { transform: coerceOptionalNumber });\r\n}\r\n\r\n@Directive({\r\n selector: '[frSidebarTrigger]',\r\n host: {\r\n class: 'frame-sidebar__trigger',\r\n type: 'button',\r\n '[attr.aria-expanded]': 'provider?.open() ?? true',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n '(click)': 'toggle()',\r\n },\r\n})\r\nexport class FrSidebarTrigger {\r\n readonly provider = inject(FR_SIDEBAR_PROVIDER, { optional: true });\r\n readonly ariaLabel = input('Toggle sidebar', { alias: 'aria-label' });\r\n\r\n toggle(): void {\r\n this.provider?.toggleSidebar();\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: '[frSidebarRail], frame-sidebar-rail',\r\n host: {\r\n class: 'frame-sidebar__rail',\r\n role: 'separator',\r\n tabindex: '0',\r\n 'aria-label': 'Resize sidebar',\r\n 'aria-orientation': 'vertical',\r\n '(click)': 'toggle()',\r\n '(pointerdown)': 'startResize($event)',\r\n '(keydown.enter)': 'toggle()',\r\n '(keydown.space)': 'toggle(); $event.preventDefault()',\r\n },\r\n})\r\nexport class FrSidebarRail {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly sidebar = inject(FrSidebar, { optional: true });\r\n private startX = 0;\r\n private startWidth = 0;\r\n private dragging = false;\r\n private suppressClick = false;\r\n private frameId = -1;\r\n private pendingWidth = 0;\r\n private resizeMinSize = 192;\r\n private resizeMaxSize = 384;\r\n\r\n readonly provider = inject(FR_SIDEBAR_PROVIDER, { optional: true });\r\n\r\n toggle(): void {\r\n if (this.suppressClick) {\r\n return;\r\n }\r\n\r\n this.provider?.toggleSidebar();\r\n }\r\n\r\n startResize(event: PointerEvent): void {\r\n if (!this.sidebar || !this.provider || this.provider.isMobile()) {\r\n return;\r\n }\r\n\r\n this.startX = event.clientX;\r\n this.startWidth = this.sidebar.elementRef.nativeElement.getBoundingClientRect().width;\r\n this.dragging = false;\r\n this.pendingWidth = this.startWidth;\r\n this.captureResizeBounds();\r\n this.provider.setResizing(true);\r\n event.preventDefault();\r\n\r\n const move = (moveEvent: PointerEvent) => this.resize(moveEvent);\r\n const up = () => {\r\n this.document.removeEventListener('pointermove', move);\r\n this.document.removeEventListener('pointerup', up);\r\n this.flushResize();\r\n this.provider?.setResizing(false);\r\n this.suppressClick = this.dragging;\r\n this.dragging = false;\r\n this.pendingWidth = 0;\r\n this.resizeMinSize = 192;\r\n this.resizeMaxSize = 384;\r\n setTimeout(() => {\r\n this.suppressClick = false;\r\n });\r\n };\r\n\r\n this.document.addEventListener('pointermove', move);\r\n this.document.addEventListener('pointerup', up, { once: true });\r\n }\r\n\r\n private resize(event: PointerEvent): void {\r\n if (!this.sidebar || !this.provider) {\r\n return;\r\n }\r\n\r\n const delta = event.clientX - this.startX;\r\n const direction = this.sidebar.side() === 'right' ? -1 : 1;\r\n const nextWidth = this.clampWidth(this.startWidth + delta * direction);\r\n\r\n if (Math.abs(delta) > 3) {\r\n this.dragging = true;\r\n }\r\n\r\n this.pendingWidth = nextWidth;\r\n\r\n if (this.frameId !== -1) {\r\n return;\r\n }\r\n\r\n this.frameId = requestAnimationFrame(() => {\r\n this.provider?.setSidebarWidth(this.pendingWidth);\r\n this.frameId = -1;\r\n });\r\n }\r\n\r\n private flushResize(): void {\r\n if (this.frameId !== -1) {\r\n cancelAnimationFrame(this.frameId);\r\n this.frameId = -1;\r\n }\r\n\r\n if (this.pendingWidth) {\r\n this.provider?.setSidebarWidth(this.pendingWidth);\r\n }\r\n }\r\n\r\n private clampWidth(width: number): number {\r\n return Math.min(Math.max(width, this.resizeMinSize), this.resizeMaxSize);\r\n }\r\n\r\n private captureResizeBounds(): void {\r\n if (!this.sidebar) {\r\n return;\r\n }\r\n\r\n const minSize = this.sidebar.minSize() ?? this.measureContentMinSize();\r\n const maxSize = this.sidebar.maxSize() ?? Number.POSITIVE_INFINITY;\r\n\r\n this.resizeMinSize = minSize;\r\n this.resizeMaxSize = Math.max(minSize, maxSize);\r\n }\r\n\r\n private measureContentMinSize(): number {\r\n if (!this.sidebar) {\r\n return 192;\r\n }\r\n\r\n const sidebarElement = this.sidebar.elementRef.nativeElement;\r\n const sidebarRect = sidebarElement.getBoundingClientRect();\r\n let measuredWidth = 0;\r\n\r\n for (const element of Array.from(sidebarElement.querySelectorAll<HTMLElement>('*'))) {\r\n if (element.hasAttribute('frSidebarRail') || element.tagName.toLowerCase() === 'frame-sidebar-rail') {\r\n continue;\r\n }\r\n\r\n const rect = element.getBoundingClientRect();\r\n const inlineStart = Math.max(0, rect.left - sidebarRect.left);\r\n measuredWidth = Math.max(measuredWidth, inlineStart + element.scrollWidth);\r\n }\r\n\r\n return Math.max(Math.ceil(measuredWidth), 192);\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: '[frSidebarInset], frame-sidebar-inset',\r\n host: {\r\n class: 'frame-sidebar-inset',\r\n },\r\n})\r\nexport class FrSidebarInset {}\r\n\r\n@Directive({\r\n selector: '[frSidebarHeader], frame-sidebar-header',\r\n host: {\r\n class: 'frame-sidebar__header',\r\n },\r\n})\r\nexport class FrSidebarHeader {}\r\n\r\n@Directive({\r\n selector: '[frSidebarFooter], frame-sidebar-footer',\r\n host: {\r\n class: 'frame-sidebar__footer',\r\n },\r\n})\r\nexport class FrSidebarFooter {}\r\n\r\n@Directive({\r\n selector: '[frSidebarContent], frame-sidebar-content',\r\n host: {\r\n class: 'frame-sidebar__content',\r\n },\r\n})\r\nexport class FrSidebarContent {}\r\n\r\n@Directive({\r\n selector: '[frSidebarGroup], frame-sidebar-group',\r\n host: {\r\n class: 'frame-sidebar__group',\r\n },\r\n})\r\nexport class FrSidebarGroup {}\r\n\r\n@Directive({\r\n selector: '[frSidebarGroupLabel], frame-sidebar-group-label',\r\n host: {\r\n class: 'frame-sidebar__group-label',\r\n },\r\n})\r\nexport class FrSidebarGroupLabel {}\r\n\r\n@Directive({\r\n selector: '[frSidebarGroupAction], frame-sidebar-group-action',\r\n host: {\r\n class: 'frame-sidebar__group-action',\r\n type: 'button',\r\n },\r\n})\r\nexport class FrSidebarGroupAction {}\r\n\r\n@Directive({\r\n selector: '[frSidebarGroupContent], frame-sidebar-group-content',\r\n host: {\r\n class: 'frame-sidebar__group-content',\r\n },\r\n})\r\nexport class FrSidebarGroupContent {}\r\n\r\n@Directive({\r\n selector: '[frSidebarMenu], frame-sidebar-menu',\r\n host: {\r\n class: 'frame-sidebar__menu',\r\n role: 'list',\r\n },\r\n})\r\nexport class FrSidebarMenu {}\r\n\r\n@Directive({\r\n selector: '[frSidebarMenuItem], frame-sidebar-menu-item',\r\n host: {\r\n class: 'frame-sidebar__menu-item',\r\n role: 'listitem',\r\n },\r\n})\r\nexport class FrSidebarMenuItem {}\r\n\r\n@Directive({\r\n selector: '[frSidebarMenuButton], a[frSidebarMenuButton], button[frSidebarMenuButton]',\r\n host: {\r\n class: 'frame-sidebar__menu-button',\r\n '[attr.data-active]': 'active() ? \"\" : null',\r\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\r\n '[attr.data-size]': 'size()',\r\n '[attr.data-variant]': 'variant()',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '[attr.tabindex]': 'disabled() ? -1 : null',\r\n '(click)': 'handleClick($event)',\r\n },\r\n})\r\nexport class FrSidebarMenuButton {\r\n readonly active = input(false, { transform: booleanAttribute });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n readonly size = input<FrSidebarMenuButtonSize, unknown>('default', {\r\n transform: coerceMenuButtonSize,\r\n });\r\n readonly variant = input<FrSidebarMenuButtonVariant, unknown>('default', {\r\n transform: coerceMenuButtonVariant,\r\n });\r\n readonly tooltip = input<string | null>(null);\r\n\r\n handleClick(event: Event): void {\r\n if (this.disabled()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: '[frSidebarMenuAction], frame-sidebar-menu-action',\r\n host: {\r\n class: 'frame-sidebar__menu-action',\r\n type: 'button',\r\n '[attr.data-show-on-hover]': 'showOnHover() ? \"\" : null',\r\n },\r\n})\r\nexport class FrSidebarMenuAction {\r\n readonly showOnHover = input(false, { transform: booleanAttribute });\r\n}\r\n\r\n@Directive({\r\n selector: '[frSidebarMenuBadge], frame-sidebar-menu-badge',\r\n host: {\r\n class: 'frame-sidebar__menu-badge',\r\n },\r\n})\r\nexport class FrSidebarMenuBadge {}\r\n\r\n@Directive({\r\n selector: '[frSidebarMenuSub], frame-sidebar-menu-sub',\r\n host: {\r\n class: 'frame-sidebar__menu-sub',\r\n role: 'list',\r\n },\r\n})\r\nexport class FrSidebarMenuSub {}\r\n\r\n@Directive({\r\n selector: '[frSidebarMenuSubItem], frame-sidebar-menu-sub-item',\r\n host: {\r\n class: 'frame-sidebar__menu-sub-item',\r\n role: 'listitem',\r\n },\r\n})\r\nexport class FrSidebarMenuSubItem {}\r\n\r\n@Directive({\r\n selector: '[frSidebarMenuSubButton], a[frSidebarMenuSubButton], button[frSidebarMenuSubButton]',\r\n host: {\r\n class: 'frame-sidebar__menu-sub-button',\r\n '[attr.data-active]': 'active() ? \"\" : null',\r\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '(click)': 'handleClick($event)',\r\n },\r\n})\r\nexport class FrSidebarMenuSubButton {\r\n readonly active = input(false, { transform: booleanAttribute });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n handleClick(event: Event): void {\r\n if (this.disabled()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: '[frSidebarMenuSkeleton], frame-sidebar-menu-skeleton',\r\n host: {\r\n class: 'frame-sidebar__menu-skeleton',\r\n '[attr.data-show-icon]': 'showIcon() ? \"\" : null',\r\n '[style.--frame-sidebar-skeleton-width]': 'width()',\r\n },\r\n})\r\nexport class FrSidebarMenuSkeleton {\r\n readonly showIcon = input(false, { transform: booleanAttribute });\r\n readonly width = input('72%');\r\n}\r\n","import { NgModule } from '@angular/core';\nimport {\n FrSidebar,\n FrSidebarContent,\n FrSidebarFooter,\n FrSidebarGroup,\n FrSidebarGroupAction,\n FrSidebarGroupContent,\n FrSidebarGroupLabel,\n FrSidebarHeader,\n FrSidebarInset,\n FrSidebarMenu,\n FrSidebarMenuAction,\n FrSidebarMenuBadge,\n FrSidebarMenuButton,\n FrSidebarMenuItem,\n FrSidebarMenuSkeleton,\n FrSidebarMenuSub,\n FrSidebarMenuSubButton,\n FrSidebarMenuSubItem,\n FrSidebarProvider,\n FrSidebarRail,\n FrSidebarTrigger,\n} from './src/sidebar';\n\n@NgModule({\n imports: [\n FrSidebar,\n FrSidebarContent,\n FrSidebarFooter,\n FrSidebarGroup,\n FrSidebarGroupAction,\n FrSidebarGroupContent,\n FrSidebarGroupLabel,\n FrSidebarHeader,\n FrSidebarInset,\n FrSidebarMenu,\n FrSidebarMenuAction,\n FrSidebarMenuBadge,\n FrSidebarMenuButton,\n FrSidebarMenuItem,\n FrSidebarMenuSkeleton,\n FrSidebarMenuSub,\n FrSidebarMenuSubButton,\n FrSidebarMenuSubItem,\n FrSidebarProvider,\n FrSidebarRail,\n FrSidebarTrigger,\n ],\n exports: [\n FrSidebar,\n FrSidebarContent,\n FrSidebarFooter,\n FrSidebarGroup,\n FrSidebarGroupAction,\n FrSidebarGroupContent,\n FrSidebarGroupLabel,\n FrSidebarHeader,\n FrSidebarInset,\n FrSidebarMenu,\n FrSidebarMenuAction,\n FrSidebarMenuBadge,\n FrSidebarMenuButton,\n FrSidebarMenuItem,\n FrSidebarMenuSkeleton,\n FrSidebarMenuSub,\n FrSidebarMenuSubButton,\n FrSidebarMenuSubItem,\n FrSidebarProvider,\n FrSidebarRail,\n FrSidebarTrigger,\n ],\n})\nexport class FrSidebarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame-ui-ng-components-sidebar.mjs","sources":["../../../projects/components/sidebar/src/sidebar.ts","../../../projects/components/sidebar/sidebar.module.ts","../../../projects/components/sidebar/frame-ui-ng-components-sidebar.ts"],"sourcesContent":["import {\r\n Directive,\r\n ElementRef,\r\n InjectionToken,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n linkedSignal,\r\n numberAttribute,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { clampNumber } from '@frame-ui-ng/components/utils';\r\n\r\nexport const FR_SIDEBAR_SIDES = ['left', 'right'] as const;\r\nexport const FR_SIDEBAR_VARIANTS = ['sidebar', 'floating', 'inset'] as const;\r\nexport const FR_SIDEBAR_COLLAPSIBLES = ['offcanvas', 'icon', 'none'] as const;\r\nexport const FR_SIDEBAR_MENU_BUTTON_SIZES = ['default', 'sm', 'lg'] as const;\r\nexport const FR_SIDEBAR_MENU_BUTTON_VARIANTS = ['default', 'outline'] as const;\r\n\r\nexport type FrSidebarSide = (typeof FR_SIDEBAR_SIDES)[number];\r\nexport type FrSidebarVariant = (typeof FR_SIDEBAR_VARIANTS)[number];\r\nexport type FrSidebarCollapsible = (typeof FR_SIDEBAR_COLLAPSIBLES)[number];\r\nexport type FrSidebarState = 'expanded' | 'collapsed';\r\nexport type FrSidebarMenuButtonSize = (typeof FR_SIDEBAR_MENU_BUTTON_SIZES)[number];\r\nexport type FrSidebarMenuButtonVariant = (typeof FR_SIDEBAR_MENU_BUTTON_VARIANTS)[number];\r\n\r\nexport const FR_SIDEBAR_PROVIDER = new InjectionToken<FrSidebarProvider>('FR_SIDEBAR_PROVIDER');\r\n\r\nfunction coerceSide(value: unknown): FrSidebarSide {\r\n return value === 'right' ? 'right' : 'left';\r\n}\r\n\r\nfunction coerceVariant(value: unknown): FrSidebarVariant {\r\n return value === 'floating' || value === 'inset' ? value : 'sidebar';\r\n}\r\n\r\nfunction coerceCollapsible(value: unknown): FrSidebarCollapsible {\r\n return value === 'icon' || value === 'none' ? value : 'offcanvas';\r\n}\r\n\r\nfunction coerceMenuButtonSize(value: unknown): FrSidebarMenuButtonSize {\r\n return value === 'sm' || value === 'lg' ? value : 'default';\r\n}\r\n\r\nfunction coerceMenuButtonVariant(value: unknown): FrSidebarMenuButtonVariant {\r\n return value === 'outline' ? 'outline' : 'default';\r\n}\r\n\r\nfunction coerceOptionalNumber(value: unknown): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const coerced = numberAttribute(value, Number.NaN);\r\n return Number.isFinite(coerced) ? coerced : null;\r\n}\r\n\r\n/** Shared state provider for sidebar. */\r\n@Directive({\r\n selector: '[frSidebarProvider], frame-sidebar-provider',\r\n exportAs: 'frSidebarProvider',\r\n providers: [\r\n {\r\n provide: FR_SIDEBAR_PROVIDER,\r\n useExisting: FrSidebarProvider,\r\n },\r\n ],\r\n host: {\r\n class: 'frame-sidebar-provider',\r\n '[attr.data-state]': 'state()',\r\n '[attr.data-open]': 'open()',\r\n '[attr.data-mobile-open]': 'openMobile()',\r\n '[attr.data-mobile]': 'isMobile() ? \"\" : null',\r\n '[attr.data-resizing]': 'resizing() ? \"\" : null',\r\n '[style.--frame-sidebar-state]': 'state()',\r\n '(document:keydown)': 'handleKeydown($event)',\r\n },\r\n})\r\nexport class FrSidebarProvider {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly internalOpen = linkedSignal(() => this.defaultOpen());\r\n private readonly internalOpenMobile = signal(false);\r\n protected readonly resizing = signal(false);\r\n\r\n readonly defaultOpen = input(true, { transform: booleanAttribute });\r\n readonly openInput = input<boolean | null>(null, { alias: 'open' });\r\n readonly openChange = output<boolean>();\r\n readonly openMobileChange = output<boolean>();\r\n readonly shortcut = input('b');\r\n readonly keyboardShortcut = input(true, { transform: booleanAttribute });\r\n readonly isMobile = signal(false);\r\n\r\n readonly open = computed(() => this.openInput() ?? this.internalOpen());\r\n readonly openMobile = computed(() => this.internalOpenMobile());\r\n readonly state = computed<FrSidebarState>(() => (this.open() ? 'expanded' : 'collapsed'));\r\n\r\n constructor() {\r\n const defaultView = this.document.defaultView;\r\n if (!defaultView?.matchMedia) {\r\n return;\r\n }\r\n\r\n const mediaQuery = defaultView.matchMedia('(max-width: 768px)');\r\n const updateMobile = () => this.isMobile.set(mediaQuery.matches);\r\n updateMobile();\r\n mediaQuery.addEventListener?.('change', updateMobile);\r\n }\r\n\r\n setOpen(open: boolean): void {\r\n if (this.openInput() === null) {\r\n this.internalOpen.set(open);\r\n }\r\n\r\n this.openChange.emit(open);\r\n }\r\n\r\n setOpenMobile(open: boolean): void {\r\n this.internalOpenMobile.set(open);\r\n this.openMobileChange.emit(open);\r\n }\r\n\r\n setSidebarWidth(width: number): void {\r\n this.elementRef.nativeElement.style.setProperty('--frame-sidebar-width', `${width}px`);\r\n }\r\n\r\n setResizing(resizing: boolean): void {\r\n this.resizing.set(resizing);\r\n }\r\n\r\n toggleSidebar(): void {\r\n if (this.isMobile()) {\r\n this.setOpenMobile(!this.openMobile());\r\n return;\r\n }\r\n\r\n this.setOpen(!this.open());\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (!this.keyboardShortcut()) {\r\n return;\r\n }\r\n\r\n const key = this.shortcut().toLowerCase();\r\n if (event.key.toLowerCase() !== key || (!event.metaKey && !event.ctrlKey)) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n this.toggleSidebar();\r\n }\r\n}\r\n\r\n/** Sidebar root driven by provider state. */\r\n@Directive({\r\n selector: '[frSidebar], frame-sidebar',\r\n host: {\r\n class: 'frame-sidebar',\r\n '[attr.data-side]': 'side()',\r\n '[attr.data-variant]': 'variant()',\r\n '[attr.data-collapsible]': 'collapsible()',\r\n '[attr.data-resizable]': 'resizable() ? \"\" : null',\r\n '[attr.data-state]': 'provider?.state() ?? \"expanded\"',\r\n '[attr.data-mobile-open]': 'provider?.openMobile() ?? false',\r\n },\r\n})\r\nexport class FrSidebar {\r\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n readonly provider = inject(FR_SIDEBAR_PROVIDER, { optional: true });\r\n readonly side = input<FrSidebarSide, unknown>('left', { transform: coerceSide });\r\n readonly variant = input<FrSidebarVariant, unknown>('sidebar', { transform: coerceVariant });\r\n readonly collapsible = input<FrSidebarCollapsible, unknown>('offcanvas', {\r\n transform: coerceCollapsible,\r\n });\r\n readonly minSize = input<number | null, unknown>(null, { transform: coerceOptionalNumber });\r\n readonly maxSize = input<number | null, unknown>(384, { transform: coerceOptionalNumber });\r\n readonly resizable = input(true, { transform: booleanAttribute });\r\n}\r\n\r\n/** Trigger control for sidebar. */\r\n@Directive({\r\n selector: '[frSidebarTrigger]',\r\n host: {\r\n class: 'frame-sidebar__trigger',\r\n type: 'button',\r\n '[attr.aria-expanded]': 'provider?.open() ?? true',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n '(click)': 'toggle()',\r\n },\r\n})\r\nexport class FrSidebarTrigger {\r\n readonly provider = inject(FR_SIDEBAR_PROVIDER, { optional: true });\r\n readonly ariaLabel = input('Toggle sidebar', { alias: 'aria-label' });\r\n\r\n toggle(): void {\r\n this.provider?.toggleSidebar();\r\n }\r\n}\r\n\r\n/** Rail slot for sidebar. */\r\n@Directive({\r\n selector: '[frSidebarRail], frame-sidebar-rail',\r\n host: {\r\n class: 'frame-sidebar__rail',\r\n role: 'separator',\r\n tabindex: '0',\r\n 'aria-label': 'Resize sidebar',\r\n 'aria-orientation': 'vertical',\r\n '(click)': 'toggle()',\r\n '(pointerdown)': 'startResize($event)',\r\n '(keydown.enter)': 'toggle()',\r\n '(keydown.space)': 'toggle(); $event.preventDefault()',\r\n },\r\n})\r\nexport class FrSidebarRail {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly sidebar = inject(FrSidebar, { optional: true });\r\n private startX = 0;\r\n private startWidth = 0;\r\n private dragging = false;\r\n private suppressClick = false;\r\n private frameId = -1;\r\n private pendingWidth = 0;\r\n private resizeMinSize = 192;\r\n private resizeMaxSize = 384;\r\n\r\n readonly provider = inject(FR_SIDEBAR_PROVIDER, { optional: true });\r\n\r\n toggle(): void {\r\n if (this.suppressClick) {\r\n return;\r\n }\r\n\r\n if (this.sidebar?.collapsible() === 'icon') {\r\n return;\r\n }\r\n\r\n this.provider?.toggleSidebar();\r\n }\r\n\r\n startResize(event: PointerEvent): void {\r\n if (!this.sidebar || !this.provider || this.provider.isMobile() || !this.sidebar.resizable()) {\r\n return;\r\n }\r\n\r\n this.startX = event.clientX;\r\n this.startWidth = this.sidebar.elementRef.nativeElement.getBoundingClientRect().width;\r\n this.dragging = false;\r\n this.pendingWidth = this.startWidth;\r\n this.captureResizeBounds();\r\n this.provider.setResizing(true);\r\n event.preventDefault();\r\n\r\n const move = (moveEvent: PointerEvent) => this.resize(moveEvent);\r\n const up = () => {\r\n this.document.removeEventListener('pointermove', move);\r\n this.document.removeEventListener('pointerup', up);\r\n if (this.dragging) {\r\n this.flushResize();\r\n }\r\n this.provider?.setResizing(false);\r\n this.suppressClick = this.dragging;\r\n this.dragging = false;\r\n this.pendingWidth = 0;\r\n this.resizeMinSize = 192;\r\n this.resizeMaxSize = 384;\r\n setTimeout(() => {\r\n this.suppressClick = false;\r\n });\r\n };\r\n\r\n this.document.addEventListener('pointermove', move);\r\n this.document.addEventListener('pointerup', up, { once: true });\r\n }\r\n\r\n private resize(event: PointerEvent): void {\r\n if (!this.sidebar || !this.provider) {\r\n return;\r\n }\r\n\r\n const delta = event.clientX - this.startX;\r\n const direction = this.sidebar.side() === 'right' ? -1 : 1;\r\n const nextWidth = clampNumber(this.startWidth + delta * direction, this.resizeMinSize, this.resizeMaxSize);\r\n\r\n if (Math.abs(delta) > 3) {\r\n this.dragging = true;\r\n\r\n if (this.sidebar.collapsible() === 'icon' && !this.provider.open()) {\r\n this.provider.setOpen(true);\r\n }\r\n }\r\n\r\n this.pendingWidth = nextWidth;\r\n\r\n if (this.frameId !== -1) {\r\n return;\r\n }\r\n\r\n // Batch rapid pointer moves into one width write per animation frame.\r\n this.frameId = requestAnimationFrame(() => {\r\n this.provider?.setSidebarWidth(this.pendingWidth);\r\n this.frameId = -1;\r\n });\r\n }\r\n\r\n private flushResize(): void {\r\n if (this.frameId !== -1) {\r\n cancelAnimationFrame(this.frameId);\r\n this.frameId = -1;\r\n }\r\n\r\n if (this.pendingWidth) {\r\n this.provider?.setSidebarWidth(this.pendingWidth);\r\n }\r\n }\r\n\r\n private captureResizeBounds(): void {\r\n if (!this.sidebar) {\r\n return;\r\n }\r\n\r\n const minSize = this.sidebar.minSize() ?? this.measureContentMinSize();\r\n const maxSize = this.sidebar.maxSize() ?? Number.POSITIVE_INFINITY;\r\n\r\n this.resizeMinSize = minSize;\r\n this.resizeMaxSize = Math.max(minSize, maxSize);\r\n }\r\n\r\n private measureContentMinSize(): number {\r\n if (!this.sidebar) {\r\n return 192;\r\n }\r\n\r\n // Use rendered child width as a fallback min-size when consumers do not provide one.\r\n const sidebarElement = this.sidebar.elementRef.nativeElement;\r\n const sidebarRect = sidebarElement.getBoundingClientRect();\r\n let measuredWidth = 0;\r\n\r\n for (const element of Array.from(sidebarElement.querySelectorAll<HTMLElement>('*'))) {\r\n if (element.hasAttribute('frSidebarRail') || element.tagName.toLowerCase() === 'frame-sidebar-rail') {\r\n continue;\r\n }\r\n\r\n const rect = element.getBoundingClientRect();\r\n const inlineStart = Math.max(0, rect.left - sidebarRect.left);\r\n measuredWidth = Math.max(measuredWidth, inlineStart + element.scrollWidth);\r\n }\r\n\r\n return Math.max(Math.ceil(measuredWidth), 192);\r\n }\r\n}\r\n\r\n/** Inset slot for sidebar. */\r\n@Directive({\r\n selector: '[frSidebarInset], frame-sidebar-inset',\r\n host: {\r\n class: 'frame-sidebar-inset',\r\n },\r\n})\r\nexport class FrSidebarInset {}\r\n\r\n/** Header slot for sidebar. */\r\n@Directive({\r\n selector: '[frSidebarHeader], frame-sidebar-header',\r\n host: {\r\n class: 'frame-sidebar__header',\r\n },\r\n})\r\nexport class FrSidebarHeader {}\r\n\r\n/** Footer slot for sidebar. */\r\n@Directive({\r\n selector: '[frSidebarFooter], frame-sidebar-footer',\r\n host: {\r\n class: 'frame-sidebar__footer',\r\n },\r\n})\r\nexport class FrSidebarFooter {}\r\n\r\n/** Content slot for sidebar. */\r\n@Directive({\r\n selector: '[frSidebarContent], frame-sidebar-content',\r\n host: {\r\n class: 'frame-sidebar__content',\r\n },\r\n})\r\nexport class FrSidebarContent {}\r\n\r\n/** Group slot for sidebar. */\r\n@Directive({\r\n selector: '[frSidebarGroup], frame-sidebar-group',\r\n host: {\r\n class: 'frame-sidebar__group',\r\n },\r\n})\r\nexport class FrSidebarGroup {}\r\n\r\n/** Label slot for sidebar group. */\r\n@Directive({\r\n selector: '[frSidebarGroupLabel], frame-sidebar-group-label',\r\n host: {\r\n class: 'frame-sidebar__group-label',\r\n },\r\n})\r\nexport class FrSidebarGroupLabel {}\r\n\r\n/** Action slot for sidebar group. */\r\n@Directive({\r\n selector: '[frSidebarGroupAction], frame-sidebar-group-action',\r\n host: {\r\n class: 'frame-sidebar__group-action',\r\n type: 'button',\r\n },\r\n})\r\nexport class FrSidebarGroupAction {}\r\n\r\n/** Content slot for sidebar group. */\r\n@Directive({\r\n selector: '[frSidebarGroupContent], frame-sidebar-group-content',\r\n host: {\r\n class: 'frame-sidebar__group-content',\r\n },\r\n})\r\nexport class FrSidebarGroupContent {}\r\n\r\n/** Menu list inside sidebar navigation. */\r\n@Directive({\r\n selector: '[frSidebarMenu], frame-sidebar-menu',\r\n host: {\r\n class: 'frame-sidebar__menu',\r\n role: 'list',\r\n },\r\n})\r\nexport class FrSidebarMenu {}\r\n\r\n/** Item slot for sidebar menu. */\r\n@Directive({\r\n selector: '[frSidebarMenuItem], frame-sidebar-menu-item',\r\n host: {\r\n class: 'frame-sidebar__menu-item',\r\n role: 'listitem',\r\n },\r\n})\r\nexport class FrSidebarMenuItem {}\r\n\r\n/** Interactive button or link inside a sidebar menu item. */\r\n@Directive({\r\n selector: '[frSidebarMenuButton], a[frSidebarMenuButton], button[frSidebarMenuButton]',\r\n host: {\r\n class: 'frame-sidebar__menu-button',\r\n '[attr.data-active]': 'active() ? \"\" : null',\r\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\r\n '[attr.data-size]': 'size()',\r\n '[attr.data-variant]': 'variant()',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '[attr.tabindex]': 'disabled() ? -1 : null',\r\n '(click)': 'handleClick($event)',\r\n },\r\n})\r\nexport class FrSidebarMenuButton {\r\n readonly active = input(false, { transform: booleanAttribute });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n readonly size = input<FrSidebarMenuButtonSize, unknown>('default', {\r\n transform: coerceMenuButtonSize,\r\n });\r\n readonly variant = input<FrSidebarMenuButtonVariant, unknown>('default', {\r\n transform: coerceMenuButtonVariant,\r\n });\r\n readonly tooltip = input<string | null>(null);\r\n\r\n handleClick(event: Event): void {\r\n if (this.disabled()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }\r\n}\r\n\r\n/** Action slot for sidebar menu. */\r\n@Directive({\r\n selector: '[frSidebarMenuAction], frame-sidebar-menu-action',\r\n host: {\r\n class: 'frame-sidebar__menu-action',\r\n type: 'button',\r\n '[attr.data-show-on-hover]': 'showOnHover() ? \"\" : null',\r\n },\r\n})\r\nexport class FrSidebarMenuAction {\r\n readonly showOnHover = input(false, { transform: booleanAttribute });\r\n}\r\n\r\n/** Badge slot for sidebar menu. */\r\n@Directive({\r\n selector: '[frSidebarMenuBadge], frame-sidebar-menu-badge',\r\n host: {\r\n class: 'frame-sidebar__menu-badge',\r\n },\r\n})\r\nexport class FrSidebarMenuBadge {}\r\n\r\n/** Nested menu list inside sidebar navigation. */\r\n@Directive({\r\n selector: '[frSidebarMenuSub], frame-sidebar-menu-sub',\r\n host: {\r\n class: 'frame-sidebar__menu-sub',\r\n role: 'list',\r\n },\r\n})\r\nexport class FrSidebarMenuSub {}\r\n\r\n/** Item slot for sidebar menu sub. */\r\n@Directive({\r\n selector: '[frSidebarMenuSubItem], frame-sidebar-menu-sub-item',\r\n host: {\r\n class: 'frame-sidebar__menu-sub-item',\r\n role: 'listitem',\r\n },\r\n})\r\nexport class FrSidebarMenuSubItem {}\r\n\r\n/** Interactive button or link inside a sidebar submenu. */\r\n@Directive({\r\n selector: '[frSidebarMenuSubButton], a[frSidebarMenuSubButton], button[frSidebarMenuSubButton]',\r\n host: {\r\n class: 'frame-sidebar__menu-sub-button',\r\n '[attr.data-active]': 'active() ? \"\" : null',\r\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '(click)': 'handleClick($event)',\r\n },\r\n})\r\nexport class FrSidebarMenuSubButton {\r\n readonly active = input(false, { transform: booleanAttribute });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n handleClick(event: Event): void {\r\n if (this.disabled()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }\r\n}\r\n\r\n/** Skeleton slot for sidebar menu. */\r\n@Directive({\r\n selector: '[frSidebarMenuSkeleton], frame-sidebar-menu-skeleton',\r\n host: {\r\n class: 'frame-sidebar__menu-skeleton',\r\n '[attr.data-show-icon]': 'showIcon() ? \"\" : null',\r\n '[style.--frame-sidebar-skeleton-width]': 'width()',\r\n },\r\n})\r\nexport class FrSidebarMenuSkeleton {\r\n readonly showIcon = input(false, { transform: booleanAttribute });\r\n readonly width = input('72%');\r\n}\r\n\r\n","import { NgModule } from '@angular/core';\nimport {\n FrSidebar,\n FrSidebarContent,\n FrSidebarFooter,\n FrSidebarGroup,\n FrSidebarGroupAction,\n FrSidebarGroupContent,\n FrSidebarGroupLabel,\n FrSidebarHeader,\n FrSidebarInset,\n FrSidebarMenu,\n FrSidebarMenuAction,\n FrSidebarMenuBadge,\n FrSidebarMenuButton,\n FrSidebarMenuItem,\n FrSidebarMenuSkeleton,\n FrSidebarMenuSub,\n FrSidebarMenuSubButton,\n FrSidebarMenuSubItem,\n FrSidebarProvider,\n FrSidebarRail,\n FrSidebarTrigger,\n} from './src/sidebar';\n\n@NgModule({\n imports: [\n FrSidebar,\n FrSidebarContent,\n FrSidebarFooter,\n FrSidebarGroup,\n FrSidebarGroupAction,\n FrSidebarGroupContent,\n FrSidebarGroupLabel,\n FrSidebarHeader,\n FrSidebarInset,\n FrSidebarMenu,\n FrSidebarMenuAction,\n FrSidebarMenuBadge,\n FrSidebarMenuButton,\n FrSidebarMenuItem,\n FrSidebarMenuSkeleton,\n FrSidebarMenuSub,\n FrSidebarMenuSubButton,\n FrSidebarMenuSubItem,\n FrSidebarProvider,\n FrSidebarRail,\n FrSidebarTrigger,\n ],\n exports: [\n FrSidebar,\n FrSidebarContent,\n FrSidebarFooter,\n FrSidebarGroup,\n FrSidebarGroupAction,\n FrSidebarGroupContent,\n FrSidebarGroupLabel,\n FrSidebarHeader,\n FrSidebarInset,\n FrSidebarMenu,\n FrSidebarMenuAction,\n FrSidebarMenuBadge,\n FrSidebarMenuButton,\n FrSidebarMenuItem,\n FrSidebarMenuSkeleton,\n FrSidebarMenuSub,\n FrSidebarMenuSubButton,\n FrSidebarMenuSubItem,\n FrSidebarProvider,\n FrSidebarRail,\n FrSidebarTrigger,\n ],\n})\nexport class FrSidebarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, booleanAttribute, Directive, NgModule } from '@angular/core';
3
3
 
4
+ /** Skeleton placeholder for loading content. */
4
5
  class FrSkeleton {
5
6
  animated = input(true, { ...(ngDevMode ? { debugName: "animated" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
6
7
  width = input(null, ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
@@ -1 +1 @@
1
- {"version":3,"file":"frame-ui-ng-components-skeleton.mjs","sources":["../../../projects/components/skeleton/src/skeleton.ts","../../../projects/components/skeleton/skeleton.module.ts","../../../projects/components/skeleton/frame-ui-ng-components-skeleton.ts"],"sourcesContent":["import { booleanAttribute, Directive, input } from '@angular/core';\n\n@Directive({\n selector: '[frSkeleton], frame-skeleton',\n exportAs: 'frSkeleton',\n host: {\n class: 'frame-skeleton',\n 'aria-hidden': 'true',\n '[attr.data-animated]': 'animated()',\n '[style.--frame-skeleton-width]': 'width()',\n '[style.--frame-skeleton-height]': 'height()',\n '[style.--frame-skeleton-radius]': 'radius()',\n },\n})\nexport class FrSkeleton {\n readonly animated = input(true, { transform: booleanAttribute });\n readonly width = input<string | null>(null);\n readonly height = input<string | null>(null);\n readonly radius = input<string | null>(null);\n}\n","import { NgModule } from '@angular/core';\n\nimport { FrSkeleton } from './src/skeleton';\n\n@NgModule({\n imports: [FrSkeleton],\n exports: [FrSkeleton],\n})\nexport class FrSkeletonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAca,UAAU,CAAA;IACZ,QAAQ,GAAG,KAAK,CAAC,IAAI,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACvD,IAAA,KAAK,GAAG,KAAK,CAAgB,IAAI,4EAAC;AAClC,IAAA,MAAM,GAAG,KAAK,CAAgB,IAAI,6EAAC;AACnC,IAAA,MAAM,GAAG,KAAK,CAAgB,IAAI,6EAAC;wGAJjC,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,SAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAZtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,aAAa,EAAE,MAAM;AACrB,wBAAA,sBAAsB,EAAE,YAAY;AACpC,wBAAA,gCAAgC,EAAE,SAAS;AAC3C,wBAAA,iCAAiC,EAAE,UAAU;AAC7C,wBAAA,iCAAiC,EAAE,UAAU;AAC9C,qBAAA;AACF,iBAAA;;;MCLY,gBAAgB,CAAA;wGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAhB,gBAAgB,EAAA,OAAA,EAAA,CAHjB,UAAU,CAAA,EAAA,OAAA,EAAA,CACV,UAAU,CAAA,EAAA,CAAA;yGAET,gBAAgB,EAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,UAAU,CAAC;oBACrB,OAAO,EAAE,CAAC,UAAU,CAAC;AACtB,iBAAA;;;ACPD;;AAEG;;;;"}
1
+ {"version":3,"file":"frame-ui-ng-components-skeleton.mjs","sources":["../../../projects/components/skeleton/src/skeleton.ts","../../../projects/components/skeleton/skeleton.module.ts","../../../projects/components/skeleton/frame-ui-ng-components-skeleton.ts"],"sourcesContent":["import { booleanAttribute, Directive, input } from '@angular/core';\r\n\r\n/** Skeleton placeholder for loading content. */\r\n@Directive({\r\n selector: '[frSkeleton], frame-skeleton',\r\n exportAs: 'frSkeleton',\r\n host: {\r\n class: 'frame-skeleton',\r\n 'aria-hidden': 'true',\r\n '[attr.data-animated]': 'animated()',\r\n '[style.--frame-skeleton-width]': 'width()',\r\n '[style.--frame-skeleton-height]': 'height()',\r\n '[style.--frame-skeleton-radius]': 'radius()',\r\n },\r\n})\r\nexport class FrSkeleton {\r\n readonly animated = input(true, { transform: booleanAttribute });\r\n readonly width = input<string | null>(null);\r\n readonly height = input<string | null>(null);\r\n readonly radius = input<string | null>(null);\r\n}\r\n\r\n","import { NgModule } from '@angular/core';\n\nimport { FrSkeleton } from './src/skeleton';\n\n@NgModule({\n imports: [FrSkeleton],\n exports: [FrSkeleton],\n})\nexport class FrSkeletonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAEA;MAaa,UAAU,CAAA;IACZ,QAAQ,GAAG,KAAK,CAAC,IAAI,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACvD,IAAA,KAAK,GAAG,KAAK,CAAgB,IAAI,4EAAC;AAClC,IAAA,MAAM,GAAG,KAAK,CAAgB,IAAI,6EAAC;AACnC,IAAA,MAAM,GAAG,KAAK,CAAgB,IAAI,6EAAC;wGAJjC,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,SAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAZtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,aAAa,EAAE,MAAM;AACrB,wBAAA,sBAAsB,EAAE,YAAY;AACpC,wBAAA,gCAAgC,EAAE,SAAS;AAC3C,wBAAA,iCAAiC,EAAE,UAAU;AAC7C,wBAAA,iCAAiC,EAAE,UAAU;AAC9C,qBAAA;AACF,iBAAA;;;MCNY,gBAAgB,CAAA;wGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAhB,gBAAgB,EAAA,OAAA,EAAA,CAHjB,UAAU,CAAA,EAAA,OAAA,EAAA,CACV,UAAU,CAAA,EAAA,CAAA;yGAET,gBAAgB,EAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,UAAU,CAAC;oBACrB,OAAO,EAAE,CAAC,UAAU,CAAC;AACtB,iBAAA;;;ACPD;;AAEG;;;;"}
@@ -1,16 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ElementRef, input, numberAttribute, booleanAttribute, output, signal, computed, effect, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
2
+ import { inject, ElementRef, input, numberAttribute, booleanAttribute, output, signal, computed, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
3
  import { DOCUMENT } from '@angular/common';
4
4
  import { FrControlValueAccessor, provideDsValueAccessor } from '@frame-ui-ng/components/forms';
5
+ import { coerceNumber, clampNumber } from '@frame-ui-ng/components/utils';
5
6
 
6
7
  const FR_SLIDER_ORIENTATIONS = ['horizontal', 'vertical'];
7
8
  function coerceOrientation(value) {
8
9
  return value === 'vertical' ? 'vertical' : 'horizontal';
9
10
  }
10
- function coerceNumber(value, fallback) {
11
- const parsed = Number(value);
12
- return Number.isFinite(parsed) ? parsed : fallback;
13
- }
14
11
  function coerceValue(value) {
15
12
  if (Array.isArray(value)) {
16
13
  return value.map((item) => coerceNumber(item, 0));
@@ -20,10 +17,12 @@ function coerceValue(value) {
20
17
  }
21
18
  return [coerceNumber(value, 0)];
22
19
  }
20
+ /** Slider control with single and range value support. */
23
21
  class FrSlider extends FrControlValueAccessor {
24
22
  elementRef = inject(ElementRef);
25
23
  document = inject(DOCUMENT);
26
24
  controlledByInput = false;
25
+ lastInputKey = '';
27
26
  min = input(0, { ...(ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {}), transform: numberAttribute });
28
27
  max = input(100, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), transform: numberAttribute });
29
28
  step = input(1, { ...(ngDevMode ? { debugName: "step" } : /* istanbul ignore next */ {}), transform: numberAttribute });
@@ -49,19 +48,28 @@ class FrSlider extends FrControlValueAccessor {
49
48
  const values = this.values();
50
49
  return this.percentForValue(values.at(-1) ?? this.min());
51
50
  }, ...(ngDevMode ? [{ debugName: "rangeEndPercent" }] : /* istanbul ignore next */ []));
52
- constructor() {
53
- super();
54
- effect(() => {
55
- const controlledValue = this.valueInput();
56
- if (controlledValue !== null) {
57
- this.controlledByInput = true;
58
- this.values.set(this.normalizeValues(coerceValue(controlledValue)));
59
- return;
60
- }
61
- if (!this.controlledByInput) {
62
- this.values.set(this.normalizeValues(coerceValue(this.defaultValue())));
63
- }
64
- });
51
+ ngDoCheck() {
52
+ const inputKey = [
53
+ this.valueInput(),
54
+ this.defaultValue(),
55
+ this.min(),
56
+ this.max(),
57
+ this.step(),
58
+ this.minStepsBetweenThumbs(),
59
+ ].map((value) => (Array.isArray(value) ? value.join(',') : String(value))).join('|');
60
+ if (inputKey === this.lastInputKey) {
61
+ return;
62
+ }
63
+ this.lastInputKey = inputKey;
64
+ const controlledValue = this.valueInput();
65
+ if (controlledValue !== null) {
66
+ this.controlledByInput = true;
67
+ this.values.set(this.normalizeValues(coerceValue(controlledValue)));
68
+ return;
69
+ }
70
+ if (!this.controlledByInput) {
71
+ this.values.set(this.normalizeValues(coerceValue(this.defaultValue())));
72
+ }
65
73
  }
66
74
  setViewValue(value) {
67
75
  if (value === null || value === undefined) {
@@ -141,12 +149,13 @@ class FrSlider extends FrControlValueAccessor {
141
149
  const step = Math.max(this.step(), 0.000001);
142
150
  const minDistance = Math.max(this.minStepsBetweenThumbs(), 0) * step;
143
151
  const normalized = values.length ? values : [min];
152
+ // Only the active thumb is bounded by neighbors; passive thumbs keep their full range.
144
153
  return normalized.map((value, index) => {
145
154
  const previous = index > 0 ? normalized[index - 1] + minDistance : min;
146
155
  const next = index < normalized.length - 1 ? normalized[index + 1] - minDistance : max;
147
156
  const lower = activeIndex === index ? previous : min;
148
157
  const upper = activeIndex === index ? next : max;
149
- return this.snap(clamp(value, lower, upper), min, step);
158
+ return this.snap(clampNumber(value, lower, upper), min, step);
150
159
  });
151
160
  }
152
161
  snap(value, min, step) {
@@ -163,13 +172,14 @@ class FrSlider extends FrControlValueAccessor {
163
172
  const offset = horizontal ? event.clientX - rect.left : rect.bottom - event.clientY;
164
173
  const direction = horizontal && this.isRtl() ? -1 : 1;
165
174
  let percent = size > 0 ? offset / size : 0;
175
+ // Convert visual position into logical value direction for RTL and inverted sliders.
166
176
  if (direction === -1) {
167
177
  percent = 1 - percent;
168
178
  }
169
179
  if (this.inverted()) {
170
180
  percent = 1 - percent;
171
181
  }
172
- return this.min() + clamp(percent, 0, 1) * (this.max() - this.min());
182
+ return this.min() + clampNumber(percent, 0, 1) * (this.max() - this.min());
173
183
  }
174
184
  closestThumbIndex(value) {
175
185
  return this.values().reduce((closestIndex, thumb, index, values) => {
@@ -181,32 +191,32 @@ class FrSlider extends FrControlValueAccessor {
181
191
  isRtl() {
182
192
  return getComputedStyle(this.elementRef.nativeElement).direction === 'rtl';
183
193
  }
184
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSlider, deps: [], target: i0.ɵɵFactoryTarget.Component });
185
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: FrSlider, isStandalone: true, selector: "frame-slider", inputs: { min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, minStepsBetweenThumbs: { classPropertyName: "minStepsBetweenThumbs", publicName: "minStepsBetweenThumbs", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, invalidInput: { classPropertyName: "invalidInput", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, inverted: { classPropertyName: "inverted", publicName: "inverted", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, valueInput: { classPropertyName: "valueInput", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, formatValue: { classPropertyName: "formatValue", publicName: "formatValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, host: { listeners: { "pointerdown": "handlePointerDown($event)" }, properties: { "attr.data-orientation": "orientation()", "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-invalid": "invalid() ? \"\" : null", "attr.data-inverted": "inverted() ? \"\" : null", "style.--frame-slider-start-percent": "rangeStartPercent() + \"%\"", "style.--frame-slider-end-percent": "rangeEndPercent() + \"%\"" }, classAttribute: "frame-slider" }, providers: [provideDsValueAccessor(FrSlider)], exportAs: ["frSlider"], usesInheritance: true, ngImport: i0, template: `
186
- <span class="frame-slider__track">
187
- <span class="frame-slider__range"></span>
188
- </span>
189
-
190
- @for (thumb of values(); track $index) {
191
- <input
192
- class="frame-slider__native"
193
- type="range"
194
- [attr.aria-label]="thumbLabel($index)"
195
- [attr.aria-valuetext]="valueText(thumb)"
196
- [disabled]="disabled()"
197
- [min]="min()"
198
- [max]="max()"
199
- [step]="step()"
200
- [value]="thumb"
201
- (blur)="markTouched()"
202
- (input)="handleNativeInput($index, $any($event.target).value)"
203
- />
204
- <span
205
- class="frame-slider__thumb"
206
- [attr.data-active]="activeThumb() === $index ? '' : null"
207
- [style.--frame-slider-thumb-percent]="percentForValue(thumb) + '%'"
208
- ></span>
209
- }
194
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSlider, deps: null, target: i0.ɵɵFactoryTarget.Component });
195
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: FrSlider, isStandalone: true, selector: "frame-slider", inputs: { min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, minStepsBetweenThumbs: { classPropertyName: "minStepsBetweenThumbs", publicName: "minStepsBetweenThumbs", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, invalidInput: { classPropertyName: "invalidInput", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, inverted: { classPropertyName: "inverted", publicName: "inverted", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, valueInput: { classPropertyName: "valueInput", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, formatValue: { classPropertyName: "formatValue", publicName: "formatValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, host: { listeners: { "pointerdown": "handlePointerDown($event)" }, properties: { "attr.data-orientation": "orientation()", "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-invalid": "invalid() ? \"\" : null", "attr.data-inverted": "inverted() ? \"\" : null", "style.--frame-slider-start-percent": "rangeStartPercent() + \"%\"", "style.--frame-slider-end-percent": "rangeEndPercent() + \"%\"" }, classAttribute: "frame-slider" }, providers: [provideDsValueAccessor(FrSlider)], exportAs: ["frSlider"], usesInheritance: true, ngImport: i0, template: `
196
+ <span class="frame-slider__track">
197
+ <span class="frame-slider__range"></span>
198
+ </span>
199
+
200
+ @for (thumb of values(); track $index) {
201
+ <input
202
+ class="frame-slider__native"
203
+ type="range"
204
+ [attr.aria-label]="thumbLabel($index)"
205
+ [attr.aria-valuetext]="valueText(thumb)"
206
+ [disabled]="disabled()"
207
+ [min]="min()"
208
+ [max]="max()"
209
+ [step]="step()"
210
+ [value]="thumb"
211
+ (blur)="markTouched()"
212
+ (input)="handleNativeInput($index, $any($event.target).value)"
213
+ />
214
+ <span
215
+ class="frame-slider__thumb"
216
+ [attr.data-active]="activeThumb() === $index ? '' : null"
217
+ [style.--frame-slider-thumb-percent]="percentForValue(thumb) + '%'"
218
+ ></span>
219
+ }
210
220
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
211
221
  }
212
222
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSlider, decorators: [{
@@ -226,37 +236,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
226
236
  '[style.--frame-slider-end-percent]': 'rangeEndPercent() + "%"',
227
237
  '(pointerdown)': 'handlePointerDown($event)',
228
238
  },
229
- template: `
230
- <span class="frame-slider__track">
231
- <span class="frame-slider__range"></span>
232
- </span>
233
-
234
- @for (thumb of values(); track $index) {
235
- <input
236
- class="frame-slider__native"
237
- type="range"
238
- [attr.aria-label]="thumbLabel($index)"
239
- [attr.aria-valuetext]="valueText(thumb)"
240
- [disabled]="disabled()"
241
- [min]="min()"
242
- [max]="max()"
243
- [step]="step()"
244
- [value]="thumb"
245
- (blur)="markTouched()"
246
- (input)="handleNativeInput($index, $any($event.target).value)"
247
- />
248
- <span
249
- class="frame-slider__thumb"
250
- [attr.data-active]="activeThumb() === $index ? '' : null"
251
- [style.--frame-slider-thumb-percent]="percentForValue(thumb) + '%'"
252
- ></span>
253
- }
239
+ template: `
240
+ <span class="frame-slider__track">
241
+ <span class="frame-slider__range"></span>
242
+ </span>
243
+
244
+ @for (thumb of values(); track $index) {
245
+ <input
246
+ class="frame-slider__native"
247
+ type="range"
248
+ [attr.aria-label]="thumbLabel($index)"
249
+ [attr.aria-valuetext]="valueText(thumb)"
250
+ [disabled]="disabled()"
251
+ [min]="min()"
252
+ [max]="max()"
253
+ [step]="step()"
254
+ [value]="thumb"
255
+ (blur)="markTouched()"
256
+ (input)="handleNativeInput($index, $any($event.target).value)"
257
+ />
258
+ <span
259
+ class="frame-slider__thumb"
260
+ [attr.data-active]="activeThumb() === $index ? '' : null"
261
+ [style.--frame-slider-thumb-percent]="percentForValue(thumb) + '%'"
262
+ ></span>
263
+ }
254
264
  `,
255
265
  }]
256
- }], ctorParameters: () => [], propDecorators: { min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], minStepsBetweenThumbs: [{ type: i0.Input, args: [{ isSignal: true, alias: "minStepsBetweenThumbs", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], invalidInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], inverted: [{ type: i0.Input, args: [{ isSignal: true, alias: "inverted", required: false }] }], defaultValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValue", required: false }] }], valueInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], formatValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "formatValue", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
257
- function clamp(value, min, max) {
258
- return Math.min(Math.max(value, min), max);
259
- }
266
+ }], propDecorators: { min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], minStepsBetweenThumbs: [{ type: i0.Input, args: [{ isSignal: true, alias: "minStepsBetweenThumbs", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], invalidInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], inverted: [{ type: i0.Input, args: [{ isSignal: true, alias: "inverted", required: false }] }], defaultValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValue", required: false }] }], valueInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], formatValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "formatValue", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
260
267
 
261
268
  class FrSliderModule {
262
269
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSliderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -1 +1 @@
1
- {"version":3,"file":"frame-ui-ng-components-slider.mjs","sources":["../../../projects/components/slider/src/slider.ts","../../../projects/components/slider/slider.module.ts","../../../projects/components/slider/frame-ui-ng-components-slider.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { FrControlValueAccessor, provideDsValueAccessor } from '@frame-ui-ng/components/forms';\n\nexport const FR_SLIDER_ORIENTATIONS = ['horizontal', 'vertical'] as const;\n\nexport type FrSliderOrientation = (typeof FR_SLIDER_ORIENTATIONS)[number];\nexport type FrSliderValue = number | number[];\n\nfunction coerceOrientation(value: unknown): FrSliderOrientation {\n return value === 'vertical' ? 'vertical' : 'horizontal';\n}\n\nfunction coerceNumber(value: unknown, fallback: number): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\nfunction coerceValue(value: FrSliderValue | null | undefined): number[] {\n if (Array.isArray(value)) {\n return value.map((item) => coerceNumber(item, 0));\n }\n\n if (value === null || value === undefined) {\n return [0];\n }\n\n return [coerceNumber(value, 0)];\n}\n\n@Component({\n selector: 'frame-slider',\n exportAs: 'frSlider',\n providers: [provideDsValueAccessor(FrSlider)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'frame-slider',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.data-invalid]': 'invalid() ? \"\" : null',\n '[attr.data-inverted]': 'inverted() ? \"\" : null',\n '[style.--frame-slider-start-percent]': 'rangeStartPercent() + \"%\"',\n '[style.--frame-slider-end-percent]': 'rangeEndPercent() + \"%\"',\n '(pointerdown)': 'handlePointerDown($event)',\n },\n template: `\n <span class=\"frame-slider__track\">\n <span class=\"frame-slider__range\"></span>\n </span>\n\n @for (thumb of values(); track $index) {\n <input\n class=\"frame-slider__native\"\n type=\"range\"\n [attr.aria-label]=\"thumbLabel($index)\"\n [attr.aria-valuetext]=\"valueText(thumb)\"\n [disabled]=\"disabled()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"thumb\"\n (blur)=\"markTouched()\"\n (input)=\"handleNativeInput($index, $any($event.target).value)\"\n />\n <span\n class=\"frame-slider__thumb\"\n [attr.data-active]=\"activeThumb() === $index ? '' : null\"\n [style.--frame-slider-thumb-percent]=\"percentForValue(thumb) + '%'\"\n ></span>\n }\n `,\n})\nexport class FrSlider extends FrControlValueAccessor<FrSliderValue | null> {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly document = inject(DOCUMENT);\n private controlledByInput = false;\n\n readonly min = input(0, { transform: numberAttribute });\n readonly max = input(100, { transform: numberAttribute });\n readonly step = input(1, { transform: numberAttribute });\n readonly minStepsBetweenThumbs = input(0, { transform: numberAttribute });\n readonly orientation = input<FrSliderOrientation, unknown>('horizontal', { transform: coerceOrientation });\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n readonly invalidInput = input(false, { alias: 'invalid', transform: booleanAttribute });\n readonly inverted = input(false, { transform: booleanAttribute });\n readonly defaultValue = input<FrSliderValue>(0);\n readonly valueInput = input<FrSliderValue | null>(null, { alias: 'value' });\n readonly ariaLabel = input('Slider thumb', { alias: 'aria-label' });\n readonly formatValue = input<((value: number) => string) | null>(null);\n\n readonly valueChange = output<FrSliderValue>();\n\n protected readonly values = signal<number[]>([0]);\n protected readonly activeThumb = signal<number | null>(null);\n protected readonly disabled = computed(() => this.disabledInput() || this.formDisabled());\n protected readonly invalid = computed(() => this.invalidInput() || this.formInvalid());\n protected readonly rangeStartPercent = computed(() => {\n const values = this.values();\n return values.length > 1 ? this.percentForValue(values[0]) : 0;\n });\n protected readonly rangeEndPercent = computed(() => {\n const values = this.values();\n return this.percentForValue(values.at(-1) ?? this.min());\n });\n\n constructor() {\n super();\n\n effect(() => {\n const controlledValue = this.valueInput();\n\n if (controlledValue !== null) {\n this.controlledByInput = true;\n this.values.set(this.normalizeValues(coerceValue(controlledValue)));\n return;\n }\n\n if (!this.controlledByInput) {\n this.values.set(this.normalizeValues(coerceValue(this.defaultValue())));\n }\n });\n }\n\n protected setViewValue(value: FrSliderValue | null): void {\n if (value === null || value === undefined) {\n this.values.set(this.normalizeValues(coerceValue(this.defaultValue())));\n return;\n }\n\n this.values.set(this.normalizeValues(coerceValue(value)));\n }\n\n protected handleNativeInput(index: number, rawValue: string): void {\n this.commitThumbValue(index, Number(rawValue));\n }\n\n protected markTouched(): void {\n this.markAsTouched();\n }\n\n protected handlePointerDown(event: PointerEvent): void {\n if (this.disabled() || event.button !== 0) {\n return;\n }\n\n const target = event.target as HTMLElement | null;\n if (target?.classList.contains('frame-slider__native')) {\n return;\n }\n\n event.preventDefault();\n const index = this.closestThumbIndex(this.valueFromPointer(event));\n this.activeThumb.set(index);\n this.commitThumbValue(index, this.valueFromPointer(event));\n\n const move = (moveEvent: PointerEvent) => {\n moveEvent.preventDefault();\n this.commitThumbValue(index, this.valueFromPointer(moveEvent));\n };\n\n const up = () => {\n this.document.removeEventListener('pointermove', move);\n this.document.removeEventListener('pointerup', up);\n this.activeThumb.set(null);\n this.markTouched();\n };\n\n this.document.addEventListener('pointermove', move);\n this.document.addEventListener('pointerup', up, { once: true });\n }\n\n protected thumbLabel(index: number): string {\n const count = this.values().length;\n\n if (count === 1) {\n return this.ariaLabel();\n }\n\n if (index === 0) {\n return `${this.ariaLabel()} minimum`;\n }\n\n if (index === count - 1) {\n return `${this.ariaLabel()} maximum`;\n }\n\n return `${this.ariaLabel()} ${index + 1}`;\n }\n\n protected valueText(value: number): string {\n return this.formatValue()?.(value) ?? String(value);\n }\n\n protected percentForValue(value: number): number {\n const min = this.min();\n const max = this.max();\n const range = max - min;\n\n if (range <= 0) {\n return 0;\n }\n\n return ((value - min) / range) * 100;\n }\n\n private commitThumbValue(index: number, rawValue: number): void {\n const next = [...this.values()];\n next[index] = rawValue;\n const normalized = this.normalizeValues(next, index);\n this.values.set(normalized);\n\n const emitted = this.toExternalValue(normalized);\n this.notifyValueChange(emitted);\n this.valueChange.emit(emitted);\n }\n\n private normalizeValues(values: number[], activeIndex = -1): number[] {\n const min = Math.min(this.min(), this.max());\n const max = Math.max(this.min(), this.max());\n const step = Math.max(this.step(), 0.000001);\n const minDistance = Math.max(this.minStepsBetweenThumbs(), 0) * step;\n const normalized = values.length ? values : [min];\n\n return normalized.map((value, index) => {\n const previous = index > 0 ? normalized[index - 1] + minDistance : min;\n const next = index < normalized.length - 1 ? normalized[index + 1] - minDistance : max;\n const lower = activeIndex === index ? previous : min;\n const upper = activeIndex === index ? next : max;\n return this.snap(clamp(value, lower, upper), min, step);\n });\n }\n\n private snap(value: number, min: number, step: number): number {\n const decimals = String(step).split('.')[1]?.length ?? 0;\n return Number((Math.round((value - min) / step) * step + min).toFixed(decimals));\n }\n\n private toExternalValue(values: number[]): FrSliderValue {\n return values.length === 1 ? values[0] : values;\n }\n\n private valueFromPointer(event: PointerEvent): number {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const horizontal = this.orientation() === 'horizontal';\n const size = horizontal ? rect.width : rect.height;\n const offset = horizontal ? event.clientX - rect.left : rect.bottom - event.clientY;\n const direction = horizontal && this.isRtl() ? -1 : 1;\n let percent = size > 0 ? offset / size : 0;\n\n if (direction === -1) {\n percent = 1 - percent;\n }\n\n if (this.inverted()) {\n percent = 1 - percent;\n }\n\n return this.min() + clamp(percent, 0, 1) * (this.max() - this.min());\n }\n\n private closestThumbIndex(value: number): number {\n return this.values().reduce((closestIndex, thumb, index, values) => {\n const currentDistance = Math.abs(value - thumb);\n const closestDistance = Math.abs(value - values[closestIndex]);\n return currentDistance < closestDistance ? index : closestIndex;\n }, 0);\n }\n\n private isRtl(): boolean {\n return getComputedStyle(this.elementRef.nativeElement).direction === 'rtl';\n }\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n","import { NgModule } from '@angular/core';\n\nimport { FrSlider } from './src/slider';\n\n@NgModule({\n imports: [FrSlider],\n exports: [FrSlider],\n})\nexport class FrSliderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame-ui-ng-components-slider.mjs","sources":["../../../projects/components/slider/src/slider.ts","../../../projects/components/slider/slider.module.ts","../../../projects/components/slider/frame-ui-ng-components-slider.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DoCheck,\r\n ElementRef,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n numberAttribute,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\nimport { FrControlValueAccessor, provideDsValueAccessor } from '@frame-ui-ng/components/forms';\r\nimport { clampNumber, coerceNumber } from '@frame-ui-ng/components/utils';\r\n\r\nexport const FR_SLIDER_ORIENTATIONS = ['horizontal', 'vertical'] as const;\r\n\r\nexport type FrSliderOrientation = (typeof FR_SLIDER_ORIENTATIONS)[number];\r\nexport type FrSliderValue = number | number[];\r\n\r\nfunction coerceOrientation(value: unknown): FrSliderOrientation {\r\n return value === 'vertical' ? 'vertical' : 'horizontal';\r\n}\r\n\r\nfunction coerceValue(value: FrSliderValue | null | undefined): number[] {\r\n if (Array.isArray(value)) {\r\n return value.map((item) => coerceNumber(item, 0));\r\n }\r\n\r\n if (value === null || value === undefined) {\r\n return [0];\r\n }\r\n\r\n return [coerceNumber(value, 0)];\r\n}\r\n\r\n/** Slider control with single and range value support. */\r\n@Component({\r\n selector: 'frame-slider',\r\n exportAs: 'frSlider',\r\n providers: [provideDsValueAccessor(FrSlider)],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'frame-slider',\r\n '[attr.data-orientation]': 'orientation()',\r\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\r\n '[attr.data-invalid]': 'invalid() ? \"\" : null',\r\n '[attr.data-inverted]': 'inverted() ? \"\" : null',\r\n '[style.--frame-slider-start-percent]': 'rangeStartPercent() + \"%\"',\r\n '[style.--frame-slider-end-percent]': 'rangeEndPercent() + \"%\"',\r\n '(pointerdown)': 'handlePointerDown($event)',\r\n },\r\n template: `\r\n <span class=\"frame-slider__track\">\r\n <span class=\"frame-slider__range\"></span>\r\n </span>\r\n\r\n @for (thumb of values(); track $index) {\r\n <input\r\n class=\"frame-slider__native\"\r\n type=\"range\"\r\n [attr.aria-label]=\"thumbLabel($index)\"\r\n [attr.aria-valuetext]=\"valueText(thumb)\"\r\n [disabled]=\"disabled()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [step]=\"step()\"\r\n [value]=\"thumb\"\r\n (blur)=\"markTouched()\"\r\n (input)=\"handleNativeInput($index, $any($event.target).value)\"\r\n />\r\n <span\r\n class=\"frame-slider__thumb\"\r\n [attr.data-active]=\"activeThumb() === $index ? '' : null\"\r\n [style.--frame-slider-thumb-percent]=\"percentForValue(thumb) + '%'\"\r\n ></span>\r\n }\r\n `,\r\n})\r\nexport class FrSlider extends FrControlValueAccessor<FrSliderValue | null> implements DoCheck {\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly document = inject(DOCUMENT);\r\n private controlledByInput = false;\r\n private lastInputKey = '';\r\n\r\n readonly min = input(0, { transform: numberAttribute });\r\n readonly max = input(100, { transform: numberAttribute });\r\n readonly step = input(1, { transform: numberAttribute });\r\n readonly minStepsBetweenThumbs = input(0, { transform: numberAttribute });\r\n readonly orientation = input<FrSliderOrientation, unknown>('horizontal', { transform: coerceOrientation });\r\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\r\n readonly invalidInput = input(false, { alias: 'invalid', transform: booleanAttribute });\r\n readonly inverted = input(false, { transform: booleanAttribute });\r\n readonly defaultValue = input<FrSliderValue>(0);\r\n readonly valueInput = input<FrSliderValue | null>(null, { alias: 'value' });\r\n readonly ariaLabel = input('Slider thumb', { alias: 'aria-label' });\r\n readonly formatValue = input<((value: number) => string) | null>(null);\r\n\r\n readonly valueChange = output<FrSliderValue>();\r\n\r\n protected readonly values = signal<number[]>([0]);\r\n protected readonly activeThumb = signal<number | null>(null);\r\n protected readonly disabled = computed(() => this.disabledInput() || this.formDisabled());\r\n protected readonly invalid = computed(() => this.invalidInput() || this.formInvalid());\r\n protected readonly rangeStartPercent = computed(() => {\r\n const values = this.values();\r\n return values.length > 1 ? this.percentForValue(values[0]) : 0;\r\n });\r\n protected readonly rangeEndPercent = computed(() => {\r\n const values = this.values();\r\n return this.percentForValue(values.at(-1) ?? this.min());\r\n });\r\n\r\n ngDoCheck(): void {\r\n const inputKey = [\r\n this.valueInput(),\r\n this.defaultValue(),\r\n this.min(),\r\n this.max(),\r\n this.step(),\r\n this.minStepsBetweenThumbs(),\r\n ].map((value) => (Array.isArray(value) ? value.join(',') : String(value))).join('|');\r\n\r\n if (inputKey === this.lastInputKey) {\r\n return;\r\n }\r\n\r\n this.lastInputKey = inputKey;\r\n\r\n const controlledValue = this.valueInput();\r\n if (controlledValue !== null) {\r\n this.controlledByInput = true;\r\n this.values.set(this.normalizeValues(coerceValue(controlledValue)));\r\n return;\r\n }\r\n\r\n if (!this.controlledByInput) {\r\n this.values.set(this.normalizeValues(coerceValue(this.defaultValue())));\r\n }\r\n }\r\n\r\n protected setViewValue(value: FrSliderValue | null): void {\r\n if (value === null || value === undefined) {\r\n this.values.set(this.normalizeValues(coerceValue(this.defaultValue())));\r\n return;\r\n }\r\n\r\n this.values.set(this.normalizeValues(coerceValue(value)));\r\n }\r\n\r\n protected handleNativeInput(index: number, rawValue: string): void {\r\n this.commitThumbValue(index, Number(rawValue));\r\n }\r\n\r\n protected markTouched(): void {\r\n this.markAsTouched();\r\n }\r\n\r\n protected handlePointerDown(event: PointerEvent): void {\r\n if (this.disabled() || event.button !== 0) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLElement | null;\r\n if (target?.classList.contains('frame-slider__native')) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n const index = this.closestThumbIndex(this.valueFromPointer(event));\r\n this.activeThumb.set(index);\r\n this.commitThumbValue(index, this.valueFromPointer(event));\r\n\r\n const move = (moveEvent: PointerEvent) => {\r\n moveEvent.preventDefault();\r\n this.commitThumbValue(index, this.valueFromPointer(moveEvent));\r\n };\r\n\r\n const up = () => {\r\n this.document.removeEventListener('pointermove', move);\r\n this.document.removeEventListener('pointerup', up);\r\n this.activeThumb.set(null);\r\n this.markTouched();\r\n };\r\n\r\n this.document.addEventListener('pointermove', move);\r\n this.document.addEventListener('pointerup', up, { once: true });\r\n }\r\n\r\n protected thumbLabel(index: number): string {\r\n const count = this.values().length;\r\n\r\n if (count === 1) {\r\n return this.ariaLabel();\r\n }\r\n\r\n if (index === 0) {\r\n return `${this.ariaLabel()} minimum`;\r\n }\r\n\r\n if (index === count - 1) {\r\n return `${this.ariaLabel()} maximum`;\r\n }\r\n\r\n return `${this.ariaLabel()} ${index + 1}`;\r\n }\r\n\r\n protected valueText(value: number): string {\r\n return this.formatValue()?.(value) ?? String(value);\r\n }\r\n\r\n protected percentForValue(value: number): number {\r\n const min = this.min();\r\n const max = this.max();\r\n const range = max - min;\r\n\r\n if (range <= 0) {\r\n return 0;\r\n }\r\n\r\n return ((value - min) / range) * 100;\r\n }\r\n\r\n private commitThumbValue(index: number, rawValue: number): void {\r\n const next = [...this.values()];\r\n next[index] = rawValue;\r\n const normalized = this.normalizeValues(next, index);\r\n this.values.set(normalized);\r\n\r\n const emitted = this.toExternalValue(normalized);\r\n this.notifyValueChange(emitted);\r\n this.valueChange.emit(emitted);\r\n }\r\n\r\n private normalizeValues(values: number[], activeIndex = -1): number[] {\r\n const min = Math.min(this.min(), this.max());\r\n const max = Math.max(this.min(), this.max());\r\n const step = Math.max(this.step(), 0.000001);\r\n const minDistance = Math.max(this.minStepsBetweenThumbs(), 0) * step;\r\n const normalized = values.length ? values : [min];\r\n\r\n // Only the active thumb is bounded by neighbors; passive thumbs keep their full range.\r\n return normalized.map((value, index) => {\r\n const previous = index > 0 ? normalized[index - 1] + minDistance : min;\r\n const next = index < normalized.length - 1 ? normalized[index + 1] - minDistance : max;\r\n const lower = activeIndex === index ? previous : min;\r\n const upper = activeIndex === index ? next : max;\r\n return this.snap(clampNumber(value, lower, upper), min, step);\r\n });\r\n }\r\n\r\n private snap(value: number, min: number, step: number): number {\r\n const decimals = String(step).split('.')[1]?.length ?? 0;\r\n return Number((Math.round((value - min) / step) * step + min).toFixed(decimals));\r\n }\r\n\r\n private toExternalValue(values: number[]): FrSliderValue {\r\n return values.length === 1 ? values[0] : values;\r\n }\r\n\r\n private valueFromPointer(event: PointerEvent): number {\r\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\r\n const horizontal = this.orientation() === 'horizontal';\r\n const size = horizontal ? rect.width : rect.height;\r\n const offset = horizontal ? event.clientX - rect.left : rect.bottom - event.clientY;\r\n const direction = horizontal && this.isRtl() ? -1 : 1;\r\n let percent = size > 0 ? offset / size : 0;\r\n\r\n // Convert visual position into logical value direction for RTL and inverted sliders.\r\n if (direction === -1) {\r\n percent = 1 - percent;\r\n }\r\n\r\n if (this.inverted()) {\r\n percent = 1 - percent;\r\n }\r\n\r\n return this.min() + clampNumber(percent, 0, 1) * (this.max() - this.min());\r\n }\r\n\r\n private closestThumbIndex(value: number): number {\r\n return this.values().reduce((closestIndex, thumb, index, values) => {\r\n const currentDistance = Math.abs(value - thumb);\r\n const closestDistance = Math.abs(value - values[closestIndex]);\r\n return currentDistance < closestDistance ? index : closestIndex;\r\n }, 0);\r\n }\r\n\r\n private isRtl(): boolean {\r\n return getComputedStyle(this.elementRef.nativeElement).direction === 'rtl';\r\n }\r\n}\r\n\r\n","import { NgModule } from '@angular/core';\n\nimport { FrSlider } from './src/slider';\n\n@NgModule({\n imports: [FrSlider],\n exports: [FrSlider],\n})\nexport class FrSliderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { input, booleanAttribute, Directive, NgModule } from '@angular/core';
3
3
 
4
4
  const FR_SPINNER_SIZES = ['xs', 'sm', 'md', 'lg', 'xl'];
5
+ /** Spinner indicator with size variants. */
5
6
  class FrSpinner {
6
7
  customSize = input(null, { ...(ngDevMode ? { debugName: "customSize" } : /* istanbul ignore next */ {}), alias: 'sizeValue' });
7
8
  decorative = input(false, { ...(ngDevMode ? { debugName: "decorative" } : /* istanbul ignore next */ {}), transform: booleanAttribute });