@marwes-ui/presets 1.3.0 → 1.4.1

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 (57) 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 +20 -6
  11. package/src/firstEdition/badge.css +18 -15
  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 +1 -1
  48. package/src/firstEdition/styles.css +20 -0
  49. package/src/firstEdition/switch.css +4 -4
  50. package/src/firstEdition/tab.css +4 -4
  51. package/src/firstEdition/textarea.css +9 -6
  52. package/src/firstEdition/toast.css +25 -25
  53. package/src/firstEdition/tokens.css +6 -5
  54. package/src/firstEdition/tooltip.css +5 -5
  55. package/src/firstEdition/typography.css +21 -0
  56. package/dist/chunk-62D3F6GN.js +0 -49
  57. 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":"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","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.3.0",
3
+ "version": "1.4.1",
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.3.0"
33
+ "@marwes-ui/core": "1.4.1"
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-background, #0f0f0f);
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);
@@ -70,9 +70,13 @@
70
70
  }
71
71
 
72
72
  .mw-avatar--icon {
73
- --mw-avatar-surface: var(--mw-color-surface, #f8f8f8);
74
- --mw-avatar-border-width: 0px;
75
- --mw-avatar-border-color: transparent;
73
+ --mw-avatar-surface: var(--mw-color-surface-primary, #ffffff);
74
+ --mw-avatar-border-width: 1px;
75
+ --mw-avatar-border-color: color-mix(
76
+ in srgb,
77
+ var(--mw-color-border-full, #000000) 20%,
78
+ transparent
79
+ );
76
80
  --mw-avatar-label: var(--mw-color-text-muted);
77
81
  }
78
82
 
@@ -107,15 +111,19 @@
107
111
  }
108
112
 
109
113
  .mw-theme--dark .mw-avatar--icon {
110
- --mw-avatar-surface: var(--mw-color-surface, #1a1a1a);
111
- --mw-avatar-border-color: transparent;
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
+ );
112
120
  --mw-avatar-label: var(--mw-color-text-muted);
113
121
  }
114
122
 
115
123
  .mw-theme--dark .mw-avatar--image {
116
124
  --mw-avatar-surface: var(--mw-color-surface-elevated);
117
125
  --mw-avatar-border-color: var(--mw-color-border-subtle);
118
- --mw-avatar-image-fallback: var(--mw-color-primary-disabled);
126
+ --mw-avatar-image-fallback: var(--mw-color-primary-base, #5859fc);
119
127
  }
120
128
 
121
129
  .mw-avatar-badge {
@@ -182,6 +190,12 @@
182
190
  box-shadow: 0 0 0 var(--mw-avatar-group-stroke-width) var(--mw-avatar-group-stroke);
183
191
  }
184
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
+
185
199
  .mw-avatar-group__counter {
186
200
  display: inline-flex;
187
201
  align-items: center;
@@ -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,32 +37,32 @@
38
37
  ============================================ */
39
38
 
40
39
  .mw-badge--neutral {
41
- --mw-badge-surface: var(--mw-color-surface-subtle, #f5f5f5);
42
- --mw-badge-border: var(--mw-color-border-subtle, #d8d8d8);
40
+ --mw-badge-surface: var(--mw-color-surface-primary, #ffffff);
41
+ --mw-badge-border: var(--mw-color-border-low, #00000026);
43
42
  --mw-badge-label: var(--mw-color-text-muted, #595959);
44
43
  }
45
44
 
46
45
  .mw-badge--info {
47
46
  --mw-badge-surface: var(--mw-color-status-info-background, #eeeeff);
48
- --mw-badge-border: var(--mw-color-status-info-border-strong, #5859fc);
47
+ --mw-badge-border: var(--mw-color-status-info-border, #ababfd);
49
48
  --mw-badge-label: var(--mw-color-status-info-text, #1b1d97);
50
49
  }
51
50
 
52
51
  .mw-badge--success {
53
52
  --mw-badge-surface: var(--mw-color-status-success-background, #e6f4ed);
54
- --mw-badge-border: var(--mw-color-status-success-border-strong, #2e9970);
53
+ --mw-badge-border: var(--mw-color-status-success-border, #90caad);
55
54
  --mw-badge-label: var(--mw-color-status-success-text, #006633);
56
55
  }
57
56
 
58
57
  .mw-badge--warning {
59
58
  --mw-badge-surface: var(--mw-color-status-warning-background, #fff8e6);
60
- --mw-badge-border: var(--mw-color-status-warning-border-strong, #e46f00);
59
+ --mw-badge-border: var(--mw-color-status-warning-border, #b45309);
61
60
  --mw-badge-label: var(--mw-color-status-warning-text, #b45309);
62
61
  }
63
62
 
64
63
  .mw-badge--error {
65
64
  --mw-badge-surface: var(--mw-color-status-error-background, #ffe8eb);
66
- --mw-badge-border: var(--mw-color-status-error-border-strong, #ff2847);
65
+ --mw-badge-border: var(--mw-color-status-error-border, #ff8a95);
67
66
  --mw-badge-label: var(--mw-color-status-error-text, #a8031f);
68
67
  }
69
68
 
@@ -72,32 +71,32 @@
72
71
  ============================================ */
73
72
 
74
73
  .mw-theme--dark .mw-badge--neutral {
75
- --mw-badge-surface: var(--mw-color-surface-subtle);
76
- --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);
77
76
  --mw-badge-label: var(--mw-color-text-muted);
78
77
  }
79
78
 
80
79
  .mw-theme--dark .mw-badge--info {
81
80
  --mw-badge-surface: var(--mw-color-status-info-background, #040519);
82
- --mw-badge-border: var(--mw-color-status-info-border-strong, #252599);
81
+ --mw-badge-border: var(--mw-color-status-info-border, #8182fc);
83
82
  --mw-badge-label: var(--mw-color-status-info-text, #ababfd);
84
83
  }
85
84
 
86
85
  .mw-theme--dark .mw-badge--success {
87
86
  --mw-badge-surface: var(--mw-color-status-success-background, #001a0c);
88
- --mw-badge-border: var(--mw-color-status-success-border-strong, #006d48);
87
+ --mw-badge-border: var(--mw-color-status-success-border, #5db189);
89
88
  --mw-badge-label: var(--mw-color-status-success-text, #90caad);
90
89
  }
91
90
 
92
91
  .mw-theme--dark .mw-badge--warning {
93
92
  --mw-badge-surface: var(--mw-color-status-warning-background, #221004);
94
- --mw-badge-border: var(--mw-color-status-warning-border-strong, #b45308);
93
+ --mw-badge-border: var(--mw-color-status-warning-border, #b45309);
95
94
  --mw-badge-label: var(--mw-color-status-warning-text, #fcc94a);
96
95
  }
97
96
 
98
97
  .mw-theme--dark .mw-badge--error {
99
98
  --mw-badge-surface: var(--mw-color-status-error-background, #240006);
100
- --mw-badge-border: var(--mw-color-status-error-border-strong, #ff2847);
99
+ --mw-badge-border: var(--mw-color-status-error-border, #ff2847);
101
100
  --mw-badge-label: var(--mw-color-status-error-text, #ff5566);
102
101
  }
103
102
 
@@ -105,3 +104,7 @@
105
104
  display: inline-flex;
106
105
  gap: var(--mw-spacing-sp-4);
107
106
  }
107
+
108
+ .mw-badge-group__label .mw-text {
109
+ color: inherit;
110
+ }