@geomak/ui 7.18.5 → 7.20.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 (42) hide show
  1. package/.claude/commands/ui-auth-shell.md +48 -0
  2. package/.claude/commands/ui-bootstrap.md +36 -0
  3. package/.claude/commands/ui-find.md +12 -0
  4. package/.claude/commands/ui-form.md +38 -0
  5. package/.claude/commands/ui-lookup.md +13 -0
  6. package/.claude/commands/ui-modal.md +50 -0
  7. package/.claude/commands/ui-page.md +36 -0
  8. package/.claude/commands/ui-scaffold.md +73 -0
  9. package/.claude/commands/ui-story.md +30 -0
  10. package/.claude/commands/ui-table.md +38 -0
  11. package/.claude/skills/oxygen-ui/SKILL.md +402 -0
  12. package/README.md +74 -34
  13. package/dist/{chunk-4V4U2W7K.cjs → chunk-4WD27VQX.cjs} +2 -2
  14. package/dist/chunk-4WD27VQX.cjs.map +1 -0
  15. package/dist/{chunk-KAFJJO5O.js → chunk-ILDMP2Q2.js} +2 -2
  16. package/dist/chunk-ILDMP2Q2.js.map +1 -0
  17. package/dist/{chunk-CNUDNGJM.cjs → chunk-LY3MZYWU.cjs} +3 -3
  18. package/dist/chunk-LY3MZYWU.cjs.map +1 -0
  19. package/dist/{chunk-DXOWXLKK.js → chunk-VM2725HH.js} +3 -3
  20. package/dist/chunk-VM2725HH.js.map +1 -0
  21. package/dist/icons/index.cjs +105 -105
  22. package/dist/icons/index.d.cts +2 -2
  23. package/dist/icons/index.d.ts +2 -2
  24. package/dist/icons/index.js +1 -1
  25. package/dist/{index-BktppxXp.d.ts → index-B8P5qbWt.d.cts} +5 -5
  26. package/dist/{index-BktppxXp.d.cts → index-B8P5qbWt.d.ts} +5 -5
  27. package/dist/index.cjs +29 -29
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.cts +237 -237
  30. package/dist/index.d.ts +237 -237
  31. package/dist/index.js +18 -18
  32. package/dist/index.js.map +1 -1
  33. package/dist/tokens/index.cjs +4 -4
  34. package/dist/tokens/index.d.cts +1 -1
  35. package/dist/tokens/index.d.ts +1 -1
  36. package/dist/tokens/index.js +1 -1
  37. package/package.json +10 -3
  38. package/scripts/setup-claude.mjs +136 -0
  39. package/dist/chunk-4V4U2W7K.cjs.map +0 -1
  40. package/dist/chunk-CNUDNGJM.cjs.map +0 -1
  41. package/dist/chunk-DXOWXLKK.js.map +0 -1
  42. package/dist/chunk-KAFJJO5O.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk4V4U2W7K_cjs = require('./chunk-4V4U2W7K.cjs');
4
- var chunkCNUDNGJM_cjs = require('./chunk-CNUDNGJM.cjs');
3
+ var chunk4WD27VQX_cjs = require('./chunk-4WD27VQX.cjs');
4
+ var chunkLY3MZYWU_cjs = require('./chunk-LY3MZYWU.cjs');
5
5
  var React36 = require('react');
6
6
  var reactDom = require('react-dom');
7
7
  var jsxRuntime = require('react/jsx-runtime');
@@ -546,7 +546,7 @@ var VARIANT_CLASSES = {
546
546
  "disabled:border-foreground-muted disabled:text-foreground-muted disabled:cursor-not-allowed",
547
547
  "focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2"
548
548
  ].join(" "),
549
- // Neutral, flat, hairline-bordered button the quiet sibling of `secondary`
549
+ // Neutral, flat, hairline-bordered button, the quiet sibling of `secondary`
550
550
  // (which carries the accent border). Mirrors the input border behaviour:
551
551
  // hairline at rest, strong-hairline on hover. No shadow (flat at rest).
552
552
  outline: [
@@ -610,7 +610,7 @@ var Button = React36__default.default.forwardRef(function Button2({
610
610
  onClick,
611
611
  className = "",
612
612
  type: _deprecated,
613
- // consume deprecated prop do not spread to DOM
613
+ // consume deprecated prop, do not spread to DOM
614
614
  ...rest
615
615
  }, ref) {
616
616
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -954,14 +954,14 @@ function Tooltip({
954
954
  className: cx(
955
955
  // Layout + typography
956
956
  "pointer-events-none z-[500000] max-w-[220px] px-2.5 py-1.5",
957
- // Inverted surface: dark on light, light on dark both readable
957
+ // Inverted surface: dark on light, light on dark, both readable
958
958
  "bg-foreground text-background",
959
959
  "text-xs font-medium leading-snug",
960
960
  // Shape + shadow
961
961
  "rounded-md shadow-md",
962
- // Out animation (always the same just fade)
962
+ // Out animation (always the same, just fade)
963
963
  "data-[state=closed]:animate-tooltip-out",
964
- // In animation direction-aware
964
+ // In animation, direction-aware
965
965
  ANIMATION[placement],
966
966
  className
967
967
  ),
@@ -1687,10 +1687,10 @@ var TONE_FG = {
1687
1687
  danger: "text-status-error"
1688
1688
  };
1689
1689
  var DEFAULT_ICON = {
1690
- info: /* @__PURE__ */ jsxRuntime.jsx(chunk4V4U2W7K_cjs.Info, { size: 18 }),
1691
- success: /* @__PURE__ */ jsxRuntime.jsx(chunk4V4U2W7K_cjs.CheckCircle, { size: 18 }),
1692
- warning: /* @__PURE__ */ jsxRuntime.jsx(chunk4V4U2W7K_cjs.Warning, { size: 18 }),
1693
- danger: /* @__PURE__ */ jsxRuntime.jsx(chunk4V4U2W7K_cjs.Error, { size: 18 })
1690
+ info: /* @__PURE__ */ jsxRuntime.jsx(chunk4WD27VQX_cjs.Info, { size: 18 }),
1691
+ success: /* @__PURE__ */ jsxRuntime.jsx(chunk4WD27VQX_cjs.CheckCircle, { size: 18 }),
1692
+ warning: /* @__PURE__ */ jsxRuntime.jsx(chunk4WD27VQX_cjs.Warning, { size: 18 }),
1693
+ danger: /* @__PURE__ */ jsxRuntime.jsx(chunk4WD27VQX_cjs.Error, { size: 18 })
1694
1694
  };
1695
1695
  function Banner({ tone, children, icon, onDismiss, className = "" }) {
1696
1696
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -1708,7 +1708,7 @@ function Banner({ tone, children, icon, onDismiss, className = "" }) {
1708
1708
  onClick: onDismiss,
1709
1709
  "aria-label": "Dismiss",
1710
1710
  className: "-mr-1 -mt-1 flex h-6 w-6 flex-shrink-0 self-start items-center justify-center rounded-md text-foreground-muted transition-colors hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-accent",
1711
- children: /* @__PURE__ */ jsxRuntime.jsx(chunk4V4U2W7K_cjs.X, { size: 16 })
1711
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunk4WD27VQX_cjs.X, { size: 16 })
1712
1712
  }
1713
1713
  )
1714
1714
  ]
@@ -3662,7 +3662,7 @@ var FormStore = class {
3662
3662
  // Field-array key bookkeeping (stable React keys across reorder/removal).
3663
3663
  keys = {};
3664
3664
  keySeq = 1;
3665
- // Root snapshot a new ref on every change, for form-level subscribers.
3665
+ // Root snapshot, a new ref on every change, for form-level subscribers.
3666
3666
  rootSnap = { v: 0 };
3667
3667
  constructor(opts = {}) {
3668
3668
  this.initialValues = deepClone(opts.initialValues ?? {});
@@ -3811,7 +3811,7 @@ var FormStore = class {
3811
3811
  this.clearBranch(name);
3812
3812
  this.setValue(name, arr, { validate: false });
3813
3813
  };
3814
- /** Drop any errors/touched flags under `name.` used when an array shifts. */
3814
+ /** Drop any errors/touched flags under `name.`, used when an array shifts. */
3815
3815
  clearBranch(name) {
3816
3816
  const prefix = name + ".";
3817
3817
  const errors = {};
@@ -4405,7 +4405,7 @@ function NotificationItem({
4405
4405
  exit: getExitMotion(pos, reduced),
4406
4406
  transition: reduced ? { duration: 0 } : {
4407
4407
  // Opacity finishes in 0.15 s; y/scale take 0.34 s.
4408
- // Card is opaque while still travelling movement
4408
+ // Card is opaque while still travelling, movement
4409
4409
  // is clearly visible to the user.
4410
4410
  opacity: { duration: 0.15 },
4411
4411
  y: { type: "tween", duration: 0.34, ease: [0.16, 1, 0.3, 1] },
@@ -4509,7 +4509,7 @@ function useNotification() {
4509
4509
  };
4510
4510
  }
4511
4511
  var SIZE_MAP3 = {
4512
- // xs is sized to fit beside button text (~14px) async AutoComplete,
4512
+ // xs is sized to fit beside button text (~14px), async AutoComplete,
4513
4513
  // Button loading prop, inline status badges, etc.
4514
4514
  xs: { outer: "w-3.5 h-3.5", inner: "w-1.5 h-1.5", dot: "w-0.5 h-0.5", stroke: "border-[1.5px]", text: "text-[10px]" },
4515
4515
  sm: { outer: "w-8 h-8", inner: "w-4 h-4", dot: "w-1 h-1", stroke: "border-2", text: "text-xs" },
@@ -4930,7 +4930,7 @@ function CatalogCarousel({ items, buttonText, onOpen, className = "" }) {
4930
4930
  onClick: previousApp,
4931
4931
  "aria-label": "Previous",
4932
4932
  className: "cursor-pointer rounded-lg transition-all duration-300 hover:bg-ice-dark dark:hover:bg-independence rotate-180",
4933
- children: /* @__PURE__ */ jsxRuntime.jsx("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: chunkCNUDNGJM_cjs.colors_default.PALETTE["prussian-blue"], strokeWidth: 2, className: "h-10 w-10 dark:stroke-white", children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) })
4933
+ children: /* @__PURE__ */ jsxRuntime.jsx("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: chunkLY3MZYWU_cjs.colors_default.PALETTE["prussian-blue"], strokeWidth: 2, className: "h-10 w-10 dark:stroke-white", children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) })
4934
4934
  }
4935
4935
  ),
4936
4936
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex", children: indexPool.map((index, id) => {
@@ -4967,7 +4967,7 @@ function CatalogCarousel({ items, buttonText, onOpen, className = "" }) {
4967
4967
  onClick: nextApp,
4968
4968
  "aria-label": "Next",
4969
4969
  className: "cursor-pointer rounded-lg transition-all duration-300 hover:bg-ice-dark dark:hover:bg-independence",
4970
- children: /* @__PURE__ */ jsxRuntime.jsx("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: chunkCNUDNGJM_cjs.colors_default.PALETTE["prussian-blue"], strokeWidth: 2, className: "h-10 w-10 dark:stroke-white", children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) })
4970
+ children: /* @__PURE__ */ jsxRuntime.jsx("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: chunkLY3MZYWU_cjs.colors_default.PALETTE["prussian-blue"], strokeWidth: 2, className: "h-10 w-10 dark:stroke-white", children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) })
4971
4971
  }
4972
4972
  )
4973
4973
  ] }) });
@@ -4989,13 +4989,13 @@ function ContextMenu({ items, children, className = "" }) {
4989
4989
  ] });
4990
4990
  }
4991
4991
  var CONTENT_CLASSNAME = [
4992
- // Surface semantic tokens, both modes covered
4992
+ // Surface, semantic tokens, both modes covered
4993
4993
  "min-w-[180px] rounded-lg border border-border bg-surface shadow-lg",
4994
4994
  "p-1 z-[500000] text-sm text-foreground",
4995
4995
  // Entry animation matches the Tooltip / Dropdown style
4996
4996
  "animate-in fade-in-0 zoom-in-95",
4997
4997
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
4998
- // Outline reset Radix handles focus internally
4998
+ // Outline reset, Radix handles focus internally
4999
4999
  "focus:outline-none"
5000
5000
  ].join(" ");
5001
5001
  var ITEM_CLASSNAME = [
@@ -5283,7 +5283,7 @@ function Wizard({
5283
5283
  transition: {
5284
5284
  duration: reduced ? 0 : 0.32,
5285
5285
  ease: [0.16, 1, 0.3, 1]
5286
- // ease-out-expo settles softly
5286
+ // ease-out-expo, settles softly
5287
5287
  },
5288
5288
  "aria-hidden": "true"
5289
5289
  }
@@ -9193,7 +9193,7 @@ function Dropdown({
9193
9193
  item.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { children: item.icon }),
9194
9194
  item.label
9195
9195
  ] }),
9196
- isSelected(item.key) && // currentColor checkmark follows
9196
+ isSelected(item.key) && // currentColor, checkmark follows
9197
9197
  // the item's text colour, which
9198
9198
  // flips automatically on hover.
9199
9199
  /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -11890,7 +11890,7 @@ function LeadCapture({
11890
11890
  buttonLabel = "Subscribe",
11891
11891
  onSubmit,
11892
11892
  note,
11893
- successMessage = "Thanks \u2014 you\u2019re on the list.",
11893
+ successMessage = "Thanks, you\u2019re on the list.",
11894
11894
  background = "gradient",
11895
11895
  centered = true,
11896
11896
  className = "",
@@ -11942,27 +11942,27 @@ function LeadCapture({
11942
11942
 
11943
11943
  Object.defineProperty(exports, "Icon", {
11944
11944
  enumerable: true,
11945
- get: function () { return chunk4V4U2W7K_cjs.icons_default; }
11945
+ get: function () { return chunk4WD27VQX_cjs.icons_default; }
11946
11946
  });
11947
11947
  Object.defineProperty(exports, "createIcon", {
11948
11948
  enumerable: true,
11949
- get: function () { return chunk4V4U2W7K_cjs.createIcon; }
11949
+ get: function () { return chunk4WD27VQX_cjs.createIcon; }
11950
11950
  });
11951
11951
  Object.defineProperty(exports, "COLORS", {
11952
11952
  enumerable: true,
11953
- get: function () { return chunkCNUDNGJM_cjs.colors_default; }
11953
+ get: function () { return chunkLY3MZYWU_cjs.colors_default; }
11954
11954
  });
11955
11955
  Object.defineProperty(exports, "palette", {
11956
11956
  enumerable: true,
11957
- get: function () { return chunkCNUDNGJM_cjs.PALETTE; }
11957
+ get: function () { return chunkLY3MZYWU_cjs.PALETTE; }
11958
11958
  });
11959
11959
  Object.defineProperty(exports, "semanticTokens", {
11960
11960
  enumerable: true,
11961
- get: function () { return chunkCNUDNGJM_cjs.semanticTokens; }
11961
+ get: function () { return chunkLY3MZYWU_cjs.semanticTokens; }
11962
11962
  });
11963
11963
  Object.defineProperty(exports, "vars", {
11964
11964
  enumerable: true,
11965
- get: function () { return chunkCNUDNGJM_cjs.vars; }
11965
+ get: function () { return chunkLY3MZYWU_cjs.vars; }
11966
11966
  });
11967
11967
  exports.Accordion = Accordion_default;
11968
11968
  exports.AppShell = AppShell;