@financedistrict/apps-ui 0.1.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 (136) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +119 -0
  3. package/dist/Radio-BYWz1n7p.d.cts +32 -0
  4. package/dist/Radio-BYWz1n7p.d.ts +32 -0
  5. package/dist/SelectTrigger-By0iPBI3.d.cts +78 -0
  6. package/dist/SelectTrigger-By0iPBI3.d.ts +78 -0
  7. package/dist/accordion.cjs +322 -0
  8. package/dist/accordion.d.cts +156 -0
  9. package/dist/accordion.d.ts +156 -0
  10. package/dist/accordion.js +2 -0
  11. package/dist/apps-ui.umd.js +1 -0
  12. package/dist/button.cjs +366 -0
  13. package/dist/button.d.cts +52 -0
  14. package/dist/button.d.ts +52 -0
  15. package/dist/button.js +3 -0
  16. package/dist/checkbox.cjs +74 -0
  17. package/dist/checkbox.d.cts +63 -0
  18. package/dist/checkbox.d.ts +63 -0
  19. package/dist/checkbox.js +2 -0
  20. package/dist/chunk-3RU7JMFE.js +27 -0
  21. package/dist/chunk-5TWRK4NW.js +783 -0
  22. package/dist/chunk-7EOSDFS3.js +9 -0
  23. package/dist/chunk-AIQ4UOGK.js +142 -0
  24. package/dist/chunk-B3MMGTPV.js +200 -0
  25. package/dist/chunk-DAHQYLUI.js +146 -0
  26. package/dist/chunk-DGBXADSS.js +1 -0
  27. package/dist/chunk-E6KPNTWW.js +295 -0
  28. package/dist/chunk-EOAB6G2D.js +149 -0
  29. package/dist/chunk-FAOVKDVM.js +32 -0
  30. package/dist/chunk-FV76Z4Z2.js +78 -0
  31. package/dist/chunk-GLTLBUZ7.js +285 -0
  32. package/dist/chunk-GTZFV43T.js +154 -0
  33. package/dist/chunk-HRGZNL4A.js +88 -0
  34. package/dist/chunk-IEVN3J2F.js +98 -0
  35. package/dist/chunk-IRS3T6LF.js +352 -0
  36. package/dist/chunk-IYYHCQXG.js +146 -0
  37. package/dist/chunk-JIXW3455.js +89 -0
  38. package/dist/chunk-N4VAP2GB.js +77 -0
  39. package/dist/chunk-SJ2ZRYVV.js +167 -0
  40. package/dist/chunk-SNU4YXOR.js +66 -0
  41. package/dist/chunk-TT6JQATV.js +99 -0
  42. package/dist/chunk-UPQ3ZPCO.js +66 -0
  43. package/dist/chunk-UVUSVFOH.js +264 -0
  44. package/dist/chunk-WJFPGGJB.js +255 -0
  45. package/dist/chunk-WXEBQA7A.js +371 -0
  46. package/dist/chunk-Y2O4YYZQ.js +184 -0
  47. package/dist/cut-corner.cjs +111 -0
  48. package/dist/cut-corner.d.cts +49 -0
  49. package/dist/cut-corner.d.ts +49 -0
  50. package/dist/cut-corner.js +1 -0
  51. package/dist/dialog.cjs +441 -0
  52. package/dist/dialog.d.cts +240 -0
  53. package/dist/dialog.d.ts +240 -0
  54. package/dist/dialog.js +3 -0
  55. package/dist/feature-card.cjs +182 -0
  56. package/dist/feature-card.d.cts +54 -0
  57. package/dist/feature-card.d.ts +54 -0
  58. package/dist/feature-card.js +2 -0
  59. package/dist/filter.cjs +873 -0
  60. package/dist/filter.d.cts +129 -0
  61. package/dist/filter.d.ts +129 -0
  62. package/dist/filter.js +6 -0
  63. package/dist/index.cjs +4583 -0
  64. package/dist/index.d.cts +29 -0
  65. package/dist/index.d.ts +29 -0
  66. package/dist/index.js +27 -0
  67. package/dist/inline-select.cjs +856 -0
  68. package/dist/inline-select.d.cts +92 -0
  69. package/dist/inline-select.d.ts +92 -0
  70. package/dist/inline-select.js +6 -0
  71. package/dist/input.cjs +263 -0
  72. package/dist/input.d.cts +157 -0
  73. package/dist/input.d.ts +157 -0
  74. package/dist/input.js +4 -0
  75. package/dist/panel.cjs +185 -0
  76. package/dist/panel.d.cts +103 -0
  77. package/dist/panel.d.ts +103 -0
  78. package/dist/panel.js +2 -0
  79. package/dist/property-grid.cjs +110 -0
  80. package/dist/property-grid.d.cts +56 -0
  81. package/dist/property-grid.d.ts +56 -0
  82. package/dist/property-grid.js +2 -0
  83. package/dist/radio.cjs +74 -0
  84. package/dist/radio.d.cts +39 -0
  85. package/dist/radio.d.ts +39 -0
  86. package/dist/radio.js +2 -0
  87. package/dist/scrollbar.cjs +34 -0
  88. package/dist/scrollbar.d.cts +35 -0
  89. package/dist/scrollbar.d.ts +35 -0
  90. package/dist/scrollbar.js +1 -0
  91. package/dist/search-bar.cjs +408 -0
  92. package/dist/search-bar.d.cts +42 -0
  93. package/dist/search-bar.d.ts +42 -0
  94. package/dist/search-bar.js +4 -0
  95. package/dist/select.cjs +998 -0
  96. package/dist/select.d.cts +357 -0
  97. package/dist/select.d.ts +357 -0
  98. package/dist/select.js +5 -0
  99. package/dist/selectable-feature-card.cjs +159 -0
  100. package/dist/selectable-feature-card.d.cts +74 -0
  101. package/dist/selectable-feature-card.d.ts +74 -0
  102. package/dist/selectable-feature-card.js +3 -0
  103. package/dist/sidebar-item.cjs +175 -0
  104. package/dist/sidebar-item.d.cts +75 -0
  105. package/dist/sidebar-item.d.ts +75 -0
  106. package/dist/sidebar-item.js +2 -0
  107. package/dist/switch.cjs +86 -0
  108. package/dist/switch.d.cts +72 -0
  109. package/dist/switch.d.ts +72 -0
  110. package/dist/switch.js +2 -0
  111. package/dist/table-cell.cjs +196 -0
  112. package/dist/table-cell.d.cts +76 -0
  113. package/dist/table-cell.d.ts +76 -0
  114. package/dist/table-cell.js +2 -0
  115. package/dist/table-title.cjs +34 -0
  116. package/dist/table-title.d.cts +16 -0
  117. package/dist/table-title.d.ts +16 -0
  118. package/dist/table-title.js +2 -0
  119. package/dist/tabs.cjs +299 -0
  120. package/dist/tabs.d.cts +116 -0
  121. package/dist/tabs.d.ts +116 -0
  122. package/dist/tabs.js +2 -0
  123. package/dist/toast.cjs +87 -0
  124. package/dist/toast.d.cts +48 -0
  125. package/dist/toast.d.ts +48 -0
  126. package/dist/toast.js +2 -0
  127. package/dist/token-input.cjs +415 -0
  128. package/dist/token-input.d.cts +90 -0
  129. package/dist/token-input.d.ts +90 -0
  130. package/dist/token-input.js +3 -0
  131. package/dist/tooltip.cjs +384 -0
  132. package/dist/tooltip.d.cts +142 -0
  133. package/dist/tooltip.d.ts +142 -0
  134. package/dist/tooltip.js +2 -0
  135. package/package.json +200 -0
  136. package/src/fonts.css +33 -0
@@ -0,0 +1,56 @@
1
+ import * as React from 'react';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ /**
6
+ * Property-grid CELL frame — the title (left) and content (right) sides of a
7
+ * property-grid row. Binds ONLY to the semantic `card/*` token layer; theme
8
+ * switch is automatic via `.dark`. Static (no hover/active/focus) — a
9
+ * property-grid row is read-only display.
10
+ *
11
+ * `variant` distinguishes the two sides:
12
+ * - `title` — muted text, left-aligned.
13
+ * - `content` — foreground text, right-aligned.
14
+ */
15
+ declare const propertyGridCellVariants: (props?: ({
16
+ variant?: "title" | "content" | null | undefined;
17
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
18
+ type PropertyGridCellVariantsProps = VariantProps<typeof propertyGridCellVariants>;
19
+ /**
20
+ * Property-grid ITEM (row) frame — a two-column grid (title | content). Owns the
21
+ * bottom divider; `last` (the last row in a grid) omits it. Stacked items align
22
+ * columns automatically (each column is 1fr).
23
+ */
24
+ declare const propertyGridItemVariants: (props?: ({
25
+ last?: boolean | null | undefined;
26
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
27
+ type PropertyGridItemVariantsProps = VariantProps<typeof propertyGridItemVariants>;
28
+
29
+ interface PropertyGridItemProps extends React.ComponentProps<"div">, PropertyGridItemVariantsProps {
30
+ }
31
+ /**
32
+ * A property-grid row: a two-column grid holding one <PropertyGridTitle> (left)
33
+ * and one <PropertyGridContent> (right) as children. Owns the bottom divider;
34
+ * `last` (the last row in a grid) omits it. Stacked items align columns
35
+ * automatically (each is `grid-cols-2` at 1fr/1fr).
36
+ */
37
+ declare function PropertyGridItem({ className, last, children, ref, ...props }: PropertyGridItemProps): React.JSX.Element;
38
+
39
+ interface PropertyGridCellProps extends React.ComponentProps<"div"> {
40
+ /** Which side of the row — sets tone (muted/foreground) + alignment. */
41
+ variant: "title" | "content";
42
+ /** Leading slot (e.g. a muted icon). Hidden when omitted. */
43
+ leading?: React.ReactNode;
44
+ /** Trailing slot (e.g. a copy icon). Hidden when omitted. */
45
+ trailing?: React.ReactNode;
46
+ }
47
+
48
+ type PropertyGridTitleProps = Omit<PropertyGridCellProps, "variant">;
49
+ /** The title (left) cell of a property-grid row — muted, left-aligned. */
50
+ declare function PropertyGridTitle(props: PropertyGridTitleProps): React.JSX.Element;
51
+
52
+ type PropertyGridContentProps = Omit<PropertyGridCellProps, "variant">;
53
+ /** The content (right) cell of a property-grid row — foreground, right-aligned. */
54
+ declare function PropertyGridContent(props: PropertyGridContentProps): React.JSX.Element;
55
+
56
+ export { type PropertyGridCellVariantsProps, PropertyGridContent, type PropertyGridContentProps, PropertyGridItem, type PropertyGridItemProps, type PropertyGridItemVariantsProps, PropertyGridTitle, type PropertyGridTitleProps, propertyGridCellVariants, propertyGridItemVariants };
@@ -0,0 +1,56 @@
1
+ import * as React from 'react';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ /**
6
+ * Property-grid CELL frame — the title (left) and content (right) sides of a
7
+ * property-grid row. Binds ONLY to the semantic `card/*` token layer; theme
8
+ * switch is automatic via `.dark`. Static (no hover/active/focus) — a
9
+ * property-grid row is read-only display.
10
+ *
11
+ * `variant` distinguishes the two sides:
12
+ * - `title` — muted text, left-aligned.
13
+ * - `content` — foreground text, right-aligned.
14
+ */
15
+ declare const propertyGridCellVariants: (props?: ({
16
+ variant?: "title" | "content" | null | undefined;
17
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
18
+ type PropertyGridCellVariantsProps = VariantProps<typeof propertyGridCellVariants>;
19
+ /**
20
+ * Property-grid ITEM (row) frame — a two-column grid (title | content). Owns the
21
+ * bottom divider; `last` (the last row in a grid) omits it. Stacked items align
22
+ * columns automatically (each column is 1fr).
23
+ */
24
+ declare const propertyGridItemVariants: (props?: ({
25
+ last?: boolean | null | undefined;
26
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
27
+ type PropertyGridItemVariantsProps = VariantProps<typeof propertyGridItemVariants>;
28
+
29
+ interface PropertyGridItemProps extends React.ComponentProps<"div">, PropertyGridItemVariantsProps {
30
+ }
31
+ /**
32
+ * A property-grid row: a two-column grid holding one <PropertyGridTitle> (left)
33
+ * and one <PropertyGridContent> (right) as children. Owns the bottom divider;
34
+ * `last` (the last row in a grid) omits it. Stacked items align columns
35
+ * automatically (each is `grid-cols-2` at 1fr/1fr).
36
+ */
37
+ declare function PropertyGridItem({ className, last, children, ref, ...props }: PropertyGridItemProps): React.JSX.Element;
38
+
39
+ interface PropertyGridCellProps extends React.ComponentProps<"div"> {
40
+ /** Which side of the row — sets tone (muted/foreground) + alignment. */
41
+ variant: "title" | "content";
42
+ /** Leading slot (e.g. a muted icon). Hidden when omitted. */
43
+ leading?: React.ReactNode;
44
+ /** Trailing slot (e.g. a copy icon). Hidden when omitted. */
45
+ trailing?: React.ReactNode;
46
+ }
47
+
48
+ type PropertyGridTitleProps = Omit<PropertyGridCellProps, "variant">;
49
+ /** The title (left) cell of a property-grid row — muted, left-aligned. */
50
+ declare function PropertyGridTitle(props: PropertyGridTitleProps): React.JSX.Element;
51
+
52
+ type PropertyGridContentProps = Omit<PropertyGridCellProps, "variant">;
53
+ /** The content (right) cell of a property-grid row — foreground, right-aligned. */
54
+ declare function PropertyGridContent(props: PropertyGridContentProps): React.JSX.Element;
55
+
56
+ export { type PropertyGridCellVariantsProps, PropertyGridContent, type PropertyGridContentProps, PropertyGridItem, type PropertyGridItemProps, type PropertyGridItemVariantsProps, PropertyGridTitle, type PropertyGridTitleProps, propertyGridCellVariants, propertyGridItemVariants };
@@ -0,0 +1,2 @@
1
+ export { PropertyGridContent, PropertyGridItem, PropertyGridTitle, propertyGridCellVariants, propertyGridItemVariants } from './chunk-TT6JQATV.js';
2
+ import './chunk-7EOSDFS3.js';
package/dist/radio.cjs ADDED
@@ -0,0 +1,74 @@
1
+ 'use strict';
2
+
3
+ var react = require('@phosphor-icons/react');
4
+ var clsx = require('clsx');
5
+ var tailwindMerge = require('tailwind-merge');
6
+ var classVarianceAuthority = require('class-variance-authority');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ // src/radio/Radio.tsx
10
+ function cn(...inputs) {
11
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
12
+ }
13
+ var radioVariants = classVarianceAuthority.cva([
14
+ // Circle — 20×20 (`size-5`), fully round (Figma `radius/full`), 1px border.
15
+ // `peer` lets the sibling indicator react to :checked / :disabled.
16
+ "peer size-5 shrink-0 appearance-none rounded-full border",
17
+ "cursor-pointer transition-colors",
18
+ // Default
19
+ "bg-background border-border",
20
+ // Hover (unselected) — focus keeps the DEFAULT border; only the ring signals
21
+ // focus (so focus doesn't visually read as hover).
22
+ "hover:border-border-accent",
23
+ // Focus ring — suppress the native ring, draw the shared `--focus` ring the
24
+ // same way Checkbox and ghost Button do: 2px stroke, 2px offset
25
+ // (`outline-solid` restores what `outline-none` zeroed).
26
+ "outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-focus",
27
+ // Selected
28
+ "checked:bg-brand-primary-background checked:border-brand-primary-border",
29
+ "checked:hover:bg-brand-primary-accent checked:hover:border-brand-primary-border",
30
+ "checked:focus-visible:bg-brand-primary-accent checked:focus-visible:border-brand-primary-border",
31
+ // Disabled — shared neutral-muted look whether selected or not (per Figma)
32
+ "disabled:pointer-events-none disabled:cursor-not-allowed disabled:border-border-muted",
33
+ "checked:disabled:bg-background checked:disabled:border-border-muted"
34
+ ]);
35
+ function Radio({
36
+ className,
37
+ wrapperClassName,
38
+ onChange,
39
+ onCheckedChange,
40
+ ...props
41
+ }) {
42
+ const handleChange = (event) => {
43
+ onChange?.(event);
44
+ onCheckedChange?.(event.currentTarget.checked);
45
+ };
46
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("relative inline-flex shrink-0", wrapperClassName), children: [
47
+ /* @__PURE__ */ jsxRuntime.jsx(
48
+ "input",
49
+ {
50
+ type: "radio",
51
+ "data-slot": "radio",
52
+ className: cn(radioVariants(), className),
53
+ ...props,
54
+ onChange: handleChange
55
+ }
56
+ ),
57
+ /* @__PURE__ */ jsxRuntime.jsx(
58
+ react.CircleIcon,
59
+ {
60
+ "aria-hidden": "true",
61
+ weight: "fill",
62
+ "data-slot": "radio-indicator",
63
+ className: cn(
64
+ "pointer-events-none invisible absolute inset-0 m-auto size-3",
65
+ "text-brand-primary-foreground",
66
+ "peer-checked:visible peer-disabled:text-foreground-muted"
67
+ )
68
+ }
69
+ )
70
+ ] });
71
+ }
72
+
73
+ exports.Radio = Radio;
74
+ exports.radioVariants = radioVariants;
@@ -0,0 +1,39 @@
1
+ export { R as Radio, a as RadioProps } from './Radio-BYWz1n7p.cjs';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { VariantProps } from 'class-variance-authority';
4
+ import 'react';
5
+
6
+ /**
7
+ * Radio styling — mirrors the Figma `radio-control` component set
8
+ * (node 5117:5677: `state` × `selected`, one 20×20 size) and binds ONLY to the
9
+ * semantic token layer (never primitives). Theme switching is automatic via
10
+ * the `.dark` class, so no `dark:` variants are needed.
11
+ *
12
+ * As with Checkbox (ADR-0010), every Figma axis here is an *interaction*
13
+ * state, so there is no prop-driven variant table: `selected` maps to the
14
+ * native `:checked` pseudo-class and `state` maps to `:hover` /
15
+ * `:focus-visible` / `:disabled`.
16
+ *
17
+ * State → token map (from the Figma variants):
18
+ * - default: `bg-background` + `border-border`
19
+ * - hover (unselected): border strengthens to `border-accent`
20
+ * - focused: border stays at the default; the ring alone marks focus
21
+ * - selected: `bg-brand-primary-background` + `border-brand-primary-border`
22
+ * - selected hover/focused: bg strengthens to `brand-primary-accent`
23
+ * - disabled (either): shared neutral look — `bg-background` + `border-border-muted`
24
+ * - focused additionally draws the shared 2px `--focus` ring, offset 2px from
25
+ * the circle — the ADR-0010 system standard (the Figma node draws its ring
26
+ * flush at inset −2px; component nodes do not override the system ring).
27
+ * The CSS outline follows `rounded-full`, so the ring is circular.
28
+ *
29
+ * Checked × hover/focus/disabled combinations are written as compound
30
+ * utilities (`checked:hover:`, `checked:disabled:`) so precedence is decided
31
+ * by selector specificity, not by Tailwind's stylesheet ordering.
32
+ *
33
+ * The ● indicator is a sibling of the input (an `<input>` can't have
34
+ * children), revealed via `peer-checked:` in <Radio>.
35
+ */
36
+ declare const radioVariants: (props?: class_variance_authority_types.ClassProp | undefined) => string;
37
+ type RadioVariantsProps = VariantProps<typeof radioVariants>;
38
+
39
+ export { type RadioVariantsProps, radioVariants };
@@ -0,0 +1,39 @@
1
+ export { R as Radio, a as RadioProps } from './Radio-BYWz1n7p.js';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { VariantProps } from 'class-variance-authority';
4
+ import 'react';
5
+
6
+ /**
7
+ * Radio styling — mirrors the Figma `radio-control` component set
8
+ * (node 5117:5677: `state` × `selected`, one 20×20 size) and binds ONLY to the
9
+ * semantic token layer (never primitives). Theme switching is automatic via
10
+ * the `.dark` class, so no `dark:` variants are needed.
11
+ *
12
+ * As with Checkbox (ADR-0010), every Figma axis here is an *interaction*
13
+ * state, so there is no prop-driven variant table: `selected` maps to the
14
+ * native `:checked` pseudo-class and `state` maps to `:hover` /
15
+ * `:focus-visible` / `:disabled`.
16
+ *
17
+ * State → token map (from the Figma variants):
18
+ * - default: `bg-background` + `border-border`
19
+ * - hover (unselected): border strengthens to `border-accent`
20
+ * - focused: border stays at the default; the ring alone marks focus
21
+ * - selected: `bg-brand-primary-background` + `border-brand-primary-border`
22
+ * - selected hover/focused: bg strengthens to `brand-primary-accent`
23
+ * - disabled (either): shared neutral look — `bg-background` + `border-border-muted`
24
+ * - focused additionally draws the shared 2px `--focus` ring, offset 2px from
25
+ * the circle — the ADR-0010 system standard (the Figma node draws its ring
26
+ * flush at inset −2px; component nodes do not override the system ring).
27
+ * The CSS outline follows `rounded-full`, so the ring is circular.
28
+ *
29
+ * Checked × hover/focus/disabled combinations are written as compound
30
+ * utilities (`checked:hover:`, `checked:disabled:`) so precedence is decided
31
+ * by selector specificity, not by Tailwind's stylesheet ordering.
32
+ *
33
+ * The ● indicator is a sibling of the input (an `<input>` can't have
34
+ * children), revealed via `peer-checked:` in <Radio>.
35
+ */
36
+ declare const radioVariants: (props?: class_variance_authority_types.ClassProp | undefined) => string;
37
+ type RadioVariantsProps = VariantProps<typeof radioVariants>;
38
+
39
+ export { type RadioVariantsProps, radioVariants };
package/dist/radio.js ADDED
@@ -0,0 +1,2 @@
1
+ export { Radio, radioVariants } from './chunk-UPQ3ZPCO.js';
2
+ import './chunk-7EOSDFS3.js';
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ var classVarianceAuthority = require('class-variance-authority');
4
+
5
+ // src/lib/scrollbar.ts
6
+ var scrollbarVariants = classVarianceAuthority.cva(
7
+ [
8
+ // Firefox (approximate): thin themed scrollbar over a transparent track.
9
+ "[scrollbar-width:thin]",
10
+ "[scrollbar-color:var(--color-card-foreground-muted)_transparent]",
11
+ // WebKit gutter — 12px, both axes so the utility is axis-agnostic.
12
+ "[&::-webkit-scrollbar]:w-3 [&::-webkit-scrollbar]:h-3",
13
+ // WebKit thumb — 4px pill: a 4px transparent border + content-box clip
14
+ // leaves a 4px-wide fill centred in the 12px gutter.
15
+ "[&::-webkit-scrollbar-thumb]:rounded-full",
16
+ "[&::-webkit-scrollbar-thumb]:border-4 [&::-webkit-scrollbar-thumb]:border-solid [&::-webkit-scrollbar-thumb]:border-transparent",
17
+ "[&::-webkit-scrollbar-thumb]:bg-clip-content",
18
+ "[&::-webkit-scrollbar-thumb]:bg-card-foreground-muted",
19
+ // WebKit track — transparent by default (stroke is the `stroke` variant).
20
+ "[&::-webkit-scrollbar-track]:bg-transparent"
21
+ ],
22
+ {
23
+ variants: {
24
+ stroke: {
25
+ // 1px leading-edge track stroke (Figma `stroke`, on by default).
26
+ true: "[&::-webkit-scrollbar-track]:border-l [&::-webkit-scrollbar-track]:border-card-border",
27
+ false: ""
28
+ }
29
+ },
30
+ defaultVariants: { stroke: true }
31
+ }
32
+ );
33
+
34
+ exports.scrollbarVariants = scrollbarVariants;
@@ -0,0 +1,35 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import { VariantProps } from 'class-variance-authority';
3
+
4
+ /**
5
+ * Custom scrollbar styling — the Figma `scroll-bar` component (node 538:18165):
6
+ * a **4px pill thumb** (`card-foreground-muted`, `rounded-full`) in a **12px
7
+ * gutter**, with an optional **1px leading track stroke** (`card-border`).
8
+ *
9
+ * Apply to the SCROLLABLE element itself (the one carrying `overflow-*-auto`),
10
+ * not a rendered child — the browser owns the scrollbar. Compose with `cn`:
11
+ *
12
+ * ```ts
13
+ * className={cn("overflow-y-auto", scrollbarVariants())}
14
+ * ```
15
+ *
16
+ * Arbitrary variants are used deliberately: the WebKit scrollbar pseudo-elements
17
+ * (`::-webkit-scrollbar*`) and the Firefox `scrollbar-width`/`scrollbar-color`
18
+ * properties have **no** Tailwind token utilities, so there is no non-arbitrary
19
+ * way to reach them. Colours still bind to semantic tokens
20
+ * (`card-foreground-muted` / `card-border`), never raw values.
21
+ *
22
+ * Fidelity by engine:
23
+ * - **WebKit (Chrome/Safari):** near-exact — the 4px thumb is a 4px transparent
24
+ * border + `background-clip: content-box` inside the 12px gutter (12 − 4 − 4).
25
+ * - **Firefox:** approximate — only `scrollbar-width: thin` + a thumb colour are
26
+ * supported; there is no exact 4px width and no track stroke. Degrades to a
27
+ * thin themed scrollbar. (A JS overlay would be required for pixel parity;
28
+ * out of scope — see the scrollbar design decision.)
29
+ */
30
+ declare const scrollbarVariants: (props?: ({
31
+ stroke?: boolean | null | undefined;
32
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
33
+ type ScrollbarVariantsProps = VariantProps<typeof scrollbarVariants>;
34
+
35
+ export { type ScrollbarVariantsProps, scrollbarVariants };
@@ -0,0 +1,35 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import { VariantProps } from 'class-variance-authority';
3
+
4
+ /**
5
+ * Custom scrollbar styling — the Figma `scroll-bar` component (node 538:18165):
6
+ * a **4px pill thumb** (`card-foreground-muted`, `rounded-full`) in a **12px
7
+ * gutter**, with an optional **1px leading track stroke** (`card-border`).
8
+ *
9
+ * Apply to the SCROLLABLE element itself (the one carrying `overflow-*-auto`),
10
+ * not a rendered child — the browser owns the scrollbar. Compose with `cn`:
11
+ *
12
+ * ```ts
13
+ * className={cn("overflow-y-auto", scrollbarVariants())}
14
+ * ```
15
+ *
16
+ * Arbitrary variants are used deliberately: the WebKit scrollbar pseudo-elements
17
+ * (`::-webkit-scrollbar*`) and the Firefox `scrollbar-width`/`scrollbar-color`
18
+ * properties have **no** Tailwind token utilities, so there is no non-arbitrary
19
+ * way to reach them. Colours still bind to semantic tokens
20
+ * (`card-foreground-muted` / `card-border`), never raw values.
21
+ *
22
+ * Fidelity by engine:
23
+ * - **WebKit (Chrome/Safari):** near-exact — the 4px thumb is a 4px transparent
24
+ * border + `background-clip: content-box` inside the 12px gutter (12 − 4 − 4).
25
+ * - **Firefox:** approximate — only `scrollbar-width: thin` + a thumb colour are
26
+ * supported; there is no exact 4px width and no track stroke. Degrades to a
27
+ * thin themed scrollbar. (A JS overlay would be required for pixel parity;
28
+ * out of scope — see the scrollbar design decision.)
29
+ */
30
+ declare const scrollbarVariants: (props?: ({
31
+ stroke?: boolean | null | undefined;
32
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
33
+ type ScrollbarVariantsProps = VariantProps<typeof scrollbarVariants>;
34
+
35
+ export { type ScrollbarVariantsProps, scrollbarVariants };
@@ -0,0 +1 @@
1
+ export { scrollbarVariants } from './chunk-FAOVKDVM.js';