@snksergio/design-system 0.40.0 → 0.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/chunks/{avatar-DQYiVRlE.mjs → avatar-DFWEwBKu.mjs} +101 -51
- package/dist-lib/chunks/avatar-DFWEwBKu.mjs.map +1 -0
- package/dist-lib/chunks/{avatar-BiaG9OJS.cjs → avatar-eM5txRFZ.cjs} +53 -1
- package/dist-lib/chunks/avatar-eM5txRFZ.cjs.map +1 -0
- package/dist-lib/chunks/{input-CaC0B-_v.mjs → input-CfmzMYtd.mjs} +2 -2
- package/dist-lib/chunks/{input-CaC0B-_v.mjs.map → input-CfmzMYtd.mjs.map} +1 -1
- package/dist-lib/chunks/{input-DMH5rSP1.cjs → input-az2SuVXQ.cjs} +2 -2
- package/dist-lib/chunks/{input-DMH5rSP1.cjs.map → input-az2SuVXQ.cjs.map} +1 -1
- package/dist-lib/chunks/{kpi-delta-NnEu4oIs.cjs → kpi-delta-DAfakvFp.cjs} +3 -3
- package/dist-lib/chunks/{kpi-delta-NnEu4oIs.cjs.map → kpi-delta-DAfakvFp.cjs.map} +1 -1
- package/dist-lib/chunks/{kpi-delta-CjR0OsdC.mjs → kpi-delta-DaDwKOaP.mjs} +3 -3
- package/dist-lib/chunks/{kpi-delta-CjR0OsdC.mjs.map → kpi-delta-DaDwKOaP.mjs.map} +1 -1
- package/dist-lib/chunks/{page-header-DEGbgT4w.mjs → page-header--cPS_Z-a.mjs} +2 -2
- package/dist-lib/chunks/{page-header-DEGbgT4w.mjs.map → page-header--cPS_Z-a.mjs.map} +1 -1
- package/dist-lib/chunks/{page-header-Cp_9Wog4.cjs → page-header-DvAJoEfb.cjs} +2 -2
- package/dist-lib/chunks/{page-header-Cp_9Wog4.cjs.map → page-header-DvAJoEfb.cjs.map} +1 -1
- package/dist-lib/chunks/{panel-B1xKDbjB.mjs → panel-Bje0kUTh.mjs} +5 -5
- package/dist-lib/chunks/{panel-B1xKDbjB.mjs.map → panel-Bje0kUTh.mjs.map} +1 -1
- package/dist-lib/chunks/{panel-ma7e3s4C.cjs → panel-DtU3KlKY.cjs} +5 -5
- package/dist-lib/chunks/{panel-ma7e3s4C.cjs.map → panel-DtU3KlKY.cjs.map} +1 -1
- package/dist-lib/chunks/{textarea-DivoQmJw.mjs → textarea-BPRIHZVd.mjs} +2 -2
- package/dist-lib/chunks/{textarea-DivoQmJw.mjs.map → textarea-BPRIHZVd.mjs.map} +1 -1
- package/dist-lib/chunks/{textarea-c80RFmMP.cjs → textarea-K20CL_gF.cjs} +2 -2
- package/dist-lib/chunks/{textarea-c80RFmMP.cjs.map → textarea-K20CL_gF.cjs.map} +1 -1
- package/dist-lib/chunks/{tooltip-pvZ_X-Ub.cjs → toggle-group-BEPs3e0Y.cjs} +2 -54
- package/dist-lib/chunks/toggle-group-BEPs3e0Y.cjs.map +1 -0
- package/dist-lib/chunks/{tooltip-mMF4YHZg.mjs → toggle-group-XMO6ReVo.mjs} +77 -127
- package/dist-lib/chunks/toggle-group-XMO6ReVo.mjs.map +1 -0
- package/dist-lib/chunks/{useTheme-BD0nloAv.cjs → useTheme-3iZAognE.cjs} +876 -73
- package/dist-lib/chunks/useTheme-3iZAognE.cjs.map +1 -0
- package/dist-lib/chunks/{useTheme-D1QVzZDW.mjs → useTheme-B3ZakPqk.mjs} +886 -83
- package/dist-lib/chunks/useTheme-B3ZakPqk.mjs.map +1 -0
- package/dist-lib/index.cjs +40 -732
- package/dist-lib/index.cjs.map +1 -1
- package/dist-lib/index.mjs +94 -786
- package/dist-lib/index.mjs.map +1 -1
- package/dist-lib/preview/chat.cjs +3 -3
- package/dist-lib/preview/chat.mjs +3 -3
- package/dist-lib/preview/clientes.cjs +6 -6
- package/dist-lib/preview/clientes.mjs +6 -6
- package/dist-lib/preview/dashboard.cjs +4 -4
- package/dist-lib/preview/dashboard.mjs +4 -4
- package/dist-lib/shadcn.cjs +112 -112
- package/dist-lib/shadcn.mjs +136 -136
- package/dist-lib/src/components/ui/AppShell/app-shell.d.ts +1 -1
- package/dist-lib/src/components/ui/AppShell/app-shell.d.ts.map +1 -1
- package/dist-lib/src/components/ui/AppShell/app-shell.styles.d.ts +45 -1
- package/dist-lib/src/components/ui/AppShell/app-shell.styles.d.ts.map +1 -1
- package/dist-lib/src/components/ui/AppShell/app-shell.types.d.ts +106 -3
- package/dist-lib/src/components/ui/AppShell/app-shell.types.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MenuSidebar/index.d.ts +2 -2
- package/dist-lib/src/components/ui/MenuSidebar/index.d.ts.map +1 -1
- package/dist-lib/src/components/ui/SingleMenuSidebar/category.d.ts +1 -1
- package/dist-lib/src/components/ui/SingleMenuSidebar/category.d.ts.map +1 -1
- package/dist-lib/src/components/ui/SingleMenuSidebar/menu-item.d.ts +25 -1
- package/dist-lib/src/components/ui/SingleMenuSidebar/menu-item.d.ts.map +1 -1
- package/dist-lib/src/components/ui/SingleMenuSidebar/single-menu-sidebar.d.ts +1 -1
- package/dist-lib/src/components/ui/SingleMenuSidebar/single-menu-sidebar.d.ts.map +1 -1
- package/dist-lib/src/components/ui/SingleMenuSidebar/single-menu-sidebar.types.d.ts +57 -2
- package/dist-lib/src/components/ui/SingleMenuSidebar/single-menu-sidebar.types.d.ts.map +1 -1
- package/dist-lib/src/utils/nav-link.d.ts.map +1 -0
- package/package.json +207 -207
- package/dist-lib/chunks/avatar-BiaG9OJS.cjs.map +0 -1
- package/dist-lib/chunks/avatar-DQYiVRlE.mjs.map +0 -1
- package/dist-lib/chunks/tooltip-mMF4YHZg.mjs.map +0 -1
- package/dist-lib/chunks/tooltip-pvZ_X-Ub.cjs.map +0 -1
- package/dist-lib/chunks/useTheme-BD0nloAv.cjs.map +0 -1
- package/dist-lib/chunks/useTheme-D1QVzZDW.mjs.map +0 -1
- package/dist-lib/src/components/ui/MenuSidebar/nav-link.d.ts.map +0 -1
- /package/dist-lib/src/{components/ui/MenuSidebar → utils}/nav-link.d.ts +0 -0
package/dist-lib/index.cjs
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const panel = require("./chunks/panel-
|
|
4
|
-
const useTheme = require("./chunks/useTheme-
|
|
5
|
-
const avatar = require("./chunks/avatar-
|
|
3
|
+
const panel = require("./chunks/panel-DtU3KlKY.cjs");
|
|
4
|
+
const useTheme = require("./chunks/useTheme-3iZAognE.cjs");
|
|
5
|
+
const avatar = require("./chunks/avatar-eM5txRFZ.cjs");
|
|
6
6
|
const jsxRuntime = require("react/jsx-runtime");
|
|
7
7
|
const React = require("react");
|
|
8
|
-
const textarea = require("./chunks/textarea-
|
|
8
|
+
const textarea = require("./chunks/textarea-K20CL_gF.cjs");
|
|
9
9
|
const lucideReact = require("lucide-react");
|
|
10
|
-
const
|
|
10
|
+
const toggleGroup = require("./chunks/toggle-group-BEPs3e0Y.cjs");
|
|
11
11
|
require("@radix-ui/react-aspect-ratio");
|
|
12
12
|
require("react-day-picker");
|
|
13
13
|
require("@radix-ui/react-collapsible");
|
|
14
|
-
const input = require("./chunks/input-
|
|
14
|
+
const input = require("./chunks/input-az2SuVXQ.cjs");
|
|
15
15
|
const sonner = require("sonner");
|
|
16
|
-
const kpiDelta = require("./chunks/kpi-delta-
|
|
17
|
-
const pageHeader = require("./chunks/page-header-
|
|
16
|
+
const kpiDelta = require("./chunks/kpi-delta-DAfakvFp.cjs");
|
|
17
|
+
const pageHeader = require("./chunks/page-header-DvAJoEfb.cjs");
|
|
18
18
|
const RechartsPrimitive = require("recharts");
|
|
19
19
|
const reactVirtual = require("@tanstack/react-virtual");
|
|
20
20
|
require("@hello-pangea/dnd");
|
|
@@ -342,7 +342,7 @@ const ColorPicker = React.forwardRef(
|
|
|
342
342
|
}
|
|
343
343
|
),
|
|
344
344
|
allowCustomHex && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
345
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
345
|
+
/* @__PURE__ */ jsxRuntime.jsx(toggleGroup.Separator, {}),
|
|
346
346
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles2.customRow(), children: [
|
|
347
347
|
/* @__PURE__ */ jsxRuntime.jsx(panel.FormField, { label: "Cor personalizada", id: `${id}-custom`, children: ({ id: customId }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
348
348
|
input.Input,
|
|
@@ -3661,9 +3661,9 @@ function DateSeparatorChip({
|
|
|
3661
3661
|
label
|
|
3662
3662
|
] });
|
|
3663
3663
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { role: "separator", "aria-label": label, className: avatar.cn(styles2.root(), className), children: isBoundary ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
3664
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3664
|
+
/* @__PURE__ */ jsxRuntime.jsx(toggleGroup.Separator, { decorative: true, className: styles2.rule() }),
|
|
3665
3665
|
chip,
|
|
3666
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3666
|
+
/* @__PURE__ */ jsxRuntime.jsx(toggleGroup.Separator, { decorative: true, className: styles2.rule() })
|
|
3667
3667
|
] }) : chip });
|
|
3668
3668
|
}
|
|
3669
3669
|
const emptyStateStyles = avatar.tv({
|
|
@@ -4047,7 +4047,7 @@ const messageBubbleStyles = avatar.tv({
|
|
|
4047
4047
|
tail: true
|
|
4048
4048
|
}
|
|
4049
4049
|
});
|
|
4050
|
-
const styles
|
|
4050
|
+
const styles = messageBubbleStyles();
|
|
4051
4051
|
function handleMediaKeyDown(event, onMediaClick) {
|
|
4052
4052
|
if (!onMediaClick) return;
|
|
4053
4053
|
if (event.key === "Enter" || event.key === " ") {
|
|
@@ -4082,12 +4082,12 @@ function MessageMediaRenderer({
|
|
|
4082
4082
|
}) {
|
|
4083
4083
|
switch (mediaType) {
|
|
4084
4084
|
case "image":
|
|
4085
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles
|
|
4085
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.media(), children: mediaUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
4086
4086
|
"img",
|
|
4087
4087
|
{
|
|
4088
4088
|
src: mediaUrl,
|
|
4089
4089
|
alt: body2 || "Imagem",
|
|
4090
|
-
className: styles
|
|
4090
|
+
className: styles.mediaImage(),
|
|
4091
4091
|
role: onMediaClick ? "button" : void 0,
|
|
4092
4092
|
tabIndex: onMediaClick ? 0 : void 0,
|
|
4093
4093
|
onClick: onMediaClick,
|
|
@@ -4095,19 +4095,19 @@ function MessageMediaRenderer({
|
|
|
4095
4095
|
}
|
|
4096
4096
|
) : null });
|
|
4097
4097
|
case "audio":
|
|
4098
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles
|
|
4098
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.media(), children: mediaUrl ? (
|
|
4099
4099
|
// eslint-disable-next-line jsx-a11y/media-has-caption
|
|
4100
|
-
/* @__PURE__ */ jsxRuntime.jsx("audio", { controls: true, src: mediaUrl, className: styles
|
|
4100
|
+
/* @__PURE__ */ jsxRuntime.jsx("audio", { controls: true, src: mediaUrl, className: styles.mediaAudio() })
|
|
4101
4101
|
) : null });
|
|
4102
4102
|
case "video":
|
|
4103
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles
|
|
4103
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.media(), children: mediaUrl ? (
|
|
4104
4104
|
// eslint-disable-next-line jsx-a11y/media-has-caption
|
|
4105
4105
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4106
4106
|
"video",
|
|
4107
4107
|
{
|
|
4108
4108
|
controls: true,
|
|
4109
4109
|
src: mediaUrl,
|
|
4110
|
-
className: styles
|
|
4110
|
+
className: styles.mediaVideo(),
|
|
4111
4111
|
role: onMediaClick ? "button" : void 0,
|
|
4112
4112
|
tabIndex: onMediaClick ? 0 : void 0,
|
|
4113
4113
|
onClick: onMediaClick,
|
|
@@ -4116,18 +4116,18 @@ function MessageMediaRenderer({
|
|
|
4116
4116
|
)
|
|
4117
4117
|
) : null });
|
|
4118
4118
|
case "document":
|
|
4119
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles
|
|
4119
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.mediaDoc(), children: [
|
|
4120
4120
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4121
4121
|
Icon,
|
|
4122
4122
|
{
|
|
4123
4123
|
name: "line-file",
|
|
4124
4124
|
size: "lg",
|
|
4125
|
-
className: styles
|
|
4125
|
+
className: styles.mediaDocIcon()
|
|
4126
4126
|
}
|
|
4127
4127
|
),
|
|
4128
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles
|
|
4129
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: styles
|
|
4130
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: styles
|
|
4128
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.mediaDocInfo(), children: [
|
|
4129
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.mediaDocName(), children: body2 || "Documento" }),
|
|
4130
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.mediaDocHint(), children: "Toque para baixar" })
|
|
4131
4131
|
] }),
|
|
4132
4132
|
mediaUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
4133
4133
|
avatar.Button,
|
|
@@ -4149,7 +4149,7 @@ function MessageMediaRenderer({
|
|
|
4149
4149
|
href: mediaUrl,
|
|
4150
4150
|
target: "_blank",
|
|
4151
4151
|
rel: "noopener noreferrer",
|
|
4152
|
-
className: styles
|
|
4152
|
+
className: styles.mediaLocation(),
|
|
4153
4153
|
onClick: onMediaClick,
|
|
4154
4154
|
children: [
|
|
4155
4155
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -4157,37 +4157,37 @@ function MessageMediaRenderer({
|
|
|
4157
4157
|
{
|
|
4158
4158
|
name: "line-pin",
|
|
4159
4159
|
size: "md",
|
|
4160
|
-
className: styles
|
|
4160
|
+
className: styles.mediaLocationIcon()
|
|
4161
4161
|
}
|
|
4162
4162
|
),
|
|
4163
4163
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: body2 || "Ver localização" })
|
|
4164
4164
|
]
|
|
4165
4165
|
}
|
|
4166
|
-
) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles
|
|
4166
|
+
) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.mediaLocation(), children: [
|
|
4167
4167
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4168
4168
|
Icon,
|
|
4169
4169
|
{
|
|
4170
4170
|
name: "line-pin",
|
|
4171
4171
|
size: "md",
|
|
4172
|
-
className: styles
|
|
4172
|
+
className: styles.mediaLocationIcon()
|
|
4173
4173
|
}
|
|
4174
4174
|
),
|
|
4175
4175
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: body2 || "Localização" })
|
|
4176
4176
|
] });
|
|
4177
4177
|
case "vcard":
|
|
4178
4178
|
case "contact":
|
|
4179
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles
|
|
4179
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.mediaContact(), children: [
|
|
4180
4180
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4181
4181
|
Icon,
|
|
4182
4182
|
{
|
|
4183
4183
|
name: "line-user",
|
|
4184
4184
|
size: "lg",
|
|
4185
|
-
className: styles
|
|
4185
|
+
className: styles.mediaDocIcon()
|
|
4186
4186
|
}
|
|
4187
4187
|
),
|
|
4188
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles
|
|
4189
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: styles
|
|
4190
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: styles
|
|
4188
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.mediaContactInfo(), children: [
|
|
4189
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.mediaContactName(), children: body2 || "Contato" }),
|
|
4190
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.mediaContactHint(), children: "Cartão de contato" })
|
|
4191
4191
|
] })
|
|
4192
4192
|
] });
|
|
4193
4193
|
case "text":
|
|
@@ -4402,7 +4402,7 @@ const MessageComposer = React.forwardRef(function MessageComposer2({
|
|
|
4402
4402
|
replyPreview ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles2.replyPreview(), children: replyPreview }) : null,
|
|
4403
4403
|
banner ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles2.banner(), children: banner }) : null,
|
|
4404
4404
|
!isReadOnly && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
4405
|
-
(replyPreview || banner) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4405
|
+
(replyPreview || banner) && /* @__PURE__ */ jsxRuntime.jsx(toggleGroup.Separator, {}),
|
|
4406
4406
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles2.field(), children: [
|
|
4407
4407
|
toolbarStart ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles2.toolbarStart(), children: toolbarStart }) : null,
|
|
4408
4408
|
recording ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles2.recording(), children: recording }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles2.inputArea(), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -4523,7 +4523,7 @@ function MessageVariablesPicker({
|
|
|
4523
4523
|
/* @__PURE__ */ jsxRuntime.jsx(avatar.PopoverContent, { align: "start", sideOffset: 6, mobileSheet: true, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles2.content(), children: [
|
|
4524
4524
|
variables.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
4525
4525
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: styles2.header(), children: "Variáveis disponíveis" }),
|
|
4526
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4526
|
+
/* @__PURE__ */ jsxRuntime.jsx(toggleGroup.Separator, {})
|
|
4527
4527
|
] }),
|
|
4528
4528
|
variables.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles2.empty(), children: "Nenhuma variável disponível" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles2.list(), children: variables.map((variable) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
4529
4529
|
useTheme.Chip,
|
|
@@ -4983,698 +4983,6 @@ const MonthYearPicker = React.forwardRef(function MonthYearPicker2({
|
|
|
4983
4983
|
] });
|
|
4984
4984
|
});
|
|
4985
4985
|
MonthYearPicker.displayName = "MonthYearPicker";
|
|
4986
|
-
const SingleMenuSidebarContext = React.createContext({
|
|
4987
|
-
expanded: true,
|
|
4988
|
-
isHoverExpand: false,
|
|
4989
|
-
toggle: () => {
|
|
4990
|
-
},
|
|
4991
|
-
openCategoryId: null,
|
|
4992
|
-
setOpenCategoryId: () => {
|
|
4993
|
-
}
|
|
4994
|
-
});
|
|
4995
|
-
function useSingleMenuSidebar() {
|
|
4996
|
-
return React.useContext(SingleMenuSidebarContext);
|
|
4997
|
-
}
|
|
4998
|
-
function useSingleMenuSidebarState(defaultExpanded, controlledExpanded, onExpandedChange) {
|
|
4999
|
-
const [internal, setInternal] = React.useState(defaultExpanded);
|
|
5000
|
-
const isControlled = controlledExpanded !== void 0;
|
|
5001
|
-
const expanded = isControlled ? controlledExpanded : internal;
|
|
5002
|
-
const [lockedOpen, setLockedOpen] = React.useState(defaultExpanded);
|
|
5003
|
-
const [hoverOpen, setHoverOpen] = React.useState(false);
|
|
5004
|
-
const hoverTimeoutRef = React.useRef(null);
|
|
5005
|
-
const suppressHoverRef = React.useRef(false);
|
|
5006
|
-
const suppressTimerRef = React.useRef(null);
|
|
5007
|
-
const setExpanded = React.useCallback(
|
|
5008
|
-
(v) => {
|
|
5009
|
-
if (!isControlled) setInternal(v);
|
|
5010
|
-
onExpandedChange?.(v);
|
|
5011
|
-
},
|
|
5012
|
-
[isControlled, onExpandedChange]
|
|
5013
|
-
);
|
|
5014
|
-
const toggle = React.useCallback(() => {
|
|
5015
|
-
const next = !lockedOpen;
|
|
5016
|
-
setLockedOpen(next);
|
|
5017
|
-
setHoverOpen(false);
|
|
5018
|
-
if (!next) {
|
|
5019
|
-
suppressHoverRef.current = true;
|
|
5020
|
-
if (suppressTimerRef.current) clearTimeout(suppressTimerRef.current);
|
|
5021
|
-
suppressTimerRef.current = setTimeout(() => {
|
|
5022
|
-
suppressHoverRef.current = false;
|
|
5023
|
-
}, 500);
|
|
5024
|
-
}
|
|
5025
|
-
setExpanded(next);
|
|
5026
|
-
}, [lockedOpen, setExpanded]);
|
|
5027
|
-
const onMouseEnter = React.useCallback(() => {
|
|
5028
|
-
if (lockedOpen) return;
|
|
5029
|
-
if (suppressHoverRef.current) return;
|
|
5030
|
-
if (hoverTimeoutRef.current) {
|
|
5031
|
-
clearTimeout(hoverTimeoutRef.current);
|
|
5032
|
-
hoverTimeoutRef.current = null;
|
|
5033
|
-
}
|
|
5034
|
-
setHoverOpen(true);
|
|
5035
|
-
setExpanded(true);
|
|
5036
|
-
}, [lockedOpen, setExpanded]);
|
|
5037
|
-
const onMouseLeave = React.useCallback(() => {
|
|
5038
|
-
if (lockedOpen) return;
|
|
5039
|
-
hoverTimeoutRef.current = setTimeout(() => {
|
|
5040
|
-
setHoverOpen(false);
|
|
5041
|
-
setExpanded(false);
|
|
5042
|
-
}, 200);
|
|
5043
|
-
}, [lockedOpen, setExpanded]);
|
|
5044
|
-
React.useEffect(() => {
|
|
5045
|
-
return () => {
|
|
5046
|
-
if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current);
|
|
5047
|
-
if (suppressTimerRef.current) clearTimeout(suppressTimerRef.current);
|
|
5048
|
-
};
|
|
5049
|
-
}, []);
|
|
5050
|
-
const isHoverExpand = hoverOpen && !lockedOpen;
|
|
5051
|
-
const [openCategoryId, setOpenCategoryId] = React.useState(null);
|
|
5052
|
-
return {
|
|
5053
|
-
expanded,
|
|
5054
|
-
isHoverExpand,
|
|
5055
|
-
toggle,
|
|
5056
|
-
onMouseEnter,
|
|
5057
|
-
onMouseLeave,
|
|
5058
|
-
openCategoryId,
|
|
5059
|
-
setOpenCategoryId
|
|
5060
|
-
};
|
|
5061
|
-
}
|
|
5062
|
-
const sidebarRoot = avatar.tv({
|
|
5063
|
-
base: [
|
|
5064
|
-
"relative flex h-full flex-col overflow-x-hidden",
|
|
5065
|
-
"border-r border-border-sidebar bg-bg-sidebar",
|
|
5066
|
-
"transition-[width] duration-300 ease-in-out"
|
|
5067
|
-
],
|
|
5068
|
-
variants: {
|
|
5069
|
-
// Mobile (< md): expandida = 100% da largura; recolhida = SOME (hidden).
|
|
5070
|
-
// Desktop (md+): largura fixa, expandida (280px) ou recolhida (rail 80px).
|
|
5071
|
-
expanded: {
|
|
5072
|
-
true: "w-full md:w-[280px]",
|
|
5073
|
-
false: "hidden md:flex md:w-20"
|
|
5074
|
-
}
|
|
5075
|
-
},
|
|
5076
|
-
defaultVariants: {
|
|
5077
|
-
expanded: true
|
|
5078
|
-
}
|
|
5079
|
-
});
|
|
5080
|
-
const category = avatar.tv({
|
|
5081
|
-
slots: {
|
|
5082
|
-
root: "flex items-center rounded-radius-lg cursor-pointer transition-all",
|
|
5083
|
-
text: "flex-1 text-left text-body-sm whitespace-nowrap overflow-hidden text-ellipsis",
|
|
5084
|
-
// SVG do consumidor (ícone bare do lucide vem 24px) dimensionado no slot → 18px
|
|
5085
|
-
icon: "grid size-[18px] shrink-0 place-items-center [&>svg]:size-[18px]",
|
|
5086
|
-
chevron: "size-icon-sm shrink-0 transition-transform"
|
|
5087
|
-
},
|
|
5088
|
-
variants: {
|
|
5089
|
-
// selected = folha ativa OU pai que contém o item ativo → card cheio
|
|
5090
|
-
// default = nada marcado (inclui pai apenas aberto, sem filho ativo)
|
|
5091
|
-
state: {
|
|
5092
|
-
selected: {
|
|
5093
|
-
root: "bg-bg-sidebar-accent shadow-sh-sm",
|
|
5094
|
-
text: "font-bold text-fg-brand",
|
|
5095
|
-
icon: "text-fg-brand",
|
|
5096
|
-
chevron: "text-fg-brand"
|
|
5097
|
-
},
|
|
5098
|
-
default: {
|
|
5099
|
-
root: "hover:bg-bg-sidebar-accent",
|
|
5100
|
-
text: "font-medium text-fg-default",
|
|
5101
|
-
icon: "text-fg-muted",
|
|
5102
|
-
chevron: "text-fg-subtle"
|
|
5103
|
-
}
|
|
5104
|
-
},
|
|
5105
|
-
collapsed: {
|
|
5106
|
-
true: { root: "justify-center px-0 size-form-xl" },
|
|
5107
|
-
false: { root: "w-full gap-gp-lg px-pad-2xl py-pad-xl" }
|
|
5108
|
-
}
|
|
5109
|
-
},
|
|
5110
|
-
defaultVariants: {
|
|
5111
|
-
state: "default",
|
|
5112
|
-
collapsed: false
|
|
5113
|
-
}
|
|
5114
|
-
});
|
|
5115
|
-
const menuItem = avatar.tv({
|
|
5116
|
-
slots: {
|
|
5117
|
-
root: "flex h-[38px] items-center gap-[18px] pl-[18px] pr-pad-2xl cursor-pointer transition-colors hover:bg-bg-sidebar-accent",
|
|
5118
|
-
border: "h-full w-0 shrink-0",
|
|
5119
|
-
text: "text-body-sm text-left"
|
|
5120
|
-
},
|
|
5121
|
-
variants: {
|
|
5122
|
-
selected: {
|
|
5123
|
-
true: {
|
|
5124
|
-
border: "border-l-[3px] border-border-brand",
|
|
5125
|
-
text: "font-semibold text-fg-default"
|
|
5126
|
-
},
|
|
5127
|
-
false: {
|
|
5128
|
-
border: "border-l border-border-subtle",
|
|
5129
|
-
text: "font-medium text-fg-muted"
|
|
5130
|
-
}
|
|
5131
|
-
}
|
|
5132
|
-
},
|
|
5133
|
-
defaultVariants: {
|
|
5134
|
-
selected: false
|
|
5135
|
-
}
|
|
5136
|
-
});
|
|
5137
|
-
const styles = {
|
|
5138
|
-
// Header
|
|
5139
|
-
header: {
|
|
5140
|
-
wrapper: "flex h-layout-navbar items-center overflow-hidden px-pad-4xl py-pad-md shrink-0",
|
|
5141
|
-
wrapperCollapsed: "justify-center px-0",
|
|
5142
|
-
inner: "flex items-center gap-gp-md",
|
|
5143
|
-
logo: "shrink-0",
|
|
5144
|
-
title: "text-title-sm font-bold text-fg-default whitespace-nowrap",
|
|
5145
|
-
collapseBtn: "ml-auto shrink-0 cursor-pointer rounded-radius-md p-pad-xs text-fg-subtle hover:bg-bg-sidebar-accent hover:text-fg-muted transition-colors",
|
|
5146
|
-
expandBtn: "absolute right-0 top-16 translate-x-1/2 z-10 cursor-pointer rounded-radius-full bg-bg-surface border border-border-default p-pad-xs shadow-sh-sm text-fg-subtle hover:text-fg-muted transition-colors",
|
|
5147
|
-
expandBtnIcon: "size-icon-sm"
|
|
5148
|
-
},
|
|
5149
|
-
// Module selector
|
|
5150
|
-
module: {
|
|
5151
|
-
trigger: "flex w-full cursor-pointer items-center gap-gp-lg rounded-radius-md bg-bg-sidebar-accent py-pad-md pl-pad-md pr-pad-2xl shadow-sh-sm transition-colors hover:bg-bg-sidebar-accent-hover focus-visible:outline-none focus-visible:ring-4 focus-visible:ring-ring-brand",
|
|
5152
|
-
iconContainer: "flex size-icon-xl shrink-0 items-center justify-center rounded-radius-md bg-bg-brand text-fg-on-brand",
|
|
5153
|
-
textContainer: "flex flex-col items-start gap-gp-xs overflow-hidden",
|
|
5154
|
-
title: "text-body-md font-bold leading-4 text-fg-default truncate text-left",
|
|
5155
|
-
subtitle: "text-caption-sm font-semibold text-fg-subtle text-left",
|
|
5156
|
-
chevron: "ml-auto shrink-0 size-icon-sm text-fg-subtle",
|
|
5157
|
-
dropdownItem: "flex items-center gap-gp-lg cursor-pointer",
|
|
5158
|
-
// selecionado: realça a linha (bg-brand-subtle) + label/check em fg-brand
|
|
5159
|
-
dropdownItemSelected: "bg-bg-brand-subtle text-fg-brand",
|
|
5160
|
-
// [&>svg]:!text-fg-on-brand: o DropdownMenuItem força [&_svg]:text-fg-muted
|
|
5161
|
-
// (+ fg-default no hover) em TODOS os svgs descendentes — o ! garante que o
|
|
5162
|
-
// ícone do chip siga fg-on-brand igual ao trigger (branco light / preto dark).
|
|
5163
|
-
dropdownItemIcon: "flex size-icon-lg shrink-0 items-center justify-center rounded-radius-sm bg-bg-brand [&>svg]:size-icon-sm [&>svg]:!text-fg-on-brand",
|
|
5164
|
-
dropdownItemLabel: "flex-1 text-body-md font-medium",
|
|
5165
|
-
dropdownItemCheck: "ml-auto shrink-0 size-icon-sm !text-fg-brand"
|
|
5166
|
-
},
|
|
5167
|
-
// Search
|
|
5168
|
-
search: {
|
|
5169
|
-
wrapper: "flex w-full items-center justify-between rounded-radius-lg bg-bg-muted py-pad-sm pl-pad-lg pr-pad-sm transition-all focus-within:bg-bg-surface focus-within:ring-4 focus-within:ring-ring-brand",
|
|
5170
|
-
inner: "flex flex-1 items-center gap-gp-md opacity-60 focus-within:opacity-100",
|
|
5171
|
-
icon: "shrink-0 size-icon-sm text-fg-muted",
|
|
5172
|
-
text: "text-body-sm font-medium text-fg-default placeholder:text-fg-subtle",
|
|
5173
|
-
shortcutBadge: "shrink-0 flex items-center justify-center rounded-radius-md bg-bg-surface px-pad-md py-pad-xs shadow-sh-sm",
|
|
5174
|
-
shortcutText: "text-body-sm font-medium text-fg-muted"
|
|
5175
|
-
},
|
|
5176
|
-
// Footer
|
|
5177
|
-
footer: {
|
|
5178
|
-
wrapper: "px-pad-lg py-pad-xl",
|
|
5179
|
-
button: "flex w-full cursor-pointer items-center gap-gp-lg rounded-radius-lg bg-bg-sidebar-accent px-pad-2xl py-pad-xl transition-colors hover:bg-bg-sidebar-accent-hover focus-visible:outline-none focus-visible:ring-4 focus-visible:ring-ring-brand",
|
|
5180
|
-
avatar: "flex size-form-sm shrink-0 items-center justify-center rounded-radius-full bg-bg-muted overflow-hidden",
|
|
5181
|
-
avatarIcon: "shrink-0 size-icon-sm text-fg-muted",
|
|
5182
|
-
textContainer: "flex flex-col items-start gap-gp-2xs overflow-hidden",
|
|
5183
|
-
name: "text-body-sm font-semibold text-fg-default truncate w-full text-left",
|
|
5184
|
-
email: "text-caption-sm font-medium text-fg-muted truncate w-full text-left",
|
|
5185
|
-
chevron: "ml-auto shrink-0 size-icon-sm text-fg-subtle",
|
|
5186
|
-
dropdownLabel: "flex flex-col gap-gp-2xs px-pad-sm py-pad-xs normal-case tracking-normal",
|
|
5187
|
-
dropdownLabelName: "text-body-md font-semibold",
|
|
5188
|
-
dropdownLabelEmail: "text-caption-md font-normal text-fg-muted",
|
|
5189
|
-
dropdownItem: "flex items-center gap-gp-md cursor-pointer",
|
|
5190
|
-
dropdownItemIcon: "size-icon-sm shrink-0"
|
|
5191
|
-
},
|
|
5192
|
-
// Layout
|
|
5193
|
-
// Fade do conteúdo textual durante a transição de largura (evita wrap visível)
|
|
5194
|
-
textFadeIn: "animate-in fade-in-0 duration-200",
|
|
5195
|
-
divider: "mx-pad-3xl h-px bg-border-sidebar",
|
|
5196
|
-
sectionPadding: "flex flex-col gap-gp-2xl px-pad-3xl py-pad-4xl shrink-0 overflow-hidden",
|
|
5197
|
-
navContainer: "scrollbar-thin flex flex-1 flex-col overflow-y-auto overflow-x-hidden py-pad-4xl",
|
|
5198
|
-
navContainerExpanded: "px-pad-3xl",
|
|
5199
|
-
navContainerCollapsed: "items-center",
|
|
5200
|
-
navList: "flex flex-col",
|
|
5201
|
-
subItemList: "flex flex-col py-pad-lg"
|
|
5202
|
-
};
|
|
5203
|
-
function SingleMenuHeader({
|
|
5204
|
-
logo,
|
|
5205
|
-
title: title2,
|
|
5206
|
-
showToggleIndicator = false
|
|
5207
|
-
}) {
|
|
5208
|
-
const { expanded, isHoverExpand, toggle } = useSingleMenuSidebar();
|
|
5209
|
-
const isFlipped = isHoverExpand || !expanded;
|
|
5210
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5211
|
-
"div",
|
|
5212
|
-
{
|
|
5213
|
-
className: avatar.cn(
|
|
5214
|
-
styles.header.wrapper,
|
|
5215
|
-
!expanded && styles.header.wrapperCollapsed
|
|
5216
|
-
),
|
|
5217
|
-
children: [
|
|
5218
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.header.inner, children: [
|
|
5219
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.header.logo, children: logo }),
|
|
5220
|
-
expanded && /* @__PURE__ */ jsxRuntime.jsx("span", { className: avatar.cn(styles.header.title, styles.textFadeIn), children: title2 })
|
|
5221
|
-
] }),
|
|
5222
|
-
expanded ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
5223
|
-
"button",
|
|
5224
|
-
{
|
|
5225
|
-
type: "button",
|
|
5226
|
-
onClick: toggle,
|
|
5227
|
-
className: styles.header.collapseBtn,
|
|
5228
|
-
"aria-label": isFlipped ? "Expandir sidebar" : "Recolher sidebar",
|
|
5229
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5230
|
-
lucideReact.PanelLeftClose,
|
|
5231
|
-
{
|
|
5232
|
-
className: avatar.cn(
|
|
5233
|
-
"size-icon-sm transition-transform duration-300",
|
|
5234
|
-
isFlipped && "rotate-180"
|
|
5235
|
-
)
|
|
5236
|
-
}
|
|
5237
|
-
)
|
|
5238
|
-
}
|
|
5239
|
-
) : showToggleIndicator ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
5240
|
-
"button",
|
|
5241
|
-
{
|
|
5242
|
-
type: "button",
|
|
5243
|
-
onClick: toggle,
|
|
5244
|
-
className: styles.header.expandBtn,
|
|
5245
|
-
"aria-label": "Expandir sidebar",
|
|
5246
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5247
|
-
lucideReact.PanelLeftClose,
|
|
5248
|
-
{
|
|
5249
|
-
className: avatar.cn(
|
|
5250
|
-
styles.header.expandBtnIcon,
|
|
5251
|
-
"transition-transform duration-300 rotate-180"
|
|
5252
|
-
)
|
|
5253
|
-
}
|
|
5254
|
-
)
|
|
5255
|
-
}
|
|
5256
|
-
) : null
|
|
5257
|
-
]
|
|
5258
|
-
}
|
|
5259
|
-
);
|
|
5260
|
-
}
|
|
5261
|
-
SingleMenuHeader.displayName = "SingleMenuHeader";
|
|
5262
|
-
function SingleMenuModuleSelector({
|
|
5263
|
-
icon,
|
|
5264
|
-
title: title2,
|
|
5265
|
-
subtitle,
|
|
5266
|
-
options,
|
|
5267
|
-
onModuleChange
|
|
5268
|
-
}) {
|
|
5269
|
-
const s = styles.module;
|
|
5270
|
-
const triggerContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
5271
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: s.iconContainer, children: icon }),
|
|
5272
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: s.textContainer, children: [
|
|
5273
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: s.title, children: title2 }),
|
|
5274
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: s.subtitle, children: subtitle })
|
|
5275
|
-
] }),
|
|
5276
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsUpDown, { className: s.chevron })
|
|
5277
|
-
] });
|
|
5278
|
-
if (!options || options.length === 0) {
|
|
5279
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: s.trigger, children: triggerContent });
|
|
5280
|
-
}
|
|
5281
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(avatar.DropdownMenu, { children: [
|
|
5282
|
-
/* @__PURE__ */ jsxRuntime.jsx(avatar.DropdownMenuTrigger, { className: s.trigger, children: triggerContent }),
|
|
5283
|
-
/* @__PURE__ */ jsxRuntime.jsx(avatar.DropdownMenuContent, { side: "bottom", sideOffset: 4, align: "start", children: options.map((option) => {
|
|
5284
|
-
const isSelected = option.label === title2;
|
|
5285
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5286
|
-
avatar.DropdownMenuItem,
|
|
5287
|
-
{
|
|
5288
|
-
className: avatar.cn(
|
|
5289
|
-
s.dropdownItem,
|
|
5290
|
-
isSelected && s.dropdownItemSelected
|
|
5291
|
-
),
|
|
5292
|
-
onClick: () => onModuleChange?.(option.id),
|
|
5293
|
-
children: [
|
|
5294
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: s.dropdownItemIcon, children: option.icon }),
|
|
5295
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: s.dropdownItemLabel, children: option.label }),
|
|
5296
|
-
isSelected && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: s.dropdownItemCheck })
|
|
5297
|
-
]
|
|
5298
|
-
},
|
|
5299
|
-
option.id
|
|
5300
|
-
);
|
|
5301
|
-
}) })
|
|
5302
|
-
] });
|
|
5303
|
-
}
|
|
5304
|
-
SingleMenuModuleSelector.displayName = "SingleMenuModuleSelector";
|
|
5305
|
-
function SingleMenuSearch({
|
|
5306
|
-
placeholder = "Buscar",
|
|
5307
|
-
onOpen
|
|
5308
|
-
}) {
|
|
5309
|
-
const s = styles.search;
|
|
5310
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", onClick: onOpen, className: s.wrapper, children: [
|
|
5311
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: s.inner, children: [
|
|
5312
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: s.icon }),
|
|
5313
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: s.text, children: placeholder })
|
|
5314
|
-
] }),
|
|
5315
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: s.shortcutBadge, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: s.shortcutText, children: "⌘K" }) })
|
|
5316
|
-
] });
|
|
5317
|
-
}
|
|
5318
|
-
SingleMenuSearch.displayName = "SingleMenuSearch";
|
|
5319
|
-
function SingleMenuCommand({
|
|
5320
|
-
open,
|
|
5321
|
-
onOpenChange,
|
|
5322
|
-
categories,
|
|
5323
|
-
placeholder = "Buscar no menu…",
|
|
5324
|
-
onSelect,
|
|
5325
|
-
custom
|
|
5326
|
-
}) {
|
|
5327
|
-
const leaves = categories.filter((c) => !c.items?.length);
|
|
5328
|
-
const groups = categories.filter((c) => c.items?.length);
|
|
5329
|
-
const handle = (id, parentId) => {
|
|
5330
|
-
onSelect(id, parentId);
|
|
5331
|
-
onOpenChange(false);
|
|
5332
|
-
};
|
|
5333
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(avatar.CommandDialog, { open, onOpenChange, children: [
|
|
5334
|
-
/* @__PURE__ */ jsxRuntime.jsx(avatar.CommandInput, { placeholder }),
|
|
5335
|
-
/* @__PURE__ */ jsxRuntime.jsxs(avatar.CommandList, { children: [
|
|
5336
|
-
/* @__PURE__ */ jsxRuntime.jsx(avatar.CommandEmpty, { children: "Nenhum resultado." }),
|
|
5337
|
-
custom ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
5338
|
-
leaves.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(avatar.CommandGroup, { heading: "Menu", children: leaves.map((c) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5339
|
-
avatar.CommandItem,
|
|
5340
|
-
{
|
|
5341
|
-
value: c.label,
|
|
5342
|
-
onSelect: () => handle(c.id),
|
|
5343
|
-
children: [
|
|
5344
|
-
c.icon,
|
|
5345
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: c.label })
|
|
5346
|
-
]
|
|
5347
|
-
},
|
|
5348
|
-
c.id
|
|
5349
|
-
)) }),
|
|
5350
|
-
groups.map((cat) => /* @__PURE__ */ jsxRuntime.jsx(avatar.CommandGroup, { heading: cat.label, children: cat.items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5351
|
-
avatar.CommandItem,
|
|
5352
|
-
{
|
|
5353
|
-
value: `${cat.label} ${item.label}`,
|
|
5354
|
-
onSelect: () => handle(item.id, cat.id),
|
|
5355
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: item.label })
|
|
5356
|
-
},
|
|
5357
|
-
item.id
|
|
5358
|
-
)) }, cat.id))
|
|
5359
|
-
] })
|
|
5360
|
-
] })
|
|
5361
|
-
] });
|
|
5362
|
-
}
|
|
5363
|
-
SingleMenuCommand.displayName = "SingleMenuCommand";
|
|
5364
|
-
function SingleMenuItem({
|
|
5365
|
-
label,
|
|
5366
|
-
selected = false,
|
|
5367
|
-
onClick
|
|
5368
|
-
}) {
|
|
5369
|
-
const s = menuItem({ selected });
|
|
5370
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", onClick, className: s.root(), children: [
|
|
5371
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: s.border() }),
|
|
5372
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: s.text(), children: label })
|
|
5373
|
-
] });
|
|
5374
|
-
}
|
|
5375
|
-
SingleMenuItem.displayName = "SingleMenuItem";
|
|
5376
|
-
function SingleMenuCategory({
|
|
5377
|
-
id,
|
|
5378
|
-
icon,
|
|
5379
|
-
label,
|
|
5380
|
-
active = false,
|
|
5381
|
-
items,
|
|
5382
|
-
activeItemId,
|
|
5383
|
-
onItemClick,
|
|
5384
|
-
onCategoryClick
|
|
5385
|
-
}) {
|
|
5386
|
-
const { expanded, openCategoryId, setOpenCategoryId } = useSingleMenuSidebar();
|
|
5387
|
-
const hasItems = !!items && items.length > 0;
|
|
5388
|
-
const isOpen = hasItems ? openCategoryId === id : false;
|
|
5389
|
-
const isLeafActive = !hasItems && (activeItemId !== void 0 ? activeItemId === id : !!active);
|
|
5390
|
-
const containsActive = hasItems && items.some((item) => item.id === activeItemId);
|
|
5391
|
-
const selected = !expanded ? hasItems ? isOpen || containsActive : isLeafActive : hasItems ? isOpen : isLeafActive && openCategoryId == null;
|
|
5392
|
-
const state = selected ? "selected" : "default";
|
|
5393
|
-
const s = category({ state, collapsed: !expanded });
|
|
5394
|
-
const handleToggle = () => {
|
|
5395
|
-
if (hasItems) {
|
|
5396
|
-
setOpenCategoryId(isOpen ? null : id);
|
|
5397
|
-
onCategoryClick?.();
|
|
5398
|
-
} else {
|
|
5399
|
-
onItemClick?.(id);
|
|
5400
|
-
setOpenCategoryId(null);
|
|
5401
|
-
onCategoryClick?.();
|
|
5402
|
-
}
|
|
5403
|
-
};
|
|
5404
|
-
if (!expanded) {
|
|
5405
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(tooltip.Tooltip, { children: [
|
|
5406
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5407
|
-
tooltip.TooltipTrigger,
|
|
5408
|
-
{
|
|
5409
|
-
role: "button",
|
|
5410
|
-
tabIndex: 0,
|
|
5411
|
-
onClick: handleToggle,
|
|
5412
|
-
onKeyDown: (e) => {
|
|
5413
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
5414
|
-
e.preventDefault();
|
|
5415
|
-
handleToggle();
|
|
5416
|
-
}
|
|
5417
|
-
},
|
|
5418
|
-
className: s.root(),
|
|
5419
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: s.icon(), children: icon })
|
|
5420
|
-
}
|
|
5421
|
-
),
|
|
5422
|
-
/* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipContent, { side: "right", sideOffset: 8, children: label })
|
|
5423
|
-
] });
|
|
5424
|
-
}
|
|
5425
|
-
if (!hasItems) {
|
|
5426
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", onClick: handleToggle, className: s.root(), children: [
|
|
5427
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: s.icon(), children: icon }),
|
|
5428
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: avatar.cn(s.text(), styles.textFadeIn), children: label })
|
|
5429
|
-
] });
|
|
5430
|
-
}
|
|
5431
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5432
|
-
tooltip.Collapsible,
|
|
5433
|
-
{
|
|
5434
|
-
open: isOpen,
|
|
5435
|
-
onOpenChange: (open) => {
|
|
5436
|
-
setOpenCategoryId(open ? id : null);
|
|
5437
|
-
onCategoryClick?.();
|
|
5438
|
-
},
|
|
5439
|
-
children: [
|
|
5440
|
-
/* @__PURE__ */ jsxRuntime.jsxs(tooltip.CollapsibleTrigger, { className: s.root(), children: [
|
|
5441
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: s.icon(), children: icon }),
|
|
5442
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: avatar.cn(s.text(), styles.textFadeIn), children: label }),
|
|
5443
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: avatar.cn(s.chevron(), isOpen && "rotate-180") })
|
|
5444
|
-
] }),
|
|
5445
|
-
/* @__PURE__ */ jsxRuntime.jsx(tooltip.CollapsibleContent, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.subItemList, children: items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5446
|
-
SingleMenuItem,
|
|
5447
|
-
{
|
|
5448
|
-
label: item.label,
|
|
5449
|
-
selected: item.id === activeItemId,
|
|
5450
|
-
onClick: () => onItemClick?.(item.id)
|
|
5451
|
-
},
|
|
5452
|
-
item.id
|
|
5453
|
-
)) }) })
|
|
5454
|
-
]
|
|
5455
|
-
}
|
|
5456
|
-
);
|
|
5457
|
-
}
|
|
5458
|
-
SingleMenuCategory.displayName = "SingleMenuCategory";
|
|
5459
|
-
function SingleMenuFooter({
|
|
5460
|
-
name,
|
|
5461
|
-
email,
|
|
5462
|
-
avatar: avatar$1,
|
|
5463
|
-
actions,
|
|
5464
|
-
onAction
|
|
5465
|
-
}) {
|
|
5466
|
-
const { expanded } = useSingleMenuSidebar();
|
|
5467
|
-
const s = styles.footer;
|
|
5468
|
-
const triggerContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
5469
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: s.avatar, children: avatar$1 ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.User, { className: s.avatarIcon }) }),
|
|
5470
|
-
expanded && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
5471
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: s.textContainer, children: [
|
|
5472
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: s.name, children: name }),
|
|
5473
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: s.email, children: email })
|
|
5474
|
-
] }),
|
|
5475
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsUpDown, { className: s.chevron })
|
|
5476
|
-
] })
|
|
5477
|
-
] });
|
|
5478
|
-
if (!actions || actions.length === 0) {
|
|
5479
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: s.wrapper, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: avatar.cn(s.button, !expanded && "justify-center px-0"), children: triggerContent }) });
|
|
5480
|
-
}
|
|
5481
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: s.wrapper, children: /* @__PURE__ */ jsxRuntime.jsxs(avatar.DropdownMenu, { children: [
|
|
5482
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5483
|
-
avatar.DropdownMenuTrigger,
|
|
5484
|
-
{
|
|
5485
|
-
className: avatar.cn(s.button, !expanded && "justify-center px-0"),
|
|
5486
|
-
children: triggerContent
|
|
5487
|
-
}
|
|
5488
|
-
),
|
|
5489
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
5490
|
-
avatar.DropdownMenuContent,
|
|
5491
|
-
{
|
|
5492
|
-
side: expanded ? "top" : "right",
|
|
5493
|
-
sideOffset: 8,
|
|
5494
|
-
align: expanded ? "end" : "start",
|
|
5495
|
-
children: [
|
|
5496
|
-
/* @__PURE__ */ jsxRuntime.jsx(avatar.DropdownMenuGroup, { children: /* @__PURE__ */ jsxRuntime.jsxs(avatar.DropdownMenuLabel, { className: s.dropdownLabel, children: [
|
|
5497
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: s.dropdownLabelName, children: name }),
|
|
5498
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: s.dropdownLabelEmail, children: email })
|
|
5499
|
-
] }) }),
|
|
5500
|
-
/* @__PURE__ */ jsxRuntime.jsx(avatar.DropdownMenuSeparator, {}),
|
|
5501
|
-
actions.map((action) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5502
|
-
avatar.DropdownMenuItem,
|
|
5503
|
-
{
|
|
5504
|
-
variant: action.variant === "destructive" ? "destructive" : "default",
|
|
5505
|
-
onClick: () => onAction?.(action.id),
|
|
5506
|
-
className: s.dropdownItem,
|
|
5507
|
-
children: [
|
|
5508
|
-
action.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: s.dropdownItemIcon, children: action.icon }),
|
|
5509
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: action.label })
|
|
5510
|
-
]
|
|
5511
|
-
},
|
|
5512
|
-
action.id
|
|
5513
|
-
))
|
|
5514
|
-
]
|
|
5515
|
-
}
|
|
5516
|
-
)
|
|
5517
|
-
] }) });
|
|
5518
|
-
}
|
|
5519
|
-
SingleMenuFooter.displayName = "SingleMenuFooter";
|
|
5520
|
-
function SingleMenuSidebar({
|
|
5521
|
-
logo,
|
|
5522
|
-
title: title2,
|
|
5523
|
-
module: module2,
|
|
5524
|
-
modules,
|
|
5525
|
-
activeModuleId,
|
|
5526
|
-
defaultModuleId,
|
|
5527
|
-
onModuleChange,
|
|
5528
|
-
showSearch = true,
|
|
5529
|
-
searchPlaceholder,
|
|
5530
|
-
searchCommand,
|
|
5531
|
-
categories,
|
|
5532
|
-
activeItemId,
|
|
5533
|
-
onItemClick,
|
|
5534
|
-
user,
|
|
5535
|
-
defaultExpanded = true,
|
|
5536
|
-
expanded: controlledExpanded,
|
|
5537
|
-
onExpandedChange,
|
|
5538
|
-
showToggleIndicator = false,
|
|
5539
|
-
className,
|
|
5540
|
-
...props
|
|
5541
|
-
}) {
|
|
5542
|
-
const {
|
|
5543
|
-
expanded,
|
|
5544
|
-
isHoverExpand,
|
|
5545
|
-
toggle,
|
|
5546
|
-
onMouseEnter,
|
|
5547
|
-
onMouseLeave,
|
|
5548
|
-
openCategoryId,
|
|
5549
|
-
setOpenCategoryId
|
|
5550
|
-
} = useSingleMenuSidebarState(
|
|
5551
|
-
defaultExpanded,
|
|
5552
|
-
controlledExpanded,
|
|
5553
|
-
onExpandedChange
|
|
5554
|
-
);
|
|
5555
|
-
const hasModules = !!modules && modules.length > 0;
|
|
5556
|
-
const [internalModuleId, setInternalModuleId] = React.useState(
|
|
5557
|
-
defaultModuleId ?? modules?.[0]?.id
|
|
5558
|
-
);
|
|
5559
|
-
const currentModuleId = activeModuleId ?? internalModuleId;
|
|
5560
|
-
const activeModule = hasModules ? modules.find((m) => m.id === currentModuleId) ?? modules[0] : void 0;
|
|
5561
|
-
const handleModuleChange = (id) => {
|
|
5562
|
-
if (activeModuleId === void 0) setInternalModuleId(id);
|
|
5563
|
-
onModuleChange?.(id);
|
|
5564
|
-
};
|
|
5565
|
-
const moduleDisplay = hasModules ? {
|
|
5566
|
-
icon: activeModule.icon,
|
|
5567
|
-
title: activeModule.title,
|
|
5568
|
-
subtitle: activeModule.subtitle ?? "",
|
|
5569
|
-
options: modules.map((m) => ({
|
|
5570
|
-
id: m.id,
|
|
5571
|
-
label: m.title,
|
|
5572
|
-
icon: m.icon
|
|
5573
|
-
})),
|
|
5574
|
-
onModuleChange: handleModuleChange
|
|
5575
|
-
} : module2;
|
|
5576
|
-
const effectiveCategories = hasModules ? activeModule.categories : categories ?? [];
|
|
5577
|
-
const [commandOpen, setCommandOpen] = React.useState(false);
|
|
5578
|
-
React.useEffect(() => {
|
|
5579
|
-
if (!showSearch) return;
|
|
5580
|
-
const onKey = (e) => {
|
|
5581
|
-
if (e.key.toLowerCase() === "k" && (e.metaKey || e.ctrlKey)) {
|
|
5582
|
-
e.preventDefault();
|
|
5583
|
-
setCommandOpen((o) => !o);
|
|
5584
|
-
}
|
|
5585
|
-
};
|
|
5586
|
-
document.addEventListener("keydown", onKey);
|
|
5587
|
-
return () => document.removeEventListener("keydown", onKey);
|
|
5588
|
-
}, [showSearch]);
|
|
5589
|
-
const selectFromSearch = (id, parentId) => {
|
|
5590
|
-
onItemClick?.(id);
|
|
5591
|
-
setOpenCategoryId(parentId ?? null);
|
|
5592
|
-
};
|
|
5593
|
-
const resolvedOpenCategoryId = openCategoryId ?? effectiveCategories.find(
|
|
5594
|
-
(cat) => cat.items?.some((item) => item.id === activeItemId)
|
|
5595
|
-
)?.id ?? null;
|
|
5596
|
-
const contextValue = React.useMemo(
|
|
5597
|
-
() => ({
|
|
5598
|
-
expanded,
|
|
5599
|
-
isHoverExpand,
|
|
5600
|
-
toggle,
|
|
5601
|
-
openCategoryId: resolvedOpenCategoryId,
|
|
5602
|
-
setOpenCategoryId
|
|
5603
|
-
}),
|
|
5604
|
-
[
|
|
5605
|
-
expanded,
|
|
5606
|
-
isHoverExpand,
|
|
5607
|
-
toggle,
|
|
5608
|
-
resolvedOpenCategoryId,
|
|
5609
|
-
setOpenCategoryId
|
|
5610
|
-
]
|
|
5611
|
-
);
|
|
5612
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(SingleMenuSidebarContext.Provider, { value: contextValue, children: [
|
|
5613
|
-
/* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5614
|
-
"aside",
|
|
5615
|
-
{
|
|
5616
|
-
"aria-label": "Navegação lateral",
|
|
5617
|
-
className: avatar.cn(sidebarRoot({ expanded }), className),
|
|
5618
|
-
onMouseEnter,
|
|
5619
|
-
onMouseLeave,
|
|
5620
|
-
...props,
|
|
5621
|
-
children: [
|
|
5622
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5623
|
-
SingleMenuHeader,
|
|
5624
|
-
{
|
|
5625
|
-
logo,
|
|
5626
|
-
title: title2,
|
|
5627
|
-
showToggleIndicator
|
|
5628
|
-
}
|
|
5629
|
-
),
|
|
5630
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.divider }),
|
|
5631
|
-
expanded && (moduleDisplay || showSearch) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: avatar.cn(styles.sectionPadding, styles.textFadeIn), children: [
|
|
5632
|
-
moduleDisplay && /* @__PURE__ */ jsxRuntime.jsx(SingleMenuModuleSelector, { ...moduleDisplay }),
|
|
5633
|
-
showSearch && /* @__PURE__ */ jsxRuntime.jsx(
|
|
5634
|
-
SingleMenuSearch,
|
|
5635
|
-
{
|
|
5636
|
-
placeholder: searchPlaceholder,
|
|
5637
|
-
onOpen: () => setCommandOpen(true)
|
|
5638
|
-
}
|
|
5639
|
-
)
|
|
5640
|
-
] }),
|
|
5641
|
-
expanded && /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.divider }),
|
|
5642
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5643
|
-
"nav",
|
|
5644
|
-
{
|
|
5645
|
-
className: avatar.cn(
|
|
5646
|
-
styles.navContainer,
|
|
5647
|
-
expanded ? styles.navContainerExpanded : styles.navContainerCollapsed
|
|
5648
|
-
),
|
|
5649
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.navList, children: effectiveCategories.map((cat) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5650
|
-
SingleMenuCategory,
|
|
5651
|
-
{
|
|
5652
|
-
...cat,
|
|
5653
|
-
activeItemId,
|
|
5654
|
-
onItemClick
|
|
5655
|
-
},
|
|
5656
|
-
cat.id
|
|
5657
|
-
)) })
|
|
5658
|
-
}
|
|
5659
|
-
),
|
|
5660
|
-
/* @__PURE__ */ jsxRuntime.jsx(SingleMenuFooter, { ...user })
|
|
5661
|
-
]
|
|
5662
|
-
}
|
|
5663
|
-
) }),
|
|
5664
|
-
showSearch && /* @__PURE__ */ jsxRuntime.jsx(
|
|
5665
|
-
SingleMenuCommand,
|
|
5666
|
-
{
|
|
5667
|
-
open: commandOpen,
|
|
5668
|
-
onOpenChange: setCommandOpen,
|
|
5669
|
-
categories: effectiveCategories,
|
|
5670
|
-
placeholder: searchPlaceholder,
|
|
5671
|
-
onSelect: selectFromSearch,
|
|
5672
|
-
custom: searchCommand
|
|
5673
|
-
}
|
|
5674
|
-
)
|
|
5675
|
-
] });
|
|
5676
|
-
}
|
|
5677
|
-
SingleMenuSidebar.displayName = "SingleMenuSidebar";
|
|
5678
4986
|
const spinnerStyles = avatar.tv({
|
|
5679
4987
|
base: ["inline-block shrink-0", "animate-spin motion-reduce:animate-none"],
|
|
5680
4988
|
variants: {
|
|
@@ -7386,9 +6694,9 @@ const ChoroplethMap = React.forwardRef(
|
|
|
7386
6694
|
})
|
|
7387
6695
|
}
|
|
7388
6696
|
),
|
|
7389
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles2.tooltipLayer(), children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6697
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles2.tooltipLayer(), children: /* @__PURE__ */ jsxRuntime.jsxs(avatar.Tooltip, { open: hover != null, onOpenChange: () => {
|
|
7390
6698
|
}, disableHoverableContent: true, children: [
|
|
7391
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6699
|
+
/* @__PURE__ */ jsxRuntime.jsx(avatar.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
7392
6700
|
"span",
|
|
7393
6701
|
{
|
|
7394
6702
|
"aria-hidden": "true",
|
|
@@ -7397,7 +6705,7 @@ const ChoroplethMap = React.forwardRef(
|
|
|
7397
6705
|
}
|
|
7398
6706
|
) }),
|
|
7399
6707
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7400
|
-
|
|
6708
|
+
avatar.TooltipContent,
|
|
7401
6709
|
{
|
|
7402
6710
|
showArrow: false,
|
|
7403
6711
|
className: "border border-border-default bg-bg-surface-elevated shadow-sh-lg",
|
|
@@ -8663,6 +7971,7 @@ exports.SidebarPill = useTheme.SidebarPill;
|
|
|
8663
7971
|
exports.SidebarRail = useTheme.SidebarRail;
|
|
8664
7972
|
exports.SidebarSection = useTheme.SidebarSection;
|
|
8665
7973
|
exports.SidebarSubgroup = useTheme.SidebarSubgroup;
|
|
7974
|
+
exports.SingleMenuSidebar = useTheme.SingleMenuSidebar;
|
|
8666
7975
|
exports.UserMenu = useTheme.UserMenu;
|
|
8667
7976
|
exports.chipCount = useTheme.chipCount;
|
|
8668
7977
|
exports.chipVariants = useTheme.chipVariants;
|
|
@@ -8696,8 +8005,8 @@ Object.defineProperty(exports, "MessageReplyIcon", {
|
|
|
8696
8005
|
enumerable: true,
|
|
8697
8006
|
get: () => lucideReact.Reply
|
|
8698
8007
|
});
|
|
8699
|
-
exports.Badge =
|
|
8700
|
-
exports.badgeVariants =
|
|
8008
|
+
exports.Badge = toggleGroup.Badge;
|
|
8009
|
+
exports.badgeVariants = toggleGroup.badgeVariants;
|
|
8701
8010
|
exports.Input = input.Input;
|
|
8702
8011
|
exports.inputVariants = input.inputVariants;
|
|
8703
8012
|
exports.Kpi = kpiDelta.Kpi;
|
|
@@ -8731,7 +8040,6 @@ exports.MessageComposer = MessageComposer;
|
|
|
8731
8040
|
exports.MessageVariablesPicker = MessageVariablesPicker;
|
|
8732
8041
|
exports.Modal = Modal;
|
|
8733
8042
|
exports.MonthYearPicker = MonthYearPicker;
|
|
8734
|
-
exports.SingleMenuSidebar = SingleMenuSidebar;
|
|
8735
8043
|
exports.Spinner = Spinner;
|
|
8736
8044
|
exports.ToastCard = ToastCard;
|
|
8737
8045
|
exports.ToolbarFilterControl = ToolbarFilterControl;
|