@umkmall/proto 0.1.0-h03e952a96ac5

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.
package/README.md ADDED
@@ -0,0 +1,12 @@
1
+ # @umkmall/proto
2
+
3
+ The three files a UMKMall prototype loads — `umkmall-tokens.css`, `umkmall-tailwind.js` and `umkmall-ui.js` —
4
+ published so Claude's and Gemini's artifact previews can load them from jsDelivr, the one CDN both allow.
5
+ Plus the docs a model reads (the four `.md` files and the raw starter), linked to each other at the same
6
+ version: Gemini cannot read them off the design host, which sends `X-Robots-Tag: nosnippet`.
7
+
8
+ **Generated, never committed.** `scripts/proto/build-assets.mjs` builds them; `.github/workflows/proto-publish.yml`
9
+ assembles them with this manifest and publishes them under a version that is their content hash
10
+ (`scripts/proto/content-version.mjs`). The `version` below is a placeholder the workflow overwrites.
11
+
12
+ See `docs/guidelines/prototyping-kit.md`.
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@umkmall/proto",
3
+ "version": "0.1.0-h03e952a96ac5",
4
+ "description": "UMKMall design-system assets and prototyping docs, served from jsDelivr. Generated — see README.",
5
+ "license": "UNLICENSED",
6
+ "files": [
7
+ "umkmall-tokens.css",
8
+ "umkmall-tailwind.js",
9
+ "umkmall-ui.js",
10
+ "umkmall-starter.md",
11
+ "umkmall-starter-app.md",
12
+ "umkmall-components.md",
13
+ "umkmall-rules.md",
14
+ "umkmall-prototype-starter.html"
15
+ ],
16
+ "publishConfig": {
17
+ "access": "public"
18
+ }
19
+ }
@@ -0,0 +1,288 @@
1
+ # UMKMall UI — components and their axes
2
+
3
+ Generated from `packages/ui/src/contract/variants.ts`. Do not hand-edit.
4
+
5
+ Every component below is published on `window.UmkmallUI` by the browser bundle. Pass only the
6
+ axis values listed, and pass every REQUIRED prop an entry names.
7
+
8
+ ```
9
+ UMKMall UI — 57 components, and the values each axis accepts.
10
+ Generated from packages/ui/src/contract/variants.ts. Do not hand-edit.
11
+
12
+ Button (Foundations)
13
+ type: primary | ghost | text
14
+ color: primary | light | danger | dark
15
+ size: large | medium | small | micro
16
+ width: auto | full
17
+ booleans: disabled, isLoading
18
+
19
+ Alert (Feedback)
20
+ type: alert | toast
21
+ function: success | info | warning | danger
22
+ size: large | medium | small
23
+ treatment: full | accent | coach | banner
24
+ appearance: default | a2ui
25
+
26
+ Badge (Content)
27
+ color: primary | warning | success | danger | light | bestseller | gradient
28
+ size: xlarge | medium | small | micro
29
+ appearance: default | a2ui
30
+ booleans: showIconLeft, showIconRight
31
+
32
+ Chip (Content)
33
+ state: default | active
34
+ size: huge | xlarge | large | medium | small | micro
35
+ appearance: default | a2ui
36
+ booleans: showIconLeft, showIconRight
37
+
38
+ TextField (Form)
39
+ size: large | small
40
+ appearance: default | a2ui
41
+ booleans: error, disabled
42
+ REQUIRED props (not axes): label
43
+
44
+ CheckBox (Form)
45
+ size: xlarge | large | medium | small
46
+ appearance: default | native
47
+ booleans: error, disabled, indeterminate
48
+ REQUIRED props (not axes): label
49
+
50
+ Radio (Form)
51
+ size: large | medium | small
52
+ booleans: error, disabled
53
+ REQUIRED props (not axes): label
54
+
55
+ SegmentedControl (Form)
56
+ size: medium | small
57
+ booleans: disabled
58
+ REQUIRED props (not axes): options, value, onChange
59
+
60
+ Switch (Form)
61
+ size: large | medium | small
62
+ booleans: disabled, loading
63
+ REQUIRED props (not axes): label
64
+
65
+ Slider (Form)
66
+ size: large | small
67
+ booleans: disabled
68
+
69
+ DateTimeInput (Form)
70
+ size: large | small
71
+ selection: single | range
72
+ appearance: default | a2ui
73
+ booleans: error, disabled, withTime, portal
74
+
75
+ OtpInput (Form)
76
+ size: large | small
77
+ booleans: error, disabled
78
+ REQUIRED props (not axes): value, onChange
79
+
80
+ Tabs (Navigation)
81
+ size: large | small
82
+ state: default | active
83
+ appearance: default | a2ui
84
+ booleans: showIconLeft, showNotif, showTitle
85
+
86
+ Tooltip (Feedback)
87
+ color: dark | white
88
+ size: large | small
89
+ booleans: showClose
90
+ REQUIRED props (not axes): content
91
+
92
+ Skeleton (Feedback)
93
+ shape: text | circle | rect
94
+
95
+ Text (Foundations)
96
+ role: display | h1 | h2 | h3 | h4 | h5 | h6 | paragraph | bodyLg | bodyMd | bodySm
97
+ weight: bold | semibold | medium | regular
98
+ color: primary | secondary | disable | invert | brand | success | error | warning
99
+
100
+ Icon (Foundations)
101
+ size: xs | sm | md | lg | xl
102
+ color: primary | secondary | disable | invert | brand | success | error | warning
103
+ REQUIRED props (not axes): name
104
+
105
+ Sidebar (Shell)
106
+ state: menu | submenu
107
+ booleans: collapsed, open, active, expanded, nested
108
+ REQUIRED props (not axes): label
109
+
110
+ Header (Shell)
111
+ type: nonLogin | nonLoginBlack | login | temanAiLearn | temanAiChat | dashboard | detailPage
112
+ booleans: showBack, showTab, showTextLeft, scrolled
113
+
114
+ AppShell (Shell)
115
+ booleans: scrolled
116
+
117
+ Lightbox (Overlays)
118
+ REQUIRED props (not axes): open, onOpenChange, src
119
+
120
+ ChatComposer (Chat)
121
+ tone: neutral | info | warning | danger
122
+ REQUIRED props (not axes): value, onValueChange, editorLabel
123
+
124
+ ChatComposerInput (Chat)
125
+ REQUIRED props (not axes): value, onValueChange, label
126
+
127
+ ChatDrawer (Chat)
128
+ variant: inherit | neutral | info | warning | danger
129
+ booleans: collapsed
130
+
131
+ ChatAttachment (Chat)
132
+ variant: image | file
133
+ booleans: showSize
134
+ REQUIRED props (not axes): name
135
+
136
+ ChatToolsButton (Chat)
137
+ state: default | active
138
+ REQUIRED props (not axes): label
139
+
140
+ ChatAttachmentButton (Chat)
141
+ state: default | active
142
+ REQUIRED props (not axes): label
143
+
144
+ ChatVoiceButton (Chat)
145
+ state: default | active
146
+ REQUIRED props (not axes): label
147
+
148
+ ChatSendButton (Chat)
149
+ state: send | stop | waiting
150
+ REQUIRED props (not axes): label
151
+
152
+ ChatSoundWave (Chat)
153
+ state: idle | listening
154
+
155
+ ChatVoiceBar (Chat)
156
+ size: compact | landing
157
+ REQUIRED props (not axes): size, label, stopLabel, onStop
158
+
159
+ ChatMessage (Chat)
160
+ sender: assistant | user | system
161
+ density: compact | balanced | spacious
162
+
163
+ ChatMessageBubble (Chat)
164
+ group: none | first | middle | last
165
+ width: auto | full
166
+ booleans: ghost
167
+
168
+ ChatMessageMetadata (Chat)
169
+ status: sending | sent | delivered | read | error
170
+
171
+ ChatMessageList (Chat)
172
+ density: compact | balanced | spacious
173
+ align: top | bottom
174
+ gap: none | 2xs | xs | sm | md | lg
175
+ booleans: streaming
176
+
177
+ ChatThread (Chat)
178
+
179
+ ChatScrollButton (Chat)
180
+ shape: icon | labelled
181
+ booleans: hasNewMessages
182
+ REQUIRED props (not axes): label
183
+
184
+ ChatMessageTTSButton (Chat)
185
+ state: idle | loading | playing | paused | error
186
+ REQUIRED props (not axes): state, label, onToggle
187
+
188
+ Dialog (Overlays)
189
+ size: small | medium | large | xlarge
190
+ side: none | left | right
191
+ booleans: centered, showCloseButton, dismissible, closeDisabled
192
+ REQUIRED props (not axes): open, onOpenChange
193
+
194
+ Menu (Overlays)
195
+ variant: pill | boxed
196
+ REQUIRED props (not axes): trigger, items
197
+
198
+ Popover (Overlays)
199
+ align: start | center | end
200
+ booleans: portal
201
+
202
+ Card (Content)
203
+ variant: elevated | outlined | plain
204
+ padding: none | small | medium | large
205
+ appearance: default | a2ui | a2ui-hero
206
+
207
+ Divider (Content)
208
+ variant: default | dashed
209
+ orientation: horizontal | vertical
210
+ appearance: default | a2ui
211
+
212
+ List (Content)
213
+
214
+ Disclosure (Content)
215
+ appearance: default | a2ui
216
+ REQUIRED props (not axes): title
217
+
218
+ Image (Content)
219
+ type: thumbnail | banner | natural | avatar
220
+ size: regular | small | blog
221
+ appearance: default | a2ui
222
+ booleans: hover
223
+
224
+ SelectionCard (Form)
225
+ size: large | small
226
+ state: default | selected | disabled
227
+ layout: row | tile
228
+ appearance: default | choice
229
+ REQUIRED props (not axes): options
230
+
231
+ Upload (Form)
232
+ size: large | small
233
+ status: default | filled | error | disabled | busy
234
+ border: solid | dashed
235
+ appearance: default | a2ui
236
+
237
+ Select (Form)
238
+ size: large | small
239
+ status: default | filled | error | disabled
240
+ booleans: multiple, portal
241
+ REQUIRED props (not axes): options
242
+
243
+ CodeBlock (Content)
244
+ size: large | small
245
+ appearance: default | a2ui
246
+
247
+ Stepper (Navigation)
248
+ position: first | middle | last
249
+ state: default | current | done
250
+ orientation: horizontal | vertical
251
+ REQUIRED props (not axes): steps
252
+
253
+ Pagination (Navigation)
254
+ size: large | small
255
+ density: compact | comfortable
256
+ booleans: disabled
257
+ REQUIRED props (not axes): page, onPageChange
258
+
259
+ Table (Content)
260
+ density: compact | comfortable
261
+ booleans: loading, serverSide, hidePagination, fixedLayout, noBorder, slimScrollbar
262
+
263
+ Spinner (Feedback)
264
+ variant: primary | white | gray | gradient
265
+ size: sm | md | lg | xl
266
+
267
+ ProgressBar (Feedback)
268
+ variant: default | success | warning | error | gray | gradient
269
+ size: large | medium | small
270
+ shape: linear | radial
271
+
272
+ Toaster (Feedback)
273
+ position: top-left | top-center | top-right | bottom-left | bottom-center | bottom-right
274
+
275
+ Label (Form)
276
+ variant: default | error | success
277
+ size: sm | md | lg
278
+ booleans: required
279
+
280
+ TRAPS — each of these renders or ignores silently, with no error:
281
+
282
+ 1. `Text` roles are camelCase: `bodyLg`, `paragraphSm`, `labelMd`. A kebab-case or Title-Case role matches no variant and the text renders with no type styling at all.
283
+ 2. `Header`’s `title` is rendered ONLY when `showTextLeft` is also passed. `title` alone is silently dropped — the header renders, without its title.
284
+ 3. `Alert` has no `title` prop. Put the heading in `children`; a `title` passed to it lands on the underlying `div` as a DOM attribute and shows up as a tooltip.
285
+ 4. THE AXES ARE NOT THE PROP LIST. An axis is a STYLING choice; a component can also require DATA, and any entry above with a “REQUIRED props” line will not render without it. `Stepper` is the one that catches everyone: its axes are `position`, `state` and `orientation`, and all three belong to a STEP — the component itself takes `steps={[{ label, state, position }]}`. Writing `<Stepper position="first" state="done" />` throws inside the component, React unmounts the whole tree, and the page goes BLANK. Same shape for `SelectionCard` (`options`), `Select` (`options`), `Menu` (`trigger`, `items`) and `Dialog` (`open`, `onOpenChange`).
286
+ 5. AN AXIS NAME IS NOT ALWAYS THE PROP NAME. Every axis listed above is passed under its own name EXCEPT two: write `variant` (not `function`) for `Alert`, and `variant` (not `role`) for `Text` — taking the legal values from the `function` and `role` axes respectively. Those two keep Figma’s word in the contract because `function` is a reserved word and `role` is an ARIA attribute. Passing the axis name instead of the prop renders the component with no styling and no error.
287
+ 6. The `Table` entry exports the plain parts AND `DataTable`, and the REQUIRED props line above reads only the parts. `DataTable` needs `columns` (tanstack `ColumnDef`s, e.g. `[{ accessorKey: "name", header: "Nama" }]`) and `data`; without them it throws and the page goes blank. `Pagination` needs `page` (1-based) and `onPageChange`; pass `pageCount` for a numbered strip, or omit it and pass `hasNext` for a cursor source, or next stays disabled.
288
+ ```