@abumble/design-system 0.0.26 → 0.0.27

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 +21 -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 +30 -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,15 @@
1
+ export interface ActionItem {
2
+ label: string;
3
+ icon?: React.ReactNode;
4
+ onClick: () => void;
5
+ variant?: 'default' | 'destructive';
6
+ disabled?: boolean;
7
+ }
8
+ export interface ActionsPopoverProps {
9
+ label?: string;
10
+ items: ActionItem[];
11
+ /** Pass true to add stopPropagation on the trigger (e.g. inside table rows). */
12
+ stopTriggerPropagation?: boolean;
13
+ }
14
+ export declare function ActionsPopover({ label, items, stopTriggerPropagation, }: ActionsPopoverProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=ActionsPopover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionsPopover.d.ts","sourceRoot":"","sources":["../../../src/components/ActionsPopover/ActionsPopover.tsx"],"names":[],"mappings":"AAWA,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAA;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,gFAAgF;IAChF,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAChC;AAED,wBAAgB,cAAc,CAAC,EAC9B,KAAiB,EACjB,KAAK,EACL,sBAA8B,GAC9B,EAAE,mBAAmB,2CA8CrB"}
@@ -0,0 +1,2 @@
1
+ export { ActionsPopover, type ActionsPopoverProps, type ActionItem, } from './ActionsPopover';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ActionsPopover/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,UAAU,GACf,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,46 @@
1
+ import { jsxs as a, jsx as s } from "react/jsx-runtime";
2
+ import { useState as p } from "react";
3
+ import { MoreVertical as d } from "lucide-react";
4
+ import { B as o } from "../shared/Button.js";
5
+ import { P as f, c as m, b as u } from "../shared/Popover.js";
6
+ function C({
7
+ label: r = "Actions",
8
+ items: i,
9
+ stopTriggerPropagation: l = !1
10
+ }) {
11
+ const [n, t] = p(!1);
12
+ return /* @__PURE__ */ a(f, { open: n, onOpenChange: t, children: [
13
+ /* @__PURE__ */ s(m, { asChild: !0, children: /* @__PURE__ */ s(
14
+ o,
15
+ {
16
+ type: "button",
17
+ variant: "ghost",
18
+ size: "icon",
19
+ className: "size-8 shrink-0",
20
+ "aria-label": r,
21
+ onClick: l ? (e) => e.stopPropagation() : void 0,
22
+ children: /* @__PURE__ */ s(d, { className: "size-4" })
23
+ }
24
+ ) }),
25
+ /* @__PURE__ */ s(u, { align: "end", className: "w-40 p-0 mt-1", children: /* @__PURE__ */ s("ul", { className: "flex flex-col gap-0.5 p-1.5", children: i.map((e, c) => /* @__PURE__ */ s("li", { children: /* @__PURE__ */ a(
26
+ o,
27
+ {
28
+ variant: "ghost",
29
+ size: "sm",
30
+ className: e.variant === "destructive" ? "w-full justify-start gap-2 text-destructive hover:text-destructive" : "w-full justify-start gap-2",
31
+ onClick: () => {
32
+ t(!1), e.onClick();
33
+ },
34
+ disabled: e.disabled,
35
+ children: [
36
+ e.icon,
37
+ e.label
38
+ ]
39
+ }
40
+ ) }, c)) }) })
41
+ ] });
42
+ }
43
+ export {
44
+ C as ActionsPopover
45
+ };
46
+ //# sourceMappingURL=ActionsPopover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionsPopover.js","sources":["../../src/components/ActionsPopover/ActionsPopover.tsx"],"sourcesContent":["'use client'\n\nimport { useState } from 'react'\nimport { MoreVertical } from 'lucide-react'\nimport { Button } from '@/components/Button/Button'\nimport {\n\tPopover,\n\tPopoverContent,\n\tPopoverTrigger,\n} from '@/components/Popover/Popover'\n\nexport interface ActionItem {\n\tlabel: string\n\ticon?: React.ReactNode\n\tonClick: () => void\n\tvariant?: 'default' | 'destructive'\n\tdisabled?: boolean\n}\n\nexport interface ActionsPopoverProps {\n\tlabel?: string\n\titems: ActionItem[]\n\t/** Pass true to add stopPropagation on the trigger (e.g. inside table rows). */\n\tstopTriggerPropagation?: boolean\n}\n\nexport function ActionsPopover({\n\tlabel = 'Actions',\n\titems,\n\tstopTriggerPropagation = false,\n}: ActionsPopoverProps) {\n\tconst [open, setOpen] = useState(false)\n\n\treturn (\n\t\t<Popover open={open} onOpenChange={setOpen}>\n\t\t\t<PopoverTrigger asChild>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\tclassName=\"size-8 shrink-0\"\n\t\t\t\t\taria-label={label}\n\t\t\t\t\tonClick={\n\t\t\t\t\t\tstopTriggerPropagation ? (e) => e.stopPropagation() : undefined\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<MoreVertical className=\"size-4\" />\n\t\t\t\t</Button>\n\t\t\t</PopoverTrigger>\n\t\t\t<PopoverContent align=\"end\" className=\"w-40 p-0 mt-1\">\n\t\t\t\t<ul className=\"flex flex-col gap-0.5 p-1.5\">\n\t\t\t\t\t{items.map((item, index) => (\n\t\t\t\t\t\t<li key={index}>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\titem.variant === 'destructive'\n\t\t\t\t\t\t\t\t\t\t? 'w-full justify-start gap-2 text-destructive hover:text-destructive'\n\t\t\t\t\t\t\t\t\t\t: 'w-full justify-start gap-2'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tsetOpen(false)\n\t\t\t\t\t\t\t\t\titem.onClick()\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.icon}\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t)\n}\n"],"names":["ActionsPopover","label","items","stopTriggerPropagation","open","setOpen","useState","jsxs","Popover","jsx","PopoverTrigger","Button","MoreVertical","PopoverContent","item","index"],"mappings":";;;;;AA0BO,SAASA,EAAe;AAAA,EAC9B,OAAAC,IAAQ;AAAA,EACR,OAAAC;AAAA,EACA,wBAAAC,IAAyB;AAC1B,GAAwB;AACvB,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK;AAEtC,SACC,gBAAAC,EAACC,GAAA,EAAQ,MAAAJ,GAAY,cAAcC,GAClC,UAAA;AAAA,IAAA,gBAAAI,EAACC,GAAA,EAAe,SAAO,IACtB,UAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACA,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,WAAU;AAAA,QACV,cAAYV;AAAA,QACZ,SACCE,IAAyB,CAAC,MAAM,EAAE,oBAAoB;AAAA,QAGvD,UAAA,gBAAAM,EAACG,GAAA,EAAa,WAAU,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA,GAEnC;AAAA,sBACCC,GAAA,EAAe,OAAM,OAAM,WAAU,iBACrC,UAAA,gBAAAJ,EAAC,MAAA,EAAG,WAAU,+BACZ,YAAM,IAAI,CAACK,GAAMC,wBAChB,MAAA,EACA,UAAA,gBAAAR;AAAA,MAACI;AAAA,MAAA;AAAA,QACA,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,WACCG,EAAK,YAAY,gBACd,uEACA;AAAA,QAEJ,SAAS,MAAM;AACd,UAAAT,EAAQ,EAAK,GACbS,EAAK,QAAA;AAAA,QACN;AAAA,QACA,UAAUA,EAAK;AAAA,QAEd,UAAA;AAAA,UAAAA,EAAK;AAAA,UACLA,EAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,KAhBCC,CAkBT,CACA,EAAA,CACF,EAAA,CACD;AAAA,EAAA,GACD;AAEF;"}
@@ -0,0 +1,21 @@
1
+ export interface BackLinkProps extends React.ComponentProps<'a'> {
2
+ /** Link text, e.g. "Back to properties". */
3
+ label: string;
4
+ /** If true, renders the provided child element as the link. Use with router Link components. */
5
+ asChild?: boolean;
6
+ }
7
+ /**
8
+ * Back link with chevron icon. Router-agnostic via asChild pattern.
9
+ *
10
+ * @example
11
+ * // With TanStack Router:
12
+ * <BackLink asChild label="Back to properties">
13
+ * <Link to=".." replace />
14
+ * </BackLink>
15
+ *
16
+ * @example
17
+ * // Plain link:
18
+ * <BackLink href="/properties" label="Back to properties" />
19
+ */
20
+ export declare function BackLink({ label, asChild, className, ...props }: BackLinkProps): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=BackLink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackLink.d.ts","sourceRoot":"","sources":["../../../src/components/BackLink/BackLink.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC;IAC/D,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAA;IACb,gGAAgG;IAChG,OAAO,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,EACxB,KAAK,EACL,OAAe,EACf,SAAS,EACT,GAAG,KAAK,EACR,EAAE,aAAa,2CAgBf"}
@@ -0,0 +1,2 @@
1
+ export { BackLink, type BackLinkProps } from './BackLink';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/BackLink/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { B as o } from "../shared/BackLink.js";
2
+ export {
3
+ o as BackLink
4
+ };
5
+ //# sourceMappingURL=BackLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackLink.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,7 @@
1
+ import type { VariantProps } from 'class-variance-authority';
2
+ declare const badgeVariants: (props?: ({
3
+ variant?: "default" | "destructive" | "outline" | "secondary" | "success" | "warning" | null | undefined;
4
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5
+ export declare function Badge({ className, variant, ...props }: React.ComponentProps<'div'> & VariantProps<typeof badgeVariants>): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=Badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/Badge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAE5D,QAAA,MAAM,aAAa;;8EAoBlB,CAAA;AAED,wBAAgB,KAAK,CAAC,EACrB,SAAS,EACT,OAAO,EACP,GAAG,KAAK,EACR,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,2CAQlE"}
@@ -0,0 +1,2 @@
1
+ export { Badge } from './Badge';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { jsx as a } from "react/jsx-runtime";
2
+ import { c as n } from "../shared/utils.js";
3
+ import { cva as o } from "class-variance-authority";
4
+ const d = o(
5
+ "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors",
6
+ {
7
+ variants: {
8
+ variant: {
9
+ default: "border-transparent bg-primary text-primary-foreground",
10
+ secondary: "border-transparent bg-secondary text-secondary-foreground",
11
+ success: "border-transparent bg-green-600 text-white dark:bg-green-700 dark:text-white",
12
+ warning: "border-transparent bg-amber-500 text-white dark:bg-amber-600 dark:text-white",
13
+ destructive: "border-transparent bg-destructive text-destructive-foreground",
14
+ outline: "text-foreground border-border"
15
+ }
16
+ },
17
+ defaultVariants: {
18
+ variant: "default"
19
+ }
20
+ }
21
+ );
22
+ function g({
23
+ className: r,
24
+ variant: e,
25
+ ...t
26
+ }) {
27
+ return /* @__PURE__ */ a(
28
+ "div",
29
+ {
30
+ "data-slot": "badge",
31
+ className: n(d({ variant: e }), r),
32
+ ...t
33
+ }
34
+ );
35
+ }
36
+ export {
37
+ g as Badge
38
+ };
39
+ //# sourceMappingURL=Badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.js","sources":["../../src/components/Badge/Badge.tsx"],"sourcesContent":["import { cn } from '@/utils'\nimport { cva } from 'class-variance-authority'\nimport type { VariantProps } from 'class-variance-authority'\n\nconst badgeVariants = cva(\n\t'inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors',\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: 'border-transparent bg-primary text-primary-foreground',\n\t\t\t\tsecondary: 'border-transparent bg-secondary text-secondary-foreground',\n\t\t\t\tsuccess:\n\t\t\t\t\t'border-transparent bg-green-600 text-white dark:bg-green-700 dark:text-white',\n\t\t\t\twarning:\n\t\t\t\t\t'border-transparent bg-amber-500 text-white dark:bg-amber-600 dark:text-white',\n\t\t\t\tdestructive:\n\t\t\t\t\t'border-transparent bg-destructive text-destructive-foreground',\n\t\t\t\toutline: 'text-foreground border-border',\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t},\n\t},\n)\n\nexport function Badge({\n\tclassName,\n\tvariant,\n\t...props\n}: React.ComponentProps<'div'> & VariantProps<typeof badgeVariants>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"badge\"\n\t\t\tclassName={cn(badgeVariants({ variant }), className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n"],"names":["badgeVariants","cva","Badge","className","variant","props","jsx","cn"],"mappings":";;;AAIA,MAAMA,IAAgBC;AAAA,EACrB;AAAA,EACA;AAAA,IACC,UAAU;AAAA,MACT,SAAS;AAAA,QACR,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SACC;AAAA,QACD,SACC;AAAA,QACD,aACC;AAAA,QACD,SAAS;AAAA,MAAA;AAAA,IACV;AAAA,IAED,iBAAiB;AAAA,MAChB,SAAS;AAAA,IAAA;AAAA,EACV;AAEF;AAEO,SAASC,EAAM;AAAA,EACrB,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,GAAGC;AACJ,GAAqE;AACpE,SACC,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAWC,EAAGP,EAAc,EAAE,SAAAI,EAAA,CAAS,GAAGD,CAAS;AAAA,MAClD,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,38 @@
1
+ import * as React from 'react';
2
+ export interface BreadcrumbItemType {
3
+ label: string;
4
+ to?: string;
5
+ }
6
+ export interface BannerBackLinkOptions {
7
+ /** Target path. Defaults to ".." (parent route). */
8
+ to?: string;
9
+ /** Link text, e.g. "Back to properties". */
10
+ label: string;
11
+ }
12
+ export interface BannerHeaderProps {
13
+ title: React.ReactNode;
14
+ description: React.ReactNode;
15
+ /** Single back link (chevron + label) above title. Defaults to relative ".." when to is omitted. */
16
+ backLink?: BannerBackLinkOptions;
17
+ /** Parent breadcrumb items (does not include current page). Shows as compact nav above title. */
18
+ breadcrumbItems?: BreadcrumbItemType[];
19
+ /** Optional actions (e.g. triple-dot menu) shown at the top-right of the banner. */
20
+ actions?: React.ReactNode;
21
+ /** Optional router link component (e.g. TanStack Link). Used for breadcrumb links and back link. Defaults to 'a'. */
22
+ linkComponent?: React.ElementType;
23
+ }
24
+ /**
25
+ * Banner header with title, description, and optional back link or breadcrumbs.
26
+ * Router-agnostic via linkComponent prop.
27
+ *
28
+ * @example
29
+ * // With TanStack Router:
30
+ * <BannerHeader
31
+ * linkComponent={Link}
32
+ * title="Property Details"
33
+ * description="View and edit property information"
34
+ * backLink={{ label: "Back to properties" }}
35
+ * />
36
+ */
37
+ export declare function BannerHeader({ title, description, backLink, breadcrumbItems, actions, linkComponent: LinkComp, }: BannerHeaderProps): import("react/jsx-runtime").JSX.Element;
38
+ //# sourceMappingURL=BannerHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BannerHeader.d.ts","sourceRoot":"","sources":["../../../src/components/BannerHeader/BannerHeader.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,qBAAqB;IACrC,oDAAoD;IACpD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,WAAW,EAAE,KAAK,CAAC,SAAS,CAAA;IAC5B,oGAAoG;IACpG,QAAQ,CAAC,EAAE,qBAAqB,CAAA;IAChC,iGAAiG;IACjG,eAAe,CAAC,EAAE,kBAAkB,EAAE,CAAA;IACtC,oFAAoF;IACpF,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,qHAAqH;IACrH,aAAa,CAAC,EAAE,KAAK,CAAC,WAAW,CAAA;CACjC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,eAAe,EACf,OAAO,EACP,aAAa,EAAE,QAAc,GAC7B,EAAE,iBAAiB,2CAuDnB"}
@@ -0,0 +1,2 @@
1
+ export { BannerHeader, type BannerHeaderProps, type BreadcrumbItemType, type BannerBackLinkOptions, } from './BannerHeader';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/BannerHeader/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,GAC1B,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { jsx as e, jsxs as r } from "react/jsx-runtime";
2
+ import { B as u, d as h, f as p, b as f, c as x } from "../shared/Breadcrumb.js";
3
+ import * as g from "react";
4
+ import { B as v } from "../shared/BackLink.js";
5
+ import { P as B, a as N } from "../shared/PageHeader.js";
6
+ function P({
7
+ title: m,
8
+ description: c,
9
+ backLink: l,
10
+ breadcrumbItems: s,
11
+ actions: d,
12
+ linkComponent: n = "a"
13
+ }) {
14
+ const o = s != null && s.length > 0;
15
+ let t = null;
16
+ return l != null ? t = /* @__PURE__ */ e("div", { className: "", children: /* @__PURE__ */ e(v, { asChild: !0, label: l.label, children: /* @__PURE__ */ e(n, { to: l.to ?? "..", replace: !0 }) }) }) : o && (t = /* @__PURE__ */ e(u, { className: "", children: /* @__PURE__ */ e(h, { className: "text-sm", children: s.map((a, i) => /* @__PURE__ */ r(g.Fragment, { children: [
17
+ i > 0 && /* @__PURE__ */ e(p, {}),
18
+ /* @__PURE__ */ e(f, { children: a.to != null ? /* @__PURE__ */ e(x, { asChild: !0, children: /* @__PURE__ */ e(
19
+ n,
20
+ {
21
+ to: a.to,
22
+ className: "text-muted-foreground hover:text-foreground",
23
+ children: a.label
24
+ }
25
+ ) }) : /* @__PURE__ */ e("span", { className: "text-muted-foreground", children: a.label }) })
26
+ ] }, i)) }) })), /* @__PURE__ */ r("div", { className: "relative -mx-4 -mt-4 overflow-hidden md:-mx-6 md:-mt-6", children: [
27
+ /* @__PURE__ */ e("div", { className: "image-background absolute inset-0 opacity-10" }),
28
+ /* @__PURE__ */ r("div", { className: "relative flex items-start justify-between gap-4 px-4 py-8 md:px-6 md:pt-12", children: [
29
+ /* @__PURE__ */ r("div", { className: "min-w-0 flex-1 space-y-1.5", children: [
30
+ t,
31
+ /* @__PURE__ */ e(B, { children: m }),
32
+ /* @__PURE__ */ e(N, { children: c })
33
+ ] }),
34
+ d != null ? /* @__PURE__ */ e("div", { className: "shrink-0 pt-0.5", children: d }) : null
35
+ ] })
36
+ ] });
37
+ }
38
+ export {
39
+ P as BannerHeader
40
+ };
41
+ //# sourceMappingURL=BannerHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BannerHeader.js","sources":["../../src/components/BannerHeader/BannerHeader.tsx"],"sourcesContent":["import {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbSeparator,\n} from '@/components/Breadcrumb/Breadcrumb'\nimport * as React from 'react'\nimport { BackLink } from '@/components/BackLink/BackLink'\nimport { PageDescription, PageHeader } from '@/components/PageHeader/PageHeader'\n\nexport interface BreadcrumbItemType {\n\tlabel: string\n\tto?: string\n}\n\nexport interface BannerBackLinkOptions {\n\t/** Target path. Defaults to \"..\" (parent route). */\n\tto?: string\n\t/** Link text, e.g. \"Back to properties\". */\n\tlabel: string\n}\n\nexport interface BannerHeaderProps {\n\ttitle: React.ReactNode\n\tdescription: React.ReactNode\n\t/** Single back link (chevron + label) above title. Defaults to relative \"..\" when to is omitted. */\n\tbackLink?: BannerBackLinkOptions\n\t/** Parent breadcrumb items (does not include current page). Shows as compact nav above title. */\n\tbreadcrumbItems?: BreadcrumbItemType[]\n\t/** Optional actions (e.g. triple-dot menu) shown at the top-right of the banner. */\n\tactions?: React.ReactNode\n\t/** Optional router link component (e.g. TanStack Link). Used for breadcrumb links and back link. Defaults to 'a'. */\n\tlinkComponent?: React.ElementType\n}\n\n/**\n * Banner header with title, description, and optional back link or breadcrumbs.\n * Router-agnostic via linkComponent prop.\n *\n * @example\n * // With TanStack Router:\n * <BannerHeader\n * linkComponent={Link}\n * title=\"Property Details\"\n * description=\"View and edit property information\"\n * backLink={{ label: \"Back to properties\" }}\n * />\n */\nexport function BannerHeader({\n\ttitle,\n\tdescription,\n\tbackLink,\n\tbreadcrumbItems,\n\tactions,\n\tlinkComponent: LinkComp = 'a',\n}: BannerHeaderProps) {\n\tconst hasBreadcrumbs = breadcrumbItems != null && breadcrumbItems.length > 0\n\n\tlet linkItem = null\n\tif (backLink != null) {\n\t\tlinkItem = (\n\t\t\t<div className=\"\">\n\t\t\t\t<BackLink asChild label={backLink.label}>\n\t\t\t\t\t<LinkComp to={backLink.to ?? '..'} replace />\n\t\t\t\t</BackLink>\n\t\t\t</div>\n\t\t)\n\t} else if (hasBreadcrumbs) {\n\t\tlinkItem = (\n\t\t\t<Breadcrumb className=\"\">\n\t\t\t\t<BreadcrumbList className=\"text-sm\">\n\t\t\t\t\t{breadcrumbItems.map((item, i) => (\n\t\t\t\t\t\t<React.Fragment key={i}>\n\t\t\t\t\t\t\t{i > 0 && <BreadcrumbSeparator />}\n\t\t\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t\t\t{item.to != null ? (\n\t\t\t\t\t\t\t\t\t<BreadcrumbLink asChild>\n\t\t\t\t\t\t\t\t\t\t<LinkComp\n\t\t\t\t\t\t\t\t\t\t\tto={item.to}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t\t</LinkComp>\n\t\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground\">{item.label}</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t</React.Fragment>\n\t\t\t\t\t))}\n\t\t\t\t</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t)\n\t}\n\n\treturn (\n\t\t<div className=\"relative -mx-4 -mt-4 overflow-hidden md:-mx-6 md:-mt-6\">\n\t\t\t<div className=\"image-background absolute inset-0 opacity-10\" />\n\t\t\t<div className=\"relative flex items-start justify-between gap-4 px-4 py-8 md:px-6 md:pt-12\">\n\t\t\t\t<div className=\"min-w-0 flex-1 space-y-1.5\">\n\t\t\t\t\t{linkItem}\n\t\t\t\t\t<PageHeader>{title}</PageHeader>\n\t\t\t\t\t<PageDescription>{description}</PageDescription>\n\t\t\t\t</div>\n\t\t\t\t{actions != null ? (\n\t\t\t\t\t<div className=\"shrink-0 pt-0.5\">{actions}</div>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n"],"names":["BannerHeader","title","description","backLink","breadcrumbItems","actions","LinkComp","hasBreadcrumbs","linkItem","jsx","BackLink","Breadcrumb","BreadcrumbList","item","jsxs","React","BreadcrumbSeparator","BreadcrumbItem","BreadcrumbLink","PageHeader","PageDescription"],"mappings":";;;;;AAiDO,SAASA,EAAa;AAAA,EAC5B,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAeC,IAAW;AAC3B,GAAsB;AACrB,QAAMC,IAAiBH,KAAmB,QAAQA,EAAgB,SAAS;AAE3E,MAAII,IAAW;AACf,SAAIL,KAAY,OACfK,IACC,gBAAAC,EAAC,SAAI,WAAU,IACd,4BAACC,GAAA,EAAS,SAAO,IAAC,OAAOP,EAAS,OACjC,UAAA,gBAAAM,EAACH,GAAA,EAAS,IAAIH,EAAS,MAAM,MAAM,SAAO,IAAC,GAC5C,EAAA,CACD,IAESI,MACVC,sBACEG,GAAA,EAAW,WAAU,IACrB,UAAA,gBAAAF,EAACG,KAAe,WAAU,WACxB,UAAAR,EAAgB,IAAI,CAACS,GAAM,MAC3B,gBAAAC,EAACC,EAAM,UAAN,EACC,UAAA;AAAA,IAAA,IAAI,uBAAMC,GAAA,CAAA,CAAoB;AAAA,IAC/B,gBAAAP,EAACQ,KACC,UAAAJ,EAAK,MAAM,OACX,gBAAAJ,EAACS,GAAA,EAAe,SAAO,IACtB,UAAA,gBAAAT;AAAA,MAACH;AAAA,MAAA;AAAA,QACA,IAAIO,EAAK;AAAA,QACT,WAAU;AAAA,QAET,UAAAA,EAAK;AAAA,MAAA;AAAA,IAAA,GAER,IAEA,gBAAAJ,EAAC,QAAA,EAAK,WAAU,yBAAyB,UAAAI,EAAK,OAAM,EAAA,CAEtD;AAAA,EAAA,EAAA,GAfoB,CAgBrB,CACA,EAAA,CACF,GACD,IAKD,gBAAAC,EAAC,OAAA,EAAI,WAAU,0DACd,UAAA;AAAA,IAAA,gBAAAL,EAAC,OAAA,EAAI,WAAU,+CAAA,CAA+C;AAAA,IAC9D,gBAAAK,EAAC,OAAA,EAAI,WAAU,8EACd,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,8BACb,UAAA;AAAA,QAAAN;AAAA,QACD,gBAAAC,EAACU,KAAY,UAAAlB,EAAA,CAAM;AAAA,QACnB,gBAAAQ,EAACW,KAAiB,UAAAlB,EAAA,CAAY;AAAA,MAAA,GAC/B;AAAA,MACCG,KAAW,OACX,gBAAAI,EAAC,SAAI,WAAU,mBAAmB,aAAQ,IACvC;AAAA,IAAA,EAAA,CACL;AAAA,EAAA,GACD;AAEF;"}
@@ -1,104 +1,11 @@
1
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
2
- import { Slot as s } 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 "../shared/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
- ...n
36
- }) {
37
- return /* @__PURE__ */ a(
38
- r ? s : "a",
39
- {
40
- "data-slot": "breadcrumb-link",
41
- className: t("hover:text-foreground transition-colors", e),
42
- ...n
43
- }
44
- );
45
- }
46
- function N({ 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 B({
60
- children: r,
61
- className: e,
62
- ...n
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
- ...n,
72
- children: r ?? /* @__PURE__ */ a(l, {})
73
- }
74
- );
75
- }
76
- function k({
77
- className: r,
78
- ...e
79
- }) {
80
- return /* @__PURE__ */ o(
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
- }
1
+ import { B as e, a as s, b as m, c as b, d as c, e as d, f as B } from "../shared/Breadcrumb.js";
95
2
  export {
96
- f as Breadcrumb,
97
- k as BreadcrumbEllipsis,
98
- x as BreadcrumbItem,
99
- h as BreadcrumbLink,
100
- g as BreadcrumbList,
101
- N as BreadcrumbPage,
3
+ e as Breadcrumb,
4
+ s as BreadcrumbEllipsis,
5
+ m as BreadcrumbItem,
6
+ b as BreadcrumbLink,
7
+ c as BreadcrumbList,
8
+ d as BreadcrumbPage,
102
9
  B as BreadcrumbSeparator
103
10
  };
104
11
  //# sourceMappingURL=Breadcrumb.js.map
@@ -1 +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;"}
1
+ {"version":3,"file":"Breadcrumb.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
3
+ export declare function Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=Checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAA;AAI7D,wBAAgB,QAAQ,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACR,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,2CAuBrD"}
@@ -0,0 +1,2 @@
1
+ export { Checkbox } from './Checkbox';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,38 @@
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ import "react";
3
+ import { CheckIcon as o } from "lucide-react";
4
+ import * as r from "@radix-ui/react-checkbox";
5
+ import { c as a } from "../shared/utils.js";
6
+ function b({
7
+ className: c,
8
+ ...i
9
+ }) {
10
+ return /* @__PURE__ */ e(
11
+ r.Root,
12
+ {
13
+ "data-slot": "checkbox",
14
+ className: a(
15
+ "peer size-4 shrink-0 rounded border transition-shadow outline-none",
16
+ "bg-[var(--checkbox-unchecked-bg)] border-[var(--checkbox-unchecked-border)]",
17
+ "data-[state=checked]:bg-[var(--checkbox-checked)] data-[state=checked]:text-[var(--checkbox-checked-foreground)] data-[state=checked]:border-[var(--checkbox-checked)]",
18
+ "focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:border-ring",
19
+ "aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
20
+ "disabled:cursor-not-allowed disabled:opacity-50",
21
+ c
22
+ ),
23
+ ...i,
24
+ children: /* @__PURE__ */ e(
25
+ r.Indicator,
26
+ {
27
+ "data-slot": "checkbox-indicator",
28
+ className: "grid place-content-center text-current transition-none",
29
+ children: /* @__PURE__ */ e(o, { className: "size-3.5" })
30
+ }
31
+ )
32
+ }
33
+ );
34
+ }
35
+ export {
36
+ b as Checkbox
37
+ };
38
+ //# sourceMappingURL=Checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.js","sources":["../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { CheckIcon } from 'lucide-react'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\n\nimport { cn } from '@/utils'\n\nexport function Checkbox({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n\treturn (\n\t\t<CheckboxPrimitive.Root\n\t\t\tdata-slot=\"checkbox\"\n\t\t\tclassName={cn(\n\t\t\t\t'peer size-4 shrink-0 rounded border transition-shadow outline-none',\n\t\t\t\t'bg-[var(--checkbox-unchecked-bg)] border-[var(--checkbox-unchecked-border)]',\n\t\t\t\t'data-[state=checked]:bg-[var(--checkbox-checked)] data-[state=checked]:text-[var(--checkbox-checked-foreground)] data-[state=checked]:border-[var(--checkbox-checked)]',\n\t\t\t\t'focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:border-ring',\n\t\t\t\t'aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',\n\t\t\t\t'disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<CheckboxPrimitive.Indicator\n\t\t\t\tdata-slot=\"checkbox-indicator\"\n\t\t\t\tclassName=\"grid place-content-center text-current transition-none\"\n\t\t\t>\n\t\t\t\t<CheckIcon className=\"size-3.5\" />\n\t\t\t</CheckboxPrimitive.Indicator>\n\t\t</CheckboxPrimitive.Root>\n\t)\n}\n"],"names":["Checkbox","className","props","jsx","CheckboxPrimitive","cn","CheckIcon"],"mappings":";;;;;AAQO,SAASA,EAAS;AAAA,EACxB,WAAAC;AAAA,EACA,GAAGC;AACJ,GAAwD;AACvD,SACC,gBAAAC;AAAA,IAACC,EAAkB;AAAA,IAAlB;AAAA,MACA,aAAU;AAAA,MACV,WAAWC;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAJ;AAAA,MAAA;AAAA,MAEA,GAAGC;AAAA,MAEJ,UAAA,gBAAAC;AAAA,QAACC,EAAkB;AAAA,QAAlB;AAAA,UACA,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,UAAA,gBAAAD,EAACG,GAAA,EAAU,WAAU,WAAA,CAAW;AAAA,QAAA;AAAA,MAAA;AAAA,IACjC;AAAA,EAAA;AAGH;"}
@@ -0,0 +1,11 @@
1
+ import type * as React from 'react';
2
+ export interface ConfirmDeleteDialogProps {
3
+ open: boolean;
4
+ onOpenChange: (open: boolean) => void;
5
+ title: string;
6
+ description: React.ReactNode;
7
+ onConfirm: () => void;
8
+ isPending?: boolean;
9
+ }
10
+ export declare function ConfirmDeleteDialog({ open, onOpenChange, title, description, onConfirm, isPending, }: ConfirmDeleteDialogProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=ConfirmDeleteDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmDeleteDialog.d.ts","sourceRoot":"","sources":["../../../src/components/ConfirmDeleteDialog/ConfirmDeleteDialog.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAEnC,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,KAAK,CAAC,SAAS,CAAA;IAC5B,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,mBAAmB,CAAC,EACnC,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,SAAS,EACT,SAAiB,GACjB,EAAE,wBAAwB,2CAuB1B"}
@@ -0,0 +1,2 @@
1
+ export { ConfirmDeleteDialog, type ConfirmDeleteDialogProps, } from './ConfirmDeleteDialog';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ConfirmDeleteDialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,mBAAmB,EACnB,KAAK,wBAAwB,GAC7B,MAAM,uBAAuB,CAAA"}
@@ -0,0 +1,34 @@
1
+ import { jsx as e, jsxs as i } from "react/jsx-runtime";
2
+ import { B as t } from "../shared/Button.js";
3
+ import { D as c, b as d, e as D, h, c as f, d as u } from "../shared/Dialog.js";
4
+ function p({
5
+ open: r,
6
+ onOpenChange: l,
7
+ title: a,
8
+ description: n,
9
+ onConfirm: s,
10
+ isPending: o = !1
11
+ }) {
12
+ return /* @__PURE__ */ e(c, { open: r, onOpenChange: l, children: /* @__PURE__ */ i(d, { showCloseButton: !0, children: [
13
+ /* @__PURE__ */ i(D, { children: [
14
+ /* @__PURE__ */ e(h, { children: a }),
15
+ /* @__PURE__ */ e(f, { children: n })
16
+ ] }),
17
+ /* @__PURE__ */ i(u, { showCloseButton: !1, children: [
18
+ /* @__PURE__ */ e(t, { variant: "outline", onClick: () => l(!1), children: "Cancel" }),
19
+ /* @__PURE__ */ e(
20
+ t,
21
+ {
22
+ variant: "destructive",
23
+ onClick: s,
24
+ disabled: o,
25
+ children: o ? "Deleting…" : "Delete"
26
+ }
27
+ )
28
+ ] })
29
+ ] }) });
30
+ }
31
+ export {
32
+ p as ConfirmDeleteDialog
33
+ };
34
+ //# sourceMappingURL=ConfirmDeleteDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmDeleteDialog.js","sources":["../../src/components/ConfirmDeleteDialog/ConfirmDeleteDialog.tsx"],"sourcesContent":["'use client'\n\nimport { Button } from '@/components/Button/Button'\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n} from '@/components/Dialog/Dialog'\nimport type * as React from 'react'\n\nexport interface ConfirmDeleteDialogProps {\n\topen: boolean\n\tonOpenChange: (open: boolean) => void\n\ttitle: string\n\tdescription: React.ReactNode\n\tonConfirm: () => void\n\tisPending?: boolean\n}\n\nexport function ConfirmDeleteDialog({\n\topen,\n\tonOpenChange,\n\ttitle,\n\tdescription,\n\tonConfirm,\n\tisPending = false,\n}: ConfirmDeleteDialogProps) {\n\treturn (\n\t\t<Dialog open={open} onOpenChange={onOpenChange}>\n\t\t\t<DialogContent showCloseButton={true}>\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>{title}</DialogTitle>\n\t\t\t\t\t<DialogDescription>{description}</DialogDescription>\n\t\t\t\t</DialogHeader>\n\t\t\t\t<DialogFooter showCloseButton={false}>\n\t\t\t\t\t<Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"destructive\"\n\t\t\t\t\t\tonClick={onConfirm}\n\t\t\t\t\t\tdisabled={isPending}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isPending ? 'Deleting…' : 'Delete'}\n\t\t\t\t\t</Button>\n\t\t\t\t</DialogFooter>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t)\n}\n"],"names":["ConfirmDeleteDialog","open","onOpenChange","title","description","onConfirm","isPending","Dialog","jsxs","DialogContent","DialogHeader","jsx","DialogTitle","DialogDescription","DialogFooter","Button"],"mappings":";;;AAsBO,SAASA,EAAoB;AAAA,EACnC,MAAAC;AAAA,EACA,cAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC,IAAY;AACb,GAA6B;AAC5B,2BACEC,GAAA,EAAO,MAAAN,GAAY,cAAAC,GACnB,UAAA,gBAAAM,EAACC,GAAA,EAAc,iBAAiB,IAC/B,UAAA;AAAA,IAAA,gBAAAD,EAACE,GAAA,EACA,UAAA;AAAA,MAAA,gBAAAC,EAACC,KAAa,UAAAT,EAAA,CAAM;AAAA,MACpB,gBAAAQ,EAACE,KAAmB,UAAAT,EAAA,CAAY;AAAA,IAAA,GACjC;AAAA,IACA,gBAAAI,EAACM,GAAA,EAAa,iBAAiB,IAC9B,UAAA;AAAA,MAAA,gBAAAH,EAACI,GAAA,EAAO,SAAQ,WAAU,SAAS,MAAMb,EAAa,EAAK,GAAG,UAAA,SAAA,CAE9D;AAAA,MACA,gBAAAS;AAAA,QAACI;AAAA,QAAA;AAAA,UACA,SAAQ;AAAA,UACR,SAASV;AAAA,UACT,UAAUC;AAAA,UAET,cAAY,cAAc;AAAA,QAAA;AAAA,MAAA;AAAA,IAC5B,EAAA,CACD;AAAA,EAAA,EAAA,CACD,EAAA,CACD;AAEF;"}
@@ -0,0 +1,17 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface DelayedLoadingFallbackProps {
3
+ /** When true, shows fallback after delay (or nothing during delay). */
4
+ isLoading: boolean;
5
+ /** Delay in ms before showing fallback. Default: 250ms. */
6
+ delayMs?: number;
7
+ /** Shown after delay while loading (e.g. skeleton or spinner). */
8
+ fallback: ReactNode;
9
+ /** Shown when not loading. */
10
+ children: ReactNode;
11
+ }
12
+ /**
13
+ * Avoids flashing loading UI on fast loads: shows nothing for the first delayMs,
14
+ * then fallback; when loading ends, shows children immediately.
15
+ */
16
+ export declare function DelayedLoadingFallback({ isLoading, delayMs, fallback, children, }: DelayedLoadingFallbackProps): import("react/jsx-runtime").JSX.Element | null;
17
+ //# sourceMappingURL=DelayedLoadingFallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DelayedLoadingFallback.d.ts","sourceRoot":"","sources":["../../../src/components/DelayedLoadingFallback/DelayedLoadingFallback.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,MAAM,WAAW,2BAA2B;IAC3C,uEAAuE;IACvE,SAAS,EAAE,OAAO,CAAA;IAClB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kEAAkE;IAClE,QAAQ,EAAE,SAAS,CAAA;IACnB,8BAA8B;IAC9B,QAAQ,EAAE,SAAS,CAAA;CACnB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EACtC,SAAS,EACT,OAAa,EACb,QAAQ,EACR,QAAQ,GACR,EAAE,2BAA2B,kDAM7B"}
@@ -0,0 +1,2 @@
1
+ export { DelayedLoadingFallback, type DelayedLoadingFallbackProps, } from './DelayedLoadingFallback';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/DelayedLoadingFallback/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EACtB,KAAK,2BAA2B,GAChC,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { jsx as e, Fragment as a } from "react/jsx-runtime";
2
+ import { u } from "../shared/use-delayed-loading.js";
3
+ function m({
4
+ isLoading: r,
5
+ delayMs: l = 250,
6
+ fallback: n,
7
+ children: o
8
+ }) {
9
+ const t = u(r, l);
10
+ return r ? t ? /* @__PURE__ */ e(a, { children: n }) : null : /* @__PURE__ */ e(a, { children: o });
11
+ }
12
+ export {
13
+ m as DelayedLoadingFallback
14
+ };
15
+ //# sourceMappingURL=DelayedLoadingFallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DelayedLoadingFallback.js","sources":["../../src/components/DelayedLoadingFallback/DelayedLoadingFallback.tsx"],"sourcesContent":["'use client'\n\nimport type { ReactNode } from 'react'\nimport { useDelayedLoading } from '@/hooks/use-delayed-loading/use-delayed-loading'\n\nexport interface DelayedLoadingFallbackProps {\n\t/** When true, shows fallback after delay (or nothing during delay). */\n\tisLoading: boolean\n\t/** Delay in ms before showing fallback. Default: 250ms. */\n\tdelayMs?: number\n\t/** Shown after delay while loading (e.g. skeleton or spinner). */\n\tfallback: ReactNode\n\t/** Shown when not loading. */\n\tchildren: ReactNode\n}\n\n/**\n * Avoids flashing loading UI on fast loads: shows nothing for the first delayMs,\n * then fallback; when loading ends, shows children immediately.\n */\nexport function DelayedLoadingFallback({\n\tisLoading,\n\tdelayMs = 250,\n\tfallback,\n\tchildren,\n}: DelayedLoadingFallbackProps) {\n\tconst showFallback = useDelayedLoading(isLoading, delayMs)\n\tif (isLoading) {\n\t\treturn showFallback ? <>{fallback}</> : null\n\t}\n\treturn <>{children}</>\n}\n"],"names":["DelayedLoadingFallback","isLoading","delayMs","fallback","children","showFallback","useDelayedLoading","jsx","Fragment"],"mappings":";;AAoBO,SAASA,EAAuB;AAAA,EACtC,WAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,UAAAC;AAAA,EACA,UAAAC;AACD,GAAgC;AAC/B,QAAMC,IAAeC,EAAkBL,GAAWC,CAAO;AACzD,SAAID,IACII,IAAe,gBAAAE,EAAAC,GAAA,EAAG,UAAAL,EAAA,CAAS,IAAM,8BAE/B,UAAAC,GAAS;AACpB;"}