@schandlergarcia/sf-web-components 1.0.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/.a4drules/skills/building-data-visualization/SKILL.md +72 -0
- package/.a4drules/skills/building-data-visualization/implementation/bar-line-chart.md +316 -0
- package/.a4drules/skills/building-data-visualization/implementation/dashboard-layout.md +189 -0
- package/.a4drules/skills/building-data-visualization/implementation/donut-chart.md +181 -0
- package/.a4drules/skills/building-data-visualization/implementation/stat-card.md +150 -0
- package/.a4drules/skills/building-react-components/SKILL.md +96 -0
- package/.a4drules/skills/building-react-components/implementation/component.md +78 -0
- package/.a4drules/skills/building-react-components/implementation/header-footer.md +132 -0
- package/.a4drules/skills/building-react-components/implementation/page.md +93 -0
- package/.a4drules/skills/configuring-csp-trusted-sites/SKILL.md +90 -0
- package/.a4drules/skills/configuring-csp-trusted-sites/implementation/metadata-format.md +281 -0
- package/.a4drules/skills/configuring-webapp-metadata/SKILL.md +158 -0
- package/.a4drules/skills/creating-webapp/SKILL.md +140 -0
- package/.a4drules/skills/deploying-to-salesforce/SKILL.md +226 -0
- package/.a4drules/skills/implementing-file-upload/SKILL.md +396 -0
- package/.a4drules/skills/installing-webapp-features/SKILL.md +210 -0
- package/.a4drules/skills/managing-agentforce-conversation-client/SKILL.md +186 -0
- package/.a4drules/skills/managing-agentforce-conversation-client/references/constraints.md +134 -0
- package/.a4drules/skills/managing-agentforce-conversation-client/references/examples.md +132 -0
- package/.a4drules/skills/managing-agentforce-conversation-client/references/style-tokens.md +101 -0
- package/.a4drules/skills/managing-agentforce-conversation-client/references/troubleshooting.md +57 -0
- package/.a4drules/skills/using-salesforce-data/SKILL.md +363 -0
- package/.a4drules/skills/using-salesforce-data/graphql-search.sh +139 -0
- package/.a4drules/webapp-data.md +353 -0
- package/.a4drules/webapp-ui.md +16 -0
- package/README.md +124 -0
- package/dist/components/library/cards/ActionList.js +27 -0
- package/dist/components/library/cards/ActionList.js.map +1 -0
- package/dist/components/library/cards/ActivityCard.js +40 -0
- package/dist/components/library/cards/ActivityCard.js.map +1 -0
- package/dist/components/library/cards/BaseCard.js +89 -0
- package/dist/components/library/cards/BaseCard.js.map +1 -0
- package/dist/components/library/cards/CalloutCard.js +28 -0
- package/dist/components/library/cards/CalloutCard.js.map +1 -0
- package/dist/components/library/cards/ChartCard.js +79 -0
- package/dist/components/library/cards/ChartCard.js.map +1 -0
- package/dist/components/library/cards/FeedPanel.js +38 -0
- package/dist/components/library/cards/FeedPanel.js.map +1 -0
- package/dist/components/library/cards/ListCard.js +112 -0
- package/dist/components/library/cards/ListCard.js.map +1 -0
- package/dist/components/library/cards/MetricCard.js +86 -0
- package/dist/components/library/cards/MetricCard.js.map +1 -0
- package/dist/components/library/cards/MetricsStrip.js +60 -0
- package/dist/components/library/cards/MetricsStrip.js.map +1 -0
- package/dist/components/library/cards/SectionCard.js +59 -0
- package/dist/components/library/cards/SectionCard.js.map +1 -0
- package/dist/components/library/cards/StatusCard.js +137 -0
- package/dist/components/library/cards/StatusCard.js.map +1 -0
- package/dist/components/library/cards/TableCard.js +244 -0
- package/dist/components/library/cards/TableCard.js.map +1 -0
- package/dist/components/library/cards/WidgetCard.js +60 -0
- package/dist/components/library/cards/WidgetCard.js.map +1 -0
- package/dist/components/library/charts/D3Chart.js +74 -0
- package/dist/components/library/charts/D3Chart.js.map +1 -0
- package/dist/components/library/charts/D3ChartTemplates.js +44 -0
- package/dist/components/library/charts/D3ChartTemplates.js.map +1 -0
- package/dist/components/library/charts/GeoMap.js +229 -0
- package/dist/components/library/charts/GeoMap.js.map +1 -0
- package/dist/components/library/chat/ChatBar.js +194 -0
- package/dist/components/library/chat/ChatBar.js.map +1 -0
- package/dist/components/library/chat/ChatInput.js +67 -0
- package/dist/components/library/chat/ChatInput.js.map +1 -0
- package/dist/components/library/chat/ChatMessage.js +112 -0
- package/dist/components/library/chat/ChatMessage.js.map +1 -0
- package/dist/components/library/chat/ChatMessageList.js +50 -0
- package/dist/components/library/chat/ChatMessageList.js.map +1 -0
- package/dist/components/library/chat/ChatPanel.js +77 -0
- package/dist/components/library/chat/ChatPanel.js.map +1 -0
- package/dist/components/library/chat/ChatSuggestions.js +22 -0
- package/dist/components/library/chat/ChatSuggestions.js.map +1 -0
- package/dist/components/library/chat/ChatToolCall.js +87 -0
- package/dist/components/library/chat/ChatToolCall.js.map +1 -0
- package/dist/components/library/chat/ChatTypingIndicator.js +20 -0
- package/dist/components/library/chat/ChatTypingIndicator.js.map +1 -0
- package/dist/components/library/chat/ChatWelcome.js +24 -0
- package/dist/components/library/chat/ChatWelcome.js.map +1 -0
- package/dist/components/library/chat/useChatState.js +77 -0
- package/dist/components/library/chat/useChatState.js.map +1 -0
- package/dist/components/library/data/DataModeProvider.js +47 -0
- package/dist/components/library/data/DataModeProvider.js.map +1 -0
- package/dist/components/library/data/DataModeToggle.js +28 -0
- package/dist/components/library/data/DataModeToggle.js.map +1 -0
- package/dist/components/library/data/filterUtils.js +71 -0
- package/dist/components/library/data/filterUtils.js.map +1 -0
- package/dist/components/library/data/useDataSource.js +13 -0
- package/dist/components/library/data/useDataSource.js.map +1 -0
- package/dist/components/library/data/usePageFilters.js +46 -0
- package/dist/components/library/data/usePageFilters.js.map +1 -0
- package/dist/components/library/filters/FilterBar.js +89 -0
- package/dist/components/library/filters/FilterBar.js.map +1 -0
- package/dist/components/library/filters/SearchFilter.js +44 -0
- package/dist/components/library/filters/SearchFilter.js.map +1 -0
- package/dist/components/library/filters/SelectFilter.js +44 -0
- package/dist/components/library/filters/SelectFilter.js.map +1 -0
- package/dist/components/library/filters/ToggleFilter.js +48 -0
- package/dist/components/library/filters/ToggleFilter.js.map +1 -0
- package/dist/components/library/forms/FormField.js +256 -0
- package/dist/components/library/forms/FormField.js.map +1 -0
- package/dist/components/library/forms/FormModal.js +161 -0
- package/dist/components/library/forms/FormModal.js.map +1 -0
- package/dist/components/library/forms/FormRenderer.js +32 -0
- package/dist/components/library/forms/FormRenderer.js.map +1 -0
- package/dist/components/library/forms/FormSection.js +49 -0
- package/dist/components/library/forms/FormSection.js.map +1 -0
- package/dist/components/library/forms/useFormState.js +85 -0
- package/dist/components/library/forms/useFormState.js.map +1 -0
- package/dist/components/library/heroui/Accordion.js +12 -0
- package/dist/components/library/heroui/Accordion.js.map +1 -0
- package/dist/components/library/heroui/Alert.js +12 -0
- package/dist/components/library/heroui/Alert.js.map +1 -0
- package/dist/components/library/heroui/Badge.js +12 -0
- package/dist/components/library/heroui/Badge.js.map +1 -0
- package/dist/components/library/heroui/Breadcrumbs.js +12 -0
- package/dist/components/library/heroui/Breadcrumbs.js.map +1 -0
- package/dist/components/library/heroui/Button.js +18 -0
- package/dist/components/library/heroui/Button.js.map +1 -0
- package/dist/components/library/heroui/Card.js +12 -0
- package/dist/components/library/heroui/Card.js.map +1 -0
- package/dist/components/library/heroui/Drawer.js +12 -0
- package/dist/components/library/heroui/Drawer.js.map +1 -0
- package/dist/components/library/heroui/Dropdown.js +12 -0
- package/dist/components/library/heroui/Dropdown.js.map +1 -0
- package/dist/components/library/heroui/Input.js +10 -0
- package/dist/components/library/heroui/Input.js.map +1 -0
- package/dist/components/library/heroui/Kbd.js +12 -0
- package/dist/components/library/heroui/Kbd.js.map +1 -0
- package/dist/components/library/heroui/Meter.js +12 -0
- package/dist/components/library/heroui/Meter.js.map +1 -0
- package/dist/components/library/heroui/Modal.js +12 -0
- package/dist/components/library/heroui/Modal.js.map +1 -0
- package/dist/components/library/heroui/Pagination.js +12 -0
- package/dist/components/library/heroui/Pagination.js.map +1 -0
- package/dist/components/library/heroui/ProgressBar.js +12 -0
- package/dist/components/library/heroui/ProgressBar.js.map +1 -0
- package/dist/components/library/heroui/ProgressCircle.js +12 -0
- package/dist/components/library/heroui/ProgressCircle.js.map +1 -0
- package/dist/components/library/heroui/ScrollShadow.js +12 -0
- package/dist/components/library/heroui/ScrollShadow.js.map +1 -0
- package/dist/components/library/heroui/Select.js +12 -0
- package/dist/components/library/heroui/Select.js.map +1 -0
- package/dist/components/library/heroui/Separator.js +12 -0
- package/dist/components/library/heroui/Separator.js.map +1 -0
- package/dist/components/library/heroui/Skeleton.js +12 -0
- package/dist/components/library/heroui/Skeleton.js.map +1 -0
- package/dist/components/library/heroui/Tabs.js +12 -0
- package/dist/components/library/heroui/Tabs.js.map +1 -0
- package/dist/components/library/heroui/Toast.js +13 -0
- package/dist/components/library/heroui/Toast.js.map +1 -0
- package/dist/components/library/heroui/Toggle.js +12 -0
- package/dist/components/library/heroui/Toggle.js.map +1 -0
- package/dist/components/library/heroui/Tooltip.js +12 -0
- package/dist/components/library/heroui/Tooltip.js.map +1 -0
- package/dist/components/library/layout/PageContainer.js +9 -0
- package/dist/components/library/layout/PageContainer.js.map +1 -0
- package/dist/components/library/skeletons/CardSkeleton.js +29 -0
- package/dist/components/library/skeletons/CardSkeleton.js.map +1 -0
- package/dist/components/library/theme/AppThemeProvider.js +55 -0
- package/dist/components/library/theme/AppThemeProvider.js.map +1 -0
- package/dist/components/library/theme/tokens.js +55 -0
- package/dist/components/library/theme/tokens.js.map +1 -0
- package/dist/components/library/ui/Avatar.js +33 -0
- package/dist/components/library/ui/Avatar.js.map +1 -0
- package/dist/components/library/ui/Button.js +50 -0
- package/dist/components/library/ui/Button.js.map +1 -0
- package/dist/components/library/ui/Card.js +21 -0
- package/dist/components/library/ui/Card.js.map +1 -0
- package/dist/components/library/ui/Chip.js +31 -0
- package/dist/components/library/ui/Chip.js.map +1 -0
- package/dist/components/library/ui/Container.js +42 -0
- package/dist/components/library/ui/Container.js.map +1 -0
- package/dist/components/library/ui/EmptyState.js +27 -0
- package/dist/components/library/ui/EmptyState.js.map +1 -0
- package/dist/components/library/ui/Input.js +22 -0
- package/dist/components/library/ui/Input.js.map +1 -0
- package/dist/components/library/ui/Spinner.js +64 -0
- package/dist/components/library/ui/Spinner.js.map +1 -0
- package/dist/components/library/ui/Text.js +43 -0
- package/dist/components/library/ui/Text.js.map +1 -0
- package/dist/components/library/ui/Toggle.js +47 -0
- package/dist/components/library/ui/Toggle.js.map +1 -0
- package/dist/components/workspace/ComponentRegistry.js +231 -0
- package/dist/components/workspace/ComponentRegistry.js.map +1 -0
- package/dist/index.js +185 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.js +9 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/node_modules/clsx/dist/clsx.js +17 -0
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +2925 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/package.json +81 -0
- package/scripts/get-graphql-schema.mjs +68 -0
- package/scripts/reset-command-center.sh +358 -0
- package/scripts/rewrite-e2e-assets.mjs +23 -0
- package/scripts/validate-dashboard.sh +290 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import t from "react";
|
|
3
|
+
import { tokens as d, getTokenCSSProperties as u } from "./tokens.js";
|
|
4
|
+
const a = t.createContext({
|
|
5
|
+
mode: "light",
|
|
6
|
+
theme: d,
|
|
7
|
+
toggle: () => {
|
|
8
|
+
}
|
|
9
|
+
}), c = "app-color-mode";
|
|
10
|
+
function f(r) {
|
|
11
|
+
if (typeof document > "u") return;
|
|
12
|
+
const o = document.documentElement;
|
|
13
|
+
r === "dark" ? o.classList.add("dark") : o.classList.remove("dark");
|
|
14
|
+
}
|
|
15
|
+
function l() {
|
|
16
|
+
if (typeof document > "u") return;
|
|
17
|
+
const r = document.documentElement, o = u();
|
|
18
|
+
for (const [e, s] of Object.entries(o))
|
|
19
|
+
r.style.setProperty(e, s);
|
|
20
|
+
}
|
|
21
|
+
function k() {
|
|
22
|
+
return t.useContext(a);
|
|
23
|
+
}
|
|
24
|
+
function y({ initialMode: r = "light", children: o }) {
|
|
25
|
+
const [e, s] = t.useState(r);
|
|
26
|
+
t.useEffect(() => {
|
|
27
|
+
l();
|
|
28
|
+
}, []), t.useEffect(() => {
|
|
29
|
+
try {
|
|
30
|
+
const n = window.localStorage.getItem(c);
|
|
31
|
+
(n === "light" || n === "dark") && s(n);
|
|
32
|
+
} catch {
|
|
33
|
+
}
|
|
34
|
+
}, []), t.useEffect(() => {
|
|
35
|
+
f(e);
|
|
36
|
+
try {
|
|
37
|
+
window.localStorage.setItem(c, e);
|
|
38
|
+
} catch {
|
|
39
|
+
}
|
|
40
|
+
}, [e]);
|
|
41
|
+
const m = t.useMemo(
|
|
42
|
+
() => ({
|
|
43
|
+
mode: e,
|
|
44
|
+
theme: d,
|
|
45
|
+
toggle: () => s((n) => n === "dark" ? "light" : "dark")
|
|
46
|
+
}),
|
|
47
|
+
[e]
|
|
48
|
+
);
|
|
49
|
+
return /* @__PURE__ */ i(a.Provider, { value: m, children: o });
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
y as default,
|
|
53
|
+
k as useThemeMode
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=AppThemeProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppThemeProvider.js","sources":["../../../../src/components/library/theme/AppThemeProvider.jsx"],"sourcesContent":["import React from \"react\";\nimport { tokens, getTokenCSSProperties } from \"./tokens\";\n\nconst ThemeModeContext = React.createContext({\n mode: \"light\",\n theme: tokens,\n toggle: () => {}\n});\n\nconst STORAGE_KEY = \"app-color-mode\";\n\nfunction applyHtmlDarkClass(mode) {\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n if (mode === \"dark\") root.classList.add(\"dark\");\n else root.classList.remove(\"dark\");\n}\n\nfunction applyTokenCSSProperties() {\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n const props = getTokenCSSProperties();\n for (const [key, value] of Object.entries(props)) {\n root.style.setProperty(key, value);\n }\n}\n\nexport function useThemeMode() {\n return React.useContext(ThemeModeContext);\n}\n\nexport default function AppThemeProvider({ initialMode = \"light\", children }) {\n const [mode, setMode] = React.useState(initialMode);\n\n React.useEffect(() => {\n applyTokenCSSProperties();\n }, []);\n\n React.useEffect(() => {\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n if (stored === \"light\" || stored === \"dark\") setMode(stored);\n } catch {\n // ignore\n }\n }, []);\n\n React.useEffect(() => {\n applyHtmlDarkClass(mode);\n try {\n window.localStorage.setItem(STORAGE_KEY, mode);\n } catch {\n // ignore\n }\n }, [mode]);\n\n const value = React.useMemo(\n () => ({\n mode,\n theme: tokens,\n toggle: () => setMode((m) => (m === \"dark\" ? \"light\" : \"dark\"))\n }),\n [mode]\n );\n\n return <ThemeModeContext.Provider value={value}>{children}</ThemeModeContext.Provider>;\n}\n"],"names":["ThemeModeContext","React","tokens","STORAGE_KEY","applyHtmlDarkClass","mode","root","applyTokenCSSProperties","props","getTokenCSSProperties","key","value","useThemeMode","AppThemeProvider","initialMode","children","setMode","stored","m","jsx"],"mappings":";;;AAGA,MAAMA,IAAmBC,EAAM,cAAc;AAAA,EAC3C,MAAM;AAAA,EACN,OAAOC;AAAA,EACP,QAAQ,MAAM;AAAA,EAAC;AACjB,CAAC,GAEKC,IAAc;AAEpB,SAASC,EAAmBC,GAAM;AAChC,MAAI,OAAO,WAAa,IAAa;AACrC,QAAMC,IAAO,SAAS;AACtB,EAAID,MAAS,SAAQC,EAAK,UAAU,IAAI,MAAM,IACzCA,EAAK,UAAU,OAAO,MAAM;AACnC;AAEA,SAASC,IAA0B;AACjC,MAAI,OAAO,WAAa,IAAa;AACrC,QAAMD,IAAO,SAAS,iBAChBE,IAAQC,EAAA;AACd,aAAW,CAACC,GAAKC,CAAK,KAAK,OAAO,QAAQH,CAAK;AAC7C,IAAAF,EAAK,MAAM,YAAYI,GAAKC,CAAK;AAErC;AAEO,SAASC,IAAe;AAC7B,SAAOX,EAAM,WAAWD,CAAgB;AAC1C;AAEA,SAAwBa,EAAiB,EAAE,aAAAC,IAAc,SAAS,UAAAC,KAAY;AAC5E,QAAM,CAACV,GAAMW,CAAO,IAAIf,EAAM,SAASa,CAAW;AAElD,EAAAb,EAAM,UAAU,MAAM;AACpB,IAAAM,EAAA;AAAA,EACF,GAAG,CAAA,CAAE,GAELN,EAAM,UAAU,MAAM;AACpB,QAAI;AACF,YAAMgB,IAAS,OAAO,aAAa,QAAQd,CAAW;AACtD,OAAIc,MAAW,WAAWA,MAAW,aAAgBA,CAAM;AAAA,IAC7D,QAAQ;AAAA,IAER;AAAA,EACF,GAAG,CAAA,CAAE,GAELhB,EAAM,UAAU,MAAM;AACpB,IAAAG,EAAmBC,CAAI;AACvB,QAAI;AACF,aAAO,aAAa,QAAQF,GAAaE,CAAI;AAAA,IAC/C,QAAQ;AAAA,IAER;AAAA,EACF,GAAG,CAACA,CAAI,CAAC;AAET,QAAMM,IAAQV,EAAM;AAAA,IAClB,OAAO;AAAA,MACL,MAAAI;AAAA,MACA,OAAOH;AAAA,MACP,QAAQ,MAAMc,EAAQ,CAACE,MAAOA,MAAM,SAAS,UAAU,MAAO;AAAA,IAAA;AAAA,IAEhE,CAACb,CAAI;AAAA,EAAA;AAGP,SAAO,gBAAAc,EAACnB,EAAiB,UAAjB,EAA0B,OAAAW,GAAe,UAAAI,EAAA,CAAS;AAC5D;"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
const t = {
|
|
2
|
+
colors: {
|
|
3
|
+
brand: {
|
|
4
|
+
50: "#EEF2FF",
|
|
5
|
+
100: "#E0E7FF",
|
|
6
|
+
200: "#C7D2FE",
|
|
7
|
+
300: "#A5B4FC",
|
|
8
|
+
400: "#818CF8",
|
|
9
|
+
500: "#6366F1",
|
|
10
|
+
600: "#4F46E5",
|
|
11
|
+
700: "#4338CA",
|
|
12
|
+
800: "#3730A3",
|
|
13
|
+
900: "#312E81",
|
|
14
|
+
950: "#1E1B4E"
|
|
15
|
+
},
|
|
16
|
+
accent: {
|
|
17
|
+
50: "#ECFEFF",
|
|
18
|
+
100: "#CFFAFE",
|
|
19
|
+
200: "#A5F3FC",
|
|
20
|
+
300: "#67E8F9",
|
|
21
|
+
400: "#22D3EE",
|
|
22
|
+
500: "#06B6D4",
|
|
23
|
+
600: "#0891B2",
|
|
24
|
+
700: "#0E7490",
|
|
25
|
+
800: "#155E75",
|
|
26
|
+
900: "#164E63",
|
|
27
|
+
950: "#083344"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
fonts: {
|
|
31
|
+
sans: "Inter",
|
|
32
|
+
mono: "JetBrains Mono"
|
|
33
|
+
},
|
|
34
|
+
radius: {
|
|
35
|
+
sm: "0.5rem",
|
|
36
|
+
md: "0.75rem",
|
|
37
|
+
lg: "1rem"
|
|
38
|
+
},
|
|
39
|
+
spacing: {
|
|
40
|
+
pageX: "1.25rem",
|
|
41
|
+
pageY: "1.25rem"
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
function F() {
|
|
45
|
+
const e = {};
|
|
46
|
+
for (const [o, r] of Object.entries(t.colors))
|
|
47
|
+
for (const [s, n] of Object.entries(r))
|
|
48
|
+
e[`--color-${o}-${s}`] = n;
|
|
49
|
+
return e;
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
F as getTokenCSSProperties,
|
|
53
|
+
t as tokens
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sources":["../../../../src/components/library/theme/tokens.jsx"],"sourcesContent":["/**\n * Design tokens — single source of truth for branding.\n *\n * To rebrand a command center:\n * 1. Swap the `brand` palette (use any Tailwind-style color scale)\n * 2. Swap the `accent` palette\n * 3. Change `fonts.sans` in _app.js (next/font import)\n *\n * AppThemeProvider injects these as CSS custom properties on :root,\n * and tailwind.config.js references them via var(--color-brand-*).\n */\n\nexport const tokens = {\n colors: {\n brand: {\n 50: \"#EEF2FF\",\n 100: \"#E0E7FF\",\n 200: \"#C7D2FE\",\n 300: \"#A5B4FC\",\n 400: \"#818CF8\",\n 500: \"#6366F1\",\n 600: \"#4F46E5\",\n 700: \"#4338CA\",\n 800: \"#3730A3\",\n 900: \"#312E81\",\n 950: \"#1E1B4E\",\n },\n accent: {\n 50: \"#ECFEFF\",\n 100: \"#CFFAFE\",\n 200: \"#A5F3FC\",\n 300: \"#67E8F9\",\n 400: \"#22D3EE\",\n 500: \"#06B6D4\",\n 600: \"#0891B2\",\n 700: \"#0E7490\",\n 800: \"#155E75\",\n 900: \"#164E63\",\n 950: \"#083344\",\n },\n },\n\n fonts: {\n sans: \"Inter\",\n mono: \"JetBrains Mono\",\n },\n\n radius: {\n sm: \"0.5rem\",\n md: \"0.75rem\",\n lg: \"1rem\",\n },\n\n spacing: {\n pageX: \"1.25rem\",\n pageY: \"1.25rem\",\n },\n};\n\n/**\n * Generates CSS custom property assignments from the token palettes.\n * Used by AppThemeProvider to inject on :root at runtime.\n */\nexport function getTokenCSSProperties() {\n const props = {};\n for (const [palette, shades] of Object.entries(tokens.colors)) {\n for (const [shade, value] of Object.entries(shades)) {\n props[`--color-${palette}-${shade}`] = value;\n }\n }\n return props;\n}\n"],"names":["tokens","getTokenCSSProperties","props","palette","shades","shade","value"],"mappings":"AAYO,MAAMA,IAAS;AAAA,EACpB,QAAQ;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IAAA;AAAA,IAEP,QAAQ;AAAA,MACN,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IAAA;AAAA,EACP;AAAA,EAGF,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,EAAA;AAAA,EAGR,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAAA,EAGN,SAAS;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EAAA;AAEX;AAMO,SAASC,IAAwB;AACtC,QAAMC,IAAQ,CAAA;AACd,aAAW,CAACC,GAASC,CAAM,KAAK,OAAO,QAAQJ,EAAO,MAAM;AAC1D,eAAW,CAACK,GAAOC,CAAK,KAAK,OAAO,QAAQF,CAAM;AAChD,MAAAF,EAAM,WAAWC,CAAO,IAAIE,CAAK,EAAE,IAAIC;AAG3C,SAAOJ;AACT;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import m from "react";
|
|
3
|
+
const o = {
|
|
4
|
+
xs: "h-6 w-6 text-[9px]",
|
|
5
|
+
sm: "h-8 w-8 text-[10px]",
|
|
6
|
+
md: "h-9 w-9 text-xs",
|
|
7
|
+
lg: "h-11 w-11 text-sm"
|
|
8
|
+
}, t = {
|
|
9
|
+
slate: "bg-slate-800 text-white",
|
|
10
|
+
brand: "bg-brand-500 text-white",
|
|
11
|
+
neutral: "bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-200"
|
|
12
|
+
};
|
|
13
|
+
function p({ src: i, name: e, initials: x, icon: n, size: c = "sm", tone: d = "slate", className: s = "", ...r }) {
|
|
14
|
+
const l = o[c] ?? o.sm;
|
|
15
|
+
if (i)
|
|
16
|
+
return /* @__PURE__ */ a(
|
|
17
|
+
"img",
|
|
18
|
+
{
|
|
19
|
+
src: i,
|
|
20
|
+
alt: e ?? "",
|
|
21
|
+
className: `${l} shrink-0 rounded-full border border-slate-200 object-cover dark:border-slate-800 ${s}`,
|
|
22
|
+
...r
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
if (m.isValidElement(n))
|
|
26
|
+
return /* @__PURE__ */ a("div", { className: `${l} ${t[d] ?? t.slate} flex shrink-0 items-center justify-center rounded-full ${s}`, ...r, children: n });
|
|
27
|
+
const f = x ?? (e ? e.split(" ").map((u) => u[0]).join("").slice(0, 2).toUpperCase() : "?");
|
|
28
|
+
return /* @__PURE__ */ a("div", { className: `${l} ${t[d] ?? t.slate} flex shrink-0 items-center justify-center rounded-full font-bold ${s}`, ...r, children: f });
|
|
29
|
+
}
|
|
30
|
+
export {
|
|
31
|
+
p as default
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=Avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.js","sources":["../../../../src/components/library/ui/Avatar.jsx"],"sourcesContent":["import React from \"react\";\n\nconst SIZE_MAP = {\n xs: \"h-6 w-6 text-[9px]\",\n sm: \"h-8 w-8 text-[10px]\",\n md: \"h-9 w-9 text-xs\",\n lg: \"h-11 w-11 text-sm\",\n};\n\nconst TONE_MAP = {\n slate: \"bg-slate-800 text-white\",\n brand: \"bg-brand-500 text-white\",\n neutral: \"bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-200\",\n};\n\nexport default function Avatar({ src, name, initials, icon, size = \"sm\", tone = \"slate\", className = \"\", ...rest }) {\n const sizeClass = SIZE_MAP[size] ?? SIZE_MAP.sm;\n\n if (src) {\n return (\n <img\n src={src}\n alt={name ?? \"\"}\n className={`${sizeClass} shrink-0 rounded-full border border-slate-200 object-cover dark:border-slate-800 ${className}`}\n {...rest}\n />\n );\n }\n\n if (React.isValidElement(icon)) {\n return (\n <div className={`${sizeClass} ${TONE_MAP[tone] ?? TONE_MAP.slate} flex shrink-0 items-center justify-center rounded-full ${className}`} {...rest}>\n {icon}\n </div>\n );\n }\n\n const label = initials ?? (name ? name.split(\" \").map(w => w[0]).join(\"\").slice(0, 2).toUpperCase() : \"?\");\n return (\n <div className={`${sizeClass} ${TONE_MAP[tone] ?? TONE_MAP.slate} flex shrink-0 items-center justify-center rounded-full font-bold ${className}`} {...rest}>\n {label}\n </div>\n );\n}\n"],"names":["SIZE_MAP","TONE_MAP","Avatar","src","name","initials","icon","size","tone","className","rest","sizeClass","jsx","React","label","w"],"mappings":";;AAEA,MAAMA,IAAW;AAAA,EACf,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAW;AAAA,EACf,OAAS;AAAA,EACT,OAAS;AAAA,EACT,SAAS;AACX;AAEA,SAAwBC,EAAO,EAAE,KAAAC,GAAK,MAAAC,GAAM,UAAAC,GAAU,MAAAC,GAAM,MAAAC,IAAO,MAAM,MAAAC,IAAO,SAAS,WAAAC,IAAY,IAAI,GAAGC,KAAQ;AAClH,QAAMC,IAAYX,EAASO,CAAI,KAAKP,EAAS;AAE7C,MAAIG;AACF,WACE,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAT;AAAA,QACA,KAAKC,KAAQ;AAAA,QACb,WAAW,GAAGO,CAAS,qFAAqFF,CAAS;AAAA,QACpH,GAAGC;AAAA,MAAA;AAAA,IAAA;AAKV,MAAIG,EAAM,eAAeP,CAAI;AAC3B,6BACG,OAAA,EAAI,WAAW,GAAGK,CAAS,IAAIV,EAASO,CAAI,KAAKP,EAAS,KAAK,2DAA2DQ,CAAS,IAAK,GAAGC,GACzI,UAAAJ,GACH;AAIJ,QAAMQ,IAAQT,MAAaD,IAAOA,EAAK,MAAM,GAAG,EAAE,IAAI,CAAAW,MAAKA,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,YAAA,IAAgB;AACtG,2BACG,OAAA,EAAI,WAAW,GAAGJ,CAAS,IAAIV,EAASO,CAAI,KAAKP,EAAS,KAAK,qEAAqEQ,CAAS,IAAK,GAAGC,GACnJ,UAAAI,GACH;AAEJ;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx as u } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const t = {
|
|
4
|
+
primary: "bg-brand-600 text-white hover:bg-brand-500 dark:bg-brand-500 dark:hover:bg-brand-400 border-transparent",
|
|
5
|
+
secondary: "bg-slate-900 text-white hover:bg-slate-800 dark:bg-slate-100 dark:text-slate-900 dark:hover:bg-slate-200 border-transparent",
|
|
6
|
+
outline: "bg-transparent text-slate-900 hover:bg-slate-50 dark:text-slate-50 dark:hover:bg-slate-900 border-slate-200 dark:border-slate-800",
|
|
7
|
+
ghost: "bg-transparent text-slate-900 hover:bg-slate-100 dark:text-slate-50 dark:hover:bg-slate-900 border-transparent"
|
|
8
|
+
}, e = {
|
|
9
|
+
sm: "h-8 px-3 text-sm",
|
|
10
|
+
md: "h-10 px-4 text-sm",
|
|
11
|
+
lg: "h-12 px-5 text-base"
|
|
12
|
+
};
|
|
13
|
+
function c({
|
|
14
|
+
variant: r = "primary",
|
|
15
|
+
size: a = "md",
|
|
16
|
+
fullWidth: s = !1,
|
|
17
|
+
disabled: o = !1,
|
|
18
|
+
onClick: n = () => {
|
|
19
|
+
},
|
|
20
|
+
children: l,
|
|
21
|
+
style: d = void 0,
|
|
22
|
+
className: i = "",
|
|
23
|
+
...b
|
|
24
|
+
}) {
|
|
25
|
+
const g = t[r] ?? t.primary, f = e[a] ?? e.md;
|
|
26
|
+
return /* @__PURE__ */ u(
|
|
27
|
+
"button",
|
|
28
|
+
{
|
|
29
|
+
type: "button",
|
|
30
|
+
onClick: n,
|
|
31
|
+
disabled: o,
|
|
32
|
+
style: d,
|
|
33
|
+
className: [
|
|
34
|
+
"inline-flex items-center justify-center gap-2 rounded-lg border font-medium shadow-sm transition",
|
|
35
|
+
"focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-950",
|
|
36
|
+
"disabled:cursor-not-allowed disabled:opacity-60",
|
|
37
|
+
g,
|
|
38
|
+
f,
|
|
39
|
+
s ? "w-full" : "",
|
|
40
|
+
i
|
|
41
|
+
].filter(Boolean).join(" "),
|
|
42
|
+
...b,
|
|
43
|
+
children: l
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
export {
|
|
48
|
+
c as default
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../../../src/components/library/ui/Button.jsx"],"sourcesContent":["import React from \"react\";\n\nconst VARIANT_CLASSES = {\n primary:\n \"bg-brand-600 text-white hover:bg-brand-500 dark:bg-brand-500 dark:hover:bg-brand-400 border-transparent\",\n secondary:\n \"bg-slate-900 text-white hover:bg-slate-800 dark:bg-slate-100 dark:text-slate-900 dark:hover:bg-slate-200 border-transparent\",\n outline:\n \"bg-transparent text-slate-900 hover:bg-slate-50 dark:text-slate-50 dark:hover:bg-slate-900 border-slate-200 dark:border-slate-800\",\n ghost:\n \"bg-transparent text-slate-900 hover:bg-slate-100 dark:text-slate-50 dark:hover:bg-slate-900 border-transparent\"\n};\n\nconst SIZE_CLASSES = {\n sm: \"h-8 px-3 text-sm\",\n md: \"h-10 px-4 text-sm\",\n lg: \"h-12 px-5 text-base\"\n};\n\nexport default function UIButton({\n variant = \"primary\",\n size = \"md\",\n fullWidth = false,\n disabled = false,\n onClick = () => {},\n children,\n style = undefined,\n className = \"\",\n ...rest\n}) {\n const variantClass = VARIANT_CLASSES[variant] ?? VARIANT_CLASSES.primary;\n const sizeClass = SIZE_CLASSES[size] ?? SIZE_CLASSES.md;\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n style={style}\n className={[\n \"inline-flex items-center justify-center gap-2 rounded-lg border font-medium shadow-sm transition\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-950\",\n \"disabled:cursor-not-allowed disabled:opacity-60\",\n variantClass,\n sizeClass,\n fullWidth ? \"w-full\" : \"\",\n className\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n {children}\n </button>\n );\n}\n\n\n"],"names":["VARIANT_CLASSES","SIZE_CLASSES","UIButton","variant","size","fullWidth","disabled","onClick","children","style","className","rest","variantClass","sizeClass","jsx"],"mappings":";;AAEA,MAAMA,IAAkB;AAAA,EACtB,SACE;AAAA,EACF,WACE;AAAA,EACF,SACE;AAAA,EACF,OACE;AACJ,GAEMC,IAAe;AAAA,EACnB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,SAAwBC,EAAS;AAAA,EAC/B,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,SAAAC,IAAU,MAAM;AAAA,EAAC;AAAA,EACjB,UAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,GAAG;AACD,QAAMC,IAAeZ,EAAgBG,CAAO,KAAKH,EAAgB,SAC3Da,IAAYZ,EAAaG,CAAI,KAAKH,EAAa;AAErD,SACE,gBAAAa;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAAP;AAAA,MACA,UAAAD;AAAA,MACA,OAAAG;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACAG;AAAA,QACAC;AAAA,QACAR,IAAY,WAAW;AAAA,QACvBK;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACV,GAAGC;AAAA,MAEH,UAAAH;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
function i({ children: r, padding: e = "p-5", style: o, className: a = "", ...d }) {
|
|
4
|
+
return /* @__PURE__ */ t(
|
|
5
|
+
"div",
|
|
6
|
+
{
|
|
7
|
+
style: o,
|
|
8
|
+
className: [
|
|
9
|
+
"rounded-2xl border border-slate-200 bg-white shadow-sm dark:border-slate-800 dark:bg-slate-900",
|
|
10
|
+
e,
|
|
11
|
+
a
|
|
12
|
+
].filter(Boolean).join(" "),
|
|
13
|
+
...d,
|
|
14
|
+
children: r
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
i as default
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=Card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Card.js","sources":["../../../../src/components/library/ui/Card.jsx"],"sourcesContent":["import React from \"react\";\n\nexport default function UICard({ children, padding = \"p-5\", style, className = \"\", ...rest }) {\n return (\n <div\n style={style}\n className={[\n \"rounded-2xl border border-slate-200 bg-white shadow-sm dark:border-slate-800 dark:bg-slate-900\",\n padding,\n className\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\n\n"],"names":["UICard","children","padding","style","className","rest","jsx"],"mappings":";;AAEA,SAAwBA,EAAO,EAAE,UAAAC,GAAU,SAAAC,IAAU,OAAO,OAAAC,GAAO,WAAAC,IAAY,IAAI,GAAGC,KAAQ;AAC5F,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAAH;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACAD;AAAA,QACAE;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACV,GAAGC;AAAA,MAEH,UAAAJ;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const r = {
|
|
4
|
+
neutral: "border-slate-200/80 bg-white/60 text-slate-700 ring-black/5 hover:bg-white/80 dark:border-slate-800/80 dark:bg-slate-950/30 dark:text-slate-200 dark:ring-white/10 dark:hover:bg-slate-900/50",
|
|
5
|
+
primary: "border-brand-200/80 bg-brand-50/70 text-brand-800 ring-brand-900/5 hover:bg-brand-50 dark:border-brand-900/40 dark:bg-brand-950/25 dark:text-brand-200 dark:ring-brand-300/10 dark:hover:bg-brand-950/35",
|
|
6
|
+
success: "border-emerald-200/80 bg-emerald-50/70 text-emerald-800 ring-emerald-900/5 hover:bg-emerald-50 dark:border-emerald-900/40 dark:bg-emerald-950/20 dark:text-emerald-200 dark:ring-emerald-300/10 dark:hover:bg-emerald-950/30",
|
|
7
|
+
warning: "border-amber-200/80 bg-amber-50/70 text-amber-900 ring-amber-900/5 hover:bg-amber-50 dark:border-amber-900/40 dark:bg-amber-950/20 dark:text-amber-200 dark:ring-amber-300/10 dark:hover:bg-amber-950/30",
|
|
8
|
+
danger: "border-rose-200/80 bg-rose-50/70 text-rose-900 ring-rose-900/5 hover:bg-rose-50 dark:border-rose-900/40 dark:bg-rose-950/20 dark:text-rose-200 dark:ring-rose-300/10 dark:hover:bg-rose-950/30"
|
|
9
|
+
}, e = {
|
|
10
|
+
xs: "px-2 py-0.5 text-[11px]",
|
|
11
|
+
sm: "px-2.5 py-1 text-xs"
|
|
12
|
+
};
|
|
13
|
+
function l({ tone: a = "neutral", size: d = "xs", className: b = "", children: t, ...o }) {
|
|
14
|
+
return /* @__PURE__ */ n(
|
|
15
|
+
"span",
|
|
16
|
+
{
|
|
17
|
+
className: [
|
|
18
|
+
"inline-flex items-center gap-1 rounded-full border font-semibold shadow-sm ring-1 transition",
|
|
19
|
+
e[d] ?? e.xs,
|
|
20
|
+
r[a] ?? r.neutral,
|
|
21
|
+
b
|
|
22
|
+
].filter(Boolean).join(" "),
|
|
23
|
+
...o,
|
|
24
|
+
children: t
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
l as default
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=Chip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chip.js","sources":["../../../../src/components/library/ui/Chip.jsx"],"sourcesContent":["import React from \"react\";\n\nconst TONE_STYLES = {\n neutral:\n \"border-slate-200/80 bg-white/60 text-slate-700 ring-black/5 hover:bg-white/80 dark:border-slate-800/80 dark:bg-slate-950/30 dark:text-slate-200 dark:ring-white/10 dark:hover:bg-slate-900/50\",\n primary:\n \"border-brand-200/80 bg-brand-50/70 text-brand-800 ring-brand-900/5 hover:bg-brand-50 dark:border-brand-900/40 dark:bg-brand-950/25 dark:text-brand-200 dark:ring-brand-300/10 dark:hover:bg-brand-950/35\",\n success:\n \"border-emerald-200/80 bg-emerald-50/70 text-emerald-800 ring-emerald-900/5 hover:bg-emerald-50 dark:border-emerald-900/40 dark:bg-emerald-950/20 dark:text-emerald-200 dark:ring-emerald-300/10 dark:hover:bg-emerald-950/30\",\n warning:\n \"border-amber-200/80 bg-amber-50/70 text-amber-900 ring-amber-900/5 hover:bg-amber-50 dark:border-amber-900/40 dark:bg-amber-950/20 dark:text-amber-200 dark:ring-amber-300/10 dark:hover:bg-amber-950/30\",\n danger:\n \"border-rose-200/80 bg-rose-50/70 text-rose-900 ring-rose-900/5 hover:bg-rose-50 dark:border-rose-900/40 dark:bg-rose-950/20 dark:text-rose-200 dark:ring-rose-300/10 dark:hover:bg-rose-950/30\"\n};\n\nconst SIZE_STYLES = {\n xs: \"px-2 py-0.5 text-[11px]\",\n sm: \"px-2.5 py-1 text-xs\"\n};\n\nexport default function UIChip({ tone = \"neutral\", size = \"xs\", className = \"\", children, ...rest }) {\n return (\n <span\n className={[\n \"inline-flex items-center gap-1 rounded-full border font-semibold shadow-sm ring-1 transition\",\n SIZE_STYLES[size] ?? SIZE_STYLES.xs,\n TONE_STYLES[tone] ?? TONE_STYLES.neutral,\n className\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n {children}\n </span>\n );\n}\n\n"],"names":["TONE_STYLES","SIZE_STYLES","UIChip","tone","size","className","children","rest","jsx"],"mappings":";;AAEA,MAAMA,IAAc;AAAA,EAClB,SACE;AAAA,EACF,SACE;AAAA,EACF,SACE;AAAA,EACF,SACE;AAAA,EACF,QACE;AACJ,GAEMC,IAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,SAAwBC,EAAO,EAAE,MAAAC,IAAO,WAAW,MAAAC,IAAO,MAAM,WAAAC,IAAY,IAAI,UAAAC,GAAU,GAAGC,KAAQ;AACnG,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACAP,EAAYG,CAAI,KAAKH,EAAY;AAAA,QACjCD,EAAYG,CAAI,KAAKH,EAAY;AAAA,QACjCK;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACV,GAAGE;AAAA,MAEH,UAAAD;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsxs as s, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
import i from "./Text.js";
|
|
4
|
+
function N({
|
|
5
|
+
title: r,
|
|
6
|
+
subtitle: a,
|
|
7
|
+
description: m,
|
|
8
|
+
actions: l,
|
|
9
|
+
empty: n = !1,
|
|
10
|
+
emptyText: c = "Nothing here yet.",
|
|
11
|
+
emptyIcon: d,
|
|
12
|
+
emptyHeight: o = 160,
|
|
13
|
+
className: h = "",
|
|
14
|
+
style: f,
|
|
15
|
+
children: u
|
|
16
|
+
}) {
|
|
17
|
+
const t = a ?? m;
|
|
18
|
+
return /* @__PURE__ */ s("section", { className: h, style: f, children: [
|
|
19
|
+
(r || t || l) && /* @__PURE__ */ s("div", { className: "mb-4 flex flex-col gap-2 sm:flex-row sm:items-end sm:justify-between", children: [
|
|
20
|
+
/* @__PURE__ */ s("div", { className: "min-w-0", children: [
|
|
21
|
+
r && /* @__PURE__ */ e(i, { as: "h2", size: "lg", weight: "bold", className: "truncate", children: r }),
|
|
22
|
+
t && /* @__PURE__ */ e(i, { as: "p", size: "sm", muted: !0, className: "mt-1", children: t })
|
|
23
|
+
] }),
|
|
24
|
+
l && /* @__PURE__ */ e("div", { className: "flex shrink-0 items-center gap-2", children: l })
|
|
25
|
+
] }),
|
|
26
|
+
n ? /* @__PURE__ */ s(
|
|
27
|
+
"div",
|
|
28
|
+
{
|
|
29
|
+
className: "flex w-full flex-col items-center justify-center rounded-2xl border border-dashed border-slate-300 bg-slate-50 px-6 text-center dark:border-slate-700 dark:bg-slate-900/40",
|
|
30
|
+
style: { minHeight: o },
|
|
31
|
+
children: [
|
|
32
|
+
d ? /* @__PURE__ */ e("div", { className: "mb-2", children: d }) : null,
|
|
33
|
+
/* @__PURE__ */ e(i, { size: "sm", muted: !0, children: c })
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
) : u
|
|
37
|
+
] });
|
|
38
|
+
}
|
|
39
|
+
export {
|
|
40
|
+
N as default
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=Container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Container.js","sources":["../../../../src/components/library/ui/Container.jsx"],"sourcesContent":["import React from \"react\";\nimport UIText from \"./Text\";\n\nexport default function UIContainer({\n title,\n subtitle,\n description,\n actions,\n empty = false,\n emptyText = \"Nothing here yet.\",\n emptyIcon,\n emptyHeight = 160,\n className = \"\",\n style,\n children\n}) {\n const sub = subtitle ?? description;\n\n return (\n <section className={className} style={style}>\n {(title || sub || actions) && (\n <div className=\"mb-4 flex flex-col gap-2 sm:flex-row sm:items-end sm:justify-between\">\n <div className=\"min-w-0\">\n {title && (\n <UIText as=\"h2\" size=\"lg\" weight=\"bold\" className=\"truncate\">\n {title}\n </UIText>\n )}\n {sub && (\n <UIText as=\"p\" size=\"sm\" muted className=\"mt-1\">\n {sub}\n </UIText>\n )}\n </div>\n {actions && <div className=\"flex shrink-0 items-center gap-2\">{actions}</div>}\n </div>\n )}\n\n {empty ? (\n <div\n className=\"flex w-full flex-col items-center justify-center rounded-2xl border border-dashed border-slate-300 bg-slate-50 px-6 text-center dark:border-slate-700 dark:bg-slate-900/40\"\n style={{ minHeight: emptyHeight }}\n >\n {emptyIcon ? <div className=\"mb-2\">{emptyIcon}</div> : null}\n <UIText size=\"sm\" muted>\n {emptyText}\n </UIText>\n </div>\n ) : (\n children\n )}\n </section>\n );\n}\n\n\n"],"names":["UIContainer","title","subtitle","description","actions","empty","emptyText","emptyIcon","emptyHeight","className","style","children","sub","jsxs","jsx","UIText"],"mappings":";;;AAGA,SAAwBA,EAAY;AAAA,EAClC,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,WAAAC,IAAY;AAAA,EACZ,WAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,UAAAC;AACF,GAAG;AACD,QAAMC,IAAMV,KAAYC;AAExB,SACE,gBAAAU,EAAC,WAAA,EAAQ,WAAAJ,GAAsB,OAAAC,GAC3B,UAAA;AAAA,KAAAT,KAASW,KAAOR,MAChB,gBAAAS,EAAC,OAAA,EAAI,WAAU,wEACb,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,WACZ,UAAA;AAAA,QAAAZ,KACC,gBAAAa,EAACC,GAAA,EAAO,IAAG,MAAK,MAAK,MAAK,QAAO,QAAO,WAAU,YAC/C,UAAAd,EAAA,CACH;AAAA,QAEDW,KACC,gBAAAE,EAACC,GAAA,EAAO,IAAG,KAAI,MAAK,MAAK,OAAK,IAAC,WAAU,QACtC,UAAAH,EAAA,CACH;AAAA,MAAA,GAEJ;AAAA,MACCR,KAAW,gBAAAU,EAAC,OAAA,EAAI,WAAU,oCAAoC,UAAAV,EAAA,CAAQ;AAAA,IAAA,GACzE;AAAA,IAGDC,IACC,gBAAAQ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,WAAWL,EAAA;AAAA,QAEnB,UAAA;AAAA,UAAAD,IAAY,gBAAAO,EAAC,OAAA,EAAI,WAAU,QAAQ,aAAU,IAAS;AAAA,4BACtDC,GAAA,EAAO,MAAK,MAAK,OAAK,IACpB,UAAAT,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,IAGFK;AAAA,EAAA,GAEJ;AAEJ;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsxs as x, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const i = {
|
|
4
|
+
sm: { icon: "h-8 w-8", heading: "text-sm", body: "text-xs", gap: "gap-2", pad: "py-6" },
|
|
5
|
+
md: { icon: "h-10 w-10", heading: "text-base", body: "text-sm", gap: "gap-3", pad: "py-10" },
|
|
6
|
+
lg: { icon: "h-14 w-14", heading: "text-lg", body: "text-sm", gap: "gap-4", pad: "py-16" }
|
|
7
|
+
};
|
|
8
|
+
function r({
|
|
9
|
+
icon: a,
|
|
10
|
+
heading: l = "Nothing here yet",
|
|
11
|
+
body: s,
|
|
12
|
+
action: d,
|
|
13
|
+
size: m = "md",
|
|
14
|
+
className: n = ""
|
|
15
|
+
}) {
|
|
16
|
+
const e = i[m] ?? i.md;
|
|
17
|
+
return /* @__PURE__ */ x("div", { className: `flex flex-col items-center justify-center text-center ${e.pad} ${e.gap} ${n}`, children: [
|
|
18
|
+
a && /* @__PURE__ */ t("div", { className: `${e.icon} text-slate-300 dark:text-slate-600`, children: a }),
|
|
19
|
+
/* @__PURE__ */ t("div", { className: `${e.heading} font-semibold text-slate-700 dark:text-slate-200`, children: l }),
|
|
20
|
+
s && /* @__PURE__ */ t("div", { className: `${e.body} max-w-sm text-slate-500 dark:text-slate-400`, children: s }),
|
|
21
|
+
d && /* @__PURE__ */ t("div", { className: "mt-1", children: d })
|
|
22
|
+
] });
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
r as default
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=EmptyState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyState.js","sources":["../../../../src/components/library/ui/EmptyState.jsx"],"sourcesContent":["import React from \"react\";\n\nconst SIZES = {\n sm: { icon: \"h-8 w-8\", heading: \"text-sm\", body: \"text-xs\", gap: \"gap-2\", pad: \"py-6\" },\n md: { icon: \"h-10 w-10\", heading: \"text-base\", body: \"text-sm\", gap: \"gap-3\", pad: \"py-10\" },\n lg: { icon: \"h-14 w-14\", heading: \"text-lg\", body: \"text-sm\", gap: \"gap-4\", pad: \"py-16\" },\n};\n\n/**\n * Empty state placeholder — shows when a list, table, or section has no content.\n *\n * @param {ReactNode} icon Optional icon element\n * @param {string} heading Primary message\n * @param {string} body Secondary description\n * @param {ReactNode} action Optional CTA (button, link, etc.)\n * @param {\"sm\"|\"md\"|\"lg\"} size Visual density\n */\nexport default function EmptyState({\n icon,\n heading = \"Nothing here yet\",\n body,\n action,\n size = \"md\",\n className = \"\",\n}) {\n const s = SIZES[size] ?? SIZES.md;\n\n return (\n <div className={`flex flex-col items-center justify-center text-center ${s.pad} ${s.gap} ${className}`}>\n {icon && (\n <div className={`${s.icon} text-slate-300 dark:text-slate-600`}>\n {icon}\n </div>\n )}\n <div className={`${s.heading} font-semibold text-slate-700 dark:text-slate-200`}>\n {heading}\n </div>\n {body && (\n <div className={`${s.body} max-w-sm text-slate-500 dark:text-slate-400`}>\n {body}\n </div>\n )}\n {action && <div className=\"mt-1\">{action}</div>}\n </div>\n );\n}\n"],"names":["SIZES","EmptyState","icon","heading","body","action","size","className","s","jsxs","jsx"],"mappings":";;AAEA,MAAMA,IAAQ;AAAA,EACZ,IAAI,EAAE,MAAM,WAAW,SAAS,WAAW,MAAM,WAAW,KAAK,SAAS,KAAK,OAAA;AAAA,EAC/E,IAAI,EAAE,MAAM,aAAa,SAAS,aAAa,MAAM,WAAW,KAAK,SAAS,KAAK,QAAA;AAAA,EACnF,IAAI,EAAE,MAAM,aAAa,SAAS,WAAW,MAAM,WAAW,KAAK,SAAS,KAAK,QAAA;AACnF;AAWA,SAAwBC,EAAW;AAAA,EACjC,MAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AACd,GAAG;AACD,QAAMC,IAAIR,EAAMM,CAAI,KAAKN,EAAM;AAE/B,SACE,gBAAAS,EAAC,OAAA,EAAI,WAAW,yDAAyDD,EAAE,GAAG,IAAIA,EAAE,GAAG,IAAID,CAAS,IACjG,UAAA;AAAA,IAAAL,uBACE,OAAA,EAAI,WAAW,GAAGM,EAAE,IAAI,uCACtB,UAAAN,EAAA,CACH;AAAA,sBAED,OAAA,EAAI,WAAW,GAAGM,EAAE,OAAO,qDACzB,UAAAL,GACH;AAAA,IACCC,uBACE,OAAA,EAAI,WAAW,GAAGI,EAAE,IAAI,gDACtB,UAAAJ,EAAA,CACH;AAAA,IAEDC,KAAU,gBAAAK,EAAC,OAAA,EAAI,WAAU,QAAQ,UAAAL,EAAA,CAAO;AAAA,EAAA,GAC3C;AAEJ;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
function l({ style: e = void 0, className: t = "", ...r }) {
|
|
4
|
+
return /* @__PURE__ */ o(
|
|
5
|
+
"input",
|
|
6
|
+
{
|
|
7
|
+
style: e,
|
|
8
|
+
className: [
|
|
9
|
+
"h-10 w-full rounded-lg border border-slate-200 bg-white px-3 text-sm text-slate-900 shadow-sm",
|
|
10
|
+
"placeholder:text-slate-400",
|
|
11
|
+
"focus:outline-none focus:ring-2 focus:ring-brand-500 focus:ring-offset-2 dark:focus:ring-offset-slate-950",
|
|
12
|
+
"dark:border-slate-800 dark:bg-slate-900 dark:text-slate-50 dark:placeholder:text-slate-500",
|
|
13
|
+
t
|
|
14
|
+
].filter(Boolean).join(" "),
|
|
15
|
+
...r
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
l as default
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=Input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input.js","sources":["../../../../src/components/library/ui/Input.jsx"],"sourcesContent":["import React from \"react\";\n\nexport default function UIInput({ style = undefined, className = \"\", ...rest }) {\n return (\n <input\n style={style}\n className={[\n \"h-10 w-full rounded-lg border border-slate-200 bg-white px-3 text-sm text-slate-900 shadow-sm\",\n \"placeholder:text-slate-400\",\n \"focus:outline-none focus:ring-2 focus:ring-brand-500 focus:ring-offset-2 dark:focus:ring-offset-slate-950\",\n \"dark:border-slate-800 dark:bg-slate-900 dark:text-slate-50 dark:placeholder:text-slate-500\",\n className\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n />\n );\n}\n\n\n"],"names":["UIInput","style","className","rest","jsx"],"mappings":";;AAEA,SAAwBA,EAAQ,EAAE,OAAAC,IAAQ,QAAW,WAAAC,IAAY,IAAI,GAAGC,KAAQ;AAC9E,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAAH;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACV,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV;"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsxs as i, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const e = {
|
|
4
|
+
xs: "h-3 w-3",
|
|
5
|
+
sm: "h-4 w-4",
|
|
6
|
+
md: "h-5 w-5",
|
|
7
|
+
lg: "h-6 w-6",
|
|
8
|
+
xl: "h-8 w-8"
|
|
9
|
+
}, r = {
|
|
10
|
+
brand: "text-brand-500",
|
|
11
|
+
white: "text-white",
|
|
12
|
+
muted: "text-slate-400 dark:text-slate-500",
|
|
13
|
+
current: "text-current"
|
|
14
|
+
};
|
|
15
|
+
function m({
|
|
16
|
+
size: a = "md",
|
|
17
|
+
tone: n = "brand",
|
|
18
|
+
label: s = "Loading",
|
|
19
|
+
className: l = "",
|
|
20
|
+
...o
|
|
21
|
+
}) {
|
|
22
|
+
return /* @__PURE__ */ i(
|
|
23
|
+
"svg",
|
|
24
|
+
{
|
|
25
|
+
...o,
|
|
26
|
+
className: [
|
|
27
|
+
"animate-spin",
|
|
28
|
+
e[a] ?? e.md,
|
|
29
|
+
r[n] ?? r.brand,
|
|
30
|
+
l
|
|
31
|
+
].filter(Boolean).join(" "),
|
|
32
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
33
|
+
fill: "none",
|
|
34
|
+
viewBox: "0 0 24 24",
|
|
35
|
+
role: "status",
|
|
36
|
+
"aria-label": s,
|
|
37
|
+
children: [
|
|
38
|
+
/* @__PURE__ */ t(
|
|
39
|
+
"circle",
|
|
40
|
+
{
|
|
41
|
+
className: "opacity-25",
|
|
42
|
+
cx: "12",
|
|
43
|
+
cy: "12",
|
|
44
|
+
r: "10",
|
|
45
|
+
stroke: "currentColor",
|
|
46
|
+
strokeWidth: "4"
|
|
47
|
+
}
|
|
48
|
+
),
|
|
49
|
+
/* @__PURE__ */ t(
|
|
50
|
+
"path",
|
|
51
|
+
{
|
|
52
|
+
className: "opacity-75",
|
|
53
|
+
fill: "currentColor",
|
|
54
|
+
d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
|
|
55
|
+
}
|
|
56
|
+
)
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
export {
|
|
62
|
+
m as default
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=Spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.js","sources":["../../../../src/components/library/ui/Spinner.jsx"],"sourcesContent":["import React from \"react\";\n\nconst SIZE_CLASSES = {\n xs: \"h-3 w-3\",\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n xl: \"h-8 w-8\",\n};\n\nconst TONE_CLASSES = {\n brand: \"text-brand-500\",\n white: \"text-white\",\n muted: \"text-slate-400 dark:text-slate-500\",\n current: \"text-current\",\n};\n\n/**\n * Animated spinner.\n *\n * @param {\"xs\"|\"sm\"|\"md\"|\"lg\"|\"xl\"} size\n * @param {\"brand\"|\"white\"|\"muted\"|\"current\"} tone\n * @param {string} label — screen-reader label\n */\nexport default function Spinner({\n size = \"md\",\n tone = \"brand\",\n label = \"Loading\",\n className = \"\",\n ...rest\n}) {\n return (\n <svg\n {...rest}\n className={[\n \"animate-spin\",\n SIZE_CLASSES[size] ?? SIZE_CLASSES.md,\n TONE_CLASSES[tone] ?? TONE_CLASSES.brand,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n role=\"status\"\n aria-label={label}\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n );\n}\n"],"names":["SIZE_CLASSES","TONE_CLASSES","Spinner","size","tone","label","className","rest","jsxs","jsx"],"mappings":";;AAEA,MAAMA,IAAe;AAAA,EACnB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAe;AAAA,EACnB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AACX;AASA,SAAwBC,EAAQ;AAAA,EAC9B,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,GAAG;AACD,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGD;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACAP,EAAaG,CAAI,KAAKH,EAAa;AAAA,QACnCC,EAAaG,CAAI,KAAKH,EAAa;AAAA,QACnCK;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACX,OAAM;AAAA,MACN,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,cAAYD;AAAA,MAEZ,UAAA;AAAA,QAAA,gBAAAI;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAG;AAAA,YACH,IAAG;AAAA,YACH,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,UAAA;AAAA,QAAA;AAAA,QAEd,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MACJ;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as d } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const t = {
|
|
4
|
+
xs: "text-xs",
|
|
5
|
+
sm: "text-sm",
|
|
6
|
+
md: "text-base",
|
|
7
|
+
lg: "text-lg",
|
|
8
|
+
xl: "text-xl",
|
|
9
|
+
xxl: "text-2xl"
|
|
10
|
+
}, e = {
|
|
11
|
+
regular: "font-normal",
|
|
12
|
+
medium: "font-medium",
|
|
13
|
+
bold: "font-semibold"
|
|
14
|
+
};
|
|
15
|
+
function u({
|
|
16
|
+
as: l = "span",
|
|
17
|
+
size: x = "md",
|
|
18
|
+
weight: a = "regular",
|
|
19
|
+
muted: s = !1,
|
|
20
|
+
style: o,
|
|
21
|
+
className: r = "",
|
|
22
|
+
children: m,
|
|
23
|
+
...n
|
|
24
|
+
}) {
|
|
25
|
+
return /* @__PURE__ */ d(
|
|
26
|
+
l,
|
|
27
|
+
{
|
|
28
|
+
style: o,
|
|
29
|
+
className: [
|
|
30
|
+
t[x] ?? t.md,
|
|
31
|
+
e[a] ?? e.regular,
|
|
32
|
+
s ? "text-slate-600 dark:text-slate-300" : "text-slate-900 dark:text-slate-50",
|
|
33
|
+
r
|
|
34
|
+
].filter(Boolean).join(" "),
|
|
35
|
+
...n,
|
|
36
|
+
children: m
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
u as default
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=Text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Text.js","sources":["../../../../src/components/library/ui/Text.jsx"],"sourcesContent":["import React from \"react\";\n\nconst SIZE_CLASSES = {\n xs: \"text-xs\",\n sm: \"text-sm\",\n md: \"text-base\",\n lg: \"text-lg\",\n xl: \"text-xl\",\n xxl: \"text-2xl\"\n};\n\nconst WEIGHT_CLASSES = {\n regular: \"font-normal\",\n medium: \"font-medium\",\n bold: \"font-semibold\"\n};\n\nexport default function UIText({\n as: Comp = \"span\",\n size = \"md\",\n weight = \"regular\",\n muted = false,\n style,\n className = \"\",\n children,\n ...rest\n}) {\n return (\n <Comp\n style={style}\n className={[\n SIZE_CLASSES[size] ?? SIZE_CLASSES.md,\n WEIGHT_CLASSES[weight] ?? WEIGHT_CLASSES.regular,\n muted ? \"text-slate-600 dark:text-slate-300\" : \"text-slate-900 dark:text-slate-50\",\n className\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n {children}\n </Comp>\n );\n}\n\n\n"],"names":["SIZE_CLASSES","WEIGHT_CLASSES","UIText","Comp","size","weight","muted","style","className","children","rest","jsx"],"mappings":";;AAEA,MAAMA,IAAe;AAAA,EACnB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AACP,GAEMC,IAAiB;AAAA,EACrB,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AACR;AAEA,SAAwBC,EAAO;AAAA,EAC7B,IAAIC,IAAO;AAAA,EACX,MAAAC,IAAO;AAAA,EACP,QAAAC,IAAS;AAAA,EACT,OAAAC,IAAQ;AAAA,EACR,OAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,GAAGC;AACL,GAAG;AACD,SACE,gBAAAC;AAAA,IAACR;AAAA,IAAA;AAAA,MACC,OAAAI;AAAA,MACA,WAAW;AAAA,QACTP,EAAaI,CAAI,KAAKJ,EAAa;AAAA,QACnCC,EAAeI,CAAM,KAAKJ,EAAe;AAAA,QACzCK,IAAQ,uCAAuC;AAAA,QAC/CE;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACV,GAAGE;AAAA,MAEH,UAAAD;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsxs as i, jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
import { useThemeMode as l } from "../theme/AppThemeProvider.js";
|
|
4
|
+
function f({ label: r = "Dark mode", style: t, className: a = "" }) {
|
|
5
|
+
const { mode: n, toggle: o } = l(), e = n === "dark";
|
|
6
|
+
return /* @__PURE__ */ i(
|
|
7
|
+
"button",
|
|
8
|
+
{
|
|
9
|
+
type: "button",
|
|
10
|
+
onClick: o,
|
|
11
|
+
style: t,
|
|
12
|
+
className: [
|
|
13
|
+
"inline-flex items-center gap-2 rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm font-medium text-slate-900 shadow-sm",
|
|
14
|
+
"hover:bg-slate-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-950",
|
|
15
|
+
"dark:border-slate-800 dark:bg-slate-900 dark:text-slate-50 dark:hover:bg-slate-800",
|
|
16
|
+
a
|
|
17
|
+
].filter(Boolean).join(" "),
|
|
18
|
+
"aria-pressed": e,
|
|
19
|
+
"aria-label": r,
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ s(
|
|
22
|
+
"span",
|
|
23
|
+
{
|
|
24
|
+
className: [
|
|
25
|
+
"inline-flex h-5 w-9 items-center rounded-full border transition",
|
|
26
|
+
e ? "border-brand-400 bg-brand-500" : "border-slate-300 bg-slate-200"
|
|
27
|
+
].join(" "),
|
|
28
|
+
children: /* @__PURE__ */ s(
|
|
29
|
+
"span",
|
|
30
|
+
{
|
|
31
|
+
className: [
|
|
32
|
+
"h-4 w-4 rounded-full bg-white shadow-sm transition",
|
|
33
|
+
e ? "translate-x-4" : "translate-x-1"
|
|
34
|
+
].join(" ")
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
),
|
|
39
|
+
/* @__PURE__ */ s("span", { className: "hidden sm:inline", children: r })
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
f as default
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=Toggle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toggle.js","sources":["../../../../src/components/library/ui/Toggle.jsx"],"sourcesContent":["import React from \"react\";\nimport { useThemeMode } from \"../theme/AppThemeProvider\";\n\nexport default function UIToggle({ label = \"Dark mode\", style, className = \"\" }) {\n const { mode, toggle } = useThemeMode();\n const isDark = mode === \"dark\";\n\n return (\n <button\n type=\"button\"\n onClick={toggle}\n style={style}\n className={[\n \"inline-flex items-center gap-2 rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm font-medium text-slate-900 shadow-sm\",\n \"hover:bg-slate-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-950\",\n \"dark:border-slate-800 dark:bg-slate-900 dark:text-slate-50 dark:hover:bg-slate-800\",\n className\n ]\n .filter(Boolean)\n .join(\" \")}\n aria-pressed={isDark}\n aria-label={label}\n >\n <span\n className={[\n \"inline-flex h-5 w-9 items-center rounded-full border transition\",\n isDark ? \"border-brand-400 bg-brand-500\" : \"border-slate-300 bg-slate-200\"\n ].join(\" \")}\n >\n <span\n className={[\n \"h-4 w-4 rounded-full bg-white shadow-sm transition\",\n isDark ? \"translate-x-4\" : \"translate-x-1\"\n ].join(\" \")}\n />\n </span>\n <span className=\"hidden sm:inline\">{label}</span>\n </button>\n );\n}\n\n\n"],"names":["UIToggle","label","style","className","mode","toggle","useThemeMode","isDark","jsxs","jsx"],"mappings":";;;AAGA,SAAwBA,EAAS,EAAE,OAAAC,IAAQ,aAAa,OAAAC,GAAO,WAAAC,IAAY,MAAM;AAC/E,QAAM,EAAE,MAAAC,GAAM,QAAAC,EAAA,IAAWC,EAAA,GACnBC,IAASH,MAAS;AAExB,SACE,gBAAAI;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAASH;AAAA,MACT,OAAAH;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACX,gBAAcI;AAAA,MACd,cAAYN;AAAA,MAEZ,UAAA;AAAA,QAAA,gBAAAQ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACAF,IAAS,kCAAkC;AAAA,YAAA,EAC3C,KAAK,GAAG;AAAA,YAEV,UAAA,gBAAAE;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACAF,IAAS,kBAAkB;AAAA,gBAAA,EAC3B,KAAK,GAAG;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA;AAAA,QAEF,gBAAAE,EAAC,QAAA,EAAK,WAAU,oBAAoB,UAAAR,EAAA,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhD;"}
|