@marwes-ui/presets 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +19 -9
  2. package/dist/chunk-PWG4S55U.js +131 -0
  3. package/dist/chunk-PWG4S55U.js.map +1 -0
  4. package/dist/firstEdition/index.d.ts +18 -1
  5. package/dist/firstEdition/index.js +1 -1
  6. package/dist/index.d.ts +1 -1
  7. package/dist/index.js +1 -1
  8. package/package.json +3 -3
  9. package/src/firstEdition/accordion.css +25 -12
  10. package/src/firstEdition/avatar.css +32 -14
  11. package/src/firstEdition/badge.css +35 -64
  12. package/src/firstEdition/banner.css +190 -0
  13. package/src/firstEdition/breadcrumb.css +125 -0
  14. package/src/firstEdition/button.css +77 -18
  15. package/src/firstEdition/card.css +28 -24
  16. package/src/firstEdition/checkbox.css +9 -9
  17. package/src/firstEdition/context-menu.css +114 -0
  18. package/src/firstEdition/date-picker.css +6 -9
  19. package/src/firstEdition/dialog.css +17 -10
  20. package/src/firstEdition/drawer.css +258 -0
  21. package/src/firstEdition/index.ts +10 -0
  22. package/src/firstEdition/input-otp.css +16 -8
  23. package/src/firstEdition/input.css +7 -4
  24. package/src/firstEdition/molecules/accordion-field.css +9 -5
  25. package/src/firstEdition/molecules/checkbox-field.css +12 -12
  26. package/src/firstEdition/molecules/checkbox-group-field.css +29 -17
  27. package/src/firstEdition/molecules/date-picker-field.css +28 -0
  28. package/src/firstEdition/molecules/dialog-modal.css +16 -1
  29. package/src/firstEdition/molecules/input-field.css +31 -13
  30. package/src/firstEdition/molecules/input-otp-field.css +26 -0
  31. package/src/firstEdition/molecules/pagination-field.css +23 -0
  32. package/src/firstEdition/molecules/radio-group-field.css +30 -9
  33. package/src/firstEdition/molecules/segmented-control-field.css +23 -0
  34. package/src/firstEdition/molecules/slider-field.css +9 -4
  35. package/src/firstEdition/molecules/switch-field.css +8 -4
  36. package/src/firstEdition/molecules/tab-group.css +15 -2
  37. package/src/firstEdition/pagination.css +180 -0
  38. package/src/firstEdition/personality.css +66 -0
  39. package/src/firstEdition/presets.ts +97 -0
  40. package/src/firstEdition/progress-bar.css +108 -0
  41. package/src/firstEdition/radio.css +10 -5
  42. package/src/firstEdition/rich-text.css +5 -2
  43. package/src/firstEdition/segmented-control.css +133 -0
  44. package/src/firstEdition/select.css +26 -31
  45. package/src/firstEdition/skip-link.css +45 -0
  46. package/src/firstEdition/slider.css +10 -4
  47. package/src/firstEdition/spinner.css +150 -3
  48. package/src/firstEdition/stat-tile.css +54 -21
  49. package/src/firstEdition/styles.css +20 -0
  50. package/src/firstEdition/switch.css +4 -4
  51. package/src/firstEdition/tab.css +10 -10
  52. package/src/firstEdition/textarea.css +9 -6
  53. package/src/firstEdition/toast.css +139 -84
  54. package/src/firstEdition/tokens.css +6 -5
  55. package/src/firstEdition/tooltip.css +5 -5
  56. package/src/firstEdition/typography.css +21 -0
  57. package/dist/chunk-62D3F6GN.js +0 -49
  58. package/dist/chunk-62D3F6GN.js.map +0 -1
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- Static preset CSS and theme exports for Marwes React, Vue, and custom adapter projects.
1
+ Static preset CSS and theme exports for Marwes React, Vue, Svelte, and custom adapter projects.
2
2
 
3
3
  <div align="center">
4
4
 
@@ -9,11 +9,12 @@ Static preset CSS and theme exports for Marwes React, Vue, and custom adapter pr
9
9
 
10
10
  # Marwes Design System - Presets
11
11
 
12
- **Static default CSS and preset theme exports for Marwes React and Vue apps.**
12
+ **Static default CSS and preset theme exports for Marwes React, Vue, and Svelte apps.**
13
13
 
14
14
  Static `.mw-*` CSS • CSS variables • Default Marwes visuals • No runtime CSS-in-JS
15
15
 
16
- [Documentation](https://github.com/niklas-westman/marwes/tree/main/docs) • [React Storybook](https://storybook-react.marwes.io/latest/) • [Vue Storybook](https://storybook-vue.marwes.io/latest/) • [GitHub](https://github.com/niklas-westman/marwes)
16
+ [**marwes.io**](https://marwes.io) — official site, theme builder, and install guides
17
+ [React Storybook](https://storybook-react.marwes.io/latest/) • [Vue Storybook](https://storybook-vue.marwes.io/latest/) • [Svelte Storybook](https://storybook-svelte.marwes.io/latest/) • [Docs](https://github.com/niklas-westman/marwes/tree/main/docs) • [GitHub](https://github.com/niklas-westman/marwes)
17
18
 
18
19
  </div>
19
20
 
@@ -21,7 +22,7 @@ Static `.mw-*` CSS • CSS variables • Default Marwes visuals • No runtime C
21
22
 
22
23
  ## Why Use It
23
24
 
24
- Most apps install `@marwes-ui/react` or `@marwes-ui/vue`, and those adapters load the default preset automatically. Install presets directly when you need the standalone CSS path, the explicit `firstEditionTheme` object, or preset CSS in a custom adapter.
25
+ Most apps install `@marwes-ui/react`, `@marwes-ui/vue`, or `@marwes-ui/svelte`, and those adapters load the default preset automatically. Install presets directly when you need the standalone CSS path, the explicit `firstEditionTheme` object, or preset CSS in a custom adapter.
25
26
 
26
27
  Presets gives Marwes its default visual layer:
27
28
 
@@ -39,6 +40,7 @@ Presets are the static visual layer, not the normal app entry point.
39
40
  | --- | --- |
40
41
  | `@marwes-ui/react` | You are building a React app. |
41
42
  | `@marwes-ui/vue` | You are building a Vue app. |
43
+ | `@marwes-ui/svelte` | You are building a Svelte app. |
42
44
  | `@marwes-ui/core` | You need framework-agnostic recipes, theme utilities, accessibility contracts, or adapter/tooling APIs. |
43
45
  | `@marwes-ui/presets` | You need standalone preset CSS or preset theme exports. |
44
46
 
@@ -52,7 +54,7 @@ pnpm add @marwes-ui/presets
52
54
 
53
55
  ## Normal App Setup
54
56
 
55
- React and Vue apps normally import only the adapter:
57
+ React, Vue, and Svelte apps normally import only the adapter:
56
58
 
57
59
  ```tsx
58
60
  import { Button, ButtonVariant, MarwesProvider } from "@marwes-ui/react"
@@ -81,18 +83,26 @@ The default preset styles these Marwes families today:
81
83
  - Accordion and accordion fields
82
84
  - Avatar and avatar groups
83
85
  - Badge and contextual badge variants
84
- - Button and purpose button variants
86
+ - Banner and info/success/warning/error banner variants
87
+ - Breadcrumb
88
+ - Button (including `danger` variant), icon button, and purpose button variants
85
89
  - Card variants
86
90
  - Checkbox, checkbox fields, and checkbox groups
87
- - Dialog and dialog modal
91
+ - Context menu
92
+ - Dialog, dialog modal, and drawer
88
93
  - Divider
89
94
  - Icon
90
95
  - Input, textarea, select, rich text, OTP, and field variants
91
- - Paragraph and heading typography
96
+ - Pagination field
97
+ - Paragraph, heading, and text typography
98
+ - Progress bar
92
99
  - Radio and radio groups
100
+ - Segmented control field
101
+ - Skeleton
93
102
  - Slider and slider fields
94
- - Spacing and spacer primitives
103
+ - Spacing and spacer primitives (including the `sp-12` spacing token)
95
104
  - Spinner variants
105
+ - Stat tile
96
106
  - Switch and switch fields
97
107
  - Tab groups and panels
98
108
  - Toast and toast container
@@ -0,0 +1,131 @@
1
+ import '@fontsource/instrument-sans/400.css';
2
+ import '@fontsource/instrument-sans/500.css';
3
+ import '@fontsource/instrument-sans/600.css';
4
+ import '@fontsource/instrument-sans/700.css';
5
+
6
+ // src/firstEdition/index.ts
7
+
8
+ // src/firstEdition/presets.ts
9
+ var marwesPreset = {
10
+ mode: "light",
11
+ personality: "flat",
12
+ color: {
13
+ primary: "#2F31FC"
14
+ },
15
+ ui: { radius: 4, density: "comfortable" }
16
+ };
17
+ var cyberPreset = {
18
+ mode: "dark",
19
+ tone: "digital",
20
+ personality: "glow",
21
+ color: {
22
+ primary: "#FFE500",
23
+ background: "#0A0A0F",
24
+ surface: "#12121A",
25
+ surfaceElevated: "#1B1B26",
26
+ text: "#F4F4F5",
27
+ textMuted: "#A1A1AA",
28
+ border: "#27272A",
29
+ borderStrong: "#3F3F46"
30
+ },
31
+ font: { primary: "'Fira Code', ui-monospace, monospace" },
32
+ ui: { radius: 0, density: "compact" }
33
+ };
34
+ var editorialPreset = {
35
+ mode: "light",
36
+ personality: "outlined",
37
+ color: {
38
+ primary: "#8B1E3F",
39
+ background: "#FBF7F0",
40
+ surface: "#FFFFFF",
41
+ text: "#1B1B1F",
42
+ textMuted: "#5C5C63",
43
+ border: "#E5DFD2",
44
+ borderStrong: "#C6BFB0"
45
+ },
46
+ font: { primary: "'Playfair Display', Georgia, serif" },
47
+ ui: { radius: 12, density: "spacious" }
48
+ };
49
+ var sunsetPreset = {
50
+ mode: "light",
51
+ personality: "soft",
52
+ color: {
53
+ primary: "#F97316",
54
+ background: "#FFF8F2",
55
+ surface: "#FFFFFF",
56
+ text: "#2B1E17",
57
+ textMuted: "#8B6E5A",
58
+ border: "#F5DFC7",
59
+ borderStrong: "#E9C29A"
60
+ },
61
+ font: { primary: "'Nunito', system-ui, sans-serif" },
62
+ ui: { radius: 16, density: "comfortable" }
63
+ };
64
+ var nordicPreset = {
65
+ mode: "light",
66
+ personality: "outlined",
67
+ color: {
68
+ primary: "#475569",
69
+ background: "#F1F5F9",
70
+ surface: "#F8FAFC",
71
+ text: "#0F172A",
72
+ textMuted: "#64748B",
73
+ border: "#CBD5E1",
74
+ borderStrong: "#94A3B8"
75
+ },
76
+ font: { primary: "'Fira Code', ui-monospace, monospace" },
77
+ ui: { radius: 2, density: "compact" }
78
+ };
79
+ var themePresets = [
80
+ marwesPreset,
81
+ cyberPreset,
82
+ editorialPreset,
83
+ sunsetPreset,
84
+ nordicPreset
85
+ ];
86
+
87
+ // src/firstEdition/index.ts
88
+ var firstEditionTheme = {
89
+ color: {
90
+ primary: {
91
+ base: "#2F31FC",
92
+ hover: "#2527CA",
93
+ pressed: "#1B1D97",
94
+ disabled: "#8182FC",
95
+ label: "#FFFFFF",
96
+ labelDisabled: "rgba(255,255,255,0.5)"
97
+ },
98
+ danger: {
99
+ base: "#D90429",
100
+ hover: "#A8031F",
101
+ pressed: "#780215",
102
+ disabled: "#FF8A95",
103
+ label: "#FFFFFF",
104
+ labelDisabled: "rgba(255,255,255,0.5)"
105
+ },
106
+ success: "#006633",
107
+ warning: "#B45309",
108
+ background: "#FFFFFF",
109
+ surface: "#F8F8F8",
110
+ surfaceSubtle: "#F5F5F5",
111
+ surfaceElevated: "#FFFFFF",
112
+ surfaceDisabled: "#F5F5F5",
113
+ surfaceInverted: "#141414",
114
+ text: "#141414",
115
+ textMuted: "#595959",
116
+ textSubtle: "#737373",
117
+ textDisabled: "#737373",
118
+ textInverted: "#FFFFFF",
119
+ border: "#D8D8D8",
120
+ borderSubtle: "#D8D8D8",
121
+ borderStrong: "#A3A3A3",
122
+ borderDisabled: "#D8D8D8",
123
+ focus: "#2F31FC"
124
+ },
125
+ font: { primary: "'Instrument Sans', Inter, system-ui, sans-serif" },
126
+ ui: { radius: 4, density: "comfortable" }
127
+ };
128
+
129
+ export { cyberPreset, editorialPreset, firstEditionTheme, marwesPreset, nordicPreset, sunsetPreset, themePresets };
130
+ //# sourceMappingURL=chunk-PWG4S55U.js.map
131
+ //# sourceMappingURL=chunk-PWG4S55U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/firstEdition/presets.ts","../src/firstEdition/index.ts"],"names":[],"mappings":";;;;;;;;AAaA,IAAM,YAAA,GAA2B;AAAA,EAC/B,IAAA,EAAM,OAAA;AAAA,EACN,WAAA,EAAa,MAAA;AAAA,EACb,KAAA,EAAO;AAAA,IACL,OAAA,EAAS;AAAA,GACX;AAAA,EACA,EAAA,EAAI,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,aAAA;AAC5B;AAEA,IAAM,WAAA,GAA0B;AAAA,EAC9B,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,SAAA;AAAA,EACN,WAAA,EAAa,MAAA;AAAA,EACb,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,SAAA;AAAA,IACT,UAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAS,SAAA;AAAA,IACT,eAAA,EAAiB,SAAA;AAAA,IACjB,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW,SAAA;AAAA,IACX,MAAA,EAAQ,SAAA;AAAA,IACR,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,IAAA,EAAM,EAAE,OAAA,EAAS,sCAAA,EAAuC;AAAA,EACxD,EAAA,EAAI,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,SAAA;AAC5B;AAEA,IAAM,eAAA,GAA8B;AAAA,EAClC,IAAA,EAAM,OAAA;AAAA,EACN,WAAA,EAAa,UAAA;AAAA,EACb,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,SAAA;AAAA,IACT,UAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW,SAAA;AAAA,IACX,MAAA,EAAQ,SAAA;AAAA,IACR,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,IAAA,EAAM,EAAE,OAAA,EAAS,oCAAA,EAAqC;AAAA,EACtD,EAAA,EAAI,EAAE,MAAA,EAAQ,EAAA,EAAI,SAAS,UAAA;AAC7B;AAEA,IAAM,YAAA,GAA2B;AAAA,EAC/B,IAAA,EAAM,OAAA;AAAA,EACN,WAAA,EAAa,MAAA;AAAA,EACb,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,SAAA;AAAA,IACT,UAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW,SAAA;AAAA,IACX,MAAA,EAAQ,SAAA;AAAA,IACR,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,IAAA,EAAM,EAAE,OAAA,EAAS,iCAAA,EAAkC;AAAA,EACnD,EAAA,EAAI,EAAE,MAAA,EAAQ,EAAA,EAAI,SAAS,aAAA;AAC7B;AAEA,IAAM,YAAA,GAA2B;AAAA,EAC/B,IAAA,EAAM,OAAA;AAAA,EACN,WAAA,EAAa,UAAA;AAAA,EACb,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,SAAA;AAAA,IACT,UAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW,SAAA;AAAA,IACX,MAAA,EAAQ,SAAA;AAAA,IACR,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,IAAA,EAAM,EAAE,OAAA,EAAS,sCAAA,EAAuC;AAAA,EACxD,EAAA,EAAI,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,SAAA;AAC5B;AAEA,IAAM,YAAA,GAAsC;AAAA,EAC1C,YAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF;;;AC7EO,IAAM,iBAAA,GAAgC;AAAA,EAC3C,KAAA,EAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,OAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAU,SAAA;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,aAAA,EAAe;AAAA,KACjB;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,OAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAU,SAAA;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,aAAA,EAAe;AAAA,KACjB;AAAA,IACA,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,UAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAS,SAAA;AAAA,IACT,aAAA,EAAe,SAAA;AAAA,IACf,eAAA,EAAiB,SAAA;AAAA,IACjB,eAAA,EAAiB,SAAA;AAAA,IACjB,eAAA,EAAiB,SAAA;AAAA,IACjB,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW,SAAA;AAAA,IACX,UAAA,EAAY,SAAA;AAAA,IACZ,YAAA,EAAc,SAAA;AAAA,IACd,YAAA,EAAc,SAAA;AAAA,IACd,MAAA,EAAQ,SAAA;AAAA,IACR,YAAA,EAAc,SAAA;AAAA,IACd,YAAA,EAAc,SAAA;AAAA,IACd,cAAA,EAAgB,SAAA;AAAA,IAChB,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM,EAAE,OAAA,EAAS,iDAAA,EAAkD;AAAA,EACnE,EAAA,EAAI,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,aAAA;AAC5B","file":"chunk-PWG4S55U.js","sourcesContent":["import type { ThemeInput } from \"@marwes-ui/core\"\n\n/**\n * Curated preset themes shipped with the firstEdition CSS. Each preset is a\n * `ThemeInput` — pass it directly to `<MarwesProvider theme={cyberPreset}>`\n * or spread it into a larger theme. The `personality` field maps to the\n * matching CSS signature block in `personality.css`.\n *\n * Presets do not include font imports. The consumer app must load fonts\n * separately (e.g. via Fontsource) when a preset references a non-default\n * font family.\n */\n\nconst marwesPreset: ThemeInput = {\n mode: \"light\",\n personality: \"flat\",\n color: {\n primary: \"#2F31FC\",\n },\n ui: { radius: 4, density: \"comfortable\" },\n}\n\nconst cyberPreset: ThemeInput = {\n mode: \"dark\",\n tone: \"digital\",\n personality: \"glow\",\n color: {\n primary: \"#FFE500\",\n background: \"#0A0A0F\",\n surface: \"#12121A\",\n surfaceElevated: \"#1B1B26\",\n text: \"#F4F4F5\",\n textMuted: \"#A1A1AA\",\n border: \"#27272A\",\n borderStrong: \"#3F3F46\",\n },\n font: { primary: \"'Fira Code', ui-monospace, monospace\" },\n ui: { radius: 0, density: \"compact\" },\n}\n\nconst editorialPreset: ThemeInput = {\n mode: \"light\",\n personality: \"outlined\",\n color: {\n primary: \"#8B1E3F\",\n background: \"#FBF7F0\",\n surface: \"#FFFFFF\",\n text: \"#1B1B1F\",\n textMuted: \"#5C5C63\",\n border: \"#E5DFD2\",\n borderStrong: \"#C6BFB0\",\n },\n font: { primary: \"'Playfair Display', Georgia, serif\" },\n ui: { radius: 12, density: \"spacious\" },\n}\n\nconst sunsetPreset: ThemeInput = {\n mode: \"light\",\n personality: \"soft\",\n color: {\n primary: \"#F97316\",\n background: \"#FFF8F2\",\n surface: \"#FFFFFF\",\n text: \"#2B1E17\",\n textMuted: \"#8B6E5A\",\n border: \"#F5DFC7\",\n borderStrong: \"#E9C29A\",\n },\n font: { primary: \"'Nunito', system-ui, sans-serif\" },\n ui: { radius: 16, density: \"comfortable\" },\n}\n\nconst nordicPreset: ThemeInput = {\n mode: \"light\",\n personality: \"outlined\",\n color: {\n primary: \"#475569\",\n background: \"#F1F5F9\",\n surface: \"#F8FAFC\",\n text: \"#0F172A\",\n textMuted: \"#64748B\",\n border: \"#CBD5E1\",\n borderStrong: \"#94A3B8\",\n },\n font: { primary: \"'Fira Code', ui-monospace, monospace\" },\n ui: { radius: 2, density: \"compact\" },\n}\n\nconst themePresets: readonly ThemeInput[] = [\n marwesPreset,\n cyberPreset,\n editorialPreset,\n sunsetPreset,\n nordicPreset,\n]\n\nexport { cyberPreset, editorialPreset, marwesPreset, nordicPreset, sunsetPreset, themePresets }\n","import type { ThemeInput } from \"@marwes-ui/core\"\nimport \"@fontsource/instrument-sans/400.css\"\nimport \"@fontsource/instrument-sans/500.css\"\nimport \"@fontsource/instrument-sans/600.css\"\nimport \"@fontsource/instrument-sans/700.css\"\n\nexport {\n cyberPreset,\n editorialPreset,\n marwesPreset,\n nordicPreset,\n sunsetPreset,\n themePresets,\n} from \"./presets\"\n\n// Explicit ThemeInput for consumers that still want to import the preset object.\n// MarwesProvider uses the same first edition baseline when no theme is provided.\nexport const firstEditionTheme: ThemeInput = {\n color: {\n primary: {\n base: \"#2F31FC\",\n hover: \"#2527CA\",\n pressed: \"#1B1D97\",\n disabled: \"#8182FC\",\n label: \"#FFFFFF\",\n labelDisabled: \"rgba(255,255,255,0.5)\",\n },\n danger: {\n base: \"#D90429\",\n hover: \"#A8031F\",\n pressed: \"#780215\",\n disabled: \"#FF8A95\",\n label: \"#FFFFFF\",\n labelDisabled: \"rgba(255,255,255,0.5)\",\n },\n success: \"#006633\",\n warning: \"#B45309\",\n background: \"#FFFFFF\",\n surface: \"#F8F8F8\",\n surfaceSubtle: \"#F5F5F5\",\n surfaceElevated: \"#FFFFFF\",\n surfaceDisabled: \"#F5F5F5\",\n surfaceInverted: \"#141414\",\n text: \"#141414\",\n textMuted: \"#595959\",\n textSubtle: \"#737373\",\n textDisabled: \"#737373\",\n textInverted: \"#FFFFFF\",\n border: \"#D8D8D8\",\n borderSubtle: \"#D8D8D8\",\n borderStrong: \"#A3A3A3\",\n borderDisabled: \"#D8D8D8\",\n focus: \"#2F31FC\",\n },\n font: { primary: \"'Instrument Sans', Inter, system-ui, sans-serif\" },\n ui: { radius: 4, density: \"comfortable\" },\n}\n"]}
@@ -1,5 +1,22 @@
1
1
  import { ThemeInput } from '@marwes-ui/core';
2
2
 
3
+ /**
4
+ * Curated preset themes shipped with the firstEdition CSS. Each preset is a
5
+ * `ThemeInput` — pass it directly to `<MarwesProvider theme={cyberPreset}>`
6
+ * or spread it into a larger theme. The `personality` field maps to the
7
+ * matching CSS signature block in `personality.css`.
8
+ *
9
+ * Presets do not include font imports. The consumer app must load fonts
10
+ * separately (e.g. via Fontsource) when a preset references a non-default
11
+ * font family.
12
+ */
13
+ declare const marwesPreset: ThemeInput;
14
+ declare const cyberPreset: ThemeInput;
15
+ declare const editorialPreset: ThemeInput;
16
+ declare const sunsetPreset: ThemeInput;
17
+ declare const nordicPreset: ThemeInput;
18
+ declare const themePresets: readonly ThemeInput[];
19
+
3
20
  declare const firstEditionTheme: ThemeInput;
4
21
 
5
- export { firstEditionTheme };
22
+ export { cyberPreset, editorialPreset, firstEditionTheme, marwesPreset, nordicPreset, sunsetPreset, themePresets };
@@ -1,3 +1,3 @@
1
- export { firstEditionTheme } from '../chunk-62D3F6GN.js';
1
+ export { cyberPreset, editorialPreset, firstEditionTheme, marwesPreset, nordicPreset, sunsetPreset, themePresets } from '../chunk-PWG4S55U.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { firstEditionTheme } from './firstEdition/index.js';
1
+ export { cyberPreset, editorialPreset, firstEditionTheme, marwesPreset, nordicPreset, sunsetPreset, themePresets } from './firstEdition/index.js';
2
2
  export { ThemeInput } from '@marwes-ui/core';
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { firstEditionTheme } from './chunk-62D3F6GN.js';
1
+ export { cyberPreset, editorialPreset, firstEditionTheme, marwesPreset, nordicPreset, sunsetPreset, themePresets } from './chunk-PWG4S55U.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marwes-ui/presets",
3
- "version": "1.2.0",
3
+ "version": "1.4.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -30,13 +30,13 @@
30
30
  ],
31
31
  "dependencies": {
32
32
  "@fontsource/instrument-sans": "5.2.8",
33
- "@marwes-ui/core": "1.2.0"
33
+ "@marwes-ui/core": "1.4.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "rimraf": "6.1.2",
37
37
  "tsup": "8.5.1",
38
38
  "typescript": "5.9.3",
39
- "vitest": "4.0.18"
39
+ "vitest": "4.1.8"
40
40
  },
41
41
  "scripts": {
42
42
  "dev": "tsup --watch",
@@ -12,7 +12,8 @@
12
12
  * border #d8d8d8
13
13
  * focus border #2f31fc
14
14
  * title #141414
15
- * icon/content #595959
15
+ * icon #141414
16
+ * content #00000099
16
17
  * disabled text #737373
17
18
  *
18
19
  * Dark state colors:
@@ -22,32 +23,36 @@
22
23
  * border #474747
23
24
  * focus border #5859fc
24
25
  * title #f9fafb
25
- * icon/content #a3a3a3
26
+ * icon #f9fafb
27
+ * content #ffffff99
26
28
  * disabled text #595959
27
29
  */
28
30
 
29
31
  .mw-accordion {
30
32
  --mw-accordion-title: var(--mw-color-text);
31
- --mw-accordion-icon: var(--mw-color-text-muted);
32
- --mw-accordion-content: var(--mw-color-text-muted);
33
- --mw-accordion-surface: var(--mw-color-surface-elevated);
33
+ --mw-accordion-icon: var(--mw-accordion-title);
34
+ --mw-accordion-content: color-mix(in srgb, var(--mw-color-text) 60%, transparent);
35
+ --mw-accordion-surface: var(--mw-color-surface-primary);
34
36
  --mw-accordion-surface-hover: var(--mw-color-surface-subtle);
35
37
  --mw-accordion-surface-pressed: var(--mw-color-border-subtle);
36
- --mw-accordion-border: var(--mw-color-border-subtle);
38
+ --mw-accordion-border: var(--mw-color-border-low);
37
39
  --mw-accordion-focus-border: var(--mw-color-focus, #2f31fc);
38
40
  --mw-accordion-title-disabled: var(--mw-color-text-disabled);
39
41
  --mw-accordion-icon-disabled: var(--mw-color-text-disabled);
40
42
  --mw-accordion-content-disabled: var(--mw-color-text-disabled);
41
43
 
44
+ box-sizing: border-box;
42
45
  width: 100%;
43
46
  background: var(--mw-accordion-surface);
44
47
  border: 1px solid var(--mw-accordion-border);
45
48
  border-radius: var(--mw-ui-radius, 6px);
49
+ -webkit-font-smoothing: antialiased;
46
50
  overflow: hidden;
47
51
  transition: background-color 150ms ease, border-color 150ms ease;
48
52
  }
49
53
 
50
54
  .mw-accordion__trigger {
55
+ box-sizing: border-box;
51
56
  display: flex;
52
57
  align-items: center;
53
58
  justify-content: space-between;
@@ -66,6 +71,7 @@
66
71
  font-size: var(--mw-density-font-size, 14px);
67
72
  font-weight: 500;
68
73
  line-height: 16px;
74
+ letter-spacing: var(--mw-typography-text-label-letter-spacing, -0.42px);
69
75
  color: var(--mw-accordion-title);
70
76
  }
71
77
 
@@ -87,7 +93,7 @@
87
93
  }
88
94
 
89
95
  .mw-accordion--open .mw-accordion__icon {
90
- transform: rotate(180deg);
96
+ transform: none;
91
97
  }
92
98
 
93
99
  .mw-accordion:not(.mw-accordion--disabled):hover {
@@ -108,10 +114,13 @@
108
114
  }
109
115
 
110
116
  .mw-accordion__content {
117
+ box-sizing: border-box;
111
118
  padding: 0 16px 16px;
112
119
  font-family: var(--mw-font-primary, inherit);
113
120
  font-size: var(--mw-density-font-size, 14px);
114
- line-height: 20px;
121
+ font-weight: 400;
122
+ line-height: 24px;
123
+ letter-spacing: var(--mw-typography-text-label-letter-spacing, -0.42px);
115
124
  color: var(--mw-accordion-content);
116
125
  }
117
126
 
@@ -125,14 +134,18 @@
125
134
  cursor: not-allowed;
126
135
  }
127
136
 
137
+ .mw-accordion--error .mw-accordion__title {
138
+ color: var(--mw-color-status-error-text);
139
+ }
140
+
128
141
  .mw-theme--dark .mw-accordion {
129
142
  --mw-accordion-title: var(--mw-color-text);
130
- --mw-accordion-icon: var(--mw-color-text-muted);
131
- --mw-accordion-content: var(--mw-color-text-muted);
132
- --mw-accordion-surface: var(--mw-color-surface-elevated);
143
+ --mw-accordion-icon: var(--mw-accordion-title);
144
+ --mw-accordion-content: color-mix(in srgb, var(--mw-color-text) 60%, transparent);
145
+ --mw-accordion-surface: var(--mw-color-surface-primary, #0f0f0f);
133
146
  --mw-accordion-surface-hover: var(--mw-color-surface-subtle);
134
147
  --mw-accordion-surface-pressed: var(--mw-color-border);
135
- --mw-accordion-border: var(--mw-color-border-subtle);
148
+ --mw-accordion-border: var(--mw-color-border-low);
136
149
  --mw-accordion-focus-border: var(--mw-color-focus, #5859fc);
137
150
  --mw-accordion-title-disabled: var(--mw-color-text-disabled);
138
151
  --mw-accordion-icon-disabled: var(--mw-color-text-disabled);
@@ -2,6 +2,8 @@
2
2
  * Avatar component styles
3
3
  * Figma refs:
4
4
  * - .figma/marwes/components/avatar.json
5
+ * - .figma/marwes/components/avatar-badge.json
6
+ * - .figma/marwes/components/avatar-group.json
5
7
  * - .figma/marwes/pages/-avatar/-avatar_1574-27460.json
6
8
  * - .figma/marwes/pages/-avatar/-avatar-dark_1574-27570.json
7
9
  *
@@ -68,9 +70,13 @@
68
70
  }
69
71
 
70
72
  .mw-avatar--icon {
71
- --mw-avatar-surface: var(--mw-color-surface-elevated);
73
+ --mw-avatar-surface: var(--mw-color-surface-primary, #ffffff);
72
74
  --mw-avatar-border-width: 1px;
73
- --mw-avatar-border-color: var(--mw-color-border);
75
+ --mw-avatar-border-color: color-mix(
76
+ in srgb,
77
+ var(--mw-color-border-full, #000000) 20%,
78
+ transparent
79
+ );
74
80
  --mw-avatar-label: var(--mw-color-text-muted);
75
81
  }
76
82
 
@@ -105,15 +111,19 @@
105
111
  }
106
112
 
107
113
  .mw-theme--dark .mw-avatar--icon {
108
- --mw-avatar-surface: var(--mw-color-surface-elevated);
109
- --mw-avatar-border-color: var(--mw-color-border);
114
+ --mw-avatar-surface: var(--mw-color-surface-elevated, #2b2b2b);
115
+ --mw-avatar-border-color: color-mix(
116
+ in srgb,
117
+ var(--mw-color-border-full, #ffffff) 30%,
118
+ transparent
119
+ );
110
120
  --mw-avatar-label: var(--mw-color-text-muted);
111
121
  }
112
122
 
113
123
  .mw-theme--dark .mw-avatar--image {
114
124
  --mw-avatar-surface: var(--mw-color-surface-elevated);
115
125
  --mw-avatar-border-color: var(--mw-color-border-subtle);
116
- --mw-avatar-image-fallback: var(--mw-color-primary-disabled);
126
+ --mw-avatar-image-fallback: var(--mw-color-primary-base, #5859fc);
117
127
  }
118
128
 
119
129
  .mw-avatar-badge {
@@ -152,10 +162,11 @@
152
162
 
153
163
  .mw-avatar-group {
154
164
  --mw-avatar-group-overlap: 12px;
155
- --mw-avatar-group-stroke: var(--mw-color-surface, #f9fafb);
156
- --mw-avatar-group-stroke-width: 2.5px;
157
- --mw-avatar-group-counter-surface: var(--mw-color-surface, #f9fafb);
158
- --mw-avatar-group-counter-label: var(--mw-color-text-muted);
165
+ --mw-avatar-group-stroke: var(--mw-color-surface-elevated, #ffffff);
166
+ --mw-avatar-group-stroke-width: 2px;
167
+ --mw-avatar-group-counter-surface: var(--mw-color-surface-inverted, #141414);
168
+ --mw-avatar-group-counter-stroke: var(--mw-avatar-group-stroke);
169
+ --mw-avatar-group-counter-label: var(--mw-color-text-inverted, #ffffff);
159
170
 
160
171
  min-inline-size: 0;
161
172
  display: inline-flex;
@@ -179,6 +190,12 @@
179
190
  box-shadow: 0 0 0 var(--mw-avatar-group-stroke-width) var(--mw-avatar-group-stroke);
180
191
  }
181
192
 
193
+ .mw-avatar-group__item > .mw-avatar--icon {
194
+ --mw-avatar-surface: var(--mw-color-surface, #f8f8f8);
195
+ --mw-avatar-border-width: 0px;
196
+ --mw-avatar-border-color: transparent;
197
+ }
198
+
182
199
  .mw-avatar-group__counter {
183
200
  display: inline-flex;
184
201
  align-items: center;
@@ -187,18 +204,19 @@
187
204
  height: 40px;
188
205
  border-radius: 9999px;
189
206
  background: var(--mw-avatar-group-counter-surface);
190
- box-shadow: 0 0 0 var(--mw-avatar-group-stroke-width) var(--mw-avatar-group-counter-surface);
207
+ box-shadow: 0 0 0 var(--mw-avatar-group-stroke-width) var(--mw-avatar-group-counter-stroke);
191
208
  color: var(--mw-avatar-group-counter-label);
192
209
  font-family: var(--mw-font-primary, inherit);
193
210
  font-size: 12px;
194
211
  font-weight: 500;
195
- line-height: 16px;
212
+ line-height: 12px;
196
213
  letter-spacing: -0.36px;
197
214
  box-sizing: border-box;
198
215
  }
199
216
 
200
217
  .mw-theme--dark .mw-avatar-group {
201
- --mw-avatar-group-stroke: var(--mw-color-surface, #141414);
202
- --mw-avatar-group-counter-surface: var(--mw-color-surface, #141414);
203
- --mw-avatar-group-counter-label: var(--mw-color-text-muted);
218
+ --mw-avatar-group-stroke: var(--mw-avatar-group-dark-stroke, #000000);
219
+ --mw-avatar-group-counter-surface: var(--mw-color-surface-inverted, #ffffff);
220
+ --mw-avatar-group-counter-stroke: var(--mw-avatar-group-stroke);
221
+ --mw-avatar-group-counter-label: var(--mw-color-text-inverted, #141414);
204
222
  }
@@ -1,13 +1,12 @@
1
1
  /*
2
2
  * Badge Component Styles
3
3
  * Validated against:
4
- * - .figma/marwes/components/checkboxbadge.json
4
+ * - .figma/marwes/components/badge.json
5
5
  * - .figma/marwes/pages/-badge/-badge_1364-11603.json
6
6
  * - .figma/marwes/pages/-badge/-badge-dark_2276-56582.json
7
7
  * - .figma/marwes/pages/-badge/component-container_1369-6125.json
8
8
  *
9
- * The live sync uses exact semantic badge tones rather than generic color-mix()
10
- * derivations, especially for the remaining semantic tones and dark-mode surfaces.
9
+ * The live sync follows status-display/* bindings in Figma.
11
10
  */
12
11
 
13
12
  .mw-badge {
@@ -38,49 +37,33 @@
38
37
  ============================================ */
39
38
 
40
39
  .mw-badge--neutral {
41
- --mw-badge-surface: var(--mw-color-surface-subtle);
42
- --mw-badge-border: var(--mw-color-border-subtle);
43
- --mw-badge-label: var(--mw-color-text-muted);
40
+ --mw-badge-surface: var(--mw-color-surface-primary, #ffffff);
41
+ --mw-badge-border: var(--mw-color-border-low, #00000026);
42
+ --mw-badge-label: var(--mw-color-text-muted, #595959);
44
43
  }
45
44
 
46
45
  .mw-badge--info {
47
- --mw-badge-surface: color-mix(in srgb, var(--mw-color-info-base) 12%, var(--mw-color-surface));
48
- --mw-badge-border: color-mix(
49
- in srgb,
50
- var(--mw-color-info-base) 45%,
51
- var(--mw-color-border-subtle)
52
- );
53
- --mw-badge-label: var(--mw-color-info-base);
46
+ --mw-badge-surface: var(--mw-color-status-info-background, #eeeeff);
47
+ --mw-badge-border: var(--mw-color-status-info-border, #ababfd);
48
+ --mw-badge-label: var(--mw-color-status-info-text, #1b1d97);
54
49
  }
55
50
 
56
51
  .mw-badge--success {
57
- --mw-badge-surface: color-mix(in srgb, var(--mw-color-success-base) 12%, var(--mw-color-surface));
58
- --mw-badge-border: color-mix(
59
- in srgb,
60
- var(--mw-color-success-base) 45%,
61
- var(--mw-color-border-subtle)
62
- );
63
- --mw-badge-label: var(--mw-color-success-base);
52
+ --mw-badge-surface: var(--mw-color-status-success-background, #e6f4ed);
53
+ --mw-badge-border: var(--mw-color-status-success-border, #90caad);
54
+ --mw-badge-label: var(--mw-color-status-success-text, #006633);
64
55
  }
65
56
 
66
57
  .mw-badge--warning {
67
- --mw-badge-surface: color-mix(in srgb, var(--mw-color-warning-base) 16%, var(--mw-color-surface));
68
- --mw-badge-border: color-mix(
69
- in srgb,
70
- var(--mw-color-warning-base) 50%,
71
- var(--mw-color-border-subtle)
72
- );
73
- --mw-badge-label: color-mix(in srgb, var(--mw-color-warning-base) 80%, var(--mw-color-text));
58
+ --mw-badge-surface: var(--mw-color-status-warning-background, #fff8e6);
59
+ --mw-badge-border: var(--mw-color-status-warning-border, #b45309);
60
+ --mw-badge-label: var(--mw-color-status-warning-text, #b45309);
74
61
  }
75
62
 
76
63
  .mw-badge--error {
77
- --mw-badge-surface: color-mix(in srgb, var(--mw-color-danger-base) 12%, var(--mw-color-surface));
78
- --mw-badge-border: color-mix(
79
- in srgb,
80
- var(--mw-color-danger-base) 45%,
81
- var(--mw-color-border-subtle)
82
- );
83
- --mw-badge-label: color-mix(in srgb, var(--mw-color-danger-base) 80%, var(--mw-color-text));
64
+ --mw-badge-surface: var(--mw-color-status-error-background, #ffe8eb);
65
+ --mw-badge-border: var(--mw-color-status-error-border, #ff8a95);
66
+ --mw-badge-label: var(--mw-color-status-error-text, #a8031f);
84
67
  }
85
68
 
86
69
  /* ============================================
@@ -88,52 +71,40 @@
88
71
  ============================================ */
89
72
 
90
73
  .mw-theme--dark .mw-badge--neutral {
91
- --mw-badge-surface: var(--mw-color-surface-subtle);
92
- --mw-badge-border: var(--mw-color-border-subtle);
74
+ --mw-badge-surface: var(--mw-color-surface-primary);
75
+ --mw-badge-border: var(--mw-color-border-low, #ffffff26);
93
76
  --mw-badge-label: var(--mw-color-text-muted);
94
77
  }
95
78
 
96
79
  .mw-theme--dark .mw-badge--info {
97
- --mw-badge-surface: color-mix(in srgb, var(--mw-color-info-base) 18%, var(--mw-color-surface));
98
- --mw-badge-border: color-mix(
99
- in srgb,
100
- var(--mw-color-info-base) 55%,
101
- var(--mw-color-border-subtle)
102
- );
103
- --mw-badge-label: color-mix(in srgb, var(--mw-color-info-base) 80%, var(--mw-color-text));
80
+ --mw-badge-surface: var(--mw-color-status-info-background, #040519);
81
+ --mw-badge-border: var(--mw-color-status-info-border, #8182fc);
82
+ --mw-badge-label: var(--mw-color-status-info-text, #ababfd);
104
83
  }
105
84
 
106
85
  .mw-theme--dark .mw-badge--success {
107
- --mw-badge-surface: color-mix(in srgb, var(--mw-color-success-base) 18%, var(--mw-color-surface));
108
- --mw-badge-border: color-mix(
109
- in srgb,
110
- var(--mw-color-success-base) 55%,
111
- var(--mw-color-border-subtle)
112
- );
113
- --mw-badge-label: var(--mw-color-success-base);
86
+ --mw-badge-surface: var(--mw-color-status-success-background, #001a0c);
87
+ --mw-badge-border: var(--mw-color-status-success-border, #5db189);
88
+ --mw-badge-label: var(--mw-color-status-success-text, #90caad);
114
89
  }
115
90
 
116
91
  .mw-theme--dark .mw-badge--warning {
117
- --mw-badge-surface: color-mix(in srgb, var(--mw-color-warning-base) 20%, var(--mw-color-surface));
118
- --mw-badge-border: color-mix(
119
- in srgb,
120
- var(--mw-color-warning-base) 60%,
121
- var(--mw-color-border-subtle)
122
- );
123
- --mw-badge-label: var(--mw-color-warning-base);
92
+ --mw-badge-surface: var(--mw-color-status-warning-background, #221004);
93
+ --mw-badge-border: var(--mw-color-status-warning-border, #b45309);
94
+ --mw-badge-label: var(--mw-color-status-warning-text, #fcc94a);
124
95
  }
125
96
 
126
97
  .mw-theme--dark .mw-badge--error {
127
- --mw-badge-surface: color-mix(in srgb, var(--mw-color-danger-base) 18%, var(--mw-color-surface));
128
- --mw-badge-border: color-mix(
129
- in srgb,
130
- var(--mw-color-danger-base) 55%,
131
- var(--mw-color-border-subtle)
132
- );
133
- --mw-badge-label: color-mix(in srgb, var(--mw-color-danger-base) 70%, var(--mw-color-text));
98
+ --mw-badge-surface: var(--mw-color-status-error-background, #240006);
99
+ --mw-badge-border: var(--mw-color-status-error-border, #ff2847);
100
+ --mw-badge-label: var(--mw-color-status-error-text, #ff5566);
134
101
  }
135
102
 
136
103
  .mw-badge-group__items {
137
104
  display: inline-flex;
138
105
  gap: var(--mw-spacing-sp-4);
139
106
  }
107
+
108
+ .mw-badge-group__label .mw-text {
109
+ color: inherit;
110
+ }