@newtonedev/components 0.1.13 → 0.1.14

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 (160) hide show
  1. package/dist/_COMPONENT_TEMPLATE/ComponentName.styles.d.ts +1 -1
  2. package/dist/composites/actions/Button/Button.d.ts +11 -1
  3. package/dist/composites/actions/Button/Button.d.ts.map +1 -1
  4. package/dist/composites/actions/Button/Button.styles.d.ts.map +1 -1
  5. package/dist/composites/actions/Button/Button.types.d.ts +11 -1
  6. package/dist/composites/actions/Button/Button.types.d.ts.map +1 -1
  7. package/dist/composites/branding/LogoMonogram/LogoMonogram.d.ts +10 -0
  8. package/dist/composites/branding/LogoMonogram/LogoMonogram.d.ts.map +1 -0
  9. package/dist/composites/branding/LogoMonogram/LogoMonogram.types.d.ts +35 -0
  10. package/dist/composites/branding/LogoMonogram/LogoMonogram.types.d.ts.map +1 -0
  11. package/dist/composites/branding/LogoMonogram/index.d.ts +3 -0
  12. package/dist/composites/branding/LogoMonogram/index.d.ts.map +1 -0
  13. package/dist/composites/branding/LogoWordmark/LogoWordmark.d.ts +9 -0
  14. package/dist/composites/branding/LogoWordmark/LogoWordmark.d.ts.map +1 -0
  15. package/dist/composites/branding/LogoWordmark/LogoWordmark.types.d.ts +26 -0
  16. package/dist/composites/branding/LogoWordmark/LogoWordmark.types.d.ts.map +1 -0
  17. package/dist/composites/branding/LogoWordmark/index.d.ts +3 -0
  18. package/dist/composites/branding/LogoWordmark/index.d.ts.map +1 -0
  19. package/dist/composites/display/Chip/Chip.d.ts +25 -0
  20. package/dist/composites/display/Chip/Chip.d.ts.map +1 -0
  21. package/dist/composites/display/Chip/Chip.styles.d.ts +29 -0
  22. package/dist/composites/display/Chip/Chip.styles.d.ts.map +1 -0
  23. package/dist/composites/display/Chip/Chip.types.d.ts +63 -0
  24. package/dist/composites/display/Chip/Chip.types.d.ts.map +1 -0
  25. package/dist/composites/display/Chip/index.d.ts +3 -0
  26. package/dist/composites/display/Chip/index.d.ts.map +1 -0
  27. package/dist/composites/form-controls/Select/Select.d.ts.map +1 -1
  28. package/dist/composites/form-controls/Select/Select.styles.d.ts +2 -2
  29. package/dist/composites/form-controls/Select/Select.styles.d.ts.map +1 -1
  30. package/dist/composites/form-controls/Select/SelectOption.d.ts.map +1 -1
  31. package/dist/composites/form-controls/TextInput/TextInput.d.ts.map +1 -1
  32. package/dist/composites/form-controls/TextInput/TextInput.styles.d.ts +2 -2
  33. package/dist/composites/form-controls/TextInput/TextInput.styles.d.ts.map +1 -1
  34. package/dist/composites/form-controls/Toggle/Toggle.d.ts.map +1 -1
  35. package/dist/composites/form-controls/Toggle/Toggle.styles.d.ts +2 -2
  36. package/dist/composites/form-controls/Toggle/Toggle.styles.d.ts.map +1 -1
  37. package/dist/composites/layout/AppShell/AppShell.d.ts.map +1 -1
  38. package/dist/composites/layout/AppShell/AppShell.styles.d.ts +2 -2
  39. package/dist/composites/layout/AppShell/AppShell.styles.d.ts.map +1 -1
  40. package/dist/composites/layout/Card/Card.d.ts.map +1 -1
  41. package/dist/composites/layout/Card/Card.styles.d.ts +2 -2
  42. package/dist/composites/layout/Card/Card.styles.d.ts.map +1 -1
  43. package/dist/composites/layout/ContentCard/ContentCard.d.ts +33 -0
  44. package/dist/composites/layout/ContentCard/ContentCard.d.ts.map +1 -0
  45. package/dist/composites/layout/ContentCard/ContentCard.styles.d.ts +10 -0
  46. package/dist/composites/layout/ContentCard/ContentCard.styles.d.ts.map +1 -0
  47. package/dist/composites/layout/ContentCard/ContentCard.types.d.ts +52 -0
  48. package/dist/composites/layout/ContentCard/ContentCard.types.d.ts.map +1 -0
  49. package/dist/composites/layout/ContentCard/index.d.ts +3 -0
  50. package/dist/composites/layout/ContentCard/index.d.ts.map +1 -0
  51. package/dist/composites/layout/Divider/Divider.d.ts +25 -0
  52. package/dist/composites/layout/Divider/Divider.d.ts.map +1 -0
  53. package/dist/composites/layout/Divider/Divider.styles.d.ts +8 -0
  54. package/dist/composites/layout/Divider/Divider.styles.d.ts.map +1 -0
  55. package/dist/composites/layout/Divider/Divider.types.d.ts +25 -0
  56. package/dist/composites/layout/Divider/Divider.types.d.ts.map +1 -0
  57. package/dist/composites/layout/Divider/index.d.ts +3 -0
  58. package/dist/composites/layout/Divider/index.d.ts.map +1 -0
  59. package/dist/composites/layout/Navbar/Navbar.d.ts.map +1 -1
  60. package/dist/composites/layout/Navbar/Navbar.styles.d.ts +4 -3
  61. package/dist/composites/layout/Navbar/Navbar.styles.d.ts.map +1 -1
  62. package/dist/composites/layout/Sidebar/Sidebar.d.ts.map +1 -1
  63. package/dist/composites/layout/Sidebar/Sidebar.styles.d.ts +4 -3
  64. package/dist/composites/layout/Sidebar/Sidebar.styles.d.ts.map +1 -1
  65. package/dist/composites/overlays/Popover/Popover.d.ts.map +1 -1
  66. package/dist/composites/overlays/Popover/Popover.styles.d.ts +2 -2
  67. package/dist/composites/overlays/Popover/Popover.styles.d.ts.map +1 -1
  68. package/dist/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.d.ts.map +1 -1
  69. package/dist/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.styles.d.ts +2 -2
  70. package/dist/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.styles.d.ts.map +1 -1
  71. package/dist/composites/range-inputs/HueSlider/HueSlider.styles.d.ts +2 -2
  72. package/dist/composites/range-inputs/HueSlider/HueSlider.styles.d.ts.map +1 -1
  73. package/dist/composites/range-inputs/Slider/Slider.styles.d.ts +2 -2
  74. package/dist/composites/range-inputs/Slider/Slider.styles.d.ts.map +1 -1
  75. package/dist/index.cjs +903 -396
  76. package/dist/index.cjs.map +1 -1
  77. package/dist/index.d.ts +12 -2
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +830 -344
  80. package/dist/index.js.map +1 -1
  81. package/dist/primitives/Frame/Frame.d.ts +1 -35
  82. package/dist/primitives/Frame/Frame.d.ts.map +1 -1
  83. package/dist/primitives/Frame/Frame.styles.d.ts +13 -4
  84. package/dist/primitives/Frame/Frame.styles.d.ts.map +1 -1
  85. package/dist/primitives/Frame/Frame.types.d.ts +99 -1
  86. package/dist/primitives/Frame/Frame.types.d.ts.map +1 -1
  87. package/dist/primitives/Frame/index.d.ts +1 -1
  88. package/dist/primitives/Frame/index.d.ts.map +1 -1
  89. package/dist/primitives/Icon/Icon.d.ts.map +1 -1
  90. package/dist/primitives/Icon/Icon.types.d.ts +2 -2
  91. package/dist/primitives/Icon/Icon.types.d.ts.map +1 -1
  92. package/dist/primitives/Text/Text.d.ts +5 -3
  93. package/dist/primitives/Text/Text.d.ts.map +1 -1
  94. package/dist/primitives/Text/Text.spans.d.ts.map +1 -1
  95. package/dist/primitives/Text/Text.types.d.ts +3 -6
  96. package/dist/primitives/Text/Text.types.d.ts.map +1 -1
  97. package/dist/primitives/Wrapper/Wrapper.d.ts +1 -1
  98. package/dist/primitives/Wrapper/Wrapper.d.ts.map +1 -1
  99. package/dist/primitives/Wrapper/Wrapper.styles.d.ts +9 -1
  100. package/dist/primitives/Wrapper/Wrapper.styles.d.ts.map +1 -1
  101. package/dist/primitives/Wrapper/Wrapper.types.d.ts +31 -1
  102. package/dist/primitives/Wrapper/Wrapper.types.d.ts.map +1 -1
  103. package/package.json +1 -1
  104. package/src/composites/actions/Button/Button.styles.ts +71 -55
  105. package/src/composites/actions/Button/Button.tsx +34 -13
  106. package/src/composites/actions/Button/Button.types.ts +13 -1
  107. package/src/composites/branding/LogoMonogram/LogoMonogram.tsx +29 -0
  108. package/src/composites/branding/LogoMonogram/LogoMonogram.types.ts +35 -0
  109. package/src/composites/branding/LogoMonogram/index.ts +2 -0
  110. package/src/composites/branding/LogoWordmark/LogoWordmark.tsx +29 -0
  111. package/src/composites/branding/LogoWordmark/LogoWordmark.types.ts +25 -0
  112. package/src/composites/branding/LogoWordmark/index.ts +2 -0
  113. package/src/composites/display/Chip/Chip.styles.ts +189 -0
  114. package/src/composites/display/Chip/Chip.tsx +97 -0
  115. package/src/composites/display/Chip/Chip.types.ts +74 -0
  116. package/src/composites/display/Chip/index.ts +2 -0
  117. package/src/composites/form-controls/Select/Select.styles.ts +10 -10
  118. package/src/composites/form-controls/Select/Select.tsx +9 -6
  119. package/src/composites/form-controls/Select/SelectOption.tsx +10 -7
  120. package/src/composites/form-controls/TextInput/TextInput.styles.ts +12 -8
  121. package/src/composites/form-controls/TextInput/TextInput.tsx +7 -4
  122. package/src/composites/form-controls/Toggle/Toggle.styles.ts +10 -7
  123. package/src/composites/form-controls/Toggle/Toggle.tsx +4 -3
  124. package/src/composites/layout/AppShell/AppShell.styles.ts +8 -3
  125. package/src/composites/layout/AppShell/AppShell.tsx +6 -2
  126. package/src/composites/layout/Card/Card.styles.ts +10 -4
  127. package/src/composites/layout/Card/Card.tsx +4 -3
  128. package/src/composites/layout/ContentCard/ContentCard.styles.ts +44 -0
  129. package/src/composites/layout/ContentCard/ContentCard.tsx +71 -0
  130. package/src/composites/layout/ContentCard/ContentCard.types.ts +60 -0
  131. package/src/composites/layout/ContentCard/index.ts +2 -0
  132. package/src/composites/layout/Divider/Divider.styles.ts +30 -0
  133. package/src/composites/layout/Divider/Divider.tsx +46 -0
  134. package/src/composites/layout/Divider/Divider.types.ts +28 -0
  135. package/src/composites/layout/Divider/index.ts +2 -0
  136. package/src/composites/layout/Navbar/Navbar.styles.ts +7 -5
  137. package/src/composites/layout/Navbar/Navbar.tsx +4 -3
  138. package/src/composites/layout/Sidebar/Sidebar.styles.ts +7 -5
  139. package/src/composites/layout/Sidebar/Sidebar.tsx +4 -3
  140. package/src/composites/overlays/Popover/Popover.styles.ts +7 -5
  141. package/src/composites/overlays/Popover/Popover.tsx +4 -3
  142. package/src/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.styles.ts +5 -5
  143. package/src/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.tsx +4 -3
  144. package/src/composites/range-inputs/HueSlider/HueSlider.styles.ts +7 -7
  145. package/src/composites/range-inputs/HueSlider/HueSlider.tsx +1 -1
  146. package/src/composites/range-inputs/Slider/Slider.styles.ts +9 -9
  147. package/src/composites/range-inputs/Slider/Slider.tsx +1 -1
  148. package/src/index.ts +43 -9
  149. package/src/primitives/Frame/Frame.styles.ts +55 -12
  150. package/src/primitives/Frame/Frame.tsx +138 -140
  151. package/src/primitives/Frame/Frame.types.ts +119 -1
  152. package/src/primitives/Frame/index.ts +4 -0
  153. package/src/primitives/Icon/Icon.tsx +9 -6
  154. package/src/primitives/Icon/Icon.types.ts +2 -2
  155. package/src/primitives/Text/Text.spans.ts +9 -5
  156. package/src/primitives/Text/Text.tsx +26 -15
  157. package/src/primitives/Text/Text.types.ts +3 -6
  158. package/src/primitives/Wrapper/Wrapper.styles.ts +32 -0
  159. package/src/primitives/Wrapper/Wrapper.tsx +22 -3
  160. package/src/primitives/Wrapper/Wrapper.types.ts +45 -0
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { useTokens, useNewtoneTheme, useBreakpoint, useTypographyCalibrations, useLocalCalibration, enqueueObservation, useFrameContext, computeTokens, FrameContext } from 'newtone-api';
2
- export { ACCENT_DEFAULTS, DEFAULT_FONT_SIZES, DEFAULT_LINE_HEIGHTS, DEFAULT_ROLE_SCALES, DEFAULT_THEME_CONFIG, ERROR_DEFAULTS, FrameContext, NEUTRAL_DEFAULTS, NewtoneProvider, SUCCESS_DEFAULTS, WARNING_DEFAULTS, buildGoogleFontsUrl, computeTokens, enqueueObservation, isV2TokenOverrides, measureAvgCharWidth, migrateV1ToV2, useBreakpoint, useFrameContext, useLocalCalibration, useNewtoneTheme, useTokens, useTypographyCalibrations } from 'newtone-api';
3
- import React13, { createContext, useState, useMemo, useEffect, useContext, useCallback, useRef } from 'react';
1
+ import { useTokens, useNewtoneTheme, useFrameContext, useBreakpoint, useTypographyCalibrations, useLocalCalibration, enqueueObservation, computeTokens, _ThemeContext, FrameContext } from 'newtone-api';
2
+ export { DEFAULT_FONT_SIZES, DEFAULT_LINE_HEIGHTS, DEFAULT_ROLE_SCALES, DEFAULT_THEME_CONFIG, DEFAULT_THEME_MAPPINGS, ERROR_DEFAULTS, FrameContext, NewtoneProvider, PRIMARY_DEFAULTS, SECONDARY_DEFAULTS, SUCCESS_DEFAULTS, TERTIARY_DEFAULTS, WARNING_DEFAULTS, buildGoogleFontsUrl, computeColors, computeSwatches, computeTokens, enqueueObservation, measureAvgCharWidth, resolveTheme, useBreakpoint, useFrameContext, useLocalCalibration, useNewtoneTheme, useScheme, useTokens, useTypographyCalibrations } from 'newtone-api';
3
+ import React16, { createContext, useState, useMemo, useEffect, useContext, useCallback, useRef } from 'react';
4
4
  import { Text, View, Pressable, TextInput as TextInput$1, ScrollView, PanResponder, Animated, StyleSheet } from 'react-native';
5
5
  import { SEMANTIC_WEIGHT_MAP, ROLE_DEFAULT_WEIGHTS, BREAKPOINT_ROLE_SCALE, scaleRoleStep, resolveResponsiveSize, estimateLineWidths, REFERENCE_LINE_HEIGHT_RATIO, buildFontFeatureSettings } from '@newtonedev/fonts';
6
6
  import { srgbToHex, gamutMapToSrgb } from 'newtone';
@@ -155,8 +155,9 @@ function resolveFlexDirection(direction, reverse) {
155
155
  function getFrameStyles(input) {
156
156
  const {
157
157
  tokens,
158
- gamut,
159
158
  frameElevation,
159
+ theme = "primary",
160
+ appearance = "main",
160
161
  layout = "flex",
161
162
  direction = "vertical",
162
163
  wrap = false,
@@ -173,13 +174,22 @@ function getFrameStyles(input) {
173
174
  maxWidth,
174
175
  minHeight,
175
176
  maxHeight,
177
+ position,
178
+ top,
179
+ right,
180
+ bottom,
181
+ left,
182
+ zIndex,
183
+ overflow,
184
+ opacity,
176
185
  radius,
177
186
  bordered = false,
178
187
  disabled = false
179
188
  } = input;
180
189
  const container = {};
181
- container.backgroundColor = tokens.background[gamut];
182
- container.color = tokens.textPrimary[gamut];
190
+ const appearanceTokens = tokens.colors[theme][appearance];
191
+ container.backgroundColor = appearanceTokens.background;
192
+ container.color = appearanceTokens.fontPrimary;
183
193
  if (layout === "flex") {
184
194
  container.display = "flex";
185
195
  container.flexDirection = resolveFlexDirection(direction, reverse);
@@ -210,6 +220,12 @@ function getFrameStyles(input) {
210
220
  if (maxWidth !== void 0) container.maxWidth = maxWidth;
211
221
  if (minHeight !== void 0) container.minHeight = minHeight;
212
222
  if (maxHeight !== void 0) container.maxHeight = maxHeight;
223
+ if (position) container.position = position;
224
+ if (top !== void 0) container.top = top;
225
+ if (right !== void 0) container.right = right;
226
+ if (bottom !== void 0) container.bottom = bottom;
227
+ if (left !== void 0) container.left = left;
228
+ if (zIndex !== void 0) container.zIndex = zIndex;
213
229
  if (radius !== void 0) {
214
230
  const corners = resolveRadiusCorners(radius, tokens);
215
231
  container.borderTopLeftRadius = corners.topLeft;
@@ -220,9 +236,10 @@ function getFrameStyles(input) {
220
236
  container.overflow = "hidden";
221
237
  }
222
238
  }
239
+ if (overflow) container.overflow = overflow;
223
240
  if (bordered) {
224
241
  container.borderWidth = 1;
225
- container.borderColor = tokens.border[gamut];
242
+ container.borderColor = appearanceTokens.fontTertiary;
226
243
  }
227
244
  if (frameElevation === 2) {
228
245
  container.shadowColor = "#000";
@@ -231,11 +248,13 @@ function getFrameStyles(input) {
231
248
  container.shadowRadius = 6;
232
249
  container.elevation = 4;
233
250
  }
234
- if (disabled) {
251
+ if (opacity !== void 0) {
252
+ container.opacity = opacity;
253
+ } else if (disabled) {
235
254
  container.opacity = 0.5;
236
255
  }
237
256
  const pressed = StyleSheet.create({
238
- s: { backgroundColor: tokens.backgroundSunken[gamut] }
257
+ s: { backgroundColor: appearanceTokens.fontSecondary }
239
258
  }).s;
240
259
  let gridWebStyle = null;
241
260
  if (layout === "grid") {
@@ -259,13 +278,18 @@ function getFrameStyles(input) {
259
278
 
260
279
  // src/primitives/Frame/Frame.tsx
261
280
  function wrapTextChildren(children, textStyle) {
262
- return React13.Children.map(children, (child) => {
281
+ return React16.Children.map(children, (child) => {
263
282
  if (typeof child === "string" || typeof child === "number") {
264
- return /* @__PURE__ */ React13.createElement(Text, { style: textStyle }, child);
283
+ return /* @__PURE__ */ React16.createElement(Text, { style: textStyle }, child);
265
284
  }
266
285
  return child;
267
286
  });
268
287
  }
288
+ var ELEVATION_MAP = {
289
+ 0: "sunken",
290
+ 1: "grounded",
291
+ 2: "elevated"
292
+ };
269
293
  function toElevationLevel(frameElevation) {
270
294
  if (frameElevation <= -1) return 0;
271
295
  if (frameElevation === 0) return 1;
@@ -275,6 +299,11 @@ function Frame({
275
299
  children,
276
300
  // Elevation
277
301
  elevation,
302
+ // Scheme
303
+ scheme,
304
+ // Theme / Appearance
305
+ theme,
306
+ appearance,
278
307
  // Layout
279
308
  layout,
280
309
  direction,
@@ -295,6 +324,16 @@ function Frame({
295
324
  maxWidth,
296
325
  minHeight,
297
326
  maxHeight,
327
+ // Positioning
328
+ position,
329
+ top,
330
+ right,
331
+ bottom,
332
+ left,
333
+ zIndex,
334
+ overflow,
335
+ pointerEvents,
336
+ opacity,
298
337
  // Appearance
299
338
  radius,
300
339
  bordered,
@@ -312,27 +351,41 @@ function Frame({
312
351
  // Style override
313
352
  style
314
353
  }) {
315
- const { config, mode, gamut } = useNewtoneTheme();
354
+ const themeCtx = useNewtoneTheme();
355
+ const { mode, gamut } = themeCtx;
316
356
  const parentFrameCtx = useFrameContext();
357
+ const resolvedConfig = useMemo(() => {
358
+ if (scheme && themeCtx.schemes) {
359
+ const schemeConfig = themeCtx.schemes[scheme];
360
+ if (schemeConfig) return schemeConfig;
361
+ }
362
+ return themeCtx.config;
363
+ }, [scheme, themeCtx.schemes, themeCtx.config]);
364
+ const isSchemeOverride = resolvedConfig !== themeCtx.config;
365
+ const resolvedTheme = theme ?? parentFrameCtx?.theme ?? "primary";
366
+ const resolvedAppearance = appearance ?? parentFrameCtx?.appearance ?? "main";
317
367
  const resolvedFrameElevation = elevation ?? 0;
318
368
  const resolvedElevation = elevation !== void 0 ? toElevationLevel(elevation) : parentFrameCtx?.elevation ?? 1;
319
369
  const tokens = useMemo(() => {
320
370
  return computeTokens(
321
- config.colorSystem,
371
+ resolvedConfig.colorSystem,
322
372
  mode,
323
- resolvedElevation,
324
- config.spacing,
325
- config.radius,
326
- config.typography,
327
- config.icons,
328
- config.tokenOverrides
373
+ gamut,
374
+ ELEVATION_MAP[resolvedElevation],
375
+ resolvedConfig.spacing,
376
+ resolvedConfig.radius,
377
+ resolvedConfig.typography,
378
+ resolvedConfig.icons,
379
+ resolvedConfig.themeMappings,
380
+ resolvedConfig.swatchDefaults
329
381
  );
330
- }, [config, mode, resolvedElevation]);
382
+ }, [resolvedConfig, mode, gamut, resolvedElevation]);
331
383
  const styles = useMemo(
332
384
  () => getFrameStyles({
333
385
  tokens,
334
- gamut,
335
386
  frameElevation: resolvedFrameElevation,
387
+ theme: resolvedTheme,
388
+ appearance: resolvedAppearance,
336
389
  layout,
337
390
  direction,
338
391
  wrap,
@@ -349,14 +402,23 @@ function Frame({
349
402
  maxWidth,
350
403
  minHeight,
351
404
  maxHeight,
405
+ position,
406
+ top,
407
+ right,
408
+ bottom,
409
+ left,
410
+ zIndex,
411
+ overflow,
412
+ opacity,
352
413
  radius,
353
414
  bordered,
354
415
  disabled
355
416
  }),
356
417
  [
357
418
  tokens,
358
- gamut,
359
419
  resolvedFrameElevation,
420
+ resolvedTheme,
421
+ resolvedAppearance,
360
422
  layout,
361
423
  direction,
362
424
  wrap,
@@ -373,15 +435,38 @@ function Frame({
373
435
  maxWidth,
374
436
  minHeight,
375
437
  maxHeight,
438
+ position,
439
+ top,
440
+ right,
441
+ bottom,
442
+ left,
443
+ zIndex,
444
+ overflow,
445
+ opacity,
376
446
  radius,
377
447
  bordered,
378
448
  disabled
379
449
  ]
380
450
  );
451
+ const resolvedScheme = scheme ?? parentFrameCtx?.scheme;
381
452
  const contextValue = useMemo(
382
- () => ({ elevation: resolvedElevation, tokens }),
383
- [resolvedElevation, tokens]
453
+ () => ({
454
+ elevation: resolvedElevation,
455
+ tokens,
456
+ scheme: resolvedScheme,
457
+ theme: resolvedTheme,
458
+ appearance: resolvedAppearance
459
+ }),
460
+ [resolvedElevation, tokens, resolvedScheme, resolvedTheme, resolvedAppearance]
384
461
  );
462
+ const schemeThemeCtx = useMemo(() => {
463
+ if (!isSchemeOverride) return null;
464
+ return {
465
+ ...themeCtx,
466
+ config: resolvedConfig,
467
+ activeScheme: scheme ?? themeCtx.activeScheme
468
+ };
469
+ }, [isSchemeOverride, themeCtx, resolvedConfig, scheme]);
385
470
  const webOverrides = [];
386
471
  if (styles.gridWebStyle) {
387
472
  webOverrides.push(styles.gridWebStyle);
@@ -395,68 +480,65 @@ function Frame({
395
480
  const focusRingStyle = isFocusVisible && !disabled ? {
396
481
  outlineWidth: 2,
397
482
  outlineStyle: "solid",
398
- outlineColor: tokens.accent.fill[gamut],
483
+ outlineColor: tokens.colors[resolvedTheme].emphasis.background,
399
484
  outlineOffset: 2
400
485
  } : void 0;
401
486
  const webFocusProps = isInteractive ? focusProps : {};
402
487
  const textStyle = useMemo(
403
488
  () => ({
404
- color: tokens.textPrimary[gamut],
489
+ color: tokens.colors[resolvedTheme][resolvedAppearance].fontPrimary,
405
490
  fontSize: tokens.typography.fontSizes["05"],
406
491
  fontFamily: tokens.typography.fonts.main.family,
407
492
  lineHeight: tokens.typography.lineHeights["06"]
408
493
  }),
409
- [tokens]
494
+ [tokens, resolvedTheme, resolvedAppearance]
410
495
  );
411
496
  const wrappedChildren = useMemo(
412
497
  () => wrapTextChildren(children, textStyle),
413
498
  [children, textStyle]
414
499
  );
415
- return /* @__PURE__ */ React13.createElement(FrameContext.Provider, { value: contextValue }, isInteractive ? (
416
- // Pressable handles taps. When href is set, react-native-web renders
417
- // it as an <a> tag so it works like a regular link on the web.
418
- /* @__PURE__ */ React13.createElement(
419
- Pressable,
420
- {
421
- ref,
422
- testID,
423
- nativeID,
424
- accessibilityLabel,
425
- accessibilityHint,
426
- accessibilityState: disabled ? { disabled: true } : void 0,
427
- onPress,
428
- disabled,
429
- ...href ? { href, accessibilityRole: "link" } : { accessibilityRole: "button" },
430
- ...webFocusProps,
431
- style: ({ pressed }) => [
432
- styles.container,
433
- pressed && !disabled && styles.pressed,
434
- focusRingStyle,
435
- ...webOverrides,
436
- ...userStyles
437
- ]
438
- },
439
- wrappedChildren
440
- )
441
- ) : (
442
- // Non-interactive Frame: just a plain View with no tap handling.
443
- /* @__PURE__ */ React13.createElement(
444
- View,
445
- {
446
- ref,
447
- testID,
448
- nativeID,
449
- accessibilityLabel,
450
- accessibilityHint,
451
- style: [styles.container, ...webOverrides, ...userStyles]
452
- },
453
- wrappedChildren
454
- )
455
- ));
500
+ const content = isInteractive ? /* @__PURE__ */ React16.createElement(
501
+ Pressable,
502
+ {
503
+ ref,
504
+ testID,
505
+ nativeID,
506
+ pointerEvents,
507
+ accessibilityLabel,
508
+ accessibilityHint,
509
+ accessibilityState: disabled ? { disabled: true } : void 0,
510
+ onPress,
511
+ disabled,
512
+ ...href ? { href, accessibilityRole: "link" } : { accessibilityRole: "button" },
513
+ ...webFocusProps,
514
+ style: ({ pressed }) => [
515
+ styles.container,
516
+ pressed && !disabled && styles.pressed,
517
+ focusRingStyle,
518
+ ...webOverrides,
519
+ ...userStyles
520
+ ]
521
+ },
522
+ wrappedChildren
523
+ ) : /* @__PURE__ */ React16.createElement(
524
+ View,
525
+ {
526
+ ref,
527
+ testID,
528
+ nativeID,
529
+ pointerEvents,
530
+ accessibilityLabel,
531
+ accessibilityHint,
532
+ style: [styles.container, ...webOverrides, ...userStyles]
533
+ },
534
+ wrappedChildren
535
+ );
536
+ const wrappedContent = schemeThemeCtx ? /* @__PURE__ */ React16.createElement(_ThemeContext.Provider, { value: schemeThemeCtx }, content) : content;
537
+ return /* @__PURE__ */ React16.createElement(FrameContext.Provider, { value: contextValue }, wrappedContent);
456
538
  }
457
539
  function Icon({
458
- name,
459
- size,
540
+ name = "add",
541
+ size = 24,
460
542
  opticalSize,
461
543
  fill = 0,
462
544
  color,
@@ -469,6 +551,9 @@ function Icon({
469
551
  ref
470
552
  }) {
471
553
  const tokens = useTokens();
554
+ const frameCtx = useFrameContext();
555
+ const resolvedTheme = frameCtx?.theme ?? "primary";
556
+ const resolvedAppearance = frameCtx?.appearance ?? "main";
472
557
  const iconStyle = useMemo(() => {
473
558
  const fontSize = size ?? tokens.typography.fontSizes["05"];
474
559
  const getOpticalSize = (size2) => {
@@ -478,7 +563,7 @@ function Icon({
478
563
  return 48;
479
564
  };
480
565
  const opsz = opticalSize ?? getOpticalSize(fontSize);
481
- const iconColor = color ?? tokens.textPrimary[tokens.gamut];
566
+ const iconColor = color ?? tokens.colors[resolvedTheme][resolvedAppearance].fontPrimary;
482
567
  const fontFamily = `Material Symbols ${tokens.icons.variant.charAt(0).toUpperCase() + tokens.icons.variant.slice(1)}`;
483
568
  const fillValue = typeof fill === "boolean" ? fill ? 1 : 0 : fill;
484
569
  const fontVariationSettings = `'FILL' ${fillValue}, 'wght' ${tokens.icons.weight}, 'GRAD' ${tokens.icons.grade}, 'opsz' ${opsz}`;
@@ -498,8 +583,8 @@ function Icon({
498
583
  // web-only: controls the variable font axes listed above
499
584
  ...style
500
585
  };
501
- }, [tokens, size, opticalSize, fill, color, style]);
502
- return /* @__PURE__ */ React13.createElement(
586
+ }, [tokens, size, opticalSize, fill, color, style, resolvedTheme, resolvedAppearance]);
587
+ return /* @__PURE__ */ React16.createElement(
503
588
  Text,
504
589
  {
505
590
  ref,
@@ -527,7 +612,15 @@ function getWrapperStyles(input) {
527
612
  minWidth,
528
613
  maxWidth,
529
614
  minHeight,
530
- maxHeight
615
+ maxHeight,
616
+ position,
617
+ top,
618
+ right,
619
+ bottom,
620
+ left,
621
+ zIndex,
622
+ overflow,
623
+ opacity
531
624
  } = input;
532
625
  const container = {};
533
626
  container.flexDirection = resolveFlexDirection(direction, reverse);
@@ -551,6 +644,14 @@ function getWrapperStyles(input) {
551
644
  if (maxWidth !== void 0) container.maxWidth = maxWidth;
552
645
  if (minHeight !== void 0) container.minHeight = minHeight;
553
646
  if (maxHeight !== void 0) container.maxHeight = maxHeight;
647
+ if (position) container.position = position;
648
+ if (top !== void 0) container.top = top;
649
+ if (right !== void 0) container.right = right;
650
+ if (bottom !== void 0) container.bottom = bottom;
651
+ if (left !== void 0) container.left = left;
652
+ if (zIndex !== void 0) container.zIndex = zIndex;
653
+ if (overflow) container.overflow = overflow;
654
+ if (opacity !== void 0) container.opacity = opacity;
554
655
  return StyleSheet.create({ c: container }).c;
555
656
  }
556
657
  function Wrapper({
@@ -568,13 +669,23 @@ function Wrapper({
568
669
  maxWidth,
569
670
  minHeight,
570
671
  maxHeight,
672
+ // Positioning
673
+ position,
674
+ top,
675
+ right,
676
+ bottom,
677
+ left,
678
+ zIndex,
679
+ overflow,
680
+ pointerEvents,
681
+ opacity,
571
682
  style,
572
683
  // Testing & platform
573
684
  testID,
574
685
  nativeID,
575
686
  ref
576
687
  }) {
577
- const tokens = useTokens(1);
688
+ const tokens = useTokens();
578
689
  const containerStyle = useMemo(
579
690
  () => getWrapperStyles({
580
691
  tokens,
@@ -590,7 +701,15 @@ function Wrapper({
590
701
  minWidth,
591
702
  maxWidth,
592
703
  minHeight,
593
- maxHeight
704
+ maxHeight,
705
+ position,
706
+ top,
707
+ right,
708
+ bottom,
709
+ left,
710
+ zIndex,
711
+ overflow,
712
+ opacity
594
713
  }),
595
714
  [
596
715
  tokens,
@@ -606,16 +725,25 @@ function Wrapper({
606
725
  minWidth,
607
726
  maxWidth,
608
727
  minHeight,
609
- maxHeight
728
+ maxHeight,
729
+ position,
730
+ top,
731
+ right,
732
+ bottom,
733
+ left,
734
+ zIndex,
735
+ overflow,
736
+ opacity
610
737
  ]
611
738
  );
612
739
  const userStyles = Array.isArray(style) ? style : style ? [style] : [];
613
- return /* @__PURE__ */ React13.createElement(
740
+ return /* @__PURE__ */ React16.createElement(
614
741
  View,
615
742
  {
616
743
  ref,
617
744
  testID,
618
745
  nativeID,
746
+ pointerEvents,
619
747
  accessibilityRole: "none",
620
748
  style: [containerStyle, ...userStyles]
621
749
  },
@@ -623,25 +751,19 @@ function Wrapper({
623
751
  );
624
752
  }
625
753
  var TextScopeContext = createContext(null);
626
- function resolveTextColor(color, tokens) {
627
- const { gamut } = tokens;
754
+ var LARGE_TEXT_ROLES = /* @__PURE__ */ new Set(["headline", "title", "heading", "subheading"]);
755
+ function resolveTextColor(color, tokens, theme = "primary", appearance = "main", role = "body") {
628
756
  switch (color) {
629
757
  case "primary":
630
- return tokens.textPrimary[gamut];
758
+ return tokens.colors[theme][appearance].fontPrimary;
631
759
  case "secondary":
632
- return tokens.textSecondary[gamut];
760
+ return tokens.colors[theme][appearance].fontSecondary;
633
761
  case "tertiary":
634
- return tokens.textTertiary[gamut];
762
+ return tokens.colors[theme][appearance].fontTertiary;
635
763
  case "disabled":
636
- return tokens.textDisabled[gamut];
764
+ return tokens.colors[theme][appearance].fontDisabled;
637
765
  case "accent":
638
- return tokens.accent.fill[gamut];
639
- case "success":
640
- return tokens.success.fill[gamut];
641
- case "warning":
642
- return tokens.warning.fill[gamut];
643
- case "error":
644
- return tokens.error.fill[gamut];
766
+ return tokens.colors[theme][appearance][LARGE_TEXT_ROLES.has(role) ? "accentLarge" : "accentSmall"];
645
767
  }
646
768
  }
647
769
  var ADAPTIVE_ROLES = /* @__PURE__ */ new Set(["headline", "title", "heading", "subheading"]);
@@ -671,7 +793,7 @@ function TextBase({
671
793
  weight: weightOverride,
672
794
  align,
673
795
  numberOfLines,
674
- elevation = 1,
796
+ elevation,
675
797
  style,
676
798
  accessibilityRole: accessibilityRoleOverride,
677
799
  testID,
@@ -683,6 +805,9 @@ function TextBase({
683
805
  }) {
684
806
  const tokens = useTokens(elevation);
685
807
  const { config, reportingEndpoint } = useNewtoneTheme();
808
+ const frameCtx = useFrameContext();
809
+ const resolvedTheme = frameCtx?.theme ?? "primary";
810
+ const resolvedAppearance = frameCtx?.appearance ?? "main";
686
811
  const size = sizeOverride ?? "md";
687
812
  const fontSlot = tokens.typography.fonts[scope];
688
813
  const resolvedFontWeight = weightOverride ? SEMANTIC_WEIGHT_MAP[weightOverride] : config.typography.roleWeights?.[role] ?? ROLE_DEFAULT_WEIGHTS[role];
@@ -745,18 +870,18 @@ function TextBase({
745
870
  fontFamily: fontSlot.family,
746
871
  fontSize: activeStep.fontSize,
747
872
  fontWeight: String(resolvedFontWeight),
748
- color: resolveTextColor(color, tokens),
873
+ color: resolveTextColor(color, tokens, resolvedTheme, resolvedAppearance, role),
749
874
  lineHeight: correctedLineHeight,
750
875
  textAlign: align,
751
876
  ...vcOffset !== 0 ? { transform: [{ translateY: vcOffset }] } : {},
752
877
  ...featureSettings ? { fontFeatureSettings: featureSettings } : {}
753
878
  };
754
- }, [tokens, fontSlot, step, resolvedStep, responsive, isAdaptive, resolvedFontWeight, color, align, config.typography.fontMetrics, centerVertically, features]);
879
+ }, [tokens, fontSlot, step, resolvedStep, responsive, isAdaptive, resolvedFontWeight, color, align, config.typography.fontMetrics, centerVertically, features, resolvedTheme, resolvedAppearance]);
755
880
  const inferredA11yRole = role === "headline" || role === "title" || role === "heading" ? "header" : void 0;
756
881
  const effectiveA11yRole = accessibilityRoleOverride ?? inferredA11yRole;
757
882
  const ariaLevel = effectiveA11yRole === "header" ? ROLE_HEADING_LEVEL[role] : void 0;
758
883
  const scopeCtx = useMemo(() => ({ weights: SEMANTIC_WEIGHT_MAP }), []);
759
- const textNode = /* @__PURE__ */ React13.createElement(TextScopeContext.Provider, { value: scopeCtx }, /* @__PURE__ */ React13.createElement(
884
+ const textNode = /* @__PURE__ */ React16.createElement(TextScopeContext.Provider, { value: scopeCtx }, /* @__PURE__ */ React16.createElement(
760
885
  Text,
761
886
  {
762
887
  ref,
@@ -770,7 +895,7 @@ function TextBase({
770
895
  children
771
896
  ));
772
897
  if (responsive && isAdaptive) {
773
- return /* @__PURE__ */ React13.createElement(
898
+ return /* @__PURE__ */ React16.createElement(
774
899
  View,
775
900
  {
776
901
  onLayout: (e) => {
@@ -785,37 +910,40 @@ function TextBase({
785
910
  return textNode;
786
911
  }
787
912
  function TextSpan({ children, color, weight, italic, underline, highlight, style }) {
788
- const tokens = useTokens(1);
913
+ const tokens = useTokens();
789
914
  const scopeCtx = useContext(TextScopeContext);
915
+ const frameCtx = useFrameContext();
916
+ const resolvedTheme = frameCtx?.theme ?? "primary";
917
+ const resolvedAppearance = frameCtx?.appearance ?? "main";
790
918
  const spanStyle = useMemo(() => {
791
919
  const s = {};
792
- if (color) s.color = resolveTextColor(color, tokens);
920
+ if (color) s.color = resolveTextColor(color, tokens, resolvedTheme, resolvedAppearance);
793
921
  if (weight && scopeCtx) s.fontWeight = String(scopeCtx.weights[weight]);
794
922
  if (italic) s.fontStyle = "italic";
795
923
  if (underline) s.textDecorationLine = "underline";
796
- if (highlight) s.backgroundColor = resolveTextColor(highlight, tokens);
924
+ if (highlight) s.backgroundColor = resolveTextColor(highlight, tokens, resolvedTheme, resolvedAppearance);
797
925
  return s;
798
- }, [tokens, scopeCtx, color, weight, italic, underline, highlight]);
799
- return React13.createElement(
926
+ }, [tokens, scopeCtx, color, weight, italic, underline, highlight, resolvedTheme, resolvedAppearance]);
927
+ return React16.createElement(
800
928
  Text,
801
929
  { style: style ? [spanStyle, ...Array.isArray(style) ? style : [style]] : spanStyle },
802
930
  children
803
931
  );
804
932
  }
805
933
  function TextBold(props) {
806
- return React13.createElement(TextSpan, { ...props, weight: "bold" });
934
+ return React16.createElement(TextSpan, { ...props, weight: "bold" });
807
935
  }
808
936
  function TextMedium(props) {
809
- return React13.createElement(TextSpan, { ...props, weight: "medium" });
937
+ return React16.createElement(TextSpan, { ...props, weight: "medium" });
810
938
  }
811
939
  function TextItalic(props) {
812
- return React13.createElement(TextSpan, { ...props, italic: true });
940
+ return React16.createElement(TextSpan, { ...props, italic: true });
813
941
  }
814
942
  function TextUnderline(props) {
815
- return React13.createElement(TextSpan, { ...props, underline: true });
943
+ return React16.createElement(TextSpan, { ...props, underline: true });
816
944
  }
817
945
  function TextHighlight(props) {
818
- return React13.createElement(TextSpan, props);
946
+ return React16.createElement(TextSpan, props);
819
947
  }
820
948
 
821
949
  // src/primitives/Text/index.ts
@@ -877,19 +1005,9 @@ function computeButtonPadding(size, hasIcon, hasText, iconPosition) {
877
1005
  paddingBottom: base
878
1006
  };
879
1007
  }
880
- function getPaletteTokens(semantic, tokens) {
881
- switch (semantic) {
882
- case "accent":
883
- return tokens.accent;
884
- case "success":
885
- return tokens.success;
886
- case "error":
887
- return tokens.error;
888
- case "warning":
889
- return tokens.warning;
890
- default:
891
- return void 0;
892
- }
1008
+ function semanticToTheme(semantic) {
1009
+ if (semantic === "accent") return "primary";
1010
+ return semantic;
893
1011
  }
894
1012
  function getButtonConfig(variant, semantic, size, disabled, tokens) {
895
1013
  const sizeConfig = getSizeConfig(size, tokens);
@@ -937,40 +1055,38 @@ function getSizeConfig(size, tokens) {
937
1055
  function getVariantColors(variant, semantic, disabled, tokens) {
938
1056
  if (disabled) {
939
1057
  const baseColors = getVariantColorsForState(variant, semantic, tokens);
940
- const { gamut } = tokens;
941
- const disabledBg = tokens.backgroundSunken[gamut];
1058
+ const disabledBg = tokens.colors.primary.main.fontSecondary;
942
1059
  return {
943
1060
  ...baseColors,
944
1061
  bg: disabledBg,
945
1062
  hoveredBg: disabledBg,
946
1063
  pressedBg: disabledBg,
947
- textColor: tokens.textSecondary[gamut],
948
- iconColor: tokens.textSecondary[gamut]
1064
+ textColor: tokens.colors.primary.main.fontTertiary,
1065
+ iconColor: tokens.colors.primary.main.fontTertiary
949
1066
  };
950
1067
  }
951
1068
  return getVariantColorsForState(variant, semantic, tokens);
952
1069
  }
953
1070
  function getVariantColorsForState(variant, semantic, tokens) {
954
- const { gamut } = tokens;
955
- const paletteTokens = getPaletteTokens(semantic, tokens);
956
1071
  if (variant === "primary") {
957
1072
  if (semantic === "neutral") {
958
1073
  return {
959
- bg: tokens.backgroundInteractive[gamut],
960
- hoveredBg: tokens.backgroundInteractiveHover[gamut],
961
- pressedBg: tokens.backgroundInteractiveActive[gamut],
962
- textColor: tokens.textPrimary[gamut],
963
- iconColor: tokens.textPrimary[gamut],
1074
+ bg: tokens.colors.primary.main.fontPrimary,
1075
+ hoveredBg: tokens.colors.primary.main.fontSecondary,
1076
+ pressedBg: tokens.colors.primary.main.fontPrimary,
1077
+ textColor: tokens.colors.primary.main.divider,
1078
+ iconColor: tokens.colors.primary.main.divider,
964
1079
  borderWidth: 1,
965
1080
  borderColor: "transparent"
966
1081
  };
967
1082
  }
1083
+ const t = tokens.colors[semanticToTheme(semantic)];
968
1084
  return {
969
- bg: paletteTokens.fill[gamut],
970
- hoveredBg: paletteTokens.fillHover[gamut],
971
- pressedBg: paletteTokens.fillActive[gamut],
972
- textColor: paletteTokens.onFill[gamut],
973
- iconColor: paletteTokens.onFill[gamut],
1085
+ bg: t.emphasis.background,
1086
+ hoveredBg: t.emphasis.fontPrimary,
1087
+ pressedBg: t.emphasis.fontSecondary,
1088
+ textColor: t.main.background,
1089
+ iconColor: t.main.background,
974
1090
  borderWidth: 1,
975
1091
  borderColor: "transparent"
976
1092
  };
@@ -979,20 +1095,21 @@ function getVariantColorsForState(variant, semantic, tokens) {
979
1095
  if (semantic === "neutral") {
980
1096
  return {
981
1097
  bg: "transparent",
982
- hoveredBg: tokens.backgroundInteractive[gamut],
983
- pressedBg: tokens.backgroundInteractiveHover[gamut],
984
- textColor: tokens.textPrimary[gamut],
985
- iconColor: tokens.textPrimary[gamut],
1098
+ hoveredBg: tokens.colors.primary.main.fontPrimary,
1099
+ pressedBg: tokens.colors.primary.main.fontSecondary,
1100
+ textColor: tokens.colors.primary.main.divider,
1101
+ iconColor: tokens.colors.primary.main.divider,
986
1102
  borderWidth: 1,
987
- borderColor: tokens.border[gamut]
1103
+ borderColor: tokens.colors.primary.main.fontSecondary
988
1104
  };
989
1105
  }
1106
+ const t = tokens.colors[semanticToTheme(semantic)];
990
1107
  return {
991
- bg: paletteTokens.background[gamut],
992
- hoveredBg: paletteTokens.backgroundInteractive[gamut],
993
- pressedBg: paletteTokens.backgroundInteractiveHover[gamut],
994
- textColor: paletteTokens.fill[gamut],
995
- iconColor: paletteTokens.fill[gamut],
1108
+ bg: t.tinted.background,
1109
+ hoveredBg: t.tinted.fontPrimary,
1110
+ pressedBg: t.tinted.fontSecondary,
1111
+ textColor: t.emphasis.divider,
1112
+ iconColor: t.emphasis.divider,
996
1113
  borderWidth: 1,
997
1114
  borderColor: "transparent"
998
1115
  };
@@ -1001,30 +1118,54 @@ function getVariantColorsForState(variant, semantic, tokens) {
1001
1118
  if (semantic === "neutral") {
1002
1119
  return {
1003
1120
  bg: "transparent",
1004
- hoveredBg: tokens.backgroundInteractive[gamut],
1005
- pressedBg: tokens.backgroundInteractiveHover[gamut],
1006
- textColor: tokens.textPrimary[gamut],
1007
- iconColor: tokens.textPrimary[gamut],
1121
+ hoveredBg: tokens.colors.primary.main.fontPrimary,
1122
+ pressedBg: tokens.colors.primary.main.fontSecondary,
1123
+ textColor: tokens.colors.primary.main.divider,
1124
+ iconColor: tokens.colors.primary.main.divider,
1008
1125
  borderWidth: 1,
1009
1126
  borderColor: "transparent"
1010
1127
  };
1011
1128
  }
1129
+ const t = tokens.colors[semanticToTheme(semantic)];
1012
1130
  return {
1013
1131
  bg: "transparent",
1014
- hoveredBg: paletteTokens.background[gamut],
1015
- pressedBg: paletteTokens.backgroundInteractive[gamut],
1016
- textColor: paletteTokens.fill[gamut],
1017
- iconColor: paletteTokens.fill[gamut],
1132
+ hoveredBg: t.tinted.background,
1133
+ pressedBg: t.tinted.fontPrimary,
1134
+ textColor: t.emphasis.divider,
1135
+ iconColor: t.emphasis.divider,
1018
1136
  borderWidth: 1,
1019
1137
  borderColor: "transparent"
1020
1138
  };
1021
1139
  }
1140
+ if (variant === "link") {
1141
+ if (semantic === "neutral") {
1142
+ return {
1143
+ bg: "transparent",
1144
+ hoveredBg: "transparent",
1145
+ pressedBg: "transparent",
1146
+ textColor: tokens.colors.primary.main.fontSecondary,
1147
+ iconColor: tokens.colors.primary.main.fontSecondary,
1148
+ borderWidth: 0,
1149
+ borderColor: "transparent"
1150
+ };
1151
+ }
1152
+ const t = tokens.colors[semanticToTheme(semantic)];
1153
+ return {
1154
+ bg: "transparent",
1155
+ hoveredBg: "transparent",
1156
+ pressedBg: "transparent",
1157
+ textColor: t.emphasis.divider,
1158
+ iconColor: t.emphasis.divider,
1159
+ borderWidth: 0,
1160
+ borderColor: "transparent"
1161
+ };
1162
+ }
1022
1163
  return {
1023
1164
  bg: "transparent",
1024
1165
  hoveredBg: "transparent",
1025
1166
  pressedBg: "transparent",
1026
- textColor: tokens.textPrimary[gamut],
1027
- iconColor: tokens.textPrimary[gamut],
1167
+ textColor: tokens.colors.primary.main.divider,
1168
+ iconColor: tokens.colors.primary.main.divider,
1028
1169
  borderWidth: 0
1029
1170
  };
1030
1171
  }
@@ -1036,22 +1177,25 @@ function Button({
1036
1177
  semantic = "neutral",
1037
1178
  size = "md",
1038
1179
  disabled = false,
1180
+ loading = false,
1181
+ fullWidth = false,
1039
1182
  style,
1040
1183
  textStyle,
1041
1184
  ...pressableProps
1042
1185
  }) {
1043
1186
  const tokens = useTokens();
1044
- const { variantColors, sizeTokens } = React13.useMemo(
1045
- () => getButtonConfig(variant, semantic, size, disabled, tokens),
1046
- [variant, semantic, size, disabled, tokens]
1187
+ const isDisabled = disabled || loading;
1188
+ const { variantColors, sizeTokens } = React16.useMemo(
1189
+ () => getButtonConfig(variant, semantic, size, isDisabled, tokens),
1190
+ [variant, semantic, size, isDisabled, tokens]
1047
1191
  );
1048
- const padding = React13.useMemo(
1049
- () => computeButtonPadding(size, !!icon, !!children, iconPosition),
1050
- [size, icon, children, iconPosition]
1192
+ const padding = React16.useMemo(
1193
+ () => variant === "link" ? { paddingLeft: 0, paddingRight: 0, paddingTop: 0, paddingBottom: 0 } : computeButtonPadding(size, !!icon, !!children, iconPosition),
1194
+ [size, icon, children, iconPosition, variant]
1051
1195
  );
1052
- return /* @__PURE__ */ React13.createElement(Pressable, { disabled, ...pressableProps }, ({ pressed, hovered }) => (
1196
+ return /* @__PURE__ */ React16.createElement(Pressable, { disabled: isDisabled, ...pressableProps }, ({ pressed, hovered }) => (
1053
1197
  // Wrapper handles layout: direction, gap, alignment (padding via style)
1054
- /* @__PURE__ */ React13.createElement(
1198
+ /* @__PURE__ */ React16.createElement(
1055
1199
  Wrapper,
1056
1200
  {
1057
1201
  direction: "horizontal",
@@ -1062,41 +1206,45 @@ function Button({
1062
1206
  {
1063
1207
  ...padding,
1064
1208
  // Asymmetric horizontal padding for text optical balance
1065
- backgroundColor: pressed && !disabled ? variantColors.pressedBg : hovered && !disabled ? variantColors.hoveredBg : variantColors.bg,
1066
- borderRadius: sizeTokens.borderRadius,
1209
+ backgroundColor: pressed && !isDisabled ? variantColors.pressedBg : hovered && !isDisabled ? variantColors.hoveredBg : variantColors.bg,
1210
+ borderRadius: variant === "link" ? 0 : sizeTokens.borderRadius,
1067
1211
  borderWidth: variantColors.borderWidth,
1068
- // Always 1 for consistent sizing
1069
1212
  borderColor: variantColors.borderColor || "transparent",
1070
- opacity: disabled ? 0.4 : 1
1213
+ opacity: isDisabled ? loading ? 0.6 : 0.4 : variant === "link" && pressed ? 0.7 : 1,
1214
+ ...fullWidth && { width: "100%", alignSelf: "stretch" }
1071
1215
  },
1072
1216
  ...Array.isArray(style) ? style : style ? [style] : []
1073
1217
  ]
1074
1218
  },
1075
- icon && iconPosition === "left" && /* @__PURE__ */ React13.createElement(Icon, { name: icon, size: sizeTokens.iconSize, color: variantColors.iconColor }),
1219
+ icon && iconPosition === "left" && /* @__PURE__ */ React16.createElement(Icon, { name: icon, size: sizeTokens.iconSize, color: variantColors.iconColor }),
1076
1220
  children && // Text primitive with semantic props + color style override
1077
- /* @__PURE__ */ React13.createElement(
1221
+ /* @__PURE__ */ React16.createElement(
1078
1222
  Text3,
1079
1223
  {
1080
1224
  role: "label",
1081
1225
  size: sizeTokens.textSize,
1082
1226
  centerVertically: true,
1083
1227
  style: [
1084
- { color: variantColors.textColor },
1228
+ {
1229
+ color: variantColors.textColor,
1230
+ ...variant === "link" && hovered && { textDecorationLine: "underline" }
1231
+ },
1085
1232
  ...Array.isArray(textStyle) ? textStyle : textStyle ? [textStyle] : []
1086
1233
  ]
1087
1234
  },
1088
1235
  children
1089
1236
  ),
1090
- icon && iconPosition === "right" && /* @__PURE__ */ React13.createElement(Icon, { name: icon, size: sizeTokens.iconSize, color: variantColors.iconColor })
1237
+ icon && iconPosition === "right" && /* @__PURE__ */ React16.createElement(Icon, { name: icon, size: sizeTokens.iconSize, color: variantColors.iconColor })
1091
1238
  )
1092
1239
  ));
1093
1240
  }
1094
- function getCardStyles(tokens, gamut, disabled) {
1241
+ function getCardStyles(tokens, disabled, theme = "primary", appearance = "main") {
1242
+ const at = tokens.colors[theme][appearance];
1095
1243
  return StyleSheet.create({
1096
1244
  container: {
1097
- backgroundColor: tokens.background[gamut],
1245
+ backgroundColor: at.background,
1098
1246
  borderWidth: 1,
1099
- borderColor: tokens.border[gamut],
1247
+ borderColor: at.fontSecondary,
1100
1248
  borderRadius: tokens.radius.lg,
1101
1249
  padding: tokens.spacing["16"],
1102
1250
  opacity: disabled ? 0.5 : 1
@@ -1112,13 +1260,286 @@ function Card({
1112
1260
  disabled = false
1113
1261
  }) {
1114
1262
  const tokens = useTokens(elevation);
1115
- const styles = React13.useMemo(
1116
- () => getCardStyles(tokens, tokens.gamut, disabled),
1117
- [tokens, disabled]
1263
+ const frameCtx = useFrameContext();
1264
+ const styles = React16.useMemo(
1265
+ () => getCardStyles(tokens, disabled, frameCtx?.theme, frameCtx?.appearance),
1266
+ [tokens, disabled, frameCtx?.theme, frameCtx?.appearance]
1118
1267
  );
1119
- return /* @__PURE__ */ React13.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : [style]] }, children);
1268
+ return /* @__PURE__ */ React16.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : [style]] }, children);
1269
+ }
1270
+
1271
+ // src/composites/display/Chip/Chip.styles.ts
1272
+ function semanticToTheme2(semantic) {
1273
+ if (semantic === "accent") return "primary";
1274
+ return semantic;
1275
+ }
1276
+ function getSizeConfig2(size) {
1277
+ if (size === "sm") {
1278
+ return { paddingX: 10, paddingY: 3, gap: 4, textRole: "caption", iconSize: 16 };
1279
+ }
1280
+ return { paddingX: 16, paddingY: 8, gap: 6, textRole: "label", iconSize: 20 };
1120
1281
  }
1121
- function getTextInputStyles(tokens, gamut, disabled) {
1282
+ function getVariantColors2(variant, semantic, selected, disabled, tokens) {
1283
+ if (selected) {
1284
+ if (semantic === "neutral") {
1285
+ return {
1286
+ bg: tokens.colors.primary.strong.background,
1287
+ hoveredBg: tokens.colors.primary.strong.fontPrimary,
1288
+ pressedBg: tokens.colors.primary.strong.background,
1289
+ textColor: tokens.colors.primary.strong.fontPrimary,
1290
+ iconColor: tokens.colors.primary.strong.fontPrimary,
1291
+ borderWidth: 1,
1292
+ borderColor: "transparent"
1293
+ };
1294
+ }
1295
+ const t2 = tokens.colors[semanticToTheme2(semantic)];
1296
+ return {
1297
+ bg: t2.emphasis.background,
1298
+ hoveredBg: t2.emphasis.fontPrimary,
1299
+ pressedBg: t2.emphasis.background,
1300
+ textColor: t2.main.background,
1301
+ iconColor: t2.main.background,
1302
+ borderWidth: 1,
1303
+ borderColor: "transparent"
1304
+ };
1305
+ }
1306
+ if (disabled) {
1307
+ return {
1308
+ bg: "transparent",
1309
+ hoveredBg: "transparent",
1310
+ pressedBg: "transparent",
1311
+ textColor: tokens.colors.primary.main.fontTertiary,
1312
+ iconColor: tokens.colors.primary.main.fontTertiary,
1313
+ borderWidth: 1,
1314
+ borderColor: tokens.colors.primary.main.divider
1315
+ };
1316
+ }
1317
+ if (variant === "filled") {
1318
+ if (semantic === "neutral") {
1319
+ return {
1320
+ bg: tokens.colors.primary.main.fontPrimary,
1321
+ hoveredBg: tokens.colors.primary.main.fontSecondary,
1322
+ pressedBg: tokens.colors.primary.main.fontPrimary,
1323
+ textColor: tokens.colors.primary.main.divider,
1324
+ iconColor: tokens.colors.primary.main.divider,
1325
+ borderWidth: 1,
1326
+ borderColor: "transparent"
1327
+ };
1328
+ }
1329
+ const t2 = tokens.colors[semanticToTheme2(semantic)];
1330
+ return {
1331
+ bg: t2.emphasis.background,
1332
+ hoveredBg: t2.emphasis.fontPrimary,
1333
+ pressedBg: t2.emphasis.fontSecondary,
1334
+ textColor: t2.main.background,
1335
+ iconColor: t2.main.background,
1336
+ borderWidth: 1,
1337
+ borderColor: "transparent"
1338
+ };
1339
+ }
1340
+ if (variant === "tinted") {
1341
+ if (semantic === "neutral") {
1342
+ return {
1343
+ bg: tokens.colors.primary.tinted.background,
1344
+ hoveredBg: tokens.colors.primary.tinted.fontPrimary,
1345
+ pressedBg: tokens.colors.primary.tinted.fontSecondary,
1346
+ textColor: tokens.colors.primary.main.fontPrimary,
1347
+ iconColor: tokens.colors.primary.main.fontPrimary,
1348
+ borderWidth: 1,
1349
+ borderColor: "transparent"
1350
+ };
1351
+ }
1352
+ const t2 = tokens.colors[semanticToTheme2(semantic)];
1353
+ return {
1354
+ bg: t2.tinted.background,
1355
+ hoveredBg: t2.tinted.fontPrimary,
1356
+ pressedBg: t2.tinted.fontSecondary,
1357
+ textColor: t2.emphasis.divider,
1358
+ iconColor: t2.emphasis.divider,
1359
+ borderWidth: 1,
1360
+ borderColor: "transparent"
1361
+ };
1362
+ }
1363
+ if (semantic === "neutral") {
1364
+ return {
1365
+ bg: "transparent",
1366
+ hoveredBg: tokens.colors.primary.tinted.background,
1367
+ pressedBg: tokens.colors.primary.tinted.fontPrimary,
1368
+ textColor: tokens.colors.primary.main.fontPrimary,
1369
+ iconColor: tokens.colors.primary.main.fontPrimary,
1370
+ borderWidth: 1,
1371
+ borderColor: tokens.colors.primary.main.divider
1372
+ };
1373
+ }
1374
+ const t = tokens.colors[semanticToTheme2(semantic)];
1375
+ return {
1376
+ bg: "transparent",
1377
+ hoveredBg: t.tinted.background,
1378
+ pressedBg: t.tinted.fontPrimary,
1379
+ textColor: t.emphasis.divider,
1380
+ iconColor: t.emphasis.divider,
1381
+ borderWidth: 1,
1382
+ borderColor: t.tinted.fontSecondary
1383
+ };
1384
+ }
1385
+ function getChipConfig(variant, semantic, size, selected, disabled, tokens) {
1386
+ return {
1387
+ colors: getVariantColors2(variant, semantic, selected, disabled, tokens),
1388
+ sizeTokens: getSizeConfig2(size)
1389
+ };
1390
+ }
1391
+ function Chip({
1392
+ children,
1393
+ variant = "tinted",
1394
+ size = "md",
1395
+ semantic = "neutral",
1396
+ selected = false,
1397
+ onPress,
1398
+ disabled = false,
1399
+ icon,
1400
+ style
1401
+ }) {
1402
+ const tokens = useTokens();
1403
+ const { colors, sizeTokens } = React16.useMemo(
1404
+ () => getChipConfig(variant, semantic, size, selected, disabled, tokens),
1405
+ [variant, semantic, size, selected, disabled, tokens]
1406
+ );
1407
+ const content = (state) => /* @__PURE__ */ React16.createElement(
1408
+ Wrapper,
1409
+ {
1410
+ direction: "horizontal",
1411
+ align: "center",
1412
+ gap: sizeTokens.gap,
1413
+ style: [
1414
+ {
1415
+ paddingLeft: sizeTokens.paddingX,
1416
+ paddingRight: sizeTokens.paddingX,
1417
+ paddingTop: sizeTokens.paddingY,
1418
+ paddingBottom: sizeTokens.paddingY,
1419
+ backgroundColor: state?.pressed && !disabled ? colors.pressedBg : state?.hovered && !disabled ? colors.hoveredBg : colors.bg,
1420
+ borderRadius: 99,
1421
+ borderWidth: colors.borderWidth,
1422
+ borderColor: colors.borderColor || "transparent",
1423
+ opacity: disabled ? 0.4 : 1
1424
+ },
1425
+ ...Array.isArray(style) ? style : style ? [style] : []
1426
+ ]
1427
+ },
1428
+ icon && /* @__PURE__ */ React16.createElement(Icon, { name: icon, size: sizeTokens.iconSize, color: colors.iconColor }),
1429
+ /* @__PURE__ */ React16.createElement(
1430
+ Text3,
1431
+ {
1432
+ role: sizeTokens.textRole,
1433
+ weight: selected ? "bold" : "medium",
1434
+ style: { color: colors.textColor }
1435
+ },
1436
+ children
1437
+ )
1438
+ );
1439
+ if (onPress) {
1440
+ return /* @__PURE__ */ React16.createElement(Pressable, { onPress, disabled }, ({ pressed, hovered }) => content({ pressed, hovered }));
1441
+ }
1442
+ return content();
1443
+ }
1444
+
1445
+ // src/composites/layout/Divider/Divider.styles.ts
1446
+ function getDividerStyles(orientation, spacing, tokens) {
1447
+ const color = tokens.colors.primary.main.divider;
1448
+ if (orientation === "vertical") {
1449
+ return {
1450
+ width: 1,
1451
+ height: "100%",
1452
+ backgroundColor: color,
1453
+ ...spacing != null && { marginLeft: spacing, marginRight: spacing }
1454
+ };
1455
+ }
1456
+ return {
1457
+ height: 1,
1458
+ width: "100%",
1459
+ backgroundColor: color,
1460
+ ...spacing != null && { marginTop: spacing, marginBottom: spacing }
1461
+ };
1462
+ }
1463
+ function Divider({
1464
+ orientation = "horizontal",
1465
+ spacing,
1466
+ style
1467
+ }) {
1468
+ const tokens = useTokens();
1469
+ const dividerStyle = React16.useMemo(
1470
+ () => getDividerStyles(orientation, spacing, tokens),
1471
+ [orientation, spacing, tokens]
1472
+ );
1473
+ return /* @__PURE__ */ React16.createElement(
1474
+ View,
1475
+ {
1476
+ style: [dividerStyle, ...Array.isArray(style) ? style : style ? [style] : []],
1477
+ accessibilityRole: "none"
1478
+ }
1479
+ );
1480
+ }
1481
+
1482
+ // src/composites/layout/ContentCard/ContentCard.styles.ts
1483
+ function getContentCardStyles(variant, isInteractive, tokens) {
1484
+ const dividerColor = tokens.colors.primary.main.divider;
1485
+ const interactiveStyles = isInteractive ? { cursor: "pointer", textDecorationLine: "none" } : {};
1486
+ if (variant === "elevated") {
1487
+ return {
1488
+ borderRadius: 12,
1489
+ ...interactiveStyles
1490
+ };
1491
+ }
1492
+ if (variant === "bordered") {
1493
+ return {
1494
+ borderWidth: 1,
1495
+ borderColor: dividerColor,
1496
+ borderStyle: "solid",
1497
+ borderRadius: 12,
1498
+ ...interactiveStyles
1499
+ };
1500
+ }
1501
+ return {
1502
+ borderBottomWidth: 1,
1503
+ borderBottomColor: dividerColor,
1504
+ ...interactiveStyles
1505
+ };
1506
+ }
1507
+ function ContentCard({
1508
+ children,
1509
+ variant = "bordered",
1510
+ href,
1511
+ onPress,
1512
+ padding = 20,
1513
+ gap = 8,
1514
+ disabled = false,
1515
+ style
1516
+ }) {
1517
+ const tokens = useTokens();
1518
+ const isInteractive = !!(href || onPress);
1519
+ const variantStyles = React16.useMemo(
1520
+ () => getContentCardStyles(variant, isInteractive, tokens),
1521
+ [variant, isInteractive, tokens]
1522
+ );
1523
+ return /* @__PURE__ */ React16.createElement(
1524
+ Frame,
1525
+ {
1526
+ elevation: variant === "elevated" ? 2 : void 0,
1527
+ appearance: variant === "elevated" ? "tinted" : void 0,
1528
+ href,
1529
+ onPress,
1530
+ disabled,
1531
+ padding,
1532
+ gap,
1533
+ style: [
1534
+ variantStyles,
1535
+ ...Array.isArray(style) ? style : style ? [style] : []
1536
+ ]
1537
+ },
1538
+ children
1539
+ );
1540
+ }
1541
+ function getTextInputStyles(tokens, disabled, theme = "primary", appearance = "main") {
1542
+ const at = tokens.colors[theme][appearance];
1122
1543
  return StyleSheet.create({
1123
1544
  container: {
1124
1545
  gap: tokens.spacing["04"]
@@ -1127,18 +1548,18 @@ function getTextInputStyles(tokens, gamut, disabled) {
1127
1548
  fontFamily: tokens.typography.fonts.main.family,
1128
1549
  fontSize: tokens.typography.fontSizes["04"],
1129
1550
  fontWeight: tokens.typography.fonts.main.weights.medium,
1130
- color: tokens.textSecondary[gamut]
1551
+ color: at.fontTertiary
1131
1552
  },
1132
1553
  input: {
1133
1554
  fontFamily: tokens.typography.fonts.main.family,
1134
- backgroundColor: tokens.backgroundSunken[gamut],
1555
+ backgroundColor: at.fontSecondary,
1135
1556
  borderWidth: 1,
1136
- borderColor: tokens.border[gamut],
1557
+ borderColor: at.fontSecondary,
1137
1558
  borderRadius: tokens.radius.md,
1138
1559
  paddingVertical: tokens.spacing["08"],
1139
1560
  paddingHorizontal: tokens.spacing["12"],
1140
1561
  fontSize: tokens.typography.fontSizes["05"],
1141
- color: disabled ? tokens.textSecondary[gamut] : tokens.textPrimary[gamut],
1562
+ color: disabled ? at.fontTertiary : at.divider,
1142
1563
  opacity: disabled ? 0.5 : 1
1143
1564
  }
1144
1565
  });
@@ -1152,21 +1573,25 @@ function TextInput({
1152
1573
  ...textInputProps
1153
1574
  }) {
1154
1575
  const tokens = useTokens(1);
1155
- const styles = React13.useMemo(
1156
- () => getTextInputStyles(tokens, tokens.gamut, disabled),
1157
- [tokens, disabled]
1576
+ const frameCtx = useFrameContext();
1577
+ const theme = frameCtx?.theme ?? "primary";
1578
+ const appearance = frameCtx?.appearance ?? "main";
1579
+ const styles = React16.useMemo(
1580
+ () => getTextInputStyles(tokens, disabled, theme, appearance),
1581
+ [tokens, disabled, theme, appearance]
1158
1582
  );
1159
- return /* @__PURE__ */ React13.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : [style]] }, label && /* @__PURE__ */ React13.createElement(Text, { style: styles.label }, label), /* @__PURE__ */ React13.createElement(
1583
+ return /* @__PURE__ */ React16.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : [style]] }, label && /* @__PURE__ */ React16.createElement(Text, { style: styles.label }, label), /* @__PURE__ */ React16.createElement(
1160
1584
  TextInput$1,
1161
1585
  {
1162
1586
  style: styles.input,
1163
1587
  editable: !disabled,
1164
- placeholderTextColor: tokens.textSecondary[tokens.gamut],
1588
+ placeholderTextColor: tokens.colors[theme][appearance].fontTertiary,
1165
1589
  ...textInputProps
1166
1590
  }
1167
1591
  ));
1168
1592
  }
1169
- function getPopoverStyles(tokens, gamut, triggerHeight, offset, maxHeight, width, isOpen) {
1593
+ function getPopoverStyles(tokens, triggerHeight, offset, maxHeight, width, isOpen, theme = "primary", appearance = "main") {
1594
+ const at = tokens.colors[theme][appearance];
1170
1595
  const widthStyle = width === "trigger" ? { left: 0, right: 0 } : typeof width === "number" ? { width, left: 0 } : { left: 0 };
1171
1596
  return StyleSheet.create({
1172
1597
  container: {
@@ -1177,9 +1602,9 @@ function getPopoverStyles(tokens, gamut, triggerHeight, offset, maxHeight, width
1177
1602
  position: "absolute",
1178
1603
  top: triggerHeight + offset,
1179
1604
  ...widthStyle,
1180
- backgroundColor: tokens.backgroundElevated[gamut],
1605
+ backgroundColor: at.fontPrimary,
1181
1606
  borderWidth: 1,
1182
- borderColor: tokens.border[gamut],
1607
+ borderColor: at.fontSecondary,
1183
1608
  borderRadius: tokens.radius.md,
1184
1609
  maxHeight,
1185
1610
  zIndex: 1e3,
@@ -1208,6 +1633,7 @@ function Popover({
1208
1633
  contentStyle
1209
1634
  }) {
1210
1635
  const tokens = useTokens(1);
1636
+ const frameCtx = useFrameContext();
1211
1637
  const containerRef = useRef(null);
1212
1638
  const [triggerHeight, setTriggerHeight] = useState(0);
1213
1639
  const onTriggerLayout = useCallback(
@@ -1247,8 +1673,8 @@ function Popover({
1247
1673
  [closeOnEscape, onClose]
1248
1674
  );
1249
1675
  const styles = useMemo(
1250
- () => getPopoverStyles(tokens, tokens.gamut, triggerHeight, offset, maxHeight, width, isOpen),
1251
- [tokens, triggerHeight, offset, maxHeight, width, isOpen]
1676
+ () => getPopoverStyles(tokens, triggerHeight, offset, maxHeight, width, isOpen, frameCtx?.theme, frameCtx?.appearance),
1677
+ [tokens, triggerHeight, offset, maxHeight, width, isOpen, frameCtx?.theme, frameCtx?.appearance]
1252
1678
  );
1253
1679
  const containerStyles = useMemo(
1254
1680
  () => [styles.container, ...Array.isArray(style) ? style : style ? [style] : []],
@@ -1259,15 +1685,15 @@ function Popover({
1259
1685
  [styles.content, contentStyle]
1260
1686
  );
1261
1687
  const webProps = { onKeyDown: handleKeyDown };
1262
- return /* @__PURE__ */ React13.createElement(
1688
+ return /* @__PURE__ */ React16.createElement(
1263
1689
  View,
1264
1690
  {
1265
1691
  ref: containerRef,
1266
1692
  style: containerStyles,
1267
1693
  ...webProps
1268
1694
  },
1269
- /* @__PURE__ */ React13.createElement(View, { onLayout: onTriggerLayout }, trigger),
1270
- isOpen && /* @__PURE__ */ React13.createElement(View, { style: mergedContentStyles }, children)
1695
+ /* @__PURE__ */ React16.createElement(View, { onLayout: onTriggerLayout }, trigger),
1696
+ isOpen && /* @__PURE__ */ React16.createElement(View, { style: mergedContentStyles }, children)
1271
1697
  );
1272
1698
  }
1273
1699
  function usePopover(options) {
@@ -1294,7 +1720,8 @@ function usePopover(options) {
1294
1720
  function isOptionGroup(item) {
1295
1721
  return "options" in item;
1296
1722
  }
1297
- function getSelectStyles(tokens, gamut, disabled, size, isOpen) {
1723
+ function getSelectStyles(tokens, disabled, size, isOpen, theme = "primary", appearance = "main") {
1724
+ const at = tokens.colors[theme][appearance];
1298
1725
  const isSm = size === "sm";
1299
1726
  const fontSize = isSm ? tokens.typography.fontSizes["04"] : tokens.typography.fontSizes["05"];
1300
1727
  const iconSize = fontSize + 2;
@@ -1310,14 +1737,14 @@ function getSelectStyles(tokens, gamut, disabled, size, isOpen) {
1310
1737
  fontFamily: tokens.typography.fonts.main.family,
1311
1738
  fontSize: tokens.typography.fontSizes["04"],
1312
1739
  fontWeight: tokens.typography.fonts.main.weights.medium,
1313
- color: tokens.textSecondary[gamut]
1740
+ color: at.fontTertiary
1314
1741
  },
1315
1742
  trigger: {
1316
1743
  flexDirection: "row",
1317
1744
  alignItems: "center",
1318
- backgroundColor: tokens.backgroundSunken[gamut],
1745
+ backgroundColor: at.fontSecondary,
1319
1746
  borderWidth: 1,
1320
- borderColor: tokens.border[gamut],
1747
+ borderColor: at.fontSecondary,
1321
1748
  borderRadius: tokens.radius.md,
1322
1749
  paddingVertical,
1323
1750
  paddingLeft: paddingHorizontal,
@@ -1328,7 +1755,7 @@ function getSelectStyles(tokens, gamut, disabled, size, isOpen) {
1328
1755
  flex: 1,
1329
1756
  fontFamily: tokens.typography.fonts.main.family,
1330
1757
  fontSize,
1331
- color: disabled ? tokens.textSecondary[gamut] : tokens.textPrimary[gamut]
1758
+ color: disabled ? at.fontTertiary : at.divider
1332
1759
  },
1333
1760
  iconWrapper: {
1334
1761
  position: "absolute",
@@ -1341,7 +1768,7 @@ function getSelectStyles(tokens, gamut, disabled, size, isOpen) {
1341
1768
  fontFamily: tokens.typography.fonts.main.family,
1342
1769
  fontSize: tokens.typography.fontSizes["01"],
1343
1770
  fontWeight: tokens.typography.fonts.main.weights.medium,
1344
- color: tokens.textSecondary[gamut],
1771
+ color: at.fontTertiary,
1345
1772
  textTransform: "uppercase",
1346
1773
  letterSpacing: 0.5,
1347
1774
  paddingVertical: tokens.spacing["04"],
@@ -1460,11 +1887,14 @@ function SelectOptionRow({
1460
1887
  size
1461
1888
  }) {
1462
1889
  const tokens = useTokens(1);
1890
+ const frameCtx = useFrameContext();
1891
+ const at = tokens.colors[frameCtx?.theme ?? "primary"][frameCtx?.appearance ?? "main"];
1892
+ const emphasisAt = tokens.colors[frameCtx?.theme ?? "primary"].emphasis;
1463
1893
  const paddingVertical = size === "sm" ? tokens.spacing["04"] : tokens.spacing["08"];
1464
1894
  const paddingHorizontal = size === "sm" ? tokens.spacing["08"] : tokens.spacing["12"];
1465
1895
  const fontSize = size === "sm" ? tokens.typography.fontSizes["04"] : tokens.typography.fontSizes["05"];
1466
1896
  if (renderOption) {
1467
- return /* @__PURE__ */ React13.createElement(
1897
+ return /* @__PURE__ */ React16.createElement(
1468
1898
  Pressable,
1469
1899
  {
1470
1900
  onPress: option.disabled ? void 0 : onSelect,
@@ -1475,7 +1905,7 @@ function SelectOptionRow({
1475
1905
  renderOption(option, { isSelected, isFocused })
1476
1906
  );
1477
1907
  }
1478
- return /* @__PURE__ */ React13.createElement(
1908
+ return /* @__PURE__ */ React16.createElement(
1479
1909
  Pressable,
1480
1910
  {
1481
1911
  onPress: option.disabled ? void 0 : onSelect,
@@ -1491,10 +1921,10 @@ function SelectOptionRow({
1491
1921
  paddingHorizontal
1492
1922
  },
1493
1923
  isSelected && {
1494
- backgroundColor: tokens.backgroundSunken[tokens.gamut]
1924
+ backgroundColor: at.fontSecondary
1495
1925
  },
1496
1926
  isFocused && !isSelected && {
1497
- backgroundColor: `${tokens.border[tokens.gamut]}20`
1927
+ backgroundColor: `${at.fontSecondary}20`
1498
1928
  },
1499
1929
  option.disabled && {
1500
1930
  opacity: 0.5
@@ -1504,7 +1934,7 @@ function SelectOptionRow({
1504
1934
  }
1505
1935
  ]
1506
1936
  },
1507
- /* @__PURE__ */ React13.createElement(
1937
+ /* @__PURE__ */ React16.createElement(
1508
1938
  Text,
1509
1939
  {
1510
1940
  style: [
@@ -1512,26 +1942,26 @@ function SelectOptionRow({
1512
1942
  flex: 1,
1513
1943
  fontFamily: tokens.typography.fonts.main.family,
1514
1944
  fontSize,
1515
- color: tokens.textPrimary[tokens.gamut]
1945
+ color: at.divider
1516
1946
  },
1517
1947
  isSelected && {
1518
1948
  fontWeight: tokens.typography.fonts.main.weights.medium,
1519
- color: tokens.accent.fill[tokens.gamut]
1949
+ color: emphasisAt.divider
1520
1950
  },
1521
1951
  option.disabled && {
1522
- color: tokens.textSecondary[tokens.gamut]
1952
+ color: at.fontTertiary
1523
1953
  }
1524
1954
  ],
1525
1955
  numberOfLines: 1
1526
1956
  },
1527
1957
  option.label
1528
1958
  ),
1529
- isSelected && /* @__PURE__ */ React13.createElement(View, { style: { marginLeft: tokens.spacing["08"] } }, /* @__PURE__ */ React13.createElement(
1959
+ isSelected && /* @__PURE__ */ React16.createElement(View, { style: { marginLeft: tokens.spacing["08"] } }, /* @__PURE__ */ React16.createElement(
1530
1960
  Icon,
1531
1961
  {
1532
1962
  name: "check",
1533
1963
  size: fontSize,
1534
- color: tokens.accent.fill[tokens.gamut]
1964
+ color: emphasisAt.divider
1535
1965
  }
1536
1966
  ))
1537
1967
  );
@@ -1562,6 +1992,7 @@ function Select({
1562
1992
  style
1563
1993
  }) {
1564
1994
  const tokens = useTokens(1);
1995
+ const frameCtx = useFrameContext();
1565
1996
  const { isOpen, open, close, toggle } = usePopover();
1566
1997
  const flatOptions = useMemo(() => flattenOptions(options), [options]);
1567
1998
  const { focusedIndex, handleKeyDown } = useSelect({
@@ -1575,15 +2006,18 @@ function Select({
1575
2006
  onClose: close,
1576
2007
  onOpen: open
1577
2008
  });
2009
+ const inheritedTheme = frameCtx?.theme;
2010
+ const inheritedAppearance = frameCtx?.appearance;
1578
2011
  const styles = useMemo(
1579
- () => getSelectStyles(tokens, tokens.gamut, disabled, size, isOpen),
1580
- [tokens, disabled, size, isOpen]
2012
+ () => getSelectStyles(tokens, disabled, size, isOpen, inheritedTheme, inheritedAppearance),
2013
+ [tokens, disabled, size, isOpen, inheritedTheme, inheritedAppearance]
1581
2014
  );
1582
2015
  const selectedOption = flatOptions.find((o) => o.value === value);
1583
2016
  const displayLabel = selectedOption?.label ?? placeholder ?? value;
1584
- const iconColor = disabled ? tokens.textSecondary[tokens.gamut] : tokens.textPrimary[tokens.gamut];
2017
+ const at = tokens.colors[inheritedTheme ?? "primary"][inheritedAppearance ?? "main"];
2018
+ const iconColor = disabled ? at.fontTertiary : at.divider;
1585
2019
  const triggerWebProps = { onKeyDown: handleKeyDown };
1586
- const trigger = /* @__PURE__ */ React13.createElement(
2020
+ const trigger = /* @__PURE__ */ React16.createElement(
1587
2021
  Pressable,
1588
2022
  {
1589
2023
  onPress: disabled ? void 0 : toggle,
@@ -1593,8 +2027,8 @@ function Select({
1593
2027
  ...triggerWebProps,
1594
2028
  style: styles.trigger
1595
2029
  },
1596
- renderValue ? renderValue(selectedOption) : /* @__PURE__ */ React13.createElement(Text, { style: styles.triggerText, numberOfLines: 1 }, displayLabel),
1597
- /* @__PURE__ */ React13.createElement(View, { style: styles.iconWrapper, pointerEvents: "none" }, /* @__PURE__ */ React13.createElement(
2030
+ renderValue ? renderValue(selectedOption) : /* @__PURE__ */ React16.createElement(Text, { style: styles.triggerText, numberOfLines: 1 }, displayLabel),
2031
+ /* @__PURE__ */ React16.createElement(View, { style: styles.iconWrapper, pointerEvents: "none" }, /* @__PURE__ */ React16.createElement(
1598
2032
  Icon,
1599
2033
  {
1600
2034
  name: isOpen ? "expand_less" : "expand_more",
@@ -1603,14 +2037,14 @@ function Select({
1603
2037
  }
1604
2038
  ))
1605
2039
  );
1606
- return /* @__PURE__ */ React13.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : style ? [style] : []] }, label && /* @__PURE__ */ React13.createElement(Text, { style: styles.label }, label), /* @__PURE__ */ React13.createElement(
2040
+ return /* @__PURE__ */ React16.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : style ? [style] : []] }, label && /* @__PURE__ */ React16.createElement(Text, { style: styles.label }, label), /* @__PURE__ */ React16.createElement(
1607
2041
  Popover,
1608
2042
  {
1609
2043
  isOpen: isOpen && !disabled,
1610
2044
  onClose: close,
1611
2045
  trigger
1612
2046
  },
1613
- /* @__PURE__ */ React13.createElement(
2047
+ /* @__PURE__ */ React16.createElement(
1614
2048
  ScrollView,
1615
2049
  {
1616
2050
  bounces: false,
@@ -1619,7 +2053,7 @@ function Select({
1619
2053
  },
1620
2054
  options.map((item) => {
1621
2055
  if (isOptionGroup(item)) {
1622
- return /* @__PURE__ */ React13.createElement(View, { key: item.label }, /* @__PURE__ */ React13.createElement(Text, { style: styles.groupLabel }, item.label), item.options.map((opt) => /* @__PURE__ */ React13.createElement(
2056
+ return /* @__PURE__ */ React16.createElement(View, { key: item.label }, /* @__PURE__ */ React16.createElement(Text, { style: styles.groupLabel }, item.label), item.options.map((opt) => /* @__PURE__ */ React16.createElement(
1623
2057
  SelectOptionRow,
1624
2058
  {
1625
2059
  key: opt.value,
@@ -1635,7 +2069,7 @@ function Select({
1635
2069
  }
1636
2070
  )));
1637
2071
  }
1638
- return /* @__PURE__ */ React13.createElement(
2072
+ return /* @__PURE__ */ React16.createElement(
1639
2073
  SelectOptionRow,
1640
2074
  {
1641
2075
  key: item.value,
@@ -1658,7 +2092,9 @@ var TRACK_WIDTH = 40;
1658
2092
  var TRACK_HEIGHT = 22;
1659
2093
  var THUMB_SIZE = 18;
1660
2094
  var THUMB_OFFSET = 2;
1661
- function getToggleStyles(tokens, gamut, value, disabled) {
2095
+ function getToggleStyles(tokens, value, disabled, theme = "primary", appearance = "main") {
2096
+ const at = tokens.colors[theme][appearance];
2097
+ const emphasisAt = tokens.colors[theme].emphasis;
1662
2098
  return StyleSheet.create({
1663
2099
  container: {
1664
2100
  flexDirection: "row",
@@ -1670,13 +2106,13 @@ function getToggleStyles(tokens, gamut, value, disabled) {
1670
2106
  fontFamily: tokens.typography.fonts.main.family,
1671
2107
  fontSize: tokens.typography.fontSizes["04"],
1672
2108
  fontWeight: tokens.typography.fonts.main.weights.medium,
1673
- color: tokens.textSecondary[gamut]
2109
+ color: at.fontTertiary
1674
2110
  },
1675
2111
  track: {
1676
2112
  width: TRACK_WIDTH,
1677
2113
  height: TRACK_HEIGHT,
1678
2114
  borderRadius: TRACK_HEIGHT / 2,
1679
- backgroundColor: value ? tokens.accent.fill[gamut] : tokens.border[gamut],
2115
+ backgroundColor: value ? emphasisAt.divider : at.fontSecondary,
1680
2116
  justifyContent: "center",
1681
2117
  paddingHorizontal: THUMB_OFFSET
1682
2118
  },
@@ -1684,7 +2120,7 @@ function getToggleStyles(tokens, gamut, value, disabled) {
1684
2120
  width: THUMB_SIZE,
1685
2121
  height: THUMB_SIZE,
1686
2122
  borderRadius: THUMB_SIZE / 2,
1687
- backgroundColor: tokens.background[gamut],
2123
+ backgroundColor: at.background,
1688
2124
  alignSelf: value ? "flex-end" : "flex-start"
1689
2125
  }
1690
2126
  });
@@ -1699,16 +2135,17 @@ function Toggle({
1699
2135
  style
1700
2136
  }) {
1701
2137
  const tokens = useTokens(1);
1702
- const styles = React13.useMemo(
1703
- () => getToggleStyles(tokens, tokens.gamut, value, disabled),
1704
- [tokens, value, disabled]
2138
+ const frameCtx = useFrameContext();
2139
+ const styles = React16.useMemo(
2140
+ () => getToggleStyles(tokens, value, disabled, frameCtx?.theme, frameCtx?.appearance),
2141
+ [tokens, value, disabled, frameCtx?.theme, frameCtx?.appearance]
1705
2142
  );
1706
- const handlePress = React13.useCallback(() => {
2143
+ const handlePress = React16.useCallback(() => {
1707
2144
  if (!disabled) {
1708
2145
  onValueChange(!value);
1709
2146
  }
1710
2147
  }, [disabled, value, onValueChange]);
1711
- return /* @__PURE__ */ React13.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : [style]] }, label && /* @__PURE__ */ React13.createElement(Text, { style: styles.label }, label), /* @__PURE__ */ React13.createElement(
2148
+ return /* @__PURE__ */ React16.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : [style]] }, label && /* @__PURE__ */ React16.createElement(Text, { style: styles.label }, label), /* @__PURE__ */ React16.createElement(
1712
2149
  Pressable,
1713
2150
  {
1714
2151
  onPress: handlePress,
@@ -1716,12 +2153,12 @@ function Toggle({
1716
2153
  accessibilityRole: "switch",
1717
2154
  accessibilityState: { checked: value, disabled }
1718
2155
  },
1719
- /* @__PURE__ */ React13.createElement(View, { style: styles.track }, /* @__PURE__ */ React13.createElement(View, { style: styles.thumb }))
2156
+ /* @__PURE__ */ React16.createElement(View, { style: styles.track }, /* @__PURE__ */ React16.createElement(View, { style: styles.thumb }))
1720
2157
  ));
1721
2158
  }
1722
2159
  var TRACK_HEIGHT2 = 6;
1723
2160
  var THUMB_SIZE2 = 16;
1724
- function getSliderStyles(tokens, gamut, disabled) {
2161
+ function getSliderStyles(tokens, disabled) {
1725
2162
  return StyleSheet.create({
1726
2163
  container: {
1727
2164
  gap: tokens.spacing["04"],
@@ -1736,23 +2173,23 @@ function getSliderStyles(tokens, gamut, disabled) {
1736
2173
  fontFamily: tokens.typography.fonts.main.family,
1737
2174
  fontSize: tokens.typography.fontSizes["04"],
1738
2175
  fontWeight: tokens.typography.fonts.main.weights.medium,
1739
- color: tokens.textSecondary[gamut]
2176
+ color: tokens.colors.primary.main.fontTertiary
1740
2177
  },
1741
2178
  value: {
1742
2179
  fontFamily: tokens.typography.fonts.main.family,
1743
2180
  fontSize: tokens.typography.fontSizes["04"],
1744
2181
  fontWeight: tokens.typography.fonts.main.weights.medium,
1745
- color: tokens.textPrimary[gamut]
2182
+ color: tokens.colors.primary.main.divider
1746
2183
  },
1747
2184
  valueInput: {
1748
2185
  width: 48,
1749
2186
  paddingVertical: 0,
1750
2187
  paddingHorizontal: 4,
1751
2188
  borderWidth: 1,
1752
- borderColor: tokens.border[gamut],
2189
+ borderColor: tokens.colors.primary.main.fontSecondary,
1753
2190
  borderRadius: 4,
1754
2191
  backgroundColor: "transparent",
1755
- color: tokens.textPrimary[gamut],
2192
+ color: tokens.colors.primary.main.divider,
1756
2193
  fontFamily: tokens.typography.fonts.main.family,
1757
2194
  fontSize: tokens.typography.fontSizes["04"],
1758
2195
  fontWeight: tokens.typography.fonts.main.weights.medium,
@@ -1769,21 +2206,21 @@ function getSliderStyles(tokens, gamut, disabled) {
1769
2206
  right: 0,
1770
2207
  height: TRACK_HEIGHT2,
1771
2208
  borderRadius: TRACK_HEIGHT2 / 2,
1772
- backgroundColor: tokens.border[gamut]
2209
+ backgroundColor: tokens.colors.primary.main.fontSecondary
1773
2210
  },
1774
2211
  trackFill: {
1775
2212
  position: "absolute",
1776
2213
  left: 0,
1777
2214
  height: TRACK_HEIGHT2,
1778
2215
  borderRadius: TRACK_HEIGHT2 / 2,
1779
- backgroundColor: tokens.accent.fill[gamut]
2216
+ backgroundColor: tokens.colors.primary.emphasis.divider
1780
2217
  },
1781
2218
  thumb: {
1782
2219
  position: "absolute",
1783
2220
  width: THUMB_SIZE2,
1784
2221
  height: THUMB_SIZE2,
1785
2222
  borderRadius: THUMB_SIZE2 / 2,
1786
- backgroundColor: tokens.accent.fill[gamut]
2223
+ backgroundColor: tokens.colors.primary.emphasis.divider
1787
2224
  }
1788
2225
  });
1789
2226
  }
@@ -1802,42 +2239,42 @@ function Slider({
1802
2239
  style
1803
2240
  }) {
1804
2241
  const tokens = useTokens(1);
1805
- const styles = React13.useMemo(
1806
- () => getSliderStyles(tokens, tokens.gamut, disabled),
2242
+ const styles = React16.useMemo(
2243
+ () => getSliderStyles(tokens, disabled),
1807
2244
  [tokens, disabled]
1808
2245
  );
1809
- const trackRef = React13.useRef(null);
1810
- const trackWidth = React13.useRef(0);
1811
- const trackPageX = React13.useRef(0);
1812
- const [layoutWidth, setLayoutWidth] = React13.useState(0);
1813
- const onValueChangeRef = React13.useRef(onValueChange);
1814
- const minRef = React13.useRef(min);
1815
- const maxRef = React13.useRef(max);
1816
- const stepRef = React13.useRef(step);
1817
- const disabledRef = React13.useRef(disabled);
1818
- React13.useEffect(() => {
2246
+ const trackRef = React16.useRef(null);
2247
+ const trackWidth = React16.useRef(0);
2248
+ const trackPageX = React16.useRef(0);
2249
+ const [layoutWidth, setLayoutWidth] = React16.useState(0);
2250
+ const onValueChangeRef = React16.useRef(onValueChange);
2251
+ const minRef = React16.useRef(min);
2252
+ const maxRef = React16.useRef(max);
2253
+ const stepRef = React16.useRef(step);
2254
+ const disabledRef = React16.useRef(disabled);
2255
+ React16.useEffect(() => {
1819
2256
  onValueChangeRef.current = onValueChange;
1820
2257
  }, [onValueChange]);
1821
- React13.useEffect(() => {
2258
+ React16.useEffect(() => {
1822
2259
  minRef.current = min;
1823
2260
  }, [min]);
1824
- React13.useEffect(() => {
2261
+ React16.useEffect(() => {
1825
2262
  maxRef.current = max;
1826
2263
  }, [max]);
1827
- React13.useEffect(() => {
2264
+ React16.useEffect(() => {
1828
2265
  stepRef.current = step;
1829
2266
  }, [step]);
1830
- React13.useEffect(() => {
2267
+ React16.useEffect(() => {
1831
2268
  disabledRef.current = disabled;
1832
2269
  }, [disabled]);
1833
- const computeValue = React13.useCallback((pageX) => {
2270
+ const computeValue = React16.useCallback((pageX) => {
1834
2271
  const localX = pageX - trackPageX.current;
1835
2272
  const ratio2 = Math.min(1, Math.max(0, localX / trackWidth.current));
1836
2273
  const raw = minRef.current + ratio2 * (maxRef.current - minRef.current);
1837
2274
  const stepped = Math.round(raw / stepRef.current) * stepRef.current;
1838
2275
  return Math.min(maxRef.current, Math.max(minRef.current, stepped));
1839
2276
  }, []);
1840
- const panResponder = React13.useRef(
2277
+ const panResponder = React16.useRef(
1841
2278
  PanResponder.create({
1842
2279
  onStartShouldSetPanResponder: () => !disabledRef.current,
1843
2280
  onMoveShouldSetPanResponder: () => !disabledRef.current,
@@ -1865,7 +2302,7 @@ function Slider({
1865
2302
  fillLeft = 0;
1866
2303
  fillWidth = thumbLeft + THUMB_SIZE2 / 2;
1867
2304
  }
1868
- const handleValueTextSubmit = React13.useCallback(
2305
+ const handleValueTextSubmit = React16.useCallback(
1869
2306
  (text) => {
1870
2307
  const raw = Number(text);
1871
2308
  if (!Number.isNaN(raw)) {
@@ -1874,12 +2311,12 @@ function Slider({
1874
2311
  },
1875
2312
  [onValueChange, min, max]
1876
2313
  );
1877
- const [editText, setEditText] = React13.useState(String(value));
1878
- React13.useEffect(() => {
2314
+ const [editText, setEditText] = React16.useState(String(value));
2315
+ React16.useEffect(() => {
1879
2316
  setEditText(String(value));
1880
2317
  }, [value]);
1881
2318
  const showLabel = label || showValue || editableValue;
1882
- return /* @__PURE__ */ React13.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : [style]] }, showLabel && /* @__PURE__ */ React13.createElement(View, { style: styles.labelRow }, label && /* @__PURE__ */ React13.createElement(Text, { style: styles.label }, label), editableValue ? /* @__PURE__ */ React13.createElement(
2319
+ return /* @__PURE__ */ React16.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : [style]] }, showLabel && /* @__PURE__ */ React16.createElement(View, { style: styles.labelRow }, label && /* @__PURE__ */ React16.createElement(Text, { style: styles.label }, label), editableValue ? /* @__PURE__ */ React16.createElement(
1883
2320
  TextInput$1,
1884
2321
  {
1885
2322
  style: styles.valueInput,
@@ -1891,7 +2328,7 @@ function Slider({
1891
2328
  selectTextOnFocus: true,
1892
2329
  editable: !disabled
1893
2330
  }
1894
- ) : showValue && /* @__PURE__ */ React13.createElement(Text, { style: styles.value }, value)), /* @__PURE__ */ React13.createElement(
2331
+ ) : showValue && /* @__PURE__ */ React16.createElement(Text, { style: styles.value }, value)), /* @__PURE__ */ React16.createElement(
1895
2332
  View,
1896
2333
  {
1897
2334
  ref: trackRef,
@@ -1906,9 +2343,9 @@ function Slider({
1906
2343
  },
1907
2344
  ...panResponder.panHandlers
1908
2345
  },
1909
- /* @__PURE__ */ React13.createElement(View, { style: styles.trackRail }),
1910
- /* @__PURE__ */ React13.createElement(View, { style: [styles.trackFill, { left: fillLeft, width: fillWidth }] }),
1911
- /* @__PURE__ */ React13.createElement(View, { style: [styles.thumb, { left: thumbLeft }] })
2346
+ /* @__PURE__ */ React16.createElement(View, { style: styles.trackRail }),
2347
+ /* @__PURE__ */ React16.createElement(View, { style: [styles.trackFill, { left: fillLeft, width: fillWidth }] }),
2348
+ /* @__PURE__ */ React16.createElement(View, { style: [styles.thumb, { left: thumbLeft }] })
1912
2349
  ));
1913
2350
  }
1914
2351
  var TRACK_HEIGHT3 = 22;
@@ -1926,7 +2363,7 @@ function buildHueSegments(min, max) {
1926
2363
  return hueToHex(hue);
1927
2364
  });
1928
2365
  }
1929
- function getHueSliderStyles(tokens, gamut, disabled) {
2366
+ function getHueSliderStyles(tokens, disabled) {
1930
2367
  return StyleSheet.create({
1931
2368
  container: {
1932
2369
  gap: tokens.spacing["04"],
@@ -1941,23 +2378,23 @@ function getHueSliderStyles(tokens, gamut, disabled) {
1941
2378
  fontFamily: tokens.typography.fonts.main.family,
1942
2379
  fontSize: tokens.typography.fontSizes["04"],
1943
2380
  fontWeight: tokens.typography.fonts.main.weights.medium,
1944
- color: tokens.textSecondary[gamut]
2381
+ color: tokens.colors.primary.main.fontTertiary
1945
2382
  },
1946
2383
  value: {
1947
2384
  fontFamily: tokens.typography.fonts.main.family,
1948
2385
  fontSize: tokens.typography.fontSizes["04"],
1949
2386
  fontWeight: tokens.typography.fonts.main.weights.medium,
1950
- color: tokens.textPrimary[gamut]
2387
+ color: tokens.colors.primary.main.divider
1951
2388
  },
1952
2389
  valueInput: {
1953
2390
  width: 48,
1954
2391
  paddingVertical: 0,
1955
2392
  paddingHorizontal: 4,
1956
2393
  borderWidth: 1,
1957
- borderColor: tokens.border[gamut],
2394
+ borderColor: tokens.colors.primary.main.fontSecondary,
1958
2395
  borderRadius: 4,
1959
2396
  backgroundColor: "transparent",
1960
- color: tokens.textPrimary[gamut],
2397
+ color: tokens.colors.primary.main.divider,
1961
2398
  fontFamily: tokens.typography.fonts.main.family,
1962
2399
  fontSize: tokens.typography.fontSizes["04"],
1963
2400
  fontWeight: tokens.typography.fonts.main.weights.medium,
@@ -1987,7 +2424,7 @@ function getHueSliderStyles(tokens, gamut, disabled) {
1987
2424
  borderRadius: THUMB_SIZE3 / 2,
1988
2425
  backgroundColor: "#ffffff",
1989
2426
  borderWidth: 2,
1990
- borderColor: tokens.border[gamut]
2427
+ borderColor: tokens.colors.primary.main.fontSecondary
1991
2428
  }
1992
2429
  });
1993
2430
  }
@@ -2005,42 +2442,42 @@ function HueSlider({
2005
2442
  style
2006
2443
  }) {
2007
2444
  const tokens = useTokens(1);
2008
- const styles = React13.useMemo(
2009
- () => getHueSliderStyles(tokens, tokens.gamut, disabled),
2445
+ const styles = React16.useMemo(
2446
+ () => getHueSliderStyles(tokens, disabled),
2010
2447
  [tokens, disabled]
2011
2448
  );
2012
- const segments = React13.useMemo(
2449
+ const segments = React16.useMemo(
2013
2450
  () => buildHueSegments(min, max),
2014
2451
  [min, max]
2015
2452
  );
2016
- const trackRef = React13.useRef(null);
2017
- const trackWidth = React13.useRef(0);
2018
- const trackPageX = React13.useRef(0);
2019
- const [layoutWidth, setLayoutWidth] = React13.useState(0);
2020
- const onValueChangeRef = React13.useRef(onValueChange);
2021
- const minRef = React13.useRef(min);
2022
- const maxRef = React13.useRef(max);
2023
- const disabledRef = React13.useRef(disabled);
2024
- React13.useEffect(() => {
2453
+ const trackRef = React16.useRef(null);
2454
+ const trackWidth = React16.useRef(0);
2455
+ const trackPageX = React16.useRef(0);
2456
+ const [layoutWidth, setLayoutWidth] = React16.useState(0);
2457
+ const onValueChangeRef = React16.useRef(onValueChange);
2458
+ const minRef = React16.useRef(min);
2459
+ const maxRef = React16.useRef(max);
2460
+ const disabledRef = React16.useRef(disabled);
2461
+ React16.useEffect(() => {
2025
2462
  onValueChangeRef.current = onValueChange;
2026
2463
  }, [onValueChange]);
2027
- React13.useEffect(() => {
2464
+ React16.useEffect(() => {
2028
2465
  minRef.current = min;
2029
2466
  }, [min]);
2030
- React13.useEffect(() => {
2467
+ React16.useEffect(() => {
2031
2468
  maxRef.current = max;
2032
2469
  }, [max]);
2033
- React13.useEffect(() => {
2470
+ React16.useEffect(() => {
2034
2471
  disabledRef.current = disabled;
2035
2472
  }, [disabled]);
2036
- const computeHue = React13.useCallback((pageX) => {
2473
+ const computeHue = React16.useCallback((pageX) => {
2037
2474
  const localX = pageX - trackPageX.current;
2038
2475
  const ratio2 = Math.min(1, Math.max(0, localX / trackWidth.current));
2039
2476
  const raw = minRef.current + ratio2 * (maxRef.current - minRef.current);
2040
2477
  const stepped = Math.round(raw);
2041
2478
  return (stepped % 360 + 360) % 360;
2042
2479
  }, []);
2043
- const panResponder = React13.useRef(
2480
+ const panResponder = React16.useRef(
2044
2481
  PanResponder.create({
2045
2482
  onStartShouldSetPanResponder: () => !disabledRef.current,
2046
2483
  onMoveShouldSetPanResponder: () => !disabledRef.current,
@@ -2056,7 +2493,7 @@ function HueSlider({
2056
2493
  const ratio = max > min ? (sliderValue - min) / (max - min) : 0;
2057
2494
  const usableWidth = Math.max(0, layoutWidth - THUMB_SIZE3);
2058
2495
  const thumbLeft = ratio * usableWidth;
2059
- const handleValueTextSubmit = React13.useCallback(
2496
+ const handleValueTextSubmit = React16.useCallback(
2060
2497
  (text) => {
2061
2498
  const raw = Number(text);
2062
2499
  if (!Number.isNaN(raw)) {
@@ -2065,12 +2502,12 @@ function HueSlider({
2065
2502
  },
2066
2503
  [onValueChange]
2067
2504
  );
2068
- const [editText, setEditText] = React13.useState(String(value));
2069
- React13.useEffect(() => {
2505
+ const [editText, setEditText] = React16.useState(String(value));
2506
+ React16.useEffect(() => {
2070
2507
  setEditText(String(value));
2071
2508
  }, [value]);
2072
2509
  const showLabel = label || showValue || editableValue;
2073
- return /* @__PURE__ */ React13.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : [style]] }, showLabel && /* @__PURE__ */ React13.createElement(View, { style: styles.labelRow }, label && /* @__PURE__ */ React13.createElement(Text, { style: styles.label }, label), editableValue ? /* @__PURE__ */ React13.createElement(
2510
+ return /* @__PURE__ */ React16.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : [style]] }, showLabel && /* @__PURE__ */ React16.createElement(View, { style: styles.labelRow }, label && /* @__PURE__ */ React16.createElement(Text, { style: styles.label }, label), editableValue ? /* @__PURE__ */ React16.createElement(
2074
2511
  TextInput$1,
2075
2512
  {
2076
2513
  style: styles.valueInput,
@@ -2082,7 +2519,7 @@ function HueSlider({
2082
2519
  selectTextOnFocus: true,
2083
2520
  editable: !disabled
2084
2521
  }
2085
- ) : showValue && /* @__PURE__ */ React13.createElement(Text, { style: styles.value }, value, "\xB0")), /* @__PURE__ */ React13.createElement(
2522
+ ) : showValue && /* @__PURE__ */ React16.createElement(Text, { style: styles.value }, value, "\xB0")), /* @__PURE__ */ React16.createElement(
2086
2523
  View,
2087
2524
  {
2088
2525
  ref: trackRef,
@@ -2097,8 +2534,8 @@ function HueSlider({
2097
2534
  },
2098
2535
  ...panResponder.panHandlers
2099
2536
  },
2100
- /* @__PURE__ */ React13.createElement(View, { style: styles.gradientTrack }, segments.map((color, i) => /* @__PURE__ */ React13.createElement(View, { key: i, style: [styles.segment, { backgroundColor: color }] }))),
2101
- /* @__PURE__ */ React13.createElement(View, { style: [styles.thumb, { left: thumbLeft }] })
2537
+ /* @__PURE__ */ React16.createElement(View, { style: styles.gradientTrack }, segments.map((color, i) => /* @__PURE__ */ React16.createElement(View, { key: i, style: [styles.segment, { backgroundColor: color }] }))),
2538
+ /* @__PURE__ */ React16.createElement(View, { style: [styles.thumb, { left: thumbLeft }] })
2102
2539
  ));
2103
2540
  }
2104
2541
 
@@ -2159,7 +2596,7 @@ function oklchToP3Css(color) {
2159
2596
  }
2160
2597
  var TRACK_HEIGHT4 = 22;
2161
2598
  var THUMB_SIZE4 = 18;
2162
- function getColorScaleSliderStyles(tokens, gamut, disabled) {
2599
+ function getColorScaleSliderStyles(tokens, disabled) {
2163
2600
  return StyleSheet.create({
2164
2601
  container: {
2165
2602
  gap: tokens.spacing["04"],
@@ -2174,7 +2611,7 @@ function getColorScaleSliderStyles(tokens, gamut, disabled) {
2174
2611
  fontFamily: tokens.typography.fonts.main.family,
2175
2612
  fontSize: tokens.typography.fontSizes["04"],
2176
2613
  fontWeight: tokens.typography.fonts.main.weights.medium,
2177
- color: tokens.textSecondary[gamut]
2614
+ color: tokens.colors.primary.main.fontTertiary
2178
2615
  },
2179
2616
  trackContainer: {
2180
2617
  height: TRACK_HEIGHT4 + THUMB_SIZE4,
@@ -2200,13 +2637,13 @@ function getColorScaleSliderStyles(tokens, gamut, disabled) {
2200
2637
  borderRadius: THUMB_SIZE4 / 2,
2201
2638
  backgroundColor: "#ffffff",
2202
2639
  borderWidth: 2,
2203
- borderColor: tokens.border[gamut]
2640
+ borderColor: tokens.colors.primary.main.fontSecondary
2204
2641
  },
2205
2642
  warning: {
2206
2643
  fontFamily: tokens.typography.fonts.main.family,
2207
2644
  fontSize: tokens.typography.fontSizes["01"],
2208
2645
  fontWeight: tokens.typography.fonts.main.weights.medium,
2209
- color: tokens.error.fill[gamut]
2646
+ color: tokens.colors.error.emphasis.divider
2210
2647
  }
2211
2648
  });
2212
2649
  }
@@ -2226,37 +2663,38 @@ function ColorScaleSlider({
2226
2663
  style
2227
2664
  }) {
2228
2665
  const tokens = useTokens(1);
2229
- const styles = React13.useMemo(
2230
- () => getColorScaleSliderStyles(tokens, tokens.gamut, disabled),
2666
+ const { gamut } = useNewtoneTheme();
2667
+ const styles = React16.useMemo(
2668
+ () => getColorScaleSliderStyles(tokens, disabled),
2231
2669
  [tokens, disabled]
2232
2670
  );
2233
- const trackRef = React13.useRef(null);
2234
- const trackWidth = React13.useRef(0);
2235
- const trackPageX = React13.useRef(0);
2236
- const isDragging = React13.useRef(false);
2237
- const thumbAnim = React13.useRef(new Animated.Value(0)).current;
2238
- const [layoutWidth, setLayoutWidth] = React13.useState(0);
2239
- const onValueChangeRef = React13.useRef(onValueChange);
2240
- const disabledRef = React13.useRef(disabled);
2241
- const colorsLengthRef = React13.useRef(colors.length);
2242
- const trimEndsRef = React13.useRef(trimEnds);
2243
- const snapRef = React13.useRef(snap);
2244
- React13.useEffect(() => {
2671
+ const trackRef = React16.useRef(null);
2672
+ const trackWidth = React16.useRef(0);
2673
+ const trackPageX = React16.useRef(0);
2674
+ const isDragging = React16.useRef(false);
2675
+ const thumbAnim = React16.useRef(new Animated.Value(0)).current;
2676
+ const [layoutWidth, setLayoutWidth] = React16.useState(0);
2677
+ const onValueChangeRef = React16.useRef(onValueChange);
2678
+ const disabledRef = React16.useRef(disabled);
2679
+ const colorsLengthRef = React16.useRef(colors.length);
2680
+ const trimEndsRef = React16.useRef(trimEnds);
2681
+ const snapRef = React16.useRef(snap);
2682
+ React16.useEffect(() => {
2245
2683
  onValueChangeRef.current = onValueChange;
2246
2684
  }, [onValueChange]);
2247
- React13.useEffect(() => {
2685
+ React16.useEffect(() => {
2248
2686
  disabledRef.current = disabled;
2249
2687
  }, [disabled]);
2250
- React13.useEffect(() => {
2688
+ React16.useEffect(() => {
2251
2689
  colorsLengthRef.current = colors.length;
2252
2690
  }, [colors.length]);
2253
- React13.useEffect(() => {
2691
+ React16.useEffect(() => {
2254
2692
  trimEndsRef.current = trimEnds;
2255
2693
  }, [trimEnds]);
2256
- React13.useEffect(() => {
2694
+ React16.useEffect(() => {
2257
2695
  snapRef.current = snap;
2258
2696
  }, [snap]);
2259
- const computeNv = React13.useCallback((pageX) => {
2697
+ const computeNv = React16.useCallback((pageX) => {
2260
2698
  const localX = pageX - trackPageX.current;
2261
2699
  const ratio2 = Math.min(1, Math.max(0, localX / trackWidth.current));
2262
2700
  const totalSteps2 = colorsLengthRef.current - 1;
@@ -2271,7 +2709,7 @@ function ColorScaleSlider({
2271
2709
  }
2272
2710
  return nv;
2273
2711
  }, []);
2274
- const panResponder = React13.useRef(
2712
+ const panResponder = React16.useRef(
2275
2713
  PanResponder.create({
2276
2714
  onStartShouldSetPanResponder: () => !disabledRef.current,
2277
2715
  onMoveShouldSetPanResponder: () => !disabledRef.current,
@@ -2299,7 +2737,7 @@ function ColorScaleSlider({
2299
2737
  const ratio = range > 0 ? (maxNV - clampedValue) / range : 0.5;
2300
2738
  const usableWidth = Math.max(0, layoutWidth - THUMB_SIZE4);
2301
2739
  const thumbLeft = ratio * usableWidth;
2302
- React13.useEffect(() => {
2740
+ React16.useEffect(() => {
2303
2741
  if (isDragging.current || !animateValue) {
2304
2742
  thumbAnim.setValue(thumbLeft);
2305
2743
  } else {
@@ -2310,7 +2748,7 @@ function ColorScaleSlider({
2310
2748
  }).start();
2311
2749
  }
2312
2750
  }, [thumbLeft, animateValue, thumbAnim]);
2313
- return /* @__PURE__ */ React13.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : [style]] }, label && /* @__PURE__ */ React13.createElement(View, { style: styles.labelRow }, /* @__PURE__ */ React13.createElement(Text, { style: styles.label }, label)), /* @__PURE__ */ React13.createElement(
2751
+ return /* @__PURE__ */ React16.createElement(View, { style: [styles.container, ...Array.isArray(style) ? style : [style]] }, label && /* @__PURE__ */ React16.createElement(View, { style: styles.labelRow }, /* @__PURE__ */ React16.createElement(Text, { style: styles.label }, label)), /* @__PURE__ */ React16.createElement(
2314
2752
  View,
2315
2753
  {
2316
2754
  ref: trackRef,
@@ -2325,17 +2763,18 @@ function ColorScaleSlider({
2325
2763
  },
2326
2764
  ...panResponder.panHandlers
2327
2765
  },
2328
- /* @__PURE__ */ React13.createElement(View, { style: styles.gradientTrack }, visibleColors.map((color, i) => /* @__PURE__ */ React13.createElement(View, { key: i, style: [styles.segment, { backgroundColor: tokens.gamut === "p3" ? oklchToP3Css(color.oklch) : srgbToHex(color.srgb) }] }))),
2329
- /* @__PURE__ */ React13.createElement(Animated.View, { style: [styles.thumb, { left: thumbAnim }] })
2330
- ), warning && /* @__PURE__ */ React13.createElement(Text, { style: styles.warning }, warning));
2766
+ /* @__PURE__ */ React16.createElement(View, { style: styles.gradientTrack }, visibleColors.map((color, i) => /* @__PURE__ */ React16.createElement(View, { key: i, style: [styles.segment, { backgroundColor: gamut === "p3" ? oklchToP3Css(color.oklch) : srgbToHex(color.srgb) }] }))),
2767
+ /* @__PURE__ */ React16.createElement(Animated.View, { style: [styles.thumb, { left: thumbAnim }] })
2768
+ ), warning && /* @__PURE__ */ React16.createElement(Text, { style: styles.warning }, warning));
2331
2769
  }
2332
- function getAppShellStyles(tokens, gamut) {
2770
+ function getAppShellStyles(tokens, theme = "primary", appearance = "main") {
2771
+ const at = tokens.colors[theme][appearance];
2333
2772
  return StyleSheet.create({
2334
2773
  container: {
2335
2774
  flex: 1,
2336
2775
  flexDirection: "row",
2337
2776
  overflow: "hidden",
2338
- backgroundColor: tokens.background[gamut]
2777
+ backgroundColor: at.background
2339
2778
  },
2340
2779
  main: {
2341
2780
  flex: 1,
@@ -2349,17 +2788,22 @@ function getAppShellStyles(tokens, gamut) {
2349
2788
  // src/composites/layout/AppShell/AppShell.tsx
2350
2789
  function AppShell({ sidebar, children }) {
2351
2790
  const tokens = useTokens();
2352
- const styles = React13.useMemo(() => getAppShellStyles(tokens, tokens.gamut), [tokens]);
2353
- return /* @__PURE__ */ React13.createElement(View, { style: styles.container }, sidebar, /* @__PURE__ */ React13.createElement(View, { style: styles.main }, children));
2791
+ const frameCtx = useFrameContext();
2792
+ const styles = React16.useMemo(
2793
+ () => getAppShellStyles(tokens, frameCtx?.theme, frameCtx?.appearance),
2794
+ [tokens, frameCtx?.theme, frameCtx?.appearance]
2795
+ );
2796
+ return /* @__PURE__ */ React16.createElement(View, { style: styles.container }, sidebar, /* @__PURE__ */ React16.createElement(View, { style: styles.main }, children));
2354
2797
  }
2355
- function getSidebarStyles({ tokens, gamut, width, bordered }) {
2356
- const borderColor = tokens.border[gamut];
2798
+ function getSidebarStyles({ tokens, width, bordered, theme = "primary", appearance = "main" }) {
2799
+ const at = tokens.colors[theme][appearance];
2800
+ const borderColor = at.fontSecondary;
2357
2801
  return StyleSheet.create({
2358
2802
  container: {
2359
2803
  width,
2360
2804
  flexShrink: 0,
2361
2805
  flexDirection: "column",
2362
- backgroundColor: tokens.background[gamut],
2806
+ backgroundColor: at.background,
2363
2807
  borderRightWidth: bordered ? 1 : 0,
2364
2808
  borderRightColor: borderColor
2365
2809
  },
@@ -2388,14 +2832,16 @@ function Sidebar({
2388
2832
  bordered = true
2389
2833
  }) {
2390
2834
  const tokens = useTokens();
2391
- const styles = React13.useMemo(
2392
- () => getSidebarStyles({ tokens, gamut: tokens.gamut, width, bordered }),
2393
- [tokens, width, bordered]
2835
+ const frameCtx = useFrameContext();
2836
+ const styles = React16.useMemo(
2837
+ () => getSidebarStyles({ tokens, width, bordered, theme: frameCtx?.theme, appearance: frameCtx?.appearance }),
2838
+ [tokens, width, bordered, frameCtx?.theme, frameCtx?.appearance]
2394
2839
  );
2395
- return /* @__PURE__ */ React13.createElement(View, { style: styles.container }, header && /* @__PURE__ */ React13.createElement(View, { style: styles.header }, header), /* @__PURE__ */ React13.createElement(ScrollView, { style: styles.body }, children), footer && /* @__PURE__ */ React13.createElement(View, { style: styles.footer }, footer));
2840
+ return /* @__PURE__ */ React16.createElement(View, { style: styles.container }, header && /* @__PURE__ */ React16.createElement(View, { style: styles.header }, header), /* @__PURE__ */ React16.createElement(ScrollView, { style: styles.body }, children), footer && /* @__PURE__ */ React16.createElement(View, { style: styles.footer }, footer));
2396
2841
  }
2397
- function getNavbarStyles({ tokens, gamut, height, bordered }) {
2398
- const borderColor = tokens.border[gamut];
2842
+ function getNavbarStyles({ tokens, height, bordered, theme = "primary", appearance = "main" }) {
2843
+ const at = tokens.colors[theme][appearance];
2844
+ const borderColor = at.fontSecondary;
2399
2845
  return StyleSheet.create({
2400
2846
  container: {
2401
2847
  flexDirection: "row",
@@ -2403,7 +2849,7 @@ function getNavbarStyles({ tokens, gamut, height, bordered }) {
2403
2849
  height,
2404
2850
  flexShrink: 0,
2405
2851
  paddingHorizontal: 24,
2406
- backgroundColor: tokens.background[gamut],
2852
+ backgroundColor: at.background,
2407
2853
  borderBottomWidth: bordered ? 1 : 0,
2408
2854
  borderBottomColor: borderColor
2409
2855
  },
@@ -2430,11 +2876,51 @@ function Navbar({
2430
2876
  bordered = true
2431
2877
  }) {
2432
2878
  const tokens = useTokens();
2433
- const styles = React13.useMemo(
2434
- () => getNavbarStyles({ tokens, gamut: tokens.gamut, height, bordered }),
2435
- [tokens, height, bordered]
2879
+ const frameCtx = useFrameContext();
2880
+ const styles = React16.useMemo(
2881
+ () => getNavbarStyles({ tokens, height, bordered, theme: frameCtx?.theme, appearance: frameCtx?.appearance }),
2882
+ [tokens, height, bordered, frameCtx?.theme, frameCtx?.appearance]
2883
+ );
2884
+ return /* @__PURE__ */ React16.createElement(View, { style: styles.container }, children ? children : /* @__PURE__ */ React16.createElement(React16.Fragment, null, /* @__PURE__ */ React16.createElement(View, { style: styles.left }, left), /* @__PURE__ */ React16.createElement(View, { style: styles.right }, right)));
2885
+ }
2886
+ function LogoMonogram({ colorValue = 0, size = 32 }) {
2887
+ const fg = `rgb(${colorValue}, ${colorValue}, ${colorValue})`;
2888
+ return /* @__PURE__ */ React16.createElement(
2889
+ "svg",
2890
+ {
2891
+ width: size,
2892
+ height: size,
2893
+ viewBox: "0 0 168 168",
2894
+ fill: "none",
2895
+ xmlns: "http://www.w3.org/2000/svg"
2896
+ },
2897
+ /* @__PURE__ */ React16.createElement("path", { d: "M39.3574 70H12L20 84H36L30.2681 94.0309C28.8627 96.4903 28.8627 99.5096 30.2681 101.969L36 112L49.7319 87.9691C51.1373 85.5097 51.1373 82.4903 49.7319 80.0309L46.3034 74.0309C44.879 71.5383 42.2283 70 39.3574 70Z", fill: fg }),
2898
+ /* @__PURE__ */ React16.createElement("path", { d: "M84 112H36L41.6966 121.969C43.121 124.462 45.7717 126 48.6426 126H79.3574C82.2283 126 84.879 124.462 86.3034 121.969L93.7319 108.969C95.1373 106.51 95.1373 103.49 93.7319 101.031L84 84L76 98L84 112Z", fill: fg }),
2899
+ /* @__PURE__ */ React16.createElement("path", { d: "M76 70L84 84H64.6426C61.7717 84 59.121 82.4617 57.6966 79.9691L50.268 66.9691C48.8626 64.5097 48.8626 61.4903 50.268 59.0309L65.6966 32.0309C67.121 29.5383 69.7717 28 72.6426 28H84L60 70H76Z", fill: fg }),
2900
+ /* @__PURE__ */ React16.createElement("path", { d: "M95.3574 28H84L132 112L137.732 101.969C139.137 99.5097 139.137 96.4903 137.732 94.0309L102.303 32.0309C100.879 29.5383 98.2283 28 95.3574 28Z", fill: fg }),
2901
+ /* @__PURE__ */ React16.createElement("path", { d: "M104.643 112H132L126.303 121.969C124.879 124.462 122.228 126 119.357 126H108L116 140L108 154L94.268 129.969C92.8626 127.51 92.8626 124.49 94.268 122.031L97.6966 116.031C99.121 113.538 101.772 112 104.643 112Z", fill: fg })
2902
+ );
2903
+ }
2904
+ function LogoWordmark({ fill = "black" }) {
2905
+ return /* @__PURE__ */ React16.createElement(
2906
+ "svg",
2907
+ {
2908
+ height: 32,
2909
+ viewBox: "0 0 504 168",
2910
+ fill: "none",
2911
+ xmlns: "http://www.w3.org/2000/svg"
2912
+ },
2913
+ /* @__PURE__ */ React16.createElement("path", { d: "M8 126H22V42H14.4C12.1598 42 11.0397 42 10.184 42.436C9.43139 42.8195 8.81947 43.4314 8.43597 44.184C8 45.0397 8 46.1598 8 48.4V126Z", fill }),
2914
+ /* @__PURE__ */ React16.createElement("path", { d: "M76 108.5V42H90V119.6C90 121.84 90 122.96 89.564 123.816C89.1805 124.569 88.5686 125.181 87.816 125.564C86.9603 126 85.8402 126 83.6 126H77.4281C74.7227 126 73.37 126 72.1603 125.605C71.0899 125.256 70.1054 124.684 69.271 123.928C68.328 123.074 67.6569 121.9 66.3146 119.551L22 42H30.5719C33.2773 42 34.63 42 35.8397 42.3949C36.9101 42.7442 37.8946 43.3156 38.729 44.0716C39.672 44.926 40.3431 46.1005 41.6854 48.4494L76 108.5Z", fill }),
2915
+ /* @__PURE__ */ React16.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M152.208 68.2077C153.395 69.3951 153.989 69.9888 154.439 70.6738C154.838 71.2814 155.152 71.9406 155.374 72.6332C155.623 73.4139 155.711 74.2489 155.886 75.9189L156.884 85.3951C157.27 89.0678 157.464 90.9042 156.867 92.3245C156.343 93.5721 155.412 94.6057 154.226 95.2577C152.876 96 151.03 96 147.337 96H112V114H154V126H115.302C113.345 126 112.367 126 111.446 125.779C110.63 125.583 109.849 125.26 109.134 124.821C108.326 124.326 107.635 123.635 106.251 122.251L101.749 117.749C100.365 116.365 99.6736 115.674 99.1789 114.866C98.7402 114.151 98.417 113.37 98.221 112.554C98 111.633 98 110.655 98 108.698V75.3019C98 73.3452 98 72.3668 98.221 71.4461C98.417 70.6299 98.7402 69.8495 99.1789 69.1337C99.6736 68.3264 100.365 67.6346 101.749 66.251L106.251 61.749C107.635 60.3654 108.326 59.6736 109.134 59.1789C109.849 58.7402 110.63 58.417 111.446 58.221C112.367 58 113.345 58 115.302 58H136.698C138.655 58 139.633 58 140.554 58.221C141.37 58.417 142.151 58.7402 142.866 59.1789C143.674 59.6736 144.365 60.3654 145.749 61.749L152.208 68.2077ZM112 70V87.5332L144.492 86.4502L141.895 70H112Z", fill }),
2916
+ /* @__PURE__ */ React16.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M492.208 68.2077C493.395 69.3951 493.989 69.9888 494.439 70.6738C494.838 71.2814 495.152 71.9406 495.374 72.6332C495.623 73.4139 495.711 74.2489 495.886 75.9189L496.884 85.3951C497.27 89.0678 497.464 90.9042 496.867 92.3245C496.343 93.5721 495.412 94.6057 494.226 95.2577C492.876 96 491.03 96 487.337 96H452V114H494V126H455.302C453.345 126 452.367 126 451.446 125.779C450.63 125.583 449.849 125.26 449.134 124.821C448.326 124.326 447.635 123.635 446.251 122.251L441.749 117.749C440.365 116.365 439.674 115.674 439.179 114.866C438.74 114.151 438.417 113.37 438.221 112.554C438 111.633 438 110.655 438 108.698V75.3019C438 73.3452 438 72.3668 438.221 71.4461C438.417 70.6299 438.74 69.8495 439.179 69.1337C439.674 68.3264 440.365 67.6346 441.749 66.251L446.251 61.749C447.635 60.3654 448.326 59.6736 449.134 59.1789C449.849 58.7402 450.63 58.417 451.446 58.221C452.367 58 453.345 58 455.302 58H476.698C478.655 58 479.633 58 480.554 58.221C481.37 58.417 482.151 58.7402 482.866 59.1789C483.674 59.6736 484.365 60.3654 485.749 61.749L492.208 68.2077ZM452 70V87.5332L484.492 86.4502L481.895 70H452Z", fill }),
2917
+ /* @__PURE__ */ React16.createElement("path", { d: "M168.794 117.797L160 58H174L184 126H178.291C175.35 126 173.88 126 172.695 125.46C171.651 124.984 170.765 124.219 170.142 123.255C169.435 122.161 169.222 120.706 168.794 117.797Z", fill }),
2918
+ /* @__PURE__ */ React16.createElement("path", { d: "M192.794 66.2033L184 126H187.674C190.626 126 192.102 126 193.29 125.457C194.337 124.979 195.224 124.209 195.846 123.241C196.551 122.141 196.76 120.68 197.177 117.758L204 70L210.823 117.758C211.24 120.68 211.449 122.141 212.154 123.241C212.776 124.209 213.663 124.979 214.71 125.457C215.898 126 217.374 126 220.326 126H224L215.206 66.2033C214.778 63.2936 214.565 61.8387 213.858 60.7448C213.235 59.7808 212.349 59.0155 211.305 58.5398C210.12 58 208.65 58 205.709 58H202.291C199.35 58 197.88 58 196.695 58.5398C195.651 59.0155 194.765 59.7808 194.142 60.7448C193.435 61.8387 193.222 63.2936 192.794 66.2033Z", fill }),
2919
+ /* @__PURE__ */ React16.createElement("path", { d: "M224 126H229.709C232.65 126 234.12 126 235.305 125.46C236.349 124.984 237.235 124.219 237.858 123.255C238.565 122.161 238.778 120.706 239.206 117.797L246.235 70H298V58H251.302C249.345 58 248.367 58 247.446 58.221C246.63 58.417 245.849 58.7402 245.134 59.1789C244.326 59.6736 243.635 60.3654 242.251 61.749L234.927 69.0727C233.815 70.1845 233.26 70.7405 232.829 71.3785C232.447 71.9446 232.139 72.5573 231.913 73.2016C231.658 73.9277 231.543 74.7056 231.315 76.2613L224 126Z", fill }),
2920
+ /* @__PURE__ */ React16.createElement("path", { d: "M264.251 122.251L259.749 117.749C258.365 116.365 257.674 115.674 257.179 114.866C256.74 114.151 256.417 113.37 256.221 112.554C256 111.633 256 110.655 256 108.698V69.2L260 42H270V114H298V126H273.302C271.345 126 270.367 126 269.446 125.779C268.63 125.583 267.849 125.26 267.134 124.821C266.326 124.326 265.635 123.635 264.251 122.251Z", fill }),
2921
+ /* @__PURE__ */ React16.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M358.251 66.251C359.635 67.6346 360.326 68.3264 360.821 69.1337C361.26 69.8495 361.583 70.6299 361.779 71.4461C362 72.3668 362 73.3452 362 75.3019V108.698C362 110.655 362 111.633 361.779 112.554C361.583 113.37 361.26 114.151 360.821 114.866C360.326 115.674 359.635 116.365 358.251 117.749L353.749 122.251C352.365 123.635 351.674 124.326 350.866 124.821C350.151 125.26 349.37 125.583 348.554 125.779C347.633 126 346.655 126 344.698 126H319.302C317.345 126 316.367 126 315.446 125.779C314.63 125.583 313.849 125.26 313.134 124.821C312.326 124.326 311.635 123.635 310.251 122.251L305.749 117.749C304.365 116.365 303.674 115.674 303.179 114.866C302.74 114.151 302.417 113.37 302.221 112.554C302 111.633 302 110.655 302 108.698V75.3019C302 73.3452 302 72.3668 302.221 71.4461C302.417 70.6299 302.74 69.8495 303.179 69.1337C303.674 68.3264 304.365 67.6346 305.749 66.251L310.224 61.7757C311.606 60.3937 312.297 59.7027 313.104 59.2083C313.818 58.77 314.598 58.4468 315.413 58.2506C316.333 58.0292 317.31 58.0284 319.264 58.0267L344.692 58.0046C346.651 58.0029 347.63 58.0021 348.552 58.2228C349.369 58.4185 350.151 58.7417 350.867 59.1807C351.676 59.6757 352.368 60.3684 353.754 61.7536L358.251 66.251ZM316 70V114H348V70H316Z", fill }),
2922
+ /* @__PURE__ */ React16.createElement("path", { d: "M370 64.4V126H384V70H416V126H430V75.3019C430 73.3452 430 72.3668 429.779 71.4461C429.583 70.6299 429.26 69.8495 428.821 69.1337C428.326 68.3264 427.635 67.6346 426.251 66.251L421.749 61.749C420.365 60.3654 419.674 59.6736 418.866 59.1789C418.151 58.7402 417.37 58.417 416.554 58.221C415.633 58 414.655 58 412.698 58H376.4C374.16 58 373.04 58 372.184 58.436C371.431 58.8195 370.819 59.4314 370.436 60.184C370 61.0397 370 62.1598 370 64.4Z", fill })
2436
2923
  );
2437
- return /* @__PURE__ */ React13.createElement(View, { style: styles.container }, children ? children : /* @__PURE__ */ React13.createElement(React13.Fragment, null, /* @__PURE__ */ React13.createElement(View, { style: styles.left }, left), /* @__PURE__ */ React13.createElement(View, { style: styles.right }, right)));
2438
2924
  }
2439
2925
 
2440
2926
  // src/registry/registry.ts
@@ -3382,6 +3868,6 @@ var ICON_CATALOG = [
3382
3868
  }
3383
3869
  ];
3384
3870
 
3385
- export { AppShell, Button, CATEGORIES, COMPONENTS, Card, ColorScaleSlider, Frame, HueSlider, ICON_CATALOG, Icon, Navbar, Popover, Select, Sidebar, Slider, Text3 as Text, TextInput, Toggle, Wrapper, generateComponentCode, getCategory, getComponent, getComponentsByCategory, isOptionGroup, useFocusVisible, usePopover };
3871
+ export { AppShell, Button, CATEGORIES, COMPONENTS, Card, Chip, ColorScaleSlider, ContentCard, Divider, Frame, HueSlider, ICON_CATALOG, Icon, LogoMonogram, LogoWordmark, Navbar, Popover, Select, Sidebar, Slider, Text3 as Text, TextInput, Toggle, Wrapper, generateComponentCode, getCategory, getComponent, getComponentsByCategory, isOptionGroup, useFocusVisible, usePopover };
3386
3872
  //# sourceMappingURL=index.js.map
3387
3873
  //# sourceMappingURL=index.js.map