@vadem/ui 0.0.0-stage → 0.0.2

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 +93 -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 +657 -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 +329 -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 +134 -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,452 @@
1
+ import * as i0 from "@angular/core";
2
+ /**
3
+ * Framework-agnostic chart geometry: scales, ticks, stacking and SVG paths.
4
+ * No DOM access; every function is pure and unit-tested.
5
+ */
6
+ export interface VdChartSeries {
7
+ name: string;
8
+ /** One value per category; `null` = missing (a gap, never zero). */
9
+ values: readonly (number | null)[];
10
+ }
11
+ export interface VdLinearScale {
12
+ domain: readonly [number, number];
13
+ range: readonly [number, number];
14
+ (value: number): number;
15
+ }
16
+ export declare function linearScale(domain: readonly [number, number], range: readonly [number, number]): VdLinearScale;
17
+ /** Round numbers for an axis: 1, 2, 2.5 or 5 times a power of ten. Always includes zero. */
18
+ export declare function niceTicks(min: number, max: number, target?: number): number[];
19
+ export interface VdBand {
20
+ /** Start of each band. */
21
+ start: number;
22
+ /** Centre of each band. */
23
+ center: number;
24
+ /** Band width including its share of padding. */
25
+ step: number;
26
+ }
27
+ /** Evenly spaced bands across `range` for `count` categories. */
28
+ export declare function bands(count: number, range: readonly [number, number]): VdBand[];
29
+ /** Index of the band nearest to `position` (pointer or keyboard), clamped. */
30
+ export declare function nearestIndex(position: number, count: number, range: readonly [number, number]): number;
31
+ export interface VdStackSegment {
32
+ from: number;
33
+ to: number;
34
+ }
35
+ /** Stacks positive values upward and negative values downward from zero, per category. */
36
+ export declare function stack(series: readonly VdChartSeries[], count: number): VdStackSegment[][];
37
+ /** [min, max] over all values (stacked totals when `stacked`). */
38
+ export declare function extent(series: readonly VdChartSeries[], count: number, stacked: boolean): readonly [number, number];
39
+ /**
40
+ * A bar from `base` to `end` along the value axis, `thickness` wide, centred at `center` on the
41
+ * category axis. The data end is rounded (`radius`), the baseline end square.
42
+ */
43
+ export declare function barPath(center: number, thickness: number, base: number, end: number, radius: number, orientation: 'vertical' | 'horizontal'): string;
44
+ export type VdPoint = readonly [x: number, y: number] | null;
45
+ /** Polyline through points; a `null` starts a new segment (missing data is a gap). */
46
+ export declare function linePath(points: readonly VdPoint[]): string;
47
+ /** Closed area between each continuous run of points and the baseline. */
48
+ export declare function areaPath(points: readonly VdPoint[], baseline: number): string;
49
+ type VdChartKind = 'bar' | 'line';
50
+ /** Formats a value for tooltips and the table (full precision, locale-aware). */
51
+ type VdChartFormat = (value: number) => string;
52
+ /** Series identity: slot 1..8 for categorical, "accent" for a single series. */
53
+ declare function seriesSlot(index: number, count: number): string;
54
+ /**
55
+ * Shared chart chrome: figure with title, legend (2+ series), data-table toggle, tooltip and
56
+ * plot measurement. Charts project their SVG into it. Spec: specs/chart.md
57
+ */
58
+ export declare class VdChartFrame {
59
+ readonly title: import("@angular/core").InputSignal<string>;
60
+ readonly description: import("@angular/core").InputSignal<string | undefined>;
61
+ readonly categories: import("@angular/core").InputSignal<readonly string[]>;
62
+ readonly series: import("@angular/core").InputSignal<readonly VdChartSeries[]>;
63
+ readonly kind: import("@angular/core").InputSignal<VdChartKind>;
64
+ readonly format: import("@angular/core").InputSignal<VdChartFormat | undefined>;
65
+ readonly categoryLabel: import("@angular/core").InputSignal<string | undefined>;
66
+ /** Highlighted category, driven by the chart (pointer or keyboard). */
67
+ readonly active: import("@angular/core").InputSignal<number>;
68
+ /** Tooltip anchor in plot pixels; null hides it. */
69
+ readonly tooltipX: import("@angular/core").InputSignal<number | null>;
70
+ readonly tooltipY: import("@angular/core").InputSignal<number>;
71
+ readonly tableLabel: import("@angular/core").InputSignal<string | undefined>;
72
+ readonly loading: import("@angular/core").InputSignal<boolean>;
73
+ protected readonly t: import("@angular/core").Signal<Pick<{
74
+ tableLabel: string;
75
+ categoryLabel: string;
76
+ trendSummary: (first: string, last: string, min: string, max: string) => string;
77
+ }, "tableLabel" | "categoryLabel">>;
78
+ private readonly locale;
79
+ readonly titleId: string;
80
+ readonly tableId: string;
81
+ readonly tableShown: import("@angular/core").WritableSignal<boolean>;
82
+ /** Measured plot width in CSS pixels (0 until the browser lays it out). */
83
+ readonly width: import("@angular/core").WritableSignal<number>;
84
+ /** Fired when the pointer leaves the plot; charts clear their highlight. */
85
+ readonly pointerLeave: import("@angular/core").OutputEmitterRef<void>;
86
+ private readonly plot;
87
+ private readonly numberFormat;
88
+ constructor();
89
+ protected slot(index: number): string;
90
+ valueText(value: number | null | undefined): string;
91
+ protected leave(): void;
92
+ /** The tooltip sits on the roomier side of its anchor. */
93
+ protected readonly tooltipSide: import("@angular/core").Signal<"start" | "end">;
94
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdChartFrame, never>;
95
+ static ɵcmp: i0.ɵɵComponentDeclaration<VdChartFrame, "vd-chart-frame", never, {
96
+ "title": {
97
+ "alias": "title";
98
+ "required": true;
99
+ "isSignal": true;
100
+ };
101
+ "description": {
102
+ "alias": "description";
103
+ "required": false;
104
+ "isSignal": true;
105
+ };
106
+ "categories": {
107
+ "alias": "categories";
108
+ "required": false;
109
+ "isSignal": true;
110
+ };
111
+ "series": {
112
+ "alias": "series";
113
+ "required": false;
114
+ "isSignal": true;
115
+ };
116
+ "kind": {
117
+ "alias": "kind";
118
+ "required": false;
119
+ "isSignal": true;
120
+ };
121
+ "format": {
122
+ "alias": "format";
123
+ "required": false;
124
+ "isSignal": true;
125
+ };
126
+ "categoryLabel": {
127
+ "alias": "categoryLabel";
128
+ "required": false;
129
+ "isSignal": true;
130
+ };
131
+ "active": {
132
+ "alias": "active";
133
+ "required": false;
134
+ "isSignal": true;
135
+ };
136
+ "tooltipX": {
137
+ "alias": "tooltipX";
138
+ "required": false;
139
+ "isSignal": true;
140
+ };
141
+ "tooltipY": {
142
+ "alias": "tooltipY";
143
+ "required": false;
144
+ "isSignal": true;
145
+ };
146
+ "tableLabel": {
147
+ "alias": "tableLabel";
148
+ "required": false;
149
+ "isSignal": true;
150
+ };
151
+ "loading": {
152
+ "alias": "loading";
153
+ "required": false;
154
+ "isSignal": true;
155
+ };
156
+ }, {
157
+ "pointerLeave": "pointerLeave";
158
+ }, never, ["*"], true, never>;
159
+ }
160
+ /**
161
+ * Inputs, value scale and keyboard/pointer exploration shared by bar and line charts.
162
+ * Rendering stays in each chart's template.
163
+ */
164
+ declare abstract class VdChartBase {
165
+ readonly title: import("@angular/core").InputSignal<string>;
166
+ readonly description: import("@angular/core").InputSignal<string | undefined>;
167
+ /** Category labels (x for columns and lines, y for horizontal bars). */
168
+ readonly categories: import("@angular/core").InputSignal<readonly string[]>;
169
+ readonly series: import("@angular/core").InputSignal<readonly VdChartSeries[]>;
170
+ /** Plot height in pixels, including the category axis band. */
171
+ readonly height: import("@angular/core").InputSignalWithTransform<number, unknown>;
172
+ /** Full value text for tooltips, labels and the table. Defaults to Intl in the locale. */
173
+ readonly format: import("@angular/core").InputSignal<VdChartFormat | undefined>;
174
+ /** Short value text for axis ticks. Defaults to compact Intl notation. */
175
+ readonly axisFormat: import("@angular/core").InputSignal<VdChartFormat | undefined>;
176
+ readonly categoryLabel: import("@angular/core").InputSignal<string | undefined>;
177
+ /**
178
+ * Refetching: keep the previous render, muted and `aria-busy`, so the table view, focus and
179
+ * layout survive (dataviz: refetch keeps the frame, no skeleton).
180
+ */
181
+ readonly loading: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
182
+ protected readonly frame: import("@angular/core").Signal<VdChartFrame>;
183
+ /** Highlighted category (pointer or keyboard), -1 when none. */
184
+ protected readonly active: import("@angular/core").WritableSignal<number>;
185
+ /** Roving tab stop among category hit targets. */
186
+ protected readonly focusIndex: import("@angular/core").WritableSignal<number>;
187
+ protected readonly count: import("@angular/core").Signal<number>;
188
+ protected readonly width: import("@angular/core").Signal<number>;
189
+ protected abstract readonly stackedValues: () => boolean;
190
+ protected abstract extentOf(): readonly [number, number];
191
+ protected readonly ticks: import("@angular/core").Signal<number[]>;
192
+ private readonly compact;
193
+ private readonly locale;
194
+ protected localeCode(): string;
195
+ protected tickText(value: number): string;
196
+ /** Room for the widest tick label. */
197
+ protected readonly tickWidth: import("@angular/core").Signal<number>;
198
+ protected readonly categoryWidth: import("@angular/core").Signal<number>;
199
+ protected valueScale(range: readonly [number, number]): import("@vadem/ui/chart").VdLinearScale;
200
+ protected slot(index: number): string;
201
+ /** "Пн: Запити 4 200, Помилки 12" - the accessible name of one category. */
202
+ protected pointLabel(index: number): string;
203
+ /** Every `k`-th category label so labels never overlap. */
204
+ protected labelEvery(available: number): number;
205
+ protected pointerAt(position: number, range: readonly [number, number]): void;
206
+ protected onKeydown(event: KeyboardEvent, index: number): void;
207
+ protected onFocus(index: number): void;
208
+ protected onBlur(event: FocusEvent): void;
209
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdChartBase, never>;
210
+ static ɵdir: i0.ɵɵDirectiveDeclaration<VdChartBase, never, never, {
211
+ "title": {
212
+ "alias": "title";
213
+ "required": true;
214
+ "isSignal": true;
215
+ };
216
+ "description": {
217
+ "alias": "description";
218
+ "required": false;
219
+ "isSignal": true;
220
+ };
221
+ "categories": {
222
+ "alias": "categories";
223
+ "required": false;
224
+ "isSignal": true;
225
+ };
226
+ "series": {
227
+ "alias": "series";
228
+ "required": false;
229
+ "isSignal": true;
230
+ };
231
+ "height": {
232
+ "alias": "height";
233
+ "required": false;
234
+ "isSignal": true;
235
+ };
236
+ "format": {
237
+ "alias": "format";
238
+ "required": false;
239
+ "isSignal": true;
240
+ };
241
+ "axisFormat": {
242
+ "alias": "axisFormat";
243
+ "required": false;
244
+ "isSignal": true;
245
+ };
246
+ "categoryLabel": {
247
+ "alias": "categoryLabel";
248
+ "required": false;
249
+ "isSignal": true;
250
+ };
251
+ "loading": {
252
+ "alias": "loading";
253
+ "required": false;
254
+ "isSignal": true;
255
+ };
256
+ }, {}, never, never, true, never>;
257
+ }
258
+ type VdBarOrientation = 'vertical' | 'horizontal';
259
+ interface Mark {
260
+ d: string;
261
+ series: number;
262
+ category: number;
263
+ }
264
+ /**
265
+ * Bar / column chart: one series in the accent, several grouped or stacked in the categorical
266
+ * palette. Spec: specs/chart.md
267
+ */
268
+ export declare class VdBarChart extends VdChartBase {
269
+ readonly orientation: import("@angular/core").InputSignal<"vertical" | "horizontal">;
270
+ /** Stack series (part-to-whole) instead of grouping them side by side. */
271
+ readonly stacked: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
272
+ /**
273
+ * Emphasis form for a single series: keep one category in full colour and mute the rest.
274
+ * `'max'` picks the largest value.
275
+ */
276
+ readonly highlight: import("@angular/core").InputSignal<number | "max" | null>;
277
+ protected readonly highlighted: import("@angular/core").Signal<number>;
278
+ protected readonly stackedValues: () => boolean;
279
+ protected extentOf(): readonly [number, number];
280
+ private readonly vertical;
281
+ /** Plot box inside the SVG: [start, end] on each axis. */
282
+ protected readonly box: import("@angular/core").Signal<{
283
+ x0: number;
284
+ x1: number;
285
+ y0: number;
286
+ y1: number;
287
+ }>;
288
+ private readonly scale;
289
+ private readonly categoryRange;
290
+ private readonly bandList;
291
+ protected readonly marks: import("@angular/core").Signal<Mark[]>;
292
+ protected readonly tickMarks: import("@angular/core").Signal<{
293
+ value: number;
294
+ x1: number;
295
+ x2: number;
296
+ y1: number;
297
+ y2: number;
298
+ tx: number;
299
+ ty: number;
300
+ anchor: string;
301
+ }[]>;
302
+ protected readonly categoryTicks: import("@angular/core").Signal<{
303
+ index: number;
304
+ x: number;
305
+ y: number;
306
+ anchor: string;
307
+ }[]>;
308
+ /** Hit targets cover the whole band, bigger than the marks. */
309
+ protected readonly hits: import("@angular/core").Signal<{
310
+ index: number;
311
+ x: number;
312
+ y: number;
313
+ w: number;
314
+ h: number;
315
+ }[]>;
316
+ protected readonly bandRect: import("@angular/core").Signal<{
317
+ x: number;
318
+ y: number;
319
+ w: number;
320
+ h: number;
321
+ }>;
322
+ protected readonly tooltip: import("@angular/core").Signal<{
323
+ x: number;
324
+ y: number;
325
+ } | null>;
326
+ protected onPointer(event: PointerEvent): void;
327
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdBarChart, never>;
328
+ static ɵcmp: i0.ɵɵComponentDeclaration<VdBarChart, "vd-bar-chart", never, {
329
+ "orientation": {
330
+ "alias": "orientation";
331
+ "required": false;
332
+ "isSignal": true;
333
+ };
334
+ "stacked": {
335
+ "alias": "stacked";
336
+ "required": false;
337
+ "isSignal": true;
338
+ };
339
+ "highlight": {
340
+ "alias": "highlight";
341
+ "required": false;
342
+ "isSignal": true;
343
+ };
344
+ }, {}, never, never, true, never>;
345
+ }
346
+ /**
347
+ * Line chart for trends over ordered categories. One series gets a soft area wash; several use
348
+ * the categorical palette with a legend and direct end labels. Spec: specs/chart.md
349
+ */
350
+ export declare class VdLineChart extends VdChartBase {
351
+ /** Soft area under a single series; ignored with several series. */
352
+ readonly area: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
353
+ protected readonly stackedValues: () => boolean;
354
+ protected extentOf(): readonly [number, number];
355
+ protected readonly showArea: import("@angular/core").Signal<boolean>;
356
+ private readonly labelled;
357
+ protected readonly box: import("@angular/core").Signal<{
358
+ x0: number;
359
+ x1: number;
360
+ y0: number;
361
+ y1: number;
362
+ }>;
363
+ private readonly scale;
364
+ /** Point positions: first and last categories sit on the plot edges. */
365
+ protected readonly xs: import("@angular/core").Signal<number[]>;
366
+ protected readonly step: import("@angular/core").Signal<number>;
367
+ private readonly points;
368
+ protected readonly lines: import("@angular/core").Signal<string[]>;
369
+ protected readonly areaD: import("@angular/core").Signal<string>;
370
+ protected readonly tickMarks: import("@angular/core").Signal<{
371
+ value: number;
372
+ y: number;
373
+ }[]>;
374
+ protected readonly categoryTicks: import("@angular/core").Signal<{
375
+ index: number;
376
+ x: number;
377
+ }[]>;
378
+ /** Active point of every series, else the last point (current period). */
379
+ protected readonly dots: import("@angular/core").Signal<{
380
+ x: number;
381
+ y: number;
382
+ series: number;
383
+ }[]>;
384
+ /** Names at line ends; labels that would collide fall back to the legend. */
385
+ protected readonly endLabels: import("@angular/core").Signal<{
386
+ series: number;
387
+ x: number;
388
+ y: number;
389
+ }[]>;
390
+ protected readonly tooltip: import("@angular/core").Signal<{
391
+ x: number;
392
+ y: number;
393
+ } | null>;
394
+ protected onPointer(event: PointerEvent): void;
395
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdLineChart, never>;
396
+ static ɵcmp: i0.ɵɵComponentDeclaration<VdLineChart, "vd-line-chart", never, {
397
+ "area": {
398
+ "alias": "area";
399
+ "required": false;
400
+ "isSignal": true;
401
+ };
402
+ }, {}, never, never, true, never>;
403
+ }
404
+ /**
405
+ * Word-sized trend: line in the de-emphasis ink, current (last) point in the accent.
406
+ * A single image with a spoken summary. Spec: specs/chart.md
407
+ */
408
+ export declare class VdSparkline {
409
+ readonly values: import("@angular/core").InputSignal<readonly (number | null)[]>;
410
+ /** What the trend shows, e.g. "Дохід за 12 тижнів". */
411
+ readonly label: import("@angular/core").InputSignal<string>;
412
+ readonly format: import("@angular/core").InputSignal<VdChartFormat | undefined>;
413
+ readonly trendSummary: import("@angular/core").InputSignal<((first: string, last: string, min: string, max: string) => string) | undefined>;
414
+ protected readonly W = 120;
415
+ protected readonly H = 32;
416
+ protected readonly t: import("@angular/core").Signal<Pick<{
417
+ tableLabel: string;
418
+ categoryLabel: string;
419
+ trendSummary: (first: string, last: string, min: string, max: string) => string;
420
+ }, "trendSummary">>;
421
+ private readonly locale;
422
+ private readonly numbers;
423
+ private readonly points;
424
+ protected readonly line: import("@angular/core").Signal<string>;
425
+ protected readonly area: import("@angular/core").Signal<string>;
426
+ protected readonly last: import("@angular/core").Signal<readonly [x: number, y: number] | null>;
427
+ protected readonly summary: import("@angular/core").Signal<string>;
428
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdSparkline, never>;
429
+ static ɵcmp: i0.ɵɵComponentDeclaration<VdSparkline, "vd-sparkline", never, {
430
+ "values": {
431
+ "alias": "values";
432
+ "required": false;
433
+ "isSignal": true;
434
+ };
435
+ "label": {
436
+ "alias": "label";
437
+ "required": true;
438
+ "isSignal": true;
439
+ };
440
+ "format": {
441
+ "alias": "format";
442
+ "required": false;
443
+ "isSignal": true;
444
+ };
445
+ "trendSummary": {
446
+ "alias": "trendSummary";
447
+ "required": false;
448
+ "isSignal": true;
449
+ };
450
+ }, {}, never, never, true, never>;
451
+ }
452
+ export type { VdBarOrientation, VdChartFormat, VdChartKind };
@@ -0,0 +1,20 @@
1
+ import { VdFieldControlBase } from "@vadem/ui/field";
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Styles a native `<input type="checkbox">`. Checked state, keyboard and forms stay native.
5
+ * Spec: specs/checkbox.md
6
+ */
7
+ export declare class VdCheckbox extends VdFieldControlBase {
8
+ /** Mixed state (e.g. "select all" with some items selected). Two-way bindable. */
9
+ readonly indeterminate: import("@angular/core").ModelSignal<boolean>;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdCheckbox, never>;
11
+ static ɵdir: i0.ɵɵDirectiveDeclaration<VdCheckbox, "input[type=checkbox][vdCheckbox]", never, {
12
+ "indeterminate": {
13
+ "alias": "indeterminate";
14
+ "required": false;
15
+ "isSignal": true;
16
+ };
17
+ }, {
18
+ "indeterminate": "indeterminateChange";
19
+ }, never, never, true, never>;
20
+ }
@@ -0,0 +1,171 @@
1
+ import * as i0 from "@angular/core";
2
+ import { OnInit, Signal } from "@angular/core";
3
+ import { FormValueControl } from "@angular/forms/signals";
4
+ /** Safe opaque sRGB HEX; no CSS functions, keywords, alpha or URLs are accepted. */
5
+ declare function vdNormalizeHex(value: unknown): string | null;
6
+ /** Maximum-contrast black/white foreground for arbitrary user color data. */
7
+ declare function vdColorInk(value: string): '#000000' | '#FFFFFF';
8
+ declare function vdColorPaletteKey(index: number, count: number, key: string, rtl: boolean): number | null;
9
+ interface VdColorSwatch {
10
+ readonly value: string;
11
+ readonly label: string;
12
+ }
13
+ type VdColorPickerSize = 'sm' | 'md' | 'lg';
14
+ export declare class VdColorPicker implements FormValueControl<string>, OnInit {
15
+ readonly value: import("@angular/core").ModelSignal<string>;
16
+ readonly swatches: import("@angular/core").InputSignal<readonly VdColorSwatch[]>;
17
+ readonly size: import("@angular/core").InputSignal<VdColorPickerSize>;
18
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
19
+ readonly readonly: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
20
+ readonly invalid: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
21
+ readonly touched: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
22
+ readonly required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
23
+ readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
24
+ readonly ariaLabelledby: import("@angular/core").InputSignal<string | undefined>;
25
+ readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
26
+ readonly pickerLabel: import("@angular/core").InputSignal<string | undefined>;
27
+ readonly hexLabel: import("@angular/core").InputSignal<string | undefined>;
28
+ readonly paletteLabel: import("@angular/core").InputSignal<string | undefined>;
29
+ readonly applyLabel: import("@angular/core").InputSignal<string | undefined>;
30
+ readonly errorLabel: import("@angular/core").InputSignal<string | undefined>;
31
+ /** Text inputs resolved against the active VD_LOCALE. */
32
+ protected readonly t: Signal<Pick<{
33
+ placeholder: string;
34
+ pickerLabel: string;
35
+ hexLabel: string;
36
+ paletteLabel: string;
37
+ applyLabel: string;
38
+ errorLabel: string;
39
+ }, "placeholder" | "pickerLabel" | "hexLabel" | "paletteLabel" | "applyLabel" | "errorLabel">>;
40
+ readonly touch: import("@angular/core").OutputEmitterRef<void>;
41
+ readonly controlId: string;
42
+ protected readonly hexId: string;
43
+ protected readonly errorId: string;
44
+ protected readonly color: Signal<string | null>;
45
+ protected readonly draft: import("@angular/core").WritableSignal<string>;
46
+ protected readonly draftColor: Signal<string | null>;
47
+ protected readonly draftError: import("@angular/core").WritableSignal<boolean>;
48
+ protected readonly open: import("@angular/core").WritableSignal<boolean>;
49
+ protected readonly ink: typeof vdColorInk;
50
+ protected readonly palette: Signal<{
51
+ value: string;
52
+ label: string;
53
+ }[]>;
54
+ protected readonly paletteEntry: Signal<number>;
55
+ private readonly popup;
56
+ private readonly trigger;
57
+ private readonly hex;
58
+ private readonly host;
59
+ protected readonly field: import("@vadem/ui/field").VdFieldContext | null;
60
+ private readonly injector;
61
+ private readonly destroyRef;
62
+ private readonly formBound;
63
+ private readonly ngSource;
64
+ private readonly ngState;
65
+ protected readonly isDisabled: Signal<boolean>;
66
+ protected readonly locked: Signal<boolean>;
67
+ protected readonly isRequired: Signal<boolean>;
68
+ protected readonly showInvalid: Signal<boolean>;
69
+ private wasOpen;
70
+ private lastValue;
71
+ constructor();
72
+ ngOnInit(): void;
73
+ protected rememberState(): void;
74
+ protected toggle(): void;
75
+ protected triggerKey(event: KeyboardEvent): void;
76
+ protected onToggle(event: Event): void;
77
+ protected edit(event: Event): void;
78
+ protected validateOnBlur(): void;
79
+ protected apply(event?: Event): void;
80
+ protected commit(value: string): void;
81
+ protected paletteKey(event: KeyboardEvent, index: number): void;
82
+ protected leavePopup(event: FocusEvent): void;
83
+ protected onFocusOut(event: FocusEvent): void;
84
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdColorPicker, never>;
85
+ static ɵcmp: i0.ɵɵComponentDeclaration<VdColorPicker, "vd-color-picker", never, {
86
+ "value": {
87
+ "alias": "value";
88
+ "required": false;
89
+ "isSignal": true;
90
+ };
91
+ "swatches": {
92
+ "alias": "swatches";
93
+ "required": false;
94
+ "isSignal": true;
95
+ };
96
+ "size": {
97
+ "alias": "size";
98
+ "required": false;
99
+ "isSignal": true;
100
+ };
101
+ "disabled": {
102
+ "alias": "disabled";
103
+ "required": false;
104
+ "isSignal": true;
105
+ };
106
+ "readonly": {
107
+ "alias": "readonly";
108
+ "required": false;
109
+ "isSignal": true;
110
+ };
111
+ "invalid": {
112
+ "alias": "invalid";
113
+ "required": false;
114
+ "isSignal": true;
115
+ };
116
+ "touched": {
117
+ "alias": "touched";
118
+ "required": false;
119
+ "isSignal": true;
120
+ };
121
+ "required": {
122
+ "alias": "required";
123
+ "required": false;
124
+ "isSignal": true;
125
+ };
126
+ "ariaLabel": {
127
+ "alias": "aria-label";
128
+ "required": false;
129
+ "isSignal": true;
130
+ };
131
+ "ariaLabelledby": {
132
+ "alias": "aria-labelledby";
133
+ "required": false;
134
+ "isSignal": true;
135
+ };
136
+ "placeholder": {
137
+ "alias": "placeholder";
138
+ "required": false;
139
+ "isSignal": true;
140
+ };
141
+ "pickerLabel": {
142
+ "alias": "pickerLabel";
143
+ "required": false;
144
+ "isSignal": true;
145
+ };
146
+ "hexLabel": {
147
+ "alias": "hexLabel";
148
+ "required": false;
149
+ "isSignal": true;
150
+ };
151
+ "paletteLabel": {
152
+ "alias": "paletteLabel";
153
+ "required": false;
154
+ "isSignal": true;
155
+ };
156
+ "applyLabel": {
157
+ "alias": "applyLabel";
158
+ "required": false;
159
+ "isSignal": true;
160
+ };
161
+ "errorLabel": {
162
+ "alias": "errorLabel";
163
+ "required": false;
164
+ "isSignal": true;
165
+ };
166
+ }, {
167
+ "value": "valueChange";
168
+ "touch": "touch";
169
+ }, never, never, true, never>;
170
+ }
171
+ export type { VdColorPickerSize, VdColorSwatch };