@lucca-front/ng 22.0.0-rc.4 → 22.0.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 (319) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/lucca-front-ng-a11y.mjs +10 -10
  3. package/fesm2022/lucca-front-ng-a11y.mjs.map +1 -1
  4. package/fesm2022/lucca-front-ng-activity-feed.mjs +14 -14
  5. package/fesm2022/lucca-front-ng-activity-feed.mjs.map +1 -1
  6. package/fesm2022/lucca-front-ng-api.mjs +40 -40
  7. package/fesm2022/lucca-front-ng-app-layout.mjs +7 -6
  8. package/fesm2022/lucca-front-ng-app-layout.mjs.map +1 -1
  9. package/fesm2022/lucca-front-ng-approbation-inbox.mjs +517 -0
  10. package/fesm2022/lucca-front-ng-approbation-inbox.mjs.map +1 -0
  11. package/fesm2022/lucca-front-ng-box.mjs +12 -12
  12. package/fesm2022/lucca-front-ng-box.mjs.map +1 -1
  13. package/fesm2022/lucca-front-ng-breadcrumbs.mjs +9 -9
  14. package/fesm2022/lucca-front-ng-breadcrumbs.mjs.map +1 -1
  15. package/fesm2022/lucca-front-ng-bubble-icon.mjs +4 -4
  16. package/fesm2022/lucca-front-ng-bubble-icon.mjs.map +1 -1
  17. package/fesm2022/lucca-front-ng-bubble-illustration.mjs +7 -6
  18. package/fesm2022/lucca-front-ng-bubble-illustration.mjs.map +1 -1
  19. package/fesm2022/lucca-front-ng-callout.mjs +38 -38
  20. package/fesm2022/lucca-front-ng-callout.mjs.map +1 -1
  21. package/fesm2022/lucca-front-ng-chip.mjs +10 -10
  22. package/fesm2022/lucca-front-ng-chip.mjs.map +1 -1
  23. package/fesm2022/lucca-front-ng-clear.mjs +7 -7
  24. package/fesm2022/lucca-front-ng-clear.mjs.map +1 -1
  25. package/fesm2022/lucca-front-ng-code.mjs +6 -5
  26. package/fesm2022/lucca-front-ng-code.mjs.map +1 -1
  27. package/fesm2022/lucca-front-ng-color.mjs +7 -6
  28. package/fesm2022/lucca-front-ng-color.mjs.map +1 -1
  29. package/fesm2022/lucca-front-ng-comment.mjs +18 -17
  30. package/fesm2022/lucca-front-ng-comment.mjs.map +1 -1
  31. package/fesm2022/lucca-front-ng-container.mjs +8 -7
  32. package/fesm2022/lucca-front-ng-container.mjs.map +1 -1
  33. package/fesm2022/lucca-front-ng-core-select-api.mjs +17 -40
  34. package/fesm2022/lucca-front-ng-core-select-api.mjs.map +1 -1
  35. package/fesm2022/lucca-front-ng-core-select-department.mjs +18 -20
  36. package/fesm2022/lucca-front-ng-core-select-department.mjs.map +1 -1
  37. package/fesm2022/lucca-front-ng-core-select-establishment.mjs +28 -16
  38. package/fesm2022/lucca-front-ng-core-select-establishment.mjs.map +1 -1
  39. package/fesm2022/lucca-front-ng-core-select-job-qualification.mjs +19 -9
  40. package/fesm2022/lucca-front-ng-core-select-job-qualification.mjs.map +1 -1
  41. package/fesm2022/lucca-front-ng-core-select-legal-units.mjs +34 -21
  42. package/fesm2022/lucca-front-ng-core-select-legal-units.mjs.map +1 -1
  43. package/fesm2022/lucca-front-ng-core-select-occupation-category.mjs +16 -6
  44. package/fesm2022/lucca-front-ng-core-select-occupation-category.mjs.map +1 -1
  45. package/fesm2022/lucca-front-ng-core-select-user.mjs +41 -36
  46. package/fesm2022/lucca-front-ng-core-select-user.mjs.map +1 -1
  47. package/fesm2022/lucca-front-ng-core-select.mjs +252 -114
  48. package/fesm2022/lucca-front-ng-core-select.mjs.map +1 -1
  49. package/fesm2022/lucca-front-ng-core.mjs +113 -38
  50. package/fesm2022/lucca-front-ng-core.mjs.map +1 -1
  51. package/fesm2022/lucca-front-ng-data-table.mjs +50 -50
  52. package/fesm2022/lucca-front-ng-data-table.mjs.map +1 -1
  53. package/fesm2022/lucca-front-ng-date.mjs +42 -43
  54. package/fesm2022/lucca-front-ng-date.mjs.map +1 -1
  55. package/fesm2022/lucca-front-ng-date2.mjs +50 -48
  56. package/fesm2022/lucca-front-ng-date2.mjs.map +1 -1
  57. package/fesm2022/lucca-front-ng-department.mjs +28 -27
  58. package/fesm2022/lucca-front-ng-department.mjs.map +1 -1
  59. package/fesm2022/lucca-front-ng-dialog.mjs +85 -59
  60. package/fesm2022/lucca-front-ng-dialog.mjs.map +1 -1
  61. package/fesm2022/lucca-front-ng-divider.mjs +9 -9
  62. package/fesm2022/lucca-front-ng-divider.mjs.map +1 -1
  63. package/fesm2022/lucca-front-ng-dropdown.mjs +46 -46
  64. package/fesm2022/lucca-front-ng-dropdown.mjs.map +1 -1
  65. package/fesm2022/lucca-front-ng-empty-state.mjs +56 -31
  66. package/fesm2022/lucca-front-ng-empty-state.mjs.map +1 -1
  67. package/fesm2022/lucca-front-ng-error-page.mjs +4 -4
  68. package/fesm2022/lucca-front-ng-error-page.mjs.map +1 -1
  69. package/fesm2022/lucca-front-ng-establishment.mjs +38 -37
  70. package/fesm2022/lucca-front-ng-establishment.mjs.map +1 -1
  71. package/fesm2022/lucca-front-ng-fancy-box.mjs +4 -4
  72. package/fesm2022/lucca-front-ng-fancy-box.mjs.map +1 -1
  73. package/fesm2022/lucca-front-ng-file-upload.mjs +86 -48
  74. package/fesm2022/lucca-front-ng-file-upload.mjs.map +1 -1
  75. package/fesm2022/lucca-front-ng-filter-pills.mjs +150 -27
  76. package/fesm2022/lucca-front-ng-filter-pills.mjs.map +1 -1
  77. package/fesm2022/lucca-front-ng-footer.mjs +10 -9
  78. package/fesm2022/lucca-front-ng-footer.mjs.map +1 -1
  79. package/fesm2022/lucca-front-ng-form-field.mjs +35 -36
  80. package/fesm2022/lucca-front-ng-form-field.mjs.map +1 -1
  81. package/fesm2022/lucca-front-ng-form-header.mjs +5 -5
  82. package/fesm2022/lucca-front-ng-form-header.mjs.map +1 -1
  83. package/fesm2022/lucca-front-ng-form-label.mjs +19 -52
  84. package/fesm2022/lucca-front-ng-form-label.mjs.map +1 -1
  85. package/fesm2022/lucca-front-ng-form.mjs +9 -8
  86. package/fesm2022/lucca-front-ng-form.mjs.map +1 -1
  87. package/fesm2022/lucca-front-ng-formly.mjs +64 -64
  88. package/fesm2022/lucca-front-ng-formly.mjs.map +1 -1
  89. package/fesm2022/lucca-front-ng-forms-phone-number-input.mjs +8 -8
  90. package/fesm2022/lucca-front-ng-forms-phone-number-input.mjs.map +1 -1
  91. package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-html.mjs +3 -3
  92. package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-markdown.mjs +6 -6
  93. package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-plain-text.mjs +3 -3
  94. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs +68 -55
  95. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs.map +1 -1
  96. package/fesm2022/lucca-front-ng-forms.mjs +127 -113
  97. package/fesm2022/lucca-front-ng-forms.mjs.map +1 -1
  98. package/fesm2022/lucca-front-ng-gauge.mjs +11 -11
  99. package/fesm2022/lucca-front-ng-gauge.mjs.map +1 -1
  100. package/fesm2022/lucca-front-ng-grid.mjs +18 -17
  101. package/fesm2022/lucca-front-ng-grid.mjs.map +1 -1
  102. package/fesm2022/lucca-front-ng-highlight-data.mjs +11 -18
  103. package/fesm2022/lucca-front-ng-highlight-data.mjs.map +1 -1
  104. package/fesm2022/lucca-front-ng-highlight-section.mjs +85 -0
  105. package/fesm2022/lucca-front-ng-highlight-section.mjs.map +1 -0
  106. package/fesm2022/lucca-front-ng-highlight-text.mjs +3 -3
  107. package/fesm2022/lucca-front-ng-horizontal-navigation.mjs +17 -17
  108. package/fesm2022/lucca-front-ng-horizontal-navigation.mjs.map +1 -1
  109. package/fesm2022/lucca-front-ng-impersonation.mjs +7 -7
  110. package/fesm2022/lucca-front-ng-impersonation.mjs.map +1 -1
  111. package/fesm2022/lucca-front-ng-index-table.mjs +50 -50
  112. package/fesm2022/lucca-front-ng-index-table.mjs.map +1 -1
  113. package/fesm2022/lucca-front-ng-inline-message.mjs +6 -6
  114. package/fesm2022/lucca-front-ng-inline-message.mjs.map +1 -1
  115. package/fesm2022/lucca-front-ng-input.mjs +22 -22
  116. package/fesm2022/lucca-front-ng-input.mjs.map +1 -1
  117. package/fesm2022/lucca-front-ng-link.mjs +24 -16
  118. package/fesm2022/lucca-front-ng-link.mjs.map +1 -1
  119. package/fesm2022/lucca-front-ng-listbox.mjs +67 -33
  120. package/fesm2022/lucca-front-ng-listbox.mjs.map +1 -1
  121. package/fesm2022/lucca-front-ng-listing.mjs +17 -16
  122. package/fesm2022/lucca-front-ng-listing.mjs.map +1 -1
  123. package/fesm2022/lucca-front-ng-loading.mjs +8 -8
  124. package/fesm2022/lucca-front-ng-loading.mjs.map +1 -1
  125. package/fesm2022/lucca-front-ng-main-layout.mjs +131 -15
  126. package/fesm2022/lucca-front-ng-main-layout.mjs.map +1 -1
  127. package/fesm2022/lucca-front-ng-mobile-push.mjs +3 -3
  128. package/fesm2022/lucca-front-ng-mobile-push.mjs.map +1 -1
  129. package/fesm2022/lucca-front-ng-modal.mjs +27 -27
  130. package/fesm2022/lucca-front-ng-modal.mjs.map +1 -1
  131. package/fesm2022/lucca-front-ng-multi-select.mjs +216 -135
  132. package/fesm2022/lucca-front-ng-multi-select.mjs.map +1 -1
  133. package/fesm2022/lucca-front-ng-new-badge.mjs +3 -3
  134. package/fesm2022/lucca-front-ng-number-format.mjs +6 -6
  135. package/fesm2022/lucca-front-ng-number.mjs +7 -7
  136. package/fesm2022/lucca-front-ng-numeric-badge.mjs +1 -84
  137. package/fesm2022/lucca-front-ng-numeric-badge.mjs.map +1 -1
  138. package/fesm2022/lucca-front-ng-option.mjs +145 -139
  139. package/fesm2022/lucca-front-ng-option.mjs.map +1 -1
  140. package/fesm2022/lucca-front-ng-page-header.mjs +8 -8
  141. package/fesm2022/lucca-front-ng-page-header.mjs.map +1 -1
  142. package/fesm2022/lucca-front-ng-pagination.mjs +13 -16
  143. package/fesm2022/lucca-front-ng-pagination.mjs.map +1 -1
  144. package/fesm2022/lucca-front-ng-plg-push.mjs +6 -6
  145. package/fesm2022/lucca-front-ng-plg-push.mjs.map +1 -1
  146. package/fesm2022/lucca-front-ng-popover.mjs +17 -17
  147. package/fesm2022/lucca-front-ng-popover2.mjs +15 -16
  148. package/fesm2022/lucca-front-ng-popover2.mjs.map +1 -1
  149. package/fesm2022/lucca-front-ng-popup.mjs +10 -10
  150. package/fesm2022/lucca-front-ng-progress-bar.mjs +8 -7
  151. package/fesm2022/lucca-front-ng-progress-bar.mjs.map +1 -1
  152. package/fesm2022/lucca-front-ng-progress-stepper.mjs +9 -9
  153. package/fesm2022/lucca-front-ng-progress-stepper.mjs.map +1 -1
  154. package/fesm2022/lucca-front-ng-read-more.mjs +17 -12
  155. package/fesm2022/lucca-front-ng-read-more.mjs.map +1 -1
  156. package/fesm2022/lucca-front-ng-resource-card.mjs +21 -20
  157. package/fesm2022/lucca-front-ng-resource-card.mjs.map +1 -1
  158. package/fesm2022/lucca-front-ng-safe-content.mjs +10 -10
  159. package/fesm2022/lucca-front-ng-scroll-box.mjs +6 -5
  160. package/fesm2022/lucca-front-ng-scroll-box.mjs.map +1 -1
  161. package/fesm2022/lucca-front-ng-scroll.mjs +9 -9
  162. package/fesm2022/lucca-front-ng-scroll.mjs.map +1 -1
  163. package/fesm2022/lucca-front-ng-segmented-control-tabs.mjs +12 -12
  164. package/fesm2022/lucca-front-ng-segmented-control-tabs.mjs.map +1 -1
  165. package/fesm2022/lucca-front-ng-segmented-control.mjs +17 -14
  166. package/fesm2022/lucca-front-ng-segmented-control.mjs.map +1 -1
  167. package/fesm2022/lucca-front-ng-select.mjs +22 -22
  168. package/fesm2022/lucca-front-ng-select.mjs.map +1 -1
  169. package/fesm2022/lucca-front-ng-sidepanel.mjs +7 -7
  170. package/fesm2022/lucca-front-ng-simple-select.mjs +53 -39
  171. package/fesm2022/lucca-front-ng-simple-select.mjs.map +1 -1
  172. package/fesm2022/lucca-front-ng-skeleton.mjs +1 -237
  173. package/fesm2022/lucca-front-ng-skeleton.mjs.map +1 -1
  174. package/fesm2022/lucca-front-ng-software-icon-wrapper.mjs +11 -11
  175. package/fesm2022/lucca-front-ng-software-icon-wrapper.mjs.map +1 -1
  176. package/fesm2022/lucca-front-ng-software-icon.mjs +8 -7
  177. package/fesm2022/lucca-front-ng-software-icon.mjs.map +1 -1
  178. package/fesm2022/lucca-front-ng-sortable-list.mjs +13 -13
  179. package/fesm2022/lucca-front-ng-sortable-list.mjs.map +1 -1
  180. package/fesm2022/lucca-front-ng-status-badge.mjs +6 -6
  181. package/fesm2022/lucca-front-ng-status-badge.mjs.map +1 -1
  182. package/fesm2022/lucca-front-ng-table-of-content.mjs +6 -6
  183. package/fesm2022/lucca-front-ng-tag.mjs +1 -72
  184. package/fesm2022/lucca-front-ng-tag.mjs.map +1 -1
  185. package/fesm2022/lucca-front-ng-text-flow.mjs +4 -4
  186. package/fesm2022/lucca-front-ng-text-flow.mjs.map +1 -1
  187. package/fesm2022/lucca-front-ng-time.mjs +46 -47
  188. package/fesm2022/lucca-front-ng-time.mjs.map +1 -1
  189. package/fesm2022/lucca-front-ng-title.mjs +24 -14
  190. package/fesm2022/lucca-front-ng-title.mjs.map +1 -1
  191. package/fesm2022/lucca-front-ng-toast.mjs +13 -14
  192. package/fesm2022/lucca-front-ng-toast.mjs.map +1 -1
  193. package/fesm2022/lucca-front-ng-tooltip.mjs +1 -556
  194. package/fesm2022/lucca-front-ng-tooltip.mjs.map +1 -1
  195. package/fesm2022/lucca-front-ng-tree-select.mjs +58 -42
  196. package/fesm2022/lucca-front-ng-tree-select.mjs.map +1 -1
  197. package/fesm2022/lucca-front-ng-user-popover.mjs +22 -19
  198. package/fesm2022/lucca-front-ng-user-popover.mjs.map +1 -1
  199. package/fesm2022/lucca-front-ng-user.mjs +75 -73
  200. package/fesm2022/lucca-front-ng-user.mjs.map +1 -1
  201. package/fesm2022/lucca-front-ng-vertical-navigation.mjs +21 -22
  202. package/fesm2022/lucca-front-ng-vertical-navigation.mjs.map +1 -1
  203. package/package.json +12 -4
  204. package/schematics/action-icon/migration.spec.js +2 -2
  205. package/schematics/alignment-utilities/migration.spec.js +2 -2
  206. package/schematics/cdn-urls/migration.spec.js +2 -2
  207. package/schematics/class-prefix/migration.spec.js +2 -2
  208. package/schematics/color-text/migration.spec.js +2 -2
  209. package/schematics/component-path/migration.spec.js +2 -2
  210. package/schematics/deprecated-resolver/migration.spec.js +1 -1
  211. package/schematics/empty-state-title/migration.spec.js +1 -1
  212. package/schematics/lib/migration-test.js +6 -1
  213. package/schematics/lu-button/migration.spec.js +1 -1
  214. package/schematics/lu-container/migration.spec.js +1 -1
  215. package/schematics/lu-grid/migration.js +24 -16
  216. package/schematics/lu-grid/migration.spec.js +1 -1
  217. package/schematics/lu-icon/migration.spec.js +1 -1
  218. package/schematics/lu-loading/migration.spec.js +1 -1
  219. package/schematics/lu-select/migration.spec.js +1 -1
  220. package/schematics/lu-text-input/migration.spec.js +1 -1
  221. package/schematics/new-icons/migration.spec.js +2 -2
  222. package/schematics/palettes/index.js +28 -8
  223. package/schematics/palettes/migration.spec.js +2 -2
  224. package/schematics/tokens-radius/migration.spec.js +2 -2
  225. package/schematics/tokens-spacing/migration.spec.js +2 -2
  226. package/schematics/tokens-typo/migration.spec.js +2 -2
  227. package/src/_components.scss +1 -0
  228. package/src/components/_listbox.scss +8 -0
  229. package/src/components/_picker.scss +0 -34
  230. package/src/components/_popover.scss +1 -1
  231. package/src/components/_popup.scss +6 -6
  232. package/src/components/_sidepanel.scss +1 -1
  233. package/src/definitions/option/_option-item.scss +1 -8
  234. package/title/README.md +22 -7
  235. package/types/lucca-front-ng-app-layout.d.ts +1 -1
  236. package/types/lucca-front-ng-approbation-inbox.d.ts +142 -0
  237. package/types/lucca-front-ng-box.d.ts +4 -4
  238. package/types/lucca-front-ng-breadcrumbs.d.ts +1 -1
  239. package/types/lucca-front-ng-bubble-icon.d.ts +1 -1
  240. package/types/lucca-front-ng-bubble-illustration.d.ts +1 -1
  241. package/types/lucca-front-ng-callout.d.ts +9 -9
  242. package/types/lucca-front-ng-chip.d.ts +3 -3
  243. package/types/lucca-front-ng-clear.d.ts +2 -2
  244. package/types/lucca-front-ng-code.d.ts +1 -1
  245. package/types/lucca-front-ng-color.d.ts +1 -1
  246. package/types/lucca-front-ng-comment.d.ts +6 -5
  247. package/types/lucca-front-ng-container.d.ts +2 -2
  248. package/types/lucca-front-ng-core-select-api.d.ts +10 -4
  249. package/types/lucca-front-ng-core-select-department.d.ts +2 -2
  250. package/types/lucca-front-ng-core-select-establishment.d.ts +3 -1
  251. package/types/lucca-front-ng-core-select-job-qualification.d.ts +2 -0
  252. package/types/lucca-front-ng-core-select-legal-units.d.ts +3 -1
  253. package/types/lucca-front-ng-core-select-occupation-category.d.ts +2 -0
  254. package/types/lucca-front-ng-core-select-user.d.ts +4 -3
  255. package/types/lucca-front-ng-core-select.d.ts +82 -16
  256. package/types/lucca-front-ng-core.d.ts +77 -3
  257. package/types/lucca-front-ng-data-table.d.ts +14 -14
  258. package/types/lucca-front-ng-date.d.ts +1 -1
  259. package/types/lucca-front-ng-date2.d.ts +19 -19
  260. package/types/lucca-front-ng-department.d.ts +2 -2
  261. package/types/lucca-front-ng-dialog.d.ts +7 -6
  262. package/types/lucca-front-ng-divider.d.ts +3 -3
  263. package/types/lucca-front-ng-dropdown.d.ts +2 -2
  264. package/types/lucca-front-ng-empty-state.d.ts +15 -6
  265. package/types/lucca-front-ng-establishment.d.ts +2 -2
  266. package/types/lucca-front-ng-file-upload.d.ts +22 -11
  267. package/types/lucca-front-ng-filter-pills.d.ts +43 -3
  268. package/types/lucca-front-ng-footer.d.ts +4 -4
  269. package/types/lucca-front-ng-form-field.d.ts +10 -10
  270. package/types/lucca-front-ng-form-header.d.ts +1 -1
  271. package/types/lucca-front-ng-form-label.d.ts +5 -9
  272. package/types/lucca-front-ng-form.d.ts +2 -2
  273. package/types/lucca-front-ng-forms-phone-number-input.d.ts +5 -5
  274. package/types/lucca-front-ng-forms-rich-text-input.d.ts +9 -5
  275. package/types/lucca-front-ng-forms.d.ts +50 -37
  276. package/types/lucca-front-ng-gauge.d.ts +6 -6
  277. package/types/lucca-front-ng-grid.d.ts +8 -8
  278. package/types/lucca-front-ng-highlight-data.d.ts +3 -5
  279. package/types/lucca-front-ng-highlight-section.d.ts +44 -0
  280. package/types/lucca-front-ng-horizontal-navigation.d.ts +4 -4
  281. package/types/lucca-front-ng-impersonation.d.ts +1 -1
  282. package/types/lucca-front-ng-index-table.d.ts +12 -12
  283. package/types/lucca-front-ng-inline-message.d.ts +1 -1
  284. package/types/lucca-front-ng-link.d.ts +4 -4
  285. package/types/lucca-front-ng-listbox.d.ts +33 -13
  286. package/types/lucca-front-ng-listing.d.ts +9 -9
  287. package/types/lucca-front-ng-loading.d.ts +3 -3
  288. package/types/lucca-front-ng-main-layout.d.ts +40 -9
  289. package/types/lucca-front-ng-modal.d.ts +1 -1
  290. package/types/lucca-front-ng-multi-select.d.ts +33 -7
  291. package/types/lucca-front-ng-numeric-badge.d.ts +1 -46
  292. package/types/lucca-front-ng-option.d.ts +2 -0
  293. package/types/lucca-front-ng-page-header.d.ts +2 -2
  294. package/types/lucca-front-ng-pagination.d.ts +5 -5
  295. package/types/lucca-front-ng-plg-push.d.ts +1 -1
  296. package/types/lucca-front-ng-popover2.d.ts +14 -14
  297. package/types/lucca-front-ng-progress-bar.d.ts +2 -2
  298. package/types/lucca-front-ng-progress-stepper.d.ts +1 -1
  299. package/types/lucca-front-ng-read-more.d.ts +9 -4
  300. package/types/lucca-front-ng-resource-card.d.ts +6 -6
  301. package/types/lucca-front-ng-scroll-box.d.ts +1 -1
  302. package/types/lucca-front-ng-scroll.d.ts +1 -1
  303. package/types/lucca-front-ng-segmented-control-tabs.d.ts +2 -2
  304. package/types/lucca-front-ng-segmented-control.d.ts +5 -3
  305. package/types/lucca-front-ng-select.d.ts +2 -1
  306. package/types/lucca-front-ng-simple-select.d.ts +6 -5
  307. package/types/lucca-front-ng-skeleton.d.ts +1 -158
  308. package/types/lucca-front-ng-software-icon-wrapper.d.ts +3 -3
  309. package/types/lucca-front-ng-software-icon.d.ts +2 -2
  310. package/types/lucca-front-ng-sortable-list.d.ts +5 -5
  311. package/types/lucca-front-ng-status-badge.d.ts +1 -1
  312. package/types/lucca-front-ng-tag.d.ts +1 -53
  313. package/types/lucca-front-ng-time.d.ts +17 -17
  314. package/types/lucca-front-ng-title.d.ts +4 -4
  315. package/types/lucca-front-ng-toast.d.ts +1 -1
  316. package/types/lucca-front-ng-tooltip.d.ts +1 -80
  317. package/types/lucca-front-ng-tree-select.d.ts +3 -4
  318. package/types/lucca-front-ng-user.d.ts +8 -6
  319. package/types/lucca-front-ng-vertical-navigation.d.ts +4 -4
@@ -1,10 +1,10 @@
1
1
  import * as i2 from '@angular/common';
2
2
  import { Location } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, Attribute, Directive, input, inject, Injector, ElementRef, booleanAttribute, effect, afterNextRender, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
4
+ import { InjectionToken, Attribute, Directive, input, inject, Injector, ElementRef, effect, afterNextRender, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
5
5
  import * as i1 from '@angular/router';
6
- import { RouterLink, Router, UrlTree } from '@angular/router';
7
- import { intlInputOptions } from '@lucca-front/ng/core';
6
+ import { RouterLink, Router, ActivatedRoute, UrlTree } from '@angular/router';
7
+ import { intlInputOptions, luBooleanAttribute } from '@lucca-front/ng/core';
8
8
  import { LU_INDEX_TABLE_INSTANCE } from '@lucca-front/ng/index-table';
9
9
  import { LU_DATA_TABLE_INSTANCE } from '@lucca-front/ng/data-table';
10
10
 
@@ -47,10 +47,10 @@ class LuRouterLink extends RouterLink {
47
47
  get publicReactiveHref() {
48
48
  return this.reactiveHref;
49
49
  }
50
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: LuRouterLink, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: 'tabindex', attribute: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.LocationStrategy }], target: i0.ɵɵFactoryTarget.Directive }); }
51
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: LuRouterLink, isStandalone: true, selector: "[luRouterLink]", usesInheritance: true, ngImport: i0 }); }
50
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: LuRouterLink, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: 'tabindex', attribute: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.LocationStrategy }], target: i0.ɵɵFactoryTarget.Directive }); }
51
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: LuRouterLink, isStandalone: true, selector: "[luRouterLink]", usesInheritance: true, ngImport: i0 }); }
52
52
  }
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: LuRouterLink, decorators: [{
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: LuRouterLink, decorators: [{
54
54
  type: Directive,
55
55
  args: [{
56
56
  selector: '[luRouterLink]',
@@ -63,6 +63,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
63
63
  class LinkComponent {
64
64
  #injector;
65
65
  #elementRef;
66
+ #activatedRoute;
66
67
  constructor() {
67
68
  this.intl = input(...intlInputOptions(LU_LINK_TRANSLATIONS), /* @ts-ignore */
68
69
  ...(ngDevMode ? [{ debugName: "intl" }] : /* istanbul ignore next */ []));
@@ -71,6 +72,7 @@ class LinkComponent {
71
72
  this.#elementRef = inject(ElementRef);
72
73
  this.router = inject(Router);
73
74
  this.location = inject(Location);
75
+ this.#activatedRoute = inject(ActivatedRoute, { optional: true });
74
76
  this.insideIndexTable = inject(LU_INDEX_TABLE_INSTANCE, { optional: true });
75
77
  this.insideDataTable = inject(LU_DATA_TABLE_INSTANCE, { optional: true });
76
78
  /**
@@ -84,19 +86,19 @@ class LinkComponent {
84
86
  /**
85
87
  * Disables the link
86
88
  */
87
- this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
89
+ this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: luBooleanAttribute });
88
90
  /**
89
91
  * Underlines the link only on hover
90
92
  */
91
- this.decorationHover = input(false, { ...(ngDevMode ? { debugName: "decorationHover" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
93
+ this.decorationHover = input(false, { ...(ngDevMode ? { debugName: "decorationHover" } : /* istanbul ignore next */ {}), transform: luBooleanAttribute });
92
94
  /**
93
95
  * Indicates that the link will open in a new tab
94
96
  */
95
- this.external = input(false, { ...(ngDevMode ? { debugName: "external" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
97
+ this.external = input(false, { ...(ngDevMode ? { debugName: "external" } : /* istanbul ignore next */ {}), transform: luBooleanAttribute });
96
98
  /**
97
99
  * External icon only visible on hover/focus
98
100
  */
99
- this.hiddenIcon = input(false, { ...(ngDevMode ? { debugName: "hiddenIcon" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
101
+ this.hiddenIcon = input(false, { ...(ngDevMode ? { debugName: "hiddenIcon" } : /* istanbul ignore next */ {}), transform: luBooleanAttribute });
100
102
  const href = this.luHref;
101
103
  effect(() => {
102
104
  if (href()) {
@@ -131,7 +133,7 @@ class LinkComponent {
131
133
  // Only non-anchor hosts (e.g. `button[luLink]`) need us to open the window programmatically.
132
134
  if (!this.disabled() && this.routerLinkCommands() && this.external() && !this.#isAnchor()) {
133
135
  const externalUrl = this.#serializeExternalUrl();
134
- afterNextRender(() => window.open(externalUrl, '_blank'), { injector: this.#injector });
136
+ afterNextRender(() => window.open(externalUrl ?? undefined, '_blank'), { injector: this.#injector });
135
137
  }
136
138
  }
137
139
  #isAnchor() {
@@ -145,18 +147,24 @@ class LinkComponent {
145
147
  const urlTree = routerLinkCommands instanceof UrlTree
146
148
  ? routerLinkCommands
147
149
  : this.router.createUrlTree(Array.isArray(routerLinkCommands) ? routerLinkCommands : [routerLinkCommands], {
150
+ // Resolve relative commands against the current route, like Angular's `RouterLink` does.
151
+ // An explicit `relativeTo` wins, including `null` which means "resolve from the root";
152
+ // only `undefined` falls back to the injected `ActivatedRoute`.
153
+ relativeTo: this.routerLink.relativeTo === undefined ? this.#activatedRoute : this.routerLink.relativeTo,
148
154
  queryParams: this.routerLink.queryParams,
149
155
  fragment: this.routerLink.fragment,
150
156
  queryParamsHandling: this.routerLink.queryParamsHandling,
151
157
  preserveFragment: this.routerLink.preserveFragment,
152
158
  });
153
159
  const serializedUrl = this.router.serializeUrl(urlTree);
154
- return Array.isArray(routerLinkCommands) ? this.location.prepareExternalUrl(serializedUrl) : serializedUrl;
160
+ // Apply the app's baseHref regardless of the commands' shape (string, array or `UrlTree`):
161
+ // they all describe an internal route, so the serialized URL must carry the baseHref.
162
+ return this.location.prepareExternalUrl(serializedUrl);
155
163
  }
156
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: LinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
157
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: LinkComponent, isStandalone: true, selector: "a[luLink], button[luLink]", inputs: { intl: { classPropertyName: "intl", publicName: "intl", isSignal: true, isRequired: false, transformFunction: null }, luHref: { classPropertyName: "luHref", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, routerLinkCommands: { classPropertyName: "routerLinkCommands", publicName: "luLink", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, decorationHover: { classPropertyName: "decorationHover", publicName: "decorationHover", isSignal: true, isRequired: false, transformFunction: null }, external: { classPropertyName: "external", publicName: "external", isSignal: true, isRequired: false, transformFunction: null }, hiddenIcon: { classPropertyName: "hiddenIcon", publicName: "hiddenIcon", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "redirect()" }, properties: { "attr.href": "routerLink.publicReactiveHref()", "class.mod-decorationHover": "decorationHover()", "class.mod-icon": "external()", "class.mod-hiddenIcon": "hiddenIcon() || (this.insideIndexTable && external()) || (this.insideDataTable && external())", "class.is-disabled": "this.disabled()", "attr.rel": "external() && !disabled() ? \"noopener noreferrer\" : null", "attr.target": "external() && !disabled() ? \"_blank\" : null", "attr.role": "disabled() ? \"presentation\" : null" }, classAttribute: "link" }, hostDirectives: [{ directive: LuRouterLink, inputs: ["preserveFragment", "preserveFragment", "skipLocationChange", "skipLocationChange", "replaceUrl", "replaceUrl", "queryParams", "queryParams", "fragment", "fragment", "queryParamsHandling", "queryParamsHandling", "state", "state", "info", "info", "relativeTo", "relativeTo"] }], ngImport: i0, template: "<span class=\"link-text\"><ng-content /></span>\n@if (external()) {\n\t<span class=\"link-icon\">\n\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowExternal\"></span>\n\t</span>\n\t<span class=\"pr-u-mask\">{{ intl().external }}</span>\n}\n", styles: ["@charset \"UTF-8\";@layer components{.link{--components-link-textDecoration: underline;--components-link-text-textDecoration: underline;--components-link-color: var(--commons-text-link-color);--components-link-color-hover: var(--commons-text-link-hover);--components-link-cursor: pointer;--components-link-icon-marginInlineStart: 0;--components-link-icon-opacity: 1;background-color:transparent;color:var(--components-link-color);cursor:var(--components-link-cursor);font-family:inherit;border:0;margin:0;padding:0;text-decoration:var(--components-link-textDecoration)}.link:not(:disabled,.is-disabled):hover{color:var(--components-link-color-hover)}.link:not(:disabled,.is-disabled):focus-visible{outline:2px solid var(--palettes-700, var(--palettes-product-700));outline-offset:2px;border-radius:var(--pr-t-border-radius-small)}.link .lucca-icon{text-decoration:none;font-size:1em;vertical-align:baseline;position:relative;top:.075rem;margin-inline-start:var(--components-link-icon-marginInlineStart)}.link .link-text{text-decoration:var(--components-link-text-textDecoration)}.link-icon{white-space:nowrap;opacity:var(--components-link-icon-opacity);transition-property:opacity;transition-duration:var(--commons-animations-durations-fast)}.link-icon:before{content:\"\\a0\"/\"\"}}@layer mods{.link.mod-decorationHover{--components-link-textDecoration: none;--components-link-text-textDecoration: none}.link.mod-decorationHover:hover{--components-link-text-textDecoration: underline}.link.mod-decorationHover:hover:not(:has(.link-text)){--components-link-textDecoration: underline}@media not (any-pointer:coarse){.link.mod-hiddenIcon:not(:hover,:focus-visible){--components-link-icon-opacity: 0}}.link:is(:disabled,.is-disabled){--components-link-color: var(--pr-t-color-text-disabled);--components-link-cursor: not-allowed}.link:has(.link-text){--components-link-textDecoration: none}.link:not(:has(.link-icon)){--components-link-icon-marginInlineStart: .2em}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
164
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: LinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
165
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: LinkComponent, isStandalone: true, selector: "a[luLink], button[luLink]", inputs: { intl: { classPropertyName: "intl", publicName: "intl", isSignal: true, isRequired: false, transformFunction: null }, luHref: { classPropertyName: "luHref", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, routerLinkCommands: { classPropertyName: "routerLinkCommands", publicName: "luLink", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, decorationHover: { classPropertyName: "decorationHover", publicName: "decorationHover", isSignal: true, isRequired: false, transformFunction: null }, external: { classPropertyName: "external", publicName: "external", isSignal: true, isRequired: false, transformFunction: null }, hiddenIcon: { classPropertyName: "hiddenIcon", publicName: "hiddenIcon", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "redirect()" }, properties: { "attr.href": "routerLink.publicReactiveHref()", "class.mod-decorationHover": "decorationHover()", "class.mod-icon": "external()", "class.mod-hiddenIcon": "hiddenIcon() || (this.insideIndexTable && external()) || (this.insideDataTable && external())", "class.is-disabled": "this.disabled()", "attr.rel": "external() && !disabled() ? \"noopener noreferrer\" : null", "attr.target": "external() && !disabled() ? \"_blank\" : null", "attr.role": "disabled() ? \"presentation\" : null" }, classAttribute: "link" }, hostDirectives: [{ directive: LuRouterLink, inputs: ["preserveFragment", "preserveFragment", "skipLocationChange", "skipLocationChange", "replaceUrl", "replaceUrl", "queryParams", "queryParams", "fragment", "fragment", "queryParamsHandling", "queryParamsHandling", "state", "state", "info", "info", "relativeTo", "relativeTo"] }], ngImport: i0, template: "<span class=\"link-text\"><ng-content /></span>\n@if (external()) {\n\t<span class=\"link-icon\">\n\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowExternal\"></span>\n\t</span>\n\t<span class=\"pr-u-mask\">{{ intl().external }}</span>\n}\n", styles: ["@charset \"UTF-8\";@layer components{.link{--components-link-textDecoration: underline;--components-link-text-textDecoration: underline;--components-link-color: var(--commons-text-link-color);--components-link-color-hover: var(--commons-text-link-hover);--components-link-cursor: pointer;--components-link-icon-marginInlineStart: 0;--components-link-icon-opacity: 1;background-color:transparent;color:var(--components-link-color);cursor:var(--components-link-cursor);font-family:inherit;border:0;margin:0;padding:0;text-decoration:var(--components-link-textDecoration)}.link:not(:disabled,.is-disabled):hover{color:var(--components-link-color-hover)}.link:not(:disabled,.is-disabled):focus-visible{outline:2px solid var(--palettes-700, var(--palettes-product-700));outline-offset:2px;border-radius:var(--pr-t-border-radius-small)}.link .lucca-icon{text-decoration:none;font-size:1em;vertical-align:baseline;position:relative;inset-block-start:.075rem;margin-inline-start:var(--components-link-icon-marginInlineStart)}.link .link-text{text-decoration:var(--components-link-text-textDecoration)}.link-icon{white-space:nowrap;opacity:var(--components-link-icon-opacity);transition-property:opacity;transition-duration:var(--commons-animations-durations-fast)}.link-icon:before{content:\"\\a0\"/\"\"}}@layer mods{.link.mod-decorationHover{--components-link-textDecoration: none;--components-link-text-textDecoration: none}.link.mod-decorationHover:hover{--components-link-text-textDecoration: underline}.link.mod-decorationHover:hover:not(:has(.link-text)){--components-link-textDecoration: underline}@media not (any-pointer:coarse){.link.mod-hiddenIcon:not(:hover,:focus-visible){--components-link-icon-opacity: 0}}.link:is(:disabled,.is-disabled){--components-link-color: var(--pr-t-color-text-disabled);--components-link-cursor: not-allowed}.link:has(.link-text){--components-link-textDecoration: none}.link:not(:has(.link-icon)){--components-link-icon-marginInlineStart: .2em}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
158
166
  }
159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: LinkComponent, decorators: [{
167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: LinkComponent, decorators: [{
160
168
  type: Component,
161
169
  args: [{ selector: 'a[luLink], button[luLink]', standalone: true, encapsulation: ViewEncapsulation.None, host: {
162
170
  class: 'link',
@@ -174,7 +182,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
174
182
  directive: LuRouterLink,
175
183
  inputs: ['preserveFragment', 'skipLocationChange', 'replaceUrl', 'queryParams', 'fragment', 'queryParamsHandling', 'state', 'info', 'relativeTo'],
176
184
  },
177
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"link-text\"><ng-content /></span>\n@if (external()) {\n\t<span class=\"link-icon\">\n\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowExternal\"></span>\n\t</span>\n\t<span class=\"pr-u-mask\">{{ intl().external }}</span>\n}\n", styles: ["@charset \"UTF-8\";@layer components{.link{--components-link-textDecoration: underline;--components-link-text-textDecoration: underline;--components-link-color: var(--commons-text-link-color);--components-link-color-hover: var(--commons-text-link-hover);--components-link-cursor: pointer;--components-link-icon-marginInlineStart: 0;--components-link-icon-opacity: 1;background-color:transparent;color:var(--components-link-color);cursor:var(--components-link-cursor);font-family:inherit;border:0;margin:0;padding:0;text-decoration:var(--components-link-textDecoration)}.link:not(:disabled,.is-disabled):hover{color:var(--components-link-color-hover)}.link:not(:disabled,.is-disabled):focus-visible{outline:2px solid var(--palettes-700, var(--palettes-product-700));outline-offset:2px;border-radius:var(--pr-t-border-radius-small)}.link .lucca-icon{text-decoration:none;font-size:1em;vertical-align:baseline;position:relative;top:.075rem;margin-inline-start:var(--components-link-icon-marginInlineStart)}.link .link-text{text-decoration:var(--components-link-text-textDecoration)}.link-icon{white-space:nowrap;opacity:var(--components-link-icon-opacity);transition-property:opacity;transition-duration:var(--commons-animations-durations-fast)}.link-icon:before{content:\"\\a0\"/\"\"}}@layer mods{.link.mod-decorationHover{--components-link-textDecoration: none;--components-link-text-textDecoration: none}.link.mod-decorationHover:hover{--components-link-text-textDecoration: underline}.link.mod-decorationHover:hover:not(:has(.link-text)){--components-link-textDecoration: underline}@media not (any-pointer:coarse){.link.mod-hiddenIcon:not(:hover,:focus-visible){--components-link-icon-opacity: 0}}.link:is(:disabled,.is-disabled){--components-link-color: var(--pr-t-color-text-disabled);--components-link-cursor: not-allowed}.link:has(.link-text){--components-link-textDecoration: none}.link:not(:has(.link-icon)){--components-link-icon-marginInlineStart: .2em}}\n"] }]
185
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"link-text\"><ng-content /></span>\n@if (external()) {\n\t<span class=\"link-icon\">\n\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowExternal\"></span>\n\t</span>\n\t<span class=\"pr-u-mask\">{{ intl().external }}</span>\n}\n", styles: ["@charset \"UTF-8\";@layer components{.link{--components-link-textDecoration: underline;--components-link-text-textDecoration: underline;--components-link-color: var(--commons-text-link-color);--components-link-color-hover: var(--commons-text-link-hover);--components-link-cursor: pointer;--components-link-icon-marginInlineStart: 0;--components-link-icon-opacity: 1;background-color:transparent;color:var(--components-link-color);cursor:var(--components-link-cursor);font-family:inherit;border:0;margin:0;padding:0;text-decoration:var(--components-link-textDecoration)}.link:not(:disabled,.is-disabled):hover{color:var(--components-link-color-hover)}.link:not(:disabled,.is-disabled):focus-visible{outline:2px solid var(--palettes-700, var(--palettes-product-700));outline-offset:2px;border-radius:var(--pr-t-border-radius-small)}.link .lucca-icon{text-decoration:none;font-size:1em;vertical-align:baseline;position:relative;inset-block-start:.075rem;margin-inline-start:var(--components-link-icon-marginInlineStart)}.link .link-text{text-decoration:var(--components-link-text-textDecoration)}.link-icon{white-space:nowrap;opacity:var(--components-link-icon-opacity);transition-property:opacity;transition-duration:var(--commons-animations-durations-fast)}.link-icon:before{content:\"\\a0\"/\"\"}}@layer mods{.link.mod-decorationHover{--components-link-textDecoration: none;--components-link-text-textDecoration: none}.link.mod-decorationHover:hover{--components-link-text-textDecoration: underline}.link.mod-decorationHover:hover:not(:has(.link-text)){--components-link-textDecoration: underline}@media not (any-pointer:coarse){.link.mod-hiddenIcon:not(:hover,:focus-visible){--components-link-icon-opacity: 0}}.link:is(:disabled,.is-disabled){--components-link-color: var(--pr-t-color-text-disabled);--components-link-cursor: not-allowed}.link:has(.link-text){--components-link-textDecoration: none}.link:not(:has(.link-icon)){--components-link-icon-marginInlineStart: .2em}}\n"] }]
178
186
  }], ctorParameters: () => [], propDecorators: { intl: [{ type: i0.Input, args: [{ isSignal: true, alias: "intl", required: false }] }], luHref: [{ type: i0.Input, args: [{ isSignal: true, alias: "href", required: false }] }], routerLinkCommands: [{ type: i0.Input, args: [{ isSignal: true, alias: "luLink", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], decorationHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "decorationHover", required: false }] }], external: [{ type: i0.Input, args: [{ isSignal: true, alias: "external", required: false }] }], hiddenIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "hiddenIcon", required: false }] }] } });
179
187
 
180
188
  const LU_LINK_INSTANCE = new InjectionToken('LU_LINK_INSTANCE');
@@ -1 +1 @@
1
- {"version":3,"file":"lucca-front-ng-link.mjs","sources":["../../../packages/ng/link/translations.ts","../../../packages/ng/link/link.translate.ts","../../../packages/ng/link/lu-router-link.ts","../../../packages/ng/link/link.component.ts","../../../packages/ng/link/link.component.html","../../../packages/ng/link/link.token.ts","../../../packages/ng/link/lucca-front-ng-link.ts"],"sourcesContent":["export const Translations = {\n\ten: {\n\t\texternal: '(Open in a new window.)',\n\t},\n\tde: {\n\t\texternal: '(In einem neuen Fenster öffnen.)',\n\t},\n\tfr: {\n\t\texternal: '(Ouvrir dans une nouvelle fenêtre.)',\n\t},\n\tit: {\n\t\texternal: '(Aprire in una nuova finestra.)',\n\t},\n\tnl: {\n\t\texternal: '(Open in een nieuw venster.)',\n\t},\n\tes: {\n\t\texternal: '(Abrir en una nueva ventana.)',\n\t},\n\tpt: {\n\t\texternal: '(Abrir numa nova janela.)',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_LINK_TRANSLATIONS = new InjectionToken('luLinkTranslations', {\n\tfactory: () => luLinkTranslations,\n});\n\nexport interface LinkTranslate {\n\texternal: string;\n}\n\nexport const luLinkTranslations: LuTranslation<LinkTranslate> = Translations;\n","import { LocationStrategy } from '@angular/common';\nimport { Attribute, Directive, ElementRef, Renderer2, WritableSignal } from '@angular/core';\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\n\n@Directive({\n\tselector: '[luRouterLink]',\n})\nexport class LuRouterLink extends RouterLink {\n\t// Workaround for a storybook bug = implement the constructor https://github.com/storybookjs/storybook/issues/23534#issuecomment-2042888436\n\tconstructor(router: Router, route: ActivatedRoute, @Attribute('tabindex') tabIndexAttribute: string | null | undefined, renderer: Renderer2, el: ElementRef, locationStrategy?: LocationStrategy) {\n\t\tsuper(router, route, tabIndexAttribute, renderer, el, locationStrategy);\n\t}\n\n\t// With angular 20, RouterLink changed to use an internal, protected, readonly signal that is directly bound to `attr.href`, breaking any possibility to override it\n\t// So we had to do this to expose it to our `luLink` component.\n\tget publicReactiveHref(): WritableSignal<string | null> {\n\t\treturn this.reactiveHref;\n\t}\n}\n","import { Location } from '@angular/common';\nimport { afterNextRender, booleanAttribute, ChangeDetectionStrategy, Component, effect, ElementRef, inject, Injector, input, ViewEncapsulation } from '@angular/core';\nimport { Router, UrlTree } from '@angular/router';\nimport { intlInputOptions } from '@lucca-front/ng/core';\nimport { LU_INDEX_TABLE_INSTANCE } from '@lucca-front/ng/index-table';\n\nimport { LU_DATA_TABLE_INSTANCE } from '@lucca-front/ng/data-table';\nimport { LU_LINK_TRANSLATIONS } from './link.translate';\nimport { LuRouterLink } from './lu-router-link';\n\n@Component({\n\t// eslint-disable-next-line @angular-eslint/component-selector\n\tselector: 'a[luLink], button[luLink]',\n\tstandalone: true,\n\ttemplateUrl: './link.component.html',\n\tstyleUrl: './link.component.scss',\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\tclass: 'link',\n\t\t'[attr.href]': 'routerLink.publicReactiveHref()',\n\t\t'[class.mod-decorationHover]': 'decorationHover()',\n\t\t'[class.mod-icon]': 'external()',\n\t\t'[class.mod-hiddenIcon]': 'hiddenIcon() || (this.insideIndexTable && external()) || (this.insideDataTable && external())',\n\t\t'[class.is-disabled]': 'this.disabled()',\n\t\t'[attr.rel]': 'external() && !disabled() ? \"noopener noreferrer\" : null',\n\t\t'[attr.target]': 'external() && !disabled() ? \"_blank\" : null',\n\t\t'[attr.role]': 'disabled() ? \"presentation\" : null',\n\t\t'(click)': 'redirect()',\n\t},\n\thostDirectives: [\n\t\t{\n\t\t\tdirective: LuRouterLink,\n\t\t\tinputs: ['preserveFragment', 'skipLocationChange', 'replaceUrl', 'queryParams', 'fragment', 'queryParamsHandling', 'state', 'info', 'relativeTo'],\n\t\t},\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LinkComponent {\n\treadonly intl = input(...intlInputOptions(LU_LINK_TRANSLATIONS));\n\treadonly routerLink = inject(LuRouterLink);\n\t#injector = inject(Injector);\n\t#elementRef = inject(ElementRef);\n\treadonly router = inject(Router);\n\treadonly location = inject(Location);\n\treadonly insideIndexTable = inject(LU_INDEX_TABLE_INSTANCE, { optional: true });\n\treadonly insideDataTable = inject(LU_DATA_TABLE_INSTANCE, { optional: true });\n\n\t/**\n\t * Target page address. Use only for external links or pages not recognized by the router.\n\t */\n\treadonly luHref = input('', { alias: 'href' });\n\n\t/**\n\t * Target page address\n\t */\n\treadonly routerLinkCommands = input<LuRouterLink['routerLink'] | null>(null, { alias: 'luLink' });\n\n\t/**\n\t * Disables the link\n\t */\n\treadonly disabled = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Underlines the link only on hover\n\t */\n\treadonly decorationHover = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Indicates that the link will open in a new tab\n\t */\n\treadonly external = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * External icon only visible on hover/focus\n\t */\n\treadonly hiddenIcon = input(false, { transform: booleanAttribute });\n\n\threfBackup: string;\n\n\tconstructor() {\n\t\tconst href = this.luHref;\n\n\t\teffect(() => {\n\t\t\tif (href()) {\n\t\t\t\tthis.hrefBackup = href();\n\t\t\t\tthis.routerLink.publicReactiveHref.set(this.hrefBackup);\n\t\t\t}\n\t\t\tif (this.disabled()) {\n\t\t\t\tif (this.routerLinkCommands()) {\n\t\t\t\t\tthis.routerLink.routerLink = null;\n\t\t\t\t}\n\t\t\t\tthis.routerLink.publicReactiveHref.set(null);\n\t\t\t} else if (this.routerLinkCommands() && !this.external()) {\n\t\t\t\tthis.routerLink.routerLink = this.routerLinkCommands();\n\t\t\t\t// We need to do this in order to have `routerLink` update the value for `href`:\n\t\t\t\t// See https://github.com/angular/angular/blob/main/packages/router/src/directives/router_link.ts#L281\n\t\t\t\tthis.routerLink.ngOnChanges({});\n\t\t\t} else if (this.routerLinkCommands() && this.external()) {\n\t\t\t\t// External router links must not wire up the `RouterLink` directive (it would navigate in-place),\n\t\t\t\t// but they still need an `href` so the anchor is keyboard-focusable and its destination is previewable.\n\t\t\t\t// Actual navigation is handled natively by `target=\"_blank\"` (anchors) or by `redirect()` (buttons).\n\t\t\t\tthis.routerLink.publicReactiveHref.set(this.#serializeExternalUrl());\n\t\t\t} else if (!href() && this.hrefBackup) {\n\t\t\t\tthis.routerLink.publicReactiveHref.set(this.hrefBackup);\n\t\t\t}\n\t\t});\n\t}\n\n\tredirect(): void {\n\t\t// Anchors carry an `href` with `target=\"_blank\"`, so the browser opens the new tab natively.\n\t\t// Only non-anchor hosts (e.g. `button[luLink]`) need us to open the window programmatically.\n\t\tif (!this.disabled() && this.routerLinkCommands() && this.external() && !this.#isAnchor()) {\n\t\t\tconst externalUrl = this.#serializeExternalUrl();\n\t\t\tafterNextRender(() => window.open(externalUrl, '_blank'), { injector: this.#injector });\n\t\t}\n\t}\n\n\t#isAnchor(): boolean {\n\t\treturn (this.#elementRef.nativeElement as HTMLElement).tagName === 'A';\n\t}\n\n\t#serializeExternalUrl(): string | null {\n\t\tconst routerLinkCommands = this.routerLinkCommands();\n\t\tif (!routerLinkCommands) {\n\t\t\treturn null;\n\t\t}\n\t\tconst urlTree =\n\t\t\trouterLinkCommands instanceof UrlTree\n\t\t\t\t? routerLinkCommands\n\t\t\t\t: this.router.createUrlTree(Array.isArray(routerLinkCommands) ? routerLinkCommands : [routerLinkCommands], {\n\t\t\t\t\t\tqueryParams: this.routerLink.queryParams,\n\t\t\t\t\t\tfragment: this.routerLink.fragment,\n\t\t\t\t\t\tqueryParamsHandling: this.routerLink.queryParamsHandling,\n\t\t\t\t\t\tpreserveFragment: this.routerLink.preserveFragment,\n\t\t\t\t\t});\n\t\tconst serializedUrl = this.router.serializeUrl(urlTree);\n\t\treturn Array.isArray(routerLinkCommands) ? this.location.prepareExternalUrl(serializedUrl) : serializedUrl;\n\t}\n}\n","<span class=\"link-text\"><ng-content /></span>\n@if (external()) {\n\t<span class=\"link-icon\">\n\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowExternal\"></span>\n\t</span>\n\t<span class=\"pr-u-mask\">{{ intl().external }}</span>\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const LU_LINK_INSTANCE = new InjectionToken<boolean>('LU_LINK_INSTANCE');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lucca-front-ng-link.mjs","sources":["../../../packages/ng/link/translations.ts","../../../packages/ng/link/link.translate.ts","../../../packages/ng/link/lu-router-link.ts","../../../packages/ng/link/link.component.ts","../../../packages/ng/link/link.component.html","../../../packages/ng/link/link.token.ts","../../../packages/ng/link/lucca-front-ng-link.ts"],"sourcesContent":["export const Translations = {\n\ten: {\n\t\texternal: '(Open in a new window.)',\n\t},\n\tde: {\n\t\texternal: '(In einem neuen Fenster öffnen.)',\n\t},\n\tfr: {\n\t\texternal: '(Ouvrir dans une nouvelle fenêtre.)',\n\t},\n\tit: {\n\t\texternal: '(Aprire in una nuova finestra.)',\n\t},\n\tnl: {\n\t\texternal: '(Open in een nieuw venster.)',\n\t},\n\tes: {\n\t\texternal: '(Abrir en una nueva ventana.)',\n\t},\n\tpt: {\n\t\texternal: '(Abrir numa nova janela.)',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_LINK_TRANSLATIONS = new InjectionToken('luLinkTranslations', {\n\tfactory: () => luLinkTranslations,\n});\n\nexport interface LinkTranslate {\n\texternal: string;\n}\n\nexport const luLinkTranslations: LuTranslation<LinkTranslate> = Translations;\n","import { LocationStrategy } from '@angular/common';\nimport { Attribute, Directive, ElementRef, Renderer2, WritableSignal } from '@angular/core';\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\n\n@Directive({\n\tselector: '[luRouterLink]',\n})\nexport class LuRouterLink extends RouterLink {\n\t// Workaround for a storybook bug = implement the constructor https://github.com/storybookjs/storybook/issues/23534#issuecomment-2042888436\n\tconstructor(router: Router, route: ActivatedRoute, @Attribute('tabindex') tabIndexAttribute: string | null | undefined, renderer: Renderer2, el: ElementRef, locationStrategy?: LocationStrategy) {\n\t\tsuper(router, route, tabIndexAttribute, renderer, el, locationStrategy);\n\t}\n\n\t// With angular 20, RouterLink changed to use an internal, protected, readonly signal that is directly bound to `attr.href`, breaking any possibility to override it\n\t// So we had to do this to expose it to our `luLink` component.\n\tget publicReactiveHref(): WritableSignal<string | null> {\n\t\treturn this.reactiveHref;\n\t}\n}\n","import { Location } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, effect, ElementRef, inject, Injector, input, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute, Router, UrlTree } from '@angular/router';\nimport { intlInputOptions, luBooleanAttribute } from '@lucca-front/ng/core';\nimport { LU_INDEX_TABLE_INSTANCE } from '@lucca-front/ng/index-table';\n\nimport { LU_DATA_TABLE_INSTANCE } from '@lucca-front/ng/data-table';\nimport { LU_LINK_TRANSLATIONS } from './link.translate';\nimport { LuRouterLink } from './lu-router-link';\n\n@Component({\n\t// eslint-disable-next-line @angular-eslint/component-selector\n\tselector: 'a[luLink], button[luLink]',\n\tstandalone: true,\n\ttemplateUrl: './link.component.html',\n\tstyleUrl: './link.component.scss',\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\tclass: 'link',\n\t\t'[attr.href]': 'routerLink.publicReactiveHref()',\n\t\t'[class.mod-decorationHover]': 'decorationHover()',\n\t\t'[class.mod-icon]': 'external()',\n\t\t'[class.mod-hiddenIcon]': 'hiddenIcon() || (this.insideIndexTable && external()) || (this.insideDataTable && external())',\n\t\t'[class.is-disabled]': 'this.disabled()',\n\t\t'[attr.rel]': 'external() && !disabled() ? \"noopener noreferrer\" : null',\n\t\t'[attr.target]': 'external() && !disabled() ? \"_blank\" : null',\n\t\t'[attr.role]': 'disabled() ? \"presentation\" : null',\n\t\t'(click)': 'redirect()',\n\t},\n\thostDirectives: [\n\t\t{\n\t\t\tdirective: LuRouterLink,\n\t\t\tinputs: ['preserveFragment', 'skipLocationChange', 'replaceUrl', 'queryParams', 'fragment', 'queryParamsHandling', 'state', 'info', 'relativeTo'],\n\t\t},\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LinkComponent {\n\treadonly intl = input(...intlInputOptions(LU_LINK_TRANSLATIONS));\n\treadonly routerLink = inject(LuRouterLink);\n\t#injector = inject(Injector);\n\t#elementRef = inject(ElementRef);\n\treadonly router = inject(Router);\n\treadonly location = inject(Location);\n\treadonly #activatedRoute = inject(ActivatedRoute, { optional: true });\n\treadonly insideIndexTable = inject(LU_INDEX_TABLE_INSTANCE, { optional: true });\n\treadonly insideDataTable = inject(LU_DATA_TABLE_INSTANCE, { optional: true });\n\n\t/**\n\t * Target page address. Use only for external links or pages not recognized by the router.\n\t */\n\treadonly luHref = input('', { alias: 'href' });\n\n\t/**\n\t * Target page address\n\t */\n\treadonly routerLinkCommands = input<LuRouterLink['routerLink'] | null>(null, { alias: 'luLink' });\n\n\t/**\n\t * Disables the link\n\t */\n\treadonly disabled = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * Underlines the link only on hover\n\t */\n\treadonly decorationHover = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * Indicates that the link will open in a new tab\n\t */\n\treadonly external = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * External icon only visible on hover/focus\n\t */\n\treadonly hiddenIcon = input(false, { transform: luBooleanAttribute });\n\n\threfBackup: string;\n\n\tconstructor() {\n\t\tconst href = this.luHref;\n\n\t\teffect(() => {\n\t\t\tif (href()) {\n\t\t\t\tthis.hrefBackup = href();\n\t\t\t\tthis.routerLink.publicReactiveHref.set(this.hrefBackup);\n\t\t\t}\n\t\t\tif (this.disabled()) {\n\t\t\t\tif (this.routerLinkCommands()) {\n\t\t\t\t\tthis.routerLink.routerLink = null;\n\t\t\t\t}\n\t\t\t\tthis.routerLink.publicReactiveHref.set(null);\n\t\t\t} else if (this.routerLinkCommands() && !this.external()) {\n\t\t\t\tthis.routerLink.routerLink = this.routerLinkCommands();\n\t\t\t\t// We need to do this in order to have `routerLink` update the value for `href`:\n\t\t\t\t// See https://github.com/angular/angular/blob/main/packages/router/src/directives/router_link.ts#L281\n\t\t\t\tthis.routerLink.ngOnChanges({});\n\t\t\t} else if (this.routerLinkCommands() && this.external()) {\n\t\t\t\t// External router links must not wire up the `RouterLink` directive (it would navigate in-place),\n\t\t\t\t// but they still need an `href` so the anchor is keyboard-focusable and its destination is previewable.\n\t\t\t\t// Actual navigation is handled natively by `target=\"_blank\"` (anchors) or by `redirect()` (buttons).\n\t\t\t\tthis.routerLink.publicReactiveHref.set(this.#serializeExternalUrl());\n\t\t\t} else if (!href() && this.hrefBackup) {\n\t\t\t\tthis.routerLink.publicReactiveHref.set(this.hrefBackup);\n\t\t\t}\n\t\t});\n\t}\n\n\tredirect(): void {\n\t\t// Anchors carry an `href` with `target=\"_blank\"`, so the browser opens the new tab natively.\n\t\t// Only non-anchor hosts (e.g. `button[luLink]`) need us to open the window programmatically.\n\t\tif (!this.disabled() && this.routerLinkCommands() && this.external() && !this.#isAnchor()) {\n\t\t\tconst externalUrl = this.#serializeExternalUrl();\n\t\t\tafterNextRender(() => window.open(externalUrl ?? undefined, '_blank'), { injector: this.#injector });\n\t\t}\n\t}\n\n\t#isAnchor(): boolean {\n\t\treturn (this.#elementRef.nativeElement as HTMLElement).tagName === 'A';\n\t}\n\n\t#serializeExternalUrl(): string | null {\n\t\tconst routerLinkCommands = this.routerLinkCommands();\n\t\tif (!routerLinkCommands) {\n\t\t\treturn null;\n\t\t}\n\t\tconst urlTree =\n\t\t\trouterLinkCommands instanceof UrlTree\n\t\t\t\t? routerLinkCommands\n\t\t\t\t: this.router.createUrlTree(Array.isArray(routerLinkCommands) ? routerLinkCommands : [routerLinkCommands], {\n\t\t\t\t\t\t// Resolve relative commands against the current route, like Angular's `RouterLink` does.\n\t\t\t\t\t\t// An explicit `relativeTo` wins, including `null` which means \"resolve from the root\";\n\t\t\t\t\t\t// only `undefined` falls back to the injected `ActivatedRoute`.\n\t\t\t\t\t\trelativeTo: this.routerLink.relativeTo === undefined ? this.#activatedRoute : this.routerLink.relativeTo,\n\t\t\t\t\t\tqueryParams: this.routerLink.queryParams,\n\t\t\t\t\t\tfragment: this.routerLink.fragment,\n\t\t\t\t\t\tqueryParamsHandling: this.routerLink.queryParamsHandling,\n\t\t\t\t\t\tpreserveFragment: this.routerLink.preserveFragment,\n\t\t\t\t\t});\n\t\tconst serializedUrl = this.router.serializeUrl(urlTree);\n\t\t// Apply the app's baseHref regardless of the commands' shape (string, array or `UrlTree`):\n\t\t// they all describe an internal route, so the serialized URL must carry the baseHref.\n\t\treturn this.location.prepareExternalUrl(serializedUrl);\n\t}\n}\n","<span class=\"link-text\"><ng-content /></span>\n@if (external()) {\n\t<span class=\"link-icon\">\n\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowExternal\"></span>\n\t</span>\n\t<span class=\"pr-u-mask\">{{ intl().external }}</span>\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const LU_LINK_INSTANCE = new InjectionToken<boolean>('LU_LINK_INSTANCE');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Directive, inject, input, booleanAttribute, computed, contentChild, forwardRef, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
3
- import { LoadingComponent } from '@lucca-front/ng/loading';
2
+ import { InjectionToken, Directive, inject, input, computed, contentChild, forwardRef, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
3
+ import { luBooleanAttribute } from '@lucca-front/ng/core';
4
4
  import { IconComponent } from '@lucca-front/ng/icon';
5
5
 
6
6
  /**
@@ -13,10 +13,10 @@ const OPTION_INSTANCE = new InjectionToken('LuOptionInstance');
13
13
 
14
14
  let nextId$1 = 0;
15
15
  class Treeitem {
16
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: Treeitem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
17
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: Treeitem, isStandalone: true, selector: "[treeitem]", ngImport: i0 }); }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: Treeitem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
17
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: Treeitem, isStandalone: true, selector: "[treeitem]", ngImport: i0 }); }
18
18
  }
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: Treeitem, decorators: [{
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: Treeitem, decorators: [{
20
20
  type: Directive,
21
21
  args: [{
22
22
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -25,49 +25,80 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
25
25
  }] });
26
26
  class OptionComponent {
27
27
  constructor() {
28
- this.#listboxRef = inject(LISTBOX_INSTANCE);
28
+ // Optional so the option can live outside a lu-listbox, e.g. a sticky "add option" row
29
+ // rendered next to the listbox but inside the same scroll container.
30
+ this.#listboxRef = inject(LISTBOX_INSTANCE, { optional: true });
29
31
  this.#parentOptionRef = inject(OPTION_INSTANCE, { skipSelf: true, optional: true });
30
- this.checked = input(false, { ...(ngDevMode ? { debugName: "checked" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
31
- this.mixed = input(false, { ...(ngDevMode ? { debugName: "mixed" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
32
- this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
33
- this.hovered = input(false, { ...(ngDevMode ? { debugName: "hovered" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
34
- this.add = input(false, { ...(ngDevMode ? { debugName: "add" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
35
- this.group = input(false, { ...(ngDevMode ? { debugName: "group" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
36
- this.select = input(false, { ...(ngDevMode ? { debugName: "select" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
32
+ this.elementId = input(null, /* @ts-ignore */
33
+ ...(ngDevMode ? [{ debugName: "elementId" }] : /* istanbul ignore next */ []));
34
+ this.checked = input(false, { ...(ngDevMode ? { debugName: "checked" } : /* istanbul ignore next */ {}), transform: luBooleanAttribute });
35
+ this.mixed = input(false, { ...(ngDevMode ? { debugName: "mixed" } : /* istanbul ignore next */ {}), transform: luBooleanAttribute });
36
+ this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: luBooleanAttribute });
37
+ this.hovered = input(false, { ...(ngDevMode ? { debugName: "hovered" } : /* istanbul ignore next */ {}), transform: luBooleanAttribute });
38
+ this.add = input(false, { ...(ngDevMode ? { debugName: "add" } : /* istanbul ignore next */ {}), transform: luBooleanAttribute });
39
+ this.group = input(false, { ...(ngDevMode ? { debugName: "group" } : /* istanbul ignore next */ {}), transform: luBooleanAttribute });
40
+ /**
41
+ * Overrides the generated id used to label the group, so consumers can provide
42
+ * a deterministic id (e.g. derived from a select id and a group key).
43
+ */
44
+ this.groupId = input(null, /* @ts-ignore */
45
+ ...(ngDevMode ? [{ debugName: "groupId" }] : /* istanbul ignore next */ []));
46
+ this.select = input(false, { ...(ngDevMode ? { debugName: "select" } : /* istanbul ignore next */ {}), transform: luBooleanAttribute });
37
47
  this.selectAll = input(/* @ts-ignore */
38
48
  ...(ngDevMode ? [undefined, { debugName: "selectAll" }] : /* istanbul ignore next */ []));
39
- this.multiple = computed(() => this.#listboxRef.multiple(), /* @ts-ignore */
49
+ this.multiple = computed(() => this.#listboxRef?.multiple() ?? false, /* @ts-ignore */
40
50
  ...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
41
- this.tree = computed(() => this.#listboxRef.tree(), /* @ts-ignore */
51
+ this.tree = computed(() => this.#listboxRef?.tree() ?? false, /* @ts-ignore */
42
52
  ...(ngDevMode ? [{ debugName: "tree" }] : /* istanbul ignore next */ []));
43
- this.empty = computed(() => this.#listboxRef.state() === 'empty', /* @ts-ignore */
53
+ this.empty = computed(() => this.#listboxRef?.state() === 'empty', /* @ts-ignore */
44
54
  ...(ngDevMode ? [{ debugName: "empty" }] : /* istanbul ignore next */ []));
45
- this.id = computed(() => this.#listboxRef.listboxId, /* @ts-ignore */
55
+ this.id = computed(() => this.#listboxRef?.listboxId ?? null, /* @ts-ignore */
46
56
  ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
47
- this.groupId = `group${nextId$1++}`;
57
+ this.groupLabelId = computed(() => this.groupId() ?? this.#defaultGroupId, /* @ts-ignore */
58
+ ...(ngDevMode ? [{ debugName: "groupLabelId" }] : /* istanbul ignore next */ []));
59
+ this.#defaultGroupId = `group${nextId$1++}`;
48
60
  this.treeitemContent = contentChild(Treeitem, /* @ts-ignore */
49
61
  ...(ngDevMode ? [{ debugName: "treeitemContent" }] : /* istanbul ignore next */ []));
62
+ /**
63
+ * Depth of the nested `[treeitem]` wrapper, for consumers that hand their own projected
64
+ * content over to this option: a content query does not cross an `ng-content` boundary, so
65
+ * the option can then neither see those children nor derive the depth it sits at. Setting it
66
+ * renders the wrapper and pins its level; leave it null to let both be worked out here.
67
+ */
68
+ this.treeitemLevel = input(null, /* @ts-ignore */
69
+ ...(ngDevMode ? [{ debugName: "treeitemLevel" }] : /* istanbul ignore next */ []));
50
70
  this.level = (this.#parentOptionRef?.level || 0) + 1;
71
+ this.hasTreeitems = computed(() => !!this.treeitemContent() || this.treeitemLevel() !== null, /* @ts-ignore */
72
+ ...(ngDevMode ? [{ debugName: "hasTreeitems" }] : /* istanbul ignore next */ []));
73
+ this.wrapperLevel = computed(() => this.treeitemLevel() ?? this.level, /* @ts-ignore */
74
+ ...(ngDevMode ? [{ debugName: "wrapperLevel" }] : /* istanbul ignore next */ []));
51
75
  }
76
+ // Optional so the option can live outside a lu-listbox, e.g. a sticky "add option" row
77
+ // rendered next to the listbox but inside the same scroll container.
52
78
  #listboxRef;
53
79
  #parentOptionRef;
54
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: OptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
55
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: OptionComponent, isStandalone: true, selector: "lu-listbox-option", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, mixed: { classPropertyName: "mixed", publicName: "mixed", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hovered: { classPropertyName: "hovered", publicName: "hovered", isSignal: true, isRequired: false, transformFunction: null }, add: { classPropertyName: "add", publicName: "add", isSignal: true, isRequired: false, transformFunction: null }, group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: false, transformFunction: null }, select: { classPropertyName: "select", publicName: "select", isSignal: true, isRequired: false, transformFunction: null }, selectAll: { classPropertyName: "selectAll", publicName: "selectAll", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.role": "group() ? \"group\" : tree() ? \"treeitem\" : \"option\"", "attr.aria-labelledby": "group() ? groupId : null", "attr.aria-checked": "mixed() ? \"mixed\" : checked()", "attr.aria-disabled": "disabled()", "attr.aria-hidden": "empty()", "attr.id": "empty() ? id() : null", "class.mod-add": "add()", "class.mod-select": "select()" }, classAttribute: "listboxOption" }, providers: [{ provide: OPTION_INSTANCE, useExisting: forwardRef(() => OptionComponent) }], queries: [{ propertyName: "treeitemContent", first: true, predicate: Treeitem, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"listboxOption-content\" [class.is-hovered]=\"hovered()\" [attr.id]=\"group() ? groupId : null\">\n\t@if (multiple() && !add() && !selectAll() && !select()) {\n\t\t<span class=\"listboxOption-content-checkboxField checkboxField\" aria-hidden=\"true\">\n\t\t\t<span class=\"listboxOption-content-checkboxField-input checkboxField-input\"></span>\n\t\t\t<span class=\"checkboxField-icon\"><span class=\"checkboxField-icon-check\"></span></span>\n\t\t</span>\n\t}\n\t@if (add()) {\n\t\t<lu-icon icon=\"mathsPlus\" />\n\t}\n\t<ng-content />\n\t@if (selectAll()) {\n\t\t<lu-listbox-option select>{{ selectAll() }}</lu-listbox-option>\n\t}\n</div>\n<ng-content select=\"[optgroup]\" />\n\n@if (treeitemContent()) {\n\t<div class=\"listboxOptionWrapper\" role=\"group\" [attr.style]=\"level ? '--components-listboxOptionWrapper-level: ' + level : null\">\n\t\t<ng-content select=\"[treeitem]\" />\n\t</div>\n}\n", dependencies: [{ kind: "component", type: OptionComponent, selector: "lu-listbox-option", inputs: ["checked", "mixed", "disabled", "hovered", "add", "group", "select", "selectAll"] }, { kind: "component", type: IconComponent, selector: "lu-icon, pr-icon", inputs: ["icon", "alt", "size", "color", "AI"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
80
+ #defaultGroupId;
81
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: OptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
82
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: OptionComponent, isStandalone: true, selector: "lu-listbox-option", inputs: { elementId: { classPropertyName: "elementId", publicName: "elementId", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, mixed: { classPropertyName: "mixed", publicName: "mixed", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hovered: { classPropertyName: "hovered", publicName: "hovered", isSignal: true, isRequired: false, transformFunction: null }, add: { classPropertyName: "add", publicName: "add", isSignal: true, isRequired: false, transformFunction: null }, group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: false, transformFunction: null }, groupId: { classPropertyName: "groupId", publicName: "groupId", isSignal: true, isRequired: false, transformFunction: null }, select: { classPropertyName: "select", publicName: "select", isSignal: true, isRequired: false, transformFunction: null }, selectAll: { classPropertyName: "selectAll", publicName: "selectAll", isSignal: true, isRequired: false, transformFunction: null }, treeitemLevel: { classPropertyName: "treeitemLevel", publicName: "treeitemLevel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.role": "group() ? \"group\" : tree() ? \"treeitem\" : \"option\"", "attr.aria-labelledby": "group() ? groupLabelId() : null", "attr.aria-selected": "add() ? null : mixed() ? \"mixed\" : checked()", "attr.aria-disabled": "disabled()", "attr.aria-hidden": "empty()", "attr.id": "empty() ? id() : elementId()", "class.is-selected": "checked()", "class.is-disabled": "disabled()", "class.mod-add": "add()", "class.mod-select": "select()" }, classAttribute: "listboxOption" }, providers: [{ provide: OPTION_INSTANCE, useExisting: forwardRef(() => OptionComponent) }], queries: [{ propertyName: "treeitemContent", first: true, predicate: Treeitem, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"listboxOption-content\" [class.is-hovered]=\"hovered()\" [attr.id]=\"group() ? groupLabelId() : null\">\n\t@if (multiple() && !add() && !selectAll() && !select()) {\n\t\t<span class=\"listboxOption-content-checkboxField checkboxField\" aria-hidden=\"true\">\n\t\t\t<span class=\"listboxOption-content-checkboxField-input checkboxField-input\"></span>\n\t\t\t<span class=\"checkboxField-icon\"><span class=\"checkboxField-icon-check\"></span></span>\n\t\t</span>\n\t}\n\t@if (add()) {\n\t\t<lu-icon icon=\"mathsPlus\" />\n\t}\n\t<ng-content />\n\t<ng-content select=\"[group-action]\" />\n\t@if (selectAll()) {\n\t\t<lu-listbox-option [elementId]=\"elementId() + '-selectAll'\" select>{{ selectAll() }}</lu-listbox-option>\n\t}\n</div>\n<ng-content select=\"[optgroup]\" />\n\n@if (hasTreeitems()) {\n\t<div class=\"listboxOptionWrapper\" role=\"group\" [attr.style]=\"'--components-listboxOptionWrapper-level: ' + wrapperLevel()\">\n\t\t<ng-content select=\"[treeitem]\" />\n\t</div>\n}\n", dependencies: [{ kind: "component", type: OptionComponent, selector: "lu-listbox-option", inputs: ["elementId", "checked", "mixed", "disabled", "hovered", "add", "group", "groupId", "select", "selectAll", "treeitemLevel"] }, { kind: "component", type: IconComponent, selector: "lu-icon, pr-icon", inputs: ["icon", "alt", "size", "color", "AI"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
56
83
  }
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: OptionComponent, decorators: [{
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: OptionComponent, decorators: [{
58
85
  type: Component,
59
86
  args: [{ selector: 'lu-listbox-option', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
60
87
  class: 'listboxOption',
61
88
  '[attr.role]': 'group() ? "group" : tree() ? "treeitem" : "option"',
62
- '[attr.aria-labelledby]': 'group() ? groupId : null',
63
- '[attr.aria-checked]': 'mixed() ? "mixed" : checked()',
89
+ '[attr.aria-labelledby]': 'group() ? groupLabelId() : null',
90
+ '[attr.aria-selected]': 'add() ? null : mixed() ? "mixed" : checked()',
64
91
  '[attr.aria-disabled]': 'disabled()',
65
92
  '[attr.aria-hidden]': 'empty()',
66
- '[attr.id]': 'empty() ? id() : null',
93
+ // The empty status option is the target of the listbox `aria-describedby`, so it must
94
+ // carry the listbox id even though no consumer sets an elementId on it.
95
+ '[attr.id]': 'empty() ? id() : elementId()',
96
+ '[class.is-selected]': 'checked()',
97
+ '[class.is-disabled]': 'disabled()',
67
98
  '[class.mod-add]': 'add()',
68
99
  '[class.mod-select]': 'select()',
69
- }, imports: [IconComponent], providers: [{ provide: OPTION_INSTANCE, useExisting: forwardRef(() => OptionComponent) }], template: "<div class=\"listboxOption-content\" [class.is-hovered]=\"hovered()\" [attr.id]=\"group() ? groupId : null\">\n\t@if (multiple() && !add() && !selectAll() && !select()) {\n\t\t<span class=\"listboxOption-content-checkboxField checkboxField\" aria-hidden=\"true\">\n\t\t\t<span class=\"listboxOption-content-checkboxField-input checkboxField-input\"></span>\n\t\t\t<span class=\"checkboxField-icon\"><span class=\"checkboxField-icon-check\"></span></span>\n\t\t</span>\n\t}\n\t@if (add()) {\n\t\t<lu-icon icon=\"mathsPlus\" />\n\t}\n\t<ng-content />\n\t@if (selectAll()) {\n\t\t<lu-listbox-option select>{{ selectAll() }}</lu-listbox-option>\n\t}\n</div>\n<ng-content select=\"[optgroup]\" />\n\n@if (treeitemContent()) {\n\t<div class=\"listboxOptionWrapper\" role=\"group\" [attr.style]=\"level ? '--components-listboxOptionWrapper-level: ' + level : null\">\n\t\t<ng-content select=\"[treeitem]\" />\n\t</div>\n}\n" }]
70
- }], propDecorators: { checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], mixed: [{ type: i0.Input, args: [{ isSignal: true, alias: "mixed", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], hovered: [{ type: i0.Input, args: [{ isSignal: true, alias: "hovered", required: false }] }], add: [{ type: i0.Input, args: [{ isSignal: true, alias: "add", required: false }] }], group: [{ type: i0.Input, args: [{ isSignal: true, alias: "group", required: false }] }], select: [{ type: i0.Input, args: [{ isSignal: true, alias: "select", required: false }] }], selectAll: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectAll", required: false }] }], treeitemContent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => Treeitem), { isSignal: true }] }] } });
100
+ }, imports: [IconComponent], providers: [{ provide: OPTION_INSTANCE, useExisting: forwardRef(() => OptionComponent) }], template: "<div class=\"listboxOption-content\" [class.is-hovered]=\"hovered()\" [attr.id]=\"group() ? groupLabelId() : null\">\n\t@if (multiple() && !add() && !selectAll() && !select()) {\n\t\t<span class=\"listboxOption-content-checkboxField checkboxField\" aria-hidden=\"true\">\n\t\t\t<span class=\"listboxOption-content-checkboxField-input checkboxField-input\"></span>\n\t\t\t<span class=\"checkboxField-icon\"><span class=\"checkboxField-icon-check\"></span></span>\n\t\t</span>\n\t}\n\t@if (add()) {\n\t\t<lu-icon icon=\"mathsPlus\" />\n\t}\n\t<ng-content />\n\t<ng-content select=\"[group-action]\" />\n\t@if (selectAll()) {\n\t\t<lu-listbox-option [elementId]=\"elementId() + '-selectAll'\" select>{{ selectAll() }}</lu-listbox-option>\n\t}\n</div>\n<ng-content select=\"[optgroup]\" />\n\n@if (hasTreeitems()) {\n\t<div class=\"listboxOptionWrapper\" role=\"group\" [attr.style]=\"'--components-listboxOptionWrapper-level: ' + wrapperLevel()\">\n\t\t<ng-content select=\"[treeitem]\" />\n\t</div>\n}\n" }]
101
+ }], propDecorators: { elementId: [{ type: i0.Input, args: [{ isSignal: true, alias: "elementId", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], mixed: [{ type: i0.Input, args: [{ isSignal: true, alias: "mixed", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], hovered: [{ type: i0.Input, args: [{ isSignal: true, alias: "hovered", required: false }] }], add: [{ type: i0.Input, args: [{ isSignal: true, alias: "add", required: false }] }], group: [{ type: i0.Input, args: [{ isSignal: true, alias: "group", required: false }] }], groupId: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupId", required: false }] }], select: [{ type: i0.Input, args: [{ isSignal: true, alias: "select", required: false }] }], selectAll: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectAll", required: false }] }], treeitemContent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => Treeitem), { isSignal: true }] }], treeitemLevel: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeitemLevel", required: false }] }] } });
71
102
 
72
103
  let nextId = 0;
73
104
  class ListboxComponent {
@@ -75,11 +106,11 @@ class ListboxComponent {
75
106
  /**
76
107
  * Applies multiple mod to the listbox
77
108
  */
78
- this.multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
109
+ this.multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : /* istanbul ignore next */ {}), transform: luBooleanAttribute });
79
110
  /**
80
111
  * Defines listbox role tree or listbox by default
81
112
  */
82
- this.tree = input(false, { ...(ngDevMode ? { debugName: "tree" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
113
+ this.tree = input(false, { ...(ngDevMode ? { debugName: "tree" } : /* istanbul ignore next */ {}), transform: luBooleanAttribute });
83
114
  /**
84
115
  * Listbox state
85
116
  */
@@ -91,24 +122,27 @@ class ListboxComponent {
91
122
  this.statusMsg = input(null, /* @ts-ignore */
92
123
  ...(ngDevMode ? [{ debugName: "statusMsg" }] : /* istanbul ignore next */ []));
93
124
  this.listboxId = `listbox${nextId++}`;
125
+ this.skeletonWidth = computed(() => (this.state() === 'loading' ? `${Math.floor(Math.random() * 60 + 20)}%` : null), /* @ts-ignore */
126
+ ...(ngDevMode ? [{ debugName: "skeletonWidth" }] : /* istanbul ignore next */ []));
94
127
  }
95
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ListboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
96
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: ListboxComponent, isStandalone: true, selector: "lu-listbox", inputs: { multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, tree: { classPropertyName: "tree", publicName: "tree", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, statusMsg: { classPropertyName: "statusMsg", publicName: "statusMsg", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.role": "tree() ? \"tree\" : \"listbox\"", "class.mod-multiple": "multiple()", "attr.aria-busy": "state() === \"loading\"", "attr.aria-describedby": "state() === \"empty\" ? listboxId : null" }, classAttribute: "listboxOptionWrapper" }, providers: [{ provide: LISTBOX_INSTANCE, useExisting: forwardRef(() => ListboxComponent) }], ngImport: i0, template: "@if (state() !== \"empty\") {\n\t<ng-content />\n}\n@if (state() === \"empty\") {\n\t<lu-listbox-option empty>{{ statusMsg() }}</lu-listbox-option>\n} @else if (state() === \"loading\") {\n\t<lu-listbox-option>\n\t\t<lu-loading class=\"listboxOption-content-loading\">{{ statusMsg() }}</lu-loading>\n\t</lu-listbox-option>\n}\n", dependencies: [{ kind: "component", type: OptionComponent, selector: "lu-listbox-option", inputs: ["checked", "mixed", "disabled", "hovered", "add", "group", "select", "selectAll"] }, { kind: "component", type: LoadingComponent, selector: "lu-loading", inputs: ["size", "invert", "block", "hiddenLabel", "template"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
128
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ListboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
129
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: ListboxComponent, isStandalone: true, selector: "lu-listbox", inputs: { multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, tree: { classPropertyName: "tree", publicName: "tree", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, statusMsg: { classPropertyName: "statusMsg", publicName: "statusMsg", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.role": "tree() ? \"tree\" : \"listbox\"", "attr.aria-multiselectable": "multiple() ? true : null", "class.mod-multiple": "multiple()", "attr.aria-busy": "state() === \"loading\"", "attr.aria-describedby": "state() === \"empty\" ? listboxId : null" }, classAttribute: "listboxOptionWrapper" }, providers: [{ provide: LISTBOX_INSTANCE, useExisting: forwardRef(() => ListboxComponent) }], ngImport: i0, template: "<ng-content select=\"[listbox-header]\" />\n@if (state() !== \"empty\") {\n\t<ng-content />\n}\n@if (state() === \"empty\") {\n\t<lu-listbox-option empty>{{ statusMsg() }}</lu-listbox-option>\n} @else if (state() === \"loading\") {\n\t<lu-listbox-option class=\"skeleton is-loading\" inert=\"inert\">\n\t\t<span class=\"skeleton-item\" [style.--components-skeleton-text-width]=\"skeletonWidth()\"></span>\n\t</lu-listbox-option>\n\t<span class=\"pr-u-mask\">{{ statusMsg() }}</span>\n}\n", dependencies: [{ kind: "component", type: OptionComponent, selector: "lu-listbox-option", inputs: ["elementId", "checked", "mixed", "disabled", "hovered", "add", "group", "groupId", "select", "selectAll", "treeitemLevel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
97
130
  }
98
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ListboxComponent, decorators: [{
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ListboxComponent, decorators: [{
99
132
  type: Component,
100
133
  args: [{ selector: 'lu-listbox', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
101
134
  class: 'listboxOptionWrapper',
102
135
  '[attr.role]': 'tree() ? "tree" : "listbox"',
136
+ '[attr.aria-multiselectable]': 'multiple() ? true : null',
103
137
  '[class.mod-multiple]': 'multiple()',
104
138
  '[attr.aria-busy]': 'state() === "loading"',
105
139
  '[attr.aria-describedby]': 'state() === "empty" ? listboxId : null',
106
- }, imports: [OptionComponent, LoadingComponent], providers: [{ provide: LISTBOX_INSTANCE, useExisting: forwardRef(() => ListboxComponent) }], template: "@if (state() !== \"empty\") {\n\t<ng-content />\n}\n@if (state() === \"empty\") {\n\t<lu-listbox-option empty>{{ statusMsg() }}</lu-listbox-option>\n} @else if (state() === \"loading\") {\n\t<lu-listbox-option>\n\t\t<lu-loading class=\"listboxOption-content-loading\">{{ statusMsg() }}</lu-loading>\n\t</lu-listbox-option>\n}\n" }]
140
+ }, imports: [OptionComponent], providers: [{ provide: LISTBOX_INSTANCE, useExisting: forwardRef(() => ListboxComponent) }], template: "<ng-content select=\"[listbox-header]\" />\n@if (state() !== \"empty\") {\n\t<ng-content />\n}\n@if (state() === \"empty\") {\n\t<lu-listbox-option empty>{{ statusMsg() }}</lu-listbox-option>\n} @else if (state() === \"loading\") {\n\t<lu-listbox-option class=\"skeleton is-loading\" inert=\"inert\">\n\t\t<span class=\"skeleton-item\" [style.--components-skeleton-text-width]=\"skeletonWidth()\"></span>\n\t</lu-listbox-option>\n\t<span class=\"pr-u-mask\">{{ statusMsg() }}</span>\n}\n" }]
107
141
  }], propDecorators: { multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], tree: [{ type: i0.Input, args: [{ isSignal: true, alias: "tree", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], statusMsg: [{ type: i0.Input, args: [{ isSignal: true, alias: "statusMsg", required: false }] }] } });
108
142
 
109
143
  /**
110
144
  * Generated bundle index. Do not edit.
111
145
  */
112
146
 
113
- export { LISTBOX_STATE, ListboxComponent, OptionComponent, Treeitem };
147
+ export { LISTBOX_INSTANCE, LISTBOX_STATE, ListboxComponent, OPTION_INSTANCE, OptionComponent, Treeitem };
114
148
  //# sourceMappingURL=lucca-front-ng-listbox.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"lucca-front-ng-listbox.mjs","sources":["../../../packages/ng/listbox/listbox.type.ts","../../../packages/ng/listbox/tokens.ts","../../../packages/ng/listbox/option/option.component.ts","../../../packages/ng/listbox/option/option.component.html","../../../packages/ng/listbox/listbox.component.ts","../../../packages/ng/listbox/listbox.component.html","../../../packages/ng/listbox/lucca-front-ng-listbox.ts"],"sourcesContent":["/**\n * Available ListboxComponent Types\n */\n\nexport const LISTBOX_STATE = ['loading', 'empty'] as const;\nexport type ListboxState = (typeof LISTBOX_STATE)[number];\n","import { InjectionToken } from '@angular/core';\nimport { ListboxComponent } from './listbox.component';\nimport { OptionComponent } from './option/option.component';\n\nexport const LISTBOX_INSTANCE = new InjectionToken<ListboxComponent>('LuListboxInstance');\nexport const OPTION_INSTANCE = new InjectionToken<OptionComponent>('LuOptionInstance');\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, contentChild, Directive, forwardRef, inject, input, ViewEncapsulation } from '@angular/core';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { LISTBOX_INSTANCE, OPTION_INSTANCE } from '../tokens';\n\nlet nextId = 0;\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[treeitem]',\n})\nexport class Treeitem {}\n\n@Component({\n\tselector: 'lu-listbox-option',\n\ttemplateUrl: './option.component.html',\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\tclass: 'listboxOption',\n\t\t'[attr.role]': 'group() ? \"group\" : tree() ? \"treeitem\" : \"option\"',\n\t\t'[attr.aria-labelledby]': 'group() ? groupId : null',\n\t\t'[attr.aria-checked]': 'mixed() ? \"mixed\" : checked()',\n\t\t'[attr.aria-disabled]': 'disabled()',\n\t\t'[attr.aria-hidden]': 'empty()',\n\t\t'[attr.id]': 'empty() ? id() : null',\n\t\t'[class.mod-add]': 'add()',\n\t\t'[class.mod-select]': 'select()',\n\t},\n\timports: [IconComponent],\n\tproviders: [{ provide: OPTION_INSTANCE, useExisting: forwardRef(() => OptionComponent) }],\n})\nexport class OptionComponent {\n\t#listboxRef = inject(LISTBOX_INSTANCE);\n\t#parentOptionRef = inject(OPTION_INSTANCE, { skipSelf: true, optional: true });\n\n\treadonly checked = input(false, { transform: booleanAttribute });\n\n\treadonly mixed = input(false, { transform: booleanAttribute });\n\n\treadonly disabled = input(false, { transform: booleanAttribute });\n\n\treadonly hovered = input(false, { transform: booleanAttribute });\n\n\treadonly add = input(false, { transform: booleanAttribute });\n\n\treadonly group = input(false, { transform: booleanAttribute });\n\n\treadonly select = input(false, { transform: booleanAttribute });\n\n\treadonly selectAll = input<'string' | null>();\n\n\treadonly multiple = computed(() => this.#listboxRef.multiple());\n\treadonly tree = computed(() => this.#listboxRef.tree());\n\treadonly empty = computed(() => this.#listboxRef.state() === 'empty');\n\treadonly id = computed(() => this.#listboxRef.listboxId);\n\n\treadonly groupId = `group${nextId++}`;\n\n\treadonly treeitemContent = contentChild(Treeitem);\n\n\treadonly level: number = (this.#parentOptionRef?.level || 0) + 1;\n}\n","<div class=\"listboxOption-content\" [class.is-hovered]=\"hovered()\" [attr.id]=\"group() ? groupId : null\">\n\t@if (multiple() && !add() && !selectAll() && !select()) {\n\t\t<span class=\"listboxOption-content-checkboxField checkboxField\" aria-hidden=\"true\">\n\t\t\t<span class=\"listboxOption-content-checkboxField-input checkboxField-input\"></span>\n\t\t\t<span class=\"checkboxField-icon\"><span class=\"checkboxField-icon-check\"></span></span>\n\t\t</span>\n\t}\n\t@if (add()) {\n\t\t<lu-icon icon=\"mathsPlus\" />\n\t}\n\t<ng-content />\n\t@if (selectAll()) {\n\t\t<lu-listbox-option select>{{ selectAll() }}</lu-listbox-option>\n\t}\n</div>\n<ng-content select=\"[optgroup]\" />\n\n@if (treeitemContent()) {\n\t<div class=\"listboxOptionWrapper\" role=\"group\" [attr.style]=\"level ? '--components-listboxOptionWrapper-level: ' + level : null\">\n\t\t<ng-content select=\"[treeitem]\" />\n\t</div>\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, forwardRef, input, ViewEncapsulation } from '@angular/core';\n\nimport { LoadingComponent } from '@lucca-front/ng/loading';\nimport { ListboxState } from './listbox.type';\nimport { OptionComponent } from './option/option.component';\nimport { LISTBOX_INSTANCE } from './tokens';\n\nlet nextId = 0;\n\n@Component({\n\tselector: 'lu-listbox',\n\ttemplateUrl: './listbox.component.html',\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\tclass: 'listboxOptionWrapper',\n\t\t'[attr.role]': 'tree() ? \"tree\" : \"listbox\"',\n\t\t'[class.mod-multiple]': 'multiple()',\n\t\t'[attr.aria-busy]': 'state() === \"loading\"',\n\t\t'[attr.aria-describedby]': 'state() === \"empty\" ? listboxId : null',\n\t},\n\timports: [OptionComponent, LoadingComponent],\n\tproviders: [{ provide: LISTBOX_INSTANCE, useExisting: forwardRef(() => ListboxComponent) }],\n})\nexport class ListboxComponent {\n\t/**\n\t * Applies multiple mod to the listbox\n\t */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Defines listbox role tree or listbox by default\n\t */\n\treadonly tree = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Listbox state\n\t */\n\treadonly state = input<ListboxState | null>(null);\n\n\t/**\n\t * Add message when listbox state loading or empty\n\t */\n\treadonly statusMsg = input<string | null>(null);\n\n\treadonly listboxId = `listbox${nextId++}`;\n}\n","@if (state() !== \"empty\") {\n\t<ng-content />\n}\n@if (state() === \"empty\") {\n\t<lu-listbox-option empty>{{ statusMsg() }}</lu-listbox-option>\n} @else if (state() === \"loading\") {\n\t<lu-listbox-option>\n\t\t<lu-loading class=\"listboxOption-content-loading\">{{ statusMsg() }}</lu-loading>\n\t</lu-listbox-option>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextId"],"mappings":"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"}
1
+ {"version":3,"file":"lucca-front-ng-listbox.mjs","sources":["../../../packages/ng/listbox/listbox.type.ts","../../../packages/ng/listbox/tokens.ts","../../../packages/ng/listbox/option/option.component.ts","../../../packages/ng/listbox/option/option.component.html","../../../packages/ng/listbox/listbox.component.ts","../../../packages/ng/listbox/listbox.component.html","../../../packages/ng/listbox/lucca-front-ng-listbox.ts"],"sourcesContent":["/**\n * Available ListboxComponent Types\n */\n\nexport const LISTBOX_STATE = ['loading', 'empty'] as const;\nexport type ListboxState = (typeof LISTBOX_STATE)[number];\n","import { InjectionToken } from '@angular/core';\nimport { ListboxComponent } from './listbox.component';\nimport { OptionComponent } from './option/option.component';\n\nexport const LISTBOX_INSTANCE = new InjectionToken<ListboxComponent>('LuListboxInstance');\nexport const OPTION_INSTANCE = new InjectionToken<OptionComponent>('LuOptionInstance');\n","import { ChangeDetectionStrategy, Component, computed, contentChild, Directive, forwardRef, inject, input, ViewEncapsulation } from '@angular/core';\nimport { luBooleanAttribute } from '@lucca-front/ng/core';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { LISTBOX_INSTANCE, OPTION_INSTANCE } from '../tokens';\n\nlet nextId = 0;\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[treeitem]',\n})\nexport class Treeitem {}\n\n@Component({\n\tselector: 'lu-listbox-option',\n\ttemplateUrl: './option.component.html',\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\tclass: 'listboxOption',\n\t\t'[attr.role]': 'group() ? \"group\" : tree() ? \"treeitem\" : \"option\"',\n\t\t'[attr.aria-labelledby]': 'group() ? groupLabelId() : null',\n\t\t'[attr.aria-selected]': 'add() ? null : mixed() ? \"mixed\" : checked()',\n\t\t'[attr.aria-disabled]': 'disabled()',\n\t\t'[attr.aria-hidden]': 'empty()',\n\t\t// The empty status option is the target of the listbox `aria-describedby`, so it must\n\t\t// carry the listbox id even though no consumer sets an elementId on it.\n\t\t'[attr.id]': 'empty() ? id() : elementId()',\n\t\t'[class.is-selected]': 'checked()',\n\t\t'[class.is-disabled]': 'disabled()',\n\t\t'[class.mod-add]': 'add()',\n\t\t'[class.mod-select]': 'select()',\n\t},\n\timports: [IconComponent],\n\tproviders: [{ provide: OPTION_INSTANCE, useExisting: forwardRef(() => OptionComponent) }],\n})\nexport class OptionComponent {\n\t// Optional so the option can live outside a lu-listbox, e.g. a sticky \"add option\" row\n\t// rendered next to the listbox but inside the same scroll container.\n\t#listboxRef = inject(LISTBOX_INSTANCE, { optional: true });\n\t#parentOptionRef = inject(OPTION_INSTANCE, { skipSelf: true, optional: true });\n\n\treadonly elementId = input<string | null>(null);\n\n\treadonly checked = input(false, { transform: luBooleanAttribute });\n\n\treadonly mixed = input(false, { transform: luBooleanAttribute });\n\n\treadonly disabled = input(false, { transform: luBooleanAttribute });\n\n\treadonly hovered = input(false, { transform: luBooleanAttribute });\n\n\treadonly add = input(false, { transform: luBooleanAttribute });\n\n\treadonly group = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * Overrides the generated id used to label the group, so consumers can provide\n\t * a deterministic id (e.g. derived from a select id and a group key).\n\t */\n\treadonly groupId = input<string | null>(null);\n\n\treadonly select = input(false, { transform: luBooleanAttribute });\n\n\treadonly selectAll = input<'string' | null>();\n\n\treadonly multiple = computed(() => this.#listboxRef?.multiple() ?? false);\n\treadonly tree = computed(() => this.#listboxRef?.tree() ?? false);\n\treadonly empty = computed(() => this.#listboxRef?.state() === 'empty');\n\treadonly id = computed(() => this.#listboxRef?.listboxId ?? null);\n\n\treadonly groupLabelId = computed(() => this.groupId() ?? this.#defaultGroupId);\n\n\treadonly #defaultGroupId = `group${nextId++}`;\n\n\treadonly treeitemContent = contentChild(Treeitem);\n\n\t/**\n\t * Depth of the nested `[treeitem]` wrapper, for consumers that hand their own projected\n\t * content over to this option: a content query does not cross an `ng-content` boundary, so\n\t * the option can then neither see those children nor derive the depth it sits at. Setting it\n\t * renders the wrapper and pins its level; leave it null to let both be worked out here.\n\t */\n\treadonly treeitemLevel = input<number | null>(null);\n\n\treadonly level: number = (this.#parentOptionRef?.level || 0) + 1;\n\n\treadonly hasTreeitems = computed(() => !!this.treeitemContent() || this.treeitemLevel() !== null);\n\n\treadonly wrapperLevel = computed(() => this.treeitemLevel() ?? this.level);\n}\n","<div class=\"listboxOption-content\" [class.is-hovered]=\"hovered()\" [attr.id]=\"group() ? groupLabelId() : null\">\n\t@if (multiple() && !add() && !selectAll() && !select()) {\n\t\t<span class=\"listboxOption-content-checkboxField checkboxField\" aria-hidden=\"true\">\n\t\t\t<span class=\"listboxOption-content-checkboxField-input checkboxField-input\"></span>\n\t\t\t<span class=\"checkboxField-icon\"><span class=\"checkboxField-icon-check\"></span></span>\n\t\t</span>\n\t}\n\t@if (add()) {\n\t\t<lu-icon icon=\"mathsPlus\" />\n\t}\n\t<ng-content />\n\t<ng-content select=\"[group-action]\" />\n\t@if (selectAll()) {\n\t\t<lu-listbox-option [elementId]=\"elementId() + '-selectAll'\" select>{{ selectAll() }}</lu-listbox-option>\n\t}\n</div>\n<ng-content select=\"[optgroup]\" />\n\n@if (hasTreeitems()) {\n\t<div class=\"listboxOptionWrapper\" role=\"group\" [attr.style]=\"'--components-listboxOptionWrapper-level: ' + wrapperLevel()\">\n\t\t<ng-content select=\"[treeitem]\" />\n\t</div>\n}\n","import { ChangeDetectionStrategy, Component, computed, forwardRef, input, ViewEncapsulation } from '@angular/core';\n\nimport { luBooleanAttribute } from '@lucca-front/ng/core';\nimport { ListboxState } from './listbox.type';\nimport { OptionComponent } from './option/option.component';\nimport { LISTBOX_INSTANCE } from './tokens';\n\nlet nextId = 0;\n\n@Component({\n\tselector: 'lu-listbox',\n\ttemplateUrl: './listbox.component.html',\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\tclass: 'listboxOptionWrapper',\n\t\t'[attr.role]': 'tree() ? \"tree\" : \"listbox\"',\n\t\t'[attr.aria-multiselectable]': 'multiple() ? true : null',\n\t\t'[class.mod-multiple]': 'multiple()',\n\t\t'[attr.aria-busy]': 'state() === \"loading\"',\n\t\t'[attr.aria-describedby]': 'state() === \"empty\" ? listboxId : null',\n\t},\n\timports: [OptionComponent],\n\tproviders: [{ provide: LISTBOX_INSTANCE, useExisting: forwardRef(() => ListboxComponent) }],\n})\nexport class ListboxComponent {\n\t/**\n\t * Applies multiple mod to the listbox\n\t */\n\treadonly multiple = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * Defines listbox role tree or listbox by default\n\t */\n\treadonly tree = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * Listbox state\n\t */\n\treadonly state = input<ListboxState | null>(null);\n\n\t/**\n\t * Add message when listbox state loading or empty\n\t */\n\treadonly statusMsg = input<string | null>(null);\n\n\treadonly listboxId = `listbox${nextId++}`;\n\n\treadonly skeletonWidth = computed(() => (this.state() === 'loading' ? `${Math.floor(Math.random() * 60 + 20)}%` : null));\n}\n","<ng-content select=\"[listbox-header]\" />\n@if (state() !== \"empty\") {\n\t<ng-content />\n}\n@if (state() === \"empty\") {\n\t<lu-listbox-option empty>{{ statusMsg() }}</lu-listbox-option>\n} @else if (state() === \"loading\") {\n\t<lu-listbox-option class=\"skeleton is-loading\" inert=\"inert\">\n\t\t<span class=\"skeleton-item\" [style.--components-skeleton-text-width]=\"skeletonWidth()\"></span>\n\t</lu-listbox-option>\n\t<span class=\"pr-u-mask\">{{ statusMsg() }}</span>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextId"],"mappings":";;;;;AAAA;;AAEG;MAEU,aAAa,GAAG,CAAC,SAAS,EAAE,OAAO;;MCAnC,gBAAgB,GAAG,IAAI,cAAc,CAAmB,mBAAmB;MAC3E,eAAe,GAAG,IAAI,cAAc,CAAkB,kBAAkB;;ACArF,IAAIA,QAAM,GAAG,CAAC;MAMD,QAAQ,CAAA;8GAAR,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAJpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEV,oBAAA,QAAQ,EAAE,YAAY;AACtB,iBAAA;;MA0BY,eAAe,CAAA;AAvB5B,IAAA,WAAA,GAAA;;;QA0BC,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC1D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAErE,IAAA,CAAA,SAAS,GAAG,KAAK,CAAgB,IAAI;sFAAC;QAEtC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,kBAAkB,EAAA,CAAG;QAEzD,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,KAAK,6EAAI,SAAS,EAAE,kBAAkB,EAAA,CAAG;QAEvD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,kBAAkB,EAAA,CAAG;QAE1D,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,kBAAkB,EAAA,CAAG;QAEzD,IAAA,CAAA,GAAG,GAAG,KAAK,CAAC,KAAK,2EAAI,SAAS,EAAE,kBAAkB,EAAA,CAAG;QAErD,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,KAAK,6EAAI,SAAS,EAAE,kBAAkB,EAAA,CAAG;AAEhE;;;AAGG;QACM,IAAA,CAAA,OAAO,GAAG,KAAK,CAAgB,IAAI;oFAAC;QAEpC,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,KAAK,8EAAI,SAAS,EAAE,kBAAkB,EAAA,CAAG;AAExD,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAmB;AAEpC,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,KAAK;qFAAC;AAChE,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,KAAK;iFAAC;AACxD,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,OAAO;kFAAC;AAC7D,QAAA,IAAA,CAAA,EAAE,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,SAAS,IAAI,IAAI;+EAAC;AAExD,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,eAAe;yFAAC;AAErE,QAAA,IAAA,CAAA,eAAe,GAAG,CAAA,KAAA,EAAQA,QAAM,EAAE,EAAE;QAEpC,IAAA,CAAA,eAAe,GAAG,YAAY,CAAC,QAAQ;4FAAC;AAEjD;;;;;AAKG;QACM,IAAA,CAAA,aAAa,GAAG,KAAK,CAAgB,IAAI;0FAAC;AAE1C,QAAA,IAAA,CAAA,KAAK,GAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC;AAEvD,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI;yFAAC;AAExF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,KAAK;yFAAC;AAC1E,IAAA;;;AAnDA,IAAA,WAAW;AACX,IAAA,gBAAgB;AAiCP,IAAA,eAAe;8GArCZ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,0DAAA,EAAA,sBAAA,EAAA,iCAAA,EAAA,oBAAA,EAAA,gDAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,8BAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAFhB,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC,EAAE,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAyCjD,QAAQ,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3EjD,2+BAuBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDaa,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAHjB,aAAa,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAvB3B,SAAS;+BACC,mBAAmB,EAAA,aAAA,EAEd,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACL,wBAAA,KAAK,EAAE,eAAe;AACtB,wBAAA,aAAa,EAAE,oDAAoD;AACnE,wBAAA,wBAAwB,EAAE,iCAAiC;AAC3D,wBAAA,sBAAsB,EAAE,8CAA8C;AACtE,wBAAA,sBAAsB,EAAE,YAAY;AACpC,wBAAA,oBAAoB,EAAE,SAAS;;;AAG/B,wBAAA,WAAW,EAAE,8BAA8B;AAC3C,wBAAA,qBAAqB,EAAE,WAAW;AAClC,wBAAA,qBAAqB,EAAE,YAAY;AACnC,wBAAA,iBAAiB,EAAE,OAAO;AAC1B,wBAAA,oBAAoB,EAAE,UAAU;AAChC,qBAAA,EAAA,OAAA,EACQ,CAAC,aAAa,CAAC,aACb,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,eAAgB,CAAC,EAAE,CAAC,EAAA,QAAA,EAAA,2+BAAA,EAAA;wgCAyCjD,QAAQ,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEpEjD,IAAI,MAAM,GAAG,CAAC;MAkBD,gBAAgB,CAAA;AAhB7B,IAAA,WAAA,GAAA;AAiBC;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,kBAAkB,EAAA,CAAG;AAEnE;;AAEG;QACM,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,KAAK,4EAAI,SAAS,EAAE,kBAAkB,EAAA,CAAG;AAE/D;;AAEG;QACM,IAAA,CAAA,KAAK,GAAG,KAAK,CAAsB,IAAI;kFAAC;AAEjD;;AAEG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAgB,IAAI;sFAAC;AAEtC,QAAA,IAAA,CAAA,SAAS,GAAG,CAAA,OAAA,EAAU,MAAM,EAAE,EAAE;AAEhC,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA,CAAA,CAAG,GAAG,IAAI,CAAC;0FAAC;AACxH,IAAA;8GAxBY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,iCAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,0CAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,SAAA,EAFjB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,gBAAgB,CAAC,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvB5F,yeAYA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDUW,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGb,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAhB5B,SAAS;+BACC,YAAY,EAAA,aAAA,EAEP,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACL,wBAAA,KAAK,EAAE,sBAAsB;AAC7B,wBAAA,aAAa,EAAE,6BAA6B;AAC5C,wBAAA,6BAA6B,EAAE,0BAA0B;AACzD,wBAAA,sBAAsB,EAAE,YAAY;AACpC,wBAAA,kBAAkB,EAAE,uBAAuB;AAC3C,wBAAA,yBAAyB,EAAE,wCAAwC;AACnE,qBAAA,EAAA,OAAA,EACQ,CAAC,eAAe,CAAC,aACf,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,gBAAiB,CAAC,EAAE,CAAC,EAAA,QAAA,EAAA,yeAAA,EAAA;;;AEvB5F;;AAEG;;;;"}