@godxjp/ui 18.15.3 → 19.0.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.
- package/dist/app/date-format-labels.d.ts +1 -1
- package/dist/app/time-format-labels.d.ts +1 -1
- package/dist/components/data-display/badge.d.ts +1 -1
- package/dist/components/data-display/card.d.ts +4 -13
- package/dist/components/data-display/card.js +2 -15
- package/dist/components/data-display/data-table.d.ts +3 -8
- package/dist/components/data-display/data-table.js +106 -68
- package/dist/components/data-display/descriptions.js +34 -5
- package/dist/components/data-display/empty-state.js +1 -1
- package/dist/components/data-display/permission-matrix.js +7 -7
- package/dist/components/data-display/popover.js +2 -9
- package/dist/components/data-display/qr-code.d.ts +1 -1
- package/dist/components/data-display/scroll-area.d.ts +3 -1
- package/dist/components/data-display/scroll-area.js +150 -16
- package/dist/components/data-display/table.js +12 -3
- package/dist/components/data-entry/branch-scope-picker.js +4 -4
- package/dist/components/data-entry/calendar.js +15 -24
- package/dist/components/data-entry/cascader.js +67 -71
- package/dist/components/data-entry/checkbox.js +9 -1
- package/dist/components/data-entry/command.d.ts +6 -6
- package/dist/components/data-entry/date-picker.js +28 -15
- package/dist/components/data-entry/date-range-picker.js +10 -10
- package/dist/components/data-entry/form-field.js +7 -3
- package/dist/components/data-entry/index.d.ts +2 -1
- package/dist/components/data-entry/input.js +8 -19
- package/dist/components/data-entry/label.js +4 -2
- package/dist/components/data-entry/month-picker.js +16 -15
- package/dist/components/data-entry/month-range-picker.js +17 -16
- package/dist/components/data-entry/radio.js +6 -1
- package/dist/components/data-entry/search-select.js +29 -29
- package/dist/components/data-entry/select.js +15 -18
- package/dist/components/data-entry/switch.js +7 -1
- package/dist/components/data-entry/textarea.d.ts +56 -0
- package/dist/components/data-entry/textarea.js +103 -40
- package/dist/components/data-entry/time-picker.js +52 -52
- package/dist/components/data-entry/toggle-group.d.ts +1 -0
- package/dist/components/data-entry/toggle.d.ts +1 -1
- package/dist/components/data-entry/transfer.js +14 -15
- package/dist/components/data-entry/tree-select.js +16 -22
- package/dist/components/data-entry/upload-crop-dialog.js +4 -4
- package/dist/components/data-entry/upload.d.ts +1 -1
- package/dist/components/data-entry/upload.js +46 -46
- package/dist/components/feedback/alert.js +7 -14
- package/dist/components/feedback/dialog.d.ts +23 -32
- package/dist/components/feedback/dialog.js +16 -13
- package/dist/components/feedback/sheet.d.ts +1 -1
- package/dist/components/feedback/sheet.js +14 -14
- package/dist/components/feedback/skeleton.js +13 -10
- package/dist/components/feedback/sonner.d.ts +1 -1
- package/dist/components/feedback/sonner.js +17 -8
- package/dist/components/feedback/tooltip.js +1 -1
- package/dist/components/general/activity.d.ts +44 -0
- package/dist/components/general/activity.js +65 -0
- package/dist/components/general/button.d.ts +2 -2
- package/dist/components/general/button.js +11 -24
- package/dist/components/general/index.d.ts +2 -0
- package/dist/components/general/index.js +2 -0
- package/dist/components/layout/app-shell.js +5 -3
- package/dist/components/layout/auth-divider.d.ts +9 -2
- package/dist/components/layout/auth-divider.js +7 -11
- package/dist/components/layout/index.d.ts +1 -0
- package/dist/components/layout/page-container.d.ts +1 -1
- package/dist/components/layout/page-container.js +32 -20
- package/dist/components/layout/resizable.d.ts +12 -12
- package/dist/components/layout/separator.d.ts +1 -0
- package/dist/components/layout/service-role-panel.js +47 -42
- package/dist/components/layout/sidebar.js +13 -1
- package/dist/components/layout/split-pane.d.ts +12 -1
- package/dist/components/layout/split-pane.js +13 -4
- package/dist/components/navigation/app-setting-picker.js +5 -14
- package/dist/components/navigation/dropdown-menu.js +10 -16
- package/dist/components/navigation/menubar.d.ts +3 -6
- package/dist/components/navigation/pagination-utils.d.ts +15 -2
- package/dist/components/navigation/pagination-utils.js +27 -21
- package/dist/components/navigation/pagination.d.ts +4 -4
- package/dist/components/navigation/pagination.js +2 -2
- package/dist/components/navigation/steps.js +31 -67
- package/dist/components/navigation/tabs.js +17 -5
- package/dist/components/query/infinite-query-state.js +2 -2
- package/dist/components/ui/accordion.d.ts +1 -1
- package/dist/components/ui/avatar.d.ts +1 -1
- package/dist/components/ui/avatar.js +29 -10
- package/dist/components/ui/input-otp.d.ts +8 -6
- package/dist/components/ui/rating.js +1 -1
- package/dist/components/ui/separator.d.ts +27 -2
- package/dist/components/ui/separator.js +42 -11
- package/dist/components/ui/toggle-group.d.ts +15 -5
- package/dist/components/ui/toggle-group.js +43 -18
- package/dist/components/ui/toggle.d.ts +66 -5
- package/dist/components/ui/toggle.js +64 -9
- package/dist/i18n/messages/en.json +8 -0
- package/dist/i18n/messages/ja.json +8 -0
- package/dist/i18n/messages/vi.json +8 -0
- package/dist/lib/control-styles.d.ts +14 -0
- package/dist/lib/control-styles.js +2 -0
- package/dist/props/components/data-display.prop.d.ts +85 -3
- package/dist/props/components/data-entry.prop.d.ts +17 -0
- package/dist/props/components/general.prop.d.ts +52 -1
- package/dist/props/components/layout.prop.d.ts +137 -2
- package/dist/props/registry.d.ts +116 -5
- package/dist/props/registry.js +165 -4
- package/dist/props/vocabulary/index.d.ts +2 -2
- package/dist/props/vocabulary/interaction.prop.d.ts +15 -0
- package/dist/props/vocabulary/layout.prop.d.ts +8 -0
- package/dist/styles/alert-layout.css +69 -3
- package/dist/styles/badge-layout.css +2 -2
- package/dist/styles/base.css +6 -0
- package/dist/styles/card-layout.css +27 -7
- package/dist/styles/control.css +1150 -29
- package/dist/styles/data-display-layout.css +185 -11
- package/dist/styles/data-entry-layout.css +352 -1
- package/dist/styles/density.css +2 -2
- package/dist/styles/dialog-layout.css +203 -4
- package/dist/styles/focus-ring.css +155 -0
- package/dist/styles/form-layout.css +50 -5
- package/dist/styles/index.css +1 -0
- package/dist/styles/layout.css +412 -23
- package/dist/styles/motion.css +178 -0
- package/dist/styles/navigation-layout.css +398 -22
- package/dist/styles/shell-layout.css +137 -39
- package/dist/styles/table-layout.css +153 -22
- package/dist/styles/toggle.css +59 -0
- package/dist/tokens/base.css +5 -0
- package/dist/tokens/components/activity.css +64 -0
- package/dist/tokens/components/badge.css +7 -0
- package/dist/tokens/components/card.css +14 -10
- package/dist/tokens/components/chart.css +1 -1
- package/dist/tokens/components/control.css +358 -8
- package/dist/tokens/components/data-display.css +75 -0
- package/dist/tokens/components/data-entry.css +25 -0
- package/dist/tokens/components/descriptions.css +22 -0
- package/dist/tokens/components/feedback.css +143 -4
- package/dist/tokens/components/form.css +16 -0
- package/dist/tokens/components/legal-document.css +5 -1
- package/dist/tokens/components/navigation.css +109 -0
- package/dist/tokens/components/scroll-area.css +21 -0
- package/dist/tokens/components/separator.css +52 -0
- package/dist/tokens/components/shell.css +132 -20
- package/dist/tokens/components/table.css +52 -3
- package/dist/tokens/components/toggle.css +82 -0
- package/dist/tokens/components/upload.css +107 -0
- package/dist/tokens/foundation.css +171 -10
- package/dist/tokens/semantic/layout.css +120 -1
- package/package.json +84 -68
- package/scripts/ui-audit.mjs +51 -2
package/scripts/ui-audit.mjs
CHANGED
|
@@ -40,7 +40,12 @@ const EMOJI = /\p{Extended_Pictographic}/u;
|
|
|
40
40
|
const EMOJI_FLAG = /\p{Regional_Indicator}/u;
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
|
-
* @type {{id:string, severity:'error'|'warn', test:RegExp, message:string, standard?:string}[]}
|
|
43
|
+
* @type {{id:string, severity:'error'|'warn', test:RegExp, message:string, standard?:string, exempt?:RegExp}[]}
|
|
44
|
+
*
|
|
45
|
+
* `exempt` is an optional SECOND escape a rule may declare, matched against the ORIGINAL (un-blanked)
|
|
46
|
+
* line or the one above it. `ui-audit-disable-line <id>` silences any rule; an `exempt` marker is for
|
|
47
|
+
* a rule whose correct answer is sometimes "this value is deliberate" rather than "skip the check",
|
|
48
|
+
* and it makes the reason part of the source instead of a bare opt-out.
|
|
44
49
|
*
|
|
45
50
|
* `standard` cites the international spec a rule enforces, so a finding is auditable
|
|
46
51
|
* against a real norm rather than house taste alone:
|
|
@@ -129,6 +134,39 @@ const RULES = [
|
|
|
129
134
|
test: /\brounded(?:-[a-z]+)?-\[-?\.?\d/,
|
|
130
135
|
message: "No arbitrary radius (rounded-[6px]…). Use rounded-sm/md/lg radius tokens (rules §4).",
|
|
131
136
|
},
|
|
137
|
+
// The token-override half of the arbitrary-value rules above. Those catch a raw number in a
|
|
138
|
+
// Tailwind class; this catches one in a design-system KNOB the app sets itself
|
|
139
|
+
// (`style={{ "--card-space-inset": "13px" }}`), which is the sanctioned per-instance override
|
|
140
|
+
// route and therefore the one place an app can silently leave the scale. Framework-side the same
|
|
141
|
+
// check runs over `src/tokens/**` as `pnpm check:token-scale-bypass` (gh#332).
|
|
142
|
+
//
|
|
143
|
+
// Only axes that HAVE named steps are flagged — space, font-size, radius, icon-size. width /
|
|
144
|
+
// height / size / offset have no scale yet, so a number there is the only thing to write and is
|
|
145
|
+
// NOT a finding; the name pattern's two lookaheads exist to let `--x-space-offset` and
|
|
146
|
+
// `--x-font-size-width` fall out on their trailing axis, matching the framework guard's
|
|
147
|
+
// "furthest-right axis wins" resolution (verified name-for-name against all 982 published
|
|
148
|
+
// component tokens). `var(--space-4)` and `calc(var(--radius) - 1px)` derive from a scale, `0`
|
|
149
|
+
// and `1px` (the device hairline) are steps of nothing, and `100%` / `1.5` are not lengths.
|
|
150
|
+
{
|
|
151
|
+
id: "no-off-scale-token-value",
|
|
152
|
+
severity: "warn",
|
|
153
|
+
test: new RegExp(
|
|
154
|
+
// --<component>-<…>-<axis-with-a-scale>… , unless a trailing axis WITHOUT one wins
|
|
155
|
+
String.raw`--(?![a-z0-9-]*-(?:offset|width|height)(?=["'\s]*:))` +
|
|
156
|
+
String.raw`(?![a-z0-9-]*(?<!font)(?<!icon)-size(?=["'\s]*:))` +
|
|
157
|
+
String.raw`[a-z0-9-]*-(?:font-size|icon-size|padding|gap|margin|radius|space)(?:-[a-z0-9]+)*` +
|
|
158
|
+
// : "<value>" — no `var(--<that axis's scale>)` anywhere in it …
|
|
159
|
+
String.raw`\s*["']?\s*:\s*["'\`]?(?![^"'\`;,}\n]*var\(\s*--(?:font-size|space|radius|icon-size)[-)])` +
|
|
160
|
+
// … and it bakes a length that is neither 0 nor the 1px hairline.
|
|
161
|
+
String.raw`[^"'\`;,}\n]*(?<![\w.])(?!0(?![\d.]))(?!1px\b)\d*\.?\d+(?:rem|px|em|ch|ex|pt|pc|cm|mm|in|q)\b`,
|
|
162
|
+
),
|
|
163
|
+
/** The one sanctioned off-grid escape, mirroring the framework guard: a block comment reading
|
|
164
|
+
* `scale-exempt: <why>` (12+ chars of real prose) on this line or the one above. Read from the
|
|
165
|
+
* ORIGINAL line, since the scanner blanks comments before the `test` runs. */
|
|
166
|
+
exempt: /\/\*+\s*scale-exempt:\s*\S[^*]{11,}?\*\//,
|
|
167
|
+
message:
|
|
168
|
+
"This token override leaves a scale that exists. Write a step (var(--space-4), var(--font-size-sm), var(--radius-md), var(--icon-size-md)), or derive from one (calc(var(--space-4) + 2px)). A value that is genuinely off-grid stays a literal and says so in place: /* scale-exempt: 6px status dot, below --space-1 */.",
|
|
169
|
+
},
|
|
132
170
|
{
|
|
133
171
|
id: "no-raw-select",
|
|
134
172
|
severity: "error",
|
|
@@ -372,6 +410,13 @@ function isSuppressed(ruleId, sameLine, prevLine) {
|
|
|
372
410
|
return onSame || onPrev;
|
|
373
411
|
}
|
|
374
412
|
|
|
413
|
+
/** A rule's own in-place escape (see the `exempt` note on RULES), on the same line or the one above.
|
|
414
|
+
* Read from the ORIGINAL lines, because the scanner blanks comments before `rule.test` runs. */
|
|
415
|
+
function isExempt(rule, sameLine, prevLine) {
|
|
416
|
+
if (!rule.exempt) return false;
|
|
417
|
+
return rule.exempt.test(sameLine ?? "") || rule.exempt.test(prevLine ?? "");
|
|
418
|
+
}
|
|
419
|
+
|
|
375
420
|
function walk(dir, acc = []) {
|
|
376
421
|
// Accept a FILE path directly (the per-file editor hook passes one), not just a directory.
|
|
377
422
|
try {
|
|
@@ -429,7 +474,11 @@ for (const dir of SCAN_DIRS) {
|
|
|
429
474
|
const scanLines = scanContent.split("\n");
|
|
430
475
|
scanLines.forEach((line, i) => {
|
|
431
476
|
for (const rule of RULES) {
|
|
432
|
-
if (
|
|
477
|
+
if (
|
|
478
|
+
rule.test.test(line) &&
|
|
479
|
+
!isSuppressed(rule.id, origLines[i], origLines[i - 1]) &&
|
|
480
|
+
!isExempt(rule, origLines[i], origLines[i - 1])
|
|
481
|
+
) {
|
|
433
482
|
findings.push({
|
|
434
483
|
file: rel,
|
|
435
484
|
line: i + 1,
|