@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,233 @@
1
+ /*
2
+ * Vadem semantic tokens.
3
+ * Meaning, not values. Themes only change this layer. Colors are light-dark() pairs that
4
+ * resolve against the element's color-scheme, so nested themes work.
5
+ */
6
+ @layer vd.tokens {
7
+ /* ------------------------------------------------------------- themes */
8
+ /* Dark-first: dark unless asked otherwise. */
9
+ :root,
10
+ [data-theme='dark'] {
11
+ color-scheme: dark;
12
+ }
13
+
14
+ [data-theme='light'] {
15
+ color-scheme: light;
16
+ }
17
+
18
+ [data-theme='auto'] {
19
+ color-scheme: light dark;
20
+ }
21
+
22
+ :where(:root, [data-theme], [data-density]) {
23
+ /* ---------------------------------------------------------- surfaces */
24
+ /* Dark elevation is expressed by lightness: sunken < bg < surface < raised < overlay. */
25
+ --vd-color-bg: light-dark(var(--vd-neutral-50), var(--vd-neutral-975));
26
+ --vd-color-surface-sunken: light-dark(var(--vd-neutral-100), var(--vd-neutral-1000));
27
+ --vd-color-surface: light-dark(var(--vd-neutral-0), var(--vd-neutral-950));
28
+ --vd-color-surface-raised: light-dark(var(--vd-neutral-0), var(--vd-neutral-925));
29
+ --vd-color-surface-overlay: light-dark(var(--vd-neutral-0), var(--vd-neutral-900));
30
+ /* Neutral fill for secondary controls, hovered rows, tracks. */
31
+ --vd-color-fill: light-dark(
32
+ oklch(0.3 0.03 var(--vd-hue-neutral) / 0.06),
33
+ oklch(0.92 0.03 var(--vd-hue-neutral) / 0.07)
34
+ );
35
+ --vd-color-fill-hover: light-dark(
36
+ oklch(0.3 0.03 var(--vd-hue-neutral) / 0.1),
37
+ oklch(0.92 0.03 var(--vd-hue-neutral) / 0.11)
38
+ );
39
+ --vd-color-fill-active: light-dark(
40
+ oklch(0.3 0.03 var(--vd-hue-neutral) / 0.14),
41
+ oklch(0.92 0.03 var(--vd-hue-neutral) / 0.15)
42
+ );
43
+
44
+ /* -------------------------------------------------------------- text */
45
+ --vd-color-text: light-dark(var(--vd-neutral-900), var(--vd-neutral-50));
46
+ --vd-color-text-muted: light-dark(var(--vd-neutral-600), var(--vd-neutral-400));
47
+ /* Placeholders, hints. Still AA on bg and surface. */
48
+ --vd-color-text-subtle: light-dark(var(--vd-neutral-550), var(--vd-neutral-500));
49
+ --vd-color-text-disabled: light-dark(var(--vd-neutral-400), var(--vd-neutral-700));
50
+ --vd-color-text-accent: light-dark(var(--vd-accent-600), var(--vd-accent-300));
51
+
52
+ /* ----------------------------------------------------------- borders */
53
+ --vd-color-border: light-dark(
54
+ oklch(0.3 0.03 var(--vd-hue-neutral) / 0.12),
55
+ oklch(0.92 0.03 var(--vd-hue-neutral) / 0.1)
56
+ );
57
+ --vd-color-border-strong: light-dark(
58
+ oklch(0.3 0.03 var(--vd-hue-neutral) / 0.22),
59
+ oklch(0.92 0.03 var(--vd-hue-neutral) / 0.18)
60
+ );
61
+ /* Form control boundaries need 3:1 against the surface (WCAG 1.4.11). */
62
+ --vd-color-border-control: light-dark(var(--vd-neutral-500), var(--vd-neutral-600));
63
+ --vd-color-border-control-hover: light-dark(var(--vd-neutral-600), var(--vd-neutral-500));
64
+
65
+ /* Text-entry wells: a touch lighter than bg in light, recessed in dark. */
66
+ --vd-color-field: light-dark(
67
+ var(--vd-neutral-0),
68
+ color-mix(in oklch, var(--vd-neutral-1000) 45%, transparent)
69
+ );
70
+ --vd-color-field-readonly: var(--vd-color-fill);
71
+
72
+ /* ------------------------------------------------------------ action */
73
+ --vd-color-action: var(--vd-accent-600);
74
+ --vd-color-action-hover: light-dark(var(--vd-accent-700), var(--vd-accent-500));
75
+ --vd-color-action-active: light-dark(var(--vd-accent-800), var(--vd-accent-600));
76
+ --vd-color-on-action: var(--vd-neutral-0);
77
+ /* Strong (always dark) surface for tooltips and toasts: reads the same in both themes. */
78
+ --vd-color-surface-strong: light-dark(var(--vd-neutral-900), var(--vd-neutral-800));
79
+ --vd-color-text-on-strong: var(--vd-neutral-50);
80
+
81
+ /* Accent text on subtle accent fills (badges, tags): one step darker than link text. */
82
+ --vd-color-action-text: light-dark(var(--vd-accent-700), var(--vd-accent-300));
83
+ --vd-color-action-subtle: light-dark(
84
+ color-mix(in oklch, var(--vd-accent-500) 12%, transparent),
85
+ color-mix(in oklch, var(--vd-accent-400) 16%, transparent)
86
+ );
87
+
88
+ /* ---------------------------------------------------------- statuses */
89
+ --vd-color-success: var(--vd-success-600);
90
+ --vd-color-success-text: light-dark(var(--vd-success-700), var(--vd-success-300));
91
+ --vd-color-success-subtle: light-dark(
92
+ color-mix(in oklch, var(--vd-success-500) 12%, transparent),
93
+ color-mix(in oklch, var(--vd-success-400) 15%, transparent)
94
+ );
95
+ --vd-color-success-border: color-mix(in oklch, var(--vd-success-500) 40%, transparent);
96
+
97
+ /* Warning solids sit lighter on the curve (amber at 600 reads brown), with dark ink. */
98
+ --vd-color-warning: var(--vd-warning-400);
99
+ --vd-color-on-warning: var(--vd-warning-950);
100
+ --vd-color-warning-text: light-dark(var(--vd-warning-700), var(--vd-warning-300));
101
+ --vd-color-warning-subtle: light-dark(
102
+ color-mix(in oklch, var(--vd-warning-500) 14%, transparent),
103
+ color-mix(in oklch, var(--vd-warning-400) 15%, transparent)
104
+ );
105
+ --vd-color-warning-border: color-mix(in oklch, var(--vd-warning-500) 45%, transparent);
106
+
107
+ --vd-color-danger: var(--vd-danger-600);
108
+ --vd-color-danger-hover: light-dark(var(--vd-danger-700), var(--vd-danger-500));
109
+ --vd-color-danger-text: light-dark(var(--vd-danger-700), var(--vd-danger-300));
110
+ --vd-color-danger-subtle: light-dark(
111
+ color-mix(in oklch, var(--vd-danger-500) 11%, transparent),
112
+ color-mix(in oklch, var(--vd-danger-400) 15%, transparent)
113
+ );
114
+ --vd-color-danger-border: color-mix(in oklch, var(--vd-danger-500) 45%, transparent);
115
+
116
+ --vd-color-info: var(--vd-info-600);
117
+ --vd-color-info-text: light-dark(var(--vd-info-700), var(--vd-info-300));
118
+ --vd-color-info-subtle: light-dark(
119
+ color-mix(in oklch, var(--vd-info-500) 12%, transparent),
120
+ color-mix(in oklch, var(--vd-info-400) 15%, transparent)
121
+ );
122
+ --vd-color-info-border: color-mix(in oklch, var(--vd-info-500) 40%, transparent);
123
+
124
+ --vd-color-on-status: var(--vd-neutral-0);
125
+
126
+ /* ------------------------------------------------- focus & selection */
127
+ --vd-color-focus: light-dark(var(--vd-accent-600), var(--vd-accent-400));
128
+ --vd-focus-ring-width: 2px;
129
+ --vd-focus-ring-offset: 2px;
130
+ --vd-color-selection: light-dark(
131
+ color-mix(in oklch, var(--vd-accent-400) 30%, transparent),
132
+ color-mix(in oklch, var(--vd-accent-500) 40%, transparent)
133
+ );
134
+
135
+ /* ------------------------------------------------------------- depth */
136
+ /* Shadow ink: alpha is baked in because light-dark() only accepts colors. */
137
+ --vd-shadow-ink-1: light-dark(
138
+ oklch(0.25 0.03 var(--vd-hue-neutral) / 0.05),
139
+ oklch(0.05 0.01 var(--vd-hue-neutral) / 0.3)
140
+ );
141
+ --vd-shadow-ink-2: light-dark(
142
+ oklch(0.25 0.03 var(--vd-hue-neutral) / 0.08),
143
+ oklch(0.05 0.01 var(--vd-hue-neutral) / 0.4)
144
+ );
145
+ --vd-shadow-ink-3: light-dark(
146
+ oklch(0.25 0.03 var(--vd-hue-neutral) / 0.12),
147
+ oklch(0.05 0.01 var(--vd-hue-neutral) / 0.55)
148
+ );
149
+ --vd-shadow-sm: 0 1px 1px var(--vd-shadow-ink-1), 0 1px 3px var(--vd-shadow-ink-1);
150
+ --vd-shadow-md:
151
+ 0 1px 2px var(--vd-shadow-ink-1), 0 4px 8px -2px var(--vd-shadow-ink-2),
152
+ 0 12px 24px -8px var(--vd-shadow-ink-2);
153
+ --vd-shadow-lg:
154
+ 0 2px 4px var(--vd-shadow-ink-1), 0 12px 24px -6px var(--vd-shadow-ink-2),
155
+ 0 32px 64px -16px var(--vd-shadow-ink-3);
156
+
157
+ /* Signature: 1px inner top highlight on raised dark surfaces (invisible in light). */
158
+ --vd-color-highlight: light-dark(transparent, oklch(1 0 0 / 0.07));
159
+ --vd-highlight-top: inset 0 1px 0 var(--vd-color-highlight);
160
+
161
+ /* Signature: cursor-following glow on interactive cards. */
162
+ --vd-glow-color: light-dark(
163
+ color-mix(in oklch, var(--vd-accent-400) 14%, transparent),
164
+ color-mix(in oklch, var(--vd-accent-500) 18%, transparent)
165
+ );
166
+ --vd-glow-size: 22rem;
167
+ /* Brighter variant that lights up the card border near the cursor. */
168
+ --vd-glow-border: light-dark(
169
+ color-mix(in oklch, var(--vd-accent-500) 45%, transparent),
170
+ color-mix(in oklch, var(--vd-accent-400) 55%, transparent)
171
+ );
172
+ --vd-color-shimmer: light-dark(oklch(1 0 0 / 0.6), oklch(1 0 0 / 0.06));
173
+
174
+ /* Soft accent glow under solid actions on hover. */
175
+ --vd-shadow-glow-action: 0 6px 20px -6px
176
+ color-mix(in oklch, var(--vd-color-action) 55%, transparent);
177
+ /* Top-lit sheen on solid fills (primary, danger). */
178
+ --vd-color-sheen: oklch(1 0 0 / 0.12);
179
+
180
+ /* Translucent overlay surfaces (popover, sticky header) and the modal backdrop. */
181
+ --vd-color-surface-glass: light-dark(
182
+ color-mix(in oklch, var(--vd-neutral-0) 78%, transparent),
183
+ color-mix(in oklch, var(--vd-neutral-950) 72%, transparent)
184
+ );
185
+ --vd-backdrop-glass: blur(16px) saturate(1.4);
186
+ --vd-color-backdrop: light-dark(
187
+ oklch(0.25 0.03 var(--vd-hue-neutral) / 0.35),
188
+ oklch(0.08 0.01 var(--vd-hue-neutral) / 0.6)
189
+ );
190
+
191
+ /* ------------------------------------------------------------- chart */
192
+ /* Categorical series, assigned in this fixed order and never cycled. Exact values, not
193
+ ramp-derived: the set and its order were validated together (dataviz six checks, both
194
+ themes; worst adjacent CVD dE 12.1 light / 11.9 dark, normal-vision 23.2 / 19.7).
195
+ Independent of --vd-hue-accent so retheming never breaks separation. Slot 4 is 2.3:1 on
196
+ the light surface: charts always ship a legend and a table view (relief). See D106. */
197
+ --vd-color-chart-1: light-dark(oklch(0.55 0.17 290), oklch(0.65 0.15 290)); /* violet */
198
+ --vd-color-chart-2: light-dark(oklch(0.65 0.17 50), oklch(0.62 0.16 50)); /* orange */
199
+ --vd-color-chart-3: light-dark(oklch(0.61 0.105 190), oklch(0.64 0.11 190)); /* teal */
200
+ --vd-color-chart-4: light-dark(oklch(0.74 0.15 80), oklch(0.66 0.13 80)); /* amber */
201
+ --vd-color-chart-5: light-dark(oklch(0.6 0.18 345), oklch(0.64 0.16 345)); /* magenta */
202
+ --vd-color-chart-6: light-dark(oklch(0.6 0.15 140), oklch(0.62 0.15 140)); /* green */
203
+ --vd-color-chart-7: light-dark(oklch(0.58 0.14 245), oklch(0.64 0.13 245)); /* blue */
204
+ --vd-color-chart-8: light-dark(oklch(0.56 0.19 20), oklch(0.62 0.17 20)); /* red */
205
+
206
+ /* ------------------------------------------------------------- shape */
207
+ --vd-radius-control: var(--vd-radius-md);
208
+ --vd-radius-surface: var(--vd-radius-lg);
209
+ --vd-radius-overlay: var(--vd-radius-xl);
210
+ --vd-radius-pill: var(--vd-radius-full);
211
+
212
+ /* ------------------------------------------------------------ motion */
213
+ --vd-transition-colors:
214
+ color var(--vd-duration-fast) var(--vd-ease-out),
215
+ background-color var(--vd-duration-fast) var(--vd-ease-out),
216
+ border-color var(--vd-duration-fast) var(--vd-ease-out),
217
+ box-shadow var(--vd-duration-fast) var(--vd-ease-out);
218
+ }
219
+
220
+ :root {
221
+ --vd-press-scale: 0.98;
222
+ --vd-opacity-disabled: 0.45;
223
+ }
224
+
225
+ @media (prefers-reduced-motion: reduce) {
226
+ :root {
227
+ --vd-duration-fast: 0ms;
228
+ --vd-duration-base: 0ms;
229
+ --vd-duration-slow: 0ms;
230
+ --vd-press-scale: 1;
231
+ }
232
+ }
233
+ }
@@ -0,0 +1,43 @@
1
+ import * as i0 from "@angular/core";
2
+ /**
3
+ * Group of `details[vdAccordionItem]`. With `exclusive`, the items share a `name`, so the
4
+ * browser keeps at most one open. Spec: specs/accordion.md
5
+ */
6
+ export declare class VdAccordion {
7
+ /** At most one item open at a time (native `<details name>`). */
8
+ readonly exclusive: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
9
+ readonly name: string;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdAccordion, never>;
11
+ static ɵdir: i0.ɵɵDirectiveDeclaration<VdAccordion, "[vdAccordion]", never, {
12
+ "exclusive": {
13
+ "alias": "exclusive";
14
+ "required": false;
15
+ "isSignal": true;
16
+ };
17
+ }, {}, never, never, true, never>;
18
+ }
19
+ /**
20
+ * One disclosure on a native `<details>` with a `<summary>`: keyboard, find-in-page (opens the
21
+ * matching item) and state stay native. `open` works as a plain attribute (`<details open>`)
22
+ * and two-way (`[(open)]`).
23
+ */
24
+ export declare class VdAccordionItem {
25
+ readonly open: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
26
+ readonly openChange: import("@angular/core").OutputEmitterRef<boolean>;
27
+ /** Follows the input, and the browser's own toggles in between. */
28
+ protected readonly isOpen: import("@angular/core").WritableSignal<boolean>;
29
+ private readonly group;
30
+ protected readonly groupName: import("@angular/core").Signal<string | null>;
31
+ protected onToggle(event: Event): void;
32
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdAccordionItem, never>;
33
+ static ɵdir: i0.ɵɵDirectiveDeclaration<VdAccordionItem, "details[vdAccordionItem]", never, {
34
+ "open": {
35
+ "alias": "open";
36
+ "required": false;
37
+ "isSignal": true;
38
+ };
39
+ }, {
40
+ "openChange": "openChange";
41
+ }, never, never, true, never>;
42
+ }
43
+ export declare const VD_ACCORDION: readonly [typeof VdAccordion, typeof VdAccordionItem];
@@ -0,0 +1,73 @@
1
+ import * as i0 from "@angular/core";
2
+ interface VdActiveFilter {
3
+ readonly id: string;
4
+ readonly label: string;
5
+ readonly value: string;
6
+ }
7
+ export declare class VdActiveFilters {
8
+ readonly filters: import("@angular/core").InputSignal<readonly VdActiveFilter[]>;
9
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
10
+ readonly label: import("@angular/core").InputSignal<string | undefined>;
11
+ readonly clearText: import("@angular/core").InputSignal<string | undefined>;
12
+ readonly emptyText: import("@angular/core").InputSignal<string | undefined>;
13
+ readonly invalidText: import("@angular/core").InputSignal<string | undefined>;
14
+ readonly removeLabel: import("@angular/core").InputSignal<((label: string, value: string) => string) | undefined>;
15
+ readonly filterRemove: import("@angular/core").OutputEmitterRef<string>;
16
+ readonly clearAll: import("@angular/core").OutputEmitterRef<void>;
17
+ protected readonly valid: import("@angular/core").Signal<boolean>;
18
+ protected readonly t: import("@angular/core").Signal<Pick<{
19
+ label: string;
20
+ clearText: string;
21
+ emptyText: string;
22
+ invalidText: string;
23
+ removeLabel: (label: string, value: string) => string;
24
+ }, "label" | "clearText" | "emptyText" | "invalidText" | "removeLabel">>;
25
+ private readonly host;
26
+ private focus;
27
+ constructor();
28
+ private buttons;
29
+ protected remove(id: string): void;
30
+ protected clear(): void;
31
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdActiveFilters, never>;
32
+ static ɵcmp: i0.ɵɵComponentDeclaration<VdActiveFilters, "vd-active-filters", never, {
33
+ "filters": {
34
+ "alias": "filters";
35
+ "required": false;
36
+ "isSignal": true;
37
+ };
38
+ "disabled": {
39
+ "alias": "disabled";
40
+ "required": false;
41
+ "isSignal": true;
42
+ };
43
+ "label": {
44
+ "alias": "label";
45
+ "required": false;
46
+ "isSignal": true;
47
+ };
48
+ "clearText": {
49
+ "alias": "clearText";
50
+ "required": false;
51
+ "isSignal": true;
52
+ };
53
+ "emptyText": {
54
+ "alias": "emptyText";
55
+ "required": false;
56
+ "isSignal": true;
57
+ };
58
+ "invalidText": {
59
+ "alias": "invalidText";
60
+ "required": false;
61
+ "isSignal": true;
62
+ };
63
+ "removeLabel": {
64
+ "alias": "removeLabel";
65
+ "required": false;
66
+ "isSignal": true;
67
+ };
68
+ }, {
69
+ "filterRemove": "filterRemove";
70
+ "clearAll": "clearAll";
71
+ }, never, never, true, never>;
72
+ }
73
+ export type { VdActiveFilter };
@@ -0,0 +1,87 @@
1
+ import * as i0 from "@angular/core";
2
+ type VdAlertDialogAction = () => void | Promise<void>;
3
+ /** An explicit decision with application-owned work and a safe initial focus. */
4
+ export declare class VdAlertDialog {
5
+ readonly open: import("@angular/core").ModelSignal<boolean>;
6
+ readonly title: import("@angular/core").InputSignal<string>;
7
+ readonly description: import("@angular/core").InputSignal<string>;
8
+ readonly action: import("@angular/core").InputSignal<VdAlertDialogAction>;
9
+ readonly variant: import("@angular/core").InputSignal<"primary" | "danger">;
10
+ readonly confirmLabel: import("@angular/core").InputSignal<string | undefined>;
11
+ readonly cancelLabel: import("@angular/core").InputSignal<string | undefined>;
12
+ readonly pendingText: import("@angular/core").InputSignal<string | undefined>;
13
+ readonly errorText: import("@angular/core").InputSignal<string | undefined>;
14
+ readonly confirmed: import("@angular/core").OutputEmitterRef<void>;
15
+ readonly canceled: import("@angular/core").OutputEmitterRef<void>;
16
+ readonly actionFailed: import("@angular/core").OutputEmitterRef<unknown>;
17
+ protected readonly t: import("@angular/core").Signal<Pick<{
18
+ confirmLabel: string;
19
+ cancelLabel: string;
20
+ pendingText: string;
21
+ errorText: string;
22
+ }, "confirmLabel" | "cancelLabel" | "pendingText" | "errorText">>;
23
+ protected readonly pending: import("@angular/core").WritableSignal<boolean>;
24
+ protected readonly failed: import("@angular/core").WritableSignal<boolean>;
25
+ protected readonly state: import("@angular/core").Signal<"closed" | "pending" | "error" | "idle">;
26
+ private generation;
27
+ private destroyed;
28
+ constructor();
29
+ protected escape(event: Event): void;
30
+ protected cancel(): void;
31
+ protected confirm(): Promise<void>;
32
+ private current;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdAlertDialog, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<VdAlertDialog, "vd-alert-dialog", never, {
35
+ "open": {
36
+ "alias": "open";
37
+ "required": false;
38
+ "isSignal": true;
39
+ };
40
+ "title": {
41
+ "alias": "title";
42
+ "required": true;
43
+ "isSignal": true;
44
+ };
45
+ "description": {
46
+ "alias": "description";
47
+ "required": true;
48
+ "isSignal": true;
49
+ };
50
+ "action": {
51
+ "alias": "action";
52
+ "required": true;
53
+ "isSignal": true;
54
+ };
55
+ "variant": {
56
+ "alias": "variant";
57
+ "required": false;
58
+ "isSignal": true;
59
+ };
60
+ "confirmLabel": {
61
+ "alias": "confirmLabel";
62
+ "required": false;
63
+ "isSignal": true;
64
+ };
65
+ "cancelLabel": {
66
+ "alias": "cancelLabel";
67
+ "required": false;
68
+ "isSignal": true;
69
+ };
70
+ "pendingText": {
71
+ "alias": "pendingText";
72
+ "required": false;
73
+ "isSignal": true;
74
+ };
75
+ "errorText": {
76
+ "alias": "errorText";
77
+ "required": false;
78
+ "isSignal": true;
79
+ };
80
+ }, {
81
+ "open": "openChange";
82
+ "confirmed": "confirmed";
83
+ "canceled": "canceled";
84
+ "actionFailed": "actionFailed";
85
+ }, never, never, true, never>;
86
+ }
87
+ export type { VdAlertDialogAction };
@@ -0,0 +1,64 @@
1
+ import * as i0 from "@angular/core";
2
+ type VdAlertVariant = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
3
+ /** `banner`: full-width strip at the top of a page or region (maintenance, cookies, updates). */
4
+ type VdAlertLayout = 'inline' | 'banner';
5
+ /**
6
+ * Inline message in the page flow (callout). Static by default; add `role="alert"` (urgent) or
7
+ * `role="status"` when it appears in response to an action. Spec: specs/alert.md
8
+ */
9
+ export declare class VdAlert {
10
+ readonly variant: import("@angular/core").InputSignal<VdAlertVariant>;
11
+ /** Leading icon; defaults to the variant's icon. `null` hides it. */
12
+ readonly icon: import("@angular/core").InputSignal<"info" | "menu" | "search" | "activity" | "alert-circle" | "alert-triangle" | "arrow-down" | "arrow-left" | "arrow-right" | "arrow-up" | "arrow-up-down" | "bell" | "calendar" | "check" | "check-circle" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "copy" | "credit-card" | "download" | "external-link" | "eye" | "eye-off" | "file" | "folder" | "git-branch" | "globe" | "key" | "layout-dashboard" | "loader" | "lock" | "log-out" | "mail" | "minus" | "monitor" | "moon" | "more-horizontal" | "panel-left" | "pencil" | "plus" | "rocket" | "settings" | "shield" | "star" | "sun" | "trash" | "trending-down" | "trending-up" | "upload" | "user" | "users" | "x" | "x-circle" | null | undefined>;
13
+ readonly layout: import("@angular/core").InputSignal<VdAlertLayout>;
14
+ /** Adds a close button. The consumer removes the alert (and remembers the choice) on `dismiss`. */
15
+ readonly dismissible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
16
+ readonly dismissLabel: import("@angular/core").InputSignal<string | undefined>;
17
+ /** Emitted when the close button is activated; focus has already moved to a neighbour. */
18
+ readonly dismiss: import("@angular/core").OutputEmitterRef<void>;
19
+ /** Text inputs resolved against the active VD_LOCALE. */
20
+ protected readonly t: import("@angular/core").Signal<Pick<{
21
+ dismissLabel: string;
22
+ }, "dismissLabel">>;
23
+ private readonly el;
24
+ /** Removing a focused element drops focus to <body>; hand it to the next control first. */
25
+ protected onDismiss(): void;
26
+ protected readonly iconName: import("@angular/core").Signal<"info" | "menu" | "search" | "activity" | "alert-circle" | "alert-triangle" | "arrow-down" | "arrow-left" | "arrow-right" | "arrow-up" | "arrow-up-down" | "bell" | "calendar" | "check" | "check-circle" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "copy" | "credit-card" | "download" | "external-link" | "eye" | "eye-off" | "file" | "folder" | "git-branch" | "globe" | "key" | "layout-dashboard" | "loader" | "lock" | "log-out" | "mail" | "minus" | "monitor" | "moon" | "more-horizontal" | "panel-left" | "pencil" | "plus" | "rocket" | "settings" | "shield" | "star" | "sun" | "trash" | "trending-down" | "trending-up" | "upload" | "user" | "users" | "x" | "x-circle" | null>;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdAlert, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<VdAlert, "[vdAlert]", never, {
29
+ "variant": {
30
+ "alias": "variant";
31
+ "required": false;
32
+ "isSignal": true;
33
+ };
34
+ "icon": {
35
+ "alias": "icon";
36
+ "required": false;
37
+ "isSignal": true;
38
+ };
39
+ "layout": {
40
+ "alias": "layout";
41
+ "required": false;
42
+ "isSignal": true;
43
+ };
44
+ "dismissible": {
45
+ "alias": "dismissible";
46
+ "required": false;
47
+ "isSignal": true;
48
+ };
49
+ "dismissLabel": {
50
+ "alias": "dismissLabel";
51
+ "required": false;
52
+ "isSignal": true;
53
+ };
54
+ }, {
55
+ "dismiss": "dismiss";
56
+ }, never, ["*", "[slot=end]"], true, never>;
57
+ }
58
+ /** Bold first line of an alert. */
59
+ export declare class VdAlertTitle {
60
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdAlertTitle, never>;
61
+ static ɵdir: i0.ɵɵDirectiveDeclaration<VdAlertTitle, "[vdAlertTitle]", never, {}, {}, never, never, true, never>;
62
+ }
63
+ export declare const VD_ALERT: readonly [typeof VdAlert, typeof VdAlertTitle];
64
+ export type { VdAlertLayout, VdAlertVariant };
@@ -0,0 +1,156 @@
1
+ import * as i0 from "@angular/core";
2
+ import { VdInput } from "@vadem/ui/input";
3
+ interface VdAutocompleteOption {
4
+ readonly id: string;
5
+ readonly label: string;
6
+ readonly description?: string;
7
+ readonly disabled?: boolean;
8
+ }
9
+ /** Active identity is valid only while the current result set permits selection. */
10
+ declare function vdAutocompleteActive(options: readonly VdAutocompleteOption[], id: string | null): VdAutocompleteOption | undefined;
11
+ declare function vdAutocompleteMove(options: readonly VdAutocompleteOption[], id: string | null, key: 'ArrowDown' | 'ArrowUp'): string | null;
12
+ /** Physical viewport measurements in, logical inline offset out; no DOM dependency. */
13
+ declare function vdAutocompletePlacement(anchor: {
14
+ top: number;
15
+ bottom: number;
16
+ left: number;
17
+ right: number;
18
+ width: number;
19
+ }, viewport: {
20
+ width: number;
21
+ height: number;
22
+ }, height: number, gap: number, rtl: boolean): {
23
+ width: number;
24
+ top: number;
25
+ inline: number;
26
+ available: number;
27
+ };
28
+ /** Internal connection: the native input keeps its existing forms accessor. */
29
+ interface VdAutocompleteOwner {
30
+ readonly element: HTMLInputElement;
31
+ locked(): boolean;
32
+ accept(option: VdAutocompleteOption): void;
33
+ }
34
+ export declare class VdAutocomplete {
35
+ readonly options: import("@angular/core").InputSignal<readonly VdAutocompleteOption[]>;
36
+ /** Optional literal query for visual label matches; filtering remains application-owned. */
37
+ readonly highlightQuery: import("@angular/core").InputSignal<string>;
38
+ readonly loading: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
39
+ readonly errorText: import("@angular/core").InputSignal<string>;
40
+ readonly label: import("@angular/core").InputSignal<string | undefined>;
41
+ readonly loadingText: import("@angular/core").InputSignal<string | undefined>;
42
+ readonly emptyText: import("@angular/core").InputSignal<string | undefined>;
43
+ readonly resultsText: import("@angular/core").InputSignal<((count: number) => string) | undefined>;
44
+ /** Text inputs resolved against the active VD_LOCALE. */
45
+ protected readonly t: import("@angular/core").Signal<Pick<{
46
+ label: string;
47
+ loadingText: string;
48
+ emptyText: string;
49
+ resultsText: (count: number) => string;
50
+ }, "label" | "loadingText" | "emptyText" | "resultsText">>;
51
+ readonly optionSelected: import("@angular/core").OutputEmitterRef<VdAutocompleteOption>;
52
+ readonly listboxId: string;
53
+ readonly expanded: import("@angular/core").WritableSignal<boolean>;
54
+ protected readonly fallback: import("@angular/core").WritableSignal<boolean>;
55
+ private readonly popup;
56
+ private readonly activeKey;
57
+ private owner;
58
+ private cleanup;
59
+ protected readonly availableOptions: import("@angular/core").Signal<readonly VdAutocompleteOption[]>;
60
+ readonly active: import("@angular/core").Signal<VdAutocompleteOption | undefined>;
61
+ readonly activeId: import("@angular/core").Signal<string | null>;
62
+ protected readonly message: import("@angular/core").Signal<string>;
63
+ constructor();
64
+ /** Browser-only connection, installed by the input's after-render hook. */
65
+ connect(owner: VdAutocompleteOwner): () => void;
66
+ open(): void;
67
+ close(): void;
68
+ resetActive(): void;
69
+ navigate(key: 'ArrowDown' | 'ArrowUp'): void;
70
+ choose(id: string): void;
71
+ protected hover(option: VdAutocompleteOption): void;
72
+ protected optionId(option: VdAutocompleteOption): string;
73
+ protected syncToggle(): void;
74
+ private position;
75
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdAutocomplete, never>;
76
+ static ɵcmp: i0.ɵɵComponentDeclaration<VdAutocomplete, "vd-autocomplete", never, {
77
+ "options": {
78
+ "alias": "options";
79
+ "required": false;
80
+ "isSignal": true;
81
+ };
82
+ "highlightQuery": {
83
+ "alias": "highlightQuery";
84
+ "required": false;
85
+ "isSignal": true;
86
+ };
87
+ "loading": {
88
+ "alias": "loading";
89
+ "required": false;
90
+ "isSignal": true;
91
+ };
92
+ "errorText": {
93
+ "alias": "errorText";
94
+ "required": false;
95
+ "isSignal": true;
96
+ };
97
+ "label": {
98
+ "alias": "label";
99
+ "required": false;
100
+ "isSignal": true;
101
+ };
102
+ "loadingText": {
103
+ "alias": "loadingText";
104
+ "required": false;
105
+ "isSignal": true;
106
+ };
107
+ "emptyText": {
108
+ "alias": "emptyText";
109
+ "required": false;
110
+ "isSignal": true;
111
+ };
112
+ "resultsText": {
113
+ "alias": "resultsText";
114
+ "required": false;
115
+ "isSignal": true;
116
+ };
117
+ }, {
118
+ "optionSelected": "optionSelected";
119
+ }, never, never, true, never>;
120
+ }
121
+ /** Native text accessor and Field wiring; the panel only offers optional completions. */
122
+ export declare class VdAutocompleteInput extends VdInput {
123
+ readonly vdAutocomplete: import("@angular/core").InputSignal<VdAutocomplete>;
124
+ readonly queryChange: import("@angular/core").OutputEmitterRef<string>;
125
+ readonly element: HTMLInputElement;
126
+ private readonly autocompleteNgControl;
127
+ private readonly autocompleteFormField;
128
+ private readonly autocompleteDestroyRef;
129
+ private composing;
130
+ private accepting;
131
+ private lastQuery;
132
+ private snapshot;
133
+ constructor();
134
+ ngOnInit(): void;
135
+ locked(): boolean;
136
+ accept(option: VdAutocompleteOption): void;
137
+ protected show(): void;
138
+ protected onInput(event: Event): void;
139
+ protected startComposition(): void;
140
+ protected endComposition(): void;
141
+ protected onKeydown(event: KeyboardEvent): void;
142
+ private remember;
143
+ private publish;
144
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdAutocompleteInput, never>;
145
+ static ɵdir: i0.ɵɵDirectiveDeclaration<VdAutocompleteInput, "input[vdAutocomplete]", never, {
146
+ "vdAutocomplete": {
147
+ "alias": "vdAutocomplete";
148
+ "required": true;
149
+ "isSignal": true;
150
+ };
151
+ }, {
152
+ "queryChange": "queryChange";
153
+ }, never, never, true, never>;
154
+ }
155
+ export declare const VD_AUTOCOMPLETE: readonly [typeof VdAutocomplete, typeof VdAutocompleteInput];
156
+ export type { VdAutocompleteOption };