@keenmate/web-components-devkit 0.0.0-stage → 1.0.0-rc01

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 (109) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/LICENSE +21 -0
  3. package/README.md +417 -2
  4. package/components.json +189 -0
  5. package/package.json +75 -4
  6. package/src/cli/args.js +16 -0
  7. package/src/cli/commands/check-release.js +66 -0
  8. package/src/cli/commands/check-vars.js +116 -0
  9. package/src/cli/commands/doctor.js +289 -0
  10. package/src/cli/commands/new.js +302 -0
  11. package/src/cli/commands/readme.js +111 -0
  12. package/src/cli/commands/sync.js +48 -0
  13. package/src/cli/kmwc.js +72 -0
  14. package/src/cli/sync-plan.js +163 -0
  15. package/src/config.d.ts +147 -0
  16. package/src/config.js +257 -0
  17. package/src/examples/auto.js +20 -0
  18. package/src/examples/chapter-nav.js +246 -0
  19. package/src/examples/constants.js +80 -0
  20. package/src/examples/controls-persistence.js +97 -0
  21. package/src/examples/copy-link.js +89 -0
  22. package/src/examples/css/base.css +215 -0
  23. package/src/examples/css/chapter-nav.css +179 -0
  24. package/src/examples/css/content.css +251 -0
  25. package/src/examples/css/controls.css +205 -0
  26. package/src/examples/css/copy-link.css +82 -0
  27. package/src/examples/css/demo.css +50 -0
  28. package/src/examples/css/index-page.css +118 -0
  29. package/src/examples/css/style.css +30 -0
  30. package/src/examples/css/theme-switch.css +38 -0
  31. package/src/examples/css/tokens.css +110 -0
  32. package/src/examples/css/widgets.css +133 -0
  33. package/src/examples/demo-code.js +30 -0
  34. package/src/examples/index-page.js +78 -0
  35. package/src/examples/index.d.ts +107 -0
  36. package/src/examples/index.js +18 -0
  37. package/src/examples/kit.js +22 -0
  38. package/src/examples/page-config.js +30 -0
  39. package/src/examples/sections.js +53 -0
  40. package/src/examples/theme-switch.js +72 -0
  41. package/src/examples/version-badge.js +23 -0
  42. package/src/playwright/index.d.ts +15 -0
  43. package/src/playwright/index.js +66 -0
  44. package/src/template.js +11 -0
  45. package/src/vite/index.d.ts +28 -0
  46. package/src/vite/index.js +243 -0
  47. package/src/vite/page-composer.js +209 -0
  48. package/templates/Dockerfile.tmpl +39 -0
  49. package/templates/Makefile.tmpl +136 -0
  50. package/templates/claude-block.md +40 -0
  51. package/templates/dockerignore.tmpl +10 -0
  52. package/templates/examples-layout.html +13 -0
  53. package/templates/new/.claude/commands/publish.md +226 -0
  54. package/templates/new/CHANGELOG.md +13 -0
  55. package/templates/new/LICENSE +21 -0
  56. package/templates/new/README.md +71 -0
  57. package/templates/new/_gitignore +7 -0
  58. package/templates/new/component-variables.manifest.json +32 -0
  59. package/templates/new/custom-elements-manifest.config.mjs +23 -0
  60. package/templates/new/docs/accessibility.md +24 -0
  61. package/templates/new/docs/examples.md +33 -0
  62. package/templates/new/docs/theming.md +54 -0
  63. package/templates/new/docs/usage.md +51 -0
  64. package/templates/new/e2e/dark-mode.spec.ts +30 -0
  65. package/templates/new/e2e/smoke.spec.ts +26 -0
  66. package/templates/new/examples-basic.html +57 -0
  67. package/templates/new/examples-theming.html +28 -0
  68. package/templates/new/index.html +16 -0
  69. package/templates/new/partials/note.html +5 -0
  70. package/templates/new/playwright.config.ts +4 -0
  71. package/templates/new/src/__FEATURE__.ts +55 -0
  72. package/templates/new/src/css/animations.css +1 -0
  73. package/templates/new/src/css/base.css +43 -0
  74. package/templates/new/src/css/controls.css +20 -0
  75. package/templates/new/src/css/dark-mode.css +36 -0
  76. package/templates/new/src/css/floating.css +1 -0
  77. package/templates/new/src/css/main.css +27 -0
  78. package/templates/new/src/css/states.css +22 -0
  79. package/templates/new/src/css/variables.css +40 -0
  80. package/templates/new/src/env.d.ts +7 -0
  81. package/templates/new/src/index.ts +17 -0
  82. package/templates/new/src/logger.ts +11 -0
  83. package/templates/new/src/types.ts +25 -0
  84. package/templates/new/src/web-component.ts +73 -0
  85. package/templates/new/test/dark-mode.html +18 -0
  86. package/templates/new/test/fixture.html +11 -0
  87. package/templates/new/tsconfig.json +15 -0
  88. package/templates/new/vite.config.ts +5 -0
  89. package/templates/new-minimal/CHANGELOG.md +13 -0
  90. package/templates/new-minimal/README.md +71 -0
  91. package/templates/new-minimal/component-variables.manifest.json +24 -0
  92. package/templates/new-minimal/docs/accessibility.md +20 -0
  93. package/templates/new-minimal/docs/examples.md +17 -0
  94. package/templates/new-minimal/docs/theming.md +53 -0
  95. package/templates/new-minimal/docs/usage.md +43 -0
  96. package/templates/new-minimal/e2e/smoke.spec.ts +10 -0
  97. package/templates/new-minimal/examples-basic.html +23 -0
  98. package/templates/new-minimal/examples-theming.html +28 -0
  99. package/templates/new-minimal/src/__FEATURE__.ts +37 -0
  100. package/templates/new-minimal/src/css/base.css +48 -0
  101. package/templates/new-minimal/src/css/controls.css +1 -0
  102. package/templates/new-minimal/src/css/states.css +1 -0
  103. package/templates/new-minimal/src/css/variables.css +26 -0
  104. package/templates/new-minimal/src/index.ts +17 -0
  105. package/templates/new-minimal/src/types.ts +10 -0
  106. package/templates/new-minimal/src/web-component.ts +48 -0
  107. package/templates/new-minimal/test/dark-mode.html +18 -0
  108. package/templates/new-minimal/test/fixture.html +11 -0
  109. package/templates/nginx.conf.tmpl +43 -0
@@ -0,0 +1,251 @@
1
+ /* ==============================================================================
2
+ EXAMPLES KIT — CONTENT
3
+ ==============================================================================
4
+ Output panels, code, notes, grids, reference tables, badges. */
5
+ @layer kmwc {
6
+ /* ==========================================================================
7
+ OUTPUT
8
+ ==========================================================================
9
+ Light `.output` panels; opt into the console look per page with
10
+ `class="dark-output"` on <body>. */
11
+ .output {
12
+ margin-top: 1rem;
13
+ }
14
+
15
+ .output-label {
16
+ font-weight: 500;
17
+ margin-bottom: 0.5rem;
18
+ color: var(--kmwc-text-color-2);
19
+ }
20
+
21
+ .output pre,
22
+ pre {
23
+ background: var(--kmwc-page-bg);
24
+ color: var(--kmwc-text-color-1);
25
+ padding: 1rem;
26
+ border-radius: var(--kmwc-radius-sm);
27
+ overflow-x: auto;
28
+ font-size: 0.875rem;
29
+ border: 1px solid var(--kmwc-border-color);
30
+ }
31
+
32
+ .dark-output .output {
33
+ background: var(--kmwc-code-bg);
34
+ color: var(--kmwc-console-muted-color);
35
+ padding: 1rem;
36
+ border-radius: var(--kmwc-radius-md);
37
+ margin-top: 1rem;
38
+ font-family: var(--kmwc-mono-font-family);
39
+ font-size: 0.875rem;
40
+ overflow-x: auto;
41
+ border: none;
42
+ }
43
+
44
+ .dark-output .output-label {
45
+ color: var(--kmwc-accent-color);
46
+ font-weight: 600;
47
+ margin-bottom: 0.5rem;
48
+ }
49
+
50
+ .dark-output .output pre {
51
+ margin: 0;
52
+ padding: 0;
53
+ border: none;
54
+ background: transparent;
55
+ color: inherit;
56
+ white-space: pre-wrap;
57
+ word-wrap: break-word;
58
+ }
59
+
60
+ /* ==========================================================================
61
+ CODE
62
+ ==========================================================================
63
+ The dark surface lives on `.code-block` itself, so it works whether a
64
+ page wraps code in <pre> or drops a bare <code> straight inside. */
65
+ .code-block {
66
+ margin: 1.5rem 0;
67
+ position: relative;
68
+ background: var(--kmwc-code-bg);
69
+ color: var(--kmwc-code-text-color);
70
+ padding: 1.5rem;
71
+ border-radius: var(--kmwc-radius-md);
72
+ overflow-x: auto;
73
+ font-family: var(--kmwc-mono-font-family);
74
+ font-size: 0.875rem;
75
+ line-height: 1.6;
76
+ }
77
+
78
+ .code-block pre {
79
+ margin: 0;
80
+ background: transparent;
81
+ padding: 0;
82
+ overflow-x: visible;
83
+ border: none;
84
+ color: inherit;
85
+ }
86
+
87
+ .code-block > code {
88
+ white-space: pre;
89
+ display: block;
90
+ }
91
+
92
+ .code-block .keyword { color: var(--kmwc-code-keyword-color); }
93
+ .code-block .string { color: var(--kmwc-code-string-color); }
94
+ .code-block .comment { color: var(--kmwc-code-comment-color); font-style: italic; }
95
+ .code-block .function { color: var(--kmwc-code-function-color); }
96
+ .code-block .property { color: var(--kmwc-code-property-color); }
97
+
98
+ .code-block .copy-button {
99
+ position: absolute;
100
+ top: 0.5rem;
101
+ right: 0.5rem;
102
+ padding: 0.25rem 0.75rem;
103
+ font-size: 0.75rem;
104
+ background: color-mix(in srgb, var(--kmwc-code-text-color) 10%, transparent);
105
+ color: var(--kmwc-code-text-color);
106
+ border: 1px solid color-mix(in srgb, var(--kmwc-code-text-color) 20%, transparent);
107
+ border-radius: 4px;
108
+ }
109
+
110
+ .code-block .copy-button:hover {
111
+ background: color-mix(in srgb, var(--kmwc-code-text-color) 20%, transparent);
112
+ }
113
+
114
+ code {
115
+ background: var(--kmwc-inline-code-bg);
116
+ padding: 0.2rem 0.4rem;
117
+ border-radius: 3px;
118
+ font-size: 0.9em;
119
+ color: var(--kmwc-accent-color);
120
+ font-family: var(--kmwc-mono-font-family);
121
+ }
122
+
123
+ pre code,
124
+ .code-block code,
125
+ .code-block pre code {
126
+ background: transparent;
127
+ padding: 0;
128
+ border-radius: 0;
129
+ color: inherit;
130
+ font-size: inherit;
131
+ }
132
+
133
+ /* ==========================================================================
134
+ NOTES
135
+ ========================================================================== */
136
+ .note {
137
+ --kmwc-note-color: var(--kmwc-accent-color);
138
+ background: color-mix(in srgb, var(--kmwc-note-color) 10%, transparent);
139
+ padding: 1rem;
140
+ border-radius: var(--kmwc-radius-sm);
141
+ border-left: 4px solid var(--kmwc-note-color);
142
+ margin: 1rem 0;
143
+ }
144
+
145
+ .note.warning { --kmwc-note-color: var(--kmwc-warning-color); }
146
+ .note.info { --kmwc-note-color: var(--kmwc-info-color); }
147
+ .note.success { --kmwc-note-color: var(--kmwc-success-color); }
148
+ .note.error { --kmwc-note-color: var(--kmwc-danger-color); }
149
+
150
+ .note-title {
151
+ font-weight: 600;
152
+ color: var(--kmwc-note-color);
153
+ margin-bottom: 0.5rem;
154
+ }
155
+
156
+ .note ul {
157
+ margin-left: 1.5rem;
158
+ margin-top: 0.5rem;
159
+ }
160
+
161
+ .note li {
162
+ margin-bottom: 0.5rem;
163
+ }
164
+
165
+ /* ==========================================================================
166
+ GRIDS
167
+ ==========================================================================
168
+ One auto-fit grid tuned by `--grid-min` / `--grid-gap`, e.g.
169
+ `<div class="card-grid" style="--grid-min: 240px">`. */
170
+ .grid,
171
+ .grid-2,
172
+ .card-grid {
173
+ display: grid;
174
+ grid-template-columns: repeat(auto-fit, minmax(var(--grid-min, 300px), 1fr));
175
+ gap: var(--grid-gap, 2rem);
176
+ }
177
+
178
+ .grid-2 {
179
+ --grid-min: 400px;
180
+ }
181
+
182
+ .col-span-full {
183
+ grid-column: 1 / -1;
184
+ }
185
+
186
+ /* ==========================================================================
187
+ REFERENCE TABLE & BADGES
188
+ ========================================================================== */
189
+ .reference-table {
190
+ width: 100%;
191
+ border-collapse: collapse;
192
+ font-size: 0.875rem;
193
+ margin-bottom: 2rem;
194
+ }
195
+
196
+ .reference-table th,
197
+ .reference-table td {
198
+ padding: 0.75rem 1rem;
199
+ text-align: left;
200
+ border: 1px solid var(--kmwc-border-color);
201
+ }
202
+
203
+ .reference-table th {
204
+ background: var(--kmwc-elevated-bg);
205
+ font-weight: 600;
206
+ }
207
+
208
+ .reference-table tbody tr:hover {
209
+ background: var(--kmwc-hover-bg);
210
+ }
211
+
212
+ .reference-table tr.is-highlight {
213
+ background: var(--kmwc-accent-light-bg);
214
+ }
215
+
216
+ .reference-table code {
217
+ padding: 0.125rem 0.375rem;
218
+ font-size: 0.75rem;
219
+ }
220
+
221
+ /* Section-header badge pill (e.g. a "NEW" tag beside an h2). */
222
+ .badge {
223
+ display: inline-block;
224
+ background: var(--kmwc-accent-color);
225
+ color: var(--kmwc-text-color-on-accent);
226
+ padding: 0.25rem 0.75rem;
227
+ border-radius: 12px;
228
+ font-size: 0.75rem;
229
+ font-weight: 600;
230
+ }
231
+
232
+ .badge.new {
233
+ background: var(--kmwc-badge-new-bg);
234
+ }
235
+
236
+ .muted {
237
+ color: var(--kmwc-text-color-3);
238
+ }
239
+
240
+ .mt-1 {
241
+ margin-top: 1rem;
242
+ }
243
+
244
+ @media (max-width: 768px) {
245
+ .grid,
246
+ .grid-2,
247
+ .card-grid {
248
+ grid-template-columns: 1fr;
249
+ }
250
+ }
251
+ }
@@ -0,0 +1,205 @@
1
+ /* ==============================================================================
2
+ EXAMPLES KIT — CONTROLS
3
+ ==============================================================================
4
+ Demo forms, the `.controls` switch rows, demo areas and buttons. */
5
+ @layer kmwc {
6
+ /* ==========================================================================
7
+ FORMS
8
+ ========================================================================== */
9
+ .form-group {
10
+ margin-bottom: 1.5rem;
11
+ }
12
+
13
+ .form-group label {
14
+ display: block;
15
+ margin-bottom: 0.5rem;
16
+ font-weight: 500;
17
+ color: var(--kmwc-text-color-1);
18
+ white-space: nowrap;
19
+ overflow: hidden;
20
+ text-overflow: ellipsis;
21
+ }
22
+
23
+ .form-text {
24
+ display: block;
25
+ margin-top: 0.25rem;
26
+ font-size: 0.875rem;
27
+ color: var(--kmwc-text-color-3);
28
+ }
29
+
30
+ /* Demo form panel — a soft card wrapping a live <form>; `.form-actions`
31
+ holds the submit/inspect buttons below a rule. */
32
+ form {
33
+ background: var(--kmwc-elevated-bg);
34
+ padding: 1.5rem;
35
+ border-radius: var(--kmwc-radius-md);
36
+ margin-top: 1rem;
37
+ }
38
+
39
+ .form-actions {
40
+ margin-top: 1rem;
41
+ padding-top: 1rem;
42
+ border-top: 1px solid var(--kmwc-border-color-strong);
43
+ }
44
+
45
+ /* ==========================================================================
46
+ CONTROL ROWS
47
+ ==========================================================================
48
+ `.controls` rows hold the switches that drive a demo; their values are
49
+ saved by attachControlsPersistence(). */
50
+ .controls {
51
+ display: flex;
52
+ flex-wrap: wrap;
53
+ gap: 0.75rem;
54
+ margin-bottom: 1.5rem;
55
+ align-items: center;
56
+ }
57
+
58
+ .controls label,
59
+ .toggle-label {
60
+ display: inline-flex;
61
+ align-items: center;
62
+ gap: 0.5rem;
63
+ cursor: pointer;
64
+ }
65
+
66
+ .toggle-label {
67
+ margin-bottom: 0.75rem;
68
+ }
69
+
70
+ .controls input[type="checkbox"] {
71
+ width: 16px;
72
+ height: 16px;
73
+ accent-color: var(--kmwc-accent-color);
74
+ }
75
+
76
+ .controls select,
77
+ .controls input[type="text"],
78
+ .controls input[type="number"],
79
+ .controls input[type="search"],
80
+ .control-group input,
81
+ .control-group select {
82
+ padding: 0.4rem 0.6rem;
83
+ border: var(--kmwc-input-border);
84
+ border-radius: var(--kmwc-radius-sm);
85
+ font-size: 0.875rem;
86
+ background: var(--kmwc-input-bg);
87
+ color: var(--kmwc-input-color);
88
+ }
89
+
90
+ /* Control group — a label stacked over an input/select; rows of them wrap
91
+ via `.control-row`. */
92
+ .control-row {
93
+ display: flex;
94
+ flex-wrap: wrap;
95
+ gap: 1rem;
96
+ align-items: flex-end;
97
+ margin-bottom: 1rem;
98
+ }
99
+
100
+ .control-group {
101
+ display: flex;
102
+ flex-direction: column;
103
+ gap: 0.25rem;
104
+ }
105
+
106
+ .control-group label {
107
+ font-size: 0.75rem;
108
+ color: var(--kmwc-text-color-2);
109
+ font-weight: 500;
110
+ }
111
+
112
+ .field-row {
113
+ display: flex;
114
+ gap: 0.5rem;
115
+ align-items: stretch;
116
+ flex-wrap: wrap;
117
+ }
118
+
119
+ .field-grow {
120
+ flex: 1;
121
+ }
122
+
123
+ /* ==========================================================================
124
+ DEMO AREAS
125
+ ========================================================================== */
126
+ .demo-area {
127
+ background: var(--kmwc-page-bg);
128
+ padding: 1.5rem;
129
+ border-radius: var(--kmwc-radius-md);
130
+ margin: 1rem 0;
131
+ }
132
+
133
+ .demo-label {
134
+ display: block;
135
+ font-weight: 600;
136
+ color: var(--kmwc-text-color-1);
137
+ margin-bottom: 0.5rem;
138
+ }
139
+
140
+ /* Trailing action buttons directly in a demo panel get top spacing; never
141
+ touches buttons nested in a `.controls` row. */
142
+ .demo-area > button {
143
+ margin-top: 1rem;
144
+ }
145
+
146
+ .demo-area > button + button {
147
+ margin-inline-start: 0.5rem;
148
+ }
149
+
150
+ /* ==========================================================================
151
+ BUTTONS
152
+ ========================================================================== */
153
+ button,
154
+ button.btn-primary {
155
+ cursor: pointer;
156
+ background: var(--kmwc-accent-color);
157
+ color: var(--kmwc-text-color-on-accent);
158
+ border: none;
159
+ padding: 0.5rem 1rem;
160
+ border-radius: var(--kmwc-radius-sm);
161
+ font-size: 0.875rem;
162
+ transition: background 0.2s;
163
+ }
164
+
165
+ button:hover,
166
+ button.btn-primary:hover {
167
+ background: var(--kmwc-accent-color-hover);
168
+ }
169
+
170
+ button:disabled,
171
+ button[disabled] {
172
+ opacity: 0.5;
173
+ cursor: not-allowed;
174
+ }
175
+
176
+ button.secondary,
177
+ button.btn-secondary {
178
+ background: var(--kmwc-neutral-color);
179
+ color: var(--kmwc-text-color-on-accent);
180
+ }
181
+
182
+ button.secondary:hover,
183
+ button.btn-secondary:hover {
184
+ background: color-mix(in srgb, var(--kmwc-neutral-color) 80%, black);
185
+ }
186
+
187
+ button.btn-outline {
188
+ background: var(--kmwc-main-bg);
189
+ color: var(--kmwc-text-color-1);
190
+ border: 1px solid var(--kmwc-border-color-strong);
191
+ }
192
+
193
+ button.btn-outline:hover {
194
+ background: var(--kmwc-hover-bg);
195
+ }
196
+
197
+ button.btn-danger {
198
+ background: var(--kmwc-danger-color);
199
+ color: var(--kmwc-text-color-on-accent);
200
+ }
201
+
202
+ button.btn-danger:hover {
203
+ background: color-mix(in srgb, var(--kmwc-danger-color) 85%, black);
204
+ }
205
+ }
@@ -0,0 +1,82 @@
1
+ /* ==============================================================================
2
+ EXAMPLES KIT — COPY-LINK
3
+ ==============================================================================
4
+ Button appended inside every section <h2> (copy-link.js). Fades in on
5
+ heading hover, flips to a check + "Copied!" on success. */
6
+ @layer kmwc {
7
+ .kmwc-copy-link {
8
+ display: inline-flex;
9
+ align-items: center;
10
+ gap: 0.35rem;
11
+ font-size: 0.8rem;
12
+ line-height: 1;
13
+ padding: 0.25rem 0.4rem;
14
+ margin-inline-start: 0.15rem;
15
+ border: 1px solid transparent;
16
+ border-radius: var(--kmwc-radius-md);
17
+ background: transparent;
18
+ color: var(--kmwc-text-color-4);
19
+ cursor: pointer;
20
+ opacity: 0;
21
+ transition: opacity 0.15s ease, color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease;
22
+ }
23
+
24
+ .card h2:hover .kmwc-copy-link,
25
+ .example-section h2:hover .kmwc-copy-link,
26
+ .kmwc-copy-link:focus-visible {
27
+ opacity: 1;
28
+ }
29
+
30
+ .kmwc-copy-link:hover {
31
+ color: var(--kmwc-accent-color);
32
+ background: var(--kmwc-accent-light-bg);
33
+ border-color: var(--kmwc-accent-border-color);
34
+ }
35
+
36
+ .kmwc-copy-link:focus-visible {
37
+ outline: 2px solid var(--kmwc-accent-color);
38
+ outline-offset: 1px;
39
+ }
40
+
41
+ .kmwc-copy-link__icon {
42
+ width: 1.05em;
43
+ height: 1.05em;
44
+ fill: none;
45
+ stroke: currentColor;
46
+ stroke-width: 2;
47
+ stroke-linecap: round;
48
+ stroke-linejoin: round;
49
+ }
50
+
51
+ .kmwc-copy-link__icon--check,
52
+ .kmwc-copy-link__label {
53
+ display: none;
54
+ }
55
+
56
+ .kmwc-copy-link__label {
57
+ font-weight: 600;
58
+ font-size: 0.7rem;
59
+ }
60
+
61
+ .kmwc-copy-link--copied,
62
+ .kmwc-copy-link--failed {
63
+ --kmwc-copy-link-feedback-color: var(--kmwc-success-color);
64
+ opacity: 1;
65
+ color: var(--kmwc-copy-link-feedback-color);
66
+ background: color-mix(in srgb, var(--kmwc-copy-link-feedback-color) 10%, transparent);
67
+ border-color: color-mix(in srgb, var(--kmwc-copy-link-feedback-color) 40%, transparent);
68
+ }
69
+
70
+ .kmwc-copy-link--failed {
71
+ --kmwc-copy-link-feedback-color: var(--kmwc-danger-color);
72
+ }
73
+
74
+ .kmwc-copy-link--copied .kmwc-copy-link__icon--link {
75
+ display: none;
76
+ }
77
+
78
+ .kmwc-copy-link--copied .kmwc-copy-link__icon--check,
79
+ .kmwc-copy-link--copied .kmwc-copy-link__label {
80
+ display: inline-flex;
81
+ }
82
+ }
@@ -0,0 +1,50 @@
1
+ /* ==============================================================================
2
+ EXAMPLES KIT — DEMO
3
+ ==============================================================================
4
+ <kmwc-demo> output: the live preview, then the code that produced it (a
5
+ `.code-block`, so it inherits the code styles) with the kit's copy button. */
6
+ @layer kmwc {
7
+ .kmwc-demo {
8
+ margin: 1rem 0;
9
+ }
10
+
11
+ .kmwc-demo__preview {
12
+ margin-bottom: 0;
13
+ border-bottom-left-radius: 0;
14
+ border-bottom-right-radius: 0;
15
+ }
16
+
17
+ .kmwc-demo .kmwc-demo__code {
18
+ margin: 0;
19
+ border-radius: 0;
20
+ }
21
+
22
+ .kmwc-demo .kmwc-demo__code:last-child {
23
+ border-bottom-left-radius: var(--kmwc-radius-md);
24
+ border-bottom-right-radius: var(--kmwc-radius-md);
25
+ }
26
+
27
+ .kmwc-demo .kmwc-demo__code + .kmwc-demo__code {
28
+ border-top: 1px solid color-mix(in srgb, var(--kmwc-code-text-color) 12%, transparent);
29
+ }
30
+
31
+ .kmwc-demo__copy {
32
+ position: absolute;
33
+ top: 0.5rem;
34
+ right: 0.5rem;
35
+ padding: 0.25rem 0.75rem;
36
+ font-size: 0.75rem;
37
+ background: color-mix(in srgb, var(--kmwc-code-text-color) 10%, transparent);
38
+ color: var(--kmwc-code-text-color);
39
+ border: 1px solid color-mix(in srgb, var(--kmwc-code-text-color) 20%, transparent);
40
+ border-radius: 4px;
41
+ }
42
+
43
+ .kmwc-demo__copy:hover {
44
+ background: color-mix(in srgb, var(--kmwc-code-text-color) 20%, transparent);
45
+ }
46
+
47
+ .kmwc-demo__copy--copied {
48
+ color: var(--kmwc-success-color);
49
+ }
50
+ }
@@ -0,0 +1,118 @@
1
+ /* ==============================================================================
2
+ EXAMPLES KIT — INDEX PAGE
3
+ ==============================================================================
4
+ The generated examples landing page (index-page.js → body.kmwc-index). */
5
+ @layer kmwc {
6
+ /* ==========================================================================
7
+ PAGE & HEADER
8
+ ========================================================================== */
9
+ body.kmwc-index {
10
+ min-height: 100vh;
11
+ }
12
+
13
+ .kmwc-index__page {
14
+ max-width: 1200px;
15
+ margin: 0 auto;
16
+ }
17
+
18
+ .kmwc-index__header {
19
+ background: var(--kmwc-header-bg);
20
+ border-radius: 16px;
21
+ padding: 2.5rem 3rem;
22
+ margin-bottom: 2rem;
23
+ color: var(--kmwc-text-color-on-accent);
24
+ }
25
+
26
+ .kmwc-index__header h1 {
27
+ font-size: 2.5rem;
28
+ font-weight: 700;
29
+ margin: 0 0 0.5rem 0;
30
+ color: var(--kmwc-text-color-on-accent);
31
+ }
32
+
33
+ .kmwc-index__tagline {
34
+ font-size: 1.1rem;
35
+ opacity: 0.9;
36
+ margin: 0 0 1rem 0;
37
+ }
38
+
39
+ .kmwc-index__version:not(:empty) {
40
+ display: inline-block;
41
+ background: color-mix(in srgb, var(--kmwc-text-color-on-accent) 20%, transparent);
42
+ padding: 0.35rem 0.85rem;
43
+ border-radius: var(--kmwc-radius-md);
44
+ font-size: 0.875rem;
45
+ font-weight: 500;
46
+ }
47
+
48
+ /* ==========================================================================
49
+ CARDS
50
+ ========================================================================== */
51
+ .kmwc-index__cards {
52
+ display: grid;
53
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
54
+ gap: 1.5rem;
55
+ }
56
+
57
+ .kmwc-index__card {
58
+ background: var(--kmwc-main-bg);
59
+ border-radius: var(--kmwc-radius-lg);
60
+ padding: 1.75rem;
61
+ box-shadow: 0 2px 8px var(--kmwc-shadow-color);
62
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
63
+ text-decoration: none;
64
+ color: inherit;
65
+ display: block;
66
+ }
67
+
68
+ .kmwc-index__card:hover {
69
+ transform: translateY(-4px);
70
+ box-shadow: 0 8px 24px var(--kmwc-shadow-color);
71
+ text-decoration: none;
72
+ }
73
+
74
+ .kmwc-index__icon {
75
+ font-size: 2.5rem;
76
+ margin-bottom: 1rem;
77
+ }
78
+
79
+ .kmwc-index__card-title {
80
+ font-size: 1.25rem;
81
+ font-weight: 600;
82
+ margin: 0 0 0.5rem 0;
83
+ color: var(--kmwc-text-color-1);
84
+ }
85
+
86
+ .kmwc-index__card-description {
87
+ color: var(--kmwc-text-color-3);
88
+ line-height: 1.6;
89
+ margin: 0;
90
+ font-size: 0.95rem;
91
+ }
92
+
93
+ .kmwc-index__badge {
94
+ display: inline-block;
95
+ background: var(--kmwc-badge-new-bg);
96
+ color: var(--kmwc-text-color-on-accent);
97
+ padding: 0.15rem 0.5rem;
98
+ border-radius: var(--kmwc-radius-sm);
99
+ font-size: 0.65rem;
100
+ font-weight: 600;
101
+ margin-left: 0.5rem;
102
+ vertical-align: middle;
103
+ text-transform: uppercase;
104
+ }
105
+
106
+ .kmwc-index__footer {
107
+ text-align: center;
108
+ margin-top: 3rem;
109
+ color: var(--kmwc-text-color-3);
110
+ font-size: 0.875rem;
111
+ }
112
+
113
+ @media (max-width: 768px) {
114
+ .kmwc-index__header {
115
+ padding: 1.75rem 1.5rem;
116
+ }
117
+ }
118
+ }