@loomui-ng/ui 0.0.0-stage → 0.1.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 (270) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +46 -2
  3. package/accordion/README.md +38 -0
  4. package/alert/README.md +32 -0
  5. package/alert-dialog/README.md +37 -0
  6. package/aspect-ratio/README.md +24 -0
  7. package/attachment/README.md +40 -0
  8. package/avatar/README.md +34 -0
  9. package/badge/README.md +29 -0
  10. package/breadcrumb/README.md +33 -0
  11. package/bubble/README.md +32 -0
  12. package/button/README.md +31 -0
  13. package/button-group/README.md +30 -0
  14. package/calendar/README.md +35 -0
  15. package/card/README.md +41 -0
  16. package/carousel/README.md +41 -0
  17. package/chart/README.md +25 -0
  18. package/checkbox/README.md +31 -0
  19. package/collapsible/README.md +31 -0
  20. package/combobox/README.md +47 -0
  21. package/command/README.md +44 -0
  22. package/context-menu/README.md +36 -0
  23. package/data-table/README.md +39 -0
  24. package/date-picker/README.md +23 -0
  25. package/dialog/README.md +52 -0
  26. package/direction/README.md +19 -0
  27. package/drawer/README.md +37 -0
  28. package/dropdown-menu/README.md +46 -0
  29. package/empty/README.md +38 -0
  30. package/fesm2022/loomui-ng-ui-accordion.mjs +555 -0
  31. package/fesm2022/loomui-ng-ui-accordion.mjs.map +1 -0
  32. package/fesm2022/loomui-ng-ui-alert-dialog.mjs +652 -0
  33. package/fesm2022/loomui-ng-ui-alert-dialog.mjs.map +1 -0
  34. package/fesm2022/loomui-ng-ui-alert.mjs +286 -0
  35. package/fesm2022/loomui-ng-ui-alert.mjs.map +1 -0
  36. package/fesm2022/loomui-ng-ui-aspect-ratio.mjs +97 -0
  37. package/fesm2022/loomui-ng-ui-aspect-ratio.mjs.map +1 -0
  38. package/fesm2022/loomui-ng-ui-attachment.mjs +713 -0
  39. package/fesm2022/loomui-ng-ui-attachment.mjs.map +1 -0
  40. package/fesm2022/loomui-ng-ui-avatar.mjs +561 -0
  41. package/fesm2022/loomui-ng-ui-avatar.mjs.map +1 -0
  42. package/fesm2022/loomui-ng-ui-badge.mjs +102 -0
  43. package/fesm2022/loomui-ng-ui-badge.mjs.map +1 -0
  44. package/fesm2022/loomui-ng-ui-breadcrumb.mjs +520 -0
  45. package/fesm2022/loomui-ng-ui-breadcrumb.mjs.map +1 -0
  46. package/fesm2022/loomui-ng-ui-bubble.mjs +386 -0
  47. package/fesm2022/loomui-ng-ui-bubble.mjs.map +1 -0
  48. package/fesm2022/loomui-ng-ui-button-group.mjs +193 -0
  49. package/fesm2022/loomui-ng-ui-button-group.mjs.map +1 -0
  50. package/fesm2022/loomui-ng-ui-button.mjs +162 -0
  51. package/fesm2022/loomui-ng-ui-button.mjs.map +1 -0
  52. package/fesm2022/loomui-ng-ui-calendar.mjs +681 -0
  53. package/fesm2022/loomui-ng-ui-calendar.mjs.map +1 -0
  54. package/fesm2022/loomui-ng-ui-card.mjs +461 -0
  55. package/fesm2022/loomui-ng-ui-card.mjs.map +1 -0
  56. package/fesm2022/loomui-ng-ui-carousel.mjs +532 -0
  57. package/fesm2022/loomui-ng-ui-carousel.mjs.map +1 -0
  58. package/fesm2022/loomui-ng-ui-chart.mjs +373 -0
  59. package/fesm2022/loomui-ng-ui-chart.mjs.map +1 -0
  60. package/fesm2022/loomui-ng-ui-checkbox.mjs +265 -0
  61. package/fesm2022/loomui-ng-ui-checkbox.mjs.map +1 -0
  62. package/fesm2022/loomui-ng-ui-collapsible.mjs +274 -0
  63. package/fesm2022/loomui-ng-ui-collapsible.mjs.map +1 -0
  64. package/fesm2022/loomui-ng-ui-combobox.mjs +971 -0
  65. package/fesm2022/loomui-ng-ui-combobox.mjs.map +1 -0
  66. package/fesm2022/loomui-ng-ui-command.mjs +982 -0
  67. package/fesm2022/loomui-ng-ui-command.mjs.map +1 -0
  68. package/fesm2022/loomui-ng-ui-context-menu.mjs +1359 -0
  69. package/fesm2022/loomui-ng-ui-context-menu.mjs.map +1 -0
  70. package/fesm2022/loomui-ng-ui-data-table.mjs +535 -0
  71. package/fesm2022/loomui-ng-ui-data-table.mjs.map +1 -0
  72. package/fesm2022/loomui-ng-ui-date-picker.mjs +312 -0
  73. package/fesm2022/loomui-ng-ui-date-picker.mjs.map +1 -0
  74. package/fesm2022/loomui-ng-ui-dialog.mjs +508 -0
  75. package/fesm2022/loomui-ng-ui-dialog.mjs.map +1 -0
  76. package/fesm2022/loomui-ng-ui-direction.mjs +112 -0
  77. package/fesm2022/loomui-ng-ui-direction.mjs.map +1 -0
  78. package/fesm2022/loomui-ng-ui-drawer.mjs +590 -0
  79. package/fesm2022/loomui-ng-ui-drawer.mjs.map +1 -0
  80. package/fesm2022/loomui-ng-ui-dropdown-menu.mjs +1322 -0
  81. package/fesm2022/loomui-ng-ui-dropdown-menu.mjs.map +1 -0
  82. package/fesm2022/loomui-ng-ui-empty.mjs +408 -0
  83. package/fesm2022/loomui-ng-ui-empty.mjs.map +1 -0
  84. package/fesm2022/loomui-ng-ui-field.mjs +630 -0
  85. package/fesm2022/loomui-ng-ui-field.mjs.map +1 -0
  86. package/fesm2022/loomui-ng-ui-hover-card.mjs +230 -0
  87. package/fesm2022/loomui-ng-ui-hover-card.mjs.map +1 -0
  88. package/fesm2022/loomui-ng-ui-icon.mjs +498 -0
  89. package/fesm2022/loomui-ng-ui-icon.mjs.map +1 -0
  90. package/fesm2022/loomui-ng-ui-input-group.mjs +463 -0
  91. package/fesm2022/loomui-ng-ui-input-group.mjs.map +1 -0
  92. package/fesm2022/loomui-ng-ui-input-otp.mjs +586 -0
  93. package/fesm2022/loomui-ng-ui-input-otp.mjs.map +1 -0
  94. package/fesm2022/loomui-ng-ui-input.mjs +289 -0
  95. package/fesm2022/loomui-ng-ui-input.mjs.map +1 -0
  96. package/fesm2022/loomui-ng-ui-item.mjs +598 -0
  97. package/fesm2022/loomui-ng-ui-item.mjs.map +1 -0
  98. package/fesm2022/loomui-ng-ui-kbd.mjs +129 -0
  99. package/fesm2022/loomui-ng-ui-kbd.mjs.map +1 -0
  100. package/fesm2022/loomui-ng-ui-label.mjs +68 -0
  101. package/fesm2022/loomui-ng-ui-label.mjs.map +1 -0
  102. package/fesm2022/loomui-ng-ui-marker.mjs +234 -0
  103. package/fesm2022/loomui-ng-ui-marker.mjs.map +1 -0
  104. package/fesm2022/loomui-ng-ui-menubar.mjs +1523 -0
  105. package/fesm2022/loomui-ng-ui-menubar.mjs.map +1 -0
  106. package/fesm2022/loomui-ng-ui-message-scroller.mjs +519 -0
  107. package/fesm2022/loomui-ng-ui-message-scroller.mjs.map +1 -0
  108. package/fesm2022/loomui-ng-ui-message.mjs +408 -0
  109. package/fesm2022/loomui-ng-ui-message.mjs.map +1 -0
  110. package/fesm2022/loomui-ng-ui-native-select.mjs +389 -0
  111. package/fesm2022/loomui-ng-ui-native-select.mjs.map +1 -0
  112. package/fesm2022/loomui-ng-ui-navigation-menu.mjs +609 -0
  113. package/fesm2022/loomui-ng-ui-navigation-menu.mjs.map +1 -0
  114. package/fesm2022/loomui-ng-ui-pagination.mjs +611 -0
  115. package/fesm2022/loomui-ng-ui-pagination.mjs.map +1 -0
  116. package/fesm2022/loomui-ng-ui-popover.mjs +358 -0
  117. package/fesm2022/loomui-ng-ui-popover.mjs.map +1 -0
  118. package/fesm2022/loomui-ng-ui-progress.mjs +159 -0
  119. package/fesm2022/loomui-ng-ui-progress.mjs.map +1 -0
  120. package/fesm2022/loomui-ng-ui-questionnaire.mjs +1012 -0
  121. package/fesm2022/loomui-ng-ui-questionnaire.mjs.map +1 -0
  122. package/fesm2022/loomui-ng-ui-radio-group.mjs +399 -0
  123. package/fesm2022/loomui-ng-ui-radio-group.mjs.map +1 -0
  124. package/fesm2022/loomui-ng-ui-resizable.mjs +518 -0
  125. package/fesm2022/loomui-ng-ui-resizable.mjs.map +1 -0
  126. package/fesm2022/loomui-ng-ui-scroll-area.mjs +135 -0
  127. package/fesm2022/loomui-ng-ui-scroll-area.mjs.map +1 -0
  128. package/fesm2022/loomui-ng-ui-select.mjs +863 -0
  129. package/fesm2022/loomui-ng-ui-select.mjs.map +1 -0
  130. package/fesm2022/loomui-ng-ui-separator.mjs +114 -0
  131. package/fesm2022/loomui-ng-ui-separator.mjs.map +1 -0
  132. package/fesm2022/loomui-ng-ui-sheet.mjs +530 -0
  133. package/fesm2022/loomui-ng-ui-sheet.mjs.map +1 -0
  134. package/fesm2022/loomui-ng-ui-sidebar.mjs +1918 -0
  135. package/fesm2022/loomui-ng-ui-sidebar.mjs.map +1 -0
  136. package/fesm2022/loomui-ng-ui-skeleton.mjs +69 -0
  137. package/fesm2022/loomui-ng-ui-skeleton.mjs.map +1 -0
  138. package/fesm2022/loomui-ng-ui-slider.mjs +390 -0
  139. package/fesm2022/loomui-ng-ui-slider.mjs.map +1 -0
  140. package/fesm2022/loomui-ng-ui-spinner.mjs +85 -0
  141. package/fesm2022/loomui-ng-ui-spinner.mjs.map +1 -0
  142. package/fesm2022/loomui-ng-ui-switch.mjs +212 -0
  143. package/fesm2022/loomui-ng-ui-switch.mjs.map +1 -0
  144. package/fesm2022/loomui-ng-ui-table.mjs +559 -0
  145. package/fesm2022/loomui-ng-ui-table.mjs.map +1 -0
  146. package/fesm2022/loomui-ng-ui-tabs.mjs +544 -0
  147. package/fesm2022/loomui-ng-ui-tabs.mjs.map +1 -0
  148. package/fesm2022/loomui-ng-ui-textarea.mjs +206 -0
  149. package/fesm2022/loomui-ng-ui-textarea.mjs.map +1 -0
  150. package/fesm2022/loomui-ng-ui-toast.mjs +432 -0
  151. package/fesm2022/loomui-ng-ui-toast.mjs.map +1 -0
  152. package/fesm2022/loomui-ng-ui-toggle-group.mjs +477 -0
  153. package/fesm2022/loomui-ng-ui-toggle-group.mjs.map +1 -0
  154. package/fesm2022/loomui-ng-ui-toggle.mjs +219 -0
  155. package/fesm2022/loomui-ng-ui-toggle.mjs.map +1 -0
  156. package/fesm2022/loomui-ng-ui-tooltip.mjs +240 -0
  157. package/fesm2022/loomui-ng-ui-tooltip.mjs.map +1 -0
  158. package/fesm2022/loomui-ng-ui-typography.mjs +129 -0
  159. package/fesm2022/loomui-ng-ui-typography.mjs.map +1 -0
  160. package/fesm2022/loomui-ng-ui-utils.mjs +1533 -0
  161. package/fesm2022/loomui-ng-ui-utils.mjs.map +1 -0
  162. package/fesm2022/loomui-ng-ui.mjs +4 -0
  163. package/fesm2022/loomui-ng-ui.mjs.map +1 -0
  164. package/field/README.md +43 -0
  165. package/hover-card/README.md +31 -0
  166. package/icon/README.md +42 -0
  167. package/input/README.md +26 -0
  168. package/input-group/README.md +40 -0
  169. package/input-otp/README.md +35 -0
  170. package/item/README.md +33 -0
  171. package/kbd/README.md +21 -0
  172. package/label/README.md +24 -0
  173. package/marker/README.md +24 -0
  174. package/menubar/README.md +40 -0
  175. package/message/README.md +32 -0
  176. package/message-scroller/README.md +40 -0
  177. package/native-select/README.md +26 -0
  178. package/navigation-menu/README.md +39 -0
  179. package/package.json +325 -3
  180. package/pagination/README.md +37 -0
  181. package/popover/README.md +37 -0
  182. package/progress/README.md +25 -0
  183. package/questionnaire/README.md +52 -0
  184. package/radio-group/README.md +33 -0
  185. package/resizable/README.md +37 -0
  186. package/scroll-area/README.md +25 -0
  187. package/select/README.md +45 -0
  188. package/separator/README.md +28 -0
  189. package/sheet/README.md +38 -0
  190. package/sidebar/README.md +60 -0
  191. package/skeleton/README.md +21 -0
  192. package/slider/README.md +29 -0
  193. package/spinner/README.md +15 -0
  194. package/styles/loomui.css +330 -0
  195. package/switch/README.md +29 -0
  196. package/table/README.md +31 -0
  197. package/tabs/README.md +42 -0
  198. package/textarea/README.md +28 -0
  199. package/toast/README.md +27 -0
  200. package/toggle/README.md +27 -0
  201. package/toggle-group/README.md +37 -0
  202. package/tooltip/README.md +31 -0
  203. package/types/loomui-ng-ui-accordion.d.ts +141 -0
  204. package/types/loomui-ng-ui-alert-dialog.d.ts +175 -0
  205. package/types/loomui-ng-ui-alert.d.ts +77 -0
  206. package/types/loomui-ng-ui-aspect-ratio.d.ts +31 -0
  207. package/types/loomui-ng-ui-attachment.d.ts +192 -0
  208. package/types/loomui-ng-ui-avatar.d.ts +147 -0
  209. package/types/loomui-ng-ui-badge.d.ts +32 -0
  210. package/types/loomui-ng-ui-breadcrumb.d.ts +118 -0
  211. package/types/loomui-ng-ui-bubble.d.ts +100 -0
  212. package/types/loomui-ng-ui-button-group.d.ts +51 -0
  213. package/types/loomui-ng-ui-button.d.ts +57 -0
  214. package/types/loomui-ng-ui-calendar.d.ts +171 -0
  215. package/types/loomui-ng-ui-card.d.ts +123 -0
  216. package/types/loomui-ng-ui-carousel.d.ts +140 -0
  217. package/types/loomui-ng-ui-chart.d.ts +95 -0
  218. package/types/loomui-ng-ui-checkbox.d.ts +62 -0
  219. package/types/loomui-ng-ui-collapsible.d.ts +74 -0
  220. package/types/loomui-ng-ui-combobox.d.ts +229 -0
  221. package/types/loomui-ng-ui-command.d.ts +231 -0
  222. package/types/loomui-ng-ui-context-menu.d.ts +288 -0
  223. package/types/loomui-ng-ui-data-table.d.ts +111 -0
  224. package/types/loomui-ng-ui-date-picker.d.ts +63 -0
  225. package/types/loomui-ng-ui-dialog.d.ts +127 -0
  226. package/types/loomui-ng-ui-direction.d.ts +42 -0
  227. package/types/loomui-ng-ui-drawer.d.ts +149 -0
  228. package/types/loomui-ng-ui-dropdown-menu.d.ts +258 -0
  229. package/types/loomui-ng-ui-empty.d.ts +109 -0
  230. package/types/loomui-ng-ui-field.d.ts +169 -0
  231. package/types/loomui-ng-ui-hover-card.d.ts +62 -0
  232. package/types/loomui-ng-ui-icon.d.ts +156 -0
  233. package/types/loomui-ng-ui-input-group.d.ts +130 -0
  234. package/types/loomui-ng-ui-input-otp.d.ts +149 -0
  235. package/types/loomui-ng-ui-input.d.ts +89 -0
  236. package/types/loomui-ng-ui-item.d.ts +157 -0
  237. package/types/loomui-ng-ui-kbd.d.ts +36 -0
  238. package/types/loomui-ng-ui-label.d.ts +19 -0
  239. package/types/loomui-ng-ui-marker.d.ts +61 -0
  240. package/types/loomui-ng-ui-menubar.d.ts +321 -0
  241. package/types/loomui-ng-ui-message-scroller.d.ts +138 -0
  242. package/types/loomui-ng-ui-message.d.ts +109 -0
  243. package/types/loomui-ng-ui-native-select.d.ts +84 -0
  244. package/types/loomui-ng-ui-navigation-menu.d.ts +160 -0
  245. package/types/loomui-ng-ui-pagination.d.ts +130 -0
  246. package/types/loomui-ng-ui-popover.d.ts +90 -0
  247. package/types/loomui-ng-ui-progress.d.ts +39 -0
  248. package/types/loomui-ng-ui-questionnaire.d.ts +274 -0
  249. package/types/loomui-ng-ui-radio-group.d.ts +109 -0
  250. package/types/loomui-ng-ui-resizable.d.ts +121 -0
  251. package/types/loomui-ng-ui-scroll-area.d.ts +44 -0
  252. package/types/loomui-ng-ui-select.d.ts +204 -0
  253. package/types/loomui-ng-ui-separator.d.ts +35 -0
  254. package/types/loomui-ng-ui-sheet.d.ts +124 -0
  255. package/types/loomui-ng-ui-sidebar.d.ts +485 -0
  256. package/types/loomui-ng-ui-skeleton.d.ts +20 -0
  257. package/types/loomui-ng-ui-slider.d.ts +103 -0
  258. package/types/loomui-ng-ui-spinner.d.ts +19 -0
  259. package/types/loomui-ng-ui-switch.d.ts +56 -0
  260. package/types/loomui-ng-ui-table.d.ts +148 -0
  261. package/types/loomui-ng-ui-tabs.d.ts +148 -0
  262. package/types/loomui-ng-ui-textarea.d.ts +52 -0
  263. package/types/loomui-ng-ui-toast.d.ts +97 -0
  264. package/types/loomui-ng-ui-toggle-group.d.ts +138 -0
  265. package/types/loomui-ng-ui-toggle.d.ts +63 -0
  266. package/types/loomui-ng-ui-tooltip.d.ts +63 -0
  267. package/types/loomui-ng-ui-typography.d.ts +42 -0
  268. package/types/loomui-ng-ui-utils.d.ts +392 -0
  269. package/types/loomui-ng-ui.d.ts +5 -0
  270. package/typography/README.md +29 -0
@@ -0,0 +1,57 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "@loomui-ng/ui/utils";
3
+ import { VariantProps } from "class-variance-authority";
4
+ /**
5
+ * <button uiButton variant="outline" size="sm">…</button>
6
+ * <a uiButton href="/">…</a>
7
+ *
8
+ * Directive (not a component) so the native element, its semantics and keyboard behaviour are kept.
9
+ * Consumer classes passed via `class` are merged with tailwind-merge; because the whole class
10
+ * attribute is owned by this directive, avoid `[class.foo]` bindings on the same element.
11
+ */
12
+ export declare class UiButton {
13
+ /** Reflected as the `disabled` attribute so it also works on the custom element. */
14
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
15
+ readonly variant: import("@angular/core").InputSignal<NonNullable<"default" | "outline" | "secondary" | "ghost" | "destructive" | "link" | null | undefined>>;
16
+ readonly size: import("@angular/core").InputSignal<NonNullable<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>>;
17
+ readonly userClass: import("@angular/core").InputSignal<string>;
18
+ protected readonly classes: import("@angular/core").Signal<string>;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiButton, never>;
20
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiButton, "button[uiButton], a[uiButton], ui-button", ["uiButton"], {
21
+ "disabled": {
22
+ "alias": "disabled";
23
+ "required": false;
24
+ "isSignal": true;
25
+ };
26
+ "variant": {
27
+ "alias": "variant";
28
+ "required": false;
29
+ "isSignal": true;
30
+ };
31
+ "size": {
32
+ "alias": "size";
33
+ "required": false;
34
+ "isSignal": true;
35
+ };
36
+ "userClass": {
37
+ "alias": "class";
38
+ "required": false;
39
+ "isSignal": true;
40
+ };
41
+ }, {}, never, never, true, [{
42
+ directive: typeof i1.UiElementHost;
43
+ inputs: {};
44
+ outputs: {};
45
+ }]>;
46
+ }
47
+ /**
48
+ * Class strings copied from the live shadcn Button (radix docs page, base-nova style),
49
+ * see docs/behavior-specs/button.md. Physical pl-/pr- from the source are converted to
50
+ * logical ps-/pe- for RTL (known deviation).
51
+ */
52
+ export declare const buttonVariants: (props?: ({
53
+ variant?: "default" | "outline" | "secondary" | "ghost" | "destructive" | "link" | null | undefined;
54
+ size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
55
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
56
+ type ButtonVariants = VariantProps<typeof buttonVariants>;
57
+ export type { ButtonVariants };
@@ -0,0 +1,171 @@
1
+ import { Directionality } from "@angular/cdk/bidi";
2
+ import { ControlValueAccessor } from "@angular/forms";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@loomui-ng/ui/utils";
5
+ export interface DateRange {
6
+ from?: Date;
7
+ to?: Date;
8
+ }
9
+ export type CalendarSelection = Date | Date[] | DateRange | undefined;
10
+ interface DayCell {
11
+ date: Date;
12
+ key: string;
13
+ outside: boolean;
14
+ today: boolean;
15
+ disabled: boolean;
16
+ selected: boolean;
17
+ rangeStart: boolean;
18
+ rangeMiddle: boolean;
19
+ rangeEnd: boolean;
20
+ month: string;
21
+ }
22
+ /**
23
+ * <div uiCalendar mode="single" [(selected)]="date"></div>
24
+ * Observed markup (react-day-picker v9): .rdp-root > months > nav + month > caption + table[role=grid] > thead + tbody > tr > td[role=gridcell][data-day]
25
+ * > button. Keyboard (react-day-picker): arrows ±1 day / ±1 week (mirrored in RTL), PageUp/PageDown ±1 month (Shift: year),
26
+ * Home/End start/end of week, Enter/Space select. Own implementation with native Date + Intl (no date library).
27
+ */
28
+ export declare class UiCalendar implements ControlValueAccessor {
29
+ readonly mode: import("@angular/core").InputSignal<"single" | "multiple" | "range">;
30
+ readonly selected: import("@angular/core").ModelSignal<CalendarSelection>;
31
+ readonly month: import("@angular/core").ModelSignal<Date>;
32
+ readonly numberOfMonths: import("@angular/core").InputSignalWithTransform<number, unknown>;
33
+ readonly showOutsideDays: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
34
+ readonly weekStartsOn: import("@angular/core").InputSignalWithTransform<number, unknown>;
35
+ readonly locale: import("@angular/core").InputSignal<string>;
36
+ readonly minDate: import("@angular/core").InputSignal<Date | undefined>;
37
+ readonly maxDate: import("@angular/core").InputSignal<Date | undefined>;
38
+ /** Predicate or list of disabled dates. */
39
+ readonly disabled: import("@angular/core").InputSignal<Date[] | ((d: Date) => boolean) | undefined>;
40
+ /** Day cell (td) uses fixed 6 weeks? Off by default (react-day-picker default). */
41
+ readonly required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
42
+ readonly userClass: import("@angular/core").InputSignal<string>;
43
+ protected readonly dir: Directionality;
44
+ private readonly el;
45
+ protected readonly focused: import("@angular/core").WritableSignal<string | null>;
46
+ private onChange;
47
+ private onTouched;
48
+ protected readonly classes: import("@angular/core").Signal<string>;
49
+ protected readonly monthsClass = "relative flex flex-col gap-4 md:flex-row";
50
+ protected readonly navClass = "absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1";
51
+ protected readonly navButtonClass = "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50 gap-1.5 has-data-[icon=inline-end]:pe-2 has-data-[icon=inline-start]:ps-2 size-(--cell-size) p-0 select-none aria-disabled:opacity-50";
52
+ protected readonly monthClass = "flex w-full flex-col gap-4";
53
+ protected readonly captionClass = "flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)";
54
+ protected readonly captionLabelClass = "font-medium select-none text-sm";
55
+ protected readonly gridClass = "w-full border-collapse";
56
+ protected readonly weekdaysClass = "flex";
57
+ protected readonly weekdayClass = "flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none";
58
+ protected readonly weekClass = "mt-2 flex w-full";
59
+ protected readonly dayButtonClass = "group/button shrink-0 items-center justify-center rounded-lg border-transparent bg-clip-padding text-sm whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50 relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-e-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-s-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70";
60
+ private readonly monthFmt;
61
+ private readonly dayFmt;
62
+ protected readonly weekdays: import("@angular/core").Signal<{
63
+ short: string;
64
+ long: string;
65
+ }[]>;
66
+ private isDisabled;
67
+ private isSelected;
68
+ protected readonly months: import("@angular/core").Signal<{
69
+ key: string;
70
+ label: string;
71
+ weeks: DayCell[][];
72
+ }[]>;
73
+ protected readonly tabKey: import("@angular/core").Signal<string>;
74
+ protected readonly prevDisabled: import("@angular/core").Signal<boolean>;
75
+ protected readonly nextDisabled: import("@angular/core").Signal<boolean>;
76
+ protected dayLabel(d: Date): string;
77
+ protected cellClass(d: DayCell): string;
78
+ protected go(delta: number): void;
79
+ protected pick(d: DayCell): void;
80
+ protected onKeydown(e: KeyboardEvent, d: DayCell): void;
81
+ private focusDate;
82
+ writeValue(v: CalendarSelection): void;
83
+ registerOnChange(fn: (v: CalendarSelection) => void): void;
84
+ registerOnTouched(fn: () => void): void;
85
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCalendar, never>;
86
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiCalendar, "div[uiCalendar], ui-calendar", never, {
87
+ "mode": {
88
+ "alias": "mode";
89
+ "required": false;
90
+ "isSignal": true;
91
+ };
92
+ "selected": {
93
+ "alias": "selected";
94
+ "required": false;
95
+ "isSignal": true;
96
+ };
97
+ "month": {
98
+ "alias": "month";
99
+ "required": false;
100
+ "isSignal": true;
101
+ };
102
+ "numberOfMonths": {
103
+ "alias": "numberOfMonths";
104
+ "required": false;
105
+ "isSignal": true;
106
+ };
107
+ "showOutsideDays": {
108
+ "alias": "showOutsideDays";
109
+ "required": false;
110
+ "isSignal": true;
111
+ };
112
+ "weekStartsOn": {
113
+ "alias": "weekStartsOn";
114
+ "required": false;
115
+ "isSignal": true;
116
+ };
117
+ "locale": {
118
+ "alias": "locale";
119
+ "required": false;
120
+ "isSignal": true;
121
+ };
122
+ "minDate": {
123
+ "alias": "minDate";
124
+ "required": false;
125
+ "isSignal": true;
126
+ };
127
+ "maxDate": {
128
+ "alias": "maxDate";
129
+ "required": false;
130
+ "isSignal": true;
131
+ };
132
+ "disabled": {
133
+ "alias": "disabled";
134
+ "required": false;
135
+ "isSignal": true;
136
+ };
137
+ "required": {
138
+ "alias": "required";
139
+ "required": false;
140
+ "isSignal": true;
141
+ };
142
+ "userClass": {
143
+ "alias": "class";
144
+ "required": false;
145
+ "isSignal": true;
146
+ };
147
+ }, {
148
+ "selected": "selectedChange";
149
+ "month": "monthChange";
150
+ }, never, never, true, [{
151
+ directive: typeof i1.UiElementHost;
152
+ inputs: {};
153
+ outputs: {};
154
+ }]>;
155
+ }
156
+ export declare const UI_CALENDAR: readonly [typeof UiCalendar];
157
+ export declare const calendarCalendarClass = "w-fit group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent rtl:**:[.rdp-button\\_next>svg]:rotate-180 rtl:**:[.rdp-button\\_previous>svg]:rotate-180";
158
+ export declare const calendarMonthsClass = "relative flex flex-col gap-4 md:flex-row";
159
+ export declare const calendarNavClass = "absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1";
160
+ export declare const calendarNavButtonClass = "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50 gap-1.5 has-data-[icon=inline-end]:pe-2 has-data-[icon=inline-start]:ps-2 size-(--cell-size) p-0 select-none aria-disabled:opacity-50";
161
+ export declare const calendarMonthClass = "flex w-full flex-col gap-4";
162
+ export declare const calendarCaptionClass = "flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)";
163
+ export declare const calendarCaptionLabelClass = "font-medium select-none text-sm";
164
+ export declare const calendarGridClass = "w-full border-collapse";
165
+ export declare const calendarWeekdaysClass = "flex";
166
+ export declare const calendarWeekdayClass = "flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none";
167
+ export declare const calendarWeekClass = "mt-2 flex w-full";
168
+ /** Day cell (td) classes by state, as observed. */
169
+ export declare const calendarDayCellClass: Record<string, string>;
170
+ /** Day button: one string for every state; selection/range/today are driven by data-* attributes inside it. */
171
+ export declare const calendarDayButtonClass = "group/button shrink-0 items-center justify-center rounded-lg border-transparent bg-clip-padding text-sm whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50 relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-e-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-s-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70";
@@ -0,0 +1,123 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "@loomui-ng/ui/utils";
3
+ /** <div uiCard size="sm"> … </div> */
4
+ export declare class UiCard {
5
+ readonly size: import("@angular/core").InputSignal<"default" | "sm">;
6
+ readonly userClass: import("@angular/core").InputSignal<string>;
7
+ protected readonly classes: import("@angular/core").Signal<string>;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCard, never>;
9
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiCard, "[uiCard], ui-card", never, {
10
+ "size": {
11
+ "alias": "size";
12
+ "required": false;
13
+ "isSignal": true;
14
+ };
15
+ "userClass": {
16
+ "alias": "class";
17
+ "required": false;
18
+ "isSignal": true;
19
+ };
20
+ }, {}, never, never, true, [{
21
+ directive: typeof i1.UiElementHost;
22
+ inputs: {};
23
+ outputs: {};
24
+ }]>;
25
+ }
26
+ export declare class UiCardHeader {
27
+ readonly userClass: import("@angular/core").InputSignal<string>;
28
+ protected readonly classes: import("@angular/core").Signal<string>;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCardHeader, never>;
30
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiCardHeader, "[uiCardHeader], ui-card-header", never, {
31
+ "userClass": {
32
+ "alias": "class";
33
+ "required": false;
34
+ "isSignal": true;
35
+ };
36
+ }, {}, never, never, true, [{
37
+ directive: typeof i1.UiElementHost;
38
+ inputs: {};
39
+ outputs: {};
40
+ }]>;
41
+ }
42
+ export declare class UiCardTitle {
43
+ readonly userClass: import("@angular/core").InputSignal<string>;
44
+ protected readonly classes: import("@angular/core").Signal<string>;
45
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCardTitle, never>;
46
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiCardTitle, "[uiCardTitle], ui-card-title", never, {
47
+ "userClass": {
48
+ "alias": "class";
49
+ "required": false;
50
+ "isSignal": true;
51
+ };
52
+ }, {}, never, never, true, [{
53
+ directive: typeof i1.UiElementHost;
54
+ inputs: {};
55
+ outputs: {};
56
+ }]>;
57
+ }
58
+ export declare class UiCardDescription {
59
+ readonly userClass: import("@angular/core").InputSignal<string>;
60
+ protected readonly classes: import("@angular/core").Signal<string>;
61
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCardDescription, never>;
62
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiCardDescription, "[uiCardDescription], ui-card-description", never, {
63
+ "userClass": {
64
+ "alias": "class";
65
+ "required": false;
66
+ "isSignal": true;
67
+ };
68
+ }, {}, never, never, true, [{
69
+ directive: typeof i1.UiElementHost;
70
+ inputs: {};
71
+ outputs: {};
72
+ }]>;
73
+ }
74
+ /** Logical placement: observed `col-start-2 … justify-self-end` already mirrors in RTL. */
75
+ export declare class UiCardAction {
76
+ readonly userClass: import("@angular/core").InputSignal<string>;
77
+ protected readonly classes: import("@angular/core").Signal<string>;
78
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCardAction, never>;
79
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiCardAction, "[uiCardAction], ui-card-action", never, {
80
+ "userClass": {
81
+ "alias": "class";
82
+ "required": false;
83
+ "isSignal": true;
84
+ };
85
+ }, {}, never, never, true, [{
86
+ directive: typeof i1.UiElementHost;
87
+ inputs: {};
88
+ outputs: {};
89
+ }]>;
90
+ }
91
+ export declare class UiCardContent {
92
+ readonly userClass: import("@angular/core").InputSignal<string>;
93
+ protected readonly classes: import("@angular/core").Signal<string>;
94
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCardContent, never>;
95
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiCardContent, "[uiCardContent], ui-card-content", never, {
96
+ "userClass": {
97
+ "alias": "class";
98
+ "required": false;
99
+ "isSignal": true;
100
+ };
101
+ }, {}, never, never, true, [{
102
+ directive: typeof i1.UiElementHost;
103
+ inputs: {};
104
+ outputs: {};
105
+ }]>;
106
+ }
107
+ export declare class UiCardFooter {
108
+ readonly userClass: import("@angular/core").InputSignal<string>;
109
+ protected readonly classes: import("@angular/core").Signal<string>;
110
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCardFooter, never>;
111
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiCardFooter, "[uiCardFooter], ui-card-footer", never, {
112
+ "userClass": {
113
+ "alias": "class";
114
+ "required": false;
115
+ "isSignal": true;
116
+ };
117
+ }, {}, never, never, true, [{
118
+ directive: typeof i1.UiElementHost;
119
+ inputs: {};
120
+ outputs: {};
121
+ }]>;
122
+ }
123
+ export declare const UI_CARD: readonly [typeof UiCard, typeof UiCardHeader, typeof UiCardTitle, typeof UiCardDescription, typeof UiCardAction, typeof UiCardContent, typeof UiCardFooter];
@@ -0,0 +1,140 @@
1
+ import { Directionality } from "@angular/cdk/bidi";
2
+ import { EmblaCarouselType } from "embla-carousel";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@loomui-ng/ui/utils";
5
+ /**
6
+ * <div uiCarousel [opts]="{ loop: true }" orientation="horizontal">
7
+ * <div uiCarouselContent>
8
+ * <div uiCarouselItem>…</div>
9
+ * </div>
10
+ * <button uiCarouselPrevious></button>
11
+ * <button uiCarouselNext></button>
12
+ * </div>
13
+ *
14
+ * Observed (shadcn/Radix variant): root role="region" aria-roledescription="carousel"; items role="group"
15
+ * aria-roledescription="slide"; prev/next are outline icon-sm buttons positioned outside the viewport, disabled at the ends.
16
+ * Behavior is Embla's (drag/swipe/inertia); ArrowLeft/ArrowRight on the focused carousel scroll (mirrored in RTL), as in
17
+ * shadcn's `handleKeyDown`. UNKNOWN: slide-change announcements (shadcn adds no live region).
18
+ */
19
+ export declare class UiCarousel {
20
+ protected readonly dir: Directionality;
21
+ private readonly el;
22
+ readonly opts: import("@angular/core").InputSignal<Record<string, any>>;
23
+ readonly plugins: import("@angular/core").InputSignal<any[]>;
24
+ readonly orientation: import("@angular/core").InputSignal<"horizontal" | "vertical">;
25
+ readonly userClass: import("@angular/core").InputSignal<string>;
26
+ /** Emits the Embla instance once initialised (for plugins/autoplay control). */
27
+ readonly ready: import("@angular/core").OutputEmitterRef<EmblaCarouselType>;
28
+ readonly api: import("@angular/core").WritableSignal<EmblaCarouselType | null>;
29
+ readonly canPrev: import("@angular/core").WritableSignal<boolean>;
30
+ readonly canNext: import("@angular/core").WritableSignal<boolean>;
31
+ readonly selectedIndex: import("@angular/core").WritableSignal<number>;
32
+ protected readonly classes: import("@angular/core").Signal<string>;
33
+ constructor();
34
+ private init;
35
+ scrollPrev(): void;
36
+ scrollNext(): void;
37
+ scrollTo(i: number): void;
38
+ protected onKey(e: KeyboardEvent): void;
39
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCarousel, never>;
40
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiCarousel, "div[uiCarousel], ui-carousel", ["uiCarousel"], {
41
+ "opts": {
42
+ "alias": "opts";
43
+ "required": false;
44
+ "isSignal": true;
45
+ };
46
+ "plugins": {
47
+ "alias": "plugins";
48
+ "required": false;
49
+ "isSignal": true;
50
+ };
51
+ "orientation": {
52
+ "alias": "orientation";
53
+ "required": false;
54
+ "isSignal": true;
55
+ };
56
+ "userClass": {
57
+ "alias": "class";
58
+ "required": false;
59
+ "isSignal": true;
60
+ };
61
+ }, {
62
+ "ready": "ready";
63
+ }, never, ["*"], true, [{
64
+ directive: typeof i1.UiElementHost;
65
+ inputs: {};
66
+ outputs: {};
67
+ }]>;
68
+ }
69
+ /** Embla viewport (overflow-hidden) wrapping the slide track. */
70
+ export declare class UiCarouselContent {
71
+ private readonly root;
72
+ readonly userClass: import("@angular/core").InputSignal<string>;
73
+ protected readonly trackClass: import("@angular/core").Signal<string>;
74
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCarouselContent, never>;
75
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiCarouselContent, "div[uiCarouselContent], ui-carousel-content", never, {
76
+ "userClass": {
77
+ "alias": "class";
78
+ "required": false;
79
+ "isSignal": true;
80
+ };
81
+ }, {}, never, ["*"], true, [{
82
+ directive: typeof i1.UiElementHost;
83
+ inputs: {};
84
+ outputs: {};
85
+ }]>;
86
+ }
87
+ export declare class UiCarouselItem {
88
+ private readonly root;
89
+ readonly userClass: import("@angular/core").InputSignal<string>;
90
+ protected readonly classes: import("@angular/core").Signal<string>;
91
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCarouselItem, never>;
92
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiCarouselItem, "div[uiCarouselItem], ui-carousel-item", never, {
93
+ "userClass": {
94
+ "alias": "class";
95
+ "required": false;
96
+ "isSignal": true;
97
+ };
98
+ }, {}, never, never, true, [{
99
+ directive: typeof i1.UiElementHost;
100
+ inputs: {};
101
+ outputs: {};
102
+ }]>;
103
+ }
104
+ export declare class UiCarouselPrevious {
105
+ protected readonly root: UiCarousel;
106
+ readonly userClass: import("@angular/core").InputSignal<string>;
107
+ protected readonly icon: import("@angular/core").Signal<"" | "rtl:rotate-180">;
108
+ protected readonly classes: import("@angular/core").Signal<string>;
109
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCarouselPrevious, never>;
110
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiCarouselPrevious, "button[uiCarouselPrevious], ui-carousel-previous", never, {
111
+ "userClass": {
112
+ "alias": "class";
113
+ "required": false;
114
+ "isSignal": true;
115
+ };
116
+ }, {}, never, never, true, [{
117
+ directive: typeof i1.UiElementHost;
118
+ inputs: {};
119
+ outputs: {};
120
+ }]>;
121
+ }
122
+ export declare class UiCarouselNext {
123
+ protected readonly root: UiCarousel;
124
+ readonly userClass: import("@angular/core").InputSignal<string>;
125
+ protected readonly icon: import("@angular/core").Signal<"" | "rtl:rotate-180">;
126
+ protected readonly classes: import("@angular/core").Signal<string>;
127
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCarouselNext, never>;
128
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiCarouselNext, "button[uiCarouselNext], ui-carousel-next", never, {
129
+ "userClass": {
130
+ "alias": "class";
131
+ "required": false;
132
+ "isSignal": true;
133
+ };
134
+ }, {}, never, never, true, [{
135
+ directive: typeof i1.UiElementHost;
136
+ inputs: {};
137
+ outputs: {};
138
+ }]>;
139
+ }
140
+ export declare const UI_CAROUSEL: readonly [typeof UiCarousel, typeof UiCarouselContent, typeof UiCarouselItem, typeof UiCarouselPrevious, typeof UiCarouselNext];
@@ -0,0 +1,95 @@
1
+ import * as i0 from "@angular/core";
2
+ export interface ChartSeriesConfig {
3
+ label: string;
4
+ /** CSS color, e.g. 'var(--chart-1)'. Exposed as --color-<key> on the container (as shadcn's ChartContainer does). */
5
+ color: string;
6
+ }
7
+ export type ChartConfig = Record<string, ChartSeriesConfig>;
8
+ /**
9
+ * shadcn's Chart wraps Recharts. This implementation uses Chart.js and keeps shadcn's contract:
10
+ * a `config` maps series keys to label + color; the container exposes `--color-<key>` CSS variables; tooltip and legend
11
+ * follow shadcn styling (card-like tooltip, small legend swatches). Data rows are plain objects.
12
+ *
13
+ * <ui-chart type="bar" [data]="rows" xKey="month" [config]="config" class="h-64 w-full" />
14
+ * For pie/doughnut, rows are categories: xKey = category field, valueKey = number field, config keyed by category value.
15
+ * Deviation: Recharts-specific components (ChartTooltipContent props, <Bar radius>) have no 1:1 equivalent.
16
+ */
17
+ export declare class UiChart {
18
+ private static n;
19
+ protected readonly chartId: string;
20
+ private readonly host;
21
+ private readonly canvas;
22
+ readonly type: import("@angular/core").InputSignal<keyof import("chart.js").ChartTypeRegistry>;
23
+ readonly data: import("@angular/core").InputSignal<Record<string, unknown>[]>;
24
+ readonly xKey: import("@angular/core").InputSignal<string>;
25
+ readonly valueKey: import("@angular/core").InputSignal<string>;
26
+ readonly config: import("@angular/core").InputSignal<ChartConfig>;
27
+ readonly options: import("@angular/core").InputSignal<Record<string, any>>;
28
+ readonly showLegend: import("@angular/core").InputSignal<boolean>;
29
+ readonly label: import("@angular/core").InputSignal<string>;
30
+ readonly userClass: import("@angular/core").InputSignal<string>;
31
+ private readonly destroyRef;
32
+ private chart;
33
+ private ready;
34
+ protected readonly classes: import("@angular/core").Signal<string>;
35
+ protected readonly cssVars: import("@angular/core").Signal<Record<string, string>>;
36
+ private readonly circular;
37
+ protected readonly legend: import("@angular/core").Signal<{
38
+ key: string;
39
+ label: string;
40
+ color: string;
41
+ }[]>;
42
+ constructor();
43
+ /** Resolves `var(--x)` to the computed color so Chart.js (canvas) can paint it, honoring .dark. */
44
+ private resolve;
45
+ private render;
46
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiChart, never>;
47
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiChart, "ui-chart", never, {
48
+ "type": {
49
+ "alias": "type";
50
+ "required": false;
51
+ "isSignal": true;
52
+ };
53
+ "data": {
54
+ "alias": "data";
55
+ "required": true;
56
+ "isSignal": true;
57
+ };
58
+ "xKey": {
59
+ "alias": "xKey";
60
+ "required": true;
61
+ "isSignal": true;
62
+ };
63
+ "valueKey": {
64
+ "alias": "valueKey";
65
+ "required": false;
66
+ "isSignal": true;
67
+ };
68
+ "config": {
69
+ "alias": "config";
70
+ "required": true;
71
+ "isSignal": true;
72
+ };
73
+ "options": {
74
+ "alias": "options";
75
+ "required": false;
76
+ "isSignal": true;
77
+ };
78
+ "showLegend": {
79
+ "alias": "showLegend";
80
+ "required": false;
81
+ "isSignal": true;
82
+ };
83
+ "label": {
84
+ "alias": "label";
85
+ "required": false;
86
+ "isSignal": true;
87
+ };
88
+ "userClass": {
89
+ "alias": "class";
90
+ "required": false;
91
+ "isSignal": true;
92
+ };
93
+ }, {}, never, never, true, never>;
94
+ }
95
+ export declare const UI_CHART: readonly [typeof UiChart];
@@ -0,0 +1,62 @@
1
+ import { ControlValueAccessor } from "@angular/forms";
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@loomui-ng/ui/utils";
4
+ /**
5
+ * <button uiCheckbox [(checked)]="x"></button>
6
+ *
7
+ * Works with: [(checked)] two-way binding, ngModel / reactive forms (ControlValueAccessor),
8
+ * and signal forms (`checked` model + `disabled`/`invalid` inputs match FormCheckboxControl).
9
+ */
10
+ export declare class UiCheckbox implements ControlValueAccessor {
11
+ readonly checked: import("@angular/core").ModelSignal<boolean>;
12
+ readonly indeterminate: import("@angular/core").ModelSignal<boolean>;
13
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
14
+ readonly invalid: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
15
+ readonly userClass: import("@angular/core").InputSignal<string>;
16
+ private readonly cvaDisabled;
17
+ protected readonly isDisabled: import("@angular/core").Signal<boolean>;
18
+ protected readonly state: import("@angular/core").Signal<"indeterminate" | "checked" | "unchecked">;
19
+ protected readonly classes: import("@angular/core").Signal<string>;
20
+ private onChange;
21
+ protected onTouched: () => void;
22
+ protected toggle(): void;
23
+ writeValue(v: boolean | null): void;
24
+ registerOnChange(fn: (v: boolean) => void): void;
25
+ registerOnTouched(fn: () => void): void;
26
+ setDisabledState(d: boolean): void;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCheckbox, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiCheckbox, "button[uiCheckbox], ui-checkbox", never, {
29
+ "checked": {
30
+ "alias": "checked";
31
+ "required": false;
32
+ "isSignal": true;
33
+ };
34
+ "indeterminate": {
35
+ "alias": "indeterminate";
36
+ "required": false;
37
+ "isSignal": true;
38
+ };
39
+ "disabled": {
40
+ "alias": "disabled";
41
+ "required": false;
42
+ "isSignal": true;
43
+ };
44
+ "invalid": {
45
+ "alias": "invalid";
46
+ "required": false;
47
+ "isSignal": true;
48
+ };
49
+ "userClass": {
50
+ "alias": "class";
51
+ "required": false;
52
+ "isSignal": true;
53
+ };
54
+ }, {
55
+ "checked": "checkedChange";
56
+ "indeterminate": "indeterminateChange";
57
+ }, never, never, true, [{
58
+ directive: typeof i1.UiElementHost;
59
+ inputs: {};
60
+ outputs: {};
61
+ }]>;
62
+ }