forty-cdk 0.2.0 → 0.3.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 (220) hide show
  1. package/accordion/README.md +122 -0
  2. package/aspect-ratio/README.md +76 -0
  3. package/avatar/README.md +100 -0
  4. package/breadcrumbs/README.md +49 -0
  5. package/breakpoints/README.md +81 -0
  6. package/button/README.md +49 -0
  7. package/calendar/README.md +458 -0
  8. package/carousel/README.md +358 -0
  9. package/checkbox/README.md +146 -0
  10. package/combobox/README.md +535 -0
  11. package/context-menu/README.md +139 -0
  12. package/date-field/README.md +184 -0
  13. package/date-picker/README.md +338 -0
  14. package/dialog/README.md +388 -0
  15. package/disclosure/README.md +114 -0
  16. package/drag-drop/README.md +359 -0
  17. package/drawer/README.md +560 -0
  18. package/dropdown-menu/README.md +176 -0
  19. package/fesm2022/forty-cdk-accordion.mjs +348 -0
  20. package/fesm2022/forty-cdk-accordion.mjs.map +1 -0
  21. package/fesm2022/forty-cdk-aspect-ratio.mjs +74 -0
  22. package/fesm2022/forty-cdk-aspect-ratio.mjs.map +1 -0
  23. package/fesm2022/forty-cdk-avatar.mjs +308 -0
  24. package/fesm2022/forty-cdk-avatar.mjs.map +1 -0
  25. package/fesm2022/forty-cdk-breadcrumbs.mjs +125 -0
  26. package/fesm2022/forty-cdk-breadcrumbs.mjs.map +1 -0
  27. package/fesm2022/forty-cdk-breakpoints.mjs +117 -0
  28. package/fesm2022/forty-cdk-breakpoints.mjs.map +1 -0
  29. package/fesm2022/forty-cdk-button.mjs +134 -0
  30. package/fesm2022/forty-cdk-button.mjs.map +1 -0
  31. package/fesm2022/forty-cdk-calendar.mjs +2034 -0
  32. package/fesm2022/forty-cdk-calendar.mjs.map +1 -0
  33. package/fesm2022/forty-cdk-carousel.mjs +968 -0
  34. package/fesm2022/forty-cdk-carousel.mjs.map +1 -0
  35. package/fesm2022/forty-cdk-checkbox.mjs +226 -0
  36. package/fesm2022/forty-cdk-checkbox.mjs.map +1 -0
  37. package/fesm2022/forty-cdk-combobox.mjs +2596 -0
  38. package/fesm2022/forty-cdk-combobox.mjs.map +1 -0
  39. package/fesm2022/forty-cdk-context-menu.mjs +413 -0
  40. package/fesm2022/forty-cdk-context-menu.mjs.map +1 -0
  41. package/fesm2022/forty-cdk-core.mjs +9022 -0
  42. package/fesm2022/forty-cdk-core.mjs.map +1 -0
  43. package/fesm2022/forty-cdk-date-field.mjs +744 -0
  44. package/fesm2022/forty-cdk-date-field.mjs.map +1 -0
  45. package/fesm2022/forty-cdk-date-picker.mjs +1011 -0
  46. package/fesm2022/forty-cdk-date-picker.mjs.map +1 -0
  47. package/fesm2022/forty-cdk-dialog.mjs +707 -0
  48. package/fesm2022/forty-cdk-dialog.mjs.map +1 -0
  49. package/fesm2022/forty-cdk-disclosure.mjs +190 -0
  50. package/fesm2022/forty-cdk-disclosure.mjs.map +1 -0
  51. package/fesm2022/forty-cdk-drag-drop.mjs +1180 -0
  52. package/fesm2022/forty-cdk-drag-drop.mjs.map +1 -0
  53. package/fesm2022/forty-cdk-drawer.mjs +1641 -0
  54. package/fesm2022/forty-cdk-drawer.mjs.map +1 -0
  55. package/fesm2022/forty-cdk-dropdown-menu.mjs +350 -0
  56. package/fesm2022/forty-cdk-dropdown-menu.mjs.map +1 -0
  57. package/fesm2022/forty-cdk-field.mjs +425 -0
  58. package/fesm2022/forty-cdk-field.mjs.map +1 -0
  59. package/fesm2022/forty-cdk-fieldset.mjs +164 -0
  60. package/fesm2022/forty-cdk-fieldset.mjs.map +1 -0
  61. package/fesm2022/forty-cdk-file-upload.mjs +221 -0
  62. package/fesm2022/forty-cdk-file-upload.mjs.map +1 -0
  63. package/fesm2022/forty-cdk-hover-card.mjs +496 -0
  64. package/fesm2022/forty-cdk-hover-card.mjs.map +1 -0
  65. package/fesm2022/forty-cdk-input.mjs +274 -0
  66. package/fesm2022/forty-cdk-input.mjs.map +1 -0
  67. package/fesm2022/forty-cdk-internationalized-date.mjs +1 -1
  68. package/fesm2022/forty-cdk-internationalized-date.mjs.map +1 -1
  69. package/fesm2022/forty-cdk-listbox.mjs +1279 -0
  70. package/fesm2022/forty-cdk-listbox.mjs.map +1 -0
  71. package/fesm2022/forty-cdk-menu.mjs +1439 -0
  72. package/fesm2022/forty-cdk-menu.mjs.map +1 -0
  73. package/fesm2022/forty-cdk-menubar.mjs +787 -0
  74. package/fesm2022/forty-cdk-menubar.mjs.map +1 -0
  75. package/fesm2022/forty-cdk-meter.mjs +211 -0
  76. package/fesm2022/forty-cdk-meter.mjs.map +1 -0
  77. package/fesm2022/forty-cdk-navigation-menu.mjs +1145 -0
  78. package/fesm2022/forty-cdk-navigation-menu.mjs.map +1 -0
  79. package/fesm2022/forty-cdk-number-input.mjs +559 -0
  80. package/fesm2022/forty-cdk-number-input.mjs.map +1 -0
  81. package/fesm2022/forty-cdk-otp-input.mjs +527 -0
  82. package/fesm2022/forty-cdk-otp-input.mjs.map +1 -0
  83. package/fesm2022/forty-cdk-pagination.mjs +323 -0
  84. package/fesm2022/forty-cdk-pagination.mjs.map +1 -0
  85. package/fesm2022/forty-cdk-pane-resizer.mjs +297 -0
  86. package/fesm2022/forty-cdk-pane-resizer.mjs.map +1 -0
  87. package/fesm2022/forty-cdk-popover.mjs +698 -0
  88. package/fesm2022/forty-cdk-popover.mjs.map +1 -0
  89. package/fesm2022/forty-cdk-progress.mjs +226 -0
  90. package/fesm2022/forty-cdk-progress.mjs.map +1 -0
  91. package/fesm2022/forty-cdk-radio-group.mjs +378 -0
  92. package/fesm2022/forty-cdk-radio-group.mjs.map +1 -0
  93. package/fesm2022/forty-cdk-scroll-area.mjs +640 -0
  94. package/fesm2022/forty-cdk-scroll-area.mjs.map +1 -0
  95. package/fesm2022/forty-cdk-search.mjs +205 -0
  96. package/fesm2022/forty-cdk-search.mjs.map +1 -0
  97. package/fesm2022/forty-cdk-select.mjs +1661 -0
  98. package/fesm2022/forty-cdk-select.mjs.map +1 -0
  99. package/fesm2022/forty-cdk-separator.mjs +82 -0
  100. package/fesm2022/forty-cdk-separator.mjs.map +1 -0
  101. package/fesm2022/forty-cdk-signal-forms.mjs +97 -0
  102. package/fesm2022/forty-cdk-signal-forms.mjs.map +1 -0
  103. package/fesm2022/forty-cdk-slider.mjs +803 -0
  104. package/fesm2022/forty-cdk-slider.mjs.map +1 -0
  105. package/fesm2022/forty-cdk-stepper.mjs +886 -0
  106. package/fesm2022/forty-cdk-stepper.mjs.map +1 -0
  107. package/fesm2022/forty-cdk-switch.mjs +137 -0
  108. package/fesm2022/forty-cdk-switch.mjs.map +1 -0
  109. package/fesm2022/forty-cdk-table.mjs +1518 -0
  110. package/fesm2022/forty-cdk-table.mjs.map +1 -0
  111. package/fesm2022/forty-cdk-tabs.mjs +400 -0
  112. package/fesm2022/forty-cdk-tabs.mjs.map +1 -0
  113. package/fesm2022/forty-cdk-time-field.mjs +593 -0
  114. package/fesm2022/forty-cdk-time-field.mjs.map +1 -0
  115. package/fesm2022/forty-cdk-time-picker.mjs +1013 -0
  116. package/fesm2022/forty-cdk-time-picker.mjs.map +1 -0
  117. package/fesm2022/forty-cdk-toast.mjs +1153 -0
  118. package/fesm2022/forty-cdk-toast.mjs.map +1 -0
  119. package/fesm2022/forty-cdk-toggle.mjs +516 -0
  120. package/fesm2022/forty-cdk-toggle.mjs.map +1 -0
  121. package/fesm2022/forty-cdk-toolbar.mjs +374 -0
  122. package/fesm2022/forty-cdk-toolbar.mjs.map +1 -0
  123. package/fesm2022/forty-cdk-tooltip.mjs +672 -0
  124. package/fesm2022/forty-cdk-tooltip.mjs.map +1 -0
  125. package/fesm2022/forty-cdk-tree.mjs +2007 -0
  126. package/fesm2022/forty-cdk-tree.mjs.map +1 -0
  127. package/fesm2022/forty-cdk-virtualization.mjs +1 -1
  128. package/fesm2022/forty-cdk-virtualization.mjs.map +1 -1
  129. package/fesm2022/forty-cdk.mjs +0 -43310
  130. package/fesm2022/forty-cdk.mjs.map +1 -1
  131. package/field/README.md +97 -0
  132. package/fieldset/README.md +86 -0
  133. package/file-upload/README.md +73 -0
  134. package/hover-card/README.md +171 -0
  135. package/input/README.md +156 -0
  136. package/listbox/README.md +424 -0
  137. package/menu/README.md +181 -0
  138. package/menubar/README.md +140 -0
  139. package/meter/README.md +128 -0
  140. package/navigation-menu/README.md +253 -0
  141. package/number-input/README.md +171 -0
  142. package/otp-input/README.md +198 -0
  143. package/package.json +213 -1
  144. package/pagination/README.md +61 -0
  145. package/pane-resizer/README.md +136 -0
  146. package/popover/README.md +262 -0
  147. package/progress/README.md +115 -0
  148. package/radio-group/README.md +129 -0
  149. package/scroll-area/README.md +184 -0
  150. package/search/README.md +42 -0
  151. package/select/README.md +488 -0
  152. package/separator/README.md +84 -0
  153. package/signal-forms/README.md +72 -0
  154. package/slider/README.md +152 -0
  155. package/stepper/README.md +292 -0
  156. package/switch/README.md +116 -0
  157. package/table/README.md +769 -0
  158. package/tabs/README.md +130 -0
  159. package/time-field/README.md +157 -0
  160. package/time-picker/README.md +172 -0
  161. package/toast/README.md +398 -0
  162. package/toggle/README.md +224 -0
  163. package/toolbar/README.md +109 -0
  164. package/tooltip/README.md +274 -0
  165. package/tree/README.md +708 -0
  166. package/types/forty-cdk-accordion.d.ts +242 -0
  167. package/types/forty-cdk-aspect-ratio.d.ts +59 -0
  168. package/types/forty-cdk-avatar.d.ts +133 -0
  169. package/types/forty-cdk-breadcrumbs.d.ts +92 -0
  170. package/types/forty-cdk-breakpoints.d.ts +141 -0
  171. package/types/forty-cdk-button.d.ts +80 -0
  172. package/types/forty-cdk-calendar.d.ts +914 -0
  173. package/types/forty-cdk-carousel.d.ts +530 -0
  174. package/types/forty-cdk-checkbox.d.ts +141 -0
  175. package/types/forty-cdk-combobox.d.ts +1259 -0
  176. package/types/forty-cdk-context-menu.d.ts +313 -0
  177. package/types/forty-cdk-core.d.ts +5774 -0
  178. package/types/forty-cdk-date-field.d.ts +307 -0
  179. package/types/forty-cdk-date-picker.d.ts +622 -0
  180. package/types/forty-cdk-dialog.d.ts +546 -0
  181. package/types/forty-cdk-disclosure.d.ts +127 -0
  182. package/types/forty-cdk-drag-drop.d.ts +456 -0
  183. package/types/forty-cdk-drawer.d.ts +871 -0
  184. package/types/forty-cdk-dropdown-menu.d.ts +242 -0
  185. package/types/forty-cdk-field.d.ts +236 -0
  186. package/types/forty-cdk-fieldset.d.ts +119 -0
  187. package/types/forty-cdk-file-upload.d.ts +124 -0
  188. package/types/forty-cdk-hover-card.d.ts +320 -0
  189. package/types/forty-cdk-input.d.ts +169 -0
  190. package/types/forty-cdk-internationalized-date.d.ts +1 -1
  191. package/types/forty-cdk-listbox.d.ts +513 -0
  192. package/types/forty-cdk-menu.d.ts +629 -0
  193. package/types/forty-cdk-menubar.d.ts +451 -0
  194. package/types/forty-cdk-meter.d.ts +122 -0
  195. package/types/forty-cdk-navigation-menu.d.ts +514 -0
  196. package/types/forty-cdk-number-input.d.ts +319 -0
  197. package/types/forty-cdk-otp-input.d.ts +248 -0
  198. package/types/forty-cdk-pagination.d.ts +214 -0
  199. package/types/forty-cdk-pane-resizer.d.ts +145 -0
  200. package/types/forty-cdk-popover.d.ts +509 -0
  201. package/types/forty-cdk-progress.d.ts +143 -0
  202. package/types/forty-cdk-radio-group.d.ts +222 -0
  203. package/types/forty-cdk-scroll-area.d.ts +258 -0
  204. package/types/forty-cdk-search.d.ts +142 -0
  205. package/types/forty-cdk-select.d.ts +899 -0
  206. package/types/forty-cdk-separator.d.ts +59 -0
  207. package/types/forty-cdk-signal-forms.d.ts +58 -0
  208. package/types/forty-cdk-slider.d.ts +379 -0
  209. package/types/forty-cdk-stepper.d.ts +650 -0
  210. package/types/forty-cdk-switch.d.ts +87 -0
  211. package/types/forty-cdk-table.d.ts +723 -0
  212. package/types/forty-cdk-tabs.d.ts +235 -0
  213. package/types/forty-cdk-time-field.d.ts +307 -0
  214. package/types/forty-cdk-time-picker.d.ts +578 -0
  215. package/types/forty-cdk-toast.d.ts +598 -0
  216. package/types/forty-cdk-toggle.d.ts +310 -0
  217. package/types/forty-cdk-toolbar.d.ts +217 -0
  218. package/types/forty-cdk-tooltip.d.ts +436 -0
  219. package/types/forty-cdk-tree.d.ts +688 -0
  220. package/types/forty-cdk.d.ts +1 -19743
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forty-cdk-date-field.mjs","sources":["../../../projects/forty-cdk/date-field/src/build-segments.ts","../../../projects/forty-cdk/date-field/src/date-field-context.ts","../../../projects/forty-cdk/date-field/src/date-field-defaults.ts","../../../projects/forty-cdk/date-field/src/date-field.ts","../../../projects/forty-cdk/date-field/src/date-field-segment.ts","../../../projects/forty-cdk/date-field/src/date-field-literal.ts","../../../projects/forty-cdk/date-field/src/date-field-host-directive.ts","../../../projects/forty-cdk/date-field/src/forty-cdk-date-field.ts"],"sourcesContent":["import { type FieldSpec, type SegmentType } from 'forty-cdk/core';\n\nexport type { DateSegmentType, SegmentType as DateTimeSegmentType } from 'forty-cdk/core';\n\n/** Date-time precision of a date field; `'day'` keeps it date-only. */\nexport type FieldGranularity = 'day' | 'hour' | 'minute' | 'second';\n\nconst DIGITS: Record<SegmentType, number> = {\n day: 2,\n month: 2,\n year: 4,\n hour: 2,\n minute: 2,\n second: 2,\n dayPeriod: 0,\n};\n\n/**\n * Derives the ordered segment list for a day-granularity date field from the\n * runtime locale, using `Intl.DateTimeFormat(...).formatToParts`. The visible\n * order of day / month / year (and the separator characters between them)\n * follows the locale — `MM/DD/YYYY` for `en-US`, `DD.MM.YYYY` for `de-DE`,\n * `YYYY/MM/DD` for `ja-JP` — so the field never has to parse ambiguous\n * free text.\n *\n * Pure: the same `locale` always yields the same list, and it touches no\n * signals or DOM. A fixed reference date with distinct day / month values is\n * formatted purely to read back the part order; its actual value never\n * surfaces.\n *\n * @param locale BCP 47 locale, or `undefined` for the runtime default.\n */\nexport function buildSegments(locale: string | undefined): readonly FieldSpec[] {\n const parts = new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n }).formatToParts(REFERENCE_DATE);\n\n const segments: FieldSpec[] = [];\n for (const part of parts) {\n switch (part.type) {\n case 'day':\n case 'month':\n case 'year':\n segments.push({ kind: 'editable', type: part.type, digits: DIGITS[part.type] });\n break;\n case 'literal':\n segments.push({ kind: 'literal', literal: part.value });\n break;\n default:\n break;\n }\n }\n return segments;\n}\n\n// 1 Feb is deliberately distinct in day vs month so a locale that reuses a\n// digit can't mask the part ordering. The year (2000) is irrelevant — only the\n// `type` of each formatted part is read.\nconst REFERENCE_DATE = new Date(2000, 1, 1);\n\n// 1 Feb 2000, 1:23:45 PM — distinct day / month and hour / minute / second, in\n// the afternoon so the `dayPeriod` part is present to read back.\nconst REFERENCE_DATE_TIME = new Date(2000, 1, 1, 13, 23, 45);\n\n/**\n * Derives the ordered segment list for a date(-time) field. At\n * `granularity === 'day'` this is exactly {@link buildSegments} (date-only,\n * byte-for-byte). At a finer granularity it appends the locale-ordered time\n * segments (and the date↔time separator) by formatting a reference date-time\n * with both date and time options in a single `Intl.DateTimeFormat` pass, so\n * the order of every part — and whether an AM/PM `dayPeriod` is present —\n * follows the locale and the resolved hour cycle.\n *\n * Pure: the same arguments always yield the same list.\n *\n * @param locale BCP 47 locale, or `undefined` for the runtime default.\n * @param granularity Smallest editable unit; `'day'` stays date-only.\n * @param hourCycle Resolved hour cycle (`12` shows AM/PM, `24` does not).\n */\nexport function buildDateTimeSegments(\n locale: string | undefined,\n granularity: FieldGranularity,\n hourCycle: 12 | 24,\n): readonly FieldSpec[] {\n if (granularity === 'day') {\n return buildSegments(locale);\n }\n const options: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n hour12: hourCycle === 12,\n };\n if (granularity !== 'hour') {\n options.minute = '2-digit';\n }\n if (granularity === 'second') {\n options.second = '2-digit';\n }\n\n const parts = new Intl.DateTimeFormat(locale, options).formatToParts(REFERENCE_DATE_TIME);\n const segments: FieldSpec[] = [];\n for (const part of parts) {\n switch (part.type) {\n case 'day':\n case 'month':\n case 'year':\n case 'hour':\n case 'minute':\n case 'second':\n case 'dayPeriod':\n segments.push({ kind: 'editable', type: part.type, digits: DIGITS[part.type] });\n break;\n case 'literal':\n segments.push({ kind: 'literal', literal: part.value });\n break;\n default:\n break;\n }\n }\n return segments;\n}\n","import { inject, InjectionToken } from '@angular/core';\n\nimport { type FieldSegment, type SegmentHandle, type SegmentEditorContext } from 'forty-cdk/core';\n\n/**\n * A rendered segment descriptor exposed by `ForDateField.segments()` for the\n * consumer's `@for`. Covers both editable spinbutton segments and the\n * decorative literal separators between them.\n */\nexport type DateFieldSegment = FieldSegment;\n\n/** Handle a `[forDateFieldSegment]` registers with the root for focus moves. */\nexport type ForDateFieldSegmentHandle = SegmentHandle;\n\n/**\n * The coordination surface `ForDateField` exposes to its segment / literal\n * children. Segments read the reactive per-part accessors for their ARIA and\n * display bindings, and call the behavior methods to type, step, clear, and\n * move focus — all canonical state lives on the root, never on the segment.\n *\n * It is the shared {@link SegmentEditorContext} backing both date and time\n * fields; `ForDateField` satisfies it by forwarding to its `SegmentEditor`.\n */\nexport type ForDateFieldContext = SegmentEditorContext;\n\n/**\n * Injection token for the {@link ForDateFieldContext} provided by\n * `[forDateField]`. Segment and literal children inject it to coordinate with\n * the root.\n */\nexport const FOR_DATE_FIELD_CONTEXT = new InjectionToken<ForDateFieldContext>(\n 'FOR_DATE_FIELD_CONTEXT',\n);\n\n/**\n * Resolves the surrounding {@link ForDateFieldContext}, throwing a descriptive,\n * primitive-prefixed error when used outside a `[forDateField]`.\n *\n * @param piece Name of the calling directive, used in the error message.\n */\nexport function injectDateFieldContext(piece: string): ForDateFieldContext {\n const ctx = inject(FOR_DATE_FIELD_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(`[forty-cdk/date-field] ${piece} must be used inside a [forDateField].`);\n }\n return ctx;\n}\n","import { type Provider } from '@angular/core';\n\nimport { createDefaults } from 'forty-cdk/core';\nimport type { DateTimeSegmentType } from './build-segments';\n\n/**\n * Accessible name announced for each editable segment, keyed by its part type.\n * Override individually (or wholesale) for localization; any key left unset\n * falls back to the library default for that part — so overriding just\n * `dayPeriod` keeps the English labels for the rest.\n */\nexport type ForDateFieldSegmentLabels = Partial<Record<DateTimeSegmentType, string>>;\n\n/**\n * Defaults inherited by descendant `[forDateField]` controls in the\n * surrounding injector scope. Configure with `provideForDateFieldDefaults` at\n * the application root or in any component's `providers`; partial overrides\n * merge with the parent scope.\n */\nexport interface ForDateFieldDefaults {\n /**\n * Accessible value announced (via `aria-valuetext`) for an empty editable\n * segment, so screen readers report the segment's empty state instead of\n * silence. Override for localization.\n */\n emptySegmentText: string;\n /**\n * Accessible names announced for each editable segment (via `aria-label`),\n * keyed by part type, used when a segment has no explicit `ariaLabel`. The\n * AM/PM `dayPeriod` defaults to `'AM/PM'` instead of leaking the raw token.\n * Override for localization; unset keys keep the library default.\n */\n segmentLabels: ForDateFieldSegmentLabels;\n}\n\n/**\n * Library default accessible name for each editable segment. Used when neither\n * the segment's explicit `ariaLabel` nor a `provideForDateFieldDefaults`\n * override supplies one for that part.\n */\nexport const DEFAULT_DATE_FIELD_SEGMENT_LABELS: Readonly<Record<DateTimeSegmentType, string>> = {\n day: 'day',\n month: 'month',\n year: 'year',\n hour: 'hour',\n minute: 'minute',\n second: 'second',\n dayPeriod: 'AM/PM',\n};\n\nconst FALLBACK: ForDateFieldDefaults = {\n emptySegmentText: 'Empty',\n segmentLabels: DEFAULT_DATE_FIELD_SEGMENT_LABELS,\n};\n\nconst { token, provideDefaults } = createDefaults<ForDateFieldDefaults>(\n 'FOR_DATE_FIELD_DEFAULTS',\n FALLBACK,\n);\n\n/** Token holding the resolved date-field defaults for the current scope. */\nexport const FOR_DATE_FIELD_DEFAULTS = token;\n\n/**\n * Configures forty-cdk date-field defaults for this injector scope. Partial\n * overrides inherit unspecified keys from the parent scope (or library\n * defaults at the root).\n */\nexport function provideForDateFieldDefaults(\n defaults: Partial<ForDateFieldDefaults> = {},\n): Provider[] {\n return provideDefaults(defaults);\n}\n","import {\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n model,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nimport {\n assertTimeCapable,\n type DateAdapter,\n injectDateAdapter,\n type TimeCapableDateAdapter,\n dayPeriodNames,\n resolveHourCycle,\n type FieldSpec,\n SegmentEditor,\n type SegmentHandle,\n type SegmentType,\n clampToBounds,\n serializeISODate,\n FormUiControlBase,\n injectHiddenInput,\n type WritingDirection,\n RovingTabindex,\n injectTextDirection,\n} from 'forty-cdk/core';\nimport {\n buildDateTimeSegments,\n type DateTimeSegmentType,\n type FieldGranularity,\n} from './build-segments';\nimport { FOR_DATE_FIELD_CONTEXT, type ForDateFieldContext } from './date-field-context';\nimport { FOR_DATE_FIELD_DEFAULTS } from './date-field-defaults';\n\n/** Internal per-part state: the entered value for each editable segment, hour as 0-23. */\ninterface DateTimeParts {\n day: number | null;\n month: number | null;\n year: number | null;\n hour: number | null;\n minute: number | null;\n second: number | null;\n}\n\n/**\n * Year used to resolve day ranges (Feb length) while the year segment is empty.\n * Deliberately a common (non-leap) year so an empty-year February reports\n * `aria-valuemax=\"28\"` rather than briefly jumping to 29.\n */\nconst RESOLVER_YEAR = 2001;\n\n/**\n * Headless, segmented, spin-editable date input — the keyboard-first\n * counterpart to `ForCalendar`. There is no single WAI-ARIA APG pattern for a\n * date field; it is a composition of\n * [Spinbuttons](https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/) inside a\n * labelled `role=\"group\"`.\n * Each day / month / year part is an independent `role=\"spinbutton\"` segment\n * (`[forDateFieldSegment]`) so entry is unambiguous and locale-correct — no\n * free-text parsing, no `03/04`-is-it-March-4th guesswork.\n *\n * `ForDateField` is the root: it owns the entered parts, composes them into the\n * adapter's date type, resolves the locale-ordered segment list, and exposes\n * everything to the segment / literal children through\n * {@link FOR_DATE_FIELD_CONTEXT}. The spin-button engine (digit typing, stepping,\n * Home/End, RTL focus moves, the segment registry) lives in the shared\n * `_internal/datetime` {@link SegmentEditor}; the root supplies only the\n * date-specific bits (segment bounds, the today-seed, the month-name\n * `aria-valuetext`, and the create/clamp compose). All date math goes through\n * the pluggable {@link DateAdapter} shared with `ForCalendar`\n * (`provideInternationalizedDateAdapter()` / `provideNativeDateAdapter()`), so\n * the field hard-depends on no date library.\n *\n * Set `granularity` coarser-than-a-day off (`'hour'` / `'minute'` / `'second'`)\n * to make it a **date-time field**: time segments (hour / minute / second and,\n * in 12-hour mode, an AM·PM `dayPeriod`) are appended after the date segments in\n * the same `role=\"group\"`, sharing the one roving tab stop. This needs a\n * time-capable adapter (`provideNativeDateAdapter()` /\n * `provideInternationalizedDateTimeAdapter()`); `granularity = 'day'` (default)\n * is unchanged and works with any adapter.\n *\n * It implements `FormValueControl<D | null>` from `@angular/forms/signals`, so\n * it auto-wires with `[formField]` and auto-associates inside a `[forField]`.\n * The value stays `null` until every visible segment is filled.\n *\n * @typeParam D The adapter's immutable date (or, with `granularity > 'day'`,\n * date-time) type.\n *\n * Note: the date bounds are named `minDate` / `maxDate`, not `min` / `max` —\n * the latter are reserved `FormUiControl` members typed `number | undefined`\n * for numeric validators, so a date-typed `min` / `max` would break the\n * `FormValueControl` contract.\n *\n * @example\n * ```html\n * <div forDateField [(value)]=\"date\" [minDate]=\"min\" [maxDate]=\"max\" name=\"dob\"\n * [ariaLabel]=\"'Date of birth'\" #field=\"forDateField\">\n * @for (seg of field.segments(); track seg.id) {\n * @if (seg.isLiteral) {\n * <span forDateFieldLiteral>{{ seg.text }}</span>\n * } @else {\n * <span forDateFieldSegment [segment]=\"seg.type!\">{{ seg.text }}</span>\n * }\n * }\n * </div>\n * ```\n */\n@Directive({\n selector: '[forDateField]',\n exportAs: 'forDateField',\n host: {\n role: 'group',\n '[attr.dir]': 'dir()',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.aria-disabled]': 'effectiveDisabled() ? \"true\" : null',\n '[attr.aria-readonly]': 'readonly() ? \"true\" : null',\n '[attr.aria-required]': 'required() ? \"true\" : null',\n '[attr.aria-invalid]': 'invalid() ? \"true\" : null',\n '[attr.data-disabled]': 'effectiveDisabled() ? \"\" : null',\n '[attr.data-readonly]': 'readonly() ? \"\" : null',\n '[attr.data-empty]': 'value() === null ? \"\" : null',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [{ provide: FOR_DATE_FIELD_CONTEXT, useExisting: ForDateField }],\n})\nexport class ForDateField<D>\n extends FormUiControlBase\n implements FormValueControl<D | null>, ForDateFieldContext\n{\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #defaults = inject(FOR_DATE_FIELD_DEFAULTS);\n\n /** The active date adapter, resolved from `FOR_DATE_ADAPTER` (shared with `ForCalendar`). */\n readonly adapter: DateAdapter<D> = injectDateAdapter<D>('ForDateField');\n\n /**\n * Two-way bindable entered date, or `null` while any segment is empty.\n * Required by `FormValueControl<D | null>`. The `model()` change emitter\n * (`(valueChange)`) fires only when the field itself composes a new value,\n * never on consumer writes via `[(value)]`.\n */\n readonly value = model<D | null>(null);\n\n /**\n * Minimum selectable date (inclusive). A composed value below it is clamped\n * up. The comparison is by the **full instant** (`DateAdapter.compare`), so at\n * `granularity > 'day'` a non-midnight `minDate` clamps the time too, and the\n * result is identical across time-capable adapters. Named `minDate` (not\n * `min`) because `FormUiControl.min` is reserved for a numeric validator bound\n * by `[formField]`.\n */\n readonly minDate = input<D | null>(null);\n\n /**\n * Maximum selectable date (inclusive). A composed value above it is clamped\n * down. Compared by the **full instant** like {@link minDate}. Named `maxDate`\n * (not `max`) for the same reason as {@link minDate}.\n */\n readonly maxDate = input<D | null>(null);\n\n /**\n * Date-time precision. `'day'` (default, **non-breaking**) is a pure date\n * field. `'hour'` / `'minute'` / `'second'` append the matching time segments\n * and the value carries a time component — which requires a time-capable\n * adapter (`provideNativeDateAdapter()` /\n * `provideInternationalizedDateTimeAdapter()`).\n */\n readonly granularity = input<FieldGranularity>('day');\n\n /**\n * 12- or 24-hour cycle for the time segments. When `null` (default) it is\n * derived from the locale. A 12-hour cycle adds the AM/PM `dayPeriod` segment.\n * Only meaningful when `granularity > 'day'`.\n */\n readonly hourCycle = input<12 | 24 | null>(null);\n\n /** BCP 47 locale driving segment order and separators. Defaults to the runtime locale. */\n readonly locale = input<string | null>(null);\n\n /**\n * Per-segment placeholder shown while empty. Unspecified parts fall back to a\n * letter-repeat default (`dd` / `mm` / `yyyy` / `hh` / `mm` / `ss` / `--`).\n */\n readonly placeholder = input<Partial<Record<DateTimeSegmentType, string>>>({});\n\n /** Accessible name for the field group. Emits no `aria-label` while `null`. */\n readonly ariaLabel = input<string | null>(null);\n\n /**\n * Writing direction. When unset (default `null`), the inherited ambient\n * direction is resolved from the nearest ancestor carrying a `dir` attribute\n * (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.\n * The resolved value is reflected to the host `dir` attribute and mirrors the\n * ArrowLeft / ArrowRight segment navigation in RTL.\n */\n readonly _dirInput = input<WritingDirection | null>(null, { alias: 'dir' });\n readonly dir = injectTextDirection(this._dirInput);\n\n /** Shared roving-tabindex tracker: exactly one segment owns `tabindex=0`. */\n readonly roving = new RovingTabindex();\n\n /** Resolved hour cycle (`12` shows AM/PM, `24` does not). */\n readonly #cycle = computed(() => resolveHourCycle(this.locale() ?? undefined, this.hourCycle()));\n\n readonly #specs = computed<readonly FieldSpec[]>(() =>\n buildDateTimeSegments(this.locale() ?? undefined, this.granularity(), this.#cycle()),\n );\n\n readonly #editableOrder = computed<readonly SegmentType[]>(() =>\n this.#specs()\n .filter((spec): spec is Extract<FieldSpec, { kind: 'editable' }> => spec.kind === 'editable')\n .map((spec) => spec.type),\n );\n\n readonly #periodNames = computed(() => dayPeriodNames(this.locale() ?? undefined));\n\n /**\n * The entered parts. A `linkedSignal` keyed on `value`: a non-null write\n * (consumer, `[formField]`, or our own compose) rehydrates the segments from\n * the date. A `null` transition is disambiguated by the prior parts: an\n * *internal* edit clearing one segment always leaves the others, so\n * `previous` still carries a filled part and is preserved (clearing the day\n * never wipes the month / year); an *external* reset of a complete value\n * leaves `previous` fully filled, so the field clears.\n */\n readonly #parts = linkedSignal<D | null, DateTimeParts>({\n source: this.value,\n computation: (current, previous) => {\n if (current !== null) {\n const parts: DateTimeParts = {\n day: this.adapter.getDate(current),\n month: this.adapter.getMonth(current),\n year: this.adapter.getYear(current),\n hour: null,\n minute: null,\n second: null,\n };\n if (this.granularity() !== 'day') {\n const time = this.#time();\n parts.hour = time.getHours(current);\n parts.minute = time.getMinutes(current);\n parts.second = time.getSeconds(current);\n }\n return parts;\n }\n const prior = previous?.value;\n if (prior && this.#someEditableEmpty(prior)) {\n return prior;\n }\n return { day: null, month: null, year: null, hour: null, minute: null, second: null };\n },\n });\n\n readonly #editor = new SegmentEditor<DateTimeParts>({\n disabled: this.effectiveDisabled,\n readonly: this.readonly,\n roving: this.roving,\n cycle: this.#cycle,\n specs: this.#specs,\n editableOrder: this.#editableOrder,\n periodNames: this.#periodNames,\n parts: () => this.#parts(),\n segmentMin: (type) => this.segmentMin(type),\n segmentMax: (type) => this.segmentMax(type),\n seed: (type) => this.#seed(type),\n placeholderFor: (type) => this.#placeholderFor(type),\n valueText: (type) => this.#valueText(type),\n commit: (next) => this.#commitParts(next),\n });\n\n /**\n * The ordered, locale-derived segments (editable + literals) to render. Each\n * entry carries the text to display: the formatted value when filled, the\n * placeholder while empty, or the literal separator.\n */\n readonly segments = this.#editor.segments;\n\n constructor() {\n super();\n injectHiddenInput({\n name: this.name,\n values: computed(() => {\n const current = this.value();\n if (current === null) {\n return [];\n }\n return [serializeISODate(this.adapter, current, this.granularity(), 'ForDateField')];\n }),\n disabled: this.effectiveDisabled,\n });\n\n // Eager validation: a date-time field needs a time-capable adapter. Fail\n // loudly as soon as the granularity input settles. The throw is raised\n // during change detection (inside this `effect`) and propagates through\n // Angular's error handling, so a day-only adapter misconfiguration is\n // surfaced — never silently swallowed.\n effect(() => {\n if (this.granularity() !== 'day') {\n this.#time();\n }\n });\n }\n\n segmentValue(type: SegmentType): number | null {\n return this.#editor.segmentValue(type);\n }\n\n segmentMin(type: SegmentType): number {\n if (type === 'hour') {\n return this.#cycle() === 12 ? 1 : 0;\n }\n if (type === 'minute' || type === 'second' || type === 'dayPeriod') {\n return 0;\n }\n return 1;\n }\n\n segmentMax(type: SegmentType): number {\n switch (type) {\n case 'month':\n return 12;\n case 'year':\n return 9999;\n case 'hour':\n return this.#cycle() === 12 ? 12 : 23;\n case 'minute':\n case 'second':\n return 59;\n case 'dayPeriod':\n return 1;\n default: {\n const parts = this.#parts();\n const probe = this.adapter.createDate(parts.year ?? RESOLVER_YEAR, parts.month ?? 1, 1);\n return this.adapter.getDaysInMonth(probe);\n }\n }\n }\n\n segmentValueText(type: SegmentType): string | null {\n return this.#editor.segmentValueText(type);\n }\n\n segmentDisplayText(type: SegmentType): string {\n return this.#editor.segmentDisplayText(type);\n }\n\n isSegmentEmpty(type: SegmentType): boolean {\n return this.#editor.isSegmentEmpty(type);\n }\n\n isFirstSegmentType(type: SegmentType): boolean {\n return this.#editor.isFirstSegmentType(type);\n }\n\n registerSegment(handle: SegmentHandle): void {\n this.#editor.registerSegment(handle);\n }\n\n unregisterSegment(handle: SegmentHandle): void {\n this.#editor.unregisterSegment(handle);\n }\n\n focusSegment(type: SegmentType): void {\n this.#editor.focusSegment(type);\n }\n\n typeDigit(type: SegmentType, digit: number): void {\n this.#editor.typeDigit(type, digit);\n }\n\n step(type: SegmentType, delta: number): void {\n this.#editor.step(type, delta);\n }\n\n goToBound(type: SegmentType, bound: 'min' | 'max'): void {\n this.#editor.goToBound(type, bound);\n }\n\n setDayPeriod(period: 'am' | 'pm'): void {\n this.#editor.setDayPeriod(period);\n }\n\n clear(type: SegmentType): void {\n this.#editor.clear(type);\n }\n\n focusSibling(type: SegmentType, step: -1 | 1): void {\n this.#editor.focusSibling(type, step);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (!next || !this.#host.nativeElement.contains(next)) {\n this.markTouched();\n }\n }\n\n /** The active adapter, narrowed to a time-capable one; throws when it is day-only. */\n #time(): TimeCapableDateAdapter<D> {\n return assertTimeCapable(this.adapter, 'ForDateField');\n }\n\n /** Field-specific `aria-valuetext`: the empty marker or the localized month name. */\n #valueText(type: SegmentType): string | null {\n if (this.isSegmentEmpty(type)) {\n return this.#defaults.emptySegmentText;\n }\n if (type !== 'month') {\n return null;\n }\n const month = this.#parts().month;\n if (month === null) {\n return null;\n }\n // Route the month name through the adapter's `format` so it tracks the\n // adapter's calendar system rather than assuming Gregorian month numbering.\n // A probe date built with `createDate` maps the 1-12 number to a localized\n // long name without involving the entered value.\n return this.adapter.format(this.adapter.createDate(RESOLVER_YEAR, month, 1), {\n month: 'long',\n });\n }\n\n /** Base value for stepping an empty segment: date parts from today, time parts from their minimum. */\n #seed(type: SegmentType): number {\n if (type === 'hour') {\n return this.#toInternalHour(this.segmentMin('hour'));\n }\n if (type === 'minute' || type === 'second' || type === 'dayPeriod') {\n return 0;\n }\n const today = this.adapter.today();\n const base =\n type === 'day'\n ? this.adapter.getDate(today)\n : type === 'month'\n ? this.adapter.getMonth(today)\n : this.adapter.getYear(today);\n return Math.min(this.segmentMax(type), Math.max(this.segmentMin(type), base));\n }\n\n /** Converts a 12-hour display hour to a 0-23 hour, preserving the entered AM/PM. */\n #toInternalHour(display: number): number {\n if (this.#cycle() === 24) {\n return display;\n }\n const hour = this.#parts().hour;\n const pm = hour !== null && hour >= 12;\n const base = display % 12;\n return pm ? base + 12 : base;\n }\n\n #placeholderFor(type: SegmentType): string {\n const override = this.placeholder()[type];\n if (override) {\n return override;\n }\n switch (type) {\n case 'day':\n return 'dd';\n case 'month':\n return 'mm';\n case 'year':\n return 'yyyy';\n case 'hour':\n return 'hh';\n case 'minute':\n return 'mm';\n case 'second':\n return 'ss';\n default:\n return '--';\n }\n }\n\n #someEditableEmpty(parts: DateTimeParts): boolean {\n return this.#editableOrder().some((type) => {\n if (type === 'dayPeriod') {\n return parts.hour === null;\n }\n return parts[type] === null;\n });\n }\n\n /**\n * Re-clamps `day` to the resolved month/year length so the day segment's\n * `aria-valuenow` never exceeds its `aria-valuemax` after stepping the month\n * or year (e.g. day 31 + step to February → 28/29). Only ever shrinks the\n * day; an empty day is left untouched.\n */\n #clampDay(parts: DateTimeParts): DateTimeParts {\n if (parts.day === null) {\n return parts;\n }\n const probe = this.adapter.createDate(parts.year ?? RESOLVER_YEAR, parts.month ?? 1, 1);\n const maxDay = this.adapter.getDaysInMonth(probe);\n if (parts.day <= maxDay) {\n return parts;\n }\n return { ...parts, day: maxDay };\n }\n\n #commitParts(rawNext: DateTimeParts): void {\n const next = this.#clampDay(rawNext);\n this.#parts.set(next);\n const granularity = this.granularity();\n const needHour = granularity !== 'day';\n const needMinute = granularity === 'minute' || granularity === 'second';\n const needSecond = granularity === 'second';\n const complete =\n next.day !== null &&\n next.month !== null &&\n next.year !== null &&\n (!needHour || next.hour !== null) &&\n (!needMinute || next.minute !== null) &&\n (!needSecond || next.second !== null);\n if (!complete) {\n this.value.set(null);\n return;\n }\n let created = this.adapter.createDate(next.year!, next.month!, next.day!);\n if (needHour) {\n created = this.#time().setTime(\n created,\n next.hour!,\n needMinute ? next.minute! : 0,\n needSecond ? next.second! : 0,\n );\n }\n this.value.set(clampToBounds(this.adapter, created, this.minDate(), this.maxDate()));\n }\n}\n","import { computed, Directive, inject, input } from '@angular/core';\n\nimport { ForDateTimeSegmentBase } from 'forty-cdk/core';\nimport type { DateTimeSegmentType } from './build-segments';\nimport { injectDateFieldContext } from './date-field-context';\nimport { DEFAULT_DATE_FIELD_SEGMENT_LABELS, FOR_DATE_FIELD_DEFAULTS } from './date-field-defaults';\n\n/**\n * One editable spinbutton segment of a `[forDateField]` — the day, month, or\n * year part (and, at `granularity > 'day'`, hour / minute / second / the AM·PM\n * `dayPeriod`). Apply on a focusable element (typically a `<span>`); the shared\n * {@link ForDateTimeSegmentBase} adds `role=\"spinbutton\"`, the `aria-valuemin` /\n * `aria-valuemax` / `aria-valuenow` / `aria-valuetext` reflection, the roving\n * tabindex, and the full keyboard map:\n *\n * - **digits** fill a numeric segment and auto-advance to the next when full;\n * - **a / p** set the period on the AM/PM (`dayPeriod`) segment;\n * - **ArrowUp / ArrowDown** step the value (day / month / hour / minute / second\n * wrap, year clamps, dayPeriod toggles);\n * - **ArrowLeft / ArrowRight** move between segments (mirrored under RTL, no wrap);\n * - **Home / End** jump to the segment minimum / maximum (dayPeriod → AM / PM);\n * - **Backspace / Delete** clear a numeric segment.\n *\n * All state lives on the root `ForDateField`; the segment only reads it and\n * forwards intents. The rendered text comes from the root's `segments()` list\n * (`{{ seg.text }}`), so this element carries behavior and ARIA, not content.\n */\n@Directive({\n selector: '[forDateFieldSegment]',\n exportAs: 'forDateFieldSegment',\n})\nexport class ForDateFieldSegment extends ForDateTimeSegmentBase {\n protected readonly ctx = injectDateFieldContext('ForDateFieldSegment');\n readonly #defaults = inject(FOR_DATE_FIELD_DEFAULTS);\n\n /** Which date or time part this segment edits. */\n readonly segment = input.required<DateTimeSegmentType>();\n\n /**\n * Accessible name for this segment. Falls back to the scope's localized\n * default label for the part (via `provideForDateFieldDefaults`), which in\n * turn defaults to the part name — and `'AM/PM'` for the `dayPeriod` segment.\n */\n readonly ariaLabel = input<string | null>(null);\n\n protected override readonly resolvedAriaLabel = computed(() => {\n const type = this.segment();\n return (\n this.ariaLabel() ??\n this.#defaults.segmentLabels[type] ??\n DEFAULT_DATE_FIELD_SEGMENT_LABELS[type]\n );\n });\n\n constructor() {\n super();\n this.registerSegment();\n }\n}\n","import { Directive } from '@angular/core';\n\nimport { ForDateTimeLiteralBase } from 'forty-cdk/core';\n\n/**\n * A decorative separator (`/`, `.`, `-`) between the editable segments of a\n * `[forDateField]`. Apply on the element rendering the literal text; it is\n * marked `aria-hidden` and stays out of the tab order, so assistive tech reads\n * only the spinbutton segments. The separator characters come from the root's\n * locale-ordered `segments()` list (`{{ seg.text }}`).\n */\n@Directive({\n selector: '[forDateFieldLiteral]',\n exportAs: 'forDateFieldLiteral',\n})\nexport class ForDateFieldLiteral extends ForDateTimeLiteralBase {}\n","/**\n * Exact public names of every `ForDateField` input, its models included. Spread it into the\n * `inputs` array of a `hostDirectives` entry so a wrapper component re-exposes the\n * primitive's full surface — the Signal Forms members `[formField]` binds among them —\n * without hand-maintaining the list. Always spread into an inline object literal as shown\n * below: the literal is what keeps the entry statically analyzable for consumers compiling\n * against the published package. An anti-drift spec fails when this list no longer matches\n * the directive's actual API. See `docs/wrapping-form-primitives.md` for both supported\n * wrapping patterns.\n *\n * @example\n * ```ts\n * @Component({\n * selector: 'div[myDateField]',\n * template: '',\n * hostDirectives: [\n * {\n * directive: ForDateField,\n * inputs: [...FOR_DATE_FIELD_HOST_DIRECTIVE_INPUTS],\n * outputs: [...FOR_DATE_FIELD_HOST_DIRECTIVE_OUTPUTS],\n * },\n * ],\n * })\n * export class MyDateField {}\n * ```\n */\nexport const FOR_DATE_FIELD_HOST_DIRECTIVE_INPUTS = [\n 'value',\n 'ariaLabel',\n 'dir',\n 'dirty',\n 'disabled',\n 'errors',\n 'granularity',\n 'hourCycle',\n 'invalid',\n 'locale',\n 'maxDate',\n 'minDate',\n 'name',\n 'pending',\n 'placeholder',\n 'readonly',\n 'required',\n 'touched',\n] as const;\n\n/**\n * Exact public names of every `ForDateField` output, the Signal Forms `touch` output\n * included. Spread it into the `outputs` array of the same `hostDirectives` entry as\n * {@link FOR_DATE_FIELD_HOST_DIRECTIVE_INPUTS}.\n */\nexport const FOR_DATE_FIELD_HOST_DIRECTIVE_OUTPUTS = [\n 'valueChange',\n 'touchedChange',\n 'touch',\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}