@ai-matrx/tap-target 0.2.0 → 0.2.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,71 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.2 — 2026-09-10
4
+
5
+ **A republish so consumers run ONE design-system, not two.** No source change.
6
+ This package's `@ai-matrx/design-system` dependency is `workspace:*`, which the
7
+ publish freezes to whatever the workspace held that day — 0.11.2, on 0.2.1's
8
+ release day. Every consumer that installed both therefore carried two copies of
9
+ the design system in one install graph (`check:matrx-packages`: "ONE SYSTEM,
10
+ ONE VERSION"), and no command a consumer repo can run moves a version a
11
+ published sibling pins. Two copies of a React component package means two sets
12
+ of contexts and two stylesheets, which is the duplicate-package class that has
13
+ already bitten the Vite studio.
14
+
15
+ Cut alongside `@ai-matrx/design-system` 0.14.0 so the spec resolves forward to
16
+ it.
17
+
18
+ ### Consumer action
19
+
20
+ `pnpm update -r "@ai-matrx/*" --latest`, then `pnpm check:matrx-packages`.
21
+
22
+ ## 0.2.1 — 2026-09-07
23
+
24
+ **Census row 19i is now fully closed — the spinner stops being a coin flip.**
25
+ `LoadingTapButton` wore core Tailwind's `animate-spin`. Core Tailwind, so it
26
+ survived in all four current consumers and the defect was invisible; but a
27
+ package cannot ship a class it does not define, and the first host without
28
+ Tailwind's core animate utilities gets a spinner that stands still. That is not
29
+ a missing flourish — it is a load-bearing lie, because a still spinner says the
30
+ work has stopped, and there is no error anywhere to find it by. Exactly the
31
+ class of host reliance `@ai-matrx/design-system@0.10.0`'s motion sweep closed
32
+ for its own eleven primitives, and the last open half of the row that sweep
33
+ left behind.
34
+
35
+ **The fix imports; it does not copy.** This package has depended on
36
+ `@ai-matrx/design-system` since 0.2.0, so the spinner now wears that package's
37
+ `matrx-spin` — via its exported `MOTION_SPIN` constant, whose keyframe and rule
38
+ ship in ITS `styles.css` and are asserted present in ITS packed tarball.
39
+ Copying those four lines here would have created a second owner for one
40
+ animation: the very twin the census row exists to kill. Under
41
+ `prefers-reduced-motion` the shared rule slows the loop rather than stopping it,
42
+ because a stopped spinner removes information rather than motion.
43
+
44
+ **`src/styles.css` now `@import`s `@ai-matrx/design-system/styles.css`.** That
45
+ sheet is a REQUIREMENT of this one, not a recommendation — half the spinner's
46
+ truth lives there. `@ai-matrx/design-system` is a real `dependencies` entry, so
47
+ the bare specifier resolves from a plain `npm install @ai-matrx/tap-target` with
48
+ nothing else in the host's manifest, and a host that already imports the
49
+ design-system sheet loses nothing (bundlers resolve both to one file). Any
50
+ future rule in this sheet must go BELOW that `@import`.
51
+
52
+ **The guard (`src/motion.test.tsx`), proven failing-then-passing.** A
53
+ class-name assertion alone would have passed throughout the defect, so — like
54
+ design-system's own motion guard — every check has two halves: the class
55
+ reaches the DOM, AND a sheet that actually reaches the consumer defines a rule
56
+ for it whose keyframe that same sheet declares. It also fails on ANY
57
+ `animate-*` utility appearing in any source file or in the stylesheet (comments
58
+ excluded, so the prose explaining the removal can name it), and on a
59
+ `@keyframes matrx-spin` being copied back in here. Re-pointing the spinner at
60
+ `animate-spin` and dropping the `@import` fails three tests by name.
61
+
62
+ ### Consumer action (C28)
63
+
64
+ **None** — take the patch. No API change, no prop change, no geometry change.
65
+ Hosts already importing `@ai-matrx/design-system/styles.css` see no difference
66
+ at all; hosts that were not now get the spinner rule through
67
+ `@ai-matrx/tap-target/styles.css`.
68
+
3
69
  ## 0.2.0 — 2026-09-07
4
70
 
5
71
  **The tooltip moved out.** This package shipped a Tooltip family whose own file
package/README.md CHANGED
@@ -34,6 +34,12 @@ nothing renders correctly without it:
34
34
  import "@ai-matrx/tap-target/styles.css";
35
35
  ```
36
36
 
37
+ That one line is enough: since 0.2.1 this sheet `@import`s
38
+ `@ai-matrx/design-system/styles.css`, which it REQUIRES — the loading button's
39
+ spinner wears design-system's `matrx-spin`, whose keyframe is defined there
40
+ (never `animate-spin`, a host utility this package cannot ship). If your app
41
+ already imports the design-system sheet, nothing is duplicated.
42
+
37
43
  Tailwind users migrating from the in-repo Matrx copy can keep their existing
38
44
  `globals.css` `.matrx-tap-*` block until the C9 swap removes it — the rules are
39
45
  identical; just don't load both forever.
package/dist/buttons.cjs CHANGED
@@ -97,6 +97,7 @@ module.exports = __toCommonJS(buttons_exports);
97
97
 
98
98
  // src/tap-buttons.tsx
99
99
  var import_react2 = require("react");
100
+ var import_design_system2 = require("@ai-matrx/design-system");
100
101
 
101
102
  // src/tap-target-button.tsx
102
103
  var import_react = require("react");
@@ -993,7 +994,7 @@ function LoadingTapButton(props) {
993
994
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Wrap, { ariaLabel: "Loading", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
994
995
  "circle",
995
996
  {
996
- className: "animate-spin",
997
+ className: import_design_system2.MOTION_SPIN,
997
998
  cx: "12",
998
999
  cy: "12",
999
1000
  r: "9",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/buttons.ts","../src/tap-buttons.tsx","../src/tap-target-button.tsx","../src/cn.ts","../src/link.ts"],"sourcesContent":["// @ai-matrx/tap-target/buttons — the ~60 pre-composed one-tag buttons.\n// Heavy by design (every glyph inlined); import from this subpath only where\n// pre-composed buttons are actually used.\n\nexport * from \"./tap-buttons\";\n","\"use client\";\n\nimport { forwardRef, type Ref } from \"react\";\nimport {\n TapTargetButton,\n TapTargetButtonTransparent,\n TapTargetButtonSolid,\n TapTargetButtonForGroup,\n} from \"./tap-target-button\";\nimport type { TapTargetLinkComponent } from \"./link\";\n\n// ---------------------------------------------------------------------------\n// Shared types\n// ---------------------------------------------------------------------------\n\ntype Variant = \"glass\" | \"transparent\" | \"solid\" | \"group\";\n\nexport interface TapButtonProps {\n /** Forwarded to the underlying button (Radix `asChild`, focus chains, etc.). */\n ref?: Ref<HTMLButtonElement> | undefined;\n variant?: Variant | undefined;\n onClick?: (() => void) | undefined;\n as?: \"button\" | \"label\" | undefined;\n htmlFor?: string | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n tabIndex?: number | undefined;\n className?: string | undefined;\n strokeWidth?: number | undefined;\n // Solid-variant color overrides — only used when variant=\"solid\"\n bgColor?: string | undefined;\n iconColor?: string | undefined;\n hoverBgColor?: string | undefined;\n activeBgColor?: string | undefined;\n // Link support — when set, the button renders as a link or <a>.\n // Internal hrefs use the injected link component (setTapTargetLinkComponent\n // or the `linkComponent` prop; plain <a> when none is registered); external\n // (http(s)://, mailto:, tel:) use <a> with target=\"_blank\" +\n // rel=\"noopener noreferrer\" by default. Pass an explicit `target` to\n // override (works for internal links too).\n href?: string | undefined;\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n rel?: string | undefined;\n prefetch?: boolean | null | undefined;\n /** Per-instance link component override for internal hrefs. */\n linkComponent?: TapTargetLinkComponent | undefined;\n // Tooltip support — defaults to `ariaLabel`. Pass `false` to opt out.\n tooltip?: string | false | undefined;\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\" | undefined;\n tooltipAlign?: \"start\" | \"center\" | \"end\" | undefined;\n /** Inline caption after the icon — see TapTargetButton `label`. */\n label?: string | undefined;\n /** Passthrough from AITapButtonProps / MakerTapButton — stripped before DOM. */\n colored?: boolean | undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Variant resolver — maps a variant string to the correct wrapper component.\n// Runs at build/server time so there's zero client cost.\n//\n// IMPORTANT: `Wrap` MUST forward refs. The pre-composed `*TapButton` functions\n// below are plain function components (in React 19 ref is a regular prop) and\n// spread `{...props}` to `Wrap` — that spread carries ref through. `Wrap`\n// extracts ref and passes it explicitly to the underlying `forwardRef`\n// primitive. Without this, every `*TapButton` placed inside a Radix\n// `*Trigger asChild` (DropdownMenu, Popover, Tooltip, etc.) silently loses\n// the ref — the popper can't anchor and Radix's injected event handlers /\n// `data-state` / `aria-*` get dropped. (Precedent: matrx-frontend\n// `features/files/FEATURE.md`, where this pattern was established.)\n// ---------------------------------------------------------------------------\n\nconst Wrap = forwardRef<\n HTMLButtonElement,\n TapButtonProps & { children: React.ReactNode }\n>(function Wrap(\n {\n variant = \"glass\",\n children,\n bgColor,\n iconColor,\n hoverBgColor,\n activeBgColor,\n // AITapButtonProps passthrough — not a DOM attribute (see ai-tap-buttons Wrap)\n colored: _colored,\n ...props\n },\n ref,\n) {\n switch (variant) {\n case \"transparent\":\n return (\n <TapTargetButtonTransparent ref={ref} {...props}>\n {children}\n </TapTargetButtonTransparent>\n );\n case \"solid\":\n return (\n <TapTargetButtonSolid\n ref={ref}\n bgColor={bgColor}\n iconColor={iconColor}\n hoverBgColor={hoverBgColor}\n activeBgColor={activeBgColor}\n {...props}\n >\n {children}\n </TapTargetButtonSolid>\n );\n case \"group\":\n return (\n <TapTargetButtonForGroup ref={ref} {...props}>\n {children}\n </TapTargetButtonForGroup>\n );\n default:\n return (\n <TapTargetButton ref={ref} {...props}>\n {children}\n </TapTargetButton>\n );\n }\n});\n\n// ---------------------------------------------------------------------------\n// Pre-composed buttons — one import, one tag, zero configuration needed.\n// Default variant is \"glass\". Override with variant=\"transparent\" etc.\n// All SVG paths match lucide-react v0.577.0 exactly.\n// ---------------------------------------------------------------------------\n\n// lucide: menu (hand-crafted HeroIcons path — no Lucide equivalent, kept as-is)\nexport function MenuTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Menu\" strokeWidth={1.75} {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\"\n />\n </Wrap>\n );\n}\n\n// lucide: plus (hand-crafted — no drift, kept as-is)\nexport function PlusTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Add\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 4.5v15m7.5-7.5h-15\"\n />\n </Wrap>\n );\n}\n\n// lucide: search → circle cx=11 cy=11 r=8 + line to 21,21\nexport function SearchTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Search\" {...props}>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.34-4.34\" />\n </Wrap>\n );\n}\n\n// lucide: settings (hand-crafted — kept as-is, Lucide uses \"settings-2\" pattern)\nexport function SettingsTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Settings\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\"\n />\n </Wrap>\n );\n}\n\n// lucide: maximize (hand-crafted corner-arrows — kept as-is)\nexport function MaximizeTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Fullscreen\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15\"\n />\n </Wrap>\n );\n}\n\n// lucide: home v0.577.0 — used as the \"Hub\" (main/list) action\nexport function HomeTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Hub\" {...props}>\n <path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\" />\n <path d=\"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n </Wrap>\n );\n}\n\n// lucide: layout-grid v0.577.0\nexport function LayoutGridTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Card view\" {...props}>\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"14\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"14\" rx=\"1\" />\n </Wrap>\n );\n}\n\n// lucide: list v0.577.0\nexport function ListTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Table view\" {...props}>\n <path d=\"M3 5h.01\" />\n <path d=\"M3 12h.01\" />\n <path d=\"M3 19h.01\" />\n <path d=\"M8 5h13\" />\n <path d=\"M8 12h13\" />\n <path d=\"M8 19h13\" />\n </Wrap>\n );\n}\n\n// lucide: arrow-down-up (hand-crafted — kept as-is)\nexport function ArrowDownUpTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Sort\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3 4.5h14.25M3 9h9.75M3 13.5h5.25m5.25-.75L17.25 9m0 0L21 12.75M17.25 9v10.5\"\n />\n </Wrap>\n );\n}\n\n// lucide: bell v0.577.0\nexport function BellTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Notifications\" {...props}>\n <path d=\"M10.268 21a2 2 0 0 0 3.464 0\" />\n <path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\" />\n </Wrap>\n );\n}\n\n// lucide: bell-ring v0.577.0 — animated cousin of bell, used for \"has unread\"\nexport function BellRingTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Notifications\" {...props}>\n <path d=\"M10.268 21a2 2 0 0 0 3.464 0\" />\n <path d=\"M22 8c0-2.3-.8-4.3-2-6\" />\n <path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\" />\n <path d=\"M4 2C2.8 3.7 2 5.7 2 8\" />\n </Wrap>\n );\n}\n\n// lucide: zap v0.577.0 — lightning bolt, used as the Quick Actions trigger\nexport function ZapTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Quick actions\" {...props}>\n <path d=\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\" />\n </Wrap>\n );\n}\n\n// lucide: upload v0.577.0\nexport function UploadTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Upload\" {...props}>\n <path d=\"M12 3v12\" />\n <path d=\"m17 8-5-5-5 5\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n </Wrap>\n );\n}\n\n// lucide: download v0.577.0\nexport function DownloadTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Download\" {...props}>\n <path d=\"M12 15V3\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n </Wrap>\n );\n}\n\n// lucide: share-2 v0.577.0\nexport function ShareTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Share\" {...props}>\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n <circle cx=\"6\" cy=\"12\" r=\"3\" />\n <circle cx=\"18\" cy=\"19\" r=\"3\" />\n <line x1=\"8.59\" x2=\"15.42\" y1=\"13.51\" y2=\"17.49\" />\n <line x1=\"15.41\" x2=\"8.59\" y1=\"6.51\" y2=\"10.49\" />\n </Wrap>\n );\n}\n\n// lucide: undo v0.577.0\nexport function UndoTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Undo\" {...props}>\n <path d=\"M3 7v6h6\" />\n <path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\" />\n </Wrap>\n );\n}\n\n// lucide: redo v0.577.0\nexport function RedoTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Redo\" {...props}>\n <path d=\"M21 7v6h-6\" />\n <path d=\"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7\" />\n </Wrap>\n );\n}\n\n// lucide: copy v0.577.0\nexport function CopyTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Copy\" {...props}>\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </Wrap>\n );\n}\n\n// lucide: trash v0.577.0\nexport function TrashTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Delete\" {...props}>\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" />\n <path d=\"M3 6h18\" />\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n </Wrap>\n );\n}\n\n// lucide: files v0.577.0\nexport function FilesTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Copy all\" {...props}>\n <path d=\"M20 7h-3a2 2 0 0 1-2-2V2\" />\n <path d=\"M9 18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h7l4 4v10a2 2 0 0 1-2 2Z\" />\n <path d=\"M3 7.6v12.8A1.6 1.6 0 0 0 4.6 22h9.8\" />\n </Wrap>\n );\n}\n\n// lucide: chevron-left v0.577.0 — arms extended from 6 to 7 (45° kept) for a\n// slightly larger glyph that better fills the 32px inner pill.\nexport function ChevronLeftTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Back\" {...props}>\n <path d=\"m16 19-7-7 7-7\" />\n </Wrap>\n );\n}\n\n// lucide: chevron-right v0.577.0\nexport function ChevronRightTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Next\" {...props}>\n <path d=\"m9 18 6-6-6-6\" />\n </Wrap>\n );\n}\n\n// lucide: panel-left v0.577.0\nexport function PanelLeftTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Toggle sidebar\" {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M9 3v18\" />\n </Wrap>\n );\n}\n\n// lucide: panel-right v0.577.0\nexport function PanelRightTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Toggle sidebar\" {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M15 3v18\" />\n </Wrap>\n );\n}\n\n// lucide: square-pen v0.577.0\nexport function SquarePenTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"New chat\" {...props}>\n <path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\" />\n </Wrap>\n );\n}\n\n// lucide: x v0.577.0\nexport function XTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Close\" {...props}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </Wrap>\n );\n}\n\n// lucide: funnel v0.577.0 (filter is an alias for funnel in this version)\nexport function FilterTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Filter\" {...props}>\n <path d=\"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\" />\n </Wrap>\n );\n}\n\n// lucide: play v0.577.0\nexport function PlayTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Play\" {...props}>\n <path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" />\n </Wrap>\n );\n}\n\n// lucide: pause v0.577.0 — two rects (redesigned from bar paths)\nexport function PauseTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Pause\" {...props}>\n <rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" />\n <rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" />\n </Wrap>\n );\n}\n\n// lucide: square v0.577.0 (stop uses filled square)\nexport function StopTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Stop\" {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n </Wrap>\n );\n}\n\n// lucide: volume-2 v0.577.0\nexport function Volume2TapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Speaker\" {...props}>\n <path d=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\" />\n <path d=\"M16 9a5 5 0 0 1 0 6\" />\n <path d=\"M19.364 18.364a9 9 0 0 0 0-12.728\" />\n </Wrap>\n );\n}\n\n// lucide: arrow-up v0.577.0\nexport function ArrowUpTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Send\" {...props}>\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </Wrap>\n );\n}\n\n// lucide: mic v0.577.0\nexport function MicTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Start recording\" {...props}>\n <path d=\"M12 19v3\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <rect x=\"9\" y=\"2\" width=\"6\" height=\"13\" rx=\"3\" />\n </Wrap>\n );\n}\n\n// lucide: mic-off v0.577.0\nexport function MicOffTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Stop recording\" {...props}>\n <path d=\"M12 19v3\" />\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\n <path d=\"M16.95 16.95A7 7 0 0 1 5 12v-2\" />\n <path d=\"M18.89 13.23A7 7 0 0 0 19 12v-2\" />\n <path d=\"m2 2 20 20\" />\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\n </Wrap>\n );\n}\n\n// lucide: triangle-alert v0.577.0\nexport function TriangleAlertTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Alert\" {...props}>\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </Wrap>\n );\n}\n\n// lucide: shield-check (context set)\nexport function ShieldCheckTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Context set\" {...props}>\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"m9 12 2 2 4-4\" />\n </Wrap>\n );\n}\n\n// lucide: shield-alert (context unset)\nexport function ShieldAlertTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"No context\" {...props}>\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n </Wrap>\n );\n}\n\n// lucide: bug v0.577.0 (major update — full insect anatomy)\nexport function BugTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Debug\" {...props}>\n <path d=\"M12 20v-9\" />\n <path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\" />\n <path d=\"M14.12 3.88 16 2\" />\n <path d=\"M21 21a4 4 0 0 0-3.81-4\" />\n <path d=\"M21 5a4 4 0 0 1-3.55 3.97\" />\n <path d=\"M22 13h-4\" />\n <path d=\"M3 21a4 4 0 0 1 3.81-4\" />\n <path d=\"M3 5a4 4 0 0 0 3.55 3.97\" />\n <path d=\"M6 13H2\" />\n <path d=\"m8 2 1.88 1.88\" />\n <path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\" />\n </Wrap>\n );\n}\n\n// lucide: settings-2 v0.577.0 (gear + center circle — kept as-is, matches intent)\nexport function Settings2TapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Settings\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </Wrap>\n );\n}\n\n// lucide: save (hand-crafted floppy disk — no direct Lucide equivalent, kept as-is)\nexport function SaveTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Save\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M4.5 6a2 2 0 012-2h9.25L20.5 9v9a2 2 0 01-2 2h-12a2 2 0 01-2-2V6z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8.5 4v4.5a.5.5 0 00.5.5h6a.5.5 0 00.5-.5V4\"\n />\n <rect\n x=\"8\"\n y=\"14\"\n width=\"8\"\n height=\"5.5\"\n rx=\"0.5\"\n strokeLinejoin=\"round\"\n />\n </Wrap>\n );\n}\n\n// lucide: send v0.577.0 (paper-airplane redesign)\nexport function SendTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Send\" {...props}>\n <path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\" />\n <path d=\"m21.854 2.147-10.94 10.939\" />\n </Wrap>\n );\n}\n\n// lucide: message-square v0.577.0\nexport function MessageTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Message\" {...props}>\n <path d=\"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\" />\n </Wrap>\n );\n}\n\n// lucide: variable v0.577.0 (major update — uses line elements + bracket paths)\nexport function VariableTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Variable\" {...props}>\n <path d=\"M8 21s-4-3-4-9 4-9 4-9\" />\n <path d=\"M16 3s4 3 4 9-4 9-4 9\" />\n <line x1=\"15\" x2=\"9\" y1=\"9\" y2=\"15\" />\n <line x1=\"9\" x2=\"15\" y1=\"9\" y2=\"15\" />\n </Wrap>\n );\n}\n\n// lucide: wrench v0.577.0 (single clean path)\nexport function WrenchTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Tool\" {...props}>\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\" />\n </Wrap>\n );\n}\n\n// lucide: command v0.577.0 (single continuous path)\nexport function CommandTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Command\" {...props}>\n <path d=\"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3\" />\n </Wrap>\n );\n}\n\n// lucide: terminal v0.577.0 (two paths: chevron + underline)\nexport function TerminalTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Terminal\" {...props}>\n <path d=\"M12 19h8\" />\n <path d=\"m4 17 6-6-6-6\" />\n </Wrap>\n );\n}\n\n// lucide: test-tube v0.577.0 (3 clean paths)\nexport function TestTubeTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Test\" {...props}>\n <path d=\"M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5c-1.4 0-2.5-1.1-2.5-2.5V2\" />\n <path d=\"M8.5 2h7\" />\n <path d=\"M14.5 16h-5\" />\n </Wrap>\n );\n}\n\n// lucide: rotate-ccw v0.577.0 (same shape as history minus the clock hand — used for Reset)\nexport function ResetTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Reset\" {...props}>\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n </Wrap>\n );\n}\n\n// lucide: eraser v0.577.0 (major update — proper eraser shape)\nexport function ClearTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Clear\" {...props}>\n <path d=\"M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21\" />\n <path d=\"m5.082 11.09 8.828 8.828\" />\n </Wrap>\n );\n}\n\n// lucide: refresh-cw v1.22.0 (dual arrows — was a broken hand-crafted Heroicons-style path)\nexport function RetryTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Retry\" {...props}>\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </Wrap>\n );\n}\n\n/** Alias — same Lucide refresh-cw glyph as RetryTapButton. */\nexport function RefreshCwTapButton(props: TapButtonProps) {\n return <RetryTapButton ariaLabel=\"Refresh\" {...props} />;\n}\n\n// lucide: loading spinner (custom animated — no Lucide equivalent)\nexport function LoadingTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Loading\" {...props}>\n <circle\n className=\"animate-spin\"\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n strokeDasharray=\"28.27\"\n strokeDashoffset=\"9\"\n strokeLinecap=\"round\"\n style={{ transformOrigin: \"12px 12px\" }}\n />\n </Wrap>\n );\n}\n\n// lucide: bot/robot (hand-crafted — kept as-is)\nexport function RobotTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"AI Agent\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9 3.75H6.912a2.25 2.25 0 00-2.15 1.588L2.35 13.177a2.25 2.25 0 00-.1.661V18a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18v-4.162c0-.224-.034-.447-.1-.661L19.24 5.338a2.25 2.25 0 00-2.15-1.588H15M2.25 13.5h3.86a2.25 2.25 0 012.012 1.244l.256.512a2.25 2.25 0 002.013 1.244h3.218a2.25 2.25 0 002.013-1.244l.256-.512a2.25 2.25 0 012.013-1.244h3.859M12 3v8.25m0 0-3-3m3 3 3-3\"\n />\n </Wrap>\n );\n}\n\n// lucide: webhook v0.577.0\nexport function WebhookTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Webhook\" {...props}>\n <path d=\"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2\" />\n <path d=\"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06\" />\n <path d=\"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8\" />\n </Wrap>\n );\n}\n\n// lucide: eye v0.577.0\nexport function ViewTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"View\" {...props}>\n <path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </Wrap>\n );\n}\n\n// lucide: hammer v0.577.0\nexport function BuildTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Build\" {...props}>\n <path d=\"m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9\" />\n <path d=\"m18 15 4-4\" />\n <path d=\"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5\" />\n </Wrap>\n );\n}\n\n// lucide: play v0.577.0 (alias for Run context)\nexport function RunTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Run\" {...props}>\n <path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" />\n </Wrap>\n );\n}\n\n// lucide: history v0.577.0\nexport function HistoryTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"History\" {...props}>\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n <path d=\"M12 7v5l4 2\" />\n </Wrap>\n );\n}\n\n// lucide: paperclip v0.577.0\nexport function PaperclipTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Attach file\" {...props}>\n <path d=\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\" />\n </Wrap>\n );\n}\n\n// lucide: thumbs-up v0.577.0\nexport function ThumbsUpTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Like\" {...props}>\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </Wrap>\n );\n}\n\n// lucide: thumbs-down v0.577.0\nexport function ThumbsDownTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Dislike\" {...props}>\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </Wrap>\n );\n}\n\n// lucide: check v0.577.0\nexport function CheckTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Done\" {...props}>\n <path d=\"M20 6 9 17l-5-5\" />\n </Wrap>\n );\n}\n\n// lucide: pencil v0.577.0\nexport function PencilTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Edit\" {...props}>\n <path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\" />\n <path d=\"m15 5 4 4\" />\n </Wrap>\n );\n}\n\n// lucide: ellipsis (more-horizontal) v0.577.0\nexport function MoreHorizontalTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"More options\" {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </Wrap>\n );\n}\n\n// lucide: check-square v0.577.0\nexport function CheckSquareTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Task\" {...props}>\n <path d=\"m9 11 3 3L22 4\" />\n <path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\" />\n </Wrap>\n );\n}\n\n// lucide: ghost v0.577.0\nexport function GhostTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Incognito chat\" {...props}>\n <path d=\"M9 10h.01\" />\n <path d=\"M15 10h.01\" />\n <path d=\"M12 2a8 8 0 0 0-8 8v12l3-3 2.5 2.5L12 19l2.5 2.5L17 19l3 3V10a8 8 0 0 0-8-8z\" />\n </Wrap>\n );\n}\n\n// lucide: link (chain link — used for \"attach to task\") v0.577.0\nexport function LinkTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Attach\" {...props}>\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </Wrap>\n );\n}\n\n// lucide: external-link v0.577.0\nexport function ExternalLinkTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Open source\" {...props}>\n <path d=\"M15 3h6v6\" />\n <path d=\"M10 14 21 3\" />\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n </Wrap>\n );\n}\n\n// lucide: clipboard-list v0.577.0\nexport function ClipboardListTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Copy Pages\" {...props}>\n <rect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\" />\n <path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\" />\n <path d=\"M12 11h4\" />\n <path d=\"M12 16h4\" />\n <path d=\"M8 11h.01\" />\n <path d=\"M8 16h.01\" />\n </Wrap>\n );\n}\n\n// lucide: party-popper v0.577.0\nexport function PartyPopperTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"AI Clean\" {...props}>\n <path d=\"M5.8 11.3 2 22l10.7-3.79\" />\n <path d=\"M4 3h.01\" />\n <path d=\"M22 8h.01\" />\n <path d=\"M15 2h.01\" />\n <path d=\"M22 20h.01\" />\n <path d=\"m22 2-2.24.75a2.9 2.9 0 0 0-1.96 3.12c.1.86-.57 1.63-1.45 1.63h-.38c-.86 0-1.6.6-1.76 1.44L14 10\" />\n <path d=\"m22 13-.82-.33c-.86-.34-1.82.2-1.98 1.11c-.11.7-.72 1.22-1.43 1.22H17\" />\n <path d=\"m11 2 .33.82c.34.86-.2 1.82-1.11 1.98C9.52 4.9 9 5.52 9 6.23V7\" />\n <path d=\"M11 13c1.93 1.93 2.83 4.17 2 5-.83.83-3.07-.07-5-2-1.93-1.93-2.83-4.17-2-5 .83-.83 3.07.07 5 2Z\" />\n </Wrap>\n );\n}\n\n// lucide: layers v0.577.0 — \"this PDF everywhere\" surface switcher\nexport function LayersTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Open this PDF in another surface\" {...props}>\n <path d=\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\" />\n <path d=\"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\" />\n <path d=\"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\" />\n </Wrap>\n );\n}\n","\"use client\";\n\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ButtonHTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@ai-matrx/design-system\";\nimport { cn } from \"./cn\";\nimport {\n getTapTargetLinkComponent,\n type TapTargetLinkComponent,\n} from \"./link\";\n\nexport interface TapTargetButtonProps {\n icon?: React.ReactNode;\n children?: React.ReactNode;\n strokeWidth?: number | undefined;\n onClick?: (() => void) | undefined;\n className?: string | undefined;\n as?: \"button\" | \"label\" | undefined;\n htmlFor?: string | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n /**\n * When set, the tap button renders as a link instead of a button.\n * - Internal hrefs (e.g. \"/tasks\") render via the injected link component\n * (`setTapTargetLinkComponent` / the `linkComponent` prop), falling back\n * to a plain `<a>` when none is registered.\n * - External hrefs (http://, https://, mailto:, tel:) render as `<a>`\n * with `target=\"_blank\"` and `rel=\"noopener noreferrer\"` by default.\n * - When combined with `disabled`, the trigger renders as a non-navigable\n * `<span aria-disabled=\"true\">` with the same visual styling.\n */\n href?: string | undefined;\n /** Override target. Works on both internal links and external anchors. */\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n /** Override rel. Works on both internal links and external anchors. */\n rel?: string | undefined;\n /** Forwarded to the injected link component. Pass `false` to disable prefetching. */\n prefetch?: boolean | null | undefined;\n /**\n * Per-instance link component for internal hrefs — overrides the\n * module-level `setTapTargetLinkComponent` registration.\n */\n linkComponent?: TapTargetLinkComponent | undefined;\n /**\n * Tooltip text. Defaults to `ariaLabel` when omitted.\n * Pass `false` to explicitly disable the tooltip.\n */\n tooltip?: string | false | undefined;\n /** Tooltip placement. Defaults to \"top\". */\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\" | undefined;\n /** Tooltip alignment along its side. Defaults to \"center\". */\n tooltipAlign?: \"start\" | \"center\" | \"end\" | undefined;\n /**\n * Visible caption rendered inline after the icon (`[icon Label]`).\n * Widens the pill automatically. Tooltip defaults to off when set — the\n * label is self-describing. Visible text becomes the accessible name.\n */\n label?: string | undefined;\n /**\n * Collapse an icon + caption pill to its icon-only 44px tap target below\n * the `sm` breakpoint. The caption and inline geometry return at `sm+`;\n * `ariaLabel` (falling back to `label`) remains the accessible name.\n */\n mobileIconOnly?: boolean | undefined;\n}\n\nexport interface TapTargetButtonSolidProps extends TapTargetButtonProps {\n bgColor?: string | undefined;\n iconColor?: string | undefined;\n hoverBgColor?: string | undefined;\n /**\n * Press-state background. Defaults to `active:brightness-90` which works on\n * any color. Override when using a custom `bgColor` that should darken to a\n * specific shade on press (e.g. `active:bg-primary/60`).\n */\n activeBgColor?: string | undefined;\n}\n\nconst EXTERNAL_RE = /^(https?:|mailto:|tel:)/i;\n\n// Geometry + press feedback + tap hygiene are the SINGLE SOURCE OF TRUTH in\n// the shipped stylesheet (the `.matrx-tap-*` family in styles.css — import\n// \"@ai-matrx/tap-target/styles.css\" once at app root). This component only\n// picks the right class and layers each variant's decoration on top.\nconst TAP_OUTER_CLASS = \"matrx-tap-target group\";\nconst TAP_GROUP_OUTER_CLASS = \"matrx-tap-target matrx-tap-target-sm group\";\n\nfunction IconContent({\n icon,\n children,\n strokeWidth = 2,\n className,\n}: Pick<\n TapTargetButtonProps,\n \"icon\" | \"children\" | \"strokeWidth\" | \"className\"\n>) {\n if (icon) {\n if (isValidElement<{ className?: string }>(icon)) {\n return cloneElement(icon, {\n className: cn(className, icon.props.className),\n });\n }\n return <span className={className}>{icon}</span>;\n }\n return (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n >\n {children}\n </svg>\n );\n}\n\ntype TapTargetSize = \"default\" | \"sm\";\n\nfunction resolveTapGeometry(\n label: string | undefined,\n size: TapTargetSize,\n mobileIconOnly: boolean,\n) {\n const inline = Boolean(label);\n if (size === \"sm\") {\n return {\n outerClassName:\n inline && mobileIconOnly\n ? \"matrx-tap-target matrx-tap-target-sm matrx-tap-target-mobile-icon-only-sm group\"\n : inline\n ? \"matrx-tap-target matrx-tap-target-sm matrx-tap-target-inline-sm group\"\n : TAP_GROUP_OUTER_CLASS,\n inlineModifier: mobileIconOnly\n ? \"matrx-tap-pill-mobile-icon-only-sm\"\n : \"matrx-tap-pill-inline-sm\",\n };\n }\n return {\n outerClassName:\n inline && mobileIconOnly\n ? `${TAP_OUTER_CLASS} matrx-tap-target-mobile-icon-only`\n : inline\n ? `${TAP_OUTER_CLASS} matrx-tap-target-inline`\n : TAP_OUTER_CLASS,\n inlineModifier: mobileIconOnly\n ? \"matrx-tap-pill-mobile-icon-only\"\n : \"matrx-tap-pill-inline\",\n };\n}\n\nfunction buildTapInner({\n label,\n pillClassName,\n iconClassName,\n labelClassName,\n inlineModifier,\n icon,\n children,\n strokeWidth = 2,\n}: {\n label?: string | undefined;\n pillClassName: string;\n iconClassName: string;\n labelClassName?: string | undefined;\n inlineModifier: string;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n strokeWidth?: number | undefined;\n}) {\n const iconEl = (\n <IconContent\n icon={icon}\n strokeWidth={strokeWidth}\n className={iconClassName}\n >\n {children}\n </IconContent>\n );\n const pillClasses = label\n ? `${pillClassName} ${inlineModifier}`.trim()\n : pillClassName;\n\n if (!label) {\n return <div className={pillClasses}>{iconEl}</div>;\n }\n\n return (\n <div className={pillClasses}>\n {iconEl}\n <span className={labelClassName ?? \"matrx-tap-label\"}>{label}</span>\n </div>\n );\n}\n\ninterface RenderTapTargetArgs extends Pick<\n TapTargetButtonProps,\n | \"icon\"\n | \"children\"\n | \"strokeWidth\"\n | \"label\"\n | \"mobileIconOnly\"\n | \"onClick\"\n | \"as\"\n | \"htmlFor\"\n | \"ariaLabel\"\n | \"disabled\"\n | \"href\"\n | \"target\"\n | \"rel\"\n | \"prefetch\"\n | \"linkComponent\"\n | \"tooltip\"\n | \"tooltipSide\"\n | \"tooltipAlign\"\n> {\n size?: TapTargetSize;\n pillClassName: string;\n iconClassName: string;\n labelClassName?: string | undefined;\n rest?: ButtonHTMLAttributes<HTMLButtonElement> | undefined;\n buttonRef?: Ref<HTMLButtonElement> | undefined;\n}\n\nfunction renderTapTarget({\n size = \"default\",\n pillClassName,\n iconClassName,\n labelClassName,\n icon,\n children,\n strokeWidth,\n label,\n mobileIconOnly = false,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n rest,\n buttonRef,\n}: RenderTapTargetArgs): ReactElement {\n const { outerClassName, inlineModifier } = resolveTapGeometry(\n label,\n size,\n mobileIconOnly,\n );\n const responsiveLabelClassName = mobileIconOnly\n ? `${labelClassName ?? \"matrx-tap-label\"} matrx-tap-label-mobile-icon-only`\n : labelClassName;\n const inner = buildTapInner({\n label,\n pillClassName,\n iconClassName,\n labelClassName: responsiveLabelClassName,\n inlineModifier: label ? inlineModifier : \"\",\n icon,\n children,\n strokeWidth,\n });\n const resolvedTooltip =\n tooltip !== undefined ? tooltip : label ? false : undefined;\n const triggerAriaLabel =\n label && !mobileIconOnly ? undefined : (ariaLabel ?? label);\n const trigger = renderTrigger({\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n as,\n htmlFor,\n onClick,\n ariaLabel: triggerAriaLabel,\n disabled,\n outerClassName,\n children: inner,\n rest,\n buttonRef,\n });\n return withTooltip(trigger, {\n tooltip: resolvedTooltip,\n ariaLabel: triggerAriaLabel,\n disabled,\n tooltipSide,\n tooltipAlign,\n });\n}\n\ninterface RenderTriggerArgs {\n href?: string | undefined;\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n rel?: string | undefined;\n prefetch?: boolean | null | undefined;\n linkComponent?: TapTargetLinkComponent | undefined;\n as?: \"button\" | \"label\" | undefined;\n htmlFor?: string | undefined;\n onClick?: (() => void) | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n outerClassName: string;\n children: ReactNode;\n rest?: ButtonHTMLAttributes<HTMLButtonElement> | undefined;\n buttonRef?: Ref<HTMLButtonElement> | undefined;\n}\n\n/**\n * Resolves the correct trigger element based on the props passed.\n *\n * - `href` + `disabled` → unclickable `<span aria-disabled>`\n * - `href` matching `http(s):|mailto:|tel:` → `<a target=\"_blank\" rel=\"noopener noreferrer\">`\n * - `href` (internal) → the injected link component (per-instance\n * `linkComponent` prop, else `setTapTargetLinkComponent` registration),\n * falling back to a plain `<a>` when none is registered\n * - `as=\"label\"` → `<label htmlFor=...>`\n * - default → `<button>`\n */\nfunction renderTrigger({\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n as,\n htmlFor,\n onClick,\n ariaLabel,\n disabled,\n outerClassName,\n children,\n rest,\n buttonRef,\n}: RenderTriggerArgs): ReactElement {\n if (disabled && href) {\n return (\n <span\n aria-disabled=\"true\"\n aria-label={ariaLabel}\n className={`${outerClassName} opacity-40 pointer-events-none`}\n >\n {children}\n </span>\n );\n }\n if (href) {\n const isExternal = EXTERNAL_RE.test(href);\n if (isExternal) {\n return (\n <a\n href={href}\n target={target ?? \"_blank\"}\n rel={rel ?? \"noopener noreferrer\"}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </a>\n );\n }\n const Link = linkComponent ?? getTapTargetLinkComponent();\n if (Link) {\n return (\n <Link\n href={href}\n target={target}\n rel={rel}\n prefetch={prefetch}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </Link>\n );\n }\n // No link component registered — plain <a>. `prefetch` is a router hint,\n // not a DOM attribute, so it is deliberately dropped here.\n return (\n <a\n href={href}\n target={target}\n rel={rel}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </a>\n );\n }\n if (as === \"label\") {\n return (\n <label\n htmlFor={htmlFor}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </label>\n );\n }\n return (\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={onClick}\n aria-label={ariaLabel}\n disabled={disabled}\n {...rest}\n className={outerClassName}\n >\n {children}\n </button>\n );\n}\n\n/**\n * Wraps a trigger element in a Tooltip when a tooltip label is available.\n * Falls back to `ariaLabel` when `tooltip` is not explicitly set. If both\n * are absent (or `tooltip === false`), the trigger is returned unwrapped.\n */\nfunction withTooltip(\n trigger: ReactElement,\n {\n tooltip,\n ariaLabel,\n disabled,\n tooltipSide = \"top\",\n tooltipAlign = \"center\",\n }: {\n tooltip?: string | false | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\" | undefined;\n tooltipAlign?: \"start\" | \"center\" | \"end\" | undefined;\n },\n): ReactElement {\n if (tooltip === false) return trigger;\n const label =\n typeof tooltip === \"string\" && tooltip.length > 0 ? tooltip : ariaLabel;\n if (!label) return trigger;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n {disabled ? (\n // Radix Tooltip triggers need a hoverable element; a disabled button\n // does not dispatch pointer events, so we wrap in a span for the\n // trigger target while keeping the disabled visual state.\n <span className=\"inline-flex\">{trigger}</span>\n ) : (\n trigger\n )}\n </TooltipTrigger>\n <TooltipContent side={tooltipSide} align={tooltipAlign}>\n {label}\n </TooltipContent>\n </Tooltip>\n );\n}\n\n// To resize/retune every tap button, edit styles.css — not here.\n\nexport const TapTargetButton = forwardRef<\n HTMLButtonElement,\n TapTargetButtonProps & ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButton(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n className,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n const color = className ?? \"text-foreground\";\n return renderTapTarget({\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName: \"matrx-tap-pill matrx-glass-thin-border\",\n iconClassName: `matrx-tap-icon ${color}`,\n rest,\n buttonRef: ref,\n });\n});\n\nexport const TapTargetButtonTransparent = forwardRef<\n HTMLButtonElement,\n TapTargetButtonProps & React.ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonTransparent(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n className,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n const color = className ?? \"text-foreground\";\n return renderTapTarget({\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName:\n \"matrx-tap-pill hover:bg-muted active:bg-muted-foreground/15\",\n iconClassName: `matrx-tap-icon ${color}`,\n rest,\n buttonRef: ref,\n });\n});\n\nexport const TapTargetButtonSolid = forwardRef<\n HTMLButtonElement,\n TapTargetButtonSolidProps & React.ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonSolid(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n bgColor = \"bg-primary\",\n iconColor = \"text-primary-foreground\",\n hoverBgColor = \"hover:bg-primary/80\",\n activeBgColor = \"active:brightness-90\",\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n return renderTapTarget({\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName: `matrx-tap-pill ${bgColor} ${iconColor} ${hoverBgColor} ${activeBgColor}`,\n iconClassName: `matrx-tap-icon ${iconColor}`,\n labelClassName: `matrx-tap-label ${iconColor}`,\n rest,\n buttonRef: ref,\n });\n});\n\n/** Solid destructive pill — delete/remove actions. White-on-red like the\n * primary solid is white-on-blue. Use THIS, never hand-pass bg-destructive\n * with the default (dark) icon color. */\nexport const TapTargetButtonDestructive = forwardRef<\n HTMLButtonElement,\n TapTargetButtonSolidProps & React.ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonDestructive(\n {\n bgColor = \"bg-destructive\",\n iconColor = \"text-destructive-foreground\",\n hoverBgColor = \"hover:bg-destructive/90\",\n ...rest\n },\n ref,\n) {\n return (\n <TapTargetButtonSolid\n ref={ref}\n bgColor={bgColor}\n iconColor={iconColor}\n hoverBgColor={hoverBgColor}\n {...rest}\n />\n );\n});\n\nexport const TapTargetButtonForGroup = forwardRef<\n HTMLButtonElement,\n TapTargetButtonProps & ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonForGroup(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n className,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n const color = className ?? \"text-foreground\";\n return renderTapTarget({\n size: \"sm\",\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName: \"matrx-tap-pill matrx-tap-pill-sm matrx-glass-interactive\",\n iconClassName: `matrx-tap-icon ${color}`,\n labelClassName: `matrx-tap-label ${color}`,\n rest,\n buttonRef: ref,\n });\n});\n\nexport function TapTargetButtonGroup({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string | undefined;\n}) {\n return (\n <div\n className={\n className\n ? `relative inline-flex h-9 items-center ${className}`\n : \"relative inline-flex h-9 items-center\"\n }\n >\n <div className=\"pointer-events-none absolute inset-x-0 top-1/2 -translate-y-1/2 h-7 rounded-full matrx-glass-thin-border\" />\n {/* min-w-0 lets flexible children (e.g. a truncating filename) shrink\n under container pressure; fixed-size tap buttons are unaffected. */}\n <div className=\"relative flex min-w-0 items-center\">{children}</div>\n </div>\n );\n}\n","/**\n * Minimal className join — the only piece of `cn` this package needs.\n * No tailwind-merge / clsx dependency by design: callers pass literal strings.\n */\nexport function cn(\n ...values: Array<string | null | undefined | false>\n): string {\n return values.filter(Boolean).join(\" \").trim();\n}\n","import type { ComponentType, ReactNode } from \"react\";\n\n/**\n * The injectable link seam — the package's replacement for the original\n * hard `next/link` import.\n *\n * Internal hrefs (anything NOT matching `http(s):`, `mailto:`, `tel:`) render\n * through the link component resolved here; external hrefs always render a\n * plain `<a target=\"_blank\" rel=\"noopener noreferrer\">`, exactly like the\n * original. When nothing is registered and no per-instance `linkComponent`\n * prop is given, internal hrefs fall back to a plain `<a>` (no prefetch, no\n * client-side routing — still a working link).\n */\nexport interface TapTargetLinkProps {\n href: string;\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n rel?: string | undefined;\n /** Router prefetch hint (next/link semantics). Plain `<a>` fallback ignores it. */\n prefetch?: boolean | null | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n children?: ReactNode;\n}\n\nexport type TapTargetLinkComponent = ComponentType<TapTargetLinkProps>;\n\n/**\n * The registered component lives in a `Symbol.for` slot on `globalThis` — NOT\n * in module state — so it survives the module graph being instantiated more\n * than once: the `.` and `./buttons` dist bundles each inline the primitives\n * (tsup `splitting: false`), and a consumer may even mix `import` and\n * `require`. One registration must reach every copy.\n */\nconst LINK_SLOT = Symbol.for(\"@ai-matrx/tap-target:link-component\");\n\ntype GlobalWithLinkSlot = typeof globalThis & {\n [LINK_SLOT]?: TapTargetLinkComponent | null;\n};\n\n/**\n * Register the app's link component once at startup (e.g. `next/link`):\n *\n * ```tsx\n * import Link from \"next/link\";\n * import { setTapTargetLinkComponent } from \"@ai-matrx/tap-target\";\n * setTapTargetLinkComponent(Link);\n * ```\n *\n * Pass `null` to unregister (plain `<a>` fallback resumes).\n */\nexport function setTapTargetLinkComponent(\n component: TapTargetLinkComponent | null,\n): void {\n (globalThis as GlobalWithLinkSlot)[LINK_SLOT] = component;\n}\n\n/** The currently registered link component, or `null` when none is set. */\nexport function getTapTargetLinkComponent(): TapTargetLinkComponent | null {\n return (globalThis as GlobalWithLinkSlot)[LINK_SLOT] ?? null;\n}\n"],"mappings":"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","names":["import_react","TapTargetButton","TapTargetButtonTransparent","TapTargetButtonSolid","TapTargetButtonDestructive","TapTargetButtonForGroup","import_jsx_runtime","Wrap"]}
1
+ {"version":3,"sources":["../src/buttons.ts","../src/tap-buttons.tsx","../src/tap-target-button.tsx","../src/cn.ts","../src/link.ts"],"sourcesContent":["// @ai-matrx/tap-target/buttons — the ~60 pre-composed one-tag buttons.\n// Heavy by design (every glyph inlined); import from this subpath only where\n// pre-composed buttons are actually used.\n\nexport * from \"./tap-buttons\";\n","\"use client\";\n\nimport { forwardRef, type Ref } from \"react\";\n// The spinner loop comes from `@ai-matrx/design-system`'s motion layer — the\n// package this one already depends on — NOT from core Tailwind's\n// `animate-spin` and NOT from a keyframe copied into this package's\n// stylesheet. See the note above `LoadingTapButton`.\nimport { MOTION_SPIN } from \"@ai-matrx/design-system\";\nimport {\n TapTargetButton,\n TapTargetButtonTransparent,\n TapTargetButtonSolid,\n TapTargetButtonForGroup,\n} from \"./tap-target-button\";\nimport type { TapTargetLinkComponent } from \"./link\";\n\n// ---------------------------------------------------------------------------\n// Shared types\n// ---------------------------------------------------------------------------\n\ntype Variant = \"glass\" | \"transparent\" | \"solid\" | \"group\";\n\nexport interface TapButtonProps {\n /** Forwarded to the underlying button (Radix `asChild`, focus chains, etc.). */\n ref?: Ref<HTMLButtonElement> | undefined;\n variant?: Variant | undefined;\n onClick?: (() => void) | undefined;\n as?: \"button\" | \"label\" | undefined;\n htmlFor?: string | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n tabIndex?: number | undefined;\n className?: string | undefined;\n strokeWidth?: number | undefined;\n // Solid-variant color overrides — only used when variant=\"solid\"\n bgColor?: string | undefined;\n iconColor?: string | undefined;\n hoverBgColor?: string | undefined;\n activeBgColor?: string | undefined;\n // Link support — when set, the button renders as a link or <a>.\n // Internal hrefs use the injected link component (setTapTargetLinkComponent\n // or the `linkComponent` prop; plain <a> when none is registered); external\n // (http(s)://, mailto:, tel:) use <a> with target=\"_blank\" +\n // rel=\"noopener noreferrer\" by default. Pass an explicit `target` to\n // override (works for internal links too).\n href?: string | undefined;\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n rel?: string | undefined;\n prefetch?: boolean | null | undefined;\n /** Per-instance link component override for internal hrefs. */\n linkComponent?: TapTargetLinkComponent | undefined;\n // Tooltip support — defaults to `ariaLabel`. Pass `false` to opt out.\n tooltip?: string | false | undefined;\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\" | undefined;\n tooltipAlign?: \"start\" | \"center\" | \"end\" | undefined;\n /** Inline caption after the icon — see TapTargetButton `label`. */\n label?: string | undefined;\n /** Passthrough from AITapButtonProps / MakerTapButton — stripped before DOM. */\n colored?: boolean | undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Variant resolver — maps a variant string to the correct wrapper component.\n// Runs at build/server time so there's zero client cost.\n//\n// IMPORTANT: `Wrap` MUST forward refs. The pre-composed `*TapButton` functions\n// below are plain function components (in React 19 ref is a regular prop) and\n// spread `{...props}` to `Wrap` — that spread carries ref through. `Wrap`\n// extracts ref and passes it explicitly to the underlying `forwardRef`\n// primitive. Without this, every `*TapButton` placed inside a Radix\n// `*Trigger asChild` (DropdownMenu, Popover, Tooltip, etc.) silently loses\n// the ref — the popper can't anchor and Radix's injected event handlers /\n// `data-state` / `aria-*` get dropped. (Precedent: matrx-frontend\n// `features/files/FEATURE.md`, where this pattern was established.)\n// ---------------------------------------------------------------------------\n\nconst Wrap = forwardRef<\n HTMLButtonElement,\n TapButtonProps & { children: React.ReactNode }\n>(function Wrap(\n {\n variant = \"glass\",\n children,\n bgColor,\n iconColor,\n hoverBgColor,\n activeBgColor,\n // AITapButtonProps passthrough — not a DOM attribute (see ai-tap-buttons Wrap)\n colored: _colored,\n ...props\n },\n ref,\n) {\n switch (variant) {\n case \"transparent\":\n return (\n <TapTargetButtonTransparent ref={ref} {...props}>\n {children}\n </TapTargetButtonTransparent>\n );\n case \"solid\":\n return (\n <TapTargetButtonSolid\n ref={ref}\n bgColor={bgColor}\n iconColor={iconColor}\n hoverBgColor={hoverBgColor}\n activeBgColor={activeBgColor}\n {...props}\n >\n {children}\n </TapTargetButtonSolid>\n );\n case \"group\":\n return (\n <TapTargetButtonForGroup ref={ref} {...props}>\n {children}\n </TapTargetButtonForGroup>\n );\n default:\n return (\n <TapTargetButton ref={ref} {...props}>\n {children}\n </TapTargetButton>\n );\n }\n});\n\n// ---------------------------------------------------------------------------\n// Pre-composed buttons — one import, one tag, zero configuration needed.\n// Default variant is \"glass\". Override with variant=\"transparent\" etc.\n// All SVG paths match lucide-react v0.577.0 exactly.\n// ---------------------------------------------------------------------------\n\n// lucide: menu (hand-crafted HeroIcons path — no Lucide equivalent, kept as-is)\nexport function MenuTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Menu\" strokeWidth={1.75} {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\"\n />\n </Wrap>\n );\n}\n\n// lucide: plus (hand-crafted — no drift, kept as-is)\nexport function PlusTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Add\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 4.5v15m7.5-7.5h-15\"\n />\n </Wrap>\n );\n}\n\n// lucide: search → circle cx=11 cy=11 r=8 + line to 21,21\nexport function SearchTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Search\" {...props}>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.34-4.34\" />\n </Wrap>\n );\n}\n\n// lucide: settings (hand-crafted — kept as-is, Lucide uses \"settings-2\" pattern)\nexport function SettingsTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Settings\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\"\n />\n </Wrap>\n );\n}\n\n// lucide: maximize (hand-crafted corner-arrows — kept as-is)\nexport function MaximizeTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Fullscreen\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15\"\n />\n </Wrap>\n );\n}\n\n// lucide: home v0.577.0 — used as the \"Hub\" (main/list) action\nexport function HomeTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Hub\" {...props}>\n <path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\" />\n <path d=\"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n </Wrap>\n );\n}\n\n// lucide: layout-grid v0.577.0\nexport function LayoutGridTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Card view\" {...props}>\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"14\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"14\" rx=\"1\" />\n </Wrap>\n );\n}\n\n// lucide: list v0.577.0\nexport function ListTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Table view\" {...props}>\n <path d=\"M3 5h.01\" />\n <path d=\"M3 12h.01\" />\n <path d=\"M3 19h.01\" />\n <path d=\"M8 5h13\" />\n <path d=\"M8 12h13\" />\n <path d=\"M8 19h13\" />\n </Wrap>\n );\n}\n\n// lucide: arrow-down-up (hand-crafted — kept as-is)\nexport function ArrowDownUpTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Sort\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3 4.5h14.25M3 9h9.75M3 13.5h5.25m5.25-.75L17.25 9m0 0L21 12.75M17.25 9v10.5\"\n />\n </Wrap>\n );\n}\n\n// lucide: bell v0.577.0\nexport function BellTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Notifications\" {...props}>\n <path d=\"M10.268 21a2 2 0 0 0 3.464 0\" />\n <path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\" />\n </Wrap>\n );\n}\n\n// lucide: bell-ring v0.577.0 — animated cousin of bell, used for \"has unread\"\nexport function BellRingTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Notifications\" {...props}>\n <path d=\"M10.268 21a2 2 0 0 0 3.464 0\" />\n <path d=\"M22 8c0-2.3-.8-4.3-2-6\" />\n <path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\" />\n <path d=\"M4 2C2.8 3.7 2 5.7 2 8\" />\n </Wrap>\n );\n}\n\n// lucide: zap v0.577.0 — lightning bolt, used as the Quick Actions trigger\nexport function ZapTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Quick actions\" {...props}>\n <path d=\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\" />\n </Wrap>\n );\n}\n\n// lucide: upload v0.577.0\nexport function UploadTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Upload\" {...props}>\n <path d=\"M12 3v12\" />\n <path d=\"m17 8-5-5-5 5\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n </Wrap>\n );\n}\n\n// lucide: download v0.577.0\nexport function DownloadTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Download\" {...props}>\n <path d=\"M12 15V3\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n </Wrap>\n );\n}\n\n// lucide: share-2 v0.577.0\nexport function ShareTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Share\" {...props}>\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n <circle cx=\"6\" cy=\"12\" r=\"3\" />\n <circle cx=\"18\" cy=\"19\" r=\"3\" />\n <line x1=\"8.59\" x2=\"15.42\" y1=\"13.51\" y2=\"17.49\" />\n <line x1=\"15.41\" x2=\"8.59\" y1=\"6.51\" y2=\"10.49\" />\n </Wrap>\n );\n}\n\n// lucide: undo v0.577.0\nexport function UndoTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Undo\" {...props}>\n <path d=\"M3 7v6h6\" />\n <path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\" />\n </Wrap>\n );\n}\n\n// lucide: redo v0.577.0\nexport function RedoTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Redo\" {...props}>\n <path d=\"M21 7v6h-6\" />\n <path d=\"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7\" />\n </Wrap>\n );\n}\n\n// lucide: copy v0.577.0\nexport function CopyTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Copy\" {...props}>\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </Wrap>\n );\n}\n\n// lucide: trash v0.577.0\nexport function TrashTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Delete\" {...props}>\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" />\n <path d=\"M3 6h18\" />\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n </Wrap>\n );\n}\n\n// lucide: files v0.577.0\nexport function FilesTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Copy all\" {...props}>\n <path d=\"M20 7h-3a2 2 0 0 1-2-2V2\" />\n <path d=\"M9 18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h7l4 4v10a2 2 0 0 1-2 2Z\" />\n <path d=\"M3 7.6v12.8A1.6 1.6 0 0 0 4.6 22h9.8\" />\n </Wrap>\n );\n}\n\n// lucide: chevron-left v0.577.0 — arms extended from 6 to 7 (45° kept) for a\n// slightly larger glyph that better fills the 32px inner pill.\nexport function ChevronLeftTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Back\" {...props}>\n <path d=\"m16 19-7-7 7-7\" />\n </Wrap>\n );\n}\n\n// lucide: chevron-right v0.577.0\nexport function ChevronRightTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Next\" {...props}>\n <path d=\"m9 18 6-6-6-6\" />\n </Wrap>\n );\n}\n\n// lucide: panel-left v0.577.0\nexport function PanelLeftTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Toggle sidebar\" {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M9 3v18\" />\n </Wrap>\n );\n}\n\n// lucide: panel-right v0.577.0\nexport function PanelRightTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Toggle sidebar\" {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M15 3v18\" />\n </Wrap>\n );\n}\n\n// lucide: square-pen v0.577.0\nexport function SquarePenTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"New chat\" {...props}>\n <path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\" />\n </Wrap>\n );\n}\n\n// lucide: x v0.577.0\nexport function XTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Close\" {...props}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </Wrap>\n );\n}\n\n// lucide: funnel v0.577.0 (filter is an alias for funnel in this version)\nexport function FilterTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Filter\" {...props}>\n <path d=\"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\" />\n </Wrap>\n );\n}\n\n// lucide: play v0.577.0\nexport function PlayTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Play\" {...props}>\n <path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" />\n </Wrap>\n );\n}\n\n// lucide: pause v0.577.0 — two rects (redesigned from bar paths)\nexport function PauseTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Pause\" {...props}>\n <rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" />\n <rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" />\n </Wrap>\n );\n}\n\n// lucide: square v0.577.0 (stop uses filled square)\nexport function StopTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Stop\" {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n </Wrap>\n );\n}\n\n// lucide: volume-2 v0.577.0\nexport function Volume2TapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Speaker\" {...props}>\n <path d=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\" />\n <path d=\"M16 9a5 5 0 0 1 0 6\" />\n <path d=\"M19.364 18.364a9 9 0 0 0 0-12.728\" />\n </Wrap>\n );\n}\n\n// lucide: arrow-up v0.577.0\nexport function ArrowUpTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Send\" {...props}>\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </Wrap>\n );\n}\n\n// lucide: mic v0.577.0\nexport function MicTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Start recording\" {...props}>\n <path d=\"M12 19v3\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <rect x=\"9\" y=\"2\" width=\"6\" height=\"13\" rx=\"3\" />\n </Wrap>\n );\n}\n\n// lucide: mic-off v0.577.0\nexport function MicOffTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Stop recording\" {...props}>\n <path d=\"M12 19v3\" />\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\n <path d=\"M16.95 16.95A7 7 0 0 1 5 12v-2\" />\n <path d=\"M18.89 13.23A7 7 0 0 0 19 12v-2\" />\n <path d=\"m2 2 20 20\" />\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\n </Wrap>\n );\n}\n\n// lucide: triangle-alert v0.577.0\nexport function TriangleAlertTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Alert\" {...props}>\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </Wrap>\n );\n}\n\n// lucide: shield-check (context set)\nexport function ShieldCheckTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Context set\" {...props}>\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"m9 12 2 2 4-4\" />\n </Wrap>\n );\n}\n\n// lucide: shield-alert (context unset)\nexport function ShieldAlertTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"No context\" {...props}>\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n </Wrap>\n );\n}\n\n// lucide: bug v0.577.0 (major update — full insect anatomy)\nexport function BugTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Debug\" {...props}>\n <path d=\"M12 20v-9\" />\n <path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\" />\n <path d=\"M14.12 3.88 16 2\" />\n <path d=\"M21 21a4 4 0 0 0-3.81-4\" />\n <path d=\"M21 5a4 4 0 0 1-3.55 3.97\" />\n <path d=\"M22 13h-4\" />\n <path d=\"M3 21a4 4 0 0 1 3.81-4\" />\n <path d=\"M3 5a4 4 0 0 0 3.55 3.97\" />\n <path d=\"M6 13H2\" />\n <path d=\"m8 2 1.88 1.88\" />\n <path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\" />\n </Wrap>\n );\n}\n\n// lucide: settings-2 v0.577.0 (gear + center circle — kept as-is, matches intent)\nexport function Settings2TapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Settings\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </Wrap>\n );\n}\n\n// lucide: save (hand-crafted floppy disk — no direct Lucide equivalent, kept as-is)\nexport function SaveTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Save\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M4.5 6a2 2 0 012-2h9.25L20.5 9v9a2 2 0 01-2 2h-12a2 2 0 01-2-2V6z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8.5 4v4.5a.5.5 0 00.5.5h6a.5.5 0 00.5-.5V4\"\n />\n <rect\n x=\"8\"\n y=\"14\"\n width=\"8\"\n height=\"5.5\"\n rx=\"0.5\"\n strokeLinejoin=\"round\"\n />\n </Wrap>\n );\n}\n\n// lucide: send v0.577.0 (paper-airplane redesign)\nexport function SendTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Send\" {...props}>\n <path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\" />\n <path d=\"m21.854 2.147-10.94 10.939\" />\n </Wrap>\n );\n}\n\n// lucide: message-square v0.577.0\nexport function MessageTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Message\" {...props}>\n <path d=\"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\" />\n </Wrap>\n );\n}\n\n// lucide: variable v0.577.0 (major update — uses line elements + bracket paths)\nexport function VariableTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Variable\" {...props}>\n <path d=\"M8 21s-4-3-4-9 4-9 4-9\" />\n <path d=\"M16 3s4 3 4 9-4 9-4 9\" />\n <line x1=\"15\" x2=\"9\" y1=\"9\" y2=\"15\" />\n <line x1=\"9\" x2=\"15\" y1=\"9\" y2=\"15\" />\n </Wrap>\n );\n}\n\n// lucide: wrench v0.577.0 (single clean path)\nexport function WrenchTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Tool\" {...props}>\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\" />\n </Wrap>\n );\n}\n\n// lucide: command v0.577.0 (single continuous path)\nexport function CommandTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Command\" {...props}>\n <path d=\"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3\" />\n </Wrap>\n );\n}\n\n// lucide: terminal v0.577.0 (two paths: chevron + underline)\nexport function TerminalTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Terminal\" {...props}>\n <path d=\"M12 19h8\" />\n <path d=\"m4 17 6-6-6-6\" />\n </Wrap>\n );\n}\n\n// lucide: test-tube v0.577.0 (3 clean paths)\nexport function TestTubeTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Test\" {...props}>\n <path d=\"M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5c-1.4 0-2.5-1.1-2.5-2.5V2\" />\n <path d=\"M8.5 2h7\" />\n <path d=\"M14.5 16h-5\" />\n </Wrap>\n );\n}\n\n// lucide: rotate-ccw v0.577.0 (same shape as history minus the clock hand — used for Reset)\nexport function ResetTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Reset\" {...props}>\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n </Wrap>\n );\n}\n\n// lucide: eraser v0.577.0 (major update — proper eraser shape)\nexport function ClearTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Clear\" {...props}>\n <path d=\"M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21\" />\n <path d=\"m5.082 11.09 8.828 8.828\" />\n </Wrap>\n );\n}\n\n// lucide: refresh-cw v1.22.0 (dual arrows — was a broken hand-crafted Heroicons-style path)\nexport function RetryTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Retry\" {...props}>\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </Wrap>\n );\n}\n\n/** Alias — same Lucide refresh-cw glyph as RetryTapButton. */\nexport function RefreshCwTapButton(props: TapButtonProps) {\n return <RetryTapButton ariaLabel=\"Refresh\" {...props} />;\n}\n\n// lucide: loading spinner (custom animated — no Lucide equivalent)\n//\n// 🚨 `matrx-spin`, NEVER `animate-spin` (census row 19i, closed here at 0.2.1).\n// `animate-spin` is a core Tailwind utility, so it happened to survive in all\n// four current consumers — but a package cannot ship a class it does not\n// define: the first host without Tailwind's core animate utilities gets a\n// spinner that does not spin, which is a load-bearing lie (it says the work\n// has stopped) with no error to find it by. `matrx-spin` is design-system\n// 0.10.0's own keyframe + rule, shipped in ITS `styles.css` and asserted\n// present in ITS packed tarball. This package IMPORTS that contract (the\n// exported `MOTION_SPIN` constant, and `styles.css` `@import`s the sheet) —\n// it does not copy the keyframe, which would be a twin of exactly the kind\n// this row exists to kill. Under `prefers-reduced-motion` the shared rule\n// SLOWS the loop instead of stopping it, because a stopped spinner removes\n// information rather than motion.\nexport function LoadingTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Loading\" {...props}>\n <circle\n className={MOTION_SPIN}\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n strokeDasharray=\"28.27\"\n strokeDashoffset=\"9\"\n strokeLinecap=\"round\"\n style={{ transformOrigin: \"12px 12px\" }}\n />\n </Wrap>\n );\n}\n\n// lucide: bot/robot (hand-crafted — kept as-is)\nexport function RobotTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"AI Agent\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9 3.75H6.912a2.25 2.25 0 00-2.15 1.588L2.35 13.177a2.25 2.25 0 00-.1.661V18a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18v-4.162c0-.224-.034-.447-.1-.661L19.24 5.338a2.25 2.25 0 00-2.15-1.588H15M2.25 13.5h3.86a2.25 2.25 0 012.012 1.244l.256.512a2.25 2.25 0 002.013 1.244h3.218a2.25 2.25 0 002.013-1.244l.256-.512a2.25 2.25 0 012.013-1.244h3.859M12 3v8.25m0 0-3-3m3 3 3-3\"\n />\n </Wrap>\n );\n}\n\n// lucide: webhook v0.577.0\nexport function WebhookTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Webhook\" {...props}>\n <path d=\"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2\" />\n <path d=\"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06\" />\n <path d=\"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8\" />\n </Wrap>\n );\n}\n\n// lucide: eye v0.577.0\nexport function ViewTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"View\" {...props}>\n <path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </Wrap>\n );\n}\n\n// lucide: hammer v0.577.0\nexport function BuildTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Build\" {...props}>\n <path d=\"m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9\" />\n <path d=\"m18 15 4-4\" />\n <path d=\"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5\" />\n </Wrap>\n );\n}\n\n// lucide: play v0.577.0 (alias for Run context)\nexport function RunTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Run\" {...props}>\n <path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" />\n </Wrap>\n );\n}\n\n// lucide: history v0.577.0\nexport function HistoryTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"History\" {...props}>\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n <path d=\"M12 7v5l4 2\" />\n </Wrap>\n );\n}\n\n// lucide: paperclip v0.577.0\nexport function PaperclipTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Attach file\" {...props}>\n <path d=\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\" />\n </Wrap>\n );\n}\n\n// lucide: thumbs-up v0.577.0\nexport function ThumbsUpTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Like\" {...props}>\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </Wrap>\n );\n}\n\n// lucide: thumbs-down v0.577.0\nexport function ThumbsDownTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Dislike\" {...props}>\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </Wrap>\n );\n}\n\n// lucide: check v0.577.0\nexport function CheckTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Done\" {...props}>\n <path d=\"M20 6 9 17l-5-5\" />\n </Wrap>\n );\n}\n\n// lucide: pencil v0.577.0\nexport function PencilTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Edit\" {...props}>\n <path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\" />\n <path d=\"m15 5 4 4\" />\n </Wrap>\n );\n}\n\n// lucide: ellipsis (more-horizontal) v0.577.0\nexport function MoreHorizontalTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"More options\" {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </Wrap>\n );\n}\n\n// lucide: check-square v0.577.0\nexport function CheckSquareTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Task\" {...props}>\n <path d=\"m9 11 3 3L22 4\" />\n <path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\" />\n </Wrap>\n );\n}\n\n// lucide: ghost v0.577.0\nexport function GhostTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Incognito chat\" {...props}>\n <path d=\"M9 10h.01\" />\n <path d=\"M15 10h.01\" />\n <path d=\"M12 2a8 8 0 0 0-8 8v12l3-3 2.5 2.5L12 19l2.5 2.5L17 19l3 3V10a8 8 0 0 0-8-8z\" />\n </Wrap>\n );\n}\n\n// lucide: link (chain link — used for \"attach to task\") v0.577.0\nexport function LinkTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Attach\" {...props}>\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </Wrap>\n );\n}\n\n// lucide: external-link v0.577.0\nexport function ExternalLinkTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Open source\" {...props}>\n <path d=\"M15 3h6v6\" />\n <path d=\"M10 14 21 3\" />\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n </Wrap>\n );\n}\n\n// lucide: clipboard-list v0.577.0\nexport function ClipboardListTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Copy Pages\" {...props}>\n <rect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\" />\n <path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\" />\n <path d=\"M12 11h4\" />\n <path d=\"M12 16h4\" />\n <path d=\"M8 11h.01\" />\n <path d=\"M8 16h.01\" />\n </Wrap>\n );\n}\n\n// lucide: party-popper v0.577.0\nexport function PartyPopperTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"AI Clean\" {...props}>\n <path d=\"M5.8 11.3 2 22l10.7-3.79\" />\n <path d=\"M4 3h.01\" />\n <path d=\"M22 8h.01\" />\n <path d=\"M15 2h.01\" />\n <path d=\"M22 20h.01\" />\n <path d=\"m22 2-2.24.75a2.9 2.9 0 0 0-1.96 3.12c.1.86-.57 1.63-1.45 1.63h-.38c-.86 0-1.6.6-1.76 1.44L14 10\" />\n <path d=\"m22 13-.82-.33c-.86-.34-1.82.2-1.98 1.11c-.11.7-.72 1.22-1.43 1.22H17\" />\n <path d=\"m11 2 .33.82c.34.86-.2 1.82-1.11 1.98C9.52 4.9 9 5.52 9 6.23V7\" />\n <path d=\"M11 13c1.93 1.93 2.83 4.17 2 5-.83.83-3.07-.07-5-2-1.93-1.93-2.83-4.17-2-5 .83-.83 3.07.07 5 2Z\" />\n </Wrap>\n );\n}\n\n// lucide: layers v0.577.0 — \"this PDF everywhere\" surface switcher\nexport function LayersTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Open this PDF in another surface\" {...props}>\n <path d=\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\" />\n <path d=\"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\" />\n <path d=\"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\" />\n </Wrap>\n );\n}\n","\"use client\";\n\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ButtonHTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@ai-matrx/design-system\";\nimport { cn } from \"./cn\";\nimport {\n getTapTargetLinkComponent,\n type TapTargetLinkComponent,\n} from \"./link\";\n\nexport interface TapTargetButtonProps {\n icon?: React.ReactNode;\n children?: React.ReactNode;\n strokeWidth?: number | undefined;\n onClick?: (() => void) | undefined;\n className?: string | undefined;\n as?: \"button\" | \"label\" | undefined;\n htmlFor?: string | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n /**\n * When set, the tap button renders as a link instead of a button.\n * - Internal hrefs (e.g. \"/tasks\") render via the injected link component\n * (`setTapTargetLinkComponent` / the `linkComponent` prop), falling back\n * to a plain `<a>` when none is registered.\n * - External hrefs (http://, https://, mailto:, tel:) render as `<a>`\n * with `target=\"_blank\"` and `rel=\"noopener noreferrer\"` by default.\n * - When combined with `disabled`, the trigger renders as a non-navigable\n * `<span aria-disabled=\"true\">` with the same visual styling.\n */\n href?: string | undefined;\n /** Override target. Works on both internal links and external anchors. */\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n /** Override rel. Works on both internal links and external anchors. */\n rel?: string | undefined;\n /** Forwarded to the injected link component. Pass `false` to disable prefetching. */\n prefetch?: boolean | null | undefined;\n /**\n * Per-instance link component for internal hrefs — overrides the\n * module-level `setTapTargetLinkComponent` registration.\n */\n linkComponent?: TapTargetLinkComponent | undefined;\n /**\n * Tooltip text. Defaults to `ariaLabel` when omitted.\n * Pass `false` to explicitly disable the tooltip.\n */\n tooltip?: string | false | undefined;\n /** Tooltip placement. Defaults to \"top\". */\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\" | undefined;\n /** Tooltip alignment along its side. Defaults to \"center\". */\n tooltipAlign?: \"start\" | \"center\" | \"end\" | undefined;\n /**\n * Visible caption rendered inline after the icon (`[icon Label]`).\n * Widens the pill automatically. Tooltip defaults to off when set — the\n * label is self-describing. Visible text becomes the accessible name.\n */\n label?: string | undefined;\n /**\n * Collapse an icon + caption pill to its icon-only 44px tap target below\n * the `sm` breakpoint. The caption and inline geometry return at `sm+`;\n * `ariaLabel` (falling back to `label`) remains the accessible name.\n */\n mobileIconOnly?: boolean | undefined;\n}\n\nexport interface TapTargetButtonSolidProps extends TapTargetButtonProps {\n bgColor?: string | undefined;\n iconColor?: string | undefined;\n hoverBgColor?: string | undefined;\n /**\n * Press-state background. Defaults to `active:brightness-90` which works on\n * any color. Override when using a custom `bgColor` that should darken to a\n * specific shade on press (e.g. `active:bg-primary/60`).\n */\n activeBgColor?: string | undefined;\n}\n\nconst EXTERNAL_RE = /^(https?:|mailto:|tel:)/i;\n\n// Geometry + press feedback + tap hygiene are the SINGLE SOURCE OF TRUTH in\n// the shipped stylesheet (the `.matrx-tap-*` family in styles.css — import\n// \"@ai-matrx/tap-target/styles.css\" once at app root). This component only\n// picks the right class and layers each variant's decoration on top.\nconst TAP_OUTER_CLASS = \"matrx-tap-target group\";\nconst TAP_GROUP_OUTER_CLASS = \"matrx-tap-target matrx-tap-target-sm group\";\n\nfunction IconContent({\n icon,\n children,\n strokeWidth = 2,\n className,\n}: Pick<\n TapTargetButtonProps,\n \"icon\" | \"children\" | \"strokeWidth\" | \"className\"\n>) {\n if (icon) {\n if (isValidElement<{ className?: string }>(icon)) {\n return cloneElement(icon, {\n className: cn(className, icon.props.className),\n });\n }\n return <span className={className}>{icon}</span>;\n }\n return (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n >\n {children}\n </svg>\n );\n}\n\ntype TapTargetSize = \"default\" | \"sm\";\n\nfunction resolveTapGeometry(\n label: string | undefined,\n size: TapTargetSize,\n mobileIconOnly: boolean,\n) {\n const inline = Boolean(label);\n if (size === \"sm\") {\n return {\n outerClassName:\n inline && mobileIconOnly\n ? \"matrx-tap-target matrx-tap-target-sm matrx-tap-target-mobile-icon-only-sm group\"\n : inline\n ? \"matrx-tap-target matrx-tap-target-sm matrx-tap-target-inline-sm group\"\n : TAP_GROUP_OUTER_CLASS,\n inlineModifier: mobileIconOnly\n ? \"matrx-tap-pill-mobile-icon-only-sm\"\n : \"matrx-tap-pill-inline-sm\",\n };\n }\n return {\n outerClassName:\n inline && mobileIconOnly\n ? `${TAP_OUTER_CLASS} matrx-tap-target-mobile-icon-only`\n : inline\n ? `${TAP_OUTER_CLASS} matrx-tap-target-inline`\n : TAP_OUTER_CLASS,\n inlineModifier: mobileIconOnly\n ? \"matrx-tap-pill-mobile-icon-only\"\n : \"matrx-tap-pill-inline\",\n };\n}\n\nfunction buildTapInner({\n label,\n pillClassName,\n iconClassName,\n labelClassName,\n inlineModifier,\n icon,\n children,\n strokeWidth = 2,\n}: {\n label?: string | undefined;\n pillClassName: string;\n iconClassName: string;\n labelClassName?: string | undefined;\n inlineModifier: string;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n strokeWidth?: number | undefined;\n}) {\n const iconEl = (\n <IconContent\n icon={icon}\n strokeWidth={strokeWidth}\n className={iconClassName}\n >\n {children}\n </IconContent>\n );\n const pillClasses = label\n ? `${pillClassName} ${inlineModifier}`.trim()\n : pillClassName;\n\n if (!label) {\n return <div className={pillClasses}>{iconEl}</div>;\n }\n\n return (\n <div className={pillClasses}>\n {iconEl}\n <span className={labelClassName ?? \"matrx-tap-label\"}>{label}</span>\n </div>\n );\n}\n\ninterface RenderTapTargetArgs extends Pick<\n TapTargetButtonProps,\n | \"icon\"\n | \"children\"\n | \"strokeWidth\"\n | \"label\"\n | \"mobileIconOnly\"\n | \"onClick\"\n | \"as\"\n | \"htmlFor\"\n | \"ariaLabel\"\n | \"disabled\"\n | \"href\"\n | \"target\"\n | \"rel\"\n | \"prefetch\"\n | \"linkComponent\"\n | \"tooltip\"\n | \"tooltipSide\"\n | \"tooltipAlign\"\n> {\n size?: TapTargetSize;\n pillClassName: string;\n iconClassName: string;\n labelClassName?: string | undefined;\n rest?: ButtonHTMLAttributes<HTMLButtonElement> | undefined;\n buttonRef?: Ref<HTMLButtonElement> | undefined;\n}\n\nfunction renderTapTarget({\n size = \"default\",\n pillClassName,\n iconClassName,\n labelClassName,\n icon,\n children,\n strokeWidth,\n label,\n mobileIconOnly = false,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n rest,\n buttonRef,\n}: RenderTapTargetArgs): ReactElement {\n const { outerClassName, inlineModifier } = resolveTapGeometry(\n label,\n size,\n mobileIconOnly,\n );\n const responsiveLabelClassName = mobileIconOnly\n ? `${labelClassName ?? \"matrx-tap-label\"} matrx-tap-label-mobile-icon-only`\n : labelClassName;\n const inner = buildTapInner({\n label,\n pillClassName,\n iconClassName,\n labelClassName: responsiveLabelClassName,\n inlineModifier: label ? inlineModifier : \"\",\n icon,\n children,\n strokeWidth,\n });\n const resolvedTooltip =\n tooltip !== undefined ? tooltip : label ? false : undefined;\n const triggerAriaLabel =\n label && !mobileIconOnly ? undefined : (ariaLabel ?? label);\n const trigger = renderTrigger({\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n as,\n htmlFor,\n onClick,\n ariaLabel: triggerAriaLabel,\n disabled,\n outerClassName,\n children: inner,\n rest,\n buttonRef,\n });\n return withTooltip(trigger, {\n tooltip: resolvedTooltip,\n ariaLabel: triggerAriaLabel,\n disabled,\n tooltipSide,\n tooltipAlign,\n });\n}\n\ninterface RenderTriggerArgs {\n href?: string | undefined;\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n rel?: string | undefined;\n prefetch?: boolean | null | undefined;\n linkComponent?: TapTargetLinkComponent | undefined;\n as?: \"button\" | \"label\" | undefined;\n htmlFor?: string | undefined;\n onClick?: (() => void) | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n outerClassName: string;\n children: ReactNode;\n rest?: ButtonHTMLAttributes<HTMLButtonElement> | undefined;\n buttonRef?: Ref<HTMLButtonElement> | undefined;\n}\n\n/**\n * Resolves the correct trigger element based on the props passed.\n *\n * - `href` + `disabled` → unclickable `<span aria-disabled>`\n * - `href` matching `http(s):|mailto:|tel:` → `<a target=\"_blank\" rel=\"noopener noreferrer\">`\n * - `href` (internal) → the injected link component (per-instance\n * `linkComponent` prop, else `setTapTargetLinkComponent` registration),\n * falling back to a plain `<a>` when none is registered\n * - `as=\"label\"` → `<label htmlFor=...>`\n * - default → `<button>`\n */\nfunction renderTrigger({\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n as,\n htmlFor,\n onClick,\n ariaLabel,\n disabled,\n outerClassName,\n children,\n rest,\n buttonRef,\n}: RenderTriggerArgs): ReactElement {\n if (disabled && href) {\n return (\n <span\n aria-disabled=\"true\"\n aria-label={ariaLabel}\n className={`${outerClassName} opacity-40 pointer-events-none`}\n >\n {children}\n </span>\n );\n }\n if (href) {\n const isExternal = EXTERNAL_RE.test(href);\n if (isExternal) {\n return (\n <a\n href={href}\n target={target ?? \"_blank\"}\n rel={rel ?? \"noopener noreferrer\"}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </a>\n );\n }\n const Link = linkComponent ?? getTapTargetLinkComponent();\n if (Link) {\n return (\n <Link\n href={href}\n target={target}\n rel={rel}\n prefetch={prefetch}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </Link>\n );\n }\n // No link component registered — plain <a>. `prefetch` is a router hint,\n // not a DOM attribute, so it is deliberately dropped here.\n return (\n <a\n href={href}\n target={target}\n rel={rel}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </a>\n );\n }\n if (as === \"label\") {\n return (\n <label\n htmlFor={htmlFor}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </label>\n );\n }\n return (\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={onClick}\n aria-label={ariaLabel}\n disabled={disabled}\n {...rest}\n className={outerClassName}\n >\n {children}\n </button>\n );\n}\n\n/**\n * Wraps a trigger element in a Tooltip when a tooltip label is available.\n * Falls back to `ariaLabel` when `tooltip` is not explicitly set. If both\n * are absent (or `tooltip === false`), the trigger is returned unwrapped.\n */\nfunction withTooltip(\n trigger: ReactElement,\n {\n tooltip,\n ariaLabel,\n disabled,\n tooltipSide = \"top\",\n tooltipAlign = \"center\",\n }: {\n tooltip?: string | false | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\" | undefined;\n tooltipAlign?: \"start\" | \"center\" | \"end\" | undefined;\n },\n): ReactElement {\n if (tooltip === false) return trigger;\n const label =\n typeof tooltip === \"string\" && tooltip.length > 0 ? tooltip : ariaLabel;\n if (!label) return trigger;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n {disabled ? (\n // Radix Tooltip triggers need a hoverable element; a disabled button\n // does not dispatch pointer events, so we wrap in a span for the\n // trigger target while keeping the disabled visual state.\n <span className=\"inline-flex\">{trigger}</span>\n ) : (\n trigger\n )}\n </TooltipTrigger>\n <TooltipContent side={tooltipSide} align={tooltipAlign}>\n {label}\n </TooltipContent>\n </Tooltip>\n );\n}\n\n// To resize/retune every tap button, edit styles.css — not here.\n\nexport const TapTargetButton = forwardRef<\n HTMLButtonElement,\n TapTargetButtonProps & ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButton(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n className,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n const color = className ?? \"text-foreground\";\n return renderTapTarget({\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName: \"matrx-tap-pill matrx-glass-thin-border\",\n iconClassName: `matrx-tap-icon ${color}`,\n rest,\n buttonRef: ref,\n });\n});\n\nexport const TapTargetButtonTransparent = forwardRef<\n HTMLButtonElement,\n TapTargetButtonProps & React.ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonTransparent(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n className,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n const color = className ?? \"text-foreground\";\n return renderTapTarget({\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName:\n \"matrx-tap-pill hover:bg-muted active:bg-muted-foreground/15\",\n iconClassName: `matrx-tap-icon ${color}`,\n rest,\n buttonRef: ref,\n });\n});\n\nexport const TapTargetButtonSolid = forwardRef<\n HTMLButtonElement,\n TapTargetButtonSolidProps & React.ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonSolid(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n bgColor = \"bg-primary\",\n iconColor = \"text-primary-foreground\",\n hoverBgColor = \"hover:bg-primary/80\",\n activeBgColor = \"active:brightness-90\",\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n return renderTapTarget({\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName: `matrx-tap-pill ${bgColor} ${iconColor} ${hoverBgColor} ${activeBgColor}`,\n iconClassName: `matrx-tap-icon ${iconColor}`,\n labelClassName: `matrx-tap-label ${iconColor}`,\n rest,\n buttonRef: ref,\n });\n});\n\n/** Solid destructive pill — delete/remove actions. White-on-red like the\n * primary solid is white-on-blue. Use THIS, never hand-pass bg-destructive\n * with the default (dark) icon color. */\nexport const TapTargetButtonDestructive = forwardRef<\n HTMLButtonElement,\n TapTargetButtonSolidProps & React.ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonDestructive(\n {\n bgColor = \"bg-destructive\",\n iconColor = \"text-destructive-foreground\",\n hoverBgColor = \"hover:bg-destructive/90\",\n ...rest\n },\n ref,\n) {\n return (\n <TapTargetButtonSolid\n ref={ref}\n bgColor={bgColor}\n iconColor={iconColor}\n hoverBgColor={hoverBgColor}\n {...rest}\n />\n );\n});\n\nexport const TapTargetButtonForGroup = forwardRef<\n HTMLButtonElement,\n TapTargetButtonProps & ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonForGroup(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n className,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n const color = className ?? \"text-foreground\";\n return renderTapTarget({\n size: \"sm\",\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName: \"matrx-tap-pill matrx-tap-pill-sm matrx-glass-interactive\",\n iconClassName: `matrx-tap-icon ${color}`,\n labelClassName: `matrx-tap-label ${color}`,\n rest,\n buttonRef: ref,\n });\n});\n\nexport function TapTargetButtonGroup({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string | undefined;\n}) {\n return (\n <div\n className={\n className\n ? `relative inline-flex h-9 items-center ${className}`\n : \"relative inline-flex h-9 items-center\"\n }\n >\n <div className=\"pointer-events-none absolute inset-x-0 top-1/2 -translate-y-1/2 h-7 rounded-full matrx-glass-thin-border\" />\n {/* min-w-0 lets flexible children (e.g. a truncating filename) shrink\n under container pressure; fixed-size tap buttons are unaffected. */}\n <div className=\"relative flex min-w-0 items-center\">{children}</div>\n </div>\n );\n}\n","/**\n * Minimal className join — the only piece of `cn` this package needs.\n * No tailwind-merge / clsx dependency by design: callers pass literal strings.\n */\nexport function cn(\n ...values: Array<string | null | undefined | false>\n): string {\n return values.filter(Boolean).join(\" \").trim();\n}\n","import type { ComponentType, ReactNode } from \"react\";\n\n/**\n * The injectable link seam — the package's replacement for the original\n * hard `next/link` import.\n *\n * Internal hrefs (anything NOT matching `http(s):`, `mailto:`, `tel:`) render\n * through the link component resolved here; external hrefs always render a\n * plain `<a target=\"_blank\" rel=\"noopener noreferrer\">`, exactly like the\n * original. When nothing is registered and no per-instance `linkComponent`\n * prop is given, internal hrefs fall back to a plain `<a>` (no prefetch, no\n * client-side routing — still a working link).\n */\nexport interface TapTargetLinkProps {\n href: string;\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n rel?: string | undefined;\n /** Router prefetch hint (next/link semantics). Plain `<a>` fallback ignores it. */\n prefetch?: boolean | null | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n children?: ReactNode;\n}\n\nexport type TapTargetLinkComponent = ComponentType<TapTargetLinkProps>;\n\n/**\n * The registered component lives in a `Symbol.for` slot on `globalThis` — NOT\n * in module state — so it survives the module graph being instantiated more\n * than once: the `.` and `./buttons` dist bundles each inline the primitives\n * (tsup `splitting: false`), and a consumer may even mix `import` and\n * `require`. One registration must reach every copy.\n */\nconst LINK_SLOT = Symbol.for(\"@ai-matrx/tap-target:link-component\");\n\ntype GlobalWithLinkSlot = typeof globalThis & {\n [LINK_SLOT]?: TapTargetLinkComponent | null;\n};\n\n/**\n * Register the app's link component once at startup (e.g. `next/link`):\n *\n * ```tsx\n * import Link from \"next/link\";\n * import { setTapTargetLinkComponent } from \"@ai-matrx/tap-target\";\n * setTapTargetLinkComponent(Link);\n * ```\n *\n * Pass `null` to unregister (plain `<a>` fallback resumes).\n */\nexport function setTapTargetLinkComponent(\n component: TapTargetLinkComponent | null,\n): void {\n (globalThis as GlobalWithLinkSlot)[LINK_SLOT] = component;\n}\n\n/** The currently registered link component, or `null` when none is set. */\nexport function getTapTargetLinkComponent(): TapTargetLinkComponent | null {\n return (globalThis as GlobalWithLinkSlot)[LINK_SLOT] ?? null;\n}\n"],"mappings":"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","names":["import_react","import_design_system","TapTargetButton","TapTargetButtonTransparent","TapTargetButtonSolid","TapTargetButtonDestructive","TapTargetButtonForGroup","import_jsx_runtime","Wrap"]}
package/dist/buttons.js CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  // src/tap-buttons.tsx
4
4
  import { forwardRef as forwardRef2 } from "react";
5
+ import { MOTION_SPIN } from "@ai-matrx/design-system";
5
6
 
6
7
  // src/tap-target-button.tsx
7
8
  import {
@@ -906,7 +907,7 @@ function LoadingTapButton(props) {
906
907
  return /* @__PURE__ */ jsx2(Wrap, { ariaLabel: "Loading", ...props, children: /* @__PURE__ */ jsx2(
907
908
  "circle",
908
909
  {
909
- className: "animate-spin",
910
+ className: MOTION_SPIN,
910
911
  cx: "12",
911
912
  cy: "12",
912
913
  r: "9",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tap-buttons.tsx","../src/tap-target-button.tsx","../src/cn.ts","../src/link.ts"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, type Ref } from \"react\";\nimport {\n TapTargetButton,\n TapTargetButtonTransparent,\n TapTargetButtonSolid,\n TapTargetButtonForGroup,\n} from \"./tap-target-button\";\nimport type { TapTargetLinkComponent } from \"./link\";\n\n// ---------------------------------------------------------------------------\n// Shared types\n// ---------------------------------------------------------------------------\n\ntype Variant = \"glass\" | \"transparent\" | \"solid\" | \"group\";\n\nexport interface TapButtonProps {\n /** Forwarded to the underlying button (Radix `asChild`, focus chains, etc.). */\n ref?: Ref<HTMLButtonElement> | undefined;\n variant?: Variant | undefined;\n onClick?: (() => void) | undefined;\n as?: \"button\" | \"label\" | undefined;\n htmlFor?: string | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n tabIndex?: number | undefined;\n className?: string | undefined;\n strokeWidth?: number | undefined;\n // Solid-variant color overrides — only used when variant=\"solid\"\n bgColor?: string | undefined;\n iconColor?: string | undefined;\n hoverBgColor?: string | undefined;\n activeBgColor?: string | undefined;\n // Link support — when set, the button renders as a link or <a>.\n // Internal hrefs use the injected link component (setTapTargetLinkComponent\n // or the `linkComponent` prop; plain <a> when none is registered); external\n // (http(s)://, mailto:, tel:) use <a> with target=\"_blank\" +\n // rel=\"noopener noreferrer\" by default. Pass an explicit `target` to\n // override (works for internal links too).\n href?: string | undefined;\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n rel?: string | undefined;\n prefetch?: boolean | null | undefined;\n /** Per-instance link component override for internal hrefs. */\n linkComponent?: TapTargetLinkComponent | undefined;\n // Tooltip support — defaults to `ariaLabel`. Pass `false` to opt out.\n tooltip?: string | false | undefined;\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\" | undefined;\n tooltipAlign?: \"start\" | \"center\" | \"end\" | undefined;\n /** Inline caption after the icon — see TapTargetButton `label`. */\n label?: string | undefined;\n /** Passthrough from AITapButtonProps / MakerTapButton — stripped before DOM. */\n colored?: boolean | undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Variant resolver — maps a variant string to the correct wrapper component.\n// Runs at build/server time so there's zero client cost.\n//\n// IMPORTANT: `Wrap` MUST forward refs. The pre-composed `*TapButton` functions\n// below are plain function components (in React 19 ref is a regular prop) and\n// spread `{...props}` to `Wrap` — that spread carries ref through. `Wrap`\n// extracts ref and passes it explicitly to the underlying `forwardRef`\n// primitive. Without this, every `*TapButton` placed inside a Radix\n// `*Trigger asChild` (DropdownMenu, Popover, Tooltip, etc.) silently loses\n// the ref — the popper can't anchor and Radix's injected event handlers /\n// `data-state` / `aria-*` get dropped. (Precedent: matrx-frontend\n// `features/files/FEATURE.md`, where this pattern was established.)\n// ---------------------------------------------------------------------------\n\nconst Wrap = forwardRef<\n HTMLButtonElement,\n TapButtonProps & { children: React.ReactNode }\n>(function Wrap(\n {\n variant = \"glass\",\n children,\n bgColor,\n iconColor,\n hoverBgColor,\n activeBgColor,\n // AITapButtonProps passthrough — not a DOM attribute (see ai-tap-buttons Wrap)\n colored: _colored,\n ...props\n },\n ref,\n) {\n switch (variant) {\n case \"transparent\":\n return (\n <TapTargetButtonTransparent ref={ref} {...props}>\n {children}\n </TapTargetButtonTransparent>\n );\n case \"solid\":\n return (\n <TapTargetButtonSolid\n ref={ref}\n bgColor={bgColor}\n iconColor={iconColor}\n hoverBgColor={hoverBgColor}\n activeBgColor={activeBgColor}\n {...props}\n >\n {children}\n </TapTargetButtonSolid>\n );\n case \"group\":\n return (\n <TapTargetButtonForGroup ref={ref} {...props}>\n {children}\n </TapTargetButtonForGroup>\n );\n default:\n return (\n <TapTargetButton ref={ref} {...props}>\n {children}\n </TapTargetButton>\n );\n }\n});\n\n// ---------------------------------------------------------------------------\n// Pre-composed buttons — one import, one tag, zero configuration needed.\n// Default variant is \"glass\". Override with variant=\"transparent\" etc.\n// All SVG paths match lucide-react v0.577.0 exactly.\n// ---------------------------------------------------------------------------\n\n// lucide: menu (hand-crafted HeroIcons path — no Lucide equivalent, kept as-is)\nexport function MenuTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Menu\" strokeWidth={1.75} {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\"\n />\n </Wrap>\n );\n}\n\n// lucide: plus (hand-crafted — no drift, kept as-is)\nexport function PlusTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Add\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 4.5v15m7.5-7.5h-15\"\n />\n </Wrap>\n );\n}\n\n// lucide: search → circle cx=11 cy=11 r=8 + line to 21,21\nexport function SearchTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Search\" {...props}>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.34-4.34\" />\n </Wrap>\n );\n}\n\n// lucide: settings (hand-crafted — kept as-is, Lucide uses \"settings-2\" pattern)\nexport function SettingsTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Settings\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\"\n />\n </Wrap>\n );\n}\n\n// lucide: maximize (hand-crafted corner-arrows — kept as-is)\nexport function MaximizeTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Fullscreen\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15\"\n />\n </Wrap>\n );\n}\n\n// lucide: home v0.577.0 — used as the \"Hub\" (main/list) action\nexport function HomeTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Hub\" {...props}>\n <path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\" />\n <path d=\"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n </Wrap>\n );\n}\n\n// lucide: layout-grid v0.577.0\nexport function LayoutGridTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Card view\" {...props}>\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"14\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"14\" rx=\"1\" />\n </Wrap>\n );\n}\n\n// lucide: list v0.577.0\nexport function ListTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Table view\" {...props}>\n <path d=\"M3 5h.01\" />\n <path d=\"M3 12h.01\" />\n <path d=\"M3 19h.01\" />\n <path d=\"M8 5h13\" />\n <path d=\"M8 12h13\" />\n <path d=\"M8 19h13\" />\n </Wrap>\n );\n}\n\n// lucide: arrow-down-up (hand-crafted — kept as-is)\nexport function ArrowDownUpTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Sort\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3 4.5h14.25M3 9h9.75M3 13.5h5.25m5.25-.75L17.25 9m0 0L21 12.75M17.25 9v10.5\"\n />\n </Wrap>\n );\n}\n\n// lucide: bell v0.577.0\nexport function BellTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Notifications\" {...props}>\n <path d=\"M10.268 21a2 2 0 0 0 3.464 0\" />\n <path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\" />\n </Wrap>\n );\n}\n\n// lucide: bell-ring v0.577.0 — animated cousin of bell, used for \"has unread\"\nexport function BellRingTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Notifications\" {...props}>\n <path d=\"M10.268 21a2 2 0 0 0 3.464 0\" />\n <path d=\"M22 8c0-2.3-.8-4.3-2-6\" />\n <path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\" />\n <path d=\"M4 2C2.8 3.7 2 5.7 2 8\" />\n </Wrap>\n );\n}\n\n// lucide: zap v0.577.0 — lightning bolt, used as the Quick Actions trigger\nexport function ZapTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Quick actions\" {...props}>\n <path d=\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\" />\n </Wrap>\n );\n}\n\n// lucide: upload v0.577.0\nexport function UploadTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Upload\" {...props}>\n <path d=\"M12 3v12\" />\n <path d=\"m17 8-5-5-5 5\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n </Wrap>\n );\n}\n\n// lucide: download v0.577.0\nexport function DownloadTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Download\" {...props}>\n <path d=\"M12 15V3\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n </Wrap>\n );\n}\n\n// lucide: share-2 v0.577.0\nexport function ShareTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Share\" {...props}>\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n <circle cx=\"6\" cy=\"12\" r=\"3\" />\n <circle cx=\"18\" cy=\"19\" r=\"3\" />\n <line x1=\"8.59\" x2=\"15.42\" y1=\"13.51\" y2=\"17.49\" />\n <line x1=\"15.41\" x2=\"8.59\" y1=\"6.51\" y2=\"10.49\" />\n </Wrap>\n );\n}\n\n// lucide: undo v0.577.0\nexport function UndoTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Undo\" {...props}>\n <path d=\"M3 7v6h6\" />\n <path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\" />\n </Wrap>\n );\n}\n\n// lucide: redo v0.577.0\nexport function RedoTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Redo\" {...props}>\n <path d=\"M21 7v6h-6\" />\n <path d=\"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7\" />\n </Wrap>\n );\n}\n\n// lucide: copy v0.577.0\nexport function CopyTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Copy\" {...props}>\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </Wrap>\n );\n}\n\n// lucide: trash v0.577.0\nexport function TrashTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Delete\" {...props}>\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" />\n <path d=\"M3 6h18\" />\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n </Wrap>\n );\n}\n\n// lucide: files v0.577.0\nexport function FilesTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Copy all\" {...props}>\n <path d=\"M20 7h-3a2 2 0 0 1-2-2V2\" />\n <path d=\"M9 18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h7l4 4v10a2 2 0 0 1-2 2Z\" />\n <path d=\"M3 7.6v12.8A1.6 1.6 0 0 0 4.6 22h9.8\" />\n </Wrap>\n );\n}\n\n// lucide: chevron-left v0.577.0 — arms extended from 6 to 7 (45° kept) for a\n// slightly larger glyph that better fills the 32px inner pill.\nexport function ChevronLeftTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Back\" {...props}>\n <path d=\"m16 19-7-7 7-7\" />\n </Wrap>\n );\n}\n\n// lucide: chevron-right v0.577.0\nexport function ChevronRightTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Next\" {...props}>\n <path d=\"m9 18 6-6-6-6\" />\n </Wrap>\n );\n}\n\n// lucide: panel-left v0.577.0\nexport function PanelLeftTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Toggle sidebar\" {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M9 3v18\" />\n </Wrap>\n );\n}\n\n// lucide: panel-right v0.577.0\nexport function PanelRightTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Toggle sidebar\" {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M15 3v18\" />\n </Wrap>\n );\n}\n\n// lucide: square-pen v0.577.0\nexport function SquarePenTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"New chat\" {...props}>\n <path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\" />\n </Wrap>\n );\n}\n\n// lucide: x v0.577.0\nexport function XTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Close\" {...props}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </Wrap>\n );\n}\n\n// lucide: funnel v0.577.0 (filter is an alias for funnel in this version)\nexport function FilterTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Filter\" {...props}>\n <path d=\"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\" />\n </Wrap>\n );\n}\n\n// lucide: play v0.577.0\nexport function PlayTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Play\" {...props}>\n <path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" />\n </Wrap>\n );\n}\n\n// lucide: pause v0.577.0 — two rects (redesigned from bar paths)\nexport function PauseTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Pause\" {...props}>\n <rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" />\n <rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" />\n </Wrap>\n );\n}\n\n// lucide: square v0.577.0 (stop uses filled square)\nexport function StopTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Stop\" {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n </Wrap>\n );\n}\n\n// lucide: volume-2 v0.577.0\nexport function Volume2TapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Speaker\" {...props}>\n <path d=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\" />\n <path d=\"M16 9a5 5 0 0 1 0 6\" />\n <path d=\"M19.364 18.364a9 9 0 0 0 0-12.728\" />\n </Wrap>\n );\n}\n\n// lucide: arrow-up v0.577.0\nexport function ArrowUpTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Send\" {...props}>\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </Wrap>\n );\n}\n\n// lucide: mic v0.577.0\nexport function MicTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Start recording\" {...props}>\n <path d=\"M12 19v3\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <rect x=\"9\" y=\"2\" width=\"6\" height=\"13\" rx=\"3\" />\n </Wrap>\n );\n}\n\n// lucide: mic-off v0.577.0\nexport function MicOffTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Stop recording\" {...props}>\n <path d=\"M12 19v3\" />\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\n <path d=\"M16.95 16.95A7 7 0 0 1 5 12v-2\" />\n <path d=\"M18.89 13.23A7 7 0 0 0 19 12v-2\" />\n <path d=\"m2 2 20 20\" />\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\n </Wrap>\n );\n}\n\n// lucide: triangle-alert v0.577.0\nexport function TriangleAlertTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Alert\" {...props}>\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </Wrap>\n );\n}\n\n// lucide: shield-check (context set)\nexport function ShieldCheckTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Context set\" {...props}>\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"m9 12 2 2 4-4\" />\n </Wrap>\n );\n}\n\n// lucide: shield-alert (context unset)\nexport function ShieldAlertTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"No context\" {...props}>\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n </Wrap>\n );\n}\n\n// lucide: bug v0.577.0 (major update — full insect anatomy)\nexport function BugTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Debug\" {...props}>\n <path d=\"M12 20v-9\" />\n <path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\" />\n <path d=\"M14.12 3.88 16 2\" />\n <path d=\"M21 21a4 4 0 0 0-3.81-4\" />\n <path d=\"M21 5a4 4 0 0 1-3.55 3.97\" />\n <path d=\"M22 13h-4\" />\n <path d=\"M3 21a4 4 0 0 1 3.81-4\" />\n <path d=\"M3 5a4 4 0 0 0 3.55 3.97\" />\n <path d=\"M6 13H2\" />\n <path d=\"m8 2 1.88 1.88\" />\n <path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\" />\n </Wrap>\n );\n}\n\n// lucide: settings-2 v0.577.0 (gear + center circle — kept as-is, matches intent)\nexport function Settings2TapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Settings\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </Wrap>\n );\n}\n\n// lucide: save (hand-crafted floppy disk — no direct Lucide equivalent, kept as-is)\nexport function SaveTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Save\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M4.5 6a2 2 0 012-2h9.25L20.5 9v9a2 2 0 01-2 2h-12a2 2 0 01-2-2V6z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8.5 4v4.5a.5.5 0 00.5.5h6a.5.5 0 00.5-.5V4\"\n />\n <rect\n x=\"8\"\n y=\"14\"\n width=\"8\"\n height=\"5.5\"\n rx=\"0.5\"\n strokeLinejoin=\"round\"\n />\n </Wrap>\n );\n}\n\n// lucide: send v0.577.0 (paper-airplane redesign)\nexport function SendTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Send\" {...props}>\n <path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\" />\n <path d=\"m21.854 2.147-10.94 10.939\" />\n </Wrap>\n );\n}\n\n// lucide: message-square v0.577.0\nexport function MessageTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Message\" {...props}>\n <path d=\"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\" />\n </Wrap>\n );\n}\n\n// lucide: variable v0.577.0 (major update — uses line elements + bracket paths)\nexport function VariableTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Variable\" {...props}>\n <path d=\"M8 21s-4-3-4-9 4-9 4-9\" />\n <path d=\"M16 3s4 3 4 9-4 9-4 9\" />\n <line x1=\"15\" x2=\"9\" y1=\"9\" y2=\"15\" />\n <line x1=\"9\" x2=\"15\" y1=\"9\" y2=\"15\" />\n </Wrap>\n );\n}\n\n// lucide: wrench v0.577.0 (single clean path)\nexport function WrenchTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Tool\" {...props}>\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\" />\n </Wrap>\n );\n}\n\n// lucide: command v0.577.0 (single continuous path)\nexport function CommandTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Command\" {...props}>\n <path d=\"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3\" />\n </Wrap>\n );\n}\n\n// lucide: terminal v0.577.0 (two paths: chevron + underline)\nexport function TerminalTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Terminal\" {...props}>\n <path d=\"M12 19h8\" />\n <path d=\"m4 17 6-6-6-6\" />\n </Wrap>\n );\n}\n\n// lucide: test-tube v0.577.0 (3 clean paths)\nexport function TestTubeTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Test\" {...props}>\n <path d=\"M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5c-1.4 0-2.5-1.1-2.5-2.5V2\" />\n <path d=\"M8.5 2h7\" />\n <path d=\"M14.5 16h-5\" />\n </Wrap>\n );\n}\n\n// lucide: rotate-ccw v0.577.0 (same shape as history minus the clock hand — used for Reset)\nexport function ResetTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Reset\" {...props}>\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n </Wrap>\n );\n}\n\n// lucide: eraser v0.577.0 (major update — proper eraser shape)\nexport function ClearTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Clear\" {...props}>\n <path d=\"M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21\" />\n <path d=\"m5.082 11.09 8.828 8.828\" />\n </Wrap>\n );\n}\n\n// lucide: refresh-cw v1.22.0 (dual arrows — was a broken hand-crafted Heroicons-style path)\nexport function RetryTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Retry\" {...props}>\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </Wrap>\n );\n}\n\n/** Alias — same Lucide refresh-cw glyph as RetryTapButton. */\nexport function RefreshCwTapButton(props: TapButtonProps) {\n return <RetryTapButton ariaLabel=\"Refresh\" {...props} />;\n}\n\n// lucide: loading spinner (custom animated — no Lucide equivalent)\nexport function LoadingTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Loading\" {...props}>\n <circle\n className=\"animate-spin\"\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n strokeDasharray=\"28.27\"\n strokeDashoffset=\"9\"\n strokeLinecap=\"round\"\n style={{ transformOrigin: \"12px 12px\" }}\n />\n </Wrap>\n );\n}\n\n// lucide: bot/robot (hand-crafted — kept as-is)\nexport function RobotTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"AI Agent\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9 3.75H6.912a2.25 2.25 0 00-2.15 1.588L2.35 13.177a2.25 2.25 0 00-.1.661V18a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18v-4.162c0-.224-.034-.447-.1-.661L19.24 5.338a2.25 2.25 0 00-2.15-1.588H15M2.25 13.5h3.86a2.25 2.25 0 012.012 1.244l.256.512a2.25 2.25 0 002.013 1.244h3.218a2.25 2.25 0 002.013-1.244l.256-.512a2.25 2.25 0 012.013-1.244h3.859M12 3v8.25m0 0-3-3m3 3 3-3\"\n />\n </Wrap>\n );\n}\n\n// lucide: webhook v0.577.0\nexport function WebhookTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Webhook\" {...props}>\n <path d=\"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2\" />\n <path d=\"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06\" />\n <path d=\"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8\" />\n </Wrap>\n );\n}\n\n// lucide: eye v0.577.0\nexport function ViewTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"View\" {...props}>\n <path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </Wrap>\n );\n}\n\n// lucide: hammer v0.577.0\nexport function BuildTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Build\" {...props}>\n <path d=\"m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9\" />\n <path d=\"m18 15 4-4\" />\n <path d=\"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5\" />\n </Wrap>\n );\n}\n\n// lucide: play v0.577.0 (alias for Run context)\nexport function RunTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Run\" {...props}>\n <path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" />\n </Wrap>\n );\n}\n\n// lucide: history v0.577.0\nexport function HistoryTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"History\" {...props}>\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n <path d=\"M12 7v5l4 2\" />\n </Wrap>\n );\n}\n\n// lucide: paperclip v0.577.0\nexport function PaperclipTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Attach file\" {...props}>\n <path d=\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\" />\n </Wrap>\n );\n}\n\n// lucide: thumbs-up v0.577.0\nexport function ThumbsUpTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Like\" {...props}>\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </Wrap>\n );\n}\n\n// lucide: thumbs-down v0.577.0\nexport function ThumbsDownTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Dislike\" {...props}>\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </Wrap>\n );\n}\n\n// lucide: check v0.577.0\nexport function CheckTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Done\" {...props}>\n <path d=\"M20 6 9 17l-5-5\" />\n </Wrap>\n );\n}\n\n// lucide: pencil v0.577.0\nexport function PencilTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Edit\" {...props}>\n <path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\" />\n <path d=\"m15 5 4 4\" />\n </Wrap>\n );\n}\n\n// lucide: ellipsis (more-horizontal) v0.577.0\nexport function MoreHorizontalTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"More options\" {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </Wrap>\n );\n}\n\n// lucide: check-square v0.577.0\nexport function CheckSquareTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Task\" {...props}>\n <path d=\"m9 11 3 3L22 4\" />\n <path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\" />\n </Wrap>\n );\n}\n\n// lucide: ghost v0.577.0\nexport function GhostTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Incognito chat\" {...props}>\n <path d=\"M9 10h.01\" />\n <path d=\"M15 10h.01\" />\n <path d=\"M12 2a8 8 0 0 0-8 8v12l3-3 2.5 2.5L12 19l2.5 2.5L17 19l3 3V10a8 8 0 0 0-8-8z\" />\n </Wrap>\n );\n}\n\n// lucide: link (chain link — used for \"attach to task\") v0.577.0\nexport function LinkTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Attach\" {...props}>\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </Wrap>\n );\n}\n\n// lucide: external-link v0.577.0\nexport function ExternalLinkTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Open source\" {...props}>\n <path d=\"M15 3h6v6\" />\n <path d=\"M10 14 21 3\" />\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n </Wrap>\n );\n}\n\n// lucide: clipboard-list v0.577.0\nexport function ClipboardListTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Copy Pages\" {...props}>\n <rect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\" />\n <path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\" />\n <path d=\"M12 11h4\" />\n <path d=\"M12 16h4\" />\n <path d=\"M8 11h.01\" />\n <path d=\"M8 16h.01\" />\n </Wrap>\n );\n}\n\n// lucide: party-popper v0.577.0\nexport function PartyPopperTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"AI Clean\" {...props}>\n <path d=\"M5.8 11.3 2 22l10.7-3.79\" />\n <path d=\"M4 3h.01\" />\n <path d=\"M22 8h.01\" />\n <path d=\"M15 2h.01\" />\n <path d=\"M22 20h.01\" />\n <path d=\"m22 2-2.24.75a2.9 2.9 0 0 0-1.96 3.12c.1.86-.57 1.63-1.45 1.63h-.38c-.86 0-1.6.6-1.76 1.44L14 10\" />\n <path d=\"m22 13-.82-.33c-.86-.34-1.82.2-1.98 1.11c-.11.7-.72 1.22-1.43 1.22H17\" />\n <path d=\"m11 2 .33.82c.34.86-.2 1.82-1.11 1.98C9.52 4.9 9 5.52 9 6.23V7\" />\n <path d=\"M11 13c1.93 1.93 2.83 4.17 2 5-.83.83-3.07-.07-5-2-1.93-1.93-2.83-4.17-2-5 .83-.83 3.07.07 5 2Z\" />\n </Wrap>\n );\n}\n\n// lucide: layers v0.577.0 — \"this PDF everywhere\" surface switcher\nexport function LayersTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Open this PDF in another surface\" {...props}>\n <path d=\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\" />\n <path d=\"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\" />\n <path d=\"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\" />\n </Wrap>\n );\n}\n","\"use client\";\n\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ButtonHTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@ai-matrx/design-system\";\nimport { cn } from \"./cn\";\nimport {\n getTapTargetLinkComponent,\n type TapTargetLinkComponent,\n} from \"./link\";\n\nexport interface TapTargetButtonProps {\n icon?: React.ReactNode;\n children?: React.ReactNode;\n strokeWidth?: number | undefined;\n onClick?: (() => void) | undefined;\n className?: string | undefined;\n as?: \"button\" | \"label\" | undefined;\n htmlFor?: string | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n /**\n * When set, the tap button renders as a link instead of a button.\n * - Internal hrefs (e.g. \"/tasks\") render via the injected link component\n * (`setTapTargetLinkComponent` / the `linkComponent` prop), falling back\n * to a plain `<a>` when none is registered.\n * - External hrefs (http://, https://, mailto:, tel:) render as `<a>`\n * with `target=\"_blank\"` and `rel=\"noopener noreferrer\"` by default.\n * - When combined with `disabled`, the trigger renders as a non-navigable\n * `<span aria-disabled=\"true\">` with the same visual styling.\n */\n href?: string | undefined;\n /** Override target. Works on both internal links and external anchors. */\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n /** Override rel. Works on both internal links and external anchors. */\n rel?: string | undefined;\n /** Forwarded to the injected link component. Pass `false` to disable prefetching. */\n prefetch?: boolean | null | undefined;\n /**\n * Per-instance link component for internal hrefs — overrides the\n * module-level `setTapTargetLinkComponent` registration.\n */\n linkComponent?: TapTargetLinkComponent | undefined;\n /**\n * Tooltip text. Defaults to `ariaLabel` when omitted.\n * Pass `false` to explicitly disable the tooltip.\n */\n tooltip?: string | false | undefined;\n /** Tooltip placement. Defaults to \"top\". */\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\" | undefined;\n /** Tooltip alignment along its side. Defaults to \"center\". */\n tooltipAlign?: \"start\" | \"center\" | \"end\" | undefined;\n /**\n * Visible caption rendered inline after the icon (`[icon Label]`).\n * Widens the pill automatically. Tooltip defaults to off when set — the\n * label is self-describing. Visible text becomes the accessible name.\n */\n label?: string | undefined;\n /**\n * Collapse an icon + caption pill to its icon-only 44px tap target below\n * the `sm` breakpoint. The caption and inline geometry return at `sm+`;\n * `ariaLabel` (falling back to `label`) remains the accessible name.\n */\n mobileIconOnly?: boolean | undefined;\n}\n\nexport interface TapTargetButtonSolidProps extends TapTargetButtonProps {\n bgColor?: string | undefined;\n iconColor?: string | undefined;\n hoverBgColor?: string | undefined;\n /**\n * Press-state background. Defaults to `active:brightness-90` which works on\n * any color. Override when using a custom `bgColor` that should darken to a\n * specific shade on press (e.g. `active:bg-primary/60`).\n */\n activeBgColor?: string | undefined;\n}\n\nconst EXTERNAL_RE = /^(https?:|mailto:|tel:)/i;\n\n// Geometry + press feedback + tap hygiene are the SINGLE SOURCE OF TRUTH in\n// the shipped stylesheet (the `.matrx-tap-*` family in styles.css — import\n// \"@ai-matrx/tap-target/styles.css\" once at app root). This component only\n// picks the right class and layers each variant's decoration on top.\nconst TAP_OUTER_CLASS = \"matrx-tap-target group\";\nconst TAP_GROUP_OUTER_CLASS = \"matrx-tap-target matrx-tap-target-sm group\";\n\nfunction IconContent({\n icon,\n children,\n strokeWidth = 2,\n className,\n}: Pick<\n TapTargetButtonProps,\n \"icon\" | \"children\" | \"strokeWidth\" | \"className\"\n>) {\n if (icon) {\n if (isValidElement<{ className?: string }>(icon)) {\n return cloneElement(icon, {\n className: cn(className, icon.props.className),\n });\n }\n return <span className={className}>{icon}</span>;\n }\n return (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n >\n {children}\n </svg>\n );\n}\n\ntype TapTargetSize = \"default\" | \"sm\";\n\nfunction resolveTapGeometry(\n label: string | undefined,\n size: TapTargetSize,\n mobileIconOnly: boolean,\n) {\n const inline = Boolean(label);\n if (size === \"sm\") {\n return {\n outerClassName:\n inline && mobileIconOnly\n ? \"matrx-tap-target matrx-tap-target-sm matrx-tap-target-mobile-icon-only-sm group\"\n : inline\n ? \"matrx-tap-target matrx-tap-target-sm matrx-tap-target-inline-sm group\"\n : TAP_GROUP_OUTER_CLASS,\n inlineModifier: mobileIconOnly\n ? \"matrx-tap-pill-mobile-icon-only-sm\"\n : \"matrx-tap-pill-inline-sm\",\n };\n }\n return {\n outerClassName:\n inline && mobileIconOnly\n ? `${TAP_OUTER_CLASS} matrx-tap-target-mobile-icon-only`\n : inline\n ? `${TAP_OUTER_CLASS} matrx-tap-target-inline`\n : TAP_OUTER_CLASS,\n inlineModifier: mobileIconOnly\n ? \"matrx-tap-pill-mobile-icon-only\"\n : \"matrx-tap-pill-inline\",\n };\n}\n\nfunction buildTapInner({\n label,\n pillClassName,\n iconClassName,\n labelClassName,\n inlineModifier,\n icon,\n children,\n strokeWidth = 2,\n}: {\n label?: string | undefined;\n pillClassName: string;\n iconClassName: string;\n labelClassName?: string | undefined;\n inlineModifier: string;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n strokeWidth?: number | undefined;\n}) {\n const iconEl = (\n <IconContent\n icon={icon}\n strokeWidth={strokeWidth}\n className={iconClassName}\n >\n {children}\n </IconContent>\n );\n const pillClasses = label\n ? `${pillClassName} ${inlineModifier}`.trim()\n : pillClassName;\n\n if (!label) {\n return <div className={pillClasses}>{iconEl}</div>;\n }\n\n return (\n <div className={pillClasses}>\n {iconEl}\n <span className={labelClassName ?? \"matrx-tap-label\"}>{label}</span>\n </div>\n );\n}\n\ninterface RenderTapTargetArgs extends Pick<\n TapTargetButtonProps,\n | \"icon\"\n | \"children\"\n | \"strokeWidth\"\n | \"label\"\n | \"mobileIconOnly\"\n | \"onClick\"\n | \"as\"\n | \"htmlFor\"\n | \"ariaLabel\"\n | \"disabled\"\n | \"href\"\n | \"target\"\n | \"rel\"\n | \"prefetch\"\n | \"linkComponent\"\n | \"tooltip\"\n | \"tooltipSide\"\n | \"tooltipAlign\"\n> {\n size?: TapTargetSize;\n pillClassName: string;\n iconClassName: string;\n labelClassName?: string | undefined;\n rest?: ButtonHTMLAttributes<HTMLButtonElement> | undefined;\n buttonRef?: Ref<HTMLButtonElement> | undefined;\n}\n\nfunction renderTapTarget({\n size = \"default\",\n pillClassName,\n iconClassName,\n labelClassName,\n icon,\n children,\n strokeWidth,\n label,\n mobileIconOnly = false,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n rest,\n buttonRef,\n}: RenderTapTargetArgs): ReactElement {\n const { outerClassName, inlineModifier } = resolveTapGeometry(\n label,\n size,\n mobileIconOnly,\n );\n const responsiveLabelClassName = mobileIconOnly\n ? `${labelClassName ?? \"matrx-tap-label\"} matrx-tap-label-mobile-icon-only`\n : labelClassName;\n const inner = buildTapInner({\n label,\n pillClassName,\n iconClassName,\n labelClassName: responsiveLabelClassName,\n inlineModifier: label ? inlineModifier : \"\",\n icon,\n children,\n strokeWidth,\n });\n const resolvedTooltip =\n tooltip !== undefined ? tooltip : label ? false : undefined;\n const triggerAriaLabel =\n label && !mobileIconOnly ? undefined : (ariaLabel ?? label);\n const trigger = renderTrigger({\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n as,\n htmlFor,\n onClick,\n ariaLabel: triggerAriaLabel,\n disabled,\n outerClassName,\n children: inner,\n rest,\n buttonRef,\n });\n return withTooltip(trigger, {\n tooltip: resolvedTooltip,\n ariaLabel: triggerAriaLabel,\n disabled,\n tooltipSide,\n tooltipAlign,\n });\n}\n\ninterface RenderTriggerArgs {\n href?: string | undefined;\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n rel?: string | undefined;\n prefetch?: boolean | null | undefined;\n linkComponent?: TapTargetLinkComponent | undefined;\n as?: \"button\" | \"label\" | undefined;\n htmlFor?: string | undefined;\n onClick?: (() => void) | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n outerClassName: string;\n children: ReactNode;\n rest?: ButtonHTMLAttributes<HTMLButtonElement> | undefined;\n buttonRef?: Ref<HTMLButtonElement> | undefined;\n}\n\n/**\n * Resolves the correct trigger element based on the props passed.\n *\n * - `href` + `disabled` → unclickable `<span aria-disabled>`\n * - `href` matching `http(s):|mailto:|tel:` → `<a target=\"_blank\" rel=\"noopener noreferrer\">`\n * - `href` (internal) → the injected link component (per-instance\n * `linkComponent` prop, else `setTapTargetLinkComponent` registration),\n * falling back to a plain `<a>` when none is registered\n * - `as=\"label\"` → `<label htmlFor=...>`\n * - default → `<button>`\n */\nfunction renderTrigger({\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n as,\n htmlFor,\n onClick,\n ariaLabel,\n disabled,\n outerClassName,\n children,\n rest,\n buttonRef,\n}: RenderTriggerArgs): ReactElement {\n if (disabled && href) {\n return (\n <span\n aria-disabled=\"true\"\n aria-label={ariaLabel}\n className={`${outerClassName} opacity-40 pointer-events-none`}\n >\n {children}\n </span>\n );\n }\n if (href) {\n const isExternal = EXTERNAL_RE.test(href);\n if (isExternal) {\n return (\n <a\n href={href}\n target={target ?? \"_blank\"}\n rel={rel ?? \"noopener noreferrer\"}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </a>\n );\n }\n const Link = linkComponent ?? getTapTargetLinkComponent();\n if (Link) {\n return (\n <Link\n href={href}\n target={target}\n rel={rel}\n prefetch={prefetch}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </Link>\n );\n }\n // No link component registered — plain <a>. `prefetch` is a router hint,\n // not a DOM attribute, so it is deliberately dropped here.\n return (\n <a\n href={href}\n target={target}\n rel={rel}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </a>\n );\n }\n if (as === \"label\") {\n return (\n <label\n htmlFor={htmlFor}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </label>\n );\n }\n return (\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={onClick}\n aria-label={ariaLabel}\n disabled={disabled}\n {...rest}\n className={outerClassName}\n >\n {children}\n </button>\n );\n}\n\n/**\n * Wraps a trigger element in a Tooltip when a tooltip label is available.\n * Falls back to `ariaLabel` when `tooltip` is not explicitly set. If both\n * are absent (or `tooltip === false`), the trigger is returned unwrapped.\n */\nfunction withTooltip(\n trigger: ReactElement,\n {\n tooltip,\n ariaLabel,\n disabled,\n tooltipSide = \"top\",\n tooltipAlign = \"center\",\n }: {\n tooltip?: string | false | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\" | undefined;\n tooltipAlign?: \"start\" | \"center\" | \"end\" | undefined;\n },\n): ReactElement {\n if (tooltip === false) return trigger;\n const label =\n typeof tooltip === \"string\" && tooltip.length > 0 ? tooltip : ariaLabel;\n if (!label) return trigger;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n {disabled ? (\n // Radix Tooltip triggers need a hoverable element; a disabled button\n // does not dispatch pointer events, so we wrap in a span for the\n // trigger target while keeping the disabled visual state.\n <span className=\"inline-flex\">{trigger}</span>\n ) : (\n trigger\n )}\n </TooltipTrigger>\n <TooltipContent side={tooltipSide} align={tooltipAlign}>\n {label}\n </TooltipContent>\n </Tooltip>\n );\n}\n\n// To resize/retune every tap button, edit styles.css — not here.\n\nexport const TapTargetButton = forwardRef<\n HTMLButtonElement,\n TapTargetButtonProps & ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButton(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n className,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n const color = className ?? \"text-foreground\";\n return renderTapTarget({\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName: \"matrx-tap-pill matrx-glass-thin-border\",\n iconClassName: `matrx-tap-icon ${color}`,\n rest,\n buttonRef: ref,\n });\n});\n\nexport const TapTargetButtonTransparent = forwardRef<\n HTMLButtonElement,\n TapTargetButtonProps & React.ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonTransparent(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n className,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n const color = className ?? \"text-foreground\";\n return renderTapTarget({\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName:\n \"matrx-tap-pill hover:bg-muted active:bg-muted-foreground/15\",\n iconClassName: `matrx-tap-icon ${color}`,\n rest,\n buttonRef: ref,\n });\n});\n\nexport const TapTargetButtonSolid = forwardRef<\n HTMLButtonElement,\n TapTargetButtonSolidProps & React.ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonSolid(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n bgColor = \"bg-primary\",\n iconColor = \"text-primary-foreground\",\n hoverBgColor = \"hover:bg-primary/80\",\n activeBgColor = \"active:brightness-90\",\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n return renderTapTarget({\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName: `matrx-tap-pill ${bgColor} ${iconColor} ${hoverBgColor} ${activeBgColor}`,\n iconClassName: `matrx-tap-icon ${iconColor}`,\n labelClassName: `matrx-tap-label ${iconColor}`,\n rest,\n buttonRef: ref,\n });\n});\n\n/** Solid destructive pill — delete/remove actions. White-on-red like the\n * primary solid is white-on-blue. Use THIS, never hand-pass bg-destructive\n * with the default (dark) icon color. */\nexport const TapTargetButtonDestructive = forwardRef<\n HTMLButtonElement,\n TapTargetButtonSolidProps & React.ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonDestructive(\n {\n bgColor = \"bg-destructive\",\n iconColor = \"text-destructive-foreground\",\n hoverBgColor = \"hover:bg-destructive/90\",\n ...rest\n },\n ref,\n) {\n return (\n <TapTargetButtonSolid\n ref={ref}\n bgColor={bgColor}\n iconColor={iconColor}\n hoverBgColor={hoverBgColor}\n {...rest}\n />\n );\n});\n\nexport const TapTargetButtonForGroup = forwardRef<\n HTMLButtonElement,\n TapTargetButtonProps & ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonForGroup(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n className,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n const color = className ?? \"text-foreground\";\n return renderTapTarget({\n size: \"sm\",\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName: \"matrx-tap-pill matrx-tap-pill-sm matrx-glass-interactive\",\n iconClassName: `matrx-tap-icon ${color}`,\n labelClassName: `matrx-tap-label ${color}`,\n rest,\n buttonRef: ref,\n });\n});\n\nexport function TapTargetButtonGroup({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string | undefined;\n}) {\n return (\n <div\n className={\n className\n ? `relative inline-flex h-9 items-center ${className}`\n : \"relative inline-flex h-9 items-center\"\n }\n >\n <div className=\"pointer-events-none absolute inset-x-0 top-1/2 -translate-y-1/2 h-7 rounded-full matrx-glass-thin-border\" />\n {/* min-w-0 lets flexible children (e.g. a truncating filename) shrink\n under container pressure; fixed-size tap buttons are unaffected. */}\n <div className=\"relative flex min-w-0 items-center\">{children}</div>\n </div>\n );\n}\n","/**\n * Minimal className join — the only piece of `cn` this package needs.\n * No tailwind-merge / clsx dependency by design: callers pass literal strings.\n */\nexport function cn(\n ...values: Array<string | null | undefined | false>\n): string {\n return values.filter(Boolean).join(\" \").trim();\n}\n","import type { ComponentType, ReactNode } from \"react\";\n\n/**\n * The injectable link seam — the package's replacement for the original\n * hard `next/link` import.\n *\n * Internal hrefs (anything NOT matching `http(s):`, `mailto:`, `tel:`) render\n * through the link component resolved here; external hrefs always render a\n * plain `<a target=\"_blank\" rel=\"noopener noreferrer\">`, exactly like the\n * original. When nothing is registered and no per-instance `linkComponent`\n * prop is given, internal hrefs fall back to a plain `<a>` (no prefetch, no\n * client-side routing — still a working link).\n */\nexport interface TapTargetLinkProps {\n href: string;\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n rel?: string | undefined;\n /** Router prefetch hint (next/link semantics). Plain `<a>` fallback ignores it. */\n prefetch?: boolean | null | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n children?: ReactNode;\n}\n\nexport type TapTargetLinkComponent = ComponentType<TapTargetLinkProps>;\n\n/**\n * The registered component lives in a `Symbol.for` slot on `globalThis` — NOT\n * in module state — so it survives the module graph being instantiated more\n * than once: the `.` and `./buttons` dist bundles each inline the primitives\n * (tsup `splitting: false`), and a consumer may even mix `import` and\n * `require`. One registration must reach every copy.\n */\nconst LINK_SLOT = Symbol.for(\"@ai-matrx/tap-target:link-component\");\n\ntype GlobalWithLinkSlot = typeof globalThis & {\n [LINK_SLOT]?: TapTargetLinkComponent | null;\n};\n\n/**\n * Register the app's link component once at startup (e.g. `next/link`):\n *\n * ```tsx\n * import Link from \"next/link\";\n * import { setTapTargetLinkComponent } from \"@ai-matrx/tap-target\";\n * setTapTargetLinkComponent(Link);\n * ```\n *\n * Pass `null` to unregister (plain `<a>` fallback resumes).\n */\nexport function setTapTargetLinkComponent(\n component: TapTargetLinkComponent | null,\n): void {\n (globalThis as GlobalWithLinkSlot)[LINK_SLOT] = component;\n}\n\n/** The currently registered link component, or `null` when none is set. */\nexport function getTapTargetLinkComponent(): TapTargetLinkComponent | null {\n return (globalThis as GlobalWithLinkSlot)[LINK_SLOT] ?? null;\n}\n"],"mappings":"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","names":["forwardRef","TapTargetButton","TapTargetButtonTransparent","TapTargetButtonSolid","TapTargetButtonDestructive","TapTargetButtonForGroup","jsx","jsxs","forwardRef","Wrap"]}
1
+ {"version":3,"sources":["../src/tap-buttons.tsx","../src/tap-target-button.tsx","../src/cn.ts","../src/link.ts"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, type Ref } from \"react\";\n// The spinner loop comes from `@ai-matrx/design-system`'s motion layer — the\n// package this one already depends on — NOT from core Tailwind's\n// `animate-spin` and NOT from a keyframe copied into this package's\n// stylesheet. See the note above `LoadingTapButton`.\nimport { MOTION_SPIN } from \"@ai-matrx/design-system\";\nimport {\n TapTargetButton,\n TapTargetButtonTransparent,\n TapTargetButtonSolid,\n TapTargetButtonForGroup,\n} from \"./tap-target-button\";\nimport type { TapTargetLinkComponent } from \"./link\";\n\n// ---------------------------------------------------------------------------\n// Shared types\n// ---------------------------------------------------------------------------\n\ntype Variant = \"glass\" | \"transparent\" | \"solid\" | \"group\";\n\nexport interface TapButtonProps {\n /** Forwarded to the underlying button (Radix `asChild`, focus chains, etc.). */\n ref?: Ref<HTMLButtonElement> | undefined;\n variant?: Variant | undefined;\n onClick?: (() => void) | undefined;\n as?: \"button\" | \"label\" | undefined;\n htmlFor?: string | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n tabIndex?: number | undefined;\n className?: string | undefined;\n strokeWidth?: number | undefined;\n // Solid-variant color overrides — only used when variant=\"solid\"\n bgColor?: string | undefined;\n iconColor?: string | undefined;\n hoverBgColor?: string | undefined;\n activeBgColor?: string | undefined;\n // Link support — when set, the button renders as a link or <a>.\n // Internal hrefs use the injected link component (setTapTargetLinkComponent\n // or the `linkComponent` prop; plain <a> when none is registered); external\n // (http(s)://, mailto:, tel:) use <a> with target=\"_blank\" +\n // rel=\"noopener noreferrer\" by default. Pass an explicit `target` to\n // override (works for internal links too).\n href?: string | undefined;\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n rel?: string | undefined;\n prefetch?: boolean | null | undefined;\n /** Per-instance link component override for internal hrefs. */\n linkComponent?: TapTargetLinkComponent | undefined;\n // Tooltip support — defaults to `ariaLabel`. Pass `false` to opt out.\n tooltip?: string | false | undefined;\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\" | undefined;\n tooltipAlign?: \"start\" | \"center\" | \"end\" | undefined;\n /** Inline caption after the icon — see TapTargetButton `label`. */\n label?: string | undefined;\n /** Passthrough from AITapButtonProps / MakerTapButton — stripped before DOM. */\n colored?: boolean | undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Variant resolver — maps a variant string to the correct wrapper component.\n// Runs at build/server time so there's zero client cost.\n//\n// IMPORTANT: `Wrap` MUST forward refs. The pre-composed `*TapButton` functions\n// below are plain function components (in React 19 ref is a regular prop) and\n// spread `{...props}` to `Wrap` — that spread carries ref through. `Wrap`\n// extracts ref and passes it explicitly to the underlying `forwardRef`\n// primitive. Without this, every `*TapButton` placed inside a Radix\n// `*Trigger asChild` (DropdownMenu, Popover, Tooltip, etc.) silently loses\n// the ref — the popper can't anchor and Radix's injected event handlers /\n// `data-state` / `aria-*` get dropped. (Precedent: matrx-frontend\n// `features/files/FEATURE.md`, where this pattern was established.)\n// ---------------------------------------------------------------------------\n\nconst Wrap = forwardRef<\n HTMLButtonElement,\n TapButtonProps & { children: React.ReactNode }\n>(function Wrap(\n {\n variant = \"glass\",\n children,\n bgColor,\n iconColor,\n hoverBgColor,\n activeBgColor,\n // AITapButtonProps passthrough — not a DOM attribute (see ai-tap-buttons Wrap)\n colored: _colored,\n ...props\n },\n ref,\n) {\n switch (variant) {\n case \"transparent\":\n return (\n <TapTargetButtonTransparent ref={ref} {...props}>\n {children}\n </TapTargetButtonTransparent>\n );\n case \"solid\":\n return (\n <TapTargetButtonSolid\n ref={ref}\n bgColor={bgColor}\n iconColor={iconColor}\n hoverBgColor={hoverBgColor}\n activeBgColor={activeBgColor}\n {...props}\n >\n {children}\n </TapTargetButtonSolid>\n );\n case \"group\":\n return (\n <TapTargetButtonForGroup ref={ref} {...props}>\n {children}\n </TapTargetButtonForGroup>\n );\n default:\n return (\n <TapTargetButton ref={ref} {...props}>\n {children}\n </TapTargetButton>\n );\n }\n});\n\n// ---------------------------------------------------------------------------\n// Pre-composed buttons — one import, one tag, zero configuration needed.\n// Default variant is \"glass\". Override with variant=\"transparent\" etc.\n// All SVG paths match lucide-react v0.577.0 exactly.\n// ---------------------------------------------------------------------------\n\n// lucide: menu (hand-crafted HeroIcons path — no Lucide equivalent, kept as-is)\nexport function MenuTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Menu\" strokeWidth={1.75} {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\"\n />\n </Wrap>\n );\n}\n\n// lucide: plus (hand-crafted — no drift, kept as-is)\nexport function PlusTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Add\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 4.5v15m7.5-7.5h-15\"\n />\n </Wrap>\n );\n}\n\n// lucide: search → circle cx=11 cy=11 r=8 + line to 21,21\nexport function SearchTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Search\" {...props}>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.34-4.34\" />\n </Wrap>\n );\n}\n\n// lucide: settings (hand-crafted — kept as-is, Lucide uses \"settings-2\" pattern)\nexport function SettingsTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Settings\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\"\n />\n </Wrap>\n );\n}\n\n// lucide: maximize (hand-crafted corner-arrows — kept as-is)\nexport function MaximizeTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Fullscreen\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15\"\n />\n </Wrap>\n );\n}\n\n// lucide: home v0.577.0 — used as the \"Hub\" (main/list) action\nexport function HomeTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Hub\" {...props}>\n <path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\" />\n <path d=\"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n </Wrap>\n );\n}\n\n// lucide: layout-grid v0.577.0\nexport function LayoutGridTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Card view\" {...props}>\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"14\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"14\" rx=\"1\" />\n </Wrap>\n );\n}\n\n// lucide: list v0.577.0\nexport function ListTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Table view\" {...props}>\n <path d=\"M3 5h.01\" />\n <path d=\"M3 12h.01\" />\n <path d=\"M3 19h.01\" />\n <path d=\"M8 5h13\" />\n <path d=\"M8 12h13\" />\n <path d=\"M8 19h13\" />\n </Wrap>\n );\n}\n\n// lucide: arrow-down-up (hand-crafted — kept as-is)\nexport function ArrowDownUpTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Sort\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3 4.5h14.25M3 9h9.75M3 13.5h5.25m5.25-.75L17.25 9m0 0L21 12.75M17.25 9v10.5\"\n />\n </Wrap>\n );\n}\n\n// lucide: bell v0.577.0\nexport function BellTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Notifications\" {...props}>\n <path d=\"M10.268 21a2 2 0 0 0 3.464 0\" />\n <path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\" />\n </Wrap>\n );\n}\n\n// lucide: bell-ring v0.577.0 — animated cousin of bell, used for \"has unread\"\nexport function BellRingTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Notifications\" {...props}>\n <path d=\"M10.268 21a2 2 0 0 0 3.464 0\" />\n <path d=\"M22 8c0-2.3-.8-4.3-2-6\" />\n <path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\" />\n <path d=\"M4 2C2.8 3.7 2 5.7 2 8\" />\n </Wrap>\n );\n}\n\n// lucide: zap v0.577.0 — lightning bolt, used as the Quick Actions trigger\nexport function ZapTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Quick actions\" {...props}>\n <path d=\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\" />\n </Wrap>\n );\n}\n\n// lucide: upload v0.577.0\nexport function UploadTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Upload\" {...props}>\n <path d=\"M12 3v12\" />\n <path d=\"m17 8-5-5-5 5\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n </Wrap>\n );\n}\n\n// lucide: download v0.577.0\nexport function DownloadTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Download\" {...props}>\n <path d=\"M12 15V3\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n </Wrap>\n );\n}\n\n// lucide: share-2 v0.577.0\nexport function ShareTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Share\" {...props}>\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n <circle cx=\"6\" cy=\"12\" r=\"3\" />\n <circle cx=\"18\" cy=\"19\" r=\"3\" />\n <line x1=\"8.59\" x2=\"15.42\" y1=\"13.51\" y2=\"17.49\" />\n <line x1=\"15.41\" x2=\"8.59\" y1=\"6.51\" y2=\"10.49\" />\n </Wrap>\n );\n}\n\n// lucide: undo v0.577.0\nexport function UndoTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Undo\" {...props}>\n <path d=\"M3 7v6h6\" />\n <path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\" />\n </Wrap>\n );\n}\n\n// lucide: redo v0.577.0\nexport function RedoTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Redo\" {...props}>\n <path d=\"M21 7v6h-6\" />\n <path d=\"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7\" />\n </Wrap>\n );\n}\n\n// lucide: copy v0.577.0\nexport function CopyTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Copy\" {...props}>\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </Wrap>\n );\n}\n\n// lucide: trash v0.577.0\nexport function TrashTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Delete\" {...props}>\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" />\n <path d=\"M3 6h18\" />\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n </Wrap>\n );\n}\n\n// lucide: files v0.577.0\nexport function FilesTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Copy all\" {...props}>\n <path d=\"M20 7h-3a2 2 0 0 1-2-2V2\" />\n <path d=\"M9 18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h7l4 4v10a2 2 0 0 1-2 2Z\" />\n <path d=\"M3 7.6v12.8A1.6 1.6 0 0 0 4.6 22h9.8\" />\n </Wrap>\n );\n}\n\n// lucide: chevron-left v0.577.0 — arms extended from 6 to 7 (45° kept) for a\n// slightly larger glyph that better fills the 32px inner pill.\nexport function ChevronLeftTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Back\" {...props}>\n <path d=\"m16 19-7-7 7-7\" />\n </Wrap>\n );\n}\n\n// lucide: chevron-right v0.577.0\nexport function ChevronRightTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Next\" {...props}>\n <path d=\"m9 18 6-6-6-6\" />\n </Wrap>\n );\n}\n\n// lucide: panel-left v0.577.0\nexport function PanelLeftTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Toggle sidebar\" {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M9 3v18\" />\n </Wrap>\n );\n}\n\n// lucide: panel-right v0.577.0\nexport function PanelRightTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Toggle sidebar\" {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M15 3v18\" />\n </Wrap>\n );\n}\n\n// lucide: square-pen v0.577.0\nexport function SquarePenTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"New chat\" {...props}>\n <path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\" />\n </Wrap>\n );\n}\n\n// lucide: x v0.577.0\nexport function XTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Close\" {...props}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </Wrap>\n );\n}\n\n// lucide: funnel v0.577.0 (filter is an alias for funnel in this version)\nexport function FilterTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Filter\" {...props}>\n <path d=\"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\" />\n </Wrap>\n );\n}\n\n// lucide: play v0.577.0\nexport function PlayTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Play\" {...props}>\n <path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" />\n </Wrap>\n );\n}\n\n// lucide: pause v0.577.0 — two rects (redesigned from bar paths)\nexport function PauseTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Pause\" {...props}>\n <rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" />\n <rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" />\n </Wrap>\n );\n}\n\n// lucide: square v0.577.0 (stop uses filled square)\nexport function StopTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Stop\" {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n </Wrap>\n );\n}\n\n// lucide: volume-2 v0.577.0\nexport function Volume2TapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Speaker\" {...props}>\n <path d=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\" />\n <path d=\"M16 9a5 5 0 0 1 0 6\" />\n <path d=\"M19.364 18.364a9 9 0 0 0 0-12.728\" />\n </Wrap>\n );\n}\n\n// lucide: arrow-up v0.577.0\nexport function ArrowUpTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Send\" {...props}>\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </Wrap>\n );\n}\n\n// lucide: mic v0.577.0\nexport function MicTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Start recording\" {...props}>\n <path d=\"M12 19v3\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <rect x=\"9\" y=\"2\" width=\"6\" height=\"13\" rx=\"3\" />\n </Wrap>\n );\n}\n\n// lucide: mic-off v0.577.0\nexport function MicOffTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Stop recording\" {...props}>\n <path d=\"M12 19v3\" />\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\n <path d=\"M16.95 16.95A7 7 0 0 1 5 12v-2\" />\n <path d=\"M18.89 13.23A7 7 0 0 0 19 12v-2\" />\n <path d=\"m2 2 20 20\" />\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\n </Wrap>\n );\n}\n\n// lucide: triangle-alert v0.577.0\nexport function TriangleAlertTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Alert\" {...props}>\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </Wrap>\n );\n}\n\n// lucide: shield-check (context set)\nexport function ShieldCheckTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Context set\" {...props}>\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"m9 12 2 2 4-4\" />\n </Wrap>\n );\n}\n\n// lucide: shield-alert (context unset)\nexport function ShieldAlertTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"No context\" {...props}>\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n </Wrap>\n );\n}\n\n// lucide: bug v0.577.0 (major update — full insect anatomy)\nexport function BugTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Debug\" {...props}>\n <path d=\"M12 20v-9\" />\n <path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\" />\n <path d=\"M14.12 3.88 16 2\" />\n <path d=\"M21 21a4 4 0 0 0-3.81-4\" />\n <path d=\"M21 5a4 4 0 0 1-3.55 3.97\" />\n <path d=\"M22 13h-4\" />\n <path d=\"M3 21a4 4 0 0 1 3.81-4\" />\n <path d=\"M3 5a4 4 0 0 0 3.55 3.97\" />\n <path d=\"M6 13H2\" />\n <path d=\"m8 2 1.88 1.88\" />\n <path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\" />\n </Wrap>\n );\n}\n\n// lucide: settings-2 v0.577.0 (gear + center circle — kept as-is, matches intent)\nexport function Settings2TapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Settings\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </Wrap>\n );\n}\n\n// lucide: save (hand-crafted floppy disk — no direct Lucide equivalent, kept as-is)\nexport function SaveTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Save\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M4.5 6a2 2 0 012-2h9.25L20.5 9v9a2 2 0 01-2 2h-12a2 2 0 01-2-2V6z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8.5 4v4.5a.5.5 0 00.5.5h6a.5.5 0 00.5-.5V4\"\n />\n <rect\n x=\"8\"\n y=\"14\"\n width=\"8\"\n height=\"5.5\"\n rx=\"0.5\"\n strokeLinejoin=\"round\"\n />\n </Wrap>\n );\n}\n\n// lucide: send v0.577.0 (paper-airplane redesign)\nexport function SendTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Send\" {...props}>\n <path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\" />\n <path d=\"m21.854 2.147-10.94 10.939\" />\n </Wrap>\n );\n}\n\n// lucide: message-square v0.577.0\nexport function MessageTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Message\" {...props}>\n <path d=\"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\" />\n </Wrap>\n );\n}\n\n// lucide: variable v0.577.0 (major update — uses line elements + bracket paths)\nexport function VariableTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Variable\" {...props}>\n <path d=\"M8 21s-4-3-4-9 4-9 4-9\" />\n <path d=\"M16 3s4 3 4 9-4 9-4 9\" />\n <line x1=\"15\" x2=\"9\" y1=\"9\" y2=\"15\" />\n <line x1=\"9\" x2=\"15\" y1=\"9\" y2=\"15\" />\n </Wrap>\n );\n}\n\n// lucide: wrench v0.577.0 (single clean path)\nexport function WrenchTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Tool\" {...props}>\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\" />\n </Wrap>\n );\n}\n\n// lucide: command v0.577.0 (single continuous path)\nexport function CommandTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Command\" {...props}>\n <path d=\"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3\" />\n </Wrap>\n );\n}\n\n// lucide: terminal v0.577.0 (two paths: chevron + underline)\nexport function TerminalTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Terminal\" {...props}>\n <path d=\"M12 19h8\" />\n <path d=\"m4 17 6-6-6-6\" />\n </Wrap>\n );\n}\n\n// lucide: test-tube v0.577.0 (3 clean paths)\nexport function TestTubeTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Test\" {...props}>\n <path d=\"M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5c-1.4 0-2.5-1.1-2.5-2.5V2\" />\n <path d=\"M8.5 2h7\" />\n <path d=\"M14.5 16h-5\" />\n </Wrap>\n );\n}\n\n// lucide: rotate-ccw v0.577.0 (same shape as history minus the clock hand — used for Reset)\nexport function ResetTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Reset\" {...props}>\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n </Wrap>\n );\n}\n\n// lucide: eraser v0.577.0 (major update — proper eraser shape)\nexport function ClearTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Clear\" {...props}>\n <path d=\"M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21\" />\n <path d=\"m5.082 11.09 8.828 8.828\" />\n </Wrap>\n );\n}\n\n// lucide: refresh-cw v1.22.0 (dual arrows — was a broken hand-crafted Heroicons-style path)\nexport function RetryTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Retry\" {...props}>\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </Wrap>\n );\n}\n\n/** Alias — same Lucide refresh-cw glyph as RetryTapButton. */\nexport function RefreshCwTapButton(props: TapButtonProps) {\n return <RetryTapButton ariaLabel=\"Refresh\" {...props} />;\n}\n\n// lucide: loading spinner (custom animated — no Lucide equivalent)\n//\n// 🚨 `matrx-spin`, NEVER `animate-spin` (census row 19i, closed here at 0.2.1).\n// `animate-spin` is a core Tailwind utility, so it happened to survive in all\n// four current consumers — but a package cannot ship a class it does not\n// define: the first host without Tailwind's core animate utilities gets a\n// spinner that does not spin, which is a load-bearing lie (it says the work\n// has stopped) with no error to find it by. `matrx-spin` is design-system\n// 0.10.0's own keyframe + rule, shipped in ITS `styles.css` and asserted\n// present in ITS packed tarball. This package IMPORTS that contract (the\n// exported `MOTION_SPIN` constant, and `styles.css` `@import`s the sheet) —\n// it does not copy the keyframe, which would be a twin of exactly the kind\n// this row exists to kill. Under `prefers-reduced-motion` the shared rule\n// SLOWS the loop instead of stopping it, because a stopped spinner removes\n// information rather than motion.\nexport function LoadingTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Loading\" {...props}>\n <circle\n className={MOTION_SPIN}\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n strokeDasharray=\"28.27\"\n strokeDashoffset=\"9\"\n strokeLinecap=\"round\"\n style={{ transformOrigin: \"12px 12px\" }}\n />\n </Wrap>\n );\n}\n\n// lucide: bot/robot (hand-crafted — kept as-is)\nexport function RobotTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"AI Agent\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9 3.75H6.912a2.25 2.25 0 00-2.15 1.588L2.35 13.177a2.25 2.25 0 00-.1.661V18a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18v-4.162c0-.224-.034-.447-.1-.661L19.24 5.338a2.25 2.25 0 00-2.15-1.588H15M2.25 13.5h3.86a2.25 2.25 0 012.012 1.244l.256.512a2.25 2.25 0 002.013 1.244h3.218a2.25 2.25 0 002.013-1.244l.256-.512a2.25 2.25 0 012.013-1.244h3.859M12 3v8.25m0 0-3-3m3 3 3-3\"\n />\n </Wrap>\n );\n}\n\n// lucide: webhook v0.577.0\nexport function WebhookTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Webhook\" {...props}>\n <path d=\"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2\" />\n <path d=\"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06\" />\n <path d=\"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8\" />\n </Wrap>\n );\n}\n\n// lucide: eye v0.577.0\nexport function ViewTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"View\" {...props}>\n <path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </Wrap>\n );\n}\n\n// lucide: hammer v0.577.0\nexport function BuildTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Build\" {...props}>\n <path d=\"m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9\" />\n <path d=\"m18 15 4-4\" />\n <path d=\"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5\" />\n </Wrap>\n );\n}\n\n// lucide: play v0.577.0 (alias for Run context)\nexport function RunTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Run\" {...props}>\n <path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" />\n </Wrap>\n );\n}\n\n// lucide: history v0.577.0\nexport function HistoryTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"History\" {...props}>\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n <path d=\"M12 7v5l4 2\" />\n </Wrap>\n );\n}\n\n// lucide: paperclip v0.577.0\nexport function PaperclipTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Attach file\" {...props}>\n <path d=\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\" />\n </Wrap>\n );\n}\n\n// lucide: thumbs-up v0.577.0\nexport function ThumbsUpTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Like\" {...props}>\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </Wrap>\n );\n}\n\n// lucide: thumbs-down v0.577.0\nexport function ThumbsDownTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Dislike\" {...props}>\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </Wrap>\n );\n}\n\n// lucide: check v0.577.0\nexport function CheckTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Done\" {...props}>\n <path d=\"M20 6 9 17l-5-5\" />\n </Wrap>\n );\n}\n\n// lucide: pencil v0.577.0\nexport function PencilTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Edit\" {...props}>\n <path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\" />\n <path d=\"m15 5 4 4\" />\n </Wrap>\n );\n}\n\n// lucide: ellipsis (more-horizontal) v0.577.0\nexport function MoreHorizontalTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"More options\" {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </Wrap>\n );\n}\n\n// lucide: check-square v0.577.0\nexport function CheckSquareTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Task\" {...props}>\n <path d=\"m9 11 3 3L22 4\" />\n <path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\" />\n </Wrap>\n );\n}\n\n// lucide: ghost v0.577.0\nexport function GhostTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Incognito chat\" {...props}>\n <path d=\"M9 10h.01\" />\n <path d=\"M15 10h.01\" />\n <path d=\"M12 2a8 8 0 0 0-8 8v12l3-3 2.5 2.5L12 19l2.5 2.5L17 19l3 3V10a8 8 0 0 0-8-8z\" />\n </Wrap>\n );\n}\n\n// lucide: link (chain link — used for \"attach to task\") v0.577.0\nexport function LinkTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Attach\" {...props}>\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </Wrap>\n );\n}\n\n// lucide: external-link v0.577.0\nexport function ExternalLinkTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Open source\" {...props}>\n <path d=\"M15 3h6v6\" />\n <path d=\"M10 14 21 3\" />\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n </Wrap>\n );\n}\n\n// lucide: clipboard-list v0.577.0\nexport function ClipboardListTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Copy Pages\" {...props}>\n <rect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\" />\n <path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\" />\n <path d=\"M12 11h4\" />\n <path d=\"M12 16h4\" />\n <path d=\"M8 11h.01\" />\n <path d=\"M8 16h.01\" />\n </Wrap>\n );\n}\n\n// lucide: party-popper v0.577.0\nexport function PartyPopperTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"AI Clean\" {...props}>\n <path d=\"M5.8 11.3 2 22l10.7-3.79\" />\n <path d=\"M4 3h.01\" />\n <path d=\"M22 8h.01\" />\n <path d=\"M15 2h.01\" />\n <path d=\"M22 20h.01\" />\n <path d=\"m22 2-2.24.75a2.9 2.9 0 0 0-1.96 3.12c.1.86-.57 1.63-1.45 1.63h-.38c-.86 0-1.6.6-1.76 1.44L14 10\" />\n <path d=\"m22 13-.82-.33c-.86-.34-1.82.2-1.98 1.11c-.11.7-.72 1.22-1.43 1.22H17\" />\n <path d=\"m11 2 .33.82c.34.86-.2 1.82-1.11 1.98C9.52 4.9 9 5.52 9 6.23V7\" />\n <path d=\"M11 13c1.93 1.93 2.83 4.17 2 5-.83.83-3.07-.07-5-2-1.93-1.93-2.83-4.17-2-5 .83-.83 3.07.07 5 2Z\" />\n </Wrap>\n );\n}\n\n// lucide: layers v0.577.0 — \"this PDF everywhere\" surface switcher\nexport function LayersTapButton(props: TapButtonProps) {\n return (\n <Wrap ariaLabel=\"Open this PDF in another surface\" {...props}>\n <path d=\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\" />\n <path d=\"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\" />\n <path d=\"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\" />\n </Wrap>\n );\n}\n","\"use client\";\n\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ButtonHTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@ai-matrx/design-system\";\nimport { cn } from \"./cn\";\nimport {\n getTapTargetLinkComponent,\n type TapTargetLinkComponent,\n} from \"./link\";\n\nexport interface TapTargetButtonProps {\n icon?: React.ReactNode;\n children?: React.ReactNode;\n strokeWidth?: number | undefined;\n onClick?: (() => void) | undefined;\n className?: string | undefined;\n as?: \"button\" | \"label\" | undefined;\n htmlFor?: string | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n /**\n * When set, the tap button renders as a link instead of a button.\n * - Internal hrefs (e.g. \"/tasks\") render via the injected link component\n * (`setTapTargetLinkComponent` / the `linkComponent` prop), falling back\n * to a plain `<a>` when none is registered.\n * - External hrefs (http://, https://, mailto:, tel:) render as `<a>`\n * with `target=\"_blank\"` and `rel=\"noopener noreferrer\"` by default.\n * - When combined with `disabled`, the trigger renders as a non-navigable\n * `<span aria-disabled=\"true\">` with the same visual styling.\n */\n href?: string | undefined;\n /** Override target. Works on both internal links and external anchors. */\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n /** Override rel. Works on both internal links and external anchors. */\n rel?: string | undefined;\n /** Forwarded to the injected link component. Pass `false` to disable prefetching. */\n prefetch?: boolean | null | undefined;\n /**\n * Per-instance link component for internal hrefs — overrides the\n * module-level `setTapTargetLinkComponent` registration.\n */\n linkComponent?: TapTargetLinkComponent | undefined;\n /**\n * Tooltip text. Defaults to `ariaLabel` when omitted.\n * Pass `false` to explicitly disable the tooltip.\n */\n tooltip?: string | false | undefined;\n /** Tooltip placement. Defaults to \"top\". */\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\" | undefined;\n /** Tooltip alignment along its side. Defaults to \"center\". */\n tooltipAlign?: \"start\" | \"center\" | \"end\" | undefined;\n /**\n * Visible caption rendered inline after the icon (`[icon Label]`).\n * Widens the pill automatically. Tooltip defaults to off when set — the\n * label is self-describing. Visible text becomes the accessible name.\n */\n label?: string | undefined;\n /**\n * Collapse an icon + caption pill to its icon-only 44px tap target below\n * the `sm` breakpoint. The caption and inline geometry return at `sm+`;\n * `ariaLabel` (falling back to `label`) remains the accessible name.\n */\n mobileIconOnly?: boolean | undefined;\n}\n\nexport interface TapTargetButtonSolidProps extends TapTargetButtonProps {\n bgColor?: string | undefined;\n iconColor?: string | undefined;\n hoverBgColor?: string | undefined;\n /**\n * Press-state background. Defaults to `active:brightness-90` which works on\n * any color. Override when using a custom `bgColor` that should darken to a\n * specific shade on press (e.g. `active:bg-primary/60`).\n */\n activeBgColor?: string | undefined;\n}\n\nconst EXTERNAL_RE = /^(https?:|mailto:|tel:)/i;\n\n// Geometry + press feedback + tap hygiene are the SINGLE SOURCE OF TRUTH in\n// the shipped stylesheet (the `.matrx-tap-*` family in styles.css — import\n// \"@ai-matrx/tap-target/styles.css\" once at app root). This component only\n// picks the right class and layers each variant's decoration on top.\nconst TAP_OUTER_CLASS = \"matrx-tap-target group\";\nconst TAP_GROUP_OUTER_CLASS = \"matrx-tap-target matrx-tap-target-sm group\";\n\nfunction IconContent({\n icon,\n children,\n strokeWidth = 2,\n className,\n}: Pick<\n TapTargetButtonProps,\n \"icon\" | \"children\" | \"strokeWidth\" | \"className\"\n>) {\n if (icon) {\n if (isValidElement<{ className?: string }>(icon)) {\n return cloneElement(icon, {\n className: cn(className, icon.props.className),\n });\n }\n return <span className={className}>{icon}</span>;\n }\n return (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n >\n {children}\n </svg>\n );\n}\n\ntype TapTargetSize = \"default\" | \"sm\";\n\nfunction resolveTapGeometry(\n label: string | undefined,\n size: TapTargetSize,\n mobileIconOnly: boolean,\n) {\n const inline = Boolean(label);\n if (size === \"sm\") {\n return {\n outerClassName:\n inline && mobileIconOnly\n ? \"matrx-tap-target matrx-tap-target-sm matrx-tap-target-mobile-icon-only-sm group\"\n : inline\n ? \"matrx-tap-target matrx-tap-target-sm matrx-tap-target-inline-sm group\"\n : TAP_GROUP_OUTER_CLASS,\n inlineModifier: mobileIconOnly\n ? \"matrx-tap-pill-mobile-icon-only-sm\"\n : \"matrx-tap-pill-inline-sm\",\n };\n }\n return {\n outerClassName:\n inline && mobileIconOnly\n ? `${TAP_OUTER_CLASS} matrx-tap-target-mobile-icon-only`\n : inline\n ? `${TAP_OUTER_CLASS} matrx-tap-target-inline`\n : TAP_OUTER_CLASS,\n inlineModifier: mobileIconOnly\n ? \"matrx-tap-pill-mobile-icon-only\"\n : \"matrx-tap-pill-inline\",\n };\n}\n\nfunction buildTapInner({\n label,\n pillClassName,\n iconClassName,\n labelClassName,\n inlineModifier,\n icon,\n children,\n strokeWidth = 2,\n}: {\n label?: string | undefined;\n pillClassName: string;\n iconClassName: string;\n labelClassName?: string | undefined;\n inlineModifier: string;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n strokeWidth?: number | undefined;\n}) {\n const iconEl = (\n <IconContent\n icon={icon}\n strokeWidth={strokeWidth}\n className={iconClassName}\n >\n {children}\n </IconContent>\n );\n const pillClasses = label\n ? `${pillClassName} ${inlineModifier}`.trim()\n : pillClassName;\n\n if (!label) {\n return <div className={pillClasses}>{iconEl}</div>;\n }\n\n return (\n <div className={pillClasses}>\n {iconEl}\n <span className={labelClassName ?? \"matrx-tap-label\"}>{label}</span>\n </div>\n );\n}\n\ninterface RenderTapTargetArgs extends Pick<\n TapTargetButtonProps,\n | \"icon\"\n | \"children\"\n | \"strokeWidth\"\n | \"label\"\n | \"mobileIconOnly\"\n | \"onClick\"\n | \"as\"\n | \"htmlFor\"\n | \"ariaLabel\"\n | \"disabled\"\n | \"href\"\n | \"target\"\n | \"rel\"\n | \"prefetch\"\n | \"linkComponent\"\n | \"tooltip\"\n | \"tooltipSide\"\n | \"tooltipAlign\"\n> {\n size?: TapTargetSize;\n pillClassName: string;\n iconClassName: string;\n labelClassName?: string | undefined;\n rest?: ButtonHTMLAttributes<HTMLButtonElement> | undefined;\n buttonRef?: Ref<HTMLButtonElement> | undefined;\n}\n\nfunction renderTapTarget({\n size = \"default\",\n pillClassName,\n iconClassName,\n labelClassName,\n icon,\n children,\n strokeWidth,\n label,\n mobileIconOnly = false,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n rest,\n buttonRef,\n}: RenderTapTargetArgs): ReactElement {\n const { outerClassName, inlineModifier } = resolveTapGeometry(\n label,\n size,\n mobileIconOnly,\n );\n const responsiveLabelClassName = mobileIconOnly\n ? `${labelClassName ?? \"matrx-tap-label\"} matrx-tap-label-mobile-icon-only`\n : labelClassName;\n const inner = buildTapInner({\n label,\n pillClassName,\n iconClassName,\n labelClassName: responsiveLabelClassName,\n inlineModifier: label ? inlineModifier : \"\",\n icon,\n children,\n strokeWidth,\n });\n const resolvedTooltip =\n tooltip !== undefined ? tooltip : label ? false : undefined;\n const triggerAriaLabel =\n label && !mobileIconOnly ? undefined : (ariaLabel ?? label);\n const trigger = renderTrigger({\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n as,\n htmlFor,\n onClick,\n ariaLabel: triggerAriaLabel,\n disabled,\n outerClassName,\n children: inner,\n rest,\n buttonRef,\n });\n return withTooltip(trigger, {\n tooltip: resolvedTooltip,\n ariaLabel: triggerAriaLabel,\n disabled,\n tooltipSide,\n tooltipAlign,\n });\n}\n\ninterface RenderTriggerArgs {\n href?: string | undefined;\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n rel?: string | undefined;\n prefetch?: boolean | null | undefined;\n linkComponent?: TapTargetLinkComponent | undefined;\n as?: \"button\" | \"label\" | undefined;\n htmlFor?: string | undefined;\n onClick?: (() => void) | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n outerClassName: string;\n children: ReactNode;\n rest?: ButtonHTMLAttributes<HTMLButtonElement> | undefined;\n buttonRef?: Ref<HTMLButtonElement> | undefined;\n}\n\n/**\n * Resolves the correct trigger element based on the props passed.\n *\n * - `href` + `disabled` → unclickable `<span aria-disabled>`\n * - `href` matching `http(s):|mailto:|tel:` → `<a target=\"_blank\" rel=\"noopener noreferrer\">`\n * - `href` (internal) → the injected link component (per-instance\n * `linkComponent` prop, else `setTapTargetLinkComponent` registration),\n * falling back to a plain `<a>` when none is registered\n * - `as=\"label\"` → `<label htmlFor=...>`\n * - default → `<button>`\n */\nfunction renderTrigger({\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n as,\n htmlFor,\n onClick,\n ariaLabel,\n disabled,\n outerClassName,\n children,\n rest,\n buttonRef,\n}: RenderTriggerArgs): ReactElement {\n if (disabled && href) {\n return (\n <span\n aria-disabled=\"true\"\n aria-label={ariaLabel}\n className={`${outerClassName} opacity-40 pointer-events-none`}\n >\n {children}\n </span>\n );\n }\n if (href) {\n const isExternal = EXTERNAL_RE.test(href);\n if (isExternal) {\n return (\n <a\n href={href}\n target={target ?? \"_blank\"}\n rel={rel ?? \"noopener noreferrer\"}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </a>\n );\n }\n const Link = linkComponent ?? getTapTargetLinkComponent();\n if (Link) {\n return (\n <Link\n href={href}\n target={target}\n rel={rel}\n prefetch={prefetch}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </Link>\n );\n }\n // No link component registered — plain <a>. `prefetch` is a router hint,\n // not a DOM attribute, so it is deliberately dropped here.\n return (\n <a\n href={href}\n target={target}\n rel={rel}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </a>\n );\n }\n if (as === \"label\") {\n return (\n <label\n htmlFor={htmlFor}\n aria-label={ariaLabel}\n className={outerClassName}\n >\n {children}\n </label>\n );\n }\n return (\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={onClick}\n aria-label={ariaLabel}\n disabled={disabled}\n {...rest}\n className={outerClassName}\n >\n {children}\n </button>\n );\n}\n\n/**\n * Wraps a trigger element in a Tooltip when a tooltip label is available.\n * Falls back to `ariaLabel` when `tooltip` is not explicitly set. If both\n * are absent (or `tooltip === false`), the trigger is returned unwrapped.\n */\nfunction withTooltip(\n trigger: ReactElement,\n {\n tooltip,\n ariaLabel,\n disabled,\n tooltipSide = \"top\",\n tooltipAlign = \"center\",\n }: {\n tooltip?: string | false | undefined;\n ariaLabel?: string | undefined;\n disabled?: boolean | undefined;\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\" | undefined;\n tooltipAlign?: \"start\" | \"center\" | \"end\" | undefined;\n },\n): ReactElement {\n if (tooltip === false) return trigger;\n const label =\n typeof tooltip === \"string\" && tooltip.length > 0 ? tooltip : ariaLabel;\n if (!label) return trigger;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n {disabled ? (\n // Radix Tooltip triggers need a hoverable element; a disabled button\n // does not dispatch pointer events, so we wrap in a span for the\n // trigger target while keeping the disabled visual state.\n <span className=\"inline-flex\">{trigger}</span>\n ) : (\n trigger\n )}\n </TooltipTrigger>\n <TooltipContent side={tooltipSide} align={tooltipAlign}>\n {label}\n </TooltipContent>\n </Tooltip>\n );\n}\n\n// To resize/retune every tap button, edit styles.css — not here.\n\nexport const TapTargetButton = forwardRef<\n HTMLButtonElement,\n TapTargetButtonProps & ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButton(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n className,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n const color = className ?? \"text-foreground\";\n return renderTapTarget({\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName: \"matrx-tap-pill matrx-glass-thin-border\",\n iconClassName: `matrx-tap-icon ${color}`,\n rest,\n buttonRef: ref,\n });\n});\n\nexport const TapTargetButtonTransparent = forwardRef<\n HTMLButtonElement,\n TapTargetButtonProps & React.ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonTransparent(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n className,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n const color = className ?? \"text-foreground\";\n return renderTapTarget({\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName:\n \"matrx-tap-pill hover:bg-muted active:bg-muted-foreground/15\",\n iconClassName: `matrx-tap-icon ${color}`,\n rest,\n buttonRef: ref,\n });\n});\n\nexport const TapTargetButtonSolid = forwardRef<\n HTMLButtonElement,\n TapTargetButtonSolidProps & React.ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonSolid(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n bgColor = \"bg-primary\",\n iconColor = \"text-primary-foreground\",\n hoverBgColor = \"hover:bg-primary/80\",\n activeBgColor = \"active:brightness-90\",\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n return renderTapTarget({\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName: `matrx-tap-pill ${bgColor} ${iconColor} ${hoverBgColor} ${activeBgColor}`,\n iconClassName: `matrx-tap-icon ${iconColor}`,\n labelClassName: `matrx-tap-label ${iconColor}`,\n rest,\n buttonRef: ref,\n });\n});\n\n/** Solid destructive pill — delete/remove actions. White-on-red like the\n * primary solid is white-on-blue. Use THIS, never hand-pass bg-destructive\n * with the default (dark) icon color. */\nexport const TapTargetButtonDestructive = forwardRef<\n HTMLButtonElement,\n TapTargetButtonSolidProps & React.ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonDestructive(\n {\n bgColor = \"bg-destructive\",\n iconColor = \"text-destructive-foreground\",\n hoverBgColor = \"hover:bg-destructive/90\",\n ...rest\n },\n ref,\n) {\n return (\n <TapTargetButtonSolid\n ref={ref}\n bgColor={bgColor}\n iconColor={iconColor}\n hoverBgColor={hoverBgColor}\n {...rest}\n />\n );\n});\n\nexport const TapTargetButtonForGroup = forwardRef<\n HTMLButtonElement,\n TapTargetButtonProps & ButtonHTMLAttributes<HTMLButtonElement>\n>(function TapTargetButtonForGroup(\n {\n icon,\n children,\n strokeWidth = 2,\n onClick,\n className,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n ...rest\n },\n ref,\n) {\n const color = className ?? \"text-foreground\";\n return renderTapTarget({\n size: \"sm\",\n icon,\n children,\n strokeWidth,\n onClick,\n as,\n htmlFor,\n ariaLabel,\n disabled,\n href,\n target,\n rel,\n prefetch,\n linkComponent,\n tooltip,\n tooltipSide,\n tooltipAlign,\n label,\n mobileIconOnly,\n pillClassName: \"matrx-tap-pill matrx-tap-pill-sm matrx-glass-interactive\",\n iconClassName: `matrx-tap-icon ${color}`,\n labelClassName: `matrx-tap-label ${color}`,\n rest,\n buttonRef: ref,\n });\n});\n\nexport function TapTargetButtonGroup({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string | undefined;\n}) {\n return (\n <div\n className={\n className\n ? `relative inline-flex h-9 items-center ${className}`\n : \"relative inline-flex h-9 items-center\"\n }\n >\n <div className=\"pointer-events-none absolute inset-x-0 top-1/2 -translate-y-1/2 h-7 rounded-full matrx-glass-thin-border\" />\n {/* min-w-0 lets flexible children (e.g. a truncating filename) shrink\n under container pressure; fixed-size tap buttons are unaffected. */}\n <div className=\"relative flex min-w-0 items-center\">{children}</div>\n </div>\n );\n}\n","/**\n * Minimal className join — the only piece of `cn` this package needs.\n * No tailwind-merge / clsx dependency by design: callers pass literal strings.\n */\nexport function cn(\n ...values: Array<string | null | undefined | false>\n): string {\n return values.filter(Boolean).join(\" \").trim();\n}\n","import type { ComponentType, ReactNode } from \"react\";\n\n/**\n * The injectable link seam — the package's replacement for the original\n * hard `next/link` import.\n *\n * Internal hrefs (anything NOT matching `http(s):`, `mailto:`, `tel:`) render\n * through the link component resolved here; external hrefs always render a\n * plain `<a target=\"_blank\" rel=\"noopener noreferrer\">`, exactly like the\n * original. When nothing is registered and no per-instance `linkComponent`\n * prop is given, internal hrefs fall back to a plain `<a>` (no prefetch, no\n * client-side routing — still a working link).\n */\nexport interface TapTargetLinkProps {\n href: string;\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | undefined;\n rel?: string | undefined;\n /** Router prefetch hint (next/link semantics). Plain `<a>` fallback ignores it. */\n prefetch?: boolean | null | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n children?: ReactNode;\n}\n\nexport type TapTargetLinkComponent = ComponentType<TapTargetLinkProps>;\n\n/**\n * The registered component lives in a `Symbol.for` slot on `globalThis` — NOT\n * in module state — so it survives the module graph being instantiated more\n * than once: the `.` and `./buttons` dist bundles each inline the primitives\n * (tsup `splitting: false`), and a consumer may even mix `import` and\n * `require`. One registration must reach every copy.\n */\nconst LINK_SLOT = Symbol.for(\"@ai-matrx/tap-target:link-component\");\n\ntype GlobalWithLinkSlot = typeof globalThis & {\n [LINK_SLOT]?: TapTargetLinkComponent | null;\n};\n\n/**\n * Register the app's link component once at startup (e.g. `next/link`):\n *\n * ```tsx\n * import Link from \"next/link\";\n * import { setTapTargetLinkComponent } from \"@ai-matrx/tap-target\";\n * setTapTargetLinkComponent(Link);\n * ```\n *\n * Pass `null` to unregister (plain `<a>` fallback resumes).\n */\nexport function setTapTargetLinkComponent(\n component: TapTargetLinkComponent | null,\n): void {\n (globalThis as GlobalWithLinkSlot)[LINK_SLOT] = component;\n}\n\n/** The currently registered link component, or `null` when none is set. */\nexport function getTapTargetLinkComponent(): TapTargetLinkComponent | null {\n return (globalThis as GlobalWithLinkSlot)[LINK_SLOT] ?? null;\n}\n"],"mappings":"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","names":["forwardRef","TapTargetButton","TapTargetButtonTransparent","TapTargetButtonSolid","TapTargetButtonDestructive","TapTargetButtonForGroup","jsx","jsxs","forwardRef","Wrap"]}
package/dist/styles.css CHANGED
@@ -5,6 +5,21 @@
5
5
  CSS without requiring a layer-order declaration). Until the C9 swap removes
6
6
  the matrx-frontend originals, any change here ships in BOTH places. */
7
7
 
8
+ /* @ai-matrx/design-system's stylesheet is REQUIRED by this one, not merely
9
+ recommended (0.2.1). Two reasons, and neither is optional:
10
+ 1. `LoadingTapButton`'s spinner wears `matrx-spin`, whose keyframe and rule
11
+ are DEFINED THERE. Copying those four lines here would make a second
12
+ source of truth for one animation — the exact twin census row 19i
13
+ exists to kill — so the sheet is imported instead.
14
+ 2. This package already renders design-system components (Tooltip), so
15
+ every correct host loads it anyway.
16
+ `@ai-matrx/design-system` is a real `dependencies` entry of this package, so
17
+ this bare specifier resolves from a plain `npm install @ai-matrx/tap-target`
18
+ with nothing else in the host's manifest. A host that already imports the
19
+ design-system sheet itself loses nothing: bundlers resolve both to one file.
20
+ NOTE: `@import` must lead the file — keep any future rules BELOW it. */
21
+ @import "@ai-matrx/design-system/styles.css";
22
+
8
23
  /* =========================================================================
9
24
  TapTargetButton — SINGLE SOURCE OF TRUTH for tap-button geometry + feedback.
10
25
  This is the ONLY place these are defined (previously also duplicated in
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-matrx/tap-target",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "The AI Matrx tap-target button system: an invisible 44x44 touch ring over a 32x32 visible pill, glass/transparent/solid/group variants with correct ref forwarding for Radix asChild triggers, inline labels, link/label/button trigger resolution with an injectable link component, tooltip wiring, and ~60 pre-composed one-tag buttons.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -57,7 +57,7 @@
57
57
  },
58
58
  "dependencies": {
59
59
  "@radix-ui/react-tooltip": "^1.2.8",
60
- "@ai-matrx/design-system": "0.7.0"
60
+ "@ai-matrx/design-system": "0.14.0"
61
61
  },
62
62
  "peerDependencies": {
63
63
  "react": ">=18.0.0"