@newtonedev/configurator 0.1.3 → 0.1.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"toCSS.d.ts","sourceRoot":"","sources":["../../src/bridge/toCSS.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAMlD;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAoCtD"}
1
+ {"version":3,"file":"toCSS.d.ts","sourceRoot":"","sources":["../../src/bridge/toCSS.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAMlD;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAkCtD"}
@@ -1 +1 @@
1
- {"version":3,"file":"toThemeConfig.d.ts","sourceRoot":"","sources":["../../src/bridge/toThemeConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,UAAU,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAc,MAAM,wBAAwB,CAAC;AAoE7E;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CA8F1E"}
1
+ {"version":3,"file":"toThemeConfig.d.ts","sourceRoot":"","sources":["../../src/bridge/toThemeConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,UAAU,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAgCjE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CA8F1E"}
package/dist/index.cjs CHANGED
@@ -4,6 +4,7 @@ var React = require('react');
4
4
  var reactNative = require('react-native');
5
5
  var components = require('@newtonedev/components');
6
6
  var newtone = require('newtone');
7
+ var fonts = require('@newtonedev/fonts');
7
8
 
8
9
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
10
 
@@ -74,8 +75,7 @@ var DEFAULT_CONFIGURATOR_STATE = {
74
75
  dark: { strength: "none", hue: 220 }
75
76
  },
76
77
  preview: {
77
- mode: "light",
78
- theme: "neutral"
78
+ mode: "light"
79
79
  },
80
80
  spacing: {
81
81
  preset: "md"
@@ -87,23 +87,39 @@ var DEFAULT_CONFIGURATOR_STATE = {
87
87
  },
88
88
  typography: {
89
89
  fonts: {
90
- mono: {
91
- type: "system",
92
- family: "ui-monospace",
93
- fallback: "SFMono-Regular, Menlo, Monaco, Consolas, monospace"
90
+ main: {
91
+ config: {
92
+ type: "system",
93
+ family: "system-ui",
94
+ fallback: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
95
+ },
96
+ weights: { regular: 400, medium: 500, bold: 700 }
94
97
  },
95
98
  display: {
96
- type: "system",
97
- family: "system-ui",
98
- fallback: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
99
+ config: {
100
+ type: "system",
101
+ family: "system-ui",
102
+ fallback: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
103
+ },
104
+ weights: { regular: 400, medium: 500, bold: 700 }
105
+ },
106
+ mono: {
107
+ config: {
108
+ type: "system",
109
+ family: "ui-monospace",
110
+ fallback: "SFMono-Regular, Menlo, Monaco, Consolas, monospace"
111
+ },
112
+ weights: { regular: 400, medium: 500, bold: 700 }
99
113
  },
100
- default: {
101
- type: "system",
102
- family: "system-ui",
103
- fallback: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
114
+ currency: {
115
+ config: {
116
+ type: "system",
117
+ family: "system-ui",
118
+ fallback: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
119
+ },
120
+ weights: { regular: 400, medium: 500, bold: 700 }
104
121
  }
105
- },
106
- scale: { baseSize: 16, ratio: 1.25 }
122
+ }
107
123
  },
108
124
  icons: {
109
125
  variant: "rounded",
@@ -291,71 +307,40 @@ function configuratorReducer(state, action) {
291
307
  }
292
308
  };
293
309
  // Typography actions
294
- case "SET_TYPOGRAPHY_BASE_SIZE": {
295
- const defaultTypography = DEFAULT_CONFIGURATOR_STATE.typography;
296
- return {
297
- ...state,
298
- typography: {
299
- fonts: state.typography?.fonts ?? defaultTypography.fonts,
300
- scale: {
301
- baseSize: clamp(action.baseSize, 12, 24),
302
- ratio: state.typography?.scale.ratio ?? defaultTypography.scale.ratio
303
- }
304
- }
305
- };
306
- }
307
- case "SET_TYPOGRAPHY_RATIO": {
310
+ case "SET_FONT": {
308
311
  const defaultTypography = DEFAULT_CONFIGURATOR_STATE.typography;
312
+ const currentFonts = state.typography?.fonts ?? defaultTypography.fonts;
309
313
  return {
310
314
  ...state,
311
315
  typography: {
312
- fonts: state.typography?.fonts ?? defaultTypography.fonts,
313
- scale: {
314
- baseSize: state.typography?.scale.baseSize ?? defaultTypography.scale.baseSize,
315
- ratio: clamp(action.ratio, 1.1, 1.5)
316
- }
316
+ fonts: { ...currentFonts, [action.scope]: action.font }
317
317
  }
318
318
  };
319
319
  }
320
- case "SET_FONT_MONO": {
320
+ case "SET_TYPE_SCALE_OFFSET": {
321
321
  const defaultTypography = DEFAULT_CONFIGURATOR_STATE.typography;
322
+ const currentFonts = state.typography?.fonts ?? defaultTypography.fonts;
322
323
  return {
323
324
  ...state,
324
325
  typography: {
325
- fonts: {
326
- mono: action.font,
327
- display: state.typography?.fonts.display ?? defaultTypography.fonts.display,
328
- default: state.typography?.fonts.default ?? defaultTypography.fonts.default
329
- },
330
- scale: state.typography?.scale ?? defaultTypography.scale
326
+ ...state.typography,
327
+ fonts: currentFonts,
328
+ typeScaleOffset: clamp(action.offset, 0, 1)
331
329
  }
332
330
  };
333
331
  }
334
- case "SET_FONT_DISPLAY": {
332
+ case "SET_ROLE_WEIGHT": {
335
333
  const defaultTypography = DEFAULT_CONFIGURATOR_STATE.typography;
334
+ const currentFonts = state.typography?.fonts ?? defaultTypography.fonts;
336
335
  return {
337
336
  ...state,
338
337
  typography: {
339
- fonts: {
340
- mono: state.typography?.fonts.mono ?? defaultTypography.fonts.mono,
341
- display: action.font,
342
- default: state.typography?.fonts.default ?? defaultTypography.fonts.default
343
- },
344
- scale: state.typography?.scale ?? defaultTypography.scale
345
- }
346
- };
347
- }
348
- case "SET_FONT_DEFAULT": {
349
- const defaultTypography = DEFAULT_CONFIGURATOR_STATE.typography;
350
- return {
351
- ...state,
352
- typography: {
353
- fonts: {
354
- mono: state.typography?.fonts.mono ?? defaultTypography.fonts.mono,
355
- display: state.typography?.fonts.display ?? defaultTypography.fonts.display,
356
- default: action.font
357
- },
358
- scale: state.typography?.scale ?? defaultTypography.scale
338
+ ...state.typography,
339
+ fonts: currentFonts,
340
+ roleWeights: {
341
+ ...state.typography?.roleWeights,
342
+ [action.role]: clamp(action.weight, 100, 900)
343
+ }
359
344
  }
360
345
  };
361
346
  }
@@ -399,11 +384,6 @@ function configuratorReducer(state, action) {
399
384
  ...state,
400
385
  preview: { ...state.preview, mode: action.mode }
401
386
  };
402
- case "SET_PREVIEW_THEME":
403
- return {
404
- ...state,
405
- preview: { ...state.preview, theme: action.theme }
406
- };
407
387
  // Control actions
408
388
  case "RESET":
409
389
  return DEFAULT_CONFIGURATOR_STATE;
@@ -461,34 +441,6 @@ var SPACING_PRESET_TO_BASE = {
461
441
  function roundnessToMultiplier(intensity) {
462
442
  return intensity * 2;
463
443
  }
464
- function computeTypographyScale(baseSize, ratio) {
465
- return {
466
- xs: Math.round(baseSize / ratio ** 2),
467
- sm: Math.round(baseSize / ratio),
468
- base: baseSize,
469
- md: Math.round(baseSize * ratio),
470
- lg: Math.round(baseSize * ratio ** 2),
471
- xl: Math.round(baseSize * ratio ** 3),
472
- xxl: Math.round(baseSize * ratio ** 4)
473
- };
474
- }
475
- var DEFAULT_FONTS = {
476
- mono: {
477
- type: "system",
478
- family: "ui-monospace",
479
- fallback: "SFMono-Regular, Menlo, Monaco, Consolas, monospace"
480
- },
481
- display: {
482
- type: "system",
483
- family: "system-ui",
484
- fallback: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
485
- },
486
- default: {
487
- type: "system",
488
- family: "system-ui",
489
- fallback: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
490
- }
491
- };
492
444
  var DEFAULT_ICONS = {
493
445
  variant: "rounded",
494
446
  // Material Design 3 aesthetic
@@ -527,15 +479,6 @@ function toThemeConfig(state) {
527
479
  const radiusMultiplier = roundnessToMultiplier(state.roundness?.intensity ?? 0.5);
528
480
  return {
529
481
  colorSystem: { dynamicRange, palettes },
530
- themes: {
531
- neutral: { paletteIndex: 0, lightModeNv: 0.95, darkModeNv: 0.1 },
532
- primary: { paletteIndex: 1, lightModeNv: 0.95, darkModeNv: 0.1 },
533
- secondary: { paletteIndex: 1, lightModeNv: 0.85, darkModeNv: 0.15 },
534
- strong: { paletteIndex: 0, lightModeNv: 0.1, darkModeNv: 0.95 }
535
- },
536
- elevation: {
537
- offsets: [-0.02, 0, 0.04]
538
- },
539
482
  spacing: {
540
483
  "00": Math.round(spacingBase * 0),
541
484
  // Always 0
@@ -561,15 +504,22 @@ function toThemeConfig(state) {
561
504
  xl: Math.round(12 * radiusMultiplier),
562
505
  pill: 999
563
506
  },
564
- typography: {
565
- fonts: state.typography?.fonts ?? DEFAULT_FONTS,
566
- scale: computeTypographyScale(
567
- state.typography?.scale.baseSize ?? 16,
568
- state.typography?.scale.ratio ?? 1.25
569
- ),
570
- lineHeight: { tight: 1.25, normal: 1.5, relaxed: 1.75 },
571
- fontWeight: { regular: 400, medium: 500, semibold: 600, bold: 700 }
572
- },
507
+ typography: (() => {
508
+ const roles = state.typography?.typeScaleOffset != null ? fonts.applyTypeScaleOffset(fonts.DEFAULT_ROLE_SCALES, state.typography.typeScaleOffset) : fonts.DEFAULT_ROLE_SCALES;
509
+ return {
510
+ fonts: {
511
+ main: fonts.migrateToFontSlot(state.typography?.fonts.main ?? state.typography?.fonts?.default, fonts.DEFAULT_FONT_SLOTS.main),
512
+ display: fonts.migrateToFontSlot(state.typography?.fonts.display, fonts.DEFAULT_FONT_SLOTS.display),
513
+ mono: fonts.migrateToFontSlot(state.typography?.fonts.mono, fonts.DEFAULT_FONT_SLOTS.mono),
514
+ currency: fonts.migrateToFontSlot(state.typography?.fonts.currency, fonts.DEFAULT_FONT_SLOTS.currency)
515
+ },
516
+ fontSizes: fonts.DEFAULT_FONT_SIZES,
517
+ lineHeights: fonts.DEFAULT_LINE_HEIGHTS,
518
+ roles,
519
+ breakpointRoles: fonts.computeBreakpointRoleScales(roles),
520
+ roleWeights: { ...fonts.ROLE_DEFAULT_WEIGHTS, ...state.typography?.roleWeights }
521
+ };
522
+ })(),
573
523
  icons: state.icons ?? DEFAULT_ICONS
574
524
  };
575
525
  }
@@ -829,7 +779,7 @@ function PalettePanel({ palette, index, dispatch, previewColors, state }) {
829
779
  onSubmitEditing: handleHexSubmit,
830
780
  placeholder: "#000000"
831
781
  }
832
- )), effectiveKeyColor !== void 0 && /* @__PURE__ */ React__default.default.createElement(reactNative.Pressable, { onPress: handleClearKeyColor, style: styles.autoButton }, /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [styles.autoText, { color: newtone.srgbToHex(tokens.interactive.srgb) }] }, "Auto"))), hexError !== "" && /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [styles.errorText, { color: newtone.srgbToHex(tokens.error.srgb) }] }, hexError)), isNeutral && previewColors && /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.inlineSwatches }, previewColors.map((color, i) => /* @__PURE__ */ React__default.default.createElement(
782
+ )), effectiveKeyColor !== void 0 && /* @__PURE__ */ React__default.default.createElement(reactNative.Pressable, { onPress: handleClearKeyColor, style: styles.autoButton }, /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [styles.autoText, { color: newtone.srgbToHex(tokens.accent.fill.srgb) }] }, "Auto"))), hexError !== "" && /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [styles.errorText, { color: newtone.srgbToHex(tokens.error.fill.srgb) }] }, hexError)), isNeutral && previewColors && /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.inlineSwatches }, previewColors.map((color, i) => /* @__PURE__ */ React__default.default.createElement(
833
783
  reactNative.View,
834
784
  {
835
785
  key: i,
@@ -1027,38 +977,20 @@ var styles2 = reactNative.StyleSheet.create({
1027
977
  flex: 1
1028
978
  }
1029
979
  });
1030
- var THEME_OPTIONS = [
1031
- { label: "Neutral", value: "neutral" },
1032
- { label: "Primary", value: "primary" },
1033
- { label: "Secondary", value: "secondary" },
1034
- { label: "Strong", value: "strong" }
1035
- ];
1036
- function PreviewCard({
1037
- state,
1038
- dispatch
1039
- }) {
980
+ function PreviewCard() {
1040
981
  const tokens = components.useTokens(1);
1041
- return /* @__PURE__ */ React__default.default.createElement(components.Card, { elevation: 1, style: styles3.container }, /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [styles3.title, { color: newtone.srgbToHex(tokens.textPrimary.srgb) }] }, "Component Preview"), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles3.controls }, /* @__PURE__ */ React__default.default.createElement(
1042
- components.Select,
1043
- {
1044
- options: THEME_OPTIONS,
1045
- value: state.preview.theme,
1046
- onValueChange: (t) => dispatch({ type: "SET_PREVIEW_THEME", theme: t }),
1047
- label: "Theme"
1048
- }
1049
- )), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: previewStyles.wrapper }, /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: previewStyles.row }, /* @__PURE__ */ React__default.default.createElement(components.Button, { variant: "primary", semantic: "accent", size: "sm" }, "Primary"), /* @__PURE__ */ React__default.default.createElement(components.Button, { variant: "primary", semantic: "neutral", size: "sm" }, "Secondary"), /* @__PURE__ */ React__default.default.createElement(components.Button, { variant: "tertiary", semantic: "neutral", size: "sm" }, "Ghost"), /* @__PURE__ */ React__default.default.createElement(components.Button, { variant: "secondary", semantic: "neutral", size: "sm" }, "Outline")), /* @__PURE__ */ React__default.default.createElement(components.TextInput, { label: "Sample Input", value: "Hello, Newtone", onChangeText: () => {
1050
- } }), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: previewStyles.row }, /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: [previewStyles.statusDot, { backgroundColor: newtone.srgbToHex(tokens.success.srgb) }] }), /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [previewStyles.statusText, { color: newtone.srgbToHex(tokens.textPrimary.srgb) }] }, "Success"), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: [previewStyles.statusDot, { backgroundColor: newtone.srgbToHex(tokens.warning.srgb) }] }), /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [previewStyles.statusText, { color: newtone.srgbToHex(tokens.textPrimary.srgb) }] }, "Warning"), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: [previewStyles.statusDot, { backgroundColor: newtone.srgbToHex(tokens.error.srgb) }] }), /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [previewStyles.statusText, { color: newtone.srgbToHex(tokens.textPrimary.srgb) }] }, "Error"))));
982
+ return /* @__PURE__ */ React__default.default.createElement(components.Card, { elevation: 1, style: styles3.container }, /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [styles3.title, { color: newtone.srgbToHex(tokens.textPrimary.srgb) }] }, "Component Preview"), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: previewStyles.wrapper }, /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: previewStyles.row }, /* @__PURE__ */ React__default.default.createElement(components.Button, { variant: "primary", semantic: "accent", size: "sm" }, "Primary"), /* @__PURE__ */ React__default.default.createElement(components.Button, { variant: "primary", semantic: "neutral", size: "sm" }, "Secondary"), /* @__PURE__ */ React__default.default.createElement(components.Button, { variant: "tertiary", semantic: "neutral", size: "sm" }, "Ghost"), /* @__PURE__ */ React__default.default.createElement(components.Button, { variant: "secondary", semantic: "neutral", size: "sm" }, "Outline")), /* @__PURE__ */ React__default.default.createElement(components.TextInput, { label: "Sample Input", value: "Hello, Newtone", onChangeText: () => {
983
+ } }), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: previewStyles.row }, /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: [previewStyles.statusDot, { backgroundColor: newtone.srgbToHex(tokens.success.fill.srgb) }] }), /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [previewStyles.statusText, { color: newtone.srgbToHex(tokens.textPrimary.srgb) }] }, "Success"), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: [previewStyles.statusDot, { backgroundColor: newtone.srgbToHex(tokens.warning.fill.srgb) }] }), /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [previewStyles.statusText, { color: newtone.srgbToHex(tokens.textPrimary.srgb) }] }, "Warning"), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: [previewStyles.statusDot, { backgroundColor: newtone.srgbToHex(tokens.error.fill.srgb) }] }), /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [previewStyles.statusText, { color: newtone.srgbToHex(tokens.textPrimary.srgb) }] }, "Error"))));
1051
984
  }
1052
- function PreviewPanel({ state, dispatch, themeConfig }) {
985
+ function PreviewPanel({ state, themeConfig }) {
1053
986
  return /* @__PURE__ */ React__default.default.createElement(
1054
987
  components.NewtoneProvider,
1055
988
  {
1056
- key: `${state.preview.mode}-${state.preview.theme}`,
989
+ key: state.preview.mode,
1057
990
  config: themeConfig,
1058
- initialMode: state.preview.mode,
1059
- initialTheme: state.preview.theme
991
+ initialMode: state.preview.mode
1060
992
  },
1061
- /* @__PURE__ */ React__default.default.createElement(PreviewCard, { state, dispatch })
993
+ /* @__PURE__ */ React__default.default.createElement(PreviewCard, null)
1062
994
  );
1063
995
  }
1064
996
  var styles3 = reactNative.StyleSheet.create({
@@ -1068,11 +1000,6 @@ var styles3 = reactNative.StyleSheet.create({
1068
1000
  title: {
1069
1001
  fontSize: 16,
1070
1002
  fontWeight: "700"
1071
- },
1072
- controls: {
1073
- flexDirection: "row",
1074
- alignItems: "flex-end",
1075
- gap: 16
1076
1003
  }
1077
1004
  });
1078
1005
  var previewStyles = reactNative.StyleSheet.create({
@@ -1103,9 +1030,7 @@ function toCSS(state) {
1103
1030
  const tokens = components.computeTokens(
1104
1031
  config.colorSystem,
1105
1032
  mode,
1106
- config.themes.neutral,
1107
1033
  1,
1108
- config.elevation.offsets,
1109
1034
  config.spacing,
1110
1035
  config.radius,
1111
1036
  config.typography,
@@ -1124,19 +1049,19 @@ function toCSS(state) {
1124
1049
  `;
1125
1050
  css += ` --newtone-text-secondary: ${newtone.srgbToHex(tokens.textSecondary.srgb)};
1126
1051
  `;
1127
- css += ` --newtone-interactive: ${newtone.srgbToHex(tokens.interactive.srgb)};
1052
+ css += ` --newtone-accent: ${newtone.srgbToHex(tokens.accent.fill.srgb)};
1128
1053
  `;
1129
- css += ` --newtone-interactive-hover: ${newtone.srgbToHex(tokens.interactiveHover.srgb)};
1054
+ css += ` --newtone-accent-hover: ${newtone.srgbToHex(tokens.accent.fillHover.srgb)};
1130
1055
  `;
1131
- css += ` --newtone-interactive-active: ${newtone.srgbToHex(tokens.interactiveActive.srgb)};
1056
+ css += ` --newtone-accent-active: ${newtone.srgbToHex(tokens.accent.fillActive.srgb)};
1132
1057
  `;
1133
1058
  css += ` --newtone-border: ${newtone.srgbToHex(tokens.border.srgb)};
1134
1059
  `;
1135
- css += ` --newtone-success: ${newtone.srgbToHex(tokens.success.srgb)};
1060
+ css += ` --newtone-success: ${newtone.srgbToHex(tokens.success.fill.srgb)};
1136
1061
  `;
1137
- css += ` --newtone-warning: ${newtone.srgbToHex(tokens.warning.srgb)};
1062
+ css += ` --newtone-warning: ${newtone.srgbToHex(tokens.warning.fill.srgb)};
1138
1063
  `;
1139
- css += ` --newtone-error: ${newtone.srgbToHex(tokens.error.srgb)};
1064
+ css += ` --newtone-error: ${newtone.srgbToHex(tokens.error.fill.srgb)};
1140
1065
  `;
1141
1066
  css += `}
1142
1067
 
@@ -1241,8 +1166,6 @@ function DesignPanel({ state, dispatch }) {
1241
1166
  const tokens = components.useTokens(1);
1242
1167
  const spacingPreset = state.spacing?.preset ?? "md";
1243
1168
  const intensity = state.roundness?.intensity ?? 0.5;
1244
- const baseSize = state.typography?.scale.baseSize ?? 16;
1245
- const ratio = state.typography?.scale.ratio ?? 1.25;
1246
1169
  const variant = state.icons?.variant ?? "rounded";
1247
1170
  const weight = state.icons?.weight ?? 400;
1248
1171
  return /* @__PURE__ */ React__default.default.createElement(components.Card, { elevation: 1, style: styles5.container }, /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [styles5.title, { color: newtone.srgbToHex(tokens.textPrimary.srgb) }] }, "Design System"), /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [styles5.subtitle, { color: newtone.srgbToHex(tokens.textSecondary.srgb) }] }, "Spacing"), /* @__PURE__ */ React__default.default.createElement(
@@ -1269,29 +1192,7 @@ function DesignPanel({ state, dispatch }) {
1269
1192
  label: "Intensity",
1270
1193
  showValue: true
1271
1194
  }
1272
- ), /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [styles5.subtitle, { color: newtone.srgbToHex(tokens.textSecondary.srgb) }] }, "Typography"), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles5.row }, /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles5.flex }, /* @__PURE__ */ React__default.default.createElement(
1273
- components.Slider,
1274
- {
1275
- value: baseSize,
1276
- onValueChange: (v) => dispatch({ type: "SET_TYPOGRAPHY_BASE_SIZE", baseSize: v }),
1277
- min: 12,
1278
- max: 24,
1279
- step: 1,
1280
- label: "Base Size",
1281
- showValue: true
1282
- }
1283
- )), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles5.flex }, /* @__PURE__ */ React__default.default.createElement(
1284
- components.Slider,
1285
- {
1286
- value: Math.round(ratio * 100),
1287
- onValueChange: (v) => dispatch({ type: "SET_TYPOGRAPHY_RATIO", ratio: v / 100 }),
1288
- min: 110,
1289
- max: 150,
1290
- step: 5,
1291
- label: "Scale Ratio",
1292
- showValue: true
1293
- }
1294
- ))), /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [styles5.subtitle, { color: newtone.srgbToHex(tokens.textSecondary.srgb) }] }, "Icons"), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles5.row }, /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles5.flex }, /* @__PURE__ */ React__default.default.createElement(
1195
+ ), /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: [styles5.subtitle, { color: newtone.srgbToHex(tokens.textSecondary.srgb) }] }, "Icons"), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles5.row }, /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles5.flex }, /* @__PURE__ */ React__default.default.createElement(
1295
1196
  components.Select,
1296
1197
  {
1297
1198
  options: ICON_VARIANT_OPTIONS,
@@ -1365,7 +1266,7 @@ function Configurator({
1365
1266
  },
1366
1267
  label: "Dark Mode"
1367
1268
  }
1368
- )), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles6.topRow }, /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles6.topRowPanel }, /* @__PURE__ */ React__default.default.createElement(GlobalPanel, { state, dispatch })), showPreview && /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles6.topRowPanel }, /* @__PURE__ */ React__default.default.createElement(PreviewPanel, { state, dispatch, themeConfig }))), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles6.designRow }, /* @__PURE__ */ React__default.default.createElement(DesignPanel, { state, dispatch })), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles6.tabBar }, state.palettes.map((palette, index) => /* @__PURE__ */ React__default.default.createElement(
1269
+ )), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles6.topRow }, /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles6.topRowPanel }, /* @__PURE__ */ React__default.default.createElement(GlobalPanel, { state, dispatch })), showPreview && /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles6.topRowPanel }, /* @__PURE__ */ React__default.default.createElement(PreviewPanel, { state, themeConfig }))), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles6.designRow }, /* @__PURE__ */ React__default.default.createElement(DesignPanel, { state, dispatch })), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles6.tabBar }, state.palettes.map((palette, index) => /* @__PURE__ */ React__default.default.createElement(
1369
1270
  reactNative.Pressable,
1370
1271
  {
1371
1272
  key: index,