@vectramindnpm/unified-design-system 0.2.3 → 0.2.5
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 +258 -258
- package/dist/components.css +387 -387
- package/dist/fonts.css +12 -12
- package/dist/index.cjs +255 -192
- package/dist/index.cjs.map +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +19 -1
- package/dist/index.d.ts +19 -1
- package/dist/index.js +258 -195
- package/dist/index.js.map +1 -1
- package/dist/shadcn-base.css +36 -36
- package/dist/styles.css +11 -11
- package/dist/theme.css +92 -92
- package/package.json +92 -90
- package/tailwind-preset.js +84 -84
package/dist/index.js
CHANGED
|
@@ -620,7 +620,6 @@ TooltipContent.displayName = "TooltipContent";
|
|
|
620
620
|
// src/components/ui/button.tsx
|
|
621
621
|
import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
622
622
|
var { color: color3 } = semanticTokens_default;
|
|
623
|
-
var DEFAULT_VARIANT = "ghost";
|
|
624
623
|
var buttonVariants = cva2(
|
|
625
624
|
"",
|
|
626
625
|
{
|
|
@@ -660,7 +659,7 @@ var buttonVariants = cva2(
|
|
|
660
659
|
}
|
|
661
660
|
},
|
|
662
661
|
defaultVariants: {
|
|
663
|
-
variant:
|
|
662
|
+
variant: "primary",
|
|
664
663
|
size: "default",
|
|
665
664
|
shape: "default"
|
|
666
665
|
}
|
|
@@ -719,7 +718,7 @@ var pillDisabled = "opacity-50 cursor-not-allowed";
|
|
|
719
718
|
var selectedGradient = "border border-interactive-brand bg-gradient-to-r from-[var(--color-button-selected-gradient-start)] via-[var(--color-button-selected-gradient-mid)] to-interactive-brand text-white font-extrabold";
|
|
720
719
|
var Button = React4.forwardRef(
|
|
721
720
|
({ className, variant, size, shape, asChild = false, children, style, selected, tooltipText, ...props }, ref) => {
|
|
722
|
-
const finalVariant = variant ??
|
|
721
|
+
const finalVariant = variant ?? "primary";
|
|
723
722
|
const finalSize = size ?? "default";
|
|
724
723
|
const isPill = shape === "pill";
|
|
725
724
|
const isLink = finalVariant === "link";
|
|
@@ -733,7 +732,7 @@ var Button = React4.forwardRef(
|
|
|
733
732
|
const composed = cn(
|
|
734
733
|
baseClasses2,
|
|
735
734
|
isPill ? "rounded-full" : "",
|
|
736
|
-
variantClasses[colorBase],
|
|
735
|
+
variant ? variantClasses[colorBase] : "",
|
|
737
736
|
// Link never carries the size scale's own padding/height — it reads as inline text.
|
|
738
737
|
isLink ? "h-auto p-0" : isPill ? pillSizeClasses[finalSize] : sizeClasses[finalSize],
|
|
739
738
|
isPill ? selected ? pillSelected : pillUnselected : selected ? selectedGradient : "",
|
|
@@ -744,15 +743,19 @@ var Button = React4.forwardRef(
|
|
|
744
743
|
buttonVariants({ variant: finalVariant, size: finalSize, shape, className })
|
|
745
744
|
);
|
|
746
745
|
const mergedStyle = {
|
|
747
|
-
...variantStyles[colorBase],
|
|
746
|
+
...variant ? variantStyles[colorBase] : void 0,
|
|
748
747
|
...isPill && selected ? { ["--pill-selected-bg"]: `${color3.text.blue}24` } : void 0,
|
|
749
748
|
...style
|
|
750
749
|
};
|
|
750
|
+
const accessibleProps = {
|
|
751
|
+
"aria-label": props["aria-label"] ?? tooltipText,
|
|
752
|
+
...props
|
|
753
|
+
};
|
|
751
754
|
const element = asChild && React4.isValidElement(children) ? React4.cloneElement(children, {
|
|
752
755
|
className: cn(composed, children.props?.className),
|
|
753
756
|
ref,
|
|
754
|
-
...
|
|
755
|
-
}) : /* @__PURE__ */ jsx4("button", { className: cn(composed), ref, style: mergedStyle, ...
|
|
757
|
+
...accessibleProps
|
|
758
|
+
}) : /* @__PURE__ */ jsx4("button", { className: cn(composed), ref, style: mergedStyle, ...accessibleProps, children });
|
|
756
759
|
if (!tooltipText) {
|
|
757
760
|
return element;
|
|
758
761
|
}
|
|
@@ -875,13 +878,14 @@ var ButtonIcon = React5.forwardRef(
|
|
|
875
878
|
name,
|
|
876
879
|
variant,
|
|
877
880
|
size,
|
|
878
|
-
color: color6
|
|
881
|
+
color: color6,
|
|
879
882
|
hoverColor,
|
|
880
883
|
bgColor,
|
|
881
884
|
bgHoverColor,
|
|
882
885
|
actionColor,
|
|
883
886
|
tooltipText,
|
|
884
887
|
showTooltip = false,
|
|
888
|
+
label,
|
|
885
889
|
disabled,
|
|
886
890
|
className,
|
|
887
891
|
type = "button",
|
|
@@ -892,12 +896,13 @@ var ButtonIcon = React5.forwardRef(
|
|
|
892
896
|
}, ref) => {
|
|
893
897
|
const isModalClose = variant === "modalClose";
|
|
894
898
|
const isRefresh = variant === "refresh";
|
|
899
|
+
const isFilled = variant === "filled";
|
|
895
900
|
const resolvedBg = bgColor ? { base: bgColor, hover: bgHoverColor } : actionColor ? actionColorTokens[actionColor] : void 0;
|
|
896
901
|
const effectiveSize = isRefresh ? "sm" : size;
|
|
897
|
-
const effectiveColor = isRefresh ? "primary" : color6;
|
|
902
|
+
const effectiveColor = isRefresh ? "primary" : color6 ?? (isFilled ? "white" : "primary");
|
|
898
903
|
const effectiveHoverColor = isRefresh ? "primary" : isModalClose ? "danger" : hoverColor;
|
|
899
904
|
const effectiveShowTooltip = isRefresh ? true : showTooltip;
|
|
900
|
-
const effectiveTooltipText = tooltipText;
|
|
905
|
+
const effectiveTooltipText = tooltipText ?? label ?? props["aria-label"];
|
|
901
906
|
const colorProps = getIconColorProps(effectiveColor, effectiveHoverColor, resolvedBg);
|
|
902
907
|
const icon = /* @__PURE__ */ jsx5(
|
|
903
908
|
"button",
|
|
@@ -1136,77 +1141,24 @@ Checkbox.displayName = "Checkbox";
|
|
|
1136
1141
|
|
|
1137
1142
|
// src/components/ui/delete-action.tsx
|
|
1138
1143
|
import "react";
|
|
1144
|
+
import { useTranslation } from "react-i18next";
|
|
1139
1145
|
|
|
1140
|
-
// src/
|
|
1141
|
-
|
|
1142
|
-
import "class-variance-authority";
|
|
1143
|
-
import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1144
|
-
var Icon = React8.forwardRef(
|
|
1145
|
-
({
|
|
1146
|
-
name,
|
|
1147
|
-
variant,
|
|
1148
|
-
size,
|
|
1149
|
-
color: color6 = "primary",
|
|
1150
|
-
hoverColor,
|
|
1151
|
-
tooltipText,
|
|
1152
|
-
showTooltip = false,
|
|
1153
|
-
disabled,
|
|
1154
|
-
className,
|
|
1155
|
-
onClick,
|
|
1156
|
-
style,
|
|
1157
|
-
...props
|
|
1158
|
-
}, ref) => {
|
|
1159
|
-
const colorProps = getIconColorProps(color6, hoverColor);
|
|
1160
|
-
const icon = /* @__PURE__ */ jsx8(
|
|
1161
|
-
"i",
|
|
1162
|
-
{
|
|
1163
|
-
ref,
|
|
1164
|
-
className: cn(
|
|
1165
|
-
`${name}`,
|
|
1166
|
-
iconVariants({ variant, size }),
|
|
1167
|
-
colorProps.className,
|
|
1168
|
-
onClick && !disabled && "cursor-pointer",
|
|
1169
|
-
className
|
|
1170
|
-
),
|
|
1171
|
-
onClick,
|
|
1172
|
-
style: { ...colorProps.style, ...style },
|
|
1173
|
-
role: onClick ? "button" : void 0,
|
|
1174
|
-
tabIndex: onClick ? 0 : void 0,
|
|
1175
|
-
"aria-label": tooltipText || name,
|
|
1176
|
-
onKeyDown: (e) => {
|
|
1177
|
-
if (!onClick) return;
|
|
1178
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
1179
|
-
e.preventDefault();
|
|
1180
|
-
onClick(
|
|
1181
|
-
e
|
|
1182
|
-
);
|
|
1183
|
-
}
|
|
1184
|
-
},
|
|
1185
|
-
...props
|
|
1186
|
-
}
|
|
1187
|
-
);
|
|
1188
|
-
if (!showTooltip) {
|
|
1189
|
-
return icon;
|
|
1190
|
-
}
|
|
1191
|
-
return /* @__PURE__ */ jsxs5(Tooltip, { children: [
|
|
1192
|
-
/* @__PURE__ */ jsx8(TooltipTrigger, { asChild: true, children: icon }),
|
|
1193
|
-
/* @__PURE__ */ jsx8(TooltipContent, { children: /* @__PURE__ */ jsx8("small", { children: tooltipText || name }) })
|
|
1194
|
-
] });
|
|
1195
|
-
}
|
|
1196
|
-
);
|
|
1197
|
-
Icon.displayName = "Icon";
|
|
1146
|
+
// src/helpers/helpersIndex.ts
|
|
1147
|
+
var getTranslationKey = () => "translations";
|
|
1198
1148
|
|
|
1199
1149
|
// src/components/ui/delete-action.tsx
|
|
1200
|
-
import { jsx as
|
|
1150
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
1201
1151
|
var DeleteAction = ({ onClick, tooltipText, showTooltip = true, className }) => {
|
|
1202
|
-
|
|
1203
|
-
|
|
1152
|
+
const translationKey = getTranslationKey();
|
|
1153
|
+
const { t } = useTranslation(translationKey);
|
|
1154
|
+
return /* @__PURE__ */ jsx8(
|
|
1155
|
+
ButtonIcon,
|
|
1204
1156
|
{
|
|
1205
1157
|
name: "icon-neo-trash",
|
|
1206
1158
|
hoverColor: "danger",
|
|
1207
1159
|
onClick,
|
|
1208
1160
|
showTooltip,
|
|
1209
|
-
tooltipText: tooltipText || "
|
|
1161
|
+
tooltipText: tooltipText || t("ActionNames.delete"),
|
|
1210
1162
|
className
|
|
1211
1163
|
}
|
|
1212
1164
|
);
|
|
@@ -1214,25 +1166,28 @@ var DeleteAction = ({ onClick, tooltipText, showTooltip = true, className }) =>
|
|
|
1214
1166
|
var delete_action_default = DeleteAction;
|
|
1215
1167
|
|
|
1216
1168
|
// src/components/ui/dialog.tsx
|
|
1217
|
-
import * as
|
|
1218
|
-
import {
|
|
1219
|
-
|
|
1169
|
+
import * as React9 from "react";
|
|
1170
|
+
import { useTranslation as useTranslation2 } from "react-i18next";
|
|
1171
|
+
import { Fragment as Fragment2, jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1172
|
+
var DialogContext = React9.createContext(void 0);
|
|
1220
1173
|
function useDialog() {
|
|
1221
|
-
const context =
|
|
1174
|
+
const context = React9.useContext(DialogContext);
|
|
1222
1175
|
if (!context) {
|
|
1223
1176
|
throw new Error("Dialog components must be used within Dialog");
|
|
1224
1177
|
}
|
|
1225
1178
|
return context;
|
|
1226
1179
|
}
|
|
1227
1180
|
var Dialog = ({ open: controlledOpen, onOpenChange, children }) => {
|
|
1228
|
-
const [uncontrolledOpen, setUncontrolledOpen] =
|
|
1181
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React9.useState(false);
|
|
1182
|
+
const [titleId, setTitleId] = React9.useState(void 0);
|
|
1183
|
+
const [descriptionId, setDescriptionId] = React9.useState(void 0);
|
|
1229
1184
|
const open = controlledOpen !== void 0 ? controlledOpen : uncontrolledOpen;
|
|
1230
1185
|
const setOpen = onOpenChange || setUncontrolledOpen;
|
|
1231
|
-
return /* @__PURE__ */
|
|
1186
|
+
return /* @__PURE__ */ jsx9(DialogContext.Provider, { value: { open, onOpenChange: setOpen, titleId, descriptionId, setTitleId, setDescriptionId }, children });
|
|
1232
1187
|
};
|
|
1233
|
-
var DialogTrigger =
|
|
1188
|
+
var DialogTrigger = React9.forwardRef(({ onClick, ...props }, ref) => {
|
|
1234
1189
|
const { onOpenChange } = useDialog();
|
|
1235
|
-
return /* @__PURE__ */
|
|
1190
|
+
return /* @__PURE__ */ jsx9(
|
|
1236
1191
|
Button,
|
|
1237
1192
|
{
|
|
1238
1193
|
ref,
|
|
@@ -1250,11 +1205,11 @@ DialogTrigger.displayName = "DialogTrigger";
|
|
|
1250
1205
|
var DialogPortal = ({ children }) => {
|
|
1251
1206
|
const { open } = useDialog();
|
|
1252
1207
|
if (!open) return null;
|
|
1253
|
-
return /* @__PURE__ */
|
|
1208
|
+
return /* @__PURE__ */ jsx9(Fragment2, { children });
|
|
1254
1209
|
};
|
|
1255
|
-
var DialogClose =
|
|
1210
|
+
var DialogClose = React9.forwardRef(({ onClick, ...props }, ref) => {
|
|
1256
1211
|
const { onOpenChange } = useDialog();
|
|
1257
|
-
return /* @__PURE__ */
|
|
1212
|
+
return /* @__PURE__ */ jsx9(
|
|
1258
1213
|
Button,
|
|
1259
1214
|
{
|
|
1260
1215
|
ref,
|
|
@@ -1269,9 +1224,9 @@ var DialogClose = React10.forwardRef(({ onClick, ...props }, ref) => {
|
|
|
1269
1224
|
);
|
|
1270
1225
|
});
|
|
1271
1226
|
DialogClose.displayName = "DialogClose";
|
|
1272
|
-
var DialogOverlay =
|
|
1227
|
+
var DialogOverlay = React9.forwardRef(({ className, onClick, closeOnClick = true, ...props }, ref) => {
|
|
1273
1228
|
const { onOpenChange } = useDialog();
|
|
1274
|
-
return /* @__PURE__ */
|
|
1229
|
+
return /* @__PURE__ */ jsx9(
|
|
1275
1230
|
"div",
|
|
1276
1231
|
{
|
|
1277
1232
|
ref,
|
|
@@ -1288,9 +1243,10 @@ var DialogOverlay = React10.forwardRef(({ className, onClick, closeOnClick = tru
|
|
|
1288
1243
|
);
|
|
1289
1244
|
});
|
|
1290
1245
|
DialogOverlay.displayName = "DialogOverlay";
|
|
1291
|
-
var DialogContent =
|
|
1292
|
-
const { onOpenChange } = useDialog();
|
|
1293
|
-
|
|
1246
|
+
var DialogContent = React9.forwardRef(({ className, children, showCloseButton = true, closeOnEscape = true, closeOnOverlayClick = true, ...props }, ref) => {
|
|
1247
|
+
const { onOpenChange, titleId, descriptionId } = useDialog();
|
|
1248
|
+
const { t } = useTranslation2("translations");
|
|
1249
|
+
React9.useEffect(() => {
|
|
1294
1250
|
if (!closeOnEscape) return;
|
|
1295
1251
|
const handleEscape = (e) => {
|
|
1296
1252
|
if (e.key === "Escape") {
|
|
@@ -1300,12 +1256,16 @@ var DialogContent = React10.forwardRef(({ className, children, showCloseButton =
|
|
|
1300
1256
|
document.addEventListener("keydown", handleEscape);
|
|
1301
1257
|
return () => document.removeEventListener("keydown", handleEscape);
|
|
1302
1258
|
}, [onOpenChange, closeOnEscape]);
|
|
1303
|
-
return /* @__PURE__ */
|
|
1304
|
-
/* @__PURE__ */
|
|
1305
|
-
/* @__PURE__ */
|
|
1259
|
+
return /* @__PURE__ */ jsxs5(DialogPortal, { children: [
|
|
1260
|
+
/* @__PURE__ */ jsx9(DialogOverlay, { closeOnClick: closeOnOverlayClick }),
|
|
1261
|
+
/* @__PURE__ */ jsxs5(
|
|
1306
1262
|
"div",
|
|
1307
1263
|
{
|
|
1308
1264
|
ref,
|
|
1265
|
+
role: "dialog",
|
|
1266
|
+
"aria-modal": "true",
|
|
1267
|
+
"aria-labelledby": titleId,
|
|
1268
|
+
"aria-describedby": descriptionId,
|
|
1309
1269
|
className: cn(
|
|
1310
1270
|
"fixed left-[50%] top-[50%] z-[var(--zindex-modal)] grid w-full max-w-6xl translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 animate-in fade-in-0 zoom-in-95 rounded-lg",
|
|
1311
1271
|
className
|
|
@@ -1314,14 +1274,15 @@ var DialogContent = React10.forwardRef(({ className, children, showCloseButton =
|
|
|
1314
1274
|
...props,
|
|
1315
1275
|
children: [
|
|
1316
1276
|
children,
|
|
1317
|
-
showCloseButton && /* @__PURE__ */
|
|
1277
|
+
showCloseButton && /* @__PURE__ */ jsx9(
|
|
1318
1278
|
ButtonIcon,
|
|
1319
1279
|
{
|
|
1320
1280
|
type: "button",
|
|
1321
1281
|
name: "icon-neo-close",
|
|
1322
1282
|
variant: "modalClose",
|
|
1323
1283
|
className: "absolute right-4 top-4",
|
|
1324
|
-
onClick: () => onOpenChange(false)
|
|
1284
|
+
onClick: () => onOpenChange(false),
|
|
1285
|
+
tooltipText: t("ActionNames.close")
|
|
1325
1286
|
}
|
|
1326
1287
|
)
|
|
1327
1288
|
]
|
|
@@ -1333,7 +1294,7 @@ DialogContent.displayName = "DialogContent";
|
|
|
1333
1294
|
var DialogHeader = ({
|
|
1334
1295
|
className,
|
|
1335
1296
|
...props
|
|
1336
|
-
}) => /* @__PURE__ */
|
|
1297
|
+
}) => /* @__PURE__ */ jsx9(
|
|
1337
1298
|
"div",
|
|
1338
1299
|
{
|
|
1339
1300
|
className: cn(
|
|
@@ -1347,7 +1308,7 @@ DialogHeader.displayName = "DialogHeader";
|
|
|
1347
1308
|
var DialogFooter = ({
|
|
1348
1309
|
className,
|
|
1349
1310
|
...props
|
|
1350
|
-
}) => /* @__PURE__ */
|
|
1311
|
+
}) => /* @__PURE__ */ jsx9(
|
|
1351
1312
|
"div",
|
|
1352
1313
|
{
|
|
1353
1314
|
className: cn(
|
|
@@ -1358,52 +1319,72 @@ var DialogFooter = ({
|
|
|
1358
1319
|
}
|
|
1359
1320
|
);
|
|
1360
1321
|
DialogFooter.displayName = "DialogFooter";
|
|
1361
|
-
var DialogTitle =
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1322
|
+
var DialogTitle = React9.forwardRef(({ className, id, ...props }, ref) => {
|
|
1323
|
+
const generatedId = React9.useId();
|
|
1324
|
+
const resolvedId = id ?? generatedId;
|
|
1325
|
+
const { setTitleId } = useDialog();
|
|
1326
|
+
React9.useEffect(() => {
|
|
1327
|
+
setTitleId(resolvedId);
|
|
1328
|
+
return () => setTitleId(void 0);
|
|
1329
|
+
}, [resolvedId, setTitleId]);
|
|
1330
|
+
return /* @__PURE__ */ jsx9(
|
|
1331
|
+
"h2",
|
|
1332
|
+
{
|
|
1333
|
+
ref,
|
|
1334
|
+
id: resolvedId,
|
|
1335
|
+
className: cn(
|
|
1336
|
+
"text-heading font-semibold leading-none tracking-tight",
|
|
1337
|
+
className
|
|
1338
|
+
),
|
|
1339
|
+
...props
|
|
1340
|
+
}
|
|
1341
|
+
);
|
|
1342
|
+
});
|
|
1372
1343
|
DialogTitle.displayName = "DialogTitle";
|
|
1373
|
-
var DialogDescription =
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
)
|
|
1344
|
+
var DialogDescription = React9.forwardRef(({ className, id, ...props }, ref) => {
|
|
1345
|
+
const generatedId = React9.useId();
|
|
1346
|
+
const resolvedId = id ?? generatedId;
|
|
1347
|
+
const { setDescriptionId } = useDialog();
|
|
1348
|
+
React9.useEffect(() => {
|
|
1349
|
+
setDescriptionId(resolvedId);
|
|
1350
|
+
return () => setDescriptionId(void 0);
|
|
1351
|
+
}, [resolvedId, setDescriptionId]);
|
|
1352
|
+
return /* @__PURE__ */ jsx9(
|
|
1353
|
+
"p",
|
|
1354
|
+
{
|
|
1355
|
+
ref,
|
|
1356
|
+
id: resolvedId,
|
|
1357
|
+
className: cn("text-body text-muted-foreground", className),
|
|
1358
|
+
...props
|
|
1359
|
+
}
|
|
1360
|
+
);
|
|
1361
|
+
});
|
|
1381
1362
|
DialogDescription.displayName = "DialogDescription";
|
|
1382
1363
|
|
|
1383
1364
|
// src/components/ui/dropdown-menu.tsx
|
|
1384
|
-
import * as
|
|
1365
|
+
import * as React10 from "react";
|
|
1385
1366
|
import { createPortal as createPortal2 } from "react-dom";
|
|
1386
1367
|
import { Check, ChevronRight, Circle } from "lucide-react";
|
|
1387
|
-
import { Fragment as Fragment3, jsx as
|
|
1388
|
-
var DropdownMenuContext =
|
|
1368
|
+
import { Fragment as Fragment3, jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1369
|
+
var DropdownMenuContext = React10.createContext(void 0);
|
|
1389
1370
|
function useDropdownMenu() {
|
|
1390
|
-
const context =
|
|
1371
|
+
const context = React10.useContext(DropdownMenuContext);
|
|
1391
1372
|
if (!context) {
|
|
1392
1373
|
throw new Error("DropdownMenu components must be used within DropdownMenu");
|
|
1393
1374
|
}
|
|
1394
1375
|
return context;
|
|
1395
1376
|
}
|
|
1396
1377
|
var DropdownMenu = ({ open: controlledOpen, onOpenChange, children }) => {
|
|
1397
|
-
const [uncontrolledOpen, setUncontrolledOpen] =
|
|
1378
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React10.useState(false);
|
|
1398
1379
|
const open = controlledOpen !== void 0 ? controlledOpen : uncontrolledOpen;
|
|
1399
1380
|
const setOpen = onOpenChange || setUncontrolledOpen;
|
|
1400
|
-
const triggerRef =
|
|
1401
|
-
return /* @__PURE__ */
|
|
1381
|
+
const triggerRef = React10.useRef(null);
|
|
1382
|
+
return /* @__PURE__ */ jsx10(DropdownMenuContext.Provider, { value: { open, setOpen, triggerRef }, children });
|
|
1402
1383
|
};
|
|
1403
|
-
var DropdownMenuTrigger =
|
|
1384
|
+
var DropdownMenuTrigger = React10.forwardRef(({ onClick, children, asChild, ...props }, ref) => {
|
|
1404
1385
|
const { setOpen, open, triggerRef } = useDropdownMenu();
|
|
1405
|
-
if (asChild &&
|
|
1406
|
-
return
|
|
1386
|
+
if (asChild && React10.isValidElement(children)) {
|
|
1387
|
+
return React10.cloneElement(children, {
|
|
1407
1388
|
ref: (node) => {
|
|
1408
1389
|
triggerRef.current = node;
|
|
1409
1390
|
if (ref) {
|
|
@@ -1422,7 +1403,7 @@ var DropdownMenuTrigger = React11.forwardRef(({ onClick, children, asChild, ...p
|
|
|
1422
1403
|
}
|
|
1423
1404
|
});
|
|
1424
1405
|
}
|
|
1425
|
-
return /* @__PURE__ */
|
|
1406
|
+
return /* @__PURE__ */ jsx10(
|
|
1426
1407
|
Button,
|
|
1427
1408
|
{
|
|
1428
1409
|
ref: (node) => {
|
|
@@ -1447,19 +1428,19 @@ var DropdownMenuTrigger = React11.forwardRef(({ onClick, children, asChild, ...p
|
|
|
1447
1428
|
});
|
|
1448
1429
|
DropdownMenuTrigger.displayName = "DropdownMenuTrigger";
|
|
1449
1430
|
var DropdownMenuGroup = ({ children }) => {
|
|
1450
|
-
return /* @__PURE__ */
|
|
1431
|
+
return /* @__PURE__ */ jsx10("div", { role: "group", children });
|
|
1451
1432
|
};
|
|
1452
1433
|
var DropdownMenuPortal = ({ children }) => {
|
|
1453
1434
|
const portalRoot = document.getElementById("fpneo") || document.body;
|
|
1454
1435
|
return createPortal2(children, portalRoot);
|
|
1455
1436
|
};
|
|
1456
1437
|
var DropdownMenuSub = ({ children }) => {
|
|
1457
|
-
return /* @__PURE__ */
|
|
1438
|
+
return /* @__PURE__ */ jsx10(Fragment3, { children });
|
|
1458
1439
|
};
|
|
1459
1440
|
var DropdownMenuRadioGroup = ({ children }) => {
|
|
1460
|
-
return /* @__PURE__ */
|
|
1441
|
+
return /* @__PURE__ */ jsx10("div", { role: "radiogroup", children });
|
|
1461
1442
|
};
|
|
1462
|
-
var DropdownMenuSubTrigger =
|
|
1443
|
+
var DropdownMenuSubTrigger = React10.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs6(
|
|
1463
1444
|
"div",
|
|
1464
1445
|
{
|
|
1465
1446
|
ref,
|
|
@@ -1471,12 +1452,12 @@ var DropdownMenuSubTrigger = React11.forwardRef(({ className, inset, children, .
|
|
|
1471
1452
|
...props,
|
|
1472
1453
|
children: [
|
|
1473
1454
|
children,
|
|
1474
|
-
/* @__PURE__ */
|
|
1455
|
+
/* @__PURE__ */ jsx10(ChevronRight, { className: "ml-auto h-4 w-4" })
|
|
1475
1456
|
]
|
|
1476
1457
|
}
|
|
1477
1458
|
));
|
|
1478
1459
|
DropdownMenuSubTrigger.displayName = "DropdownMenuSubTrigger";
|
|
1479
|
-
var DropdownMenuSubContent =
|
|
1460
|
+
var DropdownMenuSubContent = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
|
|
1480
1461
|
"div",
|
|
1481
1462
|
{
|
|
1482
1463
|
ref,
|
|
@@ -1488,13 +1469,13 @@ var DropdownMenuSubContent = React11.forwardRef(({ className, ...props }, ref) =
|
|
|
1488
1469
|
}
|
|
1489
1470
|
));
|
|
1490
1471
|
DropdownMenuSubContent.displayName = "DropdownMenuSubContent";
|
|
1491
|
-
var DropdownMenuContent =
|
|
1472
|
+
var DropdownMenuContent = React10.forwardRef(({ className, sideOffset = 4, align = "end", ...props }, ref) => {
|
|
1492
1473
|
const { open, setOpen, triggerRef } = useDropdownMenu();
|
|
1493
|
-
const contentRef =
|
|
1494
|
-
const [position, setPosition] =
|
|
1495
|
-
const [isPositioned, setIsPositioned] =
|
|
1496
|
-
|
|
1497
|
-
|
|
1474
|
+
const contentRef = React10.useRef(null);
|
|
1475
|
+
const [position, setPosition] = React10.useState({ top: 0, left: 0 });
|
|
1476
|
+
const [isPositioned, setIsPositioned] = React10.useState(false);
|
|
1477
|
+
React10.useImperativeHandle(ref, () => contentRef.current);
|
|
1478
|
+
React10.useEffect(() => {
|
|
1498
1479
|
if (!open || !triggerRef.current) {
|
|
1499
1480
|
setIsPositioned(false);
|
|
1500
1481
|
return;
|
|
@@ -1549,7 +1530,7 @@ var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, align
|
|
|
1549
1530
|
window.removeEventListener("resize", updatePosition);
|
|
1550
1531
|
};
|
|
1551
1532
|
}, [open, sideOffset, align, triggerRef]);
|
|
1552
|
-
|
|
1533
|
+
React10.useEffect(() => {
|
|
1553
1534
|
if (!open) return;
|
|
1554
1535
|
const handleClickOutside = (e) => {
|
|
1555
1536
|
if (contentRef.current && !contentRef.current.contains(e.target) && triggerRef.current && !triggerRef.current.contains(e.target)) {
|
|
@@ -1569,7 +1550,7 @@ var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, align
|
|
|
1569
1550
|
};
|
|
1570
1551
|
}, [open, setOpen, triggerRef]);
|
|
1571
1552
|
if (!open) return null;
|
|
1572
|
-
return /* @__PURE__ */
|
|
1553
|
+
return /* @__PURE__ */ jsx10(DropdownMenuPortal, { children: /* @__PURE__ */ jsx10(
|
|
1573
1554
|
"div",
|
|
1574
1555
|
{
|
|
1575
1556
|
ref: contentRef,
|
|
@@ -1587,9 +1568,9 @@ var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, align
|
|
|
1587
1568
|
) });
|
|
1588
1569
|
});
|
|
1589
1570
|
DropdownMenuContent.displayName = "DropdownMenuContent";
|
|
1590
|
-
var DropdownMenuItem =
|
|
1571
|
+
var DropdownMenuItem = React10.forwardRef(({ className, inset, onClick, ...props }, ref) => {
|
|
1591
1572
|
const { setOpen } = useDropdownMenu();
|
|
1592
|
-
return /* @__PURE__ */
|
|
1573
|
+
return /* @__PURE__ */ jsx10(
|
|
1593
1574
|
"div",
|
|
1594
1575
|
{
|
|
1595
1576
|
ref,
|
|
@@ -1607,7 +1588,7 @@ var DropdownMenuItem = React11.forwardRef(({ className, inset, onClick, ...props
|
|
|
1607
1588
|
);
|
|
1608
1589
|
});
|
|
1609
1590
|
DropdownMenuItem.displayName = "DropdownMenuItem";
|
|
1610
|
-
var DropdownMenuCheckboxItem =
|
|
1591
|
+
var DropdownMenuCheckboxItem = React10.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs6(
|
|
1611
1592
|
"div",
|
|
1612
1593
|
{
|
|
1613
1594
|
ref,
|
|
@@ -1617,13 +1598,13 @@ var DropdownMenuCheckboxItem = React11.forwardRef(({ className, children, checke
|
|
|
1617
1598
|
),
|
|
1618
1599
|
...props,
|
|
1619
1600
|
children: [
|
|
1620
|
-
/* @__PURE__ */
|
|
1601
|
+
/* @__PURE__ */ jsx10("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: checked && /* @__PURE__ */ jsx10(Check, { className: "h-4 w-4" }) }),
|
|
1621
1602
|
children
|
|
1622
1603
|
]
|
|
1623
1604
|
}
|
|
1624
1605
|
));
|
|
1625
1606
|
DropdownMenuCheckboxItem.displayName = "DropdownMenuCheckboxItem";
|
|
1626
|
-
var DropdownMenuRadioItem =
|
|
1607
|
+
var DropdownMenuRadioItem = React10.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs6(
|
|
1627
1608
|
"div",
|
|
1628
1609
|
{
|
|
1629
1610
|
ref,
|
|
@@ -1633,13 +1614,13 @@ var DropdownMenuRadioItem = React11.forwardRef(({ className, children, ...props
|
|
|
1633
1614
|
),
|
|
1634
1615
|
...props,
|
|
1635
1616
|
children: [
|
|
1636
|
-
/* @__PURE__ */
|
|
1617
|
+
/* @__PURE__ */ jsx10("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx10(Circle, { className: "h-2 w-2 fill-current" }) }),
|
|
1637
1618
|
children
|
|
1638
1619
|
]
|
|
1639
1620
|
}
|
|
1640
1621
|
));
|
|
1641
1622
|
DropdownMenuRadioItem.displayName = "DropdownMenuRadioItem";
|
|
1642
|
-
var DropdownMenuLabel =
|
|
1623
|
+
var DropdownMenuLabel = React10.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx10(
|
|
1643
1624
|
"div",
|
|
1644
1625
|
{
|
|
1645
1626
|
ref,
|
|
@@ -1652,7 +1633,7 @@ var DropdownMenuLabel = React11.forwardRef(({ className, inset, ...props }, ref)
|
|
|
1652
1633
|
}
|
|
1653
1634
|
));
|
|
1654
1635
|
DropdownMenuLabel.displayName = "DropdownMenuLabel";
|
|
1655
|
-
var DropdownMenuSeparator =
|
|
1636
|
+
var DropdownMenuSeparator = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
|
|
1656
1637
|
"div",
|
|
1657
1638
|
{
|
|
1658
1639
|
ref,
|
|
@@ -1665,7 +1646,7 @@ var DropdownMenuShortcut = ({
|
|
|
1665
1646
|
className,
|
|
1666
1647
|
...props
|
|
1667
1648
|
}) => {
|
|
1668
|
-
return /* @__PURE__ */
|
|
1649
|
+
return /* @__PURE__ */ jsx10(
|
|
1669
1650
|
"span",
|
|
1670
1651
|
{
|
|
1671
1652
|
className: cn("ml-auto text-label tracking-widest opacity-60", className),
|
|
@@ -1679,9 +1660,9 @@ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
|
|
|
1679
1660
|
import { useEffect as useEffect6, useRef as useRef5, useState as useState4 } from "react";
|
|
1680
1661
|
|
|
1681
1662
|
// src/components/ui/input.tsx
|
|
1682
|
-
import * as
|
|
1663
|
+
import * as React11 from "react";
|
|
1683
1664
|
import { Field } from "formik";
|
|
1684
|
-
import { jsx as
|
|
1665
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
1685
1666
|
var baseClasses = [
|
|
1686
1667
|
"flex h-[2.571rem] w-full items-center rounded-[0.65rem] px-4 py-0",
|
|
1687
1668
|
"text-[0.8125rem] text-[var(--color-neutral-800)]",
|
|
@@ -1698,7 +1679,7 @@ var baseClasses = [
|
|
|
1698
1679
|
"disabled:cursor-not-allowed",
|
|
1699
1680
|
"disabled:opacity-50"
|
|
1700
1681
|
].join(" ");
|
|
1701
|
-
var Input =
|
|
1682
|
+
var Input = React11.forwardRef(
|
|
1702
1683
|
({
|
|
1703
1684
|
as = "input",
|
|
1704
1685
|
className,
|
|
@@ -1709,10 +1690,10 @@ var Input = React12.forwardRef(
|
|
|
1709
1690
|
innerRef,
|
|
1710
1691
|
...props
|
|
1711
1692
|
}, ref) => {
|
|
1712
|
-
const internalRef =
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1693
|
+
const internalRef = React11.useRef(null);
|
|
1694
|
+
React11.useImperativeHandle(ref, () => internalRef.current);
|
|
1695
|
+
React11.useImperativeHandle(innerRef, () => internalRef.current);
|
|
1696
|
+
React11.useEffect(() => {
|
|
1716
1697
|
if (autoFocus) {
|
|
1717
1698
|
internalRef.current?.focus();
|
|
1718
1699
|
}
|
|
@@ -1723,7 +1704,7 @@ var Input = React12.forwardRef(
|
|
|
1723
1704
|
className
|
|
1724
1705
|
);
|
|
1725
1706
|
if (as === "field") {
|
|
1726
|
-
return /* @__PURE__ */
|
|
1707
|
+
return /* @__PURE__ */ jsx11(
|
|
1727
1708
|
Field,
|
|
1728
1709
|
{
|
|
1729
1710
|
innerRef: internalRef,
|
|
@@ -1735,7 +1716,7 @@ var Input = React12.forwardRef(
|
|
|
1735
1716
|
}
|
|
1736
1717
|
);
|
|
1737
1718
|
}
|
|
1738
|
-
return /* @__PURE__ */
|
|
1719
|
+
return /* @__PURE__ */ jsx11(
|
|
1739
1720
|
"input",
|
|
1740
1721
|
{
|
|
1741
1722
|
ref: internalRef,
|
|
@@ -1751,7 +1732,7 @@ var Input = React12.forwardRef(
|
|
|
1751
1732
|
Input.displayName = "Input";
|
|
1752
1733
|
|
|
1753
1734
|
// src/components/ui/expandable-search.tsx
|
|
1754
|
-
import { jsx as
|
|
1735
|
+
import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1755
1736
|
var ExpandableSearch = ({ onSearch, placeholder = "Search...", className = "" }) => {
|
|
1756
1737
|
const [isExpanded, setIsExpanded] = useState4(false);
|
|
1757
1738
|
const [searchValue, setSearchValue] = useState4("");
|
|
@@ -1780,9 +1761,9 @@ var ExpandableSearch = ({ onSearch, placeholder = "Search...", className = "" })
|
|
|
1780
1761
|
inputRef.current.focus();
|
|
1781
1762
|
}
|
|
1782
1763
|
};
|
|
1783
|
-
return /* @__PURE__ */
|
|
1784
|
-
/* @__PURE__ */
|
|
1785
|
-
/* @__PURE__ */
|
|
1764
|
+
return /* @__PURE__ */ jsx12("div", { className: `flex items-center ${className}`, children: isExpanded ? /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-2 transition-all duration-300 ease-in-out", children: [
|
|
1765
|
+
/* @__PURE__ */ jsxs7("div", { className: "relative flex justify-center items-center", children: [
|
|
1766
|
+
/* @__PURE__ */ jsx12(
|
|
1786
1767
|
Input,
|
|
1787
1768
|
{
|
|
1788
1769
|
ref: inputRef,
|
|
@@ -1793,25 +1774,25 @@ var ExpandableSearch = ({ onSearch, placeholder = "Search...", className = "" })
|
|
|
1793
1774
|
className: "formfield__search"
|
|
1794
1775
|
}
|
|
1795
1776
|
),
|
|
1796
|
-
searchValue && /* @__PURE__ */
|
|
1777
|
+
searchValue && /* @__PURE__ */ jsx12(
|
|
1797
1778
|
Button,
|
|
1798
1779
|
{
|
|
1799
1780
|
onClick: handleClear,
|
|
1800
1781
|
variant: "ghost",
|
|
1801
1782
|
size: "icon",
|
|
1802
1783
|
className: "absolute right-3 top-1/2 -translate-y-1/2 text-neutral-600 hover:text-[var(--color-ext-4b5563)] transition-colors",
|
|
1803
|
-
children: /* @__PURE__ */
|
|
1784
|
+
children: /* @__PURE__ */ jsx12("i", { className: "icon-neo-close text-[0.875rem]" })
|
|
1804
1785
|
}
|
|
1805
1786
|
)
|
|
1806
1787
|
] }),
|
|
1807
|
-
/* @__PURE__ */
|
|
1808
|
-
] }) : /* @__PURE__ */
|
|
1788
|
+
/* @__PURE__ */ jsx12(Button, { variant: "ghost", size: "icon", onClick: handleToggle, children: /* @__PURE__ */ jsx12("i", { className: "icon-neo-close text-[0.875rem]" }) })
|
|
1789
|
+
] }) : /* @__PURE__ */ jsx12(Button, { variant: "ghost", size: "icon", onClick: handleToggle, className: "header__round-btn", children: /* @__PURE__ */ jsx12("i", { className: "icon-neo-search" }) }) });
|
|
1809
1790
|
};
|
|
1810
1791
|
|
|
1811
1792
|
// src/components/ui/file-input.tsx
|
|
1812
|
-
import * as
|
|
1813
|
-
import { Fragment as Fragment4, jsx as
|
|
1814
|
-
var FileInput =
|
|
1793
|
+
import * as React13 from "react";
|
|
1794
|
+
import { Fragment as Fragment4, jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1795
|
+
var FileInput = React13.forwardRef(
|
|
1815
1796
|
({
|
|
1816
1797
|
id,
|
|
1817
1798
|
className,
|
|
@@ -1823,10 +1804,10 @@ var FileInput = React14.forwardRef(
|
|
|
1823
1804
|
disabled,
|
|
1824
1805
|
...props
|
|
1825
1806
|
}, ref) => {
|
|
1826
|
-
const generatedId =
|
|
1807
|
+
const generatedId = React13.useId();
|
|
1827
1808
|
const inputId = id ?? generatedId;
|
|
1828
|
-
const content = /* @__PURE__ */
|
|
1829
|
-
/* @__PURE__ */
|
|
1809
|
+
const content = /* @__PURE__ */ jsxs8(Fragment4, { children: [
|
|
1810
|
+
/* @__PURE__ */ jsx13(
|
|
1830
1811
|
"input",
|
|
1831
1812
|
{
|
|
1832
1813
|
ref,
|
|
@@ -1837,17 +1818,18 @@ var FileInput = React14.forwardRef(
|
|
|
1837
1818
|
...props
|
|
1838
1819
|
}
|
|
1839
1820
|
),
|
|
1840
|
-
children && /* @__PURE__ */
|
|
1821
|
+
children && /* @__PURE__ */ jsx13("label", { htmlFor: inputId, className: labelClassName, style: labelStyle, ...labelProps, children })
|
|
1841
1822
|
] });
|
|
1842
|
-
return wrapperClassName ? /* @__PURE__ */
|
|
1823
|
+
return wrapperClassName ? /* @__PURE__ */ jsx13("div", { className: wrapperClassName, children: content }) : content;
|
|
1843
1824
|
}
|
|
1844
1825
|
);
|
|
1845
1826
|
FileInput.displayName = "FileInput";
|
|
1846
1827
|
|
|
1847
1828
|
// src/components/ui/form-field.tsx
|
|
1848
|
-
import "react";
|
|
1849
|
-
import { ErrorMessage } from "formik";
|
|
1850
|
-
import { jsx as
|
|
1829
|
+
import React14 from "react";
|
|
1830
|
+
import { ErrorMessage, Field as Field2 } from "formik";
|
|
1831
|
+
import { jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1832
|
+
var LABELABLE_TAGS = /* @__PURE__ */ new Set(["input", "select", "textarea"]);
|
|
1851
1833
|
var FormField = ({
|
|
1852
1834
|
label,
|
|
1853
1835
|
required,
|
|
@@ -1855,19 +1837,87 @@ var FormField = ({
|
|
|
1855
1837
|
error,
|
|
1856
1838
|
hint,
|
|
1857
1839
|
children,
|
|
1858
|
-
className
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
children
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1840
|
+
className,
|
|
1841
|
+
id
|
|
1842
|
+
}) => {
|
|
1843
|
+
const generatedId = React14.useId();
|
|
1844
|
+
const fieldId = id ?? generatedId;
|
|
1845
|
+
let renderedChildren = children;
|
|
1846
|
+
if (label && React14.isValidElement(children) && (children.type === Field2 || typeof children.type === "string" && LABELABLE_TAGS.has(children.type)) && !children.props.id) {
|
|
1847
|
+
renderedChildren = React14.cloneElement(children, { id: fieldId });
|
|
1848
|
+
}
|
|
1849
|
+
return /* @__PURE__ */ jsxs9("div", { className: cn("form__field", className), children: [
|
|
1850
|
+
label && /* @__PURE__ */ jsxs9("label", { className: "formfield__label", htmlFor: fieldId, children: [
|
|
1851
|
+
label,
|
|
1852
|
+
required && /* @__PURE__ */ jsx14("span", { className: "required-field", children: "*" })
|
|
1853
|
+
] }),
|
|
1854
|
+
renderedChildren,
|
|
1855
|
+
hint && /* @__PURE__ */ jsx14("p", { className: "text-[0.75rem] text-neutral-600 mt-1", children: hint }),
|
|
1856
|
+
errorName && /* @__PURE__ */ jsx14(ErrorMessage, { name: errorName, component: "p", className: "form-error" }),
|
|
1857
|
+
!errorName && error && /* @__PURE__ */ jsx14("p", { className: "form-error", children: error })
|
|
1858
|
+
] });
|
|
1859
|
+
};
|
|
1869
1860
|
var form_field_default = FormField;
|
|
1870
1861
|
|
|
1862
|
+
// src/components/ui/icon.tsx
|
|
1863
|
+
import * as React15 from "react";
|
|
1864
|
+
import "class-variance-authority";
|
|
1865
|
+
import { jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1866
|
+
var Icon = React15.forwardRef(
|
|
1867
|
+
({
|
|
1868
|
+
name,
|
|
1869
|
+
variant,
|
|
1870
|
+
size,
|
|
1871
|
+
color: color6 = "primary",
|
|
1872
|
+
hoverColor,
|
|
1873
|
+
tooltipText,
|
|
1874
|
+
showTooltip = false,
|
|
1875
|
+
disabled,
|
|
1876
|
+
className,
|
|
1877
|
+
onClick,
|
|
1878
|
+
style,
|
|
1879
|
+
...props
|
|
1880
|
+
}, ref) => {
|
|
1881
|
+
const colorProps = getIconColorProps(color6, hoverColor);
|
|
1882
|
+
const icon = /* @__PURE__ */ jsx15(
|
|
1883
|
+
"i",
|
|
1884
|
+
{
|
|
1885
|
+
ref,
|
|
1886
|
+
className: cn(
|
|
1887
|
+
`${name}`,
|
|
1888
|
+
iconVariants({ variant, size }),
|
|
1889
|
+
colorProps.className,
|
|
1890
|
+
onClick && !disabled && "cursor-pointer",
|
|
1891
|
+
className
|
|
1892
|
+
),
|
|
1893
|
+
onClick,
|
|
1894
|
+
style: { ...colorProps.style, ...style },
|
|
1895
|
+
role: onClick ? "button" : void 0,
|
|
1896
|
+
tabIndex: onClick ? 0 : void 0,
|
|
1897
|
+
"aria-hidden": onClick ? "true" : "false",
|
|
1898
|
+
onKeyDown: (e) => {
|
|
1899
|
+
if (!onClick) return;
|
|
1900
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
1901
|
+
e.preventDefault();
|
|
1902
|
+
onClick(
|
|
1903
|
+
e
|
|
1904
|
+
);
|
|
1905
|
+
}
|
|
1906
|
+
},
|
|
1907
|
+
...props
|
|
1908
|
+
}
|
|
1909
|
+
);
|
|
1910
|
+
if (!showTooltip) {
|
|
1911
|
+
return icon;
|
|
1912
|
+
}
|
|
1913
|
+
return /* @__PURE__ */ jsxs10(Tooltip, { children: [
|
|
1914
|
+
/* @__PURE__ */ jsx15(TooltipTrigger, { asChild: true, children: icon }),
|
|
1915
|
+
/* @__PURE__ */ jsx15(TooltipContent, { children: /* @__PURE__ */ jsx15("small", { children: tooltipText || name }) })
|
|
1916
|
+
] });
|
|
1917
|
+
}
|
|
1918
|
+
);
|
|
1919
|
+
Icon.displayName = "Icon";
|
|
1920
|
+
|
|
1871
1921
|
// src/components/ui/list.tsx
|
|
1872
1922
|
import * as React16 from "react";
|
|
1873
1923
|
import { jsx as jsx16 } from "react/jsx-runtime";
|
|
@@ -2166,6 +2216,7 @@ var ScrollArea = React20.forwardRef(({ className, children, ...props }, ref) =>
|
|
|
2166
2216
|
"div",
|
|
2167
2217
|
{
|
|
2168
2218
|
ref,
|
|
2219
|
+
tabIndex: 0,
|
|
2169
2220
|
className: cn(
|
|
2170
2221
|
"relative overflow-y-auto overflow-x-hidden",
|
|
2171
2222
|
"[&::-webkit-scrollbar]:w-[0.375rem]",
|
|
@@ -2339,8 +2390,12 @@ var Tab = React22.forwardRef(
|
|
|
2339
2390
|
variant,
|
|
2340
2391
|
size,
|
|
2341
2392
|
disabled,
|
|
2342
|
-
onClick
|
|
2393
|
+
onClick,
|
|
2394
|
+
id,
|
|
2395
|
+
panelId
|
|
2343
2396
|
}, ref) => {
|
|
2397
|
+
const generatedId = React22.useId();
|
|
2398
|
+
const resolvedId = id ?? generatedId;
|
|
2344
2399
|
const handleKeyDown = (e) => {
|
|
2345
2400
|
if (disabled) return;
|
|
2346
2401
|
if (e.key === "Enter" || e.key === " ") {
|
|
@@ -2352,9 +2407,11 @@ var Tab = React22.forwardRef(
|
|
|
2352
2407
|
"div",
|
|
2353
2408
|
{
|
|
2354
2409
|
ref,
|
|
2410
|
+
id: resolvedId,
|
|
2355
2411
|
role: "tab",
|
|
2356
2412
|
"aria-selected": active,
|
|
2357
2413
|
"aria-disabled": disabled,
|
|
2414
|
+
"aria-controls": panelId,
|
|
2358
2415
|
tabIndex: disabled ? -1 : active ? 0 : -1,
|
|
2359
2416
|
onClick: !disabled ? onClick : void 0,
|
|
2360
2417
|
onKeyDown: handleKeyDown,
|
|
@@ -2569,7 +2626,7 @@ Table.displayName = "Table";
|
|
|
2569
2626
|
|
|
2570
2627
|
// src/components/ui/textarea.tsx
|
|
2571
2628
|
import * as React24 from "react";
|
|
2572
|
-
import { Field as
|
|
2629
|
+
import { Field as Field3 } from "formik";
|
|
2573
2630
|
import { jsx as jsx24 } from "react/jsx-runtime";
|
|
2574
2631
|
var Textarea = React24.forwardRef(
|
|
2575
2632
|
({
|
|
@@ -2609,7 +2666,7 @@ var Textarea = React24.forwardRef(
|
|
|
2609
2666
|
);
|
|
2610
2667
|
if (as === "field") {
|
|
2611
2668
|
return /* @__PURE__ */ jsx24(
|
|
2612
|
-
|
|
2669
|
+
Field3,
|
|
2613
2670
|
{
|
|
2614
2671
|
as: "textarea",
|
|
2615
2672
|
innerRef: ref,
|
|
@@ -2726,7 +2783,8 @@ var TimePicker = ({
|
|
|
2726
2783
|
},
|
|
2727
2784
|
name: "icon-neo-close",
|
|
2728
2785
|
color: "muted",
|
|
2729
|
-
size: "xs"
|
|
2786
|
+
size: "xs",
|
|
2787
|
+
tooltipText: "Clear time"
|
|
2730
2788
|
}
|
|
2731
2789
|
),
|
|
2732
2790
|
/* @__PURE__ */ jsx25("i", { className: "icon-neo-time-four shared-time-picker__icon" })
|
|
@@ -2894,6 +2952,7 @@ var TruncatedTextByWidth = ({ text, className }) => {
|
|
|
2894
2952
|
|
|
2895
2953
|
// src/components/ui/view-toggle.tsx
|
|
2896
2954
|
import * as React28 from "react";
|
|
2955
|
+
import { useTranslation as useTranslation3 } from "react-i18next";
|
|
2897
2956
|
import { jsx as jsx28, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
2898
2957
|
var VIEW_MODE_KEY = "fp_view_mode";
|
|
2899
2958
|
var useViewMode = () => {
|
|
@@ -2909,6 +2968,8 @@ var useViewMode = () => {
|
|
|
2909
2968
|
return [viewMode, setAndPersist];
|
|
2910
2969
|
};
|
|
2911
2970
|
var ViewToggle = ({ viewMode = "grid" /* GRID */, onViewModeChange }) => {
|
|
2971
|
+
const translationKey = getTranslationKey();
|
|
2972
|
+
const { t } = useTranslation3(translationKey);
|
|
2912
2973
|
return /* @__PURE__ */ jsxs18("div", { className: "view-toggle", children: [
|
|
2913
2974
|
/* @__PURE__ */ jsxs18(Tooltip, { children: [
|
|
2914
2975
|
/* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx28(
|
|
@@ -2919,10 +2980,11 @@ var ViewToggle = ({ viewMode = "grid" /* GRID */, onViewModeChange }) => {
|
|
|
2919
2980
|
className: `view-toggle__btn${viewMode === "grid" /* GRID */ ? " view-toggle__btn--active" : ""}`,
|
|
2920
2981
|
variant: "ghost",
|
|
2921
2982
|
size: "icon",
|
|
2922
|
-
|
|
2983
|
+
"aria-label": t("ActionNames.gridView") || "Grid view",
|
|
2984
|
+
children: /* @__PURE__ */ jsx28("i", { className: "icon-neo-grid", "aria-hidden": "true" })
|
|
2923
2985
|
}
|
|
2924
2986
|
) }),
|
|
2925
|
-
/* @__PURE__ */ jsx28(TooltipContent, { children: "Grid view" })
|
|
2987
|
+
/* @__PURE__ */ jsx28(TooltipContent, { children: t("ActionNames.gridView") || "Grid view" })
|
|
2926
2988
|
] }),
|
|
2927
2989
|
/* @__PURE__ */ jsxs18(Tooltip, { children: [
|
|
2928
2990
|
/* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx28(
|
|
@@ -2933,10 +2995,11 @@ var ViewToggle = ({ viewMode = "grid" /* GRID */, onViewModeChange }) => {
|
|
|
2933
2995
|
className: `view-toggle__btn${viewMode === "list" /* LIST */ ? " view-toggle__btn--active" : ""}`,
|
|
2934
2996
|
variant: "ghost",
|
|
2935
2997
|
size: "icon",
|
|
2936
|
-
|
|
2998
|
+
"aria-label": t("ActionNames.listView") || "List view",
|
|
2999
|
+
children: /* @__PURE__ */ jsx28("i", { className: "icon-neo-list", "aria-hidden": "true" })
|
|
2937
3000
|
}
|
|
2938
3001
|
) }),
|
|
2939
|
-
/* @__PURE__ */ jsx28(TooltipContent, { children: "List view" })
|
|
3002
|
+
/* @__PURE__ */ jsx28(TooltipContent, { children: t("ActionNames.listView") || "List view" })
|
|
2940
3003
|
] })
|
|
2941
3004
|
] });
|
|
2942
3005
|
};
|