@nous-research/ui 0.7.0 → 0.8.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.
package/dist/index.d.ts CHANGED
@@ -26,6 +26,7 @@ export type { LensPreset } from './ui/components/overlays';
26
26
  export { Progress } from './ui/components/progress';
27
27
  export { SceneCanvas } from './ui/components/scene-canvas';
28
28
  export { Scramble } from './ui/components/scramble';
29
+ export { Select, SelectOption } from './ui/components/select';
29
30
  export { SelectionSwitcher } from './ui/components/selection-switcher';
30
31
  export { Stats } from './ui/components/stats';
31
32
  export { TerminalDemo } from './ui/components/terminal-demo';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -22,6 +22,7 @@ export { Overlays } from './ui/components/overlays';
22
22
  export { Progress } from './ui/components/progress';
23
23
  export { SceneCanvas } from './ui/components/scene-canvas';
24
24
  export { Scramble } from './ui/components/scramble';
25
+ export { Select, SelectOption } from './ui/components/select';
25
26
  export { SelectionSwitcher } from './ui/components/selection-switcher';
26
27
  export { Stats } from './ui/components/stats';
27
28
  export { TerminalDemo } from './ui/components/terminal-demo';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAChF,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAEnF,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAM/C,OAAO,EACL,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,EACX,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAEpD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD,OAAO,EAAE,EAAE,EAAE,MAAM,+BAA+B,CAAA;AAClD,OAAO,EAAE,EAAE,EAAE,MAAM,+BAA+B,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAA;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EACL,SAAS,EACT,SAAS,EACT,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACd,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,EAChB,MAAM,6BAA6B,CAAA","sourcesContent":["export { AnimatedCount, useAnimatedCount } from './ui/components/animated-count'\nexport { AsciiSkeleton, Scramble as AsciiScramble } from './ui/components/ascii'\nexport { Badge } from './ui/components/badge'\nexport { NousGirlBadge } from './ui/components/badges/nous-girl'\nexport { BlendMode, useBlendMode, withBlendMode } from './ui/components/blend-mode'\nexport type { BlendModeProps } from './ui/components/blend-mode'\nexport { Blink } from './ui/components/blink'\nexport { Button } from './ui/components/button'\nexport { CommandBlock, CopyButton } from './ui/components/command-block'\nexport { Cursor } from './ui/components/cursor'\nexport { DropdownMenu } from './ui/components/dropdown-menu'\nexport { FitText } from './ui/components/fit-text'\nexport { BarChart, LineChart } from './ui/components/graphs'\nexport { Cell, Grid } from './ui/components/grid'\nexport { HoverBg } from './ui/components/hover-bg'\nexport * as Icons from './ui/components/icons'\nexport { ImageDistortion } from './ui/components/image-distortion'\nexport type { AutoPlayPattern } from './ui/components/image-distortion'\nexport { LevaClient } from './ui/components/leva-client'\nexport { Modal } from './ui/components/modal'\nexport { Poster } from './ui/components/poster'\nexport type {\n PosterAspect,\n PosterProps,\n PosterVariant\n} from './ui/components/poster'\nexport {\n applyLens,\n LENSES,\n LENS_0,\n LENS_5I,\n toggleLens,\n $lightMode\n} from './ui/components/overlays'\nexport { Overlays } from './ui/components/overlays'\nexport type { LensPreset } from './ui/components/overlays'\nexport { Progress } from './ui/components/progress'\nexport { SceneCanvas } from './ui/components/scene-canvas'\nexport { Scramble } from './ui/components/scramble'\nexport { SelectionSwitcher } from './ui/components/selection-switcher'\nexport { Stats } from './ui/components/stats'\nexport { TerminalDemo } from './ui/components/terminal-demo'\nexport type { TerminalDemoStep } from './ui/components/terminal-demo'\nexport { ThemeToggle } from './ui/components/theme-toggle'\nexport { TierCard } from './ui/components/tier-card'\nexport type { TierCardPrice, TierCardProps } from './ui/components/tier-card'\nexport { TV } from './ui/components/tv'\nexport { Watchlist } from './ui/components/watchlist'\n\nexport { Typography } from './ui/components/typography'\nexport type { TypographyProps } from './ui/components/typography'\nexport { H1 } from './ui/components/typography/h1'\nexport { H2 } from './ui/components/typography/h2'\nexport { Legend } from './ui/components/typography/legend'\nexport { Small } from './ui/components/typography/small'\n\nexport { BasicPage } from './ui/basic-page'\nexport { Header } from './ui/header'\nexport { Footer } from './ui/footer'\nexport { LayoutWrapper } from './ui/layout-wrapper'\n\nexport {\n FONT_SANS,\n FONT_MONO,\n FONT_RULES_COMPRESSED,\n FONT_RULES_EXPANDED,\n FONT_MONDWEST\n} from './fonts'\n\nexport { cn, clamp, smoothstep, hexToVec3, truncate, stripWpStyles } from './utils'\nexport { polyRef } from './utils'\nexport type { PolyComponent, PolyProps, PolyRef } from './utils'\nexport { hexToRgb, rgbToHex, colorDodge, colorMix } from './utils/color'\n\nexport { useCappedFrame } from './hooks/use-capped-frame'\nexport { useCssVarDims } from './hooks/use-css-var-dims'\nexport { $gpuTier, useGpuTier } from './hooks/use-gpu-tier'\nexport {\n useSmoothControls,\n getControlAtom,\n setControlValue\n} from './hooks/use-smooth-controls'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { AnimatedCount, useAnimatedCount } from './ui/components/animated-count'\nexport { AsciiSkeleton, Scramble as AsciiScramble } from './ui/components/ascii'\nexport { Badge } from './ui/components/badge'\nexport { NousGirlBadge } from './ui/components/badges/nous-girl'\nexport { BlendMode, useBlendMode, withBlendMode } from './ui/components/blend-mode'\nexport type { BlendModeProps } from './ui/components/blend-mode'\nexport { Blink } from './ui/components/blink'\nexport { Button } from './ui/components/button'\nexport { CommandBlock, CopyButton } from './ui/components/command-block'\nexport { Cursor } from './ui/components/cursor'\nexport { DropdownMenu } from './ui/components/dropdown-menu'\nexport { FitText } from './ui/components/fit-text'\nexport { BarChart, LineChart } from './ui/components/graphs'\nexport { Cell, Grid } from './ui/components/grid'\nexport { HoverBg } from './ui/components/hover-bg'\nexport * as Icons from './ui/components/icons'\nexport { ImageDistortion } from './ui/components/image-distortion'\nexport type { AutoPlayPattern } from './ui/components/image-distortion'\nexport { LevaClient } from './ui/components/leva-client'\nexport { Modal } from './ui/components/modal'\nexport { Poster } from './ui/components/poster'\nexport type {\n PosterAspect,\n PosterProps,\n PosterVariant\n} from './ui/components/poster'\nexport {\n applyLens,\n LENSES,\n LENS_0,\n LENS_5I,\n toggleLens,\n $lightMode\n} from './ui/components/overlays'\nexport { Overlays } from './ui/components/overlays'\nexport type { LensPreset } from './ui/components/overlays'\nexport { Progress } from './ui/components/progress'\nexport { SceneCanvas } from './ui/components/scene-canvas'\nexport { Scramble } from './ui/components/scramble'\nexport { Select, SelectOption } from './ui/components/select'\nexport { SelectionSwitcher } from './ui/components/selection-switcher'\nexport { Stats } from './ui/components/stats'\nexport { TerminalDemo } from './ui/components/terminal-demo'\nexport type { TerminalDemoStep } from './ui/components/terminal-demo'\nexport { ThemeToggle } from './ui/components/theme-toggle'\nexport { TierCard } from './ui/components/tier-card'\nexport type { TierCardPrice, TierCardProps } from './ui/components/tier-card'\nexport { TV } from './ui/components/tv'\nexport { Watchlist } from './ui/components/watchlist'\n\nexport { Typography } from './ui/components/typography'\nexport type { TypographyProps } from './ui/components/typography'\nexport { H1 } from './ui/components/typography/h1'\nexport { H2 } from './ui/components/typography/h2'\nexport { Legend } from './ui/components/typography/legend'\nexport { Small } from './ui/components/typography/small'\n\nexport { BasicPage } from './ui/basic-page'\nexport { Header } from './ui/header'\nexport { Footer } from './ui/footer'\nexport { LayoutWrapper } from './ui/layout-wrapper'\n\nexport {\n FONT_SANS,\n FONT_MONO,\n FONT_RULES_COMPRESSED,\n FONT_RULES_EXPANDED,\n FONT_MONDWEST\n} from './fonts'\n\nexport { cn, clamp, smoothstep, hexToVec3, truncate, stripWpStyles } from './utils'\nexport { polyRef } from './utils'\nexport type { PolyComponent, PolyProps, PolyRef } from './utils'\nexport { hexToRgb, rgbToHex, colorDodge, colorMix } from './utils/color'\n\nexport { useCappedFrame } from './hooks/use-capped-frame'\nexport { useCssVarDims } from './hooks/use-css-var-dims'\nexport { $gpuTier, useGpuTier } from './hooks/use-gpu-tier'\nexport {\n useSmoothControls,\n getControlAtom,\n setControlValue\n} from './hooks/use-smooth-controls'\n"]}
@@ -0,0 +1,19 @@
1
+ import { type CSSProperties, type ReactNode } from 'react';
2
+ export declare function Select({ children, className, disabled, id, onValueChange, placeholder, style, value }: SelectProps): import("react/jsx-runtime").JSX.Element;
3
+ export declare function SelectOption(_props: SelectOptionProps): null;
4
+ interface SelectOptionProps {
5
+ children: ReactNode;
6
+ value: string;
7
+ }
8
+ interface SelectProps {
9
+ children?: ReactNode;
10
+ className?: string;
11
+ disabled?: boolean;
12
+ id?: string;
13
+ onValueChange?: (value: string) => void;
14
+ placeholder?: string;
15
+ style?: CSSProperties;
16
+ value?: string;
17
+ }
18
+ export {};
19
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/ui/components/select.tsx"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,aAAa,EAGlB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAiBd,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,EAAE,EACF,aAAa,EACb,WAAW,EACX,KAAK,EACL,KAAK,EACN,EAAE,WAAW,2CAoJb;AAID,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,QAErD;AA0DD,UAAU,iBAAiB;IACzB,QAAQ,EAAE,SAAS,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf"}
@@ -0,0 +1,127 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Children, isValidElement, useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
+ import { cn } from '../../utils';
5
+ const TRIGGER_CN = 'flex h-9 w-full items-center justify-between gap-2 ' +
6
+ 'border border-midground/15 bg-background/40 px-3 py-1 ' +
7
+ 'font-courier text-sm text-left text-midground transition-colors ' +
8
+ 'hover:border-midground/25 ' +
9
+ 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-midground/30 focus-visible:border-midground/30 ' +
10
+ 'disabled:cursor-not-allowed disabled:opacity-50 ' +
11
+ 'cursor-pointer';
12
+ const LISTBOX_CN = 'absolute z-50 mt-1 w-full max-h-60 overflow-auto ' +
13
+ 'border border-midground/15 bg-background-base text-midground shadow-lg';
14
+ export function Select({ children, className, disabled, id, onValueChange, placeholder, style, value }) {
15
+ const [open, setOpen] = useState(false);
16
+ const [highlightedIndex, setHighlightedIndex] = useState(-1);
17
+ const containerRef = useRef(null);
18
+ const listRef = useRef(null);
19
+ const options = useMemo(() => collectOptions(children), [children]);
20
+ const selected = options.find(o => o.value === value);
21
+ const displayLabel = selected?.label ?? placeholder ?? value ?? '';
22
+ const close = useCallback(() => {
23
+ setOpen(false);
24
+ setHighlightedIndex(-1);
25
+ }, []);
26
+ useEffect(() => {
27
+ if (!open)
28
+ return;
29
+ const ac = new AbortController();
30
+ document.addEventListener('mousedown', e => {
31
+ if (!containerRef.current?.contains(e.target))
32
+ close();
33
+ }, { signal: ac.signal });
34
+ return () => ac.abort();
35
+ }, [open, close]);
36
+ useEffect(() => {
37
+ if (!open || highlightedIndex < 0)
38
+ return;
39
+ const el = listRef.current?.children[highlightedIndex];
40
+ el?.scrollIntoView({ block: 'nearest' });
41
+ }, [open, highlightedIndex]);
42
+ const handleKeyDown = (e) => {
43
+ if (disabled)
44
+ return;
45
+ switch (e.key) {
46
+ case 'Enter':
47
+ case ' ':
48
+ e.preventDefault();
49
+ if (!open) {
50
+ setOpen(true);
51
+ setHighlightedIndex(options.findIndex(o => o.value === value));
52
+ }
53
+ else if (highlightedIndex >= 0 && options[highlightedIndex]) {
54
+ onValueChange?.(options[highlightedIndex].value);
55
+ close();
56
+ }
57
+ break;
58
+ case 'ArrowDown':
59
+ e.preventDefault();
60
+ if (!open) {
61
+ setOpen(true);
62
+ setHighlightedIndex(options.findIndex(o => o.value === value));
63
+ }
64
+ else {
65
+ setHighlightedIndex(i => Math.min(i + 1, options.length - 1));
66
+ }
67
+ break;
68
+ case 'ArrowUp':
69
+ e.preventDefault();
70
+ if (open)
71
+ setHighlightedIndex(i => Math.max(i - 1, 0));
72
+ break;
73
+ case 'Home':
74
+ if (open) {
75
+ e.preventDefault();
76
+ setHighlightedIndex(0);
77
+ }
78
+ break;
79
+ case 'End':
80
+ if (open) {
81
+ e.preventDefault();
82
+ setHighlightedIndex(options.length - 1);
83
+ }
84
+ break;
85
+ case 'Escape':
86
+ e.preventDefault();
87
+ close();
88
+ break;
89
+ }
90
+ };
91
+ return (_jsxs("div", { className: cn('relative', className), id: id, ref: containerRef, style: style, children: [_jsxs("button", { "aria-expanded": open, "aria-haspopup": "listbox", className: TRIGGER_CN, disabled: disabled, onClick: () => !disabled && setOpen(o => !o), onKeyDown: handleKeyDown, role: "combobox", type: "button", children: [_jsx("span", { className: cn('truncate', !selected && 'text-midground/50'), children: displayLabel }), _jsx(ChevronDownGlyph, { className: cn('size-3 shrink-0 text-midground/60 transition-transform', open && 'rotate-180') })] }), open && (_jsx("div", { className: LISTBOX_CN, ref: listRef, role: "listbox", children: options.map((opt, i) => {
92
+ const isSelected = opt.value === value;
93
+ const isHighlighted = i === highlightedIndex;
94
+ return (_jsxs("div", { "aria-selected": isSelected, className: cn('flex cursor-pointer items-center gap-2 px-3 py-2', 'font-courier text-sm transition-colors', isHighlighted && 'bg-midground/10', isSelected ? 'text-midground' : 'text-midground/70'), onClick: () => {
95
+ onValueChange?.(opt.value);
96
+ close();
97
+ }, onMouseEnter: () => setHighlightedIndex(i), role: "option", children: [_jsx(CheckGlyph, { className: cn('size-3 shrink-0', isSelected ? 'opacity-100' : 'opacity-0') }), _jsx("span", { className: "truncate", children: opt.label })] }, opt.value));
98
+ }) }))] }));
99
+ }
100
+ // Marker component — `Select` reads `value`/`children` from its tree.
101
+ // Renders nothing on its own.
102
+ export function SelectOption(_props) {
103
+ return null;
104
+ }
105
+ const ChevronDownGlyph = ({ className }) => (_jsx("svg", { "aria-hidden": true, className: className, fill: "none", stroke: "currentColor", strokeLinecap: "square", strokeWidth: 1.5, viewBox: "0 0 12 12", children: _jsx("path", { d: "M2.5 4.5 6 8l3.5-3.5" }) }));
106
+ const CheckGlyph = ({ className }) => (_jsx("svg", { "aria-hidden": true, className: className, fill: "none", stroke: "currentColor", strokeLinecap: "square", strokeWidth: 1.5, viewBox: "0 0 12 12", children: _jsx("path", { d: "m2.5 6.5 2.5 2.5L9.5 3.5" }) }));
107
+ function collectOptions(children) {
108
+ const out = [];
109
+ Children.forEach(children, child => {
110
+ if (!isValidElement(child))
111
+ return;
112
+ const el = child;
113
+ if (el.props.value !== undefined) {
114
+ out.push({
115
+ label: typeof el.props.children === 'string'
116
+ ? el.props.children
117
+ : String(el.props.value),
118
+ value: String(el.props.value)
119
+ });
120
+ }
121
+ else if (el.props.children) {
122
+ out.push(...collectOptions(el.props.children));
123
+ }
124
+ });
125
+ return out;
126
+ }
127
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/ui/components/select.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EACL,QAAQ,EACR,cAAc,EACd,WAAW,EACX,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,EAKT,MAAM,OAAO,CAAA;AAEd,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,MAAM,UAAU,GACd,qDAAqD;IACrD,wDAAwD;IACxD,kEAAkE;IAClE,4BAA4B;IAC5B,oHAAoH;IACpH,kDAAkD;IAClD,gBAAgB,CAAA;AAElB,MAAM,UAAU,GACd,mDAAmD;IACnD,wEAAwE,CAAA;AAE1E,MAAM,UAAU,MAAM,CAAC,EACrB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,EAAE,EACF,aAAa,EACb,WAAW,EACX,KAAK,EACL,KAAK,EACO;IACZ,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5D,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAE5C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;IACrD,MAAM,YAAY,GAAG,QAAQ,EAAE,KAAK,IAAI,WAAW,IAAI,KAAK,IAAI,EAAE,CAAA;IAElE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,OAAO,CAAC,KAAK,CAAC,CAAA;QACd,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAA;QAChC,QAAQ,CAAC,gBAAgB,CACvB,WAAW,EACX,CAAC,CAAC,EAAE;YACF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC;gBAAE,KAAK,EAAE,CAAA;QAChE,CAAC,EACD,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CACtB,CAAA;QACD,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IAEjB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,IAAI,gBAAgB,GAAG,CAAC;YAAE,OAAM;QACzC,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAExC,CAAA;QACb,EAAE,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IAC1C,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAE5B,MAAM,aAAa,GAAG,CAAC,CAAgB,EAAE,EAAE;QACzC,IAAI,QAAQ;YAAE,OAAM;QACpB,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;YACd,KAAK,OAAO,CAAC;YACb,KAAK,GAAG;gBACN,CAAC,CAAC,cAAc,EAAE,CAAA;gBAClB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,CAAC,IAAI,CAAC,CAAA;oBACb,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAA;gBAChE,CAAC;qBAAM,IAAI,gBAAgB,IAAI,CAAC,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAC9D,aAAa,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAA;oBAChD,KAAK,EAAE,CAAA;gBACT,CAAC;gBACD,MAAK;YACP,KAAK,WAAW;gBACd,CAAC,CAAC,cAAc,EAAE,CAAA;gBAClB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,CAAC,IAAI,CAAC,CAAA;oBACb,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAA;gBAChE,CAAC;qBAAM,CAAC;oBACN,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;gBAC/D,CAAC;gBACD,MAAK;YACP,KAAK,SAAS;gBACZ,CAAC,CAAC,cAAc,EAAE,CAAA;gBAClB,IAAI,IAAI;oBAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBACtD,MAAK;YACP,KAAK,MAAM;gBACT,IAAI,IAAI,EAAE,CAAC;oBACT,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,mBAAmB,CAAC,CAAC,CAAC,CAAA;gBACxB,CAAC;gBACD,MAAK;YACP,KAAK,KAAK;gBACR,IAAI,IAAI,EAAE,CAAC;oBACT,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,mBAAmB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBACzC,CAAC;gBACD,MAAK;YACP,KAAK,QAAQ;gBACX,CAAC,CAAC,cAAc,EAAE,CAAA;gBAClB,KAAK,EAAE,CAAA;gBACP,MAAK;QACT,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,EACpC,EAAE,EAAE,EAAE,EACN,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,KAAK,aAEZ,mCACiB,IAAI,mBACL,SAAS,EACvB,SAAS,EAAE,UAAU,EACrB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAC5C,SAAS,EAAE,aAAa,EACxB,IAAI,EAAC,UAAU,EACf,IAAI,EAAC,QAAQ,aAEb,eAAM,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,IAAI,mBAAmB,CAAC,YAC9D,YAAY,GACR,EAEP,KAAC,gBAAgB,IACf,SAAS,EAAE,EAAE,CACX,wDAAwD,EACxD,IAAI,IAAI,YAAY,CACrB,GACD,IACK,EAER,IAAI,IAAI,CACP,cAAK,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAC,SAAS,YACrD,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;oBACtB,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,KAAK,KAAK,CAAA;oBACtC,MAAM,aAAa,GAAG,CAAC,KAAK,gBAAgB,CAAA;oBAE5C,OAAO,CACL,gCACiB,UAAU,EACzB,SAAS,EAAE,EAAE,CACX,kDAAkD,EAClD,wCAAwC,EACxC,aAAa,IAAI,iBAAiB,EAClC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CACpD,EAED,OAAO,EAAE,GAAG,EAAE;4BACZ,aAAa,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;4BAC1B,KAAK,EAAE,CAAA;wBACT,CAAC,EACD,YAAY,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAC1C,IAAI,EAAC,QAAQ,aAEb,KAAC,UAAU,IACT,SAAS,EAAE,EAAE,CACX,iBAAiB,EACjB,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CACzC,GACD,EACF,eAAM,SAAS,EAAC,UAAU,YAAE,GAAG,CAAC,KAAK,GAAQ,KAdxC,GAAG,CAAC,KAAK,CAeV,CACP,CAAA;gBACH,CAAC,CAAC,GACE,CACP,IACG,CACP,CAAA;AACH,CAAC;AAED,sEAAsE;AACtE,8BAA8B;AAC9B,MAAM,UAAU,YAAY,CAAC,MAAyB;IACpD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,EAAE,SAAS,EAA0B,EAAE,EAAE,CAAC,CAClE,mCAEE,SAAS,EAAE,SAAS,EACpB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAE,GAAG,EAChB,OAAO,EAAC,WAAW,YAEnB,eAAM,CAAC,EAAC,sBAAsB,GAAG,GAC7B,CACP,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,EAAE,SAAS,EAA0B,EAAE,EAAE,CAAC,CAC5D,mCAEE,SAAS,EAAE,SAAS,EACpB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAE,GAAG,EAChB,OAAO,EAAC,WAAW,YAEnB,eAAM,CAAC,EAAC,0BAA0B,GAAG,GACjC,CACP,CAAA;AAED,SAAS,cAAc,CAAC,QAAmB;IACzC,MAAM,GAAG,GAAuB,EAAE,CAAA;IAClC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;QACjC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YAAE,OAAM;QAClC,MAAM,EAAE,GAAG,KAGT,CAAA;QACF,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC;gBACP,KAAK,EACH,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ;oBACnC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ;oBACnB,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC5B,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;aAC9B,CAAC,CAAA;QACJ,CAAC;aAAM,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;QAChD,CAAC;IACH,CAAC,CAAC,CAAA;IACF,OAAO,GAAG,CAAA;AACZ,CAAC","sourcesContent":["'use client'\n\nimport {\n Children,\n isValidElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode\n} from 'react'\n\nimport { cn } from '../../utils'\n\nconst TRIGGER_CN =\n 'flex h-9 w-full items-center justify-between gap-2 ' +\n 'border border-midground/15 bg-background/40 px-3 py-1 ' +\n 'font-courier text-sm text-left text-midground transition-colors ' +\n 'hover:border-midground/25 ' +\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-midground/30 focus-visible:border-midground/30 ' +\n 'disabled:cursor-not-allowed disabled:opacity-50 ' +\n 'cursor-pointer'\n\nconst LISTBOX_CN =\n 'absolute z-50 mt-1 w-full max-h-60 overflow-auto ' +\n 'border border-midground/15 bg-background-base text-midground shadow-lg'\n\nexport function Select({\n children,\n className,\n disabled,\n id,\n onValueChange,\n placeholder,\n style,\n value\n}: SelectProps) {\n const [open, setOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n const containerRef = useRef<HTMLDivElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n\n const options = useMemo(() => collectOptions(children), [children])\n const selected = options.find(o => o.value === value)\n const displayLabel = selected?.label ?? placeholder ?? value ?? ''\n\n const close = useCallback(() => {\n setOpen(false)\n setHighlightedIndex(-1)\n }, [])\n\n useEffect(() => {\n if (!open) return\n const ac = new AbortController()\n document.addEventListener(\n 'mousedown',\n e => {\n if (!containerRef.current?.contains(e.target as Node)) close()\n },\n { signal: ac.signal }\n )\n return () => ac.abort()\n }, [open, close])\n\n useEffect(() => {\n if (!open || highlightedIndex < 0) return\n const el = listRef.current?.children[highlightedIndex] as\n | HTMLElement\n | undefined\n el?.scrollIntoView({ block: 'nearest' })\n }, [open, highlightedIndex])\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (disabled) return\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault()\n if (!open) {\n setOpen(true)\n setHighlightedIndex(options.findIndex(o => o.value === value))\n } else if (highlightedIndex >= 0 && options[highlightedIndex]) {\n onValueChange?.(options[highlightedIndex].value)\n close()\n }\n break\n case 'ArrowDown':\n e.preventDefault()\n if (!open) {\n setOpen(true)\n setHighlightedIndex(options.findIndex(o => o.value === value))\n } else {\n setHighlightedIndex(i => Math.min(i + 1, options.length - 1))\n }\n break\n case 'ArrowUp':\n e.preventDefault()\n if (open) setHighlightedIndex(i => Math.max(i - 1, 0))\n break\n case 'Home':\n if (open) {\n e.preventDefault()\n setHighlightedIndex(0)\n }\n break\n case 'End':\n if (open) {\n e.preventDefault()\n setHighlightedIndex(options.length - 1)\n }\n break\n case 'Escape':\n e.preventDefault()\n close()\n break\n }\n }\n\n return (\n <div\n className={cn('relative', className)}\n id={id}\n ref={containerRef}\n style={style}\n >\n <button\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n className={TRIGGER_CN}\n disabled={disabled}\n onClick={() => !disabled && setOpen(o => !o)}\n onKeyDown={handleKeyDown}\n role=\"combobox\"\n type=\"button\"\n >\n <span className={cn('truncate', !selected && 'text-midground/50')}>\n {displayLabel}\n </span>\n\n <ChevronDownGlyph\n className={cn(\n 'size-3 shrink-0 text-midground/60 transition-transform',\n open && 'rotate-180'\n )}\n />\n </button>\n\n {open && (\n <div className={LISTBOX_CN} ref={listRef} role=\"listbox\">\n {options.map((opt, i) => {\n const isSelected = opt.value === value\n const isHighlighted = i === highlightedIndex\n\n return (\n <div\n aria-selected={isSelected}\n className={cn(\n 'flex cursor-pointer items-center gap-2 px-3 py-2',\n 'font-courier text-sm transition-colors',\n isHighlighted && 'bg-midground/10',\n isSelected ? 'text-midground' : 'text-midground/70'\n )}\n key={opt.value}\n onClick={() => {\n onValueChange?.(opt.value)\n close()\n }}\n onMouseEnter={() => setHighlightedIndex(i)}\n role=\"option\"\n >\n <CheckGlyph\n className={cn(\n 'size-3 shrink-0',\n isSelected ? 'opacity-100' : 'opacity-0'\n )}\n />\n <span className=\"truncate\">{opt.label}</span>\n </div>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n\n// Marker component — `Select` reads `value`/`children` from its tree.\n// Renders nothing on its own.\nexport function SelectOption(_props: SelectOptionProps) {\n return null\n}\n\nconst ChevronDownGlyph = ({ className }: { className?: string }) => (\n <svg\n aria-hidden\n className={className}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"square\"\n strokeWidth={1.5}\n viewBox=\"0 0 12 12\"\n >\n <path d=\"M2.5 4.5 6 8l3.5-3.5\" />\n </svg>\n)\n\nconst CheckGlyph = ({ className }: { className?: string }) => (\n <svg\n aria-hidden\n className={className}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"square\"\n strokeWidth={1.5}\n viewBox=\"0 0 12 12\"\n >\n <path d=\"m2.5 6.5 2.5 2.5L9.5 3.5\" />\n </svg>\n)\n\nfunction collectOptions(children: ReactNode): SelectOptionData[] {\n const out: SelectOptionData[] = []\n Children.forEach(children, child => {\n if (!isValidElement(child)) return\n const el = child as ReactElement<{\n children?: ReactNode\n value?: unknown\n }>\n if (el.props.value !== undefined) {\n out.push({\n label:\n typeof el.props.children === 'string'\n ? el.props.children\n : String(el.props.value),\n value: String(el.props.value)\n })\n } else if (el.props.children) {\n out.push(...collectOptions(el.props.children))\n }\n })\n return out\n}\n\ninterface SelectOptionData {\n label: string\n value: string\n}\n\ninterface SelectOptionProps {\n children: ReactNode\n value: string\n}\n\ninterface SelectProps {\n children?: ReactNode\n className?: string\n disabled?: boolean\n id?: string\n onValueChange?: (value: string) => void\n placeholder?: string\n style?: CSSProperties\n value?: string\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nous-research/ui",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "sideEffects": [