@ojiepermana/angular 22.1.11 → 22.1.12

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 (340) hide show
  1. package/README.md +32 -26
  2. package/chart/README.md +272 -0
  3. package/component/README.md +89 -0
  4. package/component/accordion/README.md +195 -0
  5. package/component/alert/README.md +184 -0
  6. package/component/alert-dialog/README.md +255 -0
  7. package/component/aspect-ratio/README.md +116 -0
  8. package/component/avatar/README.md +182 -0
  9. package/component/badge/README.md +143 -0
  10. package/component/breadcrumb/README.md +223 -0
  11. package/component/button/README.md +141 -0
  12. package/component/button-group/README.md +214 -0
  13. package/component/calendar/README.md +137 -0
  14. package/component/card/README.md +232 -0
  15. package/component/carousel/README.md +276 -0
  16. package/component/checkbox/README.md +153 -0
  17. package/component/collapsible/README.md +216 -0
  18. package/component/combobox/README.md +202 -0
  19. package/component/command/README.md +287 -0
  20. package/component/composer/README.md +241 -0
  21. package/component/context-menu/README.md +268 -0
  22. package/component/date-picker/README.md +202 -0
  23. package/component/dialog/README.md +276 -0
  24. package/component/drawer/README.md +147 -0
  25. package/component/dropdown-menu/README.md +336 -0
  26. package/component/editor/README.md +152 -0
  27. package/component/empty/README.md +193 -0
  28. package/component/form/README.md +216 -0
  29. package/component/hover-card/README.md +150 -0
  30. package/component/icon/README.md +25 -0
  31. package/component/input/README.md +160 -0
  32. package/component/input-group/README.md +245 -0
  33. package/component/input-otp/README.md +331 -0
  34. package/component/item/README.md +254 -0
  35. package/component/kanban/README.md +81 -0
  36. package/component/kbd/README.md +141 -0
  37. package/component/label/README.md +137 -0
  38. package/component/menubar/README.md +270 -0
  39. package/component/native-select/README.md +176 -0
  40. package/component/navigation-menu/README.md +165 -0
  41. package/component/pagination/README.md +151 -0
  42. package/component/pillbox/README.md +68 -0
  43. package/component/popover/README.md +54 -0
  44. package/component/progress/README.md +160 -0
  45. package/component/radio/README.md +212 -0
  46. package/component/resizable/README.md +178 -0
  47. package/component/scroll-area/README.md +150 -0
  48. package/component/select/README.md +228 -0
  49. package/component/separator/README.md +175 -0
  50. package/component/sheet/README.md +190 -0
  51. package/component/skeleton/README.md +158 -0
  52. package/component/slider/README.md +207 -0
  53. package/component/spinner/README.md +160 -0
  54. package/component/switch/README.md +170 -0
  55. package/component/table/README.md +292 -0
  56. package/component/tabs/README.md +220 -0
  57. package/component/textarea/README.md +169 -0
  58. package/component/timeline/README.md +94 -0
  59. package/component/toast/README.md +173 -0
  60. package/component/toggle/README.md +133 -0
  61. package/component/toggle-group/README.md +234 -0
  62. package/component/tooltip/README.md +230 -0
  63. package/fesm2022/ojiepermana-angular-chart-area.mjs +289 -3
  64. package/fesm2022/ojiepermana-angular-chart-bar.mjs +722 -3
  65. package/fesm2022/ojiepermana-angular-chart-core.mjs +1482 -3
  66. package/fesm2022/ojiepermana-angular-chart-line.mjs +294 -3
  67. package/fesm2022/ojiepermana-angular-chart-pie.mjs +291 -3
  68. package/fesm2022/ojiepermana-angular-chart-primitives.mjs +1301 -3
  69. package/fesm2022/ojiepermana-angular-chart-radar.mjs +421 -3
  70. package/fesm2022/ojiepermana-angular-chart-radial.mjs +295 -3
  71. package/fesm2022/ojiepermana-angular-chart-scatter.mjs +306 -3
  72. package/fesm2022/ojiepermana-angular-chart.mjs +12 -3
  73. package/fesm2022/ojiepermana-angular-component-accordion.mjs +267 -3
  74. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +359 -3
  75. package/fesm2022/ojiepermana-angular-component-alert.mjs +101 -3
  76. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +31 -3
  77. package/fesm2022/ojiepermana-angular-component-avatar.mjs +139 -3
  78. package/fesm2022/ojiepermana-angular-component-badge.mjs +57 -3
  79. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +192 -3
  80. package/fesm2022/ojiepermana-angular-component-button-group.mjs +95 -3
  81. package/fesm2022/ojiepermana-angular-component-button.mjs +73 -3
  82. package/fesm2022/ojiepermana-angular-component-calendar.mjs +718 -3
  83. package/fesm2022/ojiepermana-angular-component-card.mjs +167 -3
  84. package/fesm2022/ojiepermana-angular-component-carousel.mjs +326 -3
  85. package/fesm2022/ojiepermana-angular-component-checkbox.mjs +190 -3
  86. package/fesm2022/ojiepermana-angular-component-collapsible.mjs +117 -3
  87. package/fesm2022/ojiepermana-angular-component-combobox.mjs +327 -3
  88. package/fesm2022/ojiepermana-angular-component-command.mjs +351 -3
  89. package/fesm2022/ojiepermana-angular-component-composer.mjs +359 -3
  90. package/fesm2022/ojiepermana-angular-component-context-menu.mjs +158 -3
  91. package/fesm2022/ojiepermana-angular-component-date-picker.mjs +482 -3
  92. package/fesm2022/ojiepermana-angular-component-dialog.mjs +400 -3
  93. package/fesm2022/ojiepermana-angular-component-drawer.mjs +1 -3
  94. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +689 -3
  95. package/fesm2022/ojiepermana-angular-component-editor.mjs +511 -3
  96. package/fesm2022/ojiepermana-angular-component-empty.mjs +134 -3
  97. package/fesm2022/ojiepermana-angular-component-form.mjs +438 -3
  98. package/fesm2022/ojiepermana-angular-component-hover-card.mjs +273 -3
  99. package/fesm2022/ojiepermana-angular-component-icon.mjs +139 -3
  100. package/fesm2022/ojiepermana-angular-component-input-group.mjs +176 -3
  101. package/fesm2022/ojiepermana-angular-component-input-otp.mjs +550 -3
  102. package/fesm2022/ojiepermana-angular-component-input.mjs +52 -3
  103. package/fesm2022/ojiepermana-angular-component-item.mjs +264 -3
  104. package/fesm2022/ojiepermana-angular-component-kanban.mjs +310 -3
  105. package/fesm2022/ojiepermana-angular-component-kbd.mjs +48 -3
  106. package/fesm2022/ojiepermana-angular-component-label.mjs +27 -3
  107. package/fesm2022/ojiepermana-angular-component-menubar.mjs +327 -3
  108. package/fesm2022/ojiepermana-angular-component-native-select.mjs +62 -3
  109. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +378 -3
  110. package/fesm2022/ojiepermana-angular-component-pagination.mjs +238 -3
  111. package/fesm2022/ojiepermana-angular-component-pillbox.mjs +999 -3
  112. package/fesm2022/ojiepermana-angular-component-popover.mjs +201 -3
  113. package/fesm2022/ojiepermana-angular-component-progress.mjs +57 -3
  114. package/fesm2022/ojiepermana-angular-component-radio.mjs +180 -3
  115. package/fesm2022/ojiepermana-angular-component-resizable.mjs +493 -3
  116. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +51 -3
  117. package/fesm2022/ojiepermana-angular-component-segmented-control.mjs +227 -3
  118. package/fesm2022/ojiepermana-angular-component-select.mjs +609 -3
  119. package/fesm2022/ojiepermana-angular-component-separator.mjs +31 -3
  120. package/fesm2022/ojiepermana-angular-component-sheet.mjs +407 -3
  121. package/fesm2022/ojiepermana-angular-component-skeleton.mjs +25 -3
  122. package/fesm2022/ojiepermana-angular-component-slider.mjs +456 -3
  123. package/fesm2022/ojiepermana-angular-component-spinner.mjs +56 -3
  124. package/fesm2022/ojiepermana-angular-component-switch.mjs +145 -3
  125. package/fesm2022/ojiepermana-angular-component-table.mjs +155 -3
  126. package/fesm2022/ojiepermana-angular-component-tabs.mjs +315 -3
  127. package/fesm2022/ojiepermana-angular-component-textarea.mjs +46 -3
  128. package/fesm2022/ojiepermana-angular-component-timeline.mjs +237 -3
  129. package/fesm2022/ojiepermana-angular-component-toast.mjs +241 -3
  130. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +290 -3
  131. package/fesm2022/ojiepermana-angular-component-toggle.mjs +76 -3
  132. package/fesm2022/ojiepermana-angular-component-tooltip.mjs +519 -3
  133. package/fesm2022/ojiepermana-angular-component-utils-core.mjs +310 -3
  134. package/fesm2022/ojiepermana-angular-component-utils-overlay.mjs +62 -3
  135. package/fesm2022/ojiepermana-angular-component-utils-scale.mjs +34 -3
  136. package/fesm2022/ojiepermana-angular-component-utils.mjs +3 -2
  137. package/fesm2022/ojiepermana-angular-component.mjs +4 -4
  138. package/fesm2022/ojiepermana-angular-navigation-core.mjs +21 -3
  139. package/fesm2022/ojiepermana-angular-navigation-icon.mjs +20 -3
  140. package/fesm2022/ojiepermana-angular-navigation-navigation-badge-count.component-CDBxQ8rk.mjs +91 -0
  141. package/fesm2022/ojiepermana-angular-navigation-navigation-dockbar-menu.component-DBQHdvGa.mjs +512 -0
  142. package/fesm2022/ojiepermana-angular-navigation-navigation-entry-grid.component-Cd-jh6tg.mjs +623 -0
  143. package/fesm2022/ojiepermana-angular-navigation-navigation-flyout-menu.component-BCGvhoYj.mjs +404 -0
  144. package/fesm2022/ojiepermana-angular-navigation-navigation-horizontal.component-Dk_03e-6.mjs +466 -0
  145. package/fesm2022/ojiepermana-angular-navigation-ojiepermana-angular-navigation-DNKU6viC.mjs +2642 -0
  146. package/fesm2022/ojiepermana-angular-navigation-service.mjs +725 -3
  147. package/fesm2022/ojiepermana-angular-navigation-types.mjs +65 -4
  148. package/fesm2022/ojiepermana-angular-navigation.mjs +4 -10
  149. package/fesm2022/ojiepermana-angular-sdk.mjs +204 -4
  150. package/fesm2022/ojiepermana-angular-theme-component-settings.mjs +1387 -3
  151. package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +331 -3
  152. package/fesm2022/ojiepermana-angular-theme-layout-types.mjs +45 -4
  153. package/fesm2022/ojiepermana-angular-theme-layout-wrapper.mjs +1044 -3
  154. package/fesm2022/ojiepermana-angular-theme-layout.mjs +729 -3
  155. package/fesm2022/ojiepermana-angular-theme-page-core.mjs +381 -3
  156. package/fesm2022/ojiepermana-angular-theme-page-filter.mjs +267 -3
  157. package/fesm2022/ojiepermana-angular-theme-page-root.mjs +361 -3
  158. package/fesm2022/ojiepermana-angular-theme-page-side.mjs +198 -3
  159. package/fesm2022/ojiepermana-angular-theme-page-slots.mjs +110 -3
  160. package/fesm2022/ojiepermana-angular-theme-page.mjs +7 -2
  161. package/fesm2022/ojiepermana-angular-theme-shell-services.mjs +338 -3
  162. package/fesm2022/ojiepermana-angular-theme-shell-types.mjs +160 -4
  163. package/fesm2022/ojiepermana-angular-theme-shell.mjs +811 -3
  164. package/fesm2022/ojiepermana-angular-theme-styles.mjs +783 -3
  165. package/fesm2022/ojiepermana-angular-theme.mjs +4 -4
  166. package/fesm2022/ojiepermana-angular.mjs +6 -11
  167. package/navigation/README.md +374 -0
  168. package/package.json +81 -20
  169. package/sdk/README.md +212 -0
  170. package/sdk/schematics/collection.json +20 -0
  171. package/sdk/schematics/init/index.js +83 -0
  172. package/sdk/schematics/init/schema.json +19 -0
  173. package/sdk/schematics/ng-add/index.js +147 -0
  174. package/sdk/schematics/ng-add/schema.json +14 -0
  175. package/sdk/schematics/package.json +3 -0
  176. package/sdk/schematics/sdk/index.js +175 -0
  177. package/sdk/schematics/sdk/schema.json +19 -0
  178. package/sdk/sdk.config.example.json +24 -0
  179. package/sdk/src/config/loader.js +43 -0
  180. package/sdk/src/config/schema.js +59 -0
  181. package/sdk/src/emit/client.js +251 -0
  182. package/sdk/src/emit/metadata.js +310 -0
  183. package/sdk/src/emit/models.js +104 -0
  184. package/sdk/src/emit/navigation.js +56 -0
  185. package/sdk/src/emit/operations.js +118 -0
  186. package/sdk/src/emit/public-api.js +54 -0
  187. package/sdk/src/emit/services.js +110 -0
  188. package/sdk/src/engine.js +67 -0
  189. package/sdk/src/layout/per-domain.js +360 -0
  190. package/sdk/src/package.json +3 -0
  191. package/sdk/src/parser/bundle.js +25 -0
  192. package/sdk/src/parser/ir.js +429 -0
  193. package/sdk/src/parser/types.js +7 -0
  194. package/sdk/src/render/template.js +152 -0
  195. package/sdk/src/writer/index.js +286 -0
  196. package/theme/README.md +126 -0
  197. package/theme/component/settings/README.md +135 -0
  198. package/theme/layout/README.md +539 -0
  199. package/theme/page/README.md +453 -0
  200. package/theme/shell/README.md +340 -0
  201. package/theme/styles/README.md +178 -0
  202. package/theme/styles/css/base/components.css +553 -0
  203. package/theme/styles/css/base/index.css +14 -0
  204. package/theme/styles/css/base/package.css +9 -0
  205. package/theme/styles/css/base/prefers-dark.css +86 -0
  206. package/theme/styles/css/base/print.css +62 -0
  207. package/theme/styles/css/base/status.css +38 -0
  208. package/theme/styles/css/base/tailwind.css +165 -0
  209. package/theme/styles/css/base/theme.css +373 -0
  210. package/theme/styles/css/base/tokens.css +361 -0
  211. package/theme/styles/css/color/amber.css +72 -0
  212. package/theme/styles/css/color/blue.css +72 -0
  213. package/theme/styles/css/color/brand.css +38 -0
  214. package/theme/styles/css/color/cyan.css +72 -0
  215. package/theme/styles/css/color/emerald.css +72 -0
  216. package/theme/styles/css/color/fuchsia.css +72 -0
  217. package/theme/styles/css/color/green.css +72 -0
  218. package/theme/styles/css/color/index.css +19 -0
  219. package/theme/styles/css/color/indigo.css +72 -0
  220. package/theme/styles/css/color/lime.css +72 -0
  221. package/theme/styles/css/color/orange.css +72 -0
  222. package/theme/styles/css/color/pink.css +72 -0
  223. package/theme/styles/css/color/purple.css +72 -0
  224. package/theme/styles/css/color/red.css +72 -0
  225. package/theme/styles/css/color/rose.css +72 -0
  226. package/theme/styles/css/color/sky.css +72 -0
  227. package/theme/styles/css/color/teal.css +72 -0
  228. package/theme/styles/css/color/violet.css +72 -0
  229. package/theme/styles/css/color/yellow.css +72 -0
  230. package/theme/styles/css/index.css +18 -0
  231. package/theme/styles/css/neutral/gray.css +63 -0
  232. package/theme/styles/css/neutral/index.css +11 -0
  233. package/theme/styles/css/neutral/mauve.css +63 -0
  234. package/theme/styles/css/neutral/mist.css +63 -0
  235. package/theme/styles/css/neutral/neutral.css +63 -0
  236. package/theme/styles/css/neutral/olive.css +63 -0
  237. package/theme/styles/css/neutral/slate.css +63 -0
  238. package/theme/styles/css/neutral/stone.css +63 -0
  239. package/theme/styles/css/neutral/taupe.css +63 -0
  240. package/theme/styles/css/neutral/zinc.css +63 -0
  241. package/theme/styles/css/radius/index.css +30 -0
  242. package/theme/styles/css/space/index.css +20 -0
  243. package/types/ojiepermana-angular-chart-area.d.ts +76 -1
  244. package/types/ojiepermana-angular-chart-bar.d.ts +201 -1
  245. package/types/ojiepermana-angular-chart-core.d.ts +811 -1
  246. package/types/ojiepermana-angular-chart-line.d.ts +75 -1
  247. package/types/ojiepermana-angular-chart-pie.d.ts +131 -1
  248. package/types/ojiepermana-angular-chart-primitives.d.ts +291 -1
  249. package/types/ojiepermana-angular-chart-radar.d.ts +116 -1
  250. package/types/ojiepermana-angular-chart-radial.d.ts +116 -1
  251. package/types/ojiepermana-angular-chart-scatter.d.ts +125 -1
  252. package/types/ojiepermana-angular-chart.d.ts +2 -1
  253. package/types/ojiepermana-angular-component-accordion.d.ts +85 -1
  254. package/types/ojiepermana-angular-component-alert-dialog.d.ts +140 -1
  255. package/types/ojiepermana-angular-component-alert.d.ts +42 -1
  256. package/types/ojiepermana-angular-component-aspect-ratio.d.ts +12 -1
  257. package/types/ojiepermana-angular-component-avatar.d.ts +56 -1
  258. package/types/ojiepermana-angular-component-badge.d.ts +24 -1
  259. package/types/ojiepermana-angular-component-breadcrumb.d.ts +46 -1
  260. package/types/ojiepermana-angular-component-button-group.d.ts +26 -1
  261. package/types/ojiepermana-angular-component-button.d.ts +27 -1
  262. package/types/ojiepermana-angular-component-calendar.d.ts +111 -1
  263. package/types/ojiepermana-angular-component-card.d.ts +69 -1
  264. package/types/ojiepermana-angular-component-carousel.d.ts +86 -1
  265. package/types/ojiepermana-angular-component-checkbox.d.ts +42 -1
  266. package/types/ojiepermana-angular-component-collapsible.d.ts +42 -1
  267. package/types/ojiepermana-angular-component-combobox.d.ts +60 -1
  268. package/types/ojiepermana-angular-component-command.d.ts +130 -1
  269. package/types/ojiepermana-angular-component-composer.d.ts +90 -1
  270. package/types/ojiepermana-angular-component-context-menu.d.ts +54 -1
  271. package/types/ojiepermana-angular-component-date-picker.d.ts +109 -1
  272. package/types/ojiepermana-angular-component-dialog.d.ts +136 -1
  273. package/types/ojiepermana-angular-component-drawer.d.ts +1 -1
  274. package/types/ojiepermana-angular-component-dropdown-menu.d.ts +248 -1
  275. package/types/ojiepermana-angular-component-editor.d.ts +135 -1
  276. package/types/ojiepermana-angular-component-empty.d.ts +50 -1
  277. package/types/ojiepermana-angular-component-form.d.ts +159 -1
  278. package/types/ojiepermana-angular-component-hover-card.d.ts +75 -1
  279. package/types/ojiepermana-angular-component-icon.d.ts +89 -1
  280. package/types/ojiepermana-angular-component-input-group.d.ts +51 -1
  281. package/types/ojiepermana-angular-component-input-otp.d.ts +155 -1
  282. package/types/ojiepermana-angular-component-input.d.ts +21 -1
  283. package/types/ojiepermana-angular-component-item.d.ts +93 -1
  284. package/types/ojiepermana-angular-component-kanban.d.ts +70 -1
  285. package/types/ojiepermana-angular-component-kbd.d.ts +16 -1
  286. package/types/ojiepermana-angular-component-label.d.ts +11 -1
  287. package/types/ojiepermana-angular-component-menubar.d.ts +93 -1
  288. package/types/ojiepermana-angular-component-native-select.d.ts +26 -1
  289. package/types/ojiepermana-angular-component-navigation-menu.d.ts +104 -1
  290. package/types/ojiepermana-angular-component-pagination.d.ts +33 -1
  291. package/types/ojiepermana-angular-component-pillbox.d.ts +222 -1
  292. package/types/ojiepermana-angular-component-popover.d.ts +66 -1
  293. package/types/ojiepermana-angular-component-progress.d.ts +17 -1
  294. package/types/ojiepermana-angular-component-radio.d.ts +60 -1
  295. package/types/ojiepermana-angular-component-resizable.d.ts +117 -1
  296. package/types/ojiepermana-angular-component-scroll-area.d.ts +19 -1
  297. package/types/ojiepermana-angular-component-segmented-control.d.ts +58 -1
  298. package/types/ojiepermana-angular-component-select.d.ts +122 -1
  299. package/types/ojiepermana-angular-component-separator.d.ts +14 -1
  300. package/types/ojiepermana-angular-component-sheet.d.ts +130 -1
  301. package/types/ojiepermana-angular-component-skeleton.d.ts +10 -1
  302. package/types/ojiepermana-angular-component-slider.d.ts +83 -1
  303. package/types/ojiepermana-angular-component-spinner.d.ts +13 -1
  304. package/types/ojiepermana-angular-component-switch.d.ts +44 -1
  305. package/types/ojiepermana-angular-component-table.d.ts +57 -1
  306. package/types/ojiepermana-angular-component-tabs.d.ts +124 -1
  307. package/types/ojiepermana-angular-component-textarea.d.ts +17 -1
  308. package/types/ojiepermana-angular-component-timeline.d.ts +64 -1
  309. package/types/ojiepermana-angular-component-toast.d.ts +64 -1
  310. package/types/ojiepermana-angular-component-toggle-group.d.ts +90 -1
  311. package/types/ojiepermana-angular-component-toggle.d.ts +25 -1
  312. package/types/ojiepermana-angular-component-tooltip.d.ts +143 -1
  313. package/types/ojiepermana-angular-component-utils-core.d.ts +184 -1
  314. package/types/ojiepermana-angular-component-utils-overlay.d.ts +21 -1
  315. package/types/ojiepermana-angular-component-utils-scale.d.ts +19 -1
  316. package/types/ojiepermana-angular-component-utils.d.ts +2 -1
  317. package/types/ojiepermana-angular-component.d.ts +2 -1
  318. package/types/ojiepermana-angular-navigation-core.d.ts +59 -1
  319. package/types/ojiepermana-angular-navigation-icon.d.ts +12 -1
  320. package/types/ojiepermana-angular-navigation-service.d.ts +116 -1
  321. package/types/ojiepermana-angular-navigation-types.d.ts +144 -1
  322. package/types/ojiepermana-angular-navigation.d.ts +507 -1
  323. package/types/ojiepermana-angular-sdk.d.ts +89 -1
  324. package/types/ojiepermana-angular-theme-component-settings.d.ts +154 -1
  325. package/types/ojiepermana-angular-theme-layout-services.d.ts +147 -1
  326. package/types/ojiepermana-angular-theme-layout-types.d.ts +40 -1
  327. package/types/ojiepermana-angular-theme-layout-wrapper.d.ts +299 -1
  328. package/types/ojiepermana-angular-theme-layout.d.ts +129 -1
  329. package/types/ojiepermana-angular-theme-page-core.d.ts +157 -1
  330. package/types/ojiepermana-angular-theme-page-filter.d.ts +77 -1
  331. package/types/ojiepermana-angular-theme-page-root.d.ts +88 -1
  332. package/types/ojiepermana-angular-theme-page-side.d.ts +50 -1
  333. package/types/ojiepermana-angular-theme-page-slots.d.ts +40 -1
  334. package/types/ojiepermana-angular-theme-page.d.ts +5 -1
  335. package/types/ojiepermana-angular-theme-shell-services.d.ts +193 -1
  336. package/types/ojiepermana-angular-theme-shell-types.d.ts +105 -1
  337. package/types/ojiepermana-angular-theme-shell.d.ts +100 -1
  338. package/types/ojiepermana-angular-theme-styles.d.ts +319 -1
  339. package/types/ojiepermana-angular-theme.d.ts +2 -1
  340. package/types/ojiepermana-angular.d.ts +5 -5
@@ -1,7 +1,138 @@
1
- export * from '@ojiepermana/angular-component/empty';
1
+ import * as i0 from '@angular/core';
2
+ import { input, computed, Component } from '@angular/core';
3
+ import { cn } from '@ojiepermana/angular/component/utils/core';
4
+ import { cva } from 'class-variance-authority';
2
5
 
3
- // Generated by scripts/gen-umbrella-entrypoints.mjs — do not edit by hand.
6
+ const emptyVariants = cva('flex w-full flex-col items-center justify-center gap-6 rounded-xl px-6 py-10 text-center');
7
+ const emptyMediaVariants = cva('flex shrink-0 items-center justify-center', {
8
+ variants: {
9
+ variant: {
10
+ default: '',
11
+ icon: [
12
+ 'size-12 rounded-full border border-border bg-muted/40 text-muted-foreground shadow-sm',
13
+ '[&_svg]:size-6 [&_svg]:shrink-0',
14
+ ].join(' '),
15
+ },
16
+ },
17
+ defaultVariants: {
18
+ variant: 'default',
19
+ },
20
+ });
21
+
22
+ class EmptyComponent {
23
+ class = input('', /* @ts-ignore */
24
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
25
+ classes = computed(() => cn(emptyVariants(), this.class()), /* @ts-ignore */
26
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: EmptyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: EmptyComponent, isStandalone: true, selector: "Empty", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: EmptyComponent, decorators: [{
31
+ type: Component,
32
+ args: [{
33
+ selector: 'Empty',
34
+ host: {
35
+ '[class]': 'classes()',
36
+ },
37
+ template: `<ng-content />`,
38
+ }]
39
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
40
+ class EmptyHeaderComponent {
41
+ class = input('', /* @ts-ignore */
42
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
43
+ classes = computed(() => cn('flex w-full max-w-xl flex-col items-center gap-3 text-center', this.class()), /* @ts-ignore */
44
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
45
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: EmptyHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: EmptyHeaderComponent, isStandalone: true, selector: "EmptyHeader", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
47
+ }
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: EmptyHeaderComponent, decorators: [{
49
+ type: Component,
50
+ args: [{
51
+ selector: 'EmptyHeader',
52
+ host: {
53
+ '[class]': 'classes()',
54
+ },
55
+ template: `<ng-content />`,
56
+ }]
57
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
58
+ class EmptyMediaComponent {
59
+ variant = input('default', /* @ts-ignore */
60
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
61
+ class = input('', /* @ts-ignore */
62
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
63
+ classes = computed(() => cn(emptyMediaVariants({ variant: this.variant() }), this.class()), /* @ts-ignore */
64
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
65
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: EmptyMediaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
66
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: EmptyMediaComponent, isStandalone: true, selector: "EmptyMedia", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-variant": "variant()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
67
+ }
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: EmptyMediaComponent, decorators: [{
69
+ type: Component,
70
+ args: [{
71
+ selector: 'EmptyMedia',
72
+ host: {
73
+ '[class]': 'classes()',
74
+ '[attr.data-variant]': 'variant()',
75
+ },
76
+ template: `<ng-content />`,
77
+ }]
78
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
79
+ class EmptyTitleComponent {
80
+ class = input('', /* @ts-ignore */
81
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
82
+ classes = computed(() => cn('block text-xl font-semibold tracking-tight text-foreground sm:text-2xl', this.class()), /* @ts-ignore */
83
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
84
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: EmptyTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
85
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: EmptyTitleComponent, isStandalone: true, selector: "EmptyTitle", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
86
+ }
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: EmptyTitleComponent, decorators: [{
88
+ type: Component,
89
+ args: [{
90
+ selector: 'EmptyTitle',
91
+ host: {
92
+ '[class]': 'classes()',
93
+ },
94
+ template: `<ng-content />`,
95
+ }]
96
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
97
+ class EmptyDescriptionComponent {
98
+ class = input('', /* @ts-ignore */
99
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
100
+ classes = computed(() => cn('block max-w-lg text-sm leading-6 text-muted-foreground', this.class()), /* @ts-ignore */
101
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
102
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: EmptyDescriptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
103
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: EmptyDescriptionComponent, isStandalone: true, selector: "EmptyDescription", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
104
+ }
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: EmptyDescriptionComponent, decorators: [{
106
+ type: Component,
107
+ args: [{
108
+ selector: 'EmptyDescription',
109
+ host: {
110
+ '[class]': 'classes()',
111
+ },
112
+ template: `<ng-content />`,
113
+ }]
114
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
115
+ class EmptyContentComponent {
116
+ class = input('', /* @ts-ignore */
117
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
118
+ classes = computed(() => cn('flex w-full flex-col items-center justify-center gap-3', this.class()), /* @ts-ignore */
119
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
120
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: EmptyContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
121
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: EmptyContentComponent, isStandalone: true, selector: "EmptyContent", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
122
+ }
123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: EmptyContentComponent, decorators: [{
124
+ type: Component,
125
+ args: [{
126
+ selector: 'EmptyContent',
127
+ host: {
128
+ '[class]': 'classes()',
129
+ },
130
+ template: `<ng-content />`,
131
+ }]
132
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
4
133
 
5
134
  /**
6
135
  * Generated bundle index. Do not edit.
7
- */
136
+ */
137
+
138
+ export { EmptyComponent, EmptyContentComponent, EmptyDescriptionComponent, EmptyHeaderComponent, EmptyMediaComponent, EmptyTitleComponent, emptyMediaVariants, emptyVariants };
@@ -1,7 +1,442 @@
1
- export * from '@ojiepermana/angular-component/form';
1
+ import * as i0 from '@angular/core';
2
+ import { signal, computed, effect, Service, inject, input, booleanAttribute, Component, Directive } from '@angular/core';
3
+ import { injectUniqueId, cn } from '@ojiepermana/angular/component/utils/core';
4
+ import { NgControl } from '@angular/forms';
2
5
 
3
- // Generated by scripts/gen-umbrella-entrypoints.mjs — do not edit by hand.
6
+ /**
7
+ * Backing store for a single `<FormField>`. Provided on the component
8
+ * so descendant parts (label, description, message, control) can inject it.
9
+ */
10
+ class FormFieldContext {
11
+ controlId = injectUniqueId('FormField');
12
+ labelId = `${this.controlId}-label`;
13
+ descriptionId = `${this.controlId}-description`;
14
+ messageId = `${this.controlId}-message`;
15
+ control = signal(null, /* @ts-ignore */
16
+ ...(ngDevMode ? [{ debugName: "control" }] : /* istanbul ignore next */ []));
17
+ manualInvalid = signal(false, /* @ts-ignore */
18
+ ...(ngDevMode ? [{ debugName: "manualInvalid" }] : /* istanbul ignore next */ []));
19
+ hasLabel = signal(false, /* @ts-ignore */
20
+ ...(ngDevMode ? [{ debugName: "hasLabel" }] : /* istanbul ignore next */ []));
21
+ hasDescription = signal(false, /* @ts-ignore */
22
+ ...(ngDevMode ? [{ debugName: "hasDescription" }] : /* istanbul ignore next */ []));
23
+ hasMessage = signal(false, /* @ts-ignore */
24
+ ...(ngDevMode ? [{ debugName: "hasMessage" }] : /* istanbul ignore next */ []));
25
+ /**
26
+ * `aria-labelledby` for the control. `<FormLabel>` renders as a custom element,
27
+ * so the native `for`/`id` pairing does not associate it — point the control at
28
+ * the label's id explicitly so it has an accessible name (axe `select-name`/`label`).
29
+ */
30
+ labelledBy = computed(() => (this.hasLabel() ? this.labelId : null), /* @ts-ignore */
31
+ ...(ngDevMode ? [{ debugName: "labelledBy" }] : /* istanbul ignore next */ []));
32
+ statusTick = signal(0, /* @ts-ignore */
33
+ ...(ngDevMode ? [{ debugName: "statusTick" }] : /* istanbul ignore next */ []));
34
+ invalid = computed(() => {
35
+ this.statusTick();
36
+ const c = this.control();
37
+ return this.manualInvalid() || (!!c && c.invalid && (c.touched || c.dirty));
38
+ }, /* @ts-ignore */
39
+ ...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
40
+ firstError = computed(() => {
41
+ this.statusTick();
42
+ const c = this.control();
43
+ if (!c?.errors)
44
+ return null;
45
+ const keys = Object.keys(c.errors);
46
+ return keys.length > 0 ? keys[0] : null;
47
+ }, /* @ts-ignore */
48
+ ...(ngDevMode ? [{ debugName: "firstError" }] : /* istanbul ignore next */ []));
49
+ describedBy = computed(() => {
50
+ const parts = [];
51
+ if (this.hasDescription())
52
+ parts.push(this.descriptionId);
53
+ if (this.hasMessage() && this.invalid())
54
+ parts.push(this.messageId);
55
+ return parts.length > 0 ? parts.join(' ') : null;
56
+ }, /* @ts-ignore */
57
+ ...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
58
+ constructor() {
59
+ // Re-run computed() above whenever the control's status or interaction state changes.
60
+ effect((onCleanup) => {
61
+ const c = this.control();
62
+ if (!c)
63
+ return;
64
+ // Signal Forms exposes an NgControl-compatible adapter whose state getters
65
+ // read signals directly but which intentionally has no `events` stream.
66
+ // The computed values above track those getters automatically; classic
67
+ // AbstractControl instances still need the event bridge.
68
+ const events = c.events;
69
+ if (!events)
70
+ return;
71
+ const sub = events.subscribe(() => this.statusTick.update((n) => n + 1));
72
+ onCleanup(() => sub.unsubscribe());
73
+ });
74
+ }
75
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormFieldContext, deps: [], target: i0.ɵɵFactoryTarget.Service });
76
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.4", ngImport: i0, type: FormFieldContext, autoProvided: false });
77
+ }
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormFieldContext, decorators: [{
79
+ type: Service,
80
+ args: [{ autoProvided: false }]
81
+ }], ctorParameters: () => [] });
82
+
83
+ /**
84
+ * Groups a label, control, description, and validation message.
85
+ * Provides ids + invalid state to descendants via {@link FormFieldContext}.
86
+ */
87
+ class FormFieldComponent {
88
+ ctx = inject(FormFieldContext);
89
+ class = input('', /* @ts-ignore */
90
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
91
+ orientation = input('vertical', /* @ts-ignore */
92
+ ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
93
+ invalid = input(false, { ...(ngDevMode ? { debugName: "invalid" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
94
+ classes = computed(() => {
95
+ const orientation = this.orientation();
96
+ return cn('block min-w-0', orientation === 'vertical' && 'flex flex-col gap-2', orientation === 'horizontal' && 'flex items-start gap-3', orientation === 'responsive' &&
97
+ 'flex flex-col gap-3 sm:grid sm:grid-cols-[minmax(0,12rem)_minmax(0,1fr)] sm:items-start', this.class());
98
+ }, /* @ts-ignore */
99
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
100
+ constructor() {
101
+ effect(() => this.ctx.manualInvalid.set(this.invalid()));
102
+ }
103
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
104
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: FormFieldComponent, isStandalone: true, selector: "FormField", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-orientation": "orientation()", "attr.data-invalid": "ctx.invalid() ? \"\" : null", "attr.role": "\"group\"" } }, providers: [FormFieldContext], ngImport: i0, template: `<ng-content />`, isInline: true });
105
+ }
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormFieldComponent, decorators: [{
107
+ type: Component,
108
+ args: [{
109
+ selector: 'FormField',
110
+ providers: [FormFieldContext],
111
+ host: {
112
+ '[class]': 'classes()',
113
+ '[attr.data-orientation]': 'orientation()',
114
+ '[attr.data-invalid]': 'ctx.invalid() ? "" : null',
115
+ '[attr.role]': '"group"',
116
+ },
117
+ template: `<ng-content />`,
118
+ }]
119
+ }], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }] } });
120
+
121
+ class FormFieldsetComponent {
122
+ class = input('', /* @ts-ignore */
123
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
124
+ classes = computed(() => cn('block min-w-0 border-0 p-0 m-0', 'grid gap-4', this.class()), /* @ts-ignore */
125
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
126
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormFieldsetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
127
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: FormFieldsetComponent, isStandalone: true, selector: "FormFieldset, fieldset[FormFieldset]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
128
+ }
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormFieldsetComponent, decorators: [{
130
+ type: Component,
131
+ args: [{
132
+ selector: 'FormFieldset, fieldset[FormFieldset]',
133
+ host: {
134
+ '[class]': 'classes()',
135
+ },
136
+ template: `<ng-content />`,
137
+ }]
138
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
139
+
140
+ class FormLegendComponent {
141
+ class = input('', /* @ts-ignore */
142
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
143
+ variant = input('legend', /* @ts-ignore */
144
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
145
+ classes = computed(() => cn('block min-w-0 text-foreground', this.variant() === 'label'
146
+ ? 'text-sm font-medium leading-none'
147
+ : 'text-sm font-semibold leading-none', this.class()), /* @ts-ignore */
148
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
149
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormLegendComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
150
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: FormLegendComponent, isStandalone: true, selector: "FormLegend, legend[FormLegend]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
151
+ }
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormLegendComponent, decorators: [{
153
+ type: Component,
154
+ args: [{
155
+ selector: 'FormLegend, legend[FormLegend]',
156
+ host: {
157
+ '[class]': 'classes()',
158
+ },
159
+ template: `<ng-content />`,
160
+ }]
161
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
162
+
163
+ class FormGroupComponent {
164
+ class = input('', /* @ts-ignore */
165
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
166
+ classes = computed(() => cn('block min-w-0', 'grid gap-6', this.class()), /* @ts-ignore */
167
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
168
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
169
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: FormGroupComponent, isStandalone: true, selector: "FormGroup", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
170
+ }
171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormGroupComponent, decorators: [{
172
+ type: Component,
173
+ args: [{
174
+ selector: 'FormGroup',
175
+ host: {
176
+ '[class]': 'classes()',
177
+ },
178
+ template: `<ng-content />`,
179
+ }]
180
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
181
+
182
+ class FormSeparatorComponent {
183
+ class = input('', /* @ts-ignore */
184
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
185
+ classes = computed(() => cn('block min-w-0', 'flex items-center gap-3 text-xs font-medium uppercase tracking-[0.24em] text-muted-foreground', 'before:h-px before:flex-1 before:bg-border after:h-px after:flex-1 after:bg-border', this.class()), /* @ts-ignore */
186
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
187
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormSeparatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
188
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: FormSeparatorComponent, isStandalone: true, selector: "FormSeparator", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<span class="shrink-0"><ng-content /></span>`, isInline: true });
189
+ }
190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormSeparatorComponent, decorators: [{
191
+ type: Component,
192
+ args: [{
193
+ selector: 'FormSeparator',
194
+ host: {
195
+ '[class]': 'classes()',
196
+ },
197
+ template: `<span class="shrink-0"><ng-content /></span>`,
198
+ }]
199
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
200
+
201
+ class FormContentComponent {
202
+ class = input('', /* @ts-ignore */
203
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
204
+ classes = computed(() => cn('block min-w-0 flex-1', 'grid gap-1.5', this.class()), /* @ts-ignore */
205
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
206
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
207
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: FormContentComponent, isStandalone: true, selector: "FormContent", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
208
+ }
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormContentComponent, decorators: [{
210
+ type: Component,
211
+ args: [{
212
+ selector: 'FormContent',
213
+ host: {
214
+ '[class]': 'classes()',
215
+ },
216
+ template: `<ng-content />`,
217
+ }]
218
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
219
+
220
+ class FormTitleComponent {
221
+ class = input('', /* @ts-ignore */
222
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
223
+ classes = computed(() => cn('block text-sm font-medium leading-none text-foreground', this.class()), /* @ts-ignore */
224
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
225
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
226
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: FormTitleComponent, isStandalone: true, selector: "FormTitle", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
227
+ }
228
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormTitleComponent, decorators: [{
229
+ type: Component,
230
+ args: [{
231
+ selector: 'FormTitle',
232
+ host: {
233
+ '[class]': 'classes()',
234
+ },
235
+ template: `<ng-content />`,
236
+ }]
237
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
238
+
239
+ class FormLabelComponent {
240
+ ctx = inject(FormFieldContext);
241
+ class = input('', /* @ts-ignore */
242
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
243
+ classes = computed(() => cn('text-sm font-medium leading-none', this.ctx.invalid() ? 'text-destructive' : 'text-foreground', 'peer-disabled:cursor-not-allowed peer-disabled:opacity-70', this.class()), /* @ts-ignore */
244
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
245
+ ngOnInit() {
246
+ // Let the control reference this label via aria-labelledby.
247
+ this.ctx.hasLabel.set(true);
248
+ }
249
+ ngOnDestroy() {
250
+ // Clear the flag on the way out, the way the description and message parts
251
+ // do. A conditionally rendered label that is removed but leaves the flag set
252
+ // points the control's aria-labelledby at an id no longer in the document,
253
+ // which strips its accessible name instead of restoring it.
254
+ this.ctx.hasLabel.set(false);
255
+ }
256
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
257
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: FormLabelComponent, isStandalone: true, selector: "FormLabel, label[FormLabel]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.id": "ctx.labelId", "attr.for": "ctx.controlId" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
258
+ }
259
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormLabelComponent, decorators: [{
260
+ type: Component,
261
+ args: [{
262
+ selector: 'FormLabel, label[FormLabel]',
263
+ host: {
264
+ '[class]': 'classes()',
265
+ '[attr.id]': 'ctx.labelId',
266
+ '[attr.for]': 'ctx.controlId',
267
+ },
268
+ template: `<ng-content />`,
269
+ }]
270
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
271
+
272
+ class FormDescriptionComponent {
273
+ ctx = inject(FormFieldContext, { optional: true });
274
+ class = input('', /* @ts-ignore */
275
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
276
+ classes = computed(() => cn('text-sm text-muted-foreground', this.class()), /* @ts-ignore */
277
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
278
+ descriptionId = computed(() => this.ctx?.descriptionId ?? null, /* @ts-ignore */
279
+ ...(ngDevMode ? [{ debugName: "descriptionId" }] : /* istanbul ignore next */ []));
280
+ ngOnInit() {
281
+ this.ctx?.hasDescription.set(true);
282
+ }
283
+ ngOnDestroy() {
284
+ this.ctx?.hasDescription.set(false);
285
+ }
286
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormDescriptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
287
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: FormDescriptionComponent, isStandalone: true, selector: "FormDescription, p[FormDescription]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.id": "descriptionId()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
288
+ }
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormDescriptionComponent, decorators: [{
290
+ type: Component,
291
+ args: [{
292
+ selector: 'FormDescription, p[FormDescription]',
293
+ host: {
294
+ '[class]': 'classes()',
295
+ '[attr.id]': 'descriptionId()',
296
+ },
297
+ template: `<ng-content />`,
298
+ }]
299
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
300
+
301
+ const numericConstraint = (value, key) => value && typeof value === 'object' && key in value
302
+ ? value[key]
303
+ : undefined;
304
+ /** Default human-readable messages for Angular's built-in validators. */
305
+ const defaultFormErrorMessageResolver = (errorKey, errorValue) => {
306
+ switch (errorKey) {
307
+ case 'required':
308
+ return 'This field is required.';
309
+ case 'requiredTrue':
310
+ return 'This option must be selected.';
311
+ case 'email':
312
+ return 'Enter a valid email address.';
313
+ case 'minlength':
314
+ return `Enter at least ${numericConstraint(errorValue, 'requiredLength')} characters.`;
315
+ case 'maxlength':
316
+ return `Enter no more than ${numericConstraint(errorValue, 'requiredLength')} characters.`;
317
+ case 'min':
318
+ return `Enter a value greater than or equal to ${numericConstraint(errorValue, 'min')}.`;
319
+ case 'max':
320
+ return `Enter a value less than or equal to ${numericConstraint(errorValue, 'max')}.`;
321
+ case 'pattern':
322
+ return 'Enter a value in the required format.';
323
+ default:
324
+ return 'Enter a valid value.';
325
+ }
326
+ };
327
+
328
+ /**
329
+ * Renders validation errors for the field's control.
330
+ * By default, surfaces the first error key. Provide custom content to override.
331
+ */
332
+ class FormMessageComponent {
333
+ ctx = inject(FormFieldContext);
334
+ class = input('', /* @ts-ignore */
335
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
336
+ errorMessageResolver = input(defaultFormErrorMessageResolver, /* @ts-ignore */
337
+ ...(ngDevMode ? [{ debugName: "errorMessageResolver" }] : /* istanbul ignore next */ []));
338
+ show = computed(() => this.ctx.invalid(), /* @ts-ignore */
339
+ ...(ngDevMode ? [{ debugName: "show" }] : /* istanbul ignore next */ []));
340
+ message = computed(() => {
341
+ const errorKey = this.ctx.firstError();
342
+ const control = this.ctx.control();
343
+ if (!errorKey) {
344
+ return '';
345
+ }
346
+ return this.errorMessageResolver()(errorKey, control?.errors?.[errorKey], control);
347
+ }, /* @ts-ignore */
348
+ ...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
349
+ classes = computed(() => cn('text-sm font-medium text-destructive', this.class()), /* @ts-ignore */
350
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
351
+ ngOnInit() {
352
+ this.ctx.hasMessage.set(true);
353
+ }
354
+ ngOnDestroy() {
355
+ this.ctx.hasMessage.set(false);
356
+ }
357
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
358
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: FormMessageComponent, isStandalone: true, selector: "FormMessage, p[FormMessage]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, errorMessageResolver: { classPropertyName: "errorMessageResolver", publicName: "errorMessageResolver", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.id": "ctx.messageId", "attr.role": "\"status\"" } }, ngImport: i0, template: `
359
+ @if (show()) {
360
+ <ng-content>{{ message() }}</ng-content>
361
+ }
362
+ `, isInline: true });
363
+ }
364
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormMessageComponent, decorators: [{
365
+ type: Component,
366
+ args: [{
367
+ selector: 'FormMessage, p[FormMessage]',
368
+ host: {
369
+ '[class]': 'classes()',
370
+ '[attr.id]': 'ctx.messageId',
371
+ // One semantic, not two. `role="alert"` carries an implicit assertive live
372
+ // region, so pairing it with aria-live="polite" asked screen readers to be
373
+ // both interruptive and polite about the same message. A field error is
374
+ // status about the field the user is working in, so it announces politely.
375
+ '[attr.role]': '"status"',
376
+ },
377
+ template: `
378
+ @if (show()) {
379
+ <ng-content>{{ message() }}</ng-content>
380
+ }
381
+ `,
382
+ }]
383
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], errorMessageResolver: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessageResolver", required: false }] }] } });
384
+
385
+ /**
386
+ * Attach to the native form control inside a `<FormField>` to auto-wire:
387
+ * - `id` ↔ `<FormLabel for>`
388
+ * - `aria-describedby` ↔ description + error message
389
+ * - `aria-invalid` ↔ control validity (after touch/dirty)
390
+ *
391
+ * @example
392
+ * <FormField>
393
+ * <FormLabel>Email</FormLabel>
394
+ * <input Input FormControl [formControl]="email" />
395
+ * <FormDescription>We'll never share it.</FormDescription>
396
+ * <FormMessage />
397
+ * </FormField>
398
+ */
399
+ class FormControlDirective {
400
+ ctx = inject(FormFieldContext);
401
+ ngControl = inject(NgControl, { optional: true, self: true });
402
+ ngOnInit() {
403
+ this.publishControl();
404
+ }
405
+ ngAfterViewInit() {
406
+ // `formControlName` only assigns `.control` in FormControlName.ngOnChanges.
407
+ // Whether that lands before this ngOnInit depends on directive *creation*
408
+ // order: injecting NgControl in a field initializer (as above) instantiates
409
+ // FormControlName early, which registers its hooks first and happens to make
410
+ // the init read work today. Anything that moves that injection later — a lazy
411
+ // `injector.get`, for instance — parks `null` in the FormField forever, and
412
+ // the field can then never surface the control's invalid state. Re-resolving
413
+ // here removes the dependence on that ordering accident.
414
+ this.publishControl();
415
+ }
416
+ publishControl() {
417
+ const control = this.ngControl?.control ?? null;
418
+ if (control !== this.ctx.control()) {
419
+ this.ctx.control.set(control);
420
+ }
421
+ }
422
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormControlDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
423
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.4", type: FormControlDirective, isStandalone: true, selector: "[FormControl]", host: { properties: { "attr.id": "ctx.controlId", "attr.aria-labelledby": "ctx.labelledBy()", "attr.aria-describedby": "ctx.describedBy()", "attr.aria-invalid": "ctx.invalid() ? \"true\" : null" } }, ngImport: i0 });
424
+ }
425
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FormControlDirective, decorators: [{
426
+ type: Directive,
427
+ args: [{
428
+ selector: '[FormControl]',
429
+ host: {
430
+ '[attr.id]': 'ctx.controlId',
431
+ '[attr.aria-labelledby]': 'ctx.labelledBy()',
432
+ '[attr.aria-describedby]': 'ctx.describedBy()',
433
+ '[attr.aria-invalid]': 'ctx.invalid() ? "true" : null',
434
+ },
435
+ }]
436
+ }] });
4
437
 
5
438
  /**
6
439
  * Generated bundle index. Do not edit.
7
- */
440
+ */
441
+
442
+ export { FormContentComponent, FormControlDirective, FormDescriptionComponent, FormFieldComponent, FormFieldContext, FormFieldsetComponent, FormGroupComponent, FormLabelComponent, FormLegendComponent, FormMessageComponent, FormSeparatorComponent, FormTitleComponent, defaultFormErrorMessageResolver };