@motor-hero/ui-kit 0.40.0 → 0.43.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.
- package/dist/components/date-picker.d.ts +4 -2
- package/dist/components/date-picker.d.ts.map +1 -1
- package/dist/components/highlight-pill.d.ts +18 -0
- package/dist/components/highlight-pill.d.ts.map +1 -0
- package/dist/index.cjs +177 -149
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +130 -103
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/date-picker.tsx +8 -5
- package/src/components/highlight-pill.tsx +43 -0
- package/src/index.ts +2 -0
package/dist/index.cjs
CHANGED
|
@@ -46,6 +46,7 @@ __export(index_exports, {
|
|
|
46
46
|
FormDialog: () => FormDialog,
|
|
47
47
|
FormDialogLayout: () => FormDialogLayout,
|
|
48
48
|
FormField: () => FormField,
|
|
49
|
+
HighlightPill: () => HighlightPill,
|
|
49
50
|
MobileCardList: () => MobileCardList,
|
|
50
51
|
ModeToggle: () => ModeToggle,
|
|
51
52
|
MultiCombobox: () => MultiCombobox,
|
|
@@ -1055,6 +1056,7 @@ var MASK_REPLACEMENT = { _: /\d/ };
|
|
|
1055
1056
|
var DATE_FORMAT = "dd/MM/yyyy";
|
|
1056
1057
|
var TIME_FORMAT = "HH:mm";
|
|
1057
1058
|
var DATE_VALUE_FORMAT = "yyyy-MM-dd";
|
|
1059
|
+
var DATETIME_VALUE_FORMAT = "yyyy-MM-dd'T'HH:mm";
|
|
1058
1060
|
function pad(n) {
|
|
1059
1061
|
return String(n).padStart(2, "0");
|
|
1060
1062
|
}
|
|
@@ -1070,8 +1072,8 @@ function dateOnlyToDate(value) {
|
|
|
1070
1072
|
}
|
|
1071
1073
|
function dateTimeToDate(value) {
|
|
1072
1074
|
if (!value) return void 0;
|
|
1073
|
-
const parsed = new Date(
|
|
1074
|
-
return
|
|
1075
|
+
const parsed = (0, import_date_fns.parse)(value, DATETIME_VALUE_FORMAT, /* @__PURE__ */ new Date());
|
|
1076
|
+
return (0, import_date_fns.isValid)(parsed) ? parsed : void 0;
|
|
1075
1077
|
}
|
|
1076
1078
|
function displayFor(value, withTime) {
|
|
1077
1079
|
const date = withTime ? dateTimeToDate(value) : dateOnlyToDate(value);
|
|
@@ -1166,7 +1168,7 @@ function DatePickerImpl({
|
|
|
1166
1168
|
if (!time) return;
|
|
1167
1169
|
const combined = new Date(date);
|
|
1168
1170
|
combined.setHours(time.getHours(), time.getMinutes(), 0, 0);
|
|
1169
|
-
onChange(
|
|
1171
|
+
onChange((0, import_date_fns.format)(combined, DATETIME_VALUE_FORMAT));
|
|
1170
1172
|
setOpen(false);
|
|
1171
1173
|
};
|
|
1172
1174
|
const handleCalendarSelect = (date) => {
|
|
@@ -1583,9 +1585,34 @@ function FormField({ label, htmlFor, error, required, children, className }) {
|
|
|
1583
1585
|
] });
|
|
1584
1586
|
}
|
|
1585
1587
|
|
|
1588
|
+
// src/components/highlight-pill.tsx
|
|
1589
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
1590
|
+
function HighlightPill({
|
|
1591
|
+
backgroundColor,
|
|
1592
|
+
textColor,
|
|
1593
|
+
className,
|
|
1594
|
+
children
|
|
1595
|
+
}) {
|
|
1596
|
+
const style = {
|
|
1597
|
+
backgroundColor: backgroundColor ?? "var(--status-neutral-surface, #f3f4f6)",
|
|
1598
|
+
color: textColor ?? "var(--status-neutral-text, #374151)"
|
|
1599
|
+
};
|
|
1600
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1601
|
+
"span",
|
|
1602
|
+
{
|
|
1603
|
+
style,
|
|
1604
|
+
className: cn(
|
|
1605
|
+
"inline-flex items-center rounded-md px-2 py-0.5 text-xs font-medium",
|
|
1606
|
+
className
|
|
1607
|
+
),
|
|
1608
|
+
children
|
|
1609
|
+
}
|
|
1610
|
+
);
|
|
1611
|
+
}
|
|
1612
|
+
|
|
1586
1613
|
// src/components/mobile-card-list.tsx
|
|
1587
1614
|
var import_react5 = require("react");
|
|
1588
|
-
var
|
|
1615
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
1589
1616
|
var SCROLL_THRESHOLD = 8;
|
|
1590
1617
|
function MobileCardList({
|
|
1591
1618
|
data,
|
|
@@ -1616,26 +1643,26 @@ function MobileCardList({
|
|
|
1616
1643
|
}
|
|
1617
1644
|
};
|
|
1618
1645
|
if (isLoading) {
|
|
1619
|
-
return /* @__PURE__ */ (0,
|
|
1620
|
-
/* @__PURE__ */ (0,
|
|
1621
|
-
/* @__PURE__ */ (0,
|
|
1622
|
-
/* @__PURE__ */ (0,
|
|
1646
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: `space-y-3 ${className ?? ""}`, children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "rounded-xl border p-4", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "space-y-3", children: [
|
|
1647
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex justify-between", children: [
|
|
1648
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "h-5 w-32 animate-pulse rounded bg-muted" }),
|
|
1649
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "h-5 w-16 animate-pulse rounded bg-muted" })
|
|
1623
1650
|
] }),
|
|
1624
|
-
/* @__PURE__ */ (0,
|
|
1625
|
-
/* @__PURE__ */ (0,
|
|
1626
|
-
/* @__PURE__ */ (0,
|
|
1627
|
-
/* @__PURE__ */ (0,
|
|
1651
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "h-4 w-48 animate-pulse rounded bg-muted" }),
|
|
1652
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex justify-between", children: [
|
|
1653
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
|
|
1654
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" })
|
|
1628
1655
|
] })
|
|
1629
1656
|
] }) }, i)) });
|
|
1630
1657
|
}
|
|
1631
|
-
return /* @__PURE__ */ (0,
|
|
1658
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1632
1659
|
"div",
|
|
1633
1660
|
{
|
|
1634
1661
|
className: `space-y-3 ${className ?? ""}`,
|
|
1635
1662
|
onTouchStart,
|
|
1636
1663
|
onTouchMove,
|
|
1637
1664
|
onClickCapture,
|
|
1638
|
-
children: data.map((item, index) => /* @__PURE__ */ (0,
|
|
1665
|
+
children: data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1639
1666
|
"div",
|
|
1640
1667
|
{
|
|
1641
1668
|
className: "rounded-xl border p-4 transition-all duration-150 hover:border-foreground/20 active:scale-[0.99]",
|
|
@@ -1680,7 +1707,7 @@ function applyCompanyTheme(root, companyTheme, mode) {
|
|
|
1680
1707
|
}
|
|
1681
1708
|
|
|
1682
1709
|
// src/components/theme-provider.tsx
|
|
1683
|
-
var
|
|
1710
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1684
1711
|
var initialState = {
|
|
1685
1712
|
theme: "system",
|
|
1686
1713
|
setTheme: () => null
|
|
@@ -1719,7 +1746,7 @@ function ThemeProvider({
|
|
|
1719
1746
|
setTheme(theme2);
|
|
1720
1747
|
}
|
|
1721
1748
|
};
|
|
1722
|
-
return /* @__PURE__ */ (0,
|
|
1749
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ThemeProviderContext.Provider, { ...props, value, children });
|
|
1723
1750
|
}
|
|
1724
1751
|
function useTheme() {
|
|
1725
1752
|
const context = (0, import_react6.useContext)(ThemeProviderContext);
|
|
@@ -1730,57 +1757,57 @@ function useTheme() {
|
|
|
1730
1757
|
}
|
|
1731
1758
|
|
|
1732
1759
|
// src/components/mode-toggle.tsx
|
|
1733
|
-
var
|
|
1760
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
1734
1761
|
function ModeToggle() {
|
|
1735
1762
|
const { setTheme } = useTheme();
|
|
1736
|
-
return /* @__PURE__ */ (0,
|
|
1737
|
-
/* @__PURE__ */ (0,
|
|
1763
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(DropdownMenu2.Root, { children: [
|
|
1764
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DropdownMenu2.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
1738
1765
|
"button",
|
|
1739
1766
|
{
|
|
1740
1767
|
type: "button",
|
|
1741
1768
|
className: "relative inline-flex h-9 w-9 items-center justify-center rounded-md border border-input bg-background text-sm font-medium shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
1742
1769
|
"aria-label": "Alternar tema",
|
|
1743
1770
|
children: [
|
|
1744
|
-
/* @__PURE__ */ (0,
|
|
1745
|
-
/* @__PURE__ */ (0,
|
|
1771
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react9.Sun, { className: "h-4 w-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" }),
|
|
1772
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react9.Moon, { className: "absolute inset-0 m-auto h-4 w-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" })
|
|
1746
1773
|
]
|
|
1747
1774
|
}
|
|
1748
1775
|
) }),
|
|
1749
|
-
/* @__PURE__ */ (0,
|
|
1776
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DropdownMenu2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
1750
1777
|
DropdownMenu2.Content,
|
|
1751
1778
|
{
|
|
1752
1779
|
align: "end",
|
|
1753
1780
|
className: "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95",
|
|
1754
1781
|
children: [
|
|
1755
|
-
/* @__PURE__ */ (0,
|
|
1782
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
1756
1783
|
DropdownMenu2.Item,
|
|
1757
1784
|
{
|
|
1758
1785
|
className: "flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent focus:bg-accent",
|
|
1759
1786
|
onClick: () => setTheme("light"),
|
|
1760
1787
|
children: [
|
|
1761
|
-
/* @__PURE__ */ (0,
|
|
1788
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react9.Sun, { className: "h-4 w-4" }),
|
|
1762
1789
|
" Claro"
|
|
1763
1790
|
]
|
|
1764
1791
|
}
|
|
1765
1792
|
),
|
|
1766
|
-
/* @__PURE__ */ (0,
|
|
1793
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
1767
1794
|
DropdownMenu2.Item,
|
|
1768
1795
|
{
|
|
1769
1796
|
className: "flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent focus:bg-accent",
|
|
1770
1797
|
onClick: () => setTheme("dark"),
|
|
1771
1798
|
children: [
|
|
1772
|
-
/* @__PURE__ */ (0,
|
|
1799
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react9.Moon, { className: "h-4 w-4" }),
|
|
1773
1800
|
" Escuro"
|
|
1774
1801
|
]
|
|
1775
1802
|
}
|
|
1776
1803
|
),
|
|
1777
|
-
/* @__PURE__ */ (0,
|
|
1804
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
1778
1805
|
DropdownMenu2.Item,
|
|
1779
1806
|
{
|
|
1780
1807
|
className: "flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent focus:bg-accent",
|
|
1781
1808
|
onClick: () => setTheme("system"),
|
|
1782
1809
|
children: [
|
|
1783
|
-
/* @__PURE__ */ (0,
|
|
1810
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react9.Monitor, { className: "h-4 w-4" }),
|
|
1784
1811
|
" Sistema"
|
|
1785
1812
|
]
|
|
1786
1813
|
}
|
|
@@ -1797,7 +1824,7 @@ var import_cmdk2 = require("cmdk");
|
|
|
1797
1824
|
var import_lucide_react10 = require("lucide-react");
|
|
1798
1825
|
var React8 = __toESM(require("react"), 1);
|
|
1799
1826
|
var import_vaul5 = require("vaul");
|
|
1800
|
-
var
|
|
1827
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1801
1828
|
function MultiCombobox({
|
|
1802
1829
|
options,
|
|
1803
1830
|
value,
|
|
@@ -1838,7 +1865,7 @@ function MultiCombobox({
|
|
|
1838
1865
|
const removeValue = (optionValue) => {
|
|
1839
1866
|
onChange(value.filter((v) => v !== optionValue));
|
|
1840
1867
|
};
|
|
1841
|
-
const trigger = /* @__PURE__ */ (0,
|
|
1868
|
+
const trigger = /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
1842
1869
|
"div",
|
|
1843
1870
|
{
|
|
1844
1871
|
id,
|
|
@@ -1860,13 +1887,13 @@ function MultiCombobox({
|
|
|
1860
1887
|
className
|
|
1861
1888
|
),
|
|
1862
1889
|
children: [
|
|
1863
|
-
selected.length === 0 ? /* @__PURE__ */ (0,
|
|
1890
|
+
selected.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "text-muted-foreground", children: placeholder }) : selected.map((option) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
1864
1891
|
"span",
|
|
1865
1892
|
{
|
|
1866
1893
|
className: "inline-flex items-center gap-1 rounded bg-secondary px-1.5 py-0.5 text-xs text-secondary-foreground",
|
|
1867
1894
|
children: [
|
|
1868
1895
|
option.label,
|
|
1869
|
-
/* @__PURE__ */ (0,
|
|
1896
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1870
1897
|
"button",
|
|
1871
1898
|
{
|
|
1872
1899
|
type: "button",
|
|
@@ -1878,26 +1905,26 @@ function MultiCombobox({
|
|
|
1878
1905
|
},
|
|
1879
1906
|
onPointerDown: (event) => event.stopPropagation(),
|
|
1880
1907
|
className: "rounded-sm opacity-60 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
1881
|
-
children: /* @__PURE__ */ (0,
|
|
1908
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react10.X, { className: "h-3 w-3" })
|
|
1882
1909
|
}
|
|
1883
1910
|
)
|
|
1884
1911
|
]
|
|
1885
1912
|
},
|
|
1886
1913
|
option.value
|
|
1887
1914
|
)),
|
|
1888
|
-
/* @__PURE__ */ (0,
|
|
1915
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react10.ChevronsUpDown, { className: "ml-auto h-4 w-4 shrink-0 opacity-50" })
|
|
1889
1916
|
]
|
|
1890
1917
|
}
|
|
1891
1918
|
);
|
|
1892
|
-
const command = /* @__PURE__ */ (0,
|
|
1919
|
+
const command = /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
1893
1920
|
import_cmdk2.Command,
|
|
1894
1921
|
{
|
|
1895
1922
|
shouldFilter: !isServer,
|
|
1896
1923
|
className: "flex h-full w-full flex-col overflow-hidden",
|
|
1897
1924
|
children: [
|
|
1898
|
-
/* @__PURE__ */ (0,
|
|
1899
|
-
/* @__PURE__ */ (0,
|
|
1900
|
-
/* @__PURE__ */ (0,
|
|
1925
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center border-b px-3", children: [
|
|
1926
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react10.Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
|
|
1927
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1901
1928
|
import_cmdk2.Command.Input,
|
|
1902
1929
|
{
|
|
1903
1930
|
placeholder: searchPlaceholder,
|
|
@@ -1906,14 +1933,14 @@ function MultiCombobox({
|
|
|
1906
1933
|
}
|
|
1907
1934
|
)
|
|
1908
1935
|
] }),
|
|
1909
|
-
/* @__PURE__ */ (0,
|
|
1936
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
1910
1937
|
import_cmdk2.Command.List,
|
|
1911
1938
|
{
|
|
1912
1939
|
ref: listRef,
|
|
1913
1940
|
className: "max-h-[50vh] overflow-y-auto overflow-x-hidden p-1 sm:max-h-60",
|
|
1914
1941
|
children: [
|
|
1915
|
-
!isServer && /* @__PURE__ */ (0,
|
|
1916
|
-
options.map((option) => /* @__PURE__ */ (0,
|
|
1942
|
+
!isServer && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_cmdk2.Command.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
|
|
1943
|
+
options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
1917
1944
|
import_cmdk2.Command.Item,
|
|
1918
1945
|
{
|
|
1919
1946
|
value: isServer ? option.value : option.label,
|
|
@@ -1921,7 +1948,7 @@ function MultiCombobox({
|
|
|
1921
1948
|
onSelect: () => toggleValue(option.value),
|
|
1922
1949
|
className: "relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2.5 text-sm outline-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 sm:py-1.5",
|
|
1923
1950
|
children: [
|
|
1924
|
-
/* @__PURE__ */ (0,
|
|
1951
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1925
1952
|
import_lucide_react10.Check,
|
|
1926
1953
|
{
|
|
1927
1954
|
className: cn(
|
|
@@ -1930,14 +1957,14 @@ function MultiCombobox({
|
|
|
1930
1957
|
)
|
|
1931
1958
|
}
|
|
1932
1959
|
),
|
|
1933
|
-
/* @__PURE__ */ (0,
|
|
1960
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "truncate", children: option.label })
|
|
1934
1961
|
]
|
|
1935
1962
|
},
|
|
1936
1963
|
option.value
|
|
1937
1964
|
)),
|
|
1938
|
-
isServer && !loading && options.length === 0 && /* @__PURE__ */ (0,
|
|
1939
|
-
isServer && loading && /* @__PURE__ */ (0,
|
|
1940
|
-
isServer && hasMore && /* @__PURE__ */ (0,
|
|
1965
|
+
isServer && !loading && options.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
|
|
1966
|
+
isServer && loading && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "flex items-center justify-center py-6", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react10.Loader2, { className: "h-4 w-4 animate-spin text-muted-foreground" }) }),
|
|
1967
|
+
isServer && hasMore && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1" })
|
|
1941
1968
|
]
|
|
1942
1969
|
}
|
|
1943
1970
|
)
|
|
@@ -1945,9 +1972,9 @@ function MultiCombobox({
|
|
|
1945
1972
|
}
|
|
1946
1973
|
);
|
|
1947
1974
|
if (isDesktop) {
|
|
1948
|
-
return /* @__PURE__ */ (0,
|
|
1949
|
-
/* @__PURE__ */ (0,
|
|
1950
|
-
/* @__PURE__ */ (0,
|
|
1975
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(PopoverPrimitive5.Root, { open, onOpenChange: setOpen, children: [
|
|
1976
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(PopoverPrimitive5.Trigger, { asChild: true, disabled, children: trigger }),
|
|
1977
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(PopoverPrimitive5.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1951
1978
|
PopoverPrimitive5.Content,
|
|
1952
1979
|
{
|
|
1953
1980
|
align: "start",
|
|
@@ -1959,13 +1986,13 @@ function MultiCombobox({
|
|
|
1959
1986
|
) })
|
|
1960
1987
|
] });
|
|
1961
1988
|
}
|
|
1962
|
-
return /* @__PURE__ */ (0,
|
|
1963
|
-
/* @__PURE__ */ (0,
|
|
1964
|
-
/* @__PURE__ */ (0,
|
|
1965
|
-
/* @__PURE__ */ (0,
|
|
1966
|
-
/* @__PURE__ */ (0,
|
|
1967
|
-
/* @__PURE__ */ (0,
|
|
1968
|
-
/* @__PURE__ */ (0,
|
|
1989
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_vaul5.Drawer.Root, { open, onOpenChange: setOpen, children: [
|
|
1990
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_vaul5.Drawer.Trigger, { asChild: true, disabled, children: trigger }),
|
|
1991
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_vaul5.Drawer.Portal, { children: [
|
|
1992
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_vaul5.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
1993
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_vaul5.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85vh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
|
|
1994
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_vaul5.Drawer.Title, { className: "sr-only", children: placeholder }),
|
|
1995
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
1969
1996
|
command
|
|
1970
1997
|
] })
|
|
1971
1998
|
] })
|
|
@@ -1973,25 +2000,25 @@ function MultiCombobox({
|
|
|
1973
2000
|
}
|
|
1974
2001
|
|
|
1975
2002
|
// src/components/page-header.tsx
|
|
1976
|
-
var
|
|
2003
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
1977
2004
|
function PageHeader({ title, description, action, className }) {
|
|
1978
|
-
return /* @__PURE__ */ (0,
|
|
2005
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
1979
2006
|
"div",
|
|
1980
2007
|
{
|
|
1981
2008
|
className: `flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between ${className ?? ""}`,
|
|
1982
2009
|
children: [
|
|
1983
|
-
/* @__PURE__ */ (0,
|
|
1984
|
-
/* @__PURE__ */ (0,
|
|
1985
|
-
description && /* @__PURE__ */ (0,
|
|
2010
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "min-w-0", children: [
|
|
2011
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h1", { className: "truncate text-2xl font-semibold tracking-tight", children: title }),
|
|
2012
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-sm text-muted-foreground", children: description })
|
|
1986
2013
|
] }),
|
|
1987
|
-
action && /* @__PURE__ */ (0,
|
|
2014
|
+
action && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "shrink-0", children: action })
|
|
1988
2015
|
]
|
|
1989
2016
|
}
|
|
1990
2017
|
);
|
|
1991
2018
|
}
|
|
1992
2019
|
|
|
1993
2020
|
// src/components/pagination.tsx
|
|
1994
|
-
var
|
|
2021
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
1995
2022
|
var navButtonClass2 = "inline-flex h-8 items-center justify-center rounded-md border border-input bg-background px-3 text-xs font-medium shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground cursor-pointer disabled:pointer-events-none disabled:opacity-50";
|
|
1996
2023
|
function Pagination({
|
|
1997
2024
|
page,
|
|
@@ -2005,26 +2032,26 @@ function Pagination({
|
|
|
2005
2032
|
pageSizeOptions,
|
|
2006
2033
|
className
|
|
2007
2034
|
}) {
|
|
2008
|
-
return /* @__PURE__ */ (0,
|
|
2035
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
2009
2036
|
"div",
|
|
2010
2037
|
{
|
|
2011
2038
|
className: `flex items-center ${showPageSizeSelector ? "justify-between" : "justify-end"} gap-4 ${className ?? ""}`,
|
|
2012
2039
|
children: [
|
|
2013
|
-
showPageSizeSelector && /* @__PURE__ */ (0,
|
|
2014
|
-
/* @__PURE__ */ (0,
|
|
2015
|
-
/* @__PURE__ */ (0,
|
|
2040
|
+
showPageSizeSelector && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
2041
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { htmlFor: "pagination-page-size", className: "text-sm text-muted-foreground", children: "Itens por p\xE1gina" }),
|
|
2042
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2016
2043
|
"select",
|
|
2017
2044
|
{
|
|
2018
2045
|
id: "pagination-page-size",
|
|
2019
2046
|
value: pageSize,
|
|
2020
2047
|
onChange: (e) => onPageSizeChange?.(Number(e.target.value)),
|
|
2021
2048
|
className: "h-8 rounded-md border border-input bg-background px-2 text-xs font-medium shadow-sm transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring cursor-pointer",
|
|
2022
|
-
children: (pageSizeOptions ?? []).map((size) => /* @__PURE__ */ (0,
|
|
2049
|
+
children: (pageSizeOptions ?? []).map((size) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("option", { value: size, children: size }, size))
|
|
2023
2050
|
}
|
|
2024
2051
|
)
|
|
2025
2052
|
] }),
|
|
2026
|
-
/* @__PURE__ */ (0,
|
|
2027
|
-
/* @__PURE__ */ (0,
|
|
2053
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-4", children: [
|
|
2054
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2028
2055
|
"button",
|
|
2029
2056
|
{
|
|
2030
2057
|
type: "button",
|
|
@@ -2034,12 +2061,12 @@ function Pagination({
|
|
|
2034
2061
|
children: "Anterior"
|
|
2035
2062
|
}
|
|
2036
2063
|
),
|
|
2037
|
-
/* @__PURE__ */ (0,
|
|
2064
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: "text-sm text-muted-foreground", children: [
|
|
2038
2065
|
"P\xE1gina ",
|
|
2039
2066
|
page,
|
|
2040
2067
|
totalPages ? ` de ${totalPages}` : ""
|
|
2041
2068
|
] }),
|
|
2042
|
-
/* @__PURE__ */ (0,
|
|
2069
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2043
2070
|
"button",
|
|
2044
2071
|
{
|
|
2045
2072
|
type: "button",
|
|
@@ -2058,11 +2085,11 @@ function Pagination({
|
|
|
2058
2085
|
// src/components/password-input.tsx
|
|
2059
2086
|
var import_lucide_react11 = require("lucide-react");
|
|
2060
2087
|
var React9 = __toESM(require("react"), 1);
|
|
2061
|
-
var
|
|
2088
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
2062
2089
|
var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props }, ref) => {
|
|
2063
2090
|
const [visible, setVisible] = React9.useState(false);
|
|
2064
|
-
return /* @__PURE__ */ (0,
|
|
2065
|
-
/* @__PURE__ */ (0,
|
|
2091
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `relative ${containerClassName ?? ""}`, children: [
|
|
2092
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
2066
2093
|
"input",
|
|
2067
2094
|
{
|
|
2068
2095
|
ref,
|
|
@@ -2071,7 +2098,7 @@ var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props
|
|
|
2071
2098
|
...props
|
|
2072
2099
|
}
|
|
2073
2100
|
),
|
|
2074
|
-
/* @__PURE__ */ (0,
|
|
2101
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
2075
2102
|
"button",
|
|
2076
2103
|
{
|
|
2077
2104
|
type: "button",
|
|
@@ -2079,7 +2106,7 @@ var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props
|
|
|
2079
2106
|
"aria-label": visible ? "Ocultar senha" : "Mostrar senha",
|
|
2080
2107
|
tabIndex: -1,
|
|
2081
2108
|
className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground transition-colors hover:text-foreground",
|
|
2082
|
-
children: visible ? /* @__PURE__ */ (0,
|
|
2109
|
+
children: visible ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react11.EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react11.Eye, { className: "h-4 w-4" })
|
|
2083
2110
|
}
|
|
2084
2111
|
)
|
|
2085
2112
|
] });
|
|
@@ -2087,7 +2114,7 @@ var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props
|
|
|
2087
2114
|
PasswordInput.displayName = "PasswordInput";
|
|
2088
2115
|
|
|
2089
2116
|
// src/components/progress-bar.tsx
|
|
2090
|
-
var
|
|
2117
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
2091
2118
|
var sizeClasses3 = {
|
|
2092
2119
|
sm: "h-1.5",
|
|
2093
2120
|
md: "h-2"
|
|
@@ -2101,16 +2128,16 @@ function ProgressBar({
|
|
|
2101
2128
|
indicatorClassName
|
|
2102
2129
|
}) {
|
|
2103
2130
|
const clamped = Math.min(100, Math.max(0, value));
|
|
2104
|
-
return /* @__PURE__ */ (0,
|
|
2105
|
-
(label || valueLabel) && /* @__PURE__ */ (0,
|
|
2106
|
-
label && /* @__PURE__ */ (0,
|
|
2107
|
-
valueLabel && /* @__PURE__ */ (0,
|
|
2131
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: `space-y-1.5 ${className ?? ""}`, children: [
|
|
2132
|
+
(label || valueLabel) && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-baseline justify-between gap-2", children: [
|
|
2133
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "text-sm text-muted-foreground", children: label }),
|
|
2134
|
+
valueLabel && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "text-sm font-semibold", children: valueLabel })
|
|
2108
2135
|
] }),
|
|
2109
|
-
/* @__PURE__ */ (0,
|
|
2136
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
2110
2137
|
"div",
|
|
2111
2138
|
{
|
|
2112
2139
|
className: `w-full overflow-hidden rounded-full bg-muted ${sizeClasses3[size]}`,
|
|
2113
|
-
children: /* @__PURE__ */ (0,
|
|
2140
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
2114
2141
|
"div",
|
|
2115
2142
|
{
|
|
2116
2143
|
className: `h-full rounded-full transition-all duration-300 ${indicatorClassName ?? "bg-primary"}`,
|
|
@@ -2123,7 +2150,7 @@ function ProgressBar({
|
|
|
2123
2150
|
}
|
|
2124
2151
|
|
|
2125
2152
|
// src/components/responsive-data-view.tsx
|
|
2126
|
-
var
|
|
2153
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
2127
2154
|
function ResponsiveDataView({
|
|
2128
2155
|
table,
|
|
2129
2156
|
cards,
|
|
@@ -2137,7 +2164,7 @@ function ResponsiveDataView({
|
|
|
2137
2164
|
pagination
|
|
2138
2165
|
}) {
|
|
2139
2166
|
if (!isLoading && !isBusy && isEmpty) {
|
|
2140
|
-
return /* @__PURE__ */ (0,
|
|
2167
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "rounded-md border", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
2141
2168
|
EmptyState,
|
|
2142
2169
|
{
|
|
2143
2170
|
icon: emptyIcon,
|
|
@@ -2148,8 +2175,8 @@ function ResponsiveDataView({
|
|
|
2148
2175
|
) });
|
|
2149
2176
|
}
|
|
2150
2177
|
const busyClass = isBusy && "pointer-events-none opacity-50";
|
|
2151
|
-
return /* @__PURE__ */ (0,
|
|
2152
|
-
/* @__PURE__ */ (0,
|
|
2178
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "space-y-4", children: [
|
|
2179
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
2153
2180
|
"div",
|
|
2154
2181
|
{
|
|
2155
2182
|
"aria-busy": isBusy,
|
|
@@ -2160,7 +2187,7 @@ function ResponsiveDataView({
|
|
|
2160
2187
|
children: table
|
|
2161
2188
|
}
|
|
2162
2189
|
),
|
|
2163
|
-
/* @__PURE__ */ (0,
|
|
2190
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { "aria-busy": isBusy, className: cn("transition-opacity md:hidden", busyClass), children: cards }),
|
|
2164
2191
|
pagination
|
|
2165
2192
|
] });
|
|
2166
2193
|
}
|
|
@@ -2170,7 +2197,7 @@ var DropdownMenu3 = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
|
|
|
2170
2197
|
var import_lucide_react12 = require("lucide-react");
|
|
2171
2198
|
var import_react7 = require("react");
|
|
2172
2199
|
var import_vaul6 = require("vaul");
|
|
2173
|
-
var
|
|
2200
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
2174
2201
|
var triggerClass = "inline-flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50";
|
|
2175
2202
|
var itemClass2 = "flex w-full cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent focus:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50";
|
|
2176
2203
|
var sheetItemClass2 = "flex w-full cursor-pointer select-none items-center gap-3 rounded-md px-3 py-3 text-base outline-none transition-colors hover:bg-accent active:bg-accent disabled:pointer-events-none disabled:opacity-50";
|
|
@@ -2184,20 +2211,20 @@ function RowActionsMenu({
|
|
|
2184
2211
|
const isDesktop = useIsDesktop();
|
|
2185
2212
|
const [open, setOpen] = (0, import_react7.useState)(false);
|
|
2186
2213
|
if (actions.length === 0) return null;
|
|
2187
|
-
const trigger = /* @__PURE__ */ (0,
|
|
2214
|
+
const trigger = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2188
2215
|
"button",
|
|
2189
2216
|
{
|
|
2190
2217
|
type: "button",
|
|
2191
2218
|
disabled,
|
|
2192
2219
|
"aria-label": label,
|
|
2193
2220
|
className: triggerClass,
|
|
2194
|
-
children: /* @__PURE__ */ (0,
|
|
2221
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.MoreVertical, { className: "h-4 w-4" })
|
|
2195
2222
|
}
|
|
2196
2223
|
);
|
|
2197
2224
|
if (isDesktop) {
|
|
2198
|
-
return /* @__PURE__ */ (0,
|
|
2199
|
-
/* @__PURE__ */ (0,
|
|
2200
|
-
/* @__PURE__ */ (0,
|
|
2225
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(DropdownMenu3.Root, { open, onOpenChange: setOpen, modal: false, children: [
|
|
2226
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenu3.Trigger, { asChild: true, children: trigger }),
|
|
2227
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenu3.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2201
2228
|
DropdownMenu3.Content,
|
|
2202
2229
|
{
|
|
2203
2230
|
align,
|
|
@@ -2209,8 +2236,8 @@ function RowActionsMenu({
|
|
|
2209
2236
|
action.destructive && "text-destructive focus:bg-destructive/10"
|
|
2210
2237
|
);
|
|
2211
2238
|
if (action.children?.length) {
|
|
2212
|
-
return /* @__PURE__ */ (0,
|
|
2213
|
-
/* @__PURE__ */ (0,
|
|
2239
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(DropdownMenu3.Sub, { children: [
|
|
2240
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
2214
2241
|
DropdownMenu3.SubTrigger,
|
|
2215
2242
|
{
|
|
2216
2243
|
className: cls,
|
|
@@ -2218,16 +2245,16 @@ function RowActionsMenu({
|
|
|
2218
2245
|
children: [
|
|
2219
2246
|
action.icon,
|
|
2220
2247
|
action.label,
|
|
2221
|
-
/* @__PURE__ */ (0,
|
|
2248
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.ChevronRight, { className: "ml-auto h-4 w-4 text-muted-foreground" })
|
|
2222
2249
|
]
|
|
2223
2250
|
}
|
|
2224
2251
|
),
|
|
2225
|
-
/* @__PURE__ */ (0,
|
|
2252
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenu3.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2226
2253
|
DropdownMenu3.SubContent,
|
|
2227
2254
|
{
|
|
2228
2255
|
sideOffset: 4,
|
|
2229
2256
|
className: "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95",
|
|
2230
|
-
children: action.children.map((child) => /* @__PURE__ */ (0,
|
|
2257
|
+
children: action.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
2231
2258
|
DropdownMenu3.Item,
|
|
2232
2259
|
{
|
|
2233
2260
|
className: cn(
|
|
@@ -2247,7 +2274,7 @@ function RowActionsMenu({
|
|
|
2247
2274
|
) })
|
|
2248
2275
|
] }, action.label);
|
|
2249
2276
|
}
|
|
2250
|
-
return action.href ? /* @__PURE__ */ (0,
|
|
2277
|
+
return action.href ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2251
2278
|
DropdownMenu3.Item,
|
|
2252
2279
|
{
|
|
2253
2280
|
asChild: true,
|
|
@@ -2255,14 +2282,14 @@ function RowActionsMenu({
|
|
|
2255
2282
|
children: renderLink({
|
|
2256
2283
|
href: action.href,
|
|
2257
2284
|
className: cls,
|
|
2258
|
-
children: /* @__PURE__ */ (0,
|
|
2285
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
2259
2286
|
action.icon,
|
|
2260
2287
|
action.label
|
|
2261
2288
|
] })
|
|
2262
2289
|
})
|
|
2263
2290
|
},
|
|
2264
2291
|
action.label
|
|
2265
|
-
) : /* @__PURE__ */ (0,
|
|
2292
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
2266
2293
|
DropdownMenu3.Item,
|
|
2267
2294
|
{
|
|
2268
2295
|
className: cls,
|
|
@@ -2280,30 +2307,30 @@ function RowActionsMenu({
|
|
|
2280
2307
|
) })
|
|
2281
2308
|
] });
|
|
2282
2309
|
}
|
|
2283
|
-
return /* @__PURE__ */ (0,
|
|
2284
|
-
/* @__PURE__ */ (0,
|
|
2285
|
-
/* @__PURE__ */ (0,
|
|
2286
|
-
/* @__PURE__ */ (0,
|
|
2287
|
-
/* @__PURE__ */ (0,
|
|
2288
|
-
/* @__PURE__ */ (0,
|
|
2289
|
-
/* @__PURE__ */ (0,
|
|
2310
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_vaul6.Drawer.Root, { open, onOpenChange: setOpen, children: [
|
|
2311
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_vaul6.Drawer.Trigger, { asChild: true, children: trigger }),
|
|
2312
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_vaul6.Drawer.Portal, { children: [
|
|
2313
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_vaul6.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
2314
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_vaul6.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-2xl border bg-popover p-2 pb-[max(0.5rem,env(safe-area-inset-bottom))] text-popover-foreground outline-none", children: [
|
|
2315
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_vaul6.Drawer.Title, { className: "sr-only", children: label }),
|
|
2316
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
2290
2317
|
actions.map((action) => {
|
|
2291
2318
|
const cls = cn(
|
|
2292
2319
|
sheetItemClass2,
|
|
2293
2320
|
action.destructive && "text-destructive"
|
|
2294
2321
|
);
|
|
2295
|
-
const inner = /* @__PURE__ */ (0,
|
|
2322
|
+
const inner = /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
2296
2323
|
action.icon,
|
|
2297
2324
|
action.label
|
|
2298
2325
|
] });
|
|
2299
2326
|
if (action.children?.length) {
|
|
2300
|
-
return /* @__PURE__ */ (0,
|
|
2301
|
-
/* @__PURE__ */ (0,
|
|
2302
|
-
/* @__PURE__ */ (0,
|
|
2327
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { children: [
|
|
2328
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "mx-3 my-1 h-px bg-border" }),
|
|
2329
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center gap-3 px-3 pb-1 pt-2 text-xs font-medium uppercase tracking-wide text-muted-foreground", children: [
|
|
2303
2330
|
action.icon,
|
|
2304
2331
|
action.label
|
|
2305
2332
|
] }),
|
|
2306
|
-
action.children.map((child) => /* @__PURE__ */ (0,
|
|
2333
|
+
action.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
2307
2334
|
"button",
|
|
2308
2335
|
{
|
|
2309
2336
|
type: "button",
|
|
@@ -2323,10 +2350,10 @@ function RowActionsMenu({
|
|
|
2323
2350
|
},
|
|
2324
2351
|
child.label
|
|
2325
2352
|
)),
|
|
2326
|
-
/* @__PURE__ */ (0,
|
|
2353
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "mx-3 my-1 h-px bg-border" })
|
|
2327
2354
|
] }, action.label);
|
|
2328
2355
|
}
|
|
2329
|
-
return action.href ? /* @__PURE__ */ (0,
|
|
2356
|
+
return action.href ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2330
2357
|
"span",
|
|
2331
2358
|
{
|
|
2332
2359
|
onClick: () => setOpen(false),
|
|
@@ -2338,7 +2365,7 @@ function RowActionsMenu({
|
|
|
2338
2365
|
})
|
|
2339
2366
|
},
|
|
2340
2367
|
action.label
|
|
2341
|
-
) : /* @__PURE__ */ (0,
|
|
2368
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2342
2369
|
"button",
|
|
2343
2370
|
{
|
|
2344
2371
|
type: "button",
|
|
@@ -2360,11 +2387,11 @@ function RowActionsMenu({
|
|
|
2360
2387
|
|
|
2361
2388
|
// src/components/search-input.tsx
|
|
2362
2389
|
var React10 = __toESM(require("react"), 1);
|
|
2363
|
-
var
|
|
2390
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
2364
2391
|
var SearchInput = React10.forwardRef(
|
|
2365
2392
|
({ containerClassName, className, ...props }, ref) => {
|
|
2366
|
-
return /* @__PURE__ */ (0,
|
|
2367
|
-
/* @__PURE__ */ (0,
|
|
2393
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: cn("relative flex-1", containerClassName), children: [
|
|
2394
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
2368
2395
|
"svg",
|
|
2369
2396
|
{
|
|
2370
2397
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2379,12 +2406,12 @@ var SearchInput = React10.forwardRef(
|
|
|
2379
2406
|
"aria-hidden": "true",
|
|
2380
2407
|
className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground",
|
|
2381
2408
|
children: [
|
|
2382
|
-
/* @__PURE__ */ (0,
|
|
2383
|
-
/* @__PURE__ */ (0,
|
|
2409
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("circle", { cx: "11", cy: "11", r: "8" }),
|
|
2410
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("path", { d: "m21 21-4.3-4.3" })
|
|
2384
2411
|
]
|
|
2385
2412
|
}
|
|
2386
2413
|
),
|
|
2387
|
-
/* @__PURE__ */ (0,
|
|
2414
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
2388
2415
|
"input",
|
|
2389
2416
|
{
|
|
2390
2417
|
ref,
|
|
@@ -2402,30 +2429,30 @@ var SearchInput = React10.forwardRef(
|
|
|
2402
2429
|
SearchInput.displayName = "SearchInput";
|
|
2403
2430
|
|
|
2404
2431
|
// src/components/stat-card.tsx
|
|
2405
|
-
var
|
|
2432
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
2406
2433
|
function StatCard({ label, value, detail, icon, isLoading }) {
|
|
2407
2434
|
if (isLoading) {
|
|
2408
|
-
return /* @__PURE__ */ (0,
|
|
2409
|
-
/* @__PURE__ */ (0,
|
|
2410
|
-
/* @__PURE__ */ (0,
|
|
2411
|
-
/* @__PURE__ */ (0,
|
|
2435
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
|
|
2436
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center justify-between pb-2", children: [
|
|
2437
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
|
|
2438
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "h-4 w-4 animate-pulse rounded bg-muted" })
|
|
2412
2439
|
] }),
|
|
2413
|
-
/* @__PURE__ */ (0,
|
|
2414
|
-
/* @__PURE__ */ (0,
|
|
2440
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "mt-2 h-7 w-16 animate-pulse rounded bg-muted" }),
|
|
2441
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "mt-1 h-4 w-20 animate-pulse rounded bg-muted" })
|
|
2415
2442
|
] });
|
|
2416
2443
|
}
|
|
2417
|
-
return /* @__PURE__ */ (0,
|
|
2418
|
-
/* @__PURE__ */ (0,
|
|
2419
|
-
/* @__PURE__ */ (0,
|
|
2420
|
-
icon && /* @__PURE__ */ (0,
|
|
2444
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
|
|
2445
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center justify-between pb-2", children: [
|
|
2446
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "text-sm font-medium text-muted-foreground", children: label }),
|
|
2447
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "text-muted-foreground", children: icon })
|
|
2421
2448
|
] }),
|
|
2422
|
-
/* @__PURE__ */ (0,
|
|
2423
|
-
detail && /* @__PURE__ */ (0,
|
|
2449
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "text-2xl font-bold", children: value }),
|
|
2450
|
+
detail && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "text-xs text-muted-foreground", children: detail })
|
|
2424
2451
|
] });
|
|
2425
2452
|
}
|
|
2426
2453
|
|
|
2427
2454
|
// src/components/status-badge.tsx
|
|
2428
|
-
var
|
|
2455
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
2429
2456
|
var variantClasses = {
|
|
2430
2457
|
neutral: {
|
|
2431
2458
|
badge: "bg-[var(--status-neutral-surface,#f3f4f6)] text-[var(--status-neutral-text,#374151)]",
|
|
@@ -2455,12 +2482,12 @@ function StatusBadge({
|
|
|
2455
2482
|
children
|
|
2456
2483
|
}) {
|
|
2457
2484
|
const classes = variantClasses[variant];
|
|
2458
|
-
return /* @__PURE__ */ (0,
|
|
2485
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
2459
2486
|
"span",
|
|
2460
2487
|
{
|
|
2461
2488
|
className: `inline-flex items-center gap-1.5 rounded-md px-2 py-0.5 text-xs font-medium ${classes.badge} ${className ?? ""}`,
|
|
2462
2489
|
children: [
|
|
2463
|
-
dot && /* @__PURE__ */ (0,
|
|
2490
|
+
dot && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
2464
2491
|
"span",
|
|
2465
2492
|
{
|
|
2466
2493
|
className: `inline-block h-1.5 w-1.5 shrink-0 rounded-full ${classes.dot}`
|
|
@@ -2473,36 +2500,36 @@ function StatusBadge({
|
|
|
2473
2500
|
}
|
|
2474
2501
|
|
|
2475
2502
|
// src/components/status-dot.tsx
|
|
2476
|
-
var
|
|
2503
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
2477
2504
|
function StatusDot({ active, label, className }) {
|
|
2478
|
-
return /* @__PURE__ */ (0,
|
|
2479
|
-
/* @__PURE__ */ (0,
|
|
2505
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: `inline-flex items-center gap-2 ${className ?? ""}`, children: [
|
|
2506
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
2480
2507
|
"span",
|
|
2481
2508
|
{
|
|
2482
2509
|
className: `h-2 w-2 rounded-full ${active ? "bg-green-500" : "bg-red-500"}`
|
|
2483
2510
|
}
|
|
2484
2511
|
),
|
|
2485
|
-
label && /* @__PURE__ */ (0,
|
|
2512
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: label })
|
|
2486
2513
|
] });
|
|
2487
2514
|
}
|
|
2488
2515
|
|
|
2489
2516
|
// src/components/table-skeleton.tsx
|
|
2490
|
-
var
|
|
2517
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
2491
2518
|
function TableSkeleton({ rows = 5, columns = 4 }) {
|
|
2492
|
-
return /* @__PURE__ */ (0,
|
|
2519
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_jsx_runtime32.Fragment, { children: Array.from({ length: rows }).map((_, i) => (
|
|
2493
2520
|
// p-2/h-4 espelha o TableCell real. Com p-4/h-5 a linha do skeleton
|
|
2494
2521
|
// ficava ~16px mais alta que a linha de dados, e a tabela encolhia
|
|
2495
2522
|
// visivelmente quando a resposta chegava.
|
|
2496
|
-
/* @__PURE__ */ (0,
|
|
2523
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("tr", { className: "border-b transition-colors", children: Array.from({ length: columns }).map((_2, j) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("td", { className: "p-2 align-middle first:pl-4 last:pr-4", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "h-4 w-full animate-pulse rounded bg-muted" }) }, j)) }, i)
|
|
2497
2524
|
)) });
|
|
2498
2525
|
}
|
|
2499
2526
|
|
|
2500
2527
|
// src/components/toaster.tsx
|
|
2501
2528
|
var import_sonner = require("sonner");
|
|
2502
|
-
var
|
|
2529
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
2503
2530
|
function Toaster(props) {
|
|
2504
2531
|
const { theme = "system" } = useTheme();
|
|
2505
|
-
return /* @__PURE__ */ (0,
|
|
2532
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
2506
2533
|
import_sonner.Toaster,
|
|
2507
2534
|
{
|
|
2508
2535
|
theme,
|
|
@@ -2629,6 +2656,7 @@ function extractApiError(err, fallbackMessage = "Ocorreu um erro inesperado.") {
|
|
|
2629
2656
|
FormDialog,
|
|
2630
2657
|
FormDialogLayout,
|
|
2631
2658
|
FormField,
|
|
2659
|
+
HighlightPill,
|
|
2632
2660
|
MobileCardList,
|
|
2633
2661
|
ModeToggle,
|
|
2634
2662
|
MultiCombobox,
|