@hex-core/components 1.5.0 → 1.7.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.
@@ -0,0 +1,3 @@
1
+ export { LoadingProps_alias_1 as LoadingProps } from './_tsup-dts-rollup.js';
2
+ export { Loading_alias_1 as Loading } from './_tsup-dts-rollup.js';
3
+ export { loadingVariants_alias_1 as loadingVariants } from './_tsup-dts-rollup.js';
@@ -0,0 +1,80 @@
1
+ import { cva } from 'class-variance-authority';
2
+ import { clsx } from 'clsx';
3
+ import { twMerge } from 'tailwind-merge';
4
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
5
+
6
+ // src/primitives/loading/loading.tsx
7
+ function cn(...inputs) {
8
+ return twMerge(clsx(inputs));
9
+ }
10
+ function Skeleton({ className, ...props }) {
11
+ return /* @__PURE__ */ jsx(
12
+ "div",
13
+ {
14
+ className: cn("animate-pulse rounded-md border border-foreground/[0.06] bg-muted", className),
15
+ ...props
16
+ }
17
+ );
18
+ }
19
+ var loadingVariants = cva("flex w-full", {
20
+ variants: {
21
+ variant: {
22
+ list: "flex-col gap-[var(--space-3,0.75rem)]",
23
+ card: "flex-col gap-[var(--space-2,0.5rem)] rounded-md border border-border bg-card p-[var(--space-4,1rem)]",
24
+ stack: "flex-col gap-[var(--space-4,1rem)]"
25
+ }
26
+ },
27
+ defaultVariants: { variant: "list" }
28
+ });
29
+ function Loading({
30
+ className,
31
+ variant = "list",
32
+ rows = 3,
33
+ label = "Loading\u2026",
34
+ ref,
35
+ ...props
36
+ }) {
37
+ return /* @__PURE__ */ jsxs(
38
+ "div",
39
+ {
40
+ ref,
41
+ role: "status",
42
+ "aria-live": "polite",
43
+ className: cn(loadingVariants({ variant }), className),
44
+ ...props,
45
+ children: [
46
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: label }),
47
+ Array.from({ length: rows }, (_, i) => (
48
+ // `variant` can be `null` per CVA's VariantProps shape — the
49
+ // destructured default only catches undefined. The fallback
50
+ // here narrows to the LoadingRow's "list" | "card" | "stack"
51
+ // signature.
52
+ /* @__PURE__ */ jsx(LoadingRow, { variant: variant ?? "list" }, i)
53
+ ))
54
+ ]
55
+ }
56
+ );
57
+ }
58
+ function LoadingRow({ variant }) {
59
+ if (variant === "card") {
60
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
61
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-3/4" }),
62
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-full" }),
63
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-5/6" })
64
+ ] });
65
+ }
66
+ if (variant === "stack") {
67
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-[var(--space-3,0.75rem)]", children: [
68
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-10 shrink-0 rounded-full" }),
69
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col gap-[var(--space-2,0.5rem)]", children: [
70
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-1/3" }),
71
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-2/3" })
72
+ ] })
73
+ ] });
74
+ }
75
+ return /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full" });
76
+ }
77
+
78
+ export { Loading, loadingVariants };
79
+ //# sourceMappingURL=loading.js.map
80
+ //# sourceMappingURL=loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/primitives/skeleton/skeleton.tsx","../src/primitives/loading/loading.tsx"],"names":["jsx"],"mappings":";;;;;;AAQO,SAAS,MAAM,MAAA,EAAsB;AAC3C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC5B;ACFA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyC;AAChF,EAAA,uBACC,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,mEAAA,EAAqE,SAAS,CAAA;AAAA,MAC3F,GAAG;AAAA;AAAA,GACL;AAEF;ACVA,IAAM,eAAA,GAAkB,IAAI,aAAA,EAAe;AAAA,EAC1C,QAAA,EAAU;AAAA,IACT,OAAA,EAAS;AAAA,MACR,IAAA,EAAM,uCAAA;AAAA,MACN,IAAA,EAAM,sGAAA;AAAA,MACN,KAAA,EAAO;AAAA;AACR,GACD;AAAA,EACA,eAAA,EAAiB,EAAE,OAAA,EAAS,MAAA;AAC7B,CAAC;AAsCD,SAAS,OAAA,CAAQ;AAAA,EAChB,SAAA;AAAA,EACA,OAAA,GAAU,MAAA;AAAA,EACV,IAAA,GAAO,CAAA;AAAA,EACP,KAAA,GAAQ,eAAA;AAAA,EACR,GAAA;AAAA,EACA,GAAG;AACJ,CAAA,EAAiB;AAChB,EAAA,uBACC,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,WAAA,EAAU,QAAA;AAAA,MACV,WAAW,EAAA,CAAG,eAAA,CAAgB,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MACpD,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QAChC,MAAM,IAAA,CAAK,EAAE,QAAQ,IAAA,EAAK,EAAG,CAAC,CAAA,EAAG,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAKjCA,GAAAA,CAAC,UAAA,EAAA,EAAmB,OAAA,EAAS,OAAA,IAAW,UAAvB,CAA+B;AAAA,SAChD;AAAA;AAAA;AAAA,GACF;AAEF;AAOA,SAAS,UAAA,CAAW,EAAE,OAAA,EAAQ,EAA2C;AACxE,EAAA,IAAI,YAAY,MAAA,EAAQ;AACvB,IAAA,uBACC,IAAA,CAAA,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,WAAA,EAAY,CAAA;AAAA,sBAChCA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,YAAA,EAAa,CAAA;AAAA,sBACjCA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,WAAA,EAAY;AAAA,KAAA,EACjC,CAAA;AAAA,EAEF;AACA,EAAA,IAAI,YAAY,OAAA,EAAS;AACxB,IAAA,uBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EACd,QAAA,EAAA;AAAA,sBAAAA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,iCAAA,EAAkC,CAAA;AAAA,sBACtD,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACd,QAAA,EAAA;AAAA,wBAAAA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,WAAA,EAAY,CAAA;AAAA,wBAChCA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,WAAA,EAAY;AAAA,OAAA,EACjC;AAAA,KAAA,EACD,CAAA;AAAA,EAEF;AAEA,EAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,YAAA,EAAa,CAAA;AACzC","file":"loading.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merge class names with Tailwind CSS conflict resolution.\n * @param inputs - Class values (strings, arrays, objects) to merge\n * @returns A single merged class string with Tailwind conflicts resolved\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils.js\";\n\n/**\n * A placeholder shimmer element shown while content is loading.\n * Pair with explicit width/height via className.\n * @returns A div with pulsing muted background\n */\nfunction Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"animate-pulse rounded-md border border-foreground/[0.06] bg-muted\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Skeleton };\n","import { type VariantProps, cva } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils.js\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\n\nconst loadingVariants = cva(\"flex w-full\", {\n\tvariants: {\n\t\tvariant: {\n\t\t\tlist: \"flex-col gap-[var(--space-3,0.75rem)]\",\n\t\t\tcard: \"flex-col gap-[var(--space-2,0.5rem)] rounded-md border border-border bg-card p-[var(--space-4,1rem)]\",\n\t\t\tstack: \"flex-col gap-[var(--space-4,1rem)]\",\n\t\t},\n\t},\n\tdefaultVariants: { variant: \"list\" },\n});\n\nexport interface LoadingProps\n\textends Omit<React.HTMLAttributes<HTMLDivElement>, \"role\">,\n\t\tVariantProps<typeof loadingVariants> {\n\t/** Forwarded ref onto the status region. */\n\tref?: React.Ref<HTMLDivElement>;\n\t/**\n\t * Number of placeholder rows to render. Each row may contain multiple\n\t * Skeleton elements depending on `variant` — `list` emits 1 Skeleton\n\t * per row; `card` emits 3 (heading + 2 body lines); `stack` emits 3\n\t * (avatar + 2 text lines). Default 3.\n\t */\n\trows?: number;\n\t/** Optional sr-only label that screen readers announce. Default \"Loading…\". */\n\tlabel?: string;\n}\n\n/**\n * A composed loading-placeholder pattern for lists, cards, and stacks.\n * Renders N {@link Skeleton} rows pre-arranged for the chosen layout —\n * Skeleton is the atom (one shaped pulse), Loading is the molecule\n * (the canonical pattern most surfaces want).\n *\n * Distinct from {@link Empty} (request returned, no items) and\n * {@link ErrorState} (request failed). If you need a single shaped\n * pulse for a specific element (an avatar circle, a heading line),\n * reach for `Skeleton` directly. If the wait has a measurable\n * percent-done, reach for `Progress` instead.\n *\n * @example\n * ```tsx\n * <Loading rows={5} variant=\"list\" />\n * ```\n *\n * @returns A `role=\"status\"` region with `aria-live=\"polite\"` and the\n * announced label (default \"Loading…\") rendered sr-only.\n */\nfunction Loading({\n\tclassName,\n\tvariant = \"list\",\n\trows = 3,\n\tlabel = \"Loading…\",\n\tref,\n\t...props\n}: LoadingProps) {\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\trole=\"status\"\n\t\t\taria-live=\"polite\"\n\t\t\tclassName={cn(loadingVariants({ variant }), className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"sr-only\">{label}</span>\n\t\t\t{Array.from({ length: rows }, (_, i) => (\n\t\t\t\t// `variant` can be `null` per CVA's VariantProps shape — the\n\t\t\t\t// destructured default only catches undefined. The fallback\n\t\t\t\t// here narrows to the LoadingRow's \"list\" | \"card\" | \"stack\"\n\t\t\t\t// signature.\n\t\t\t\t<LoadingRow key={i} variant={variant ?? \"list\"} />\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\n/**\n * One placeholder row inside `Loading`. Layout-specific shape per variant.\n *\n * @param variant - Layout family the row belongs to (`list` / `card` / `stack`).\n */\nfunction LoadingRow({ variant }: { variant: \"list\" | \"card\" | \"stack\" }) {\n\tif (variant === \"card\") {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Skeleton className=\"h-4 w-3/4\" />\n\t\t\t\t<Skeleton className=\"h-3 w-full\" />\n\t\t\t\t<Skeleton className=\"h-3 w-5/6\" />\n\t\t\t</>\n\t\t);\n\t}\n\tif (variant === \"stack\") {\n\t\treturn (\n\t\t\t<div className=\"flex items-center gap-[var(--space-3,0.75rem)]\">\n\t\t\t\t<Skeleton className=\"h-10 w-10 shrink-0 rounded-full\" />\n\t\t\t\t<div className=\"flex flex-1 flex-col gap-[var(--space-2,0.5rem)]\">\n\t\t\t\t\t<Skeleton className=\"h-4 w-1/3\" />\n\t\t\t\t\t<Skeleton className=\"h-3 w-2/3\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\t// list (default)\n\treturn <Skeleton className=\"h-4 w-full\" />;\n}\n\nexport { Loading, loadingVariants };\n"]}
package/dist/schemas.d.ts CHANGED
@@ -57,6 +57,13 @@ export { sheetSchema } from './_tsup-dts-rollup.js';
57
57
  export { drawerSchema } from './_tsup-dts-rollup.js';
58
58
  export { resizableSchema } from './_tsup-dts-rollup.js';
59
59
  export { sidebarSchema } from './_tsup-dts-rollup.js';
60
+ export { emptySchema } from './_tsup-dts-rollup.js';
61
+ export { loadingSchema } from './_tsup-dts-rollup.js';
62
+ export { errorStateSchema } from './_tsup-dts-rollup.js';
63
+ export { tagSchema } from './_tsup-dts-rollup.js';
64
+ export { treeSchema } from './_tsup-dts-rollup.js';
65
+ export { toolbarSchema } from './_tsup-dts-rollup.js';
66
+ export { attachmentSchema } from './_tsup-dts-rollup.js';
60
67
  export { Role_alias_1 as Role } from './_tsup-dts-rollup.js';
61
68
  export { ToolCallState_alias_1 as ToolCallState } from './_tsup-dts-rollup.js';
62
69
  export { messageSchema } from './_tsup-dts-rollup.js';