@snksergio/design-system 0.19.1 → 0.30.2
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/README.md +39 -12
- package/dist-lib/chunks/{app-shell-Cy9be0Zx.mjs → app-shell-78w0pYdP.mjs} +849 -79
- package/dist-lib/chunks/app-shell-78w0pYdP.mjs.map +1 -0
- package/dist-lib/chunks/{app-shell-CPx9X7zP.cjs → app-shell-Cyh8AUJT.cjs} +947 -176
- package/dist-lib/chunks/app-shell-Cyh8AUJT.cjs.map +1 -0
- package/dist-lib/chunks/{clientes-showcase-mocks-ayU1SDOA.mjs → clientes-showcase-mocks-CwWGCCmf.mjs} +1 -27
- package/dist-lib/chunks/clientes-showcase-mocks-CwWGCCmf.mjs.map +1 -0
- package/dist-lib/chunks/{clientes-showcase-mocks-DygUqkkh.cjs → clientes-showcase-mocks-CwhluBTT.cjs} +1 -44
- package/dist-lib/chunks/clientes-showcase-mocks-CwhluBTT.cjs.map +1 -0
- package/dist-lib/chunks/{input-BWevV7up.cjs → input-BjUSWce3.cjs} +24 -4
- package/dist-lib/chunks/input-BjUSWce3.cjs.map +1 -0
- package/dist-lib/chunks/{input-C9eKSSEb.mjs → input-DCDU4i4S.mjs} +23 -3
- package/dist-lib/chunks/input-DCDU4i4S.mjs.map +1 -0
- package/dist-lib/chunks/kpi-delta-C_3V6uG6.cjs +148 -0
- package/dist-lib/chunks/kpi-delta-C_3V6uG6.cjs.map +1 -0
- package/dist-lib/chunks/kpi-delta-DpYuDY4h.mjs +149 -0
- package/dist-lib/chunks/kpi-delta-DpYuDY4h.mjs.map +1 -0
- package/dist-lib/chunks/{page-header-CQbTGWQ8.mjs → page-header-B6XJyIMz.mjs} +2 -2
- package/dist-lib/chunks/{page-header-CQbTGWQ8.mjs.map → page-header-B6XJyIMz.mjs.map} +1 -1
- package/dist-lib/chunks/{page-header-BZ-WrxV2.cjs → page-header-D0rpU0yn.cjs} +4 -4
- package/dist-lib/chunks/{page-header-BZ-WrxV2.cjs.map → page-header-D0rpU0yn.cjs.map} +1 -1
- package/dist-lib/chunks/{panel-pOXMw6a-.cjs → panel-B_SSIEDs.cjs} +1876 -1067
- package/dist-lib/chunks/panel-B_SSIEDs.cjs.map +1 -0
- package/dist-lib/chunks/{panel-BCUixETK.mjs → panel-CEkyoGiO.mjs} +1639 -831
- package/dist-lib/chunks/panel-CEkyoGiO.mjs.map +1 -0
- package/dist-lib/index.cjs +3819 -230
- package/dist-lib/index.cjs.map +1 -1
- package/dist-lib/index.mjs +3898 -313
- package/dist-lib/index.mjs.map +1 -1
- package/dist-lib/preview/chat.cjs +41 -42
- package/dist-lib/preview/chat.cjs.map +1 -1
- package/dist-lib/preview/chat.mjs +2 -3
- package/dist-lib/preview/chat.mjs.map +1 -1
- package/dist-lib/preview/clientes.cjs +22 -24
- package/dist-lib/preview/clientes.cjs.map +1 -1
- package/dist-lib/preview/clientes.mjs +5 -7
- package/dist-lib/preview/clientes.mjs.map +1 -1
- package/dist-lib/preview/dashboard.cjs +232 -28
- package/dist-lib/preview/dashboard.cjs.map +1 -1
- package/dist-lib/preview/dashboard.mjs +215 -11
- package/dist-lib/preview/dashboard.mjs.map +1 -1
- package/dist-lib/preview/mocks.cjs +1 -1
- package/dist-lib/preview/mocks.mjs +1 -1
- package/dist-lib/src/components/index.d.ts +14 -0
- package/dist-lib/src/components/index.d.ts.map +1 -1
- package/dist-lib/src/components/shadcn/command.d.ts.map +1 -1
- package/dist-lib/src/components/shadcn/input.d.ts.map +1 -1
- package/dist-lib/src/components/shadcn/tabs.d.ts +11 -6
- package/dist-lib/src/components/shadcn/tabs.d.ts.map +1 -1
- package/dist-lib/src/components/shadcn/tooltip.d.ts +25 -7
- package/dist-lib/src/components/shadcn/tooltip.d.ts.map +1 -1
- package/dist-lib/src/components/ui/ChoroplethMap/choropleth-map.d.ts +13 -0
- package/dist-lib/src/components/ui/ChoroplethMap/choropleth-map.d.ts.map +1 -0
- package/dist-lib/src/components/ui/ChoroplethMap/choropleth-map.styles.d.ts +95 -0
- package/dist-lib/src/components/ui/ChoroplethMap/choropleth-map.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/ChoroplethMap/choropleth-map.types.d.ts +81 -0
- package/dist-lib/src/components/ui/ChoroplethMap/choropleth-map.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/ChoroplethMap/index.d.ts +3 -0
- package/dist-lib/src/components/ui/ChoroplethMap/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/ColorPicker/color-picker.d.ts +16 -0
- package/dist-lib/src/components/ui/ColorPicker/color-picker.d.ts.map +1 -0
- package/dist-lib/src/components/ui/ColorPicker/color-picker.presets.d.ts +13 -0
- package/dist-lib/src/components/ui/ColorPicker/color-picker.presets.d.ts.map +1 -0
- package/dist-lib/src/components/ui/ColorPicker/color-picker.styles.d.ts +135 -0
- package/dist-lib/src/components/ui/ColorPicker/color-picker.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/ColorPicker/color-picker.types.d.ts +35 -0
- package/dist-lib/src/components/ui/ColorPicker/color-picker.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/ColorPicker/index.d.ts +6 -0
- package/dist-lib/src/components/ui/ColorPicker/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/ConversationListItem/conversation-list-item.d.ts +23 -0
- package/dist-lib/src/components/ui/ConversationListItem/conversation-list-item.d.ts.map +1 -0
- package/dist-lib/src/components/ui/ConversationListItem/conversation-list-item.styles.d.ts +173 -0
- package/dist-lib/src/components/ui/ConversationListItem/conversation-list-item.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/ConversationListItem/conversation-list-item.types.d.ts +59 -0
- package/dist-lib/src/components/ui/ConversationListItem/conversation-list-item.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/ConversationListItem/index.d.ts +5 -0
- package/dist-lib/src/components/ui/ConversationListItem/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/DataTable/data-table.d.ts.map +1 -1
- package/dist-lib/src/components/ui/DataTable/data-table.types.d.ts +14 -1
- package/dist-lib/src/components/ui/DataTable/data-table.types.d.ts.map +1 -1
- package/dist-lib/src/components/ui/DataTable/hooks/use-column-auto-width.d.ts +9 -0
- package/dist-lib/src/components/ui/DataTable/hooks/use-column-auto-width.d.ts.map +1 -1
- package/dist-lib/src/components/ui/DataTable/hooks/use-data-table-controller.d.ts.map +1 -1
- package/dist-lib/src/components/ui/DataTable/services/saved-views.types.d.ts +9 -0
- package/dist-lib/src/components/ui/DataTable/services/saved-views.types.d.ts.map +1 -1
- package/dist-lib/src/components/ui/DataTable/utils/calculate-column-widths.d.ts +16 -0
- package/dist-lib/src/components/ui/DataTable/utils/calculate-column-widths.d.ts.map +1 -1
- package/dist-lib/src/components/ui/DatePicker/datepicker.d.ts +31 -8
- package/dist-lib/src/components/ui/DatePicker/datepicker.d.ts.map +1 -1
- package/dist-lib/src/components/ui/DatePicker/index.d.ts +1 -1
- package/dist-lib/src/components/ui/DatePicker/index.d.ts.map +1 -1
- package/dist-lib/src/components/ui/DateSeparatorChip/date-separator-chip.d.ts +18 -0
- package/dist-lib/src/components/ui/DateSeparatorChip/date-separator-chip.d.ts.map +1 -0
- package/dist-lib/src/components/ui/DateSeparatorChip/date-separator-chip.styles.d.ts +63 -0
- package/dist-lib/src/components/ui/DateSeparatorChip/date-separator-chip.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/DateSeparatorChip/date-separator-chip.types.d.ts +21 -0
- package/dist-lib/src/components/ui/DateSeparatorChip/date-separator-chip.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/DateSeparatorChip/index.d.ts +5 -0
- package/dist-lib/src/components/ui/DateSeparatorChip/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/EmptyState/empty-state.d.ts +12 -0
- package/dist-lib/src/components/ui/EmptyState/empty-state.d.ts.map +1 -0
- package/dist-lib/src/components/ui/EmptyState/empty-state.styles.d.ts +83 -0
- package/dist-lib/src/components/ui/EmptyState/empty-state.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/EmptyState/empty-state.types.d.ts +43 -0
- package/dist-lib/src/components/ui/EmptyState/empty-state.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/EmptyState/index.d.ts +5 -0
- package/dist-lib/src/components/ui/EmptyState/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/FileUploadField/file-upload-field.d.ts +15 -0
- package/dist-lib/src/components/ui/FileUploadField/file-upload-field.d.ts.map +1 -0
- package/dist-lib/src/components/ui/FileUploadField/file-upload-field.styles.d.ts +66 -0
- package/dist-lib/src/components/ui/FileUploadField/file-upload-field.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/FileUploadField/file-upload-field.types.d.ts +41 -0
- package/dist-lib/src/components/ui/FileUploadField/file-upload-field.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/FileUploadField/index.d.ts +3 -0
- package/dist-lib/src/components/ui/FileUploadField/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Kpi/kpi-delta.d.ts +4 -1
- package/dist-lib/src/components/ui/Kpi/kpi-delta.d.ts.map +1 -1
- package/dist-lib/src/components/ui/Kpi/kpi.d.ts +1 -1
- package/dist-lib/src/components/ui/Kpi/kpi.d.ts.map +1 -1
- package/dist-lib/src/components/ui/Kpi/kpi.styles.d.ts +42 -0
- package/dist-lib/src/components/ui/Kpi/kpi.styles.d.ts.map +1 -1
- package/dist-lib/src/components/ui/Kpi/kpi.types.d.ts +13 -1
- package/dist-lib/src/components/ui/Kpi/kpi.types.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MarkdownText/index.d.ts +5 -0
- package/dist-lib/src/components/ui/MarkdownText/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MarkdownText/markdown-text.d.ts +14 -0
- package/dist-lib/src/components/ui/MarkdownText/markdown-text.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MarkdownText/markdown-text.styles.d.ts +72 -0
- package/dist-lib/src/components/ui/MarkdownText/markdown-text.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MarkdownText/markdown-text.types.d.ts +26 -0
- package/dist-lib/src/components/ui/MarkdownText/markdown-text.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MenuSidebar/sidebar-section.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MenuSidebar/sidebar.styles.d.ts +1 -0
- package/dist-lib/src/components/ui/MenuSidebar/sidebar.styles.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MenuSidebar/sidebar.types.d.ts +7 -1
- package/dist-lib/src/components/ui/MenuSidebar/sidebar.types.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MessageAck/index.d.ts +5 -0
- package/dist-lib/src/components/ui/MessageAck/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageAck/message-ack.d.ts +18 -0
- package/dist-lib/src/components/ui/MessageAck/message-ack.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageAck/message-ack.styles.d.ts +61 -0
- package/dist-lib/src/components/ui/MessageAck/message-ack.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageAck/message-ack.types.d.ts +14 -0
- package/dist-lib/src/components/ui/MessageAck/message-ack.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageBubble/index.d.ts +5 -0
- package/dist-lib/src/components/ui/MessageBubble/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageBubble/message-bubble.d.ts +20 -0
- package/dist-lib/src/components/ui/MessageBubble/message-bubble.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageBubble/message-bubble.styles.d.ts +180 -0
- package/dist-lib/src/components/ui/MessageBubble/message-bubble.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageBubble/message-bubble.types.d.ts +87 -0
- package/dist-lib/src/components/ui/MessageBubble/message-bubble.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageComposer/index.d.ts +5 -0
- package/dist-lib/src/components/ui/MessageComposer/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageComposer/message-composer.d.ts +18 -0
- package/dist-lib/src/components/ui/MessageComposer/message-composer.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageComposer/message-composer.styles.d.ts +113 -0
- package/dist-lib/src/components/ui/MessageComposer/message-composer.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageComposer/message-composer.types.d.ts +49 -0
- package/dist-lib/src/components/ui/MessageComposer/message-composer.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageVariablesPicker/index.d.ts +6 -0
- package/dist-lib/src/components/ui/MessageVariablesPicker/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageVariablesPicker/message-variables-picker.d.ts +12 -0
- package/dist-lib/src/components/ui/MessageVariablesPicker/message-variables-picker.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageVariablesPicker/message-variables-picker.styles.d.ts +57 -0
- package/dist-lib/src/components/ui/MessageVariablesPicker/message-variables-picker.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageVariablesPicker/message-variables-picker.types.d.ts +36 -0
- package/dist-lib/src/components/ui/MessageVariablesPicker/message-variables-picker.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Modal/modal.d.ts +3 -1
- package/dist-lib/src/components/ui/Modal/modal.d.ts.map +1 -1
- package/dist-lib/src/components/ui/Modal/modal.styles.d.ts +7 -1
- package/dist-lib/src/components/ui/Modal/modal.styles.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MonthYearPicker/index.d.ts +3 -0
- package/dist-lib/src/components/ui/MonthYearPicker/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MonthYearPicker/month-year-picker.d.ts +11 -0
- package/dist-lib/src/components/ui/MonthYearPicker/month-year-picker.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MonthYearPicker/month-year-picker.styles.d.ts +113 -0
- package/dist-lib/src/components/ui/MonthYearPicker/month-year-picker.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MonthYearPicker/month-year-picker.types.d.ts +34 -0
- package/dist-lib/src/components/ui/MonthYearPicker/month-year-picker.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/SingleMenuSidebar/single-menu-sidebar.styles.d.ts +1 -1
- package/dist-lib/src/components/ui/Spinner/index.d.ts +3 -0
- package/dist-lib/src/components/ui/Spinner/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Spinner/spinner.d.ts +11 -0
- package/dist-lib/src/components/ui/Spinner/spinner.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Spinner/spinner.styles.d.ts +55 -0
- package/dist-lib/src/components/ui/Spinner/spinner.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Spinner/spinner.types.d.ts +12 -0
- package/dist-lib/src/components/ui/Spinner/spinner.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/TableToolbar/parts/table-toolbar-views.d.ts +7 -1
- package/dist-lib/src/components/ui/TableToolbar/parts/table-toolbar-views.d.ts.map +1 -1
- package/dist-lib/src/components/ui/Toast/toast.d.ts +44 -0
- package/dist-lib/src/components/ui/Toast/toast.d.ts.map +1 -0
- package/dist-lib/src/hooks/useBrand.d.ts +31 -0
- package/dist-lib/src/hooks/useBrand.d.ts.map +1 -0
- package/dist-lib/src/preview/pages/ChatV2/components/QueueColumn/queue-column.styles.d.ts +3 -3
- package/dist-lib/src/preview/pages/ClientesShowcase/clientes-showcase-mocks.d.ts +1 -1
- package/dist-lib/src/preview/pages/ClientesShowcase/clientes-showcase-mocks.d.ts.map +1 -1
- package/dist-lib/src/preview/pages/ClientesShowcase/clientes-showcase.types.d.ts +1 -1
- package/dist-lib/src/preview/pages/ClientesShowcase/clientes-showcase.types.d.ts.map +1 -1
- package/dist-lib/src/preview/pages/ClientesShowcase/components/DetailDrawer/detail-drawer.types.d.ts +1 -1
- package/dist-lib/src/preview/pages/ClientesShowcase/components/DetailDrawer/detail-drawer.types.d.ts.map +1 -1
- package/dist-lib/src/preview/pages/DashboardShowcase.d.ts.map +1 -1
- package/dist-lib/src/preview/pages/_table-data.d.ts +51 -0
- package/dist-lib/src/preview/pages/_table-data.d.ts.map +1 -0
- package/dist-lib/src/utils/tv.d.ts.map +1 -1
- package/dist-lib/theme.css +32 -0
- package/dist-lib/tokens/brands/blue/primitives/color-palette.d.ts +266 -0
- package/dist-lib/tokens/brands/blue/primitives/color-palette.d.ts.map +1 -0
- package/dist-lib/tokens/brands/blue/semantic/color-dark.d.ts +200 -0
- package/dist-lib/tokens/brands/blue/semantic/color-dark.d.ts.map +1 -0
- package/dist-lib/tokens/brands/blue/semantic/color-light.d.ts +202 -0
- package/dist-lib/tokens/brands/blue/semantic/color-light.d.ts.map +1 -0
- package/dist-lib/tokens/brands/default/semantic/typography.d.ts +4 -2
- package/dist-lib/tokens/brands/default/semantic/typography.d.ts.map +1 -1
- package/dist-lib/tokens/brands/green/primitives/color-palette.d.ts +267 -0
- package/dist-lib/tokens/brands/green/primitives/color-palette.d.ts.map +1 -0
- package/dist-lib/tokens/brands/green/semantic/color-dark.d.ts +200 -0
- package/dist-lib/tokens/brands/green/semantic/color-dark.d.ts.map +1 -0
- package/dist-lib/tokens/brands/green/semantic/color-light.d.ts +201 -0
- package/dist-lib/tokens/brands/green/semantic/color-light.d.ts.map +1 -0
- package/dist-lib/tokens/brands/pay/primitives/color-palette.d.ts +146 -0
- package/dist-lib/tokens/brands/pay/primitives/color-palette.d.ts.map +1 -0
- package/dist-lib/tokens/brands/pay/semantic/color-dark.d.ts +201 -0
- package/dist-lib/tokens/brands/pay/semantic/color-dark.d.ts.map +1 -0
- package/dist-lib/tokens/brands/pay/semantic/color-light.d.ts +199 -0
- package/dist-lib/tokens/brands/pay/semantic/color-light.d.ts.map +1 -0
- package/dist-lib/tokens.cjs +35 -0
- package/dist-lib/tokens.cjs.map +1 -1
- package/dist-lib/tokens.mjs +35 -0
- package/dist-lib/tokens.mjs.map +1 -1
- package/package.json +21 -7
- package/dist-lib/chunks/app-shell-CPx9X7zP.cjs.map +0 -1
- package/dist-lib/chunks/app-shell-Cy9be0Zx.mjs.map +0 -1
- package/dist-lib/chunks/badge-DBdk74KN.mjs +0 -840
- package/dist-lib/chunks/badge-DBdk74KN.mjs.map +0 -1
- package/dist-lib/chunks/badge-gU2wtxrn.cjs +0 -856
- package/dist-lib/chunks/badge-gU2wtxrn.cjs.map +0 -1
- package/dist-lib/chunks/chip-group-2-f_Yo7Y.cjs +0 -763
- package/dist-lib/chunks/chip-group-2-f_Yo7Y.cjs.map +0 -1
- package/dist-lib/chunks/chip-group-_e-yh1Zq.mjs +0 -747
- package/dist-lib/chunks/chip-group-_e-yh1Zq.mjs.map +0 -1
- package/dist-lib/chunks/clientes-showcase-mocks-DygUqkkh.cjs.map +0 -1
- package/dist-lib/chunks/clientes-showcase-mocks-ayU1SDOA.mjs.map +0 -1
- package/dist-lib/chunks/input-BWevV7up.cjs.map +0 -1
- package/dist-lib/chunks/input-C9eKSSEb.mjs.map +0 -1
- package/dist-lib/chunks/panel-BCUixETK.mjs.map +0 -1
- package/dist-lib/chunks/panel-pOXMw6a-.cjs.map +0 -1
|
@@ -1,29 +1,3 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import * as React from "react";
|
|
3
|
-
import { createContext } from "react";
|
|
4
|
-
import "lucide-react";
|
|
5
|
-
import "./badge-DBdk74KN.mjs";
|
|
6
|
-
import { c as cn } from "./chip-group-_e-yh1Zq.mjs";
|
|
7
|
-
import * as SeparatorPrimitive from "@radix-ui/react-separator";
|
|
8
|
-
const Separator = React.forwardRef(
|
|
9
|
-
({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
10
|
-
SeparatorPrimitive.Root,
|
|
11
|
-
{
|
|
12
|
-
ref,
|
|
13
|
-
decorative,
|
|
14
|
-
orientation,
|
|
15
|
-
className: cn(
|
|
16
|
-
"shrink-0 bg-border",
|
|
17
|
-
orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
|
|
18
|
-
className
|
|
19
|
-
),
|
|
20
|
-
...props
|
|
21
|
-
}
|
|
22
|
-
)
|
|
23
|
-
);
|
|
24
|
-
Separator.displayName = SeparatorPrimitive.Root.displayName;
|
|
25
|
-
createContext({ onNavigate: () => {
|
|
26
|
-
} });
|
|
27
1
|
const STATUSES = {
|
|
28
2
|
active: { label: "Ativo", color: "var(--color-fg-success)" },
|
|
29
3
|
pending: { label: "Pendente", color: "var(--color-fg-warning)" },
|
|
@@ -166,4 +140,4 @@ export {
|
|
|
166
140
|
AGENTS_LOOKUP as j,
|
|
167
141
|
AGENT_OPTIONS as k
|
|
168
142
|
};
|
|
169
|
-
//# sourceMappingURL=clientes-showcase-mocks-
|
|
143
|
+
//# sourceMappingURL=clientes-showcase-mocks-CwWGCCmf.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientes-showcase-mocks-CwWGCCmf.mjs","sources":["../../src/preview/pages/_table-data.ts","../../src/preview/pages/ClientesShowcase/clientes-showcase-mocks.ts"],"sourcesContent":["/**\r\n * Fixtures compartilhadas da tabela de clientes (status, categorias, agentes e o\r\n * shape da linha).\r\n *\r\n * ## Por que isto existe fora do `TableDoc.tsx`\r\n *\r\n * Estas fixtures nasceram dentro do `TableDoc.tsx`, e o `ClientesShowcase` passou a\r\n * importá-las de lá. Só que o build da lib npm **exclui** `src/preview/pages/*Doc.tsx`\r\n * da emissão de tipos (`vite.lib.config.ts`) enquanto **inclui** o `ClientesShowcase` —\r\n * então os `.d.ts` do showcase referenciavam um arquivo que não entrava no pacote, e\r\n * todo `import` desses tipos virava `any` pra quem consome via npm. É a **L-017**, e\r\n * foi pega pelo `npm run lib:verify`.\r\n *\r\n * Não dá pra \"só incluir o TableDoc\": ele é uma Doc page de ~900 linhas cujo lugar não é\r\n * o pacote. A fonte única correta é este módulo — que é exatamente o que o canal registry\r\n * já fazia por conta própria (`src/examples/clientes/_table-data.ts`, L-034). Agora os\r\n * dois canais compartilham a mesma decisão em vez de uma reescrita paralela.\r\n *\r\n * O `TableDoc.tsx` reexporta tudo daqui, então nada que importava dele quebra.\r\n */\r\n\r\nexport const STATUSES: Record<string, { label: string; color: string }> = {\r\n active: { label: \"Ativo\", color: \"var(--color-fg-success)\" },\r\n pending: { label: \"Pendente\", color: \"var(--color-fg-warning)\" },\r\n paused: { label: \"Pausado\", color: \"var(--color-fg-info)\" },\r\n inactive: { label: \"Inativo\", color: \"var(--color-fg-muted)\" },\r\n};\r\n\r\nexport type CategoryKind = \"warning\" | \"info\" | \"success\" | \"neutral\";\r\n\r\nexport const CATEGORIES: Record<string, { label: string; kind: CategoryKind }> = {\r\n royal: { label: \"Royal\", kind: \"warning\" },\r\n licenciado: { label: \"Licenciado\", kind: \"info\" },\r\n lead: { label: \"Lead\", kind: \"success\" },\r\n};\r\n\r\nexport const AGENTS: Record<string, { name: string; initials: string; color: string }> = {\r\n you: { name: \"Voce\", initials: \"VC\", color: \"#0a3a2e\" },\r\n aline: { name: \"Aline Castro\", initials: \"AC\", color: \"#f59e0b\" },\r\n carlos: { name: \"Carlos Souza\", initials: \"CS\", color: \"#8754ec\" },\r\n maria: { name: \"Maria Lima\", initials: \"ML\", color: \"#ef4444\" },\r\n};\r\n\r\nexport type ClientRow = {\r\n id: string;\r\n name: string;\r\n initials: string;\r\n avatarColor: string;\r\n email: string;\r\n phone: string;\r\n statusId: keyof typeof STATUSES;\r\n categoryId: keyof typeof CATEGORIES;\r\n location: string;\r\n value: number;\r\n agentId: keyof typeof AGENTS;\r\n createdAt: number;\r\n lastContact: number;\r\n};\r\n\r\n/* ── Dataset base (10 clientes; o showcase deriva 87 a partir daqui) ── */\r\n\r\nconst BASE_DATE = new Date(\"2026-04-15T12:00:00Z\").getTime();\r\nconst DAY_MS = 86400000;\r\n\r\nexport const CLIENTS_MOCK: ClientRow[] = [\r\n { id: \"CLI-2401\", name: \"Maria Silva\", initials: \"MS\", avatarColor: \"#f59e0b\", email: \"maria.silva@example.com\", phone: \"+55 11 91234-5678\", statusId: \"active\", categoryId: \"royal\", location: \"São Paulo, SP\", value: 4800, agentId: \"you\", createdAt: BASE_DATE - 65 * DAY_MS, lastContact: BASE_DATE - 2 * DAY_MS },\r\n { id: \"CLI-2402\", name: \"João Santos\", initials: \"JS\", avatarColor: \"#0a3a2e\", email: \"joao.santos@example.com\", phone: \"+55 11 92345-6789\", statusId: \"pending\", categoryId: \"licenciado\", location: \"Rio de Janeiro, RJ\", value: 12300, agentId: \"aline\", createdAt: BASE_DATE - 58 * DAY_MS, lastContact: BASE_DATE - 5 * DAY_MS },\r\n { id: \"CLI-2403\", name: \"Carlos Oliveira\", initials: \"CO\", avatarColor: \"#8754ec\", email: \"carlos.oliveira@example.com\", phone: \"+55 11 93456-7890\", statusId: \"active\", categoryId: \"lead\", location: \"Belo Horizonte, MG\", value: 2150, agentId: \"carlos\", createdAt: BASE_DATE - 51 * DAY_MS, lastContact: BASE_DATE - 1 * DAY_MS },\r\n { id: \"CLI-2404\", name: \"Ana Costa\", initials: \"AC\", avatarColor: \"#1cb280\", email: \"ana.costa@example.com\", phone: \"+55 11 94567-8901\", statusId: \"paused\", categoryId: \"royal\", location: \"Porto Alegre, RS\", value: 8900, agentId: \"maria\", createdAt: BASE_DATE - 44 * DAY_MS, lastContact: BASE_DATE - 12 * DAY_MS },\r\n { id: \"CLI-2405\", name: \"Pedro Pereira\", initials: \"PP\", avatarColor: \"#ef4444\", email: \"pedro.pereira@example.com\", phone: \"+55 11 95678-9012\", statusId: \"inactive\", categoryId: \"lead\", location: \"Curitiba, PR\", value: 1100, agentId: \"you\", createdAt: BASE_DATE - 37 * DAY_MS, lastContact: BASE_DATE - 30 * DAY_MS },\r\n { id: \"CLI-2406\", name: \"Lúcia Almeida\", initials: \"LA\", avatarColor: \"#f9a47a\", email: \"lucia.almeida@example.com\", phone: \"+55 11 96789-0123\", statusId: \"active\", categoryId: \"licenciado\", location: \"Recife, PE\", value: 6750, agentId: \"aline\", createdAt: BASE_DATE - 30 * DAY_MS, lastContact: BASE_DATE - 3 * DAY_MS },\r\n { id: \"CLI-2407\", name: \"Roberto Souza\", initials: \"RS\", avatarColor: \"#0088cc\", email: \"roberto.souza@example.com\", phone: \"+55 11 97890-1234\", statusId: \"pending\", categoryId: \"royal\", location: \"São Paulo, SP\", value: 15200, agentId: \"carlos\", createdAt: BASE_DATE - 23 * DAY_MS, lastContact: BASE_DATE - 7 * DAY_MS },\r\n { id: \"CLI-2408\", name: \"Fernanda Lima\", initials: \"FL\", avatarColor: \"#e1306c\", email: \"fernanda.lima@example.com\", phone: \"+55 11 98901-2345\", statusId: \"active\", categoryId: \"lead\", location: \"Rio de Janeiro, RJ\", value: 3400, agentId: \"maria\", createdAt: BASE_DATE - 16 * DAY_MS, lastContact: BASE_DATE - 1 * DAY_MS },\r\n { id: \"CLI-2409\", name: \"Bruno Rodrigues\", initials: \"BR\", avatarColor: \"#70c748\", email: \"bruno.rodrigues@example.com\", phone: \"+55 11 99012-3456\", statusId: \"paused\", categoryId: \"licenciado\", location: \"Belo Horizonte, MG\", value: 5600, agentId: \"you\", createdAt: BASE_DATE - 9 * DAY_MS, lastContact: BASE_DATE - 6 * DAY_MS },\r\n { id: \"CLI-2410\", name: \"Camila Ribeiro\", initials: \"CR\", avatarColor: \"#8754ec\", email: \"camila.ribeiro@example.com\", phone: \"+55 11 90123-4567\", statusId: \"active\", categoryId: \"royal\", location: \"Porto Alegre, RS\", value: 9800, agentId: \"aline\", createdAt: BASE_DATE - 2 * DAY_MS, lastContact: BASE_DATE },\r\n];\r\n","import {\r\n CLIENTS_MOCK,\r\n STATUSES,\r\n CATEGORIES,\r\n AGENTS,\r\n type ClientRow,\r\n} from \"../_table-data\";\r\n\r\n/* ── Dataset 87 clientes (bate com badge do print) ─────────────── */\r\n\r\nexport const CLIENTS_87: ClientRow[] = Array.from({ length: 9 }, (_, batch) =>\r\n CLIENTS_MOCK.map((row, i) => ({\r\n ...row,\r\n id: `CLI-${2400 + batch * 10 + i}`,\r\n })),\r\n)\r\n .flat()\r\n .slice(0, 87);\r\n\r\n/* ── Lookups por categoria de status (column color mapping) ────── */\r\n\r\nexport const STATUS_COLOR_MAP: Record<string, string> = {\r\n active: \"success\",\r\n pending: \"warning\",\r\n paused: \"info\",\r\n inactive: \"neutral\",\r\n};\r\n\r\nexport const STATUS_DOT: Record<string, string> = {\r\n active: \"var(--color-fg-success)\",\r\n pending: \"var(--color-fg-warning)\",\r\n paused: \"var(--color-fg-info)\",\r\n inactive: \"var(--color-fg-muted)\",\r\n};\r\n\r\nexport const CATEGORY_KIND: Record<string, \"warning\" | \"info\" | \"success\"> = {\r\n royal: \"warning\",\r\n licenciado: \"info\",\r\n lead: \"success\",\r\n};\r\n\r\n/* ── Options pra filters/selects ───────────────────────────────── */\r\n\r\nexport const STATUS_OPTIONS = Object.entries(STATUSES).map(([v, m]) => ({\r\n value: v,\r\n label: m.label,\r\n color: STATUS_COLOR_MAP[v] ?? \"neutral\",\r\n}));\r\n\r\nexport const CATEGORY_OPTIONS = Object.entries(CATEGORIES).map(([v, m]) => ({\r\n value: v,\r\n label: m.label,\r\n color: m.kind === \"neutral\" ? \"neutral\" : m.kind,\r\n}));\r\n\r\nexport const AGENT_OPTIONS = Object.entries(AGENTS).map(([v, a]) => ({\r\n value: v,\r\n label: a.name,\r\n}));\r\n\r\n/* ── Avatar lookup pro column type \"user\" ──────────────────────── */\r\n\r\nexport const AGENTS_LOOKUP = Object.fromEntries(\r\n Object.entries(AGENTS).map(([id, a]) => [\r\n id,\r\n {\r\n name: a.name,\r\n initials: a.name\r\n .split(\" \")\r\n .map((s) => s[0])\r\n .join(\"\")\r\n .slice(0, 2),\r\n color: a.color,\r\n },\r\n ]),\r\n);\r\n\r\n/* ── Kanban columns (1 por status) ─────────────────────────────── */\r\n\r\nexport const KANBAN_COLUMNS = Object.entries(STATUSES).map(([id, s]) => ({\r\n id,\r\n label: s.label,\r\n dotColor: STATUS_DOT[id] ?? \"var(--color-fg-muted)\",\r\n}));\r\n\r\n/* ── Cidades pro select do drawer ──────────────────────────────── */\r\n\r\nexport const CITIES = [\r\n \"São Paulo, SP\",\r\n \"Rio de Janeiro, RJ\",\r\n \"Belo Horizonte, MG\",\r\n \"Porto Alegre, RS\",\r\n \"Curitiba, PR\",\r\n \"Recife, PE\",\r\n \"Salvador, BA\",\r\n \"Fortaleza, CE\",\r\n \"Brasília, DF\",\r\n \"Manaus, AM\",\r\n];\r\n\r\n/* ── Helpers de formatação ─────────────────────────────────────── */\r\n\r\nexport function formatBRL(value: number) {\r\n return value.toLocaleString(\"pt-BR\", {\r\n style: \"currency\",\r\n currency: \"BRL\",\r\n minimumFractionDigits: 2,\r\n });\r\n}\r\n\r\nexport function formatShortDate(ms: number) {\r\n if (!ms) return \"—\";\r\n const d = new Date(ms);\r\n const day = d.getDate().toString().padStart(2, \"0\");\r\n const months = [\"jan\", \"fev\", \"mar\", \"abr\", \"mai\", \"jun\", \"jul\", \"ago\", \"set\", \"out\", \"nov\", \"dez\"];\r\n return `${day} ${months[d.getMonth()]}`;\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -1,47 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
const jsxRuntime = require("react/jsx-runtime");
|
|
3
|
-
const React = require("react");
|
|
4
|
-
require("lucide-react");
|
|
5
|
-
require("./badge-gU2wtxrn.cjs");
|
|
6
|
-
const chipGroup = require("./chip-group-2-f_Yo7Y.cjs");
|
|
7
|
-
const SeparatorPrimitive = require("@radix-ui/react-separator");
|
|
8
|
-
function _interopNamespaceDefault(e) {
|
|
9
|
-
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
10
|
-
if (e) {
|
|
11
|
-
for (const k in e) {
|
|
12
|
-
if (k !== "default") {
|
|
13
|
-
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
14
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
15
|
-
enumerable: true,
|
|
16
|
-
get: () => e[k]
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
n.default = e;
|
|
22
|
-
return Object.freeze(n);
|
|
23
|
-
}
|
|
24
|
-
const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
|
|
25
|
-
const SeparatorPrimitive__namespace = /* @__PURE__ */ _interopNamespaceDefault(SeparatorPrimitive);
|
|
26
|
-
const Separator = React__namespace.forwardRef(
|
|
27
|
-
({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
28
|
-
SeparatorPrimitive__namespace.Root,
|
|
29
|
-
{
|
|
30
|
-
ref,
|
|
31
|
-
decorative,
|
|
32
|
-
orientation,
|
|
33
|
-
className: chipGroup.cn(
|
|
34
|
-
"shrink-0 bg-border",
|
|
35
|
-
orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
|
|
36
|
-
className
|
|
37
|
-
),
|
|
38
|
-
...props
|
|
39
|
-
}
|
|
40
|
-
)
|
|
41
|
-
);
|
|
42
|
-
Separator.displayName = SeparatorPrimitive__namespace.Root.displayName;
|
|
43
|
-
React.createContext({ onNavigate: () => {
|
|
44
|
-
} });
|
|
45
2
|
const STATUSES = {
|
|
46
3
|
active: { label: "Ativo", color: "var(--color-fg-success)" },
|
|
47
4
|
pending: { label: "Pendente", color: "var(--color-fg-warning)" },
|
|
@@ -182,4 +139,4 @@ exports.STATUS_OPTIONS = STATUS_OPTIONS;
|
|
|
182
139
|
exports.clientesShowcaseMocks = clientesShowcaseMocks;
|
|
183
140
|
exports.formatBRL = formatBRL;
|
|
184
141
|
exports.formatShortDate = formatShortDate;
|
|
185
|
-
//# sourceMappingURL=clientes-showcase-mocks-
|
|
142
|
+
//# sourceMappingURL=clientes-showcase-mocks-CwhluBTT.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientes-showcase-mocks-CwhluBTT.cjs","sources":["../../src/preview/pages/_table-data.ts","../../src/preview/pages/ClientesShowcase/clientes-showcase-mocks.ts"],"sourcesContent":["/**\r\n * Fixtures compartilhadas da tabela de clientes (status, categorias, agentes e o\r\n * shape da linha).\r\n *\r\n * ## Por que isto existe fora do `TableDoc.tsx`\r\n *\r\n * Estas fixtures nasceram dentro do `TableDoc.tsx`, e o `ClientesShowcase` passou a\r\n * importá-las de lá. Só que o build da lib npm **exclui** `src/preview/pages/*Doc.tsx`\r\n * da emissão de tipos (`vite.lib.config.ts`) enquanto **inclui** o `ClientesShowcase` —\r\n * então os `.d.ts` do showcase referenciavam um arquivo que não entrava no pacote, e\r\n * todo `import` desses tipos virava `any` pra quem consome via npm. É a **L-017**, e\r\n * foi pega pelo `npm run lib:verify`.\r\n *\r\n * Não dá pra \"só incluir o TableDoc\": ele é uma Doc page de ~900 linhas cujo lugar não é\r\n * o pacote. A fonte única correta é este módulo — que é exatamente o que o canal registry\r\n * já fazia por conta própria (`src/examples/clientes/_table-data.ts`, L-034). Agora os\r\n * dois canais compartilham a mesma decisão em vez de uma reescrita paralela.\r\n *\r\n * O `TableDoc.tsx` reexporta tudo daqui, então nada que importava dele quebra.\r\n */\r\n\r\nexport const STATUSES: Record<string, { label: string; color: string }> = {\r\n active: { label: \"Ativo\", color: \"var(--color-fg-success)\" },\r\n pending: { label: \"Pendente\", color: \"var(--color-fg-warning)\" },\r\n paused: { label: \"Pausado\", color: \"var(--color-fg-info)\" },\r\n inactive: { label: \"Inativo\", color: \"var(--color-fg-muted)\" },\r\n};\r\n\r\nexport type CategoryKind = \"warning\" | \"info\" | \"success\" | \"neutral\";\r\n\r\nexport const CATEGORIES: Record<string, { label: string; kind: CategoryKind }> = {\r\n royal: { label: \"Royal\", kind: \"warning\" },\r\n licenciado: { label: \"Licenciado\", kind: \"info\" },\r\n lead: { label: \"Lead\", kind: \"success\" },\r\n};\r\n\r\nexport const AGENTS: Record<string, { name: string; initials: string; color: string }> = {\r\n you: { name: \"Voce\", initials: \"VC\", color: \"#0a3a2e\" },\r\n aline: { name: \"Aline Castro\", initials: \"AC\", color: \"#f59e0b\" },\r\n carlos: { name: \"Carlos Souza\", initials: \"CS\", color: \"#8754ec\" },\r\n maria: { name: \"Maria Lima\", initials: \"ML\", color: \"#ef4444\" },\r\n};\r\n\r\nexport type ClientRow = {\r\n id: string;\r\n name: string;\r\n initials: string;\r\n avatarColor: string;\r\n email: string;\r\n phone: string;\r\n statusId: keyof typeof STATUSES;\r\n categoryId: keyof typeof CATEGORIES;\r\n location: string;\r\n value: number;\r\n agentId: keyof typeof AGENTS;\r\n createdAt: number;\r\n lastContact: number;\r\n};\r\n\r\n/* ── Dataset base (10 clientes; o showcase deriva 87 a partir daqui) ── */\r\n\r\nconst BASE_DATE = new Date(\"2026-04-15T12:00:00Z\").getTime();\r\nconst DAY_MS = 86400000;\r\n\r\nexport const CLIENTS_MOCK: ClientRow[] = [\r\n { id: \"CLI-2401\", name: \"Maria Silva\", initials: \"MS\", avatarColor: \"#f59e0b\", email: \"maria.silva@example.com\", phone: \"+55 11 91234-5678\", statusId: \"active\", categoryId: \"royal\", location: \"São Paulo, SP\", value: 4800, agentId: \"you\", createdAt: BASE_DATE - 65 * DAY_MS, lastContact: BASE_DATE - 2 * DAY_MS },\r\n { id: \"CLI-2402\", name: \"João Santos\", initials: \"JS\", avatarColor: \"#0a3a2e\", email: \"joao.santos@example.com\", phone: \"+55 11 92345-6789\", statusId: \"pending\", categoryId: \"licenciado\", location: \"Rio de Janeiro, RJ\", value: 12300, agentId: \"aline\", createdAt: BASE_DATE - 58 * DAY_MS, lastContact: BASE_DATE - 5 * DAY_MS },\r\n { id: \"CLI-2403\", name: \"Carlos Oliveira\", initials: \"CO\", avatarColor: \"#8754ec\", email: \"carlos.oliveira@example.com\", phone: \"+55 11 93456-7890\", statusId: \"active\", categoryId: \"lead\", location: \"Belo Horizonte, MG\", value: 2150, agentId: \"carlos\", createdAt: BASE_DATE - 51 * DAY_MS, lastContact: BASE_DATE - 1 * DAY_MS },\r\n { id: \"CLI-2404\", name: \"Ana Costa\", initials: \"AC\", avatarColor: \"#1cb280\", email: \"ana.costa@example.com\", phone: \"+55 11 94567-8901\", statusId: \"paused\", categoryId: \"royal\", location: \"Porto Alegre, RS\", value: 8900, agentId: \"maria\", createdAt: BASE_DATE - 44 * DAY_MS, lastContact: BASE_DATE - 12 * DAY_MS },\r\n { id: \"CLI-2405\", name: \"Pedro Pereira\", initials: \"PP\", avatarColor: \"#ef4444\", email: \"pedro.pereira@example.com\", phone: \"+55 11 95678-9012\", statusId: \"inactive\", categoryId: \"lead\", location: \"Curitiba, PR\", value: 1100, agentId: \"you\", createdAt: BASE_DATE - 37 * DAY_MS, lastContact: BASE_DATE - 30 * DAY_MS },\r\n { id: \"CLI-2406\", name: \"Lúcia Almeida\", initials: \"LA\", avatarColor: \"#f9a47a\", email: \"lucia.almeida@example.com\", phone: \"+55 11 96789-0123\", statusId: \"active\", categoryId: \"licenciado\", location: \"Recife, PE\", value: 6750, agentId: \"aline\", createdAt: BASE_DATE - 30 * DAY_MS, lastContact: BASE_DATE - 3 * DAY_MS },\r\n { id: \"CLI-2407\", name: \"Roberto Souza\", initials: \"RS\", avatarColor: \"#0088cc\", email: \"roberto.souza@example.com\", phone: \"+55 11 97890-1234\", statusId: \"pending\", categoryId: \"royal\", location: \"São Paulo, SP\", value: 15200, agentId: \"carlos\", createdAt: BASE_DATE - 23 * DAY_MS, lastContact: BASE_DATE - 7 * DAY_MS },\r\n { id: \"CLI-2408\", name: \"Fernanda Lima\", initials: \"FL\", avatarColor: \"#e1306c\", email: \"fernanda.lima@example.com\", phone: \"+55 11 98901-2345\", statusId: \"active\", categoryId: \"lead\", location: \"Rio de Janeiro, RJ\", value: 3400, agentId: \"maria\", createdAt: BASE_DATE - 16 * DAY_MS, lastContact: BASE_DATE - 1 * DAY_MS },\r\n { id: \"CLI-2409\", name: \"Bruno Rodrigues\", initials: \"BR\", avatarColor: \"#70c748\", email: \"bruno.rodrigues@example.com\", phone: \"+55 11 99012-3456\", statusId: \"paused\", categoryId: \"licenciado\", location: \"Belo Horizonte, MG\", value: 5600, agentId: \"you\", createdAt: BASE_DATE - 9 * DAY_MS, lastContact: BASE_DATE - 6 * DAY_MS },\r\n { id: \"CLI-2410\", name: \"Camila Ribeiro\", initials: \"CR\", avatarColor: \"#8754ec\", email: \"camila.ribeiro@example.com\", phone: \"+55 11 90123-4567\", statusId: \"active\", categoryId: \"royal\", location: \"Porto Alegre, RS\", value: 9800, agentId: \"aline\", createdAt: BASE_DATE - 2 * DAY_MS, lastContact: BASE_DATE },\r\n];\r\n","import {\r\n CLIENTS_MOCK,\r\n STATUSES,\r\n CATEGORIES,\r\n AGENTS,\r\n type ClientRow,\r\n} from \"../_table-data\";\r\n\r\n/* ── Dataset 87 clientes (bate com badge do print) ─────────────── */\r\n\r\nexport const CLIENTS_87: ClientRow[] = Array.from({ length: 9 }, (_, batch) =>\r\n CLIENTS_MOCK.map((row, i) => ({\r\n ...row,\r\n id: `CLI-${2400 + batch * 10 + i}`,\r\n })),\r\n)\r\n .flat()\r\n .slice(0, 87);\r\n\r\n/* ── Lookups por categoria de status (column color mapping) ────── */\r\n\r\nexport const STATUS_COLOR_MAP: Record<string, string> = {\r\n active: \"success\",\r\n pending: \"warning\",\r\n paused: \"info\",\r\n inactive: \"neutral\",\r\n};\r\n\r\nexport const STATUS_DOT: Record<string, string> = {\r\n active: \"var(--color-fg-success)\",\r\n pending: \"var(--color-fg-warning)\",\r\n paused: \"var(--color-fg-info)\",\r\n inactive: \"var(--color-fg-muted)\",\r\n};\r\n\r\nexport const CATEGORY_KIND: Record<string, \"warning\" | \"info\" | \"success\"> = {\r\n royal: \"warning\",\r\n licenciado: \"info\",\r\n lead: \"success\",\r\n};\r\n\r\n/* ── Options pra filters/selects ───────────────────────────────── */\r\n\r\nexport const STATUS_OPTIONS = Object.entries(STATUSES).map(([v, m]) => ({\r\n value: v,\r\n label: m.label,\r\n color: STATUS_COLOR_MAP[v] ?? \"neutral\",\r\n}));\r\n\r\nexport const CATEGORY_OPTIONS = Object.entries(CATEGORIES).map(([v, m]) => ({\r\n value: v,\r\n label: m.label,\r\n color: m.kind === \"neutral\" ? \"neutral\" : m.kind,\r\n}));\r\n\r\nexport const AGENT_OPTIONS = Object.entries(AGENTS).map(([v, a]) => ({\r\n value: v,\r\n label: a.name,\r\n}));\r\n\r\n/* ── Avatar lookup pro column type \"user\" ──────────────────────── */\r\n\r\nexport const AGENTS_LOOKUP = Object.fromEntries(\r\n Object.entries(AGENTS).map(([id, a]) => [\r\n id,\r\n {\r\n name: a.name,\r\n initials: a.name\r\n .split(\" \")\r\n .map((s) => s[0])\r\n .join(\"\")\r\n .slice(0, 2),\r\n color: a.color,\r\n },\r\n ]),\r\n);\r\n\r\n/* ── Kanban columns (1 por status) ─────────────────────────────── */\r\n\r\nexport const KANBAN_COLUMNS = Object.entries(STATUSES).map(([id, s]) => ({\r\n id,\r\n label: s.label,\r\n dotColor: STATUS_DOT[id] ?? \"var(--color-fg-muted)\",\r\n}));\r\n\r\n/* ── Cidades pro select do drawer ──────────────────────────────── */\r\n\r\nexport const CITIES = [\r\n \"São Paulo, SP\",\r\n \"Rio de Janeiro, RJ\",\r\n \"Belo Horizonte, MG\",\r\n \"Porto Alegre, RS\",\r\n \"Curitiba, PR\",\r\n \"Recife, PE\",\r\n \"Salvador, BA\",\r\n \"Fortaleza, CE\",\r\n \"Brasília, DF\",\r\n \"Manaus, AM\",\r\n];\r\n\r\n/* ── Helpers de formatação ─────────────────────────────────────── */\r\n\r\nexport function formatBRL(value: number) {\r\n return value.toLocaleString(\"pt-BR\", {\r\n style: \"currency\",\r\n currency: \"BRL\",\r\n minimumFractionDigits: 2,\r\n });\r\n}\r\n\r\nexport function formatShortDate(ms: number) {\r\n if (!ms) return \"—\";\r\n const d = new Date(ms);\r\n const day = d.getDate().toString().padStart(2, \"0\");\r\n const months = [\"jan\", \"fev\", \"mar\", \"abr\", \"mai\", \"jun\", \"jul\", \"ago\", \"set\", \"out\", \"nov\", \"dez\"];\r\n return `${day} ${months[d.getMonth()]}`;\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const jsxRuntime = require("react/jsx-runtime");
|
|
3
3
|
const React = require("react");
|
|
4
4
|
const classVarianceAuthority = require("class-variance-authority");
|
|
5
|
-
const
|
|
5
|
+
const appShell = require("./app-shell-Cyh8AUJT.cjs");
|
|
6
6
|
function _interopNamespaceDefault(e) {
|
|
7
7
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
8
8
|
if (e) {
|
|
@@ -30,7 +30,27 @@ const inputVariants = classVarianceAuthority.cva(
|
|
|
30
30
|
"text-body-sm font-normal text-fg-default placeholder:text-fg-muted placeholder:opacity-70",
|
|
31
31
|
"transition-[border-color,box-shadow,background-color] outline-none",
|
|
32
32
|
"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-bg-input dark:disabled:hover:bg-bg-muted",
|
|
33
|
-
"file:inline-flex file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-fg-default"
|
|
33
|
+
"file:inline-flex file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-fg-default",
|
|
34
|
+
// type=file — escopado no atributo de propósito, pra não mexer em nenhum
|
|
35
|
+
// outro input (este é primitivo compartilhado).
|
|
36
|
+
//
|
|
37
|
+
// · `block` + `align-content:center`: o conteúdo do file input (botão +
|
|
38
|
+
// nome do arquivo) vive no SHADOW DOM, então `align-items` NÃO o move —
|
|
39
|
+
// medido: com `items-center` o computed vira `center` e o pixel não sai
|
|
40
|
+
// do lugar. O que centra é `align-content` num container de BLOCO
|
|
41
|
+
// (CSS Align L3), que aplica ao conteúdo em fluxo. Testados e reprovados:
|
|
42
|
+
// `items-center`, `align-content` sobre flex (com e sem wrap), `grid` +
|
|
43
|
+
// `place-content`, e `::file-selector-button { margin-block: auto }`.
|
|
44
|
+
// Preferido a `line-height` = altura da caixa, que centraria também mas
|
|
45
|
+
// exigiria um px mágico por size (28/32/36/40) desacoplado dos tokens de
|
|
46
|
+
// `form-*`. Piso: Chrome 123+ / Safari 17.6+ / Firefox 125+; abaixo disso
|
|
47
|
+
// degrada pro alinhamento antigo, sem quebrar nada.
|
|
48
|
+
// · `text-fg-muted`: o "Nenhum arquivo escolhido" vinha em fg-default
|
|
49
|
+
// (0.98), destoando de `placeholder:text-fg-muted` de todo input do DS.
|
|
50
|
+
// O CSS não distingue vazio de preenchido num file input, então o nome do
|
|
51
|
+
// arquivo escolhido também fica muted — trade-off registrado no gotcha de
|
|
52
|
+
// `shadcn/USAGE.md`; pra UX de upload de verdade use `FileUploadField`.
|
|
53
|
+
"[&[type=file]]:block [&[type=file]]:[align-content:center] [&[type=file]]:text-fg-muted"
|
|
34
54
|
],
|
|
35
55
|
{
|
|
36
56
|
variants: {
|
|
@@ -60,7 +80,7 @@ const Input = React__namespace.forwardRef(
|
|
|
60
80
|
{
|
|
61
81
|
type,
|
|
62
82
|
ref,
|
|
63
|
-
className:
|
|
83
|
+
className: appShell.cn(inputVariants({ size, state }), className),
|
|
64
84
|
...props
|
|
65
85
|
}
|
|
66
86
|
);
|
|
@@ -69,4 +89,4 @@ const Input = React__namespace.forwardRef(
|
|
|
69
89
|
Input.displayName = "Input";
|
|
70
90
|
exports.Input = Input;
|
|
71
91
|
exports.inputVariants = inputVariants;
|
|
72
|
-
//# sourceMappingURL=input-
|
|
92
|
+
//# sourceMappingURL=input-BjUSWce3.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-BjUSWce3.cjs","sources":["../../src/components/shadcn/input.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\n/**\r\n * Input — alinhado com `.tbl-form-input` do design-and-table-v2.\r\n *\r\n * Specs base (md, default):\r\n * - h: 40px (form-lg), px: 12px (pad-xl), radius: 10px (radius-lg)\r\n * - bg-input (light) / dark:bg-bg-muted\r\n * - border: 1px solid border-input\r\n * - font: 13px, color fg-default, placeholder fg-muted\r\n * - focus: border + shadow-sh-ring por state\r\n *\r\n * Pra inputs com prefixo/sufixo/ícone/botão dentro → use `<InputGroup>`.\r\n * Este componente é puro (só o <input>) — sem wrapper, sem adornments inline.\r\n */\r\n\r\nexport type InputState = \"default\" | \"error\" | \"warning\" | \"success\";\r\n\r\nconst inputVariants = cva(\r\n [\r\n \"flex w-full\",\r\n \"bg-bg-input dark:bg-bg-muted\",\r\n \"hover:bg-bg-input-hover dark:hover:bg-bg-muted-hover\",\r\n \"border border-border-input rounded-radius-lg\",\r\n \"px-pad-xl\",\r\n \"text-body-sm font-normal text-fg-default placeholder:text-fg-muted placeholder:opacity-70\",\r\n \"transition-[border-color,box-shadow,background-color] outline-none\",\r\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-bg-input dark:disabled:hover:bg-bg-muted\",\r\n \"file:inline-flex file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-fg-default\",\r\n // type=file — escopado no atributo de propósito, pra não mexer em nenhum\r\n // outro input (este é primitivo compartilhado).\r\n //\r\n // · `block` + `align-content:center`: o conteúdo do file input (botão +\r\n // nome do arquivo) vive no SHADOW DOM, então `align-items` NÃO o move —\r\n // medido: com `items-center` o computed vira `center` e o pixel não sai\r\n // do lugar. O que centra é `align-content` num container de BLOCO\r\n // (CSS Align L3), que aplica ao conteúdo em fluxo. Testados e reprovados:\r\n // `items-center`, `align-content` sobre flex (com e sem wrap), `grid` +\r\n // `place-content`, e `::file-selector-button { margin-block: auto }`.\r\n // Preferido a `line-height` = altura da caixa, que centraria também mas\r\n // exigiria um px mágico por size (28/32/36/40) desacoplado dos tokens de\r\n // `form-*`. Piso: Chrome 123+ / Safari 17.6+ / Firefox 125+; abaixo disso\r\n // degrada pro alinhamento antigo, sem quebrar nada.\r\n // · `text-fg-muted`: o \"Nenhum arquivo escolhido\" vinha em fg-default\r\n // (0.98), destoando de `placeholder:text-fg-muted` de todo input do DS.\r\n // O CSS não distingue vazio de preenchido num file input, então o nome do\r\n // arquivo escolhido também fica muted — trade-off registrado no gotcha de\r\n // `shadcn/USAGE.md`; pra UX de upload de verdade use `FileUploadField`.\r\n \"[&[type=file]]:block [&[type=file]]:[align-content:center] [&[type=file]]:text-fg-muted\",\r\n ],\r\n {\r\n variants: {\r\n size: {\r\n xxs: \"min-h-form-xs rounded-radius-md\",\r\n xs: \"min-h-form-sm rounded-radius-md\",\r\n sm: \"min-h-form-md\",\r\n md: \"min-h-form-lg\",\r\n },\r\n state: {\r\n default: \"focus-visible:border-border-brand focus-visible:shadow-sh-ring\",\r\n error: \"border-border-danger-muted focus-visible:border-border-danger-muted focus-visible:shadow-sh-ring-danger\",\r\n warning: \"border-border-warning-muted focus-visible:border-border-warning-muted focus-visible:shadow-sh-ring-warning\",\r\n success: \"border-border-success-muted focus-visible:border-border-success-muted focus-visible:shadow-sh-ring-success\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n state: \"default\",\r\n },\r\n },\r\n);\r\n\r\nexport type InputVariantProps = VariantProps<typeof inputVariants>;\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\r\n InputVariantProps {}\r\n\r\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n ({ className, type, size, state, ...props }, ref) => {\r\n return (\r\n <input\r\n type={type}\r\n ref={ref}\r\n className={cn(inputVariants({ size, state }), className)}\r\n {...props}\r\n />\r\n );\r\n },\r\n);\r\nInput.displayName = \"Input\";\r\n\r\nexport { Input, inputVariants };\r\n"],"names":["cva","React","jsx","cn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAoBA,MAAM,gBAAgBA,uBAAAA;AAAAA,EACpB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoBA;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,KAAK;AAAA,QACL,IAAK;AAAA,QACL,IAAK;AAAA,QACL,IAAK;AAAA,MAAA;AAAA,MAEP,OAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ;AAQA,MAAM,QAAQC,iBAAM;AAAA,EAClB,CAAC,EAAE,WAAW,MAAM,MAAM,OAAO,GAAG,MAAA,GAAS,QAAQ;AACnD,WACEC,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,WAAWC,SAAAA,GAAG,cAAc,EAAE,MAAM,MAAA,CAAO,GAAG,SAAS;AAAA,QACtD,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AACA,MAAM,cAAc;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { cva } from "class-variance-authority";
|
|
4
|
-
import { c as cn } from "./
|
|
4
|
+
import { c as cn } from "./app-shell-78w0pYdP.mjs";
|
|
5
5
|
const inputVariants = cva(
|
|
6
6
|
[
|
|
7
7
|
"flex w-full",
|
|
@@ -12,7 +12,27 @@ const inputVariants = cva(
|
|
|
12
12
|
"text-body-sm font-normal text-fg-default placeholder:text-fg-muted placeholder:opacity-70",
|
|
13
13
|
"transition-[border-color,box-shadow,background-color] outline-none",
|
|
14
14
|
"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-bg-input dark:disabled:hover:bg-bg-muted",
|
|
15
|
-
"file:inline-flex file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-fg-default"
|
|
15
|
+
"file:inline-flex file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-fg-default",
|
|
16
|
+
// type=file — escopado no atributo de propósito, pra não mexer em nenhum
|
|
17
|
+
// outro input (este é primitivo compartilhado).
|
|
18
|
+
//
|
|
19
|
+
// · `block` + `align-content:center`: o conteúdo do file input (botão +
|
|
20
|
+
// nome do arquivo) vive no SHADOW DOM, então `align-items` NÃO o move —
|
|
21
|
+
// medido: com `items-center` o computed vira `center` e o pixel não sai
|
|
22
|
+
// do lugar. O que centra é `align-content` num container de BLOCO
|
|
23
|
+
// (CSS Align L3), que aplica ao conteúdo em fluxo. Testados e reprovados:
|
|
24
|
+
// `items-center`, `align-content` sobre flex (com e sem wrap), `grid` +
|
|
25
|
+
// `place-content`, e `::file-selector-button { margin-block: auto }`.
|
|
26
|
+
// Preferido a `line-height` = altura da caixa, que centraria também mas
|
|
27
|
+
// exigiria um px mágico por size (28/32/36/40) desacoplado dos tokens de
|
|
28
|
+
// `form-*`. Piso: Chrome 123+ / Safari 17.6+ / Firefox 125+; abaixo disso
|
|
29
|
+
// degrada pro alinhamento antigo, sem quebrar nada.
|
|
30
|
+
// · `text-fg-muted`: o "Nenhum arquivo escolhido" vinha em fg-default
|
|
31
|
+
// (0.98), destoando de `placeholder:text-fg-muted` de todo input do DS.
|
|
32
|
+
// O CSS não distingue vazio de preenchido num file input, então o nome do
|
|
33
|
+
// arquivo escolhido também fica muted — trade-off registrado no gotcha de
|
|
34
|
+
// `shadcn/USAGE.md`; pra UX de upload de verdade use `FileUploadField`.
|
|
35
|
+
"[&[type=file]]:block [&[type=file]]:[align-content:center] [&[type=file]]:text-fg-muted"
|
|
16
36
|
],
|
|
17
37
|
{
|
|
18
38
|
variants: {
|
|
@@ -53,4 +73,4 @@ export {
|
|
|
53
73
|
Input as I,
|
|
54
74
|
inputVariants as i
|
|
55
75
|
};
|
|
56
|
-
//# sourceMappingURL=input-
|
|
76
|
+
//# sourceMappingURL=input-DCDU4i4S.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-DCDU4i4S.mjs","sources":["../../src/components/shadcn/input.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\n/**\r\n * Input — alinhado com `.tbl-form-input` do design-and-table-v2.\r\n *\r\n * Specs base (md, default):\r\n * - h: 40px (form-lg), px: 12px (pad-xl), radius: 10px (radius-lg)\r\n * - bg-input (light) / dark:bg-bg-muted\r\n * - border: 1px solid border-input\r\n * - font: 13px, color fg-default, placeholder fg-muted\r\n * - focus: border + shadow-sh-ring por state\r\n *\r\n * Pra inputs com prefixo/sufixo/ícone/botão dentro → use `<InputGroup>`.\r\n * Este componente é puro (só o <input>) — sem wrapper, sem adornments inline.\r\n */\r\n\r\nexport type InputState = \"default\" | \"error\" | \"warning\" | \"success\";\r\n\r\nconst inputVariants = cva(\r\n [\r\n \"flex w-full\",\r\n \"bg-bg-input dark:bg-bg-muted\",\r\n \"hover:bg-bg-input-hover dark:hover:bg-bg-muted-hover\",\r\n \"border border-border-input rounded-radius-lg\",\r\n \"px-pad-xl\",\r\n \"text-body-sm font-normal text-fg-default placeholder:text-fg-muted placeholder:opacity-70\",\r\n \"transition-[border-color,box-shadow,background-color] outline-none\",\r\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-bg-input dark:disabled:hover:bg-bg-muted\",\r\n \"file:inline-flex file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-fg-default\",\r\n // type=file — escopado no atributo de propósito, pra não mexer em nenhum\r\n // outro input (este é primitivo compartilhado).\r\n //\r\n // · `block` + `align-content:center`: o conteúdo do file input (botão +\r\n // nome do arquivo) vive no SHADOW DOM, então `align-items` NÃO o move —\r\n // medido: com `items-center` o computed vira `center` e o pixel não sai\r\n // do lugar. O que centra é `align-content` num container de BLOCO\r\n // (CSS Align L3), que aplica ao conteúdo em fluxo. Testados e reprovados:\r\n // `items-center`, `align-content` sobre flex (com e sem wrap), `grid` +\r\n // `place-content`, e `::file-selector-button { margin-block: auto }`.\r\n // Preferido a `line-height` = altura da caixa, que centraria também mas\r\n // exigiria um px mágico por size (28/32/36/40) desacoplado dos tokens de\r\n // `form-*`. Piso: Chrome 123+ / Safari 17.6+ / Firefox 125+; abaixo disso\r\n // degrada pro alinhamento antigo, sem quebrar nada.\r\n // · `text-fg-muted`: o \"Nenhum arquivo escolhido\" vinha em fg-default\r\n // (0.98), destoando de `placeholder:text-fg-muted` de todo input do DS.\r\n // O CSS não distingue vazio de preenchido num file input, então o nome do\r\n // arquivo escolhido também fica muted — trade-off registrado no gotcha de\r\n // `shadcn/USAGE.md`; pra UX de upload de verdade use `FileUploadField`.\r\n \"[&[type=file]]:block [&[type=file]]:[align-content:center] [&[type=file]]:text-fg-muted\",\r\n ],\r\n {\r\n variants: {\r\n size: {\r\n xxs: \"min-h-form-xs rounded-radius-md\",\r\n xs: \"min-h-form-sm rounded-radius-md\",\r\n sm: \"min-h-form-md\",\r\n md: \"min-h-form-lg\",\r\n },\r\n state: {\r\n default: \"focus-visible:border-border-brand focus-visible:shadow-sh-ring\",\r\n error: \"border-border-danger-muted focus-visible:border-border-danger-muted focus-visible:shadow-sh-ring-danger\",\r\n warning: \"border-border-warning-muted focus-visible:border-border-warning-muted focus-visible:shadow-sh-ring-warning\",\r\n success: \"border-border-success-muted focus-visible:border-border-success-muted focus-visible:shadow-sh-ring-success\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n state: \"default\",\r\n },\r\n },\r\n);\r\n\r\nexport type InputVariantProps = VariantProps<typeof inputVariants>;\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\r\n InputVariantProps {}\r\n\r\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n ({ className, type, size, state, ...props }, ref) => {\r\n return (\r\n <input\r\n type={type}\r\n ref={ref}\r\n className={cn(inputVariants({ size, state }), className)}\r\n {...props}\r\n />\r\n );\r\n },\r\n);\r\nInput.displayName = \"Input\";\r\n\r\nexport { Input, inputVariants };\r\n"],"names":[],"mappings":";;;;AAoBA,MAAM,gBAAgB;AAAA,EACpB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoBA;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,KAAK;AAAA,QACL,IAAK;AAAA,QACL,IAAK;AAAA,QACL,IAAK;AAAA,MAAA;AAAA,MAEP,OAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ;AAQA,MAAM,QAAQ,MAAM;AAAA,EAClB,CAAC,EAAE,WAAW,MAAM,MAAM,OAAO,GAAG,MAAA,GAAS,QAAQ;AACnD,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,WAAW,GAAG,cAAc,EAAE,MAAM,MAAA,CAAO,GAAG,SAAS;AAAA,QACtD,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AACA,MAAM,cAAc;"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const appShell = require("./app-shell-Cyh8AUJT.cjs");
|
|
5
|
+
const lucideReact = require("lucide-react");
|
|
6
|
+
const kpi = appShell.tv({
|
|
7
|
+
slots: {
|
|
8
|
+
root: "flex flex-col gap-gp-lg",
|
|
9
|
+
header: "flex items-start justify-between gap-gp-md",
|
|
10
|
+
label: "m-0 text-body-md font-semibold text-fg-default",
|
|
11
|
+
iconBox: "grid size-form-lg shrink-0 place-items-center rounded-radius-lg [&>svg]:size-icon-md",
|
|
12
|
+
main: "flex flex-col gap-gp-xs",
|
|
13
|
+
valueRow: "flex flex-wrap items-center gap-gp-md",
|
|
14
|
+
value: "leading-none text-fg-default [font-variant-numeric:tabular-nums]",
|
|
15
|
+
hint: "text-caption-sm text-fg-subtle",
|
|
16
|
+
chart: "mt-gp-xs",
|
|
17
|
+
footnote: "mt-pad-md border-t border-border-subtle pt-pad-lg text-caption-md text-fg-muted"
|
|
18
|
+
},
|
|
19
|
+
variants: {
|
|
20
|
+
// Tamanho do valor de destaque — presets `stat-*` (número de métrica).
|
|
21
|
+
// Default `md` (24px) = idêntico ao antigo `body-2xl`. Weight/leading tight
|
|
22
|
+
// vêm do preset + slot; pareado com tabular-nums.
|
|
23
|
+
size: {
|
|
24
|
+
sm: { value: "text-stat-sm" },
|
|
25
|
+
md: { value: "text-stat-md" },
|
|
26
|
+
lg: { value: "text-stat-lg" },
|
|
27
|
+
xl: { value: "text-stat-xl" }
|
|
28
|
+
},
|
|
29
|
+
surface: {
|
|
30
|
+
card: {
|
|
31
|
+
root: "rounded-radius-xl border border-border-subtle bg-bg-surface p-pad-3xl shadow-sh-sm"
|
|
32
|
+
},
|
|
33
|
+
plain: { root: "p-pad-3xl" }
|
|
34
|
+
},
|
|
35
|
+
tone: {
|
|
36
|
+
brand: { iconBox: "bg-bg-brand-subtle text-fg-brand" },
|
|
37
|
+
success: { iconBox: "bg-bg-success-muted text-fg-success" },
|
|
38
|
+
warning: { iconBox: "bg-bg-warning-muted text-fg-warning" },
|
|
39
|
+
info: { iconBox: "bg-bg-info-muted text-fg-info" },
|
|
40
|
+
danger: { iconBox: "bg-bg-danger-muted text-fg-danger" },
|
|
41
|
+
neutral: { iconBox: "bg-bg-muted text-fg-muted" }
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
defaultVariants: {
|
|
45
|
+
size: "md",
|
|
46
|
+
surface: "card",
|
|
47
|
+
tone: "neutral"
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
const kpiGroup = appShell.tv({
|
|
51
|
+
base: "grid w-full",
|
|
52
|
+
variants: {
|
|
53
|
+
columns: {
|
|
54
|
+
2: "grid-cols-1 sm:grid-cols-2",
|
|
55
|
+
3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
|
|
56
|
+
4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",
|
|
57
|
+
5: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-5",
|
|
58
|
+
6: "grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6"
|
|
59
|
+
},
|
|
60
|
+
divided: {
|
|
61
|
+
// 1 card único com divisórias (linha no mobile, coluna no sm+)
|
|
62
|
+
true: "overflow-hidden rounded-radius-xl border border-border-subtle bg-bg-surface shadow-sh-sm divide-y divide-border-subtle sm:divide-y-0 sm:divide-x",
|
|
63
|
+
false: "gap-gp-2xl"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
defaultVariants: {
|
|
67
|
+
columns: 4,
|
|
68
|
+
divided: false
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
const KpiSurfaceContext = React.createContext("card");
|
|
72
|
+
function KpiGroup({
|
|
73
|
+
columns = 4,
|
|
74
|
+
divided = false,
|
|
75
|
+
children,
|
|
76
|
+
className
|
|
77
|
+
}) {
|
|
78
|
+
return /* @__PURE__ */ jsxRuntime.jsx(KpiSurfaceContext.Provider, { value: divided ? "plain" : "card", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn(kpiGroup({ columns, divided }), className), children }) });
|
|
79
|
+
}
|
|
80
|
+
KpiGroup.displayName = "KpiGroup";
|
|
81
|
+
function Kpi({
|
|
82
|
+
label,
|
|
83
|
+
value,
|
|
84
|
+
delta,
|
|
85
|
+
hint,
|
|
86
|
+
icon,
|
|
87
|
+
tone = "neutral",
|
|
88
|
+
size = "md",
|
|
89
|
+
footnote,
|
|
90
|
+
children,
|
|
91
|
+
surface,
|
|
92
|
+
className
|
|
93
|
+
}) {
|
|
94
|
+
const inherited = React.useContext(KpiSurfaceContext);
|
|
95
|
+
const s = kpi({ size, surface: surface ?? inherited, tone });
|
|
96
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("article", { className: appShell.cn(s.root(), className), children: [
|
|
97
|
+
/* @__PURE__ */ jsxRuntime.jsxs("header", { className: s.header(), children: [
|
|
98
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: s.label(), children: label }),
|
|
99
|
+
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: s.iconBox(), "aria-hidden": true, children: icon })
|
|
100
|
+
] }),
|
|
101
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: s.main(), children: [
|
|
102
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: s.valueRow(), children: [
|
|
103
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: s.value(), children: value }),
|
|
104
|
+
delta
|
|
105
|
+
] }),
|
|
106
|
+
hint && /* @__PURE__ */ jsxRuntime.jsx("span", { className: s.hint(), children: hint })
|
|
107
|
+
] }),
|
|
108
|
+
children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: s.chart(), children }),
|
|
109
|
+
footnote && /* @__PURE__ */ jsxRuntime.jsx("div", { className: s.footnote(), children: footnote })
|
|
110
|
+
] });
|
|
111
|
+
}
|
|
112
|
+
Kpi.displayName = "Kpi";
|
|
113
|
+
function KpiDelta({
|
|
114
|
+
value,
|
|
115
|
+
tone,
|
|
116
|
+
direction,
|
|
117
|
+
signed = false,
|
|
118
|
+
className
|
|
119
|
+
}) {
|
|
120
|
+
const isNegative = signed && typeof value === "string" && value.trim().startsWith("-");
|
|
121
|
+
const resolvedTone = tone ?? (signed ? isNegative ? "danger" : "success" : "success");
|
|
122
|
+
const resolvedDirection = direction ?? (signed ? isNegative ? "down" : "up" : void 0);
|
|
123
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
124
|
+
appShell.Chip,
|
|
125
|
+
{
|
|
126
|
+
color: resolvedTone,
|
|
127
|
+
variant: "soft",
|
|
128
|
+
size: "sm",
|
|
129
|
+
shape: "pill",
|
|
130
|
+
className,
|
|
131
|
+
children: [
|
|
132
|
+
resolvedDirection && /* @__PURE__ */ jsxRuntime.jsx(
|
|
133
|
+
lucideReact.TrendingUp,
|
|
134
|
+
{
|
|
135
|
+
className: appShell.cn("size-[12px]", resolvedDirection === "down" && "rotate-180"),
|
|
136
|
+
"aria-hidden": true
|
|
137
|
+
}
|
|
138
|
+
),
|
|
139
|
+
value
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
KpiDelta.displayName = "KpiDelta";
|
|
145
|
+
exports.Kpi = Kpi;
|
|
146
|
+
exports.KpiDelta = KpiDelta;
|
|
147
|
+
exports.KpiGroup = KpiGroup;
|
|
148
|
+
//# sourceMappingURL=kpi-delta-C_3V6uG6.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kpi-delta-C_3V6uG6.cjs","sources":["../../src/components/ui/Kpi/kpi.styles.ts","../../src/components/ui/Kpi/kpi-group.tsx","../../src/components/ui/Kpi/kpi.tsx","../../src/components/ui/Kpi/kpi-delta.tsx"],"sourcesContent":["import { tv } from \"@/utils/tv\";\r\n\r\n/* ══════════════════════════════════════════════════════════════════════════\r\n Kpi — estilos (tv). 100% sobre tokens do DS, theme-aware.\r\n ══════════════════════════════════════════════════════════════════════════ */\r\n\r\nexport const kpi = tv({\r\n slots: {\r\n root: \"flex flex-col gap-gp-lg\",\r\n header: \"flex items-start justify-between gap-gp-md\",\r\n label: \"m-0 text-body-md font-semibold text-fg-default\",\r\n iconBox:\r\n \"grid size-form-lg shrink-0 place-items-center rounded-radius-lg [&>svg]:size-icon-md\",\r\n main: \"flex flex-col gap-gp-xs\",\r\n valueRow: \"flex flex-wrap items-center gap-gp-md\",\r\n value:\r\n \"leading-none text-fg-default [font-variant-numeric:tabular-nums]\",\r\n hint: \"text-caption-sm text-fg-subtle\",\r\n chart: \"mt-gp-xs\",\r\n footnote:\r\n \"mt-pad-md border-t border-border-subtle pt-pad-lg text-caption-md text-fg-muted\",\r\n },\r\n variants: {\r\n // Tamanho do valor de destaque — presets `stat-*` (número de métrica).\r\n // Default `md` (24px) = idêntico ao antigo `body-2xl`. Weight/leading tight\r\n // vêm do preset + slot; pareado com tabular-nums.\r\n size: {\r\n sm: { value: \"text-stat-sm\" },\r\n md: { value: \"text-stat-md\" },\r\n lg: { value: \"text-stat-lg\" },\r\n xl: { value: \"text-stat-xl\" },\r\n },\r\n surface: {\r\n card: {\r\n root: \"rounded-radius-xl border border-border-subtle bg-bg-surface p-pad-3xl shadow-sh-sm\",\r\n },\r\n plain: { root: \"p-pad-3xl\" },\r\n },\r\n tone: {\r\n brand: { iconBox: \"bg-bg-brand-subtle text-fg-brand\" },\r\n success: { iconBox: \"bg-bg-success-muted text-fg-success\" },\r\n warning: { iconBox: \"bg-bg-warning-muted text-fg-warning\" },\r\n info: { iconBox: \"bg-bg-info-muted text-fg-info\" },\r\n danger: { iconBox: \"bg-bg-danger-muted text-fg-danger\" },\r\n neutral: { iconBox: \"bg-bg-muted text-fg-muted\" },\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n surface: \"card\",\r\n tone: \"neutral\",\r\n },\r\n});\r\n\r\nexport const kpiGroup = tv({\r\n base: \"grid w-full\",\r\n variants: {\r\n columns: {\r\n 2: \"grid-cols-1 sm:grid-cols-2\",\r\n 3: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\r\n 4: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4\",\r\n 5: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-5\",\r\n 6: \"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6\",\r\n },\r\n divided: {\r\n // 1 card único com divisórias (linha no mobile, coluna no sm+)\r\n true: \"overflow-hidden rounded-radius-xl border border-border-subtle bg-bg-surface shadow-sh-sm divide-y divide-border-subtle sm:divide-y-0 sm:divide-x\",\r\n false: \"gap-gp-2xl\",\r\n },\r\n },\r\n defaultVariants: {\r\n columns: 4,\r\n divided: false,\r\n },\r\n});\r\n","\"use client\";\r\n\r\nimport { createContext } from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { kpiGroup } from \"./kpi.styles\";\r\nimport type { KpiGroupProps } from \"./kpi.types\";\r\n\r\n/** Superfície herdada pelos `Kpi` filhos (card normal vs plain dentro de divided). */\r\nexport const KpiSurfaceContext = createContext<\"card\" | \"plain\">(\"card\");\r\n\r\n/**\r\n * KpiGroup — layout de composição pros `Kpi`. `columns` (responsivo) e\r\n * `divided` (vira 1 card único com divisórias entre os KPIs).\r\n */\r\nexport function KpiGroup({\r\n columns = 4,\r\n divided = false,\r\n children,\r\n className,\r\n}: KpiGroupProps) {\r\n return (\r\n <KpiSurfaceContext.Provider value={divided ? \"plain\" : \"card\"}>\r\n <div className={cn(kpiGroup({ columns, divided }), className)}>\r\n {children}\r\n </div>\r\n </KpiSurfaceContext.Provider>\r\n );\r\n}\r\n\r\nKpiGroup.displayName = \"KpiGroup\";\r\n","\"use client\";\r\n\r\nimport { useContext } from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { kpi } from \"./kpi.styles\";\r\nimport { KpiSurfaceContext } from \"./kpi-group\";\r\nimport type { KpiProps } from \"./kpi.types\";\r\n\r\n/**\r\n * Kpi — card de KPI composável: header (label + ícone por tone), valor +\r\n * delta, hint, slot livre (sparkline/chart) e footnote. Use dentro de\r\n * `KpiGroup` pra rows/grids; dentro de `KpiGroup divided` ele vira \"plain\".\r\n */\r\nexport function Kpi({\r\n label,\r\n value,\r\n delta,\r\n hint,\r\n icon,\r\n tone = \"neutral\",\r\n size = \"md\",\r\n footnote,\r\n children,\r\n surface,\r\n className,\r\n}: KpiProps) {\r\n const inherited = useContext(KpiSurfaceContext);\r\n const s = kpi({ size, surface: surface ?? inherited, tone });\r\n\r\n return (\r\n <article className={cn(s.root(), className)}>\r\n <header className={s.header()}>\r\n <h3 className={s.label()}>{label}</h3>\r\n {icon && (\r\n <span className={s.iconBox()} aria-hidden>\r\n {icon}\r\n </span>\r\n )}\r\n </header>\r\n <div className={s.main()}>\r\n <div className={s.valueRow()}>\r\n <span className={s.value()}>{value}</span>\r\n {delta}\r\n </div>\r\n {hint && <span className={s.hint()}>{hint}</span>}\r\n </div>\r\n {children && <div className={s.chart()}>{children}</div>}\r\n {footnote && <div className={s.footnote()}>{footnote}</div>}\r\n </article>\r\n );\r\n}\r\n\r\nKpi.displayName = \"Kpi\";\r\n","\"use client\";\r\n\r\nimport { TrendingUp } from \"lucide-react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Chip } from \"@/components/ui/Chip\";\r\nimport type { KpiDeltaProps } from \"./kpi.types\";\r\n\r\n/**\r\n * KpiDelta — pílula de variação (sobre o Chip). Tom semântico explícito\r\n * (success/danger/neutral) + seta opcional. O tom é decisão do consumidor —\r\n * \"subir\" nem sempre é positivo (ex.: tempo de espera).\r\n *\r\n * `signed` deriva tom+seta do sinal do `value` (\"-\" → danger/down; senão\r\n * success/up). `tone`/`direction` explícitos sempre vencem.\r\n */\r\nexport function KpiDelta({\r\n value,\r\n tone,\r\n direction,\r\n signed = false,\r\n className,\r\n}: KpiDeltaProps) {\r\n const isNegative =\r\n signed && typeof value === \"string\" && value.trim().startsWith(\"-\");\r\n const resolvedTone = tone ?? (signed ? (isNegative ? \"danger\" : \"success\") : \"success\");\r\n const resolvedDirection = direction ?? (signed ? (isNegative ? \"down\" : \"up\") : undefined);\r\n\r\n return (\r\n <Chip\r\n color={resolvedTone}\r\n variant=\"soft\"\r\n size=\"sm\"\r\n shape=\"pill\"\r\n className={className}\r\n >\r\n {resolvedDirection && (\r\n <TrendingUp\r\n className={cn(\"size-[12px]\", resolvedDirection === \"down\" && \"rotate-180\")}\r\n aria-hidden\r\n />\r\n )}\r\n {value}\r\n </Chip>\r\n );\r\n}\r\n\r\nKpiDelta.displayName = \"KpiDelta\";\r\n"],"names":["tv","createContext","jsx","cn","useContext","jsxs","Chip","TrendingUp"],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext } from "react";
|
|
3
|
+
import { t as tv, c as cn, C as Chip } from "./app-shell-78w0pYdP.mjs";
|
|
4
|
+
import { TrendingUp } from "lucide-react";
|
|
5
|
+
const kpi = tv({
|
|
6
|
+
slots: {
|
|
7
|
+
root: "flex flex-col gap-gp-lg",
|
|
8
|
+
header: "flex items-start justify-between gap-gp-md",
|
|
9
|
+
label: "m-0 text-body-md font-semibold text-fg-default",
|
|
10
|
+
iconBox: "grid size-form-lg shrink-0 place-items-center rounded-radius-lg [&>svg]:size-icon-md",
|
|
11
|
+
main: "flex flex-col gap-gp-xs",
|
|
12
|
+
valueRow: "flex flex-wrap items-center gap-gp-md",
|
|
13
|
+
value: "leading-none text-fg-default [font-variant-numeric:tabular-nums]",
|
|
14
|
+
hint: "text-caption-sm text-fg-subtle",
|
|
15
|
+
chart: "mt-gp-xs",
|
|
16
|
+
footnote: "mt-pad-md border-t border-border-subtle pt-pad-lg text-caption-md text-fg-muted"
|
|
17
|
+
},
|
|
18
|
+
variants: {
|
|
19
|
+
// Tamanho do valor de destaque — presets `stat-*` (número de métrica).
|
|
20
|
+
// Default `md` (24px) = idêntico ao antigo `body-2xl`. Weight/leading tight
|
|
21
|
+
// vêm do preset + slot; pareado com tabular-nums.
|
|
22
|
+
size: {
|
|
23
|
+
sm: { value: "text-stat-sm" },
|
|
24
|
+
md: { value: "text-stat-md" },
|
|
25
|
+
lg: { value: "text-stat-lg" },
|
|
26
|
+
xl: { value: "text-stat-xl" }
|
|
27
|
+
},
|
|
28
|
+
surface: {
|
|
29
|
+
card: {
|
|
30
|
+
root: "rounded-radius-xl border border-border-subtle bg-bg-surface p-pad-3xl shadow-sh-sm"
|
|
31
|
+
},
|
|
32
|
+
plain: { root: "p-pad-3xl" }
|
|
33
|
+
},
|
|
34
|
+
tone: {
|
|
35
|
+
brand: { iconBox: "bg-bg-brand-subtle text-fg-brand" },
|
|
36
|
+
success: { iconBox: "bg-bg-success-muted text-fg-success" },
|
|
37
|
+
warning: { iconBox: "bg-bg-warning-muted text-fg-warning" },
|
|
38
|
+
info: { iconBox: "bg-bg-info-muted text-fg-info" },
|
|
39
|
+
danger: { iconBox: "bg-bg-danger-muted text-fg-danger" },
|
|
40
|
+
neutral: { iconBox: "bg-bg-muted text-fg-muted" }
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
defaultVariants: {
|
|
44
|
+
size: "md",
|
|
45
|
+
surface: "card",
|
|
46
|
+
tone: "neutral"
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
const kpiGroup = tv({
|
|
50
|
+
base: "grid w-full",
|
|
51
|
+
variants: {
|
|
52
|
+
columns: {
|
|
53
|
+
2: "grid-cols-1 sm:grid-cols-2",
|
|
54
|
+
3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
|
|
55
|
+
4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",
|
|
56
|
+
5: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-5",
|
|
57
|
+
6: "grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6"
|
|
58
|
+
},
|
|
59
|
+
divided: {
|
|
60
|
+
// 1 card único com divisórias (linha no mobile, coluna no sm+)
|
|
61
|
+
true: "overflow-hidden rounded-radius-xl border border-border-subtle bg-bg-surface shadow-sh-sm divide-y divide-border-subtle sm:divide-y-0 sm:divide-x",
|
|
62
|
+
false: "gap-gp-2xl"
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
defaultVariants: {
|
|
66
|
+
columns: 4,
|
|
67
|
+
divided: false
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
const KpiSurfaceContext = createContext("card");
|
|
71
|
+
function KpiGroup({
|
|
72
|
+
columns = 4,
|
|
73
|
+
divided = false,
|
|
74
|
+
children,
|
|
75
|
+
className
|
|
76
|
+
}) {
|
|
77
|
+
return /* @__PURE__ */ jsx(KpiSurfaceContext.Provider, { value: divided ? "plain" : "card", children: /* @__PURE__ */ jsx("div", { className: cn(kpiGroup({ columns, divided }), className), children }) });
|
|
78
|
+
}
|
|
79
|
+
KpiGroup.displayName = "KpiGroup";
|
|
80
|
+
function Kpi({
|
|
81
|
+
label,
|
|
82
|
+
value,
|
|
83
|
+
delta,
|
|
84
|
+
hint,
|
|
85
|
+
icon,
|
|
86
|
+
tone = "neutral",
|
|
87
|
+
size = "md",
|
|
88
|
+
footnote,
|
|
89
|
+
children,
|
|
90
|
+
surface,
|
|
91
|
+
className
|
|
92
|
+
}) {
|
|
93
|
+
const inherited = useContext(KpiSurfaceContext);
|
|
94
|
+
const s = kpi({ size, surface: surface ?? inherited, tone });
|
|
95
|
+
return /* @__PURE__ */ jsxs("article", { className: cn(s.root(), className), children: [
|
|
96
|
+
/* @__PURE__ */ jsxs("header", { className: s.header(), children: [
|
|
97
|
+
/* @__PURE__ */ jsx("h3", { className: s.label(), children: label }),
|
|
98
|
+
icon && /* @__PURE__ */ jsx("span", { className: s.iconBox(), "aria-hidden": true, children: icon })
|
|
99
|
+
] }),
|
|
100
|
+
/* @__PURE__ */ jsxs("div", { className: s.main(), children: [
|
|
101
|
+
/* @__PURE__ */ jsxs("div", { className: s.valueRow(), children: [
|
|
102
|
+
/* @__PURE__ */ jsx("span", { className: s.value(), children: value }),
|
|
103
|
+
delta
|
|
104
|
+
] }),
|
|
105
|
+
hint && /* @__PURE__ */ jsx("span", { className: s.hint(), children: hint })
|
|
106
|
+
] }),
|
|
107
|
+
children && /* @__PURE__ */ jsx("div", { className: s.chart(), children }),
|
|
108
|
+
footnote && /* @__PURE__ */ jsx("div", { className: s.footnote(), children: footnote })
|
|
109
|
+
] });
|
|
110
|
+
}
|
|
111
|
+
Kpi.displayName = "Kpi";
|
|
112
|
+
function KpiDelta({
|
|
113
|
+
value,
|
|
114
|
+
tone,
|
|
115
|
+
direction,
|
|
116
|
+
signed = false,
|
|
117
|
+
className
|
|
118
|
+
}) {
|
|
119
|
+
const isNegative = signed && typeof value === "string" && value.trim().startsWith("-");
|
|
120
|
+
const resolvedTone = tone ?? (signed ? isNegative ? "danger" : "success" : "success");
|
|
121
|
+
const resolvedDirection = direction ?? (signed ? isNegative ? "down" : "up" : void 0);
|
|
122
|
+
return /* @__PURE__ */ jsxs(
|
|
123
|
+
Chip,
|
|
124
|
+
{
|
|
125
|
+
color: resolvedTone,
|
|
126
|
+
variant: "soft",
|
|
127
|
+
size: "sm",
|
|
128
|
+
shape: "pill",
|
|
129
|
+
className,
|
|
130
|
+
children: [
|
|
131
|
+
resolvedDirection && /* @__PURE__ */ jsx(
|
|
132
|
+
TrendingUp,
|
|
133
|
+
{
|
|
134
|
+
className: cn("size-[12px]", resolvedDirection === "down" && "rotate-180"),
|
|
135
|
+
"aria-hidden": true
|
|
136
|
+
}
|
|
137
|
+
),
|
|
138
|
+
value
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
KpiDelta.displayName = "KpiDelta";
|
|
144
|
+
export {
|
|
145
|
+
KpiGroup as K,
|
|
146
|
+
Kpi as a,
|
|
147
|
+
KpiDelta as b
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=kpi-delta-DpYuDY4h.mjs.map
|