@lumiastream/ui 0.2.8-alpha.20 → 0.2.8-alpha.22

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.
package/dist/index.js CHANGED
@@ -4618,40 +4618,8 @@ var SE_KAPPAGEN_EVENT_TO_LUMIA_ALERT = {
4618
4618
  // All three drop silently; the rest of the widget (size, spawn zone,
4619
4619
  // per-event flags for the remaining events) still imports.
4620
4620
  };
4621
- function normalizeKappagenChatEmoteMode(mode) {
4622
- const normalized = String(mode ?? "").trim().toLowerCase();
4623
- if (!normalized || normalized === "off" || normalized === "false" || normalized === "none") return "off";
4624
- if (normalized.includes("combo")) return "combo";
4625
- return "show-all";
4626
- }
4627
4621
  function mapKappagen(widget, ctx) {
4628
4622
  const v = widget.variables ?? {};
4629
- const kappagenName = widget.name ?? widget.id ?? "unnamed widget";
4630
- console.groupCollapsed("[SE Import][Kappagen raw widget]", kappagenName);
4631
- console.log("Full StreamElements widget:", widget);
4632
- console.log("Raw variables/settings:", widget.variables ?? null);
4633
- console.log("Listeners:", widget.listeners ?? null);
4634
- console.log("Events:", v.events ?? null);
4635
- console.log("Events config:", v.eventsConfig ?? null);
4636
- console.log("Kappagen animation/source settings:", {
4637
- cheersplosions: v.cheersplosions,
4638
- emotesplosion: v.emotesplosion,
4639
- emotesplosiondir: v.emotesplosiondir,
4640
- emotesplosionduration: v.emotesplosionduration,
4641
- mode: v.mode,
4642
- size: v.size,
4643
- spawnzone: v.spawnzone,
4644
- gif: v.gif,
4645
- emoji: v.emoji,
4646
- bttv: v.bttv,
4647
- ffz: v.ffz,
4648
- sevenTv: v.sevenTv,
4649
- duration: v.duration,
4650
- direction: v.direction,
4651
- fullscreen: v.fullscreen,
4652
- limit: v.limit
4653
- });
4654
- console.groupEnd();
4655
4623
  const eventsFromNested = v.eventsConfig ? {
4656
4624
  subscriber: v.eventsConfig.subscriber?.enabled ?? true,
4657
4625
  follower: v.eventsConfig.follower?.enabled ?? true,
@@ -4660,10 +4628,9 @@ function mapKappagen(widget, ctx) {
4660
4628
  tip: v.eventsConfig.tip?.enabled ?? true
4661
4629
  } : null;
4662
4630
  const events = v.events ?? eventsFromNested ?? { subscriber: true, follower: true, cheer: true, raid: true, tip: true };
4663
- const chatEmoteMode = normalizeKappagenChatEmoteMode(v.mode);
4664
4631
  const alertTriggers = Object.entries(events).filter(([, enabled]) => !!enabled).map(([seKey]) => SE_KAPPAGEN_EVENT_TO_LUMIA_ALERT[seKey]).filter((x) => !!x);
4665
4632
  const alertEmotes = ["Kappa", "<3", "imGlitch"];
4666
- const unit = buildUnit(
4633
+ return buildUnit(
4667
4634
  widget,
4668
4635
  "emotealert",
4669
4636
  {
@@ -4683,9 +4650,6 @@ function mapKappagen(widget, ctx) {
4683
4650
  animationTime: typeof v.duration === "number" ? v.duration : 5,
4684
4651
  duration: typeof v.duration === "number" ? v.duration : 5,
4685
4652
  useAnimatedEmotes: true,
4686
- alertOn: true,
4687
- chatEmotesOn: chatEmoteMode !== "off",
4688
- chatEmoteMode,
4689
4653
  alertNumberEmotes: typeof v.limit === "number" && v.limit > 0 ? v.limit : 30,
4690
4654
  alertEmotes,
4691
4655
  alertTriggers,
@@ -4712,15 +4676,6 @@ function mapKappagen(widget, ctx) {
4712
4676
  },
4713
4677
  ctx
4714
4678
  );
4715
- console.groupCollapsed("[SE Import][Kappagen mapped emotealert]", kappagenName);
4716
- console.log("Resolved events:", events);
4717
- console.log("Mapped alert triggers:", alertTriggers);
4718
- console.log("Mapped chat emote mode:", chatEmoteMode);
4719
- console.log("Mapped alert emotes:", alertEmotes);
4720
- console.log("Mapped Emotealert unit:", unit);
4721
- console.log("Mapped Emotealert content:", unit.module?.content ?? null);
4722
- console.groupEnd();
4723
- return unit;
4724
4679
  }
4725
4680
  function mapLeaderboardFromVariables(widget, currency, ctx) {
4726
4681
  const v = widget.variables ?? {};
@@ -7230,6 +7185,7 @@ function SEImportWizard({
7230
7185
  existingAssets,
7231
7186
  saveOverlay,
7232
7187
  onComplete,
7188
+ onOverlayImported,
7233
7189
  onClose,
7234
7190
  notify,
7235
7191
  CustomEmbed
@@ -7728,7 +7684,15 @@ function SEImportWizard({
7728
7684
  notify.success("Imported overlay from StreamElements.");
7729
7685
  mirrorAbortRef.current?.abort();
7730
7686
  onClose();
7731
- if (uuid) onComplete({ overlayId: uuid });
7687
+ if (uuid) {
7688
+ onOverlayImported?.({
7689
+ overlayId: uuid,
7690
+ sourceSEOverlayName: result.overlay.name || void 0,
7691
+ width: result.overlay.settings.metadata.width || void 0,
7692
+ height: result.overlay.settings.metadata.height || void 0
7693
+ });
7694
+ onComplete({ overlayId: uuid });
7695
+ }
7732
7696
  } catch (error) {
7733
7697
  notify.error(`Import failed: ${extractErrorMessage(error)}`);
7734
7698
  } finally {
@@ -7744,6 +7708,18 @@ function SEImportWizard({
7744
7708
  settings: result.overlay.settings
7745
7709
  };
7746
7710
  const { uuid } = await saveOverlay(body);
7711
+ const orderedIds = Array.from(selectedOverlayIds);
7712
+ const sourceSEOverlayId = orderedIds[currentOverlayIndex - 1];
7713
+ const sourceSummary = sourceSEOverlayId ? (overlayList ?? []).find((o) => o._id === sourceSEOverlayId) : void 0;
7714
+ if (uuid) {
7715
+ onOverlayImported?.({
7716
+ overlayId: uuid,
7717
+ sourceSEOverlayId,
7718
+ sourceSEOverlayName: sourceSummary?.name ?? sourceSummary?.settings?.name ?? result.overlay.name ?? void 0,
7719
+ width: sourceSummary?.settings?.width ?? result.overlay.settings.metadata.width ?? void 0,
7720
+ height: sourceSummary?.settings?.height ?? result.overlay.settings.metadata.height ?? void 0
7721
+ });
7722
+ }
7747
7723
  const hasMore = overlayQueue.length > 0;
7748
7724
  if (hasMore) {
7749
7725
  notify.success(
@@ -7771,6 +7747,7 @@ function SEImportWizard({
7771
7747
  notify,
7772
7748
  onClose,
7773
7749
  onComplete,
7750
+ onOverlayImported,
7774
7751
  options.name,
7775
7752
  result,
7776
7753
  saveOverlay,
@@ -7778,7 +7755,9 @@ function SEImportWizard({
7778
7755
  overlayQueue,
7779
7756
  currentOverlayIndex,
7780
7757
  totalOverlaysToImport,
7781
- loadBootstrapAndKickoff
7758
+ loadBootstrapAndKickoff,
7759
+ selectedOverlayIds,
7760
+ overlayList
7782
7761
  ]);
7783
7762
  const visibleSteps = useMemo5(() => {
7784
7763
  const showMirrorStep = options.mirrorAssets && (assetUrls.length > 0 || mirrorRows.length > 0 || step === "mirror");
@@ -326,6 +326,13 @@ interface SEImportBindings {
326
326
  onComplete: (result: {
327
327
  overlayId: string;
328
328
  }) => void;
329
+ onOverlayImported?: (result: {
330
+ overlayId: string;
331
+ sourceSEOverlayId?: string;
332
+ sourceSEOverlayName?: string;
333
+ width?: number;
334
+ height?: number;
335
+ }) => void;
329
336
  onClose: () => void;
330
337
  notify: {
331
338
  success: (msg: string) => void;
package/dist/se-import.js CHANGED
@@ -1503,40 +1503,8 @@ var SE_KAPPAGEN_EVENT_TO_LUMIA_ALERT = {
1503
1503
  // All three drop silently; the rest of the widget (size, spawn zone,
1504
1504
  // per-event flags for the remaining events) still imports.
1505
1505
  };
1506
- function normalizeKappagenChatEmoteMode(mode) {
1507
- const normalized = String(mode ?? "").trim().toLowerCase();
1508
- if (!normalized || normalized === "off" || normalized === "false" || normalized === "none") return "off";
1509
- if (normalized.includes("combo")) return "combo";
1510
- return "show-all";
1511
- }
1512
1506
  function mapKappagen(widget, ctx) {
1513
1507
  const v = widget.variables ?? {};
1514
- const kappagenName = widget.name ?? widget.id ?? "unnamed widget";
1515
- console.groupCollapsed("[SE Import][Kappagen raw widget]", kappagenName);
1516
- console.log("Full StreamElements widget:", widget);
1517
- console.log("Raw variables/settings:", widget.variables ?? null);
1518
- console.log("Listeners:", widget.listeners ?? null);
1519
- console.log("Events:", v.events ?? null);
1520
- console.log("Events config:", v.eventsConfig ?? null);
1521
- console.log("Kappagen animation/source settings:", {
1522
- cheersplosions: v.cheersplosions,
1523
- emotesplosion: v.emotesplosion,
1524
- emotesplosiondir: v.emotesplosiondir,
1525
- emotesplosionduration: v.emotesplosionduration,
1526
- mode: v.mode,
1527
- size: v.size,
1528
- spawnzone: v.spawnzone,
1529
- gif: v.gif,
1530
- emoji: v.emoji,
1531
- bttv: v.bttv,
1532
- ffz: v.ffz,
1533
- sevenTv: v.sevenTv,
1534
- duration: v.duration,
1535
- direction: v.direction,
1536
- fullscreen: v.fullscreen,
1537
- limit: v.limit
1538
- });
1539
- console.groupEnd();
1540
1508
  const eventsFromNested = v.eventsConfig ? {
1541
1509
  subscriber: v.eventsConfig.subscriber?.enabled ?? true,
1542
1510
  follower: v.eventsConfig.follower?.enabled ?? true,
@@ -1545,10 +1513,9 @@ function mapKappagen(widget, ctx) {
1545
1513
  tip: v.eventsConfig.tip?.enabled ?? true
1546
1514
  } : null;
1547
1515
  const events = v.events ?? eventsFromNested ?? { subscriber: true, follower: true, cheer: true, raid: true, tip: true };
1548
- const chatEmoteMode = normalizeKappagenChatEmoteMode(v.mode);
1549
1516
  const alertTriggers = Object.entries(events).filter(([, enabled]) => !!enabled).map(([seKey]) => SE_KAPPAGEN_EVENT_TO_LUMIA_ALERT[seKey]).filter((x) => !!x);
1550
1517
  const alertEmotes = ["Kappa", "<3", "imGlitch"];
1551
- const unit = buildUnit(
1518
+ return buildUnit(
1552
1519
  widget,
1553
1520
  "emotealert",
1554
1521
  {
@@ -1568,9 +1535,6 @@ function mapKappagen(widget, ctx) {
1568
1535
  animationTime: typeof v.duration === "number" ? v.duration : 5,
1569
1536
  duration: typeof v.duration === "number" ? v.duration : 5,
1570
1537
  useAnimatedEmotes: true,
1571
- alertOn: true,
1572
- chatEmotesOn: chatEmoteMode !== "off",
1573
- chatEmoteMode,
1574
1538
  alertNumberEmotes: typeof v.limit === "number" && v.limit > 0 ? v.limit : 30,
1575
1539
  alertEmotes,
1576
1540
  alertTriggers,
@@ -1597,15 +1561,6 @@ function mapKappagen(widget, ctx) {
1597
1561
  },
1598
1562
  ctx
1599
1563
  );
1600
- console.groupCollapsed("[SE Import][Kappagen mapped emotealert]", kappagenName);
1601
- console.log("Resolved events:", events);
1602
- console.log("Mapped alert triggers:", alertTriggers);
1603
- console.log("Mapped chat emote mode:", chatEmoteMode);
1604
- console.log("Mapped alert emotes:", alertEmotes);
1605
- console.log("Mapped Emotealert unit:", unit);
1606
- console.log("Mapped Emotealert content:", unit.module?.content ?? null);
1607
- console.groupEnd();
1608
- return unit;
1609
1564
  }
1610
1565
  function mapLeaderboardFromVariables(widget, currency, ctx) {
1611
1566
  const v = widget.variables ?? {};
@@ -6100,6 +6055,7 @@ function SEImportWizard({
6100
6055
  existingAssets,
6101
6056
  saveOverlay,
6102
6057
  onComplete,
6058
+ onOverlayImported,
6103
6059
  onClose,
6104
6060
  notify,
6105
6061
  CustomEmbed
@@ -6598,7 +6554,15 @@ function SEImportWizard({
6598
6554
  notify.success("Imported overlay from StreamElements.");
6599
6555
  mirrorAbortRef.current?.abort();
6600
6556
  onClose();
6601
- if (uuid) onComplete({ overlayId: uuid });
6557
+ if (uuid) {
6558
+ onOverlayImported?.({
6559
+ overlayId: uuid,
6560
+ sourceSEOverlayName: result.overlay.name || void 0,
6561
+ width: result.overlay.settings.metadata.width || void 0,
6562
+ height: result.overlay.settings.metadata.height || void 0
6563
+ });
6564
+ onComplete({ overlayId: uuid });
6565
+ }
6602
6566
  } catch (error) {
6603
6567
  notify.error(`Import failed: ${extractErrorMessage(error)}`);
6604
6568
  } finally {
@@ -6614,6 +6578,18 @@ function SEImportWizard({
6614
6578
  settings: result.overlay.settings
6615
6579
  };
6616
6580
  const { uuid } = await saveOverlay(body);
6581
+ const orderedIds = Array.from(selectedOverlayIds);
6582
+ const sourceSEOverlayId = orderedIds[currentOverlayIndex - 1];
6583
+ const sourceSummary = sourceSEOverlayId ? (overlayList ?? []).find((o) => o._id === sourceSEOverlayId) : void 0;
6584
+ if (uuid) {
6585
+ onOverlayImported?.({
6586
+ overlayId: uuid,
6587
+ sourceSEOverlayId,
6588
+ sourceSEOverlayName: sourceSummary?.name ?? sourceSummary?.settings?.name ?? result.overlay.name ?? void 0,
6589
+ width: sourceSummary?.settings?.width ?? result.overlay.settings.metadata.width ?? void 0,
6590
+ height: sourceSummary?.settings?.height ?? result.overlay.settings.metadata.height ?? void 0
6591
+ });
6592
+ }
6617
6593
  const hasMore = overlayQueue.length > 0;
6618
6594
  if (hasMore) {
6619
6595
  notify.success(
@@ -6641,6 +6617,7 @@ function SEImportWizard({
6641
6617
  notify,
6642
6618
  onClose,
6643
6619
  onComplete,
6620
+ onOverlayImported,
6644
6621
  options.name,
6645
6622
  result,
6646
6623
  saveOverlay,
@@ -6648,7 +6625,9 @@ function SEImportWizard({
6648
6625
  overlayQueue,
6649
6626
  currentOverlayIndex,
6650
6627
  totalOverlaysToImport,
6651
- loadBootstrapAndKickoff
6628
+ loadBootstrapAndKickoff,
6629
+ selectedOverlayIds,
6630
+ overlayList
6652
6631
  ]);
6653
6632
  const visibleSteps = useMemo5(() => {
6654
6633
  const showMirrorStep = options.mirrorAssets && (assetUrls.length > 0 || mirrorRows.length > 0 || step === "mirror");
package/package.json CHANGED
@@ -1,136 +1,136 @@
1
1
  {
2
- "name": "@lumiastream/ui",
3
- "version": "0.2.8-alpha.20",
4
- "author": "Lumia Stream",
5
- "license": "ISC",
6
- "description": "Lumia UI Kit",
7
- "packageManager": "npm@11.9.0",
8
- "type": "module",
9
- "main": "dist/index.js",
10
- "module": "dist/index.js",
11
- "types": "dist/index.d.ts",
12
- "files": [
13
- "dist"
14
- ],
15
- "exports": {
16
- ".": {
17
- "types": "./dist/index.d.ts",
18
- "import": "./dist/index.js"
19
- },
20
- "./components": {
21
- "types": "./dist/components.d.ts",
22
- "import": "./dist/components.js"
23
- },
24
- "./LSButton": {
25
- "types": "./dist/LSButton.d.ts",
26
- "import": "./dist/LSButton.js"
27
- },
28
- "./LSCheckbox": {
29
- "types": "./dist/LSCheckbox.d.ts",
30
- "import": "./dist/LSCheckbox.js"
31
- },
32
- "./LSColorPicker": {
33
- "types": "./dist/LSColorPicker.d.ts",
34
- "import": "./dist/LSColorPicker.js"
35
- },
36
- "./LSDatePicker": {
37
- "types": "./dist/LSDatePicker.d.ts",
38
- "import": "./dist/LSDatePicker.js"
39
- },
40
- "./LSFontPicker": {
41
- "types": "./dist/LSFontPicker.d.ts",
42
- "import": "./dist/LSFontPicker.js"
43
- },
44
- "./LSInput": {
45
- "types": "./dist/LSInput.d.ts",
46
- "import": "./dist/LSInput.js"
47
- },
48
- "./LSMultiSelect": {
49
- "types": "./dist/LSMultiSelect.d.ts",
50
- "import": "./dist/LSMultiSelect.js"
51
- },
52
- "./LSRadio": {
53
- "types": "./dist/LSRadio.d.ts",
54
- "import": "./dist/LSRadio.js"
55
- },
56
- "./LSSelect": {
57
- "types": "./dist/LSSelect.d.ts",
58
- "import": "./dist/LSSelect.js"
59
- },
60
- "./LSSliderInput": {
61
- "types": "./dist/LSSliderInput.d.ts",
62
- "import": "./dist/LSSliderInput.js"
63
- },
64
- "./LSTextField": {
65
- "types": "./dist/LSTextField.d.ts",
66
- "import": "./dist/LSTextField.js"
67
- },
68
- "./LSVariableInputField": {
69
- "types": "./dist/LSVariableInputField.d.ts",
70
- "import": "./dist/LSVariableInputField.js"
71
- },
72
- "./utils": {
73
- "types": "./dist/utils.d.ts",
74
- "import": "./dist/utils.js"
75
- },
76
- "./utils/chatMedia": {
77
- "types": "./dist/utils/chatMedia.d.ts",
78
- "import": "./dist/utils/chatMedia.js"
79
- },
80
- "./se-import": {
81
- "types": "./dist/se-import.d.ts",
82
- "import": "./dist/se-import.js"
83
- }
84
- },
85
- "scripts": {
86
- "start": "storybook dev -p 6006",
87
- "build": "tsup",
88
- "build-storybook": "storybook build",
89
- "watch": "tsup --watch",
90
- "test": "vitest run",
91
- "test:watch": "vitest",
92
- "release": "changeset && changeset tag && npm run build && npm publish",
93
- "prepublishOnly": "npm run build",
94
- "postpublish": "npm cache clean --force && node ./scripts/postpublish-install.mjs"
95
- },
96
- "peerDependencies": {
97
- "@codemirror/autocomplete": "^6.0.0",
98
- "@emotion/react": "^11.14.0",
99
- "@emotion/styled": "^11.14.1",
100
- "@mui/icons-material": "^9.0.0",
101
- "@mui/material": "^9.0.0",
102
- "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
103
- "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
104
- "react-hook-form": "^7.62.0"
105
- },
106
- "devDependencies": {
107
- "@codemirror/autocomplete": "^6.20.1",
108
- "@emotion/react": "^11.14.0",
109
- "@emotion/styled": "^11.14.1",
110
- "@mui/icons-material": "^9.0.0",
111
- "@mui/material": "^9.0.0",
112
- "@storybook/builder-vite": "^10.2.17",
113
- "@storybook/react-vite": "^10.2.17",
114
- "@types/node": "^25.5.0",
115
- "@types/react": "^19.2.14",
116
- "@types/react-dom": "19.2.3",
117
- "postcss": "^8.5.14",
118
- "react": "^19.2.0",
119
- "react-dom": "^19.2.0",
120
- "react-hook-form": "^7.73.1",
121
- "sass-embedded": "^1.99.0",
122
- "storybook": "^10.2.17",
123
- "tsup": "^8.5.1",
124
- "typescript": "^5.9.3",
125
- "vite": "^8.0.8",
126
- "vitest": "^4.1.6"
127
- },
128
- "dependencies": {
129
- "@lumiastream/lumia-translations": "1.15.7",
130
- "@lumiastream/lumia-types": "^3.3.7-alpha.2",
131
- "classnames": "^2.5.1",
132
- "globals": "^17.4.0",
133
- "nanoid": "^5.1.11",
134
- "react-best-gradient-color-picker": "^3.0.14"
135
- }
2
+ "name": "@lumiastream/ui",
3
+ "version": "0.2.8-alpha.22",
4
+ "author": "Lumia Stream",
5
+ "license": "ISC",
6
+ "description": "Lumia UI Kit",
7
+ "packageManager": "npm@11.9.0",
8
+ "type": "module",
9
+ "main": "dist/index.js",
10
+ "module": "dist/index.js",
11
+ "types": "dist/index.d.ts",
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js"
19
+ },
20
+ "./components": {
21
+ "types": "./dist/components.d.ts",
22
+ "import": "./dist/components.js"
23
+ },
24
+ "./LSButton": {
25
+ "types": "./dist/LSButton.d.ts",
26
+ "import": "./dist/LSButton.js"
27
+ },
28
+ "./LSCheckbox": {
29
+ "types": "./dist/LSCheckbox.d.ts",
30
+ "import": "./dist/LSCheckbox.js"
31
+ },
32
+ "./LSColorPicker": {
33
+ "types": "./dist/LSColorPicker.d.ts",
34
+ "import": "./dist/LSColorPicker.js"
35
+ },
36
+ "./LSDatePicker": {
37
+ "types": "./dist/LSDatePicker.d.ts",
38
+ "import": "./dist/LSDatePicker.js"
39
+ },
40
+ "./LSFontPicker": {
41
+ "types": "./dist/LSFontPicker.d.ts",
42
+ "import": "./dist/LSFontPicker.js"
43
+ },
44
+ "./LSInput": {
45
+ "types": "./dist/LSInput.d.ts",
46
+ "import": "./dist/LSInput.js"
47
+ },
48
+ "./LSMultiSelect": {
49
+ "types": "./dist/LSMultiSelect.d.ts",
50
+ "import": "./dist/LSMultiSelect.js"
51
+ },
52
+ "./LSRadio": {
53
+ "types": "./dist/LSRadio.d.ts",
54
+ "import": "./dist/LSRadio.js"
55
+ },
56
+ "./LSSelect": {
57
+ "types": "./dist/LSSelect.d.ts",
58
+ "import": "./dist/LSSelect.js"
59
+ },
60
+ "./LSSliderInput": {
61
+ "types": "./dist/LSSliderInput.d.ts",
62
+ "import": "./dist/LSSliderInput.js"
63
+ },
64
+ "./LSTextField": {
65
+ "types": "./dist/LSTextField.d.ts",
66
+ "import": "./dist/LSTextField.js"
67
+ },
68
+ "./LSVariableInputField": {
69
+ "types": "./dist/LSVariableInputField.d.ts",
70
+ "import": "./dist/LSVariableInputField.js"
71
+ },
72
+ "./utils": {
73
+ "types": "./dist/utils.d.ts",
74
+ "import": "./dist/utils.js"
75
+ },
76
+ "./utils/chatMedia": {
77
+ "types": "./dist/utils/chatMedia.d.ts",
78
+ "import": "./dist/utils/chatMedia.js"
79
+ },
80
+ "./se-import": {
81
+ "types": "./dist/se-import.d.ts",
82
+ "import": "./dist/se-import.js"
83
+ }
84
+ },
85
+ "scripts": {
86
+ "start": "storybook dev -p 6006",
87
+ "build": "tsup",
88
+ "build-storybook": "storybook build",
89
+ "watch": "tsup --watch",
90
+ "test": "vitest run",
91
+ "test:watch": "vitest",
92
+ "release": "changeset && changeset tag && npm run build && npm publish",
93
+ "prepublishOnly": "npm run build",
94
+ "postpublish": "npm cache clean --force && node ./scripts/postpublish-install.mjs"
95
+ },
96
+ "peerDependencies": {
97
+ "@codemirror/autocomplete": "^6.0.0",
98
+ "@emotion/react": "^11.14.0",
99
+ "@emotion/styled": "^11.14.1",
100
+ "@mui/icons-material": "^9.0.0",
101
+ "@mui/material": "^9.0.0",
102
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
103
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
104
+ "react-hook-form": "^7.62.0"
105
+ },
106
+ "devDependencies": {
107
+ "@codemirror/autocomplete": "^6.20.1",
108
+ "@emotion/react": "^11.14.0",
109
+ "@emotion/styled": "^11.14.1",
110
+ "@mui/icons-material": "^9.0.0",
111
+ "@mui/material": "^9.0.0",
112
+ "@storybook/builder-vite": "^10.2.17",
113
+ "@storybook/react-vite": "^10.2.17",
114
+ "@types/node": "^25.5.0",
115
+ "@types/react": "^19.2.14",
116
+ "@types/react-dom": "19.2.3",
117
+ "postcss": "^8.5.14",
118
+ "react": "^19.2.0",
119
+ "react-dom": "^19.2.0",
120
+ "react-hook-form": "^7.73.1",
121
+ "sass-embedded": "^1.99.0",
122
+ "storybook": "^10.2.17",
123
+ "tsup": "^8.5.1",
124
+ "typescript": "^5.9.3",
125
+ "vite": "^8.0.8",
126
+ "vitest": "^4.1.6"
127
+ },
128
+ "dependencies": {
129
+ "@lumiastream/lumia-translations": "1.15.7",
130
+ "@lumiastream/lumia-types": "^3.3.7-alpha.2",
131
+ "classnames": "^2.5.1",
132
+ "globals": "^17.4.0",
133
+ "nanoid": "^5.1.11",
134
+ "react-best-gradient-color-picker": "^3.0.14"
135
+ }
136
136
  }