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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/confirm-popover/src/styles/confirm-popover.css +20 -0
  2. package/drag-drop/src/styles/_vars.css +28 -0
  3. package/drag-drop/src/styles/drag-drop.css +132 -0
  4. package/fesm2022/frame-ui-ng-components-accordion.mjs +26 -21
  5. package/fesm2022/frame-ui-ng-components-accordion.mjs.map +1 -1
  6. package/fesm2022/frame-ui-ng-components-alert.mjs +4 -0
  7. package/fesm2022/frame-ui-ng-components-alert.mjs.map +1 -1
  8. package/fesm2022/frame-ui-ng-components-avatar.mjs +7 -0
  9. package/fesm2022/frame-ui-ng-components-avatar.mjs.map +1 -1
  10. package/fesm2022/frame-ui-ng-components-badge.mjs +4 -0
  11. package/fesm2022/frame-ui-ng-components-badge.mjs.map +1 -1
  12. package/fesm2022/frame-ui-ng-components-breadcrumb.mjs +13 -6
  13. package/fesm2022/frame-ui-ng-components-breadcrumb.mjs.map +1 -1
  14. package/fesm2022/frame-ui-ng-components-button-group.mjs +1 -0
  15. package/fesm2022/frame-ui-ng-components-button-group.mjs.map +1 -1
  16. package/fesm2022/frame-ui-ng-components-button.mjs +5 -0
  17. package/fesm2022/frame-ui-ng-components-button.mjs.map +1 -1
  18. package/fesm2022/frame-ui-ng-components-calendar.mjs +4 -0
  19. package/fesm2022/frame-ui-ng-components-calendar.mjs.map +1 -1
  20. package/fesm2022/frame-ui-ng-components-card.mjs +15 -15
  21. package/fesm2022/frame-ui-ng-components-card.mjs.map +1 -1
  22. package/fesm2022/frame-ui-ng-components-carousel.mjs +33 -16
  23. package/fesm2022/frame-ui-ng-components-carousel.mjs.map +1 -1
  24. package/fesm2022/frame-ui-ng-components-checkbox.mjs +7 -9
  25. package/fesm2022/frame-ui-ng-components-checkbox.mjs.map +1 -1
  26. package/fesm2022/frame-ui-ng-components-collapsible.mjs +24 -23
  27. package/fesm2022/frame-ui-ng-components-collapsible.mjs.map +1 -1
  28. package/fesm2022/frame-ui-ng-components-combobox.mjs +66 -18
  29. package/fesm2022/frame-ui-ng-components-combobox.mjs.map +1 -1
  30. package/fesm2022/frame-ui-ng-components-command.mjs +47 -16
  31. package/fesm2022/frame-ui-ng-components-command.mjs.map +1 -1
  32. package/fesm2022/frame-ui-ng-components-confirm-modal.mjs +3 -0
  33. package/fesm2022/frame-ui-ng-components-confirm-modal.mjs.map +1 -1
  34. package/fesm2022/frame-ui-ng-components-confirm-popover.mjs +423 -0
  35. package/fesm2022/frame-ui-ng-components-confirm-popover.mjs.map +1 -0
  36. package/fesm2022/frame-ui-ng-components-context-menu.mjs +71 -45
  37. package/fesm2022/frame-ui-ng-components-context-menu.mjs.map +1 -1
  38. package/fesm2022/frame-ui-ng-components-date-picker.mjs +3 -0
  39. package/fesm2022/frame-ui-ng-components-date-picker.mjs.map +1 -1
  40. package/fesm2022/frame-ui-ng-components-drag-drop.mjs +293 -0
  41. package/fesm2022/frame-ui-ng-components-drag-drop.mjs.map +1 -0
  42. package/fesm2022/frame-ui-ng-components-dropdown-menu.mjs +73 -36
  43. package/fesm2022/frame-ui-ng-components-dropdown-menu.mjs.map +1 -1
  44. package/fesm2022/frame-ui-ng-components-empty.mjs +6 -0
  45. package/fesm2022/frame-ui-ng-components-empty.mjs.map +1 -1
  46. package/fesm2022/frame-ui-ng-components-field.mjs +21 -12
  47. package/fesm2022/frame-ui-ng-components-field.mjs.map +1 -1
  48. package/fesm2022/frame-ui-ng-components-forms.mjs +1 -0
  49. package/fesm2022/frame-ui-ng-components-forms.mjs.map +1 -1
  50. package/fesm2022/frame-ui-ng-components-hover-card.mjs +49 -43
  51. package/fesm2022/frame-ui-ng-components-hover-card.mjs.map +1 -1
  52. package/fesm2022/frame-ui-ng-components-input-otp.mjs +5 -0
  53. package/fesm2022/frame-ui-ng-components-input-otp.mjs.map +1 -1
  54. package/fesm2022/frame-ui-ng-components-input.mjs +13 -0
  55. package/fesm2022/frame-ui-ng-components-input.mjs.map +1 -1
  56. package/fesm2022/frame-ui-ng-components-item.mjs +10 -0
  57. package/fesm2022/frame-ui-ng-components-item.mjs.map +1 -1
  58. package/fesm2022/frame-ui-ng-components-menubar.mjs +15 -0
  59. package/fesm2022/frame-ui-ng-components-menubar.mjs.map +1 -1
  60. package/fesm2022/frame-ui-ng-components-modal.mjs +128 -114
  61. package/fesm2022/frame-ui-ng-components-modal.mjs.map +1 -1
  62. package/fesm2022/frame-ui-ng-components-navigation-menu.mjs +14 -0
  63. package/fesm2022/frame-ui-ng-components-navigation-menu.mjs.map +1 -1
  64. package/fesm2022/frame-ui-ng-components-pagination.mjs +8 -0
  65. package/fesm2022/frame-ui-ng-components-pagination.mjs.map +1 -1
  66. package/fesm2022/frame-ui-ng-components-popover.mjs +63 -51
  67. package/fesm2022/frame-ui-ng-components-popover.mjs.map +1 -1
  68. package/fesm2022/frame-ui-ng-components-progress.mjs +2 -0
  69. package/fesm2022/frame-ui-ng-components-progress.mjs.map +1 -1
  70. package/fesm2022/frame-ui-ng-components-radio-group.mjs +5 -0
  71. package/fesm2022/frame-ui-ng-components-radio-group.mjs.map +1 -1
  72. package/fesm2022/frame-ui-ng-components-resizable.mjs +6 -0
  73. package/fesm2022/frame-ui-ng-components-resizable.mjs.map +1 -1
  74. package/fesm2022/frame-ui-ng-components-select.mjs +62 -14
  75. package/fesm2022/frame-ui-ng-components-select.mjs.map +1 -1
  76. package/fesm2022/frame-ui-ng-components-separator.mjs +1 -0
  77. package/fesm2022/frame-ui-ng-components-separator.mjs.map +1 -1
  78. package/fesm2022/frame-ui-ng-components-sheet.mjs +99 -88
  79. package/fesm2022/frame-ui-ng-components-sheet.mjs.map +1 -1
  80. package/fesm2022/frame-ui-ng-components-sidebar.mjs +27 -12
  81. package/fesm2022/frame-ui-ng-components-sidebar.mjs.map +1 -1
  82. package/fesm2022/frame-ui-ng-components-skeleton.mjs +1 -0
  83. package/fesm2022/frame-ui-ng-components-skeleton.mjs.map +1 -1
  84. package/fesm2022/frame-ui-ng-components-slider.mjs +29 -16
  85. package/fesm2022/frame-ui-ng-components-slider.mjs.map +1 -1
  86. package/fesm2022/frame-ui-ng-components-spinner.mjs +1 -0
  87. package/fesm2022/frame-ui-ng-components-spinner.mjs.map +1 -1
  88. package/fesm2022/frame-ui-ng-components-switch.mjs +6 -0
  89. package/fesm2022/frame-ui-ng-components-switch.mjs.map +1 -1
  90. package/fesm2022/frame-ui-ng-components-table.mjs +76 -50
  91. package/fesm2022/frame-ui-ng-components-table.mjs.map +1 -1
  92. package/fesm2022/frame-ui-ng-components-tabs.mjs +4 -0
  93. package/fesm2022/frame-ui-ng-components-tabs.mjs.map +1 -1
  94. package/fesm2022/frame-ui-ng-components-textarea.mjs +1 -0
  95. package/fesm2022/frame-ui-ng-components-textarea.mjs.map +1 -1
  96. package/fesm2022/frame-ui-ng-components-toast.mjs +2 -0
  97. package/fesm2022/frame-ui-ng-components-toast.mjs.map +1 -1
  98. package/fesm2022/frame-ui-ng-components-toggle.mjs +23 -16
  99. package/fesm2022/frame-ui-ng-components-toggle.mjs.map +1 -1
  100. package/fesm2022/frame-ui-ng-components-tooltip.mjs +30 -25
  101. package/fesm2022/frame-ui-ng-components-tooltip.mjs.map +1 -1
  102. package/fesm2022/frame-ui-ng-components-virtual-scroll.mjs +26 -8
  103. package/fesm2022/frame-ui-ng-components-virtual-scroll.mjs.map +1 -1
  104. package/fesm2022/frame-ui-ng-components.mjs +1387 -552
  105. package/fesm2022/frame-ui-ng-components.mjs.map +1 -1
  106. package/package.json +10 -2
  107. package/popover/src/styles/popover.css +106 -101
  108. package/src/styles/components.css +6 -4
  109. package/styles/components.css +6 -4
  110. package/styles.css +6 -4
  111. package/types/frame-ui-ng-components-accordion.d.ts +11 -4
  112. package/types/frame-ui-ng-components-alert.d.ts +4 -0
  113. package/types/frame-ui-ng-components-avatar.d.ts +7 -0
  114. package/types/frame-ui-ng-components-badge.d.ts +4 -0
  115. package/types/frame-ui-ng-components-breadcrumb.d.ts +7 -0
  116. package/types/frame-ui-ng-components-button-group.d.ts +1 -0
  117. package/types/frame-ui-ng-components-button.d.ts +5 -0
  118. package/types/frame-ui-ng-components-calendar.d.ts +1 -0
  119. package/types/frame-ui-ng-components-card.d.ts +8 -3
  120. package/types/frame-ui-ng-components-carousel.d.ts +11 -2
  121. package/types/frame-ui-ng-components-checkbox.d.ts +3 -2
  122. package/types/frame-ui-ng-components-collapsible.d.ts +9 -4
  123. package/types/frame-ui-ng-components-combobox.d.ts +32 -3
  124. package/types/frame-ui-ng-components-command.d.ts +26 -4
  125. package/types/frame-ui-ng-components-confirm-modal.d.ts +2 -0
  126. package/types/frame-ui-ng-components-confirm-popover.d.ts +87 -0
  127. package/types/frame-ui-ng-components-context-menu.d.ts +29 -10
  128. package/types/frame-ui-ng-components-date-picker.d.ts +1 -0
  129. package/types/frame-ui-ng-components-drag-drop.d.ts +103 -0
  130. package/types/frame-ui-ng-components-dropdown-menu.d.ts +32 -9
  131. package/types/frame-ui-ng-components-empty.d.ts +6 -0
  132. package/types/frame-ui-ng-components-field.d.ts +9 -0
  133. package/types/frame-ui-ng-components-forms.d.ts +1 -0
  134. package/types/frame-ui-ng-components-hover-card.d.ts +8 -2
  135. package/types/frame-ui-ng-components-input-otp.d.ts +4 -0
  136. package/types/frame-ui-ng-components-input.d.ts +13 -0
  137. package/types/frame-ui-ng-components-item.d.ts +10 -0
  138. package/types/frame-ui-ng-components-menubar.d.ts +15 -0
  139. package/types/frame-ui-ng-components-modal.d.ts +12 -0
  140. package/types/frame-ui-ng-components-navigation-menu.d.ts +14 -0
  141. package/types/frame-ui-ng-components-pagination.d.ts +8 -0
  142. package/types/frame-ui-ng-components-popover.d.ts +14 -2
  143. package/types/frame-ui-ng-components-progress.d.ts +2 -0
  144. package/types/frame-ui-ng-components-radio-group.d.ts +5 -0
  145. package/types/frame-ui-ng-components-resizable.d.ts +3 -0
  146. package/types/frame-ui-ng-components-select.d.ts +23 -2
  147. package/types/frame-ui-ng-components-separator.d.ts +1 -0
  148. package/types/frame-ui-ng-components-sheet.d.ts +11 -0
  149. package/types/frame-ui-ng-components-sidebar.d.ts +21 -0
  150. package/types/frame-ui-ng-components-skeleton.d.ts +1 -0
  151. package/types/frame-ui-ng-components-slider.d.ts +5 -2
  152. package/types/frame-ui-ng-components-spinner.d.ts +1 -0
  153. package/types/frame-ui-ng-components-switch.d.ts +6 -0
  154. package/types/frame-ui-ng-components-table.d.ts +26 -0
  155. package/types/frame-ui-ng-components-tabs.d.ts +4 -0
  156. package/types/frame-ui-ng-components-textarea.d.ts +1 -0
  157. package/types/frame-ui-ng-components-toast.d.ts +2 -0
  158. package/types/frame-ui-ng-components-toggle.d.ts +8 -2
  159. package/types/frame-ui-ng-components-tooltip.d.ts +6 -2
  160. package/types/frame-ui-ng-components-virtual-scroll.d.ts +11 -2
  161. package/types/frame-ui-ng-components.d.ts +492 -76
@@ -1,6 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, Directive, Component, NgModule } from '@angular/core';
3
3
 
4
+ /** Breadcrumb navigation landmark. */
4
5
  class FrBreadcrumb {
5
6
  ariaLabel = input('breadcrumb', { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
6
7
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrBreadcrumb, deps: [], target: i0.ɵɵFactoryTarget.Directive });
@@ -16,6 +17,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
16
17
  },
17
18
  }]
18
19
  }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
20
+ /** List slot for breadcrumb. */
19
21
  class FrBreadcrumbList {
20
22
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrBreadcrumbList, deps: [], target: i0.ɵɵFactoryTarget.Directive });
21
23
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrBreadcrumbList, isStandalone: true, selector: "ol[frBreadcrumbList], ul[frBreadcrumbList], [frBreadcrumbList]", host: { classAttribute: "frame-breadcrumb__list" }, ngImport: i0 });
@@ -29,6 +31,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
29
31
  },
30
32
  }]
31
33
  }] });
34
+ /** Item slot for breadcrumb. */
32
35
  class FrBreadcrumbItem {
33
36
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrBreadcrumbItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
34
37
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrBreadcrumbItem, isStandalone: true, selector: "li[frBreadcrumbItem], [frBreadcrumbItem]", host: { classAttribute: "frame-breadcrumb__item" }, ngImport: i0 });
@@ -42,6 +45,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
42
45
  },
43
46
  }]
44
47
  }] });
48
+ /** Navigable link inside a breadcrumb item. */
45
49
  class FrBreadcrumbLink {
46
50
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrBreadcrumbLink, deps: [], target: i0.ɵɵFactoryTarget.Directive });
47
51
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrBreadcrumbLink, isStandalone: true, selector: "a[frBreadcrumbLink], [frBreadcrumbLink]", host: { classAttribute: "frame-breadcrumb__link" }, ngImport: i0 });
@@ -55,6 +59,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
55
59
  },
56
60
  }]
57
61
  }] });
62
+ /** Page slot for breadcrumb. */
58
63
  class FrBreadcrumbPage {
59
64
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrBreadcrumbPage, deps: [], target: i0.ɵɵFactoryTarget.Directive });
60
65
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrBreadcrumbPage, isStandalone: true, selector: "[frBreadcrumbPage]", host: { attributes: { "aria-current": "page" }, classAttribute: "frame-breadcrumb__page" }, ngImport: i0 });
@@ -69,6 +74,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
69
74
  },
70
75
  }]
71
76
  }] });
77
+ /** Separator slot for breadcrumb. */
72
78
  class FrBreadcrumbSeparator {
73
79
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrBreadcrumbSeparator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
74
80
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrBreadcrumbSeparator, isStandalone: true, selector: "[frBreadcrumbSeparator]", host: { attributes: { "aria-hidden": "true", "role": "presentation" }, classAttribute: "frame-breadcrumb__separator" }, ngImport: i0 });
@@ -84,12 +90,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
84
90
  },
85
91
  }]
86
92
  }] });
93
+ /** Ellipsis slot for breadcrumb. */
87
94
  class FrBreadcrumbEllipsis {
88
95
  label = input('More pages', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
89
96
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrBreadcrumbEllipsis, deps: [], target: i0.ɵɵFactoryTarget.Component });
90
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.16", type: FrBreadcrumbEllipsis, isStandalone: true, selector: "[frBreadcrumbEllipsis], frame-breadcrumb-ellipsis", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "presentation" }, classAttribute: "frame-breadcrumb__ellipsis" }, ngImport: i0, template: `
91
- <span aria-hidden="true">...</span>
92
- <span class="frame-breadcrumb__sr-only">{{ label() }}</span>
97
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.16", type: FrBreadcrumbEllipsis, isStandalone: true, selector: "[frBreadcrumbEllipsis], frame-breadcrumb-ellipsis", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "presentation" }, classAttribute: "frame-breadcrumb__ellipsis" }, ngImport: i0, template: `
98
+ <span aria-hidden="true">...</span>
99
+ <span class="frame-breadcrumb__sr-only">{{ label() }}</span>
93
100
  `, isInline: true });
94
101
  }
95
102
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrBreadcrumbEllipsis, decorators: [{
@@ -100,9 +107,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
100
107
  class: 'frame-breadcrumb__ellipsis',
101
108
  'role': 'presentation',
102
109
  },
103
- template: `
104
- <span aria-hidden="true">...</span>
105
- <span class="frame-breadcrumb__sr-only">{{ label() }}</span>
110
+ template: `
111
+ <span aria-hidden="true">...</span>
112
+ <span class="frame-breadcrumb__sr-only">{{ label() }}</span>
106
113
  `,
107
114
  }]
108
115
  }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"frame-ui-ng-components-breadcrumb.mjs","sources":["../../../projects/components/breadcrumb/src/breadcrumb.ts","../../../projects/components/breadcrumb/breadcrumb.module.ts","../../../projects/components/breadcrumb/frame-ui-ng-components-breadcrumb.ts"],"sourcesContent":["import { Component, Directive, input } from '@angular/core';\n\n@Directive({\n selector: 'nav[frBreadcrumb], [frBreadcrumb]',\n host: {\n class: 'frame-breadcrumb',\n '[attr.aria-label]': 'ariaLabel()',\n },\n})\nexport class FrBreadcrumb {\n readonly ariaLabel = input('breadcrumb', { alias: 'aria-label' });\n}\n\n@Directive({\n selector: 'ol[frBreadcrumbList], ul[frBreadcrumbList], [frBreadcrumbList]',\n host: {\n class: 'frame-breadcrumb__list',\n },\n})\nexport class FrBreadcrumbList {}\n\n@Directive({\n selector: 'li[frBreadcrumbItem], [frBreadcrumbItem]',\n host: {\n class: 'frame-breadcrumb__item',\n },\n})\nexport class FrBreadcrumbItem {}\n\n@Directive({\n selector: 'a[frBreadcrumbLink], [frBreadcrumbLink]',\n host: {\n class: 'frame-breadcrumb__link',\n },\n})\nexport class FrBreadcrumbLink {}\n\n@Directive({\n selector: '[frBreadcrumbPage]',\n host: {\n class: 'frame-breadcrumb__page',\n 'aria-current': 'page',\n },\n})\nexport class FrBreadcrumbPage {}\n\n@Directive({\n selector: '[frBreadcrumbSeparator]',\n host: {\n class: 'frame-breadcrumb__separator',\n 'aria-hidden': 'true',\n 'role': 'presentation',\n },\n})\nexport class FrBreadcrumbSeparator {}\n\n@Component({\n selector: '[frBreadcrumbEllipsis], frame-breadcrumb-ellipsis',\n host: {\n class: 'frame-breadcrumb__ellipsis',\n 'role': 'presentation',\n },\n template: `\n <span aria-hidden=\"true\">...</span>\n <span class=\"frame-breadcrumb__sr-only\">{{ label() }}</span>\n `,\n})\nexport class FrBreadcrumbEllipsis {\n readonly label = input('More pages');\n}\n","import { NgModule } from '@angular/core';\nimport {\n FrBreadcrumb,\n FrBreadcrumbEllipsis,\n FrBreadcrumbItem,\n FrBreadcrumbLink,\n FrBreadcrumbList,\n FrBreadcrumbPage,\n FrBreadcrumbSeparator,\n} from './src/breadcrumb';\n\n@NgModule({\n imports: [\n FrBreadcrumb,\n FrBreadcrumbEllipsis,\n FrBreadcrumbItem,\n FrBreadcrumbLink,\n FrBreadcrumbList,\n FrBreadcrumbPage,\n FrBreadcrumbSeparator,\n ],\n exports: [\n FrBreadcrumb,\n FrBreadcrumbEllipsis,\n FrBreadcrumbItem,\n FrBreadcrumbLink,\n FrBreadcrumbList,\n FrBreadcrumbPage,\n FrBreadcrumbSeparator,\n ],\n})\nexport class FrBreadcrumbModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame-ui-ng-components-breadcrumb.mjs","sources":["../../../projects/components/breadcrumb/src/breadcrumb.ts","../../../projects/components/breadcrumb/breadcrumb.module.ts","../../../projects/components/breadcrumb/frame-ui-ng-components-breadcrumb.ts"],"sourcesContent":["import { Component, Directive, input } from '@angular/core';\r\n\r\n/** Breadcrumb navigation landmark. */\r\n@Directive({\r\n selector: 'nav[frBreadcrumb], [frBreadcrumb]',\r\n host: {\r\n class: 'frame-breadcrumb',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n },\r\n})\r\nexport class FrBreadcrumb {\r\n readonly ariaLabel = input('breadcrumb', { alias: 'aria-label' });\r\n}\r\n\r\n/** List slot for breadcrumb. */\r\n@Directive({\r\n selector: 'ol[frBreadcrumbList], ul[frBreadcrumbList], [frBreadcrumbList]',\r\n host: {\r\n class: 'frame-breadcrumb__list',\r\n },\r\n})\r\nexport class FrBreadcrumbList {}\r\n\r\n/** Item slot for breadcrumb. */\r\n@Directive({\r\n selector: 'li[frBreadcrumbItem], [frBreadcrumbItem]',\r\n host: {\r\n class: 'frame-breadcrumb__item',\r\n },\r\n})\r\nexport class FrBreadcrumbItem {}\r\n\r\n/** Navigable link inside a breadcrumb item. */\r\n@Directive({\r\n selector: 'a[frBreadcrumbLink], [frBreadcrumbLink]',\r\n host: {\r\n class: 'frame-breadcrumb__link',\r\n },\r\n})\r\nexport class FrBreadcrumbLink {}\r\n\r\n/** Page slot for breadcrumb. */\r\n@Directive({\r\n selector: '[frBreadcrumbPage]',\r\n host: {\r\n class: 'frame-breadcrumb__page',\r\n 'aria-current': 'page',\r\n },\r\n})\r\nexport class FrBreadcrumbPage {}\r\n\r\n/** Separator slot for breadcrumb. */\r\n@Directive({\r\n selector: '[frBreadcrumbSeparator]',\r\n host: {\r\n class: 'frame-breadcrumb__separator',\r\n 'aria-hidden': 'true',\r\n 'role': 'presentation',\r\n },\r\n})\r\nexport class FrBreadcrumbSeparator {}\r\n\r\n/** Ellipsis slot for breadcrumb. */\r\n@Component({\r\n selector: '[frBreadcrumbEllipsis], frame-breadcrumb-ellipsis',\r\n host: {\r\n class: 'frame-breadcrumb__ellipsis',\r\n 'role': 'presentation',\r\n },\r\n template: `\r\n <span aria-hidden=\"true\">...</span>\r\n <span class=\"frame-breadcrumb__sr-only\">{{ label() }}</span>\r\n `,\r\n})\r\nexport class FrBreadcrumbEllipsis {\r\n readonly label = input('More pages');\r\n}\r\n\r\n","import { NgModule } from '@angular/core';\nimport {\n FrBreadcrumb,\n FrBreadcrumbEllipsis,\n FrBreadcrumbItem,\n FrBreadcrumbLink,\n FrBreadcrumbList,\n FrBreadcrumbPage,\n FrBreadcrumbSeparator,\n} from './src/breadcrumb';\n\n@NgModule({\n imports: [\n FrBreadcrumb,\n FrBreadcrumbEllipsis,\n FrBreadcrumbItem,\n FrBreadcrumbLink,\n FrBreadcrumbList,\n FrBreadcrumbPage,\n FrBreadcrumbSeparator,\n ],\n exports: [\n FrBreadcrumb,\n FrBreadcrumbEllipsis,\n FrBreadcrumbItem,\n FrBreadcrumbLink,\n FrBreadcrumbList,\n FrBreadcrumbPage,\n FrBreadcrumbSeparator,\n ],\n})\nexport class FrBreadcrumbModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { input, Directive, NgModule } from '@angular/core';
3
3
 
4
4
  const FR_BUTTON_GROUP_ORIENTATIONS = ['horizontal', 'vertical'];
5
+ /** Groups related buttons with shared orientation. */
5
6
  class FrButtonGroup {
6
7
  orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
7
8
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrButtonGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
@@ -1 +1 @@
1
- {"version":3,"file":"frame-ui-ng-components-button-group.mjs","sources":["../../../projects/components/button-group/src/button-group.ts","../../../projects/components/button-group/button-group.module.ts","../../../projects/components/button-group/frame-ui-ng-components-button-group.ts"],"sourcesContent":["import { Directive, input } from '@angular/core';\n\nexport const FR_BUTTON_GROUP_ORIENTATIONS = ['horizontal', 'vertical'] as const;\nexport type FrButtonGroupOrientation = (typeof FR_BUTTON_GROUP_ORIENTATIONS)[number];\n\n@Directive({\n selector: '[frButtonGroup], frame-button-group',\n host: {\n class: 'frame-button-group',\n '[attr.data-orientation]': 'orientation()',\n role: 'group',\n },\n})\nexport class FrButtonGroup {\n readonly orientation = input<FrButtonGroupOrientation>('horizontal');\n}\n","import { NgModule } from '@angular/core';\nimport {\n FrButtonGroup,\n} from './src/button-group';\n\n@NgModule({\n imports: [\n FrButtonGroup,\n ],\n exports: [\n FrButtonGroup,\n ],\n})\nexport class FrButtonGroupModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAEa,4BAA4B,GAAG,CAAC,YAAY,EAAE,UAAU;MAWxD,aAAa,CAAA;AACf,IAAA,WAAW,GAAG,KAAK,CAA2B,YAAY,kFAAC;wGADzD,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBARzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qCAAqC;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,oBAAoB;AAC3B,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,IAAI,EAAE,OAAO;AACd,qBAAA;AACF,iBAAA;;;MCCY,mBAAmB,CAAA;wGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAnB,mBAAmB,EAAA,OAAA,EAAA,CAN5B,aAAa,CAAA,EAAA,OAAA,EAAA,CAGb,aAAa,CAAA,EAAA,CAAA;yGAGJ,mBAAmB,EAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,aAAa;AACd,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,aAAa;AACd,qBAAA;AACF,iBAAA;;;ACZD;;AAEG;;;;"}
1
+ {"version":3,"file":"frame-ui-ng-components-button-group.mjs","sources":["../../../projects/components/button-group/src/button-group.ts","../../../projects/components/button-group/button-group.module.ts","../../../projects/components/button-group/frame-ui-ng-components-button-group.ts"],"sourcesContent":["import { Directive, input } from '@angular/core';\r\n\r\nexport const FR_BUTTON_GROUP_ORIENTATIONS = ['horizontal', 'vertical'] as const;\r\nexport type FrButtonGroupOrientation = (typeof FR_BUTTON_GROUP_ORIENTATIONS)[number];\r\n\r\n/** Groups related buttons with shared orientation. */\r\n@Directive({\r\n selector: '[frButtonGroup], frame-button-group',\r\n host: {\r\n class: 'frame-button-group',\r\n '[attr.data-orientation]': 'orientation()',\r\n role: 'group',\r\n },\r\n})\r\nexport class FrButtonGroup {\r\n readonly orientation = input<FrButtonGroupOrientation>('horizontal');\r\n}\r\n","import { NgModule } from '@angular/core';\nimport {\n FrButtonGroup,\n} from './src/button-group';\n\n@NgModule({\n imports: [\n FrButtonGroup,\n ],\n exports: [\n FrButtonGroup,\n ],\n})\nexport class FrButtonGroupModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAEa,4BAA4B,GAAG,CAAC,YAAY,EAAE,UAAU;AAGrE;MASa,aAAa,CAAA;AACf,IAAA,WAAW,GAAG,KAAK,CAA2B,YAAY,kFAAC;wGADzD,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBARzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qCAAqC;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,oBAAoB;AAC3B,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,IAAI,EAAE,OAAO;AACd,qBAAA;AACF,iBAAA;;;MCAY,mBAAmB,CAAA;wGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAnB,mBAAmB,EAAA,OAAA,EAAA,CAN5B,aAAa,CAAA,EAAA,OAAA,EAAA,CAGb,aAAa,CAAA,EAAA,CAAA;yGAGJ,mBAAmB,EAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,aAAa;AACd,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,aAAa;AACd,qBAAA;AACF,iBAAA;;;ACZD;;AAEG;;;;"}
@@ -10,6 +10,7 @@ const FR_BUTTON_APPEARANCES = [
10
10
  const FR_BUTTON_LOADING_DISPLAYS = ['inline', 'replace'];
11
11
  const FR_BUTTON_RADII = ['full', 'lg', 'md', 'none', 'sm'];
12
12
  const FR_BUTTON_SIZES = ['sm', 'md', 'lg'];
13
+ /** Button host with FrameUI size and appearance variants. */
13
14
  class FrButton {
14
15
  loadingIndicator = contentChild(FrButtonLoading, ...(ngDevMode ? [{ debugName: "loadingIndicator" }] : /* istanbul ignore next */ []));
15
16
  spinnerIndicator = contentChild(FrSpinner, ...(ngDevMode ? [{ debugName: "spinnerIndicator" }] : /* istanbul ignore next */ []));
@@ -45,6 +46,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
45
46
  },
46
47
  }]
47
48
  }], propDecorators: { loadingIndicator: [{ type: i0.ContentChild, args: [i0.forwardRef(() => FrButtonLoading), { isSignal: true }] }], spinnerIndicator: [{ type: i0.ContentChild, args: [i0.forwardRef(() => FrSpinner), { isSignal: true }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], loadingDisplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingDisplay", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
49
+ /** Icon-only button host with square sizing. */
48
50
  class FrIconButton {
49
51
  ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
50
52
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrIconButton, deps: [], target: i0.ɵɵFactoryTarget.Directive });
@@ -67,6 +69,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
67
69
  },
68
70
  }]
69
71
  }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
72
+ /** Icon slot for button. */
70
73
  class FrButtonIcon {
71
74
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrButtonIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
72
75
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrButtonIcon, isStandalone: true, selector: "[frButtonIcon]", host: { attributes: { "aria-hidden": "true" }, classAttribute: "frame-button__icon" }, ngImport: i0 });
@@ -81,6 +84,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
81
84
  },
82
85
  }]
83
86
  }] });
87
+ /** Label slot for button. */
84
88
  class FrButtonLabel {
85
89
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrButtonLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
86
90
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrButtonLabel, isStandalone: true, selector: "[frButtonLabel]", host: { classAttribute: "frame-button__label" }, ngImport: i0 });
@@ -94,6 +98,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
94
98
  },
95
99
  }]
96
100
  }] });
101
+ /** Loading indicator slot for button. */
97
102
  class FrButtonLoading {
98
103
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrButtonLoading, deps: [], target: i0.ɵɵFactoryTarget.Directive });
99
104
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrButtonLoading, isStandalone: true, selector: "[frButtonLoading]", host: { attributes: { "aria-hidden": "true" }, classAttribute: "frame-button__loading" }, ngImport: i0 });
@@ -1 +1 @@
1
- {"version":3,"file":"frame-ui-ng-components-button.mjs","sources":["../../../projects/components/button/src/button.ts","../../../projects/components/button/button.module.ts","../../../projects/components/button/frame-ui-ng-components-button.ts"],"sourcesContent":["import { Directive, booleanAttribute, computed, contentChild, input } from '@angular/core';\r\nimport { FrSpinner } from '@frame-ui-ng/components/spinner';\r\n\r\nexport const FR_BUTTON_APPEARANCES = [\r\n 'ghost',\r\n 'outline',\r\n 'primary',\r\n] as const;\r\nexport const FR_BUTTON_LOADING_DISPLAYS = ['inline', 'replace'] as const;\r\nexport const FR_BUTTON_RADII = ['full', 'lg', 'md', 'none', 'sm'] as const;\r\nexport const FR_BUTTON_SIZES = ['sm', 'md', 'lg'] as const;\r\n\r\nexport type FrButtonAppearance = (typeof FR_BUTTON_APPEARANCES)[number];\r\nexport type FrButtonLoadingDisplay = (typeof FR_BUTTON_LOADING_DISPLAYS)[number];\r\nexport type FrButtonRadius = (typeof FR_BUTTON_RADII)[number];\r\nexport type FrButtonSize = (typeof FR_BUTTON_SIZES)[number];\r\n\r\n@Directive({\r\n selector: 'a[frButton], button[frButton]',\r\n host: {\r\n class: 'frame-button',\r\n '[attr.data-appearance]': 'appearance()',\r\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\r\n '[attr.data-has-custom-loading]': 'hasCustomLoadingIndicator() ? \"\" : null',\r\n '[attr.data-loading]': 'loading() ? \"\" : null',\r\n '[attr.data-loading-display]': 'loadingDisplay()',\r\n '[attr.data-radius]': 'radius()',\r\n '[attr.data-size]': 'size()',\r\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '[attr.disabled]': 'isUnavailable() ? \"\" : null',\r\n '[class.frame-button-disabled]': 'isUnavailable()',\r\n '[class.frame-button-loading]': 'loading()',\r\n },\r\n})\r\nexport class FrButton {\r\n private readonly loadingIndicator = contentChild(FrButtonLoading);\r\n private readonly spinnerIndicator = contentChild(FrSpinner);\r\n\r\n readonly appearance = input<FrButtonAppearance>('primary');\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n readonly loading = input(false, { transform: booleanAttribute });\r\n readonly loadingDisplay = input<FrButtonLoadingDisplay>('replace');\r\n readonly radius = input<FrButtonRadius>('none');\r\n readonly size = input<FrButtonSize>('md');\r\n protected readonly hasCustomLoadingIndicator = computed(\r\n () => !!this.loadingIndicator() || !!this.spinnerIndicator(),\r\n );\r\n protected readonly isUnavailable = computed(() => this.disabled() || this.loading());\r\n}\r\n\r\n@Directive({\r\n selector: 'a[frIconButton], button[frIconButton]',\r\n hostDirectives: [\r\n {\r\n directive: FrButton,\r\n inputs: ['appearance', 'disabled', 'loading', 'loadingDisplay', 'radius', 'size'],\r\n },\r\n ],\r\n host: {\r\n class: 'frame-icon-button',\r\n '[attr.data-icon-button]': '\"\"',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n },\r\n})\r\nexport class FrIconButton {\r\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\r\n}\r\n\r\n@Directive({\r\n selector: '[frButtonIcon]',\r\n host: {\r\n class: 'frame-button__icon',\r\n 'aria-hidden': 'true',\r\n },\r\n})\r\nexport class FrButtonIcon {}\r\n\r\n@Directive({\r\n selector: '[frButtonLabel]',\r\n host: {\r\n class: 'frame-button__label',\r\n },\r\n})\r\nexport class FrButtonLabel {}\r\n\r\n@Directive({\r\n selector: '[frButtonLoading]',\r\n host: {\r\n class: 'frame-button__loading',\r\n 'aria-hidden': 'true',\r\n },\r\n})\r\nexport class FrButtonLoading {}\r\n","import { NgModule } from '@angular/core';\nimport {\n FrButton,\n FrButtonIcon,\n FrButtonLabel,\n FrButtonLoading,\n FrIconButton,\n} from './src/button';\n\n@NgModule({\n imports: [\n FrButton,\n FrButtonIcon,\n FrButtonLabel,\n FrButtonLoading,\n FrIconButton,\n ],\n exports: [\n FrButton,\n FrButtonIcon,\n FrButtonLabel,\n FrButtonLoading,\n FrIconButton,\n ],\n})\nexport class FrButtonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame-ui-ng-components-button.mjs","sources":["../../../projects/components/button/src/button.ts","../../../projects/components/button/button.module.ts","../../../projects/components/button/frame-ui-ng-components-button.ts"],"sourcesContent":["import { Directive, booleanAttribute, computed, contentChild, input } from '@angular/core';\r\nimport { FrSpinner } from '@frame-ui-ng/components/spinner';\r\n\r\nexport const FR_BUTTON_APPEARANCES = [\r\n 'ghost',\r\n 'outline',\r\n 'primary',\r\n] as const;\r\nexport const FR_BUTTON_LOADING_DISPLAYS = ['inline', 'replace'] as const;\r\nexport const FR_BUTTON_RADII = ['full', 'lg', 'md', 'none', 'sm'] as const;\r\nexport const FR_BUTTON_SIZES = ['sm', 'md', 'lg'] as const;\r\n\r\nexport type FrButtonAppearance = (typeof FR_BUTTON_APPEARANCES)[number];\r\nexport type FrButtonLoadingDisplay = (typeof FR_BUTTON_LOADING_DISPLAYS)[number];\r\nexport type FrButtonRadius = (typeof FR_BUTTON_RADII)[number];\r\nexport type FrButtonSize = (typeof FR_BUTTON_SIZES)[number];\r\n\r\n/** Button host with FrameUI size and appearance variants. */\r\n@Directive({\r\n selector: 'a[frButton], button[frButton]',\r\n host: {\r\n class: 'frame-button',\r\n '[attr.data-appearance]': 'appearance()',\r\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\r\n '[attr.data-has-custom-loading]': 'hasCustomLoadingIndicator() ? \"\" : null',\r\n '[attr.data-loading]': 'loading() ? \"\" : null',\r\n '[attr.data-loading-display]': 'loadingDisplay()',\r\n '[attr.data-radius]': 'radius()',\r\n '[attr.data-size]': 'size()',\r\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '[attr.disabled]': 'isUnavailable() ? \"\" : null',\r\n '[class.frame-button-disabled]': 'isUnavailable()',\r\n '[class.frame-button-loading]': 'loading()',\r\n },\r\n})\r\nexport class FrButton {\r\n private readonly loadingIndicator = contentChild(FrButtonLoading);\r\n private readonly spinnerIndicator = contentChild(FrSpinner);\r\n\r\n readonly appearance = input<FrButtonAppearance>('primary');\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n readonly loading = input(false, { transform: booleanAttribute });\r\n readonly loadingDisplay = input<FrButtonLoadingDisplay>('replace');\r\n readonly radius = input<FrButtonRadius>('none');\r\n readonly size = input<FrButtonSize>('md');\r\n protected readonly hasCustomLoadingIndicator = computed(\r\n () => !!this.loadingIndicator() || !!this.spinnerIndicator(),\r\n );\r\n protected readonly isUnavailable = computed(() => this.disabled() || this.loading());\r\n}\r\n\r\n/** Icon-only button host with square sizing. */\r\n@Directive({\r\n selector: 'a[frIconButton], button[frIconButton]',\r\n hostDirectives: [\r\n {\r\n directive: FrButton,\r\n inputs: ['appearance', 'disabled', 'loading', 'loadingDisplay', 'radius', 'size'],\r\n },\r\n ],\r\n host: {\r\n class: 'frame-icon-button',\r\n '[attr.data-icon-button]': '\"\"',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n },\r\n})\r\nexport class FrIconButton {\r\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\r\n}\r\n\r\n/** Icon slot for button. */\r\n@Directive({\r\n selector: '[frButtonIcon]',\r\n host: {\r\n class: 'frame-button__icon',\r\n 'aria-hidden': 'true',\r\n },\r\n})\r\nexport class FrButtonIcon {}\r\n\r\n/** Label slot for button. */\r\n@Directive({\r\n selector: '[frButtonLabel]',\r\n host: {\r\n class: 'frame-button__label',\r\n },\r\n})\r\nexport class FrButtonLabel {}\r\n\r\n/** Loading indicator slot for button. */\r\n@Directive({\r\n selector: '[frButtonLoading]',\r\n host: {\r\n class: 'frame-button__loading',\r\n 'aria-hidden': 'true',\r\n },\r\n})\r\nexport class FrButtonLoading {}\r\n\r\n","import { NgModule } from '@angular/core';\nimport {\n FrButton,\n FrButtonIcon,\n FrButtonLabel,\n FrButtonLoading,\n FrIconButton,\n} from './src/button';\n\n@NgModule({\n imports: [\n FrButton,\n FrButtonIcon,\n FrButtonLabel,\n FrButtonLoading,\n FrIconButton,\n ],\n exports: [\n FrButton,\n FrButtonIcon,\n FrButtonLabel,\n FrButtonLoading,\n FrIconButton,\n ],\n})\nexport class FrButtonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ const VALUE_ACCESSOR = {
8
8
  useExisting: forwardRef(() => FrCalendar),
9
9
  multi: true,
10
10
  };
11
+ /** Calendar control for single-date and range selection. */
11
12
  class FrCalendar {
12
13
  mode = input('single', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
13
14
  captionLayout = input('label', ...(ngDevMode ? [{ debugName: "captionLayout" }] : /* istanbul ignore next */ []));
@@ -152,6 +153,7 @@ class FrCalendar {
152
153
  }
153
154
  resolveActiveDate() {
154
155
  const focused = this.focusedDate();
156
+ // Prefer the roving-focus target, then selection, then today, then first enabled day.
155
157
  if (focused && this.findDay(focused) && !this.isDayDisabled(focused)) {
156
158
  return cloneDate(focused);
157
159
  }
@@ -199,6 +201,7 @@ class FrCalendar {
199
201
  if (this.focusDayElement(date)) {
200
202
  return;
201
203
  }
204
+ // Month navigation may render the target button one tick later.
202
205
  setTimeout(() => {
203
206
  this.focusDayElement(date);
204
207
  });
@@ -217,6 +220,7 @@ class FrCalendar {
217
220
  const start = startOfMonth(monthDate);
218
221
  const gridStart = startOfWeek(start, this.firstDayOfWeek());
219
222
  const weeks = [];
223
+ // Always build a six-week grid so layout height stays stable across months.
220
224
  for (let week = 0; week < 6; week++) {
221
225
  const days = [];
222
226
  for (let dayIndex = 0; dayIndex < 7; dayIndex++) {
@@ -1 +1 @@
1
- {"version":3,"file":"frame-ui-ng-components-calendar.mjs","sources":["../../../projects/components/calendar/src/calendar.ts","../../../projects/components/calendar/calendar.module.ts","../../../projects/components/calendar/frame-ui-ng-components-calendar.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n TemplateRef,\r\n booleanAttribute,\r\n computed,\r\n forwardRef,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nexport type FrCalendarMode = 'single' | 'range';\r\nexport type FrCalendarCaptionLayout = 'label' | 'dropdown';\r\n\r\nexport type FrCalendarDateRange = {\r\n from: Date | null;\r\n to: Date | null;\r\n};\r\n\r\nexport type FrCalendarCellContext = {\r\n date: Date;\r\n day: number;\r\n dateLabel?: string;\r\n disabled: boolean;\r\n disabledDate: boolean;\r\n outside: boolean;\r\n selected: boolean;\r\n today: boolean;\r\n};\r\n\r\nexport type FrCalendarDisabledMatcher = (date: Date) => boolean;\r\n\r\ntype CalendarDay = FrCalendarCellContext & {\r\n key: string;\r\n rangeEnd: boolean;\r\n rangeMiddle: boolean;\r\n rangeStart: boolean;\r\n};\r\n\r\ntype CalendarMonth = {\r\n date: Date;\r\n key: string;\r\n label: string;\r\n weeks: CalendarDay[][];\r\n};\r\n\r\nconst VALUE_ACCESSOR = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => FrCalendar),\r\n multi: true,\r\n};\r\n\r\n@Component({\r\n selector: 'frame-calendar',\r\n imports: [NgTemplateOutlet],\r\n providers: [VALUE_ACCESSOR],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'frame-calendar',\r\n '[attr.data-mode]': 'mode()',\r\n '[attr.data-caption-layout]': 'captionLayout()',\r\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\r\n '[attr.dir]': 'dir()',\r\n },\r\n template: `\r\n <div class=\"frame-calendar__header\">\r\n <button\r\n class=\"frame-calendar__nav-button\"\r\n type=\"button\"\r\n [disabled]=\"isDisabled()\"\r\n (click)=\"previousMonth()\"\r\n [attr.aria-label]=\"previousMonthLabel()\"\r\n >\r\n @if (previousMonthTemplate(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n } @else {\r\n {{ previousMonthIcon() }}\r\n }\r\n </button>\r\n\r\n @if (captionLayout() === 'dropdown') {\r\n <div class=\"frame-calendar__caption-controls\">\r\n <select\r\n class=\"frame-calendar__select\"\r\n [disabled]=\"isDisabled()\"\r\n [value]=\"currentMonth().getMonth()\"\r\n aria-label=\"Month\"\r\n (change)=\"setMonth($any($event.target).value)\"\r\n >\r\n @for (month of monthOptions(); track month.value) {\r\n <option [value]=\"month.value\" [selected]=\"month.value === currentMonth().getMonth()\">\r\n {{ month.label }}\r\n </option>\r\n }\r\n </select>\r\n\r\n <select\r\n class=\"frame-calendar__select\"\r\n [disabled]=\"isDisabled()\"\r\n [value]=\"currentMonth().getFullYear()\"\r\n aria-label=\"Year\"\r\n (change)=\"setYear($any($event.target).value)\"\r\n >\r\n @for (year of yearOptions(); track year) {\r\n <option [value]=\"year\" [selected]=\"year === currentMonth().getFullYear()\">\r\n {{ year }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n } @else {\r\n <div class=\"frame-calendar__caption\" aria-live=\"polite\">\r\n {{ monthLabel(currentMonth()) }}\r\n </div>\r\n }\r\n\r\n <button\r\n class=\"frame-calendar__nav-button\"\r\n type=\"button\"\r\n [disabled]=\"isDisabled()\"\r\n (click)=\"nextMonth()\"\r\n [attr.aria-label]=\"nextMonthLabel()\"\r\n >\r\n @if (nextMonthTemplate(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n } @else {\r\n {{ nextMonthIcon() }}\r\n }\r\n </button>\r\n </div>\r\n\r\n <div class=\"frame-calendar__months\">\r\n @for (month of months(); track month.key) {\r\n <section class=\"frame-calendar__month\" [attr.aria-label]=\"month.label\">\r\n @if (numberOfMonths() > 1 || captionLayout() === 'dropdown') {\r\n <h3 class=\"frame-calendar__month-caption\">{{ month.label }}</h3>\r\n }\r\n\r\n <table class=\"frame-calendar__table\" role=\"grid\" [attr.aria-readonly]=\"true\">\r\n <thead>\r\n <tr>\r\n @if (showWeekNumber()) {\r\n <th class=\"frame-calendar__week-number-header\" scope=\"col\">Wk</th>\r\n }\r\n @for (weekday of weekdayLabels(); track weekday) {\r\n <th class=\"frame-calendar__weekday\" scope=\"col\">{{ weekday }}</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (week of month.weeks; track week[0].key) {\r\n <tr>\r\n @if (showWeekNumber()) {\r\n <td class=\"frame-calendar__week-number\">{{ weekNumber(week[0].date) }}</td>\r\n }\r\n @for (day of week; track day.key) {\r\n <td\r\n class=\"frame-calendar__cell\"\r\n [attr.data-outside]=\"day.outside ? '' : null\"\r\n [attr.data-selected]=\"day.selected ? '' : null\"\r\n [attr.data-range-start]=\"day.rangeStart ? '' : null\"\r\n [attr.data-range-middle]=\"day.rangeMiddle ? '' : null\"\r\n [attr.data-range-end]=\"day.rangeEnd ? '' : null\"\r\n [attr.data-today]=\"day.today ? '' : null\"\r\n [attr.data-disabled-date]=\"day.disabledDate ? '' : null\"\r\n >\r\n <button\r\n class=\"frame-calendar__day\"\r\n type=\"button\"\r\n [disabled]=\"isDisabled() || day.disabled\"\r\n [attr.data-date]=\"day.key\"\r\n [attr.tabindex]=\"dayTabIndex(day)\"\r\n [attr.aria-label]=\"dayLabel(day.date)\"\r\n [attr.aria-pressed]=\"day.selected ? 'true' : 'false'\"\r\n [attr.aria-selected]=\"day.selected ? 'true' : 'false'\"\r\n [attr.aria-current]=\"day.today ? 'date' : null\"\r\n (click)=\"selectDay(day)\"\r\n (focus)=\"focusedDate.set(day.date)\"\r\n (keydown)=\"handleDayKeydown($event, day)\"\r\n >\r\n @if (cellTemplate(); as template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"template\"\r\n [ngTemplateOutletContext]=\"day\"\r\n />\r\n } @else {\r\n <span class=\"frame-calendar__day-number\">{{ day.day }}</span>\r\n @if (day.dateLabel) {\r\n <span class=\"frame-calendar__day-meta\">{{ day.dateLabel }}</span>\r\n }\r\n }\r\n </button>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </section>\r\n }\r\n </div>\r\n `,\r\n})\r\nexport class FrCalendar implements ControlValueAccessor {\r\n readonly mode = input<FrCalendarMode>('single');\r\n readonly captionLayout = input<FrCalendarCaptionLayout>('label');\r\n readonly numberOfMonths = input(1);\r\n readonly firstDayOfWeek = input(0);\r\n readonly locale = input('en-US');\r\n readonly timeZone = input<string | undefined>(undefined);\r\n readonly dir = input<'ltr' | 'rtl'>('ltr');\r\n readonly fromYear = input(new Date().getFullYear() - 100);\r\n readonly toYear = input(new Date().getFullYear() + 20);\r\n readonly showOutsideDays = input(true, { transform: booleanAttribute });\r\n readonly showWeekNumber = input(false, { transform: booleanAttribute });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n readonly disabledDates = input<Date[]>([]);\r\n readonly dateLabels = input<Record<string, string>>({});\r\n readonly disabledMatcher = input<FrCalendarDisabledMatcher | null>(null);\r\n readonly cellTemplate = input<TemplateRef<FrCalendarCellContext> | null>(null);\r\n readonly previousMonthTemplate = input<TemplateRef<unknown> | null>(null);\r\n readonly nextMonthTemplate = input<TemplateRef<unknown> | null>(null);\r\n readonly previousMonthIcon = input('‹');\r\n readonly nextMonthIcon = input('›');\r\n readonly previousMonthLabel = input('Previous month');\r\n readonly nextMonthLabel = input('Next month');\r\n readonly month = input<Date | null | undefined>(undefined);\r\n readonly selected = input<Date | FrCalendarDateRange | null | undefined>(undefined);\r\n\r\n readonly selectedChange = output<Date | FrCalendarDateRange | null>();\r\n readonly monthChange = output<Date>();\r\n\r\n readonly focusedDate = signal<Date | null>(null);\r\n private readonly navigatedMonth = signal<Date | null>(null);\r\n private readonly internalValue = signal<Date | FrCalendarDateRange | null>(null);\r\n private readonly cvaDisabled = signal(false);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n readonly currentMonth = computed(() =>\r\n startOfMonth(this.navigatedMonth() ?? this.month() ?? new Date()),\r\n );\r\n readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n readonly value = computed(() => {\r\n const selected = this.selected();\r\n return normalizeValue(selected !== undefined ? selected : this.internalValue(), this.mode());\r\n });\r\n readonly weekdayLabels = computed(() =>\r\n buildWeekdayLabels(this.locale(), this.firstDayOfWeek(), this.timeZone()),\r\n );\r\n readonly monthOptions = computed(() =>\r\n Array.from({ length: 12 }, (_, value) => ({\r\n value,\r\n label: new Intl.DateTimeFormat(this.locale(), {\r\n month: 'short',\r\n timeZone: this.timeZone(),\r\n }).format(new Date(2026, value, 1)),\r\n })),\r\n );\r\n readonly yearOptions = computed(() =>\r\n Array.from(\r\n { length: Math.max(0, this.toYear() - this.fromYear() + 1) },\r\n (_, index) => this.fromYear() + index,\r\n ),\r\n );\r\n readonly months = computed(() =>\r\n Array.from({ length: Math.max(1, this.numberOfMonths()) }, (_, index) =>\r\n this.buildMonth(addMonths(this.currentMonth(), index)),\r\n ),\r\n );\r\n readonly activeDate = computed(() => this.resolveActiveDate());\r\n\r\n private onTouched: () => void = () => undefined;\r\n private onChange: (value: Date | FrCalendarDateRange | null) => void = () => undefined;\r\n\r\n writeValue(value: Date | FrCalendarDateRange | null): void {\r\n this.internalValue.set(normalizeValue(value, this.mode()));\r\n\r\n if (value instanceof Date) {\r\n this.navigatedMonth.set(startOfMonth(value));\r\n } else if (isRange(value) && value.from) {\r\n this.navigatedMonth.set(startOfMonth(value.from));\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: Date | FrCalendarDateRange | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n }\r\n\r\n previousMonth(): void {\r\n this.updateMonth(addMonths(this.currentMonth(), -1));\r\n }\r\n\r\n nextMonth(): void {\r\n this.updateMonth(addMonths(this.currentMonth(), 1));\r\n }\r\n\r\n setMonth(value: string): void {\r\n const month = new Date(this.currentMonth().getFullYear(), Number(value), 1);\r\n this.updateMonth(month);\r\n }\r\n\r\n setYear(value: string): void {\r\n const month = new Date(Number(value), this.currentMonth().getMonth(), 1);\r\n this.updateMonth(month);\r\n }\r\n\r\n selectDay(day: CalendarDay): void {\r\n if (this.isDisabled() || day.disabled) {\r\n return;\r\n }\r\n\r\n this.onTouched();\r\n\r\n const nextValue =\r\n this.mode() === 'range' ? nextRangeValue(this.value(), day.date) : cloneDate(day.date);\r\n\r\n this.internalValue.set(nextValue);\r\n this.onChange(nextValue);\r\n this.selectedChange.emit(nextValue);\r\n }\r\n\r\n handleDayKeydown(event: KeyboardEvent, day: CalendarDay): void {\r\n const offset = this.navigationOffset(event.key);\r\n\r\n if (offset === null || this.isDisabled()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n const next = addDays(day.date, offset);\r\n this.focusedDate.set(next);\r\n\r\n if (!this.isDateVisible(next)) {\r\n this.updateMonth(startOfMonth(next));\r\n }\r\n\r\n this.focusDay(next);\r\n }\r\n\r\n dayTabIndex(day: CalendarDay): number {\r\n return sameDate(day.date, this.activeDate()) ? 0 : -1;\r\n }\r\n\r\n focusActiveDate(): void {\r\n this.focusDay(this.activeDate());\r\n }\r\n\r\n monthLabel(date: Date): string {\r\n return new Intl.DateTimeFormat(this.locale(), {\r\n month: 'long',\r\n year: 'numeric',\r\n timeZone: this.timeZone(),\r\n }).format(date);\r\n }\r\n\r\n dayLabel(date: Date): string {\r\n return new Intl.DateTimeFormat(this.locale(), {\r\n dateStyle: 'full',\r\n timeZone: this.timeZone(),\r\n }).format(date);\r\n }\r\n\r\n weekNumber(date: Date): string {\r\n return isoWeekNumber(date).toString().padStart(2, '0');\r\n }\r\n\r\n private navigationOffset(key: string): number | null {\r\n switch (key) {\r\n case 'ArrowLeft':\r\n return this.dir() === 'rtl' ? 1 : -1;\r\n case 'ArrowRight':\r\n return this.dir() === 'rtl' ? -1 : 1;\r\n case 'ArrowUp':\r\n return -7;\r\n case 'ArrowDown':\r\n return 7;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n private resolveActiveDate(): Date {\r\n const focused = this.focusedDate();\r\n\r\n if (focused && this.findDay(focused) && !this.isDayDisabled(focused)) {\r\n return cloneDate(focused);\r\n }\r\n\r\n const selected = this.selectedDate();\r\n\r\n if (selected && this.findDay(selected) && !this.isDayDisabled(selected)) {\r\n return cloneDate(selected);\r\n }\r\n\r\n const today = new Date();\r\n\r\n if (this.findDay(today) && !this.isDayDisabled(today)) {\r\n return cloneDate(today);\r\n }\r\n\r\n const firstEnabled = this.months()\r\n .flatMap((month) => month.weeks.flat())\r\n .find((day) => !day.disabled);\r\n\r\n return firstEnabled ? cloneDate(firstEnabled.date) : cloneDate(this.currentMonth());\r\n }\r\n\r\n private selectedDate(): Date | null {\r\n const value = this.value();\r\n\r\n if (value instanceof Date) {\r\n return value;\r\n }\r\n\r\n if (isRange(value)) {\r\n return value.from ?? value.to;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private isDateVisible(date: Date): boolean {\r\n return this.months().some((month) =>\r\n month.weeks.some((week) => week.some((day) => sameDate(day.date, date))),\r\n );\r\n }\r\n\r\n private findDay(date: Date): CalendarDay | null {\r\n for (const month of this.months()) {\r\n for (const week of month.weeks) {\r\n const day = week.find((item) => sameDate(item.date, date));\r\n\r\n if (day) {\r\n return day;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private isDayDisabled(date: Date): boolean {\r\n return this.findDay(date)?.disabled ?? true;\r\n }\r\n\r\n private focusDay(date: Date): void {\r\n if (this.focusDayElement(date)) {\r\n return;\r\n }\r\n\r\n setTimeout(() => {\r\n this.focusDayElement(date);\r\n });\r\n }\r\n\r\n private focusDayElement(date: Date): boolean {\r\n const button = this.host.nativeElement.querySelector(\r\n `.frame-calendar__day[data-date=\"${dateKey(date)}\"]`,\r\n ) as HTMLButtonElement | null;\r\n\r\n button?.focus();\r\n\r\n return !!button;\r\n }\r\n\r\n private updateMonth(month: Date): void {\r\n const next = startOfMonth(month);\r\n this.navigatedMonth.set(next);\r\n this.monthChange.emit(cloneDate(next));\r\n }\r\n\r\n private buildMonth(monthDate: Date): CalendarMonth {\r\n const start = startOfMonth(monthDate);\r\n const gridStart = startOfWeek(start, this.firstDayOfWeek());\r\n const weeks: CalendarDay[][] = [];\r\n\r\n for (let week = 0; week < 6; week++) {\r\n const days: CalendarDay[] = [];\r\n\r\n for (let dayIndex = 0; dayIndex < 7; dayIndex++) {\r\n const date = addDays(gridStart, week * 7 + dayIndex);\r\n const outside = date.getMonth() !== start.getMonth();\r\n const key = dateKey(date);\r\n const disabledDate = hasDate(this.disabledDates(), date);\r\n const disabled =\r\n (!this.showOutsideDays() && outside) ||\r\n disabledDate ||\r\n (this.disabledMatcher()?.(cloneDate(date)) ?? false);\r\n const selection = selectionState(this.value(), date, this.mode());\r\n\r\n days.push({\r\n date,\r\n day: date.getDate(),\r\n key,\r\n dateLabel: this.dateLabels()[key],\r\n disabled,\r\n disabledDate,\r\n outside,\r\n today: sameDate(date, new Date()),\r\n ...selection,\r\n });\r\n }\r\n\r\n weeks.push(days);\r\n }\r\n\r\n return {\r\n date: start,\r\n key: `${start.getFullYear()}-${start.getMonth()}`,\r\n label: this.monthLabel(start),\r\n weeks,\r\n };\r\n }\r\n}\r\n\r\nfunction buildWeekdayLabels(locale: string, firstDayOfWeek: number, timeZone?: string): string[] {\r\n const baseSunday = new Date(2026, 5, 7);\r\n\r\n return Array.from({ length: 7 }, (_, index) => {\r\n const day = addDays(baseSunday, (firstDayOfWeek + index) % 7);\r\n return new Intl.DateTimeFormat(locale, {\r\n weekday: 'short',\r\n timeZone,\r\n }).format(day);\r\n });\r\n}\r\n\r\nfunction normalizeValue(\r\n value: Date | FrCalendarDateRange | null | undefined,\r\n mode: FrCalendarMode,\r\n): Date | FrCalendarDateRange | null {\r\n if (!value) {\r\n return mode === 'range' ? { from: null, to: null } : null;\r\n }\r\n\r\n if (mode === 'range') {\r\n if (isRange(value)) {\r\n return {\r\n from: value.from ? cloneDate(value.from) : null,\r\n to: value.to ? cloneDate(value.to) : null,\r\n };\r\n }\r\n\r\n return { from: cloneDate(value), to: null };\r\n }\r\n\r\n return value instanceof Date ? cloneDate(value) : value.from ? cloneDate(value.from) : null;\r\n}\r\n\r\nfunction nextRangeValue(value: Date | FrCalendarDateRange | null, selected: Date): FrCalendarDateRange {\r\n const range = isRange(value) ? value : { from: null, to: null };\r\n\r\n if (!range.from || range.to) {\r\n return { from: cloneDate(selected), to: null };\r\n }\r\n\r\n if (selected < range.from) {\r\n return { from: cloneDate(selected), to: cloneDate(range.from) };\r\n }\r\n\r\n return { from: cloneDate(range.from), to: cloneDate(selected) };\r\n}\r\n\r\nfunction selectionState(value: Date | FrCalendarDateRange | null, date: Date, mode: FrCalendarMode) {\r\n if (mode === 'range' && isRange(value)) {\r\n const from = value.from;\r\n const to = value.to;\r\n const rangeStart = !!from && sameDate(date, from);\r\n const rangeEnd = !!to && sameDate(date, to);\r\n const rangeMiddle = !!from && !!to && date > from && date < to;\r\n\r\n return {\r\n selected: rangeStart || rangeEnd || rangeMiddle,\r\n rangeStart,\r\n rangeMiddle,\r\n rangeEnd,\r\n };\r\n }\r\n\r\n const selected = value instanceof Date && sameDate(date, value);\r\n\r\n return {\r\n selected,\r\n rangeStart: selected,\r\n rangeMiddle: false,\r\n rangeEnd: selected,\r\n };\r\n}\r\n\r\nfunction isRange(value: unknown): value is FrCalendarDateRange {\r\n return !!value && typeof value === 'object' && ('from' in value || 'to' in value);\r\n}\r\n\r\nfunction hasDate(dates: Date[], date: Date): boolean {\r\n return dates.some((item) => sameDate(item, date));\r\n}\r\n\r\nfunction sameDate(a: Date, b: Date): boolean {\r\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\r\n}\r\n\r\nfunction dateKey(date: Date): string {\r\n const year = date.getFullYear();\r\n const month = `${date.getMonth() + 1}`.padStart(2, '0');\r\n const day = `${date.getDate()}`.padStart(2, '0');\r\n return `${year}-${month}-${day}`;\r\n}\r\n\r\nfunction cloneDate(date: Date): Date {\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n}\r\n\r\nfunction startOfMonth(date: Date): Date {\r\n return new Date(date.getFullYear(), date.getMonth(), 1);\r\n}\r\n\r\nfunction addMonths(date: Date, amount: number): Date {\r\n return new Date(date.getFullYear(), date.getMonth() + amount, 1);\r\n}\r\n\r\nfunction addDays(date: Date, amount: number): Date {\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount);\r\n}\r\n\r\nfunction startOfWeek(date: Date, firstDayOfWeek: number): Date {\r\n const normalized = ((firstDayOfWeek % 7) + 7) % 7;\r\n const diff = (date.getDay() - normalized + 7) % 7;\r\n return addDays(date, -diff);\r\n}\r\n\r\nfunction isoWeekNumber(date: Date): number {\r\n const target = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n const dayNumber = target.getUTCDay() || 7;\r\n target.setUTCDate(target.getUTCDate() + 4 - dayNumber);\r\n const yearStart = new Date(Date.UTC(target.getUTCFullYear(), 0, 1));\r\n return Math.ceil(((target.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\r\n}\r\n","import { NgModule } from '@angular/core';\nimport {\n FrCalendar,\n} from './src/calendar';\n\n@NgModule({\n imports: [\n FrCalendar,\n ],\n exports: [\n FrCalendar,\n ],\n})\nexport class FrCalendarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame-ui-ng-components-calendar.mjs","sources":["../../../projects/components/calendar/src/calendar.ts","../../../projects/components/calendar/calendar.module.ts","../../../projects/components/calendar/frame-ui-ng-components-calendar.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n TemplateRef,\r\n booleanAttribute,\r\n computed,\r\n forwardRef,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nexport type FrCalendarMode = 'single' | 'range';\r\nexport type FrCalendarCaptionLayout = 'label' | 'dropdown';\r\n\r\nexport type FrCalendarDateRange = {\r\n from: Date | null;\r\n to: Date | null;\r\n};\r\n\r\nexport type FrCalendarCellContext = {\r\n date: Date;\r\n day: number;\r\n dateLabel?: string;\r\n disabled: boolean;\r\n disabledDate: boolean;\r\n outside: boolean;\r\n selected: boolean;\r\n today: boolean;\r\n};\r\n\r\nexport type FrCalendarDisabledMatcher = (date: Date) => boolean;\r\n\r\ntype CalendarDay = FrCalendarCellContext & {\r\n key: string;\r\n rangeEnd: boolean;\r\n rangeMiddle: boolean;\r\n rangeStart: boolean;\r\n};\r\n\r\ntype CalendarMonth = {\r\n date: Date;\r\n key: string;\r\n label: string;\r\n weeks: CalendarDay[][];\r\n};\r\n\r\nconst VALUE_ACCESSOR = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => FrCalendar),\r\n multi: true,\r\n};\r\n\r\n/** Calendar control for single-date and range selection. */\r\n@Component({\r\n selector: 'frame-calendar',\r\n imports: [NgTemplateOutlet],\r\n providers: [VALUE_ACCESSOR],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'frame-calendar',\r\n '[attr.data-mode]': 'mode()',\r\n '[attr.data-caption-layout]': 'captionLayout()',\r\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\r\n '[attr.dir]': 'dir()',\r\n },\r\n template: `\r\n <div class=\"frame-calendar__header\">\r\n <button\r\n class=\"frame-calendar__nav-button\"\r\n type=\"button\"\r\n [disabled]=\"isDisabled()\"\r\n (click)=\"previousMonth()\"\r\n [attr.aria-label]=\"previousMonthLabel()\"\r\n >\r\n @if (previousMonthTemplate(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n } @else {\r\n {{ previousMonthIcon() }}\r\n }\r\n </button>\r\n\r\n @if (captionLayout() === 'dropdown') {\r\n <div class=\"frame-calendar__caption-controls\">\r\n <select\r\n class=\"frame-calendar__select\"\r\n [disabled]=\"isDisabled()\"\r\n [value]=\"currentMonth().getMonth()\"\r\n aria-label=\"Month\"\r\n (change)=\"setMonth($any($event.target).value)\"\r\n >\r\n @for (month of monthOptions(); track month.value) {\r\n <option [value]=\"month.value\" [selected]=\"month.value === currentMonth().getMonth()\">\r\n {{ month.label }}\r\n </option>\r\n }\r\n </select>\r\n\r\n <select\r\n class=\"frame-calendar__select\"\r\n [disabled]=\"isDisabled()\"\r\n [value]=\"currentMonth().getFullYear()\"\r\n aria-label=\"Year\"\r\n (change)=\"setYear($any($event.target).value)\"\r\n >\r\n @for (year of yearOptions(); track year) {\r\n <option [value]=\"year\" [selected]=\"year === currentMonth().getFullYear()\">\r\n {{ year }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n } @else {\r\n <div class=\"frame-calendar__caption\" aria-live=\"polite\">\r\n {{ monthLabel(currentMonth()) }}\r\n </div>\r\n }\r\n\r\n <button\r\n class=\"frame-calendar__nav-button\"\r\n type=\"button\"\r\n [disabled]=\"isDisabled()\"\r\n (click)=\"nextMonth()\"\r\n [attr.aria-label]=\"nextMonthLabel()\"\r\n >\r\n @if (nextMonthTemplate(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n } @else {\r\n {{ nextMonthIcon() }}\r\n }\r\n </button>\r\n </div>\r\n\r\n <div class=\"frame-calendar__months\">\r\n @for (month of months(); track month.key) {\r\n <section class=\"frame-calendar__month\" [attr.aria-label]=\"month.label\">\r\n @if (numberOfMonths() > 1 || captionLayout() === 'dropdown') {\r\n <h3 class=\"frame-calendar__month-caption\">{{ month.label }}</h3>\r\n }\r\n\r\n <table class=\"frame-calendar__table\" role=\"grid\" [attr.aria-readonly]=\"true\">\r\n <thead>\r\n <tr>\r\n @if (showWeekNumber()) {\r\n <th class=\"frame-calendar__week-number-header\" scope=\"col\">Wk</th>\r\n }\r\n @for (weekday of weekdayLabels(); track weekday) {\r\n <th class=\"frame-calendar__weekday\" scope=\"col\">{{ weekday }}</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (week of month.weeks; track week[0].key) {\r\n <tr>\r\n @if (showWeekNumber()) {\r\n <td class=\"frame-calendar__week-number\">{{ weekNumber(week[0].date) }}</td>\r\n }\r\n @for (day of week; track day.key) {\r\n <td\r\n class=\"frame-calendar__cell\"\r\n [attr.data-outside]=\"day.outside ? '' : null\"\r\n [attr.data-selected]=\"day.selected ? '' : null\"\r\n [attr.data-range-start]=\"day.rangeStart ? '' : null\"\r\n [attr.data-range-middle]=\"day.rangeMiddle ? '' : null\"\r\n [attr.data-range-end]=\"day.rangeEnd ? '' : null\"\r\n [attr.data-today]=\"day.today ? '' : null\"\r\n [attr.data-disabled-date]=\"day.disabledDate ? '' : null\"\r\n >\r\n <button\r\n class=\"frame-calendar__day\"\r\n type=\"button\"\r\n [disabled]=\"isDisabled() || day.disabled\"\r\n [attr.data-date]=\"day.key\"\r\n [attr.tabindex]=\"dayTabIndex(day)\"\r\n [attr.aria-label]=\"dayLabel(day.date)\"\r\n [attr.aria-pressed]=\"day.selected ? 'true' : 'false'\"\r\n [attr.aria-selected]=\"day.selected ? 'true' : 'false'\"\r\n [attr.aria-current]=\"day.today ? 'date' : null\"\r\n (click)=\"selectDay(day)\"\r\n (focus)=\"focusedDate.set(day.date)\"\r\n (keydown)=\"handleDayKeydown($event, day)\"\r\n >\r\n @if (cellTemplate(); as template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"template\"\r\n [ngTemplateOutletContext]=\"day\"\r\n />\r\n } @else {\r\n <span class=\"frame-calendar__day-number\">{{ day.day }}</span>\r\n @if (day.dateLabel) {\r\n <span class=\"frame-calendar__day-meta\">{{ day.dateLabel }}</span>\r\n }\r\n }\r\n </button>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </section>\r\n }\r\n </div>\r\n `,\r\n})\r\nexport class FrCalendar implements ControlValueAccessor {\r\n readonly mode = input<FrCalendarMode>('single');\r\n readonly captionLayout = input<FrCalendarCaptionLayout>('label');\r\n readonly numberOfMonths = input(1);\r\n readonly firstDayOfWeek = input(0);\r\n readonly locale = input('en-US');\r\n readonly timeZone = input<string | undefined>(undefined);\r\n readonly dir = input<'ltr' | 'rtl'>('ltr');\r\n readonly fromYear = input(new Date().getFullYear() - 100);\r\n readonly toYear = input(new Date().getFullYear() + 20);\r\n readonly showOutsideDays = input(true, { transform: booleanAttribute });\r\n readonly showWeekNumber = input(false, { transform: booleanAttribute });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n readonly disabledDates = input<Date[]>([]);\r\n readonly dateLabels = input<Record<string, string>>({});\r\n readonly disabledMatcher = input<FrCalendarDisabledMatcher | null>(null);\r\n readonly cellTemplate = input<TemplateRef<FrCalendarCellContext> | null>(null);\r\n readonly previousMonthTemplate = input<TemplateRef<unknown> | null>(null);\r\n readonly nextMonthTemplate = input<TemplateRef<unknown> | null>(null);\r\n readonly previousMonthIcon = input('‹');\r\n readonly nextMonthIcon = input('›');\r\n readonly previousMonthLabel = input('Previous month');\r\n readonly nextMonthLabel = input('Next month');\r\n readonly month = input<Date | null | undefined>(undefined);\r\n readonly selected = input<Date | FrCalendarDateRange | null | undefined>(undefined);\r\n\r\n readonly selectedChange = output<Date | FrCalendarDateRange | null>();\r\n readonly monthChange = output<Date>();\r\n\r\n readonly focusedDate = signal<Date | null>(null);\r\n private readonly navigatedMonth = signal<Date | null>(null);\r\n private readonly internalValue = signal<Date | FrCalendarDateRange | null>(null);\r\n private readonly cvaDisabled = signal(false);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n readonly currentMonth = computed(() =>\r\n startOfMonth(this.navigatedMonth() ?? this.month() ?? new Date()),\r\n );\r\n readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n readonly value = computed(() => {\r\n const selected = this.selected();\r\n return normalizeValue(selected !== undefined ? selected : this.internalValue(), this.mode());\r\n });\r\n readonly weekdayLabels = computed(() =>\r\n buildWeekdayLabels(this.locale(), this.firstDayOfWeek(), this.timeZone()),\r\n );\r\n readonly monthOptions = computed(() =>\r\n Array.from({ length: 12 }, (_, value) => ({\r\n value,\r\n label: new Intl.DateTimeFormat(this.locale(), {\r\n month: 'short',\r\n timeZone: this.timeZone(),\r\n }).format(new Date(2026, value, 1)),\r\n })),\r\n );\r\n readonly yearOptions = computed(() =>\r\n Array.from(\r\n { length: Math.max(0, this.toYear() - this.fromYear() + 1) },\r\n (_, index) => this.fromYear() + index,\r\n ),\r\n );\r\n readonly months = computed(() =>\r\n Array.from({ length: Math.max(1, this.numberOfMonths()) }, (_, index) =>\r\n this.buildMonth(addMonths(this.currentMonth(), index)),\r\n ),\r\n );\r\n readonly activeDate = computed(() => this.resolveActiveDate());\r\n\r\n private onTouched: () => void = () => undefined;\r\n private onChange: (value: Date | FrCalendarDateRange | null) => void = () => undefined;\r\n\r\n writeValue(value: Date | FrCalendarDateRange | null): void {\r\n this.internalValue.set(normalizeValue(value, this.mode()));\r\n\r\n if (value instanceof Date) {\r\n this.navigatedMonth.set(startOfMonth(value));\r\n } else if (isRange(value) && value.from) {\r\n this.navigatedMonth.set(startOfMonth(value.from));\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: Date | FrCalendarDateRange | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n }\r\n\r\n previousMonth(): void {\r\n this.updateMonth(addMonths(this.currentMonth(), -1));\r\n }\r\n\r\n nextMonth(): void {\r\n this.updateMonth(addMonths(this.currentMonth(), 1));\r\n }\r\n\r\n setMonth(value: string): void {\r\n const month = new Date(this.currentMonth().getFullYear(), Number(value), 1);\r\n this.updateMonth(month);\r\n }\r\n\r\n setYear(value: string): void {\r\n const month = new Date(Number(value), this.currentMonth().getMonth(), 1);\r\n this.updateMonth(month);\r\n }\r\n\r\n selectDay(day: CalendarDay): void {\r\n if (this.isDisabled() || day.disabled) {\r\n return;\r\n }\r\n\r\n this.onTouched();\r\n\r\n const nextValue =\r\n this.mode() === 'range' ? nextRangeValue(this.value(), day.date) : cloneDate(day.date);\r\n\r\n this.internalValue.set(nextValue);\r\n this.onChange(nextValue);\r\n this.selectedChange.emit(nextValue);\r\n }\r\n\r\n handleDayKeydown(event: KeyboardEvent, day: CalendarDay): void {\r\n const offset = this.navigationOffset(event.key);\r\n\r\n if (offset === null || this.isDisabled()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n const next = addDays(day.date, offset);\r\n this.focusedDate.set(next);\r\n\r\n if (!this.isDateVisible(next)) {\r\n this.updateMonth(startOfMonth(next));\r\n }\r\n\r\n this.focusDay(next);\r\n }\r\n\r\n dayTabIndex(day: CalendarDay): number {\r\n return sameDate(day.date, this.activeDate()) ? 0 : -1;\r\n }\r\n\r\n focusActiveDate(): void {\r\n this.focusDay(this.activeDate());\r\n }\r\n\r\n monthLabel(date: Date): string {\r\n return new Intl.DateTimeFormat(this.locale(), {\r\n month: 'long',\r\n year: 'numeric',\r\n timeZone: this.timeZone(),\r\n }).format(date);\r\n }\r\n\r\n dayLabel(date: Date): string {\r\n return new Intl.DateTimeFormat(this.locale(), {\r\n dateStyle: 'full',\r\n timeZone: this.timeZone(),\r\n }).format(date);\r\n }\r\n\r\n weekNumber(date: Date): string {\r\n return isoWeekNumber(date).toString().padStart(2, '0');\r\n }\r\n\r\n private navigationOffset(key: string): number | null {\r\n switch (key) {\r\n case 'ArrowLeft':\r\n return this.dir() === 'rtl' ? 1 : -1;\r\n case 'ArrowRight':\r\n return this.dir() === 'rtl' ? -1 : 1;\r\n case 'ArrowUp':\r\n return -7;\r\n case 'ArrowDown':\r\n return 7;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n private resolveActiveDate(): Date {\r\n const focused = this.focusedDate();\r\n\r\n // Prefer the roving-focus target, then selection, then today, then first enabled day.\r\n if (focused && this.findDay(focused) && !this.isDayDisabled(focused)) {\r\n return cloneDate(focused);\r\n }\r\n\r\n const selected = this.selectedDate();\r\n\r\n if (selected && this.findDay(selected) && !this.isDayDisabled(selected)) {\r\n return cloneDate(selected);\r\n }\r\n\r\n const today = new Date();\r\n\r\n if (this.findDay(today) && !this.isDayDisabled(today)) {\r\n return cloneDate(today);\r\n }\r\n\r\n const firstEnabled = this.months()\r\n .flatMap((month) => month.weeks.flat())\r\n .find((day) => !day.disabled);\r\n\r\n return firstEnabled ? cloneDate(firstEnabled.date) : cloneDate(this.currentMonth());\r\n }\r\n\r\n private selectedDate(): Date | null {\r\n const value = this.value();\r\n\r\n if (value instanceof Date) {\r\n return value;\r\n }\r\n\r\n if (isRange(value)) {\r\n return value.from ?? value.to;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private isDateVisible(date: Date): boolean {\r\n return this.months().some((month) =>\r\n month.weeks.some((week) => week.some((day) => sameDate(day.date, date))),\r\n );\r\n }\r\n\r\n private findDay(date: Date): CalendarDay | null {\r\n for (const month of this.months()) {\r\n for (const week of month.weeks) {\r\n const day = week.find((item) => sameDate(item.date, date));\r\n\r\n if (day) {\r\n return day;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private isDayDisabled(date: Date): boolean {\r\n return this.findDay(date)?.disabled ?? true;\r\n }\r\n\r\n private focusDay(date: Date): void {\r\n if (this.focusDayElement(date)) {\r\n return;\r\n }\r\n\r\n // Month navigation may render the target button one tick later.\r\n setTimeout(() => {\r\n this.focusDayElement(date);\r\n });\r\n }\r\n\r\n private focusDayElement(date: Date): boolean {\r\n const button = this.host.nativeElement.querySelector(\r\n `.frame-calendar__day[data-date=\"${dateKey(date)}\"]`,\r\n ) as HTMLButtonElement | null;\r\n\r\n button?.focus();\r\n\r\n return !!button;\r\n }\r\n\r\n private updateMonth(month: Date): void {\r\n const next = startOfMonth(month);\r\n this.navigatedMonth.set(next);\r\n this.monthChange.emit(cloneDate(next));\r\n }\r\n\r\n private buildMonth(monthDate: Date): CalendarMonth {\r\n const start = startOfMonth(monthDate);\r\n const gridStart = startOfWeek(start, this.firstDayOfWeek());\r\n const weeks: CalendarDay[][] = [];\r\n\r\n // Always build a six-week grid so layout height stays stable across months.\r\n for (let week = 0; week < 6; week++) {\r\n const days: CalendarDay[] = [];\r\n\r\n for (let dayIndex = 0; dayIndex < 7; dayIndex++) {\r\n const date = addDays(gridStart, week * 7 + dayIndex);\r\n const outside = date.getMonth() !== start.getMonth();\r\n const key = dateKey(date);\r\n const disabledDate = hasDate(this.disabledDates(), date);\r\n const disabled =\r\n (!this.showOutsideDays() && outside) ||\r\n disabledDate ||\r\n (this.disabledMatcher()?.(cloneDate(date)) ?? false);\r\n const selection = selectionState(this.value(), date, this.mode());\r\n\r\n days.push({\r\n date,\r\n day: date.getDate(),\r\n key,\r\n dateLabel: this.dateLabels()[key],\r\n disabled,\r\n disabledDate,\r\n outside,\r\n today: sameDate(date, new Date()),\r\n ...selection,\r\n });\r\n }\r\n\r\n weeks.push(days);\r\n }\r\n\r\n return {\r\n date: start,\r\n key: `${start.getFullYear()}-${start.getMonth()}`,\r\n label: this.monthLabel(start),\r\n weeks,\r\n };\r\n }\r\n}\r\n\r\nfunction buildWeekdayLabels(locale: string, firstDayOfWeek: number, timeZone?: string): string[] {\r\n const baseSunday = new Date(2026, 5, 7);\r\n\r\n return Array.from({ length: 7 }, (_, index) => {\r\n const day = addDays(baseSunday, (firstDayOfWeek + index) % 7);\r\n return new Intl.DateTimeFormat(locale, {\r\n weekday: 'short',\r\n timeZone,\r\n }).format(day);\r\n });\r\n}\r\n\r\nfunction normalizeValue(\r\n value: Date | FrCalendarDateRange | null | undefined,\r\n mode: FrCalendarMode,\r\n): Date | FrCalendarDateRange | null {\r\n if (!value) {\r\n return mode === 'range' ? { from: null, to: null } : null;\r\n }\r\n\r\n if (mode === 'range') {\r\n if (isRange(value)) {\r\n return {\r\n from: value.from ? cloneDate(value.from) : null,\r\n to: value.to ? cloneDate(value.to) : null,\r\n };\r\n }\r\n\r\n return { from: cloneDate(value), to: null };\r\n }\r\n\r\n return value instanceof Date ? cloneDate(value) : value.from ? cloneDate(value.from) : null;\r\n}\r\n\r\nfunction nextRangeValue(value: Date | FrCalendarDateRange | null, selected: Date): FrCalendarDateRange {\r\n const range = isRange(value) ? value : { from: null, to: null };\r\n\r\n if (!range.from || range.to) {\r\n return { from: cloneDate(selected), to: null };\r\n }\r\n\r\n if (selected < range.from) {\r\n return { from: cloneDate(selected), to: cloneDate(range.from) };\r\n }\r\n\r\n return { from: cloneDate(range.from), to: cloneDate(selected) };\r\n}\r\n\r\nfunction selectionState(value: Date | FrCalendarDateRange | null, date: Date, mode: FrCalendarMode) {\r\n if (mode === 'range' && isRange(value)) {\r\n const from = value.from;\r\n const to = value.to;\r\n const rangeStart = !!from && sameDate(date, from);\r\n const rangeEnd = !!to && sameDate(date, to);\r\n const rangeMiddle = !!from && !!to && date > from && date < to;\r\n\r\n return {\r\n selected: rangeStart || rangeEnd || rangeMiddle,\r\n rangeStart,\r\n rangeMiddle,\r\n rangeEnd,\r\n };\r\n }\r\n\r\n const selected = value instanceof Date && sameDate(date, value);\r\n\r\n return {\r\n selected,\r\n rangeStart: selected,\r\n rangeMiddle: false,\r\n rangeEnd: selected,\r\n };\r\n}\r\n\r\nfunction isRange(value: unknown): value is FrCalendarDateRange {\r\n return !!value && typeof value === 'object' && ('from' in value || 'to' in value);\r\n}\r\n\r\nfunction hasDate(dates: Date[], date: Date): boolean {\r\n return dates.some((item) => sameDate(item, date));\r\n}\r\n\r\nfunction sameDate(a: Date, b: Date): boolean {\r\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\r\n}\r\n\r\nfunction dateKey(date: Date): string {\r\n const year = date.getFullYear();\r\n const month = `${date.getMonth() + 1}`.padStart(2, '0');\r\n const day = `${date.getDate()}`.padStart(2, '0');\r\n return `${year}-${month}-${day}`;\r\n}\r\n\r\nfunction cloneDate(date: Date): Date {\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n}\r\n\r\nfunction startOfMonth(date: Date): Date {\r\n return new Date(date.getFullYear(), date.getMonth(), 1);\r\n}\r\n\r\nfunction addMonths(date: Date, amount: number): Date {\r\n return new Date(date.getFullYear(), date.getMonth() + amount, 1);\r\n}\r\n\r\nfunction addDays(date: Date, amount: number): Date {\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount);\r\n}\r\n\r\nfunction startOfWeek(date: Date, firstDayOfWeek: number): Date {\r\n const normalized = ((firstDayOfWeek % 7) + 7) % 7;\r\n const diff = (date.getDay() - normalized + 7) % 7;\r\n return addDays(date, -diff);\r\n}\r\n\r\nfunction isoWeekNumber(date: Date): number {\r\n const target = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n const dayNumber = target.getUTCDay() || 7;\r\n target.setUTCDate(target.getUTCDate() + 4 - dayNumber);\r\n const yearStart = new Date(Date.UTC(target.getUTCFullYear(), 0, 1));\r\n return Math.ceil(((target.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\r\n}\r\n\r\n","import { NgModule } from '@angular/core';\nimport {\n FrCalendar,\n} from './src/calendar';\n\n@NgModule({\n imports: [\n FrCalendar,\n ],\n exports: [\n FrCalendar,\n ],\n})\nexport class FrCalendarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ElementRef, Renderer2, input, effect, RendererStyleFlags2, Directive, NgModule } from '@angular/core';
2
+ import { input, computed, Directive, NgModule } from '@angular/core';
3
3
 
4
4
  const FR_CARD_SIZES = ['default', 'sm'];
5
5
  const FR_CARD_SPACINGS = ['sm', 'md', 'lg', 'xl'];
@@ -10,23 +10,16 @@ const FR_CARD_SPACING_VALUES = {
10
10
  lg: '1.25rem',
11
11
  xl: '2rem',
12
12
  };
13
+ /** Card container with size and spacing controls. */
13
14
  class FrCard {
14
- elementRef = inject(ElementRef);
15
- renderer = inject(Renderer2);
16
15
  size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
17
16
  spacing = input(null, ...(ngDevMode ? [{ debugName: "spacing" }] : /* istanbul ignore next */ []));
18
- constructor() {
19
- effect(() => {
20
- const spacing = this.spacing();
21
- if (!spacing) {
22
- this.renderer.removeStyle(this.elementRef.nativeElement, '--frame-card-spacing', RendererStyleFlags2.DashCase);
23
- return;
24
- }
25
- this.renderer.setStyle(this.elementRef.nativeElement, '--frame-card-spacing', FR_CARD_SPACING_VALUES[spacing], RendererStyleFlags2.DashCase);
26
- });
27
- }
17
+ spacingValue = computed(() => {
18
+ const spacing = this.spacing();
19
+ return spacing ? FR_CARD_SPACING_VALUES[spacing] : null;
20
+ }, ...(ngDevMode ? [{ debugName: "spacingValue" }] : /* istanbul ignore next */ []));
28
21
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCard, deps: [], target: i0.ɵɵFactoryTarget.Directive });
29
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrCard, isStandalone: true, selector: "[frCard], frame-card", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, spacing: { classPropertyName: "spacing", publicName: "spacing", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-size": "size()", "attr.data-spacing": "spacing()" }, classAttribute: "frame-card" }, ngImport: i0 });
22
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrCard, isStandalone: true, selector: "[frCard], frame-card", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, spacing: { classPropertyName: "spacing", publicName: "spacing", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-size": "size()", "attr.data-spacing": "spacing()", "style.--frame-card-spacing": "spacingValue()" }, classAttribute: "frame-card" }, ngImport: i0 });
30
23
  }
31
24
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCard, decorators: [{
32
25
  type: Directive,
@@ -36,9 +29,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
36
29
  class: 'frame-card',
37
30
  '[attr.data-size]': 'size()',
38
31
  '[attr.data-spacing]': 'spacing()',
32
+ '[style.--frame-card-spacing]': 'spacingValue()',
39
33
  },
40
34
  }]
41
- }], ctorParameters: () => [], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], spacing: [{ type: i0.Input, args: [{ isSignal: true, alias: "spacing", required: false }] }] } });
35
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], spacing: [{ type: i0.Input, args: [{ isSignal: true, alias: "spacing", required: false }] }] } });
36
+ /** Header slot for card. */
42
37
  class FrCardHeader {
43
38
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCardHeader, deps: [], target: i0.ɵɵFactoryTarget.Directive });
44
39
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrCardHeader, isStandalone: true, selector: "[frCardHeader]", host: { classAttribute: "frame-card__header" }, ngImport: i0 });
@@ -52,6 +47,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
52
47
  },
53
48
  }]
54
49
  }] });
50
+ /** Title slot for card. */
55
51
  class FrCardTitle {
56
52
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCardTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
57
53
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrCardTitle, isStandalone: true, selector: "[frCardTitle]", host: { classAttribute: "frame-card__title" }, ngImport: i0 });
@@ -65,6 +61,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
65
61
  },
66
62
  }]
67
63
  }] });
64
+ /** Description slot for card. */
68
65
  class FrCardDescription {
69
66
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCardDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive });
70
67
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrCardDescription, isStandalone: true, selector: "[frCardDescription]", host: { classAttribute: "frame-card__description" }, ngImport: i0 });
@@ -78,6 +75,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
78
75
  },
79
76
  }]
80
77
  }] });
78
+ /** Action slot for card. */
81
79
  class FrCardAction {
82
80
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCardAction, deps: [], target: i0.ɵɵFactoryTarget.Directive });
83
81
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrCardAction, isStandalone: true, selector: "[frCardAction]", host: { classAttribute: "frame-card__action" }, ngImport: i0 });
@@ -91,6 +89,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
91
89
  },
92
90
  }]
93
91
  }] });
92
+ /** Content slot for card. */
94
93
  class FrCardContent {
95
94
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCardContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
96
95
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrCardContent, isStandalone: true, selector: "[frCardContent]", host: { classAttribute: "frame-card__content" }, ngImport: i0 });
@@ -104,6 +103,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
104
103
  },
105
104
  }]
106
105
  }] });
106
+ /** Footer slot for card. */
107
107
  class FrCardFooter {
108
108
  align = input('start', ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
109
109
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCardFooter, deps: [], target: i0.ɵɵFactoryTarget.Directive });