@umkmall/proto 0.1.0-h2501e10385e1
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 +12 -0
- package/package.json +19 -0
- package/umkmall-components.md +267 -0
- package/umkmall-prototype-starter.html +1079 -0
- package/umkmall-rules.md +158 -0
- package/umkmall-starter-app.md +365 -0
- package/umkmall-starter.md +846 -0
- package/umkmall-tailwind.js +580 -0
- package/umkmall-tokens.css +408 -0
- package/umkmall-ui.js +204 -0
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-h2501e10385e1",
|
|
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,267 @@
|
|
|
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 — 56 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
|
+
|
|
25
|
+
Badge (Content)
|
|
26
|
+
color: primary | warning | success | danger | light | bestseller | gradient
|
|
27
|
+
size: xlarge | medium | small | micro
|
|
28
|
+
booleans: showIconLeft, showIconRight
|
|
29
|
+
|
|
30
|
+
Chip (Content)
|
|
31
|
+
state: default | active
|
|
32
|
+
size: huge | xlarge | large | medium | small | micro
|
|
33
|
+
booleans: showIconLeft, showIconRight
|
|
34
|
+
|
|
35
|
+
TextField (Form)
|
|
36
|
+
size: large | small
|
|
37
|
+
booleans: error, disabled
|
|
38
|
+
REQUIRED props (not axes): label
|
|
39
|
+
|
|
40
|
+
CheckBox (Form)
|
|
41
|
+
size: xlarge | large | medium | small
|
|
42
|
+
booleans: error, disabled, indeterminate
|
|
43
|
+
REQUIRED props (not axes): label
|
|
44
|
+
|
|
45
|
+
Radio (Form)
|
|
46
|
+
size: large | medium | small
|
|
47
|
+
booleans: error, disabled
|
|
48
|
+
REQUIRED props (not axes): label
|
|
49
|
+
|
|
50
|
+
Switch (Form)
|
|
51
|
+
size: large | medium | small
|
|
52
|
+
booleans: disabled, loading
|
|
53
|
+
REQUIRED props (not axes): label
|
|
54
|
+
|
|
55
|
+
Slider (Form)
|
|
56
|
+
size: large | small
|
|
57
|
+
booleans: disabled
|
|
58
|
+
|
|
59
|
+
DateTimeInput (Form)
|
|
60
|
+
size: large | small
|
|
61
|
+
selection: single | range
|
|
62
|
+
booleans: error, disabled, withTime, portal
|
|
63
|
+
|
|
64
|
+
OtpInput (Form)
|
|
65
|
+
size: large | small
|
|
66
|
+
booleans: error, disabled
|
|
67
|
+
REQUIRED props (not axes): value, onChange
|
|
68
|
+
|
|
69
|
+
Tabs (Navigation)
|
|
70
|
+
size: large | small
|
|
71
|
+
state: default | active
|
|
72
|
+
booleans: showIconLeft, showNotif, showTitle
|
|
73
|
+
|
|
74
|
+
Tooltip (Feedback)
|
|
75
|
+
color: dark | white
|
|
76
|
+
size: large | small
|
|
77
|
+
booleans: showClose
|
|
78
|
+
REQUIRED props (not axes): content
|
|
79
|
+
|
|
80
|
+
Skeleton (Feedback)
|
|
81
|
+
shape: text | circle | rect
|
|
82
|
+
|
|
83
|
+
Text (Foundations)
|
|
84
|
+
role: display | h1 | h2 | h3 | h4 | h5 | h6 | paragraph | bodyLg | bodyMd | bodySm
|
|
85
|
+
weight: bold | semibold | medium | regular
|
|
86
|
+
color: primary | secondary | disable | invert | brand | success | error | warning
|
|
87
|
+
|
|
88
|
+
Icon (Foundations)
|
|
89
|
+
size: xs | sm | md | lg | xl
|
|
90
|
+
color: primary | secondary | disable | invert | brand | success | error | warning
|
|
91
|
+
REQUIRED props (not axes): name
|
|
92
|
+
|
|
93
|
+
Sidebar (Shell)
|
|
94
|
+
state: menu | submenu
|
|
95
|
+
booleans: collapsed, open, active, expanded, nested
|
|
96
|
+
REQUIRED props (not axes): label
|
|
97
|
+
|
|
98
|
+
Header (Shell)
|
|
99
|
+
type: nonLogin | nonLoginBlack | login | temanAiLearn | temanAiChat | dashboard | detailPage
|
|
100
|
+
booleans: showBack, showTab, showTextLeft, scrolled
|
|
101
|
+
|
|
102
|
+
AppShell (Shell)
|
|
103
|
+
booleans: scrolled
|
|
104
|
+
|
|
105
|
+
Lightbox (Overlays)
|
|
106
|
+
REQUIRED props (not axes): open, onOpenChange, src
|
|
107
|
+
|
|
108
|
+
ChatComposer (Chat)
|
|
109
|
+
tone: neutral | info | warning | danger
|
|
110
|
+
REQUIRED props (not axes): value, onValueChange, editorLabel
|
|
111
|
+
|
|
112
|
+
ChatComposerInput (Chat)
|
|
113
|
+
REQUIRED props (not axes): value, onValueChange, label
|
|
114
|
+
|
|
115
|
+
ChatDrawer (Chat)
|
|
116
|
+
variant: inherit | neutral | info | warning | danger
|
|
117
|
+
booleans: collapsed
|
|
118
|
+
|
|
119
|
+
ChatAttachment (Chat)
|
|
120
|
+
variant: image | file
|
|
121
|
+
booleans: showSize
|
|
122
|
+
REQUIRED props (not axes): name
|
|
123
|
+
|
|
124
|
+
ChatToolsButton (Chat)
|
|
125
|
+
state: default | active
|
|
126
|
+
REQUIRED props (not axes): label
|
|
127
|
+
|
|
128
|
+
ChatAttachmentButton (Chat)
|
|
129
|
+
state: default | active
|
|
130
|
+
REQUIRED props (not axes): label
|
|
131
|
+
|
|
132
|
+
ChatVoiceButton (Chat)
|
|
133
|
+
state: default | active
|
|
134
|
+
REQUIRED props (not axes): label
|
|
135
|
+
|
|
136
|
+
ChatSendButton (Chat)
|
|
137
|
+
state: send | stop | waiting
|
|
138
|
+
REQUIRED props (not axes): label
|
|
139
|
+
|
|
140
|
+
ChatSoundWave (Chat)
|
|
141
|
+
state: idle | listening
|
|
142
|
+
|
|
143
|
+
ChatVoiceBar (Chat)
|
|
144
|
+
size: compact | landing
|
|
145
|
+
REQUIRED props (not axes): size, label, stopLabel, onStop
|
|
146
|
+
|
|
147
|
+
ChatMessage (Chat)
|
|
148
|
+
sender: assistant | user | system
|
|
149
|
+
density: compact | balanced | spacious
|
|
150
|
+
|
|
151
|
+
ChatMessageBubble (Chat)
|
|
152
|
+
group: none | first | middle | last
|
|
153
|
+
width: auto | full
|
|
154
|
+
booleans: ghost
|
|
155
|
+
|
|
156
|
+
ChatMessageMetadata (Chat)
|
|
157
|
+
status: sending | sent | delivered | read | error
|
|
158
|
+
|
|
159
|
+
ChatMessageList (Chat)
|
|
160
|
+
density: compact | balanced | spacious
|
|
161
|
+
align: top | bottom
|
|
162
|
+
gap: none | 2xs | xs | sm | md | lg
|
|
163
|
+
booleans: streaming
|
|
164
|
+
|
|
165
|
+
ChatThread (Chat)
|
|
166
|
+
|
|
167
|
+
ChatScrollButton (Chat)
|
|
168
|
+
shape: icon | labelled
|
|
169
|
+
booleans: hasNewMessages
|
|
170
|
+
REQUIRED props (not axes): label
|
|
171
|
+
|
|
172
|
+
ChatMessageTTSButton (Chat)
|
|
173
|
+
state: idle | loading | playing | paused | error
|
|
174
|
+
REQUIRED props (not axes): state, label, onToggle
|
|
175
|
+
|
|
176
|
+
Dialog (Overlays)
|
|
177
|
+
size: small | medium | large | xlarge
|
|
178
|
+
side: none | left | right
|
|
179
|
+
booleans: centered, showCloseButton
|
|
180
|
+
REQUIRED props (not axes): open, onOpenChange
|
|
181
|
+
|
|
182
|
+
Menu (Overlays)
|
|
183
|
+
variant: pill | boxed
|
|
184
|
+
REQUIRED props (not axes): trigger, items
|
|
185
|
+
|
|
186
|
+
Popover (Overlays)
|
|
187
|
+
align: start | center | end
|
|
188
|
+
booleans: portal
|
|
189
|
+
|
|
190
|
+
Card (Content)
|
|
191
|
+
variant: elevated | outlined | plain
|
|
192
|
+
padding: none | small | medium | large
|
|
193
|
+
|
|
194
|
+
Divider (Content)
|
|
195
|
+
variant: default | dashed
|
|
196
|
+
orientation: horizontal | vertical
|
|
197
|
+
|
|
198
|
+
List (Content)
|
|
199
|
+
|
|
200
|
+
Disclosure (Content)
|
|
201
|
+
REQUIRED props (not axes): title
|
|
202
|
+
|
|
203
|
+
Image (Content)
|
|
204
|
+
type: thumbnail | banner | natural | avatar
|
|
205
|
+
size: regular | small | blog
|
|
206
|
+
booleans: hover
|
|
207
|
+
|
|
208
|
+
SelectionCard (Form)
|
|
209
|
+
size: large | small
|
|
210
|
+
state: default | selected | disabled
|
|
211
|
+
layout: row | tile
|
|
212
|
+
REQUIRED props (not axes): options
|
|
213
|
+
|
|
214
|
+
Upload (Form)
|
|
215
|
+
size: large | small
|
|
216
|
+
status: default | filled | error | disabled | busy
|
|
217
|
+
border: solid | dashed
|
|
218
|
+
|
|
219
|
+
Select (Form)
|
|
220
|
+
size: large | small
|
|
221
|
+
status: default | filled | error | disabled
|
|
222
|
+
booleans: multiple, portal
|
|
223
|
+
REQUIRED props (not axes): options
|
|
224
|
+
|
|
225
|
+
CodeBlock (Content)
|
|
226
|
+
size: large | small
|
|
227
|
+
|
|
228
|
+
Stepper (Navigation)
|
|
229
|
+
position: first | middle | last
|
|
230
|
+
state: default | current | done
|
|
231
|
+
orientation: horizontal | vertical
|
|
232
|
+
REQUIRED props (not axes): steps
|
|
233
|
+
|
|
234
|
+
Pagination (Navigation)
|
|
235
|
+
size: large | small
|
|
236
|
+
booleans: disabled
|
|
237
|
+
REQUIRED props (not axes): page, onPageChange
|
|
238
|
+
|
|
239
|
+
Table (Content)
|
|
240
|
+
booleans: loading, serverSide, hidePagination, fixedLayout, noBorder, slimScrollbar
|
|
241
|
+
|
|
242
|
+
Spinner (Feedback)
|
|
243
|
+
variant: primary | white | gray | gradient
|
|
244
|
+
size: sm | md | lg | xl
|
|
245
|
+
|
|
246
|
+
ProgressBar (Feedback)
|
|
247
|
+
variant: default | success | warning | error | gray | gradient
|
|
248
|
+
size: large | medium | small
|
|
249
|
+
shape: linear | radial
|
|
250
|
+
|
|
251
|
+
Toaster (Feedback)
|
|
252
|
+
position: top-left | top-center | top-right | bottom-left | bottom-center | bottom-right
|
|
253
|
+
|
|
254
|
+
Label (Form)
|
|
255
|
+
variant: default | error | success
|
|
256
|
+
size: sm | md | lg
|
|
257
|
+
booleans: required
|
|
258
|
+
|
|
259
|
+
TRAPS — each of these renders or ignores silently, with no error:
|
|
260
|
+
|
|
261
|
+
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.
|
|
262
|
+
2. `Header`’s `title` is rendered ONLY when `showTextLeft` is also passed. `title` alone is silently dropped — the header renders, without its title.
|
|
263
|
+
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.
|
|
264
|
+
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`).
|
|
265
|
+
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.
|
|
266
|
+
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.
|
|
267
|
+
```
|