@vadem/ui 0.0.0-stage → 0.0.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 (289) hide show
  1. package/LICENSE-lucide.txt +43 -0
  2. package/README.md +19 -2
  3. package/fesm2022/vadem-ui-accordion.mjs +139 -0
  4. package/fesm2022/vadem-ui-accordion.mjs.map +1 -0
  5. package/fesm2022/vadem-ui-active-filters.mjs +355 -0
  6. package/fesm2022/vadem-ui-active-filters.mjs.map +1 -0
  7. package/fesm2022/vadem-ui-alert-dialog.mjs +433 -0
  8. package/fesm2022/vadem-ui-alert-dialog.mjs.map +1 -0
  9. package/fesm2022/vadem-ui-alert.mjs +266 -0
  10. package/fesm2022/vadem-ui-alert.mjs.map +1 -0
  11. package/fesm2022/vadem-ui-autocomplete.mjs +715 -0
  12. package/fesm2022/vadem-ui-autocomplete.mjs.map +1 -0
  13. package/fesm2022/vadem-ui-avatar.mjs +219 -0
  14. package/fesm2022/vadem-ui-avatar.mjs.map +1 -0
  15. package/fesm2022/vadem-ui-badge.mjs +86 -0
  16. package/fesm2022/vadem-ui-badge.mjs.map +1 -0
  17. package/fesm2022/vadem-ui-breadcrumbs.mjs +61 -0
  18. package/fesm2022/vadem-ui-breadcrumbs.mjs.map +1 -0
  19. package/fesm2022/vadem-ui-button.mjs +220 -0
  20. package/fesm2022/vadem-ui-button.mjs.map +1 -0
  21. package/fesm2022/vadem-ui-calendar.mjs +1314 -0
  22. package/fesm2022/vadem-ui-calendar.mjs.map +1 -0
  23. package/fesm2022/vadem-ui-card.mjs +271 -0
  24. package/fesm2022/vadem-ui-card.mjs.map +1 -0
  25. package/fesm2022/vadem-ui-character-count.mjs +269 -0
  26. package/fesm2022/vadem-ui-character-count.mjs.map +1 -0
  27. package/fesm2022/vadem-ui-chart.mjs +1984 -0
  28. package/fesm2022/vadem-ui-chart.mjs.map +1 -0
  29. package/fesm2022/vadem-ui-checkbox.mjs +67 -0
  30. package/fesm2022/vadem-ui-checkbox.mjs.map +1 -0
  31. package/fesm2022/vadem-ui-color-picker.mjs +815 -0
  32. package/fesm2022/vadem-ui-color-picker.mjs.map +1 -0
  33. package/fesm2022/vadem-ui-command.mjs +735 -0
  34. package/fesm2022/vadem-ui-command.mjs.map +1 -0
  35. package/fesm2022/vadem-ui-copy-button.mjs +375 -0
  36. package/fesm2022/vadem-ui-copy-button.mjs.map +1 -0
  37. package/fesm2022/vadem-ui-date-range-picker.mjs +1011 -0
  38. package/fesm2022/vadem-ui-date-range-picker.mjs.map +1 -0
  39. package/fesm2022/vadem-ui-description-list.mjs +59 -0
  40. package/fesm2022/vadem-ui-description-list.mjs.map +1 -0
  41. package/fesm2022/vadem-ui-dialog.mjs +587 -0
  42. package/fesm2022/vadem-ui-dialog.mjs.map +1 -0
  43. package/fesm2022/vadem-ui-dropzone.mjs +176 -0
  44. package/fesm2022/vadem-ui-dropzone.mjs.map +1 -0
  45. package/fesm2022/vadem-ui-editable-text.mjs +641 -0
  46. package/fesm2022/vadem-ui-editable-text.mjs.map +1 -0
  47. package/fesm2022/vadem-ui-empty-state.mjs +175 -0
  48. package/fesm2022/vadem-ui-empty-state.mjs.map +1 -0
  49. package/fesm2022/vadem-ui-expandable-text.mjs +244 -0
  50. package/fesm2022/vadem-ui-expandable-text.mjs.map +1 -0
  51. package/fesm2022/vadem-ui-field.mjs +583 -0
  52. package/fesm2022/vadem-ui-field.mjs.map +1 -0
  53. package/fesm2022/vadem-ui-file-preview.mjs +532 -0
  54. package/fesm2022/vadem-ui-file-preview.mjs.map +1 -0
  55. package/fesm2022/vadem-ui-file-size.mjs +83 -0
  56. package/fesm2022/vadem-ui-file-size.mjs.map +1 -0
  57. package/fesm2022/vadem-ui-form-error-summary.mjs +201 -0
  58. package/fesm2022/vadem-ui-form-error-summary.mjs.map +1 -0
  59. package/fesm2022/vadem-ui-icon.mjs +303 -0
  60. package/fesm2022/vadem-ui-icon.mjs.map +1 -0
  61. package/fesm2022/vadem-ui-input.mjs +120 -0
  62. package/fesm2022/vadem-ui-input.mjs.map +1 -0
  63. package/fesm2022/vadem-ui-kbd.mjs +286 -0
  64. package/fesm2022/vadem-ui-kbd.mjs.map +1 -0
  65. package/fesm2022/vadem-ui-keyboard.mjs +105 -0
  66. package/fesm2022/vadem-ui-keyboard.mjs.map +1 -0
  67. package/fesm2022/vadem-ui-locale.mjs +443 -0
  68. package/fesm2022/vadem-ui-locale.mjs.map +1 -0
  69. package/fesm2022/vadem-ui-menu.mjs +637 -0
  70. package/fesm2022/vadem-ui-menu.mjs.map +1 -0
  71. package/fesm2022/vadem-ui-navigation-list.mjs +130 -0
  72. package/fesm2022/vadem-ui-navigation-list.mjs.map +1 -0
  73. package/fesm2022/vadem-ui-number-input.mjs +264 -0
  74. package/fesm2022/vadem-ui-number-input.mjs.map +1 -0
  75. package/fesm2022/vadem-ui-otp-input.mjs +86 -0
  76. package/fesm2022/vadem-ui-otp-input.mjs.map +1 -0
  77. package/fesm2022/vadem-ui-pagination.mjs +353 -0
  78. package/fesm2022/vadem-ui-pagination.mjs.map +1 -0
  79. package/fesm2022/vadem-ui-password-input.mjs +213 -0
  80. package/fesm2022/vadem-ui-password-input.mjs.map +1 -0
  81. package/fesm2022/vadem-ui-popover.mjs +178 -0
  82. package/fesm2022/vadem-ui-popover.mjs.map +1 -0
  83. package/fesm2022/vadem-ui-progress.mjs +331 -0
  84. package/fesm2022/vadem-ui-progress.mjs.map +1 -0
  85. package/fesm2022/vadem-ui-radio.mjs +39 -0
  86. package/fesm2022/vadem-ui-radio.mjs.map +1 -0
  87. package/fesm2022/vadem-ui-range-slider.mjs +561 -0
  88. package/fesm2022/vadem-ui-range-slider.mjs.map +1 -0
  89. package/fesm2022/vadem-ui-rating.mjs +404 -0
  90. package/fesm2022/vadem-ui-rating.mjs.map +1 -0
  91. package/fesm2022/vadem-ui-relative-time.mjs +217 -0
  92. package/fesm2022/vadem-ui-relative-time.mjs.map +1 -0
  93. package/fesm2022/vadem-ui-reorder-list.mjs +601 -0
  94. package/fesm2022/vadem-ui-reorder-list.mjs.map +1 -0
  95. package/fesm2022/vadem-ui-scroll-area.mjs +65 -0
  96. package/fesm2022/vadem-ui-scroll-area.mjs.map +1 -0
  97. package/fesm2022/vadem-ui-search-input.mjs +307 -0
  98. package/fesm2022/vadem-ui-search-input.mjs.map +1 -0
  99. package/fesm2022/vadem-ui-segmented.mjs +297 -0
  100. package/fesm2022/vadem-ui-segmented.mjs.map +1 -0
  101. package/fesm2022/vadem-ui-select.mjs +1462 -0
  102. package/fesm2022/vadem-ui-select.mjs.map +1 -0
  103. package/fesm2022/vadem-ui-sidebar.mjs +493 -0
  104. package/fesm2022/vadem-ui-sidebar.mjs.map +1 -0
  105. package/fesm2022/vadem-ui-skeleton.mjs +106 -0
  106. package/fesm2022/vadem-ui-skeleton.mjs.map +1 -0
  107. package/fesm2022/vadem-ui-slider.mjs +60 -0
  108. package/fesm2022/vadem-ui-slider.mjs.map +1 -0
  109. package/fesm2022/vadem-ui-splitter.mjs +438 -0
  110. package/fesm2022/vadem-ui-splitter.mjs.map +1 -0
  111. package/fesm2022/vadem-ui-stat.mjs +369 -0
  112. package/fesm2022/vadem-ui-stat.mjs.map +1 -0
  113. package/fesm2022/vadem-ui-stepper.mjs +483 -0
  114. package/fesm2022/vadem-ui-stepper.mjs.map +1 -0
  115. package/fesm2022/vadem-ui-switch.mjs +45 -0
  116. package/fesm2022/vadem-ui-switch.mjs.map +1 -0
  117. package/fesm2022/vadem-ui-table.mjs +593 -0
  118. package/fesm2022/vadem-ui-table.mjs.map +1 -0
  119. package/fesm2022/vadem-ui-tabs.mjs +405 -0
  120. package/fesm2022/vadem-ui-tabs.mjs.map +1 -0
  121. package/fesm2022/vadem-ui-tag-input.mjs +685 -0
  122. package/fesm2022/vadem-ui-tag-input.mjs.map +1 -0
  123. package/fesm2022/vadem-ui-text-highlight.mjs +126 -0
  124. package/fesm2022/vadem-ui-text-highlight.mjs.map +1 -0
  125. package/fesm2022/vadem-ui-time-input.mjs +430 -0
  126. package/fesm2022/vadem-ui-time-input.mjs.map +1 -0
  127. package/fesm2022/vadem-ui-timeline.mjs +313 -0
  128. package/fesm2022/vadem-ui-timeline.mjs.map +1 -0
  129. package/fesm2022/vadem-ui-toast.mjs +397 -0
  130. package/fesm2022/vadem-ui-toast.mjs.map +1 -0
  131. package/fesm2022/vadem-ui-toolbar.mjs +396 -0
  132. package/fesm2022/vadem-ui-toolbar.mjs.map +1 -0
  133. package/fesm2022/vadem-ui-tooltip.mjs +218 -0
  134. package/fesm2022/vadem-ui-tooltip.mjs.map +1 -0
  135. package/fesm2022/vadem-ui-tree.mjs +551 -0
  136. package/fesm2022/vadem-ui-tree.mjs.map +1 -0
  137. package/fesm2022/vadem-ui-upload-list.mjs +408 -0
  138. package/fesm2022/vadem-ui-upload-list.mjs.map +1 -0
  139. package/fesm2022/vadem-ui.mjs +4 -0
  140. package/fesm2022/vadem-ui.mjs.map +1 -0
  141. package/fonts/jetbrains-mono/OFL.txt +93 -0
  142. package/fonts/jetbrains-mono/jetbrains-mono-cyrillic.woff2 +0 -0
  143. package/fonts/jetbrains-mono/jetbrains-mono-latin.woff2 +0 -0
  144. package/fonts/manrope/OFL.txt +93 -0
  145. package/fonts/manrope/manrope-cyrillic.woff2 +0 -0
  146. package/fonts/manrope/manrope-latin.woff2 +0 -0
  147. package/package.json +306 -3
  148. package/styles/base.css +160 -0
  149. package/styles/components/accordion.css +130 -0
  150. package/styles/components/active-filters.css +42 -0
  151. package/styles/components/alert-dialog.css +34 -0
  152. package/styles/components/alert.css +159 -0
  153. package/styles/components/autocomplete.css +97 -0
  154. package/styles/components/avatar.css +90 -0
  155. package/styles/components/badge.css +91 -0
  156. package/styles/components/breadcrumbs.css +94 -0
  157. package/styles/components/button.css +174 -0
  158. package/styles/components/calendar.css +186 -0
  159. package/styles/components/card.css +206 -0
  160. package/styles/components/character-count.css +41 -0
  161. package/styles/components/chart.css +308 -0
  162. package/styles/components/checkbox.css +115 -0
  163. package/styles/components/color-picker.css +158 -0
  164. package/styles/components/command.css +175 -0
  165. package/styles/components/copy-button.css +58 -0
  166. package/styles/components/date-range-picker.css +153 -0
  167. package/styles/components/description-list.css +69 -0
  168. package/styles/components/dialog.css +334 -0
  169. package/styles/components/dropzone.css +89 -0
  170. package/styles/components/editable-text.css +58 -0
  171. package/styles/components/empty-state.css +72 -0
  172. package/styles/components/expandable-text.css +24 -0
  173. package/styles/components/field.css +148 -0
  174. package/styles/components/file-preview.css +65 -0
  175. package/styles/components/form-error-summary.css +71 -0
  176. package/styles/components/icon.css +38 -0
  177. package/styles/components/index.css +80 -0
  178. package/styles/components/input.css +171 -0
  179. package/styles/components/kbd.css +42 -0
  180. package/styles/components/menu.css +168 -0
  181. package/styles/components/multi-select.css +156 -0
  182. package/styles/components/navigation-list.css +147 -0
  183. package/styles/components/number-input.css +33 -0
  184. package/styles/components/otp-input.css +26 -0
  185. package/styles/components/pagination.css +127 -0
  186. package/styles/components/password-input.css +20 -0
  187. package/styles/components/popover.css +93 -0
  188. package/styles/components/progress-ring.css +112 -0
  189. package/styles/components/progress.css +162 -0
  190. package/styles/components/radio.css +117 -0
  191. package/styles/components/range-slider.css +158 -0
  192. package/styles/components/rating.css +100 -0
  193. package/styles/components/reorder-list.css +143 -0
  194. package/styles/components/scroll-area.css +39 -0
  195. package/styles/components/search-input.css +25 -0
  196. package/styles/components/segmented.css +136 -0
  197. package/styles/components/select.css +257 -0
  198. package/styles/components/sidebar.css +105 -0
  199. package/styles/components/skeleton.css +83 -0
  200. package/styles/components/slider.css +132 -0
  201. package/styles/components/splitter.css +83 -0
  202. package/styles/components/stat.css +62 -0
  203. package/styles/components/stepper.css +236 -0
  204. package/styles/components/switch.css +107 -0
  205. package/styles/components/table.css +195 -0
  206. package/styles/components/tabs.css +198 -0
  207. package/styles/components/tag-input.css +138 -0
  208. package/styles/components/text-highlight.css +22 -0
  209. package/styles/components/time-input.css +96 -0
  210. package/styles/components/timeline.css +182 -0
  211. package/styles/components/toast.css +146 -0
  212. package/styles/components/toolbar.css +72 -0
  213. package/styles/components/tooltip.css +93 -0
  214. package/styles/components/tree.css +88 -0
  215. package/styles/components/upload-list.css +113 -0
  216. package/styles/fonts.css +67 -0
  217. package/styles/index.css +14 -0
  218. package/styles/reset.css +57 -0
  219. package/styles/tokens/primitives.css +364 -0
  220. package/styles/tokens/semantic.css +233 -0
  221. package/types/vadem-ui-accordion.d.ts +43 -0
  222. package/types/vadem-ui-active-filters.d.ts +73 -0
  223. package/types/vadem-ui-alert-dialog.d.ts +87 -0
  224. package/types/vadem-ui-alert.d.ts +64 -0
  225. package/types/vadem-ui-autocomplete.d.ts +156 -0
  226. package/types/vadem-ui-avatar.d.ts +59 -0
  227. package/types/vadem-ui-badge.d.ts +25 -0
  228. package/types/vadem-ui-breadcrumbs.d.ts +22 -0
  229. package/types/vadem-ui-button.d.ts +52 -0
  230. package/types/vadem-ui-calendar.d.ts +327 -0
  231. package/types/vadem-ui-card.d.ts +58 -0
  232. package/types/vadem-ui-character-count.d.ts +71 -0
  233. package/types/vadem-ui-chart.d.ts +452 -0
  234. package/types/vadem-ui-checkbox.d.ts +20 -0
  235. package/types/vadem-ui-color-picker.d.ts +171 -0
  236. package/types/vadem-ui-command.d.ts +145 -0
  237. package/types/vadem-ui-copy-button.d.ts +90 -0
  238. package/types/vadem-ui-date-range-picker.d.ts +216 -0
  239. package/types/vadem-ui-description-list.d.ts +15 -0
  240. package/types/vadem-ui-dialog.d.ts +174 -0
  241. package/types/vadem-ui-dropzone.d.ts +73 -0
  242. package/types/vadem-ui-editable-text.d.ts +141 -0
  243. package/types/vadem-ui-empty-state.d.ts +34 -0
  244. package/types/vadem-ui-expandable-text.d.ts +52 -0
  245. package/types/vadem-ui-field.d.ts +180 -0
  246. package/types/vadem-ui-file-preview.d.ts +108 -0
  247. package/types/vadem-ui-file-size.d.ts +18 -0
  248. package/types/vadem-ui-form-error-summary.d.ts +46 -0
  249. package/types/vadem-ui-icon.d.ts +152 -0
  250. package/types/vadem-ui-input.d.ts +31 -0
  251. package/types/vadem-ui-kbd.d.ts +66 -0
  252. package/types/vadem-ui-keyboard.d.ts +61 -0
  253. package/types/vadem-ui-locale.d.ts +241 -0
  254. package/types/vadem-ui-menu.d.ts +132 -0
  255. package/types/vadem-ui-navigation-list.d.ts +28 -0
  256. package/types/vadem-ui-number-input.d.ts +39 -0
  257. package/types/vadem-ui-otp-input.d.ts +15 -0
  258. package/types/vadem-ui-pagination.d.ts +96 -0
  259. package/types/vadem-ui-password-input.d.ts +36 -0
  260. package/types/vadem-ui-popover.d.ts +48 -0
  261. package/types/vadem-ui-progress.d.ts +95 -0
  262. package/types/vadem-ui-radio.d.ts +11 -0
  263. package/types/vadem-ui-range-slider.d.ts +136 -0
  264. package/types/vadem-ui-rating.d.ts +95 -0
  265. package/types/vadem-ui-relative-time.d.ts +58 -0
  266. package/types/vadem-ui-reorder-list.d.ts +120 -0
  267. package/types/vadem-ui-scroll-area.d.ts +13 -0
  268. package/types/vadem-ui-search-input.d.ts +58 -0
  269. package/types/vadem-ui-segmented.d.ts +76 -0
  270. package/types/vadem-ui-select.d.ts +303 -0
  271. package/types/vadem-ui-sidebar.d.ts +70 -0
  272. package/types/vadem-ui-skeleton.d.ts +28 -0
  273. package/types/vadem-ui-slider.d.ts +17 -0
  274. package/types/vadem-ui-splitter.d.ts +99 -0
  275. package/types/vadem-ui-stat.d.ts +101 -0
  276. package/types/vadem-ui-stepper.d.ts +108 -0
  277. package/types/vadem-ui-switch.d.ts +10 -0
  278. package/types/vadem-ui-table.d.ts +172 -0
  279. package/types/vadem-ui-tabs.d.ts +101 -0
  280. package/types/vadem-ui-tag-input.d.ts +170 -0
  281. package/types/vadem-ui-text-highlight.d.ts +27 -0
  282. package/types/vadem-ui-time-input.d.ts +47 -0
  283. package/types/vadem-ui-timeline.d.ts +54 -0
  284. package/types/vadem-ui-toast.d.ts +104 -0
  285. package/types/vadem-ui-toolbar.d.ts +80 -0
  286. package/types/vadem-ui-tooltip.d.ts +71 -0
  287. package/types/vadem-ui-tree.d.ts +123 -0
  288. package/types/vadem-ui-upload-list.d.ts +70 -0
  289. package/types/vadem-ui.d.ts +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vadem-ui-calendar.mjs","names":[],"sources":["../../../projects/ui/calendar/src/core/date.ts","../../../projects/ui/calendar/src/calendar.ts","../../../projects/ui/calendar/src/date-picker.ts"],"sourcesContent":["/**\n * Plain calendar dates as ISO strings (\"2026-10-02\"): no time, no time zone, so a date never\n * shifts by a day between server, client and DST changes. All math goes through UTC.\n */\nexport type VdIsoDate = string;\n\nconst ISO = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\n/** Parses \"YYYY-MM-DD\"; null when malformed or not a real date (e.g. 2026-02-30). */\nexport function vdParseIso(value: string | null | undefined): Date | null {\n const m = value ? ISO.exec(value) : null;\n if (!m) return null;\n const date = new Date(Date.UTC(+m[1], +m[2] - 1, +m[3]));\n return vdToIso(date) === value ? date : null;\n}\n\nexport function vdToIso(date: Date): VdIsoDate {\n return date.toISOString().slice(0, 10);\n}\n\n/** Today in the user's local calendar (not UTC). */\nexport function vdToday(now = new Date()): VdIsoDate {\n return vdToIso(new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate())));\n}\n\nexport function vdAddDays(iso: VdIsoDate, days: number): VdIsoDate {\n const d = vdParseIso(iso)!;\n d.setUTCDate(d.getUTCDate() + days);\n return vdToIso(d);\n}\n\n/** Adds months, clamping the day (Jan 31 + 1 month = Feb 28/29). */\nexport function vdAddMonths(iso: VdIsoDate, months: number): VdIsoDate {\n const d = vdParseIso(iso)!;\n const day = d.getUTCDate();\n const target = new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth() + months, 1));\n const last = new Date(\n Date.UTC(target.getUTCFullYear(), target.getUTCMonth() + 1, 0),\n ).getUTCDate();\n target.setUTCDate(Math.min(day, last));\n return vdToIso(target);\n}\n\n/** 0 = Sunday ... 6 = Saturday. */\nexport function vdWeekday(iso: VdIsoDate): number {\n return vdParseIso(iso)!.getUTCDay();\n}\n\nexport function vdStartOfMonth(iso: VdIsoDate): VdIsoDate {\n return iso.slice(0, 8) + '01';\n}\n\n/** Earlier/later than, as strings compare lexicographically for ISO dates. */\nexport function vdClampDate(\n iso: VdIsoDate,\n min?: VdIsoDate | null,\n max?: VdIsoDate | null,\n): VdIsoDate {\n if (min && iso < min) return min;\n if (max && iso > max) return max;\n return iso;\n}\n\nexport interface VdCalendarDay {\n date: VdIsoDate;\n day: number;\n inMonth: boolean;\n}\n\n/**\n * Weeks of the month that contains `month` (any date in it), starting on `firstDay`\n * (0 = Sunday, 1 = Monday...). Always 6 weeks, so the grid height never jumps between months.\n */\nexport function vdMonthGrid(month: VdIsoDate, firstDay: number): VdCalendarDay[][] {\n const first = vdStartOfMonth(month);\n const offset = (vdWeekday(first) - firstDay + 7) % 7;\n let cursor = vdAddDays(first, -offset);\n const weeks: VdCalendarDay[][] = [];\n for (let w = 0; w < 6; w++) {\n const week: VdCalendarDay[] = [];\n for (let i = 0; i < 7; i++) {\n week.push({\n date: cursor,\n day: +cursor.slice(8),\n inMonth: cursor.slice(0, 7) === first.slice(0, 7),\n });\n cursor = vdAddDays(cursor, 1);\n }\n weeks.push(week);\n }\n return weeks;\n}\n\n/** Regions whose week starts on Sunday or Saturday; everyone else (incl. UA, EU) starts Monday. */\nconst SUNDAY_FIRST = new Set([\n 'US',\n 'CA',\n 'MX',\n 'BR',\n 'JP',\n 'KR',\n 'TW',\n 'HK',\n 'IL',\n 'IN',\n 'PH',\n 'SA',\n 'ZA',\n 'AU',\n]);\nconst SATURDAY_FIRST = new Set(['AE', 'EG', 'IR', 'DZ', 'IQ', 'JO', 'KW', 'LY', 'OM', 'QA', 'SY']);\n\n/** First day of the week for a locale (0 = Sunday), from Intl when available. */\nexport function vdFirstDayOfWeek(locale: string): number {\n try {\n const loc = new Intl.Locale(locale) as Intl.Locale & {\n getWeekInfo?: () => { firstDay: number };\n weekInfo?: { firstDay: number };\n };\n const info = loc.getWeekInfo?.() ?? loc.weekInfo;\n // Intl uses 1 = Monday ... 7 = Sunday.\n if (info?.firstDay) return info.firstDay % 7;\n const region = loc.maximize().region ?? '';\n if (SUNDAY_FIRST.has(region)) return 0;\n if (SATURDAY_FIRST.has(region)) return 6;\n } catch {\n /* invalid locale: fall through */\n }\n return 1;\n}\n\n/** Narrow/short weekday names in grid order. */\nexport function vdWeekdayNames(\n locale: string,\n firstDay: number,\n width: 'narrow' | 'short' | 'long' = 'short',\n): string[] {\n const format = new Intl.DateTimeFormat(locale, { weekday: width, timeZone: 'UTC' });\n // 2023-01-01 was a Sunday.\n return Array.from({ length: 7 }, (_, i) =>\n format.format(new Date(Date.UTC(2023, 0, 1 + ((firstDay + i) % 7)))),\n );\n}\n\nexport function vdFormatDate(\n iso: VdIsoDate,\n locale: string,\n options: Intl.DateTimeFormatOptions,\n): string {\n const date = vdParseIso(iso);\n return date ? new Intl.DateTimeFormat(locale, { ...options, timeZone: 'UTC' }).format(date) : '';\n}\n\n/**\n * Order of the numeric parts in the locale's short date (\"dd.mm.yyyy\" for uk, \"mm/dd/yyyy\" for\n * en-US), used to parse typed dates and to show a placeholder.\n */\nexport function vdDateOrder(locale: string): ('day' | 'month' | 'year')[] {\n const parts = new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n timeZone: 'UTC',\n }).formatToParts(new Date(Date.UTC(2006, 10, 22)));\n return parts\n .map((p) => p.type)\n .filter((t): t is 'day' | 'month' | 'year' => t === 'day' || t === 'month' || t === 'year');\n}\n\n/**\n * Parses a typed date: ISO (\"2026-10-02\") or three numbers in the locale's order with any\n * separators (\"2.10.2026\", \"02/10/26\"). Two-digit years map to 2000-2099. Null when invalid.\n */\nexport function vdParseDate(text: string, locale: string): VdIsoDate | null {\n const trimmed = text.trim();\n if (!trimmed) return null;\n if (vdParseIso(trimmed)) return trimmed;\n const nums = trimmed.match(/\\d+/g);\n if (!nums || nums.length !== 3) return null;\n const order = vdDateOrder(locale);\n const parts: Record<string, number> = {};\n order.forEach((type, i) => (parts[type] = +nums[i]));\n let year = parts['year'];\n if (nums[order.indexOf('year')].length <= 2) year += 2000;\n const iso = `${String(year).padStart(4, '0')}-${String(parts['month']).padStart(2, '0')}-${String(parts['day']).padStart(2, '0')}`;\n return vdParseIso(iso) ? iso : null;\n}\n\n/** Numeric short format used in the text field (\"02.10.2026\" for uk). */\nexport function vdFormatShort(iso: VdIsoDate, locale: string): string {\n return vdFormatDate(iso, locale, { day: '2-digit', month: '2-digit', year: 'numeric' });\n}\n\n/**\n * APG date-grid keys. Returns the date focus should move to, or null for keys the grid ignores.\n * Arrows move by day/week (mirrored when `rtl`), Home/End to the week start/end, PageUp/Down\n * by month, Shift+PageUp/Down by year.\n */\nexport function vdCalendarKey(\n key: string,\n current: VdIsoDate,\n options: { firstDay: number; rtl?: boolean; shift?: boolean },\n): VdIsoDate | null {\n const back = options.rtl ? 'ArrowRight' : 'ArrowLeft';\n const forward = options.rtl ? 'ArrowLeft' : 'ArrowRight';\n switch (key) {\n case back:\n return vdAddDays(current, -1);\n case forward:\n return vdAddDays(current, 1);\n case 'ArrowUp':\n return vdAddDays(current, -7);\n case 'ArrowDown':\n return vdAddDays(current, 7);\n case 'Home':\n return vdAddDays(current, -((vdWeekday(current) - options.firstDay + 7) % 7));\n case 'End':\n return vdAddDays(current, 6 - ((vdWeekday(current) - options.firstDay + 7) % 7));\n case 'PageUp':\n return vdAddMonths(current, options.shift ? -12 : -1);\n case 'PageDown':\n return vdAddMonths(current, options.shift ? 12 : 1);\n default:\n return null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n LOCALE_ID,\n ViewEncapsulation,\n afterRenderEffect,\n computed,\n inject,\n input,\n linkedSignal,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { vdUniqueId } from '@vadem/ui/field';\nimport { VdIcon } from '@vadem/ui/icon';\nimport {\n VdCalendarDay,\n VdIsoDate,\n vdAddDays,\n vdAddMonths,\n vdCalendarKey,\n vdClampDate,\n vdFirstDayOfWeek,\n vdFormatDate,\n vdMonthGrid,\n vdToday,\n vdWeekdayNames,\n} from './core/date';\nimport { vdTexts } from '@vadem/ui/locale';\n\n/**\n * Month grid for picking one date (APG date picker grid). Arrows, Home/End, PageUp/PageDown\n * (Shift: by year), Enter/Space to choose. Value is an ISO date string. Spec: specs/calendar.md\n */\n@Component({\n selector: 'vd-calendar',\n imports: [VdIcon],\n template: `\n <div class=\"vd-calendar__header\">\n <button\n type=\"button\"\n class=\"vd-calendar__nav\"\n [attr.aria-label]=\"t().previousLabel\"\n [disabled]=\"!canGoBack()\"\n (click)=\"shiftMonth(-1)\"\n >\n <vd-icon name=\"chevron-left\" />\n </button>\n <span class=\"vd-calendar__title\" [id]=\"titleId\" aria-live=\"polite\">{{ title() }}</span>\n <button\n type=\"button\"\n class=\"vd-calendar__nav\"\n [attr.aria-label]=\"t().nextLabel\"\n [disabled]=\"!canGoForward()\"\n (click)=\"shiftMonth(1)\"\n >\n <vd-icon name=\"chevron-right\" />\n </button>\n </div>\n <!-- Keys bubble from the focused cell (roving tabindex); the table only delegates. -->\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\n <table\n class=\"vd-calendar__grid\"\n role=\"grid\"\n [attr.aria-labelledby]=\"titleId\"\n [attr.aria-multiselectable]=\"selectionMode() === 'range' ? true : null\"\n (keydown)=\"onKey($event)\"\n >\n <thead>\n <tr>\n @for (name of weekdays(); track $index) {\n <th scope=\"col\" [attr.abbr]=\"weekdaysLong()[$index]\">{{ name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (week of grid(); track week[0].date) {\n <tr>\n @for (day of week; track day.date) {\n <td\n role=\"gridcell\"\n class=\"vd-calendar__day\"\n [attr.data-date]=\"day.date\"\n [attr.tabindex]=\"day.date === focused() ? 0 : -1\"\n [attr.aria-selected]=\"isSelected(day.date)\"\n [attr.data-range-start]=\"\n selectionMode() === 'range' && day.date === rangeStart() ? '' : null\n \"\n [attr.data-range-end]=\"\n selectionMode() === 'range' && day.date === rangeEnd() ? '' : null\n \"\n [attr.data-in-range]=\"\n selectionMode() === 'range' && isSelected(day.date) ? '' : null\n \"\n [attr.aria-disabled]=\"isDisabled(day.date) || null\"\n [attr.aria-current]=\"day.date === today ? 'date' : null\"\n [attr.aria-label]=\"dayLabel(day)\"\n [attr.data-outside]=\"day.inMonth ? null : ''\"\n (focus)=\"onDayFocus(day.date, $event)\"\n (click)=\"choose(day.date)\"\n >\n {{ numbers().format(day.day) }}\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n `,\n host: { class: 'vd-calendar' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class VdCalendar {\n /** Selected date, \"YYYY-MM-DD\" (two-way). */\n readonly value = model<VdIsoDate | null>(null);\n readonly selectionMode = input<'single' | 'range'>('single');\n readonly rangeStart = input<VdIsoDate | null>(null);\n readonly rangeEnd = input<VdIsoDate | null>(null);\n /** Every explicit available date activation, including repeated same-day choices. */\n readonly dateSelected = output<VdIsoDate>();\n readonly min = input<VdIsoDate | null>(null);\n readonly max = input<VdIsoDate | null>(null);\n /** Extra rule for unavailable dates (weekends, booked days...). */\n readonly dateDisabled = input<(date: VdIsoDate) => boolean>(() => false);\n /** BCP 47 locale for names, week start and labels. Defaults to the app's LOCALE_ID. */\n readonly locale = input<string>(inject(LOCALE_ID));\n /** 0 = Sunday ... 6 = Saturday. Defaults to the locale's week start. */\n readonly firstDayOfWeek = input<number | undefined>(undefined);\n readonly previousLabel = input<string>();\n readonly nextLabel = input<string>();\n /** Text inputs resolved against the active VD_LOCALE. */\n protected readonly t = vdTexts('calendar', {\n previousLabel: this.previousLabel,\n nextLabel: this.nextLabel,\n });\n\n protected readonly today = vdToday();\n protected readonly titleId = vdUniqueId('vd-calendar-title');\n private readonly el: HTMLElement = inject(ElementRef).nativeElement;\n\n private readonly initialDate = computed(() =>\n this.nearestAvailable(\n vdClampDate(this.value() ?? this.rangeStart() ?? this.today, this.min(), this.max()),\n ),\n );\n /** The date that has (or would get) keyboard focus. */\n readonly focused = linkedSignal(() => this.initialDate());\n // Focus alone must not replace an adjacent-month cell between pointerdown and click.\n private readonly displayed = linkedSignal(() => this.initialDate());\n /** Set when the keyboard moved focus, so the grid moves DOM focus after rendering. */\n private readonly focusRequested = signal(false);\n\n protected readonly firstDay = computed(\n () => this.firstDayOfWeek() ?? vdFirstDayOfWeek(this.locale()),\n );\n protected readonly grid = computed(() => vdMonthGrid(this.displayed(), this.firstDay()));\n /** Short names, or narrow ones where \"short\" is a whole word (e.g. Arabic). */\n protected readonly weekdays = computed(() => {\n const short = vdWeekdayNames(this.locale(), this.firstDay(), 'short');\n return short.some((name) => name.length > 3)\n ? vdWeekdayNames(this.locale(), this.firstDay(), 'narrow')\n : short;\n });\n private readonly numbers = computed(() => new Intl.NumberFormat(this.locale()));\n protected readonly weekdaysLong = computed(() =>\n vdWeekdayNames(this.locale(), this.firstDay(), 'long'),\n );\n protected readonly title = computed(() =>\n vdFormatDate(this.displayed(), this.locale(), { month: 'long', year: 'numeric' }),\n );\n protected readonly canGoBack = computed(() => {\n const min = this.min();\n return !min || this.displayed().slice(0, 7) > min.slice(0, 7);\n });\n protected readonly canGoForward = computed(() => {\n const max = this.max();\n return !max || this.displayed().slice(0, 7) < max.slice(0, 7);\n });\n\n constructor() {\n afterRenderEffect(() => {\n const date = this.focused();\n if (!this.focusRequested()) return;\n this.focusRequested.set(false);\n this.el.querySelector<HTMLElement>(`[data-date=\"${date}\"]`)?.focus();\n });\n }\n\n /** Moves DOM focus to the focused date (e.g. when a date picker opens). */\n focus(): void {\n this.displayed.set(this.focused());\n this.focusRequested.set(true);\n }\n\n isSelected(date: VdIsoDate): boolean {\n if (this.selectionMode() === 'single') return date === this.value();\n const start = this.rangeStart();\n return !!start && date >= start && date <= (this.rangeEnd() ?? start);\n }\n\n isDisabled(date: VdIsoDate): boolean {\n const min = this.min();\n const max = this.max();\n return (!!min && date < min) || (!!max && date > max) || this.dateDisabled()(date);\n }\n\n /** The date itself if available, else the closest available one (forward first, within a year). */\n private nearestAvailable(date: VdIsoDate): VdIsoDate {\n if (!this.isDisabled(date)) return date;\n for (let i = 1; i <= 366; i++) {\n const after = vdAddDays(date, i);\n if (!this.isDisabled(after)) return after;\n const before = vdAddDays(date, -i);\n if (!this.isDisabled(before)) return before;\n }\n return date;\n }\n\n protected dayLabel(day: VdCalendarDay): string {\n return vdFormatDate(day.date, this.locale(), {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n });\n }\n\n protected onDayFocus(date: VdIsoDate, event: FocusEvent): void {\n (event.target as HTMLElement).scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n if (date === this.focused()) return;\n this.focused.set(date);\n }\n\n protected choose(date: VdIsoDate): void {\n if (this.isDisabled(date)) return;\n this.focused.set(date);\n this.displayed.set(date);\n if (this.selectionMode() === 'single') this.value.set(date);\n this.dateSelected.emit(date);\n }\n\n protected shiftMonth(months: number): void {\n const date = vdClampDate(vdAddMonths(this.displayed(), months), this.min(), this.max());\n this.focused.set(date);\n this.displayed.set(date);\n }\n\n protected onKey(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.choose(this.focused());\n return;\n }\n const rtl = this.el.ownerDocument.defaultView?.getComputedStyle(this.el).direction === 'rtl';\n const next = vdCalendarKey(event.key, this.focused(), {\n firstDay: this.firstDay(),\n rtl,\n shift: event.shiftKey,\n });\n if (!next) return;\n event.preventDefault();\n this.focused.set(vdClampDate(next, this.min(), this.max()));\n this.displayed.set(this.focused());\n this.focusRequested.set(true);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n LOCALE_ID,\n OnInit,\n Signal,\n ViewEncapsulation,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n linkedSignal,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\nimport { VdButton } from '@vadem/ui/button';\nimport { VdNgControlState, vdNgControlState, vdUniqueId } from '@vadem/ui/field';\nimport { VdIcon } from '@vadem/ui/icon';\nimport { VdInput, VdInputGroup } from '@vadem/ui/input';\nimport { VdCalendar } from './calendar';\nimport { VdIsoDate, vdFormatShort, vdParseDate } from './core/date';\nimport { vdTexts } from '@vadem/ui/locale';\n\nconst NO_NG_STATE: VdNgControlState = {\n invalid: false,\n touched: false,\n disabled: false,\n required: false,\n};\n\n/**\n * Date field: type a date in the locale's numeric format or pick it from a calendar popover\n * (APG date picker dialog). Value is an ISO date string; works with forms and `vd-field`.\n * Spec: specs/calendar.md\n */\n@Component({\n selector: 'vd-date-picker',\n imports: [VdButton, VdCalendar, VdIcon, VdInput, VdInputGroup],\n template: `\n <vd-input-group class=\"vd-date-picker__group\" #group>\n <input\n vdInput\n #field\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"text()\"\n [placeholder]=\"placeholderText()\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"showInvalid()\"\n [touched]=\"touchedState()\"\n [required]=\"isRequired()\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n (input)=\"onType($event)\"\n (keydown.enter)=\"commit()\"\n (blur)=\"onBlur()\"\n />\n <button\n vdButton\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n iconOnly\n slot=\"end\"\n aria-haspopup=\"dialog\"\n [attr.aria-label]=\"t().openLabel\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"isDisabled()\"\n (pointerdown)=\"rememberState()\"\n (click)=\"toggle()\"\n >\n <vd-icon name=\"calendar\" />\n </button>\n </vd-input-group>\n <div\n class=\"vd-popover vd-date-picker__panel\"\n popover=\"auto\"\n role=\"dialog\"\n [attr.aria-label]=\"t().dialogLabel\"\n #panel\n >\n <vd-calendar\n [value]=\"value()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [dateDisabled]=\"dateDisabled()\"\n [locale]=\"locale()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [previousLabel]=\"t().previousLabel\"\n [nextLabel]=\"t().nextLabel\"\n (valueChange)=\"pick($event)\"\n />\n </div>\n `,\n host: {\n class: 'vd-date-picker',\n '[attr.data-invalid]': 'showInvalid() ? \"\" : null',\n '[attr.aria-label]': 'null',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => VdDatePicker), multi: true },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class VdDatePicker implements ControlValueAccessor, OnInit {\n readonly value = model<VdIsoDate | null>(null);\n readonly min = input<VdIsoDate | null>(null);\n readonly max = input<VdIsoDate | null>(null);\n readonly dateDisabled = input<(date: VdIsoDate) => boolean>(() => false);\n readonly locale = input<string>(inject(LOCALE_ID));\n readonly firstDayOfWeek = input<number | undefined>(undefined);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n /** Defaults to an example date in the locale's format (\"31.12.2026\"). */\n readonly placeholder = input<string>();\n /** Name of the text field when there is no `vd-field` label. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n readonly openLabel = input<string>();\n readonly dialogLabel = input<string>();\n readonly previousLabel = input<string>();\n readonly nextLabel = input<string>();\n /** Text inputs resolved against the active VD_LOCALE. */\n protected readonly t = vdTexts('datePicker', {\n openLabel: this.openLabel,\n dialogLabel: this.dialogLabel,\n previousLabel: this.previousLabel,\n nextLabel: this.nextLabel,\n });\n\n protected readonly open = signal(false);\n /** What the user typed; follows the value until they type. */\n protected readonly text = linkedSignal(() => {\n const value = this.value();\n return value ? vdFormatShort(value, this.locale()) : '';\n });\n /** Typed text that isn't a valid, available date. */\n private readonly parseError = signal(false);\n private readonly formDisabled = signal(false);\n private readonly ngSource = signal<Signal<VdNgControlState> | null>(null);\n private readonly ngState = computed(() => this.ngSource()?.() ?? NO_NG_STATE);\n\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled());\n protected readonly isRequired = computed(() => this.required() || this.ngState().required);\n protected readonly showInvalid = computed(\n () => this.invalid() || this.parseError() || (this.ngState().invalid && this.ngState().touched),\n );\n /** Gate for the inner input: never hide our own invalid state. */\n protected readonly touchedState = computed(() => (this.showInvalid() ? true : undefined));\n protected readonly placeholderText = computed(\n () => this.placeholder() ?? vdFormatShort(`${new Date().getFullYear()}-12-31`, this.locale()),\n );\n\n private readonly panel = viewChild.required<ElementRef<HTMLElement>>('panel');\n private readonly group = viewChild.required('group', { read: ElementRef });\n private readonly field = viewChild.required<ElementRef<HTMLInputElement>>('field');\n private readonly calendar = viewChild.required(VdCalendar);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly anchorName = `--${vdUniqueId('vd-date-picker')}`;\n private openAtPress: boolean | null = null;\n\n private onChange: (value: VdIsoDate | null) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n constructor() {\n afterNextRender(() => {\n const panel = this.panel().nativeElement;\n (this.group().nativeElement as HTMLElement).style.setProperty('anchor-name', this.anchorName);\n panel.style.setProperty('position-anchor', this.anchorName);\n const onToggle = (event: Event) => {\n const opened = (event as ToggleEvent).newState === 'open';\n this.open.set(opened);\n if (opened) this.calendar().focus();\n };\n panel.addEventListener('toggle', onToggle);\n this.destroyRef.onDestroy(() => panel.removeEventListener('toggle', onToggle));\n });\n }\n\n ngOnInit(): void {\n const ngControl = this.injector.get(NgControl, null, { self: true, optional: true });\n this.ngSource.set(vdNgControlState(ngControl, this.destroyRef));\n }\n\n // ------------------------------------------------------------------ popover\n\n protected rememberState(): void {\n this.openAtPress = this.panel().nativeElement.matches(':popover-open');\n }\n\n protected toggle(): void {\n const panel = this.panel().nativeElement;\n const wasOpen = this.openAtPress ?? panel.matches(':popover-open');\n this.openAtPress = null;\n if (wasOpen) {\n if (panel.matches(':popover-open')) panel.hidePopover();\n } else {\n this.commit();\n panel.showPopover({ source: this.field().nativeElement } as ShowPopoverOptions);\n }\n }\n\n protected pick(date: VdIsoDate | null): void {\n this.setValue(date);\n this.panel().nativeElement.hidePopover();\n this.field().nativeElement.focus();\n }\n\n // ------------------------------------------------------------------- typing\n\n protected onType(event: Event): void {\n this.text.set((event.target as HTMLInputElement).value);\n this.parseError.set(false);\n }\n\n protected onBlur(): void {\n this.commit();\n this.onTouched();\n }\n\n /** Turns the typed text into the value (or flags it). */\n protected commit(): void {\n const text = this.text().trim();\n if (!text) {\n this.parseError.set(false);\n this.setValue(null);\n return;\n }\n const date = vdParseDate(text, this.locale());\n const calendar = this.calendar();\n if (!date || calendar.isDisabled(date)) {\n this.parseError.set(true);\n return;\n }\n this.parseError.set(false);\n this.setValue(date);\n // Normalize what's shown (\"2.10.26\" -> \"02.10.2026\").\n this.text.set(vdFormatShort(date, this.locale()));\n }\n\n private setValue(date: VdIsoDate | null): void {\n if (date === this.value()) return;\n this.value.set(date);\n this.onChange(date);\n }\n\n // ---------------------------------------------------------- ControlValueAccessor\n\n writeValue(value: VdIsoDate | null): void {\n this.parseError.set(false);\n this.value.set(value ?? null);\n }\n\n registerOnChange(fn: (value: VdIsoDate | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this.formDisabled.set(disabled);\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,271 @@
1
+ import * as i0 from "@angular/core";
2
+ import { DestroyRef, Directive, ElementRef, afterNextRender, booleanAttribute, computed, inject, input } from "@angular/core";
3
+ var VdCard = class VdCard {
4
+ variant = input("default", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
5
+ interactive = input(false, {
6
+ ...ngDevMode ? { debugName: "interactive" } : /* istanbul ignore next */ {},
7
+ transform: booleanAttribute
8
+ });
9
+ el = inject(ElementRef).nativeElement;
10
+ nativeInteractive = this.el.tagName === "A" || this.el.tagName === "BUTTON";
11
+ isInteractive = computed(() => this.interactive() || this.nativeInteractive, ...ngDevMode ? [{ debugName: "isInteractive" }] : /* istanbul ignore next */ []);
12
+ constructor() {
13
+ const destroyRef = inject(DestroyRef);
14
+ afterNextRender(() => {
15
+ const move = (e) => {
16
+ if (e.pointerType !== "mouse" || !this.isInteractive()) return;
17
+ const r = this.el.getBoundingClientRect();
18
+ this.el.style.setProperty("--vd-x", `${e.clientX - r.left}px`);
19
+ this.el.style.setProperty("--vd-y", `${e.clientY - r.top}px`);
20
+ };
21
+ this.el.addEventListener("pointermove", move, { passive: true });
22
+ destroyRef.onDestroy(() => this.el.removeEventListener("pointermove", move));
23
+ });
24
+ }
25
+ static ɵfac = i0.ɵɵngDeclareFactory({
26
+ minVersion: "12.0.0",
27
+ version: "22.2.1",
28
+ ngImport: i0,
29
+ type: VdCard,
30
+ deps: [],
31
+ target: i0.ɵɵFactoryTarget.Directive
32
+ });
33
+ static ɵdir = i0.ɵɵngDeclareDirective({
34
+ minVersion: "17.1.0",
35
+ version: "22.2.1",
36
+ type: VdCard,
37
+ isStandalone: true,
38
+ selector: "[vdCard]",
39
+ inputs: {
40
+ variant: {
41
+ classPropertyName: "variant",
42
+ publicName: "variant",
43
+ isSignal: true,
44
+ isRequired: false,
45
+ transformFunction: null
46
+ },
47
+ interactive: {
48
+ classPropertyName: "interactive",
49
+ publicName: "interactive",
50
+ isSignal: true,
51
+ isRequired: false,
52
+ transformFunction: null
53
+ }
54
+ },
55
+ host: {
56
+ properties: {
57
+ "attr.data-variant": "variant()",
58
+ "attr.data-interactive": "isInteractive() ? \"\" : null"
59
+ },
60
+ classAttribute: "vd-card"
61
+ },
62
+ ngImport: i0
63
+ });
64
+ };
65
+ i0.ɵɵngDeclareClassMetadata({
66
+ minVersion: "12.0.0",
67
+ version: "22.2.1",
68
+ ngImport: i0,
69
+ type: VdCard,
70
+ decorators: [{
71
+ type: Directive,
72
+ args: [{
73
+ selector: "[vdCard]",
74
+ host: {
75
+ class: "vd-card",
76
+ "[attr.data-variant]": "variant()",
77
+ "[attr.data-interactive]": "isInteractive() ? \"\" : null"
78
+ }
79
+ }]
80
+ }],
81
+ ctorParameters: () => [],
82
+ propDecorators: {
83
+ variant: [{
84
+ type: i0.Input,
85
+ args: [{
86
+ isSignal: true,
87
+ alias: "variant",
88
+ required: false
89
+ }]
90
+ }],
91
+ interactive: [{
92
+ type: i0.Input,
93
+ args: [{
94
+ isSignal: true,
95
+ alias: "interactive",
96
+ required: false
97
+ }]
98
+ }]
99
+ }
100
+ });
101
+ var VdCardHeader = class VdCardHeader {
102
+ static ɵfac = i0.ɵɵngDeclareFactory({
103
+ minVersion: "12.0.0",
104
+ version: "22.2.1",
105
+ ngImport: i0,
106
+ type: VdCardHeader,
107
+ deps: [],
108
+ target: i0.ɵɵFactoryTarget.Directive
109
+ });
110
+ static ɵdir = i0.ɵɵngDeclareDirective({
111
+ minVersion: "14.0.0",
112
+ version: "22.2.1",
113
+ type: VdCardHeader,
114
+ isStandalone: true,
115
+ selector: "[vdCardHeader]",
116
+ host: { classAttribute: "vd-card__header" },
117
+ ngImport: i0
118
+ });
119
+ };
120
+ i0.ɵɵngDeclareClassMetadata({
121
+ minVersion: "12.0.0",
122
+ version: "22.2.1",
123
+ ngImport: i0,
124
+ type: VdCardHeader,
125
+ decorators: [{
126
+ type: Directive,
127
+ args: [{
128
+ selector: "[vdCardHeader]",
129
+ host: { class: "vd-card__header" }
130
+ }]
131
+ }]
132
+ });
133
+ var VdCardTitle = class VdCardTitle {
134
+ static ɵfac = i0.ɵɵngDeclareFactory({
135
+ minVersion: "12.0.0",
136
+ version: "22.2.1",
137
+ ngImport: i0,
138
+ type: VdCardTitle,
139
+ deps: [],
140
+ target: i0.ɵɵFactoryTarget.Directive
141
+ });
142
+ static ɵdir = i0.ɵɵngDeclareDirective({
143
+ minVersion: "14.0.0",
144
+ version: "22.2.1",
145
+ type: VdCardTitle,
146
+ isStandalone: true,
147
+ selector: "[vdCardTitle]",
148
+ host: { classAttribute: "vd-card__title" },
149
+ ngImport: i0
150
+ });
151
+ };
152
+ i0.ɵɵngDeclareClassMetadata({
153
+ minVersion: "12.0.0",
154
+ version: "22.2.1",
155
+ ngImport: i0,
156
+ type: VdCardTitle,
157
+ decorators: [{
158
+ type: Directive,
159
+ args: [{
160
+ selector: "[vdCardTitle]",
161
+ host: { class: "vd-card__title" }
162
+ }]
163
+ }]
164
+ });
165
+ var VdCardDescription = class VdCardDescription {
166
+ static ɵfac = i0.ɵɵngDeclareFactory({
167
+ minVersion: "12.0.0",
168
+ version: "22.2.1",
169
+ ngImport: i0,
170
+ type: VdCardDescription,
171
+ deps: [],
172
+ target: i0.ɵɵFactoryTarget.Directive
173
+ });
174
+ static ɵdir = i0.ɵɵngDeclareDirective({
175
+ minVersion: "14.0.0",
176
+ version: "22.2.1",
177
+ type: VdCardDescription,
178
+ isStandalone: true,
179
+ selector: "[vdCardDescription]",
180
+ host: { classAttribute: "vd-card__description" },
181
+ ngImport: i0
182
+ });
183
+ };
184
+ i0.ɵɵngDeclareClassMetadata({
185
+ minVersion: "12.0.0",
186
+ version: "22.2.1",
187
+ ngImport: i0,
188
+ type: VdCardDescription,
189
+ decorators: [{
190
+ type: Directive,
191
+ args: [{
192
+ selector: "[vdCardDescription]",
193
+ host: { class: "vd-card__description" }
194
+ }]
195
+ }]
196
+ });
197
+ var VdCardFooter = class VdCardFooter {
198
+ static ɵfac = i0.ɵɵngDeclareFactory({
199
+ minVersion: "12.0.0",
200
+ version: "22.2.1",
201
+ ngImport: i0,
202
+ type: VdCardFooter,
203
+ deps: [],
204
+ target: i0.ɵɵFactoryTarget.Directive
205
+ });
206
+ static ɵdir = i0.ɵɵngDeclareDirective({
207
+ minVersion: "14.0.0",
208
+ version: "22.2.1",
209
+ type: VdCardFooter,
210
+ isStandalone: true,
211
+ selector: "[vdCardFooter]",
212
+ host: { classAttribute: "vd-card__footer" },
213
+ ngImport: i0
214
+ });
215
+ };
216
+ i0.ɵɵngDeclareClassMetadata({
217
+ minVersion: "12.0.0",
218
+ version: "22.2.1",
219
+ ngImport: i0,
220
+ type: VdCardFooter,
221
+ decorators: [{
222
+ type: Directive,
223
+ args: [{
224
+ selector: "[vdCardFooter]",
225
+ host: { class: "vd-card__footer" }
226
+ }]
227
+ }]
228
+ });
229
+ var VdCardLink = class VdCardLink {
230
+ static ɵfac = i0.ɵɵngDeclareFactory({
231
+ minVersion: "12.0.0",
232
+ version: "22.2.1",
233
+ ngImport: i0,
234
+ type: VdCardLink,
235
+ deps: [],
236
+ target: i0.ɵɵFactoryTarget.Directive
237
+ });
238
+ static ɵdir = i0.ɵɵngDeclareDirective({
239
+ minVersion: "14.0.0",
240
+ version: "22.2.1",
241
+ type: VdCardLink,
242
+ isStandalone: true,
243
+ selector: "a[vdCardLink]",
244
+ host: { classAttribute: "vd-card__link" },
245
+ ngImport: i0
246
+ });
247
+ };
248
+ i0.ɵɵngDeclareClassMetadata({
249
+ minVersion: "12.0.0",
250
+ version: "22.2.1",
251
+ ngImport: i0,
252
+ type: VdCardLink,
253
+ decorators: [{
254
+ type: Directive,
255
+ args: [{
256
+ selector: "a[vdCardLink]",
257
+ host: { class: "vd-card__link" }
258
+ }]
259
+ }]
260
+ });
261
+ const VD_CARD = [
262
+ VdCard,
263
+ VdCardHeader,
264
+ VdCardTitle,
265
+ VdCardDescription,
266
+ VdCardFooter,
267
+ VdCardLink
268
+ ];
269
+ export { VD_CARD, VdCard, VdCardDescription, VdCardFooter, VdCardHeader, VdCardLink, VdCardTitle };
270
+
271
+ //# sourceMappingURL=vadem-ui-card.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vadem-ui-card.mjs","names":[],"sources":["../../../projects/ui/card/src/card.ts"],"sourcesContent":["import {\n DestroyRef,\n Directive,\n ElementRef,\n afterNextRender,\n booleanAttribute,\n computed,\n inject,\n input,\n} from '@angular/core';\n\nexport type VdCardVariant = 'default' | 'raised';\n\n/**\n * Surface container. Interactive cards (links, buttons, or `interactive`) get the\n * cursor-following glow. Spec: specs/card.md\n */\n@Directive({\n selector: '[vdCard]',\n host: {\n class: 'vd-card',\n '[attr.data-variant]': 'variant()',\n '[attr.data-interactive]': 'isInteractive() ? \"\" : null',\n },\n})\nexport class VdCard {\n readonly variant = input<VdCardVariant>('default');\n /**\n * Hover/glow treatment for cards that act as one target. Automatic on `<a>`/`<button>`;\n * set it on a container whose primary link uses `vdCardLink`.\n */\n readonly interactive = input(false, { transform: booleanAttribute });\n\n private readonly el: HTMLElement = inject(ElementRef).nativeElement;\n private readonly nativeInteractive = this.el.tagName === 'A' || this.el.tagName === 'BUTTON';\n protected readonly isInteractive = computed(() => this.interactive() || this.nativeInteractive);\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n // Plain DOM listener: pointermove must not trigger change detection.\n afterNextRender(() => {\n const move = (e: PointerEvent) => {\n if (e.pointerType !== 'mouse' || !this.isInteractive()) return;\n const r = this.el.getBoundingClientRect();\n this.el.style.setProperty('--vd-x', `${e.clientX - r.left}px`);\n this.el.style.setProperty('--vd-y', `${e.clientY - r.top}px`);\n };\n this.el.addEventListener('pointermove', move, { passive: true });\n destroyRef.onDestroy(() => this.el.removeEventListener('pointermove', move));\n });\n }\n}\n\n/** Card header: title, description, and optional actions at the end. */\n@Directive({ selector: '[vdCardHeader]', host: { class: 'vd-card__header' } })\nexport class VdCardHeader {}\n\n@Directive({ selector: '[vdCardTitle]', host: { class: 'vd-card__title' } })\nexport class VdCardTitle {}\n\n@Directive({ selector: '[vdCardDescription]', host: { class: 'vd-card__description' } })\nexport class VdCardDescription {}\n\n@Directive({ selector: '[vdCardFooter]', host: { class: 'vd-card__footer' } })\nexport class VdCardFooter {}\n\n/**\n * The card's primary link. Its hit area stretches over the whole card (pseudo-element), so the\n * card is clickable while keeping one tab stop and a short accessible name.\n */\n@Directive({ selector: 'a[vdCardLink]', host: { class: 'vd-card__link' } })\nexport class VdCardLink {}\n\nexport const VD_CARD = [\n VdCard,\n VdCardHeader,\n VdCardTitle,\n VdCardDescription,\n VdCardFooter,\n VdCardLink,\n] as const;\n"],"mappings":"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"}
@@ -0,0 +1,269 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, ElementRef, ViewEncapsulation, computed, effect, inject, input, signal } from "@angular/core";
3
+ import { vdUniqueId } from "@vadem/ui/field";
4
+ import { VdIcon } from "@vadem/ui/icon";
5
+ import { vdTexts } from "@vadem/ui/locale";
6
+ function vdCharacterCount(value, maximum) {
7
+ const limit = maximum !== null && Number.isFinite(maximum) && maximum >= 0 ? Math.floor(maximum) : null;
8
+ const used = value.length;
9
+ const remaining = limit === null ? null : limit - used;
10
+ return {
11
+ used,
12
+ limit,
13
+ remaining,
14
+ state: remaining === null ? "unlimited" : remaining < 0 ? "over" : remaining === 0 ? "limit" : "within"
15
+ };
16
+ }
17
+ var VdCharacterCount = class VdCharacterCount {
18
+ value = input("", ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
19
+ maxLength = input(null, ...ngDevMode ? [{ debugName: "maxLength" }] : /* istanbul ignore next */ []);
20
+ descriptionId = input(vdUniqueId("vd-character-count"), ...ngDevMode ? [{ debugName: "descriptionId" }] : /* istanbul ignore next */ []);
21
+ controlId = input(...ngDevMode ? [void 0, { debugName: "controlId" }] : /* istanbul ignore next */ []);
22
+ countText = input(...ngDevMode ? [void 0, { debugName: "countText" }] : /* istanbul ignore next */ []);
23
+ remainingText = input(...ngDevMode ? [void 0, { debugName: "remainingText" }] : /* istanbul ignore next */ []);
24
+ overText = input(...ngDevMode ? [void 0, { debugName: "overText" }] : /* istanbul ignore next */ []);
25
+ limitText = input(...ngDevMode ? [void 0, { debugName: "limitText" }] : /* istanbul ignore next */ []);
26
+ t = vdTexts("characterCount", {
27
+ countText: this.countText,
28
+ remainingText: this.remainingText,
29
+ overText: this.overText,
30
+ limitText: this.limitText
31
+ });
32
+ count = computed(() => vdCharacterCount(this.value(), this.maxLength()), ...ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []);
33
+ message = computed(() => {
34
+ const { remaining } = this.count();
35
+ return remaining === null ? "" : remaining < 0 ? this.t().overText(-remaining) : remaining === 0 ? this.t().limitText : this.t().remainingText(remaining);
36
+ }, ...ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []);
37
+ announcement = signal("", ...ngDevMode ? [{ debugName: "announcement" }] : /* istanbul ignore next */ []);
38
+ host = inject(ElementRef).nativeElement;
39
+ constructor() {
40
+ let initial = true;
41
+ effect((onCleanup) => {
42
+ const id = this.controlId();
43
+ const { used, limit } = this.count();
44
+ const text = [this.t().countText(used, limit), this.message()].filter(Boolean).join(". ");
45
+ if (initial) {
46
+ initial = false;
47
+ return;
48
+ }
49
+ this.announcement.set("");
50
+ const view = this.host.ownerDocument.defaultView;
51
+ if (!id || !view) return;
52
+ const editable = "input:not(:disabled):not([readonly]), textarea:not(:disabled):not([readonly])";
53
+ const control = this.host.ownerDocument.activeElement;
54
+ if (control?.id !== id || !control.matches(editable)) return;
55
+ const timer = view.setTimeout(() => {
56
+ if (this.host.ownerDocument.activeElement === control && control.matches(editable)) this.announcement.set(text);
57
+ }, 1e3);
58
+ onCleanup(() => view.clearTimeout(timer));
59
+ });
60
+ }
61
+ static ɵfac = i0.ɵɵngDeclareFactory({
62
+ minVersion: "12.0.0",
63
+ version: "22.2.1",
64
+ ngImport: i0,
65
+ type: VdCharacterCount,
66
+ deps: [],
67
+ target: i0.ɵɵFactoryTarget.Component
68
+ });
69
+ static ɵcmp = i0.ɵɵngDeclareComponent({
70
+ minVersion: "17.0.0",
71
+ version: "22.2.1",
72
+ type: VdCharacterCount,
73
+ isStandalone: true,
74
+ selector: "vd-character-count",
75
+ inputs: {
76
+ value: {
77
+ classPropertyName: "value",
78
+ publicName: "value",
79
+ isSignal: true,
80
+ isRequired: false,
81
+ transformFunction: null
82
+ },
83
+ maxLength: {
84
+ classPropertyName: "maxLength",
85
+ publicName: "maxLength",
86
+ isSignal: true,
87
+ isRequired: false,
88
+ transformFunction: null
89
+ },
90
+ descriptionId: {
91
+ classPropertyName: "descriptionId",
92
+ publicName: "descriptionId",
93
+ isSignal: true,
94
+ isRequired: false,
95
+ transformFunction: null
96
+ },
97
+ controlId: {
98
+ classPropertyName: "controlId",
99
+ publicName: "controlId",
100
+ isSignal: true,
101
+ isRequired: false,
102
+ transformFunction: null
103
+ },
104
+ countText: {
105
+ classPropertyName: "countText",
106
+ publicName: "countText",
107
+ isSignal: true,
108
+ isRequired: false,
109
+ transformFunction: null
110
+ },
111
+ remainingText: {
112
+ classPropertyName: "remainingText",
113
+ publicName: "remainingText",
114
+ isSignal: true,
115
+ isRequired: false,
116
+ transformFunction: null
117
+ },
118
+ overText: {
119
+ classPropertyName: "overText",
120
+ publicName: "overText",
121
+ isSignal: true,
122
+ isRequired: false,
123
+ transformFunction: null
124
+ },
125
+ limitText: {
126
+ classPropertyName: "limitText",
127
+ publicName: "limitText",
128
+ isSignal: true,
129
+ isRequired: false,
130
+ transformFunction: null
131
+ }
132
+ },
133
+ host: {
134
+ properties: { "attr.data-state": "count().state" },
135
+ classAttribute: "vd-character-count"
136
+ },
137
+ ngImport: i0,
138
+ template: `
139
+ <span class="vd-character-count__content" [id]="descriptionId()">
140
+ <bdi class="vd-character-count__used" [attr.dir]="count().limit === null ? 'auto' : 'ltr'">{{
141
+ t().countText(count().used, count().limit)
142
+ }}</bdi>
143
+ @if (message()) {
144
+ <span class="vd-character-count__message">
145
+ @if (count().state === 'over') {
146
+ <vd-icon name="alert-circle" />
147
+ }
148
+ <span>{{ message() }}</span>
149
+ </span>
150
+ }
151
+ </span>
152
+ <span class="vd-visually-hidden" role="status" aria-atomic="true">{{ announcement() }}</span>
153
+ `,
154
+ isInline: true,
155
+ dependencies: [{
156
+ kind: "component",
157
+ type: VdIcon,
158
+ selector: "vd-icon",
159
+ inputs: ["name", "label"]
160
+ }],
161
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
162
+ encapsulation: i0.ViewEncapsulation.None
163
+ });
164
+ };
165
+ i0.ɵɵngDeclareClassMetadata({
166
+ minVersion: "12.0.0",
167
+ version: "22.2.1",
168
+ ngImport: i0,
169
+ type: VdCharacterCount,
170
+ decorators: [{
171
+ type: Component,
172
+ args: [{
173
+ selector: "vd-character-count",
174
+ imports: [VdIcon],
175
+ changeDetection: ChangeDetectionStrategy.OnPush,
176
+ encapsulation: ViewEncapsulation.None,
177
+ host: {
178
+ class: "vd-character-count",
179
+ "[attr.data-state]": "count().state"
180
+ },
181
+ template: `
182
+ <span class="vd-character-count__content" [id]="descriptionId()">
183
+ <bdi class="vd-character-count__used" [attr.dir]="count().limit === null ? 'auto' : 'ltr'">{{
184
+ t().countText(count().used, count().limit)
185
+ }}</bdi>
186
+ @if (message()) {
187
+ <span class="vd-character-count__message">
188
+ @if (count().state === 'over') {
189
+ <vd-icon name="alert-circle" />
190
+ }
191
+ <span>{{ message() }}</span>
192
+ </span>
193
+ }
194
+ </span>
195
+ <span class="vd-visually-hidden" role="status" aria-atomic="true">{{ announcement() }}</span>
196
+ `
197
+ }]
198
+ }],
199
+ ctorParameters: () => [],
200
+ propDecorators: {
201
+ value: [{
202
+ type: i0.Input,
203
+ args: [{
204
+ isSignal: true,
205
+ alias: "value",
206
+ required: false
207
+ }]
208
+ }],
209
+ maxLength: [{
210
+ type: i0.Input,
211
+ args: [{
212
+ isSignal: true,
213
+ alias: "maxLength",
214
+ required: false
215
+ }]
216
+ }],
217
+ descriptionId: [{
218
+ type: i0.Input,
219
+ args: [{
220
+ isSignal: true,
221
+ alias: "descriptionId",
222
+ required: false
223
+ }]
224
+ }],
225
+ controlId: [{
226
+ type: i0.Input,
227
+ args: [{
228
+ isSignal: true,
229
+ alias: "controlId",
230
+ required: false
231
+ }]
232
+ }],
233
+ countText: [{
234
+ type: i0.Input,
235
+ args: [{
236
+ isSignal: true,
237
+ alias: "countText",
238
+ required: false
239
+ }]
240
+ }],
241
+ remainingText: [{
242
+ type: i0.Input,
243
+ args: [{
244
+ isSignal: true,
245
+ alias: "remainingText",
246
+ required: false
247
+ }]
248
+ }],
249
+ overText: [{
250
+ type: i0.Input,
251
+ args: [{
252
+ isSignal: true,
253
+ alias: "overText",
254
+ required: false
255
+ }]
256
+ }],
257
+ limitText: [{
258
+ type: i0.Input,
259
+ args: [{
260
+ isSignal: true,
261
+ alias: "limitText",
262
+ required: false
263
+ }]
264
+ }]
265
+ }
266
+ });
267
+ export { VdCharacterCount };
268
+
269
+ //# sourceMappingURL=vadem-ui-character-count.mjs.map