@abumble/design-system 0.0.26 → 0.0.28

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 (114) hide show
  1. package/dist/components/ActionsPopover/ActionsPopover.d.ts +15 -0
  2. package/dist/components/ActionsPopover/ActionsPopover.d.ts.map +1 -0
  3. package/dist/components/ActionsPopover/index.d.ts +2 -0
  4. package/dist/components/ActionsPopover/index.d.ts.map +1 -0
  5. package/dist/components/ActionsPopover.js +46 -0
  6. package/dist/components/ActionsPopover.js.map +1 -0
  7. package/dist/components/BackLink/BackLink.d.ts +22 -0
  8. package/dist/components/BackLink/BackLink.d.ts.map +1 -0
  9. package/dist/components/BackLink/index.d.ts +2 -0
  10. package/dist/components/BackLink/index.d.ts.map +1 -0
  11. package/dist/components/BackLink.js +5 -0
  12. package/dist/components/BackLink.js.map +1 -0
  13. package/dist/components/Badge/Badge.d.ts +7 -0
  14. package/dist/components/Badge/Badge.d.ts.map +1 -0
  15. package/dist/components/Badge/index.d.ts +2 -0
  16. package/dist/components/Badge/index.d.ts.map +1 -0
  17. package/dist/components/Badge.js +39 -0
  18. package/dist/components/Badge.js.map +1 -0
  19. package/dist/components/BannerHeader/BannerHeader.d.ts +38 -0
  20. package/dist/components/BannerHeader/BannerHeader.d.ts.map +1 -0
  21. package/dist/components/BannerHeader/index.d.ts +2 -0
  22. package/dist/components/BannerHeader/index.d.ts.map +1 -0
  23. package/dist/components/BannerHeader.js +41 -0
  24. package/dist/components/BannerHeader.js.map +1 -0
  25. package/dist/components/Breadcrumb.js +7 -100
  26. package/dist/components/Breadcrumb.js.map +1 -1
  27. package/dist/components/Checkbox/Checkbox.d.ts +4 -0
  28. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  29. package/dist/components/Checkbox/index.d.ts +2 -0
  30. package/dist/components/Checkbox/index.d.ts.map +1 -0
  31. package/dist/components/Checkbox.js +38 -0
  32. package/dist/components/Checkbox.js.map +1 -0
  33. package/dist/components/ConfirmDeleteDialog/ConfirmDeleteDialog.d.ts +11 -0
  34. package/dist/components/ConfirmDeleteDialog/ConfirmDeleteDialog.d.ts.map +1 -0
  35. package/dist/components/ConfirmDeleteDialog/index.d.ts +2 -0
  36. package/dist/components/ConfirmDeleteDialog/index.d.ts.map +1 -0
  37. package/dist/components/ConfirmDeleteDialog.js +34 -0
  38. package/dist/components/ConfirmDeleteDialog.js.map +1 -0
  39. package/dist/components/DelayedLoadingFallback/DelayedLoadingFallback.d.ts +17 -0
  40. package/dist/components/DelayedLoadingFallback/DelayedLoadingFallback.d.ts.map +1 -0
  41. package/dist/components/DelayedLoadingFallback/index.d.ts +2 -0
  42. package/dist/components/DelayedLoadingFallback/index.d.ts.map +1 -0
  43. package/dist/components/DelayedLoadingFallback.js +15 -0
  44. package/dist/components/DelayedLoadingFallback.js.map +1 -0
  45. package/dist/components/Dialog/Dialog.d.ts +45 -0
  46. package/dist/components/Dialog/Dialog.d.ts.map +1 -0
  47. package/dist/components/Dialog/index.d.ts +2 -0
  48. package/dist/components/Dialog/index.d.ts.map +1 -0
  49. package/dist/components/Dialog.js +17 -0
  50. package/dist/components/Dialog.js.map +1 -0
  51. package/dist/components/FieldsTable/FieldsTable.d.ts +12 -0
  52. package/dist/components/FieldsTable/FieldsTable.d.ts.map +1 -0
  53. package/dist/components/FieldsTable/index.d.ts +2 -0
  54. package/dist/components/FieldsTable/index.d.ts.map +1 -0
  55. package/dist/components/FieldsTable.js +42 -0
  56. package/dist/components/FieldsTable.js.map +1 -0
  57. package/dist/components/Label/Label.d.ts +4 -0
  58. package/dist/components/Label/Label.d.ts.map +1 -0
  59. package/dist/components/Label/index.d.ts +2 -0
  60. package/dist/components/Label/index.d.ts.map +1 -0
  61. package/dist/components/Label.js +24 -0
  62. package/dist/components/Label.js.map +1 -0
  63. package/dist/components/PageHeader/PageHeader.d.ts +12 -0
  64. package/dist/components/PageHeader/PageHeader.d.ts.map +1 -0
  65. package/dist/components/PageHeader/index.d.ts +2 -0
  66. package/dist/components/PageHeader/index.d.ts.map +1 -0
  67. package/dist/components/PageHeader.js +6 -0
  68. package/dist/components/PageHeader.js.map +1 -0
  69. package/dist/components/Popover.js +5 -43
  70. package/dist/components/Popover.js.map +1 -1
  71. package/dist/components/Select/Select.d.ts +6 -0
  72. package/dist/components/Select/Select.d.ts.map +1 -0
  73. package/dist/components/Select/index.d.ts +2 -0
  74. package/dist/components/Select/index.d.ts.map +1 -0
  75. package/dist/components/Select.js +27 -0
  76. package/dist/components/Select.js.map +1 -0
  77. package/dist/components/Table/Table.d.ts +10 -0
  78. package/dist/components/Table/Table.d.ts.map +1 -0
  79. package/dist/components/Table/index.d.ts +2 -0
  80. package/dist/components/Table/index.d.ts.map +1 -0
  81. package/dist/components/Table.js +125 -0
  82. package/dist/components/Table.js.map +1 -0
  83. package/dist/components/Textarea/Textarea.d.ts +3 -0
  84. package/dist/components/Textarea/Textarea.d.ts.map +1 -0
  85. package/dist/components/Textarea/index.d.ts +2 -0
  86. package/dist/components/Textarea/index.d.ts.map +1 -0
  87. package/dist/components/Textarea.js +23 -0
  88. package/dist/components/Textarea.js.map +1 -0
  89. package/dist/components/Toaster/Toaster.d.ts +7 -0
  90. package/dist/components/Toaster/Toaster.d.ts.map +1 -0
  91. package/dist/components/Toaster/index.d.ts +2 -0
  92. package/dist/components/Toaster/index.d.ts.map +1 -0
  93. package/dist/components/Toaster.js +26 -0
  94. package/dist/components/Toaster.js.map +1 -0
  95. package/dist/hooks/use-delayed-loading/index.d.ts +2 -0
  96. package/dist/hooks/use-delayed-loading/index.d.ts.map +1 -0
  97. package/dist/hooks/use-delayed-loading/use-delayed-loading.d.ts +7 -0
  98. package/dist/hooks/use-delayed-loading/use-delayed-loading.d.ts.map +1 -0
  99. package/dist/hooks/use-delayed-loading.js +5 -0
  100. package/dist/hooks/use-delayed-loading.js.map +1 -0
  101. package/dist/shared/BackLink.js +42 -0
  102. package/dist/shared/BackLink.js.map +1 -0
  103. package/dist/shared/Breadcrumb.js +104 -0
  104. package/dist/shared/Breadcrumb.js.map +1 -0
  105. package/dist/shared/Dialog.js +225 -0
  106. package/dist/shared/Dialog.js.map +1 -0
  107. package/dist/shared/PageHeader.js +59 -0
  108. package/dist/shared/PageHeader.js.map +1 -0
  109. package/dist/shared/Popover.js +46 -0
  110. package/dist/shared/Popover.js.map +1 -0
  111. package/dist/shared/use-delayed-loading.js +16 -0
  112. package/dist/shared/use-delayed-loading.js.map +1 -0
  113. package/package.json +68 -1
  114. package/src/styles.css +9 -0
@@ -0,0 +1,2 @@
1
+ export { useDelayedLoading } from './use-delayed-loading';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-delayed-loading/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Returns true only after `loading` has been true for at least `delayMs`.
3
+ * When `loading` goes false, the returned value goes false immediately (no delay on hide).
4
+ * Avoids flashing skeletons/spinners on fast navigations or cached data.
5
+ */
6
+ export declare function useDelayedLoading(loading: boolean, delayMs?: number): boolean;
7
+ //# sourceMappingURL=use-delayed-loading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-delayed-loading.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-delayed-loading/use-delayed-loading.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,MAAY,GACnB,OAAO,CAaT"}
@@ -0,0 +1,5 @@
1
+ import { u as o } from "../shared/use-delayed-loading.js";
2
+ export {
3
+ o as useDelayedLoading
4
+ };
5
+ //# sourceMappingURL=use-delayed-loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-delayed-loading.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,42 @@
1
+ import { jsxs as d, jsx as t, Fragment as f } from "react/jsx-runtime";
2
+ import { c as h } from "./utils.js";
3
+ import { ChevronLeft as k } from "lucide-react";
4
+ import * as s from "react";
5
+ const o = (e) => /* @__PURE__ */ d(f, { children: [
6
+ /* @__PURE__ */ t(k, { className: "size-4 shrink-0", "aria-hidden": !0 }),
7
+ /* @__PURE__ */ t("span", { children: e })
8
+ ] });
9
+ function g({
10
+ label: e,
11
+ asChild: a = !1,
12
+ className: i,
13
+ children: c,
14
+ ...n
15
+ }) {
16
+ const r = h(
17
+ "inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground",
18
+ i
19
+ );
20
+ if (a) {
21
+ const l = s.Children.only(c), m = {
22
+ "data-slot": "back-link",
23
+ className: r,
24
+ ...n,
25
+ children: o(e)
26
+ };
27
+ return s.cloneElement(l, m);
28
+ }
29
+ return /* @__PURE__ */ t(
30
+ "a",
31
+ {
32
+ "data-slot": "back-link",
33
+ className: r,
34
+ ...n,
35
+ children: o(e)
36
+ }
37
+ );
38
+ }
39
+ export {
40
+ g as B
41
+ };
42
+ //# sourceMappingURL=BackLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackLink.js","sources":["../../src/components/BackLink/BackLink.tsx"],"sourcesContent":["import { cn } from '@/utils'\nimport { ChevronLeft } from 'lucide-react'\nimport * as React from 'react'\n\nexport interface BackLinkProps extends React.ComponentProps<'a'> {\n\t/** Link text, e.g. \"Back to properties\". */\n\tlabel: string\n\t/** If true, renders the provided child element as the link. Use with router Link components. */\n\tasChild?: boolean\n}\n\nconst slotContent = (label: string) => (\n\t<>\n\t\t<ChevronLeft className=\"size-4 shrink-0\" aria-hidden />\n\t\t<span>{label}</span>\n\t</>\n)\n\n/**\n * Back link with chevron icon. Router-agnostic via asChild pattern.\n *\n * @example\n * // With TanStack Router:\n * <BackLink asChild label=\"Back to properties\">\n * <Link to=\"..\" replace />\n * </BackLink>\n *\n * @example\n * // Plain link:\n * <BackLink href=\"/properties\" label=\"Back to properties\" />\n */\nexport function BackLink({\n\tlabel,\n\tasChild = false,\n\tclassName,\n\tchildren,\n\t...props\n}: BackLinkProps) {\n\tconst slotClassName = cn(\n\t\t'inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground',\n\t\tclassName,\n\t)\n\n\tif (asChild) {\n\t\tconst child = React.Children.only(children) as React.ReactElement\n\t\tconst mergedProps = {\n\t\t\t'data-slot': 'back-link',\n\t\t\tclassName: slotClassName,\n\t\t\t...props,\n\t\t\tchildren: slotContent(label),\n\t\t}\n\t\treturn React.cloneElement(child, mergedProps)\n\t}\n\n\treturn (\n\t\t<a\n\t\t\tdata-slot=\"back-link\"\n\t\t\tclassName={slotClassName}\n\t\t\t{...props}\n\t\t>\n\t\t\t{slotContent(label)}\n\t\t</a>\n\t)\n}\n"],"names":["slotContent","label","jsxs","Fragment","jsx","ChevronLeft","BackLink","asChild","className","children","props","slotClassName","cn","child","React","mergedProps"],"mappings":";;;;AAWA,MAAMA,IAAc,CAACC,MACpB,gBAAAC,EAAAC,GAAA,EACC,UAAA;AAAA,EAAA,gBAAAC,EAACC,GAAA,EAAY,WAAU,mBAAkB,eAAW,IAAC;AAAA,EACrD,gBAAAD,EAAC,UAAM,UAAAH,EAAA,CAAM;AAAA,GACd;AAgBM,SAASK,EAAS;AAAA,EACxB,OAAAL;AAAA,EACA,SAAAM,IAAU;AAAA,EACV,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACJ,GAAkB;AACjB,QAAMC,IAAgBC;AAAA,IACrB;AAAA,IACAJ;AAAA,EAAA;AAGD,MAAID,GAAS;AACZ,UAAMM,IAAQC,EAAM,SAAS,KAAKL,CAAQ,GACpCM,IAAc;AAAA,MACnB,aAAa;AAAA,MACb,WAAWJ;AAAA,MACX,GAAGD;AAAA,MACH,UAAUV,EAAYC,CAAK;AAAA,IAAA;AAE5B,WAAOa,EAAM,aAAaD,GAAOE,CAAW;AAAA,EAC7C;AAEA,SACC,gBAAAX;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAWO;AAAA,MACV,GAAGD;AAAA,MAEH,YAAYT,CAAK;AAAA,IAAA;AAAA,EAAA;AAGrB;"}
@@ -0,0 +1,104 @@
1
+ import { jsx as a, jsxs as n } from "react/jsx-runtime";
2
+ import { Slot as o } from "@radix-ui/react-slot";
3
+ import { MoreHorizontal as i, ChevronRight as l } from "lucide-react";
4
+ import "react";
5
+ import { c as t } from "./utils.js";
6
+ function f({ ...r }) {
7
+ return /* @__PURE__ */ a("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...r });
8
+ }
9
+ function g({ className: r, ...e }) {
10
+ return /* @__PURE__ */ a(
11
+ "ol",
12
+ {
13
+ "data-slot": "breadcrumb-list",
14
+ className: t(
15
+ "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",
16
+ r
17
+ ),
18
+ ...e
19
+ }
20
+ );
21
+ }
22
+ function x({ className: r, ...e }) {
23
+ return /* @__PURE__ */ a(
24
+ "li",
25
+ {
26
+ "data-slot": "breadcrumb-item",
27
+ className: t("inline-flex items-center gap-1.5", r),
28
+ ...e
29
+ }
30
+ );
31
+ }
32
+ function h({
33
+ asChild: r,
34
+ className: e,
35
+ ...s
36
+ }) {
37
+ return /* @__PURE__ */ a(
38
+ r ? o : "a",
39
+ {
40
+ "data-slot": "breadcrumb-link",
41
+ className: t("hover:text-foreground transition-colors", e),
42
+ ...s
43
+ }
44
+ );
45
+ }
46
+ function B({ className: r, ...e }) {
47
+ return /* @__PURE__ */ a(
48
+ "span",
49
+ {
50
+ "data-slot": "breadcrumb-page",
51
+ role: "link",
52
+ "aria-disabled": "true",
53
+ "aria-current": "page",
54
+ className: t("text-foreground font-normal", r),
55
+ ...e
56
+ }
57
+ );
58
+ }
59
+ function N({
60
+ children: r,
61
+ className: e,
62
+ ...s
63
+ }) {
64
+ return /* @__PURE__ */ a(
65
+ "li",
66
+ {
67
+ "data-slot": "breadcrumb-separator",
68
+ role: "presentation",
69
+ "aria-hidden": "true",
70
+ className: t("[&>svg]:size-3.5", e),
71
+ ...s,
72
+ children: r ?? /* @__PURE__ */ a(l, {})
73
+ }
74
+ );
75
+ }
76
+ function k({
77
+ className: r,
78
+ ...e
79
+ }) {
80
+ return /* @__PURE__ */ n(
81
+ "span",
82
+ {
83
+ "data-slot": "breadcrumb-ellipsis",
84
+ role: "presentation",
85
+ "aria-hidden": "true",
86
+ className: t("flex size-9 items-center justify-center", r),
87
+ ...e,
88
+ children: [
89
+ /* @__PURE__ */ a(i, { className: "size-4" }),
90
+ /* @__PURE__ */ a("span", { className: "sr-only", children: "More" })
91
+ ]
92
+ }
93
+ );
94
+ }
95
+ export {
96
+ f as B,
97
+ k as a,
98
+ x as b,
99
+ h as c,
100
+ g as d,
101
+ B as e,
102
+ N as f
103
+ };
104
+ //# sourceMappingURL=Breadcrumb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumb.js","sources":["../../src/components/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\"\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"@/utils\"\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\n\treturn <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n\treturn (\n\t\t<ol\n\t\t\tdata-slot=\"breadcrumb-list\"\n\t\t\tclassName={cn(\n\t\t\t\t\"text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n\treturn (\n\t\t<li\n\t\t\tdata-slot=\"breadcrumb-item\"\n\t\t\tclassName={cn(\"inline-flex items-center gap-1.5\", className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nfunction BreadcrumbLink({\n\tasChild,\n\tclassName,\n\t...props\n}: React.ComponentProps<\"a\"> & {\n\tasChild?: boolean\n}) {\n\tconst Comp = asChild ? Slot : \"a\"\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"breadcrumb-link\"\n\t\t\tclassName={cn(\"hover:text-foreground transition-colors\", className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"breadcrumb-page\"\n\t\t\trole=\"link\"\n\t\t\taria-disabled=\"true\"\n\t\t\taria-current=\"page\"\n\t\t\tclassName={cn(\"text-foreground font-normal\", className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nfunction BreadcrumbSeparator({\n\tchildren,\n\tclassName,\n\t...props\n}: React.ComponentProps<\"li\">) {\n\treturn (\n\t\t<li\n\t\t\tdata-slot=\"breadcrumb-separator\"\n\t\t\trole=\"presentation\"\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={cn(\"[&>svg]:size-3.5\", className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children ?? <ChevronRight />}\n\t\t</li>\n\t)\n}\n\nfunction BreadcrumbEllipsis({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"span\">) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"breadcrumb-ellipsis\"\n\t\t\trole=\"presentation\"\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={cn(\"flex size-9 items-center justify-center\", className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<MoreHorizontal className=\"size-4\" />\n\t\t\t<span className=\"sr-only\">More</span>\n\t\t</span>\n\t)\n}\n\nexport {\n\tBreadcrumb, BreadcrumbEllipsis, BreadcrumbItem,\n\tBreadcrumbLink, BreadcrumbList, BreadcrumbPage,\n\tBreadcrumbSeparator\n}\n\n"],"names":["Breadcrumb","props","BreadcrumbList","className","jsx","cn","BreadcrumbItem","BreadcrumbLink","asChild","Slot","BreadcrumbPage","BreadcrumbSeparator","children","ChevronRight","BreadcrumbEllipsis","jsxs","MoreHorizontal"],"mappings":";;;;;AAMA,SAASA,EAAW,EAAE,GAAGC,KAAsC;AAC9D,2BAAQ,OAAA,EAAI,cAAW,cAAa,aAAU,cAAc,GAAGA,GAAO;AACvE;AAEA,SAASC,EAAe,EAAE,WAAAC,GAAW,GAAGF,KAAqC;AAC5E,SACC,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAWC;AAAA,QACV;AAAA,QACAF;AAAA,MAAA;AAAA,MAEA,GAAGF;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAASK,EAAe,EAAE,WAAAH,GAAW,GAAGF,KAAqC;AAC5E,SACC,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAWC,EAAG,oCAAoCF,CAAS;AAAA,MAC1D,GAAGF;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAASM,EAAe;AAAA,EACvB,SAAAC;AAAA,EACA,WAAAL;AAAA,EACA,GAAGF;AACJ,GAEG;AAGF,SACC,gBAAAG;AAAA,IAHYI,IAAUC,IAAO;AAAA,IAG5B;AAAA,MACA,aAAU;AAAA,MACV,WAAWJ,EAAG,2CAA2CF,CAAS;AAAA,MACjE,GAAGF;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAASS,EAAe,EAAE,WAAAP,GAAW,GAAGF,KAAuC;AAC9E,SACC,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,aAAU;AAAA,MACV,MAAK;AAAA,MACL,iBAAc;AAAA,MACd,gBAAa;AAAA,MACb,WAAWC,EAAG,+BAA+BF,CAAS;AAAA,MACrD,GAAGF;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAASU,EAAoB;AAAA,EAC5B,UAAAC;AAAA,EACA,WAAAT;AAAA,EACA,GAAGF;AACJ,GAA+B;AAC9B,SACC,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,aAAU;AAAA,MACV,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,WAAWC,EAAG,oBAAoBF,CAAS;AAAA,MAC1C,GAAGF;AAAA,MAEH,UAAAW,uBAAaC,GAAA,CAAA,CAAa;AAAA,IAAA;AAAA,EAAA;AAG9B;AAEA,SAASC,EAAmB;AAAA,EAC3B,WAAAX;AAAA,EACA,GAAGF;AACJ,GAAiC;AAChC,SACC,gBAAAc;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,aAAU;AAAA,MACV,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,WAAWV,EAAG,2CAA2CF,CAAS;AAAA,MACjE,GAAGF;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAG,EAACY,GAAA,EAAe,WAAU,SAAA,CAAS;AAAA,QACnC,gBAAAZ,EAAC,QAAA,EAAK,WAAU,WAAU,UAAA,OAAA,CAAI;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGjC;"}
@@ -0,0 +1,225 @@
1
+ import { jsx as a, jsxs as o, Fragment as m } from "react/jsx-runtime";
2
+ import "react";
3
+ import { XIcon as u } from "lucide-react";
4
+ import * as n from "@radix-ui/react-dialog";
5
+ import { c as i } from "./utils.js";
6
+ import { B as f } from "./Button.js";
7
+ const p = "max-w-[calc(100vw-2rem)] sm:max-w-2xl max-h-[90vh] overflow-y-auto";
8
+ function h({
9
+ ...e
10
+ }) {
11
+ return /* @__PURE__ */ a(n.Root, { "data-slot": "dialog", ...e });
12
+ }
13
+ function z({
14
+ ...e
15
+ }) {
16
+ return /* @__PURE__ */ a(n.Trigger, { "data-slot": "dialog-trigger", ...e });
17
+ }
18
+ function x({
19
+ ...e
20
+ }) {
21
+ return /* @__PURE__ */ a(n.Portal, { "data-slot": "dialog-portal", ...e });
22
+ }
23
+ function F({
24
+ ...e
25
+ }) {
26
+ return /* @__PURE__ */ a(n.Close, { "data-slot": "dialog-close", ...e });
27
+ }
28
+ function b({
29
+ className: e,
30
+ ...t
31
+ }) {
32
+ return /* @__PURE__ */ a(
33
+ n.Overlay,
34
+ {
35
+ "data-slot": "dialog-overlay",
36
+ className: i(
37
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
38
+ e
39
+ ),
40
+ ...t
41
+ }
42
+ );
43
+ }
44
+ function v({
45
+ className: e,
46
+ children: t,
47
+ showCloseButton: r = !0,
48
+ ...l
49
+ }) {
50
+ return /* @__PURE__ */ o(x, { "data-slot": "dialog-portal", children: [
51
+ /* @__PURE__ */ a(b, {}),
52
+ /* @__PURE__ */ o(
53
+ n.Content,
54
+ {
55
+ "data-slot": "dialog-content",
56
+ className: i(
57
+ "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded border p-6 shadow-lg duration-200 outline-none sm:max-w-lg",
58
+ e
59
+ ),
60
+ ...l,
61
+ children: [
62
+ t,
63
+ r && /* @__PURE__ */ o(
64
+ n.Close,
65
+ {
66
+ "data-slot": "dialog-close",
67
+ className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
68
+ children: [
69
+ /* @__PURE__ */ a(u, {}),
70
+ /* @__PURE__ */ a("span", { className: "sr-only", children: "Close" })
71
+ ]
72
+ }
73
+ )
74
+ ]
75
+ }
76
+ )
77
+ ] });
78
+ }
79
+ function L({
80
+ className: e,
81
+ ...t
82
+ }) {
83
+ return /* @__PURE__ */ a(
84
+ "div",
85
+ {
86
+ "data-slot": "dialog-header",
87
+ className: i("flex flex-col gap-2 text-center sm:text-left", e),
88
+ ...t
89
+ }
90
+ );
91
+ }
92
+ function O({
93
+ className: e,
94
+ showCloseButton: t = !1,
95
+ children: r,
96
+ ...l
97
+ }) {
98
+ return /* @__PURE__ */ o(
99
+ "div",
100
+ {
101
+ "data-slot": "dialog-footer",
102
+ className: i(
103
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
104
+ e
105
+ ),
106
+ ...l,
107
+ children: [
108
+ r,
109
+ t && /* @__PURE__ */ a(n.Close, { asChild: !0, children: /* @__PURE__ */ a(f, { variant: "outline", children: "Close" }) })
110
+ ]
111
+ }
112
+ );
113
+ }
114
+ function N({
115
+ className: e,
116
+ ...t
117
+ }) {
118
+ return /* @__PURE__ */ a(
119
+ n.Title,
120
+ {
121
+ "data-slot": "dialog-title",
122
+ className: i("text-lg leading-none font-semibold", e),
123
+ ...t
124
+ }
125
+ );
126
+ }
127
+ function D({
128
+ className: e,
129
+ ...t
130
+ }) {
131
+ return /* @__PURE__ */ a(
132
+ n.Description,
133
+ {
134
+ "data-slot": "dialog-description",
135
+ className: i("text-muted-foreground text-sm", e),
136
+ ...t
137
+ }
138
+ );
139
+ }
140
+ function y({
141
+ currentStep: e,
142
+ totalSteps: t,
143
+ stepLabels: r
144
+ }) {
145
+ const l = Array.from({ length: t }, (d, c) => c + 1), g = r?.[e - 1];
146
+ return /* @__PURE__ */ o(
147
+ "div",
148
+ {
149
+ className: "absolute top-4 right-12 z-20 flex items-center gap-2 rounded-full border border-border/50 bg-background/80 px-3 py-1.5 backdrop-blur-sm",
150
+ "aria-label": "Progress",
151
+ children: [
152
+ /* @__PURE__ */ a("div", { className: "flex items-center gap-1.5", children: l.map((d) => {
153
+ const c = d < e, s = d === e;
154
+ return /* @__PURE__ */ a(
155
+ "div",
156
+ {
157
+ className: i(
158
+ "h-1.5 w-1.5 rounded-full transition-all duration-300",
159
+ s && "bg-primary w-6",
160
+ c && "bg-primary",
161
+ !s && !c && "bg-muted"
162
+ ),
163
+ "aria-current": s ? "step" : void 0
164
+ },
165
+ d
166
+ );
167
+ }) }),
168
+ /* @__PURE__ */ o("div", { className: "text-muted-foreground flex items-center gap-1.5 text-xs font-medium", children: [
169
+ /* @__PURE__ */ a("span", { className: "text-foreground", children: e }),
170
+ /* @__PURE__ */ a("span", { children: "/" }),
171
+ /* @__PURE__ */ a("span", { children: t }),
172
+ g && /* @__PURE__ */ o(m, { children: [
173
+ /* @__PURE__ */ a("span", { className: "text-border", children: "·" }),
174
+ /* @__PURE__ */ a("span", { className: "hidden sm:inline", children: g })
175
+ ] })
176
+ ] })
177
+ ]
178
+ }
179
+ );
180
+ }
181
+ function j({
182
+ open: e,
183
+ onOpenChange: t,
184
+ title: r,
185
+ description: l,
186
+ trigger: g,
187
+ children: d,
188
+ className: c,
189
+ wizard: s
190
+ }) {
191
+ return /* @__PURE__ */ o(h, { open: e, onOpenChange: t, children: [
192
+ g,
193
+ /* @__PURE__ */ o(v, { className: c ?? p, children: [
194
+ s && /* @__PURE__ */ a(
195
+ y,
196
+ {
197
+ currentStep: s.currentStep,
198
+ totalSteps: s.totalSteps,
199
+ stepLabels: s.stepLabels
200
+ }
201
+ ),
202
+ /* @__PURE__ */ o("div", { className: "bg-muted -m-6 p-6 -mb-4", children: [
203
+ /* @__PURE__ */ a(N, { children: r }),
204
+ /* @__PURE__ */ a(D, { children: l })
205
+ ] }),
206
+ d
207
+ ] })
208
+ ] });
209
+ }
210
+ export {
211
+ h as D,
212
+ j as F,
213
+ y as W,
214
+ F as a,
215
+ v as b,
216
+ D as c,
217
+ O as d,
218
+ L as e,
219
+ b as f,
220
+ x as g,
221
+ N as h,
222
+ z as i,
223
+ p as j
224
+ };
225
+ //# sourceMappingURL=Dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.js","sources":["../../src/components/Dialog/Dialog.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { XIcon } from 'lucide-react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\n\nimport { cn } from '@/utils'\nimport { Button } from '@/components/Button/Button'\n\n/** Class for create/edit form dialogs: consistent width and scroll. Use via FormDialog or apply to DialogContent. */\nexport const FORM_DIALOG_CONTENT_CLASS =\n\t'max-w-[calc(100vw-2rem)] sm:max-w-2xl max-h-[90vh] overflow-y-auto'\n\nexport function Dialog({\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n\treturn <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nexport function DialogTrigger({\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n\treturn <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nexport function DialogPortal({\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n\treturn <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nexport function DialogClose({\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n\treturn <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nexport function DialogOverlay({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n\treturn (\n\t\t<DialogPrimitive.Overlay\n\t\t\tdata-slot=\"dialog-overlay\"\n\t\t\tclassName={cn(\n\t\t\t\t'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nexport function DialogContent({\n\tclassName,\n\tchildren,\n\tshowCloseButton = true,\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n\tshowCloseButton?: boolean\n}) {\n\treturn (\n\t\t<DialogPortal data-slot=\"dialog-portal\">\n\t\t\t<DialogOverlay />\n\t\t\t<DialogPrimitive.Content\n\t\t\t\tdata-slot=\"dialog-content\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded border p-6 shadow-lg duration-200 outline-none sm:max-w-lg',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t{showCloseButton && (\n\t\t\t\t\t<DialogPrimitive.Close\n\t\t\t\t\t\tdata-slot=\"dialog-close\"\n\t\t\t\t\t\tclassName=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t\t<span className=\"sr-only\">Close</span>\n\t\t\t\t\t</DialogPrimitive.Close>\n\t\t\t\t)}\n\t\t\t</DialogPrimitive.Content>\n\t\t</DialogPortal>\n\t)\n}\n\nexport function DialogHeader({\n\tclassName,\n\t...props\n}: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"dialog-header\"\n\t\t\tclassName={cn('flex flex-col gap-2 text-center sm:text-left', className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nexport function DialogFooter({\n\tclassName,\n\tshowCloseButton = false,\n\tchildren,\n\t...props\n}: React.ComponentProps<'div'> & {\n\tshowCloseButton?: boolean\n}) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"dialog-footer\"\n\t\t\tclassName={cn(\n\t\t\t\t'flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t\t{showCloseButton && (\n\t\t\t\t<DialogPrimitive.Close asChild>\n\t\t\t\t\t<Button variant=\"outline\">Close</Button>\n\t\t\t\t</DialogPrimitive.Close>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\nexport function DialogTitle({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n\treturn (\n\t\t<DialogPrimitive.Title\n\t\t\tdata-slot=\"dialog-title\"\n\t\t\tclassName={cn('text-lg leading-none font-semibold', className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nexport function DialogDescription({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n\treturn (\n\t\t<DialogPrimitive.Description\n\t\t\tdata-slot=\"dialog-description\"\n\t\t\tclassName={cn('text-muted-foreground text-sm', className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nexport interface FormDialogProps {\n\topen: boolean\n\tonOpenChange: (open: boolean) => void\n\ttitle: string\n\tdescription: React.ReactNode\n\t/** Optional trigger (e.g. \"Add\" button); when provided, render as first child of Dialog. */\n\ttrigger?: React.ReactNode\n\tchildren: React.ReactNode\n\t/** Optional custom className for DialogContent (overrides FORM_DIALOG_CONTENT_CLASS). Use for wider dialogs (e.g., sm:max-w-5xl for wizards). */\n\tclassName?: string\n\t/** Optional wizard configuration for multi-step forms. Renders a stepper bar at the top of the header. */\n\twizard?: {\n\t\tcurrentStep: number\n\t\ttotalSteps: number\n\t\tstepTitle: string\n\t\tstepLabels?: Array<string>\n\t}\n}\n\n/** Compact glass-styled stepper for top-right corner of wizard dialogs. */\nexport function WizardStepper({\n\tcurrentStep,\n\ttotalSteps,\n\tstepLabels,\n}: {\n\tcurrentStep: number\n\ttotalSteps: number\n\tstepLabels?: Array<string>\n}) {\n\tconst steps = Array.from({ length: totalSteps }, (_, i) => i + 1)\n\tconst currentLabel = stepLabels?.[currentStep - 1]\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"absolute top-4 right-12 z-20 flex items-center gap-2 rounded-full border border-border/50 bg-background/80 px-3 py-1.5 backdrop-blur-sm\"\n\t\t\taria-label=\"Progress\"\n\t\t>\n\t\t\t{/* Step dots */}\n\t\t\t<div className=\"flex items-center gap-1.5\">\n\t\t\t\t{steps.map((step) => {\n\t\t\t\t\tconst isCompleted = step < currentStep\n\t\t\t\t\tconst isCurrent = step === currentStep\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={step}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'h-1.5 w-1.5 rounded-full transition-all duration-300',\n\t\t\t\t\t\t\t\tisCurrent && 'bg-primary w-6',\n\t\t\t\t\t\t\t\tisCompleted && 'bg-primary',\n\t\t\t\t\t\t\t\t!isCurrent && !isCompleted && 'bg-muted',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-current={isCurrent ? 'step' : undefined}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{/* Step label/counter */}\n\t\t\t<div className=\"text-muted-foreground flex items-center gap-1.5 text-xs font-medium\">\n\t\t\t\t<span className=\"text-foreground\">{currentStep}</span>\n\t\t\t\t<span>/</span>\n\t\t\t\t<span>{totalSteps}</span>\n\t\t\t\t{currentLabel && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<span className=\"text-border\">·</span>\n\t\t\t\t\t\t<span className=\"hidden sm:inline\">{currentLabel}</span>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n/** Dialog shell for create/edit forms: standard width, header with title + description. */\nexport function FormDialog({\n\topen,\n\tonOpenChange,\n\ttitle,\n\tdescription,\n\ttrigger,\n\tchildren,\n\tclassName,\n\twizard,\n}: FormDialogProps) {\n\treturn (\n\t\t<Dialog open={open} onOpenChange={onOpenChange}>\n\t\t\t{trigger}\n\t\t\t<DialogContent className={className ?? FORM_DIALOG_CONTENT_CLASS}>\n\t\t\t\t{wizard && (\n\t\t\t\t\t<WizardStepper\n\t\t\t\t\t\tcurrentStep={wizard.currentStep}\n\t\t\t\t\t\ttotalSteps={wizard.totalSteps}\n\t\t\t\t\t\tstepLabels={wizard.stepLabels}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<div className=\"bg-muted -m-6 p-6 -mb-4\">\n\t\t\t\t\t<DialogTitle>{title}</DialogTitle>\n\t\t\t\t\t<DialogDescription>{description}</DialogDescription>\n\t\t\t\t</div>\n\t\t\t\t{children}\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t)\n}\n"],"names":["FORM_DIALOG_CONTENT_CLASS","Dialog","props","DialogPrimitive","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","className","jsx","cn","DialogContent","children","showCloseButton","jsxs","XIcon","DialogHeader","DialogFooter","Button","DialogTitle","DialogDescription","WizardStepper","currentStep","totalSteps","stepLabels","steps","_","i","currentLabel","step","isCompleted","isCurrent","Fragment","FormDialog","open","onOpenChange","title","description","trigger","wizard"],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { jsx as s } from "react/jsx-runtime";
2
+ import { c as r } from "./utils.js";
3
+ import "react";
4
+ import { cva as i } from "class-variance-authority";
5
+ const o = i("font-bold tracking-tight text-foreground", {
6
+ variants: {
7
+ size: {
8
+ default: "sm:text-3xl text-2xl",
9
+ sm: "sm:text-2xl text-xl"
10
+ }
11
+ },
12
+ defaultVariants: {
13
+ size: "default"
14
+ }
15
+ });
16
+ function f({
17
+ size: t,
18
+ className: e,
19
+ ...a
20
+ }) {
21
+ return /* @__PURE__ */ s(
22
+ "h1",
23
+ {
24
+ "data-slot": "page-header",
25
+ className: r(o({ size: t, className: e })),
26
+ ...a
27
+ }
28
+ );
29
+ }
30
+ const n = i("text-muted-foreground", {
31
+ variants: {
32
+ size: {
33
+ default: "sm:text-xl text-lg",
34
+ sm: "sm:text-lg text-md"
35
+ }
36
+ },
37
+ defaultVariants: {
38
+ size: "default"
39
+ }
40
+ });
41
+ function c({
42
+ size: t,
43
+ className: e,
44
+ ...a
45
+ }) {
46
+ return /* @__PURE__ */ s(
47
+ "p",
48
+ {
49
+ "data-slot": "page-description",
50
+ className: r(n({ size: t, className: e })),
51
+ ...a
52
+ }
53
+ );
54
+ }
55
+ export {
56
+ f as P,
57
+ c as a
58
+ };
59
+ //# sourceMappingURL=PageHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageHeader.js","sources":["../../src/components/PageHeader/PageHeader.tsx"],"sourcesContent":["import { cn } from '@/utils'\nimport * as React from 'react'\nimport { cva } from 'class-variance-authority'\nimport type { VariantProps } from 'class-variance-authority'\n\nconst pageHeaderVariants = cva('font-bold tracking-tight text-foreground', {\n\tvariants: {\n\t\tsize: {\n\t\t\tdefault: 'sm:text-3xl text-2xl',\n\t\t\tsm: 'sm:text-2xl text-xl',\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: 'default',\n\t},\n})\n\nexport function PageHeader({\n\tsize,\n\tclassName,\n\t...props\n}: React.ComponentProps<'h1'> & VariantProps<typeof pageHeaderVariants>) {\n\treturn (\n\t\t<h1\n\t\t\tdata-slot=\"page-header\"\n\t\t\tclassName={cn(pageHeaderVariants({ size, className }))}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nconst pageDescriptionVariants = cva('text-muted-foreground', {\n\tvariants: {\n\t\tsize: {\n\t\t\tdefault: 'sm:text-xl text-lg',\n\t\t\tsm: 'sm:text-lg text-md',\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: 'default',\n\t},\n})\n\nexport function PageDescription({\n\tsize,\n\tclassName,\n\t...props\n}: React.ComponentProps<'p'> & VariantProps<typeof pageDescriptionVariants>) {\n\treturn (\n\t\t<p\n\t\t\tdata-slot=\"page-description\"\n\t\t\tclassName={cn(pageDescriptionVariants({ size, className }))}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n"],"names":["pageHeaderVariants","cva","PageHeader","size","className","props","jsx","cn","pageDescriptionVariants","PageDescription"],"mappings":";;;;AAKA,MAAMA,IAAqBC,EAAI,4CAA4C;AAAA,EAC1E,UAAU;AAAA,IACT,MAAM;AAAA,MACL,SAAS;AAAA,MACT,IAAI;AAAA,IAAA;AAAA,EACL;AAAA,EAED,iBAAiB;AAAA,IAChB,MAAM;AAAA,EAAA;AAER,CAAC;AAEM,SAASC,EAAW;AAAA,EAC1B,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACJ,GAAyE;AACxE,SACC,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAWC,EAAGP,EAAmB,EAAE,MAAAG,GAAM,WAAAC,EAAA,CAAW,CAAC;AAAA,MACpD,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,MAAMG,IAA0BP,EAAI,yBAAyB;AAAA,EAC5D,UAAU;AAAA,IACT,MAAM;AAAA,MACL,SAAS;AAAA,MACT,IAAI;AAAA,IAAA;AAAA,EACL;AAAA,EAED,iBAAiB;AAAA,IAChB,MAAM;AAAA,EAAA;AAER,CAAC;AAEM,SAASQ,EAAgB;AAAA,EAC/B,MAAAN;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACJ,GAA6E;AAC5E,SACC,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAWC,EAAGC,EAAwB,EAAE,MAAAL,GAAM,WAAAC,EAAA,CAAW,CAAC;AAAA,MACzD,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,46 @@
1
+ import { jsx as t } from "react/jsx-runtime";
2
+ import * as e from "@radix-ui/react-popover";
3
+ import "react";
4
+ import { c as i } from "./utils.js";
5
+ function m({
6
+ ...o
7
+ }) {
8
+ return /* @__PURE__ */ t(e.Root, { "data-slot": "popover", ...o });
9
+ }
10
+ function c({
11
+ ...o
12
+ }) {
13
+ return /* @__PURE__ */ t(e.Trigger, { "data-slot": "popover-trigger", ...o });
14
+ }
15
+ function f({
16
+ className: o,
17
+ align: r = "center",
18
+ sideOffset: a = 4,
19
+ ...n
20
+ }) {
21
+ return /* @__PURE__ */ t(e.Portal, { children: /* @__PURE__ */ t(
22
+ e.Content,
23
+ {
24
+ "data-slot": "popover-content",
25
+ align: r,
26
+ sideOffset: a,
27
+ className: i(
28
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded border-container p-4 outline-hidden",
29
+ o
30
+ ),
31
+ ...n
32
+ }
33
+ ) });
34
+ }
35
+ function l({
36
+ ...o
37
+ }) {
38
+ return /* @__PURE__ */ t(e.Anchor, { "data-slot": "popover-anchor", ...o });
39
+ }
40
+ export {
41
+ m as P,
42
+ l as a,
43
+ f as b,
44
+ c
45
+ };
46
+ //# sourceMappingURL=Popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.js","sources":["../../src/components/Popover/Popover.tsx"],"sourcesContent":["import * as PopoverPrimitive from \"@radix-ui/react-popover\"\nimport * as React from \"react\"\n\nimport { cn } from \"@/utils\"\n\nfunction Popover({\n\t...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n\treturn <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n\t...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n\treturn <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n\tclassName,\n\talign = \"center\",\n\tsideOffset = 4,\n\t...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n\treturn (\n\t\t<PopoverPrimitive.Portal>\n\t\t\t<PopoverPrimitive.Content\n\t\t\t\tdata-slot=\"popover-content\"\n\t\t\t\talign={align}\n\t\t\t\tsideOffset={sideOffset}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded border-container p-4 outline-hidden\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</PopoverPrimitive.Portal>\n\t)\n}\n\nfunction PopoverAnchor({\n\t...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n\treturn <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverAnchor, PopoverContent, PopoverTrigger }\n\n"],"names":["Popover","props","PopoverPrimitive","PopoverTrigger","PopoverContent","className","align","sideOffset","jsx","cn","PopoverAnchor"],"mappings":";;;;AAKA,SAASA,EAAQ;AAAA,EAChB,GAAGC;AACJ,GAAuD;AACtD,2BAAQC,EAAiB,MAAjB,EAAsB,aAAU,WAAW,GAAGD,GAAO;AAC9D;AAEA,SAASE,EAAe;AAAA,EACvB,GAAGF;AACJ,GAA0D;AACzD,2BAAQC,EAAiB,SAAjB,EAAyB,aAAU,mBAAmB,GAAGD,GAAO;AACzE;AAEA,SAASG,EAAe;AAAA,EACvB,WAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,YAAAC,IAAa;AAAA,EACb,GAAGN;AACJ,GAA0D;AACzD,SACC,gBAAAO,EAACN,EAAiB,QAAjB,EACA,UAAA,gBAAAM;AAAA,IAACN,EAAiB;AAAA,IAAjB;AAAA,MACA,aAAU;AAAA,MACV,OAAAI;AAAA,MACA,YAAAC;AAAA,MACA,WAAWE;AAAA,QACV;AAAA,QACAJ;AAAA,MAAA;AAAA,MAEA,GAAGJ;AAAA,IAAA;AAAA,EAAA,GAEN;AAEF;AAEA,SAASS,EAAc;AAAA,EACtB,GAAGT;AACJ,GAAyD;AACxD,2BAAQC,EAAiB,QAAjB,EAAwB,aAAU,kBAAkB,GAAGD,GAAO;AACvE;"}
@@ -0,0 +1,16 @@
1
+ import { useState as u, useEffect as i } from "react";
2
+ function a(e, t = 250) {
3
+ const [n, o] = u(!1);
4
+ return i(() => {
5
+ if (!e) {
6
+ o(!1);
7
+ return;
8
+ }
9
+ const r = window.setTimeout(() => o(!0), t);
10
+ return () => window.clearTimeout(r);
11
+ }, [e, t]), n;
12
+ }
13
+ export {
14
+ a as u
15
+ };
16
+ //# sourceMappingURL=use-delayed-loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-delayed-loading.js","sources":["../../src/hooks/use-delayed-loading/use-delayed-loading.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\n\n/**\n * Returns true only after `loading` has been true for at least `delayMs`.\n * When `loading` goes false, the returned value goes false immediately (no delay on hide).\n * Avoids flashing skeletons/spinners on fast navigations or cached data.\n */\nexport function useDelayedLoading(\n\tloading: boolean,\n\tdelayMs: number = 250,\n): boolean {\n\tconst [showLoading, setShowLoading] = useState(false)\n\n\tuseEffect(() => {\n\t\tif (!loading) {\n\t\t\tsetShowLoading(false)\n\t\t\treturn\n\t\t}\n\t\tconst id = window.setTimeout(() => setShowLoading(true), delayMs)\n\t\treturn () => window.clearTimeout(id)\n\t}, [loading, delayMs])\n\n\treturn showLoading\n}\n"],"names":["useDelayedLoading","loading","delayMs","showLoading","setShowLoading","useState","useEffect","id"],"mappings":";AAOO,SAASA,EACfC,GACAC,IAAkB,KACR;AACV,QAAM,CAACC,GAAaC,CAAc,IAAIC,EAAS,EAAK;AAEpD,SAAAC,EAAU,MAAM;AACf,QAAI,CAACL,GAAS;AACb,MAAAG,EAAe,EAAK;AACpB;AAAA,IACD;AACA,UAAMG,IAAK,OAAO,WAAW,MAAMH,EAAe,EAAI,GAAGF,CAAO;AAChE,WAAO,MAAM,OAAO,aAAaK,CAAE;AAAA,EACpC,GAAG,CAACN,GAASC,CAAO,CAAC,GAEdC;AACR;"}