@santi020k/lumen-core 3.0.1 → 4.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 (147) hide show
  1. package/PHONE_FLAG_LICENSE.txt +21 -0
  2. package/README.md +363 -3
  3. package/THIRD_PARTY_NOTICES.md +16 -2
  4. package/dist/ai-surfaces.d.ts +25 -0
  5. package/dist/ai-surfaces.d.ts.map +1 -0
  6. package/dist/ai-surfaces.js +162 -0
  7. package/dist/amount-field.d.ts +22 -0
  8. package/dist/amount-field.d.ts.map +1 -0
  9. package/dist/amount-field.js +207 -0
  10. package/dist/attachments.d.ts +15 -0
  11. package/dist/attachments.d.ts.map +1 -0
  12. package/dist/attachments.js +123 -0
  13. package/dist/bullet-chart.d.ts +33 -0
  14. package/dist/bullet-chart.d.ts.map +1 -0
  15. package/dist/bullet-chart.js +80 -0
  16. package/dist/chart-activation.d.ts +32 -0
  17. package/dist/chart-activation.d.ts.map +1 -0
  18. package/dist/chart-activation.js +97 -0
  19. package/dist/chart-interaction.d.ts +12 -0
  20. package/dist/chart-interaction.d.ts.map +1 -0
  21. package/dist/chart-interaction.js +274 -0
  22. package/dist/chart-models.d.ts +156 -0
  23. package/dist/chart-models.d.ts.map +1 -0
  24. package/dist/chart-models.js +348 -0
  25. package/dist/chart-motion.d.ts +6 -0
  26. package/dist/chart-motion.d.ts.map +1 -0
  27. package/dist/chart-motion.js +107 -0
  28. package/dist/charts.d.ts +58 -3
  29. package/dist/charts.d.ts.map +1 -1
  30. package/dist/charts.js +247 -18
  31. package/dist/code.js +1 -1
  32. package/dist/combobox.d.ts +7 -0
  33. package/dist/combobox.d.ts.map +1 -0
  34. package/dist/combobox.js +253 -0
  35. package/dist/comparison-chart.d.ts +32 -0
  36. package/dist/comparison-chart.d.ts.map +1 -0
  37. package/dist/comparison-chart.js +64 -0
  38. package/dist/components.d.ts +210 -25
  39. package/dist/components.d.ts.map +1 -1
  40. package/dist/components.js +102 -26
  41. package/dist/dashboard.d.ts +16 -0
  42. package/dist/dashboard.d.ts.map +1 -0
  43. package/dist/dashboard.js +21 -0
  44. package/dist/data.d.ts.map +1 -1
  45. package/dist/data.js +21 -5
  46. package/dist/dates.d.ts +13 -0
  47. package/dist/dates.d.ts.map +1 -0
  48. package/dist/dates.js +37 -0
  49. package/dist/device-frame.d.ts +25 -0
  50. package/dist/device-frame.d.ts.map +1 -0
  51. package/dist/device-frame.js +50 -0
  52. package/dist/direction.d.ts +3 -0
  53. package/dist/direction.d.ts.map +1 -0
  54. package/dist/direction.js +10 -0
  55. package/dist/extended-charts.d.ts +95 -0
  56. package/dist/extended-charts.d.ts.map +1 -0
  57. package/dist/extended-charts.js +175 -0
  58. package/dist/figma.d.ts.map +1 -1
  59. package/dist/figma.js +10 -1
  60. package/dist/forms.d.ts.map +1 -1
  61. package/dist/forms.js +18 -4
  62. package/dist/icon-data.generated.d.ts +1 -1
  63. package/dist/icon-data.generated.d.ts.map +1 -1
  64. package/dist/icon-data.generated.js +1 -1
  65. package/dist/icons.js +3 -4
  66. package/dist/illustrations.generated.d.ts +1 -1
  67. package/dist/image-comparison.d.ts +14 -0
  68. package/dist/image-comparison.d.ts.map +1 -0
  69. package/dist/image-comparison.js +48 -0
  70. package/dist/index.d.ts +35 -4
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +34 -3
  73. package/dist/media-viewport.d.ts +24 -0
  74. package/dist/media-viewport.d.ts.map +1 -0
  75. package/dist/media-viewport.js +119 -0
  76. package/dist/media-workspace.d.ts +27 -0
  77. package/dist/media-workspace.d.ts.map +1 -0
  78. package/dist/media-workspace.js +83 -0
  79. package/dist/message-scroller.d.ts +14 -0
  80. package/dist/message-scroller.d.ts.map +1 -0
  81. package/dist/message-scroller.js +113 -0
  82. package/dist/motion-workflows.d.ts +24 -0
  83. package/dist/motion-workflows.d.ts.map +1 -0
  84. package/dist/motion-workflows.js +220 -0
  85. package/dist/motion.d.ts +12 -0
  86. package/dist/motion.d.ts.map +1 -0
  87. package/dist/motion.js +96 -0
  88. package/dist/native-input.d.ts +25 -0
  89. package/dist/native-input.d.ts.map +1 -0
  90. package/dist/native-input.js +188 -0
  91. package/dist/phone-flags.generated.d.ts +2 -0
  92. package/dist/phone-flags.generated.d.ts.map +1 -0
  93. package/dist/phone-flags.generated.js +263 -0
  94. package/dist/phone.d.ts +4 -0
  95. package/dist/phone.d.ts.map +1 -1
  96. package/dist/phone.js +6 -1
  97. package/dist/rich-text.d.ts +7 -0
  98. package/dist/rich-text.d.ts.map +1 -1
  99. package/dist/rich-text.js +13 -0
  100. package/dist/rive.d.ts +37 -0
  101. package/dist/rive.d.ts.map +1 -0
  102. package/dist/rive.js +129 -0
  103. package/dist/schedule.d.ts.map +1 -1
  104. package/dist/schedule.js +63 -23
  105. package/dist/tab-indicator.d.ts +3 -0
  106. package/dist/tab-indicator.d.ts.map +1 -0
  107. package/dist/tab-indicator.js +57 -0
  108. package/dist/theme-audit.d.ts +16 -0
  109. package/dist/theme-audit.d.ts.map +1 -0
  110. package/dist/theme-audit.js +57 -0
  111. package/dist/theme-builder.d.ts +7 -1
  112. package/dist/theme-builder.d.ts.map +1 -1
  113. package/dist/theme-builder.js +45 -23
  114. package/dist/theme-presets.generated.d.ts +217 -0
  115. package/dist/theme-presets.generated.d.ts.map +1 -0
  116. package/dist/theme-presets.generated.js +231 -0
  117. package/dist/theme.d.ts +11 -3
  118. package/dist/theme.d.ts.map +1 -1
  119. package/dist/theme.js +56 -6
  120. package/dist/virtual-collection.d.ts +14 -0
  121. package/dist/virtual-collection.d.ts.map +1 -0
  122. package/dist/virtual-collection.js +132 -0
  123. package/dist/virtual-list.d.ts +7 -0
  124. package/dist/virtual-list.d.ts.map +1 -0
  125. package/dist/virtual-list.js +135 -0
  126. package/dist/virtual-window.d.ts +19 -0
  127. package/dist/virtual-window.d.ts.map +1 -0
  128. package/dist/virtual-window.js +84 -0
  129. package/dist/visual-effects.d.ts +6 -0
  130. package/dist/visual-effects.d.ts.map +1 -0
  131. package/dist/visual-effects.js +44 -0
  132. package/dist/world-map-data.generated.d.ts +9 -0
  133. package/dist/world-map-data.generated.d.ts.map +1 -0
  134. package/dist/world-map-data.generated.js +240 -0
  135. package/dist/world-map-navigation.d.ts +16 -0
  136. package/dist/world-map-navigation.d.ts.map +1 -0
  137. package/dist/world-map-navigation.js +53 -0
  138. package/dist/world-map-pan.d.ts +3 -0
  139. package/dist/world-map-pan.d.ts.map +1 -0
  140. package/dist/world-map-pan.js +66 -0
  141. package/dist/world-map-zoom.d.ts +13 -0
  142. package/dist/world-map-zoom.d.ts.map +1 -0
  143. package/dist/world-map-zoom.js +61 -0
  144. package/dist/world-map.d.ts +71 -0
  145. package/dist/world-map.d.ts.map +1 -0
  146. package/dist/world-map.js +143 -0
  147. package/package.json +51 -4
@@ -5,6 +5,8 @@ export const lumenComponentNames = [
5
5
  'Agenda',
6
6
  'AspectRatio',
7
7
  'Attachment',
8
+ 'AttachmentList',
9
+ 'AttachmentPreview',
8
10
  'Autocomplete',
9
11
  'Avatar',
10
12
  'Backdrop',
@@ -41,6 +43,11 @@ export const lumenComponentNames = [
41
43
  'DatePicker',
42
44
  'DateRangePicker',
43
45
  'Dialog',
46
+ 'DialogHeader',
47
+ 'DialogTitle',
48
+ 'DialogBody',
49
+ 'DialogFooter',
50
+ 'DialogClose',
44
51
  'Direction',
45
52
  'Drawer',
46
53
  'DropdownMenu',
@@ -57,6 +64,11 @@ export const lumenComponentNames = [
57
64
  'HoverCard',
58
65
  'Icon',
59
66
  'Image',
67
+ 'DeviceFrame',
68
+ 'ImageComparison',
69
+ 'MediaViewport',
70
+ 'MediaThumbnail',
71
+ 'MediaFilmstrip',
60
72
  'Illustration',
61
73
  'Input',
62
74
  'InputGroup',
@@ -75,6 +87,7 @@ export const lumenComponentNames = [
75
87
  'MessageScroller',
76
88
  'NativeSelect',
77
89
  'NavigationMenu',
90
+ 'AmountField',
78
91
  'NumberField',
79
92
  'Pagination',
80
93
  'PasswordField',
@@ -145,6 +158,9 @@ export const lumenComponentNames = [
145
158
  'Segmented',
146
159
  'Toolbar',
147
160
  'Descriptions',
161
+ 'DescriptionItem',
162
+ 'DescriptionTerm',
163
+ 'DescriptionDetail',
148
164
  'Popconfirm',
149
165
  'Transfer',
150
166
  'Cascader',
@@ -159,9 +175,37 @@ export const lumenComponentNames = [
159
175
  'Heatmap',
160
176
  'RangeChart',
161
177
  'ComboChart',
162
- 'VisuallyHidden'
178
+ 'VisuallyHidden',
179
+ 'CalendarHeatmap',
180
+ 'FunnelChart',
181
+ 'BoxPlot',
182
+ 'BulletChart',
183
+ 'LollipopChart',
184
+ 'DumbbellChart',
185
+ 'Histogram',
186
+ 'WaterfallChart',
187
+ 'ChangeSummary',
188
+ 'FilterBar',
189
+ 'ChartMotion',
190
+ 'MotionGroup',
191
+ 'VisualEffect',
192
+ 'ApprovalCard',
193
+ 'PromptComposer',
194
+ 'SourceCitation',
195
+ 'StreamMessage',
196
+ 'ToolActivity',
197
+ 'WorldMap'
163
198
  ];
164
199
  export const lumenComponentBehavior = {
200
+ ApprovalCard: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
201
+ PromptComposer: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
202
+ SourceCitation: { astro: 'none', elements: 'registered-element', react: 'component' },
203
+ StreamMessage: { astro: 'none', elements: 'registered-element', react: 'component' },
204
+ ToolActivity: { astro: 'none', elements: 'registered-element', react: 'component' },
205
+ ChartMotion: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
206
+ MotionGroup: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
207
+ VisualEffect: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
208
+ AmountField: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
165
209
  Accordion: { astro: 'none', elements: 'registered-element', react: 'component' },
166
210
  Affix: { astro: 'none', elements: 'registered-element', react: 'component' },
167
211
  Agenda: { astro: 'none', elements: 'registered-element', react: 'component' },
@@ -173,12 +217,14 @@ export const lumenComponentBehavior = {
173
217
  AnimatedPortrait: { astro: 'none', elements: 'registered-element', react: 'component' },
174
218
  AspectRatio: { astro: 'none', elements: 'registered-element', react: 'component' },
175
219
  Attachment: { astro: 'none', elements: 'registered-element', react: 'component' },
220
+ AttachmentList: { astro: 'none', elements: 'registered-element', react: 'component' },
221
+ AttachmentPreview: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
176
222
  Autocomplete: { astro: 'none', elements: 'registered-element', react: 'component' },
177
223
  Avatar: { astro: 'none', elements: 'registered-element', react: 'component' },
178
224
  Backdrop: { astro: 'none', elements: 'registered-element', react: 'component' },
179
- BackToTop: { astro: 'none', elements: 'registered-element', react: 'component' },
225
+ BackToTop: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
180
226
  Badge: { astro: 'none', elements: 'registered-element', react: 'component' },
181
- BarChart: { astro: 'none', elements: 'registered-element', react: 'component' },
227
+ BarChart: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
182
228
  Breadcrumb: { astro: 'none', elements: 'registered-element', react: 'component' },
183
229
  Bubble: { astro: 'none', elements: 'registered-element', react: 'component' },
184
230
  Button: { astro: 'none', elements: 'registered-element', react: 'component' },
@@ -193,14 +239,14 @@ export const lumenComponentBehavior = {
193
239
  CardHeader: { astro: 'none', elements: 'registered-element', react: 'component' },
194
240
  CardTitle: { astro: 'none', elements: 'registered-element', react: 'component' },
195
241
  Carousel: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
196
- Cascader: { astro: 'none', elements: 'registered-element', react: 'component' },
242
+ Cascader: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
197
243
  Chart: { astro: 'none', elements: 'registered-element', react: 'component' },
198
244
  Checkbox: { astro: 'none', elements: 'registered-element', react: 'component' },
199
245
  CheckboxGroup: { astro: 'none', elements: 'registered-element', react: 'component' },
200
246
  Code: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
201
247
  CodeTabs: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
202
248
  Collapsible: { astro: 'none', elements: 'registered-element', react: 'component' },
203
- ComboChart: { astro: 'none', elements: 'registered-element', react: 'component' },
249
+ ComboChart: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
204
250
  ColorPicker: { astro: 'none', elements: 'registered-element', react: 'component' },
205
251
  Combobox: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
206
252
  Command: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
@@ -210,10 +256,18 @@ export const lumenComponentBehavior = {
210
256
  ContextMenu: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
211
257
  CoverImage: { astro: 'none', elements: 'registered-element', react: 'component' },
212
258
  DataTable: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
213
- DatePicker: { astro: 'none', elements: 'registered-element', react: 'component' },
259
+ DatePicker: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
214
260
  DateRangePicker: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
261
+ DescriptionItem: { astro: 'none', elements: 'registered-element', react: 'component' },
262
+ DescriptionTerm: { astro: 'none', elements: 'registered-element', react: 'component' },
263
+ DescriptionDetail: { astro: 'none', elements: 'registered-element', react: 'component' },
215
264
  Descriptions: { astro: 'none', elements: 'registered-element', react: 'component' },
216
265
  Dialog: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
266
+ DialogHeader: { astro: 'none', elements: 'registered-element', react: 'component' },
267
+ DialogTitle: { astro: 'none', elements: 'registered-element', react: 'component' },
268
+ DialogBody: { astro: 'none', elements: 'registered-element', react: 'component' },
269
+ DialogFooter: { astro: 'none', elements: 'registered-element', react: 'component' },
270
+ DialogClose: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
217
271
  Direction: { astro: 'none', elements: 'registered-element', react: 'component' },
218
272
  Drawer: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
219
273
  DropdownMenu: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
@@ -221,18 +275,32 @@ export const lumenComponentBehavior = {
221
275
  ErrorState: { astro: 'none', elements: 'registered-element', react: 'component' },
222
276
  ErrorSummary: { astro: 'none', elements: 'registered-element', react: 'component' },
223
277
  Eyebrow: { astro: 'none', elements: 'registered-element', react: 'component' },
224
- Field: { astro: 'none', elements: 'registered-element', react: 'component' },
278
+ Field: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
225
279
  FieldError: { astro: 'none', elements: 'registered-element', react: 'component' },
226
- FileUpload: { astro: 'none', elements: 'registered-element', react: 'component' },
280
+ FileUpload: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
227
281
  FloatingBadge: { astro: 'none', elements: 'registered-element', react: 'component' },
228
282
  Form: { astro: 'ui-primitives', elements: 'none', react: 'hook' },
229
283
  FormattedDate: { astro: 'none', elements: 'registered-element', react: 'component' },
230
284
  Graphic: { astro: 'none', elements: 'registered-element', react: 'component' },
231
- Heatmap: { astro: 'none', elements: 'registered-element', react: 'component' },
285
+ Heatmap: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
286
+ LollipopChart: { astro: 'none', elements: 'registered-element', react: 'component' },
287
+ DumbbellChart: { astro: 'none', elements: 'registered-element', react: 'component' },
288
+ CalendarHeatmap: { astro: 'none', elements: 'registered-element', react: 'component' },
289
+ FunnelChart: { astro: 'none', elements: 'registered-element', react: 'component' },
290
+ BoxPlot: { astro: 'none', elements: 'registered-element', react: 'component' },
291
+ BulletChart: { astro: 'none', elements: 'registered-element', react: 'component' },
292
+ Histogram: { astro: 'none', elements: 'registered-element', react: 'component' },
293
+ WaterfallChart: { astro: 'none', elements: 'registered-element', react: 'component' },
232
294
  GradientDivider: { astro: 'none', elements: 'registered-element', react: 'component' },
233
295
  Grid: { astro: 'none', elements: 'registered-element', react: 'component' },
234
296
  HoverCard: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
235
297
  Icon: { astro: 'none', elements: 'registered-element', react: 'component' },
298
+ DeviceFrame: { astro: 'none', elements: 'registered-element', react: 'component' },
299
+ WorldMap: { astro: 'ui-primitives', astroRuntimeBypass: 'Static map and highlighted country list remain visible without JavaScript.', elements: 'registered-element', react: 'component' },
300
+ ImageComparison: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
301
+ MediaViewport: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
302
+ MediaThumbnail: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
303
+ MediaFilmstrip: { astro: 'none', elements: 'registered-element', react: 'component' },
236
304
  Image: { astro: 'none', elements: 'registered-element', react: 'component' },
237
305
  Illustration: { astro: 'none', elements: 'registered-element', react: 'component' },
238
306
  Input: { astro: 'none', elements: 'registered-element', react: 'component' },
@@ -244,14 +312,14 @@ export const lumenComponentBehavior = {
244
312
  Kbd: { astro: 'none', elements: 'registered-element', react: 'component' },
245
313
  Label: { astro: 'none', elements: 'registered-element', react: 'component' },
246
314
  LanguageToggle: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
247
- LineChart: { astro: 'none', elements: 'registered-element', react: 'component' },
315
+ LineChart: { astro: 'ui-primitives', astroRuntimeBypass: 'Static charts work without the runtime; interactive or drilldown charts require UIPrimitives.', elements: 'registered-element', react: 'component' },
248
316
  Link: { astro: 'none', elements: 'registered-element', react: 'component' },
249
317
  ListBox: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
250
318
  Marker: { astro: 'none', elements: 'registered-element', react: 'component' },
251
- Mentions: { astro: 'none', elements: 'registered-element', react: 'component' },
319
+ Mentions: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
252
320
  Menubar: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
253
321
  Message: { astro: 'none', elements: 'registered-element', react: 'component' },
254
- MessageScroller: { astro: 'none', elements: 'registered-element', react: 'component' },
322
+ MessageScroller: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
255
323
  Meter: { astro: 'none', elements: 'registered-element', react: 'component' },
256
324
  NativeSelect: { astro: 'none', elements: 'registered-element', react: 'component' },
257
325
  NavigationMenu: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
@@ -261,12 +329,12 @@ export const lumenComponentBehavior = {
261
329
  Particles: { astro: 'none', elements: 'registered-element', react: 'component' },
262
330
  PasswordField: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
263
331
  PhoneInput: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
264
- PieChart: { astro: 'none', elements: 'registered-element', react: 'component' },
332
+ PieChart: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
265
333
  Pill: { astro: 'none', elements: 'registered-element', react: 'component' },
266
- Popconfirm: { astro: 'none', elements: 'registered-element', react: 'component' },
267
- Popover: { astro: 'none', elements: 'registered-element', react: 'hook' },
334
+ Popconfirm: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
335
+ Popover: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
268
336
  Progress: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
269
- RangeChart: { astro: 'none', elements: 'registered-element', react: 'component' },
337
+ RangeChart: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
270
338
  Prose: { astro: 'none', elements: 'registered-element', react: 'component' },
271
339
  QRCode: { astro: 'none', elements: 'registered-element', react: 'component' },
272
340
  RadioGroup: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
@@ -275,7 +343,7 @@ export const lumenComponentBehavior = {
275
343
  RevealGroup: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
276
344
  RichTextEditor: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
277
345
  Schedule: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
278
- ScatterChart: { astro: 'none', elements: 'registered-element', react: 'component' },
346
+ ScatterChart: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
279
347
  ScrollArea: { astro: 'none', elements: 'registered-element', react: 'component' },
280
348
  ScrollProgress: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
281
349
  ScrollReveal: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
@@ -289,7 +357,7 @@ export const lumenComponentBehavior = {
289
357
  SkipLink: { astro: 'none', elements: 'registered-element', react: 'component' },
290
358
  Slider: { astro: 'none', elements: 'registered-element', react: 'component' },
291
359
  Sparkline: { astro: 'none', elements: 'registered-element', react: 'component' },
292
- SpeedDial: { astro: 'none', elements: 'registered-element', react: 'component' },
360
+ SpeedDial: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
293
361
  Spinner: { astro: 'none', elements: 'registered-element', react: 'component' },
294
362
  Stack: { astro: 'none', elements: 'registered-element', react: 'component' },
295
363
  Stat: { astro: 'none', elements: 'registered-element', react: 'component' },
@@ -305,7 +373,7 @@ export const lumenComponentBehavior = {
305
373
  TagGroup: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
306
374
  Textarea: { astro: 'none', elements: 'registered-element', react: 'component' },
307
375
  ThemeBuilder: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
308
- ThemeToggle: { astro: 'none', elements: 'registered-element', react: 'component' },
376
+ ThemeToggle: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
309
377
  TimeField: { astro: 'none', elements: 'registered-element', react: 'component' },
310
378
  Timeline: { astro: 'none', elements: 'registered-element', react: 'component' },
311
379
  Toast: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
@@ -317,15 +385,17 @@ export const lumenComponentBehavior = {
317
385
  react: 'component'
318
386
  },
319
387
  ToggleGroup: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
320
- Toolbar: { astro: 'none', elements: 'registered-element', react: 'component' },
321
- Tooltip: { astro: 'none', elements: 'registered-element', react: 'hook' },
322
- Tour: { astro: 'none', elements: 'registered-element', react: 'component' },
323
- Transfer: { astro: 'none', elements: 'registered-element', react: 'component' },
324
- Tree: { astro: 'none', elements: 'registered-element', react: 'component' },
325
- TreeGrid: { astro: 'none', elements: 'registered-element', react: 'component' },
326
- TreeSelect: { astro: 'none', elements: 'registered-element', react: 'component' },
388
+ Toolbar: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
389
+ Tooltip: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
390
+ Tour: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
391
+ Transfer: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
392
+ Tree: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
393
+ TreeGrid: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
394
+ TreeSelect: { astro: 'ui-primitives', elements: 'registered-element', react: 'component' },
327
395
  Typography: { astro: 'none', elements: 'registered-element', react: 'component' },
328
396
  VirtualList: { astro: 'ui-primitives', elements: 'registered-element', react: 'hook' },
397
+ ChangeSummary: { astro: 'none', elements: 'registered-element', react: 'component' },
398
+ FilterBar: { astro: 'none', elements: 'registered-element', react: 'component' },
329
399
  VisuallyHidden: { astro: 'none', elements: 'registered-element', react: 'component' },
330
400
  Watermark: { astro: 'none', elements: 'registered-element', react: 'component' }
331
401
  };
@@ -426,6 +496,12 @@ export const lumenStylingContracts = {
426
496
  rootSlot: 'stat',
427
497
  stability: 'stable'
428
498
  },
499
+ PhoneInput: {
500
+ customProperties: ['--ui-phone-height', '--ui-phone-padding', '--ui-phone-country-gap'],
501
+ parts: ['phone-country', 'country-flag'],
502
+ rootSlot: 'phone-input',
503
+ stability: 'stable'
504
+ },
429
505
  Table: {
430
506
  customProperties: ['--ui-table-cell-padding'],
431
507
  parts: [],
@@ -0,0 +1,16 @@
1
+ export interface LumenChangeSummaryItem {
2
+ id: string;
3
+ label: string;
4
+ before: string;
5
+ after: string;
6
+ /** The application decides equality and whether the proposal is meaningful. */
7
+ changed: boolean;
8
+ }
9
+ export interface LumenActiveFilter {
10
+ id: string;
11
+ label: string;
12
+ value: string;
13
+ }
14
+ export declare const readLumenChangeSummaryItems: (value: unknown) => LumenChangeSummaryItem[];
15
+ export declare const readLumenActiveFilters: (value: unknown) => LumenActiveFilter[];
16
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,+EAA+E;IAC/E,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AA4BD,eAAO,MAAM,2BAA2B,GAAI,OAAO,OAAO,KAAG,sBAAsB,EAAgC,CAAA;AACnH,eAAO,MAAM,sBAAsB,GAAI,OAAO,OAAO,KAAG,iBAAiB,EAAgC,CAAA"}
@@ -0,0 +1,21 @@
1
+ const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
2
+ const isChange = (value) => isRecord(value) && typeof value.id === 'string' && value.id.length > 0 &&
3
+ typeof value.label === 'string' && typeof value.before === 'string' &&
4
+ typeof value.after === 'string' && typeof value.changed === 'boolean';
5
+ const isFilter = (value) => isRecord(value) && typeof value.id === 'string' && value.id.length > 0 &&
6
+ typeof value.label === 'string' && typeof value.value === 'string';
7
+ const readItems = (value, guard) => {
8
+ if (!Array.isArray(value))
9
+ throw new TypeError('Dashboard items must be an array');
10
+ const ids = new Set();
11
+ const result = [];
12
+ for (const item of value) {
13
+ if (!guard(item) || ids.has(item.id))
14
+ throw new TypeError('Dashboard items require valid, unique IDs');
15
+ ids.add(item.id);
16
+ result.push({ ...item });
17
+ }
18
+ return result;
19
+ };
20
+ export const readLumenChangeSummaryItems = (value) => readItems(value, isChange);
21
+ export const readLumenActiveFilters = (value) => readItems(value, isFilter);
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
package/dist/data.js CHANGED
@@ -39,7 +39,12 @@ const parseDataViewFilters = (params) => {
39
39
  const filters = {};
40
40
  for (const [key, filterValue] of params.entries()) {
41
41
  if (key.startsWith('filter.')) {
42
- filters[key.slice('filter.'.length)] = filterValue;
42
+ Object.defineProperty(filters, key.slice('filter.'.length), {
43
+ configurable: true,
44
+ enumerable: true,
45
+ value: filterValue,
46
+ writable: true
47
+ });
43
48
  }
44
49
  }
45
50
  return filters;
@@ -78,9 +83,14 @@ export const parseDataViewState = (value) => {
78
83
  });
79
84
  };
80
85
  export const getVirtualRange = (scrollOffset, viewportSize, itemSize, itemCount, overscan = 4) => {
81
- const startIndex = Math.max(0, Math.floor(scrollOffset / itemSize) - overscan);
82
- const visibleCount = Math.ceil(viewportSize / itemSize) + overscan * 2;
83
- const endIndex = Math.min(itemCount - 1, startIndex + visibleCount);
86
+ const count = Number.isSafeInteger(itemCount) && itemCount > 0 ? itemCount : 0;
87
+ const size = Number.isFinite(itemSize) && itemSize > 0 ? itemSize : 44;
88
+ const viewport = Number.isFinite(viewportSize) && viewportSize > 0 ? viewportSize : 0;
89
+ const extra = Number.isFinite(overscan) ? Math.max(0, Math.trunc(overscan)) : 4;
90
+ const maximumOffset = Math.max(0, count * size - viewport);
91
+ const offset = Number.isFinite(scrollOffset) ? Math.min(maximumOffset, Math.max(0, scrollOffset)) : 0;
92
+ const startIndex = Math.max(0, Math.floor(offset / size) - extra);
93
+ const endIndex = Math.min(count - 1, Math.max(startIndex, Math.ceil((offset + viewport) / size) - 1) + extra);
84
94
  return {
85
95
  endIndex,
86
96
  startIndex
@@ -154,7 +164,13 @@ export const createDataViewRequestUrl = (endpoint, state) => {
154
164
  const query = serializeDataViewState(state);
155
165
  if (!query)
156
166
  return endpoint;
157
- return `${endpoint}${endpoint.includes('?') ? '&' : '?'}${query}`;
167
+ const fragmentIndex = endpoint.indexOf('#');
168
+ const path = fragmentIndex < 0 ? endpoint : endpoint.slice(0, fragmentIndex);
169
+ const fragment = fragmentIndex < 0 ? '' : endpoint.slice(fragmentIndex);
170
+ let separator = path.includes('?') ? '&' : '?';
171
+ if (path.endsWith('?') || path.endsWith('&'))
172
+ separator = '';
173
+ return `${path}${separator}${query}${fragment}`;
158
174
  };
159
175
  export const createDataViewServerRequest = (endpoint, state) => {
160
176
  const query = serializeDataViewState(state);
@@ -0,0 +1,13 @@
1
+ /** Parse a complete Gregorian calendar date without accepting Date's day overflow. */
2
+ export declare const parseLumenDate: (value: unknown) => Date | null;
3
+ export declare const isLumenDateBoundsValid: (min?: string, max?: string) => boolean;
4
+ export declare const isLumenDateRangeValid: (range: unknown, min?: string, max?: string) => boolean;
5
+ export declare const resolveLumenDateLocale: (locale?: string) => string;
6
+ export interface LumenDateLabels {
7
+ previousMonth: string;
8
+ nextMonth: string;
9
+ chooseDate: string;
10
+ invalidRange: string;
11
+ }
12
+ export declare const resolveLumenDateLabels: (locale?: string) => LumenDateLabels;
13
+ //# sourceMappingURL=dates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../src/dates.ts"],"names":[],"mappings":"AACA,sFAAsF;AACtF,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,KAAG,IAAI,GAAG,IAMtD,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,OAInE,CAAA;AAOD,eAAO,MAAM,qBAAqB,GAAI,OAAO,OAAO,EAAE,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,OAMlF,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,KAAG,MAUxD,CAAA;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,KAAG,eAMxD,CAAA"}
package/dist/dates.js ADDED
@@ -0,0 +1,37 @@
1
+ // cspell:words siguiente Elegir fecha Selecciona intervalo fechas válido
2
+ /** Parse a complete Gregorian calendar date without accepting Date's day overflow. */
3
+ export const parseLumenDate = (value) => {
4
+ if (typeof value !== 'string' || !/^\d{4}-\d{2}-\d{2}$/.test(value) || value.startsWith('0000-'))
5
+ return null;
6
+ const date = new Date(`${value}T00:00:00.000Z`);
7
+ return Number.isFinite(date.getTime()) && date.toISOString().slice(0, 10) === value ? date : null;
8
+ };
9
+ export const isLumenDateBoundsValid = (min, max) => ((min === undefined || parseLumenDate(min) !== null) &&
10
+ (max === undefined || parseLumenDate(max) !== null) &&
11
+ !(min && max && min > max));
12
+ const isDateRangeRecord = (range) => (typeof range === 'object' && range !== null && 'start' in range && 'end' in range &&
13
+ typeof range.start === 'string' && typeof range.end === 'string');
14
+ export const isLumenDateRangeValid = (range, min, max) => {
15
+ if (!isDateRangeRecord(range))
16
+ return false;
17
+ return parseLumenDate(range.start) !== null && parseLumenDate(range.end) !== null &&
18
+ isLumenDateBoundsValid(min, max) && range.start <= range.end &&
19
+ !(min && range.start < min) && !(max && range.end > max);
20
+ };
21
+ export const resolveLumenDateLocale = (locale) => {
22
+ const documentLocale = typeof document === 'undefined' ? undefined : document.documentElement.lang;
23
+ const browserLocale = typeof navigator === 'undefined' ? undefined : navigator.language;
24
+ const requested = locale || documentLocale || browserLocale || 'en';
25
+ try {
26
+ return new Intl.Locale(requested).toString();
27
+ }
28
+ catch {
29
+ return 'en';
30
+ }
31
+ };
32
+ export const resolveLumenDateLabels = (locale) => {
33
+ const language = resolveLumenDateLocale(locale);
34
+ return language.toLowerCase().split('-')[0] === 'es' ?
35
+ { previousMonth: 'Mes anterior', nextMonth: 'Mes siguiente', chooseDate: 'Elegir fecha', invalidRange: 'Selecciona un intervalo de fechas válido.' } :
36
+ { previousMonth: 'Previous month', nextMonth: 'Next month', chooseDate: 'Choose date', invalidRange: 'Select a valid date range.' };
37
+ };
@@ -0,0 +1,25 @@
1
+ export type LumenDeviceFrameDevice = 'laptop' | 'desktop' | 'iphone' | 'android' | 'tablet' | 'macbook-pro' | 'macbook-air' | 'imac' | 'pixel' | 'ipad-pro';
2
+ export type LumenDeviceFrameOrientation = 'portrait' | 'landscape';
3
+ export type LumenDeviceFrameTone = 'light' | 'dark';
4
+ export type LumenDeviceFrameColor = 'white' | 'black' | `#${string}`;
5
+ /** Named finishes and bounded hex colors are safe to serialize into an inline declaration. */
6
+ export declare const resolveLumenDeviceFrameColor: (color: unknown) => string | undefined;
7
+ export declare const lumenDeviceFrameSizes: {
8
+ readonly android: readonly [412, 915];
9
+ readonly desktop: readonly [1440, 900];
10
+ readonly imac: readonly [1440, 810];
11
+ readonly iphone: readonly [390, 844];
12
+ readonly 'ipad-pro': readonly [834, 1194];
13
+ readonly laptop: readonly [1280, 800];
14
+ readonly 'macbook-pro': readonly [1280, 800];
15
+ readonly 'macbook-air': readonly [1280, 800];
16
+ readonly pixel: readonly [412, 915];
17
+ readonly tablet: readonly [820, 1180];
18
+ };
19
+ export declare const resolveLumenDeviceFrame: (device?: LumenDeviceFrameDevice, orientation?: LumenDeviceFrameOrientation, width?: number, height?: number) => {
20
+ width: number;
21
+ height: number;
22
+ };
23
+ /** Scale iframe viewports without changing their CSS layout width. Slots remain responsive HTML. */
24
+ export declare const observeLumenDeviceFrame: (screen: HTMLElement, width: number) => (() => void);
25
+ //# sourceMappingURL=device-frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-frame.d.ts","sourceRoot":"","sources":["../src/device-frame.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,GAAG,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAA;AAC3J,MAAM,MAAM,2BAA2B,GAAG,UAAU,GAAG,WAAW,CAAA;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,CAAA;AACnD,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,MAAM,EAAE,CAAA;AAEpE,8FAA8F;AAC9F,eAAO,MAAM,4BAA4B,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,SAMtE,CAAA;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;CAWxB,CAAA;AAIV,eAAO,MAAM,uBAAuB,GAClC,SAAQ,sBAAiC,EAAE,cAAc,2BAA2B,EACpF,QAAQ,MAAM,EAAE,SAAS,MAAM,KAC9B;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAWjC,CAAA;AAED,oGAAoG;AACpG,eAAO,MAAM,uBAAuB,GAAI,QAAQ,WAAW,EAAE,OAAO,MAAM,KAAG,CAAC,MAAM,IAAI,CAwBvF,CAAA"}
@@ -0,0 +1,50 @@
1
+ /** Named finishes and bounded hex colors are safe to serialize into an inline declaration. */
2
+ export const resolveLumenDeviceFrameColor = (color) => {
3
+ if (color === 'white' || color === 'black')
4
+ return color;
5
+ if (typeof color !== 'string' || ![4, 5, 7, 9].includes(color.length))
6
+ return undefined;
7
+ return /^#[\da-f]+$/iu.test(color) ? color : undefined;
8
+ };
9
+ export const lumenDeviceFrameSizes = {
10
+ android: [412, 915],
11
+ desktop: [1440, 900],
12
+ imac: [1440, 810],
13
+ iphone: [390, 844],
14
+ 'ipad-pro': [834, 1194],
15
+ laptop: [1280, 800],
16
+ 'macbook-pro': [1280, 800],
17
+ 'macbook-air': [1280, 800],
18
+ pixel: [412, 915],
19
+ tablet: [820, 1180]
20
+ };
21
+ const dimension = (value, fallback) => typeof value === 'number' && Number.isFinite(value) && value >= 1 && value <= 16384 ? value : fallback;
22
+ export const resolveLumenDeviceFrame = (device = 'laptop', orientation, width, height) => {
23
+ const presets = lumenDeviceFrameSizes;
24
+ const defaults = presets[device] ?? lumenDeviceFrameSizes.laptop;
25
+ const first = dimension(width, defaults[0]);
26
+ const second = dimension(height, defaults[1]);
27
+ if (!orientation)
28
+ return { height: second, width: first };
29
+ return orientation === 'landscape' ?
30
+ { height: Math.min(first, second), width: Math.max(first, second) } :
31
+ { height: Math.max(first, second), width: Math.min(first, second) };
32
+ };
33
+ /** Scale iframe viewports without changing their CSS layout width. Slots remain responsive HTML. */
34
+ export const observeLumenDeviceFrame = (screen, width) => {
35
+ const view = screen.ownerDocument.defaultView;
36
+ const update = () => {
37
+ const available = screen.clientWidth;
38
+ if (available > 0)
39
+ screen.style.setProperty('--ui-device-frame-scale', String(available / width));
40
+ };
41
+ const observer = view?.ResizeObserver ? new view.ResizeObserver(update) : undefined;
42
+ observer?.observe(screen);
43
+ view?.addEventListener('resize', update);
44
+ update();
45
+ return () => {
46
+ observer?.disconnect();
47
+ view?.removeEventListener('resize', update);
48
+ screen.style.removeProperty('--ui-device-frame-scale');
49
+ };
50
+ };
@@ -0,0 +1,3 @@
1
+ /** Resolve visual horizontal navigation at event time, including inherited and changing direction. */
2
+ export declare const getLumenDirectionalKey: (element: HTMLElement, key: string) => string;
3
+ //# sourceMappingURL=direction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direction.d.ts","sourceRoot":"","sources":["../src/direction.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,eAAO,MAAM,sBAAsB,GAAI,SAAS,WAAW,EAAE,KAAK,MAAM,KAAG,MAS1E,CAAA"}
@@ -0,0 +1,10 @@
1
+ /** Resolve visual horizontal navigation at event time, including inherited and changing direction. */
2
+ export const getLumenDirectionalKey = (element, key) => {
3
+ if (key !== 'ArrowLeft' && key !== 'ArrowRight')
4
+ return key;
5
+ const computed = element.ownerDocument.defaultView?.getComputedStyle(element).direction;
6
+ const direction = computed || element.closest('[dir]')?.getAttribute('dir');
7
+ if (direction !== 'rtl')
8
+ return key;
9
+ return key === 'ArrowLeft' ? 'ArrowRight' : 'ArrowLeft';
10
+ };