@refraction-ui/react 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/chunk-7P7EJ56S.js +7 -0
  2. package/dist/{chunk-XWP763SH.js → chunk-V727VZOE.js} +4 -2
  3. package/dist/{chunk-XWP763SH.js.map → chunk-V727VZOE.js.map} +2 -2
  4. package/dist/{chunk-3Y2T26QD.js → chunk-Z5IHYNQD.js} +4 -2
  5. package/dist/{chunk-3Y2T26QD.js.map → chunk-Z5IHYNQD.js.map} +2 -2
  6. package/dist/faro-engine-VIUXJAPH-FSARIABU.js +3 -0
  7. package/dist/{faro-engine-47HGRAQH-JKINJPMH.js.map → faro-engine-VIUXJAPH-FSARIABU.js.map} +1 -1
  8. package/dist/index.cjs +736 -274
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/index.d.cts +3 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.js +3 -0
  13. package/dist/internal/avatar/index.d.cts +4 -1
  14. package/dist/internal/avatar/index.d.ts +4 -1
  15. package/dist/internal/data-table/index.d.cts +48 -3
  16. package/dist/internal/data-table/index.d.ts +48 -3
  17. package/dist/internal/line-chart/index.d.ts +17 -3
  18. package/dist/internal/native-select/index.d.ts +21 -0
  19. package/dist/internal/react-avatar/index.d.cts +4 -2
  20. package/dist/internal/react-avatar/index.d.ts +4 -2
  21. package/dist/internal/react-command/index.d.cts +13 -2
  22. package/dist/internal/react-command/index.d.ts +13 -2
  23. package/dist/internal/react-data-table/index.d.cts +27 -9
  24. package/dist/internal/react-data-table/index.d.ts +27 -9
  25. package/dist/internal/react-dialog/index.d.cts +5 -0
  26. package/dist/internal/react-dialog/index.d.ts +5 -0
  27. package/dist/internal/react-dropdown-menu/index.d.cts +19 -1
  28. package/dist/internal/react-dropdown-menu/index.d.ts +19 -1
  29. package/dist/internal/react-line-chart/index.d.ts +7 -2
  30. package/dist/internal/react-native-select/index.d.ts +19 -0
  31. package/dist/internal/react-stat-grid/index.d.ts +22 -11
  32. package/dist/internal/react-table/index.d.ts +39 -0
  33. package/dist/internal/stat-grid/index.d.ts +49 -7
  34. package/dist/internal/table/index.d.ts +46 -0
  35. package/dist/react-analytics.js +15 -3
  36. package/dist/react-analytics.js.map +2 -2
  37. package/dist/react-avatar.js +12 -8
  38. package/dist/react-avatar.js.map +2 -2
  39. package/dist/react-button.js +1 -1
  40. package/dist/react-command.js +114 -69
  41. package/dist/react-command.js.map +3 -3
  42. package/dist/react-data-table.js +124 -113
  43. package/dist/react-data-table.js.map +2 -2
  44. package/dist/react-dialog.js +31 -7
  45. package/dist/react-dialog.js.map +2 -2
  46. package/dist/react-dropdown-menu.js +60 -7
  47. package/dist/react-dropdown-menu.js.map +3 -3
  48. package/dist/react-line-chart.js +48 -10
  49. package/dist/react-line-chart.js.map +2 -2
  50. package/dist/react-logger.js +2 -2
  51. package/dist/react-native-select.js +52 -0
  52. package/dist/react-native-select.js.map +7 -0
  53. package/dist/react-social-auth-button.js +1 -1
  54. package/dist/react-stat-grid.js +90 -21
  55. package/dist/react-stat-grid.js.map +2 -2
  56. package/dist/react-table.js +148 -0
  57. package/dist/react-table.js.map +7 -0
  58. package/dist/react-tabs.js +34 -5
  59. package/dist/react-tabs.js.map +2 -2
  60. package/package.json +3 -1
  61. package/dist/chunk-SDZ3LROZ.js +0 -7
  62. package/dist/faro-engine-47HGRAQH-JKINJPMH.js +0 -3
  63. /package/dist/{chunk-SDZ3LROZ.js.map → chunk-7P7EJ56S.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ import {
2
+ createFaroSink
3
+ } from "./chunk-V727VZOE.js";
4
+ export {
5
+ createFaroSink
6
+ };
7
+ //# sourceMappingURL=chunk-7P7EJ56S.js.map
@@ -1,4 +1,4 @@
1
- // ../logger/dist/chunk-57LG5ZUS.js
1
+ // ../logger/dist/chunk-OEINJBSK.js
2
2
  var FARO_LEVEL = {
3
3
  debug: "debug",
4
4
  info: "info",
@@ -26,10 +26,12 @@ async function loadFaroTransport(opts) {
26
26
  const sdkName = "@grafana/faro-web-sdk";
27
27
  const tracingName = "@grafana/faro-web-tracing";
28
28
  const sdk = await import(
29
+ /* webpackIgnore: true */
29
30
  /* @vite-ignore */
30
31
  sdkName
31
32
  );
32
33
  const tracing = await import(
34
+ /* webpackIgnore: true */
33
35
  /* @vite-ignore */
34
36
  tracingName
35
37
  );
@@ -74,4 +76,4 @@ function flatten(ctx) {
74
76
  export {
75
77
  createFaroSink
76
78
  };
77
- //# sourceMappingURL=chunk-XWP763SH.js.map
79
+ //# sourceMappingURL=chunk-V727VZOE.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../logger/src/faro-engine.ts"],
4
- "sourcesContent": ["import type { LogLevel, LogRecord, SpanRecord, TelemetrySink } from './types.js'\n\n/**\n * Faro-backed engine. `@grafana/faro-web-sdk` + `@grafana/faro-web-tracing`\n * are **optional peerDependencies** — they are loaded dynamically and never\n * referenced in this module's public types. If the peers are absent the\n * factory resolves to `null` so the caller can fall back to console.\n *\n * For tests, a `transport` may be injected: an object with a `push(payload)`\n * method. This bypasses Faro entirely (no network, no peer required).\n */\n\n/** Minimal structural shape of a Faro-ish transport. Not exported. */\ninterface FaroTransport {\n push(payload: { kind: 'log' | 'span'; record: LogRecord | SpanRecord }): void\n}\n\nexport interface FaroEngineOptions {\n app: string\n endpoint: string\n /**\n * Test/override transport. When provided, the Faro peers are NOT loaded\n * and records are forwarded straight to `transport.push`.\n */\n transport?: FaroTransport\n}\n\n/** Map our levels onto Faro's log-level strings. */\nconst FARO_LEVEL: Record<LogLevel, string> = {\n debug: 'debug',\n info: 'info',\n warn: 'warn',\n error: 'error',\n fatal: 'error',\n}\n\n/**\n * Construct the Faro engine. Returns `null` when the optional peers are not\n * installed and no override transport was supplied — callers treat `null` as\n * \"fall back to console\".\n */\nexport async function createFaroSink(\n opts: FaroEngineOptions,\n): Promise<TelemetrySink | null> {\n const transport = opts.transport ?? (await loadFaroTransport(opts))\n if (!transport) return null\n\n return {\n name: 'faro',\n\n log(record: LogRecord): void {\n transport.push({ kind: 'log', record })\n },\n\n span(record: SpanRecord): void {\n transport.push({ kind: 'span', record })\n },\n\n async flush(): Promise<void> {\n // Faro's own transports flush on their schedule / on beacon; the\n // manager drives page-exit beacon flushing. Nothing buffered here.\n },\n }\n}\n\n/**\n * Dynamically import the Faro peers and adapt them to {@link FaroTransport}.\n * Returns `null` if either peer is missing (optional peerDependency absent).\n */\nasync function loadFaroTransport(\n opts: FaroEngineOptions,\n): Promise<FaroTransport | null> {\n try {\n // Indirected so bundlers keep these as runtime-optional dynamic imports.\n const sdkName = '@grafana/faro-web-sdk'\n const tracingName = '@grafana/faro-web-tracing'\n const sdk = (await import(/* @vite-ignore */ sdkName)) as {\n initializeFaro: (cfg: unknown) => unknown\n getWebInstrumentations: () => unknown[]\n }\n const tracing = (await import(/* @vite-ignore */ tracingName)) as {\n TracingInstrumentation: new () => unknown\n }\n\n const faro = sdk.initializeFaro({\n url: opts.endpoint,\n app: { name: opts.app },\n instrumentations: [\n ...sdk.getWebInstrumentations(),\n new tracing.TracingInstrumentation(),\n ],\n }) as {\n api: {\n pushLog: (msgs: unknown[], opts?: unknown) => void\n pushEvent: (name: string, attrs?: Record<string, unknown>) => void\n }\n }\n\n return {\n push({ kind, record }): void {\n if (kind === 'log') {\n const r = record as LogRecord\n faro.api.pushLog([r.message], {\n level: FARO_LEVEL[r.level],\n context: flatten(r.context),\n })\n } else {\n const r = record as SpanRecord\n faro.api.pushEvent(`span:${r.name}`, {\n durationMs: String(r.durationMs),\n status: r.status,\n ...flatten(r.context),\n })\n }\n },\n }\n } catch {\n // Peer not installed (optional) or init failed — caller falls back.\n return null\n }\n}\n\n/** Faro context attributes are flat string maps; coerce ours to match. */\nfunction flatten(ctx: Record<string, unknown>): Record<string, string> {\n const out: Record<string, string> = {}\n for (const [k, v] of Object.entries(ctx)) {\n out[k] = typeof v === 'string' ? v : JSON.stringify(v)\n }\n return out\n}\n"],
5
- "mappings": ";AA4BA,IAAM,aAAuC;EAC3C,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACP,OAAO;AACT;AAOA,eAAsB,eACpB,MAC+B;AAC/B,QAAM,YAAY,KAAK,aAAc,MAAM,kBAAkB,IAAI;AACjE,MAAI,CAAC,UAAW,QAAO;AAEvB,SAAO;IACL,MAAM;IAEN,IAAI,QAAyB;AAC3B,gBAAU,KAAK,EAAE,MAAM,OAAO,OAAA,CAAQ;IACxC;IAEA,KAAK,QAA0B;AAC7B,gBAAU,KAAK,EAAE,MAAM,QAAQ,OAAA,CAAQ;IACzC;IAEA,MAAM,QAAuB;IAG7B;EAAA;AAEJ;AAMA,eAAe,kBACb,MAC+B;AAC/B,MAAI;AAEF,UAAM,UAAU;AAChB,UAAM,cAAc;AACpB,UAAM,MAAO,MAAM;;MAA0B;;AAI7C,UAAM,UAAW,MAAM;;MAA0B;;AAIjD,UAAM,OAAO,IAAI,eAAe;MAC9B,KAAK,KAAK;MACV,KAAK,EAAE,MAAM,KAAK,IAAA;MAClB,kBAAkB;QAChB,GAAG,IAAI,uBAAA;QACP,IAAI,QAAQ,uBAAA;MAAuB;IACrC,CACD;AAOD,WAAO;MACL,KAAK,EAAE,MAAM,OAAA,GAAgB;AAC3B,YAAI,SAAS,OAAO;AAClB,gBAAM,IAAI;AACV,eAAK,IAAI,QAAQ,CAAC,EAAE,OAAO,GAAG;YAC5B,OAAO,WAAW,EAAE,KAAK;YACzB,SAAS,QAAQ,EAAE,OAAO;UAAA,CAC3B;QACH,OAAO;AACL,gBAAM,IAAI;AACV,eAAK,IAAI,UAAU,QAAQ,EAAE,IAAI,IAAI;YACnC,YAAY,OAAO,EAAE,UAAU;YAC/B,QAAQ,EAAE;YACV,GAAG,QAAQ,EAAE,OAAO;UAAA,CACrB;QACH;MACF;IAAA;EAEJ,QAAQ;AAEN,WAAO;EACT;AACF;AAGA,SAAS,QAAQ,KAAsD;AACrE,QAAM,MAA8B,CAAA;AACpC,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,GAAG,GAAG;AACxC,QAAI,CAAC,IAAI,OAAO,MAAM,WAAW,IAAI,KAAK,UAAU,CAAC;EACvD;AACA,SAAO;AACT;",
4
+ "sourcesContent": ["import type { LogLevel, LogRecord, SpanRecord, TelemetrySink } from './types.js'\n\n/**\n * Faro-backed engine. `@grafana/faro-web-sdk` + `@grafana/faro-web-tracing`\n * are **optional peerDependencies** — they are loaded dynamically and never\n * referenced in this module's public types. If the peers are absent the\n * factory resolves to `null` so the caller can fall back to console.\n *\n * For tests, a `transport` may be injected: an object with a `push(payload)`\n * method. This bypasses Faro entirely (no network, no peer required).\n */\n\n/** Minimal structural shape of a Faro-ish transport. Not exported. */\ninterface FaroTransport {\n push(payload: { kind: 'log' | 'span'; record: LogRecord | SpanRecord }): void\n}\n\nexport interface FaroEngineOptions {\n app: string\n endpoint: string\n /**\n * Test/override transport. When provided, the Faro peers are NOT loaded\n * and records are forwarded straight to `transport.push`.\n */\n transport?: FaroTransport\n}\n\n/** Map our levels onto Faro's log-level strings. */\nconst FARO_LEVEL: Record<LogLevel, string> = {\n debug: 'debug',\n info: 'info',\n warn: 'warn',\n error: 'error',\n fatal: 'error',\n}\n\n/**\n * Construct the Faro engine. Returns `null` when the optional peers are not\n * installed and no override transport was supplied — callers treat `null` as\n * \"fall back to console\".\n */\nexport async function createFaroSink(\n opts: FaroEngineOptions,\n): Promise<TelemetrySink | null> {\n const transport = opts.transport ?? (await loadFaroTransport(opts))\n if (!transport) return null\n\n return {\n name: 'faro',\n\n log(record: LogRecord): void {\n transport.push({ kind: 'log', record })\n },\n\n span(record: SpanRecord): void {\n transport.push({ kind: 'span', record })\n },\n\n async flush(): Promise<void> {\n // Faro's own transports flush on their schedule / on beacon; the\n // manager drives page-exit beacon flushing. Nothing buffered here.\n },\n }\n}\n\n/**\n * Dynamically import the Faro peers and adapt them to {@link FaroTransport}.\n * Returns `null` if either peer is missing (optional peerDependency absent).\n */\nasync function loadFaroTransport(\n opts: FaroEngineOptions,\n): Promise<FaroTransport | null> {\n try {\n // Indirected so bundlers keep these as runtime-optional dynamic imports.\n const sdkName = '@grafana/faro-web-sdk'\n const tracingName = '@grafana/faro-web-tracing'\n const sdk = (await import(/* webpackIgnore: true */ /* @vite-ignore */ sdkName)) as {\n initializeFaro: (cfg: unknown) => unknown\n getWebInstrumentations: () => unknown[]\n }\n const tracing = (await import(/* webpackIgnore: true */ /* @vite-ignore */ tracingName)) as {\n TracingInstrumentation: new () => unknown\n }\n\n const faro = sdk.initializeFaro({\n url: opts.endpoint,\n app: { name: opts.app },\n instrumentations: [\n ...sdk.getWebInstrumentations(),\n new tracing.TracingInstrumentation(),\n ],\n }) as {\n api: {\n pushLog: (msgs: unknown[], opts?: unknown) => void\n pushEvent: (name: string, attrs?: Record<string, unknown>) => void\n }\n }\n\n return {\n push({ kind, record }): void {\n if (kind === 'log') {\n const r = record as LogRecord\n faro.api.pushLog([r.message], {\n level: FARO_LEVEL[r.level],\n context: flatten(r.context),\n })\n } else {\n const r = record as SpanRecord\n faro.api.pushEvent(`span:${r.name}`, {\n durationMs: String(r.durationMs),\n status: r.status,\n ...flatten(r.context),\n })\n }\n },\n }\n } catch {\n // Peer not installed (optional) or init failed — caller falls back.\n return null\n }\n}\n\n/** Faro context attributes are flat string maps; coerce ours to match. */\nfunction flatten(ctx: Record<string, unknown>): Record<string, string> {\n const out: Record<string, string> = {}\n for (const [k, v] of Object.entries(ctx)) {\n out[k] = typeof v === 'string' ? v : JSON.stringify(v)\n }\n return out\n}\n"],
5
+ "mappings": ";AA4BA,IAAM,aAAuC;EAC3C,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACP,OAAO;AACT;AAOA,eAAsB,eACpB,MAC+B;AAC/B,QAAM,YAAY,KAAK,aAAc,MAAM,kBAAkB,IAAI;AACjE,MAAI,CAAC,UAAW,QAAO;AAEvB,SAAO;IACL,MAAM;IAEN,IAAI,QAAyB;AAC3B,gBAAU,KAAK,EAAE,MAAM,OAAO,OAAA,CAAQ;IACxC;IAEA,KAAK,QAA0B;AAC7B,gBAAU,KAAK,EAAE,MAAM,QAAQ,OAAA,CAAQ;IACzC;IAEA,MAAM,QAAuB;IAG7B;EAAA;AAEJ;AAMA,eAAe,kBACb,MAC+B;AAC/B,MAAI;AAEF,UAAM,UAAU;AAChB,UAAM,cAAc;AACpB,UAAM,MAAO,MAAM;;;MAAoD;;AAIvE,UAAM,UAAW,MAAM;;;MAAoD;;AAI3E,UAAM,OAAO,IAAI,eAAe;MAC9B,KAAK,KAAK;MACV,KAAK,EAAE,MAAM,KAAK,IAAA;MAClB,kBAAkB;QAChB,GAAG,IAAI,uBAAA;QACP,IAAI,QAAQ,uBAAA;MAAuB;IACrC,CACD;AAOD,WAAO;MACL,KAAK,EAAE,MAAM,OAAA,GAAgB;AAC3B,YAAI,SAAS,OAAO;AAClB,gBAAM,IAAI;AACV,eAAK,IAAI,QAAQ,CAAC,EAAE,OAAO,GAAG;YAC5B,OAAO,WAAW,EAAE,KAAK;YACzB,SAAS,QAAQ,EAAE,OAAO;UAAA,CAC3B;QACH,OAAO;AACL,gBAAM,IAAI;AACV,eAAK,IAAI,UAAU,QAAQ,EAAE,IAAI,IAAI;YACnC,YAAY,OAAO,EAAE,UAAU;YAC/B,QAAQ,EAAE;YACV,GAAG,QAAQ,EAAE,OAAO;UAAA,CACrB;QACH;MACF;IAAA;EAEJ,QAAQ;AAEN,WAAO;EACT;AACF;AAGA,SAAS,QAAQ,KAAsD;AACrE,QAAM,MAA8B,CAAA;AACpC,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,GAAG,GAAG;AACxC,QAAI,CAAC,IAAI,OAAO,MAAM,WAAW,IAAI,KAAK,UAAU,CAAC;EACvD;AACA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -125,7 +125,9 @@ var Button = React.forwardRef(
125
125
  return React.cloneElement(children, {
126
126
  ref: mergedRef,
127
127
  className: cn(classes, children.props.className, "relative"),
128
- type: getButtonType({ type: props.type }),
128
+ // `type` is only meaningful on a <button>; forcing type="button" onto
129
+ // an <a> changes its semantics (it becomes a MIME-type hint).
130
+ ...children.type === "button" || props.type ? { type: getButtonType({ type: props.type }) } : {},
129
131
  ...api.ariaProps,
130
132
  ...api.dataAttributes,
131
133
  ...props,
@@ -190,4 +192,4 @@ export {
190
192
  buttonVariants,
191
193
  Button
192
194
  };
193
- //# sourceMappingURL=chunk-3Y2T26QD.js.map
195
+ //# sourceMappingURL=chunk-Z5IHYNQD.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../button/src/button.ts", "../../button/src/button.styles.ts", "../../react-button/src/button.tsx"],
4
- "sourcesContent": ["import type { AccessibilityProps, KeyboardHandlerMap } from '@refraction-ui/shared'\nimport { Keys } from '@refraction-ui/shared'\n\n/**\n * `primary` is an alias of `default` — included so the universal React-ecosystem\n * muscle-memory (`<Button variant=\"primary\">`) renders as the most-emphasized\n * button instead of falling through to the unstyled base. See issue #201.\n */\nexport type ButtonVariant =\n | 'default'\n | 'primary'\n | 'destructive'\n | 'outline'\n | 'secondary'\n | 'ghost'\n | 'link'\n // Issue #485 — soft tinted brand fill + a real second brand accent.\n | 'soft'\n | 'tertiary'\n\n/** Variants that map to the same visual style as `default`. */\nexport const BUTTON_VARIANT_ALIASES: Partial<Record<ButtonVariant, ButtonVariant>> = {\n primary: 'default',\n}\n\n/** Resolve an alias to its canonical variant. Pass-through for unknown/undefined. */\nexport function resolveButtonVariant(variant: ButtonVariant | undefined): ButtonVariant | undefined {\n if (!variant) return variant\n return BUTTON_VARIANT_ALIASES[variant] ?? variant\n}\nexport type ButtonSize = 'xs' | 'sm' | 'default' | 'lg' | 'icon' | 'icon-sm' | 'icon-xs'\n\nexport interface ButtonProps {\n variant?: ButtonVariant\n size?: ButtonSize\n disabled?: boolean\n loading?: boolean\n asChild?: boolean\n type?: 'button' | 'submit' | 'reset'\n}\n\nexport interface ButtonAPI {\n /** ARIA attributes to spread on the element */\n ariaProps: Partial<AccessibilityProps>\n /** Keyboard handlers to attach */\n keyboardHandlers: KeyboardHandlerMap\n /** Whether interaction should be blocked */\n isInteractive: boolean\n /** Data attributes for CSS styling hooks */\n dataAttributes: Record<string, string>\n}\n\nexport function createButton(props: ButtonProps = {}): ButtonAPI {\n const { disabled = false, loading = false } = props\n const isInteractive = !disabled && !loading\n\n const ariaProps: Partial<AccessibilityProps> = {}\n if (disabled) {\n ariaProps['aria-disabled'] = true\n }\n if (loading) {\n ariaProps['aria-disabled'] = true\n ariaProps['aria-label'] = ariaProps['aria-label'] ?? undefined\n }\n\n const dataAttributes: Record<string, string> = {}\n if (loading) {\n dataAttributes['data-loading'] = ''\n }\n if (disabled) {\n dataAttributes['data-disabled'] = ''\n }\n\n const keyboardHandlers: KeyboardHandlerMap = {}\n if (!isInteractive) {\n keyboardHandlers[Keys.Enter] = (e) => e.preventDefault()\n keyboardHandlers[Keys.Space] = (e) => e.preventDefault()\n }\n\n return {\n ariaProps,\n keyboardHandlers,\n isInteractive,\n dataAttributes,\n }\n}\n\nexport function getButtonType(props: ButtonProps): string {\n return props.type ?? 'button'\n}\n", "import { cva } from '@refraction-ui/shared'\nimport type { TokenContract } from '@refraction-ui/shared'\n\nexport const buttonTokens: TokenContract = {\n name: 'button',\n tokens: {\n bg: { variable: '--rfr-button-bg', fallback: 'hsl(var(--primary))' },\n fg: { variable: '--rfr-button-fg', fallback: 'hsl(var(--primary-foreground))' },\n border: { variable: '--rfr-button-border', fallback: 'hsl(var(--border))' },\n radius: { variable: '--rfr-button-radius', fallback: 'var(--radius)' },\n ring: { variable: '--rfr-button-ring', fallback: 'hsl(var(--ring))' },\n },\n}\n\nexport const buttonVariants = cva({\n base: 'inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n // Alias for `default` — see resolveButtonVariant + issue #201. Same classes\n // so styling stays identical even if a consumer reaches into `buttonVariants`\n // directly without going through resolveButtonVariant.\n primary: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n outline: 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n // Soft tinted brand fill — lower-emphasis primary action (issue #485).\n soft: 'bg-primary-soft text-primary-soft-foreground shadow-sm hover:bg-primary-soft/80',\n // Second brand accent (issue #485).\n tertiary: 'bg-tertiary text-tertiary-foreground shadow-sm hover:bg-tertiary/90',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n xs: 'h-7 rounded px-2 text-xs',\n sm: 'h-8 rounded-md px-3 text-xs',\n default: 'h-9 rounded-md px-4 py-2 text-sm',\n lg: 'h-10 rounded-md px-8 text-sm',\n icon: 'h-9 w-9 rounded-md text-sm',\n 'icon-sm': 'h-8 w-8 rounded-md text-xs',\n 'icon-xs': 'h-7 w-7 rounded text-xs',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n})\n", "import * as React from 'react'\nimport {\n createButton,\n buttonVariants,\n getButtonType,\n resolveButtonVariant,\n type ButtonVariant,\n type ButtonSize,\n} from '@refraction-ui/button'\nimport { useShortcut, ShortcutHint } from '@refraction-ui/react-keyboard-shortcut'\nimport { cn } from '@refraction-ui/shared'\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n size?: ButtonSize\n loading?: boolean\n asChild?: boolean\n shortcut?: string\n action?: string\n}\n\n/**\n * Button component — renders a styled button with variant and size support.\n *\n * Uses the headless @refraction-ui/button core for state, ARIA, and keyboard handling.\n * Styling via Tailwind utility classes (no external CSS-in-JS).\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n function Button({ variant, size, loading, asChild, className, disabled, children, shortcut, action, ...props }, ref) {\n // `primary` is an ecosystem-muscle-memory alias for `default` — resolve it\n // here so styling, aria, and data attributes all see the canonical variant.\n // See issue #201.\n const resolvedVariant = resolveButtonVariant(variant)\n const api = createButton({ variant: resolvedVariant, size, disabled, loading, asChild, type: props.type })\n const classes = cn(buttonVariants({ variant: resolvedVariant, size }), className)\n \n const internalRef = React.useRef<HTMLButtonElement>(null)\n const mergedRef = React.useCallback(\n (node: HTMLButtonElement | null) => {\n internalRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n },\n [ref]\n )\n\n useShortcut({\n shortcut,\n action,\n enabled: !disabled && !loading && (!!shortcut || !!action),\n onTrigger: () => {\n internalRef.current?.click()\n },\n })\n\n // When asChild, render the child element directly with button props merged in.\n // This allows <Button asChild><a href=\"/\">Link</a></Button>\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children as React.ReactElement<Record<string, unknown>>, {\n ref: mergedRef,\n className: cn(classes, (children.props as Record<string, unknown>).className as string, 'relative'),\n type: getButtonType({ type: props.type }),\n ...api.ariaProps,\n ...api.dataAttributes,\n ...props,\n children: (\n <>\n {(shortcut || action) && <ShortcutHint shortcut={shortcut} action={action} className=\"right-4\" />}\n {(children.props as Record<string, unknown>).children}\n </>\n )\n })\n }\n\n return (\n <button\n ref={mergedRef}\n type={getButtonType({ type: props.type }) as 'button' | 'submit' | 'reset'}\n className={cn(classes, 'relative')}\n disabled={disabled || loading}\n {...api.ariaProps}\n {...api.dataAttributes}\n {...props}\n >\n {(shortcut || action) && <ShortcutHint shortcut={shortcut} action={action} className=\"right-4\" />}\n {loading && (\n <svg\n className=\"animate-spin h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {children}\n </button>\n )\n },\n)\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { AccessibilityProps, KeyboardHandlerMap } from '@refraction-ui/shared'\nimport { Keys } from '@refraction-ui/shared'\n\n/**\n * `primary` is an alias of `default` — included so the universal React-ecosystem\n * muscle-memory (`<Button variant=\"primary\">`) renders as the most-emphasized\n * button instead of falling through to the unstyled base. See issue #201.\n */\nexport type ButtonVariant =\n | 'default'\n | 'primary'\n | 'destructive'\n | 'outline'\n | 'secondary'\n | 'ghost'\n | 'link'\n // Issue #485 — soft tinted brand fill + a real second brand accent.\n | 'soft'\n | 'tertiary'\n\n/** Variants that map to the same visual style as `default`. */\nexport const BUTTON_VARIANT_ALIASES: Partial<Record<ButtonVariant, ButtonVariant>> = {\n primary: 'default',\n}\n\n/** Resolve an alias to its canonical variant. Pass-through for unknown/undefined. */\nexport function resolveButtonVariant(variant: ButtonVariant | undefined): ButtonVariant | undefined {\n if (!variant) return variant\n return BUTTON_VARIANT_ALIASES[variant] ?? variant\n}\nexport type ButtonSize = 'xs' | 'sm' | 'default' | 'lg' | 'icon' | 'icon-sm' | 'icon-xs'\n\nexport interface ButtonProps {\n variant?: ButtonVariant\n size?: ButtonSize\n disabled?: boolean\n loading?: boolean\n asChild?: boolean\n type?: 'button' | 'submit' | 'reset'\n}\n\nexport interface ButtonAPI {\n /** ARIA attributes to spread on the element */\n ariaProps: Partial<AccessibilityProps>\n /** Keyboard handlers to attach */\n keyboardHandlers: KeyboardHandlerMap\n /** Whether interaction should be blocked */\n isInteractive: boolean\n /** Data attributes for CSS styling hooks */\n dataAttributes: Record<string, string>\n}\n\nexport function createButton(props: ButtonProps = {}): ButtonAPI {\n const { disabled = false, loading = false } = props\n const isInteractive = !disabled && !loading\n\n const ariaProps: Partial<AccessibilityProps> = {}\n if (disabled) {\n ariaProps['aria-disabled'] = true\n }\n if (loading) {\n ariaProps['aria-disabled'] = true\n ariaProps['aria-label'] = ariaProps['aria-label'] ?? undefined\n }\n\n const dataAttributes: Record<string, string> = {}\n if (loading) {\n dataAttributes['data-loading'] = ''\n }\n if (disabled) {\n dataAttributes['data-disabled'] = ''\n }\n\n const keyboardHandlers: KeyboardHandlerMap = {}\n if (!isInteractive) {\n keyboardHandlers[Keys.Enter] = (e) => e.preventDefault()\n keyboardHandlers[Keys.Space] = (e) => e.preventDefault()\n }\n\n return {\n ariaProps,\n keyboardHandlers,\n isInteractive,\n dataAttributes,\n }\n}\n\nexport function getButtonType(props: ButtonProps): string {\n return props.type ?? 'button'\n}\n", "import { cva } from '@refraction-ui/shared'\nimport type { TokenContract } from '@refraction-ui/shared'\n\nexport const buttonTokens: TokenContract = {\n name: 'button',\n tokens: {\n bg: { variable: '--rfr-button-bg', fallback: 'hsl(var(--primary))' },\n fg: { variable: '--rfr-button-fg', fallback: 'hsl(var(--primary-foreground))' },\n border: { variable: '--rfr-button-border', fallback: 'hsl(var(--border))' },\n radius: { variable: '--rfr-button-radius', fallback: 'var(--radius)' },\n ring: { variable: '--rfr-button-ring', fallback: 'hsl(var(--ring))' },\n },\n}\n\nexport const buttonVariants = cva({\n base: 'inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n // Alias for `default` — see resolveButtonVariant + issue #201. Same classes\n // so styling stays identical even if a consumer reaches into `buttonVariants`\n // directly without going through resolveButtonVariant.\n primary: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n outline: 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n // Soft tinted brand fill — lower-emphasis primary action (issue #485).\n soft: 'bg-primary-soft text-primary-soft-foreground shadow-sm hover:bg-primary-soft/80',\n // Second brand accent (issue #485).\n tertiary: 'bg-tertiary text-tertiary-foreground shadow-sm hover:bg-tertiary/90',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n xs: 'h-7 rounded px-2 text-xs',\n sm: 'h-8 rounded-md px-3 text-xs',\n default: 'h-9 rounded-md px-4 py-2 text-sm',\n lg: 'h-10 rounded-md px-8 text-sm',\n icon: 'h-9 w-9 rounded-md text-sm',\n 'icon-sm': 'h-8 w-8 rounded-md text-xs',\n 'icon-xs': 'h-7 w-7 rounded text-xs',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n})\n", "import * as React from 'react'\nimport {\n createButton,\n buttonVariants,\n getButtonType,\n resolveButtonVariant,\n type ButtonVariant,\n type ButtonSize,\n} from '@refraction-ui/button'\nimport { useShortcut, ShortcutHint } from '@refraction-ui/react-keyboard-shortcut'\nimport { cn } from '@refraction-ui/shared'\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n size?: ButtonSize\n loading?: boolean\n asChild?: boolean\n shortcut?: string\n action?: string\n}\n\n/**\n * Button component — renders a styled button with variant and size support.\n *\n * Uses the headless @refraction-ui/button core for state, ARIA, and keyboard handling.\n * Styling via Tailwind utility classes (no external CSS-in-JS).\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n function Button({ variant, size, loading, asChild, className, disabled, children, shortcut, action, ...props }, ref) {\n // `primary` is an ecosystem-muscle-memory alias for `default` — resolve it\n // here so styling, aria, and data attributes all see the canonical variant.\n // See issue #201.\n const resolvedVariant = resolveButtonVariant(variant)\n const api = createButton({ variant: resolvedVariant, size, disabled, loading, asChild, type: props.type })\n const classes = cn(buttonVariants({ variant: resolvedVariant, size }), className)\n \n const internalRef = React.useRef<HTMLButtonElement>(null)\n const mergedRef = React.useCallback(\n (node: HTMLButtonElement | null) => {\n internalRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n },\n [ref]\n )\n\n useShortcut({\n shortcut,\n action,\n enabled: !disabled && !loading && (!!shortcut || !!action),\n onTrigger: () => {\n internalRef.current?.click()\n },\n })\n\n // When asChild, render the child element directly with button props merged in.\n // This allows <Button asChild><a href=\"/\">Link</a></Button>\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children as React.ReactElement<Record<string, unknown>>, {\n ref: mergedRef,\n className: cn(classes, (children.props as Record<string, unknown>).className as string, 'relative'),\n // `type` is only meaningful on a <button>; forcing type=\"button\" onto\n // an <a> changes its semantics (it becomes a MIME-type hint).\n ...(children.type === 'button' || props.type ? { type: getButtonType({ type: props.type }) } : {}),\n ...api.ariaProps,\n ...api.dataAttributes,\n ...props,\n children: (\n <>\n {(shortcut || action) && <ShortcutHint shortcut={shortcut} action={action} className=\"right-4\" />}\n {(children.props as Record<string, unknown>).children}\n </>\n )\n })\n }\n\n return (\n <button\n ref={mergedRef}\n type={getButtonType({ type: props.type }) as 'button' | 'submit' | 'reset'}\n className={cn(classes, 'relative')}\n disabled={disabled || loading}\n {...api.ariaProps}\n {...api.dataAttributes}\n {...props}\n >\n {(shortcut || action) && <ShortcutHint shortcut={shortcut} action={action} className=\"right-4\" />}\n {loading && (\n <svg\n className=\"animate-spin h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {children}\n </button>\n )\n },\n)\n"],
5
+ "mappings": "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",
6
6
  "names": ["Button"]
7
7
  }
@@ -0,0 +1,3 @@
1
+ export { createFaroSink } from './chunk-V727VZOE.js';
2
+ //# sourceMappingURL=faro-engine-VIUXJAPH-FSARIABU.js.map
3
+ //# sourceMappingURL=faro-engine-VIUXJAPH-FSARIABU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"faro-engine-47HGRAQH-JKINJPMH.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"faro-engine-VIUXJAPH-FSARIABU.js"}