@mantis-core/ui 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/dist/components/Forms/ColorPickerInput.d.ts +10 -0
  2. package/dist/components/Forms/ColorPickerInput.d.ts.map +1 -0
  3. package/dist/components/Forms/ColorPickerInput.js +13 -0
  4. package/dist/components/Forms/ColorPickerInput.js.map +1 -0
  5. package/dist/components/Forms/Combobox.d.ts +10 -0
  6. package/dist/components/Forms/Combobox.d.ts.map +1 -0
  7. package/dist/components/Forms/Combobox.js +11 -0
  8. package/dist/components/Forms/Combobox.js.map +1 -0
  9. package/dist/components/Forms/CurrencyInput.d.ts +12 -0
  10. package/dist/components/Forms/CurrencyInput.d.ts.map +1 -0
  11. package/dist/components/Forms/CurrencyInput.js +9 -0
  12. package/dist/components/Forms/CurrencyInput.js.map +1 -0
  13. package/dist/components/Forms/DatePresets.d.ts +14 -0
  14. package/dist/components/Forms/DatePresets.d.ts.map +1 -0
  15. package/dist/components/Forms/DatePresets.js +55 -0
  16. package/dist/components/Forms/DatePresets.js.map +1 -0
  17. package/dist/components/Forms/DateRangeInput.d.ts +10 -0
  18. package/dist/components/Forms/DateRangeInput.d.ts.map +1 -0
  19. package/dist/components/Forms/DateRangeInput.js +13 -0
  20. package/dist/components/Forms/DateRangeInput.js.map +1 -0
  21. package/dist/components/Forms/FormWizard.d.ts +17 -0
  22. package/dist/components/Forms/FormWizard.d.ts.map +1 -0
  23. package/dist/components/Forms/FormWizard.js +63 -0
  24. package/dist/components/Forms/FormWizard.js.map +1 -0
  25. package/dist/components/Forms/OtpInput.d.ts +11 -0
  26. package/dist/components/Forms/OtpInput.d.ts.map +1 -0
  27. package/dist/components/Forms/OtpInput.js +11 -0
  28. package/dist/components/Forms/OtpInput.js.map +1 -0
  29. package/dist/components/Forms/PasswordInput.d.ts +12 -0
  30. package/dist/components/Forms/PasswordInput.d.ts.map +1 -0
  31. package/dist/components/Forms/PasswordInput.js +31 -0
  32. package/dist/components/Forms/PasswordInput.js.map +1 -0
  33. package/dist/components/Forms/PhoneInput.d.ts +11 -0
  34. package/dist/components/Forms/PhoneInput.d.ts.map +1 -0
  35. package/dist/components/Forms/PhoneInput.js +9 -0
  36. package/dist/components/Forms/PhoneInput.js.map +1 -0
  37. package/dist/components/Forms/RadioGroup.d.ts +15 -0
  38. package/dist/components/Forms/RadioGroup.d.ts.map +1 -0
  39. package/dist/components/Forms/RadioGroup.js +9 -0
  40. package/dist/components/Forms/RadioGroup.js.map +1 -0
  41. package/dist/components/Forms/RangeSlider.d.ts +13 -0
  42. package/dist/components/Forms/RangeSlider.d.ts.map +1 -0
  43. package/dist/components/Forms/RangeSlider.js +9 -0
  44. package/dist/components/Forms/RangeSlider.js.map +1 -0
  45. package/dist/components/Forms/RatingInput.d.ts +11 -0
  46. package/dist/components/Forms/RatingInput.d.ts.map +1 -0
  47. package/dist/components/Forms/RatingInput.js +11 -0
  48. package/dist/components/Forms/RatingInput.js.map +1 -0
  49. package/dist/components/Forms/SearchInput.d.ts +14 -0
  50. package/dist/components/Forms/SearchInput.d.ts.map +1 -0
  51. package/dist/components/Forms/SearchInput.js +34 -0
  52. package/dist/components/Forms/SearchInput.js.map +1 -0
  53. package/dist/components/Forms/TagsInput.d.ts +10 -0
  54. package/dist/components/Forms/TagsInput.d.ts.map +1 -0
  55. package/dist/components/Forms/TagsInput.js +11 -0
  56. package/dist/components/Forms/TagsInput.js.map +1 -0
  57. package/dist/components/auth/ChangePasswordForm.d.ts +16 -0
  58. package/dist/components/auth/ChangePasswordForm.d.ts.map +1 -0
  59. package/dist/components/auth/ChangePasswordForm.js +23 -0
  60. package/dist/components/auth/ChangePasswordForm.js.map +1 -0
  61. package/dist/components/auth/ForgotPasswordForm.d.ts +15 -0
  62. package/dist/components/auth/ForgotPasswordForm.d.ts.map +1 -0
  63. package/dist/components/auth/ForgotPasswordForm.js +14 -0
  64. package/dist/components/auth/ForgotPasswordForm.js.map +1 -0
  65. package/dist/components/auth/LoginForm.d.ts +22 -0
  66. package/dist/components/auth/LoginForm.d.ts.map +1 -0
  67. package/dist/components/auth/LoginForm.js +20 -0
  68. package/dist/components/auth/LoginForm.js.map +1 -0
  69. package/dist/components/auth/ResetPasswordForm.d.ts +16 -0
  70. package/dist/components/auth/ResetPasswordForm.d.ts.map +1 -0
  71. package/dist/components/auth/ResetPasswordForm.js +23 -0
  72. package/dist/components/auth/ResetPasswordForm.js.map +1 -0
  73. package/dist/components/auth/UserMenu.d.ts +22 -0
  74. package/dist/components/auth/UserMenu.d.ts.map +1 -0
  75. package/dist/components/auth/UserMenu.js +95 -0
  76. package/dist/components/auth/UserMenu.js.map +1 -0
  77. package/dist/components/auth/index.d.ts +11 -0
  78. package/dist/components/auth/index.d.ts.map +1 -0
  79. package/dist/components/auth/index.js +6 -0
  80. package/dist/components/auth/index.js.map +1 -0
  81. package/dist/components/charts/BarChart.d.ts +20 -0
  82. package/dist/components/charts/BarChart.d.ts.map +1 -0
  83. package/dist/components/charts/BarChart.js +28 -0
  84. package/dist/components/charts/BarChart.js.map +1 -0
  85. package/dist/components/charts/DonutChart.d.ts +21 -0
  86. package/dist/components/charts/DonutChart.d.ts.map +1 -0
  87. package/dist/components/charts/DonutChart.js +26 -0
  88. package/dist/components/charts/DonutChart.js.map +1 -0
  89. package/dist/components/charts/LineChart.d.ts +20 -0
  90. package/dist/components/charts/LineChart.d.ts.map +1 -0
  91. package/dist/components/charts/LineChart.js +27 -0
  92. package/dist/components/charts/LineChart.js.map +1 -0
  93. package/dist/components/charts/chart-setup.d.ts +3 -0
  94. package/dist/components/charts/chart-setup.d.ts.map +1 -0
  95. package/dist/components/charts/chart-setup.js +10 -0
  96. package/dist/components/charts/chart-setup.js.map +1 -0
  97. package/dist/components/charts/defaults.d.ts +13 -0
  98. package/dist/components/charts/defaults.d.ts.map +1 -0
  99. package/dist/components/charts/defaults.js +54 -0
  100. package/dist/components/charts/defaults.js.map +1 -0
  101. package/dist/components/charts/index.d.ts +9 -0
  102. package/dist/components/charts/index.d.ts.map +1 -0
  103. package/dist/components/charts/index.js +6 -0
  104. package/dist/components/charts/index.js.map +1 -0
  105. package/dist/components/data/DescriptionList.d.ts +11 -0
  106. package/dist/components/data/DescriptionList.d.ts.map +1 -0
  107. package/dist/components/data/DescriptionList.js +23 -0
  108. package/dist/components/data/DescriptionList.js.map +1 -0
  109. package/dist/components/data/StatCard.d.ts +14 -0
  110. package/dist/components/data/StatCard.d.ts.map +1 -0
  111. package/dist/components/data/StatCard.js +39 -0
  112. package/dist/components/data/StatCard.js.map +1 -0
  113. package/dist/components/data/Timeline.d.ts +15 -0
  114. package/dist/components/data/Timeline.d.ts.map +1 -0
  115. package/dist/components/data/Timeline.js +20 -0
  116. package/dist/components/data/Timeline.js.map +1 -0
  117. package/dist/components/feedback/Avatar.d.ts +9 -0
  118. package/dist/components/feedback/Avatar.d.ts.map +1 -0
  119. package/dist/components/feedback/Avatar.js +15 -0
  120. package/dist/components/feedback/Avatar.js.map +1 -0
  121. package/dist/components/feedback/CardSkeleton.d.ts +6 -0
  122. package/dist/components/feedback/CardSkeleton.d.ts.map +1 -0
  123. package/dist/components/feedback/CardSkeleton.js +7 -0
  124. package/dist/components/feedback/CardSkeleton.js.map +1 -0
  125. package/dist/components/feedback/EmptyState.d.ts +9 -0
  126. package/dist/components/feedback/EmptyState.d.ts.map +1 -0
  127. package/dist/components/feedback/EmptyState.js +6 -0
  128. package/dist/components/feedback/EmptyState.js.map +1 -0
  129. package/dist/components/feedback/ErrorBoundary.d.ts +18 -0
  130. package/dist/components/feedback/ErrorBoundary.d.ts.map +1 -0
  131. package/dist/components/feedback/ErrorBoundary.js +24 -0
  132. package/dist/components/feedback/ErrorBoundary.js.map +1 -0
  133. package/dist/components/feedback/TableSkeleton.d.ts +7 -0
  134. package/dist/components/feedback/TableSkeleton.d.ts.map +1 -0
  135. package/dist/components/feedback/TableSkeleton.js +7 -0
  136. package/dist/components/feedback/TableSkeleton.js.map +1 -0
  137. package/dist/components/feedback/Tag.d.ts +6 -0
  138. package/dist/components/feedback/Tag.d.ts.map +1 -0
  139. package/dist/components/feedback/Tag.js +7 -0
  140. package/dist/components/feedback/Tag.js.map +1 -0
  141. package/dist/components/navigation/CommandPalette.d.ts +17 -0
  142. package/dist/components/navigation/CommandPalette.d.ts.map +1 -0
  143. package/dist/components/navigation/CommandPalette.js +73 -0
  144. package/dist/components/navigation/CommandPalette.js.map +1 -0
  145. package/dist/components/navigation/PageTabs.d.ts +14 -0
  146. package/dist/components/navigation/PageTabs.d.ts.map +1 -0
  147. package/dist/components/navigation/PageTabs.js +21 -0
  148. package/dist/components/navigation/PageTabs.js.map +1 -0
  149. package/dist/components/overlays/Drawer.d.ts +6 -0
  150. package/dist/components/overlays/Drawer.d.ts.map +1 -0
  151. package/dist/components/overlays/Drawer.js +8 -0
  152. package/dist/components/overlays/Drawer.js.map +1 -0
  153. package/dist/components/overlays/Modal.d.ts +6 -0
  154. package/dist/components/overlays/Modal.d.ts.map +1 -0
  155. package/dist/components/overlays/Modal.js +8 -0
  156. package/dist/components/overlays/Modal.js.map +1 -0
  157. package/dist/components/pages/AdminPageHeader.d.ts.map +1 -1
  158. package/dist/components/pages/AdminPageHeader.js +2 -9
  159. package/dist/components/pages/AdminPageHeader.js.map +1 -1
  160. package/dist/components/pages/app-shell/AppShell.d.ts +5 -0
  161. package/dist/components/pages/app-shell/AppShell.d.ts.map +1 -0
  162. package/dist/components/pages/app-shell/AppShell.js +38 -0
  163. package/dist/components/pages/app-shell/AppShell.js.map +1 -0
  164. package/dist/components/pages/app-shell/Breadcrumbs.d.ts +8 -0
  165. package/dist/components/pages/app-shell/Breadcrumbs.d.ts.map +1 -0
  166. package/dist/components/pages/app-shell/Breadcrumbs.js +17 -0
  167. package/dist/components/pages/app-shell/Breadcrumbs.js.map +1 -0
  168. package/dist/components/pages/app-shell/index.d.ts +4 -0
  169. package/dist/components/pages/app-shell/index.d.ts.map +1 -0
  170. package/dist/components/pages/app-shell/index.js +3 -0
  171. package/dist/components/pages/app-shell/index.js.map +1 -0
  172. package/dist/components/pages/app-shell/types.d.ts +24 -0
  173. package/dist/components/pages/app-shell/types.d.ts.map +1 -0
  174. package/dist/components/pages/app-shell/types.js +2 -0
  175. package/dist/components/pages/app-shell/types.js.map +1 -0
  176. package/dist/validation/index.d.ts +2 -0
  177. package/dist/validation/index.d.ts.map +1 -0
  178. package/dist/validation/index.js +3 -0
  179. package/dist/validation/index.js.map +1 -0
  180. package/dist/validation/rules.d.ts +10 -0
  181. package/dist/validation/rules.d.ts.map +1 -0
  182. package/dist/validation/rules.js +39 -0
  183. package/dist/validation/rules.js.map +1 -0
  184. package/dist/validation/zod.d.ts +2 -0
  185. package/dist/validation/zod.d.ts.map +1 -0
  186. package/dist/validation/zod.js +3 -0
  187. package/dist/validation/zod.js.map +1 -0
  188. package/package.json +39 -3
@@ -0,0 +1,73 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useEffect, useRef } from "react";
4
+ import { Dialog } from "primereact/dialog";
5
+ const CommandPalette = ({ commands, open = false, onOpenChange }) => {
6
+ const [query, setQuery] = useState("");
7
+ const inputRef = useRef(null);
8
+ const filtered = query
9
+ ? commands.filter((cmd) => {
10
+ const q = query.toLowerCase();
11
+ return (cmd.label.toLowerCase().includes(q) ||
12
+ cmd.keywords?.some((k) => k.toLowerCase().includes(q)));
13
+ })
14
+ : commands;
15
+ const close = () => {
16
+ setQuery("");
17
+ onOpenChange?.(false);
18
+ };
19
+ const handleSelect = (cmd) => {
20
+ cmd.onSelect();
21
+ close();
22
+ };
23
+ // Focus input when opened
24
+ useEffect(() => {
25
+ if (open) {
26
+ setTimeout(() => inputRef.current?.focus(), 50);
27
+ }
28
+ }, [open]);
29
+ return (_jsx(Dialog, { visible: open, onHide: close, header: null, showHeader: false, dismissableMask: true, className: "mantis-core-command-palette", style: { width: "500px", maxWidth: "90vw" }, pt: { content: { style: { padding: 0 } } }, children: _jsxs("div", { style: { display: "flex", flexDirection: "column", overflow: "hidden" }, children: [_jsx("input", { ref: inputRef, type: "text", value: query, onChange: (e) => setQuery(e.target.value), placeholder: "Buscar comando...", style: {
30
+ width: "100%",
31
+ padding: "12px 16px",
32
+ border: "none",
33
+ borderBottom: "1px solid var(--border)",
34
+ outline: "none",
35
+ fontSize: "14px",
36
+ background: "var(--card)",
37
+ color: "inherit",
38
+ boxSizing: "border-box",
39
+ } }), _jsxs("ul", { style: {
40
+ listStyle: "none",
41
+ margin: 0,
42
+ padding: "4px",
43
+ maxHeight: "320px",
44
+ overflowY: "auto",
45
+ }, children: [filtered.map((cmd) => (_jsx("li", { children: _jsxs("button", { onClick: () => handleSelect(cmd), style: {
46
+ width: "100%",
47
+ display: "flex",
48
+ alignItems: "center",
49
+ gap: "10px",
50
+ padding: "10px 12px",
51
+ border: "none",
52
+ background: "transparent",
53
+ cursor: "pointer",
54
+ fontSize: "14px",
55
+ borderRadius: "6px",
56
+ textAlign: "left",
57
+ color: "inherit",
58
+ }, onMouseEnter: (e) => (e.currentTarget.style.background = "color-mix(in oklch, var(--primary), transparent 90%)"), onMouseLeave: (e) => (e.currentTarget.style.background = "transparent"), children: [cmd.icon && _jsx("span", { style: { flexShrink: 0 }, children: cmd.icon }), _jsx("span", { children: cmd.label })] }) }, cmd.id))), filtered.length === 0 && (_jsx("li", { style: { padding: "16px", textAlign: "center", color: "var(--muted-foreground)", fontSize: "14px" }, children: "Sin resultados" }))] })] }) }));
59
+ };
60
+ export function useCommandPalette(onOpen) {
61
+ useEffect(() => {
62
+ const handler = (e) => {
63
+ if ((e.metaKey || e.ctrlKey) && e.key === "k") {
64
+ e.preventDefault();
65
+ onOpen?.();
66
+ }
67
+ };
68
+ window.addEventListener("keydown", handler);
69
+ return () => window.removeEventListener("keydown", handler);
70
+ }, [onOpen]);
71
+ }
72
+ export default CommandPalette;
73
+ //# sourceMappingURL=CommandPalette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.js","sourceRoot":"","sources":["../../../src/components/navigation/CommandPalette.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import React, { type ReactNode } from "react";
2
+ import { type TabMenuProps } from "primereact/tabmenu";
3
+ type PageTabsProps = Omit<TabMenuProps, "model"> & {
4
+ tabs: {
5
+ label: string;
6
+ icon?: ReactNode;
7
+ href?: string;
8
+ command?: () => void;
9
+ }[];
10
+ activeIndex?: number;
11
+ };
12
+ declare const PageTabs: React.FC<PageTabsProps>;
13
+ export default PageTabs;
14
+ //# sourceMappingURL=PageTabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageTabs.d.ts","sourceRoot":"","sources":["../../../src/components/navigation/PageTabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGhE,KAAK,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG;IACjD,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,EAAE,CAAC;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA0BrC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { usePathname, useRouter } from "next/navigation";
4
+ import { TabMenu } from "primereact/tabmenu";
5
+ const PageTabs = ({ tabs, activeIndex, ...rest }) => {
6
+ const pathname = usePathname();
7
+ const router = useRouter();
8
+ const model = tabs.map((tab) => ({
9
+ label: tab.label,
10
+ icon: tab.icon,
11
+ command: tab.href
12
+ ? () => router.push(tab.href)
13
+ : tab.command,
14
+ }));
15
+ // Derive active index from pathname when href tabs are used
16
+ const resolvedActiveIndex = activeIndex ??
17
+ tabs.findIndex((t) => t.href && (pathname === t.href || pathname.startsWith(t.href + "/")));
18
+ return (_jsx("div", { className: "mantis-core-page-tabs", children: _jsx(TabMenu, { model: model, activeIndex: resolvedActiveIndex >= 0 ? resolvedActiveIndex : 0, ...rest }) }));
19
+ };
20
+ export default PageTabs;
21
+ //# sourceMappingURL=PageTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageTabs.js","sourceRoot":"","sources":["../../../src/components/navigation/PageTabs.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAqB,MAAM,oBAAoB,CAAC;AAQhE,MAAM,QAAQ,GAA4B,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;IAC3E,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,KAAK,GAAe,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC3C,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,GAAG,CAAC,IAA0B;QACpC,OAAO,EAAE,GAAG,CAAC,IAAI;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAK,CAAC;YAC9B,CAAC,CAAC,GAAG,CAAC,OAAO;KAChB,CAAC,CAAC,CAAC;IAEJ,4DAA4D;IAC5D,MAAM,mBAAmB,GACvB,WAAW;QACX,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAE9F,OAAO,CACL,cAAK,SAAS,EAAC,uBAAuB,YACpC,KAAC,OAAO,IACN,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,mBAAmB,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC3D,IAAI,GACR,GACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { SidebarProps } from "primereact/sidebar";
2
+ export type DrawerProps = Omit<SidebarProps, "className"> & {
3
+ className?: string;
4
+ };
5
+ export default function Drawer({ position, className, ...rest }: DrawerProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=Drawer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Drawer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC7B,QAAkB,EAClB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,WAAW,2CAQb"}
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import classNames from "classnames";
4
+ import { Sidebar } from "primereact/sidebar";
5
+ export default function Drawer({ position = "right", className, ...rest }) {
6
+ return (_jsx(Sidebar, { position: position, className: classNames("mantis-core-drawer", className), ...rest }));
7
+ }
8
+ //# sourceMappingURL=Drawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.js","sourceRoot":"","sources":["../../../src/components/overlays/Drawer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAO7C,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC7B,QAAQ,GAAG,OAAO,EAClB,SAAS,EACT,GAAG,IAAI,EACK;IACZ,OAAO,CACL,KAAC,OAAO,IACN,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,UAAU,CAAC,oBAAoB,EAAE,SAAS,CAAC,KAClD,IAAI,GACR,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { DialogProps } from "primereact/dialog";
2
+ export type ModalProps = Omit<DialogProps, "className"> & {
3
+ className?: string;
4
+ };
5
+ export default function Modal({ modal, dismissableMask, draggable, className, ...rest }: ModalProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=Modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Modal.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,KAAY,EACZ,eAAsB,EACtB,SAAiB,EACjB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,UAAU,2CAUZ"}
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import classNames from "classnames";
4
+ import { Dialog } from "primereact/dialog";
5
+ export default function Modal({ modal = true, dismissableMask = true, draggable = false, className, ...rest }) {
6
+ return (_jsx(Dialog, { modal: modal, dismissableMask: dismissableMask, draggable: draggable, className: classNames("mantis-core-modal", className), ...rest }));
7
+ }
8
+ //# sourceMappingURL=Modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../../src/components/overlays/Modal.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAO3C,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,KAAK,GAAG,IAAI,EACZ,eAAe,GAAG,IAAI,EACtB,SAAS,GAAG,KAAK,EACjB,SAAS,EACT,GAAG,IAAI,EACI;IACX,OAAO,CACL,KAAC,MAAM,IACL,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,UAAU,CAAC,mBAAmB,EAAE,SAAS,CAAC,KACjD,IAAI,GACR,CACH,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AdminPageHeader.d.ts","sourceRoot":"","sources":["../../../src/components/pages/AdminPageHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC9C,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAiEnD,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"AdminPageHeader.d.ts","sourceRoot":"","sources":["../../../src/components/pages/AdminPageHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGhE,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC9C,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAiCnD,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -1,16 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import Link from "next/link";
2
+ import Breadcrumbs from "./app-shell/Breadcrumbs";
3
3
  const AdminPageHeader = ({ title, description, actions, breadcrumbs, }) => {
4
- const hasBreadcrumbs = Boolean(breadcrumbs && breadcrumbs.length > 0);
5
4
  return (_jsxs("div", { className: 'flex items-start justify-between rounded-xl px-6 py-5 border border-border gap-4', style: {
6
5
  background: "linear-gradient(110deg, color-mix(in oklch, var(--primary), white 92%), color-mix(in oklch, var(--accent), white 90%))",
7
- }, children: [_jsxs("div", { children: [hasBreadcrumbs && (_jsx("nav", { "aria-label": 'Breadcrumb', className: 'mb-2', children: _jsx("ol", { className: 'flex flex-wrap items-center gap-1.5 text-xs', children: breadcrumbs.map((item, index) => {
8
- const isLast = index === breadcrumbs.length - 1;
9
- return (_jsxs("li", { className: 'flex items-center gap-1.5', children: [item.href && !isLast ? (_jsx(Link, { href: item.href, className: 'transition-colors hover:opacity-80', style: { color: "var(--muted-foreground)" }, children: item.label })) : (_jsx("span", { style: {
10
- color: isLast ? "color-mix(in oklch, var(--primary), black 24%)" : "var(--muted-foreground)",
11
- fontWeight: isLast ? 600 : 500,
12
- }, children: item.label })), !isLast && _jsx("span", { style: { color: "var(--muted-foreground)" }, children: "/" })] }, `${item.label}-${index}`));
13
- }) }) })), _jsx("h1", { className: 'text-2xl font-bold', style: {
6
+ }, children: [_jsxs("div", { children: [breadcrumbs && breadcrumbs.length > 0 && _jsx(Breadcrumbs, { items: breadcrumbs }), _jsx("h1", { className: 'text-2xl font-bold', style: {
14
7
  color: "color-mix(in oklch, var(--primary), black 20%)",
15
8
  fontFamily: "var(--font-display)",
16
9
  }, children: title }), description && (_jsx("p", { className: 'text-sm mt-0.5', style: { color: "var(--muted-foreground)" }, children: description }))] }), actions && _jsx("div", { children: actions })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"AdminPageHeader.js","sourceRoot":"","sources":["../../../src/components/pages/AdminPageHeader.tsx"],"names":[],"mappings":";AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAU7B,MAAM,eAAe,GAAmC,CAAC,EACvD,KAAK,EACL,WAAW,EACX,OAAO,EACP,WAAW,GACZ,EAAE,EAAE;IACH,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEtE,OAAO,CACL,eACE,SAAS,EAAC,kFAAkF,EAC5F,KAAK,EAAE;YACL,UAAU,EACR,wHAAwH;SAC3H,aACD,0BACG,cAAc,IAAI,CACjB,4BAAgB,YAAY,EAAC,SAAS,EAAC,MAAM,YAC3C,aAAI,SAAS,EAAC,6CAA6C,YACxD,WAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gCAChC,MAAM,MAAM,GAAG,KAAK,KAAK,WAAY,CAAC,MAAM,GAAG,CAAC,CAAC;gCAEjD,OAAO,CACL,cAAmC,SAAS,EAAC,2BAA2B,aACrE,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACtB,KAAC,IAAI,IACH,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,SAAS,EAAC,oCAAoC,EAC9C,KAAK,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,YAC1C,IAAI,CAAC,KAAK,GACN,CACR,CAAC,CAAC,CAAC,CACF,eACE,KAAK,EAAE;gDACL,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC,yBAAyB;gDAC5F,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;6CAC/B,YACA,IAAI,CAAC,KAAK,GACN,CACR,EACA,CAAC,MAAM,IAAI,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,kBAAU,KAjBhE,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,CAkB5B,CACN,CAAC;4BACJ,CAAC,CAAC,GACC,GACD,CACP,EAED,aACE,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE;4BACL,KAAK,EAAE,gDAAgD;4BACvD,UAAU,EAAE,qBAAqB;yBAClC,YACA,KAAK,GACH,EACJ,WAAW,IAAI,CACd,YAAG,SAAS,EAAC,gBAAgB,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,YACtE,WAAW,GACV,CACL,IACG,EACL,OAAO,IAAI,wBAAM,OAAO,GAAO,IAC5B,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"AdminPageHeader.js","sourceRoot":"","sources":["../../../src/components/pages/AdminPageHeader.tsx"],"names":[],"mappings":";AAEA,OAAO,WAAW,MAAM,yBAAyB,CAAC;AASlD,MAAM,eAAe,GAAmC,CAAC,EACvD,KAAK,EACL,WAAW,EACX,OAAO,EACP,WAAW,GACZ,EAAE,EAAE;IACH,OAAO,CACL,eACE,SAAS,EAAC,kFAAkF,EAC5F,KAAK,EAAE;YACL,UAAU,EACR,wHAAwH;SAC3H,aACD,0BACG,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,KAAC,WAAW,IAAC,KAAK,EAAE,WAAW,GAAI,EAE7E,aACE,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE;4BACL,KAAK,EAAE,gDAAgD;4BACvD,UAAU,EAAE,qBAAqB;yBAClC,YACA,KAAK,GACH,EACJ,WAAW,IAAI,CACd,YAAG,SAAS,EAAC,gBAAgB,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,YACtE,WAAW,GACV,CACL,IACG,EACL,OAAO,IAAI,wBAAM,OAAO,GAAO,IAC5B,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ import type { AppShellProps } from "./types";
3
+ declare const AppShell: React.FC<AppShellProps>;
4
+ export default AppShell;
5
+ //# sourceMappingURL=AppShell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../../src/components/pages/app-shell/AppShell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAKxC,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,SAAS,CAAC;AAqGzD,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA4LrC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import Link from "next/link";
5
+ import { usePathname } from "next/navigation";
6
+ import classNames from "classnames";
7
+ import { Sidebar } from "primereact/sidebar";
8
+ // ─── helpers ────────────────────────────────────────────────────────────────
9
+ const isActive = (pathname, href) => Boolean(href && (pathname === href || pathname.startsWith(href + "/")));
10
+ const NavItemLink = ({ item, pathname, onClick, collapsed = false }) => {
11
+ const active = isActive(pathname, item.href);
12
+ const cls = classNames("mantis-core-appshell-nav-item", "w-full flex items-center gap-2.5 px-3 py-2.5 rounded-md text-sm transition-all duration-150 text-left", collapsed ? "justify-center" : "", active
13
+ ? "bg-primary/10 text-primary font-semibold"
14
+ : "text-muted-foreground font-medium hover:bg-primary/5 hover:text-primary");
15
+ const inner = (_jsxs(_Fragment, { children: [item.icon && (_jsx("span", { className: 'shrink-0 w-4 flex items-center justify-center', children: item.icon })), !collapsed && _jsx("span", { className: 'flex-1 truncate', children: item.label }), !collapsed && active && _jsx("span", { className: 'w-1.5 h-1.5 rounded-full bg-primary shrink-0' })] }));
16
+ return item.href ? (_jsx(Link, { href: item.href, onClick: onClick, className: cls, title: collapsed ? item.label : undefined, children: inner })) : (_jsx("button", { onClick: onClick, className: cls, title: collapsed ? item.label : undefined, children: inner }));
17
+ };
18
+ const NavGroup = ({ item, pathname, onNavigate, collapsed = false }) => (_jsxs("div", { className: 'mantis-core-appshell-nav-group', children: [!collapsed && (_jsxs("span", { className: 'block px-3 py-1.5 text-[0.7rem] font-semibold uppercase tracking-wider', style: { color: "var(--muted-foreground)" }, children: [item.icon && _jsx("span", { className: 'mr-1.5', children: item.icon }), item.label] })), item.children?.map((child) => (_jsx(NavItemLink, { item: child, pathname: pathname, onClick: onNavigate, collapsed: collapsed }, child.label)))] }));
19
+ const NavList = ({ items, pathname, onNavigate, collapsed = false }) => (_jsx("ul", { className: 'flex flex-col gap-0.5 list-none m-0 p-0', children: items.map((item) => item.children?.length ? (_jsx("li", { children: _jsx(NavGroup, { item: item, pathname: pathname, onNavigate: onNavigate, collapsed: collapsed }) }, item.label)) : (_jsx("li", { children: _jsx(NavItemLink, { item: item, pathname: pathname, onClick: onNavigate, collapsed: collapsed }) }, item.label))) }));
20
+ // ─── AppShell ────────────────────────────────────────────────────────────────
21
+ const AppShell = ({ navItems, brand, topbarActions, user, footer, children, collapsible = false, defaultCollapsed = false, }) => {
22
+ const pathname = usePathname();
23
+ const [mobileOpen, setMobileOpen] = useState(false);
24
+ const [collapsed, setCollapsed] = useState(defaultCollapsed);
25
+ return (_jsxs("div", { className: 'mantis-core-appshell flex min-h-screen', children: [_jsxs("aside", { className: classNames("mantis-core-appshell-sidebar hidden lg:flex flex-col shrink-0 border-r border-border transition-[width] duration-200", collapsible && collapsed ? "w-14" : "w-60"), style: { background: "var(--card)" }, children: [brand && (_jsxs("div", { className: 'mantis-core-appshell-sidebar-brand flex items-center h-16 px-4 border-b border-border shrink-0', style: {
26
+ background: "linear-gradient(110deg, color-mix(in oklch, var(--primary), white 92%), color-mix(in oklch, var(--accent), white 90%))",
27
+ overflow: "hidden",
28
+ }, children: [!collapsed && brand, collapsible && (_jsx("button", { onClick: () => setCollapsed((c) => !c), "aria-label": "Toggle sidebar", className: classNames("ml-auto p-1 rounded-sm bg-transparent border-0 cursor-pointer text-muted-foreground hover:text-primary transition-colors duration-150", collapsed ? "mx-auto" : ""), style: { lineHeight: 0 }, children: _jsx("svg", { width: '16', height: '16', viewBox: '0 0 16 16', fill: 'none', stroke: 'currentColor', strokeWidth: '1.75', strokeLinecap: 'round', strokeLinejoin: 'round', children: collapsed ? (_jsx("polyline", { points: '6 3 11 8 6 13' })) : (_jsx("polyline", { points: '10 3 5 8 10 13' })) }) }))] })), !brand && collapsible && (_jsx("div", { className: 'flex items-center justify-center h-10 border-b border-border', children: _jsx("button", { onClick: () => setCollapsed((c) => !c), "aria-label": "Toggle sidebar", className: 'p-1 rounded-sm bg-transparent border-0 cursor-pointer text-muted-foreground hover:text-primary transition-colors duration-150', style: { lineHeight: 0 }, children: _jsx("svg", { width: '16', height: '16', viewBox: '0 0 16 16', fill: 'none', stroke: 'currentColor', strokeWidth: '1.75', strokeLinecap: 'round', strokeLinejoin: 'round', children: collapsed ? (_jsx("polyline", { points: '6 3 11 8 6 13' })) : (_jsx("polyline", { points: '10 3 5 8 10 13' })) }) }) })), _jsx("nav", { className: 'flex-1 overflow-y-auto p-3', children: _jsx(NavList, { items: navItems, pathname: pathname, collapsed: collapsible && collapsed }) }), footer && !collapsed && (_jsx("div", { className: 'mantis-core-appshell-sidebar-footer shrink-0 border-t border-border p-3', children: footer }))] }), _jsxs("div", { className: 'flex flex-col flex-1 min-w-0', children: [_jsxs("header", { className: 'mantis-core-appshell-topbar flex items-center h-16 px-4 sm:px-6 border-b border-border shrink-0 gap-3', style: {
29
+ background: "var(--card)",
30
+ boxShadow: "0 1px 3px color-mix(in oklch, var(--foreground), transparent 92%)",
31
+ }, children: [_jsx("button", { className: 'lg:hidden p-2 rounded-sm bg-transparent border-0 cursor-pointer text-muted-foreground hover:text-primary transition-colors duration-150 leading-none', "aria-label": 'Abrir men\u00FA', "aria-expanded": mobileOpen, onClick: () => setMobileOpen(true), children: _jsxs("svg", { width: '18', height: '18', viewBox: '0 0 18 18', fill: 'none', stroke: 'currentColor', strokeWidth: '1.75', strokeLinecap: 'round', children: [_jsx("line", { x1: '2', y1: '4.5', x2: '16', y2: '4.5' }), _jsx("line", { x1: '2', y1: '9', x2: '16', y2: '9' }), _jsx("line", { x1: '2', y1: '13.5', x2: '16', y2: '13.5' })] }) }), brand && (_jsx("div", { className: 'lg:hidden flex items-center', children: brand })), _jsx("div", { className: 'flex-1' }), topbarActions && (_jsx("div", { className: 'mantis-core-appshell-topbar-actions flex items-center gap-2', children: topbarActions })), user && (_jsx("div", { className: 'mantis-core-appshell-topbar-user flex items-center', children: user }))] }), _jsx("main", { className: 'mantis-core-appshell-content flex-1', children: children })] }), _jsxs(Sidebar, { visible: mobileOpen, onHide: () => setMobileOpen(false), position: 'left', className: 'mantis-core-appshell-mobile-drawer w-72', style: { background: "var(--card)" }, children: [brand && (_jsx("div", { className: 'flex items-center mb-4 pb-4 border-b border-border', style: {
32
+ background: "linear-gradient(110deg, color-mix(in oklch, var(--primary), white 92%), color-mix(in oklch, var(--accent), white 90%))",
33
+ margin: "-1rem -1rem 1rem",
34
+ padding: "1rem",
35
+ }, children: brand })), _jsx(NavList, { items: navItems, pathname: pathname, onNavigate: () => setMobileOpen(false) }), footer && (_jsx("div", { className: 'mt-auto pt-4 border-t border-border', children: footer }))] })] }));
36
+ };
37
+ export default AppShell;
38
+ //# sourceMappingURL=AppShell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../../../../src/components/pages/app-shell/AppShell.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import type { AdminBreadcrumbItem } from "../admin-layout/types";
3
+ type BreadcrumbsProps = {
4
+ items: readonly AdminBreadcrumbItem[];
5
+ };
6
+ declare const Breadcrumbs: React.FC<BreadcrumbsProps>;
7
+ export default Breadcrumbs;
8
+ //# sourceMappingURL=Breadcrumbs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumbs.d.ts","sourceRoot":"","sources":["../../../../src/components/pages/app-shell/Breadcrumbs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACvC,CAAC;AAEF,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAoC3C,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import Link from "next/link";
3
+ const Breadcrumbs = ({ items }) => {
4
+ if (!items.length)
5
+ return null;
6
+ return (_jsx("nav", { "aria-label": 'Breadcrumb', className: 'mb-2', children: _jsx("ol", { className: 'flex flex-wrap items-center gap-1.5 text-xs', children: items.map((item, index) => {
7
+ const isLast = index === items.length - 1;
8
+ return (_jsxs("li", { className: 'flex items-center gap-1.5', children: [item.href && !isLast ? (_jsx(Link, { href: item.href, className: 'transition-colors hover:opacity-80', style: { color: "var(--muted-foreground)" }, children: item.label })) : (_jsx("span", { style: {
9
+ color: isLast
10
+ ? "color-mix(in oklch, var(--primary), black 24%)"
11
+ : "var(--muted-foreground)",
12
+ fontWeight: isLast ? 600 : 500,
13
+ }, children: item.label })), !isLast && _jsx("span", { style: { color: "var(--muted-foreground)" }, children: "/" })] }, `${item.label}-${index}`));
14
+ }) }) }));
15
+ };
16
+ export default Breadcrumbs;
17
+ //# sourceMappingURL=Breadcrumbs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumbs.js","sourceRoot":"","sources":["../../../../src/components/pages/app-shell/Breadcrumbs.tsx"],"names":[],"mappings":";AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAO7B,MAAM,WAAW,GAA+B,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5D,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE/B,OAAO,CACL,4BAAgB,YAAY,EAAC,SAAS,EAAC,MAAM,YAC3C,aAAI,SAAS,EAAC,6CAA6C,YACxD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACzB,MAAM,MAAM,GAAG,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBAE1C,OAAO,CACL,cAAmC,SAAS,EAAC,2BAA2B,aACrE,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACtB,KAAC,IAAI,IACH,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,SAAS,EAAC,oCAAoC,EAC9C,KAAK,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,YAC1C,IAAI,CAAC,KAAK,GACN,CACR,CAAC,CAAC,CAAC,CACF,eACE,KAAK,EAAE;gCACL,KAAK,EAAE,MAAM;oCACX,CAAC,CAAC,gDAAgD;oCAClD,CAAC,CAAC,yBAAyB;gCAC7B,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;6BAC/B,YACA,IAAI,CAAC,KAAK,GACN,CACR,EACA,CAAC,MAAM,IAAI,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,kBAAU,KAnBhE,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,CAoB5B,CACN,CAAC;YACJ,CAAC,CAAC,GACC,GACD,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { default as AppShell } from "./AppShell";
2
+ export { default as Breadcrumbs } from "./Breadcrumbs";
3
+ export type { AppNavItem, AppShellProps } from "./types";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/pages/app-shell/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { default as AppShell } from "./AppShell";
2
+ export { default as Breadcrumbs } from "./Breadcrumbs";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/pages/app-shell/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ReactNode } from "react";
2
+ export type AppNavItem = {
3
+ label: string;
4
+ href?: string;
5
+ icon?: ReactNode;
6
+ children?: AppNavItem[];
7
+ };
8
+ export type AppShellProps = {
9
+ navItems: AppNavItem[];
10
+ /** Brand slot: logo/name rendered in the sidebar header and topbar (mobile) */
11
+ brand?: ReactNode;
12
+ /** Extra content rendered in the topbar right area, before the user slot */
13
+ topbarActions?: ReactNode;
14
+ /** User profile slot rendered at the end of the topbar */
15
+ user?: ReactNode;
16
+ /** Optional footer rendered at the bottom of the sidebar */
17
+ footer?: ReactNode;
18
+ children: ReactNode;
19
+ /** Enable collapsible desktop sidebar (default: false) */
20
+ collapsible?: boolean;
21
+ /** Initial collapsed state when collapsible is true (default: false) */
22
+ defaultCollapsed?: boolean;
23
+ };
24
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/pages/app-shell/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/components/pages/app-shell/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from "./rules";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./rules";
2
+ // zod.ts is NOT re-exported here — opt-in via @mantis-core/ui/validation/zod
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,6EAA6E"}
@@ -0,0 +1,10 @@
1
+ import type { RegisterOptions } from "react-hook-form";
2
+ export declare function requiredRule(msg?: string): RegisterOptions;
3
+ export declare function notEmptyRule(msg?: string): RegisterOptions;
4
+ export declare function emailRule(msg?: string): RegisterOptions;
5
+ export declare function phoneRule(msg?: string): RegisterOptions;
6
+ export declare function cedulaRule(msg?: string): RegisterOptions;
7
+ export declare function rucRule(msg?: string): RegisterOptions;
8
+ export declare function minLengthRule(n: number, msg?: string): RegisterOptions;
9
+ export declare function maxLengthRule(n: number, msg?: string): RegisterOptions;
10
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/validation/rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAcvD,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,CAE1D;AAED,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,CAK1D;AAED,wBAAgB,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,CAEvD;AAED,wBAAgB,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,CAEvD;AAED,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,CAExD;AAED,wBAAgB,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,CAErD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,CAEtE;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,CAEtE"}
@@ -0,0 +1,39 @@
1
+ import { isNotEmptyString, isEmail, isPhone, isEcuadorianCedula, isRUC } from "@mantis-core/utils";
2
+ const MSG = {
3
+ required: "Este campo es obligatorio",
4
+ notEmpty: "Este campo no puede estar vacío",
5
+ email: "Ingrese un correo electrónico válido",
6
+ phone: "Ingrese un número de teléfono válido",
7
+ cedula: "Ingrese una cédula ecuatoriana válida",
8
+ ruc: "Ingrese un RUC ecuatoriano válido",
9
+ minLength: (n) => `Mínimo ${n} caracteres`,
10
+ maxLength: (n) => `Máximo ${n} caracteres`,
11
+ };
12
+ export function requiredRule(msg) {
13
+ return { required: msg ?? MSG.required };
14
+ }
15
+ export function notEmptyRule(msg) {
16
+ return {
17
+ required: msg ?? MSG.required,
18
+ validate: (v) => isNotEmptyString(v) || (msg ?? MSG.notEmpty),
19
+ };
20
+ }
21
+ export function emailRule(msg) {
22
+ return { validate: (v) => isEmail(v) || (msg ?? MSG.email) };
23
+ }
24
+ export function phoneRule(msg) {
25
+ return { validate: (v) => isPhone(v) || (msg ?? MSG.phone) };
26
+ }
27
+ export function cedulaRule(msg) {
28
+ return { validate: (v) => isEcuadorianCedula(v) || (msg ?? MSG.cedula) };
29
+ }
30
+ export function rucRule(msg) {
31
+ return { validate: (v) => isRUC(v) || (msg ?? MSG.ruc) };
32
+ }
33
+ export function minLengthRule(n, msg) {
34
+ return { minLength: { value: n, message: msg ?? MSG.minLength(n) } };
35
+ }
36
+ export function maxLengthRule(n, msg) {
37
+ return { maxLength: { value: n, message: msg ?? MSG.maxLength(n) } };
38
+ }
39
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/validation/rules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEnG,MAAM,GAAG,GAAG;IACV,QAAQ,EAAE,2BAA2B;IACrC,QAAQ,EAAE,iCAAiC;IAC3C,KAAK,EAAE,sCAAsC;IAC7C,KAAK,EAAE,sCAAsC;IAC7C,MAAM,EAAE,uCAAuC;IAC/C,GAAG,EAAE,mCAAmC;IACxC,SAAS,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa;IAClD,SAAS,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa;CAC1C,CAAC;AAEX,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,OAAO;QACL,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,QAAQ;QAC7B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAY;IACrC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAY;IAClC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,GAAY;IACnD,OAAO,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,GAAY;IACnD,OAAO,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACvE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { zodResolver } from "@hookform/resolvers/zod";
2
+ //# sourceMappingURL=zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../../src/validation/zod.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ // ponytail: thin re-export — consumers bring their own zod + @hookform/resolvers
2
+ export { zodResolver } from "@hookform/resolvers/zod";
3
+ //# sourceMappingURL=zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.js","sourceRoot":"","sources":["../../src/validation/zod.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantis-core/ui",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "private": false,
5
5
  "description": "Reusable React UI components for Mantis Core.",
6
6
  "type": "module",
@@ -28,6 +28,14 @@
28
28
  "./table-filter-field": {
29
29
  "types": "./dist/components/table-filter-field.d.ts",
30
30
  "import": "./dist/components/table-filter-field.js"
31
+ },
32
+ "./validation": {
33
+ "types": "./dist/validation/index.d.ts",
34
+ "import": "./dist/validation/index.js"
35
+ },
36
+ "./validation/zod": {
37
+ "types": "./dist/validation/zod.d.ts",
38
+ "import": "./dist/validation/zod.js"
31
39
  }
32
40
  },
33
41
  "files": [
@@ -37,16 +45,44 @@
37
45
  "COMPONENTS.md",
38
46
  "PRIMEREACT_MAPPING.md"
39
47
  ],
48
+ "devDependencies": {
49
+ "@hookform/resolvers": "^3.10.0",
50
+ "@testing-library/jest-dom": "^6.6.3",
51
+ "@testing-library/react": "^16.3.0",
52
+ "@testing-library/user-event": "^14.5.2",
53
+ "chart.js": "^4.5.0",
54
+ "jsdom": "^26.1.0",
55
+ "react-chartjs-2": "^5.3.1",
56
+ "zod": "^3.25.76"
57
+ },
40
58
  "publishConfig": {
41
59
  "access": "public"
42
60
  },
43
61
  "peerDependencies": {
62
+ "@hookform/resolvers": ">=3.0.0",
63
+ "chart.js": ">=4.0.0",
44
64
  "next": "^16.0.0",
45
65
  "primeicons": "^7.0.0",
46
66
  "primereact": "^10.9.0",
47
67
  "react": "^19.0.0",
68
+ "react-chartjs-2": ">=5.0.0",
48
69
  "react-dom": "^19.0.0",
49
- "react-hook-form": "^7.68.0"
70
+ "react-hook-form": "^7.68.0",
71
+ "zod": ">=3.0.0"
72
+ },
73
+ "peerDependenciesMeta": {
74
+ "@hookform/resolvers": {
75
+ "optional": true
76
+ },
77
+ "chart.js": {
78
+ "optional": true
79
+ },
80
+ "react-chartjs-2": {
81
+ "optional": true
82
+ },
83
+ "zod": {
84
+ "optional": true
85
+ }
50
86
  },
51
87
  "dependencies": {
52
88
  "@ckeditor/ckeditor5-react": "^11.0.0",
@@ -58,7 +94,7 @@
58
94
  "react-datepicker": "^9.0.0",
59
95
  "react-leaflet": "^5.0.0",
60
96
  "react-select": "^5.10.2",
61
- "@mantis-core/utils": "^0.4.0"
97
+ "@mantis-core/utils": "^0.5.0"
62
98
  },
63
99
  "repository": {
64
100
  "type": "git",