@luzmo/analytics-components-kit 1.0.8-beta.6 → 1.0.8-beta.7

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 (314) hide show
  1. package/components/index.cjs +1 -1
  2. package/components/index.js +1 -1
  3. package/components/viz-item-menu/index.cjs +1 -1
  4. package/components/viz-item-menu/index.js +1 -1
  5. package/components/viz-item-menu/viz-item-menu.d.ts +3 -0
  6. package/components/{viz-item-menu-Ht6bklNL.js → viz-item-menu-B7yRaSAU.js} +1 -1
  7. package/components/{viz-item-menu-XHh4qhtn.cjs → viz-item-menu-hLdU-02Q.cjs} +1 -1
  8. package/custom-elements.json +14 -0
  9. package/package.json +1 -1
  10. package/react/package.json +2 -2
  11. package/angular/README.md +0 -40
  12. package/angular/components/ai-chat-empty-state.ts +0 -98
  13. package/angular/components/ai-chat.ts +0 -440
  14. package/angular/components/ai-interaction-textarea.ts +0 -283
  15. package/angular/components/data-field-level.ts +0 -130
  16. package/angular/components/data-field-panel.ts +0 -256
  17. package/angular/components/data-field.ts +0 -130
  18. package/angular/components/data-fields-select.ts +0 -212
  19. package/angular/components/dataset-icon.ts +0 -83
  20. package/angular/components/dataset-selector-list.ts +0 -147
  21. package/angular/components/dataset-selector-row.ts +0 -198
  22. package/angular/components/display-settings-binning.ts +0 -92
  23. package/angular/components/display-settings-datetime.ts +0 -100
  24. package/angular/components/display-settings-grand-totals.ts +0 -92
  25. package/angular/components/display-settings-numeric.ts +0 -113
  26. package/angular/components/display-settings-period-over-period.ts +0 -107
  27. package/angular/components/display-settings.ts +0 -227
  28. package/angular/components/filter-expression-picker.ts +0 -168
  29. package/angular/components/filter-item.ts +0 -175
  30. package/angular/components/filter-parameter-picker.ts +0 -155
  31. package/angular/components/filter-value-picker-datetime.ts +0 -125
  32. package/angular/components/filter-value-picker-hierarchy.ts +0 -146
  33. package/angular/components/filter-value-picker-numeric.ts +0 -146
  34. package/angular/components/filter-value-picker.ts +0 -160
  35. package/angular/components/filters.ts +0 -209
  36. package/angular/components/formula-editor.ts +0 -229
  37. package/angular/components/formula-field.ts +0 -198
  38. package/angular/components/formula.ts +0 -170
  39. package/angular/components/interactive-viz-item.ts +0 -186
  40. package/angular/components/item-grid-item-actions-menu.ts +0 -113
  41. package/angular/components/item-grid.ts +0 -242
  42. package/angular/components/item-option-action-button-group.ts +0 -105
  43. package/angular/components/item-option-color-palette-picker.ts +0 -126
  44. package/angular/components/item-option-color-picker.ts +0 -134
  45. package/angular/components/item-option-color-range.ts +0 -168
  46. package/angular/components/item-option-guidelines.ts +0 -84
  47. package/angular/components/item-option-multi-language-field.ts +0 -133
  48. package/angular/components/item-option-number-field.ts +0 -161
  49. package/angular/components/item-option-panel.ts +0 -149
  50. package/angular/components/item-option-picker.ts +0 -120
  51. package/angular/components/item-option-position-picker.ts +0 -98
  52. package/angular/components/item-option-positions-number-field.ts +0 -140
  53. package/angular/components/item-option-radio-button-group.ts +0 -119
  54. package/angular/components/item-option-slider.ts +0 -126
  55. package/angular/components/item-option-switch.ts +0 -98
  56. package/angular/components/item-option-text-field.ts +0 -112
  57. package/angular/components/item-option.ts +0 -163
  58. package/angular/components/item-slot-drop-panel.ts +0 -236
  59. package/angular/components/item-slot-drop.ts +0 -231
  60. package/angular/components/item-slot-picker-panel.ts +0 -299
  61. package/angular/components/item-slot-picker.ts +0 -241
  62. package/angular/components/slot-menu-list.ts +0 -121
  63. package/angular/components/slot-menu.ts +0 -304
  64. package/angular/components/viz-item-menu.ts +0 -118
  65. package/angular/esm/components/ai-chat-empty-state.d.ts +0 -39
  66. package/angular/esm/components/ai-chat-empty-state.js +0 -99
  67. package/angular/esm/components/ai-chat.d.ts +0 -147
  68. package/angular/esm/components/ai-chat.js +0 -455
  69. package/angular/esm/components/ai-interaction-textarea.d.ts +0 -106
  70. package/angular/esm/components/ai-interaction-textarea.js +0 -305
  71. package/angular/esm/components/data-field-level.d.ts +0 -50
  72. package/angular/esm/components/data-field-level.js +0 -129
  73. package/angular/esm/components/data-field-panel.d.ts +0 -86
  74. package/angular/esm/components/data-field-panel.js +0 -268
  75. package/angular/esm/components/data-field.d.ts +0 -50
  76. package/angular/esm/components/data-field.js +0 -129
  77. package/angular/esm/components/data-fields-select.d.ts +0 -81
  78. package/angular/esm/components/data-fields-select.js +0 -227
  79. package/angular/esm/components/dataset-icon.d.ts +0 -34
  80. package/angular/esm/components/dataset-icon.js +0 -86
  81. package/angular/esm/components/dataset-selector-list.d.ts +0 -56
  82. package/angular/esm/components/dataset-selector-list.js +0 -155
  83. package/angular/esm/components/dataset-selector-row.d.ts +0 -70
  84. package/angular/esm/components/dataset-selector-row.js +0 -197
  85. package/angular/esm/components/display-settings-binning.d.ts +0 -37
  86. package/angular/esm/components/display-settings-binning.js +0 -91
  87. package/angular/esm/components/display-settings-datetime.d.ts +0 -40
  88. package/angular/esm/components/display-settings-datetime.js +0 -99
  89. package/angular/esm/components/display-settings-grand-totals.d.ts +0 -37
  90. package/angular/esm/components/display-settings-grand-totals.js +0 -91
  91. package/angular/esm/components/display-settings-numeric.d.ts +0 -45
  92. package/angular/esm/components/display-settings-numeric.js +0 -115
  93. package/angular/esm/components/display-settings-period-over-period.d.ts +0 -44
  94. package/angular/esm/components/display-settings-period-over-period.js +0 -107
  95. package/angular/esm/components/display-settings.d.ts +0 -83
  96. package/angular/esm/components/display-settings.js +0 -231
  97. package/angular/esm/components/filter-expression-picker.d.ts +0 -64
  98. package/angular/esm/components/filter-expression-picker.js +0 -179
  99. package/angular/esm/components/filter-item.d.ts +0 -63
  100. package/angular/esm/components/filter-item.js +0 -187
  101. package/angular/esm/components/filter-parameter-picker.d.ts +0 -56
  102. package/angular/esm/components/filter-parameter-picker.js +0 -151
  103. package/angular/esm/components/filter-value-picker-datetime.d.ts +0 -47
  104. package/angular/esm/components/filter-value-picker-datetime.js +0 -131
  105. package/angular/esm/components/filter-value-picker-hierarchy.d.ts +0 -53
  106. package/angular/esm/components/filter-value-picker-hierarchy.js +0 -155
  107. package/angular/esm/components/filter-value-picker-numeric.d.ts +0 -53
  108. package/angular/esm/components/filter-value-picker-numeric.js +0 -155
  109. package/angular/esm/components/filter-value-picker.d.ts +0 -57
  110. package/angular/esm/components/filter-value-picker.js +0 -171
  111. package/angular/esm/components/filters.d.ts +0 -75
  112. package/angular/esm/components/filters.js +0 -215
  113. package/angular/esm/components/formula-editor.d.ts +0 -78
  114. package/angular/esm/components/formula-editor.js +0 -236
  115. package/angular/esm/components/formula-field.d.ts +0 -70
  116. package/angular/esm/components/formula-field.js +0 -209
  117. package/angular/esm/components/formula.d.ts +0 -60
  118. package/angular/esm/components/formula.js +0 -177
  119. package/angular/esm/components/interactive-viz-item.d.ts +0 -63
  120. package/angular/esm/components/interactive-viz-item.js +0 -188
  121. package/angular/esm/components/item-grid-item-actions-menu.d.ts +0 -45
  122. package/angular/esm/components/item-grid-item-actions-menu.js +0 -115
  123. package/angular/esm/components/item-grid.d.ts +0 -80
  124. package/angular/esm/components/item-grid.js +0 -245
  125. package/angular/esm/components/item-option-action-button-group.d.ts +0 -41
  126. package/angular/esm/components/item-option-action-button-group.js +0 -107
  127. package/angular/esm/components/item-option-color-palette-picker.d.ts +0 -48
  128. package/angular/esm/components/item-option-color-palette-picker.js +0 -131
  129. package/angular/esm/components/item-option-color-picker.d.ts +0 -51
  130. package/angular/esm/components/item-option-color-picker.js +0 -139
  131. package/angular/esm/components/item-option-color-range.d.ts +0 -66
  132. package/angular/esm/components/item-option-color-range.js +0 -179
  133. package/angular/esm/components/item-option-guidelines.d.ts +0 -34
  134. package/angular/esm/components/item-option-guidelines.js +0 -83
  135. package/angular/esm/components/item-option-multi-language-field.d.ts +0 -50
  136. package/angular/esm/components/item-option-multi-language-field.js +0 -139
  137. package/angular/esm/components/item-option-number-field.d.ts +0 -58
  138. package/angular/esm/components/item-option-number-field.js +0 -171
  139. package/angular/esm/components/item-option-panel.d.ts +0 -54
  140. package/angular/esm/components/item-option-panel.js +0 -155
  141. package/angular/esm/components/item-option-picker.d.ts +0 -46
  142. package/angular/esm/components/item-option-picker.js +0 -123
  143. package/angular/esm/components/item-option-position-picker.d.ts +0 -39
  144. package/angular/esm/components/item-option-position-picker.js +0 -99
  145. package/angular/esm/components/item-option-positions-number-field.d.ts +0 -54
  146. package/angular/esm/components/item-option-positions-number-field.js +0 -147
  147. package/angular/esm/components/item-option-radio-button-group.d.ts +0 -45
  148. package/angular/esm/components/item-option-radio-button-group.js +0 -123
  149. package/angular/esm/components/item-option-slider.d.ts +0 -46
  150. package/angular/esm/components/item-option-slider.js +0 -131
  151. package/angular/esm/components/item-option-switch.d.ts +0 -40
  152. package/angular/esm/components/item-option-switch.js +0 -99
  153. package/angular/esm/components/item-option-text-field.d.ts +0 -44
  154. package/angular/esm/components/item-option-text-field.js +0 -115
  155. package/angular/esm/components/item-option.d.ts +0 -58
  156. package/angular/esm/components/item-option.js +0 -171
  157. package/angular/esm/components/item-slot-drop-panel.d.ts +0 -82
  158. package/angular/esm/components/item-slot-drop-panel.js +0 -249
  159. package/angular/esm/components/item-slot-drop.d.ts +0 -77
  160. package/angular/esm/components/item-slot-drop.js +0 -227
  161. package/angular/esm/components/item-slot-picker-panel.d.ts +0 -97
  162. package/angular/esm/components/item-slot-picker-panel.js +0 -309
  163. package/angular/esm/components/item-slot-picker.d.ts +0 -86
  164. package/angular/esm/components/item-slot-picker.js +0 -259
  165. package/angular/esm/components/slot-menu-list.d.ts +0 -46
  166. package/angular/esm/components/slot-menu-list.js +0 -123
  167. package/angular/esm/components/slot-menu.d.ts +0 -104
  168. package/angular/esm/components/slot-menu.js +0 -300
  169. package/angular/esm/components/viz-item-menu.d.ts +0 -42
  170. package/angular/esm/components/viz-item-menu.js +0 -111
  171. package/angular/esm/index.d.ts +0 -109
  172. package/angular/esm/index.js +0 -217
  173. package/angular/index.ts +0 -223
  174. package/angular/package.json +0 -40
  175. package/angular/tsconfig.json +0 -36
  176. package/angular/type-fallbacks.d.ts +0 -0
  177. package/angular/utils/ai-prompt/attachments.d.ts +0 -10
  178. package/angular/utils/ai-prompt/dictation.d.ts +0 -50
  179. package/angular/utils/ai-prompt/image-upload.d.ts +0 -12
  180. package/angular/utils/ai-prompt/index.d.ts +0 -6
  181. package/angular/utils/ai-prompt/tests/attachments.test.d.ts +0 -1
  182. package/angular/utils/ai-prompt/tests/dictation.test.d.ts +0 -1
  183. package/angular/utils/ai-prompt/tests/image-upload.test.d.ts +0 -1
  184. package/angular/utils/base/base.d.ts +0 -16
  185. package/angular/utils/base/focus-visible.d.ts +0 -29
  186. package/angular/utils/base/focusable.d.ts +0 -58
  187. package/angular/utils/base/index.d.ts +0 -5
  188. package/angular/utils/base/localized-mixin.d.ts +0 -22
  189. package/angular/utils/base/sized-mixin.d.ts +0 -17
  190. package/angular/utils/color/color-palettes.d.ts +0 -17
  191. package/angular/utils/color/extrapolate-color.d.ts +0 -1
  192. package/angular/utils/data/load-data-fields-for-datasets.d.ts +0 -22
  193. package/angular/utils/data-broker/index.d.ts +0 -263
  194. package/angular/utils/data-field-types/calculate-data-field-icon.d.ts +0 -12
  195. package/angular/utils/data-field-types/default-acceptable-data-field-types.d.ts +0 -1
  196. package/angular/utils/data-field-types/tests/calculate-data-field-icon.test.d.ts +0 -1
  197. package/angular/utils/drag/draggable.d.ts +0 -13
  198. package/angular/utils/drag/pragmatic-element-adapter.d.ts +0 -2
  199. package/angular/utils/drag/tests/pragmatic-element-adapter.first-import.test.d.ts +0 -1
  200. package/angular/utils/drag/tests/pragmatic-element-adapter.test.d.ts +0 -1
  201. package/angular/utils/filters/expressions.d.ts +0 -15
  202. package/angular/utils/filters/index.d.ts +0 -1
  203. package/angular/utils/formatter/calculate-duration.d.ts +0 -2
  204. package/angular/utils/formatter/decompose-numeric-format.d.ts +0 -11
  205. package/angular/utils/formatter/default-local-formats.d.ts +0 -20
  206. package/angular/utils/formatter/formats/cs.d.ts +0 -20
  207. package/angular/utils/formatter/formats/da.d.ts +0 -20
  208. package/angular/utils/formatter/formats/de.d.ts +0 -21
  209. package/angular/utils/formatter/formats/en-GB.d.ts +0 -21
  210. package/angular/utils/formatter/formats/en-US.d.ts +0 -1
  211. package/angular/utils/formatter/formats/en.d.ts +0 -1
  212. package/angular/utils/formatter/formats/es.d.ts +0 -54
  213. package/angular/utils/formatter/formats/fi.d.ts +0 -20
  214. package/angular/utils/formatter/formats/fr.d.ts +0 -54
  215. package/angular/utils/formatter/formats/he.d.ts +0 -20
  216. package/angular/utils/formatter/formats/hu.d.ts +0 -20
  217. package/angular/utils/formatter/formats/it.d.ts +0 -54
  218. package/angular/utils/formatter/formats/ja.d.ts +0 -20
  219. package/angular/utils/formatter/formats/ko.d.ts +0 -20
  220. package/angular/utils/formatter/formats/mk.d.ts +0 -20
  221. package/angular/utils/formatter/formats/nl.d.ts +0 -21
  222. package/angular/utils/formatter/formats/no.d.ts +0 -21
  223. package/angular/utils/formatter/formats/pl.d.ts +0 -20
  224. package/angular/utils/formatter/formats/pt.d.ts +0 -20
  225. package/angular/utils/formatter/formats/ru.d.ts +0 -20
  226. package/angular/utils/formatter/formats/sv.d.ts +0 -20
  227. package/angular/utils/formatter/formats/tr.d.ts +0 -21
  228. package/angular/utils/formatter/formats/zh-CN.d.ts +0 -20
  229. package/angular/utils/formatter/formats/zh-TW.d.ts +0 -20
  230. package/angular/utils/formatter/formatter.d.ts +0 -9
  231. package/angular/utils/formatter/get-dataset-name.d.ts +0 -2
  232. package/angular/utils/formatter/get-localized-name.d.ts +0 -4
  233. package/angular/utils/formatter/localize.d.ts +0 -3
  234. package/angular/utils/formatter/smart-datetime-formats.const.d.ts +0 -36
  235. package/angular/utils/formatter/tests/calculate-duration.test.d.ts +0 -1
  236. package/angular/utils/formatter/tests/decompose-numeric-format.test.d.ts +0 -1
  237. package/angular/utils/formatter/tests/default-local-formats.test.d.ts +0 -1
  238. package/angular/utils/formatter/tests/formatter.test.d.ts +0 -1
  239. package/angular/utils/formatter/tests/get-localized-name.test.d.ts +0 -1
  240. package/angular/utils/formatter/tests/localize.test.d.ts +0 -1
  241. package/angular/utils/formula/base/formula-base.d.ts +0 -117
  242. package/angular/utils/formula/base/formula-input-base.d.ts +0 -62
  243. package/angular/utils/formula/codemirror/actions.d.ts +0 -47
  244. package/angular/utils/formula/codemirror/drop-cursor.d.ts +0 -15
  245. package/angular/utils/formula/codemirror/icon-element.d.ts +0 -7
  246. package/angular/utils/formula/codemirror/parser.d.ts +0 -16
  247. package/angular/utils/formula/codemirror/tests/actions.test.d.ts +0 -1
  248. package/angular/utils/formula/codemirror/theme.d.ts +0 -20
  249. package/angular/utils/formula/codemirror/widget.d.ts +0 -18
  250. package/angular/utils/formula/config/aggregations.d.ts +0 -9
  251. package/angular/utils/formula/config/build-datasets.d.ts +0 -10
  252. package/angular/utils/formula/config/expression-helpers.d.ts +0 -42
  253. package/angular/utils/formula/config/functions.d.ts +0 -3
  254. package/angular/utils/formula/config/groupings.d.ts +0 -9
  255. package/angular/utils/formula/config/regex.d.ts +0 -39
  256. package/angular/utils/formula/config/resolve-column-presentation.d.ts +0 -19
  257. package/angular/utils/formula/config/tests/build-datasets.test.d.ts +0 -1
  258. package/angular/utils/formula/config/validate-expression.d.ts +0 -19
  259. package/angular/utils/formula/load-formula-codemirror.d.ts +0 -4
  260. package/angular/utils/formula/render-explanation-tooltip.d.ts +0 -7
  261. package/angular/utils/formula/store/formula-display-store.d.ts +0 -93
  262. package/angular/utils/formula/store/formula-editor-context.d.ts +0 -8
  263. package/angular/utils/formula/store/formula-editor-store.d.ts +0 -46
  264. package/angular/utils/formula/store/tests/formula-editor-store.test.d.ts +0 -1
  265. package/angular/utils/formula/tests/validate-expression.test.d.ts +0 -1
  266. package/angular/utils/get-css-variable.d.ts +0 -1
  267. package/angular/utils/index.d.ts +0 -10
  268. package/angular/utils/localize/set-locale.d.ts +0 -7
  269. package/angular/utils/map-tile-providers/index.d.ts +0 -93
  270. package/angular/utils/set-nested-value.d.ts +0 -6
  271. package/angular/utils/slot-content/ad-hoc-slot-content.d.ts +0 -7
  272. package/angular/utils/slot-content/render-calculation-label.d.ts +0 -7
  273. package/angular/utils/slot-content/tests/ad-hoc-slot-content.test.d.ts +0 -1
  274. package/angular/utils/slot-state/slot-context.d.ts +0 -4
  275. package/angular/utils/slot-state/slot-store.d.ts +0 -39
  276. package/angular/utils/store/base-store.d.ts +0 -158
  277. package/angular/utils/store/dashboard-store.d.ts +0 -49
  278. package/angular/utils/store/index.d.ts +0 -135
  279. package/angular/utils/store/item-store.d.ts +0 -33
  280. package/angular/utils/store/store-registry.d.ts +0 -170
  281. package/angular/utils/store/tests/dashboard-store.test.d.ts +0 -1
  282. package/angular/utils/store/tests/item-store.test.d.ts +0 -1
  283. package/angular/utils/store/tests/store-registry.test.d.ts +0 -1
  284. package/angular/utils/store/types.d.ts +0 -270
  285. package/angular/utils/switch-item/index.d.ts +0 -34
  286. package/angular/utils/switch-item/slot-role-classification.d.ts +0 -31
  287. package/angular/utils/switch-item/stories/switch-item.stories.d.ts +0 -17
  288. package/angular/utils/switch-item/tests/slot-role-classification.test.d.ts +0 -1
  289. package/angular/utils/switch-item/tests/switch-item.test.d.ts +0 -1
  290. package/angular/utils/tests/set-nested-value.test.d.ts +0 -1
  291. package/angular/utils/themes/bliss.d.ts +0 -2
  292. package/angular/utils/themes/classic-dark.d.ts +0 -2
  293. package/angular/utils/themes/classic.d.ts +0 -2
  294. package/angular/utils/themes/default-dark.d.ts +0 -2
  295. package/angular/utils/themes/default.d.ts +0 -2
  296. package/angular/utils/themes/index.d.ts +0 -4
  297. package/angular/utils/themes/orion.d.ts +0 -2
  298. package/angular/utils/themes/pinky.d.ts +0 -2
  299. package/angular/utils/themes/radiant.d.ts +0 -2
  300. package/angular/utils/themes/royale.d.ts +0 -2
  301. package/angular/utils/themes/seasonal.d.ts +0 -2
  302. package/angular/utils/themes/urban.d.ts +0 -2
  303. package/angular/utils/themes/vivid.d.ts +0 -2
  304. package/angular/utils/time/formats.const.d.ts +0 -4
  305. package/angular/utils/time/period-over-period-condition.const.d.ts +0 -8
  306. package/angular/utils/time/periods.const.d.ts +0 -15
  307. package/angular/utils/timezone/datetime-timezone.d.ts +0 -25
  308. package/angular/utils/timezone/tests/datetime-timezone.test.d.ts +0 -1
  309. package/angular/utils/transformations/convert-data-field-to-slot-content.d.ts +0 -9
  310. package/angular/utils/transformations/convert-datasets-to-data-fields.d.ts +0 -30
  311. package/angular/utils/transformations/tests/convert-data-field-to-slot-content.test.d.ts +0 -1
  312. package/angular/utils/transformations/tests/convert-datasets-to-data-fields.test.d.ts +0 -1
  313. package/angular/utils/types/tests/type-check.test.d.ts +0 -1
  314. package/angular/utils/types/type-check.d.ts +0 -28
@@ -1,299 +0,0 @@
1
- import { booleanAttribute, ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, Input, OnChanges, output, Renderer2, SimpleChanges } from '@angular/core';
2
- import '@luzmo/analytics-components-kit/item-slot-picker-panel';
3
- import type { LuzmoItemSlotPickerPanel as LuzmoItemSlotPickerPanelHostElement, DatasetChangedEventDetail, DatasetConstraintTriggeredEventDetail, SlotConstraintTriggeredEventDetail, SlotsContentsChangedEventDetail } from '@luzmo/analytics-components-kit/item-slot-picker-panel';
4
- export type { DatasetChangedEventDetail, DatasetConstraintTriggeredEventDetail, SlotConstraintTriggeredEventDetail, SlotsContentsChangedEventDetail } from '@luzmo/analytics-components-kit/item-slot-picker-panel';
5
- import type { Placement } from '@floating-ui/dom';
6
- import type { DatasetMetadata, DatasetsDataFields } from '@luzmo/analytics-components-kit/types';
7
- import type { SlotConfig, VizItemSlot, VizItemType } from '@luzmo/dashboard-contents-types';
8
-
9
- @Component({
10
- selector: 'luzmo-item-slot-picker-panel',
11
- exportAs: 'luzmoItemSlotPickerPanel',
12
- standalone: true,
13
- changeDetection: ChangeDetectionStrategy.OnPush,
14
- template: '<ng-content />'
15
- })
16
- /**
17
- * Angular wrapper component for <luzmo-item-slot-picker-panel>
18
- */
19
- export class LuzmoItemSlotPickerPanel implements OnChanges {
20
- private readonly elementRef = inject<ElementRef<LuzmoItemSlotPickerPanelHostElement>>(ElementRef);
21
- private readonly renderer = inject<Renderer2>(Renderer2);
22
- private readonly destroyRef = inject<DestroyRef>(DestroyRef);
23
- private readonly host = this.elementRef.nativeElement;
24
- private readonly listenerCleanup: Array<() => void> = [];
25
-
26
- /** The underlying custom element instance. Use to call imperative methods. */
27
- get nativeElement(): LuzmoItemSlotPickerPanelHostElement {
28
- return this.host;
29
- }
30
-
31
- /** The type of the item (e.g., 'bar-chart', 'line-chart', 'area-chart') */
32
- @Input({ alias: 'itemType' })
33
- itemType?: VizItemType | string;
34
-
35
- /** The language to use for locale-aware formatting and labels */
36
- @Input({ alias: 'contentLanguage' })
37
- contentLanguage?: string;
38
-
39
- /** Optional custom slots configuration (overrides loaded config) */
40
- @Input({ alias: 'slotsConfiguration' })
41
- slotsConfiguration?: SlotConfig[];
42
-
43
- /** The contents of all slots */
44
- @Input({ alias: 'slotsContents' })
45
- slotsContents?: VizItemSlot[];
46
-
47
- /** Whether the picker allows single or multiple selections per slot */
48
- @Input({ alias: 'selects' })
49
- selects?: 'single' | 'multiple';
50
-
51
- /** Whether the search input is visible in data field pickers */
52
- @Input({ alias: 'dataFieldsSearch' })
53
- dataFieldsSearch?: 'on' | 'off' | 'auto';
54
-
55
- /** Whether the search input is visible in the dataset picker */
56
- @Input({ alias: 'datasetSearch' })
57
- datasetSearch?: 'on' | 'off' | 'auto';
58
-
59
- /** Where to show icons in pickers */
60
- @Input({ alias: 'icons' })
61
- icons?: 'none' | 'menu-only' | 'all';
62
-
63
- /** The datasets and their dataFields to display in pickers. Takes preference over datasetIds when provided. */
64
- @Input({ alias: 'datasetsDataFields' })
65
- datasetsDataFields?: Array<DatasetsDataFields & Pick<DatasetMetadata, 'description'>>;
66
-
67
- /** Array of dataset IDs to fetch and display. Used as an alternative to datasetsDataFields - when provided (and datasetsDataFields is empty), the component will fetch the dataset metadata automatically. Requires apiUrl, authKey, and authToken to be set. */
68
- @Input({ alias: 'datasetIds' })
69
- datasetIds?: string[];
70
-
71
- /** The currently selected dataset ID. If not provided, defaults to the first available dataset. */
72
- @Input({ alias: 'selectedDatasetId' })
73
- selectedDatasetId?: string;
74
-
75
- /** Whether to show the dataset picker dropdown. */
76
- @Input({ alias: 'datasetPicker', transform: booleanAttribute })
77
- datasetPicker?: boolean;
78
-
79
- /** Custom label for the dataset picker field. Overrides the default "Dataset" label. */
80
- @Input({ alias: 'datasetPickerLabel' })
81
- datasetPickerLabel?: string;
82
-
83
- /** The Luzmo API URL. Required when using datasetIds. */
84
- @Input({ alias: 'apiUrl' })
85
- apiUrl?: string;
86
-
87
- /** Authentication key for the Luzmo API. Required when using datasetIds. */
88
- @Input({ alias: 'authKey' })
89
- authKey?: string;
90
-
91
- /** Authentication token for the Luzmo API. Required when using datasetIds. */
92
- @Input({ alias: 'authToken' })
93
- authToken?: string;
94
-
95
- /** Placement of the dataset picker and item slot picker popovers */
96
- @Input({ alias: 'placement' })
97
- placement?: Placement;
98
-
99
- /** Placement of the slot menu popover */
100
- @Input({ alias: 'slotMenuPlacement' })
101
- slotMenuPlacement?: Placement;
102
-
103
- /** Controls how slot constraints are handled - 'auto': Constraints are applied immediately (default) - 'event-only': Emit event with constraint details, let consumer decide */
104
- @Input({ alias: 'constraintMode' })
105
- constraintMode?: 'auto' | 'event-only';
106
-
107
- /** Whether the pickers grow to full width */
108
- @Input({ alias: 'grows', transform: booleanAttribute })
109
- grows?: boolean;
110
-
111
- /** The main container element */
112
- @Input({ alias: 'container' })
113
- container?: string;
114
-
115
- /** The field label element above the dataset picker */
116
- @Input({ alias: 'datasetFieldLabel' })
117
- datasetfieldlabel?: string;
118
-
119
- /** The main container for all slots */
120
- @Input({ alias: 'slotsPanel' })
121
- slotspanel?: string;
122
-
123
- /** The container for each individual slot (label + picker) */
124
- @Input({ alias: 'slotContainer' })
125
- slotcontainer?: string;
126
-
127
- /** The field label element above each slot */
128
- @Input({ alias: 'fieldLabel' })
129
- fieldlabel?: string;
130
-
131
- /** The item slot picker element */
132
- @Input({ alias: 'itemSlotPicker' })
133
- itemslotpicker?: string;
134
-
135
- /** The language for UI labels. Supported values: 'en', 'nl', 'fr', 'de', 'es' */
136
- @Input({ alias: 'language' })
137
- language?: string;
138
-
139
- /** The size of the element */
140
- @Input({ alias: 'size' })
141
- size?: 's' | 'm' | 'l' | 'xl';
142
-
143
- /** Emitted when constraint-mode is 'event-only' and dataset change would clear slots */
144
- readonly luzmoDatasetConstraintTriggered = output<CustomEvent<DatasetConstraintTriggeredEventDetail>>({ alias: 'luzmoDatasetConstraintTriggered' });
145
-
146
- /** Announces that the slots contents have changed */
147
- readonly luzmoSlotsContentsChanged = output<CustomEvent<SlotsContentsChangedEventDetail>>({ alias: 'luzmoSlotsContentsChanged' });
148
-
149
- /** Announces that the selected dataset has changed */
150
- readonly luzmoDatasetChanged = output<CustomEvent<DatasetChangedEventDetail>>({ alias: 'luzmoDatasetChanged' });
151
-
152
- /** Emitted when constraint-mode is 'event-only' and a change would trigger constraints */
153
- readonly luzmoSlotConstraintTriggered = output<CustomEvent<SlotConstraintTriggeredEventDetail>>({ alias: 'luzmoSlotConstraintTriggered' });
154
-
155
- constructor() {
156
- this.bindEvents();
157
- this.destroyRef.onDestroy(() => {
158
- for (const cleanup of this.listenerCleanup) {
159
- cleanup();
160
- }
161
- });
162
- }
163
-
164
- ngOnChanges(changes: SimpleChanges): void {
165
- for (const key of Object.keys(changes)) {
166
- switch (key) {
167
- case 'itemType':
168
- this.setHostProperty('itemType', changes['itemType'].currentValue);
169
- break;
170
- case 'contentLanguage':
171
- this.setHostProperty('contentLanguage', changes['contentLanguage'].currentValue);
172
- break;
173
- case 'slotsConfiguration':
174
- this.setHostProperty('slotsConfiguration', changes['slotsConfiguration'].currentValue);
175
- break;
176
- case 'slotsContents':
177
- this.setHostProperty('slotsContents', changes['slotsContents'].currentValue);
178
- break;
179
- case 'selects':
180
- this.setHostProperty('selects', changes['selects'].currentValue);
181
- break;
182
- case 'dataFieldsSearch':
183
- this.setHostProperty('dataFieldsSearch', changes['dataFieldsSearch'].currentValue);
184
- break;
185
- case 'datasetSearch':
186
- this.setHostProperty('datasetSearch', changes['datasetSearch'].currentValue);
187
- break;
188
- case 'icons':
189
- this.setHostProperty('icons', changes['icons'].currentValue);
190
- break;
191
- case 'datasetsDataFields':
192
- this.setHostProperty('datasetsDataFields', changes['datasetsDataFields'].currentValue);
193
- break;
194
- case 'datasetIds':
195
- this.setHostProperty('datasetIds', changes['datasetIds'].currentValue);
196
- break;
197
- case 'selectedDatasetId':
198
- this.setHostProperty('selectedDatasetId', changes['selectedDatasetId'].currentValue);
199
- break;
200
- case 'datasetPicker':
201
- this.setHostProperty('datasetPicker', changes['datasetPicker'].currentValue);
202
- break;
203
- case 'datasetPickerLabel':
204
- this.setHostProperty('datasetPickerLabel', changes['datasetPickerLabel'].currentValue);
205
- break;
206
- case 'apiUrl':
207
- this.setHostProperty('apiUrl', changes['apiUrl'].currentValue);
208
- break;
209
- case 'authKey':
210
- this.setHostProperty('authKey', changes['authKey'].currentValue);
211
- break;
212
- case 'authToken':
213
- this.setHostProperty('authToken', changes['authToken'].currentValue);
214
- break;
215
- case 'placement':
216
- this.setHostProperty('placement', changes['placement'].currentValue);
217
- break;
218
- case 'slotMenuPlacement':
219
- this.setHostProperty('slotMenuPlacement', changes['slotMenuPlacement'].currentValue);
220
- break;
221
- case 'constraintMode':
222
- this.setHostProperty('constraintMode', changes['constraintMode'].currentValue);
223
- break;
224
- case 'grows':
225
- this.setHostProperty('grows', changes['grows'].currentValue);
226
- break;
227
- case 'container':
228
- this.setHostProperty('container', changes['container'].currentValue);
229
- break;
230
- case 'datasetfieldlabel':
231
- this.setHostProperty('dataset-field-label', changes['datasetfieldlabel'].currentValue);
232
- break;
233
- case 'slotspanel':
234
- this.setHostProperty('slots-panel', changes['slotspanel'].currentValue);
235
- break;
236
- case 'slotcontainer':
237
- this.setHostProperty('slot-container', changes['slotcontainer'].currentValue);
238
- break;
239
- case 'fieldlabel':
240
- this.setHostProperty('field-label', changes['fieldlabel'].currentValue);
241
- break;
242
- case 'itemslotpicker':
243
- this.setHostProperty('item-slot-picker', changes['itemslotpicker'].currentValue);
244
- break;
245
- case 'language':
246
- this.setHostProperty('language', changes['language'].currentValue);
247
- break;
248
- case 'size':
249
- this.setHostProperty('size', changes['size'].currentValue);
250
- break;
251
- default:
252
- break;
253
- }
254
- }
255
- }
256
-
257
- /**
258
- * Forward a wrapper @Input to the underlying host element via Renderer2 so
259
- * the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
260
- * Unlike a "skip undefined" guard, this lets consumers reset values back to
261
- * undefined / null by clearing their bindings.
262
- */
263
- private setHostProperty(key: string, value: unknown): void {
264
- this.renderer.setProperty(this.host, key, value);
265
- }
266
-
267
- private bindEvents(): void {
268
- this.listenerCleanup.push(
269
- this.renderer.listen(this.host, 'luzmo-dataset-constraint-triggered', (event: Event) => {
270
- const typed = event as CustomEvent<DatasetConstraintTriggeredEventDetail>;
271
- this.luzmoDatasetConstraintTriggered.emit(typed);
272
- })
273
- );
274
-
275
- this.listenerCleanup.push(
276
- this.renderer.listen(this.host, 'luzmo-slots-contents-changed', (event: Event) => {
277
- const typed = event as CustomEvent<SlotsContentsChangedEventDetail>;
278
- this.luzmoSlotsContentsChanged.emit(typed);
279
- })
280
- );
281
-
282
- this.listenerCleanup.push(
283
- this.renderer.listen(this.host, 'luzmo-dataset-changed', (event: Event) => {
284
- const typed = event as CustomEvent<DatasetChangedEventDetail>;
285
- this.luzmoDatasetChanged.emit(typed);
286
- })
287
- );
288
-
289
- this.listenerCleanup.push(
290
- this.renderer.listen(this.host, 'luzmo-slot-constraint-triggered', (event: Event) => {
291
- const typed = event as CustomEvent<SlotConstraintTriggeredEventDetail>;
292
- this.luzmoSlotConstraintTriggered.emit(typed);
293
- })
294
- );
295
- }
296
- }
297
-
298
- /** The underlying custom element type for LuzmoItemSlotPickerPanel */
299
- export type LuzmoItemSlotPickerPanelElement = LuzmoItemSlotPickerPanelHostElement;
@@ -1,241 +0,0 @@
1
- import { booleanAttribute, ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, Input, OnChanges, output, Renderer2, SimpleChanges } from '@angular/core';
2
- import '@luzmo/analytics-components-kit/item-slot-picker';
3
- import type { LuzmoItemSlotPicker as LuzmoItemSlotPickerHostElement, SlotContentsChangedEventDetail } from '@luzmo/analytics-components-kit/item-slot-picker';
4
- export type { SlotContentsChangedEventDetail } from '@luzmo/analytics-components-kit/item-slot-picker';
5
- import type { Placement } from '@floating-ui/dom';
6
- import type { DatasetsDataFields, SlotContent } from '@luzmo/analytics-components-kit/types';
7
- import type { SlotConfig, SlotName, VizItemType } from '@luzmo/dashboard-contents-types';
8
-
9
- @Component({
10
- selector: 'luzmo-item-slot-picker',
11
- exportAs: 'luzmoItemSlotPicker',
12
- standalone: true,
13
- changeDetection: ChangeDetectionStrategy.OnPush,
14
- template: '<ng-content />'
15
- })
16
- /**
17
- * Angular wrapper component for <luzmo-item-slot-picker>
18
- */
19
- export class LuzmoItemSlotPicker implements OnChanges {
20
- private readonly elementRef = inject<ElementRef<LuzmoItemSlotPickerHostElement>>(ElementRef);
21
- private readonly renderer = inject<Renderer2>(Renderer2);
22
- private readonly destroyRef = inject<DestroyRef>(DestroyRef);
23
- private readonly host = this.elementRef.nativeElement;
24
- private readonly listenerCleanup: Array<() => void> = [];
25
-
26
- /** The underlying custom element instance. Use to call imperative methods. */
27
- get nativeElement(): LuzmoItemSlotPickerHostElement {
28
- return this.host;
29
- }
30
-
31
- /** The API URL for the databroker */
32
- @Input({ alias: 'apiUrl' })
33
- apiUrl?: string;
34
-
35
- /** The API key to fetch the columns */
36
- @Input({ alias: 'authKey' })
37
- authKey?: string;
38
-
39
- /** The API token to fetch the columns */
40
- @Input({ alias: 'authToken' })
41
- authToken?: string;
42
-
43
- /** The type of the item */
44
- @Input({ alias: 'itemType' })
45
- itemType?: VizItemType | string;
46
-
47
- /** The name of the slot */
48
- @Input({ alias: 'slotName' })
49
- slotName?: SlotName;
50
-
51
- /** (Optional) The configuration of the slot, overrides the slot configuration loaded from the item type & slot name. */
52
- @Input({ alias: 'slotConfiguration' })
53
- slotConfiguration?: SlotConfig;
54
-
55
- /** The contents of the slot */
56
- @Input({ alias: 'slotContents' })
57
- slotContents?: SlotContent[];
58
-
59
- /** The language to use for locale-aware formatting and labels of data fields */
60
- @Input({ alias: 'contentLanguage' })
61
- contentLanguage?: string;
62
-
63
- /** Whether the picker is disabled */
64
- @Input({ alias: 'disabled', transform: booleanAttribute })
65
- disabled?: boolean;
66
-
67
- /** Whether the picker grows to full width */
68
- @Input({ alias: 'grows', transform: booleanAttribute })
69
- grows?: boolean;
70
-
71
- /** The type of config interaction */
72
- @Input({ alias: 'menu' })
73
- menu?: 'default' | 'draggable' | 'event-only';
74
-
75
- /** Whether the picker has a label */
76
- @Input({ alias: 'hasLabel', transform: booleanAttribute })
77
- hasLabel?: boolean;
78
-
79
- /** The label for the picker, if hasLabel is true */
80
- @Input({ alias: 'label' })
81
- label?: string;
82
-
83
- /** Whether the picker allows single or multiple selections. Only relevant if the slot configuration allows multiple data fields. */
84
- @Input({ alias: 'selects' })
85
- selects?: 'single' | 'multiple';
86
-
87
- /** Where to show icons */
88
- @Input({ alias: 'icons' })
89
- icons?: 'none' | 'menu-only' | 'all';
90
-
91
- /** The placeholder text for the picker is no value selected. */
92
- @Input({ alias: 'placeholder' })
93
- placeholder?: string;
94
-
95
- /** The datasets and their dataFields to display */
96
- @Input({ alias: 'datasetsDataFields' })
97
- datasetsDataFields?: DatasetsDataFields[];
98
-
99
- /** Placement of the data-fields-select dropdown */
100
- @Input({ alias: 'placement' })
101
- placement?: Placement;
102
-
103
- /** Placement of the slot menu popover. Only relevant for 'popup' and 'draggable' menu type */
104
- @Input({ alias: 'slotMenuPlacement' })
105
- slotMenuPlacement?: Placement;
106
-
107
- /** Whether to hide the configuration button */
108
- @Input({ alias: 'hideConfiguration', transform: booleanAttribute })
109
- hideConfiguration?: boolean;
110
-
111
- /** Whether to hide the clear button op a select */
112
- @Input({ alias: 'hideClear', transform: booleanAttribute })
113
- hideClear?: boolean;
114
-
115
- /** The language for UI labels. Supported values: 'en', 'nl', 'fr', 'de', 'es' */
116
- @Input({ alias: 'language' })
117
- language?: string;
118
-
119
- /** Whether the search input is visible: `on`, `off`, or `auto`. */
120
- @Input({ alias: 'search' })
121
- search?: 'on' | 'off' | 'auto';
122
-
123
- /** The size of the element */
124
- @Input({ alias: 'size' })
125
- size?: 's' | 'm' | 'l' | 'xl';
126
-
127
- /** Announces that the slot contents has changed */
128
- readonly luzmoSlotContentsChanged = output<CustomEvent<SlotContentsChangedEventDetail>>({ alias: 'luzmoSlotContentsChanged' });
129
-
130
- constructor() {
131
- this.bindEvents();
132
- this.destroyRef.onDestroy(() => {
133
- for (const cleanup of this.listenerCleanup) {
134
- cleanup();
135
- }
136
- });
137
- }
138
-
139
- ngOnChanges(changes: SimpleChanges): void {
140
- for (const key of Object.keys(changes)) {
141
- switch (key) {
142
- case 'apiUrl':
143
- this.setHostProperty('apiUrl', changes['apiUrl'].currentValue);
144
- break;
145
- case 'authKey':
146
- this.setHostProperty('authKey', changes['authKey'].currentValue);
147
- break;
148
- case 'authToken':
149
- this.setHostProperty('authToken', changes['authToken'].currentValue);
150
- break;
151
- case 'itemType':
152
- this.setHostProperty('itemType', changes['itemType'].currentValue);
153
- break;
154
- case 'slotName':
155
- this.setHostProperty('slotName', changes['slotName'].currentValue);
156
- break;
157
- case 'slotConfiguration':
158
- this.setHostProperty('slotConfiguration', changes['slotConfiguration'].currentValue);
159
- break;
160
- case 'slotContents':
161
- this.setHostProperty('slotContents', changes['slotContents'].currentValue);
162
- break;
163
- case 'contentLanguage':
164
- this.setHostProperty('contentLanguage', changes['contentLanguage'].currentValue);
165
- break;
166
- case 'disabled':
167
- this.setHostProperty('disabled', changes['disabled'].currentValue);
168
- break;
169
- case 'grows':
170
- this.setHostProperty('grows', changes['grows'].currentValue);
171
- break;
172
- case 'menu':
173
- this.setHostProperty('menu', changes['menu'].currentValue);
174
- break;
175
- case 'hasLabel':
176
- this.setHostProperty('hasLabel', changes['hasLabel'].currentValue);
177
- break;
178
- case 'label':
179
- this.setHostProperty('label', changes['label'].currentValue);
180
- break;
181
- case 'selects':
182
- this.setHostProperty('selects', changes['selects'].currentValue);
183
- break;
184
- case 'icons':
185
- this.setHostProperty('icons', changes['icons'].currentValue);
186
- break;
187
- case 'placeholder':
188
- this.setHostProperty('placeholder', changes['placeholder'].currentValue);
189
- break;
190
- case 'datasetsDataFields':
191
- this.setHostProperty('datasetsDataFields', changes['datasetsDataFields'].currentValue);
192
- break;
193
- case 'placement':
194
- this.setHostProperty('placement', changes['placement'].currentValue);
195
- break;
196
- case 'slotMenuPlacement':
197
- this.setHostProperty('slotMenuPlacement', changes['slotMenuPlacement'].currentValue);
198
- break;
199
- case 'hideConfiguration':
200
- this.setHostProperty('hideConfiguration', changes['hideConfiguration'].currentValue);
201
- break;
202
- case 'hideClear':
203
- this.setHostProperty('hideClear', changes['hideClear'].currentValue);
204
- break;
205
- case 'language':
206
- this.setHostProperty('language', changes['language'].currentValue);
207
- break;
208
- case 'search':
209
- this.setHostProperty('search', changes['search'].currentValue);
210
- break;
211
- case 'size':
212
- this.setHostProperty('size', changes['size'].currentValue);
213
- break;
214
- default:
215
- break;
216
- }
217
- }
218
- }
219
-
220
- /**
221
- * Forward a wrapper @Input to the underlying host element via Renderer2 so
222
- * the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
223
- * Unlike a "skip undefined" guard, this lets consumers reset values back to
224
- * undefined / null by clearing their bindings.
225
- */
226
- private setHostProperty(key: string, value: unknown): void {
227
- this.renderer.setProperty(this.host, key, value);
228
- }
229
-
230
- private bindEvents(): void {
231
- this.listenerCleanup.push(
232
- this.renderer.listen(this.host, 'luzmo-slot-contents-changed', (event: Event) => {
233
- const typed = event as CustomEvent<SlotContentsChangedEventDetail>;
234
- this.luzmoSlotContentsChanged.emit(typed);
235
- })
236
- );
237
- }
238
- }
239
-
240
- /** The underlying custom element type for LuzmoItemSlotPicker */
241
- export type LuzmoItemSlotPickerElement = LuzmoItemSlotPickerHostElement;
@@ -1,121 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, Input, OnChanges, output, Renderer2, SimpleChanges } from '@angular/core';
2
- import '@luzmo/analytics-components-kit/slot-menu-list';
3
- import type { LuzmoSlotMenuList as LuzmoSlotMenuListHostElement, SlotListChangedEventDetail } from '@luzmo/analytics-components-kit/slot-menu-list';
4
- export type { SlotListChangedEventDetail } from '@luzmo/analytics-components-kit/slot-menu-list';
5
- import type { SlotContent } from '@luzmo/analytics-components-kit/types';
6
- import type { SlotName } from '@luzmo/dashboard-contents-types';
7
-
8
- @Component({
9
- selector: 'luzmo-slot-menu-list',
10
- exportAs: 'luzmoSlotMenuList',
11
- standalone: true,
12
- changeDetection: ChangeDetectionStrategy.OnPush,
13
- template: '<ng-content />'
14
- })
15
- /**
16
- * Angular wrapper component for <luzmo-slot-menu-list>
17
- */
18
- export class LuzmoSlotMenuList implements OnChanges {
19
- private readonly elementRef = inject<ElementRef<LuzmoSlotMenuListHostElement>>(ElementRef);
20
- private readonly renderer = inject<Renderer2>(Renderer2);
21
- private readonly destroyRef = inject<DestroyRef>(DestroyRef);
22
- private readonly host = this.elementRef.nativeElement;
23
- private readonly listenerCleanup: Array<() => void> = [];
24
-
25
- /** The underlying custom element instance. Use to call imperative methods. */
26
- get nativeElement(): LuzmoSlotMenuListHostElement {
27
- return this.host;
28
- }
29
-
30
- /** The language of the settings interface */
31
- @Input({ alias: 'language' })
32
- language?: string;
33
-
34
- /** The language to use for locale-aware formatting and labels */
35
- @Input({ alias: 'contentLanguage' })
36
- contentLanguage?: string;
37
-
38
- /** The list of slot contents (columns/formulas) shown in the reorderable list. */
39
- @Input({ alias: 'slotContents' })
40
- slotContents?: SlotContent[];
41
-
42
- /** The containing slot name used to identify measure calculations. */
43
- @Input({ alias: 'slotName' })
44
- slotName?: SlotName;
45
-
46
- /** The containing slot type used to identify measure calculations. */
47
- @Input({ alias: 'slotType' })
48
- slotType?: string;
49
-
50
- /** Index of the currently active/selected slot content. */
51
- @Input({ alias: 'activeIndex' })
52
- activeIndex?: number;
53
-
54
- /** The size of the element */
55
- @Input({ alias: 'size' })
56
- size?: 's' | 'm' | 'l' | 'xl';
57
-
58
- /** Emitted when the slot list changes */
59
- readonly luzmoSlotListChanged = output<CustomEvent<SlotListChangedEventDetail>>({ alias: 'luzmoSlotListChanged' });
60
-
61
- constructor() {
62
- this.bindEvents();
63
- this.destroyRef.onDestroy(() => {
64
- for (const cleanup of this.listenerCleanup) {
65
- cleanup();
66
- }
67
- });
68
- }
69
-
70
- ngOnChanges(changes: SimpleChanges): void {
71
- for (const key of Object.keys(changes)) {
72
- switch (key) {
73
- case 'language':
74
- this.setHostProperty('language', changes['language'].currentValue);
75
- break;
76
- case 'contentLanguage':
77
- this.setHostProperty('contentLanguage', changes['contentLanguage'].currentValue);
78
- break;
79
- case 'slotContents':
80
- this.setHostProperty('slotContents', changes['slotContents'].currentValue);
81
- break;
82
- case 'slotName':
83
- this.setHostProperty('slotName', changes['slotName'].currentValue);
84
- break;
85
- case 'slotType':
86
- this.setHostProperty('slotType', changes['slotType'].currentValue);
87
- break;
88
- case 'activeIndex':
89
- this.setHostProperty('activeIndex', changes['activeIndex'].currentValue);
90
- break;
91
- case 'size':
92
- this.setHostProperty('size', changes['size'].currentValue);
93
- break;
94
- default:
95
- break;
96
- }
97
- }
98
- }
99
-
100
- /**
101
- * Forward a wrapper @Input to the underlying host element via Renderer2 so
102
- * the wrapper stays compatible with non-DOM Angular platforms (SSR, tests).
103
- * Unlike a "skip undefined" guard, this lets consumers reset values back to
104
- * undefined / null by clearing their bindings.
105
- */
106
- private setHostProperty(key: string, value: unknown): void {
107
- this.renderer.setProperty(this.host, key, value);
108
- }
109
-
110
- private bindEvents(): void {
111
- this.listenerCleanup.push(
112
- this.renderer.listen(this.host, 'luzmo-slot-list-changed', (event: Event) => {
113
- const typed = event as CustomEvent<SlotListChangedEventDetail>;
114
- this.luzmoSlotListChanged.emit(typed);
115
- })
116
- );
117
- }
118
- }
119
-
120
- /** The underlying custom element type for LuzmoSlotMenuList */
121
- export type LuzmoSlotMenuListElement = LuzmoSlotMenuListHostElement;