@stll/ui 0.55.1 → 0.57.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 (71) hide show
  1. package/README.md +3 -0
  2. package/THIRD_PARTY_NOTICES +24 -0
  3. package/dist/components/badge.d.ts +28 -0
  4. package/dist/components/badge.js +64 -0
  5. package/dist/components/button.d.ts +2 -6
  6. package/dist/components/button.js +33 -25
  7. package/dist/components/button.native.d.ts +15 -0
  8. package/dist/components/button.native.js +165 -0
  9. package/dist/components/button.shared.d.ts +65 -0
  10. package/dist/components/button.shared.js +61 -0
  11. package/dist/components/dialog.d.ts +20 -2
  12. package/dist/components/dialog.js +31 -9
  13. package/dist/components/horizontal-scroller.js +31 -34
  14. package/dist/components/input.native.d.ts +23 -0
  15. package/dist/components/input.native.js +66 -0
  16. package/dist/components/input.shared.d.ts +19 -0
  17. package/dist/components/input.shared.js +0 -0
  18. package/dist/components/loader.d.ts +1 -6
  19. package/dist/components/loader.native.d.ts +28 -0
  20. package/dist/components/loader.native.js +23 -0
  21. package/dist/components/loader.shared.d.ts +17 -0
  22. package/dist/components/loader.shared.js +9 -0
  23. package/dist/components/matter-icon.d.ts +2 -8
  24. package/dist/components/matter-icon.js +10 -30
  25. package/dist/components/matter-icon.native.d.ts +25 -0
  26. package/dist/components/matter-icon.native.js +78 -0
  27. package/dist/components/matter-icon.shared.d.ts +21 -0
  28. package/dist/components/matter-icon.shared.js +18 -0
  29. package/dist/components/separator.native.d.ts +14 -0
  30. package/dist/components/separator.native.js +16 -0
  31. package/dist/components/separator.shared.d.ts +6 -0
  32. package/dist/components/separator.shared.js +0 -0
  33. package/dist/components/sheet.native.d.ts +27 -0
  34. package/dist/components/sheet.native.js +69 -0
  35. package/dist/components/sheet.shared.d.ts +9 -0
  36. package/dist/components/sheet.shared.js +0 -0
  37. package/dist/components/sidebar.js +1 -1
  38. package/dist/components/stella-wordmark.js +5 -13
  39. package/dist/components/stella-wordmark.native.d.ts +9 -0
  40. package/dist/components/stella-wordmark.native.js +27 -0
  41. package/dist/components/stella-wordmark.shared.d.ts +6 -0
  42. package/dist/components/stella-wordmark.shared.js +16 -0
  43. package/dist/components/switch.native.d.ts +13 -0
  44. package/dist/components/switch.native.js +33 -0
  45. package/dist/components/switch.shared.d.ts +9 -0
  46. package/dist/components/switch.shared.js +0 -0
  47. package/dist/components/table.d.ts +86 -8
  48. package/dist/components/table.js +46 -20
  49. package/dist/components/text.d.ts +11 -0
  50. package/dist/components/text.js +25 -0
  51. package/dist/components/text.native.d.ts +15 -0
  52. package/dist/components/text.native.js +46 -0
  53. package/dist/components/text.shared.d.ts +78 -0
  54. package/dist/components/text.shared.js +71 -0
  55. package/dist/components/textarea.native.d.ts +10 -0
  56. package/dist/components/textarea.native.js +28 -0
  57. package/dist/components/textarea.shared.d.ts +4 -0
  58. package/dist/components/textarea.shared.js +0 -0
  59. package/dist/components/tooltip.d.ts +15 -2
  60. package/dist/components/tooltip.js +18 -2
  61. package/dist/components/truncated-text.d.ts +33 -0
  62. package/dist/components/truncated-text.js +111 -0
  63. package/dist/index.d.ts +6 -5
  64. package/dist/index.js +5 -3
  65. package/dist/inspector/dock.js +1 -1
  66. package/dist/lib/scroll-edge-fade.d.ts +23 -0
  67. package/dist/lib/scroll-edge-fade.js +62 -0
  68. package/dist/native-env.d.ts +1 -0
  69. package/package.json +112 -7
  70. package/dist/calendar/index.d.ts +0 -4
  71. package/dist/calendar/index.js +0 -4
@@ -0,0 +1,62 @@
1
+ //#region src/lib/scroll-edge-fade.ts
2
+ /**
3
+ * Fades a horizontal scroller's edges while content continues past them.
4
+ *
5
+ * A mask, not a painted gradient: it works over any background, including
6
+ * translucent windows. `--fade-size` sets the width (as in `ScrollArea`); the
7
+ * measured overflow at each physical edge narrows it, so an edge with nothing
8
+ * behind it stays sharp.
9
+ */
10
+ const SCROLL_EDGE_FADE_CLASS = "mask-l-from-[calc(100%-min(var(--fade-size,1.5rem),var(--scroll-fade-left,0px)))] mask-r-from-[calc(100%-min(var(--fade-size,1.5rem),var(--scroll-fade-right,0px)))]";
11
+ /** Above any `--fade-size` in use; CSS takes the smaller of the two. */
12
+ const MAX_FADE_PX = 64;
13
+ const fadeWidth = (overflow) => `${Math.min(Math.max(overflow, 0), MAX_FADE_PX)}px`;
14
+ const writeProperty = (node, name, value) => {
15
+ if (node.style.getPropertyValue(name) !== value) node.style.setProperty(name, value);
16
+ };
17
+ /**
18
+ * Measures `node` and writes the overflow its `SCROLL_EDGE_FADE_CLASS` reads.
19
+ * For a scroller that already measures itself on scroll and resize.
20
+ */
21
+ const writeScrollEdgeFade = (node) => {
22
+ const maximum = node.scrollWidth - node.clientWidth;
23
+ const fromLeft = getComputedStyle(node).direction === "rtl" ? maximum + node.scrollLeft : node.scrollLeft;
24
+ writeProperty(node, "--scroll-fade-left", fadeWidth(fromLeft));
25
+ writeProperty(node, "--scroll-fade-right", fadeWidth(maximum - fromLeft));
26
+ };
27
+ /**
28
+ * Ref callback keeping `writeScrollEdgeFade` current for a scroller that does
29
+ * not measure itself. Content can move the end without a scroll or resize (an
30
+ * item added, removed or relabelled), so mutations re-measure too, once per
31
+ * frame.
32
+ */
33
+ const fadeScrollEdges = (node) => {
34
+ if (!node) return;
35
+ let frame = 0;
36
+ const measure = () => {
37
+ frame = 0;
38
+ writeScrollEdgeFade(node);
39
+ };
40
+ const schedule = () => {
41
+ if (frame === 0) frame = requestAnimationFrame(measure);
42
+ };
43
+ measure();
44
+ node.addEventListener("scroll", schedule, { passive: true });
45
+ const resizes = new ResizeObserver(schedule);
46
+ resizes.observe(node);
47
+ const mutations = new MutationObserver(schedule);
48
+ mutations.observe(node, {
49
+ attributeFilter: ["style"],
50
+ characterData: true,
51
+ childList: true,
52
+ subtree: true
53
+ });
54
+ return () => {
55
+ cancelAnimationFrame(frame);
56
+ node.removeEventListener("scroll", schedule);
57
+ resizes.disconnect();
58
+ mutations.disconnect();
59
+ };
60
+ };
61
+ //#endregion
62
+ export { SCROLL_EDGE_FADE_CLASS, fadeScrollEdges, writeScrollEdgeFade };
@@ -0,0 +1 @@
1
+ export {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stll/ui",
3
- "version": "0.55.1",
3
+ "version": "0.57.0",
4
4
  "description": "Stella's design system: bidi-aware React primitives built on Base UI, the dockable inspector pane, and the Tailwind v4 theme they are styled with.",
5
5
  "keywords": [
6
6
  "base-ui",
@@ -22,7 +22,8 @@
22
22
  },
23
23
  "files": [
24
24
  "dist",
25
- "README.md"
25
+ "README.md",
26
+ "THIRD_PARTY_NOTICES"
26
27
  ],
27
28
  "type": "module",
28
29
  "sideEffects": [
@@ -65,6 +66,10 @@
65
66
  "types": "./dist/components/avatar.d.ts",
66
67
  "import": "./dist/components/avatar.js"
67
68
  },
69
+ "./badge": {
70
+ "types": "./dist/components/badge.d.ts",
71
+ "import": "./dist/components/badge.js"
72
+ },
68
73
  "./bidi-text": {
69
74
  "types": "./dist/components/bidi-text.d.ts",
70
75
  "import": "./dist/components/bidi-text.js"
@@ -78,6 +83,10 @@
78
83
  "import": "./dist/components/breadcrumb.js"
79
84
  },
80
85
  "./button": {
86
+ "react-native": {
87
+ "types": "./dist/components/button.native.d.ts",
88
+ "import": "./dist/components/button.native.js"
89
+ },
81
90
  "types": "./dist/components/button.d.ts",
82
91
  "import": "./dist/components/button.js"
83
92
  },
@@ -137,9 +146,17 @@
137
146
  "types": "./dist/components/copy-button.d.ts",
138
147
  "import": "./dist/components/copy-button.js"
139
148
  },
140
- "./calendar": {
141
- "types": "./dist/calendar/index.d.ts",
142
- "import": "./dist/calendar/index.js"
149
+ "./calendar-primitives": {
150
+ "types": "./dist/calendar/primitives.d.ts",
151
+ "import": "./dist/calendar/primitives.js"
152
+ },
153
+ "./resource-calendar": {
154
+ "types": "./dist/calendar/resource-calendar.d.ts",
155
+ "import": "./dist/calendar/resource-calendar.js"
156
+ },
157
+ "./resource-calendar.logic": {
158
+ "types": "./dist/calendar/resource-calendar.logic.d.ts",
159
+ "import": "./dist/calendar/resource-calendar.logic.js"
143
160
  },
144
161
  "./data-table": {
145
162
  "types": "./dist/data-table/index.d.ts",
@@ -190,6 +207,10 @@
190
207
  "import": "./dist/icons.js"
191
208
  },
192
209
  "./input": {
210
+ "react-native": {
211
+ "types": "./dist/components/input.native.d.ts",
212
+ "import": "./dist/components/input.native.js"
213
+ },
193
214
  "types": "./dist/components/input.d.ts",
194
215
  "import": "./dist/components/input.js"
195
216
  },
@@ -230,6 +251,10 @@
230
251
  "import": "./dist/components/landing.js"
231
252
  },
232
253
  "./matter-icon": {
254
+ "react-native": {
255
+ "types": "./dist/components/matter-icon.native.d.ts",
256
+ "import": "./dist/components/matter-icon.native.js"
257
+ },
233
258
  "types": "./dist/components/matter-icon.d.ts",
234
259
  "import": "./dist/components/matter-icon.js"
235
260
  },
@@ -261,6 +286,10 @@
261
286
  "types": "./dist/lib/overlay-layer.d.ts",
262
287
  "import": "./dist/lib/overlay-layer.js"
263
288
  },
289
+ "./scroll-edge-fade": {
290
+ "types": "./dist/lib/scroll-edge-fade.d.ts",
291
+ "import": "./dist/lib/scroll-edge-fade.js"
292
+ },
264
293
  "./panel-inset": {
265
294
  "types": "./dist/lib/panel-inset.d.ts",
266
295
  "import": "./dist/lib/panel-inset.js"
@@ -366,14 +395,26 @@
366
395
  "import": "./dist/components/split-button.js"
367
396
  },
368
397
  "./switch": {
398
+ "react-native": {
399
+ "types": "./dist/components/switch.native.d.ts",
400
+ "import": "./dist/components/switch.native.js"
401
+ },
369
402
  "types": "./dist/components/switch.d.ts",
370
403
  "import": "./dist/components/switch.js"
371
404
  },
372
405
  "./separator": {
406
+ "react-native": {
407
+ "types": "./dist/components/separator.native.d.ts",
408
+ "import": "./dist/components/separator.native.js"
409
+ },
373
410
  "types": "./dist/components/separator.d.ts",
374
411
  "import": "./dist/components/separator.js"
375
412
  },
376
413
  "./sheet": {
414
+ "react-native": {
415
+ "types": "./dist/components/sheet.native.d.ts",
416
+ "import": "./dist/components/sheet.native.js"
417
+ },
377
418
  "types": "./dist/components/sheet.d.ts",
378
419
  "import": "./dist/components/sheet.js"
379
420
  },
@@ -382,6 +423,10 @@
382
423
  "import": "./dist/components/sidebar.js"
383
424
  },
384
425
  "./loader": {
426
+ "react-native": {
427
+ "types": "./dist/components/loader.native.d.ts",
428
+ "import": "./dist/components/loader.native.js"
429
+ },
385
430
  "types": "./dist/components/loader.d.ts",
386
431
  "import": "./dist/components/loader.js"
387
432
  },
@@ -402,6 +447,10 @@
402
447
  "import": "./dist/components/stella-mark.js"
403
448
  },
404
449
  "./stella-wordmark": {
450
+ "react-native": {
451
+ "types": "./dist/components/stella-wordmark.native.d.ts",
452
+ "import": "./dist/components/stella-wordmark.native.js"
453
+ },
405
454
  "types": "./dist/components/stella-wordmark.d.ts",
406
455
  "import": "./dist/components/stella-wordmark.js"
407
456
  },
@@ -418,9 +467,21 @@
418
467
  "import": "./dist/components/tabs.js"
419
468
  },
420
469
  "./textarea": {
470
+ "react-native": {
471
+ "types": "./dist/components/textarea.native.d.ts",
472
+ "import": "./dist/components/textarea.native.js"
473
+ },
421
474
  "types": "./dist/components/textarea.d.ts",
422
475
  "import": "./dist/components/textarea.js"
423
476
  },
477
+ "./text": {
478
+ "react-native": {
479
+ "types": "./dist/components/text.native.d.ts",
480
+ "import": "./dist/components/text.native.js"
481
+ },
482
+ "types": "./dist/components/text.d.ts",
483
+ "import": "./dist/components/text.js"
484
+ },
424
485
  "./toast": {
425
486
  "types": "./dist/components/toast.d.ts",
426
487
  "import": "./dist/components/toast.js"
@@ -429,6 +490,10 @@
429
490
  "types": "./dist/components/tooltip.d.ts",
430
491
  "import": "./dist/components/tooltip.js"
431
492
  },
493
+ "./truncated-text": {
494
+ "types": "./dist/components/truncated-text.d.ts",
495
+ "import": "./dist/components/truncated-text.js"
496
+ },
432
497
  "./typed-character": {
433
498
  "types": "./dist/lib/typed-character.d.ts",
434
499
  "import": "./dist/lib/typed-character.js"
@@ -515,6 +580,10 @@
515
580
  "import": "./dist/components/breadcrumb.js"
516
581
  },
517
582
  "./components/button": {
583
+ "react-native": {
584
+ "types": "./dist/components/button.native.d.ts",
585
+ "import": "./dist/components/button.native.js"
586
+ },
518
587
  "types": "./dist/components/button.d.ts",
519
588
  "import": "./dist/components/button.js"
520
589
  },
@@ -571,6 +640,10 @@
571
640
  "import": "./dist/components/hex-color-picker.js"
572
641
  },
573
642
  "./components/input": {
643
+ "react-native": {
644
+ "types": "./dist/components/input.native.d.ts",
645
+ "import": "./dist/components/input.native.js"
646
+ },
574
647
  "types": "./dist/components/input.d.ts",
575
648
  "import": "./dist/components/input.js"
576
649
  },
@@ -647,10 +720,18 @@
647
720
  "import": "./dist/components/select.js"
648
721
  },
649
722
  "./components/separator": {
723
+ "react-native": {
724
+ "types": "./dist/components/separator.native.d.ts",
725
+ "import": "./dist/components/separator.native.js"
726
+ },
650
727
  "types": "./dist/components/separator.d.ts",
651
728
  "import": "./dist/components/separator.js"
652
729
  },
653
730
  "./components/sheet": {
731
+ "react-native": {
732
+ "types": "./dist/components/sheet.native.d.ts",
733
+ "import": "./dist/components/sheet.native.js"
734
+ },
654
735
  "types": "./dist/components/sheet.d.ts",
655
736
  "import": "./dist/components/sheet.js"
656
737
  },
@@ -667,6 +748,10 @@
667
748
  "import": "./dist/components/stella-mark.js"
668
749
  },
669
750
  "./components/stella-wordmark": {
751
+ "react-native": {
752
+ "types": "./dist/components/stella-wordmark.native.d.ts",
753
+ "import": "./dist/components/stella-wordmark.native.js"
754
+ },
670
755
  "types": "./dist/components/stella-wordmark.d.ts",
671
756
  "import": "./dist/components/stella-wordmark.js"
672
757
  },
@@ -679,6 +764,10 @@
679
764
  "import": "./dist/components/tabs.js"
680
765
  },
681
766
  "./components/textarea": {
767
+ "react-native": {
768
+ "types": "./dist/components/textarea.native.d.ts",
769
+ "import": "./dist/components/textarea.native.js"
770
+ },
682
771
  "types": "./dist/components/textarea.d.ts",
683
772
  "import": "./dist/components/textarea.js"
684
773
  },
@@ -749,7 +838,7 @@
749
838
  "class-variance-authority": "^0.7.1",
750
839
  "clsx": "^2.1.1",
751
840
  "input-otp": "^1.5.0",
752
- "lucide-react": "1.60.0",
841
+ "lucide-react": "1.61.0",
753
842
  "tailwind-merge": "^3.7.0",
754
843
  "temporal-polyfill": "1.0.5"
755
844
  },
@@ -784,9 +873,13 @@
784
873
  "@tanstack/react-virtual": "^3.14.13",
785
874
  "@types/react": ">=19",
786
875
  "@types/react-dom": ">=19",
876
+ "lucide-react-native": ">=1.41.0",
787
877
  "react": ">=19",
788
878
  "react-dom": ">=19",
789
- "tailwindcss": "^4.3.0"
879
+ "react-native": ">=0.88.0",
880
+ "react-native-svg": ">=15.16.0",
881
+ "tailwindcss": "^4.3.0",
882
+ "uniwind": ">=1.13.0"
790
883
  },
791
884
  "peerDependenciesMeta": {
792
885
  "@playwright/test": {
@@ -797,6 +890,18 @@
797
890
  },
798
891
  "@types/react-dom": {
799
892
  "optional": true
893
+ },
894
+ "lucide-react-native": {
895
+ "optional": true
896
+ },
897
+ "react-native": {
898
+ "optional": true
899
+ },
900
+ "react-native-svg": {
901
+ "optional": true
902
+ },
903
+ "uniwind": {
904
+ "optional": true
800
905
  }
801
906
  },
802
907
  "main": "./dist/index.js",
@@ -1,4 +0,0 @@
1
- import { CalendarCell, CalendarEntryButton, CalendarEntrySurface, CalendarGrid, CalendarHeaderCell, CalendarHeaderRow } from "./primitives.js";
2
- import { CalendarDateRange, ResourceCalendarLaneLayout, ResourceCalendarLanePlacement, ResourceCalendarPlacement, assertConsecutiveCalendarDates, getResourceCalendarPlacement, layoutResourceCalendarEntries, nextCalendarDate } from "./resource-calendar.logic.js";
3
- import { ResourceCalendar, ResourceCalendarColumn, ResourceCalendarEntry, ResourceCalendarEntryTone, ResourceCalendarResource } from "./resource-calendar.js";
4
- export { CalendarCell, type CalendarDateRange, CalendarEntryButton, CalendarEntrySurface, CalendarGrid, CalendarHeaderCell, CalendarHeaderRow, ResourceCalendar, type ResourceCalendarColumn, type ResourceCalendarEntry, type ResourceCalendarEntryTone, type ResourceCalendarLaneLayout, type ResourceCalendarLanePlacement, type ResourceCalendarPlacement, type ResourceCalendarResource, assertConsecutiveCalendarDates, getResourceCalendarPlacement, layoutResourceCalendarEntries, nextCalendarDate };
@@ -1,4 +0,0 @@
1
- import { CalendarCell, CalendarEntryButton, CalendarEntrySurface, CalendarGrid, CalendarHeaderCell, CalendarHeaderRow } from "./primitives.js";
2
- import { assertConsecutiveCalendarDates, getResourceCalendarPlacement, layoutResourceCalendarEntries, nextCalendarDate } from "./resource-calendar.logic.js";
3
- import { ResourceCalendar } from "./resource-calendar.js";
4
- export { CalendarCell, CalendarEntryButton, CalendarEntrySurface, CalendarGrid, CalendarHeaderCell, CalendarHeaderRow, ResourceCalendar, assertConsecutiveCalendarDates, getResourceCalendarPlacement, layoutResourceCalendarEntries, nextCalendarDate };