@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.
Files changed (145) hide show
  1. package/dist/app/date-format-labels.d.ts +1 -1
  2. package/dist/app/time-format-labels.d.ts +1 -1
  3. package/dist/components/data-display/badge.d.ts +1 -1
  4. package/dist/components/data-display/card.d.ts +4 -13
  5. package/dist/components/data-display/card.js +2 -15
  6. package/dist/components/data-display/data-table.d.ts +3 -8
  7. package/dist/components/data-display/data-table.js +106 -68
  8. package/dist/components/data-display/descriptions.js +34 -5
  9. package/dist/components/data-display/empty-state.js +1 -1
  10. package/dist/components/data-display/permission-matrix.js +7 -7
  11. package/dist/components/data-display/popover.js +2 -9
  12. package/dist/components/data-display/qr-code.d.ts +1 -1
  13. package/dist/components/data-display/scroll-area.d.ts +3 -1
  14. package/dist/components/data-display/scroll-area.js +150 -16
  15. package/dist/components/data-display/table.js +12 -3
  16. package/dist/components/data-entry/branch-scope-picker.js +4 -4
  17. package/dist/components/data-entry/calendar.js +15 -24
  18. package/dist/components/data-entry/cascader.js +67 -71
  19. package/dist/components/data-entry/checkbox.js +9 -1
  20. package/dist/components/data-entry/command.d.ts +6 -6
  21. package/dist/components/data-entry/date-picker.js +28 -15
  22. package/dist/components/data-entry/date-range-picker.js +10 -10
  23. package/dist/components/data-entry/form-field.js +7 -3
  24. package/dist/components/data-entry/index.d.ts +2 -1
  25. package/dist/components/data-entry/input.js +8 -19
  26. package/dist/components/data-entry/label.js +4 -2
  27. package/dist/components/data-entry/month-picker.js +16 -15
  28. package/dist/components/data-entry/month-range-picker.js +17 -16
  29. package/dist/components/data-entry/radio.js +6 -1
  30. package/dist/components/data-entry/search-select.js +29 -29
  31. package/dist/components/data-entry/select.js +15 -18
  32. package/dist/components/data-entry/switch.js +7 -1
  33. package/dist/components/data-entry/textarea.d.ts +56 -0
  34. package/dist/components/data-entry/textarea.js +103 -40
  35. package/dist/components/data-entry/time-picker.js +52 -52
  36. package/dist/components/data-entry/toggle-group.d.ts +1 -0
  37. package/dist/components/data-entry/toggle.d.ts +1 -1
  38. package/dist/components/data-entry/transfer.js +14 -15
  39. package/dist/components/data-entry/tree-select.js +16 -22
  40. package/dist/components/data-entry/upload-crop-dialog.js +4 -4
  41. package/dist/components/data-entry/upload.d.ts +1 -1
  42. package/dist/components/data-entry/upload.js +46 -46
  43. package/dist/components/feedback/alert.js +7 -14
  44. package/dist/components/feedback/dialog.d.ts +23 -32
  45. package/dist/components/feedback/dialog.js +16 -13
  46. package/dist/components/feedback/sheet.d.ts +1 -1
  47. package/dist/components/feedback/sheet.js +14 -14
  48. package/dist/components/feedback/skeleton.js +13 -10
  49. package/dist/components/feedback/sonner.d.ts +1 -1
  50. package/dist/components/feedback/sonner.js +17 -8
  51. package/dist/components/feedback/tooltip.js +1 -1
  52. package/dist/components/general/activity.d.ts +44 -0
  53. package/dist/components/general/activity.js +65 -0
  54. package/dist/components/general/button.d.ts +2 -2
  55. package/dist/components/general/button.js +11 -24
  56. package/dist/components/general/index.d.ts +2 -0
  57. package/dist/components/general/index.js +2 -0
  58. package/dist/components/layout/app-shell.js +5 -3
  59. package/dist/components/layout/auth-divider.d.ts +9 -2
  60. package/dist/components/layout/auth-divider.js +7 -11
  61. package/dist/components/layout/index.d.ts +1 -0
  62. package/dist/components/layout/page-container.d.ts +1 -1
  63. package/dist/components/layout/page-container.js +32 -20
  64. package/dist/components/layout/resizable.d.ts +12 -12
  65. package/dist/components/layout/separator.d.ts +1 -0
  66. package/dist/components/layout/service-role-panel.js +47 -42
  67. package/dist/components/layout/sidebar.js +13 -1
  68. package/dist/components/layout/split-pane.d.ts +12 -1
  69. package/dist/components/layout/split-pane.js +13 -4
  70. package/dist/components/navigation/app-setting-picker.js +5 -14
  71. package/dist/components/navigation/dropdown-menu.js +10 -16
  72. package/dist/components/navigation/menubar.d.ts +3 -6
  73. package/dist/components/navigation/pagination-utils.d.ts +15 -2
  74. package/dist/components/navigation/pagination-utils.js +27 -21
  75. package/dist/components/navigation/pagination.d.ts +4 -4
  76. package/dist/components/navigation/pagination.js +2 -2
  77. package/dist/components/navigation/steps.js +31 -67
  78. package/dist/components/navigation/tabs.js +17 -5
  79. package/dist/components/query/infinite-query-state.js +2 -2
  80. package/dist/components/ui/accordion.d.ts +1 -1
  81. package/dist/components/ui/avatar.d.ts +1 -1
  82. package/dist/components/ui/avatar.js +29 -10
  83. package/dist/components/ui/input-otp.d.ts +8 -6
  84. package/dist/components/ui/rating.js +1 -1
  85. package/dist/components/ui/separator.d.ts +27 -2
  86. package/dist/components/ui/separator.js +42 -11
  87. package/dist/components/ui/toggle-group.d.ts +15 -5
  88. package/dist/components/ui/toggle-group.js +43 -18
  89. package/dist/components/ui/toggle.d.ts +66 -5
  90. package/dist/components/ui/toggle.js +64 -9
  91. package/dist/i18n/messages/en.json +8 -0
  92. package/dist/i18n/messages/ja.json +8 -0
  93. package/dist/i18n/messages/vi.json +8 -0
  94. package/dist/lib/control-styles.d.ts +14 -0
  95. package/dist/lib/control-styles.js +2 -0
  96. package/dist/props/components/data-display.prop.d.ts +85 -3
  97. package/dist/props/components/data-entry.prop.d.ts +17 -0
  98. package/dist/props/components/general.prop.d.ts +52 -1
  99. package/dist/props/components/layout.prop.d.ts +137 -2
  100. package/dist/props/registry.d.ts +116 -5
  101. package/dist/props/registry.js +165 -4
  102. package/dist/props/vocabulary/index.d.ts +2 -2
  103. package/dist/props/vocabulary/interaction.prop.d.ts +15 -0
  104. package/dist/props/vocabulary/layout.prop.d.ts +8 -0
  105. package/dist/styles/alert-layout.css +69 -3
  106. package/dist/styles/badge-layout.css +2 -2
  107. package/dist/styles/base.css +6 -0
  108. package/dist/styles/card-layout.css +27 -7
  109. package/dist/styles/control.css +1150 -29
  110. package/dist/styles/data-display-layout.css +185 -11
  111. package/dist/styles/data-entry-layout.css +352 -1
  112. package/dist/styles/density.css +2 -2
  113. package/dist/styles/dialog-layout.css +203 -4
  114. package/dist/styles/focus-ring.css +155 -0
  115. package/dist/styles/form-layout.css +50 -5
  116. package/dist/styles/index.css +1 -0
  117. package/dist/styles/layout.css +412 -23
  118. package/dist/styles/motion.css +178 -0
  119. package/dist/styles/navigation-layout.css +398 -22
  120. package/dist/styles/shell-layout.css +137 -39
  121. package/dist/styles/table-layout.css +153 -22
  122. package/dist/styles/toggle.css +59 -0
  123. package/dist/tokens/base.css +5 -0
  124. package/dist/tokens/components/activity.css +64 -0
  125. package/dist/tokens/components/badge.css +7 -0
  126. package/dist/tokens/components/card.css +14 -10
  127. package/dist/tokens/components/chart.css +1 -1
  128. package/dist/tokens/components/control.css +358 -8
  129. package/dist/tokens/components/data-display.css +75 -0
  130. package/dist/tokens/components/data-entry.css +25 -0
  131. package/dist/tokens/components/descriptions.css +22 -0
  132. package/dist/tokens/components/feedback.css +143 -4
  133. package/dist/tokens/components/form.css +16 -0
  134. package/dist/tokens/components/legal-document.css +5 -1
  135. package/dist/tokens/components/navigation.css +109 -0
  136. package/dist/tokens/components/scroll-area.css +21 -0
  137. package/dist/tokens/components/separator.css +52 -0
  138. package/dist/tokens/components/shell.css +132 -20
  139. package/dist/tokens/components/table.css +52 -3
  140. package/dist/tokens/components/toggle.css +82 -0
  141. package/dist/tokens/components/upload.css +107 -0
  142. package/dist/tokens/foundation.css +171 -10
  143. package/dist/tokens/semantic/layout.css +120 -1
  144. package/package.json +84 -68
  145. package/scripts/ui-audit.mjs +51 -2
@@ -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 (rule.test.test(line) && !isSuppressed(rule.id, origLines[i], origLines[i - 1])) {
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,