@loomui-ng/ui 0.0.0-stage → 0.1.0

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 @@
1
+ {"version":3,"file":"loomui-ng-ui-context-menu.mjs","names":[],"sources":["../../../libs/ui/context-menu/context-menu.ts","../../../libs/ui/context-menu/context-menu.shared.ts","../../../libs/ui/context-menu/context-menu.manual.ts"],"sourcesContent":["// GENERATED by tools/gen-ui.mjs from docs/evidence/slots/context-menu.json.\n// Change tools/ui-specs.mjs and regenerate; hand-written parts live in ./context-menu.manual.ts.\nimport { Directive, computed, input } from '@angular/core';\nimport { cn } from '@loomui-ng/ui/utils';\n\nexport const contextMenuTriggerClass =\n 'select-none flex aspect-video w-full max-w-xs items-center justify-center rounded-xl border border-dashed text-sm';\n\nexport const contextMenuContentClass =\n 'z-50 max-h-(--radix-context-menu-content-available-height) min-w-36 origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 w-48';\n\nexport const contextMenuItemClass =\n 'group/context-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:ps-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\\'size-\\'])]:size-4 focus:*:[svg]:text-accent-foreground data-[variant=destructive]:*:[svg]:text-destructive';\n\nexport const contextMenuSubTriggerClass =\n 'flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:ps-7 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\\'size-\\'])]:size-4';\n\nexport const contextMenuCheckboxItemClass =\n 'relative flex cursor-default items-center gap-1.5 rounded-md py-1 pe-8 ps-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:ps-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\\'size-\\'])]:size-4';\n\nexport const contextMenuRadioItemClass =\n 'relative flex cursor-default items-center gap-1.5 rounded-md py-1 pe-8 ps-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:ps-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\\'size-\\'])]:size-4';\n\nexport const contextMenuLabelClass =\n 'px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:ps-7';\n\nexport const contextMenuSeparatorClass =\n '-mx-1 my-1 h-px bg-border';\n\nexport const contextMenuShortcutClass =\n 'ms-auto text-xs tracking-widest text-muted-foreground group-focus/context-menu-item:text-accent-foreground';\n\nexport const UI_CONTEXT_MENU_GENERATED = [] as const;\n","// GENERATED by tools/clone-menu.mjs from dropdown-menu.ts — hand-edit only the root/trigger/content in ./context-menu.ts.\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n forwardRef,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { cn } from '@loomui-ng/ui/utils';\nimport {\n UI_MENU_CTX,\n UI_MENU_ITEM,\n UI_MENU_SUB,\n UiMenuItemBase,\n UiMenuSubBase,\n UiMenuSubTriggerBase,\n UiMenuContentBase,\n UiMenuSelectEvent,\n} from '@loomui-ng/ui/utils';\nimport { type Align } from '@loomui-ng/ui/utils';\nimport { contentChildren } from '@angular/core';\nimport { UiIconSvg } from '@loomui-ng/ui/icon';\nimport { contextMenuItemClass, contextMenuSubTriggerClass, contextMenuCheckboxItemClass, contextMenuRadioItemClass, contextMenuLabelClass, contextMenuSeparatorClass, contextMenuShortcutClass, contextMenuContentClass } from './context-menu';\nimport { UiElementHost } from '@loomui-ng/ui/utils';\n\nexport { UiMenuSelectEvent };\n\nconst ITEM_CLASS = contextMenuItemClass;\nconst SUB_TRIGGER_CLASS = contextMenuSubTriggerClass;\nconst CHECKBOX_CLASS = contextMenuCheckboxItemClass;\nconst RADIO_CLASS = contextMenuRadioItemClass;\nconst LABEL_CLASS = contextMenuLabelClass;\nconst SEPARATOR_CLASS = contextMenuSeparatorClass;\nconst SHORTCUT_CLASS = contextMenuShortcutClass;\nconst CONTENT_CLASS = contextMenuContentClass;\n\n@Directive({\n selector: '[uiContextMenuItem], ui-context-menu-item', hostDirectives: [UiElementHost],\n providers: [{ provide: UI_MENU_ITEM, useExisting: forwardRef(() => UiContextMenuItem) }],\n host: {\n tabindex: '-1',\n '[attr.data-disabled]': 'disabled ? \"\" : null',\n '[attr.aria-disabled]': 'disabled ? \"true\" : null',\n '[attr.data-highlighted]': 'highlighted() ? \"\" : null',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(pointermove)': 'onPointerMove()',\n '(pointerleave)': 'onPointerLeave()',\n '(click)': 'activate()',\n 'data-slot': 'context-menu-item',\n role: 'menuitem',\n '[attr.data-variant]': 'variant()',\n '[attr.data-inset]': 'inset() ? \"\" : null',\n '[attr.class]': 'classes()',\n },\n})\nexport class UiContextMenuItem extends UiMenuItemBase {\n readonly variant = input<'default' | 'destructive'>('default');\n readonly inset = input(false, { transform: booleanAttribute });\n protected readonly classes = computed(() => cn(ITEM_CLASS, this.userClass()));\n}\n\nconst CHECK =\n '<svg uiIcon=\"check\" class=\"size-4\"></svg>';\n\n@Component({\n selector: '[uiContextMenuCheckboxItem], ui-context-menu-checkbox-item', hostDirectives: [UiElementHost],\n imports: [UiIconSvg],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: UI_MENU_ITEM, useExisting: forwardRef(() => UiContextMenuCheckboxItem) }],\n host: {\n tabindex: '-1',\n '[attr.data-disabled]': 'disabled ? \"\" : null',\n '[attr.aria-disabled]': 'disabled ? \"true\" : null',\n '[attr.data-highlighted]': 'highlighted() ? \"\" : null',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(pointermove)': 'onPointerMove()',\n '(pointerleave)': 'onPointerLeave()',\n '(click)': 'activate()',\n 'data-slot': 'context-menu-checkbox-item',\n role: 'menuitemcheckbox',\n '[attr.aria-checked]': 'checked()',\n '[attr.data-state]': 'checked() ? \"checked\" : \"unchecked\"',\n '[attr.data-inset]': 'inset() ? \"\" : null',\n '[attr.class]': 'classes()',\n },\n template: `\n <ng-content />\n <span class=\"pointer-events-none absolute end-2 flex items-center justify-center\" data-slot=\"context-menu-checkbox-item-indicator\">\n @if (checked()) { ${CHECK} }\n </span>\n `,\n})\nexport class UiContextMenuCheckboxItem extends UiMenuItemBase {\n readonly checked = model(false);\n readonly inset = input(false, { transform: booleanAttribute });\n protected readonly classes = computed(() => cn(CHECKBOX_CLASS, this.userClass()));\n protected override beforeSelect(): void {\n this.checked.update((v) => !v);\n }\n}\n\n@Directive({\n selector: '[uiContextMenuRadioGroup], ui-context-menu-radio-group', hostDirectives: [UiElementHost],\n host: { role: 'group', 'data-slot': 'context-menu-radio-group' },\n})\nexport class UiContextMenuRadioGroup {\n readonly value = model<string | undefined>(undefined);\n}\n\n@Component({\n selector: '[uiContextMenuRadioItem], ui-context-menu-radio-item', hostDirectives: [UiElementHost],\n imports: [UiIconSvg],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: UI_MENU_ITEM, useExisting: forwardRef(() => UiContextMenuRadioItem) }],\n host: {\n tabindex: '-1',\n '[attr.data-disabled]': 'disabled ? \"\" : null',\n '[attr.aria-disabled]': 'disabled ? \"true\" : null',\n '[attr.data-highlighted]': 'highlighted() ? \"\" : null',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(pointermove)': 'onPointerMove()',\n '(pointerleave)': 'onPointerLeave()',\n '(click)': 'activate()',\n 'data-slot': 'context-menu-radio-item',\n role: 'menuitemradio',\n '[attr.aria-checked]': 'checked()',\n '[attr.data-state]': 'checked() ? \"checked\" : \"unchecked\"',\n '[attr.data-inset]': 'inset() ? \"\" : null',\n '[attr.class]': 'classes()',\n },\n template: `\n <ng-content />\n <span class=\"pointer-events-none absolute end-2 flex items-center justify-center\" data-slot=\"context-menu-radio-item-indicator\">\n @if (checked()) { ${CHECK} }\n </span>\n `,\n})\nexport class UiContextMenuRadioItem extends UiMenuItemBase {\n private readonly group = inject(UiContextMenuRadioGroup);\n readonly value = input<string>('');\n readonly inset = input(false, { transform: booleanAttribute });\n protected readonly checked = computed(() => this.group.value() === this.value());\n protected readonly classes = computed(() => cn(RADIO_CLASS, this.userClass()));\n protected override beforeSelect(): void {\n this.group.value.set(this.value());\n }\n}\n\n/** Sub-menu: <div uiContextMenuSub><div uiContextMenuSubTrigger>More</div><div uiContextMenuSubContent>…</div></div> */\n@Directive({\n selector: '[uiContextMenuSub], ui-context-menu-sub', hostDirectives: [UiElementHost],\n providers: [\n { provide: UI_MENU_CTX, useExisting: forwardRef(() => UiContextMenuSub) },\n { provide: UI_MENU_SUB, useExisting: forwardRef(() => UiContextMenuSub) },\n ],\n})\nexport class UiContextMenuSub extends UiMenuSubBase {}\n\n@Component({\n selector: '[uiContextMenuSubTrigger], ui-context-menu-sub-trigger', hostDirectives: [UiElementHost],\n imports: [UiIconSvg],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: UI_MENU_ITEM, useExisting: forwardRef(() => UiContextMenuSubTrigger) }],\n host: {\n tabindex: '-1',\n '[attr.data-disabled]': 'disabled ? \"\" : null',\n '[attr.aria-disabled]': 'disabled ? \"true\" : null',\n '[attr.data-highlighted]': 'highlighted() ? \"\" : null',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(pointermove)': 'onPointerMove()',\n '(pointerleave)': 'onPointerLeave()',\n '(click)': 'activate()',\n 'data-slot': 'context-menu-sub-trigger',\n role: 'menuitem',\n 'aria-haspopup': 'menu',\n '[attr.aria-expanded]': 'sub.open()',\n '[attr.data-state]': 'sub.open() ? \"open\" : \"closed\"',\n '[attr.data-inset]': 'inset() ? \"\" : null',\n '[attr.class]': 'classes()',\n },\n template: `\n <ng-content />\n <svg uiIcon=\"chevron-right\" class=\"ms-auto rtl:rotate-180\"></svg>\n `,\n})\nexport class UiContextMenuSubTrigger extends UiMenuSubTriggerBase {\n readonly inset = input(false, { transform: booleanAttribute });\n protected readonly classes = computed(() => cn(SUB_TRIGGER_CLASS, this.userClass()));\n}\n\n@Directive({\n selector: '[uiContextMenuSubContent], ui-context-menu-sub-content', hostDirectives: [UiElementHost],\n host: {\n role: 'menu',\n 'aria-orientation': 'vertical',\n 'data-slot': 'context-menu-sub-content',\n tabindex: '-1',\n '[attr.data-state]': 'root.state()',\n '[attr.dir]': 'dir.value',\n '[attr.class]': 'classes()',\n '(keydown)': 'onMenuKeydown($event)',\n },\n})\nexport class UiContextMenuSubContent extends UiMenuContentBase {\n protected readonly root = inject(UiContextMenuSub);\n protected readonly menu = this.root;\n protected readonly varPrefix = '--radix-context-menu';\n override readonly side = input<'top' | 'right' | 'bottom' | 'left'>('right');\n override readonly align = input<Align>('start');\n override readonly sideOffset = input(0);\n private readonly items = contentChildren<UiMenuItemBase>(UI_MENU_ITEM, { descendants: true });\n protected readonly classes = computed(() => cn(CONTENT_CLASS, 'w-auto', this.userClass()));\n protected menuItems(): readonly UiMenuItemBase[] {\n return this.items();\n }\n constructor() {\n super();\n this.isSub = true;\n this.init();\n }\n}\n\n@Directive({\n selector: '[uiContextMenuLabel], ui-context-menu-label', hostDirectives: [UiElementHost],\n host: { 'data-slot': 'context-menu-label', '[attr.data-inset]': 'inset() ? \"\" : null', '[attr.class]': 'classes()' },\n})\nexport class UiContextMenuLabel {\n readonly inset = input(false, { transform: booleanAttribute });\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn(LABEL_CLASS, this.userClass()));\n}\n\n@Directive({\n selector: '[uiContextMenuSeparator], ui-context-menu-separator', hostDirectives: [UiElementHost],\n host: { role: 'separator', 'aria-orientation': 'horizontal', 'data-slot': 'context-menu-separator', '[attr.class]': 'classes()' },\n})\nexport class UiContextMenuSeparator {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn(SEPARATOR_CLASS, this.userClass()));\n}\n\n@Directive({\n selector: '[uiContextMenuShortcut], ui-context-menu-shortcut', hostDirectives: [UiElementHost],\n host: { 'data-slot': 'context-menu-shortcut', '[attr.class]': 'classes()' },\n})\nexport class UiContextMenuShortcut {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn(SHORTCUT_CLASS, this.userClass()));\n}\n\n@Directive({\n selector: '[uiContextMenuGroup], ui-context-menu-group', hostDirectives: [UiElementHost],\n host: { role: 'group', 'data-slot': 'context-menu-group' },\n})\nexport class UiContextMenuGroup {}\n\n\nexport const CONTEXT_MENU_SHARED = [\n UiContextMenuItem,\n UiContextMenuCheckboxItem,\n UiContextMenuRadioGroup,\n UiContextMenuRadioItem,\n UiContextMenuSub,\n UiContextMenuSubTrigger,\n UiContextMenuSubContent,\n UiContextMenuLabel,\n UiContextMenuSeparator,\n UiContextMenuShortcut,\n UiContextMenuGroup,\n] as const;\n","import { Directionality } from '@angular/cdk/bidi';\nimport { computed, contentChildren, Directive, ElementRef, forwardRef, inject, input } from '@angular/core';\nimport { cn } from '@loomui-ng/ui/utils';\nimport { UI_MENU_CTX, UI_MENU_ITEM, UiMenuContentBase, UiMenuItemBase, UiMenuRootBase } from '@loomui-ng/ui/utils';\nimport { type Align, type Side } from '@loomui-ng/ui/utils';\nimport { contextMenuContentClass } from './context-menu';\nimport { CONTEXT_MENU_SHARED } from './context-menu.shared';\nimport { UiElementHost } from '@loomui-ng/ui/utils';\n\n/**\n * <div uiContextMenu class=\"contents\">\n * <div uiContextMenuTrigger class=\"…\">Right click here</div>\n * <div uiContextMenuContent>…items…</div>\n * </div>\n * Opens at the pointer on `contextmenu` (right click) and on Shift+F10 / the ContextMenu key.\n */\n@Directive({\n selector: '[uiContextMenu], ui-context-menu', hostDirectives: [UiElementHost],\n exportAs: 'uiContextMenu',\n providers: [{ provide: UI_MENU_CTX, useExisting: forwardRef(() => UiContextMenu) }],\n})\nexport class UiContextMenu extends UiMenuRootBase {}\n\n@Directive({\n selector: '[uiContextMenuTrigger], ui-context-menu-trigger', hostDirectives: [UiElementHost],\n host: {\n 'data-slot': 'context-menu-trigger',\n '[attr.data-state]': 'root.open() ? \"open\" : \"closed\"',\n '(contextmenu)': 'onContext($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class UiContextMenuTrigger {\n protected readonly root = inject(UiContextMenu);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n constructor() {\n this.root.trigger.set(this.el);\n }\n protected onContext(e: MouseEvent): void {\n e.preventDefault();\n this.root.anchorPoint.set({ x: e.clientX, y: e.clientY });\n this.root.keyboardOpen = null;\n this.root.open.set(true);\n }\n protected onKeydown(e: KeyboardEvent): void {\n if (e.key === 'ContextMenu' || (e.key === 'F10' && e.shiftKey)) {\n e.preventDefault();\n const r = this.el.getBoundingClientRect();\n this.root.anchorPoint.set({ x: r.left + r.width / 2, y: r.top + r.height / 2 });\n this.root.keyboardOpen = 'first';\n this.root.open.set(true);\n }\n }\n}\n\n@Directive({\n selector: '[uiContextMenuContent], ui-context-menu-content', hostDirectives: [UiElementHost],\n host: {\n role: 'menu',\n 'aria-orientation': 'vertical',\n 'data-slot': 'context-menu-content',\n 'data-orientation': 'vertical',\n tabindex: '-1',\n '[id]': 'root.id',\n '[attr.data-state]': 'root.state()',\n '[attr.dir]': 'dir.value',\n '[attr.class]': 'classes()',\n '(keydown)': 'onMenuKeydown($event)',\n },\n})\nexport class UiContextMenuContent extends UiMenuContentBase {\n protected readonly root = inject(UiContextMenu);\n protected readonly menu = this.root;\n protected readonly varPrefix = '--radix-context-menu';\n override readonly side = input<Side>('right');\n override readonly align = input<Align>('start');\n override readonly sideOffset = input(2);\n private readonly items = contentChildren<UiMenuItemBase>(UI_MENU_ITEM, { descendants: true });\n protected readonly classes = computed(() => cn(contextMenuContentClass, this.userClass()));\n protected menuItems(): readonly UiMenuItemBase[] {\n return this.items();\n }\n constructor() {\n super();\n this.init();\n }\n}\n\nexport const UI_CONTEXT_MENU = [UiContextMenu, UiContextMenuTrigger, UiContextMenuContent, ...CONTEXT_MENU_SHARED] as const;\nvoid Directionality;\n"],"mappings":"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"}
@@ -0,0 +1,535 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, computed, input } from "@angular/core";
3
+ import { buttonVariants } from "@loomui-ng/ui/button";
4
+ import * as i1 from "@loomui-ng/ui/dropdown-menu";
5
+ import { UI_DROPDOWN_MENU } from "@loomui-ng/ui/dropdown-menu";
6
+ import { cn } from "@loomui-ng/ui/utils";
7
+ import { UiIconSvg } from "@loomui-ng/ui/icon";
8
+ var UiDataTableColumnHeader = class UiDataTableColumnHeader {
9
+ column = input.required(...ngDevMode ? [{ debugName: "column" }] : /* istanbul ignore next */ []);
10
+ title = input.required(...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
11
+ userClass = input("", {
12
+ ...ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {},
13
+ alias: "class"
14
+ });
15
+ sortIcon = computed(() => this.sorted() === "asc" ? "arrow-up" : this.sorted() === "desc" ? "arrow-down" : "chevrons-up-down", ...ngDevMode ? [{ debugName: "sortIcon" }] : /* istanbul ignore next */ []);
16
+ triggerClass = cn(buttonVariants({
17
+ variant: "ghost",
18
+ size: "sm"
19
+ }), "-ms-2 data-[sorted]:text-foreground");
20
+ sorted = computed(() => this.column().getIsSorted() || "", ...ngDevMode ? [{ debugName: "sorted" }] : /* istanbul ignore next */ []);
21
+ classes = computed(() => cn("flex items-center", this.userClass()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
22
+ static ɵfac = i0.ɵɵngDeclareFactory({
23
+ minVersion: "12.0.0",
24
+ version: "22.2.2",
25
+ ngImport: i0,
26
+ type: UiDataTableColumnHeader,
27
+ deps: [],
28
+ target: i0.ɵɵFactoryTarget.Component
29
+ });
30
+ static ɵcmp = i0.ɵɵngDeclareComponent({
31
+ minVersion: "17.0.0",
32
+ version: "22.2.2",
33
+ type: UiDataTableColumnHeader,
34
+ isStandalone: true,
35
+ selector: "ui-data-table-column-header",
36
+ inputs: {
37
+ column: {
38
+ classPropertyName: "column",
39
+ publicName: "column",
40
+ isSignal: true,
41
+ isRequired: true,
42
+ transformFunction: null
43
+ },
44
+ title: {
45
+ classPropertyName: "title",
46
+ publicName: "title",
47
+ isSignal: true,
48
+ isRequired: true,
49
+ transformFunction: null
50
+ },
51
+ userClass: {
52
+ classPropertyName: "userClass",
53
+ publicName: "class",
54
+ isSignal: true,
55
+ isRequired: false,
56
+ transformFunction: null
57
+ }
58
+ },
59
+ host: {
60
+ attributes: { "data-slot": "data-table-column-header" },
61
+ properties: { "attr.class": "classes()" }
62
+ },
63
+ ngImport: i0,
64
+ template: `
65
+ @if (column().getCanSort()) {
66
+ <div uiDropdownMenu class="contents">
67
+ <button
68
+ type="button"
69
+ uiDropdownMenuTrigger
70
+ [class]="triggerClass"
71
+ [attr.data-sorted]="sorted() || null"
72
+ >
73
+ <span>{{ title() }}</span>
74
+ <svg [uiIcon]="sortIcon()" class="size-3.5"></svg>
75
+ </button>
76
+ <div uiDropdownMenuContent align="start" class="w-32">
77
+ <div uiDropdownMenuItem (select)="column().toggleSorting(false)">Asc</div>
78
+ <div uiDropdownMenuItem (select)="column().toggleSorting(true)">Desc</div>
79
+ @if (column().getCanHide()) {
80
+ <div uiDropdownMenuSeparator></div>
81
+ <div uiDropdownMenuItem (select)="column().toggleVisibility(false)">Hide</div>
82
+ }
83
+ </div>
84
+ </div>
85
+ } @else {
86
+ <span>{{ title() }}</span>
87
+ }
88
+ `,
89
+ isInline: true,
90
+ dependencies: [
91
+ {
92
+ kind: "directive",
93
+ type: UiIconSvg,
94
+ selector: "svg[uiIcon]",
95
+ inputs: [
96
+ "uiIcon",
97
+ "icon",
98
+ "size",
99
+ "strokeWidth",
100
+ "absoluteStrokeWidth",
101
+ "color",
102
+ "label",
103
+ "class"
104
+ ]
105
+ },
106
+ {
107
+ kind: "directive",
108
+ type: i1.UiDropdownMenu,
109
+ selector: "[uiDropdownMenu], ui-dropdown-menu",
110
+ exportAs: ["uiDropdownMenu"]
111
+ },
112
+ {
113
+ kind: "directive",
114
+ type: i1.UiDropdownMenuTrigger,
115
+ selector: "[uiDropdownMenuTrigger], ui-dropdown-menu-trigger"
116
+ },
117
+ {
118
+ kind: "directive",
119
+ type: i1.UiDropdownMenuContent,
120
+ selector: "[uiDropdownMenuContent], ui-dropdown-menu-content",
121
+ inputs: ["align"]
122
+ },
123
+ {
124
+ kind: "directive",
125
+ type: i1.UiDropdownMenuItem,
126
+ selector: "[uiDropdownMenuItem], ui-dropdown-menu-item",
127
+ inputs: ["variant", "inset"]
128
+ },
129
+ {
130
+ kind: "directive",
131
+ type: i1.UiDropdownMenuSeparator,
132
+ selector: "[uiDropdownMenuSeparator], ui-dropdown-menu-separator",
133
+ inputs: ["class"]
134
+ }
135
+ ],
136
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
137
+ });
138
+ };
139
+ i0.ɵɵngDeclareClassMetadata({
140
+ minVersion: "12.0.0",
141
+ version: "22.2.2",
142
+ ngImport: i0,
143
+ type: UiDataTableColumnHeader,
144
+ decorators: [{
145
+ type: Component,
146
+ args: [{
147
+ selector: "ui-data-table-column-header",
148
+ imports: [UiIconSvg, UI_DROPDOWN_MENU],
149
+ changeDetection: ChangeDetectionStrategy.OnPush,
150
+ host: {
151
+ "data-slot": "data-table-column-header",
152
+ "[attr.class]": "classes()"
153
+ },
154
+ template: `
155
+ @if (column().getCanSort()) {
156
+ <div uiDropdownMenu class="contents">
157
+ <button
158
+ type="button"
159
+ uiDropdownMenuTrigger
160
+ [class]="triggerClass"
161
+ [attr.data-sorted]="sorted() || null"
162
+ >
163
+ <span>{{ title() }}</span>
164
+ <svg [uiIcon]="sortIcon()" class="size-3.5"></svg>
165
+ </button>
166
+ <div uiDropdownMenuContent align="start" class="w-32">
167
+ <div uiDropdownMenuItem (select)="column().toggleSorting(false)">Asc</div>
168
+ <div uiDropdownMenuItem (select)="column().toggleSorting(true)">Desc</div>
169
+ @if (column().getCanHide()) {
170
+ <div uiDropdownMenuSeparator></div>
171
+ <div uiDropdownMenuItem (select)="column().toggleVisibility(false)">Hide</div>
172
+ }
173
+ </div>
174
+ </div>
175
+ } @else {
176
+ <span>{{ title() }}</span>
177
+ }
178
+ `
179
+ }]
180
+ }],
181
+ propDecorators: {
182
+ column: [{
183
+ type: i0.Input,
184
+ args: [{
185
+ isSignal: true,
186
+ alias: "column",
187
+ required: true
188
+ }]
189
+ }],
190
+ title: [{
191
+ type: i0.Input,
192
+ args: [{
193
+ isSignal: true,
194
+ alias: "title",
195
+ required: true
196
+ }]
197
+ }],
198
+ userClass: [{
199
+ type: i0.Input,
200
+ args: [{
201
+ isSignal: true,
202
+ alias: "class",
203
+ required: false
204
+ }]
205
+ }]
206
+ }
207
+ });
208
+ var UiDataTableViewOptions = class UiDataTableViewOptions {
209
+ table = input.required(...ngDevMode ? [{ debugName: "table" }] : /* istanbul ignore next */ []);
210
+ triggerClass = cn(buttonVariants({
211
+ variant: "outline",
212
+ size: "sm"
213
+ }), "ms-auto hidden h-8 lg:flex");
214
+ columns = computed(() => this.table().getAllColumns().filter((c) => c.accessorFn !== void 0 && c.getCanHide()), ...ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []);
215
+ static ɵfac = i0.ɵɵngDeclareFactory({
216
+ minVersion: "12.0.0",
217
+ version: "22.2.2",
218
+ ngImport: i0,
219
+ type: UiDataTableViewOptions,
220
+ deps: [],
221
+ target: i0.ɵɵFactoryTarget.Component
222
+ });
223
+ static ɵcmp = i0.ɵɵngDeclareComponent({
224
+ minVersion: "17.0.0",
225
+ version: "22.2.2",
226
+ type: UiDataTableViewOptions,
227
+ isStandalone: true,
228
+ selector: "ui-data-table-view-options",
229
+ inputs: { table: {
230
+ classPropertyName: "table",
231
+ publicName: "table",
232
+ isSignal: true,
233
+ isRequired: true,
234
+ transformFunction: null
235
+ } },
236
+ host: {
237
+ attributes: { "data-slot": "data-table-view-options" },
238
+ classAttribute: "contents"
239
+ },
240
+ ngImport: i0,
241
+ template: `
242
+ <div uiDropdownMenu class="contents">
243
+ <button type="button" uiDropdownMenuTrigger [class]="triggerClass">
244
+ <svg uiIcon="sliders-horizontal" class="size-4"></svg>
245
+ View
246
+ </button>
247
+ <div uiDropdownMenuContent align="end" class="w-40">
248
+ <div uiDropdownMenuLabel>Toggle columns</div>
249
+ <div uiDropdownMenuSeparator></div>
250
+ @for (col of columns(); track col.id) {
251
+ <div
252
+ uiDropdownMenuCheckboxItem
253
+ class="capitalize"
254
+ [checked]="col.getIsVisible()"
255
+ (checkedChange)="col.toggleVisibility($event)"
256
+ (select)="$event.preventDefault()"
257
+ >
258
+ {{ col.id }}
259
+ </div>
260
+ }
261
+ </div>
262
+ </div>
263
+ `,
264
+ isInline: true,
265
+ dependencies: [
266
+ {
267
+ kind: "directive",
268
+ type: UiIconSvg,
269
+ selector: "svg[uiIcon]",
270
+ inputs: [
271
+ "uiIcon",
272
+ "icon",
273
+ "size",
274
+ "strokeWidth",
275
+ "absoluteStrokeWidth",
276
+ "color",
277
+ "label",
278
+ "class"
279
+ ]
280
+ },
281
+ {
282
+ kind: "directive",
283
+ type: i1.UiDropdownMenu,
284
+ selector: "[uiDropdownMenu], ui-dropdown-menu",
285
+ exportAs: ["uiDropdownMenu"]
286
+ },
287
+ {
288
+ kind: "directive",
289
+ type: i1.UiDropdownMenuTrigger,
290
+ selector: "[uiDropdownMenuTrigger], ui-dropdown-menu-trigger"
291
+ },
292
+ {
293
+ kind: "directive",
294
+ type: i1.UiDropdownMenuContent,
295
+ selector: "[uiDropdownMenuContent], ui-dropdown-menu-content",
296
+ inputs: ["align"]
297
+ },
298
+ {
299
+ kind: "component",
300
+ type: i1.UiDropdownMenuCheckboxItem,
301
+ selector: "[uiDropdownMenuCheckboxItem], ui-dropdown-menu-checkbox-item",
302
+ inputs: ["checked", "inset"],
303
+ outputs: ["checkedChange"]
304
+ },
305
+ {
306
+ kind: "directive",
307
+ type: i1.UiDropdownMenuLabel,
308
+ selector: "[uiDropdownMenuLabel], ui-dropdown-menu-label",
309
+ inputs: ["inset", "class"]
310
+ },
311
+ {
312
+ kind: "directive",
313
+ type: i1.UiDropdownMenuSeparator,
314
+ selector: "[uiDropdownMenuSeparator], ui-dropdown-menu-separator",
315
+ inputs: ["class"]
316
+ }
317
+ ],
318
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
319
+ });
320
+ };
321
+ i0.ɵɵngDeclareClassMetadata({
322
+ minVersion: "12.0.0",
323
+ version: "22.2.2",
324
+ ngImport: i0,
325
+ type: UiDataTableViewOptions,
326
+ decorators: [{
327
+ type: Component,
328
+ args: [{
329
+ selector: "ui-data-table-view-options",
330
+ imports: [UiIconSvg, UI_DROPDOWN_MENU],
331
+ changeDetection: ChangeDetectionStrategy.OnPush,
332
+ host: {
333
+ "data-slot": "data-table-view-options",
334
+ class: "contents"
335
+ },
336
+ template: `
337
+ <div uiDropdownMenu class="contents">
338
+ <button type="button" uiDropdownMenuTrigger [class]="triggerClass">
339
+ <svg uiIcon="sliders-horizontal" class="size-4"></svg>
340
+ View
341
+ </button>
342
+ <div uiDropdownMenuContent align="end" class="w-40">
343
+ <div uiDropdownMenuLabel>Toggle columns</div>
344
+ <div uiDropdownMenuSeparator></div>
345
+ @for (col of columns(); track col.id) {
346
+ <div
347
+ uiDropdownMenuCheckboxItem
348
+ class="capitalize"
349
+ [checked]="col.getIsVisible()"
350
+ (checkedChange)="col.toggleVisibility($event)"
351
+ (select)="$event.preventDefault()"
352
+ >
353
+ {{ col.id }}
354
+ </div>
355
+ }
356
+ </div>
357
+ </div>
358
+ `
359
+ }]
360
+ }],
361
+ propDecorators: { table: [{
362
+ type: i0.Input,
363
+ args: [{
364
+ isSignal: true,
365
+ alias: "table",
366
+ required: true
367
+ }]
368
+ }] }
369
+ });
370
+ var UiDataTablePagination = class UiDataTablePagination {
371
+ table = input.required(...ngDevMode ? [{ debugName: "table" }] : /* istanbul ignore next */ []);
372
+ pageSizes = input([
373
+ 10,
374
+ 20,
375
+ 30,
376
+ 50
377
+ ], ...ngDevMode ? [{ debugName: "pageSizes" }] : /* istanbul ignore next */ []);
378
+ userClass = input("", {
379
+ ...ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {},
380
+ alias: "class"
381
+ });
382
+ btn = buttonVariants({
383
+ variant: "outline",
384
+ size: "sm"
385
+ });
386
+ classes = computed(() => cn("flex flex-wrap items-center justify-between gap-x-4 gap-y-3 px-2", this.userClass()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
387
+ static ɵfac = i0.ɵɵngDeclareFactory({
388
+ minVersion: "12.0.0",
389
+ version: "22.2.2",
390
+ ngImport: i0,
391
+ type: UiDataTablePagination,
392
+ deps: [],
393
+ target: i0.ɵɵFactoryTarget.Component
394
+ });
395
+ static ɵcmp = i0.ɵɵngDeclareComponent({
396
+ minVersion: "17.0.0",
397
+ version: "22.2.2",
398
+ type: UiDataTablePagination,
399
+ isStandalone: true,
400
+ selector: "ui-data-table-pagination",
401
+ inputs: {
402
+ table: {
403
+ classPropertyName: "table",
404
+ publicName: "table",
405
+ isSignal: true,
406
+ isRequired: true,
407
+ transformFunction: null
408
+ },
409
+ pageSizes: {
410
+ classPropertyName: "pageSizes",
411
+ publicName: "pageSizes",
412
+ isSignal: true,
413
+ isRequired: false,
414
+ transformFunction: null
415
+ },
416
+ userClass: {
417
+ classPropertyName: "userClass",
418
+ publicName: "class",
419
+ isSignal: true,
420
+ isRequired: false,
421
+ transformFunction: null
422
+ }
423
+ },
424
+ host: {
425
+ attributes: { "data-slot": "data-table-pagination" },
426
+ properties: { "attr.class": "classes()" }
427
+ },
428
+ ngImport: i0,
429
+ template: `
430
+ <div class="flex-1 text-sm text-muted-foreground">
431
+ {{ table().getFilteredSelectedRowModel().rows.length }} of {{ table().getFilteredRowModel().rows.length }} row(s) selected.
432
+ </div>
433
+ <div class="flex flex-wrap items-center gap-x-6 gap-y-3 lg:gap-x-8">
434
+ <label class="flex items-center gap-2 text-sm font-medium">
435
+ <span class="hidden sm:inline">Rows per page</span>
436
+ <select
437
+ class="h-8 rounded-lg border border-input bg-transparent px-2 text-sm outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50"
438
+ [value]="table().atoms.pagination.get().pageSize"
439
+ (change)="table().setPageSize(+$any($event.target).value)"
440
+ >
441
+ @for (s of pageSizes(); track s) {
442
+ <option [value]="s" [selected]="s === table().atoms.pagination.get().pageSize">{{ s }}</option>
443
+ }
444
+ </select>
445
+ </label>
446
+ <div class="flex min-w-24 items-center justify-center text-sm font-medium" aria-live="polite">
447
+ Page {{ table().atoms.pagination.get().pageIndex + 1 }} of {{ table().getPageCount() }}
448
+ </div>
449
+ <div class="flex items-center gap-2">
450
+ <button type="button" [class]="btn" [disabled]="!table().getCanPreviousPage()" (click)="table().previousPage()">Previous</button>
451
+ <button type="button" [class]="btn" [disabled]="!table().getCanNextPage()" (click)="table().nextPage()">Next</button>
452
+ </div>
453
+ </div>
454
+ `,
455
+ isInline: true,
456
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
457
+ });
458
+ };
459
+ i0.ɵɵngDeclareClassMetadata({
460
+ minVersion: "12.0.0",
461
+ version: "22.2.2",
462
+ ngImport: i0,
463
+ type: UiDataTablePagination,
464
+ decorators: [{
465
+ type: Component,
466
+ args: [{
467
+ selector: "ui-data-table-pagination",
468
+ changeDetection: ChangeDetectionStrategy.OnPush,
469
+ host: {
470
+ "data-slot": "data-table-pagination",
471
+ "[attr.class]": "classes()"
472
+ },
473
+ template: `
474
+ <div class="flex-1 text-sm text-muted-foreground">
475
+ {{ table().getFilteredSelectedRowModel().rows.length }} of {{ table().getFilteredRowModel().rows.length }} row(s) selected.
476
+ </div>
477
+ <div class="flex flex-wrap items-center gap-x-6 gap-y-3 lg:gap-x-8">
478
+ <label class="flex items-center gap-2 text-sm font-medium">
479
+ <span class="hidden sm:inline">Rows per page</span>
480
+ <select
481
+ class="h-8 rounded-lg border border-input bg-transparent px-2 text-sm outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50"
482
+ [value]="table().atoms.pagination.get().pageSize"
483
+ (change)="table().setPageSize(+$any($event.target).value)"
484
+ >
485
+ @for (s of pageSizes(); track s) {
486
+ <option [value]="s" [selected]="s === table().atoms.pagination.get().pageSize">{{ s }}</option>
487
+ }
488
+ </select>
489
+ </label>
490
+ <div class="flex min-w-24 items-center justify-center text-sm font-medium" aria-live="polite">
491
+ Page {{ table().atoms.pagination.get().pageIndex + 1 }} of {{ table().getPageCount() }}
492
+ </div>
493
+ <div class="flex items-center gap-2">
494
+ <button type="button" [class]="btn" [disabled]="!table().getCanPreviousPage()" (click)="table().previousPage()">Previous</button>
495
+ <button type="button" [class]="btn" [disabled]="!table().getCanNextPage()" (click)="table().nextPage()">Next</button>
496
+ </div>
497
+ </div>
498
+ `
499
+ }]
500
+ }],
501
+ propDecorators: {
502
+ table: [{
503
+ type: i0.Input,
504
+ args: [{
505
+ isSignal: true,
506
+ alias: "table",
507
+ required: true
508
+ }]
509
+ }],
510
+ pageSizes: [{
511
+ type: i0.Input,
512
+ args: [{
513
+ isSignal: true,
514
+ alias: "pageSizes",
515
+ required: false
516
+ }]
517
+ }],
518
+ userClass: [{
519
+ type: i0.Input,
520
+ args: [{
521
+ isSignal: true,
522
+ alias: "class",
523
+ required: false
524
+ }]
525
+ }]
526
+ }
527
+ });
528
+ const UI_DATA_TABLE = [
529
+ UiDataTableColumnHeader,
530
+ UiDataTableViewOptions,
531
+ UiDataTablePagination
532
+ ];
533
+ export { UI_DATA_TABLE, UiDataTableColumnHeader, UiDataTablePagination, UiDataTableViewOptions };
534
+
535
+ //# sourceMappingURL=loomui-ng-ui-data-table.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loomui-ng-ui-data-table.mjs","names":[],"sources":["../../../libs/ui/data-table/data-table.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { buttonVariants } from '@loomui-ng/ui/button';\nimport { UI_DROPDOWN_MENU } from '@loomui-ng/ui/dropdown-menu';\nimport { cn } from '@loomui-ng/ui/utils';\nimport { UiIconSvg } from '@loomui-ng/ui/icon';\n\n/**\n * shadcn's \"Data Table\" is a recipe, not a package component: TanStack Table (headless) + the Table primitives + a few\n * helpers (sortable column header, view options, pagination). This file ships those helpers for @tanstack/angular-table v9;\n * the table instance comes from `injectTable(...)` in your component, rendering uses `FlexRender` + `@loomui-ng/ui/table`.\n * The helpers accept the (signal-reactive) table/column and only call TanStack APIs, so they work with any feature set\n * that registers rowSortingFeature / columnVisibilityFeature / rowPaginationFeature / rowSelectionFeature.\n */\n\n/** Structural subsets of TanStack's Column/Table so the helpers accept any feature set without generic friction. */\nexport interface DataTableColumnLike {\n readonly id: string;\n accessorFn?: unknown;\n getCanSort(): boolean;\n getCanHide(): boolean;\n getIsSorted(): false | 'asc' | 'desc';\n getIsVisible(): boolean;\n toggleSorting(desc?: boolean, multi?: boolean): void;\n toggleVisibility(value?: boolean): void;\n}\nexport interface DataTableLike {\n getAllColumns(): DataTableColumnLike[];\n getFilteredSelectedRowModel(): { rows: unknown[] };\n getFilteredRowModel(): { rows: unknown[] };\n atoms: { pagination: { get(): { pageIndex: number; pageSize: number } } };\n setPageSize(size: number): void;\n getPageCount(): number;\n getCanPreviousPage(): boolean;\n getCanNextPage(): boolean;\n previousPage(): void;\n nextPage(): void;\n}\n\n\n/** Sortable column header: ghost button opening Asc / Desc / Hide (as in the shadcn data-table demo). */\n@Component({\n selector: 'ui-data-table-column-header',\n imports: [UiIconSvg, UI_DROPDOWN_MENU],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'data-slot': 'data-table-column-header', '[attr.class]': 'classes()' },\n template: `\n @if (column().getCanSort()) {\n <div uiDropdownMenu class=\"contents\">\n <button\n type=\"button\"\n uiDropdownMenuTrigger\n [class]=\"triggerClass\"\n [attr.data-sorted]=\"sorted() || null\"\n >\n <span>{{ title() }}</span>\n <svg [uiIcon]=\"sortIcon()\" class=\"size-3.5\"></svg>\n </button>\n <div uiDropdownMenuContent align=\"start\" class=\"w-32\">\n <div uiDropdownMenuItem (select)=\"column().toggleSorting(false)\">Asc</div>\n <div uiDropdownMenuItem (select)=\"column().toggleSorting(true)\">Desc</div>\n @if (column().getCanHide()) {\n <div uiDropdownMenuSeparator></div>\n <div uiDropdownMenuItem (select)=\"column().toggleVisibility(false)\">Hide</div>\n }\n </div>\n </div>\n } @else {\n <span>{{ title() }}</span>\n }\n `,\n})\nexport class UiDataTableColumnHeader {\n readonly column = input.required<DataTableColumnLike>();\n readonly title = input.required<string>();\n readonly userClass = input<string>('', { alias: 'class' });\n\n protected readonly sortIcon = computed(() => (this.sorted() === 'asc' ? 'arrow-up' : this.sorted() === 'desc' ? 'arrow-down' : 'chevrons-up-down'));\n protected readonly triggerClass = cn(buttonVariants({ variant: 'ghost', size: 'sm' }), '-ms-2 data-[sorted]:text-foreground');\n protected readonly sorted = computed(() => this.column().getIsSorted() || '');\n protected readonly classes = computed(() => cn('flex items-center', this.userClass()));\n}\n\n/** \"Columns\" dropdown listing every hideable column as a checkbox item. */\n@Component({\n selector: 'ui-data-table-view-options',\n imports: [UiIconSvg, UI_DROPDOWN_MENU],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'data-slot': 'data-table-view-options', class: 'contents' },\n template: `\n <div uiDropdownMenu class=\"contents\">\n <button type=\"button\" uiDropdownMenuTrigger [class]=\"triggerClass\">\n <svg uiIcon=\"sliders-horizontal\" class=\"size-4\"></svg>\n View\n </button>\n <div uiDropdownMenuContent align=\"end\" class=\"w-40\">\n <div uiDropdownMenuLabel>Toggle columns</div>\n <div uiDropdownMenuSeparator></div>\n @for (col of columns(); track col.id) {\n <div\n uiDropdownMenuCheckboxItem\n class=\"capitalize\"\n [checked]=\"col.getIsVisible()\"\n (checkedChange)=\"col.toggleVisibility($event)\"\n (select)=\"$event.preventDefault()\"\n >\n {{ col.id }}\n </div>\n }\n </div>\n </div>\n `,\n})\nexport class UiDataTableViewOptions {\n readonly table = input.required<DataTableLike>();\n protected readonly triggerClass = cn(buttonVariants({ variant: 'outline', size: 'sm' }), 'ms-auto hidden h-8 lg:flex');\n protected readonly columns = computed(() => this.table().getAllColumns().filter((c) => c.accessorFn !== undefined && c.getCanHide()));\n}\n\n/** Footer: \"N of M row(s) selected.\" + rows-per-page + Previous/Next (and page counter). */\n@Component({\n selector: 'ui-data-table-pagination',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'data-slot': 'data-table-pagination', '[attr.class]': 'classes()' },\n template: `\n <div class=\"flex-1 text-sm text-muted-foreground\">\n {{ table().getFilteredSelectedRowModel().rows.length }} of {{ table().getFilteredRowModel().rows.length }} row(s) selected.\n </div>\n <div class=\"flex flex-wrap items-center gap-x-6 gap-y-3 lg:gap-x-8\">\n <label class=\"flex items-center gap-2 text-sm font-medium\">\n <span class=\"hidden sm:inline\">Rows per page</span>\n <select\n class=\"h-8 rounded-lg border border-input bg-transparent px-2 text-sm outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50\"\n [value]=\"table().atoms.pagination.get().pageSize\"\n (change)=\"table().setPageSize(+$any($event.target).value)\"\n >\n @for (s of pageSizes(); track s) {\n <option [value]=\"s\" [selected]=\"s === table().atoms.pagination.get().pageSize\">{{ s }}</option>\n }\n </select>\n </label>\n <div class=\"flex min-w-24 items-center justify-center text-sm font-medium\" aria-live=\"polite\">\n Page {{ table().atoms.pagination.get().pageIndex + 1 }} of {{ table().getPageCount() }}\n </div>\n <div class=\"flex items-center gap-2\">\n <button type=\"button\" [class]=\"btn\" [disabled]=\"!table().getCanPreviousPage()\" (click)=\"table().previousPage()\">Previous</button>\n <button type=\"button\" [class]=\"btn\" [disabled]=\"!table().getCanNextPage()\" (click)=\"table().nextPage()\">Next</button>\n </div>\n </div>\n `,\n})\nexport class UiDataTablePagination {\n readonly table = input.required<DataTableLike>();\n readonly pageSizes = input<number[]>([10, 20, 30, 50]);\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly btn = buttonVariants({ variant: 'outline', size: 'sm' });\n protected readonly classes = computed(() => cn('flex flex-wrap items-center justify-between gap-x-4 gap-y-3 px-2', this.userClass()));\n}\n\nexport const UI_DATA_TABLE = [UiDataTableColumnHeader, UiDataTableViewOptions, UiDataTablePagination] as const;\n"],"mappings":"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"}