@yugnex/nexui-react 2.0.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 (46) hide show
  1. package/dist/card.d.ts +31 -0
  2. package/dist/card.d.ts.map +1 -0
  3. package/dist/card.js +73 -0
  4. package/dist/card.js.map +1 -0
  5. package/dist/index.d.ts +10 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +15 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/modal.d.ts +13 -0
  10. package/dist/modal.d.ts.map +1 -0
  11. package/dist/modal.js +117 -0
  12. package/dist/modal.js.map +1 -0
  13. package/dist/primitives.d.ts +162 -0
  14. package/dist/primitives.d.ts.map +1 -0
  15. package/dist/primitives.js +100 -0
  16. package/dist/primitives.js.map +1 -0
  17. package/dist/provider.d.ts +16 -0
  18. package/dist/provider.d.ts.map +1 -0
  19. package/dist/provider.js +58 -0
  20. package/dist/provider.js.map +1 -0
  21. package/dist/select.d.ts +27 -0
  22. package/dist/select.d.ts.map +1 -0
  23. package/dist/select.js +172 -0
  24. package/dist/select.js.map +1 -0
  25. package/dist/tabs.d.ts +33 -0
  26. package/dist/tabs.d.ts.map +1 -0
  27. package/dist/tabs.js +74 -0
  28. package/dist/tabs.js.map +1 -0
  29. package/dist/toast.d.ts +24 -0
  30. package/dist/toast.d.ts.map +1 -0
  31. package/dist/toast.js +111 -0
  32. package/dist/toast.js.map +1 -0
  33. package/dist/tooltip.d.ts +12 -0
  34. package/dist/tooltip.d.ts.map +1 -0
  35. package/dist/tooltip.js +52 -0
  36. package/dist/tooltip.js.map +1 -0
  37. package/package.json +44 -0
  38. package/src/card.tsx +137 -0
  39. package/src/index.ts +35 -0
  40. package/src/modal.tsx +172 -0
  41. package/src/primitives.tsx +344 -0
  42. package/src/provider.tsx +88 -0
  43. package/src/select.tsx +296 -0
  44. package/src/tabs.tsx +150 -0
  45. package/src/toast.tsx +178 -0
  46. package/src/tooltip.tsx +90 -0
@@ -0,0 +1,58 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ // @yugnex/nexui-react — NexuiProvider
4
+ // Wraps your Next.js app. Initializes the Web Component engine client-side.
5
+ // SSR-safe: the engine call is gated behind useEffect (browser-only).
6
+ //
7
+ // Usage in app/layout.tsx:
8
+ // import { NexuiProvider } from "@yugnex/nexui-react";
9
+ // export default function RootLayout({ children }) {
10
+ // return <html><body><NexuiProvider theme="void">{children}</NexuiProvider></body></html>;
11
+ // }
12
+ import React, { createContext, useContext, useEffect, useState, useCallback, } from "react";
13
+ const NexuiContext = createContext({
14
+ theme: "void",
15
+ setTheme: () => { },
16
+ ready: false,
17
+ });
18
+ export function useNexui() {
19
+ return useContext(NexuiContext);
20
+ }
21
+ export function NexuiProvider({ children, theme: initialTheme = "void", onThemeChange }) {
22
+ const [theme, setThemeState] = useState(initialTheme);
23
+ const [ready, setReady] = useState(false);
24
+ useEffect(() => {
25
+ let cancelled = false;
26
+ (async () => {
27
+ const { initializeNexuiEngine } = await import("@yugnex/nexui");
28
+ await initializeNexuiEngine(theme);
29
+ if (!cancelled)
30
+ setReady(true);
31
+ })();
32
+ return () => { cancelled = true; };
33
+ }, []);
34
+ useEffect(() => {
35
+ if (!ready)
36
+ return;
37
+ (async () => {
38
+ const { setNexuiTheme } = await import("@yugnex/nexui");
39
+ setNexuiTheme(theme);
40
+ })();
41
+ }, [theme, ready]);
42
+ // Listen for programmatic theme changes from outside React
43
+ useEffect(() => {
44
+ const handler = (e) => {
45
+ const t = e.detail.theme;
46
+ setThemeState(t);
47
+ onThemeChange?.(t);
48
+ };
49
+ window.addEventListener("nexui:theme-change", handler);
50
+ return () => window.removeEventListener("nexui:theme-change", handler);
51
+ }, [onThemeChange]);
52
+ const setTheme = useCallback((t) => {
53
+ setThemeState(t);
54
+ onThemeChange?.(t);
55
+ }, [onThemeChange]);
56
+ return (_jsx(NexuiContext.Provider, { value: { theme, setTheme, ready }, children: children }));
57
+ }
58
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,sCAAsC;AACtC,4EAA4E;AAC5E,sEAAsE;AACtE,EAAE;AACF,2BAA2B;AAC3B,yDAAyD;AACzD,uDAAuD;AACvD,+FAA+F;AAC/F,MAAM;AAEN,OAAO,KAAK,EAAE,EACZ,aAAa,EACb,UAAU,EACV,SAAS,EACT,QAAQ,EACR,WAAW,GAEZ,MAAM,OAAO,CAAC;AAUf,MAAM,YAAY,GAAG,aAAa,CAAoB;IACpD,KAAK,EAAK,MAAM;IAChB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;IAClB,KAAK,EAAK,KAAK;CAChB,CAAC,CAAC;AAEH,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC;AAQD,MAAM,UAAU,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,aAAa,EAAsB;IACzG,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAa,YAAY,CAAC,CAAC;IAClE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAQ,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE/C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YAChE,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,SAAS;gBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YACxD,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEnB,2DAA2D;IAC3D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,CAAC,CAAQ,EAAE,EAAE;YAC3B,MAAM,CAAC,GAAI,CAAwC,CAAC,MAAM,CAAC,KAAK,CAAC;YACjE,aAAa,CAAC,CAAC,CAAC,CAAC;YACjB,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAa,EAAE,EAAE;QAC7C,aAAa,CAAC,CAAC,CAAC,CAAC;QACjB,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YACrD,QAAQ,GACa,CACzB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ import React, { type ReactNode, type CSSProperties } from "react";
2
+ interface SelectProps {
3
+ value?: string;
4
+ defaultValue?: string;
5
+ onChange?: (value: string) => void;
6
+ placeholder?: string;
7
+ disabled?: boolean;
8
+ size?: "sm" | "md" | "lg";
9
+ error?: string;
10
+ label?: string;
11
+ children?: ReactNode;
12
+ className?: string;
13
+ style?: CSSProperties;
14
+ }
15
+ export declare function Select({ value: controlledValue, defaultValue, onChange, placeholder, disabled, size, error, label, children, className, style, }: SelectProps): React.JSX.Element;
16
+ interface SelectItemProps {
17
+ value: string;
18
+ children: ReactNode;
19
+ disabled?: boolean;
20
+ }
21
+ export declare function SelectItem({ value, children, disabled }: SelectItemProps): React.JSX.Element;
22
+ export declare function SelectGroup({ label, children }: {
23
+ label: string;
24
+ children: ReactNode;
25
+ }): React.JSX.Element;
26
+ export {};
27
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../src/select.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAQZ,KAAK,SAAS,EACd,KAAK,aAAa,EAEnB,MAAM,OAAO,CAAC;AAef,UAAU,WAAW;IACnB,KAAK,CAAC,EAAQ,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAK,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAK,OAAO,CAAC;IACtB,IAAI,CAAC,EAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAQ,MAAM,CAAC;IACrB,KAAK,CAAC,EAAQ,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAK,SAAS,CAAC;IACxB,SAAS,CAAC,EAAI,MAAM,CAAC;IACrB,KAAK,CAAC,EAAQ,aAAa,CAAC;CAC7B;AAED,wBAAgB,MAAM,CAAC,EACrB,KAAK,EAAE,eAAe,EACtB,YAAiB,EACjB,QAAQ,EACR,WAAyB,EACzB,QAAQ,EACR,IAAW,EACX,KAAK,EACL,KAAK,EACL,QAAQ,EACR,SAAS,EACT,KAAK,GACN,EAAE,WAAW,qBA2Kb;AAED,UAAU,eAAe;IACvB,KAAK,EAAO,MAAM,CAAC;IACnB,QAAQ,EAAI,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAG,OAAO,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,eAAe,qBAwCxE;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,qBAiBtF"}
package/dist/select.js ADDED
@@ -0,0 +1,172 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ // @yugnex/nexui-react — Select
4
+ // Fully custom, keyboard-navigable, ARIA-compliant dropdown select.
5
+ // No native <select>. Works with keyboard (arrows, Enter, Escape, Home/End).
6
+ import React, { createContext, useCallback, useContext, useEffect, useId, useRef, useState, } from "react";
7
+ const SelectContext = createContext({});
8
+ export function Select({ value: controlledValue, defaultValue = "", onChange, placeholder = "Select...", disabled, size = "md", error, label, children, className, style, }) {
9
+ const [internal, setInternal] = useState(defaultValue);
10
+ const [open, setOpen] = useState(false);
11
+ const [focusedIdx, setFocusedIdx] = useState(-1);
12
+ const [options, setOptions] = useState([]);
13
+ const [labelMap, setLabelMap] = useState({});
14
+ const triggerRef = useRef(null);
15
+ const listRef = useRef(null);
16
+ const id = useId();
17
+ const value = controlledValue !== undefined ? controlledValue : internal;
18
+ const registerOption = useCallback((v, lbl) => {
19
+ setLabelMap(m => ({ ...m, [v]: lbl }));
20
+ setOptions(prev => {
21
+ if (prev.find(o => o.value === v))
22
+ return prev;
23
+ return [...prev, { value: v, label: lbl }];
24
+ });
25
+ }, []);
26
+ const close = useCallback(() => {
27
+ setOpen(false);
28
+ setFocusedIdx(-1);
29
+ triggerRef.current?.focus();
30
+ }, []);
31
+ const handleChange = useCallback((v, lbl) => {
32
+ setInternal(v);
33
+ onChange?.(v);
34
+ close();
35
+ }, [onChange, close]);
36
+ useEffect(() => {
37
+ if (!open)
38
+ return;
39
+ const handler = (e) => {
40
+ const trigger = triggerRef.current;
41
+ const list = listRef.current;
42
+ if (!trigger?.contains(e.target) && !list?.contains(e.target)) {
43
+ close();
44
+ }
45
+ };
46
+ document.addEventListener("mousedown", handler);
47
+ return () => document.removeEventListener("mousedown", handler);
48
+ }, [open, close]);
49
+ const handleKeyDown = (e) => {
50
+ if (disabled)
51
+ return;
52
+ const enabled = options.filter(o => !o.disabled);
53
+ switch (e.key) {
54
+ case "Enter":
55
+ case " ":
56
+ e.preventDefault();
57
+ if (!open) {
58
+ setOpen(true);
59
+ setFocusedIdx(0);
60
+ }
61
+ else if (focusedIdx >= 0)
62
+ handleChange(enabled[focusedIdx]?.value ?? "", enabled[focusedIdx]?.label ?? "");
63
+ break;
64
+ case "Escape":
65
+ e.preventDefault();
66
+ close();
67
+ break;
68
+ case "ArrowDown":
69
+ e.preventDefault();
70
+ if (!open) {
71
+ setOpen(true);
72
+ setFocusedIdx(0);
73
+ }
74
+ else
75
+ setFocusedIdx(i => Math.min(i + 1, enabled.length - 1));
76
+ break;
77
+ case "ArrowUp":
78
+ e.preventDefault();
79
+ setFocusedIdx(i => Math.max(i - 1, 0));
80
+ break;
81
+ case "Home":
82
+ e.preventDefault();
83
+ setFocusedIdx(0);
84
+ break;
85
+ case "End":
86
+ e.preventDefault();
87
+ setFocusedIdx(enabled.length - 1);
88
+ break;
89
+ }
90
+ };
91
+ const sizeH = { sm: "28px", md: "34px", lg: "40px" };
92
+ const sizeFS = { sm: "11px", md: "13px", lg: "14px" };
93
+ const h = sizeH[size] ?? sizeH.md;
94
+ const fs = sizeFS[size] ?? sizeFS.md;
95
+ const displayLabel = value ? (labelMap[value] ?? value) : "";
96
+ return (_jsx(SelectContext.Provider, { value: {
97
+ value, open, onChange: handleChange, close,
98
+ labelFor: (v) => labelMap[v] ?? v,
99
+ registerOption, focusedIdx, options, setFocusedIdx,
100
+ }, children: _jsxs("div", { className: className, style: { position: "relative", display: "inline-block", width: "100%", ...style }, children: [label && (_jsx("label", { htmlFor: `${id}-btn`, style: { display: "block", fontSize: "12px", fontWeight: 500, color: "var(--nx-text-2, #8B949E)", marginBottom: 5, fontFamily: "var(--nx-font-sans, system-ui, sans-serif)" }, children: label })), _jsxs("button", { id: `${id}-btn`, ref: triggerRef, type: "button", disabled: disabled, "aria-haspopup": "listbox", "aria-expanded": open, "aria-controls": `${id}-list`, onClick: () => !disabled && setOpen(o => !o), onKeyDown: handleKeyDown, style: {
101
+ width: "100%",
102
+ height: h,
103
+ padding: "0 10px",
104
+ display: "flex",
105
+ alignItems: "center",
106
+ justifyContent: "space-between",
107
+ gap: 8,
108
+ background: "var(--nx-bg-elevated, #1C2128)",
109
+ border: `1px solid ${error ? "var(--nx-error, #EF4444)" : open ? "var(--nx-border-focus, rgba(232,144,16,0.60))" : "var(--nx-border, rgba(255,255,255,0.08))"}`,
110
+ borderRadius: "6px",
111
+ color: displayLabel ? "var(--nx-text, #E6EDF3)" : "var(--nx-text-4, #484F58)",
112
+ fontFamily: "var(--nx-font-sans, system-ui, sans-serif)",
113
+ fontSize: fs,
114
+ fontWeight: 400,
115
+ cursor: disabled ? "not-allowed" : "pointer",
116
+ opacity: disabled ? 0.45 : 1,
117
+ outline: "none",
118
+ boxShadow: open ? `0 0 0 3px rgba(232,144,16,0.12)` : "none",
119
+ transition: "border-color 150ms ease, box-shadow 150ms ease",
120
+ }, children: [_jsx("span", { style: { flex: 1, textAlign: "left", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: displayLabel || placeholder }), _jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", style: { transform: open ? "rotate(180deg)" : "none", transition: "transform 150ms ease", flexShrink: 0, opacity: 0.6 }, children: _jsx("path", { d: "M6 9l6 6 6-6" }) })] }), error && _jsx("span", { style: { fontSize: "11px", color: "var(--nx-error, #EF4444)", marginTop: 4, display: "block", fontFamily: "var(--nx-font-sans, system-ui, sans-serif)" }, children: error }), open && (_jsx("ul", { id: `${id}-list`, ref: listRef, role: "listbox", style: {
121
+ position: "absolute",
122
+ top: "100%",
123
+ left: 0,
124
+ right: 0,
125
+ marginTop: 4,
126
+ background: "var(--nx-bg-elevated, #1C2128)",
127
+ border: "1px solid var(--nx-border-strong, rgba(255,255,255,0.16))",
128
+ borderRadius: 8,
129
+ boxShadow: "0 10px 15px rgba(0,0,0,0.50), 0 4px 6px rgba(0,0,0,0.30)",
130
+ padding: "4px 0",
131
+ zIndex: 50,
132
+ maxHeight: 240,
133
+ overflowY: "auto",
134
+ listStyle: "none",
135
+ margin: 0,
136
+ animation: "nx-slide-up 150ms ease forwards",
137
+ }, children: children }))] }) }));
138
+ }
139
+ export function SelectItem({ value, children, disabled }) {
140
+ const ctx = useContext(SelectContext);
141
+ const label = typeof children === "string" ? children : value;
142
+ useEffect(() => { ctx.registerOption(value, label); }, [value, label]);
143
+ const enabledOptions = ctx.options.filter(o => !o.disabled);
144
+ const myIdx = enabledOptions.findIndex(o => o.value === value);
145
+ const isFocused = ctx.focusedIdx === myIdx;
146
+ const isSelected = ctx.value === value;
147
+ return (_jsxs("li", { role: "option", "aria-selected": isSelected, "aria-disabled": disabled, onClick: () => !disabled && ctx.onChange(value, label), onMouseEnter: () => !disabled && ctx.setFocusedIdx(myIdx), style: {
148
+ padding: "7px 12px",
149
+ fontSize: "var(--nx-fs-sm, 12px)",
150
+ fontFamily: "var(--nx-font-sans, system-ui, sans-serif)",
151
+ color: disabled ? "var(--nx-text-4, #484F58)" : isSelected ? "var(--nx-accent-text, #F5B342)" : "var(--nx-text, #E6EDF3)",
152
+ background: isFocused ? "var(--nx-bg-overlay, #21262D)" : "transparent",
153
+ cursor: disabled ? "not-allowed" : "pointer",
154
+ display: "flex",
155
+ alignItems: "center",
156
+ justifyContent: "space-between",
157
+ gap: 8,
158
+ transition: "background 100ms ease",
159
+ }, children: [_jsx("span", { children: children }), isSelected && (_jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("path", { d: "M20 6L9 17l-5-5" }) }))] }));
160
+ }
161
+ export function SelectGroup({ label, children }) {
162
+ return (_jsxs("div", { children: [_jsx("div", { style: {
163
+ padding: "6px 12px 2px",
164
+ fontSize: "10px",
165
+ fontWeight: 600,
166
+ letterSpacing: "0.06em",
167
+ textTransform: "uppercase",
168
+ color: "var(--nx-text-4, #484F58)",
169
+ fontFamily: "var(--nx-font-sans, system-ui, sans-serif)",
170
+ }, children: label }), children] }));
171
+ }
172
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../src/select.tsx"],"names":[],"mappings":"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"}
package/dist/tabs.d.ts ADDED
@@ -0,0 +1,33 @@
1
+ import React, { type ReactNode, type CSSProperties } from "react";
2
+ interface TabsProps {
3
+ defaultValue?: string;
4
+ value?: string;
5
+ onChange?: (v: string) => void;
6
+ children?: ReactNode;
7
+ className?: string;
8
+ style?: CSSProperties;
9
+ }
10
+ export declare function Tabs({ defaultValue, value, onChange, children, className, style }: TabsProps): React.JSX.Element;
11
+ interface TabsListProps {
12
+ children?: ReactNode;
13
+ className?: string;
14
+ style?: CSSProperties;
15
+ }
16
+ export declare function TabsList({ children, className, style }: TabsListProps): React.JSX.Element;
17
+ interface TabsTriggerProps {
18
+ value: string;
19
+ children?: ReactNode;
20
+ disabled?: boolean;
21
+ className?: string;
22
+ style?: CSSProperties;
23
+ }
24
+ export declare function TabsTrigger({ value, children, disabled, className, style }: TabsTriggerProps): React.JSX.Element;
25
+ interface TabsContentProps {
26
+ value: string;
27
+ children?: ReactNode;
28
+ className?: string;
29
+ style?: CSSProperties;
30
+ }
31
+ export declare function TabsContent({ value, children, className, style }: TabsContentProps): React.JSX.Element | null;
32
+ export {};
33
+ //# sourceMappingURL=tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../src/tabs.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,EACd,KAAK,aAAa,EAEnB,MAAM,OAAO,CAAC;AAQf,UAAU,SAAS;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAS,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAM,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAM,SAAS,CAAC;IACzB,SAAS,CAAC,EAAK,MAAM,CAAC;IACtB,KAAK,CAAC,EAAS,aAAa,CAAC;CAC9B;AAED,wBAAgB,IAAI,CAAC,EAAE,YAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,qBAejG;AAED,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAG,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAM,aAAa,CAAC;CAC3B;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,qBAmBrE;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAO,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAG,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAG,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAM,aAAa,CAAC;CAC3B;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,gBAAgB,qBA0C5F;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAO,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAG,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAM,aAAa,CAAC;CAC3B;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,gBAAgB,4BAQlF"}
package/dist/tabs.js ADDED
@@ -0,0 +1,74 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ // @yugnex/nexui-react — Tabs
4
+ // Controlled and uncontrolled usage.
5
+ // Usage:
6
+ // <Tabs defaultValue="code">
7
+ // <TabsList>
8
+ // <TabsTrigger value="code">Code</TabsTrigger>
9
+ // <TabsTrigger value="preview">Preview</TabsTrigger>
10
+ // </TabsList>
11
+ // <TabsContent value="code"><CodeView /></TabsContent>
12
+ // <TabsContent value="preview"><Preview /></TabsContent>
13
+ // </Tabs>
14
+ import React, { createContext, useContext, useState, useCallback, } from "react";
15
+ const TabsContext = createContext({ active: "", setActive: () => { } });
16
+ export function Tabs({ defaultValue = "", value, onChange, children, className, style }) {
17
+ const [internal, setInternal] = useState(defaultValue);
18
+ const active = value !== undefined ? value : internal;
19
+ const setActive = useCallback((v) => {
20
+ setInternal(v);
21
+ onChange?.(v);
22
+ }, [onChange]);
23
+ return (_jsx(TabsContext.Provider, { value: { active, setActive }, children: _jsx("div", { className: className, style: { display: "flex", flexDirection: "column", ...style }, children: children }) }));
24
+ }
25
+ export function TabsList({ children, className, style }) {
26
+ return (_jsx("div", { role: "tablist", className: className, style: {
27
+ display: "flex",
28
+ alignItems: "center",
29
+ gap: 2,
30
+ borderBottom: "1px solid var(--nx-border, rgba(255,255,255,0.08))",
31
+ padding: "0 4px",
32
+ overflowX: "auto",
33
+ scrollbarWidth: "none",
34
+ ...style,
35
+ }, children: children }));
36
+ }
37
+ export function TabsTrigger({ value, children, disabled, className, style }) {
38
+ const { active, setActive } = useContext(TabsContext);
39
+ const isActive = active === value;
40
+ const handleKeyDown = (e) => {
41
+ if (e.key === "Enter" || e.key === " ") {
42
+ e.preventDefault();
43
+ setActive(value);
44
+ }
45
+ };
46
+ return (_jsx("button", { role: "tab", "aria-selected": isActive, tabIndex: isActive ? 0 : -1, disabled: disabled, className: className, onClick: () => !disabled && setActive(value), onKeyDown: handleKeyDown, style: {
47
+ display: "inline-flex",
48
+ alignItems: "center",
49
+ gap: 6,
50
+ padding: "8px 12px",
51
+ fontSize: "var(--nx-fs-sm, 12px)",
52
+ fontWeight: 500,
53
+ fontFamily: "var(--nx-font-sans, system-ui, sans-serif)",
54
+ color: isActive ? "var(--nx-text, #E6EDF3)" : "var(--nx-text-3, #6E7681)",
55
+ background: "transparent",
56
+ border: "none",
57
+ borderBottom: `2px solid ${isActive ? "var(--nx-accent, #E89010)" : "transparent"}`,
58
+ cursor: disabled ? "not-allowed" : "pointer",
59
+ opacity: disabled ? 0.4 : 1,
60
+ transition: "color 150ms ease, border-color 150ms ease",
61
+ whiteSpace: "nowrap",
62
+ marginBottom: -1,
63
+ outline: "none",
64
+ borderRadius: "4px 4px 0 0",
65
+ ...style,
66
+ }, children: children }));
67
+ }
68
+ export function TabsContent({ value, children, className, style }) {
69
+ const { active } = useContext(TabsContext);
70
+ if (active !== value)
71
+ return null;
72
+ return (_jsx("div", { role: "tabpanel", className: className, style: { flex: 1, ...style }, children: children }));
73
+ }
74
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../src/tabs.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import React, { type ReactNode } from "react";
2
+ export type ToastVariant = "default" | "success" | "error" | "warning" | "accent" | "live";
3
+ export interface ToastItem {
4
+ id: string;
5
+ message: ReactNode;
6
+ variant: ToastVariant;
7
+ duration: number;
8
+ createdAt: number;
9
+ }
10
+ export declare function ToastProvider({ children }: {
11
+ children: ReactNode;
12
+ }): React.JSX.Element;
13
+ export declare function useToast(): {
14
+ toast: ((msg: ReactNode, opts?: Partial<Pick<ToastItem, "variant" | "duration">>) => string) & {
15
+ success: (msg: ReactNode, opts?: Partial<Pick<ToastItem, "duration">>) => string;
16
+ error: (msg: ReactNode, opts?: Partial<Pick<ToastItem, "duration">>) => string;
17
+ warning: (msg: ReactNode, opts?: Partial<Pick<ToastItem, "duration">>) => string;
18
+ accent: (msg: ReactNode, opts?: Partial<Pick<ToastItem, "duration">>) => string;
19
+ live: (msg: ReactNode, opts?: Partial<Pick<ToastItem, "duration">>) => string;
20
+ dismiss: (id: string) => void;
21
+ };
22
+ };
23
+ export declare function Toaster(): React.JSX.Element;
24
+ //# sourceMappingURL=toast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../src/toast.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,EAQZ,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAEf,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3F,MAAM,WAAW,SAAS;IACxB,EAAE,EAAS,MAAM,CAAC;IAClB,OAAO,EAAI,SAAS,CAAC;IACrB,OAAO,EAAI,YAAY,CAAC;IACxB,QAAQ,EAAG,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAcD,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,qBA6BlE;AAED,wBAAgB,QAAQ;kBAIZ,SAAS,SAAS,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;uBAEvD,SAAS,SAAS,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;qBACtD,SAAS,SAAS,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;uBACtD,SAAS,SAAS,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;sBACtD,SAAS,SAAS,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oBACtD,SAAS,SAAS,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;sBAlD5D,MAAM,KAAK,IAAI;;EAuD/B;AA4DD,wBAAgB,OAAO,sBAwBtB"}
package/dist/toast.js ADDED
@@ -0,0 +1,111 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ // @yugnex/nexui-react — Toast / Toaster
4
+ // Zero external deps. React context-based queue.
5
+ //
6
+ // Setup (app/layout.tsx):
7
+ // <NexuiProvider><Toaster />{children}</NexuiProvider>
8
+ //
9
+ // Usage anywhere:
10
+ // const { toast } = useToast();
11
+ // toast.success("Saved!");
12
+ // toast.error("Something went wrong");
13
+ // toast("Custom message", { variant: "accent", duration: 5000 });
14
+ import React, { createContext, useCallback, useContext, useEffect, useId, useRef, useState, } from "react";
15
+ const ToastContext = createContext({
16
+ toasts: [],
17
+ add: () => "",
18
+ remove: () => { },
19
+ });
20
+ export function ToastProvider({ children }) {
21
+ const [toasts, setToasts] = useState([]);
22
+ const counter = useRef(0);
23
+ const remove = useCallback((id) => {
24
+ setToasts(prev => prev.filter(t => t.id !== id));
25
+ }, []);
26
+ const add = useCallback((message, opts) => {
27
+ const id = `nx-toast-${++counter.current}`;
28
+ const item = {
29
+ id,
30
+ message,
31
+ variant: opts?.variant ?? "default",
32
+ duration: opts?.duration ?? 4000,
33
+ createdAt: Date.now(),
34
+ };
35
+ setToasts(prev => [item, ...prev].slice(0, 5));
36
+ if (item.duration > 0) {
37
+ setTimeout(() => remove(id), item.duration);
38
+ }
39
+ return id;
40
+ }, [remove]);
41
+ return (_jsx(ToastContext.Provider, { value: { toasts, add, remove }, children: children }));
42
+ }
43
+ export function useToast() {
44
+ const { add, remove } = useContext(ToastContext);
45
+ return {
46
+ toast: Object.assign((msg, opts) => add(msg, opts), {
47
+ success: (msg, opts) => add(msg, { ...opts, variant: "success" }),
48
+ error: (msg, opts) => add(msg, { ...opts, variant: "error" }),
49
+ warning: (msg, opts) => add(msg, { ...opts, variant: "warning" }),
50
+ accent: (msg, opts) => add(msg, { ...opts, variant: "accent" }),
51
+ live: (msg, opts) => add(msg, { ...opts, variant: "live" }),
52
+ dismiss: remove,
53
+ }),
54
+ };
55
+ }
56
+ const VARIANT_STYLES = {
57
+ default: { borderColor: "var(--nx-border-strong, rgba(255,255,255,0.16))" },
58
+ success: { borderColor: "rgba(34,197,94,0.35)", color: "var(--nx-success, #22C55E)" },
59
+ error: { borderColor: "rgba(239,68,68,0.35)", color: "var(--nx-error, #EF4444)" },
60
+ warning: { borderColor: "rgba(234,179,8,0.35)", color: "var(--nx-warning, #EAB308)" },
61
+ accent: { borderColor: "var(--nx-accent-border, rgba(232,144,16,0.22))", color: "var(--nx-accent-text, #F5B342)" },
62
+ live: { borderColor: "var(--nx-live-border, rgba(15,212,198,0.22))", color: "var(--nx-live, #0FD4C6)" },
63
+ };
64
+ function ToastItem({ item, onClose }) {
65
+ const [visible, setVisible] = useState(false);
66
+ useEffect(() => { requestAnimationFrame(() => setVisible(true)); }, []);
67
+ return (_jsxs("div", { role: "alert", "aria-live": "polite", style: {
68
+ display: "flex",
69
+ alignItems: "flex-start",
70
+ justifyContent: "space-between",
71
+ gap: 12,
72
+ padding: "12px 16px",
73
+ background: "var(--nx-bg-elevated, #1C2128)",
74
+ border: "1px solid",
75
+ borderRadius: 8,
76
+ boxShadow: "0 10px 15px rgba(0,0,0,0.50), 0 4px 6px rgba(0,0,0,0.30)",
77
+ fontFamily: "var(--nx-font-sans, system-ui, sans-serif)",
78
+ fontSize: "var(--nx-fs-sm, 12px)",
79
+ color: "var(--nx-text, #E6EDF3)",
80
+ maxWidth: 380,
81
+ width: "100%",
82
+ transform: visible ? "translateY(0)" : "translateY(8px)",
83
+ opacity: visible ? 1 : 0,
84
+ transition: "transform 200ms ease, opacity 200ms ease",
85
+ ...VARIANT_STYLES[item.variant],
86
+ }, children: [_jsx("span", { style: { flex: 1, lineHeight: 1.5 }, children: item.message }), _jsx("button", { onClick: onClose, "aria-label": "Dismiss", style: {
87
+ background: "none",
88
+ border: "none",
89
+ color: "var(--nx-text-4, #484F58)",
90
+ cursor: "pointer",
91
+ fontSize: 14,
92
+ lineHeight: 1,
93
+ padding: 0,
94
+ flexShrink: 0,
95
+ marginTop: 1,
96
+ }, children: "\u2715" })] }));
97
+ }
98
+ export function Toaster() {
99
+ const { toasts, remove } = useContext(ToastContext);
100
+ return (_jsx("div", { "aria-label": "Notifications", style: {
101
+ position: "fixed",
102
+ bottom: 24,
103
+ right: 24,
104
+ zIndex: 300,
105
+ display: "flex",
106
+ flexDirection: "column",
107
+ gap: 8,
108
+ pointerEvents: "none",
109
+ }, children: toasts.map(t => (_jsx("div", { style: { pointerEvents: "auto" }, children: _jsx(ToastItem, { item: t, onClose: () => remove(t.id) }) }, t.id))) }));
110
+ }
111
+ //# sourceMappingURL=toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.js","sourceRoot":"","sources":["../src/toast.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import React, { type ReactNode } from "react";
2
+ type TooltipSide = "top" | "bottom" | "left" | "right";
3
+ interface TooltipProps {
4
+ content: ReactNode;
5
+ side?: TooltipSide;
6
+ delay?: number;
7
+ disabled?: boolean;
8
+ children: ReactNode;
9
+ }
10
+ export declare function Tooltip({ content, side, delay, disabled, children }: TooltipProps): React.JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../src/tooltip.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAIZ,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAEf,KAAK,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD,UAAU,YAAY;IACpB,OAAO,EAAI,SAAS,CAAC;IACrB,IAAI,CAAC,EAAM,WAAW,CAAC;IACvB,KAAK,CAAC,EAAK,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAG,SAAS,CAAC;CACtB;AASD,wBAAgB,OAAO,CAAC,EAAE,OAAO,EAAE,IAAY,EAAE,KAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,YAAY,qBA2D/F"}
@@ -0,0 +1,52 @@
1
+ "use client";
2
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ // @yugnex/nexui-react — Tooltip
4
+ // CSS-positioned, no portal. Shows on hover and focus.
5
+ // Usage: <Tooltip content="Copy to clipboard"><Button>Copy</Button></Tooltip>
6
+ import React, { useState, useRef, useCallback, } from "react";
7
+ const SIDE_STYLES = {
8
+ top: { bottom: "calc(100% + 6px)", left: "50%", transform: "translateX(-50%)" },
9
+ bottom: { top: "calc(100% + 6px)", left: "50%", transform: "translateX(-50%)" },
10
+ left: { right: "calc(100% + 6px)", top: "50%", transform: "translateY(-50%)" },
11
+ right: { left: "calc(100% + 6px)", top: "50%", transform: "translateY(-50%)" },
12
+ };
13
+ export function Tooltip({ content, side = "top", delay = 400, disabled, children }) {
14
+ const [visible, setVisible] = useState(false);
15
+ const [animated, setAnimated] = useState(false);
16
+ const showTimer = useRef();
17
+ const hideTimer = useRef();
18
+ const show = useCallback(() => {
19
+ clearTimeout(hideTimer.current);
20
+ showTimer.current = setTimeout(() => {
21
+ setVisible(true);
22
+ requestAnimationFrame(() => setAnimated(true));
23
+ }, delay);
24
+ }, [delay]);
25
+ const hide = useCallback(() => {
26
+ clearTimeout(showTimer.current);
27
+ setAnimated(false);
28
+ hideTimer.current = setTimeout(() => setVisible(false), 150);
29
+ }, []);
30
+ if (disabled)
31
+ return _jsx(_Fragment, { children: children });
32
+ return (_jsxs("span", { style: { position: "relative", display: "inline-flex" }, onMouseEnter: show, onMouseLeave: hide, onFocus: show, onBlur: hide, children: [children, visible && (_jsx("span", { role: "tooltip", style: {
33
+ position: "absolute",
34
+ zIndex: 400,
35
+ background: "var(--nx-bg-overlay, #21262D)",
36
+ border: "1px solid var(--nx-border-strong, rgba(255,255,255,0.16))",
37
+ borderRadius: 6,
38
+ padding: "5px 10px",
39
+ fontSize: "var(--nx-fs-xs, 11px)",
40
+ fontFamily: "var(--nx-font-sans, system-ui, sans-serif)",
41
+ fontWeight: 400,
42
+ color: "var(--nx-text, #E6EDF3)",
43
+ whiteSpace: "nowrap",
44
+ boxShadow: "0 4px 6px rgba(0,0,0,0.40)",
45
+ pointerEvents: "none",
46
+ opacity: animated ? 1 : 0,
47
+ transform: `${SIDE_STYLES[side].transform ?? ""} scale(${animated ? 1 : 0.95})`,
48
+ transition: "opacity 150ms ease, transform 150ms ease",
49
+ ...SIDE_STYLES[side],
50
+ }, children: content }))] }));
51
+ }
52
+ //# sourceMappingURL=tooltip.js.map