achery-ui 0.6.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkLJ24EJ3N_cjs = require('../chunk-LJ24EJ3N.cjs');
3
+ var chunkRVXGXYS6_cjs = require('../chunk-RVXGXYS6.cjs');
4
4
 
5
5
  // src/tokens/spacing.ts
6
6
  var spacingScale = [0, 2, 4, 6, 8, 12, 16, 20, 24, 32, 40, 56, 80];
@@ -100,68 +100,88 @@ var zIndex = {
100
100
  };
101
101
 
102
102
  // src/tokens/semantic.ts
103
+ var materialDefaults = {
104
+ // Material system — leather signature defaults; overridden by setMaterial in native context
105
+ materialLeather: chunkRVXGXYS6_cjs.palette.leather,
106
+ materialLeatherFg: chunkRVXGXYS6_cjs.palette.paper,
107
+ materialWood: chunkRVXGXYS6_cjs.palette.wood,
108
+ materialWoodFg: chunkRVXGXYS6_cjs.palette.paper,
109
+ materialCopper: chunkRVXGXYS6_cjs.palette.copper,
110
+ materialCopperFg: chunkRVXGXYS6_cjs.palette.ink,
111
+ gold: chunkRVXGXYS6_cjs.palette.gold,
112
+ goldDeep: chunkRVXGXYS6_cjs.palette.goldDeep,
113
+ goldLight: chunkRVXGXYS6_cjs.palette.goldLight,
114
+ silverLight: chunkRVXGXYS6_cjs.palette.silverLight,
115
+ silverDeep: chunkRVXGXYS6_cjs.palette.silverDeep,
116
+ copperPatina: chunkRVXGXYS6_cjs.palette.copperPatina
117
+ };
103
118
  var lightTokens = {
104
- bg: chunkLJ24EJ3N_cjs.palette.paper,
105
- bg2: chunkLJ24EJ3N_cjs.palette.paperWarm,
106
- bgSunken: chunkLJ24EJ3N_cjs.palette.paperToasted,
119
+ bg: chunkRVXGXYS6_cjs.palette.paper,
120
+ bg2: chunkRVXGXYS6_cjs.palette.paperWarm,
121
+ bgSunken: chunkRVXGXYS6_cjs.palette.paperToasted,
107
122
  surface: "#fdfaf3",
108
- surface2: chunkLJ24EJ3N_cjs.palette.paperWarm,
109
- fg: chunkLJ24EJ3N_cjs.palette.ink,
123
+ surface2: chunkRVXGXYS6_cjs.palette.paperWarm,
124
+ fg: chunkRVXGXYS6_cjs.palette.ink,
110
125
  fg2: "#4a463c",
111
126
  fg3: "#6e6a5e",
112
127
  fgMute: "#8a8576",
113
- border: chunkLJ24EJ3N_cjs.palette.ink,
128
+ border: chunkRVXGXYS6_cjs.palette.ink,
114
129
  border2: "#6e6a5e",
115
130
  borderMute: "#b8ad94",
116
- rule: chunkLJ24EJ3N_cjs.palette.inkDeep,
117
- accent: chunkLJ24EJ3N_cjs.palette.terracotta,
118
- accentFg: chunkLJ24EJ3N_cjs.palette.paper,
119
- accent2: chunkLJ24EJ3N_cjs.palette.moss,
120
- accent3: chunkLJ24EJ3N_cjs.palette.plum,
121
- success: chunkLJ24EJ3N_cjs.palette.success,
122
- warn: chunkLJ24EJ3N_cjs.palette.ochre,
123
- danger: chunkLJ24EJ3N_cjs.palette.rust,
124
- info: chunkLJ24EJ3N_cjs.palette.plumMid,
125
- selectionBg: chunkLJ24EJ3N_cjs.palette.ochre,
126
- selectionFg: chunkLJ24EJ3N_cjs.palette.ink
131
+ rule: chunkRVXGXYS6_cjs.palette.inkDeep,
132
+ accent: chunkRVXGXYS6_cjs.palette.terracotta,
133
+ accentFg: chunkRVXGXYS6_cjs.palette.paper,
134
+ accent2: chunkRVXGXYS6_cjs.palette.moss,
135
+ accent3: chunkRVXGXYS6_cjs.palette.plum,
136
+ success: chunkRVXGXYS6_cjs.palette.success,
137
+ warn: chunkRVXGXYS6_cjs.palette.ochre,
138
+ danger: chunkRVXGXYS6_cjs.palette.rust,
139
+ info: chunkRVXGXYS6_cjs.palette.plumMid,
140
+ selectionBg: chunkRVXGXYS6_cjs.palette.ochre,
141
+ selectionFg: chunkRVXGXYS6_cjs.palette.ink,
142
+ ...materialDefaults
127
143
  };
128
144
  var darkTokens = {
129
- bg: chunkLJ24EJ3N_cjs.palette.inkDeep,
145
+ bg: chunkRVXGXYS6_cjs.palette.inkDeep,
130
146
  bg2: "#1f1d18",
131
147
  bgSunken: "#0c0b08",
132
148
  surface: "#26241e",
133
149
  surface2: "#2d2a23",
134
- fg: chunkLJ24EJ3N_cjs.palette.cream,
150
+ fg: chunkRVXGXYS6_cjs.palette.cream,
135
151
  fg2: "#b8ad94",
136
152
  fg3: "#8a8576",
137
153
  fgMute: "#6e6a5e",
138
- border: chunkLJ24EJ3N_cjs.palette.cream,
154
+ border: chunkRVXGXYS6_cjs.palette.cream,
139
155
  border2: "#8a8576",
140
156
  borderMute: "#4a463c",
141
- rule: chunkLJ24EJ3N_cjs.palette.cream,
142
- accent: chunkLJ24EJ3N_cjs.palette.terracottaLight,
143
- accentFg: chunkLJ24EJ3N_cjs.palette.inkDeep,
144
- accent2: chunkLJ24EJ3N_cjs.palette.mossLight,
145
- accent3: chunkLJ24EJ3N_cjs.palette.plumLight,
157
+ rule: chunkRVXGXYS6_cjs.palette.cream,
158
+ accent: chunkRVXGXYS6_cjs.palette.terracottaLight,
159
+ accentFg: chunkRVXGXYS6_cjs.palette.inkDeep,
160
+ accent2: chunkRVXGXYS6_cjs.palette.mossLight,
161
+ accent3: chunkRVXGXYS6_cjs.palette.plumLight,
146
162
  success: "#7fba4a",
147
- warn: chunkLJ24EJ3N_cjs.palette.ochre,
148
- danger: chunkLJ24EJ3N_cjs.palette.terracotta,
149
- info: chunkLJ24EJ3N_cjs.palette.plumMid,
150
- selectionBg: chunkLJ24EJ3N_cjs.palette.mossLight,
151
- selectionFg: chunkLJ24EJ3N_cjs.palette.inkDeep
163
+ warn: chunkRVXGXYS6_cjs.palette.ochre,
164
+ danger: chunkRVXGXYS6_cjs.palette.terracotta,
165
+ info: chunkRVXGXYS6_cjs.palette.plumMid,
166
+ selectionBg: chunkRVXGXYS6_cjs.palette.mossLight,
167
+ selectionFg: chunkRVXGXYS6_cjs.palette.inkDeep,
168
+ ...materialDefaults,
169
+ // In dark mode, gilt is bumped to gold-light so it stays legible on dark paper
170
+ goldDeep: chunkRVXGXYS6_cjs.palette.goldLight,
171
+ silverDeep: chunkRVXGXYS6_cjs.palette.silverLight
152
172
  };
153
173
 
154
174
  Object.defineProperty(exports, "accentColorNames", {
155
175
  enumerable: true,
156
- get: function () { return chunkLJ24EJ3N_cjs.accentColorNames; }
176
+ get: function () { return chunkRVXGXYS6_cjs.accentColorNames; }
157
177
  });
158
178
  Object.defineProperty(exports, "accentColors", {
159
179
  enumerable: true,
160
- get: function () { return chunkLJ24EJ3N_cjs.accentColors; }
180
+ get: function () { return chunkRVXGXYS6_cjs.accentColors; }
161
181
  });
162
182
  Object.defineProperty(exports, "palette", {
163
183
  enumerable: true,
164
- get: function () { return chunkLJ24EJ3N_cjs.palette; }
184
+ get: function () { return chunkRVXGXYS6_cjs.palette; }
165
185
  });
166
186
  exports.darkTokens = darkTokens;
167
187
  exports.duration = duration;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tokens/spacing.ts","../../src/tokens/typography.ts","../../src/tokens/radius.ts","../../src/tokens/shadows.ts","../../src/tokens/motion.ts","../../src/tokens/semantic.ts"],"names":["palette"],"mappings":"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","file":"index.cjs","sourcesContent":["export const spacingScale = [0, 2, 4, 6, 8, 12, 16, 20, 24, 32, 40, 56, 80] as const\n\nexport const spacing = {\n sp0: 0,\n sp1: 2,\n sp2: 4,\n sp3: 6,\n sp4: 8,\n sp5: 12,\n sp6: 16,\n sp7: 20,\n sp8: 24,\n sp9: 32,\n sp10: 40,\n sp11: 56,\n sp12: 80,\n} as const\n\nexport const px = (n: number): string => `${n}px`\n","export const fontFamilies = {\n display: \"'Roboto Slab', 'Rockwell', 'Courier New', serif\",\n body: \"'Space Grotesk', 'Helvetica Neue', 'Inter', system-ui, sans-serif\",\n mono: \"'JetBrains Mono', 'IBM Plex Mono', ui-monospace, monospace\",\n} as const\n\nexport const fontSizes = {\n xs: '11px',\n sm: '12px',\n md: '14px',\n lg: '16px',\n xl: '20px',\n '2xl': '26px',\n '3xl': '34px',\n '4xl': '46px',\n '5xl': '64px',\n '6xl': '88px',\n} as const\n\nexport const fontWeights = {\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n black: 900,\n} as const\n\nexport const lineHeights = {\n tight: 1.08,\n snug: 1.2,\n base: 1.45,\n loose: 1.65,\n} as const\n\nexport const letterSpacings = {\n tight: '-0.02em',\n snug: '-0.01em',\n base: '0',\n wide: '0.04em',\n wider: '0.08em',\n widest: '0.18em',\n} as const\n\nexport const googleFontsUrl =\n 'https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@400;500;700;900&family=Space+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap'\n","export const radius = {\n none: '0',\n hairline: '1px',\n sm: '2px',\n pill: '999px',\n} as const\n","export const shadows = {\n stamp: '2px 2px 0 0',\n stampLg: '4px 4px 0 0',\n pressLight: 'inset 0 1px 0 rgba(20,19,15,0.18)',\n pressDark: 'inset 0 1px 0 rgba(232,223,200,0.10)',\n softLight: '0 1px 0 rgba(20,19,15,0.12), 0 0 0 1px rgba(20,19,15,0.04)',\n softDark: '0 1px 0 rgba(0,0,0,0.6), 0 0 0 1px rgba(232,223,200,0.05)',\n} as const\n","export const duration = {\n fast: '120ms',\n base: '180ms',\n slow: '320ms',\n} as const\n\nexport const easing = {\n out: 'cubic-bezier(.2,.7,.2,1)',\n in: 'cubic-bezier(.6,.0,.8,.3)',\n snap: 'cubic-bezier(.5,1.6,.4,1)',\n} as const\n\nexport const zIndex = {\n base: 1,\n sticky: 10,\n overlay: 50,\n modal: 100,\n toast: 200,\n} as const\n","import { palette } from './palette'\n\nexport const lightTokens = {\n bg: palette.paper,\n bg2: palette.paperWarm,\n bgSunken: palette.paperToasted,\n surface: '#fdfaf3',\n surface2: palette.paperWarm,\n\n fg: palette.ink,\n fg2: '#4a463c',\n fg3: '#6e6a5e',\n fgMute: '#8a8576',\n\n border: palette.ink,\n border2: '#6e6a5e',\n borderMute: '#b8ad94',\n rule: palette.inkDeep,\n\n accent: palette.terracotta,\n accentFg: palette.paper,\n accent2: palette.moss,\n accent3: palette.plum,\n\n success: palette.success,\n warn: palette.ochre,\n danger: palette.rust,\n info: palette.plumMid,\n\n selectionBg: palette.ochre,\n selectionFg: palette.ink,\n} as const\n\nexport const darkTokens = {\n bg: palette.inkDeep,\n bg2: '#1f1d18',\n bgSunken: '#0c0b08',\n surface: '#26241e',\n surface2: '#2d2a23',\n\n fg: palette.cream,\n fg2: '#b8ad94',\n fg3: '#8a8576',\n fgMute: '#6e6a5e',\n\n border: palette.cream,\n border2: '#8a8576',\n borderMute: '#4a463c',\n rule: palette.cream,\n\n accent: palette.terracottaLight,\n accentFg: palette.inkDeep,\n accent2: palette.mossLight,\n accent3: palette.plumLight,\n\n success: '#7fba4a',\n warn: palette.ochre,\n danger: palette.terracotta,\n info: palette.plumMid,\n\n selectionBg: palette.mossLight,\n selectionFg: palette.inkDeep,\n} as const\n\nexport type SemanticTokens = typeof lightTokens | typeof darkTokens\n"]}
1
+ {"version":3,"sources":["../../src/tokens/spacing.ts","../../src/tokens/typography.ts","../../src/tokens/radius.ts","../../src/tokens/shadows.ts","../../src/tokens/motion.ts","../../src/tokens/semantic.ts"],"names":["palette"],"mappings":";;;;;AAAO,IAAM,YAAA,GAAe,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE;AAEnE,IAAM,OAAA,GAAU;AAAA,EACrB,GAAA,EAAK,CAAA;AAAA,EACL,GAAA,EAAK,CAAA;AAAA,EACL,GAAA,EAAK,CAAA;AAAA,EACL,GAAA,EAAK,CAAA;AAAA,EACL,GAAA,EAAK,CAAA;AAAA,EACL,GAAA,EAAK,EAAA;AAAA,EACL,GAAA,EAAK,EAAA;AAAA,EACL,GAAA,EAAK,EAAA;AAAA,EACL,GAAA,EAAK,EAAA;AAAA,EACL,GAAA,EAAK,EAAA;AAAA,EACL,IAAA,EAAM,EAAA;AAAA,EACN,IAAA,EAAM,EAAA;AAAA,EACN,IAAA,EAAM;AACR;AAEO,IAAM,EAAA,GAAK,CAAC,CAAA,KAAsB,CAAA,EAAG,CAAC,CAAA,EAAA;;;AClBtC,IAAM,YAAA,GAAe;AAAA,EAC1B,OAAA,EAAS,iDAAA;AAAA,EACT,IAAA,EAAM,mEAAA;AAAA,EACN,IAAA,EAAM;AACR;AAEO,IAAM,SAAA,GAAY;AAAA,EACvB,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO;AACT;AAEO,IAAM,WAAA,GAAc;AAAA,EACzB,OAAA,EAAS,GAAA;AAAA,EACT,MAAA,EAAQ,GAAA;AAAA,EACR,QAAA,EAAU,GAAA;AAAA,EACV,IAAA,EAAM,GAAA;AAAA,EACN,KAAA,EAAO;AACT;AAEO,IAAM,WAAA,GAAc;AAAA,EACzB,KAAA,EAAO,IAAA;AAAA,EACP,IAAA,EAAM,GAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,KAAA,EAAO;AACT;AAEO,IAAM,cAAA,GAAiB;AAAA,EAC5B,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,IAAA,EAAM,GAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ;AACV;AAEO,IAAM,cAAA,GACX;;;AC5CK,IAAM,MAAA,GAAS;AAAA,EACpB,IAAA,EAAM,GAAA;AAAA,EACN,QAAA,EAAU,KAAA;AAAA,EACV,EAAA,EAAI,KAAA;AAAA,EACJ,IAAA,EAAM;AACR;;;ACLO,IAAM,OAAA,GAAU;AAAA,EACrB,KAAA,EAAO,aAAA;AAAA,EACP,OAAA,EAAS,aAAA;AAAA,EACT,UAAA,EAAY,mCAAA;AAAA,EACZ,SAAA,EAAW,sCAAA;AAAA,EACX,SAAA,EAAW,4DAAA;AAAA,EACX,QAAA,EAAU;AACZ;;;ACPO,IAAM,QAAA,GAAW;AAAA,EACtB,IAAA,EAAM,OAAA;AAAA,EACN,IAAA,EAAM,OAAA;AAAA,EACN,IAAA,EAAM;AACR;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,GAAA,EAAK,0BAAA;AAAA,EACL,EAAA,EAAI,2BAAA;AAAA,EACJ,IAAA,EAAM;AACR;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,IAAA,EAAM,CAAA;AAAA,EACN,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAA;AAAA,EACT,KAAA,EAAO,GAAA;AAAA,EACP,KAAA,EAAO;AACT;;;AChBA,IAAM,gBAAA,GAAmB;AAAA;AAAA,EAEvB,iBAAiBA,yBAAA,CAAQ,OAAA;AAAA,EACzB,mBAAmBA,yBAAA,CAAQ,KAAA;AAAA,EAC3B,cAAcA,yBAAA,CAAQ,IAAA;AAAA,EACtB,gBAAgBA,yBAAA,CAAQ,KAAA;AAAA,EACxB,gBAAgBA,yBAAA,CAAQ,MAAA;AAAA,EACxB,kBAAkBA,yBAAA,CAAQ,GAAA;AAAA,EAC1B,MAAMA,yBAAA,CAAQ,IAAA;AAAA,EACd,UAAUA,yBAAA,CAAQ,QAAA;AAAA,EAClB,WAAWA,yBAAA,CAAQ,SAAA;AAAA,EACnB,aAAaA,yBAAA,CAAQ,WAAA;AAAA,EACrB,YAAYA,yBAAA,CAAQ,UAAA;AAAA,EACpB,cAAcA,yBAAA,CAAQ;AACxB,CAAA;AAEO,IAAM,WAAA,GAAc;AAAA,EACzB,IAAIA,yBAAA,CAAQ,KAAA;AAAA,EACZ,KAAKA,yBAAA,CAAQ,SAAA;AAAA,EACb,UAAUA,yBAAA,CAAQ,YAAA;AAAA,EAClB,OAAA,EAAS,SAAA;AAAA,EACT,UAAUA,yBAAA,CAAQ,SAAA;AAAA,EAElB,IAAIA,yBAAA,CAAQ,GAAA;AAAA,EACZ,GAAA,EAAK,SAAA;AAAA,EACL,GAAA,EAAK,SAAA;AAAA,EACL,MAAA,EAAQ,SAAA;AAAA,EAER,QAAQA,yBAAA,CAAQ,GAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,UAAA,EAAY,SAAA;AAAA,EACZ,MAAMA,yBAAA,CAAQ,OAAA;AAAA,EAEd,QAAQA,yBAAA,CAAQ,UAAA;AAAA,EAChB,UAAUA,yBAAA,CAAQ,KAAA;AAAA,EAClB,SAASA,yBAAA,CAAQ,IAAA;AAAA,EACjB,SAASA,yBAAA,CAAQ,IAAA;AAAA,EAEjB,SAASA,yBAAA,CAAQ,OAAA;AAAA,EACjB,MAAMA,yBAAA,CAAQ,KAAA;AAAA,EACd,QAAQA,yBAAA,CAAQ,IAAA;AAAA,EAChB,MAAMA,yBAAA,CAAQ,OAAA;AAAA,EAEd,aAAaA,yBAAA,CAAQ,KAAA;AAAA,EACrB,aAAaA,yBAAA,CAAQ,GAAA;AAAA,EAErB,GAAG;AACL;AAEO,IAAM,UAAA,GAAa;AAAA,EACxB,IAAIA,yBAAA,CAAQ,OAAA;AAAA,EACZ,GAAA,EAAK,SAAA;AAAA,EACL,QAAA,EAAU,SAAA;AAAA,EACV,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU,SAAA;AAAA,EAEV,IAAIA,yBAAA,CAAQ,KAAA;AAAA,EACZ,GAAA,EAAK,SAAA;AAAA,EACL,GAAA,EAAK,SAAA;AAAA,EACL,MAAA,EAAQ,SAAA;AAAA,EAER,QAAQA,yBAAA,CAAQ,KAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,UAAA,EAAY,SAAA;AAAA,EACZ,MAAMA,yBAAA,CAAQ,KAAA;AAAA,EAEd,QAAQA,yBAAA,CAAQ,eAAA;AAAA,EAChB,UAAUA,yBAAA,CAAQ,OAAA;AAAA,EAClB,SAASA,yBAAA,CAAQ,SAAA;AAAA,EACjB,SAASA,yBAAA,CAAQ,SAAA;AAAA,EAEjB,OAAA,EAAS,SAAA;AAAA,EACT,MAAMA,yBAAA,CAAQ,KAAA;AAAA,EACd,QAAQA,yBAAA,CAAQ,UAAA;AAAA,EAChB,MAAMA,yBAAA,CAAQ,OAAA;AAAA,EAEd,aAAaA,yBAAA,CAAQ,SAAA;AAAA,EACrB,aAAaA,yBAAA,CAAQ,OAAA;AAAA,EAErB,GAAG,gBAAA;AAAA;AAAA,EAEH,UAAUA,yBAAA,CAAQ,SAAA;AAAA,EAClB,YAAYA,yBAAA,CAAQ;AACtB","file":"index.cjs","sourcesContent":["export const spacingScale = [0, 2, 4, 6, 8, 12, 16, 20, 24, 32, 40, 56, 80] as const\n\nexport const spacing = {\n sp0: 0,\n sp1: 2,\n sp2: 4,\n sp3: 6,\n sp4: 8,\n sp5: 12,\n sp6: 16,\n sp7: 20,\n sp8: 24,\n sp9: 32,\n sp10: 40,\n sp11: 56,\n sp12: 80,\n} as const\n\nexport const px = (n: number): string => `${n}px`\n","export const fontFamilies = {\n display: \"'Roboto Slab', 'Rockwell', 'Courier New', serif\",\n body: \"'Space Grotesk', 'Helvetica Neue', 'Inter', system-ui, sans-serif\",\n mono: \"'JetBrains Mono', 'IBM Plex Mono', ui-monospace, monospace\",\n} as const\n\nexport const fontSizes = {\n xs: '11px',\n sm: '12px',\n md: '14px',\n lg: '16px',\n xl: '20px',\n '2xl': '26px',\n '3xl': '34px',\n '4xl': '46px',\n '5xl': '64px',\n '6xl': '88px',\n} as const\n\nexport const fontWeights = {\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n black: 900,\n} as const\n\nexport const lineHeights = {\n tight: 1.08,\n snug: 1.2,\n base: 1.45,\n loose: 1.65,\n} as const\n\nexport const letterSpacings = {\n tight: '-0.02em',\n snug: '-0.01em',\n base: '0',\n wide: '0.04em',\n wider: '0.08em',\n widest: '0.18em',\n} as const\n\nexport const googleFontsUrl =\n 'https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@400;500;700;900&family=Space+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap'\n","export const radius = {\n none: '0',\n hairline: '1px',\n sm: '2px',\n pill: '999px',\n} as const\n","export const shadows = {\n stamp: '2px 2px 0 0',\n stampLg: '4px 4px 0 0',\n pressLight: 'inset 0 1px 0 rgba(20,19,15,0.18)',\n pressDark: 'inset 0 1px 0 rgba(232,223,200,0.10)',\n softLight: '0 1px 0 rgba(20,19,15,0.12), 0 0 0 1px rgba(20,19,15,0.04)',\n softDark: '0 1px 0 rgba(0,0,0,0.6), 0 0 0 1px rgba(232,223,200,0.05)',\n} as const\n","export const duration = {\n fast: '120ms',\n base: '180ms',\n slow: '320ms',\n} as const\n\nexport const easing = {\n out: 'cubic-bezier(.2,.7,.2,1)',\n in: 'cubic-bezier(.6,.0,.8,.3)',\n snap: 'cubic-bezier(.5,1.6,.4,1)',\n} as const\n\nexport const zIndex = {\n base: 1,\n sticky: 10,\n overlay: 50,\n modal: 100,\n toast: 200,\n} as const\n","import { palette } from './palette'\n\nconst materialDefaults = {\n // Material system — leather signature defaults; overridden by setMaterial in native context\n materialLeather: palette.leather,\n materialLeatherFg: palette.paper,\n materialWood: palette.wood,\n materialWoodFg: palette.paper,\n materialCopper: palette.copper,\n materialCopperFg: palette.ink,\n gold: palette.gold,\n goldDeep: palette.goldDeep,\n goldLight: palette.goldLight,\n silverLight: palette.silverLight,\n silverDeep: palette.silverDeep,\n copperPatina: palette.copperPatina,\n}\n\nexport const lightTokens = {\n bg: palette.paper,\n bg2: palette.paperWarm,\n bgSunken: palette.paperToasted,\n surface: '#fdfaf3',\n surface2: palette.paperWarm,\n\n fg: palette.ink,\n fg2: '#4a463c',\n fg3: '#6e6a5e',\n fgMute: '#8a8576',\n\n border: palette.ink,\n border2: '#6e6a5e',\n borderMute: '#b8ad94',\n rule: palette.inkDeep,\n\n accent: palette.terracotta,\n accentFg: palette.paper,\n accent2: palette.moss,\n accent3: palette.plum,\n\n success: palette.success,\n warn: palette.ochre,\n danger: palette.rust,\n info: palette.plumMid,\n\n selectionBg: palette.ochre,\n selectionFg: palette.ink,\n\n ...materialDefaults,\n} as const\n\nexport const darkTokens = {\n bg: palette.inkDeep,\n bg2: '#1f1d18',\n bgSunken: '#0c0b08',\n surface: '#26241e',\n surface2: '#2d2a23',\n\n fg: palette.cream,\n fg2: '#b8ad94',\n fg3: '#8a8576',\n fgMute: '#6e6a5e',\n\n border: palette.cream,\n border2: '#8a8576',\n borderMute: '#4a463c',\n rule: palette.cream,\n\n accent: palette.terracottaLight,\n accentFg: palette.inkDeep,\n accent2: palette.mossLight,\n accent3: palette.plumLight,\n\n success: '#7fba4a',\n warn: palette.ochre,\n danger: palette.terracotta,\n info: palette.plumMid,\n\n selectionBg: palette.mossLight,\n selectionFg: palette.inkDeep,\n\n ...materialDefaults,\n // In dark mode, gilt is bumped to gold-light so it stays legible on dark paper\n goldDeep: palette.goldLight,\n silverDeep: palette.silverLight,\n} as const\n\nexport type SemanticTokens = typeof lightTokens | typeof darkTokens\n"]}
@@ -134,6 +134,18 @@ declare const zIndex: {
134
134
  };
135
135
 
136
136
  declare const lightTokens: {
137
+ readonly materialLeather: "#6b3a26";
138
+ readonly materialLeatherFg: "#fbf8f0";
139
+ readonly materialWood: "#7a5a3a";
140
+ readonly materialWoodFg: "#fbf8f0";
141
+ readonly materialCopper: "#b8742a";
142
+ readonly materialCopperFg: "#1f1d18";
143
+ readonly gold: "#c69a4a";
144
+ readonly goldDeep: "#9a7430";
145
+ readonly goldLight: "#e0bc70";
146
+ readonly silverLight: "#c8c0b6";
147
+ readonly silverDeep: "#6e6a62";
148
+ readonly copperPatina: "#5a7a6a";
137
149
  readonly bg: "#fbf8f0";
138
150
  readonly bg2: "#f0e9d6";
139
151
  readonly bgSunken: "#e6dec5";
@@ -159,6 +171,18 @@ declare const lightTokens: {
159
171
  readonly selectionFg: "#1f1d18";
160
172
  };
161
173
  declare const darkTokens: {
174
+ readonly goldDeep: "#e0bc70";
175
+ readonly silverDeep: "#c8c0b6";
176
+ readonly materialLeather: "#6b3a26";
177
+ readonly materialLeatherFg: "#fbf8f0";
178
+ readonly materialWood: "#7a5a3a";
179
+ readonly materialWoodFg: "#fbf8f0";
180
+ readonly materialCopper: "#b8742a";
181
+ readonly materialCopperFg: "#1f1d18";
182
+ readonly gold: "#c69a4a";
183
+ readonly goldLight: "#e0bc70";
184
+ readonly silverLight: "#c8c0b6";
185
+ readonly copperPatina: "#5a7a6a";
162
186
  readonly bg: "#14130f";
163
187
  readonly bg2: "#1f1d18";
164
188
  readonly bgSunken: "#0c0b08";
@@ -134,6 +134,18 @@ declare const zIndex: {
134
134
  };
135
135
 
136
136
  declare const lightTokens: {
137
+ readonly materialLeather: "#6b3a26";
138
+ readonly materialLeatherFg: "#fbf8f0";
139
+ readonly materialWood: "#7a5a3a";
140
+ readonly materialWoodFg: "#fbf8f0";
141
+ readonly materialCopper: "#b8742a";
142
+ readonly materialCopperFg: "#1f1d18";
143
+ readonly gold: "#c69a4a";
144
+ readonly goldDeep: "#9a7430";
145
+ readonly goldLight: "#e0bc70";
146
+ readonly silverLight: "#c8c0b6";
147
+ readonly silverDeep: "#6e6a62";
148
+ readonly copperPatina: "#5a7a6a";
137
149
  readonly bg: "#fbf8f0";
138
150
  readonly bg2: "#f0e9d6";
139
151
  readonly bgSunken: "#e6dec5";
@@ -159,6 +171,18 @@ declare const lightTokens: {
159
171
  readonly selectionFg: "#1f1d18";
160
172
  };
161
173
  declare const darkTokens: {
174
+ readonly goldDeep: "#e0bc70";
175
+ readonly silverDeep: "#c8c0b6";
176
+ readonly materialLeather: "#6b3a26";
177
+ readonly materialLeatherFg: "#fbf8f0";
178
+ readonly materialWood: "#7a5a3a";
179
+ readonly materialWoodFg: "#fbf8f0";
180
+ readonly materialCopper: "#b8742a";
181
+ readonly materialCopperFg: "#1f1d18";
182
+ readonly gold: "#c69a4a";
183
+ readonly goldLight: "#e0bc70";
184
+ readonly silverLight: "#c8c0b6";
185
+ readonly copperPatina: "#5a7a6a";
162
186
  readonly bg: "#14130f";
163
187
  readonly bg2: "#1f1d18";
164
188
  readonly bgSunken: "#0c0b08";
@@ -1,5 +1,5 @@
1
- import { palette } from '../chunk-NDOQ2YVM.js';
2
- export { accentColorNames, accentColors, palette } from '../chunk-NDOQ2YVM.js';
1
+ import { palette } from '../chunk-POLIXYAO.js';
2
+ export { accentColorNames, accentColors, palette } from '../chunk-POLIXYAO.js';
3
3
 
4
4
  // src/tokens/spacing.ts
5
5
  var spacingScale = [0, 2, 4, 6, 8, 12, 16, 20, 24, 32, 40, 56, 80];
@@ -99,6 +99,21 @@ var zIndex = {
99
99
  };
100
100
 
101
101
  // src/tokens/semantic.ts
102
+ var materialDefaults = {
103
+ // Material system — leather signature defaults; overridden by setMaterial in native context
104
+ materialLeather: palette.leather,
105
+ materialLeatherFg: palette.paper,
106
+ materialWood: palette.wood,
107
+ materialWoodFg: palette.paper,
108
+ materialCopper: palette.copper,
109
+ materialCopperFg: palette.ink,
110
+ gold: palette.gold,
111
+ goldDeep: palette.goldDeep,
112
+ goldLight: palette.goldLight,
113
+ silverLight: palette.silverLight,
114
+ silverDeep: palette.silverDeep,
115
+ copperPatina: palette.copperPatina
116
+ };
102
117
  var lightTokens = {
103
118
  bg: palette.paper,
104
119
  bg2: palette.paperWarm,
@@ -122,7 +137,8 @@ var lightTokens = {
122
137
  danger: palette.rust,
123
138
  info: palette.plumMid,
124
139
  selectionBg: palette.ochre,
125
- selectionFg: palette.ink
140
+ selectionFg: palette.ink,
141
+ ...materialDefaults
126
142
  };
127
143
  var darkTokens = {
128
144
  bg: palette.inkDeep,
@@ -147,7 +163,11 @@ var darkTokens = {
147
163
  danger: palette.terracotta,
148
164
  info: palette.plumMid,
149
165
  selectionBg: palette.mossLight,
150
- selectionFg: palette.inkDeep
166
+ selectionFg: palette.inkDeep,
167
+ ...materialDefaults,
168
+ // In dark mode, gilt is bumped to gold-light so it stays legible on dark paper
169
+ goldDeep: palette.goldLight,
170
+ silverDeep: palette.silverLight
151
171
  };
152
172
 
153
173
  export { darkTokens, duration, easing, fontFamilies, fontSizes, fontWeights, googleFontsUrl, letterSpacings, lightTokens, lineHeights, px, radius, shadows, spacing, spacingScale, zIndex };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tokens/spacing.ts","../../src/tokens/typography.ts","../../src/tokens/radius.ts","../../src/tokens/shadows.ts","../../src/tokens/motion.ts","../../src/tokens/semantic.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const spacingScale = [0, 2, 4, 6, 8, 12, 16, 20, 24, 32, 40, 56, 80] as const\n\nexport const spacing = {\n sp0: 0,\n sp1: 2,\n sp2: 4,\n sp3: 6,\n sp4: 8,\n sp5: 12,\n sp6: 16,\n sp7: 20,\n sp8: 24,\n sp9: 32,\n sp10: 40,\n sp11: 56,\n sp12: 80,\n} as const\n\nexport const px = (n: number): string => `${n}px`\n","export const fontFamilies = {\n display: \"'Roboto Slab', 'Rockwell', 'Courier New', serif\",\n body: \"'Space Grotesk', 'Helvetica Neue', 'Inter', system-ui, sans-serif\",\n mono: \"'JetBrains Mono', 'IBM Plex Mono', ui-monospace, monospace\",\n} as const\n\nexport const fontSizes = {\n xs: '11px',\n sm: '12px',\n md: '14px',\n lg: '16px',\n xl: '20px',\n '2xl': '26px',\n '3xl': '34px',\n '4xl': '46px',\n '5xl': '64px',\n '6xl': '88px',\n} as const\n\nexport const fontWeights = {\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n black: 900,\n} as const\n\nexport const lineHeights = {\n tight: 1.08,\n snug: 1.2,\n base: 1.45,\n loose: 1.65,\n} as const\n\nexport const letterSpacings = {\n tight: '-0.02em',\n snug: '-0.01em',\n base: '0',\n wide: '0.04em',\n wider: '0.08em',\n widest: '0.18em',\n} as const\n\nexport const googleFontsUrl =\n 'https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@400;500;700;900&family=Space+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap'\n","export const radius = {\n none: '0',\n hairline: '1px',\n sm: '2px',\n pill: '999px',\n} as const\n","export const shadows = {\n stamp: '2px 2px 0 0',\n stampLg: '4px 4px 0 0',\n pressLight: 'inset 0 1px 0 rgba(20,19,15,0.18)',\n pressDark: 'inset 0 1px 0 rgba(232,223,200,0.10)',\n softLight: '0 1px 0 rgba(20,19,15,0.12), 0 0 0 1px rgba(20,19,15,0.04)',\n softDark: '0 1px 0 rgba(0,0,0,0.6), 0 0 0 1px rgba(232,223,200,0.05)',\n} as const\n","export const duration = {\n fast: '120ms',\n base: '180ms',\n slow: '320ms',\n} as const\n\nexport const easing = {\n out: 'cubic-bezier(.2,.7,.2,1)',\n in: 'cubic-bezier(.6,.0,.8,.3)',\n snap: 'cubic-bezier(.5,1.6,.4,1)',\n} as const\n\nexport const zIndex = {\n base: 1,\n sticky: 10,\n overlay: 50,\n modal: 100,\n toast: 200,\n} as const\n","import { palette } from './palette'\n\nexport const lightTokens = {\n bg: palette.paper,\n bg2: palette.paperWarm,\n bgSunken: palette.paperToasted,\n surface: '#fdfaf3',\n surface2: palette.paperWarm,\n\n fg: palette.ink,\n fg2: '#4a463c',\n fg3: '#6e6a5e',\n fgMute: '#8a8576',\n\n border: palette.ink,\n border2: '#6e6a5e',\n borderMute: '#b8ad94',\n rule: palette.inkDeep,\n\n accent: palette.terracotta,\n accentFg: palette.paper,\n accent2: palette.moss,\n accent3: palette.plum,\n\n success: palette.success,\n warn: palette.ochre,\n danger: palette.rust,\n info: palette.plumMid,\n\n selectionBg: palette.ochre,\n selectionFg: palette.ink,\n} as const\n\nexport const darkTokens = {\n bg: palette.inkDeep,\n bg2: '#1f1d18',\n bgSunken: '#0c0b08',\n surface: '#26241e',\n surface2: '#2d2a23',\n\n fg: palette.cream,\n fg2: '#b8ad94',\n fg3: '#8a8576',\n fgMute: '#6e6a5e',\n\n border: palette.cream,\n border2: '#8a8576',\n borderMute: '#4a463c',\n rule: palette.cream,\n\n accent: palette.terracottaLight,\n accentFg: palette.inkDeep,\n accent2: palette.mossLight,\n accent3: palette.plumLight,\n\n success: '#7fba4a',\n warn: palette.ochre,\n danger: palette.terracotta,\n info: palette.plumMid,\n\n selectionBg: palette.mossLight,\n selectionFg: palette.inkDeep,\n} as const\n\nexport type SemanticTokens = typeof lightTokens | typeof darkTokens\n"]}
1
+ {"version":3,"sources":["../../src/tokens/spacing.ts","../../src/tokens/typography.ts","../../src/tokens/radius.ts","../../src/tokens/shadows.ts","../../src/tokens/motion.ts","../../src/tokens/semantic.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const spacingScale = [0, 2, 4, 6, 8, 12, 16, 20, 24, 32, 40, 56, 80] as const\n\nexport const spacing = {\n sp0: 0,\n sp1: 2,\n sp2: 4,\n sp3: 6,\n sp4: 8,\n sp5: 12,\n sp6: 16,\n sp7: 20,\n sp8: 24,\n sp9: 32,\n sp10: 40,\n sp11: 56,\n sp12: 80,\n} as const\n\nexport const px = (n: number): string => `${n}px`\n","export const fontFamilies = {\n display: \"'Roboto Slab', 'Rockwell', 'Courier New', serif\",\n body: \"'Space Grotesk', 'Helvetica Neue', 'Inter', system-ui, sans-serif\",\n mono: \"'JetBrains Mono', 'IBM Plex Mono', ui-monospace, monospace\",\n} as const\n\nexport const fontSizes = {\n xs: '11px',\n sm: '12px',\n md: '14px',\n lg: '16px',\n xl: '20px',\n '2xl': '26px',\n '3xl': '34px',\n '4xl': '46px',\n '5xl': '64px',\n '6xl': '88px',\n} as const\n\nexport const fontWeights = {\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n black: 900,\n} as const\n\nexport const lineHeights = {\n tight: 1.08,\n snug: 1.2,\n base: 1.45,\n loose: 1.65,\n} as const\n\nexport const letterSpacings = {\n tight: '-0.02em',\n snug: '-0.01em',\n base: '0',\n wide: '0.04em',\n wider: '0.08em',\n widest: '0.18em',\n} as const\n\nexport const googleFontsUrl =\n 'https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@400;500;700;900&family=Space+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap'\n","export const radius = {\n none: '0',\n hairline: '1px',\n sm: '2px',\n pill: '999px',\n} as const\n","export const shadows = {\n stamp: '2px 2px 0 0',\n stampLg: '4px 4px 0 0',\n pressLight: 'inset 0 1px 0 rgba(20,19,15,0.18)',\n pressDark: 'inset 0 1px 0 rgba(232,223,200,0.10)',\n softLight: '0 1px 0 rgba(20,19,15,0.12), 0 0 0 1px rgba(20,19,15,0.04)',\n softDark: '0 1px 0 rgba(0,0,0,0.6), 0 0 0 1px rgba(232,223,200,0.05)',\n} as const\n","export const duration = {\n fast: '120ms',\n base: '180ms',\n slow: '320ms',\n} as const\n\nexport const easing = {\n out: 'cubic-bezier(.2,.7,.2,1)',\n in: 'cubic-bezier(.6,.0,.8,.3)',\n snap: 'cubic-bezier(.5,1.6,.4,1)',\n} as const\n\nexport const zIndex = {\n base: 1,\n sticky: 10,\n overlay: 50,\n modal: 100,\n toast: 200,\n} as const\n","import { palette } from './palette'\n\nconst materialDefaults = {\n // Material system — leather signature defaults; overridden by setMaterial in native context\n materialLeather: palette.leather,\n materialLeatherFg: palette.paper,\n materialWood: palette.wood,\n materialWoodFg: palette.paper,\n materialCopper: palette.copper,\n materialCopperFg: palette.ink,\n gold: palette.gold,\n goldDeep: palette.goldDeep,\n goldLight: palette.goldLight,\n silverLight: palette.silverLight,\n silverDeep: palette.silverDeep,\n copperPatina: palette.copperPatina,\n}\n\nexport const lightTokens = {\n bg: palette.paper,\n bg2: palette.paperWarm,\n bgSunken: palette.paperToasted,\n surface: '#fdfaf3',\n surface2: palette.paperWarm,\n\n fg: palette.ink,\n fg2: '#4a463c',\n fg3: '#6e6a5e',\n fgMute: '#8a8576',\n\n border: palette.ink,\n border2: '#6e6a5e',\n borderMute: '#b8ad94',\n rule: palette.inkDeep,\n\n accent: palette.terracotta,\n accentFg: palette.paper,\n accent2: palette.moss,\n accent3: palette.plum,\n\n success: palette.success,\n warn: palette.ochre,\n danger: palette.rust,\n info: palette.plumMid,\n\n selectionBg: palette.ochre,\n selectionFg: palette.ink,\n\n ...materialDefaults,\n} as const\n\nexport const darkTokens = {\n bg: palette.inkDeep,\n bg2: '#1f1d18',\n bgSunken: '#0c0b08',\n surface: '#26241e',\n surface2: '#2d2a23',\n\n fg: palette.cream,\n fg2: '#b8ad94',\n fg3: '#8a8576',\n fgMute: '#6e6a5e',\n\n border: palette.cream,\n border2: '#8a8576',\n borderMute: '#4a463c',\n rule: palette.cream,\n\n accent: palette.terracottaLight,\n accentFg: palette.inkDeep,\n accent2: palette.mossLight,\n accent3: palette.plumLight,\n\n success: '#7fba4a',\n warn: palette.ochre,\n danger: palette.terracotta,\n info: palette.plumMid,\n\n selectionBg: palette.mossLight,\n selectionFg: palette.inkDeep,\n\n ...materialDefaults,\n // In dark mode, gilt is bumped to gold-light so it stays legible on dark paper\n goldDeep: palette.goldLight,\n silverDeep: palette.silverLight,\n} as const\n\nexport type SemanticTokens = typeof lightTokens | typeof darkTokens\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "achery-ui",
3
- "version": "0.6.2",
3
+ "version": "0.7.0",
4
4
  "description": "Achery Workshop design system — autumn alchemy, hard edges, botanical marginalia.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,184 @@
1
+ import { View, Text, type ViewProps, type ViewStyle, type TextStyle } from 'react-native'
2
+ import { spacing } from 'achery-ui/tokens'
3
+ import { useTheme } from '../theme/ThemeContext'
4
+ import type { MaterialIntensity, MaterialSignature } from '../../types/theme'
5
+
6
+ export type { MaterialIntensity }
7
+
8
+ export interface NativeMaterialCardProps extends ViewProps {
9
+ /**
10
+ * How much of the material surfaces on this object.
11
+ * - `'chrome'` — material as left spine + metal eyebrow; paper body (default)
12
+ * - `'surface'` — material header band over a paper body
13
+ * - `'full'` — whole object in material; reserve for rare moments
14
+ * @default 'chrome'
15
+ */
16
+ intensity?: MaterialIntensity
17
+ /**
18
+ * Override the material signature for this object only. When omitted, uses
19
+ * the `material` value from the nearest `NativeThemeProvider`.
20
+ */
21
+ signature?: MaterialSignature
22
+ /** Header content — rendered as a bar with the material mark. */
23
+ header?: string
24
+ /** Footer content — rendered below a divider line. */
25
+ footer?: React.ReactNode
26
+ children?: React.ReactNode
27
+ }
28
+
29
+ type MaterialColors = {
30
+ material: string
31
+ materialFg: string
32
+ materialBtnFg: string
33
+ metal: string
34
+ metalDeep: string
35
+ }
36
+
37
+ function getMaterialColors(signature: MaterialSignature, tokens: ReturnType<typeof useTheme>['tokens']): MaterialColors {
38
+ switch (signature) {
39
+ case 'wood':
40
+ return {
41
+ material: tokens.materialWood,
42
+ materialFg: tokens.materialWoodFg,
43
+ materialBtnFg: tokens.materialWoodFg,
44
+ metal: tokens.silverLight,
45
+ metalDeep: tokens.silverDeep,
46
+ }
47
+ case 'copper':
48
+ return {
49
+ material: tokens.materialCopper,
50
+ materialFg: tokens.materialCopperFg,
51
+ materialBtnFg: tokens.bg,
52
+ metal: tokens.copperPatina,
53
+ metalDeep: tokens.copperPatina,
54
+ }
55
+ case 'leather':
56
+ default:
57
+ return {
58
+ material: tokens.materialLeather,
59
+ materialFg: tokens.materialLeatherFg,
60
+ materialBtnFg: tokens.fg,
61
+ metal: tokens.gold,
62
+ metalDeep: tokens.goldDeep,
63
+ }
64
+ }
65
+ }
66
+
67
+ export function MaterialCard({
68
+ intensity = 'chrome',
69
+ signature,
70
+ header,
71
+ footer,
72
+ children,
73
+ style,
74
+ ...props
75
+ }: NativeMaterialCardProps) {
76
+ const { tokens, material: contextMaterial } = useTheme()
77
+ const resolvedSignature: MaterialSignature = signature ?? (contextMaterial !== 'none' ? contextMaterial : 'leather')
78
+ const mc = getMaterialColors(resolvedSignature, tokens)
79
+
80
+ const isChrome = intensity === 'chrome'
81
+ const isSurface = intensity === 'surface'
82
+ const isFull = intensity === 'full'
83
+
84
+ const containerStyle: ViewStyle = {
85
+ backgroundColor: isFull ? mc.material : tokens.surface,
86
+ borderWidth: 1,
87
+ borderColor: tokens.border,
88
+ ...(isChrome ? { borderLeftWidth: 3, borderLeftColor: mc.material } : {}),
89
+ ...(isFull
90
+ ? {
91
+ shadowColor: tokens.fg,
92
+ shadowOffset: { width: 4, height: 4 },
93
+ shadowOpacity: 1,
94
+ shadowRadius: 0,
95
+ elevation: 6,
96
+ }
97
+ : {
98
+ shadowColor: tokens.fg,
99
+ shadowOffset: { width: 2, height: 2 },
100
+ shadowOpacity: 1,
101
+ shadowRadius: 0,
102
+ elevation: 4,
103
+ }),
104
+ }
105
+
106
+ const barBg = isSurface || isFull ? mc.material : undefined
107
+ const barBorderColor = isFull ? mc.metal : tokens.border
108
+ const barTextColor = isSurface || isFull ? mc.materialFg : tokens.fg
109
+
110
+ const eyebrowColor: TextStyle['color'] = isFull ? mc.metal : mc.metalDeep
111
+ const bodyTextColor: TextStyle['color'] = isFull ? mc.materialFg : tokens.fg
112
+ const rowBorderColor = isFull ? mc.metal : tokens.borderMute
113
+ const footBorderColor = isFull ? mc.metal : tokens.borderMute
114
+
115
+ return (
116
+ <View style={[containerStyle, style]} {...props}>
117
+ {header !== undefined && (
118
+ <View
119
+ style={{
120
+ flexDirection: 'row',
121
+ alignItems: 'center',
122
+ gap: spacing.sp3,
123
+ padding: spacing.sp5,
124
+ backgroundColor: barBg,
125
+ borderBottomWidth: 1,
126
+ borderBottomColor: barBorderColor,
127
+ }}
128
+ >
129
+ <View
130
+ style={{
131
+ width: 9,
132
+ height: 9,
133
+ backgroundColor: isSurface || isFull ? mc.metal : mc.material,
134
+ transform: [{ rotate: '45deg' }],
135
+ }}
136
+ />
137
+ <Text
138
+ style={{
139
+ color: barTextColor,
140
+ fontWeight: '700',
141
+ fontSize: 15,
142
+ letterSpacing: -0.3,
143
+ flex: 1,
144
+ }}
145
+ >
146
+ {header}
147
+ </Text>
148
+ </View>
149
+ )}
150
+
151
+ <View style={{ padding: spacing.sp5, gap: spacing.sp4 }}>
152
+ {children}
153
+ </View>
154
+
155
+ {footer !== undefined && (
156
+ <View
157
+ style={{
158
+ padding: spacing.sp5,
159
+ borderTopWidth: 1,
160
+ borderTopColor: footBorderColor,
161
+ flexDirection: 'row',
162
+ gap: spacing.sp3,
163
+ }}
164
+ >
165
+ {footer}
166
+ </View>
167
+ )}
168
+ </View>
169
+ )
170
+ }
171
+
172
+ /** Eyebrow label styled for use inside a MaterialCard. */
173
+ export function MaterialEyebrow({ children, intensity = 'chrome', signature }: { children: string; intensity?: MaterialIntensity; signature?: MaterialSignature }) {
174
+ const { tokens, material: contextMaterial } = useTheme()
175
+ const resolvedSignature: MaterialSignature = signature ?? (contextMaterial !== 'none' ? contextMaterial : 'leather')
176
+ const mc = getMaterialColors(resolvedSignature, tokens)
177
+ const color = intensity === 'full' ? mc.metal : mc.metalDeep
178
+
179
+ return (
180
+ <Text style={{ fontSize: 10, fontWeight: '600', letterSpacing: 1.8, textTransform: 'uppercase', color }}>
181
+ {children}
182
+ </Text>
183
+ )
184
+ }
@@ -12,3 +12,6 @@ export type { BadgeProps, BadgeTone, BadgeVariant } from './Badge'
12
12
 
13
13
  export { Field, Input } from './Input'
14
14
  export type { FieldProps, InputProps } from './Input'
15
+
16
+ export { MaterialCard, MaterialEyebrow } from './MaterialCard'
17
+ export type { NativeMaterialCardProps, MaterialIntensity } from './MaterialCard'
@@ -1,10 +1,12 @@
1
1
  export { NativeThemeProvider, useTheme } from './theme/ThemeContext'
2
+ export type { NativeThemeProviderProps, NativeThemeContextValue } from './theme/ThemeContext'
2
3
 
3
- export { Text, Button, Card, Badge, Field, Input } from './components/index'
4
+ export { Text, Button, Card, Badge, Field, Input, MaterialCard, MaterialEyebrow } from './components/index'
4
5
  export type {
5
6
  TextProps,
6
7
  ButtonProps, ButtonVariant, ButtonSize,
7
8
  CardProps, CardVariant, CardPadding,
8
9
  BadgeProps, BadgeTone, BadgeVariant,
9
10
  FieldProps, InputProps,
11
+ NativeMaterialCardProps, MaterialIntensity,
10
12
  } from './components/index'
@@ -1,28 +1,76 @@
1
- import { createContext, useContext, useState, type ReactNode } from 'react'
1
+ import { createContext, useContext, useState, useCallback, type ReactNode } from 'react'
2
2
  import { lightTokens, darkTokens } from 'achery-ui/tokens'
3
3
  import type { SemanticTokens } from 'achery-ui/tokens'
4
+ import type { AccentColor, AccentDial, MaterialSignature } from '../../types/theme'
4
5
 
5
- interface ThemeContextValue {
6
+ export interface NativeThemeContextValue {
6
7
  tokens: SemanticTokens
7
8
  dark: boolean
8
9
  toggle: () => void
10
+ accent: AccentColor
11
+ setAccent: (accent: AccentColor) => void
12
+ dial: AccentDial
13
+ setDial: (dial: AccentDial) => void
14
+ material: MaterialSignature
15
+ setMaterial: (material: MaterialSignature) => void
9
16
  }
10
17
 
11
- const ThemeContext = createContext<ThemeContextValue>({
18
+ export interface NativeThemeProviderProps {
19
+ children: ReactNode
20
+ defaultDark?: boolean
21
+ defaultAccent?: AccentColor
22
+ defaultDial?: AccentDial
23
+ defaultMaterial?: MaterialSignature
24
+ }
25
+
26
+ const ThemeContext = createContext<NativeThemeContextValue>({
12
27
  tokens: lightTokens,
13
28
  dark: false,
14
29
  toggle: () => {},
30
+ accent: 'terracotta',
31
+ setAccent: () => {},
32
+ dial: 'chrome',
33
+ setDial: () => {},
34
+ material: 'none',
35
+ setMaterial: () => {},
15
36
  })
16
37
 
17
- export function NativeThemeProvider({ children, defaultDark = false }: { children: ReactNode; defaultDark?: boolean }) {
38
+ export function NativeThemeProvider({
39
+ children,
40
+ defaultDark = false,
41
+ defaultAccent = 'terracotta',
42
+ defaultDial = 'chrome',
43
+ defaultMaterial = 'none',
44
+ }: NativeThemeProviderProps) {
18
45
  const [dark, setDark] = useState(defaultDark)
46
+ const [accent, setAccentState] = useState<AccentColor>(defaultAccent)
47
+ const [dial, setDialState] = useState<AccentDial>(defaultDial)
48
+ const [material, setMaterialState] = useState<MaterialSignature>(defaultMaterial)
49
+
50
+ const toggle = useCallback(() => setDark(d => !d), [])
51
+ const setAccent = useCallback((a: AccentColor) => setAccentState(a), [])
52
+ const setDial = useCallback((d: AccentDial) => setDialState(d), [])
53
+ const setMaterial = useCallback((m: MaterialSignature) => setMaterialState(m), [])
54
+
19
55
  return (
20
- <ThemeContext.Provider value={{ tokens: dark ? darkTokens : lightTokens, dark, toggle: () => setDark(d => !d) }}>
56
+ <ThemeContext.Provider
57
+ value={{
58
+ tokens: dark ? darkTokens : lightTokens,
59
+ dark,
60
+ toggle,
61
+ accent,
62
+ setAccent,
63
+ dial,
64
+ setDial,
65
+ material,
66
+ setMaterial,
67
+ }}
68
+ >
21
69
  {children}
22
70
  </ThemeContext.Provider>
23
71
  )
24
72
  }
25
73
 
26
- export function useTheme(): ThemeContextValue {
74
+ export function useTheme(): NativeThemeContextValue {
27
75
  return useContext(ThemeContext)
28
76
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tokens/palette.ts","../src/tokens/accents.ts"],"names":[],"mappings":";;;AAAO,IAAM,OAAA,GAAU;AAAA,EACrB,GAAA,EAAK,SAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EAET,KAAA,EAAO,SAAA;AAAA,EACP,SAAA,EAAW,SAAA;AAAA,EACX,YAAA,EAAc,SAAA;AAAA,EACd,KAAA,EAAO,SAAA;AAAA,EACP,SAAA,EAAW,SAAA;AAAA,EAEX,QAAA,EAAU,SAAA;AAAA,EACV,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW,SAAA;AAAA,EACX,IAAA,EAAM,SAAA;AAAA,EAEN,UAAA,EAAY,SAAA;AAAA,EACZ,cAAA,EAAgB,SAAA;AAAA,EAChB,eAAA,EAAiB,SAAA;AAAA,EAEjB,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW,SAAA;AAAA,EAEX,IAAA,EAAM,SAAA;AAAA,EACN,KAAA,EAAO,SAAA;AAAA,EAEP,OAAA,EAAS,SAAA;AAAA,EACT,UAAA,EAAY,SAAA;AAAA,EACZ,YAAA,EAAc,SAAA;AAAA,EAEd,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA,EACZ,WAAA,EAAa,SAAA;AAAA,EACb,YAAA,EAAc,SAAA;AAAA,EAEd,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA,EACZ,WAAA,EAAa,SAAA;AAAA,EAEb,IAAA,EAAM,SAAA;AAAA,EACN,SAAA,EAAW,SAAA;AAAA,EACX,QAAA,EAAU,SAAA;AAAA,EAEV,IAAA,EAAM,SAAA;AAAA,EACN,QAAA,EAAU,SAAA;AAAA,EACV,SAAA,EAAW,SAAA;AAAA,EAEX,OAAA,EAAS;AACX;;;AC/CO,IAAM,YAAA,GAAe;AAAA,EAC1B,UAAA,EAAY;AAAA,IACV,MAAM,OAAA,CAAQ,UAAA;AAAA,IACd,OAAO,OAAA,CAAQ,eAAA;AAAA,IACf,MAAM,OAAA,CAAQ,cAAA;AAAA,IACd,IAAI,OAAA,CAAQ,KAAA;AAAA,IACZ,QAAQ,OAAA,CAAQ;AAAA,GAClB;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAO,OAAA,CAAQ,SAAA;AAAA,IACf,MAAM,OAAA,CAAQ,QAAA;AAAA,IACd,IAAI,OAAA,CAAQ,KAAA;AAAA,IACZ,QAAQ,OAAA,CAAQ;AAAA,GAClB;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAO,OAAA,CAAQ,SAAA;AAAA,IACf,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,IAAI,OAAA,CAAQ,KAAA;AAAA,IACZ,QAAQ,OAAA,CAAQ;AAAA,GAClB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAM,OAAA,CAAQ,KAAA;AAAA,IACd,OAAO,OAAA,CAAQ,SAAA;AAAA,IACf,MAAM,OAAA,CAAQ,QAAA;AAAA,IACd,IAAI,OAAA,CAAQ,GAAA;AAAA,IACZ,QAAQ,OAAA,CAAQ;AAAA,GAClB;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAO,OAAA,CAAQ,UAAA;AAAA,IACf,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,IAAI,OAAA,CAAQ,KAAA;AAAA,IACZ,QAAQ,OAAA,CAAQ;AAAA,GAClB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAM,OAAA,CAAQ,MAAA;AAAA,IACd,OAAO,OAAA,CAAQ,WAAA;AAAA,IACf,MAAM,OAAA,CAAQ,UAAA;AAAA,IACd,IAAI,OAAA,CAAQ,GAAA;AAAA,IACZ,QAAQ,OAAA,CAAQ;AAAA;AAEpB;AAGO,IAAM,gBAAA,GAAmB,MAAA,CAAO,IAAA,CAAK,YAAY","file":"chunk-LJ24EJ3N.cjs","sourcesContent":["export const palette = {\n ink: '#1f1d18',\n inkDeep: '#14130f',\n\n paper: '#fbf8f0',\n paperWarm: '#f0e9d6',\n paperToasted: '#e6dec5',\n cream: '#e8dfc8',\n creamSoft: '#d8cdb0',\n\n mossDeep: '#2e3a20',\n moss: '#4a5a32',\n mossMid: '#6b7a48',\n mossLight: '#8da866',\n sage: '#b6c898',\n\n terracotta: '#c46a3a',\n terracottaDeep: '#a05526',\n terracottaLight: '#d97a4a',\n\n plum: '#5d4a6a',\n plumMid: '#7a5e8a',\n plumLight: '#8b6fa8',\n\n rust: '#8a3a22',\n ochre: '#b8924a',\n\n leather: '#6b3a26',\n leatherMid: '#8a4e34',\n leatherLight: '#a86a48',\n\n copper: '#b8742a',\n copperDeep: '#8a531a',\n copperLight: '#d68f48',\n copperPatina: '#5a7a6a',\n\n silver: '#a8a098',\n silverDeep: '#6e6a62',\n silverLight: '#c8c0b6',\n\n wood: '#7a5a3a',\n woodLight: '#a88660',\n woodDeep: '#4a3422',\n\n gold: '#c69a4a',\n goldDeep: '#9a7430',\n goldLight: '#e0bc70',\n\n success: '#6ba03d',\n} as const\n\nexport type PaletteKey = keyof typeof palette\n","import { palette } from './palette'\n\nexport const accentColors = {\n terracotta: {\n main: palette.terracotta,\n light: palette.terracottaLight,\n deep: palette.terracottaDeep,\n fg: palette.paper,\n fgDark: palette.inkDeep,\n },\n moss: {\n main: palette.moss,\n light: palette.mossLight,\n deep: palette.mossDeep,\n fg: palette.paper,\n fgDark: palette.inkDeep,\n },\n plum: {\n main: palette.plum,\n light: palette.plumLight,\n deep: palette.plum,\n fg: palette.paper,\n fgDark: palette.inkDeep,\n },\n ochre: {\n main: palette.ochre,\n light: palette.goldLight,\n deep: palette.goldDeep,\n fg: palette.ink,\n fgDark: palette.ink,\n },\n rust: {\n main: palette.rust,\n light: palette.terracotta,\n deep: palette.rust,\n fg: palette.paper,\n fgDark: palette.inkDeep,\n },\n copper: {\n main: palette.copper,\n light: palette.copperLight,\n deep: palette.copperDeep,\n fg: palette.ink,\n fgDark: palette.ink,\n },\n} as const\n\nexport type AccentColor = keyof typeof accentColors\nexport const accentColorNames = Object.keys(accentColors) as AccentColor[]\n"]}