@semantic-components/ui 0.69.0 → 0.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/esm2022/lib/components/breadcrumb/breadcrumb-list.js +1 -1
  2. package/esm2022/lib/components/breadcrumb/breadcrumb-list.js.map +1 -1
  3. package/esm2022/lib/components/calendar/calendar-day-view.js +2 -2
  4. package/esm2022/lib/components/calendar/calendar-day-view.js.map +1 -1
  5. package/esm2022/lib/components/field/field-description.js +1 -1
  6. package/esm2022/lib/components/field/field-description.js.map +1 -1
  7. package/esm2022/lib/components/field/field-group.js +1 -1
  8. package/esm2022/lib/components/field/field-group.js.map +1 -1
  9. package/esm2022/lib/components/field/field.js +3 -3
  10. package/esm2022/lib/components/field/field.js.map +1 -1
  11. package/esm2022/lib/components/file-upload/file-upload-dropzone.js +1 -1
  12. package/esm2022/lib/components/file-upload/file-upload-dropzone.js.map +1 -1
  13. package/esm2022/lib/components/file-upload/file-upload-item-progress.js +2 -2
  14. package/esm2022/lib/components/file-upload/file-upload-item-progress.js.map +1 -1
  15. package/esm2022/lib/components/index.js +2 -0
  16. package/esm2022/lib/components/index.js.map +1 -1
  17. package/esm2022/lib/components/label/label.js +1 -1
  18. package/esm2022/lib/components/label/label.js.map +1 -1
  19. package/esm2022/lib/components/menu/menu-trigger.js +3 -7
  20. package/esm2022/lib/components/menu/menu-trigger.js.map +1 -1
  21. package/esm2022/lib/components/menu/menu.js +1 -1
  22. package/esm2022/lib/components/menu/menu.js.map +1 -1
  23. package/esm2022/lib/components/navigation-menu/navigation-menu-trigger-icon.js +1 -1
  24. package/esm2022/lib/components/navigation-menu/navigation-menu-trigger-icon.js.map +1 -1
  25. package/esm2022/lib/components/pagination/pagination.js +2 -2
  26. package/esm2022/lib/components/pagination/pagination.js.map +1 -1
  27. package/esm2022/lib/components/range-slider/range-slider-thumb-base.js +2 -2
  28. package/esm2022/lib/components/range-slider/range-slider-thumb-base.js.map +1 -1
  29. package/esm2022/lib/components/resizable/index.js +6 -0
  30. package/esm2022/lib/components/resizable/index.js.map +1 -0
  31. package/esm2022/lib/components/resizable/resizable-handle-indicator.js +20 -0
  32. package/esm2022/lib/components/resizable/resizable-handle-indicator.js.map +1 -0
  33. package/esm2022/lib/components/resizable/resizable-handle.js +116 -0
  34. package/esm2022/lib/components/resizable/resizable-handle.js.map +1 -0
  35. package/esm2022/lib/components/resizable/resizable-panel-group.js +38 -0
  36. package/esm2022/lib/components/resizable/resizable-panel-group.js.map +1 -0
  37. package/esm2022/lib/components/resizable/resizable-panel.js +39 -0
  38. package/esm2022/lib/components/resizable/resizable-panel.js.map +1 -0
  39. package/esm2022/lib/components/resizable/resizable.types.js +1 -0
  40. package/esm2022/lib/components/resizable/resizable.types.js.map +1 -0
  41. package/esm2022/lib/components/select/select-label.js +6 -5
  42. package/esm2022/lib/components/select/select-label.js.map +1 -1
  43. package/esm2022/lib/components/select/select-trigger.js +1 -1
  44. package/esm2022/lib/components/select/select-trigger.js.map +1 -1
  45. package/esm2022/lib/components/select/select.js +0 -2
  46. package/esm2022/lib/components/select/select.js.map +1 -1
  47. package/esm2022/lib/components/sidebar/index.js +28 -0
  48. package/esm2022/lib/components/sidebar/index.js.map +1 -0
  49. package/esm2022/lib/components/sidebar/sidebar-body.js +20 -0
  50. package/esm2022/lib/components/sidebar/sidebar-body.js.map +1 -0
  51. package/esm2022/lib/components/sidebar/sidebar-container.js +26 -0
  52. package/esm2022/lib/components/sidebar/sidebar-container.js.map +1 -0
  53. package/esm2022/lib/components/sidebar/sidebar-footer.js +20 -0
  54. package/esm2022/lib/components/sidebar/sidebar-footer.js.map +1 -0
  55. package/esm2022/lib/components/sidebar/sidebar-gap.js +23 -0
  56. package/esm2022/lib/components/sidebar/sidebar-gap.js.map +1 -0
  57. package/esm2022/lib/components/sidebar/sidebar-group-action.js +21 -0
  58. package/esm2022/lib/components/sidebar/sidebar-group-action.js.map +1 -0
  59. package/esm2022/lib/components/sidebar/sidebar-group-content.js +20 -0
  60. package/esm2022/lib/components/sidebar/sidebar-group-content.js.map +1 -0
  61. package/esm2022/lib/components/sidebar/sidebar-group-label.js +21 -0
  62. package/esm2022/lib/components/sidebar/sidebar-group-label.js.map +1 -0
  63. package/esm2022/lib/components/sidebar/sidebar-group.js +20 -0
  64. package/esm2022/lib/components/sidebar/sidebar-group.js.map +1 -0
  65. package/esm2022/lib/components/sidebar/sidebar-header.js +20 -0
  66. package/esm2022/lib/components/sidebar/sidebar-header.js.map +1 -0
  67. package/esm2022/lib/components/sidebar/sidebar-inner.js +20 -0
  68. package/esm2022/lib/components/sidebar/sidebar-inner.js.map +1 -0
  69. package/esm2022/lib/components/sidebar/sidebar-input.js +20 -0
  70. package/esm2022/lib/components/sidebar/sidebar-input.js.map +1 -0
  71. package/esm2022/lib/components/sidebar/sidebar-inset.js +20 -0
  72. package/esm2022/lib/components/sidebar/sidebar-inset.js.map +1 -0
  73. package/esm2022/lib/components/sidebar/sidebar-menu-action.js +24 -0
  74. package/esm2022/lib/components/sidebar/sidebar-menu-action.js.map +1 -0
  75. package/esm2022/lib/components/sidebar/sidebar-menu-badge.js +20 -0
  76. package/esm2022/lib/components/sidebar/sidebar-menu-badge.js.map +1 -0
  77. package/esm2022/lib/components/sidebar/sidebar-menu-button.js +47 -0
  78. package/esm2022/lib/components/sidebar/sidebar-menu-button.js.map +1 -0
  79. package/esm2022/lib/components/sidebar/sidebar-menu-item.js +20 -0
  80. package/esm2022/lib/components/sidebar/sidebar-menu-item.js.map +1 -0
  81. package/esm2022/lib/components/sidebar/sidebar-menu-skeleton.js +45 -0
  82. package/esm2022/lib/components/sidebar/sidebar-menu-skeleton.js.map +1 -0
  83. package/esm2022/lib/components/sidebar/sidebar-menu-sub-button.js +31 -0
  84. package/esm2022/lib/components/sidebar/sidebar-menu-sub-button.js.map +1 -0
  85. package/esm2022/lib/components/sidebar/sidebar-menu-sub-item.js +20 -0
  86. package/esm2022/lib/components/sidebar/sidebar-menu-sub-item.js.map +1 -0
  87. package/esm2022/lib/components/sidebar/sidebar-menu-sub.js +20 -0
  88. package/esm2022/lib/components/sidebar/sidebar-menu-sub.js.map +1 -0
  89. package/esm2022/lib/components/sidebar/sidebar-menu.js +20 -0
  90. package/esm2022/lib/components/sidebar/sidebar-menu.js.map +1 -0
  91. package/esm2022/lib/components/sidebar/sidebar-provider.js +102 -0
  92. package/esm2022/lib/components/sidebar/sidebar-provider.js.map +1 -0
  93. package/esm2022/lib/components/sidebar/sidebar-rail.js +27 -0
  94. package/esm2022/lib/components/sidebar/sidebar-rail.js.map +1 -0
  95. package/esm2022/lib/components/sidebar/sidebar-separator.js +20 -0
  96. package/esm2022/lib/components/sidebar/sidebar-separator.js.map +1 -0
  97. package/esm2022/lib/components/sidebar/sidebar-state.js +32 -0
  98. package/esm2022/lib/components/sidebar/sidebar-state.js.map +1 -0
  99. package/esm2022/lib/components/sidebar/sidebar-trigger.js +36 -0
  100. package/esm2022/lib/components/sidebar/sidebar-trigger.js.map +1 -0
  101. package/esm2022/lib/components/sidebar/sidebar.js +137 -0
  102. package/esm2022/lib/components/sidebar/sidebar.js.map +1 -0
  103. package/esm2022/lib/components/slider/slider.js +1 -1
  104. package/esm2022/lib/components/slider/slider.js.map +1 -1
  105. package/esm2022/lib/components/switch/switch-field.js +1 -1
  106. package/esm2022/lib/components/switch/switch-field.js.map +1 -1
  107. package/esm2022/lib/components/tabs/tab-panel.js +1 -1
  108. package/esm2022/lib/components/tabs/tab-panel.js.map +1 -1
  109. package/esm2022/lib/components/tooltip/tooltip.js +2 -10
  110. package/esm2022/lib/components/tooltip/tooltip.js.map +1 -1
  111. package/lib/components/index.d.ts +2 -0
  112. package/lib/components/menu/menu-trigger.d.ts +1 -3
  113. package/lib/components/pagination/pagination.d.ts +1 -1
  114. package/lib/components/range-slider/range-slider-thumb-base.d.ts +1 -1
  115. package/lib/components/resizable/index.d.ts +5 -0
  116. package/lib/components/resizable/resizable-handle-indicator.d.ts +7 -0
  117. package/lib/components/resizable/resizable-handle.d.ts +18 -0
  118. package/lib/components/resizable/resizable-panel-group.d.ts +17 -0
  119. package/lib/components/resizable/resizable-panel.d.ts +16 -0
  120. package/lib/components/resizable/resizable.types.d.ts +1 -0
  121. package/lib/components/select/select-label.d.ts +3 -1
  122. package/lib/components/sidebar/index.d.ts +27 -0
  123. package/lib/components/sidebar/sidebar-body.d.ts +7 -0
  124. package/lib/components/sidebar/sidebar-container.d.ts +8 -0
  125. package/lib/components/sidebar/sidebar-footer.d.ts +7 -0
  126. package/lib/components/sidebar/sidebar-gap.d.ts +8 -0
  127. package/lib/components/sidebar/sidebar-group-action.d.ts +8 -0
  128. package/lib/components/sidebar/sidebar-group-content.d.ts +7 -0
  129. package/lib/components/sidebar/sidebar-group-label.d.ts +8 -0
  130. package/lib/components/sidebar/sidebar-group.d.ts +7 -0
  131. package/lib/components/sidebar/sidebar-header.d.ts +7 -0
  132. package/lib/components/sidebar/sidebar-inner.d.ts +7 -0
  133. package/lib/components/sidebar/sidebar-input.d.ts +7 -0
  134. package/lib/components/sidebar/sidebar-inset.d.ts +7 -0
  135. package/lib/components/sidebar/sidebar-menu-action.d.ts +9 -0
  136. package/lib/components/sidebar/sidebar-menu-badge.d.ts +7 -0
  137. package/lib/components/sidebar/sidebar-menu-button.d.ts +18 -0
  138. package/lib/components/sidebar/sidebar-menu-item.d.ts +7 -0
  139. package/lib/components/sidebar/sidebar-menu-skeleton.d.ts +9 -0
  140. package/lib/components/sidebar/sidebar-menu-sub-button.d.ts +9 -0
  141. package/lib/components/sidebar/sidebar-menu-sub-item.d.ts +7 -0
  142. package/lib/components/sidebar/sidebar-menu-sub.d.ts +7 -0
  143. package/lib/components/sidebar/sidebar-menu.d.ts +7 -0
  144. package/lib/components/sidebar/sidebar-provider.d.ts +19 -0
  145. package/lib/components/sidebar/sidebar-rail.d.ts +9 -0
  146. package/lib/components/sidebar/sidebar-separator.d.ts +7 -0
  147. package/lib/components/sidebar/sidebar-state.d.ts +14 -0
  148. package/lib/components/sidebar/sidebar-trigger.d.ts +12 -0
  149. package/lib/components/sidebar/sidebar.d.ts +11 -0
  150. package/package.json +1 -1
@@ -3,7 +3,7 @@ import { cn } from '../../utils';
3
3
  import * as i0 from "@angular/core";
4
4
  export class ScBreadcrumbList {
5
5
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
6
- class = computed(() => cn('text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
6
+ class = computed(() => cn('text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm wrap-break-word sm:gap-2.5', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
7
7
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScBreadcrumbList, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8
8
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ScBreadcrumbList, isStandalone: true, selector: "ol[scBreadcrumbList]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "breadcrumb-list" }, properties: { "class": "class()" } }, ngImport: i0 });
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumb-list.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/breadcrumb/breadcrumb-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;;AASjC,MAAM,OAAO,gBAAgB;IAClB,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IAEzC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CACA,0FAA0F,EAC1F,IAAI,CAAC,UAAU,EAAE,CAClB,iDACF,CAAC;uGARS,gBAAgB;2FAAhB,gBAAgB;;2FAAhB,gBAAgB;kBAP5B,SAAS;mBAAC;oBACT,QAAQ,EAAE,sBAAsB;oBAChC,IAAI,EAAE;wBACJ,WAAW,EAAE,iBAAiB;wBAC9B,SAAS,EAAE,SAAS;qBACrB;iBACF","sourcesContent":["import { computed, Directive, input } from '@angular/core';\nimport { cn } from '../../utils';\n\n@Directive({\n selector: 'ol[scBreadcrumbList]',\n host: {\n 'data-slot': 'breadcrumb-list',\n '[class]': 'class()',\n },\n})\nexport class ScBreadcrumbList {\n readonly classInput = input<string>('', { alias: 'class' });\n\n protected readonly class = computed(() =>\n cn(\n 'text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5',\n this.classInput(),\n ),\n );\n}\n"]}
1
+ {"version":3,"file":"breadcrumb-list.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/breadcrumb/breadcrumb-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;;AASjC,MAAM,OAAO,gBAAgB;IAClB,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IAEzC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CACA,8FAA8F,EAC9F,IAAI,CAAC,UAAU,EAAE,CAClB,iDACF,CAAC;uGARS,gBAAgB;2FAAhB,gBAAgB;;2FAAhB,gBAAgB;kBAP5B,SAAS;mBAAC;oBACT,QAAQ,EAAE,sBAAsB;oBAChC,IAAI,EAAE;wBACJ,WAAW,EAAE,iBAAiB;wBAC9B,SAAS,EAAE,SAAS;qBACrB;iBACF","sourcesContent":["import { computed, Directive, input } from '@angular/core';\nimport { cn } from '../../utils';\n\n@Directive({\n selector: 'ol[scBreadcrumbList]',\n host: {\n 'data-slot': 'breadcrumb-list',\n '[class]': 'class()',\n },\n})\nexport class ScBreadcrumbList {\n readonly classInput = input<string>('', { alias: 'class' });\n\n protected readonly class = computed(() =>\n cn(\n 'text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm wrap-break-word sm:gap-2.5',\n this.classInput(),\n ),\n );\n}\n"]}
@@ -180,7 +180,7 @@ export class ScCalendarDayView {
180
180
  @for (day of weekDays(); track day) {
181
181
  <th
182
182
  scope="col"
183
- class="w-9 rounded-md text-[0.8rem] font-normal text-muted-foreground"
183
+ class="text-muted-foreground w-9 rounded-md text-[0.8rem] font-normal"
184
184
  >
185
185
  {{ day }}
186
186
  </th>
@@ -259,7 +259,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
259
259
  @for (day of weekDays(); track day) {
260
260
  <th
261
261
  scope="col"
262
- class="w-9 rounded-md text-[0.8rem] font-normal text-muted-foreground"
262
+ class="text-muted-foreground w-9 rounded-md text-[0.8rem] font-normal"
263
263
  >
264
264
  {{ day }}
265
265
  </th>
@@ -1 +1 @@
1
- {"version":3,"file":"calendar-day-view.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/calendar/calendar-day-view.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n viewChildren,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Grid, GridRow, GridCell, GridCellWidget } from '@angular/aria/grid';\nimport { cn } from '../../utils';\nimport { Temporal } from '@js-temporal/polyfill';\nimport { ScCalendarValue, ScDateRange } from './calendar';\n\ninterface DayInfo {\n date: Temporal.PlainDate;\n isToday: boolean;\n isOutsideMonth: boolean;\n disabled: boolean;\n selected: ReturnType<typeof signal<boolean>>;\n}\n\n@Component({\n selector: '[scCalendarDayView]',\n imports: [Grid, GridRow, GridCell, GridCellWidget],\n template: `\n <table\n ngGrid\n tabindex=\"0\"\n class=\"w-full border-collapse\"\n colWrap=\"continuous\"\n rowWrap=\"nowrap\"\n [enableSelection]=\"mode() !== 'multiple'\"\n selectionMode=\"explicit\"\n (keydown)=\"handleKeyDown($event)\"\n >\n <thead>\n <tr class=\"flex\">\n @for (day of weekDays(); track day) {\n <th\n scope=\"col\"\n class=\"w-9 rounded-md text-[0.8rem] font-normal text-muted-foreground\"\n >\n {{ day }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (week of weeks(); track $index) {\n <tr ngGridRow class=\"mt-2 flex w-full\">\n @for (day of week; track day?.date?.toString() ?? $index) {\n @if (day) {\n <td\n ngGridCell\n class=\"relative p-0 text-center text-sm\"\n [disabled]=\"day.disabled || day.isOutsideMonth\"\n [(selected)]=\"day.selected\"\n >\n <button\n ngGridCellWidget\n type=\"button\"\n [class]=\"getDayClass(day)\"\n [attr.aria-label]=\"\n day.date.toLocaleString('en-US', {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n })\n \"\n [attr.data-today]=\"day.isToday || null\"\n [attr.data-selected]=\"isSelected(day.date) || null\"\n [attr.data-outside]=\"day.isOutsideMonth || null\"\n [attr.data-disabled]=\"day.disabled || null\"\n [attr.data-range-start]=\"isRangeStart(day.date) || null\"\n [attr.data-range-end]=\"isRangeEnd(day.date) || null\"\n [attr.data-range-middle]=\"isRangeMiddle(day.date) || null\"\n [attr.data-day]=\"day.date.day\"\n (click)=\"handleDateClick(day.date)\"\n >\n {{ day.date.day }}\n </button>\n </td>\n } @else {\n <td\n ngGridCell\n class=\"relative p-0 text-center text-sm\"\n disabled\n >\n <span class=\"size-9\"></span>\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScCalendarDayView {\n private readonly _dayButtons = viewChildren(GridCellWidget);\n\n readonly viewDate = input.required<Temporal.PlainDate>();\n readonly mode = input.required<'single' | 'multiple' | 'range'>();\n readonly value = input<ScCalendarValue>(undefined);\n readonly disabled = input<Temporal.PlainDate[]>([]);\n readonly minDate = input<Temporal.PlainDate | undefined>(undefined);\n readonly maxDate = input<Temporal.PlainDate | undefined>(undefined);\n\n readonly dateSelected = output<Temporal.PlainDate>();\n readonly monthScrollUp = output<void>();\n readonly monthScrollDown = output<void>();\n\n readonly weekDays = input(['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']);\n\n protected readonly weeks = computed(() => {\n const date = this.viewDate();\n const year = date.year;\n const month = date.month;\n\n const firstDay = new Temporal.PlainDate(year, month, 1);\n const daysInMonth = firstDay.daysInMonth;\n // dayOfWeek: 1=Mon..7=Sun; %7 gives 0=Sun like JS Date.getDay()\n const firstDayOfWeek = firstDay.dayOfWeek % 7;\n\n const days: (DayInfo | null)[][] = [];\n let currentWeek: (DayInfo | null)[] = [];\n\n // Add days from previous month to fill the first week\n for (let i = 0; i < firstDayOfWeek; i++) {\n const prevDate = firstDay.subtract({ days: firstDayOfWeek - i });\n currentWeek.push(this.createDayInfo(prevDate, true));\n }\n\n // Add days of the month\n for (let day = 1; day <= daysInMonth; day++) {\n const currentDate = new Temporal.PlainDate(year, month, day);\n currentWeek.push(this.createDayInfo(currentDate, false));\n\n if (currentWeek.length === 7) {\n days.push(currentWeek);\n currentWeek = [];\n }\n }\n\n // Add days from next month to fill the last week\n if (currentWeek.length > 0) {\n const nextMonthFirst = firstDay.add({ months: 1 });\n let nextDay = 0;\n while (currentWeek.length < 7) {\n const nextDate = nextMonthFirst.add({ days: nextDay++ });\n currentWeek.push(this.createDayInfo(nextDate, true));\n }\n days.push(currentWeek);\n }\n\n return days;\n });\n\n private createDayInfo(\n date: Temporal.PlainDate,\n isOutsideMonth: boolean,\n ): DayInfo {\n const today = Temporal.Now.plainDateISO();\n const isToday = date.equals(today);\n const disabled = this.isDateDisabled(date);\n\n return {\n date,\n isToday,\n isOutsideMonth,\n disabled,\n selected: signal(this.isSelected(date)),\n };\n }\n\n private isDateDisabled(date: Temporal.PlainDate): boolean {\n const disabledDates = this.disabled();\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min && Temporal.PlainDate.compare(date, min) < 0) return true;\n if (max && Temporal.PlainDate.compare(date, max) > 0) return true;\n\n return disabledDates.some((d) => d.equals(date));\n }\n\n private getRange(): ScDateRange {\n return (\n (this.value() as ScDateRange | undefined) ?? {\n from: undefined,\n to: undefined,\n }\n );\n }\n\n protected isSelected(date: Temporal.PlainDate): boolean {\n const mode = this.mode();\n\n if (mode === 'single') {\n const selected = this.value() as Temporal.PlainDate | undefined;\n return selected ? date.equals(selected) : false;\n }\n\n if (mode === 'multiple') {\n const dates = (this.value() as Temporal.PlainDate[] | undefined) ?? [];\n return dates.some((d) => date.equals(d));\n }\n\n if (mode === 'range') {\n const range = this.getRange();\n if (range.from && date.equals(range.from)) return true;\n if (range.to && date.equals(range.to)) return true;\n if (\n range.from &&\n range.to &&\n Temporal.PlainDate.compare(date, range.from) > 0 &&\n Temporal.PlainDate.compare(date, range.to) < 0\n )\n return true;\n }\n\n return false;\n }\n\n protected isRangeStart(date: Temporal.PlainDate): boolean {\n if (this.mode() !== 'range') return false;\n const range = this.getRange();\n return range.from ? date.equals(range.from) : false;\n }\n\n protected isRangeEnd(date: Temporal.PlainDate): boolean {\n if (this.mode() !== 'range') return false;\n const range = this.getRange();\n return range.to ? date.equals(range.to) : false;\n }\n\n protected isRangeMiddle(date: Temporal.PlainDate): boolean {\n if (this.mode() !== 'range') return false;\n const range = this.getRange();\n if (!range.from || !range.to) return false;\n return (\n Temporal.PlainDate.compare(date, range.from) > 0 &&\n Temporal.PlainDate.compare(date, range.to) < 0\n );\n }\n\n protected getDayClass(day: DayInfo): string {\n const isSelectedDay = this.isSelected(day.date);\n const isRangeMiddleDay = this.isRangeMiddle(day.date);\n\n return cn(\n 'inline-flex size-9 items-center justify-center rounded-md text-sm font-normal',\n 'ring-offset-background transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'hover:bg-accent hover:text-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n day.isToday && !isSelectedDay && 'bg-accent text-accent-foreground',\n isSelectedDay &&\n !isRangeMiddleDay &&\n 'bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground',\n isRangeMiddleDay && 'bg-accent text-accent-foreground rounded-none',\n day.isOutsideMonth && 'text-muted-foreground opacity-50',\n day.disabled && 'text-muted-foreground opacity-50',\n );\n }\n\n protected handleDateClick(date: Temporal.PlainDate): void {\n this.dateSelected.emit(date);\n }\n\n protected handleKeyDown(event: KeyboardEvent): void {\n const day = Number((event.target as Element).getAttribute('data-day'));\n if (!day) return;\n\n const viewDate = this.viewDate();\n const daysInMonth = viewDate.daysInMonth;\n\n // Only handle edge cases where we need to scroll to prev/next month\n if (day > 7 && day <= daysInMonth - 7) return;\n\n const arrowLeft = event.key === 'ArrowLeft';\n const arrowRight = event.key === 'ArrowRight';\n const arrowUp = event.key === 'ArrowUp';\n const arrowDown = event.key === 'ArrowDown';\n\n if ((day === 1 && arrowLeft) || (day <= 7 && arrowUp)) {\n this.scrollUp();\n }\n\n if (\n (day === daysInMonth && arrowRight) ||\n (day > daysInMonth - 7 && arrowDown)\n ) {\n this.scrollDown();\n }\n }\n\n private scrollDown(): void {\n this.monthScrollDown.emit();\n setTimeout(() => this._dayButtons()[0]?.element.focus());\n }\n\n private scrollUp(): void {\n this.monthScrollUp.emit();\n setTimeout(() =>\n this._dayButtons()[this._dayButtons().length - 1]?.element.focus(),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"calendar-day-view.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/calendar/calendar-day-view.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n viewChildren,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Grid, GridRow, GridCell, GridCellWidget } from '@angular/aria/grid';\nimport { cn } from '../../utils';\nimport { Temporal } from '@js-temporal/polyfill';\nimport { ScCalendarValue, ScDateRange } from './calendar';\n\ninterface DayInfo {\n date: Temporal.PlainDate;\n isToday: boolean;\n isOutsideMonth: boolean;\n disabled: boolean;\n selected: ReturnType<typeof signal<boolean>>;\n}\n\n@Component({\n selector: '[scCalendarDayView]',\n imports: [Grid, GridRow, GridCell, GridCellWidget],\n template: `\n <table\n ngGrid\n tabindex=\"0\"\n class=\"w-full border-collapse\"\n colWrap=\"continuous\"\n rowWrap=\"nowrap\"\n [enableSelection]=\"mode() !== 'multiple'\"\n selectionMode=\"explicit\"\n (keydown)=\"handleKeyDown($event)\"\n >\n <thead>\n <tr class=\"flex\">\n @for (day of weekDays(); track day) {\n <th\n scope=\"col\"\n class=\"text-muted-foreground w-9 rounded-md text-[0.8rem] font-normal\"\n >\n {{ day }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (week of weeks(); track $index) {\n <tr ngGridRow class=\"mt-2 flex w-full\">\n @for (day of week; track day?.date?.toString() ?? $index) {\n @if (day) {\n <td\n ngGridCell\n class=\"relative p-0 text-center text-sm\"\n [disabled]=\"day.disabled || day.isOutsideMonth\"\n [(selected)]=\"day.selected\"\n >\n <button\n ngGridCellWidget\n type=\"button\"\n [class]=\"getDayClass(day)\"\n [attr.aria-label]=\"\n day.date.toLocaleString('en-US', {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n })\n \"\n [attr.data-today]=\"day.isToday || null\"\n [attr.data-selected]=\"isSelected(day.date) || null\"\n [attr.data-outside]=\"day.isOutsideMonth || null\"\n [attr.data-disabled]=\"day.disabled || null\"\n [attr.data-range-start]=\"isRangeStart(day.date) || null\"\n [attr.data-range-end]=\"isRangeEnd(day.date) || null\"\n [attr.data-range-middle]=\"isRangeMiddle(day.date) || null\"\n [attr.data-day]=\"day.date.day\"\n (click)=\"handleDateClick(day.date)\"\n >\n {{ day.date.day }}\n </button>\n </td>\n } @else {\n <td\n ngGridCell\n class=\"relative p-0 text-center text-sm\"\n disabled\n >\n <span class=\"size-9\"></span>\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScCalendarDayView {\n private readonly _dayButtons = viewChildren(GridCellWidget);\n\n readonly viewDate = input.required<Temporal.PlainDate>();\n readonly mode = input.required<'single' | 'multiple' | 'range'>();\n readonly value = input<ScCalendarValue>(undefined);\n readonly disabled = input<Temporal.PlainDate[]>([]);\n readonly minDate = input<Temporal.PlainDate | undefined>(undefined);\n readonly maxDate = input<Temporal.PlainDate | undefined>(undefined);\n\n readonly dateSelected = output<Temporal.PlainDate>();\n readonly monthScrollUp = output<void>();\n readonly monthScrollDown = output<void>();\n\n readonly weekDays = input(['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']);\n\n protected readonly weeks = computed(() => {\n const date = this.viewDate();\n const year = date.year;\n const month = date.month;\n\n const firstDay = new Temporal.PlainDate(year, month, 1);\n const daysInMonth = firstDay.daysInMonth;\n // dayOfWeek: 1=Mon..7=Sun; %7 gives 0=Sun like JS Date.getDay()\n const firstDayOfWeek = firstDay.dayOfWeek % 7;\n\n const days: (DayInfo | null)[][] = [];\n let currentWeek: (DayInfo | null)[] = [];\n\n // Add days from previous month to fill the first week\n for (let i = 0; i < firstDayOfWeek; i++) {\n const prevDate = firstDay.subtract({ days: firstDayOfWeek - i });\n currentWeek.push(this.createDayInfo(prevDate, true));\n }\n\n // Add days of the month\n for (let day = 1; day <= daysInMonth; day++) {\n const currentDate = new Temporal.PlainDate(year, month, day);\n currentWeek.push(this.createDayInfo(currentDate, false));\n\n if (currentWeek.length === 7) {\n days.push(currentWeek);\n currentWeek = [];\n }\n }\n\n // Add days from next month to fill the last week\n if (currentWeek.length > 0) {\n const nextMonthFirst = firstDay.add({ months: 1 });\n let nextDay = 0;\n while (currentWeek.length < 7) {\n const nextDate = nextMonthFirst.add({ days: nextDay++ });\n currentWeek.push(this.createDayInfo(nextDate, true));\n }\n days.push(currentWeek);\n }\n\n return days;\n });\n\n private createDayInfo(\n date: Temporal.PlainDate,\n isOutsideMonth: boolean,\n ): DayInfo {\n const today = Temporal.Now.plainDateISO();\n const isToday = date.equals(today);\n const disabled = this.isDateDisabled(date);\n\n return {\n date,\n isToday,\n isOutsideMonth,\n disabled,\n selected: signal(this.isSelected(date)),\n };\n }\n\n private isDateDisabled(date: Temporal.PlainDate): boolean {\n const disabledDates = this.disabled();\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min && Temporal.PlainDate.compare(date, min) < 0) return true;\n if (max && Temporal.PlainDate.compare(date, max) > 0) return true;\n\n return disabledDates.some((d) => d.equals(date));\n }\n\n private getRange(): ScDateRange {\n return (\n (this.value() as ScDateRange | undefined) ?? {\n from: undefined,\n to: undefined,\n }\n );\n }\n\n protected isSelected(date: Temporal.PlainDate): boolean {\n const mode = this.mode();\n\n if (mode === 'single') {\n const selected = this.value() as Temporal.PlainDate | undefined;\n return selected ? date.equals(selected) : false;\n }\n\n if (mode === 'multiple') {\n const dates = (this.value() as Temporal.PlainDate[] | undefined) ?? [];\n return dates.some((d) => date.equals(d));\n }\n\n if (mode === 'range') {\n const range = this.getRange();\n if (range.from && date.equals(range.from)) return true;\n if (range.to && date.equals(range.to)) return true;\n if (\n range.from &&\n range.to &&\n Temporal.PlainDate.compare(date, range.from) > 0 &&\n Temporal.PlainDate.compare(date, range.to) < 0\n )\n return true;\n }\n\n return false;\n }\n\n protected isRangeStart(date: Temporal.PlainDate): boolean {\n if (this.mode() !== 'range') return false;\n const range = this.getRange();\n return range.from ? date.equals(range.from) : false;\n }\n\n protected isRangeEnd(date: Temporal.PlainDate): boolean {\n if (this.mode() !== 'range') return false;\n const range = this.getRange();\n return range.to ? date.equals(range.to) : false;\n }\n\n protected isRangeMiddle(date: Temporal.PlainDate): boolean {\n if (this.mode() !== 'range') return false;\n const range = this.getRange();\n if (!range.from || !range.to) return false;\n return (\n Temporal.PlainDate.compare(date, range.from) > 0 &&\n Temporal.PlainDate.compare(date, range.to) < 0\n );\n }\n\n protected getDayClass(day: DayInfo): string {\n const isSelectedDay = this.isSelected(day.date);\n const isRangeMiddleDay = this.isRangeMiddle(day.date);\n\n return cn(\n 'inline-flex size-9 items-center justify-center rounded-md text-sm font-normal',\n 'ring-offset-background transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'hover:bg-accent hover:text-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n day.isToday && !isSelectedDay && 'bg-accent text-accent-foreground',\n isSelectedDay &&\n !isRangeMiddleDay &&\n 'bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground',\n isRangeMiddleDay && 'bg-accent text-accent-foreground rounded-none',\n day.isOutsideMonth && 'text-muted-foreground opacity-50',\n day.disabled && 'text-muted-foreground opacity-50',\n );\n }\n\n protected handleDateClick(date: Temporal.PlainDate): void {\n this.dateSelected.emit(date);\n }\n\n protected handleKeyDown(event: KeyboardEvent): void {\n const day = Number((event.target as Element).getAttribute('data-day'));\n if (!day) return;\n\n const viewDate = this.viewDate();\n const daysInMonth = viewDate.daysInMonth;\n\n // Only handle edge cases where we need to scroll to prev/next month\n if (day > 7 && day <= daysInMonth - 7) return;\n\n const arrowLeft = event.key === 'ArrowLeft';\n const arrowRight = event.key === 'ArrowRight';\n const arrowUp = event.key === 'ArrowUp';\n const arrowDown = event.key === 'ArrowDown';\n\n if ((day === 1 && arrowLeft) || (day <= 7 && arrowUp)) {\n this.scrollUp();\n }\n\n if (\n (day === daysInMonth && arrowRight) ||\n (day > daysInMonth - 7 && arrowDown)\n ) {\n this.scrollDown();\n }\n }\n\n private scrollDown(): void {\n this.monthScrollDown.emit();\n setTimeout(() => this._dayButtons()[0]?.element.focus());\n }\n\n private scrollUp(): void {\n this.monthScrollUp.emit();\n setTimeout(() =>\n this._dayButtons()[this._dayButtons().length - 1]?.element.focus(),\n );\n }\n}\n"]}
@@ -3,7 +3,7 @@ import { cn } from '../../utils';
3
3
  import * as i0 from "@angular/core";
4
4
  export class ScFieldDescription {
5
5
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
6
- class = computed(() => cn('text-muted-foreground text-left text-sm [[data-variant=legend]+&]:-mt-1.5 leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance', 'last:mt-0 nth-last-2:-mt-1', '[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
6
+ class = computed(() => cn('text-muted-foreground text-left text-sm [[data-variant=legend]+&]:-mt-1.5 leading-normal font-normal group-has-data-[orientation=horizontal]/field:text-balance', 'last:mt-0 nth-last-2:-mt-1', '[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
7
7
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScFieldDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8
8
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ScFieldDescription, isStandalone: true, selector: "[scFieldDescription]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "field-description" }, properties: { "class": "class()" } }, ngImport: i0 });
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"field-description.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/field/field-description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;;AASjC,MAAM,OAAO,kBAAkB;IACpB,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IAEzC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CACA,mKAAmK,EACnK,4BAA4B,EAC5B,mEAAmE,EACnE,IAAI,CAAC,UAAU,EAAE,CAClB,iDACF,CAAC;uGAVS,kBAAkB;2FAAlB,kBAAkB;;2FAAlB,kBAAkB;kBAP9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,sBAAsB;oBAChC,IAAI,EAAE;wBACJ,WAAW,EAAE,mBAAmB;wBAChC,SAAS,EAAE,SAAS;qBACrB;iBACF","sourcesContent":["import { computed, Directive, input } from '@angular/core';\nimport { cn } from '../../utils';\n\n@Directive({\n selector: '[scFieldDescription]',\n host: {\n 'data-slot': 'field-description',\n '[class]': 'class()',\n },\n})\nexport class ScFieldDescription {\n readonly classInput = input<string>('', { alias: 'class' });\n\n protected readonly class = computed(() =>\n cn(\n 'text-muted-foreground text-left text-sm [[data-variant=legend]+&]:-mt-1.5 leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance',\n 'last:mt-0 nth-last-2:-mt-1',\n '[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4',\n this.classInput(),\n ),\n );\n}\n"]}
1
+ {"version":3,"file":"field-description.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/field/field-description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;;AASjC,MAAM,OAAO,kBAAkB;IACpB,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IAEzC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CACA,iKAAiK,EACjK,4BAA4B,EAC5B,mEAAmE,EACnE,IAAI,CAAC,UAAU,EAAE,CAClB,iDACF,CAAC;uGAVS,kBAAkB;2FAAlB,kBAAkB;;2FAAlB,kBAAkB;kBAP9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,sBAAsB;oBAChC,IAAI,EAAE;wBACJ,WAAW,EAAE,mBAAmB;wBAChC,SAAS,EAAE,SAAS;qBACrB;iBACF","sourcesContent":["import { computed, Directive, input } from '@angular/core';\nimport { cn } from '../../utils';\n\n@Directive({\n selector: '[scFieldDescription]',\n host: {\n 'data-slot': 'field-description',\n '[class]': 'class()',\n },\n})\nexport class ScFieldDescription {\n readonly classInput = input<string>('', { alias: 'class' });\n\n protected readonly class = computed(() =>\n cn(\n 'text-muted-foreground text-left text-sm [[data-variant=legend]+&]:-mt-1.5 leading-normal font-normal group-has-data-[orientation=horizontal]/field:text-balance',\n 'last:mt-0 nth-last-2:-mt-1',\n '[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4',\n this.classInput(),\n ),\n );\n}\n"]}
@@ -3,7 +3,7 @@ import { cn } from '../../utils';
3
3
  import * as i0 from "@angular/core";
4
4
  export class ScFieldGroup {
5
5
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
6
- class = computed(() => cn('gap-5 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4 group/field-group @container/field-group flex w-full flex-col', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
6
+ class = computed(() => cn('gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4 group/field-group @container/field-group flex w-full flex-col', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
7
7
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScFieldGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8
8
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ScFieldGroup, isStandalone: true, selector: "[scFieldGroup]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "field-group" }, properties: { "class": "class()" } }, ngImport: i0 });
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"field-group.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/field/field-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;;AASjC,MAAM,OAAO,YAAY;IACd,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IAEzC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CACA,wIAAwI,EACxI,IAAI,CAAC,UAAU,EAAE,CAClB,iDACF,CAAC;uGARS,YAAY;2FAAZ,YAAY;;2FAAZ,YAAY;kBAPxB,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,IAAI,EAAE;wBACJ,WAAW,EAAE,aAAa;wBAC1B,SAAS,EAAE,SAAS;qBACrB;iBACF","sourcesContent":["import { computed, Directive, input } from '@angular/core';\nimport { cn } from '../../utils';\n\n@Directive({\n selector: '[scFieldGroup]',\n host: {\n 'data-slot': 'field-group',\n '[class]': 'class()',\n },\n})\nexport class ScFieldGroup {\n readonly classInput = input<string>('', { alias: 'class' });\n\n protected readonly class = computed(() =>\n cn(\n 'gap-5 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4 group/field-group @container/field-group flex w-full flex-col',\n this.classInput(),\n ),\n );\n}\n"]}
1
+ {"version":3,"file":"field-group.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/field/field-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;;AASjC,MAAM,OAAO,YAAY;IACd,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IAEzC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CACA,sIAAsI,EACtI,IAAI,CAAC,UAAU,EAAE,CAClB,iDACF,CAAC;uGARS,YAAY;2FAAZ,YAAY;;2FAAZ,YAAY;kBAPxB,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,IAAI,EAAE;wBACJ,WAAW,EAAE,aAAa;wBAC1B,SAAS,EAAE,SAAS;qBACrB;iBACF","sourcesContent":["import { computed, Directive, input } from '@angular/core';\nimport { cn } from '../../utils';\n\n@Directive({\n selector: '[scFieldGroup]',\n host: {\n 'data-slot': 'field-group',\n '[class]': 'class()',\n },\n})\nexport class ScFieldGroup {\n readonly classInput = input<string>('', { alias: 'class' });\n\n protected readonly class = computed(() =>\n cn(\n 'gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4 group/field-group @container/field-group flex w-full flex-col',\n this.classInput(),\n ),\n );\n}\n"]}
@@ -7,9 +7,9 @@ import * as i0 from "@angular/core";
7
7
  const fieldVariants = cva('gap-2 group/field flex w-full data-[invalid=true]:text-destructive', {
8
8
  variants: {
9
9
  orientation: {
10
- vertical: 'flex-col [&>*]:w-full [&>.sr-only]:w-auto',
11
- horizontal: 'flex-row items-center [&>[data-slot=label]]:flex-auto has-[>[data-slot=field-body]]:items-start has-[>[data-slot=field-body]]:[&>[role=checkbox],[role=radio]]:mt-px',
12
- responsive: 'flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto @md/field-group:[&>[data-slot=label]]:flex-auto @md/field-group:has-[>[data-slot=field-body]]:items-start @md/field-group:has-[>[data-slot=field-body]]:[&>[role=checkbox],[role=radio]]:mt-px',
10
+ vertical: 'flex-col *:w-full [&>.sr-only]:w-auto',
11
+ horizontal: 'flex-row items-center *:data-[slot=label]:flex-auto has-[>[data-slot=field-body]]:items-start has-[>[data-slot=field-body]]:[&>[role=checkbox],[role=radio]]:mt-px',
12
+ responsive: 'flex-col *:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:*:data-[slot=label]:flex-auto @md/field-group:has-[>[data-slot=field-body]]:items-start @md/field-group:has-[>[data-slot=field-body]]:[&>[role=checkbox],[role=radio]]:mt-px',
13
13
  },
14
14
  },
15
15
  defaultVariants: {
@@ -1 +1 @@
1
- {"version":3,"file":"field.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/field/field.ts"],"names":[],"mappings":"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","sourcesContent":["import { _IdGenerator } from '@angular/cdk/a11y';\nimport {\n computed,\n contentChild,\n Directive,\n ElementRef,\n inject,\n InjectionToken,\n input,\n} from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils';\n\nconst fieldVariants = cva(\n 'gap-2 group/field flex w-full data-[invalid=true]:text-destructive',\n {\n variants: {\n orientation: {\n vertical: 'flex-col [&>*]:w-full [&>.sr-only]:w-auto',\n horizontal:\n 'flex-row items-center [&>[data-slot=label]]:flex-auto has-[>[data-slot=field-body]]:items-start has-[>[data-slot=field-body]]:[&>[role=checkbox],[role=radio]]:mt-px',\n responsive:\n 'flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto @md/field-group:[&>[data-slot=label]]:flex-auto @md/field-group:has-[>[data-slot=field-body]]:items-start @md/field-group:has-[>[data-slot=field-body]]:[&>[role=checkbox],[role=radio]]:mt-px',\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n },\n);\n\nexport type ScFieldVariants = VariantProps<typeof fieldVariants>;\n\nexport interface ScFieldContext {\n id: () => string;\n}\n\nexport const SC_FIELD = new InjectionToken<ScFieldContext>('SC_FIELD');\n\n@Directive({\n selector: 'div[scField], label[scField]',\n host: {\n '[attr.role]': 'role()',\n 'data-slot': 'field',\n '[attr.id]': 'id()',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-invalid]': 'invalid()',\n '[attr.data-disabled]': 'disabled()',\n '[class]': 'class()',\n },\n providers: [\n {\n provide: SC_FIELD,\n useExisting: ScField,\n },\n ],\n})\nexport class ScField implements ScFieldContext {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n readonly id = input(inject(_IdGenerator).getId('sc-field-'));\n readonly classInput = input<string>('', { alias: 'class' });\n readonly orientation = input<ScFieldVariants['orientation']>('vertical');\n readonly invalidInput = input<boolean>(false, { alias: 'invalid' });\n readonly disabledInput = input<boolean>(false, { alias: 'disabled' });\n\n private readonly formField = contentChild(FormField);\n\n protected readonly role = computed(() => {\n // Only LABEL preserves native semantics, DIV gets role=\"group\"\n const tagName = this.elementRef.nativeElement.tagName;\n return tagName === 'LABEL' ? null : 'group';\n });\n\n readonly invalid = computed(() => {\n if (this.invalidInput()) return true;\n return (\n (this.formField()?.state().touched() &&\n this.formField()?.state().invalid()) ??\n false\n );\n });\n\n readonly disabled = computed(() => {\n if (this.disabledInput()) return true;\n return this.formField()?.state().disabled() ?? false;\n });\n\n protected readonly class = computed(() =>\n cn(fieldVariants({ orientation: this.orientation() }), this.classInput()),\n );\n}\n"]}
1
+ {"version":3,"file":"field.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/field/field.ts"],"names":[],"mappings":"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","sourcesContent":["import { _IdGenerator } from '@angular/cdk/a11y';\nimport {\n computed,\n contentChild,\n Directive,\n ElementRef,\n inject,\n InjectionToken,\n input,\n} from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils';\n\nconst fieldVariants = cva(\n 'gap-2 group/field flex w-full data-[invalid=true]:text-destructive',\n {\n variants: {\n orientation: {\n vertical: 'flex-col *:w-full [&>.sr-only]:w-auto',\n horizontal:\n 'flex-row items-center *:data-[slot=label]:flex-auto has-[>[data-slot=field-body]]:items-start has-[>[data-slot=field-body]]:[&>[role=checkbox],[role=radio]]:mt-px',\n responsive:\n 'flex-col *:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:*:data-[slot=label]:flex-auto @md/field-group:has-[>[data-slot=field-body]]:items-start @md/field-group:has-[>[data-slot=field-body]]:[&>[role=checkbox],[role=radio]]:mt-px',\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n },\n);\n\nexport type ScFieldVariants = VariantProps<typeof fieldVariants>;\n\nexport interface ScFieldContext {\n id: () => string;\n}\n\nexport const SC_FIELD = new InjectionToken<ScFieldContext>('SC_FIELD');\n\n@Directive({\n selector: 'div[scField], label[scField]',\n host: {\n '[attr.role]': 'role()',\n 'data-slot': 'field',\n '[attr.id]': 'id()',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-invalid]': 'invalid()',\n '[attr.data-disabled]': 'disabled()',\n '[class]': 'class()',\n },\n providers: [\n {\n provide: SC_FIELD,\n useExisting: ScField,\n },\n ],\n})\nexport class ScField implements ScFieldContext {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n readonly id = input(inject(_IdGenerator).getId('sc-field-'));\n readonly classInput = input<string>('', { alias: 'class' });\n readonly orientation = input<ScFieldVariants['orientation']>('vertical');\n readonly invalidInput = input<boolean>(false, { alias: 'invalid' });\n readonly disabledInput = input<boolean>(false, { alias: 'disabled' });\n\n private readonly formField = contentChild(FormField);\n\n protected readonly role = computed(() => {\n // Only LABEL preserves native semantics, DIV gets role=\"group\"\n const tagName = this.elementRef.nativeElement.tagName;\n return tagName === 'LABEL' ? null : 'group';\n });\n\n readonly invalid = computed(() => {\n if (this.invalidInput()) return true;\n return (\n (this.formField()?.state().touched() &&\n this.formField()?.state().invalid()) ??\n false\n );\n });\n\n readonly disabled = computed(() => {\n if (this.disabledInput()) return true;\n return this.formField()?.state().disabled() ?? false;\n });\n\n protected readonly class = computed(() =>\n cn(fieldVariants({ orientation: this.orientation() }), this.classInput()),\n );\n}\n"]}
@@ -7,7 +7,7 @@ export class ScFileUploadDropzone {
7
7
  elementRef = inject(ElementRef);
8
8
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
9
9
  isDragging = signal(false, ...(ngDevMode ? [{ debugName: "isDragging" }] : []));
10
- class = computed(() => cn('relative flex min-h-[150px] cursor-pointer flex-col items-center justify-center rounded-lg border-2 border-dashed', 'transition-colors hover:border-primary/50 hover:bg-accent/50', 'data-[dragging=true]:border-primary data-[dragging=true]:bg-accent', 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
10
+ class = computed(() => cn('relative flex min-h-[150px] cursor-pointer flex-col items-center justify-center rounded-lg border-2 border-dashed', 'transition-colors hover:border-primary/50 hover:bg-accent/50', 'data-[dragging=true]:border-primary data-[dragging=true]:bg-accent', 'data-disabled:pointer-events-none data-disabled:opacity-50', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
11
11
  openFilePicker() {
12
12
  if (this.fileUpload.disabled())
13
13
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"file-upload-dropzone.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/file-upload/file-upload-dropzone.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { cn } from '../../utils';\nimport { SC_FILE_UPLOAD } from './file-upload';\n\n@Component({\n selector: '[scFileUploadDropzone]',\n template: `\n <input\n #fileInput\n type=\"file\"\n class=\"sr-only\"\n [multiple]=\"fileUpload.multiple()\"\n [accept]=\"fileUpload.accept()\"\n [disabled]=\"fileUpload.disabled()\"\n (change)=\"onFileSelect($event)\"\n />\n <ng-content />\n `,\n host: {\n 'data-slot': 'file-upload-dropzone',\n '[class]': 'class()',\n '[attr.data-dragging]': 'isDragging()',\n '[attr.data-disabled]': 'fileUpload.disabled() || null',\n '(click)': 'openFilePicker()',\n '(dragover)': 'onDragOver($event)',\n '(dragleave)': 'onDragLeave($event)',\n '(drop)': 'onDrop($event)',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFileUploadDropzone {\n readonly fileUpload = inject(SC_FILE_UPLOAD);\n private readonly elementRef = inject(ElementRef);\n\n readonly classInput = input<string>('', { alias: 'class' });\n readonly isDragging = signal(false);\n\n protected readonly class = computed(() =>\n cn(\n 'relative flex min-h-[150px] cursor-pointer flex-col items-center justify-center rounded-lg border-2 border-dashed',\n 'transition-colors hover:border-primary/50 hover:bg-accent/50',\n 'data-[dragging=true]:border-primary data-[dragging=true]:bg-accent',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n this.classInput(),\n ),\n );\n\n openFilePicker(): void {\n if (this.fileUpload.disabled()) return;\n const input = this.elementRef.nativeElement.querySelector(\n 'input[type=\"file\"]',\n ) as HTMLInputElement;\n input?.click();\n }\n\n onFileSelect(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.fileUpload.addFiles(input.files);\n input.value = '';\n }\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.fileUpload.disabled()) {\n this.isDragging.set(true);\n }\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging.set(false);\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging.set(false);\n\n if (this.fileUpload.disabled()) return;\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n this.fileUpload.addFiles(files);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"file-upload-dropzone.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/file-upload/file-upload-dropzone.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { cn } from '../../utils';\nimport { SC_FILE_UPLOAD } from './file-upload';\n\n@Component({\n selector: '[scFileUploadDropzone]',\n template: `\n <input\n #fileInput\n type=\"file\"\n class=\"sr-only\"\n [multiple]=\"fileUpload.multiple()\"\n [accept]=\"fileUpload.accept()\"\n [disabled]=\"fileUpload.disabled()\"\n (change)=\"onFileSelect($event)\"\n />\n <ng-content />\n `,\n host: {\n 'data-slot': 'file-upload-dropzone',\n '[class]': 'class()',\n '[attr.data-dragging]': 'isDragging()',\n '[attr.data-disabled]': 'fileUpload.disabled() || null',\n '(click)': 'openFilePicker()',\n '(dragover)': 'onDragOver($event)',\n '(dragleave)': 'onDragLeave($event)',\n '(drop)': 'onDrop($event)',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFileUploadDropzone {\n readonly fileUpload = inject(SC_FILE_UPLOAD);\n private readonly elementRef = inject(ElementRef);\n\n readonly classInput = input<string>('', { alias: 'class' });\n readonly isDragging = signal(false);\n\n protected readonly class = computed(() =>\n cn(\n 'relative flex min-h-[150px] cursor-pointer flex-col items-center justify-center rounded-lg border-2 border-dashed',\n 'transition-colors hover:border-primary/50 hover:bg-accent/50',\n 'data-[dragging=true]:border-primary data-[dragging=true]:bg-accent',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n this.classInput(),\n ),\n );\n\n openFilePicker(): void {\n if (this.fileUpload.disabled()) return;\n const input = this.elementRef.nativeElement.querySelector(\n 'input[type=\"file\"]',\n ) as HTMLInputElement;\n input?.click();\n }\n\n onFileSelect(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.fileUpload.addFiles(input.files);\n input.value = '';\n }\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.fileUpload.disabled()) {\n this.isDragging.set(true);\n }\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging.set(false);\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging.set(false);\n\n if (this.fileUpload.disabled()) return;\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n this.fileUpload.addFiles(files);\n }\n }\n}\n"]}
@@ -8,7 +8,7 @@ export class ScFileUploadItemProgress {
8
8
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScFileUploadItemProgress, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
9
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ScFileUploadItemProgress, isStandalone: true, selector: "[scFileUploadItemProgress]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "data-slot": "file-upload-item-progress" }, properties: { "class": "class()" } }, ngImport: i0, template: `
10
10
  <div
11
- class="h-full rounded-full bg-primary transition-all"
11
+ class="bg-primary h-full rounded-full transition-all"
12
12
  [style.width.%]="file().progress || 0"
13
13
  ></div>
14
14
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
@@ -19,7 +19,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
19
19
  selector: '[scFileUploadItemProgress]',
20
20
  template: `
21
21
  <div
22
- class="h-full rounded-full bg-primary transition-all"
22
+ class="bg-primary h-full rounded-full transition-all"
23
23
  [style.width.%]="file().progress || 0"
24
24
  ></div>
25
25
  `,
@@ -1 +1 @@
1
- {"version":3,"file":"file-upload-item-progress.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/file-upload/file-upload-item-progress.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,QAAQ,EACR,KAAK,EACL,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;;AAkBjC,MAAM,OAAO,wBAAwB;IAC1B,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IACnD,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAoB,CAAC;IAEhC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CAAC,kDAAkD,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,iDAC1E,CAAC;uGANS,wBAAwB;2FAAxB,wBAAwB,gcAbzB;;;;;GAKT;;2FAQU,wBAAwB;kBAfpC,SAAS;mBAAC;oBACT,QAAQ,EAAE,4BAA4B;oBACtC,QAAQ,EAAE;;;;;GAKT;oBACD,IAAI,EAAE;wBACJ,WAAW,EAAE,2BAA2B;wBACxC,SAAS,EAAE,SAAS;qBACrB;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { cn } from '../../utils';\nimport { ScFileUploadFile } from './file-upload';\n\n@Component({\n selector: '[scFileUploadItemProgress]',\n template: `\n <div\n class=\"h-full rounded-full bg-primary transition-all\"\n [style.width.%]=\"file().progress || 0\"\n ></div>\n `,\n host: {\n 'data-slot': 'file-upload-item-progress',\n '[class]': 'class()',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFileUploadItemProgress {\n readonly classInput = input<string>('', { alias: 'class' });\n readonly file = input.required<ScFileUploadFile>();\n\n protected readonly class = computed(() =>\n cn('h-1 w-full overflow-hidden rounded-full bg-muted', this.classInput()),\n );\n}\n"]}
1
+ {"version":3,"file":"file-upload-item-progress.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/file-upload/file-upload-item-progress.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,QAAQ,EACR,KAAK,EACL,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;;AAkBjC,MAAM,OAAO,wBAAwB;IAC1B,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IACnD,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAoB,CAAC;IAEhC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CAAC,kDAAkD,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,iDAC1E,CAAC;uGANS,wBAAwB;2FAAxB,wBAAwB,gcAbzB;;;;;GAKT;;2FAQU,wBAAwB;kBAfpC,SAAS;mBAAC;oBACT,QAAQ,EAAE,4BAA4B;oBACtC,QAAQ,EAAE;;;;;GAKT;oBACD,IAAI,EAAE;wBACJ,WAAW,EAAE,2BAA2B;wBACxC,SAAS,EAAE,SAAS;qBACrB;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { cn } from '../../utils';\nimport { ScFileUploadFile } from './file-upload';\n\n@Component({\n selector: '[scFileUploadItemProgress]',\n template: `\n <div\n class=\"bg-primary h-full rounded-full transition-all\"\n [style.width.%]=\"file().progress || 0\"\n ></div>\n `,\n host: {\n 'data-slot': 'file-upload-item-progress',\n '[class]': 'class()',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFileUploadItemProgress {\n readonly classInput = input<string>('', { alias: 'class' });\n readonly file = input.required<ScFileUploadFile>();\n\n protected readonly class = computed(() =>\n cn('h-1 w-full overflow-hidden rounded-full bg-muted', this.classInput()),\n );\n}\n"]}
@@ -34,10 +34,12 @@ export * from './popover';
34
34
  export * from './progress';
35
35
  export * from './radio-group';
36
36
  export * from './range-slider';
37
+ export * from './resizable';
37
38
  export * from './scroll-area';
38
39
  export * from './select';
39
40
  export * from './separator';
40
41
  export * from './sheet';
42
+ export * from './sidebar';
41
43
  export * from './skeleton';
42
44
  export * from './slider';
43
45
  export * from './spinner';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/ui/src/lib/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC","sourcesContent":["export * from './accordion';\nexport * from './alert';\nexport * from './alert-dialog';\nexport * from './aspect-ratio';\nexport * from './avatar';\nexport * from './backdrop';\nexport * from './badge';\nexport * from './breadcrumb';\nexport * from './button';\nexport * from './button-group';\nexport * from './calendar';\nexport * from './card';\nexport * from './checkbox';\nexport * from './collapsible';\nexport * from './date-picker';\nexport * from './dialog';\nexport * from './drawer';\nexport * from './empty';\nexport * from './field';\nexport * from './file-upload';\nexport * from './hover-card';\nexport * from './input';\nexport * from './input-group';\nexport * from './item';\nexport * from './kbd';\nexport * from './label';\nexport * from './link';\nexport * from './menu';\nexport * from './menu-bar';\nexport * from './native-select';\nexport * from './navigation-menu';\nexport * from './pagination';\nexport * from './popover';\nexport * from './progress';\nexport * from './radio-group';\nexport * from './range-slider';\nexport * from './scroll-area';\nexport * from './select';\nexport * from './separator';\nexport * from './sheet';\nexport * from './skeleton';\nexport * from './slider';\nexport * from './spinner';\nexport * from './switch';\nexport * from './table';\nexport * from './tabs';\nexport * from './textarea';\nexport * from './time-picker';\nexport * from './toast';\nexport * from './toggle';\nexport * from './toggle-group';\nexport * from './toolbar';\nexport * from './tooltip';\nexport * from './typography';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/ui/src/lib/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC","sourcesContent":["export * from './accordion';\nexport * from './alert';\nexport * from './alert-dialog';\nexport * from './aspect-ratio';\nexport * from './avatar';\nexport * from './backdrop';\nexport * from './badge';\nexport * from './breadcrumb';\nexport * from './button';\nexport * from './button-group';\nexport * from './calendar';\nexport * from './card';\nexport * from './checkbox';\nexport * from './collapsible';\nexport * from './date-picker';\nexport * from './dialog';\nexport * from './drawer';\nexport * from './empty';\nexport * from './field';\nexport * from './file-upload';\nexport * from './hover-card';\nexport * from './input';\nexport * from './input-group';\nexport * from './item';\nexport * from './kbd';\nexport * from './label';\nexport * from './link';\nexport * from './menu';\nexport * from './menu-bar';\nexport * from './native-select';\nexport * from './navigation-menu';\nexport * from './pagination';\nexport * from './popover';\nexport * from './progress';\nexport * from './radio-group';\nexport * from './range-slider';\nexport * from './resizable';\nexport * from './scroll-area';\nexport * from './select';\nexport * from './separator';\nexport * from './sheet';\nexport * from './sidebar';\nexport * from './skeleton';\nexport * from './slider';\nexport * from './spinner';\nexport * from './switch';\nexport * from './table';\nexport * from './tabs';\nexport * from './textarea';\nexport * from './time-picker';\nexport * from './toast';\nexport * from './toggle';\nexport * from './toggle-group';\nexport * from './toolbar';\nexport * from './tooltip';\nexport * from './typography';\n"]}
@@ -11,7 +11,7 @@ export class ScLabel {
11
11
  const forValue = this.forInput() || this.field?.id();
12
12
  return forValue || null;
13
13
  }, ...(ngDevMode ? [{ debugName: "for" }] : []));
14
- class = computed(() => cn('has-data-checked:bg-primary/5 has-data-checked:border-primary dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-2.5 group/label peer/label flex w-fit leading-snug', 'has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
14
+ class = computed(() => cn('has-data-checked:bg-primary/5 has-data-checked:border-primary dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5 group/label peer/label flex w-fit leading-snug', 'has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
15
15
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
16
16
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ScLabel, isStandalone: true, selector: "label[scLabel]", inputs: { forInput: { classPropertyName: "forInput", publicName: "for", isSignal: true, isRequired: false, transformFunction: null }, classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "label" }, properties: { "attr.for": "for()", "class": "class()" } }, ngImport: i0 });
17
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"label.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/label/label.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;;AAUpC,MAAM,OAAO,OAAO;IACD,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAErD,QAAQ,GAAG,KAAK,CAAS,EAAE,qDAAI,KAAK,EAAE,KAAK,GAAG,CAAC;IAC/C,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IAEzC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE;QACrC,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;QACrD,OAAO,QAAQ,IAAI,IAAI,CAAC;IAC1B,CAAC,+CAAC,CAAC;IAEgB,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CACA,sSAAsS,EACtS,mEAAmE,EACnE,IAAI,CAAC,UAAU,EAAE,CAClB,iDACF,CAAC;uGAlBS,OAAO;2FAAP,OAAO;;2FAAP,OAAO;kBARnB,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,IAAI,EAAE;wBACJ,WAAW,EAAE,OAAO;wBACpB,YAAY,EAAE,OAAO;wBACrB,SAAS,EAAE,SAAS;qBACrB;iBACF","sourcesContent":["import { computed, Directive, inject, input } from '@angular/core';\nimport { cn } from '../../utils';\nimport { SC_FIELD } from '../field';\n\n@Directive({\n selector: 'label[scLabel]',\n host: {\n 'data-slot': 'label',\n '[attr.for]': 'for()',\n '[class]': 'class()',\n },\n})\nexport class ScLabel {\n private readonly field = inject(SC_FIELD, { optional: true });\n\n readonly forInput = input<string>('', { alias: 'for' });\n readonly classInput = input<string>('', { alias: 'class' });\n\n protected readonly for = computed(() => {\n // Priority: explicit for input > field context\n const forValue = this.forInput() || this.field?.id();\n return forValue || null;\n });\n\n protected readonly class = computed(() =>\n cn(\n 'has-data-checked:bg-primary/5 has-data-checked:border-primary dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-2.5 group/label peer/label flex w-fit leading-snug',\n 'has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col',\n this.classInput(),\n ),\n );\n}\n"]}
1
+ {"version":3,"file":"label.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/label/label.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;;AAUpC,MAAM,OAAO,OAAO;IACD,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAErD,QAAQ,GAAG,KAAK,CAAS,EAAE,qDAAI,KAAK,EAAE,KAAK,GAAG,CAAC;IAC/C,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IAEzC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE;QACrC,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;QACrD,OAAO,QAAQ,IAAI,IAAI,CAAC;IAC1B,CAAC,+CAAC,CAAC;IAEgB,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CACA,kSAAkS,EAClS,mEAAmE,EACnE,IAAI,CAAC,UAAU,EAAE,CAClB,iDACF,CAAC;uGAlBS,OAAO;2FAAP,OAAO;;2FAAP,OAAO;kBARnB,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,IAAI,EAAE;wBACJ,WAAW,EAAE,OAAO;wBACpB,YAAY,EAAE,OAAO;wBACrB,SAAS,EAAE,SAAS;qBACrB;iBACF","sourcesContent":["import { computed, Directive, inject, input } from '@angular/core';\nimport { cn } from '../../utils';\nimport { SC_FIELD } from '../field';\n\n@Directive({\n selector: 'label[scLabel]',\n host: {\n 'data-slot': 'label',\n '[attr.for]': 'for()',\n '[class]': 'class()',\n },\n})\nexport class ScLabel {\n private readonly field = inject(SC_FIELD, { optional: true });\n\n readonly forInput = input<string>('', { alias: 'for' });\n readonly classInput = input<string>('', { alias: 'class' });\n\n protected readonly for = computed(() => {\n // Priority: explicit for input > field context\n const forValue = this.forInput() || this.field?.id();\n return forValue || null;\n });\n\n protected readonly class = computed(() =>\n cn(\n 'has-data-checked:bg-primary/5 has-data-checked:border-primary dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5 group/label peer/label flex w-fit leading-snug',\n 'has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col',\n this.classInput(),\n ),\n );\n}\n"]}
@@ -1,18 +1,15 @@
1
- import { computed, Directive, inject, input } from '@angular/core';
1
+ import { Directive, inject } from '@angular/core';
2
2
  import { CdkOverlayOrigin } from '@angular/cdk/overlay';
3
3
  import { MenuTrigger } from '@angular/aria/menu';
4
- import { cn } from '../../utils';
5
4
  import * as i0 from "@angular/core";
6
5
  import * as i1 from "@angular/aria/menu";
7
6
  import * as i2 from "@angular/cdk/overlay";
8
7
  export class ScMenuTrigger {
9
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
10
8
  trigger = inject(MenuTrigger);
11
9
  overlayOrigin = inject(CdkOverlayOrigin);
12
10
  expanded = this.trigger.expanded;
13
- class = computed(() => cn('inline-flex cursor-pointer items-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium shadow-sm hover:bg-accent hover:text-accent-foreground focus-visible:outline-2 focus-visible:outline-ring', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
14
11
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
15
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ScMenuTrigger, isStandalone: true, selector: "[scMenuTrigger]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "menu-trigger" }, properties: { "class": "class()" } }, exportAs: ["scMenuTrigger"], hostDirectives: [{ directive: i1.MenuTrigger }, { directive: i2.CdkOverlayOrigin }], ngImport: i0 });
12
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ScMenuTrigger, isStandalone: true, selector: "[scMenuTrigger]", host: { attributes: { "data-slot": "menu-trigger" } }, exportAs: ["scMenuTrigger"], hostDirectives: [{ directive: i1.MenuTrigger }, { directive: i2.CdkOverlayOrigin }], ngImport: i0 });
16
13
  }
17
14
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScMenuTrigger, decorators: [{
18
15
  type: Directive,
@@ -27,8 +24,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
27
24
  ],
28
25
  host: {
29
26
  'data-slot': 'menu-trigger',
30
- '[class]': 'class()',
31
27
  },
32
28
  }]
33
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
29
+ }] });
34
30
  //# sourceMappingURL=menu-trigger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"menu-trigger.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/menu/menu-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;;;;AAgBjC,MAAM,OAAO,aAAa;IACf,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IACnD,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9B,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACzC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAEvB,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CACA,8NAA8N,EAC9N,IAAI,CAAC,UAAU,EAAE,CAClB,iDACF,CAAC;uGAXS,aAAa;2FAAb,aAAa;;2FAAb,aAAa;kBAdzB,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,QAAQ,EAAE,eAAe;oBACzB,cAAc,EAAE;wBACd;4BACE,SAAS,EAAE,WAAW;yBACvB;wBACD,gBAAgB;qBACjB;oBACD,IAAI,EAAE;wBACJ,WAAW,EAAE,cAAc;wBAC3B,SAAS,EAAE,SAAS;qBACrB;iBACF","sourcesContent":["import { computed, Directive, inject, input } from '@angular/core';\nimport { CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { MenuTrigger } from '@angular/aria/menu';\nimport { cn } from '../../utils';\n\n@Directive({\n selector: '[scMenuTrigger]',\n exportAs: 'scMenuTrigger',\n hostDirectives: [\n {\n directive: MenuTrigger,\n },\n CdkOverlayOrigin,\n ],\n host: {\n 'data-slot': 'menu-trigger',\n '[class]': 'class()',\n },\n})\nexport class ScMenuTrigger {\n readonly classInput = input<string>('', { alias: 'class' });\n readonly trigger = inject(MenuTrigger);\n readonly overlayOrigin = inject(CdkOverlayOrigin);\n readonly expanded = this.trigger.expanded;\n\n protected readonly class = computed(() =>\n cn(\n 'inline-flex cursor-pointer items-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium shadow-sm hover:bg-accent hover:text-accent-foreground focus-visible:outline-2 focus-visible:outline-ring',\n this.classInput(),\n ),\n );\n}\n"]}
1
+ {"version":3,"file":"menu-trigger.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/menu/menu-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;;;;AAejD,MAAM,OAAO,aAAa;IACf,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9B,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACzC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;uGAH/B,aAAa;2FAAb,aAAa;;2FAAb,aAAa;kBAbzB,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,QAAQ,EAAE,eAAe;oBACzB,cAAc,EAAE;wBACd;4BACE,SAAS,EAAE,WAAW;yBACvB;wBACD,gBAAgB;qBACjB;oBACD,IAAI,EAAE;wBACJ,WAAW,EAAE,cAAc;qBAC5B;iBACF","sourcesContent":["import { Directive, inject } from '@angular/core';\nimport { CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { MenuTrigger } from '@angular/aria/menu';\n\n@Directive({\n selector: '[scMenuTrigger]',\n exportAs: 'scMenuTrigger',\n hostDirectives: [\n {\n directive: MenuTrigger,\n },\n CdkOverlayOrigin,\n ],\n host: {\n 'data-slot': 'menu-trigger',\n },\n})\nexport class ScMenuTrigger {\n readonly trigger = inject(MenuTrigger);\n readonly overlayOrigin = inject(CdkOverlayOrigin);\n readonly expanded = this.trigger.expanded;\n}\n"]}
@@ -8,7 +8,7 @@ export class ScMenu {
8
8
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
9
9
  menu = inject(Menu);
10
10
  visible = this.menu.visible;
11
- class = computed(() => cn('bg-popover text-popover-foreground min-w-32 w-[15rem] rounded-lg p-1 shadow-md ring-1 ring-foreground/10 z-50 overflow-x-hidden overflow-y-auto data-[visible=false]:hidden', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
11
+ class = computed(() => cn('bg-popover text-popover-foreground min-w-32 w-60 rounded-lg p-1 shadow-md ring-1 ring-foreground/10 z-50 overflow-x-hidden overflow-y-auto data-[visible=false]:hidden', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
12
12
  constructor() {
13
13
  const portal = inject(ScMenuPortal, { optional: true });
14
14
  portal?.menu.set(this.menu);
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/menu/menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;;;AAiB7C,MAAM,OAAO,MAAM;IACR,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IACnD,IAAI,GAAG,MAAM,CAAU,IAAI,CAAC,CAAC;IAC7B,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAElB,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CACA,6KAA6K,EAC7K,IAAI,CAAC,UAAU,EAAE,CAClB,iDACF,CAAC;IAEF;QACE,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAqB,CAAC,CAAC;IAC/C,CAAC;uGAfU,MAAM;2FAAN,MAAM;;2FAAN,MAAM;kBAflB,SAAS;mBAAC;oBACT,QAAQ,EAAE,UAAU;oBACpB,QAAQ,EAAE,QAAQ;oBAClB,cAAc,EAAE;wBACd;4BACE,SAAS,EAAE,IAAI;4BACf,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;4BACtE,OAAO,EAAE,CAAC,cAAc,CAAC;yBAC1B;qBACF;oBACD,IAAI,EAAE;wBACJ,WAAW,EAAE,MAAM;wBACnB,SAAS,EAAE,SAAS;qBACrB;iBACF","sourcesContent":["import { computed, Directive, inject, input } from '@angular/core';\nimport { Menu } from '@angular/aria/menu';\nimport { cn } from '../../utils';\nimport { ScMenuPortal } from './menu-portal';\n\n@Directive({\n selector: '[scMenu]',\n exportAs: 'scMenu',\n hostDirectives: [\n {\n directive: Menu,\n inputs: ['id', 'wrap', 'disabled', 'typeaheadDelay', 'expansionDelay'],\n outputs: ['itemSelected'],\n },\n ],\n host: {\n 'data-slot': 'menu',\n '[class]': 'class()',\n },\n})\nexport class ScMenu<V = string> {\n readonly classInput = input<string>('', { alias: 'class' });\n readonly menu = inject<Menu<V>>(Menu);\n readonly visible = this.menu.visible;\n\n protected readonly class = computed(() =>\n cn(\n 'bg-popover text-popover-foreground min-w-32 w-[15rem] rounded-lg p-1 shadow-md ring-1 ring-foreground/10 z-50 overflow-x-hidden overflow-y-auto data-[visible=false]:hidden',\n this.classInput(),\n ),\n );\n\n constructor() {\n const portal = inject(ScMenuPortal, { optional: true });\n portal?.menu.set(this.menu as Menu<unknown>);\n }\n}\n"]}
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/menu/menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;;;AAiB7C,MAAM,OAAO,MAAM;IACR,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IACnD,IAAI,GAAG,MAAM,CAAU,IAAI,CAAC,CAAC;IAC7B,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAElB,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CACA,wKAAwK,EACxK,IAAI,CAAC,UAAU,EAAE,CAClB,iDACF,CAAC;IAEF;QACE,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAqB,CAAC,CAAC;IAC/C,CAAC;uGAfU,MAAM;2FAAN,MAAM;;2FAAN,MAAM;kBAflB,SAAS;mBAAC;oBACT,QAAQ,EAAE,UAAU;oBACpB,QAAQ,EAAE,QAAQ;oBAClB,cAAc,EAAE;wBACd;4BACE,SAAS,EAAE,IAAI;4BACf,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;4BACtE,OAAO,EAAE,CAAC,cAAc,CAAC;yBAC1B;qBACF;oBACD,IAAI,EAAE;wBACJ,WAAW,EAAE,MAAM;wBACnB,SAAS,EAAE,SAAS;qBACrB;iBACF","sourcesContent":["import { computed, Directive, inject, input } from '@angular/core';\nimport { Menu } from '@angular/aria/menu';\nimport { cn } from '../../utils';\nimport { ScMenuPortal } from './menu-portal';\n\n@Directive({\n selector: '[scMenu]',\n exportAs: 'scMenu',\n hostDirectives: [\n {\n directive: Menu,\n inputs: ['id', 'wrap', 'disabled', 'typeaheadDelay', 'expansionDelay'],\n outputs: ['itemSelected'],\n },\n ],\n host: {\n 'data-slot': 'menu',\n '[class]': 'class()',\n },\n})\nexport class ScMenu<V = string> {\n readonly classInput = input<string>('', { alias: 'class' });\n readonly menu = inject<Menu<V>>(Menu);\n readonly visible = this.menu.visible;\n\n protected readonly class = computed(() =>\n cn(\n 'bg-popover text-popover-foreground min-w-32 w-60 rounded-lg p-1 shadow-md ring-1 ring-foreground/10 z-50 overflow-x-hidden overflow-y-auto data-[visible=false]:hidden',\n this.classInput(),\n ),\n );\n\n constructor() {\n const portal = inject(ScMenuPortal, { optional: true });\n portal?.menu.set(this.menu as Menu<unknown>);\n }\n}\n"]}
@@ -5,7 +5,7 @@ import * as i0 from "@angular/core";
5
5
  export class ScNavigationMenuTriggerIcon {
6
6
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
7
7
  menuItem = inject(ScNavigationMenuItem);
8
- class = computed(() => cn('relative top-[1px] ml-1 size-3 transition duration-300', this.menuItem.open() && 'rotate-180', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
8
+ class = computed(() => cn('relative top-px ml-1 size-3 transition duration-300', this.menuItem.open() && 'rotate-180', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
9
9
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScNavigationMenuTriggerIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
10
10
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ScNavigationMenuTriggerIcon, isStandalone: true, selector: "svg[scNavigationMenuTriggerIcon]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "navigation-menu-trigger-icon" }, properties: { "class": "class()" } }, ngImport: i0 });
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-menu-trigger-icon.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/navigation-menu/navigation-menu-trigger-icon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;;AAS9D,MAAM,OAAO,2BAA2B;IAC7B,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IAE3C,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAEtC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CACA,wDAAwD,EACxD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,YAAY,EACpC,IAAI,CAAC,UAAU,EAAE,CAClB,iDACF,CAAC;uGAXS,2BAA2B;2FAA3B,2BAA2B;;2FAA3B,2BAA2B;kBAPvC,SAAS;mBAAC;oBACT,QAAQ,EAAE,kCAAkC;oBAC5C,IAAI,EAAE;wBACJ,WAAW,EAAE,8BAA8B;wBAC3C,SAAS,EAAE,SAAS;qBACrB;iBACF","sourcesContent":["import { computed, Directive, inject, input } from '@angular/core';\nimport { cn } from '../../utils';\nimport { ScNavigationMenuItem } from './navigation-menu-item';\n\n@Directive({\n selector: 'svg[scNavigationMenuTriggerIcon]',\n host: {\n 'data-slot': 'navigation-menu-trigger-icon',\n '[class]': 'class()',\n },\n})\nexport class ScNavigationMenuTriggerIcon {\n readonly classInput = input<string>('', { alias: 'class' });\n\n private readonly menuItem = inject(ScNavigationMenuItem);\n\n protected readonly class = computed(() =>\n cn(\n 'relative top-[1px] ml-1 size-3 transition duration-300',\n this.menuItem.open() && 'rotate-180',\n this.classInput(),\n ),\n );\n}\n"]}
1
+ {"version":3,"file":"navigation-menu-trigger-icon.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/navigation-menu/navigation-menu-trigger-icon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;;AAS9D,MAAM,OAAO,2BAA2B;IAC7B,UAAU,GAAG,KAAK,CAAS,EAAE,uDAAI,KAAK,EAAE,OAAO,GAAG,CAAC;IAE3C,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAEtC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,EAAE,CACA,qDAAqD,EACrD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,YAAY,EACpC,IAAI,CAAC,UAAU,EAAE,CAClB,iDACF,CAAC;uGAXS,2BAA2B;2FAA3B,2BAA2B;;2FAA3B,2BAA2B;kBAPvC,SAAS;mBAAC;oBACT,QAAQ,EAAE,kCAAkC;oBAC5C,IAAI,EAAE;wBACJ,WAAW,EAAE,8BAA8B;wBAC3C,SAAS,EAAE,SAAS;qBACrB;iBACF","sourcesContent":["import { computed, Directive, inject, input } from '@angular/core';\nimport { cn } from '../../utils';\nimport { ScNavigationMenuItem } from './navigation-menu-item';\n\n@Directive({\n selector: 'svg[scNavigationMenuTriggerIcon]',\n host: {\n 'data-slot': 'navigation-menu-trigger-icon',\n '[class]': 'class()',\n },\n})\nexport class ScNavigationMenuTriggerIcon {\n readonly classInput = input<string>('', { alias: 'class' });\n\n private readonly menuItem = inject(ScNavigationMenuItem);\n\n protected readonly class = computed(() =>\n cn(\n 'relative top-px ml-1 size-3 transition duration-300',\n this.menuItem.open() && 'rotate-180',\n this.classInput(),\n ),\n );\n}\n"]}
@@ -117,12 +117,12 @@ export class ScPagination {
117
117
  return pages;
118
118
  }
119
119
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScPagination, deps: [], target: i0.ɵɵFactoryTarget.Directive });
120
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ScPagination, isStandalone: true, selector: "nav[scPagination]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, currentPageInput: { classPropertyName: "currentPageInput", publicName: "currentPage", isSignal: true, isRequired: false, transformFunction: null }, pageSizeInput: { classPropertyName: "pageSizeInput", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, pageSizes: { classPropertyName: "pageSizes", publicName: "pageSizes", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { attributes: { "data-slot": "pagination", "role": "navigation", "aria-label": "pagination" }, properties: { "class": "class()" } }, exportAs: ["scPagination"], ngImport: i0 });
120
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ScPagination, isStandalone: true, selector: "nav[scPagination], div[scPagination]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, currentPageInput: { classPropertyName: "currentPageInput", publicName: "currentPage", isSignal: true, isRequired: false, transformFunction: null }, pageSizeInput: { classPropertyName: "pageSizeInput", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, pageSizes: { classPropertyName: "pageSizes", publicName: "pageSizes", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { attributes: { "data-slot": "pagination", "role": "navigation", "aria-label": "pagination" }, properties: { "class": "class()" } }, exportAs: ["scPagination"], ngImport: i0 });
121
121
  }
122
122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScPagination, decorators: [{
123
123
  type: Directive,
124
124
  args: [{
125
- selector: 'nav[scPagination]',
125
+ selector: 'nav[scPagination], div[scPagination]',
126
126
  exportAs: 'scPagination',
127
127
  host: {
128
128
  'data-slot': 'pagination',
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/pagination/pagination.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n computed,\n Directive,\n input,\n linkedSignal,\n output,\n} from '@angular/core';\nimport { cn } from '../../utils';\n\nexport type ScPaginationPage =\n | { type: 'page'; value: number }\n | { type: 'ellipsis'; value: string };\n\nexport interface ScPaginationChange {\n page: number;\n pageSize: number;\n}\n\n@Directive({\n selector: 'nav[scPagination]',\n exportAs: 'scPagination',\n host: {\n 'data-slot': 'pagination',\n role: 'navigation',\n 'aria-label': 'pagination',\n '[class]': 'class()',\n },\n})\nexport class ScPagination {\n readonly classInput = input<string>('', { alias: 'class' });\n\n // Smart pagination inputs\n readonly currentPageInput = input<number>(1, { alias: 'currentPage' });\n readonly pageSizeInput = input<number>(10, { alias: 'pageSize' });\n readonly totalItems = input<number>(0);\n readonly pageSizes = input<number[]>([10, 25, 50, 100]); // Available page size options\n\n // Internal state (synced from inputs, writable for programmatic updates)\n readonly currentPage = linkedSignal(() => this.currentPageInput());\n readonly pageSize = linkedSignal(() => this.pageSizeInput());\n\n // Output events\n readonly change = output<ScPaginationChange>();\n\n protected readonly class = computed(() =>\n cn('mx-auto flex w-full justify-center', this.classInput()),\n );\n\n // Computed total pages\n readonly totalPages = computed(() => {\n const total = this.totalItems();\n const size = this.pageSize();\n return Math.ceil(total / size);\n });\n\n // Computed pages array for rendering\n readonly pages = computed(() => {\n const current = this.currentPage();\n const total = this.totalPages();\n\n return this.generatePageNumbers(current, total);\n });\n\n /**\n * Trigger a page change. Called internally by child components.\n * @param page The target page number\n */\n goToPage(page: number): void {\n const total = this.totalPages();\n if (page >= 1 && page <= total && page !== this.currentPage()) {\n this.currentPage.set(page);\n this.change.emit({ page, pageSize: this.pageSize() });\n }\n }\n\n /**\n * Change the page size. Called internally by ScPaginationPageSizeSelect.\n * @param newPageSize The new page size\n */\n changePageSize(newPageSize: number): void {\n if (newPageSize > 0 && newPageSize !== this.pageSize()) {\n // Reset to page 1 when page size changes\n this.currentPage.set(1);\n this.pageSize.set(newPageSize);\n this.change.emit({ page: 1, pageSize: newPageSize });\n }\n }\n\n private generatePageNumbers(\n currentPage: number,\n totalPages: number,\n ): ScPaginationPage[] {\n const siblingCount = 1;\n // If total pages is less than or equal to 7, show all pages\n if (totalPages <= 7) {\n return Array.from({ length: totalPages }, (_, i) => ({\n type: 'page' as const,\n value: i + 1,\n }));\n }\n\n // For more than 7 pages, always return exactly 7 items\n const pages: ScPaginationPage[] = [];\n\n // First page\n pages.push({ type: 'page', value: 1 });\n\n // Calculate the range around current page\n let start = Math.max(2, currentPage - siblingCount);\n let end = Math.min(totalPages - 1, currentPage + siblingCount);\n\n // Adjust to ensure we show the right number of pages\n const totalMiddleSlots = 5; // Total slots minus first and last\n const needLeftEllipsis = start > 2;\n const needRightEllipsis = end < totalPages - 1;\n\n // Calculate how many actual page slots we have (excluding ellipsis)\n let pageSlots = totalMiddleSlots;\n if (needLeftEllipsis) pageSlots--;\n if (needRightEllipsis) pageSlots--;\n\n // Adjust range to fit in available slots\n if (!needLeftEllipsis && needRightEllipsis) {\n // Near start: [1, 2, 3, 4, 5, ..., last]\n end = Math.min(pageSlots + 1, totalPages - 1);\n } else if (needLeftEllipsis && !needRightEllipsis) {\n // Near end: [1, ..., n-4, n-3, n-2, n-1, n]\n start = Math.max(2, totalPages - pageSlots);\n } else if (needLeftEllipsis && needRightEllipsis) {\n // Middle: [1, ..., current-1, current, current+1, ..., last]\n const middlePages = pageSlots;\n const halfPages = Math.floor(middlePages / 2);\n start = currentPage - halfPages;\n end = currentPage + (middlePages - halfPages - 1);\n\n // Adjust if we're too close to edges\n if (start < 2) {\n start = 2;\n end = start + middlePages - 1;\n }\n if (end > totalPages - 1) {\n end = totalPages - 1;\n start = end - middlePages + 1;\n }\n }\n\n // Add left ellipsis if needed\n if (start > 2) {\n pages.push({ type: 'ellipsis', value: 'ellipsis-left' });\n }\n\n // Add middle pages\n for (let i = start; i <= end; i++) {\n pages.push({ type: 'page', value: i });\n }\n\n // Add right ellipsis if needed\n if (end < totalPages - 1) {\n pages.push({ type: 'ellipsis', value: 'ellipsis-right' });\n }\n\n // Last page\n pages.push({ type: 'page', value: totalPages });\n\n return pages;\n }\n}\n"]}
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/pagination/pagination.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n computed,\n Directive,\n input,\n linkedSignal,\n output,\n} from '@angular/core';\nimport { cn } from '../../utils';\n\nexport type ScPaginationPage =\n | { type: 'page'; value: number }\n | { type: 'ellipsis'; value: string };\n\nexport interface ScPaginationChange {\n page: number;\n pageSize: number;\n}\n\n@Directive({\n selector: 'nav[scPagination], div[scPagination]',\n exportAs: 'scPagination',\n host: {\n 'data-slot': 'pagination',\n role: 'navigation',\n 'aria-label': 'pagination',\n '[class]': 'class()',\n },\n})\nexport class ScPagination {\n readonly classInput = input<string>('', { alias: 'class' });\n\n // Smart pagination inputs\n readonly currentPageInput = input<number>(1, { alias: 'currentPage' });\n readonly pageSizeInput = input<number>(10, { alias: 'pageSize' });\n readonly totalItems = input<number>(0);\n readonly pageSizes = input<number[]>([10, 25, 50, 100]); // Available page size options\n\n // Internal state (synced from inputs, writable for programmatic updates)\n readonly currentPage = linkedSignal(() => this.currentPageInput());\n readonly pageSize = linkedSignal(() => this.pageSizeInput());\n\n // Output events\n readonly change = output<ScPaginationChange>();\n\n protected readonly class = computed(() =>\n cn('mx-auto flex w-full justify-center', this.classInput()),\n );\n\n // Computed total pages\n readonly totalPages = computed(() => {\n const total = this.totalItems();\n const size = this.pageSize();\n return Math.ceil(total / size);\n });\n\n // Computed pages array for rendering\n readonly pages = computed(() => {\n const current = this.currentPage();\n const total = this.totalPages();\n\n return this.generatePageNumbers(current, total);\n });\n\n /**\n * Trigger a page change. Called internally by child components.\n * @param page The target page number\n */\n goToPage(page: number): void {\n const total = this.totalPages();\n if (page >= 1 && page <= total && page !== this.currentPage()) {\n this.currentPage.set(page);\n this.change.emit({ page, pageSize: this.pageSize() });\n }\n }\n\n /**\n * Change the page size. Called internally by ScPaginationPageSizeSelect.\n * @param newPageSize The new page size\n */\n changePageSize(newPageSize: number): void {\n if (newPageSize > 0 && newPageSize !== this.pageSize()) {\n // Reset to page 1 when page size changes\n this.currentPage.set(1);\n this.pageSize.set(newPageSize);\n this.change.emit({ page: 1, pageSize: newPageSize });\n }\n }\n\n private generatePageNumbers(\n currentPage: number,\n totalPages: number,\n ): ScPaginationPage[] {\n const siblingCount = 1;\n // If total pages is less than or equal to 7, show all pages\n if (totalPages <= 7) {\n return Array.from({ length: totalPages }, (_, i) => ({\n type: 'page' as const,\n value: i + 1,\n }));\n }\n\n // For more than 7 pages, always return exactly 7 items\n const pages: ScPaginationPage[] = [];\n\n // First page\n pages.push({ type: 'page', value: 1 });\n\n // Calculate the range around current page\n let start = Math.max(2, currentPage - siblingCount);\n let end = Math.min(totalPages - 1, currentPage + siblingCount);\n\n // Adjust to ensure we show the right number of pages\n const totalMiddleSlots = 5; // Total slots minus first and last\n const needLeftEllipsis = start > 2;\n const needRightEllipsis = end < totalPages - 1;\n\n // Calculate how many actual page slots we have (excluding ellipsis)\n let pageSlots = totalMiddleSlots;\n if (needLeftEllipsis) pageSlots--;\n if (needRightEllipsis) pageSlots--;\n\n // Adjust range to fit in available slots\n if (!needLeftEllipsis && needRightEllipsis) {\n // Near start: [1, 2, 3, 4, 5, ..., last]\n end = Math.min(pageSlots + 1, totalPages - 1);\n } else if (needLeftEllipsis && !needRightEllipsis) {\n // Near end: [1, ..., n-4, n-3, n-2, n-1, n]\n start = Math.max(2, totalPages - pageSlots);\n } else if (needLeftEllipsis && needRightEllipsis) {\n // Middle: [1, ..., current-1, current, current+1, ..., last]\n const middlePages = pageSlots;\n const halfPages = Math.floor(middlePages / 2);\n start = currentPage - halfPages;\n end = currentPage + (middlePages - halfPages - 1);\n\n // Adjust if we're too close to edges\n if (start < 2) {\n start = 2;\n end = start + middlePages - 1;\n }\n if (end > totalPages - 1) {\n end = totalPages - 1;\n start = end - middlePages + 1;\n }\n }\n\n // Add left ellipsis if needed\n if (start > 2) {\n pages.push({ type: 'ellipsis', value: 'ellipsis-left' });\n }\n\n // Add middle pages\n for (let i = start; i <= end; i++) {\n pages.push({ type: 'page', value: i });\n }\n\n // Add right ellipsis if needed\n if (end < totalPages - 1) {\n pages.push({ type: 'ellipsis', value: 'ellipsis-right' });\n }\n\n // Last page\n pages.push({ type: 'page', value: totalPages });\n\n return pages;\n }\n}\n"]}
@@ -18,7 +18,7 @@ export const MIN_THUMB_CLASSES = [
18
18
  export const MAX_THUMB_CLASSES = [
19
19
  ...SHARED_THUMB_CLASSES,
20
20
  '[&::-webkit-slider-thumb]:-mt-1',
21
- '[&::-webkit-slider-runnable-track]:h-1 [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-[image:linear-gradient(to_right,var(--muted)_var(--min-percent),var(--primary)_var(--min-percent)_var(--max-percent),var(--muted)_var(--max-percent))]',
22
- '[&::-moz-range-track]:h-1 [&::-moz-range-track]:rounded-full [&::-moz-range-track]:bg-[image:linear-gradient(to_right,var(--muted)_var(--min-percent),var(--primary)_var(--min-percent)_var(--max-percent),var(--muted)_var(--max-percent))]',
21
+ '[&::-webkit-slider-runnable-track]:h-1 [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-[linear-gradient(to_right,var(--muted)_var(--min-percent),var(--primary)_var(--min-percent)_var(--max-percent),var(--muted)_var(--max-percent))]',
22
+ '[&::-moz-range-track]:h-1 [&::-moz-range-track]:rounded-full [&::-moz-range-track]:bg-[linear-gradient(to_right,var(--muted)_var(--min-percent),var(--primary)_var(--min-percent)_var(--max-percent),var(--muted)_var(--max-percent))]',
23
23
  ];
24
24
  //# sourceMappingURL=range-slider-thumb-base.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"range-slider-thumb-base.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/range-slider/range-slider-thumb-base.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG;IAC3B,gGAAgG;IAChG,kDAAkD;IAClD,qRAAqR;IACrR,sFAAsF;IACtF,yPAAyP;IACzP,kFAAkF;IAClF,yHAAyH;IACzH,0FAA0F;CAClF,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,GAAG,oBAAoB;IACvB,MAAM;IACN,mCAAmC;IACnC,6IAA6I;IAC7I,gEAAgE;CACxD,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,GAAG,oBAAoB;IACvB,iCAAiC;IACjC,qRAAqR;IACrR,8OAA8O;CACtO,CAAC","sourcesContent":["const SHARED_THUMB_CLASSES = [\n 'pointer-events-none absolute top-0 h-full w-full cursor-pointer appearance-none bg-transparent',\n 'disabled:pointer-events-none disabled:opacity-50',\n '[&::-webkit-slider-thumb]:pointer-events-auto [&::-webkit-slider-thumb]:size-3 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-0 [&::-webkit-slider-thumb]:bg-primary [&::-webkit-slider-thumb]:transition-shadow',\n '[&::-webkit-slider-thumb:hover]:shadow-[0_0_0_3px_oklch(from_var(--ring)_l_c_h/0.5)]',\n '[&::-moz-range-thumb]:pointer-events-auto [&::-moz-range-thumb]:size-3 [&::-moz-range-thumb]:appearance-none [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-0 [&::-moz-range-thumb]:bg-primary [&::-moz-range-thumb]:transition-shadow',\n '[&::-moz-range-thumb:hover]:shadow-[0_0_0_3px_oklch(from_var(--ring)_l_c_h/0.5)]',\n 'focus-visible:outline-none [&:focus-visible::-webkit-slider-thumb]:shadow-[0_0_0_3px_oklch(from_var(--ring)_l_c_h/0.5)]',\n '[&:focus-visible::-moz-range-thumb]:shadow-[0_0_0_3px_oklch(from_var(--ring)_l_c_h/0.5)]',\n] as const;\n\nexport const MIN_THUMB_CLASSES = [\n ...SHARED_THUMB_CLASSES,\n 'z-10',\n '[&::-webkit-slider-thumb]:-mt-1.5',\n '[&::-webkit-slider-runnable-track]:appearance-none [&::-webkit-slider-runnable-track]:h-0 [&::-webkit-slider-runnable-track]:bg-transparent',\n '[&::-moz-range-track]:h-0 [&::-moz-range-track]:bg-transparent',\n] as const;\n\nexport const MAX_THUMB_CLASSES = [\n ...SHARED_THUMB_CLASSES,\n '[&::-webkit-slider-thumb]:-mt-1',\n '[&::-webkit-slider-runnable-track]:h-1 [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-[image:linear-gradient(to_right,var(--muted)_var(--min-percent),var(--primary)_var(--min-percent)_var(--max-percent),var(--muted)_var(--max-percent))]',\n '[&::-moz-range-track]:h-1 [&::-moz-range-track]:rounded-full [&::-moz-range-track]:bg-[image:linear-gradient(to_right,var(--muted)_var(--min-percent),var(--primary)_var(--min-percent)_var(--max-percent),var(--muted)_var(--max-percent))]',\n] as const;\n"]}
1
+ {"version":3,"file":"range-slider-thumb-base.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/range-slider/range-slider-thumb-base.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG;IAC3B,gGAAgG;IAChG,kDAAkD;IAClD,qRAAqR;IACrR,sFAAsF;IACtF,yPAAyP;IACzP,kFAAkF;IAClF,yHAAyH;IACzH,0FAA0F;CAClF,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,GAAG,oBAAoB;IACvB,MAAM;IACN,mCAAmC;IACnC,6IAA6I;IAC7I,gEAAgE;CACxD,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,GAAG,oBAAoB;IACvB,iCAAiC;IACjC,+QAA+Q;IAC/Q,wOAAwO;CAChO,CAAC","sourcesContent":["const SHARED_THUMB_CLASSES = [\n 'pointer-events-none absolute top-0 h-full w-full cursor-pointer appearance-none bg-transparent',\n 'disabled:pointer-events-none disabled:opacity-50',\n '[&::-webkit-slider-thumb]:pointer-events-auto [&::-webkit-slider-thumb]:size-3 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-0 [&::-webkit-slider-thumb]:bg-primary [&::-webkit-slider-thumb]:transition-shadow',\n '[&::-webkit-slider-thumb:hover]:shadow-[0_0_0_3px_oklch(from_var(--ring)_l_c_h/0.5)]',\n '[&::-moz-range-thumb]:pointer-events-auto [&::-moz-range-thumb]:size-3 [&::-moz-range-thumb]:appearance-none [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-0 [&::-moz-range-thumb]:bg-primary [&::-moz-range-thumb]:transition-shadow',\n '[&::-moz-range-thumb:hover]:shadow-[0_0_0_3px_oklch(from_var(--ring)_l_c_h/0.5)]',\n 'focus-visible:outline-none [&:focus-visible::-webkit-slider-thumb]:shadow-[0_0_0_3px_oklch(from_var(--ring)_l_c_h/0.5)]',\n '[&:focus-visible::-moz-range-thumb]:shadow-[0_0_0_3px_oklch(from_var(--ring)_l_c_h/0.5)]',\n] as const;\n\nexport const MIN_THUMB_CLASSES = [\n ...SHARED_THUMB_CLASSES,\n 'z-10',\n '[&::-webkit-slider-thumb]:-mt-1.5',\n '[&::-webkit-slider-runnable-track]:appearance-none [&::-webkit-slider-runnable-track]:h-0 [&::-webkit-slider-runnable-track]:bg-transparent',\n '[&::-moz-range-track]:h-0 [&::-moz-range-track]:bg-transparent',\n] as const;\n\nexport const MAX_THUMB_CLASSES = [\n ...SHARED_THUMB_CLASSES,\n '[&::-webkit-slider-thumb]:-mt-1',\n '[&::-webkit-slider-runnable-track]:h-1 [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-[linear-gradient(to_right,var(--muted)_var(--min-percent),var(--primary)_var(--min-percent)_var(--max-percent),var(--muted)_var(--max-percent))]',\n '[&::-moz-range-track]:h-1 [&::-moz-range-track]:rounded-full [&::-moz-range-track]:bg-[linear-gradient(to_right,var(--muted)_var(--min-percent),var(--primary)_var(--min-percent)_var(--max-percent),var(--muted)_var(--max-percent))]',\n] as const;\n"]}
@@ -0,0 +1,6 @@
1
+ export * from './resizable.types';
2
+ export * from './resizable-panel-group';
3
+ export * from './resizable-panel';
4
+ export * from './resizable-handle';
5
+ export * from './resizable-handle-indicator';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/ui/src/lib/components/resizable/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC","sourcesContent":["export * from './resizable.types';\nexport * from './resizable-panel-group';\nexport * from './resizable-panel';\nexport * from './resizable-handle';\nexport * from './resizable-handle-indicator';\n"]}