@flamingo-stack/openframe-frontend-core 0.0.712 → 0.0.714
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/{chunk-FCAVAEHF.js → chunk-2LZ3IYGT.js} +701 -620
- package/dist/{chunk-G3OMVCID.js → chunk-4GFAKUHF.js} +1 -1
- package/dist/{chunk-7NSU5EQD.cjs → chunk-5MMCYJAJ.cjs} +11 -11
- package/dist/{chunk-3SEEGNRE.js → chunk-AQI74KC7.js} +3 -3
- package/dist/{chunk-5Y72YQEK.js → chunk-BIFUUH4K.js} +3 -3
- package/dist/{chunk-OPYODNV2.js → chunk-DI5VLY3G.js} +1 -1
- package/dist/{chunk-OBZJICEA.cjs → chunk-E25A235W.cjs} +3 -3
- package/dist/{chunk-BXSRTBLU.cjs → chunk-EORJFB2Z.cjs} +2 -2
- package/dist/{chunk-T3CLXR43.cjs → chunk-GXHWSAV6.cjs} +15 -15
- package/dist/{chunk-EFNKS5W4.js → chunk-JHSPIDV5.js} +1 -1
- package/dist/{chunk-4UYKNOZG.js → chunk-KSEOIICU.js} +2 -2
- package/dist/{chunk-JGCFRTND.cjs → chunk-LTLHCAZY.cjs} +4 -4
- package/dist/{chunk-5SDELRH3.js → chunk-OQVGA3YE.js} +1 -1
- package/dist/{chunk-7HNYYNKE.js → chunk-QW7KTWLB.js} +2 -2
- package/dist/{chunk-CSCJU6YC.cjs → chunk-S66W6HNZ.cjs} +10 -10
- package/dist/{chunk-WWJG4GVG.cjs → chunk-U4WCFIYB.cjs} +22 -22
- package/dist/{chunk-RBYVFPER.js → chunk-VBDGMXZO.js} +1 -1
- package/dist/{chunk-N67XG5GY.js → chunk-VKIRTB7K.js} +1 -1
- package/dist/{chunk-3UAJLO5U.cjs → chunk-W4CS6UJS.cjs} +3 -3
- package/dist/{chunk-Z5SWJW5Q.cjs → chunk-WEEZSGFD.cjs} +23 -23
- package/dist/{chunk-UT3ODMBU.cjs → chunk-XFFIUXVI.cjs} +2 -2
- package/dist/{chunk-L6ZQGWCX.cjs → chunk-ZSJ6WWFH.cjs} +191 -110
- package/dist/{cloud-tenants-KZUZGD4A.cjs → cloud-tenants-MI7APZJD.cjs} +2 -2
- package/dist/{cloud-tenants-OGLVVQ7X.js → cloud-tenants-NSEVWC26.js} +1 -1
- package/dist/components/case-studies/index.cjs +10 -10
- package/dist/components/case-studies/index.js +2 -2
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/docs/index.cjs +5 -5
- package/dist/components/docs/index.js +4 -4
- package/dist/components/embeds/index.cjs +3 -3
- package/dist/components/embeds/index.js +2 -2
- package/dist/components/faq/index.cjs +3 -3
- package/dist/components/faq/index.js +2 -2
- package/dist/components/features/approval-level.d.ts +53 -0
- package/dist/components/features/approval-level.d.ts.map +1 -0
- package/dist/components/features/index.cjs +10 -2
- package/dist/components/features/index.d.ts +1 -0
- package/dist/components/features/index.d.ts.map +1 -1
- package/dist/components/features/index.js +9 -1
- package/dist/components/features/policy-configuration-panel.d.ts.map +1 -1
- package/dist/components/help-center-pages/index.cjs +39 -39
- package/dist/components/help-center-pages/index.js +10 -10
- package/dist/components/index.cjs +26 -18
- package/dist/components/index.js +16 -8
- package/dist/components/meeting-scheduler/index.cjs +11 -11
- package/dist/components/meeting-scheduler/index.js +1 -1
- package/dist/components/navigation/index.cjs +3 -3
- package/dist/components/navigation/index.js +2 -2
- package/dist/components/onboarding-guides/index.cjs +4 -4
- package/dist/components/onboarding-guides/index.js +3 -3
- package/dist/components/product-demo/index.cjs +6 -6
- package/dist/components/product-demo/index.js +6 -6
- package/dist/components/tickets/index.cjs +5 -5
- package/dist/components/tickets/index.js +4 -4
- package/dist/components/ui/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/{devices-YGYJIXQY.cjs → devices-6NMK4EXV.cjs} +3 -3
- package/dist/{devices-LBMG42K6.js → devices-W3VKQEVZ.js} +1 -1
- package/dist/index.cjs +11 -3
- package/dist/index.js +10 -2
- package/dist/{knowledge-KTCVJIWN.cjs → knowledge-GDMGHFEC.cjs} +2 -2
- package/dist/{knowledge-H5BIWJVI.js → knowledge-YWCB7HNC.js} +1 -1
- package/dist/{logs-RVCC2UQW.cjs → logs-7QDRV3GN.cjs} +10 -10
- package/dist/{logs-DB5Z7M5Q.js → logs-E742S5A2.js} +1 -1
- package/dist/{policies-HV4IQCBV.cjs → policies-BEVF6AEM.cjs} +6 -6
- package/dist/{policies-EWUULFBR.js → policies-XTPAKRHI.js} +1 -1
- package/dist/{software-update-6PXKRKBT.js → software-update-FXWIEKSW.js} +1 -1
- package/dist/{software-update-D4OVSWSG.cjs → software-update-KPHX4XQ7.cjs} +6 -6
- package/package.json +1 -1
- package/src/components/features/approval-level.tsx +153 -0
- package/src/components/features/index.ts +1 -0
- package/src/components/features/policy-configuration-panel.tsx +3 -12
|
@@ -248,6 +248,7 @@ import {
|
|
|
248
248
|
Arrow01DownIcon,
|
|
249
249
|
Arrow01UpIcon,
|
|
250
250
|
ArrowRightUpIcon,
|
|
251
|
+
BannedIcon,
|
|
251
252
|
BellOffIcon,
|
|
252
253
|
BookTextIcon,
|
|
253
254
|
BoxArchiveIcon,
|
|
@@ -282,6 +283,7 @@ import {
|
|
|
282
283
|
GoogleLogoIcon,
|
|
283
284
|
GridIcon,
|
|
284
285
|
HardDrivesIcon,
|
|
286
|
+
HeadsetIcon,
|
|
285
287
|
HhsLogoIcon,
|
|
286
288
|
HomebrewLogoGreyIcon,
|
|
287
289
|
ImageOffIcon,
|
|
@@ -25354,29 +25356,104 @@ function ViewToggle({
|
|
|
25354
25356
|
);
|
|
25355
25357
|
}
|
|
25356
25358
|
|
|
25359
|
+
// src/components/features/approval-level.tsx
|
|
25360
|
+
import { jsx as jsx246, jsxs as jsxs196 } from "react/jsx-runtime";
|
|
25361
|
+
var APPROVAL_LEVELS = ["ALLOW", "DENY", "ASK_TECHNICIAN", "ASK_USER"];
|
|
25362
|
+
var APPROVAL_LEVEL_META = {
|
|
25363
|
+
ALLOW: {
|
|
25364
|
+
label: "Allow",
|
|
25365
|
+
hint: "Runs on its own. You get a summary after.",
|
|
25366
|
+
Icon: CheckCircleIcon,
|
|
25367
|
+
toneClassName: "text-ods-success"
|
|
25368
|
+
},
|
|
25369
|
+
ASK_USER: {
|
|
25370
|
+
label: "Ask User",
|
|
25371
|
+
hint: "Asks the person at the computer first.",
|
|
25372
|
+
Icon: UserIcon,
|
|
25373
|
+
toneClassName: "text-ods-warning"
|
|
25374
|
+
},
|
|
25375
|
+
ASK_TECHNICIAN: {
|
|
25376
|
+
label: "Ask Technician",
|
|
25377
|
+
hint: "Asks a technician first. Nothing runs until they approve.",
|
|
25378
|
+
Icon: HeadsetIcon,
|
|
25379
|
+
toneClassName: "text-ods-warning"
|
|
25380
|
+
},
|
|
25381
|
+
DENY: { label: "Restrict", hint: "Never runs.", Icon: BannedIcon, toneClassName: "text-ods-error" }
|
|
25382
|
+
};
|
|
25383
|
+
var ICON_PX = 16;
|
|
25384
|
+
function ApprovalLevelMark({ level, iconOnly = false, className }) {
|
|
25385
|
+
const { label, hint, Icon, toneClassName } = APPROVAL_LEVEL_META[level];
|
|
25386
|
+
const mark = /* @__PURE__ */ jsxs196("span", { className: cn("inline-flex items-center gap-[var(--spacing-system-xxs)] text-h6", toneClassName, className), children: [
|
|
25387
|
+
/* @__PURE__ */ jsx246(Icon, { size: ICON_PX, className: "shrink-0", "aria-hidden": true }),
|
|
25388
|
+
iconOnly ? /* @__PURE__ */ jsx246("span", { className: "sr-only", children: label }) : label
|
|
25389
|
+
] });
|
|
25390
|
+
return iconOnly ? /* @__PURE__ */ jsx246(TouchFriendlyTooltip, { content: `${label}: ${hint}`, side: "top", children: mark }) : mark;
|
|
25391
|
+
}
|
|
25392
|
+
function ApprovalLevelControl({
|
|
25393
|
+
value,
|
|
25394
|
+
onChange,
|
|
25395
|
+
"aria-labelledby": labelledBy,
|
|
25396
|
+
showLabel = true,
|
|
25397
|
+
disabled = false,
|
|
25398
|
+
className
|
|
25399
|
+
}) {
|
|
25400
|
+
const current = APPROVAL_LEVEL_META[value];
|
|
25401
|
+
return /* @__PURE__ */ jsxs196("div", { className: cn("flex shrink-0 items-center gap-[var(--spacing-system-sf)]", className), children: [
|
|
25402
|
+
showLabel && /* @__PURE__ */ jsx246("span", { className: cn("whitespace-nowrap text-h6", current.toneClassName), children: current.label }),
|
|
25403
|
+
/* @__PURE__ */ jsx246(TooltipProvider, { delayDuration: 150, children: /* @__PURE__ */ jsx246(
|
|
25404
|
+
ToggleGroup,
|
|
25405
|
+
{
|
|
25406
|
+
type: "single",
|
|
25407
|
+
variant: "outline",
|
|
25408
|
+
size: "sm",
|
|
25409
|
+
value,
|
|
25410
|
+
disabled,
|
|
25411
|
+
onValueChange: (next) => {
|
|
25412
|
+
if (next && next !== value) onChange(next);
|
|
25413
|
+
},
|
|
25414
|
+
"aria-labelledby": labelledBy,
|
|
25415
|
+
children: APPROVAL_LEVELS.map((level) => {
|
|
25416
|
+
const { label, hint, Icon, toneClassName } = APPROVAL_LEVEL_META[level];
|
|
25417
|
+
return (
|
|
25418
|
+
// A plain tooltip (hover and keyboard focus): a tap must SELECT the level, and on
|
|
25419
|
+
// touch the name beside the group says what is in force.
|
|
25420
|
+
/* @__PURE__ */ jsxs196(Tooltip, { children: [
|
|
25421
|
+
/* @__PURE__ */ jsx246(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx246(
|
|
25422
|
+
ToggleGroupItem,
|
|
25423
|
+
{
|
|
25424
|
+
value: level,
|
|
25425
|
+
"aria-label": label,
|
|
25426
|
+
className: cn("px-2", level === value && toneClassName),
|
|
25427
|
+
children: /* @__PURE__ */ jsx246(Icon, { size: ICON_PX, "aria-hidden": true })
|
|
25428
|
+
}
|
|
25429
|
+
) }),
|
|
25430
|
+
/* @__PURE__ */ jsxs196(TooltipContent, { side: "top", className: "max-w-xs", children: [
|
|
25431
|
+
/* @__PURE__ */ jsx246("b", { children: label }),
|
|
25432
|
+
": ",
|
|
25433
|
+
hint
|
|
25434
|
+
] })
|
|
25435
|
+
] }, level)
|
|
25436
|
+
);
|
|
25437
|
+
})
|
|
25438
|
+
}
|
|
25439
|
+
) })
|
|
25440
|
+
] });
|
|
25441
|
+
}
|
|
25442
|
+
|
|
25357
25443
|
// src/components/features/policy-configuration-panel.tsx
|
|
25358
25444
|
import { ChevronDown as ChevronDown7, Shield } from "lucide-react";
|
|
25359
25445
|
import { useState as useState65 } from "react";
|
|
25360
|
-
import { Fragment as Fragment40, jsx as
|
|
25361
|
-
var
|
|
25362
|
-
ALLOW: "Allow",
|
|
25363
|
-
ASK_USER: "Ask User",
|
|
25364
|
-
ASK_TECHNICIAN: "Ask Technician",
|
|
25365
|
-
DENY: "Restrict"
|
|
25366
|
-
};
|
|
25367
|
-
var approvalLevelOptions = Object.keys(approvalLevelLabels).map((value) => ({
|
|
25368
|
-
value,
|
|
25369
|
-
label: approvalLevelLabels[value]
|
|
25370
|
-
}));
|
|
25446
|
+
import { Fragment as Fragment40, jsx as jsx247, jsxs as jsxs197 } from "react/jsx-runtime";
|
|
25447
|
+
var approvalLevelOptions = APPROVAL_LEVELS.map((value) => ({ value, label: APPROVAL_LEVEL_META[value].label }));
|
|
25371
25448
|
var POLICY_LEVEL_WIDTH = "w-[180px]";
|
|
25372
25449
|
var CATEGORY_LEVEL_WIDTH = "w-[256px]";
|
|
25373
|
-
var getApprovalLevelLabel = (level) =>
|
|
25374
|
-
var ApprovalLevelDropdown = ({ value, onChange, allowClear = false, triggerClassName, contentClassName }) => /* @__PURE__ */
|
|
25375
|
-
/* @__PURE__ */
|
|
25450
|
+
var getApprovalLevelLabel = (level) => APPROVAL_LEVEL_META[level]?.label ?? level;
|
|
25451
|
+
var ApprovalLevelDropdown = ({ value, onChange, allowClear = false, triggerClassName, contentClassName }) => /* @__PURE__ */ jsxs197(DropdownMenu, { children: [
|
|
25452
|
+
/* @__PURE__ */ jsx247(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx247(
|
|
25376
25453
|
Button,
|
|
25377
25454
|
{
|
|
25378
25455
|
variant: "outline",
|
|
25379
|
-
rightIcon: /* @__PURE__ */
|
|
25456
|
+
rightIcon: /* @__PURE__ */ jsx247(ChevronDown7, { className: "h-6 w-6 text-ods-text-secondary" }),
|
|
25380
25457
|
className: cn(
|
|
25381
25458
|
"flex h-auto items-center justify-between gap-[var(--spacing-system-xsf)] rounded-md border border-ods-border bg-ods-card !px-[var(--spacing-system-xsf)] py-[var(--spacing-system-xsf)] transition-colors !text-h6 hover:bg-ods-bg-hover",
|
|
25382
25459
|
value ? "text-ods-text-primary" : "text-ods-text-secondary",
|
|
@@ -25385,21 +25462,21 @@ var ApprovalLevelDropdown = ({ value, onChange, allowClear = false, triggerClass
|
|
|
25385
25462
|
children: value ? getApprovalLevelLabel(value) : "Set Global Permission"
|
|
25386
25463
|
}
|
|
25387
25464
|
) }),
|
|
25388
|
-
/* @__PURE__ */
|
|
25389
|
-
allowClear && /* @__PURE__ */
|
|
25390
|
-
approvalLevelOptions.map((option) => /* @__PURE__ */
|
|
25465
|
+
/* @__PURE__ */ jsxs197(DropdownMenuContent, { align: "end", className: contentClassName, children: [
|
|
25466
|
+
allowClear && /* @__PURE__ */ jsx247(DropdownMenuItem, { onClick: () => onChange(void 0), className: "text-h6", children: "Clear Global Permission" }),
|
|
25467
|
+
approvalLevelOptions.map((option) => /* @__PURE__ */ jsx247(DropdownMenuItem, { onClick: () => onChange(option.value), className: "text-h6", children: option.label }, option.value))
|
|
25391
25468
|
] })
|
|
25392
25469
|
] });
|
|
25393
25470
|
var PolicyRow = ({ policy, categoryId, editMode, onPermissionChange }) => {
|
|
25394
25471
|
const handleChange = (level) => {
|
|
25395
25472
|
if (level) onPermissionChange(categoryId, policy.id, level);
|
|
25396
25473
|
};
|
|
25397
|
-
return /* @__PURE__ */
|
|
25398
|
-
/* @__PURE__ */
|
|
25399
|
-
/* @__PURE__ */
|
|
25400
|
-
/* @__PURE__ */
|
|
25401
|
-
/* @__PURE__ */
|
|
25402
|
-
editMode ? /* @__PURE__ */
|
|
25474
|
+
return /* @__PURE__ */ jsxs197("div", { className: "flex items-start gap-[var(--spacing-system-m)] border-b border-ods-border bg-ods-bg px-[var(--spacing-system-m)] py-[var(--spacing-system-sf)] last:border-b-0 content-md:items-center", children: [
|
|
25475
|
+
/* @__PURE__ */ jsx247("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-ods-border bg-ods-bg", children: /* @__PURE__ */ jsx247(ToolIcon, { toolType: policy.toolName, size: 16 }) }),
|
|
25476
|
+
/* @__PURE__ */ jsxs197("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
25477
|
+
/* @__PURE__ */ jsx247("p", { className: "truncate text-ods-text-primary text-h4", title: policy.name, children: policy.name }),
|
|
25478
|
+
/* @__PURE__ */ jsx247("p", { className: "break-all text-ods-text-secondary text-h6", children: policy.commandPattern }),
|
|
25479
|
+
editMode ? /* @__PURE__ */ jsx247("div", { className: "mt-[var(--spacing-system-xsf)] content-md:hidden", children: /* @__PURE__ */ jsx247(
|
|
25403
25480
|
ApprovalLevelDropdown,
|
|
25404
25481
|
{
|
|
25405
25482
|
value: policy.approvalLevel,
|
|
@@ -25407,9 +25484,9 @@ var PolicyRow = ({ policy, categoryId, editMode, onPermissionChange }) => {
|
|
|
25407
25484
|
triggerClassName: "w-full",
|
|
25408
25485
|
contentClassName: POLICY_LEVEL_WIDTH
|
|
25409
25486
|
}
|
|
25410
|
-
) }) : policy.approvalLevel ? /* @__PURE__ */
|
|
25487
|
+
) }) : policy.approvalLevel ? /* @__PURE__ */ jsx247("span", { className: "text-ods-text-primary text-h4 content-md:hidden", children: getApprovalLevelLabel(policy.approvalLevel) }) : null
|
|
25411
25488
|
] }),
|
|
25412
|
-
/* @__PURE__ */
|
|
25489
|
+
/* @__PURE__ */ jsx247("div", { className: "hidden shrink-0 content-md:block", children: editMode ? /* @__PURE__ */ jsx247(
|
|
25413
25490
|
ApprovalLevelDropdown,
|
|
25414
25491
|
{
|
|
25415
25492
|
value: policy.approvalLevel,
|
|
@@ -25417,27 +25494,27 @@ var PolicyRow = ({ policy, categoryId, editMode, onPermissionChange }) => {
|
|
|
25417
25494
|
triggerClassName: POLICY_LEVEL_WIDTH,
|
|
25418
25495
|
contentClassName: POLICY_LEVEL_WIDTH
|
|
25419
25496
|
}
|
|
25420
|
-
) : /* @__PURE__ */
|
|
25497
|
+
) : /* @__PURE__ */ jsx247("div", { className: cn("px-[var(--spacing-system-sf)] py-[var(--spacing-system-xsf)]", POLICY_LEVEL_WIDTH), children: policy.approvalLevel && /* @__PURE__ */ jsx247("span", { className: "text-ods-text-primary text-h4", children: getApprovalLevelLabel(policy.approvalLevel) }) }) })
|
|
25421
25498
|
] });
|
|
25422
25499
|
};
|
|
25423
25500
|
var CategorySection = ({ category, editMode, isExpanded, bulkLevel, onToggle, onBulkLevelChange, onPolicyPermissionChange }) => {
|
|
25424
25501
|
const { innerRef, containerStyle } = useCollapsible({ expanded: isExpanded, durationMs: 300 });
|
|
25425
25502
|
const handleBulkChange = (level) => onBulkLevelChange(category.id, level);
|
|
25426
|
-
return /* @__PURE__ */
|
|
25427
|
-
/* @__PURE__ */
|
|
25503
|
+
return /* @__PURE__ */ jsxs197(Fragment40, { children: [
|
|
25504
|
+
/* @__PURE__ */ jsxs197(
|
|
25428
25505
|
"div",
|
|
25429
25506
|
{
|
|
25430
25507
|
className: "flex cursor-pointer items-center gap-[var(--spacing-system-m)] border-t border-ods-border bg-ods-card py-[var(--spacing-system-s)] pl-[var(--spacing-system-m)] pr-[var(--spacing-system-xsf)] transition-colors first:border-t-0 hover:bg-ods-bg-hover",
|
|
25431
25508
|
onClick: () => onToggle(category.id),
|
|
25432
25509
|
children: [
|
|
25433
|
-
/* @__PURE__ */
|
|
25434
|
-
/* @__PURE__ */
|
|
25435
|
-
/* @__PURE__ */
|
|
25436
|
-
/* @__PURE__ */
|
|
25510
|
+
/* @__PURE__ */ jsx247("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-ods-border bg-ods-bg", children: /* @__PURE__ */ jsx247("div", { className: "text-ods-text-secondary", children: category.icon ?? /* @__PURE__ */ jsx247(Shield, { className: "h-4 w-4" }) }) }),
|
|
25511
|
+
/* @__PURE__ */ jsxs197("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
25512
|
+
/* @__PURE__ */ jsx247("p", { className: "truncate text-ods-text-primary text-h4", title: category.name, children: category.name }),
|
|
25513
|
+
/* @__PURE__ */ jsxs197("p", { className: "text-ods-text-secondary text-h6", children: [
|
|
25437
25514
|
category.policies.length,
|
|
25438
25515
|
" Configurations"
|
|
25439
25516
|
] }),
|
|
25440
|
-
editMode && /* @__PURE__ */
|
|
25517
|
+
editMode && /* @__PURE__ */ jsx247("div", { className: "mt-[var(--spacing-system-xsf)] content-md:hidden", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx247(
|
|
25441
25518
|
ApprovalLevelDropdown,
|
|
25442
25519
|
{
|
|
25443
25520
|
value: bulkLevel,
|
|
@@ -25448,7 +25525,7 @@ var CategorySection = ({ category, editMode, isExpanded, bulkLevel, onToggle, on
|
|
|
25448
25525
|
}
|
|
25449
25526
|
) })
|
|
25450
25527
|
] }),
|
|
25451
|
-
editMode ? /* @__PURE__ */
|
|
25528
|
+
editMode ? /* @__PURE__ */ jsx247("div", { className: "hidden shrink-0 content-md:block", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx247(
|
|
25452
25529
|
ApprovalLevelDropdown,
|
|
25453
25530
|
{
|
|
25454
25531
|
value: bulkLevel,
|
|
@@ -25457,7 +25534,7 @@ var CategorySection = ({ category, editMode, isExpanded, bulkLevel, onToggle, on
|
|
|
25457
25534
|
triggerClassName: CATEGORY_LEVEL_WIDTH,
|
|
25458
25535
|
contentClassName: CATEGORY_LEVEL_WIDTH
|
|
25459
25536
|
}
|
|
25460
|
-
) }) : /* @__PURE__ */
|
|
25537
|
+
) }) : /* @__PURE__ */ jsx247(
|
|
25461
25538
|
"div",
|
|
25462
25539
|
{
|
|
25463
25540
|
className: cn(
|
|
@@ -25466,7 +25543,7 @@ var CategorySection = ({ category, editMode, isExpanded, bulkLevel, onToggle, on
|
|
|
25466
25543
|
)
|
|
25467
25544
|
}
|
|
25468
25545
|
),
|
|
25469
|
-
/* @__PURE__ */
|
|
25546
|
+
/* @__PURE__ */ jsx247(
|
|
25470
25547
|
Button,
|
|
25471
25548
|
{
|
|
25472
25549
|
type: "button",
|
|
@@ -25475,7 +25552,7 @@ var CategorySection = ({ category, editMode, isExpanded, bulkLevel, onToggle, on
|
|
|
25475
25552
|
e.stopPropagation();
|
|
25476
25553
|
onToggle(category.id);
|
|
25477
25554
|
},
|
|
25478
|
-
leftIcon: /* @__PURE__ */
|
|
25555
|
+
leftIcon: /* @__PURE__ */ jsx247(
|
|
25479
25556
|
ChevronDown7,
|
|
25480
25557
|
{
|
|
25481
25558
|
className: cn(
|
|
@@ -25491,7 +25568,7 @@ var CategorySection = ({ category, editMode, isExpanded, bulkLevel, onToggle, on
|
|
|
25491
25568
|
]
|
|
25492
25569
|
}
|
|
25493
25570
|
),
|
|
25494
|
-
/* @__PURE__ */
|
|
25571
|
+
/* @__PURE__ */ jsx247(
|
|
25495
25572
|
"div",
|
|
25496
25573
|
{
|
|
25497
25574
|
style: {
|
|
@@ -25502,7 +25579,7 @@ var CategorySection = ({ category, editMode, isExpanded, bulkLevel, onToggle, on
|
|
|
25502
25579
|
visibility: isExpanded ? "visible" : "hidden"
|
|
25503
25580
|
},
|
|
25504
25581
|
className: isExpanded ? "opacity-100" : "opacity-0",
|
|
25505
|
-
children: /* @__PURE__ */
|
|
25582
|
+
children: /* @__PURE__ */ jsx247("div", { ref: innerRef, className: "px-[var(--spacing-system-mf)] pb-[var(--spacing-system-mf)] pt-0", children: /* @__PURE__ */ jsx247("div", { className: "overflow-hidden rounded-md border border-ods-border", children: category.policies.map((policy) => /* @__PURE__ */ jsx247(
|
|
25506
25583
|
PolicyRow,
|
|
25507
25584
|
{
|
|
25508
25585
|
policy,
|
|
@@ -25545,7 +25622,7 @@ var PolicyConfigurationPanel = ({
|
|
|
25545
25622
|
onCategoryPermissionChange(categoryId, level);
|
|
25546
25623
|
}
|
|
25547
25624
|
};
|
|
25548
|
-
return /* @__PURE__ */
|
|
25625
|
+
return /* @__PURE__ */ jsx247("div", { className: cn("overflow-hidden rounded-md border border-ods-border bg-ods-card", className), children: categories.map((category) => /* @__PURE__ */ jsx247(
|
|
25549
25626
|
CategorySection,
|
|
25550
25627
|
{
|
|
25551
25628
|
category,
|
|
@@ -25563,7 +25640,7 @@ PolicyConfigurationPanel.displayName = "PolicyConfigurationPanel";
|
|
|
25563
25640
|
|
|
25564
25641
|
// src/components/features/policies/policies-table.tsx
|
|
25565
25642
|
import { useCallback as useCallback22, useMemo as useMemo22, useState as useState66 } from "react";
|
|
25566
|
-
import { jsx as
|
|
25643
|
+
import { jsx as jsx248, jsxs as jsxs198 } from "react/jsx-runtime";
|
|
25567
25644
|
var EMPTY_COLUMN_FILTERS = [];
|
|
25568
25645
|
var ALL_PLATFORMS = ["windows", "darwin", "linux"];
|
|
25569
25646
|
var NOTE_TONE_CLASS = {
|
|
@@ -25593,9 +25670,9 @@ function PoliciesTable({
|
|
|
25593
25670
|
{
|
|
25594
25671
|
accessorKey: "name",
|
|
25595
25672
|
header: "Name",
|
|
25596
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
25597
|
-
/* @__PURE__ */
|
|
25598
|
-
row.original.description && /* @__PURE__ */
|
|
25673
|
+
cell: ({ row }) => /* @__PURE__ */ jsxs198("div", { className: "flex min-h-[60px] min-w-0 flex-col justify-center gap-1 py-2", children: [
|
|
25674
|
+
/* @__PURE__ */ jsx248(TruncateText, { children: row.original.name }),
|
|
25675
|
+
row.original.description && /* @__PURE__ */ jsx248(TruncateText, { variant: "h6", tone: "secondary", children: row.original.description })
|
|
25599
25676
|
] }),
|
|
25600
25677
|
meta: { width: "flex-1 min-w-0" }
|
|
25601
25678
|
},
|
|
@@ -25603,7 +25680,7 @@ function PoliciesTable({
|
|
|
25603
25680
|
id: "severity",
|
|
25604
25681
|
accessorFn: (row) => row.critical ? 1 : 0,
|
|
25605
25682
|
header: "SEVERITY",
|
|
25606
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
25683
|
+
cell: ({ row }) => /* @__PURE__ */ jsx248("span", { className: "text-ods-text-primary text-h6", children: row.original.severityLabel }),
|
|
25607
25684
|
enableSorting: sortable,
|
|
25608
25685
|
meta: { width: "w-[100px]", sortable, hideAt: "md" }
|
|
25609
25686
|
}
|
|
@@ -25615,7 +25692,7 @@ function PoliciesTable({
|
|
|
25615
25692
|
cell: ({ row }) => {
|
|
25616
25693
|
const platforms = row.original.platforms ?? [];
|
|
25617
25694
|
const osTypes = platforms.length > 0 ? platforms : ALL_PLATFORMS;
|
|
25618
|
-
return /* @__PURE__ */
|
|
25695
|
+
return /* @__PURE__ */ jsx248(OSTypeBadgeGroup, { osTypes, iconSize: "w-6 h-6" });
|
|
25619
25696
|
},
|
|
25620
25697
|
meta: { width: "w-[140px]", hideAt: "lg" }
|
|
25621
25698
|
});
|
|
@@ -25626,9 +25703,9 @@ function PoliciesTable({
|
|
|
25626
25703
|
header: "STATUS",
|
|
25627
25704
|
cell: ({ row }) => {
|
|
25628
25705
|
const { status } = row.original;
|
|
25629
|
-
return /* @__PURE__ */
|
|
25630
|
-
/* @__PURE__ */
|
|
25631
|
-
status.note && /* @__PURE__ */
|
|
25706
|
+
return /* @__PURE__ */ jsxs198("div", { className: "flex flex-col items-start gap-1", children: [
|
|
25707
|
+
/* @__PURE__ */ jsx248(Tag, { className: "self-start", label: status.label, variant: status.variant }),
|
|
25708
|
+
status.note && /* @__PURE__ */ jsx248("span", { className: `text-h6 ${NOTE_TONE_CLASS[status.note.tone]}`, children: status.note.text })
|
|
25632
25709
|
] });
|
|
25633
25710
|
},
|
|
25634
25711
|
enableSorting: sortable,
|
|
@@ -25638,7 +25715,7 @@ function PoliciesTable({
|
|
|
25638
25715
|
cols.push({
|
|
25639
25716
|
id: "actions",
|
|
25640
25717
|
header: "",
|
|
25641
|
-
cell: ({ row }) => row.original.actions && row.original.actions.length > 0 ? /* @__PURE__ */
|
|
25718
|
+
cell: ({ row }) => row.original.actions && row.original.actions.length > 0 ? /* @__PURE__ */ jsx248("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end gap-2", children: /* @__PURE__ */ jsx248(MoreActionsMenu, { items: row.original.actions }) }) : null,
|
|
25642
25719
|
enableSorting: false,
|
|
25643
25720
|
meta: { width: "w-12 content-md:w-auto content-md:min-w-[100px] shrink-0 flex-none", align: "right" }
|
|
25644
25721
|
});
|
|
@@ -25646,13 +25723,13 @@ function PoliciesTable({
|
|
|
25646
25723
|
cols.push({
|
|
25647
25724
|
id: "open",
|
|
25648
25725
|
header: "",
|
|
25649
|
-
cell: ({ row }) => row.original.href ? /* @__PURE__ */
|
|
25726
|
+
cell: ({ row }) => row.original.href ? /* @__PURE__ */ jsx248("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ jsx248(
|
|
25650
25727
|
Button,
|
|
25651
25728
|
{
|
|
25652
25729
|
onClick: openInNewTab(row.original.href),
|
|
25653
25730
|
variant: "outline",
|
|
25654
25731
|
size: "icon",
|
|
25655
|
-
leftIcon: /* @__PURE__ */
|
|
25732
|
+
leftIcon: /* @__PURE__ */ jsx248(ArrowRightUpIcon, { className: "h-5 w-5" }),
|
|
25656
25733
|
"aria-label": `Open ${row.original.name}`,
|
|
25657
25734
|
className: "bg-ods-card"
|
|
25658
25735
|
}
|
|
@@ -25682,8 +25759,8 @@ function PoliciesTable({
|
|
|
25682
25759
|
}, []);
|
|
25683
25760
|
const rowHref = useCallback22((row) => rowAsLink ? row.href : void 0, [rowAsLink]);
|
|
25684
25761
|
const showHeader = isLoading || rows.length > 0;
|
|
25685
|
-
return /* @__PURE__ */
|
|
25686
|
-
showHeader && /* @__PURE__ */
|
|
25762
|
+
return /* @__PURE__ */ jsxs198(DataTable, { table, children: [
|
|
25763
|
+
showHeader && /* @__PURE__ */ jsx248(
|
|
25687
25764
|
DataTable.Header,
|
|
25688
25765
|
{
|
|
25689
25766
|
stickyHeader,
|
|
@@ -25693,7 +25770,7 @@ function PoliciesTable({
|
|
|
25693
25770
|
onSortChange: sortable ? handleSortChange : void 0
|
|
25694
25771
|
}
|
|
25695
25772
|
),
|
|
25696
|
-
/* @__PURE__ */
|
|
25773
|
+
/* @__PURE__ */ jsx248(
|
|
25697
25774
|
DataTable.Body,
|
|
25698
25775
|
{
|
|
25699
25776
|
loading: isLoading,
|
|
@@ -25704,7 +25781,7 @@ function PoliciesTable({
|
|
|
25704
25781
|
rowHref
|
|
25705
25782
|
}
|
|
25706
25783
|
),
|
|
25707
|
-
hasMore && onLoadMore && /* @__PURE__ */
|
|
25784
|
+
hasMore && onLoadMore && /* @__PURE__ */ jsx248(
|
|
25708
25785
|
DataTable.InfiniteFooter,
|
|
25709
25786
|
{
|
|
25710
25787
|
hasNextPage: true,
|
|
@@ -25717,17 +25794,17 @@ function PoliciesTable({
|
|
|
25717
25794
|
}
|
|
25718
25795
|
|
|
25719
25796
|
// src/components/features/policies/policy-summary-cards.tsx
|
|
25720
|
-
import { Fragment as Fragment41, jsx as
|
|
25797
|
+
import { Fragment as Fragment41, jsx as jsx249, jsxs as jsxs199 } from "react/jsx-runtime";
|
|
25721
25798
|
var EMPTY_VALUE = "\u2014";
|
|
25722
25799
|
var CARD_SKELETON_KEYS = ["total", "compliance", "failed", "updated"];
|
|
25723
25800
|
function PolicySummaryCards({ summary, isLoading = false, hasData = true, now }) {
|
|
25724
|
-
return /* @__PURE__ */
|
|
25801
|
+
return /* @__PURE__ */ jsx249("div", { className: "grid grid-cols-1 gap-4 content-md:grid-cols-2 content-lg:grid-cols-4", children: isLoading ? (
|
|
25725
25802
|
// `h-16 content-md:h-[104px]` is `DashboardInfoCard`'s own height, so the
|
|
25726
25803
|
// grid does not jump when the real cards replace the placeholders.
|
|
25727
|
-
CARD_SKELETON_KEYS.map((key) => /* @__PURE__ */
|
|
25728
|
-
) : /* @__PURE__ */
|
|
25729
|
-
/* @__PURE__ */
|
|
25730
|
-
/* @__PURE__ */
|
|
25804
|
+
CARD_SKELETON_KEYS.map((key) => /* @__PURE__ */ jsx249(Skeleton, { className: "h-16 w-full content-md:h-[104px]" }, key))
|
|
25805
|
+
) : /* @__PURE__ */ jsxs199(Fragment41, { children: [
|
|
25806
|
+
/* @__PURE__ */ jsx249(DashboardInfoCard, { title: "Total Policies", value: hasData ? summary.totalPolicies : EMPTY_VALUE }),
|
|
25807
|
+
/* @__PURE__ */ jsx249(
|
|
25731
25808
|
DashboardInfoCard,
|
|
25732
25809
|
{
|
|
25733
25810
|
title: "Compliance Rate",
|
|
@@ -25736,7 +25813,7 @@ function PolicySummaryCards({ summary, isLoading = false, hasData = true, now })
|
|
|
25736
25813
|
showProgress: hasData
|
|
25737
25814
|
}
|
|
25738
25815
|
),
|
|
25739
|
-
/* @__PURE__ */
|
|
25816
|
+
/* @__PURE__ */ jsx249(
|
|
25740
25817
|
DashboardInfoCard,
|
|
25741
25818
|
{
|
|
25742
25819
|
title: "Failed Policies",
|
|
@@ -25746,7 +25823,7 @@ function PolicySummaryCards({ summary, isLoading = false, hasData = true, now })
|
|
|
25746
25823
|
progressVariant: "error"
|
|
25747
25824
|
}
|
|
25748
25825
|
),
|
|
25749
|
-
/* @__PURE__ */
|
|
25826
|
+
/* @__PURE__ */ jsx249(
|
|
25750
25827
|
DashboardInfoCard,
|
|
25751
25828
|
{
|
|
25752
25829
|
title: "Updated",
|
|
@@ -25874,36 +25951,36 @@ function usersCountLabel(count) {
|
|
|
25874
25951
|
}
|
|
25875
25952
|
|
|
25876
25953
|
// src/components/features/cloud-tenants/tenant-access-cell.tsx
|
|
25877
|
-
import { jsx as
|
|
25954
|
+
import { jsx as jsx250, jsxs as jsxs200 } from "react/jsx-runtime";
|
|
25878
25955
|
function TenantAccessCell({ accessState, lastReadAt: lastReadAt2, now }) {
|
|
25879
|
-
return /* @__PURE__ */
|
|
25880
|
-
/* @__PURE__ */
|
|
25881
|
-
/* @__PURE__ */
|
|
25956
|
+
return /* @__PURE__ */ jsxs200("div", { className: "flex min-w-0 flex-col justify-center gap-[var(--spacing-system-xxs)]", children: [
|
|
25957
|
+
/* @__PURE__ */ jsx250(Tag, { ...accessStateTag(accessState), className: "self-start" }),
|
|
25958
|
+
/* @__PURE__ */ jsx250(TruncateText, { variant: "h6", tone: "secondary", children: `Last read: ${formatLastRead(lastReadAt2, now)}` })
|
|
25882
25959
|
] });
|
|
25883
25960
|
}
|
|
25884
25961
|
|
|
25885
25962
|
// src/components/features/cloud-tenants/tenant-cell.tsx
|
|
25886
|
-
import { jsx as
|
|
25963
|
+
import { jsx as jsx251, jsxs as jsxs201 } from "react/jsx-runtime";
|
|
25887
25964
|
function TenantCell({ provider, name, domain }) {
|
|
25888
25965
|
const { Logo, label } = providerMark(provider);
|
|
25889
|
-
return /* @__PURE__ */
|
|
25890
|
-
/* @__PURE__ */
|
|
25891
|
-
/* @__PURE__ */
|
|
25892
|
-
/* @__PURE__ */
|
|
25966
|
+
return /* @__PURE__ */ jsxs201("div", { className: "flex min-w-0 flex-col justify-center", children: [
|
|
25967
|
+
/* @__PURE__ */ jsxs201("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xxs)]", children: [
|
|
25968
|
+
/* @__PURE__ */ jsx251(Logo, { size: 24, role: "img", "aria-label": label, className: "shrink-0" }),
|
|
25969
|
+
/* @__PURE__ */ jsx251(TruncateText, { children: name })
|
|
25893
25970
|
] }),
|
|
25894
|
-
/* @__PURE__ */
|
|
25971
|
+
/* @__PURE__ */ jsx251(TruncateText, { variant: "h6", tone: "secondary", children: domain ?? TENANT_EMPTY_VALUE })
|
|
25895
25972
|
] });
|
|
25896
25973
|
}
|
|
25897
25974
|
|
|
25898
25975
|
// src/components/features/cloud-tenants/tenant-customer-cell.tsx
|
|
25899
|
-
import { jsx as
|
|
25976
|
+
import { jsx as jsx252, jsxs as jsxs202 } from "react/jsx-runtime";
|
|
25900
25977
|
function TenantCustomerCell({ name, imageUrl, userCount }) {
|
|
25901
|
-
return /* @__PURE__ */
|
|
25902
|
-
/* @__PURE__ */
|
|
25903
|
-
/* @__PURE__ */
|
|
25904
|
-
/* @__PURE__ */
|
|
25978
|
+
return /* @__PURE__ */ jsxs202("div", { className: "flex min-w-0 flex-col justify-center", children: [
|
|
25979
|
+
/* @__PURE__ */ jsxs202("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xxs)]", children: [
|
|
25980
|
+
/* @__PURE__ */ jsx252(SquareAvatar, { src: imageUrl ?? void 0, alt: name, fallback: name, size: "xs", variant: "square" }),
|
|
25981
|
+
/* @__PURE__ */ jsx252(TruncateText, { children: name })
|
|
25905
25982
|
] }),
|
|
25906
|
-
/* @__PURE__ */
|
|
25983
|
+
/* @__PURE__ */ jsx252(TruncateText, { variant: "h6", tone: "secondary", children: usersCountLabel(userCount) })
|
|
25907
25984
|
] });
|
|
25908
25985
|
}
|
|
25909
25986
|
|
|
@@ -25922,7 +25999,7 @@ var TENANTS_TABLE_COLUMNS = [
|
|
|
25922
25999
|
];
|
|
25923
26000
|
|
|
25924
26001
|
// src/components/features/cloud-tenants/tenants-table-view.tsx
|
|
25925
|
-
import { jsx as
|
|
26002
|
+
import { jsx as jsx253, jsxs as jsxs203 } from "react/jsx-runtime";
|
|
25926
26003
|
var getRowId = (row) => row.id;
|
|
25927
26004
|
var columnMeta = ({ width, hideAt, align }) => ({ width, hideAt, align });
|
|
25928
26005
|
function TenantsTableView({
|
|
@@ -25943,14 +26020,14 @@ function TenantsTableView({
|
|
|
25943
26020
|
{
|
|
25944
26021
|
id: TENANT_COLUMNS.tenant.id,
|
|
25945
26022
|
header: TENANT_COLUMNS.tenant.header,
|
|
25946
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
26023
|
+
cell: ({ row }) => /* @__PURE__ */ jsx253(TenantCell, { provider: row.original.provider, name: row.original.name, domain: row.original.domain }),
|
|
25947
26024
|
enableSorting: false,
|
|
25948
26025
|
meta: columnMeta(TENANT_COLUMNS.tenant)
|
|
25949
26026
|
},
|
|
25950
26027
|
{
|
|
25951
26028
|
id: TENANT_COLUMNS.customer.id,
|
|
25952
26029
|
header: TENANT_COLUMNS.customer.header,
|
|
25953
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
26030
|
+
cell: ({ row }) => /* @__PURE__ */ jsx253(
|
|
25954
26031
|
TenantCustomerCell,
|
|
25955
26032
|
{
|
|
25956
26033
|
name: row.original.customer.name,
|
|
@@ -25964,7 +26041,7 @@ function TenantsTableView({
|
|
|
25964
26041
|
{
|
|
25965
26042
|
id: TENANT_COLUMNS.access.id,
|
|
25966
26043
|
header: TENANT_COLUMNS.access.header,
|
|
25967
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
26044
|
+
cell: ({ row }) => /* @__PURE__ */ jsx253(TenantAccessCell, { accessState: row.original.accessState, lastReadAt: row.original.lastReadAt, now }),
|
|
25968
26045
|
enableSorting: false,
|
|
25969
26046
|
meta: columnMeta(TENANT_COLUMNS.access)
|
|
25970
26047
|
},
|
|
@@ -25972,13 +26049,13 @@ function TenantsTableView({
|
|
|
25972
26049
|
id: TENANT_COLUMNS.open.id,
|
|
25973
26050
|
cell: ({ row }) => (
|
|
25974
26051
|
// The row itself is the details link; a nested `<a>` is invalid, so this opens the same href.
|
|
25975
|
-
/* @__PURE__ */
|
|
26052
|
+
/* @__PURE__ */ jsx253("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ jsx253(
|
|
25976
26053
|
Button,
|
|
25977
26054
|
{
|
|
25978
26055
|
onClick: openInNewTab(getHref(row.original)),
|
|
25979
26056
|
variant: "outline",
|
|
25980
26057
|
size: "icon",
|
|
25981
|
-
leftIcon: /* @__PURE__ */
|
|
26058
|
+
leftIcon: /* @__PURE__ */ jsx253(ArrowRightUpIcon, { className: "h-5 w-5" }),
|
|
25982
26059
|
"aria-label": `Open ${row.original.name} in new tab`,
|
|
25983
26060
|
className: "bg-ods-card"
|
|
25984
26061
|
}
|
|
@@ -25993,16 +26070,16 @@ function TenantsTableView({
|
|
|
25993
26070
|
const table = useDataTable({ data: rows, columns, getRowId, enableSorting: false });
|
|
25994
26071
|
return (
|
|
25995
26072
|
// Dim, don't unmount, the stale rows while a deferred search refetches.
|
|
25996
|
-
/* @__PURE__ */
|
|
25997
|
-
/* @__PURE__ */
|
|
26073
|
+
/* @__PURE__ */ jsx253("div", { className: cn("transition-opacity duration-200", isPending && "opacity-60"), children: /* @__PURE__ */ jsxs203(DataTable, { table, children: [
|
|
26074
|
+
/* @__PURE__ */ jsx253(
|
|
25998
26075
|
DataTable.Header,
|
|
25999
26076
|
{
|
|
26000
26077
|
stickyHeader: stickyHeaderOffset !== void 0,
|
|
26001
26078
|
stickyHeaderOffset,
|
|
26002
|
-
rightSlot: /* @__PURE__ */
|
|
26079
|
+
rightSlot: /* @__PURE__ */ jsx253(DataTable.RowCount, { itemName: "result", totalCount: totalCount ?? rows.length })
|
|
26003
26080
|
}
|
|
26004
26081
|
),
|
|
26005
|
-
/* @__PURE__ */
|
|
26082
|
+
/* @__PURE__ */ jsx253(
|
|
26006
26083
|
DataTable.Body,
|
|
26007
26084
|
{
|
|
26008
26085
|
skeletonRows,
|
|
@@ -26014,7 +26091,7 @@ function TenantsTableView({
|
|
|
26014
26091
|
rowHref: getHref
|
|
26015
26092
|
}
|
|
26016
26093
|
),
|
|
26017
|
-
rows.length > 0 && onLoadMore && /* @__PURE__ */
|
|
26094
|
+
rows.length > 0 && onLoadMore && /* @__PURE__ */ jsx253(
|
|
26018
26095
|
DataTable.InfiniteFooter,
|
|
26019
26096
|
{
|
|
26020
26097
|
hasNextPage,
|
|
@@ -26030,7 +26107,7 @@ function TenantsTableView({
|
|
|
26030
26107
|
// src/components/features/waitlist-form.tsx
|
|
26031
26108
|
import { getCountries } from "libphonenumber-js";
|
|
26032
26109
|
import { useEffect as useEffect37, useState as useState67 } from "react";
|
|
26033
|
-
import { Fragment as Fragment42, jsx as
|
|
26110
|
+
import { Fragment as Fragment42, jsx as jsx254, jsxs as jsxs204 } from "react/jsx-runtime";
|
|
26034
26111
|
function WaitlistForm({
|
|
26035
26112
|
id = "waitlist-form",
|
|
26036
26113
|
className,
|
|
@@ -26114,7 +26191,7 @@ function WaitlistForm({
|
|
|
26114
26191
|
}
|
|
26115
26192
|
};
|
|
26116
26193
|
if (!isClient) {
|
|
26117
|
-
return /* @__PURE__ */
|
|
26194
|
+
return /* @__PURE__ */ jsxs204(
|
|
26118
26195
|
"div",
|
|
26119
26196
|
{
|
|
26120
26197
|
className: cn(
|
|
@@ -26122,14 +26199,14 @@ function WaitlistForm({
|
|
|
26122
26199
|
className
|
|
26123
26200
|
),
|
|
26124
26201
|
children: [
|
|
26125
|
-
/* @__PURE__ */
|
|
26126
|
-
/* @__PURE__ */
|
|
26127
|
-
/* @__PURE__ */
|
|
26128
|
-
/* @__PURE__ */
|
|
26202
|
+
/* @__PURE__ */ jsx254("div", { className: "h-12 w-full animate-pulse rounded-[6px] border border-ods-border bg-ods-card" }),
|
|
26203
|
+
/* @__PURE__ */ jsxs204("div", { className: "flex w-full gap-[var(--spacing-system-xs)]", children: [
|
|
26204
|
+
/* @__PURE__ */ jsx254("div", { className: "h-12 w-[130px] shrink-0 animate-pulse rounded-[6px] border border-ods-border bg-ods-card" }),
|
|
26205
|
+
/* @__PURE__ */ jsx254("div", { className: "h-12 flex-1 animate-pulse rounded-[6px] border border-ods-border bg-ods-card" })
|
|
26129
26206
|
] }),
|
|
26130
|
-
/* @__PURE__ */
|
|
26131
|
-
/* @__PURE__ */
|
|
26132
|
-
/* @__PURE__ */
|
|
26207
|
+
/* @__PURE__ */ jsxs204("div", { className: "flex w-full flex-col items-end gap-[var(--spacing-system-m)]", children: [
|
|
26208
|
+
/* @__PURE__ */ jsx254("div", { className: "w-full animate-pulse rounded-[6px] border border-ods-border bg-ods-bg px-4 py-6" }),
|
|
26209
|
+
/* @__PURE__ */ jsx254("div", { className: "h-12 w-[200px] animate-pulse rounded-[6px] border border-ods-border bg-ods-card" })
|
|
26133
26210
|
] })
|
|
26134
26211
|
]
|
|
26135
26212
|
}
|
|
@@ -26143,7 +26220,7 @@ function WaitlistForm({
|
|
|
26143
26220
|
void handleSubmit();
|
|
26144
26221
|
}
|
|
26145
26222
|
};
|
|
26146
|
-
return /* @__PURE__ */
|
|
26223
|
+
return /* @__PURE__ */ jsxs204(
|
|
26147
26224
|
"div",
|
|
26148
26225
|
{
|
|
26149
26226
|
id,
|
|
@@ -26152,8 +26229,8 @@ function WaitlistForm({
|
|
|
26152
26229
|
className
|
|
26153
26230
|
),
|
|
26154
26231
|
children: [
|
|
26155
|
-
/* @__PURE__ */
|
|
26156
|
-
/* @__PURE__ */
|
|
26232
|
+
/* @__PURE__ */ jsx254(HoneypotField, { ...honeypotInputProps }),
|
|
26233
|
+
/* @__PURE__ */ jsx254(
|
|
26157
26234
|
Input,
|
|
26158
26235
|
{
|
|
26159
26236
|
type: "email",
|
|
@@ -26167,8 +26244,8 @@ function WaitlistForm({
|
|
|
26167
26244
|
errorVariant: "warning"
|
|
26168
26245
|
}
|
|
26169
26246
|
),
|
|
26170
|
-
/* @__PURE__ */
|
|
26171
|
-
/* @__PURE__ */
|
|
26247
|
+
/* @__PURE__ */ jsxs204("div", { className: "relative w-full", children: [
|
|
26248
|
+
/* @__PURE__ */ jsx254(
|
|
26172
26249
|
PhoneInput,
|
|
26173
26250
|
{
|
|
26174
26251
|
value: phone,
|
|
@@ -26184,7 +26261,7 @@ function WaitlistForm({
|
|
|
26184
26261
|
onKeyDown: handleKeyDown
|
|
26185
26262
|
}
|
|
26186
26263
|
),
|
|
26187
|
-
showPhoneWarning && /* @__PURE__ */
|
|
26264
|
+
showPhoneWarning && /* @__PURE__ */ jsx254(
|
|
26188
26265
|
"p",
|
|
26189
26266
|
{
|
|
26190
26267
|
className: "absolute bottom-0 left-0 translate-y-full truncate text-ods-warning text-h6",
|
|
@@ -26193,8 +26270,8 @@ function WaitlistForm({
|
|
|
26193
26270
|
}
|
|
26194
26271
|
)
|
|
26195
26272
|
] }),
|
|
26196
|
-
/* @__PURE__ */
|
|
26197
|
-
/* @__PURE__ */
|
|
26273
|
+
/* @__PURE__ */ jsxs204("div", { className: "flex w-full flex-col items-end gap-[var(--spacing-system-l)]", children: [
|
|
26274
|
+
/* @__PURE__ */ jsx254(
|
|
26198
26275
|
CheckboxBlock,
|
|
26199
26276
|
{
|
|
26200
26277
|
checked: smsConsent,
|
|
@@ -26205,23 +26282,23 @@ function WaitlistForm({
|
|
|
26205
26282
|
error: showConsentError ? "Please agree to SMS notifications to continue." : void 0,
|
|
26206
26283
|
disabled: isSubmitting,
|
|
26207
26284
|
label: smsCheckboxLabel,
|
|
26208
|
-
description: /* @__PURE__ */
|
|
26285
|
+
description: /* @__PURE__ */ jsxs204(Fragment42, { children: [
|
|
26209
26286
|
consentText,
|
|
26210
26287
|
" View our ",
|
|
26211
|
-
/* @__PURE__ */
|
|
26288
|
+
/* @__PURE__ */ jsx254(PolicyLink, { href: termsOfServiceUrl || "#", children: "Terms of Service" }),
|
|
26212
26289
|
" and ",
|
|
26213
|
-
/* @__PURE__ */
|
|
26290
|
+
/* @__PURE__ */ jsx254(PolicyLink, { href: privacyPolicyUrl || "#", children: "Privacy Policy" }),
|
|
26214
26291
|
"."
|
|
26215
26292
|
] })
|
|
26216
26293
|
}
|
|
26217
26294
|
),
|
|
26218
|
-
/* @__PURE__ */
|
|
26295
|
+
/* @__PURE__ */ jsx254(
|
|
26219
26296
|
Button,
|
|
26220
26297
|
{
|
|
26221
26298
|
type: "button",
|
|
26222
26299
|
loading: isSubmitting,
|
|
26223
26300
|
disabled: isSubmitting,
|
|
26224
|
-
leftIcon: /* @__PURE__ */
|
|
26301
|
+
leftIcon: /* @__PURE__ */ jsx254(OpenFrameLogo, {}),
|
|
26225
26302
|
onClick: handleSubmit,
|
|
26226
26303
|
className: "w-full content-md:w-auto",
|
|
26227
26304
|
children: isSuccess ? successLabel : submitLabel
|
|
@@ -26244,7 +26321,7 @@ import {
|
|
|
26244
26321
|
useRef as useRef35,
|
|
26245
26322
|
useState as useState68
|
|
26246
26323
|
} from "react";
|
|
26247
|
-
import { jsx as
|
|
26324
|
+
import { jsx as jsx255 } from "react/jsx-runtime";
|
|
26248
26325
|
var NotificationsContext = createContext7(null);
|
|
26249
26326
|
function mergeNotification(base, incoming) {
|
|
26250
26327
|
const out = { ...base };
|
|
@@ -26454,7 +26531,7 @@ function NotificationsProvider({
|
|
|
26454
26531
|
renderTile
|
|
26455
26532
|
]
|
|
26456
26533
|
);
|
|
26457
|
-
return /* @__PURE__ */
|
|
26534
|
+
return /* @__PURE__ */ jsx255(NotificationsContext.Provider, { value, children });
|
|
26458
26535
|
}
|
|
26459
26536
|
function useNotifications() {
|
|
26460
26537
|
const ctx = useContext7(NotificationsContext);
|
|
@@ -26493,7 +26570,7 @@ import {
|
|
|
26493
26570
|
useRef as useRef36,
|
|
26494
26571
|
useState as useState69
|
|
26495
26572
|
} from "react";
|
|
26496
|
-
import { jsx as
|
|
26573
|
+
import { jsx as jsx256, jsxs as jsxs205 } from "react/jsx-runtime";
|
|
26497
26574
|
var DrawerOpenContext = createContext9(false);
|
|
26498
26575
|
var AppLayoutDrawerRoot = ({
|
|
26499
26576
|
open: openProp,
|
|
@@ -26529,7 +26606,7 @@ var AppLayoutDrawerRoot = ({
|
|
|
26529
26606
|
if (open) coordination?.notifyDrawerDidOpen(selfHandle);
|
|
26530
26607
|
}, [open, coordination, selfHandle]);
|
|
26531
26608
|
useEffect39(() => coordination?.registerDrawer(selfHandle), [coordination, selfHandle]);
|
|
26532
|
-
return /* @__PURE__ */
|
|
26609
|
+
return /* @__PURE__ */ jsx256(DrawerOpenContext.Provider, { value: open, children: /* @__PURE__ */ jsx256(DialogPrimitive3.Root, { ...rest, open, onOpenChange: handleOpenChange, modal, children }) });
|
|
26533
26610
|
};
|
|
26534
26611
|
AppLayoutDrawerRoot.displayName = "AppLayoutDrawer";
|
|
26535
26612
|
var AppLayoutDrawerTrigger = DialogPrimitive3.Trigger;
|
|
@@ -26714,8 +26791,8 @@ var AppLayoutDrawerContent = forwardRef29(
|
|
|
26714
26791
|
const applyInlineSize = resizable && !isMobile;
|
|
26715
26792
|
const sizeStyle = applyInlineSize ? isHorizontal ? { width: size } : { height: size } : {};
|
|
26716
26793
|
if (keepMounted && !hasOpened) return null;
|
|
26717
|
-
return /* @__PURE__ */
|
|
26718
|
-
/* @__PURE__ */
|
|
26794
|
+
return /* @__PURE__ */ jsxs205(DialogPrimitive3.Portal, { container: portalContainer, forceMount: persist || void 0, children: [
|
|
26795
|
+
/* @__PURE__ */ jsx256(
|
|
26719
26796
|
"div",
|
|
26720
26797
|
{
|
|
26721
26798
|
"aria-hidden": true,
|
|
@@ -26731,7 +26808,7 @@ var AppLayoutDrawerContent = forwardRef29(
|
|
|
26731
26808
|
)
|
|
26732
26809
|
}
|
|
26733
26810
|
),
|
|
26734
|
-
/* @__PURE__ */
|
|
26811
|
+
/* @__PURE__ */ jsxs205(
|
|
26735
26812
|
DialogPrimitive3.Content,
|
|
26736
26813
|
{
|
|
26737
26814
|
ref,
|
|
@@ -26762,7 +26839,7 @@ var AppLayoutDrawerContent = forwardRef29(
|
|
|
26762
26839
|
},
|
|
26763
26840
|
...props,
|
|
26764
26841
|
children: [
|
|
26765
|
-
applyInlineSize && (!persist || open) ? /* @__PURE__ */
|
|
26842
|
+
applyInlineSize && (!persist || open) ? /* @__PURE__ */ jsx256(
|
|
26766
26843
|
PanelResizeHandle,
|
|
26767
26844
|
{
|
|
26768
26845
|
variant: "inLayout",
|
|
@@ -26776,7 +26853,7 @@ var AppLayoutDrawerContent = forwardRef29(
|
|
|
26776
26853
|
ariaLabel: resizeAriaLabel
|
|
26777
26854
|
}
|
|
26778
26855
|
) : null,
|
|
26779
|
-
/* @__PURE__ */
|
|
26856
|
+
/* @__PURE__ */ jsx256(
|
|
26780
26857
|
"div",
|
|
26781
26858
|
{
|
|
26782
26859
|
ref: panelRef,
|
|
@@ -26810,7 +26887,7 @@ var AppLayoutDrawerFooter = DrawerFooter;
|
|
|
26810
26887
|
|
|
26811
26888
|
// src/components/features/notifications/notification-tile.tsx
|
|
26812
26889
|
import { useEffect as useEffect40, useState as useState70 } from "react";
|
|
26813
|
-
import { Fragment as Fragment43, jsx as
|
|
26890
|
+
import { Fragment as Fragment43, jsx as jsx257, jsxs as jsxs206 } from "react/jsx-runtime";
|
|
26814
26891
|
var variantBySeverity = {
|
|
26815
26892
|
INFO: "info",
|
|
26816
26893
|
SUCCESS: "success",
|
|
@@ -26873,7 +26950,7 @@ function NotificationTile({
|
|
|
26873
26950
|
}, remaining);
|
|
26874
26951
|
return () => window.clearTimeout(timer);
|
|
26875
26952
|
}, [id, counting, initialElapsed, liveDurationMs, onSettle]);
|
|
26876
|
-
return /* @__PURE__ */
|
|
26953
|
+
return /* @__PURE__ */ jsxs206(
|
|
26877
26954
|
"output",
|
|
26878
26955
|
{
|
|
26879
26956
|
className: cn(
|
|
@@ -26882,7 +26959,7 @@ function NotificationTile({
|
|
|
26882
26959
|
className
|
|
26883
26960
|
),
|
|
26884
26961
|
children: [
|
|
26885
|
-
/* @__PURE__ */
|
|
26962
|
+
/* @__PURE__ */ jsxs206(
|
|
26886
26963
|
"div",
|
|
26887
26964
|
{
|
|
26888
26965
|
className: cn(
|
|
@@ -26890,8 +26967,8 @@ function NotificationTile({
|
|
|
26890
26967
|
isLive && "pb-[var(--spacing-system-m)]"
|
|
26891
26968
|
),
|
|
26892
26969
|
children: [
|
|
26893
|
-
/* @__PURE__ */
|
|
26894
|
-
/* @__PURE__ */
|
|
26970
|
+
/* @__PURE__ */ jsxs206("div", { className: "flex items-center gap-[var(--spacing-system-xs)]", children: [
|
|
26971
|
+
/* @__PURE__ */ jsx257("span", { className: cn("flex size-4 shrink-0 items-center justify-center", typeColorByVariant[accentVariant]), children: image ? /* @__PURE__ */ jsx257(
|
|
26895
26972
|
next_image_default,
|
|
26896
26973
|
{
|
|
26897
26974
|
src: image,
|
|
@@ -26902,12 +26979,12 @@ function NotificationTile({
|
|
|
26902
26979
|
height: 16,
|
|
26903
26980
|
unoptimized: true
|
|
26904
26981
|
}
|
|
26905
|
-
) : icon ?? /* @__PURE__ */
|
|
26982
|
+
) : icon ?? /* @__PURE__ */ jsx257("span", { className: cn("size-1.5 rounded-full", dotColorByVariant[accentVariant]) }) }),
|
|
26906
26983
|
type ? lockscreen ? (
|
|
26907
26984
|
// A phone names the sender in plain words and never cuts them.
|
|
26908
|
-
/* @__PURE__ */
|
|
26909
|
-
) : /* @__PURE__ */
|
|
26910
|
-
!isLive && createdAtIso ? /* @__PURE__ */
|
|
26985
|
+
/* @__PURE__ */ jsx257("p", { className: "min-w-0 flex-1 break-words text-ods-text-secondary text-h6", children: type })
|
|
26986
|
+
) : /* @__PURE__ */ jsx257("p", { className: cn("min-w-0 flex-1 truncate text-h5", typeColorByVariant[accentVariant]), title: type, children: type }) : /* @__PURE__ */ jsx257("span", { className: "min-w-0 flex-1" }),
|
|
26987
|
+
!isLive && createdAtIso ? /* @__PURE__ */ jsx257(
|
|
26911
26988
|
"time",
|
|
26912
26989
|
{
|
|
26913
26990
|
dateTime: createdAtIso,
|
|
@@ -26915,20 +26992,20 @@ function NotificationTile({
|
|
|
26915
26992
|
children: timeLabel ?? formatTicketRelativeTime(createdAtIso)
|
|
26916
26993
|
}
|
|
26917
26994
|
) : null,
|
|
26918
|
-
!lockscreen && /* @__PURE__ */
|
|
26995
|
+
!lockscreen && /* @__PURE__ */ jsx257(Fragment43, { children: /* @__PURE__ */ jsx257("span", { className: "relative size-4 shrink-0", children: [
|
|
26919
26996
|
{
|
|
26920
26997
|
active: isLive,
|
|
26921
26998
|
label: "Dismiss notification",
|
|
26922
|
-
icon: /* @__PURE__ */
|
|
26999
|
+
icon: /* @__PURE__ */ jsx257(XmarkIcon, { size: 16 }),
|
|
26923
27000
|
onClick: () => onSettle?.(id)
|
|
26924
27001
|
},
|
|
26925
27002
|
{
|
|
26926
27003
|
active: !isLive,
|
|
26927
27004
|
label: "Mark notification complete",
|
|
26928
|
-
icon: /* @__PURE__ */
|
|
27005
|
+
icon: /* @__PURE__ */ jsx257(CheckCircleIcon, { size: 16 }),
|
|
26929
27006
|
onClick: () => onComplete(id)
|
|
26930
27007
|
}
|
|
26931
|
-
].map(({ active, label, icon: actionIcon, onClick }) => /* @__PURE__ */
|
|
27008
|
+
].map(({ active, label, icon: actionIcon, onClick }) => /* @__PURE__ */ jsx257(
|
|
26932
27009
|
"button",
|
|
26933
27010
|
{
|
|
26934
27011
|
type: "button",
|
|
@@ -26943,8 +27020,8 @@ function NotificationTile({
|
|
|
26943
27020
|
label
|
|
26944
27021
|
)) }) })
|
|
26945
27022
|
] }),
|
|
26946
|
-
/* @__PURE__ */
|
|
26947
|
-
title ? /* @__PURE__ */
|
|
27023
|
+
/* @__PURE__ */ jsxs206("div", { className: "flex min-w-0 flex-col", children: [
|
|
27024
|
+
title ? /* @__PURE__ */ jsx257(
|
|
26948
27025
|
"p",
|
|
26949
27026
|
{
|
|
26950
27027
|
className: cn(
|
|
@@ -26955,7 +27032,7 @@ function NotificationTile({
|
|
|
26955
27032
|
children: title
|
|
26956
27033
|
}
|
|
26957
27034
|
) : null,
|
|
26958
|
-
description ? /* @__PURE__ */
|
|
27035
|
+
description ? /* @__PURE__ */ jsx257(
|
|
26959
27036
|
"p",
|
|
26960
27037
|
{
|
|
26961
27038
|
className: "line-clamp-3 text-ods-text-secondary text-h6",
|
|
@@ -26965,7 +27042,7 @@ function NotificationTile({
|
|
|
26965
27042
|
) : null
|
|
26966
27043
|
] }),
|
|
26967
27044
|
actions,
|
|
26968
|
-
counting ? /* @__PURE__ */
|
|
27045
|
+
counting ? /* @__PURE__ */ jsx257(
|
|
26969
27046
|
"div",
|
|
26970
27047
|
{
|
|
26971
27048
|
"aria-hidden": true,
|
|
@@ -26986,7 +27063,7 @@ function NotificationTile({
|
|
|
26986
27063
|
}
|
|
26987
27064
|
|
|
26988
27065
|
// src/components/features/notifications/notification-drawer.tsx
|
|
26989
|
-
import { Fragment as Fragment44, jsx as
|
|
27066
|
+
import { Fragment as Fragment44, jsx as jsx258, jsxs as jsxs207 } from "react/jsx-runtime";
|
|
26990
27067
|
function NotificationDrawer({
|
|
26991
27068
|
className,
|
|
26992
27069
|
liveDurationMs,
|
|
@@ -27019,13 +27096,13 @@ function NotificationDrawer({
|
|
|
27019
27096
|
} = ctx;
|
|
27020
27097
|
const renderTile = renderTileProp ?? ctxRenderTile;
|
|
27021
27098
|
const unreadNotifications = notifications.filter((n) => !n.read);
|
|
27022
|
-
const content = /* @__PURE__ */
|
|
27023
|
-
/* @__PURE__ */
|
|
27099
|
+
const content = /* @__PURE__ */ jsxs207(Fragment44, { children: [
|
|
27100
|
+
/* @__PURE__ */ jsx258("div", { className: "px-[var(--spacing-system-m)] pt-[var(--spacing-system-m)]", children: /* @__PURE__ */ jsx258(
|
|
27024
27101
|
DrawerTitle,
|
|
27025
27102
|
{
|
|
27026
27103
|
hideClose: true,
|
|
27027
27104
|
className: "truncate",
|
|
27028
|
-
actions: /* @__PURE__ */
|
|
27105
|
+
actions: /* @__PURE__ */ jsx258(
|
|
27029
27106
|
"button",
|
|
27030
27107
|
{
|
|
27031
27108
|
type: "button",
|
|
@@ -27038,7 +27115,7 @@ function NotificationDrawer({
|
|
|
27038
27115
|
children: "New Notifications"
|
|
27039
27116
|
}
|
|
27040
27117
|
) }),
|
|
27041
|
-
/* @__PURE__ */
|
|
27118
|
+
/* @__PURE__ */ jsx258(
|
|
27042
27119
|
DrawerScrollList,
|
|
27043
27120
|
{
|
|
27044
27121
|
unreadNotifications,
|
|
@@ -27052,12 +27129,12 @@ function NotificationDrawer({
|
|
|
27052
27129
|
renderTile
|
|
27053
27130
|
}
|
|
27054
27131
|
),
|
|
27055
|
-
/* @__PURE__ */
|
|
27056
|
-
/* @__PURE__ */
|
|
27057
|
-
/* @__PURE__ */
|
|
27058
|
-
desktopPopupsConfigured && /* @__PURE__ */
|
|
27132
|
+
/* @__PURE__ */ jsxs207("div", { className: "flex flex-col gap-[var(--spacing-system-xs)] px-[var(--spacing-system-m)] pb-[var(--spacing-system-m)]", children: [
|
|
27133
|
+
/* @__PURE__ */ jsxs207("div", { className: "overflow-hidden rounded-md border border-ods-border bg-ods-card", children: [
|
|
27134
|
+
/* @__PURE__ */ jsx258(ShowNotificationsToggleRow, { checked: showPopups, onChange: setShowPopups }),
|
|
27135
|
+
desktopPopupsConfigured && /* @__PURE__ */ jsx258(DesktopNotificationsToggleRow, { checked: showDesktopPopups, onChange: setShowDesktopPopups })
|
|
27059
27136
|
] }),
|
|
27060
|
-
/* @__PURE__ */
|
|
27137
|
+
/* @__PURE__ */ jsx258(
|
|
27061
27138
|
NotificationsHistoryButton,
|
|
27062
27139
|
{
|
|
27063
27140
|
onClick: onHistoryClick ? () => {
|
|
@@ -27070,7 +27147,7 @@ function NotificationDrawer({
|
|
|
27070
27147
|
] })
|
|
27071
27148
|
] });
|
|
27072
27149
|
if (layoutContainer) {
|
|
27073
|
-
return /* @__PURE__ */
|
|
27150
|
+
return /* @__PURE__ */ jsx258(AppLayoutDrawerRoot, { open: isOpen, onOpenChange: (v) => v ? open() : close(), children: /* @__PURE__ */ jsx258(
|
|
27074
27151
|
AppLayoutDrawerContent,
|
|
27075
27152
|
{
|
|
27076
27153
|
side: "right",
|
|
@@ -27080,7 +27157,7 @@ function NotificationDrawer({
|
|
|
27080
27157
|
}
|
|
27081
27158
|
) });
|
|
27082
27159
|
}
|
|
27083
|
-
return /* @__PURE__ */
|
|
27160
|
+
return /* @__PURE__ */ jsx258(Drawer, { open: isOpen, onOpenChange: (v) => v ? open() : close(), children: /* @__PURE__ */ jsx258(
|
|
27084
27161
|
DrawerContent,
|
|
27085
27162
|
{
|
|
27086
27163
|
side: "right",
|
|
@@ -27126,16 +27203,16 @@ function DrawerScrollList({
|
|
|
27126
27203
|
return () => observer.disconnect();
|
|
27127
27204
|
}, [hasMore, isLoadingMore, loadMore, loadMoreRootMargin]);
|
|
27128
27205
|
const isEmpty = unreadNotifications.length === 0;
|
|
27129
|
-
return /* @__PURE__ */
|
|
27206
|
+
return /* @__PURE__ */ jsx258(
|
|
27130
27207
|
"div",
|
|
27131
27208
|
{
|
|
27132
27209
|
ref: scrollRef,
|
|
27133
27210
|
className: "flex flex-1 flex-col gap-[var(--spacing-system-xs)] overflow-y-auto px-[var(--spacing-system-m)]",
|
|
27134
|
-
children: isEmpty && !isLoadingMore ? /* @__PURE__ */
|
|
27211
|
+
children: isEmpty && !isLoadingMore ? /* @__PURE__ */ jsx258(EmptyState, {}) : /* @__PURE__ */ jsxs207(Fragment44, { children: [
|
|
27135
27212
|
unreadNotifications.map((n) => {
|
|
27136
27213
|
const custom = renderTile?.(n, { onComplete, onSettle, liveDurationMs });
|
|
27137
|
-
if (custom) return /* @__PURE__ */
|
|
27138
|
-
return /* @__PURE__ */
|
|
27214
|
+
if (custom) return /* @__PURE__ */ jsx258("div", { children: custom }, n.id);
|
|
27215
|
+
return /* @__PURE__ */ jsx258(
|
|
27139
27216
|
NotificationTile,
|
|
27140
27217
|
{
|
|
27141
27218
|
notification: n,
|
|
@@ -27146,22 +27223,22 @@ function DrawerScrollList({
|
|
|
27146
27223
|
n.id
|
|
27147
27224
|
);
|
|
27148
27225
|
}),
|
|
27149
|
-
isLoadingMore && /* @__PURE__ */
|
|
27150
|
-
loadMore && hasMore && /* @__PURE__ */
|
|
27226
|
+
isLoadingMore && /* @__PURE__ */ jsx258(DrawerLoadingTiles, {}),
|
|
27227
|
+
loadMore && hasMore && /* @__PURE__ */ jsx258("div", { ref: sentinelRef, className: "h-1", "aria-hidden": "true" })
|
|
27151
27228
|
] })
|
|
27152
27229
|
}
|
|
27153
27230
|
);
|
|
27154
27231
|
}
|
|
27155
27232
|
function DrawerLoadingTiles() {
|
|
27156
|
-
return /* @__PURE__ */
|
|
27157
|
-
/* @__PURE__ */
|
|
27233
|
+
return /* @__PURE__ */ jsxs207(Fragment44, { children: [
|
|
27234
|
+
/* @__PURE__ */ jsx258(
|
|
27158
27235
|
"div",
|
|
27159
27236
|
{
|
|
27160
27237
|
"aria-hidden": "true",
|
|
27161
27238
|
className: "h-16 w-full shrink-0 animate-pulse rounded-md border border-ods-border bg-ods-card"
|
|
27162
27239
|
}
|
|
27163
27240
|
),
|
|
27164
|
-
/* @__PURE__ */
|
|
27241
|
+
/* @__PURE__ */ jsx258(
|
|
27165
27242
|
"div",
|
|
27166
27243
|
{
|
|
27167
27244
|
"aria-hidden": "true",
|
|
@@ -27171,17 +27248,17 @@ function DrawerLoadingTiles() {
|
|
|
27171
27248
|
] });
|
|
27172
27249
|
}
|
|
27173
27250
|
function EmptyState() {
|
|
27174
|
-
return /* @__PURE__ */
|
|
27175
|
-
/* @__PURE__ */
|
|
27176
|
-
/* @__PURE__ */
|
|
27251
|
+
return /* @__PURE__ */ jsxs207("div", { className: "flex flex-1 flex-col items-center justify-center gap-[var(--spacing-system-xs)] py-[var(--spacing-system-l)]", children: [
|
|
27252
|
+
/* @__PURE__ */ jsx258(BellOffIcon, { size: 24, className: "text-ods-text-secondary" }),
|
|
27253
|
+
/* @__PURE__ */ jsx258("p", { className: "text-ods-text-secondary text-h6", children: "No new notifications" })
|
|
27177
27254
|
] });
|
|
27178
27255
|
}
|
|
27179
27256
|
function ShowNotificationsToggleRow({ checked, onChange }) {
|
|
27180
|
-
return /* @__PURE__ */
|
|
27181
|
-
/* @__PURE__ */
|
|
27182
|
-
/* @__PURE__ */
|
|
27183
|
-
/* @__PURE__ */
|
|
27184
|
-
/* @__PURE__ */
|
|
27257
|
+
return /* @__PURE__ */ jsxs207("div", { className: "flex items-center gap-[var(--spacing-system-s)] border-b border-ods-border p-[var(--spacing-system-sf)] last:border-b-0", children: [
|
|
27258
|
+
/* @__PURE__ */ jsx258(Switch, { checked, onCheckedChange: onChange, "aria-label": "Show pop-up notifications" }),
|
|
27259
|
+
/* @__PURE__ */ jsxs207("div", { className: "min-w-0 flex-1", children: [
|
|
27260
|
+
/* @__PURE__ */ jsx258("p", { className: "text-ods-text-primary text-h4", children: "Show Notifications" }),
|
|
27261
|
+
/* @__PURE__ */ jsx258("p", { className: "text-ods-text-secondary text-h6", children: "Show pop-up messages for new alerts" })
|
|
27185
27262
|
] })
|
|
27186
27263
|
] });
|
|
27187
27264
|
}
|
|
@@ -27196,8 +27273,8 @@ function DesktopNotificationsToggleRow({ checked, onChange }) {
|
|
|
27196
27273
|
}
|
|
27197
27274
|
if (await request() === "granted") onChange(true);
|
|
27198
27275
|
};
|
|
27199
|
-
return /* @__PURE__ */
|
|
27200
|
-
/* @__PURE__ */
|
|
27276
|
+
return /* @__PURE__ */ jsxs207("div", { className: "flex items-center gap-[var(--spacing-system-s)] border-b border-ods-border p-[var(--spacing-system-sf)] last:border-b-0", children: [
|
|
27277
|
+
/* @__PURE__ */ jsx258(
|
|
27201
27278
|
Switch,
|
|
27202
27279
|
{
|
|
27203
27280
|
checked: checked && permission === "granted",
|
|
@@ -27206,24 +27283,24 @@ function DesktopNotificationsToggleRow({ checked, onChange }) {
|
|
|
27206
27283
|
"aria-label": "Show desktop notifications"
|
|
27207
27284
|
}
|
|
27208
27285
|
),
|
|
27209
|
-
/* @__PURE__ */
|
|
27210
|
-
/* @__PURE__ */
|
|
27211
|
-
/* @__PURE__ */
|
|
27286
|
+
/* @__PURE__ */ jsxs207("div", { className: "min-w-0 flex-1", children: [
|
|
27287
|
+
/* @__PURE__ */ jsx258("p", { className: cn("text-h4", blocked ? "text-ods-text-secondary" : "text-ods-text-primary"), children: "Desktop Notifications" }),
|
|
27288
|
+
/* @__PURE__ */ jsx258("p", { className: "text-ods-text-secondary text-h6", children: blocked ? "Enable notifications in your browser settings" : "Notify when this tab is in the background" })
|
|
27212
27289
|
] })
|
|
27213
27290
|
] });
|
|
27214
27291
|
}
|
|
27215
27292
|
function NotificationsHistoryButton({ onClick, historyHref }) {
|
|
27216
|
-
return /* @__PURE__ */
|
|
27293
|
+
return /* @__PURE__ */ jsx258(
|
|
27217
27294
|
SplitButton,
|
|
27218
27295
|
{
|
|
27219
27296
|
variant: "outline",
|
|
27220
27297
|
fullWidth: true,
|
|
27221
27298
|
onClick,
|
|
27222
27299
|
mainDisabled: !onClick,
|
|
27223
|
-
leftIcon: /* @__PURE__ */
|
|
27300
|
+
leftIcon: /* @__PURE__ */ jsx258(ClockHistoryIcon, { className: "text-ods-text-secondary" }),
|
|
27224
27301
|
groupAriaLabel: "Notifications history",
|
|
27225
27302
|
iconAction: {
|
|
27226
|
-
icon: /* @__PURE__ */
|
|
27303
|
+
icon: /* @__PURE__ */ jsx258(ArrowRightUpIcon, { className: "text-ods-text-secondary" }),
|
|
27227
27304
|
"aria-label": "Open notifications history in a new tab",
|
|
27228
27305
|
href: historyHref,
|
|
27229
27306
|
openInNewTab: true,
|
|
@@ -27236,7 +27313,7 @@ function NotificationsHistoryButton({ onClick, historyHref }) {
|
|
|
27236
27313
|
|
|
27237
27314
|
// src/components/features/notifications/notification-popups.tsx
|
|
27238
27315
|
import { useEffect as useEffect42, useState as useState71 } from "react";
|
|
27239
|
-
import { jsx as
|
|
27316
|
+
import { jsx as jsx259 } from "react/jsx-runtime";
|
|
27240
27317
|
var positionClasses = {
|
|
27241
27318
|
"top-right": "top-4 right-4",
|
|
27242
27319
|
"top-left": "top-4 left-4",
|
|
@@ -27286,7 +27363,7 @@ function NotificationPopups({
|
|
|
27286
27363
|
event.preventDefault();
|
|
27287
27364
|
activate(notification);
|
|
27288
27365
|
};
|
|
27289
|
-
return /* @__PURE__ */
|
|
27366
|
+
return /* @__PURE__ */ jsx259(
|
|
27290
27367
|
"div",
|
|
27291
27368
|
{
|
|
27292
27369
|
"aria-live": "polite",
|
|
@@ -27298,12 +27375,12 @@ function NotificationPopups({
|
|
|
27298
27375
|
children: live.map((n) => {
|
|
27299
27376
|
const custom = renderTile?.(n, { onComplete: markRead, onSettle: markSettled, liveDurationMs });
|
|
27300
27377
|
if (custom) {
|
|
27301
|
-
return /* @__PURE__ */
|
|
27378
|
+
return /* @__PURE__ */ jsx259("div", { className: "pointer-events-auto", children: custom }, n.id);
|
|
27302
27379
|
}
|
|
27303
27380
|
return (
|
|
27304
27381
|
// `role="button"` rather than a real <button>: the row hosts its own
|
|
27305
27382
|
// nested interactive elements, which a <button> may not contain.
|
|
27306
|
-
/* @__PURE__ */
|
|
27383
|
+
/* @__PURE__ */ jsx259(
|
|
27307
27384
|
"div",
|
|
27308
27385
|
{
|
|
27309
27386
|
role: "button",
|
|
@@ -27311,7 +27388,7 @@ function NotificationPopups({
|
|
|
27311
27388
|
onClick: handleBodyClick(n),
|
|
27312
27389
|
onKeyDown: handleBodyKeyDown(n),
|
|
27313
27390
|
className: "pointer-events-auto cursor-pointer rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent",
|
|
27314
|
-
children: /* @__PURE__ */
|
|
27391
|
+
children: /* @__PURE__ */ jsx259(
|
|
27315
27392
|
NotificationTile,
|
|
27316
27393
|
{
|
|
27317
27394
|
notification: n,
|
|
@@ -27391,7 +27468,7 @@ function approvalMetaToBatchData(approval) {
|
|
|
27391
27468
|
}
|
|
27392
27469
|
|
|
27393
27470
|
// src/components/features/notifications/approval-request-notification-tile.tsx
|
|
27394
|
-
import { Fragment as Fragment45, jsx as
|
|
27471
|
+
import { Fragment as Fragment45, jsx as jsx260, jsxs as jsxs208 } from "react/jsx-runtime";
|
|
27395
27472
|
var LOCKSCREEN_BUTTON = "h-9 min-w-24";
|
|
27396
27473
|
function ApprovalRequestNotificationTile({
|
|
27397
27474
|
notification,
|
|
@@ -27437,7 +27514,7 @@ function ApprovalRequestNotificationTile({
|
|
|
27437
27514
|
}
|
|
27438
27515
|
onComplete(notification.id);
|
|
27439
27516
|
};
|
|
27440
|
-
return /* @__PURE__ */
|
|
27517
|
+
return /* @__PURE__ */ jsx260(
|
|
27441
27518
|
NotificationTile,
|
|
27442
27519
|
{
|
|
27443
27520
|
notification: tileNotification,
|
|
@@ -27449,9 +27526,9 @@ function ApprovalRequestNotificationTile({
|
|
|
27449
27526
|
presentation,
|
|
27450
27527
|
timeLabel,
|
|
27451
27528
|
paused: pinned || processing,
|
|
27452
|
-
actions: /* @__PURE__ */
|
|
27453
|
-
status === "pending" ? /* @__PURE__ */
|
|
27454
|
-
/* @__PURE__ */
|
|
27529
|
+
actions: /* @__PURE__ */ jsxs208("div", { className: "flex w-full items-center gap-[var(--spacing-system-xs)]", children: [
|
|
27530
|
+
status === "pending" ? /* @__PURE__ */ jsxs208(Fragment45, { children: [
|
|
27531
|
+
/* @__PURE__ */ jsx260(
|
|
27455
27532
|
Button,
|
|
27456
27533
|
{
|
|
27457
27534
|
variant: "accent",
|
|
@@ -27467,7 +27544,7 @@ function ApprovalRequestNotificationTile({
|
|
|
27467
27544
|
children: "Approve"
|
|
27468
27545
|
}
|
|
27469
27546
|
),
|
|
27470
|
-
/* @__PURE__ */
|
|
27547
|
+
/* @__PURE__ */ jsx260(
|
|
27471
27548
|
Button,
|
|
27472
27549
|
{
|
|
27473
27550
|
variant: "outline",
|
|
@@ -27478,14 +27555,14 @@ function ApprovalRequestNotificationTile({
|
|
|
27478
27555
|
children: "Reject"
|
|
27479
27556
|
}
|
|
27480
27557
|
)
|
|
27481
|
-
] }) : /* @__PURE__ */
|
|
27482
|
-
/* @__PURE__ */
|
|
27483
|
-
approval.resolvedByName ? /* @__PURE__ */
|
|
27558
|
+
] }) : /* @__PURE__ */ jsxs208("span", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
27559
|
+
/* @__PURE__ */ jsx260(ApprovalStatusTag, { status }),
|
|
27560
|
+
approval.resolvedByName ? /* @__PURE__ */ jsxs208("span", { className: "truncate text-ods-text-secondary text-h6", children: [
|
|
27484
27561
|
"by ",
|
|
27485
27562
|
approval.resolvedByName
|
|
27486
27563
|
] }) : null
|
|
27487
27564
|
] }),
|
|
27488
|
-
!lockscreen && /* @__PURE__ */
|
|
27565
|
+
!lockscreen && /* @__PURE__ */ jsx260(
|
|
27489
27566
|
Button,
|
|
27490
27567
|
{
|
|
27491
27568
|
variant: "outline",
|
|
@@ -27497,11 +27574,11 @@ function ApprovalRequestNotificationTile({
|
|
|
27497
27574
|
"aria-expanded": expanded,
|
|
27498
27575
|
"aria-label": toggleLabel,
|
|
27499
27576
|
className: "ml-auto w-6 shrink-0 px-0 md:w-8",
|
|
27500
|
-
children: /* @__PURE__ */
|
|
27577
|
+
children: /* @__PURE__ */ jsx260(ExpandChevron, { expanded })
|
|
27501
27578
|
}
|
|
27502
27579
|
)
|
|
27503
27580
|
] }),
|
|
27504
|
-
children: !lockscreen && /* @__PURE__ */
|
|
27581
|
+
children: !lockscreen && /* @__PURE__ */ jsx260("div", { style: containerStyle, children: /* @__PURE__ */ jsx260("div", { ref: innerRef, children: /* @__PURE__ */ jsx260("div", { className: "border-t border-ods-border", children: /* @__PURE__ */ jsx260(
|
|
27505
27582
|
ApprovalBatchMessage,
|
|
27506
27583
|
{
|
|
27507
27584
|
data: batchData,
|
|
@@ -27517,7 +27594,7 @@ function ApprovalRequestNotificationTile({
|
|
|
27517
27594
|
|
|
27518
27595
|
// src/components/features/time-tracker/time-tracker-context.tsx
|
|
27519
27596
|
import { createContext as createContext10, useCallback as useCallback25, useContext as useContext10, useState as useState73 } from "react";
|
|
27520
|
-
import { jsx as
|
|
27597
|
+
import { jsx as jsx261 } from "react/jsx-runtime";
|
|
27521
27598
|
var TimeTrackerContext = createContext10(null);
|
|
27522
27599
|
function TimeTrackerProvider({
|
|
27523
27600
|
children,
|
|
@@ -27530,7 +27607,7 @@ function TimeTrackerProvider({
|
|
|
27530
27607
|
const close = useCallback25(() => setIsOpen(false), []);
|
|
27531
27608
|
const toggle = useCallback25(() => setIsOpen((v) => !v), []);
|
|
27532
27609
|
const value = { ...data, isOpen, open, close, toggle };
|
|
27533
|
-
return /* @__PURE__ */
|
|
27610
|
+
return /* @__PURE__ */ jsx261(TimeTrackerContext.Provider, { value: enabled ? value : null, children });
|
|
27534
27611
|
}
|
|
27535
27612
|
function useTimeTracker() {
|
|
27536
27613
|
const ctx = useContext10(TimeTrackerContext);
|
|
@@ -27570,15 +27647,15 @@ function useTrackerClock({ status, runningSince, accumulatedMs = 0 }) {
|
|
|
27570
27647
|
}
|
|
27571
27648
|
|
|
27572
27649
|
// src/components/features/time-tracker/time-tracker-panel.tsx
|
|
27573
|
-
import { jsx as
|
|
27650
|
+
import { jsx as jsx262, jsxs as jsxs209 } from "react/jsx-runtime";
|
|
27574
27651
|
function renderCustomerOption(option, isSelected) {
|
|
27575
27652
|
const { label, imageUrl } = option;
|
|
27576
|
-
return /* @__PURE__ */
|
|
27577
|
-
/* @__PURE__ */
|
|
27578
|
-
/* @__PURE__ */
|
|
27579
|
-
/* @__PURE__ */
|
|
27653
|
+
return /* @__PURE__ */ jsxs209("div", { className: "flex w-full min-w-0 items-center justify-between gap-[var(--spacing-system-xs)]", children: [
|
|
27654
|
+
/* @__PURE__ */ jsxs209("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xs)]", children: [
|
|
27655
|
+
/* @__PURE__ */ jsx262(SquareAvatar, { src: imageUrl, alt: label, fallback: label, size: "sm", variant: "square" }),
|
|
27656
|
+
/* @__PURE__ */ jsx262("span", { className: "truncate", title: label, children: label })
|
|
27580
27657
|
] }),
|
|
27581
|
-
isSelected && /* @__PURE__ */
|
|
27658
|
+
isSelected && /* @__PURE__ */ jsx262(CheckIcon, { className: "text-ods-accent", size: 20 })
|
|
27582
27659
|
] });
|
|
27583
27660
|
}
|
|
27584
27661
|
function TimeTrackerPanel({
|
|
@@ -27658,7 +27735,7 @@ function TimeTrackerPanel({
|
|
|
27658
27735
|
imageUrl: c.imageUrl
|
|
27659
27736
|
}));
|
|
27660
27737
|
const selectedCustomer = customerAutocompleteOptions.find((o) => o.value === selectedCustomerId);
|
|
27661
|
-
const customerStartAdornment = selectedCustomer ? /* @__PURE__ */
|
|
27738
|
+
const customerStartAdornment = selectedCustomer ? /* @__PURE__ */ jsx262(
|
|
27662
27739
|
SquareAvatar,
|
|
27663
27740
|
{
|
|
27664
27741
|
src: selectedCustomer.imageUrl,
|
|
@@ -27669,7 +27746,7 @@ function TimeTrackerPanel({
|
|
|
27669
27746
|
}
|
|
27670
27747
|
) : void 0;
|
|
27671
27748
|
const visibleEntries = lastEntries.slice(0, 3);
|
|
27672
|
-
return /* @__PURE__ */
|
|
27749
|
+
return /* @__PURE__ */ jsxs209(
|
|
27673
27750
|
"div",
|
|
27674
27751
|
{
|
|
27675
27752
|
className: cn(
|
|
@@ -27677,7 +27754,7 @@ function TimeTrackerPanel({
|
|
|
27677
27754
|
className
|
|
27678
27755
|
),
|
|
27679
27756
|
children: [
|
|
27680
|
-
/* @__PURE__ */
|
|
27757
|
+
/* @__PURE__ */ jsx262(
|
|
27681
27758
|
Button,
|
|
27682
27759
|
{
|
|
27683
27760
|
variant: "transparent",
|
|
@@ -27685,13 +27762,13 @@ function TimeTrackerPanel({
|
|
|
27685
27762
|
onClick: onClose,
|
|
27686
27763
|
"aria-label": "Close time tracker",
|
|
27687
27764
|
className: "absolute right-[var(--spacing-system-sf)] top-[var(--spacing-system-sf)] hidden text-ods-text-secondary hover:text-ods-text-primary md:inline-flex [&_svg]:!size-6",
|
|
27688
|
-
children: /* @__PURE__ */
|
|
27765
|
+
children: /* @__PURE__ */ jsx262(XmarkIcon, {})
|
|
27689
27766
|
}
|
|
27690
27767
|
),
|
|
27691
|
-
/* @__PURE__ */
|
|
27692
|
-
/* @__PURE__ */
|
|
27693
|
-
/* @__PURE__ */
|
|
27694
|
-
isActive && /* @__PURE__ */
|
|
27768
|
+
/* @__PURE__ */ jsxs209("div", { className: "flex flex-col gap-[var(--spacing-system-m)]", children: [
|
|
27769
|
+
/* @__PURE__ */ jsxs209("div", { className: "flex items-center gap-[var(--spacing-system-s)]", children: [
|
|
27770
|
+
/* @__PURE__ */ jsx262(StatusTag, { status }),
|
|
27771
|
+
isActive && /* @__PURE__ */ jsx262(
|
|
27695
27772
|
Button,
|
|
27696
27773
|
{
|
|
27697
27774
|
variant: "transparent",
|
|
@@ -27701,8 +27778,8 @@ function TimeTrackerPanel({
|
|
|
27701
27778
|
}
|
|
27702
27779
|
)
|
|
27703
27780
|
] }),
|
|
27704
|
-
/* @__PURE__ */
|
|
27705
|
-
/* @__PURE__ */
|
|
27781
|
+
/* @__PURE__ */ jsxs209("div", { className: "flex items-stretch overflow-hidden rounded-md border border-ods-border", children: [
|
|
27782
|
+
/* @__PURE__ */ jsx262("div", { className: "flex flex-1 items-center border-r border-ods-border bg-ods-bg px-[var(--spacing-system-m)] py-[var(--spacing-system-s)]", children: /* @__PURE__ */ jsx262(
|
|
27706
27783
|
"span",
|
|
27707
27784
|
{
|
|
27708
27785
|
className: cn(
|
|
@@ -27712,7 +27789,7 @@ function TimeTrackerPanel({
|
|
|
27712
27789
|
children: elapsedLabel
|
|
27713
27790
|
}
|
|
27714
27791
|
) }),
|
|
27715
|
-
/* @__PURE__ */
|
|
27792
|
+
/* @__PURE__ */ jsx262(
|
|
27716
27793
|
Button,
|
|
27717
27794
|
{
|
|
27718
27795
|
size: "icon",
|
|
@@ -27721,10 +27798,10 @@ function TimeTrackerPanel({
|
|
|
27721
27798
|
disabled: isStarting,
|
|
27722
27799
|
"aria-label": isRunning ? "Pause tracking" : isActive ? "Resume tracking" : "Start tracking",
|
|
27723
27800
|
className: "h-auto w-auto rounded-none transition-none [&_svg]:!size-6",
|
|
27724
|
-
children: isRunning ? /* @__PURE__ */
|
|
27801
|
+
children: isRunning ? /* @__PURE__ */ jsx262(PauseIcon, {}) : /* @__PURE__ */ jsx262(PlayIcon, {})
|
|
27725
27802
|
}
|
|
27726
27803
|
),
|
|
27727
|
-
isActive && /* @__PURE__ */
|
|
27804
|
+
isActive && /* @__PURE__ */ jsx262(
|
|
27728
27805
|
Button,
|
|
27729
27806
|
{
|
|
27730
27807
|
size: "icon",
|
|
@@ -27733,12 +27810,12 @@ function TimeTrackerPanel({
|
|
|
27733
27810
|
disabled: isSubmitting,
|
|
27734
27811
|
"aria-label": "Finish and save tracking",
|
|
27735
27812
|
className: "h-auto w-auto rounded-none border-l border-ods-border [&_svg]:!size-6",
|
|
27736
|
-
children: /* @__PURE__ */
|
|
27813
|
+
children: /* @__PURE__ */ jsx262(CheckCircleIcon, {})
|
|
27737
27814
|
}
|
|
27738
27815
|
)
|
|
27739
27816
|
] }),
|
|
27740
|
-
/* @__PURE__ */
|
|
27741
|
-
/* @__PURE__ */
|
|
27817
|
+
/* @__PURE__ */ jsxs209("div", { className: cn("grid gap-[var(--spacing-system-m)]", showCustomer && "grid-cols-2"), children: [
|
|
27818
|
+
/* @__PURE__ */ jsx262(
|
|
27742
27819
|
Autocomplete,
|
|
27743
27820
|
{
|
|
27744
27821
|
value: selectedTicketId,
|
|
@@ -27754,7 +27831,7 @@ function TimeTrackerPanel({
|
|
|
27754
27831
|
}
|
|
27755
27832
|
}
|
|
27756
27833
|
),
|
|
27757
|
-
showCustomer && /* @__PURE__ */
|
|
27834
|
+
showCustomer && /* @__PURE__ */ jsx262(
|
|
27758
27835
|
Autocomplete,
|
|
27759
27836
|
{
|
|
27760
27837
|
value: selectedCustomerId ?? null,
|
|
@@ -27773,7 +27850,7 @@ function TimeTrackerPanel({
|
|
|
27773
27850
|
)
|
|
27774
27851
|
] })
|
|
27775
27852
|
] }),
|
|
27776
|
-
/* @__PURE__ */
|
|
27853
|
+
/* @__PURE__ */ jsx262(
|
|
27777
27854
|
Textarea,
|
|
27778
27855
|
{
|
|
27779
27856
|
value: notes,
|
|
@@ -27784,30 +27861,30 @@ function TimeTrackerPanel({
|
|
|
27784
27861
|
className: "max-h-[280px]"
|
|
27785
27862
|
}
|
|
27786
27863
|
),
|
|
27787
|
-
/* @__PURE__ */
|
|
27788
|
-
visibleEntries.length === 0 ? /* @__PURE__ */
|
|
27789
|
-
/* @__PURE__ */
|
|
27790
|
-
/* @__PURE__ */
|
|
27791
|
-
/* @__PURE__ */
|
|
27792
|
-
/* @__PURE__ */
|
|
27864
|
+
/* @__PURE__ */ jsxs209("div", { className: "flex flex-col gap-[var(--spacing-system-m)]", children: [
|
|
27865
|
+
visibleEntries.length === 0 ? /* @__PURE__ */ jsxs209("div", { className: "flex min-h-[268px] flex-col items-center justify-center gap-[var(--spacing-system-l)] p-[var(--spacing-system-l)] text-center text-ods-text-secondary", children: [
|
|
27866
|
+
/* @__PURE__ */ jsx262(ClockHistoryIcon, { className: "size-6" }),
|
|
27867
|
+
/* @__PURE__ */ jsxs209("div", { className: "flex flex-col", children: [
|
|
27868
|
+
/* @__PURE__ */ jsx262("p", { className: "font-medium text-h4", children: "No time logged" }),
|
|
27869
|
+
/* @__PURE__ */ jsx262("p", { className: "text-h6", children: "Last entries will appear here" })
|
|
27793
27870
|
] })
|
|
27794
|
-
] }) : /* @__PURE__ */
|
|
27795
|
-
/* @__PURE__ */
|
|
27796
|
-
/* @__PURE__ */
|
|
27871
|
+
] }) : /* @__PURE__ */ jsxs209("div", { className: "flex flex-col gap-[var(--spacing-system-xs)]", children: [
|
|
27872
|
+
/* @__PURE__ */ jsx262("p", { className: "font-mono uppercase tracking-wide text-ods-text-secondary text-h6", children: "Last Entries" }),
|
|
27873
|
+
/* @__PURE__ */ jsx262("div", { className: "overflow-hidden rounded-md border border-ods-border bg-ods-card", children: visibleEntries.map((entry) => /* @__PURE__ */ jsx262(LastEntryRow, { entry, onClick: handleEntryClick }, entry.id)) })
|
|
27797
27874
|
] }),
|
|
27798
|
-
/* @__PURE__ */
|
|
27799
|
-
/* @__PURE__ */
|
|
27875
|
+
/* @__PURE__ */ jsxs209("div", { className: "grid grid-cols-2 gap-[var(--spacing-system-m)]", children: [
|
|
27876
|
+
/* @__PURE__ */ jsx262(
|
|
27800
27877
|
Button,
|
|
27801
27878
|
{
|
|
27802
27879
|
variant: "outline",
|
|
27803
27880
|
className: "min-w-0",
|
|
27804
27881
|
onClick: handleManualEntry,
|
|
27805
27882
|
disabled: !onManualEntry,
|
|
27806
|
-
leftIcon: /* @__PURE__ */
|
|
27883
|
+
leftIcon: /* @__PURE__ */ jsx262(PlusCircleIcon, { className: "text-ods-text-secondary" }),
|
|
27807
27884
|
children: "Manual Entry"
|
|
27808
27885
|
}
|
|
27809
27886
|
),
|
|
27810
|
-
/* @__PURE__ */
|
|
27887
|
+
/* @__PURE__ */ jsx262(
|
|
27811
27888
|
SplitButton,
|
|
27812
27889
|
{
|
|
27813
27890
|
variant: "outline",
|
|
@@ -27818,7 +27895,7 @@ function TimeTrackerPanel({
|
|
|
27818
27895
|
mainDisabled: !onOpenMyTime,
|
|
27819
27896
|
groupAriaLabel: "Open my time",
|
|
27820
27897
|
iconAction: {
|
|
27821
|
-
icon: /* @__PURE__ */
|
|
27898
|
+
icon: /* @__PURE__ */ jsx262(ArrowRightUpIcon, { size: 24 }),
|
|
27822
27899
|
"aria-label": "Open my time in a new view",
|
|
27823
27900
|
onClick: onOpenMyTimeMenu,
|
|
27824
27901
|
disabled: !onOpenMyTimeMenu,
|
|
@@ -27829,7 +27906,7 @@ function TimeTrackerPanel({
|
|
|
27829
27906
|
)
|
|
27830
27907
|
] })
|
|
27831
27908
|
] }),
|
|
27832
|
-
/* @__PURE__ */
|
|
27909
|
+
/* @__PURE__ */ jsx262(Button, { variant: "outline", fullWidth: true, onClick: onClose, className: "md:hidden", children: "Close" })
|
|
27833
27910
|
]
|
|
27834
27911
|
}
|
|
27835
27912
|
);
|
|
@@ -27837,32 +27914,32 @@ function TimeTrackerPanel({
|
|
|
27837
27914
|
var STATUS_TAG_SKIN = "gap-[var(--spacing-system-xs)] font-mono font-medium uppercase tracking-tight";
|
|
27838
27915
|
function StatusTag({ status }) {
|
|
27839
27916
|
if (status === "tracking") {
|
|
27840
|
-
return /* @__PURE__ */
|
|
27917
|
+
return /* @__PURE__ */ jsx262(
|
|
27841
27918
|
Tag,
|
|
27842
27919
|
{
|
|
27843
27920
|
variant: "success",
|
|
27844
27921
|
className: STATUS_TAG_SKIN,
|
|
27845
|
-
icon: /* @__PURE__ */
|
|
27922
|
+
icon: /* @__PURE__ */ jsx262(DotsLoaderIcon, { className: "h-4 w-4" }),
|
|
27846
27923
|
label: "Tracking"
|
|
27847
27924
|
}
|
|
27848
27925
|
);
|
|
27849
27926
|
}
|
|
27850
27927
|
if (status === "paused") {
|
|
27851
|
-
return /* @__PURE__ */
|
|
27928
|
+
return /* @__PURE__ */ jsx262(Tag, { variant: "warning", className: STATUS_TAG_SKIN, icon: /* @__PURE__ */ jsx262(PauseIcon, { className: "h-4 w-4" }), label: "Paused" });
|
|
27852
27929
|
}
|
|
27853
|
-
return /* @__PURE__ */
|
|
27930
|
+
return /* @__PURE__ */ jsx262(Tag, { variant: "grey", className: STATUS_TAG_SKIN, label: "Ready to Track" });
|
|
27854
27931
|
}
|
|
27855
27932
|
function LastEntryRow({ entry, onClick }) {
|
|
27856
|
-
return /* @__PURE__ */
|
|
27857
|
-
/* @__PURE__ */
|
|
27858
|
-
/* @__PURE__ */
|
|
27859
|
-
/* @__PURE__ */
|
|
27933
|
+
return /* @__PURE__ */ jsxs209("div", { className: "flex items-center gap-[var(--spacing-system-m)] border-b border-ods-border bg-ods-bg px-[var(--spacing-system-m)] py-[var(--spacing-system-sf)] last:border-b-0", children: [
|
|
27934
|
+
/* @__PURE__ */ jsxs209("div", { className: "flex w-[88px] shrink-0 flex-col justify-center", children: [
|
|
27935
|
+
/* @__PURE__ */ jsx262("span", { className: "truncate font-medium text-ods-text-primary text-h4", children: entry.durationLabel }),
|
|
27936
|
+
/* @__PURE__ */ jsx262("span", { className: "truncate text-ods-text-secondary text-h6", children: entry.dateLabel })
|
|
27860
27937
|
] }),
|
|
27861
|
-
/* @__PURE__ */
|
|
27862
|
-
/* @__PURE__ */
|
|
27863
|
-
entry.description && /* @__PURE__ */
|
|
27938
|
+
/* @__PURE__ */ jsxs209("div", { className: "flex min-w-0 flex-1 flex-col justify-center", children: [
|
|
27939
|
+
/* @__PURE__ */ jsx262("span", { className: "truncate font-medium text-ods-text-primary text-h4", children: entry.title }),
|
|
27940
|
+
entry.description && /* @__PURE__ */ jsx262("span", { className: "truncate text-ods-text-secondary text-h6", children: entry.description })
|
|
27864
27941
|
] }),
|
|
27865
|
-
/* @__PURE__ */
|
|
27942
|
+
/* @__PURE__ */ jsx262(
|
|
27866
27943
|
Button,
|
|
27867
27944
|
{
|
|
27868
27945
|
variant: "outline",
|
|
@@ -27871,7 +27948,7 @@ function LastEntryRow({ entry, onClick }) {
|
|
|
27871
27948
|
disabled: !onClick,
|
|
27872
27949
|
"aria-label": `Open entry: ${entry.title}`,
|
|
27873
27950
|
className: "h-12 w-12 shrink-0 [&_svg]:!size-6",
|
|
27874
|
-
children: /* @__PURE__ */
|
|
27951
|
+
children: /* @__PURE__ */ jsx262(Chevron02RightIcon, {})
|
|
27875
27952
|
}
|
|
27876
27953
|
)
|
|
27877
27954
|
] });
|
|
@@ -27882,9 +27959,9 @@ import * as PopoverPrimitive7 from "@radix-ui/react-popover";
|
|
|
27882
27959
|
import { useEffect as useEffect44, useRef as useRef38, useState as useState76 } from "react";
|
|
27883
27960
|
|
|
27884
27961
|
// src/components/navigation/unread-dot.tsx
|
|
27885
|
-
import { jsx as
|
|
27962
|
+
import { jsx as jsx263 } from "react/jsx-runtime";
|
|
27886
27963
|
function UnreadDot({ size = "responsive", className }) {
|
|
27887
|
-
return /* @__PURE__ */
|
|
27964
|
+
return /* @__PURE__ */ jsx263(
|
|
27888
27965
|
"span",
|
|
27889
27966
|
{
|
|
27890
27967
|
className: cn(
|
|
@@ -27897,7 +27974,7 @@ function UnreadDot({ size = "responsive", className }) {
|
|
|
27897
27974
|
}
|
|
27898
27975
|
function UnreadCountBadge({ count, className }) {
|
|
27899
27976
|
if (count <= 0) return null;
|
|
27900
|
-
return /* @__PURE__ */
|
|
27977
|
+
return /* @__PURE__ */ jsx263(
|
|
27901
27978
|
"span",
|
|
27902
27979
|
{
|
|
27903
27980
|
className: cn(
|
|
@@ -27912,7 +27989,7 @@ function UnreadCountBadge({ count, className }) {
|
|
|
27912
27989
|
}
|
|
27913
27990
|
|
|
27914
27991
|
// src/components/navigation/header-button.tsx
|
|
27915
|
-
import { jsx as
|
|
27992
|
+
import { jsx as jsx264, jsxs as jsxs210 } from "react/jsx-runtime";
|
|
27916
27993
|
function HeaderButton({
|
|
27917
27994
|
isActive = false,
|
|
27918
27995
|
icon,
|
|
@@ -27920,7 +27997,7 @@ function HeaderButton({
|
|
|
27920
27997
|
className,
|
|
27921
27998
|
...props
|
|
27922
27999
|
}) {
|
|
27923
|
-
return /* @__PURE__ */
|
|
28000
|
+
return /* @__PURE__ */ jsx264(
|
|
27924
28001
|
"button",
|
|
27925
28002
|
{
|
|
27926
28003
|
className: cn(
|
|
@@ -27938,16 +28015,16 @@ function HeaderButton({
|
|
|
27938
28015
|
className
|
|
27939
28016
|
),
|
|
27940
28017
|
...props,
|
|
27941
|
-
children: showUnreadDot ? /* @__PURE__ */
|
|
28018
|
+
children: showUnreadDot ? /* @__PURE__ */ jsxs210("span", { className: "relative inline-flex", children: [
|
|
27942
28019
|
icon,
|
|
27943
|
-
/* @__PURE__ */
|
|
28020
|
+
/* @__PURE__ */ jsx264(UnreadDot, {})
|
|
27944
28021
|
] }) : icon
|
|
27945
28022
|
}
|
|
27946
28023
|
);
|
|
27947
28024
|
}
|
|
27948
28025
|
|
|
27949
28026
|
// src/components/features/time-tracker/time-tracker-header-button.tsx
|
|
27950
|
-
import { Fragment as Fragment46, jsx as
|
|
28027
|
+
import { Fragment as Fragment46, jsx as jsx265, jsxs as jsxs211 } from "react/jsx-runtime";
|
|
27951
28028
|
function TimeTrackerHeaderButton({ className, disabled }) {
|
|
27952
28029
|
const ctx = useOptionalTimeTracker();
|
|
27953
28030
|
const elapsedLabel = useTrackerClock({
|
|
@@ -27977,8 +28054,8 @@ function TimeTrackerHeaderButton({ className, disabled }) {
|
|
|
27977
28054
|
const { open, close, status } = ctx;
|
|
27978
28055
|
const isPaused = status === "paused";
|
|
27979
28056
|
const isActive = status === "tracking" || isPaused;
|
|
27980
|
-
return /* @__PURE__ */
|
|
27981
|
-
/* @__PURE__ */
|
|
28057
|
+
return /* @__PURE__ */ jsxs211(PopoverPrimitive7.Root, { open: isOpen, onOpenChange: (next) => next ? open() : close(), children: [
|
|
28058
|
+
/* @__PURE__ */ jsx265(PopoverPrimitive7.Trigger, { asChild: true, children: /* @__PURE__ */ jsx265(
|
|
27982
28059
|
HeaderButton,
|
|
27983
28060
|
{
|
|
27984
28061
|
"aria-label": "Time tracker",
|
|
@@ -27992,14 +28069,14 @@ function TimeTrackerHeaderButton({ className, disabled }) {
|
|
|
27992
28069
|
isActive && "md:w-auto md:min-w-[144px] md:justify-center md:gap-[var(--spacing-system-xsf)] md:px-[var(--spacing-system-sf)]",
|
|
27993
28070
|
className
|
|
27994
28071
|
),
|
|
27995
|
-
icon: /* @__PURE__ */
|
|
27996
|
-
/* @__PURE__ */
|
|
28072
|
+
icon: /* @__PURE__ */ jsxs211(Fragment46, { children: [
|
|
28073
|
+
/* @__PURE__ */ jsx265(
|
|
27997
28074
|
ClockHistoryIcon,
|
|
27998
28075
|
{
|
|
27999
28076
|
className: cn("h-6 w-6", isPaused ? "text-ods-text-secondary" : isActive && "text-ods-accent")
|
|
28000
28077
|
}
|
|
28001
28078
|
),
|
|
28002
|
-
isActive && /* @__PURE__ */
|
|
28079
|
+
isActive && /* @__PURE__ */ jsx265(
|
|
28003
28080
|
"span",
|
|
28004
28081
|
{
|
|
28005
28082
|
className: cn(
|
|
@@ -28012,7 +28089,7 @@ function TimeTrackerHeaderButton({ className, disabled }) {
|
|
|
28012
28089
|
] })
|
|
28013
28090
|
}
|
|
28014
28091
|
) }),
|
|
28015
|
-
/* @__PURE__ */
|
|
28092
|
+
/* @__PURE__ */ jsx265(PopoverPrimitive7.Portal, { container: layoutContainer ?? void 0, children: /* @__PURE__ */ jsx265(
|
|
28016
28093
|
"div",
|
|
28017
28094
|
{
|
|
28018
28095
|
"aria-hidden": "true",
|
|
@@ -28025,7 +28102,7 @@ function TimeTrackerHeaderButton({ className, disabled }) {
|
|
|
28025
28102
|
)
|
|
28026
28103
|
}
|
|
28027
28104
|
) }),
|
|
28028
|
-
/* @__PURE__ */
|
|
28105
|
+
/* @__PURE__ */ jsx265(PopoverPrimitive7.Portal, { children: /* @__PURE__ */ jsx265(
|
|
28029
28106
|
PopoverPrimitive7.Content,
|
|
28030
28107
|
{
|
|
28031
28108
|
align: "end",
|
|
@@ -28037,7 +28114,7 @@ function TimeTrackerHeaderButton({ className, disabled }) {
|
|
|
28037
28114
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
28038
28115
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95"
|
|
28039
28116
|
),
|
|
28040
|
-
children: /* @__PURE__ */
|
|
28117
|
+
children: /* @__PURE__ */ jsx265(TimeTrackerPanel, { ...ctx, onClose: close })
|
|
28041
28118
|
}
|
|
28042
28119
|
) })
|
|
28043
28120
|
] });
|
|
@@ -28060,11 +28137,11 @@ function matchesDeviceName(device, search = "") {
|
|
|
28060
28137
|
|
|
28061
28138
|
// src/components/features/devices/devices-view-config.tsx
|
|
28062
28139
|
import { createContext as createContext11, useContext as useContext11 } from "react";
|
|
28063
|
-
import { jsx as
|
|
28140
|
+
import { jsx as jsx266 } from "react/jsx-runtime";
|
|
28064
28141
|
var EMPTY_CONFIG = {};
|
|
28065
28142
|
var DevicesViewConfigContext = createContext11(EMPTY_CONFIG);
|
|
28066
28143
|
function DevicesViewConfigProvider({ value, children }) {
|
|
28067
|
-
return /* @__PURE__ */
|
|
28144
|
+
return /* @__PURE__ */ jsx266(DevicesViewConfigContext.Provider, { value, children });
|
|
28068
28145
|
}
|
|
28069
28146
|
function useDevicesViewConfig() {
|
|
28070
28147
|
return useContext11(DevicesViewConfigContext);
|
|
@@ -28075,7 +28152,7 @@ function useDeviceImageUrl(imageUrl, hash) {
|
|
|
28075
28152
|
}
|
|
28076
28153
|
|
|
28077
28154
|
// src/components/features/devices/device-selector/device-selection-mode-radio.tsx
|
|
28078
|
-
import { jsx as
|
|
28155
|
+
import { jsx as jsx267 } from "react/jsx-runtime";
|
|
28079
28156
|
var SPECIFIC_MODE_OPTION = {
|
|
28080
28157
|
value: "specific",
|
|
28081
28158
|
label: "Select Specific Devices",
|
|
@@ -28089,7 +28166,7 @@ var SELECTION_MODE_OPTIONS = [
|
|
|
28089
28166
|
label: "Select Devices by Criteria",
|
|
28090
28167
|
description: CRITERIA_MODE_DESCRIPTION,
|
|
28091
28168
|
disabled: true,
|
|
28092
|
-
trailing: /* @__PURE__ */
|
|
28169
|
+
trailing: /* @__PURE__ */ jsx267(Tag, { label: "Coming Soon", variant: "grey" })
|
|
28093
28170
|
}
|
|
28094
28171
|
];
|
|
28095
28172
|
var SELECTION_MODE_OPTIONS_ENABLED = [
|
|
@@ -28106,7 +28183,7 @@ function DeviceSelectionModeRadio({ value, onChange, disabled }) {
|
|
|
28106
28183
|
const allOptions = isControlled ? SELECTION_MODE_OPTIONS_ENABLED : SELECTION_MODE_OPTIONS;
|
|
28107
28184
|
const options = isMobile ? allOptions.filter((option) => !option.disabled) : allOptions;
|
|
28108
28185
|
if (options.length < 2) return null;
|
|
28109
|
-
return /* @__PURE__ */
|
|
28186
|
+
return /* @__PURE__ */ jsx267(
|
|
28110
28187
|
RadioGroupBlock,
|
|
28111
28188
|
{
|
|
28112
28189
|
name: "selectionMode",
|
|
@@ -28245,54 +28322,54 @@ var DEVICE_ENRICHMENT_FILTER = { statuses: [...DEVICE_ENRICHMENT_STATUSES] };
|
|
|
28245
28322
|
var HIDDEN_DEVICE_STATUSES = [DEVICE_STATUS.ARCHIVED, DEVICE_STATUS.DELETED];
|
|
28246
28323
|
|
|
28247
28324
|
// src/components/features/devices/device-type-icon.tsx
|
|
28248
|
-
import { jsx as
|
|
28325
|
+
import { jsx as jsx268 } from "react/jsx-runtime";
|
|
28249
28326
|
var DEFAULT_CLASS_NAME = "w-6 h-6 text-ods-text-secondary";
|
|
28250
28327
|
function renderDeviceTypeIcon(type, className = DEFAULT_CLASS_NAME) {
|
|
28251
28328
|
switch (type?.toLowerCase()) {
|
|
28252
28329
|
case "desktop":
|
|
28253
|
-
return /* @__PURE__ */
|
|
28330
|
+
return /* @__PURE__ */ jsx268(MonitorIcon, { className });
|
|
28254
28331
|
case "laptop":
|
|
28255
|
-
return /* @__PURE__ */
|
|
28332
|
+
return /* @__PURE__ */ jsx268(LaptopIcon, { className });
|
|
28256
28333
|
case "server":
|
|
28257
|
-
return /* @__PURE__ */
|
|
28334
|
+
return /* @__PURE__ */ jsx268(HardDrivesIcon, { className });
|
|
28258
28335
|
case "mobile":
|
|
28259
|
-
return /* @__PURE__ */
|
|
28336
|
+
return /* @__PURE__ */ jsx268(MobilePhoneIcon, { className });
|
|
28260
28337
|
case "tablet":
|
|
28261
|
-
return /* @__PURE__ */
|
|
28338
|
+
return /* @__PURE__ */ jsx268(TabletIcon, { className });
|
|
28262
28339
|
default:
|
|
28263
28340
|
return void 0;
|
|
28264
28341
|
}
|
|
28265
28342
|
}
|
|
28266
28343
|
|
|
28267
28344
|
// src/components/features/devices/device-type-tile.tsx
|
|
28268
|
-
import { jsx as
|
|
28345
|
+
import { jsx as jsx269 } from "react/jsx-runtime";
|
|
28269
28346
|
var ICON_CLASS = "size-4 text-ods-text-secondary";
|
|
28270
28347
|
function DeviceTypeTile({ type }) {
|
|
28271
|
-
return /* @__PURE__ */
|
|
28348
|
+
return /* @__PURE__ */ jsx269("span", { className: "flex size-8 shrink-0 items-center justify-center rounded-[6px] border border-ods-border bg-ods-card", children: renderDeviceTypeIcon(type ?? void 0, ICON_CLASS) ?? /* @__PURE__ */ jsx269(MonitorIcon, { className: ICON_CLASS }) });
|
|
28272
28349
|
}
|
|
28273
28350
|
|
|
28274
28351
|
// src/components/features/devices/device-tags-filter-button.tsx
|
|
28275
|
-
import { Fragment as Fragment47, jsx as
|
|
28352
|
+
import { Fragment as Fragment47, jsx as jsx270, jsxs as jsxs212 } from "react/jsx-runtime";
|
|
28276
28353
|
function DeviceTagsFilterButton({ onClick }) {
|
|
28277
|
-
return /* @__PURE__ */
|
|
28278
|
-
/* @__PURE__ */
|
|
28354
|
+
return /* @__PURE__ */ jsxs212(Fragment47, { children: [
|
|
28355
|
+
/* @__PURE__ */ jsx270(
|
|
28279
28356
|
Button,
|
|
28280
28357
|
{
|
|
28281
28358
|
variant: "outline",
|
|
28282
28359
|
onClick,
|
|
28283
|
-
leftIcon: /* @__PURE__ */
|
|
28360
|
+
leftIcon: /* @__PURE__ */ jsx270(Filter02Icon, { className: "text-ods-text-secondary" }),
|
|
28284
28361
|
className: "hidden shrink-0 content-md:inline-flex",
|
|
28285
28362
|
children: "Device Tags"
|
|
28286
28363
|
}
|
|
28287
28364
|
),
|
|
28288
|
-
/* @__PURE__ */
|
|
28365
|
+
/* @__PURE__ */ jsx270(
|
|
28289
28366
|
Button,
|
|
28290
28367
|
{
|
|
28291
28368
|
variant: "outline",
|
|
28292
28369
|
size: "icon",
|
|
28293
28370
|
"aria-label": "Device Tags",
|
|
28294
28371
|
onClick,
|
|
28295
|
-
leftIcon: /* @__PURE__ */
|
|
28372
|
+
leftIcon: /* @__PURE__ */ jsx270(Filter02Icon, { className: "text-ods-text-primary" }),
|
|
28296
28373
|
className: "shrink-0 content-md:hidden"
|
|
28297
28374
|
}
|
|
28298
28375
|
)
|
|
@@ -28300,7 +28377,7 @@ function DeviceTagsFilterButton({ onClick }) {
|
|
|
28300
28377
|
}
|
|
28301
28378
|
|
|
28302
28379
|
// src/components/features/devices/devices-filter-toolbar.tsx
|
|
28303
|
-
import { Fragment as Fragment48, jsx as
|
|
28380
|
+
import { Fragment as Fragment48, jsx as jsx271, jsxs as jsxs213 } from "react/jsx-runtime";
|
|
28304
28381
|
function DevicesFilterToolbar({
|
|
28305
28382
|
searchValue,
|
|
28306
28383
|
onSearchChange,
|
|
@@ -28321,8 +28398,8 @@ function DevicesFilterToolbar({
|
|
|
28321
28398
|
sticky = true,
|
|
28322
28399
|
toolbarRef
|
|
28323
28400
|
}) {
|
|
28324
|
-
return /* @__PURE__ */
|
|
28325
|
-
/* @__PURE__ */
|
|
28401
|
+
return /* @__PURE__ */ jsxs213(Fragment48, { children: [
|
|
28402
|
+
/* @__PURE__ */ jsxs213(
|
|
28326
28403
|
"div",
|
|
28327
28404
|
{
|
|
28328
28405
|
ref: toolbarRef,
|
|
@@ -28331,7 +28408,7 @@ function DevicesFilterToolbar({
|
|
|
28331
28408
|
sticky && "sticky top-0 z-20 -mx-[var(--spacing-system-l)] -mt-[var(--spacing-system-l)] bg-ods-bg p-[var(--spacing-system-l)]"
|
|
28332
28409
|
),
|
|
28333
28410
|
children: [
|
|
28334
|
-
/* @__PURE__ */
|
|
28411
|
+
/* @__PURE__ */ jsx271("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx271(
|
|
28335
28412
|
TagSearchInput,
|
|
28336
28413
|
{
|
|
28337
28414
|
tags,
|
|
@@ -28344,11 +28421,11 @@ function DevicesFilterToolbar({
|
|
|
28344
28421
|
addMorePlaceholder: "Add More..."
|
|
28345
28422
|
}
|
|
28346
28423
|
) }),
|
|
28347
|
-
/* @__PURE__ */
|
|
28424
|
+
/* @__PURE__ */ jsx271(DeviceTagsFilterButton, { onClick: onOpenFilterModal })
|
|
28348
28425
|
]
|
|
28349
28426
|
}
|
|
28350
28427
|
),
|
|
28351
|
-
/* @__PURE__ */
|
|
28428
|
+
/* @__PURE__ */ jsx271(
|
|
28352
28429
|
FilterModal,
|
|
28353
28430
|
{
|
|
28354
28431
|
isOpen: isFilterModalOpen,
|
|
@@ -28368,7 +28445,7 @@ function DevicesFilterToolbar({
|
|
|
28368
28445
|
|
|
28369
28446
|
// src/components/features/devices/devices-table-columns.tsx
|
|
28370
28447
|
import { useMemo as useMemo26 } from "react";
|
|
28371
|
-
import { jsx as
|
|
28448
|
+
import { jsx as jsx272, jsxs as jsxs214 } from "react/jsx-runtime";
|
|
28372
28449
|
function formatDateTime(input) {
|
|
28373
28450
|
const date = formatDate2(input);
|
|
28374
28451
|
return date === "\u2014" ? date : `${date} ${formatTime(input)}`;
|
|
@@ -28383,7 +28460,7 @@ function uniqueById(options) {
|
|
|
28383
28460
|
function getDeviceActionsColumn(renderRowActions) {
|
|
28384
28461
|
return {
|
|
28385
28462
|
id: "actions",
|
|
28386
|
-
cell: renderRowActions ? ({ row }) => /* @__PURE__ */
|
|
28463
|
+
cell: renderRowActions ? ({ row }) => /* @__PURE__ */ jsx272("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end gap-2", children: renderRowActions(row.original) }) : () => null,
|
|
28387
28464
|
enableSorting: false,
|
|
28388
28465
|
meta: { width: "w-12 shrink-0 flex-none", align: "right" }
|
|
28389
28466
|
};
|
|
@@ -28395,13 +28472,13 @@ function OpenDeviceButton({ device }) {
|
|
|
28395
28472
|
event.preventDefault();
|
|
28396
28473
|
if (href) window.open(href, "_blank", "noopener,noreferrer");
|
|
28397
28474
|
};
|
|
28398
|
-
return /* @__PURE__ */
|
|
28475
|
+
return /* @__PURE__ */ jsx272("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ jsx272(
|
|
28399
28476
|
Button,
|
|
28400
28477
|
{
|
|
28401
28478
|
onClick: open,
|
|
28402
28479
|
variant: "outline",
|
|
28403
28480
|
size: "icon",
|
|
28404
|
-
leftIcon: /* @__PURE__ */
|
|
28481
|
+
leftIcon: /* @__PURE__ */ jsx272(ArrowRightUpIcon, { className: "h-5 w-5" }),
|
|
28405
28482
|
"aria-label": "Open in new tab",
|
|
28406
28483
|
className: "bg-ods-card"
|
|
28407
28484
|
}
|
|
@@ -28410,7 +28487,7 @@ function OpenDeviceButton({ device }) {
|
|
|
28410
28487
|
function getDeviceOpenColumn() {
|
|
28411
28488
|
return {
|
|
28412
28489
|
id: "open",
|
|
28413
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
28490
|
+
cell: ({ row }) => /* @__PURE__ */ jsx272(OpenDeviceButton, { device: row.original }),
|
|
28414
28491
|
enableSorting: false,
|
|
28415
28492
|
meta: { width: "w-12 shrink-0 flex-none", hideAt: "md", align: "right" }
|
|
28416
28493
|
};
|
|
@@ -28450,16 +28527,16 @@ function DevicesTableBody({
|
|
|
28450
28527
|
state: columnFilters !== void 0 ? { columnFilters } : void 0,
|
|
28451
28528
|
onColumnFiltersChange
|
|
28452
28529
|
});
|
|
28453
|
-
return /* @__PURE__ */
|
|
28454
|
-
showHeader && /* @__PURE__ */
|
|
28530
|
+
return /* @__PURE__ */ jsxs214(DataTable, { table, children: [
|
|
28531
|
+
showHeader && /* @__PURE__ */ jsx272(
|
|
28455
28532
|
DataTable.Header,
|
|
28456
28533
|
{
|
|
28457
28534
|
stickyHeader: !!stickyHeaderOffset,
|
|
28458
28535
|
stickyHeaderOffset,
|
|
28459
|
-
rightSlot: /* @__PURE__ */
|
|
28536
|
+
rightSlot: /* @__PURE__ */ jsx272(DataTable.RowCount, { itemName: "device", totalCount })
|
|
28460
28537
|
}
|
|
28461
28538
|
),
|
|
28462
|
-
/* @__PURE__ */
|
|
28539
|
+
/* @__PURE__ */ jsx272(
|
|
28463
28540
|
DataTable.Body,
|
|
28464
28541
|
{
|
|
28465
28542
|
loading: isLoading,
|
|
@@ -28475,9 +28552,9 @@ function DevicesTableBody({
|
|
|
28475
28552
|
}
|
|
28476
28553
|
function OrganizationCell({ device }) {
|
|
28477
28554
|
const fullImageUrl = useDeviceImageUrl(device.organizationImageUrl, device.organizationImageHash);
|
|
28478
|
-
return /* @__PURE__ */
|
|
28479
|
-
/* @__PURE__ */
|
|
28480
|
-
/* @__PURE__ */
|
|
28555
|
+
return /* @__PURE__ */ jsxs214("div", { className: "flex items-center gap-3", children: [
|
|
28556
|
+
/* @__PURE__ */ jsx272(EntityImage, { src: fullImageUrl, alt: device.organization || "Customer", className: "size-12 content-md:size-12" }),
|
|
28557
|
+
/* @__PURE__ */ jsx272("div", { className: "flex min-w-0 flex-1 flex-col justify-center", children: /* @__PURE__ */ jsx272("span", { className: "break-words text-ods-text-primary text-h4", children: device.organization || "" }) })
|
|
28481
28558
|
] });
|
|
28482
28559
|
}
|
|
28483
28560
|
function buildDeviceFilterOptions(deviceFilters) {
|
|
@@ -28518,9 +28595,9 @@ function getDeviceTableColumns(deviceFilters, filtersPending) {
|
|
|
28518
28595
|
header: "DEVICE",
|
|
28519
28596
|
cell: ({ row }) => {
|
|
28520
28597
|
const device = row.original;
|
|
28521
|
-
return /* @__PURE__ */
|
|
28522
|
-
/* @__PURE__ */
|
|
28523
|
-
/* @__PURE__ */
|
|
28598
|
+
return /* @__PURE__ */ jsxs214("div", { className: "relative box-border flex h-20 w-full shrink-0 content-stretch items-center justify-start gap-4 py-0", children: [
|
|
28599
|
+
/* @__PURE__ */ jsx272(DeviceTypeTile, { type: device.type }),
|
|
28600
|
+
/* @__PURE__ */ jsx272("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx272(TruncateText, { children: getDeviceName(device) }) })
|
|
28524
28601
|
] });
|
|
28525
28602
|
},
|
|
28526
28603
|
meta: { width: "flex-1 content-md:w-1/4" }
|
|
@@ -28532,9 +28609,9 @@ function getDeviceTableColumns(deviceFilters, filtersPending) {
|
|
|
28532
28609
|
cell: ({ row }) => {
|
|
28533
28610
|
const device = row.original;
|
|
28534
28611
|
const statusConfig2 = getDeviceStatusConfig(device.status);
|
|
28535
|
-
return /* @__PURE__ */
|
|
28536
|
-
/* @__PURE__ */
|
|
28537
|
-
/* @__PURE__ */
|
|
28612
|
+
return /* @__PURE__ */ jsxs214("div", { className: "flex shrink-0 flex-col items-start gap-1", children: [
|
|
28613
|
+
/* @__PURE__ */ jsx272("div", { className: "inline-flex", children: /* @__PURE__ */ jsx272(Tag, { label: statusConfig2.label, variant: statusConfig2.variant }) }),
|
|
28614
|
+
/* @__PURE__ */ jsx272("span", { className: "hidden text-ods-text-secondary text-h6 content-md:flex", children: device.last_seen ? formatDateTime(device.last_seen) : "Never" })
|
|
28538
28615
|
] });
|
|
28539
28616
|
},
|
|
28540
28617
|
meta: {
|
|
@@ -28551,7 +28628,7 @@ function getDeviceTableColumns(deviceFilters, filtersPending) {
|
|
|
28551
28628
|
accessorKey: "os",
|
|
28552
28629
|
id: "os",
|
|
28553
28630
|
header: "OS",
|
|
28554
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
28631
|
+
cell: ({ row }) => /* @__PURE__ */ jsx272(OSTypeBadge, { osType: row.original.osType, iconSize: "w-4 h-4 content-md:w-6 content-md:h-6" }),
|
|
28555
28632
|
meta: {
|
|
28556
28633
|
width: "w-[200px] content-md:w-1/6",
|
|
28557
28634
|
hideAt: "md",
|
|
@@ -28562,7 +28639,7 @@ function getDeviceTableColumns(deviceFilters, filtersPending) {
|
|
|
28562
28639
|
accessorKey: "organization",
|
|
28563
28640
|
id: "organization",
|
|
28564
28641
|
header: "CUSTOMER",
|
|
28565
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
28642
|
+
cell: ({ row }) => /* @__PURE__ */ jsx272(OrganizationCell, { device: row.original }),
|
|
28566
28643
|
meta: {
|
|
28567
28644
|
width: "w-1/6",
|
|
28568
28645
|
hideAt: "lg",
|
|
@@ -28682,15 +28759,15 @@ function useDeviceSelector({
|
|
|
28682
28759
|
}
|
|
28683
28760
|
|
|
28684
28761
|
// src/components/features/devices/device-selector/device-selector.tsx
|
|
28685
|
-
import { Fragment as Fragment49, jsx as
|
|
28762
|
+
import { Fragment as Fragment49, jsx as jsx273, jsxs as jsxs215 } from "react/jsx-runtime";
|
|
28686
28763
|
var EMPTY_SET = /* @__PURE__ */ new Set();
|
|
28687
28764
|
var NOOP = () => {
|
|
28688
28765
|
};
|
|
28689
28766
|
var DEFAULT_GET_DEVICE_KEY = (d) => d.machineId || d.id;
|
|
28690
28767
|
function CustomerCell({ device }) {
|
|
28691
28768
|
const fullImageUrl = useDeviceImageUrl(device.organizationImageUrl, device.organizationImageHash);
|
|
28692
|
-
return /* @__PURE__ */
|
|
28693
|
-
/* @__PURE__ */
|
|
28769
|
+
return /* @__PURE__ */ jsxs215("div", { className: "flex min-w-0 items-center gap-3", children: [
|
|
28770
|
+
/* @__PURE__ */ jsx273(
|
|
28694
28771
|
EntityImage,
|
|
28695
28772
|
{
|
|
28696
28773
|
src: fullImageUrl,
|
|
@@ -28698,9 +28775,9 @@ function CustomerCell({ device }) {
|
|
|
28698
28775
|
className: "size-10 shrink-0 content-md:size-10"
|
|
28699
28776
|
}
|
|
28700
28777
|
),
|
|
28701
|
-
/* @__PURE__ */
|
|
28702
|
-
/* @__PURE__ */
|
|
28703
|
-
device.organizationEmail && /* @__PURE__ */
|
|
28778
|
+
/* @__PURE__ */ jsxs215("div", { className: "flex min-w-0 flex-col justify-center", children: [
|
|
28779
|
+
/* @__PURE__ */ jsx273(TruncateText, { children: device.organization || "" }),
|
|
28780
|
+
device.organizationEmail && /* @__PURE__ */ jsx273(TruncateText, { variant: "h6", tone: "secondary", children: device.organizationEmail })
|
|
28704
28781
|
] })
|
|
28705
28782
|
] });
|
|
28706
28783
|
}
|
|
@@ -28991,11 +29068,11 @@ function DeviceSelector({
|
|
|
28991
29068
|
cell: ({ row }) => {
|
|
28992
29069
|
const device = row.original;
|
|
28993
29070
|
const lastSeen = device.last_seen || device.lastSeen;
|
|
28994
|
-
return /* @__PURE__ */
|
|
28995
|
-
/* @__PURE__ */
|
|
28996
|
-
/* @__PURE__ */
|
|
28997
|
-
/* @__PURE__ */
|
|
28998
|
-
/* @__PURE__ */
|
|
29071
|
+
return /* @__PURE__ */ jsxs215("div", { className: "flex h-20 items-center gap-3", children: [
|
|
29072
|
+
/* @__PURE__ */ jsx273(DeviceTypeTile, { type: device.type }),
|
|
29073
|
+
/* @__PURE__ */ jsxs215("div", { className: "flex min-w-0 flex-col", children: [
|
|
29074
|
+
/* @__PURE__ */ jsx273(TruncateText, { children: getDeviceName(device) }),
|
|
29075
|
+
/* @__PURE__ */ jsx273(TruncateText, { variant: "h6", tone: "secondary", children: formatLastOnline(lastSeen) })
|
|
28999
29076
|
] })
|
|
29000
29077
|
] });
|
|
29001
29078
|
},
|
|
@@ -29005,7 +29082,7 @@ function DeviceSelector({
|
|
|
29005
29082
|
id: "organization",
|
|
29006
29083
|
accessorKey: "organization",
|
|
29007
29084
|
header: "CUSTOMER",
|
|
29008
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
29085
|
+
cell: ({ row }) => /* @__PURE__ */ jsx273(CustomerCell, { device: row.original }),
|
|
29009
29086
|
enableSorting: false,
|
|
29010
29087
|
meta: {
|
|
29011
29088
|
width: "w-[320px]",
|
|
@@ -29017,7 +29094,7 @@ function DeviceSelector({
|
|
|
29017
29094
|
id: "os",
|
|
29018
29095
|
accessorKey: "os",
|
|
29019
29096
|
header: "OS",
|
|
29020
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
29097
|
+
cell: ({ row }) => /* @__PURE__ */ jsx273(OSTypeBadge, { osType: row.original.osType, iconSize: "w-4 h-4 content-md:w-6 content-md:h-6" }),
|
|
29021
29098
|
enableSorting: false,
|
|
29022
29099
|
meta: {
|
|
29023
29100
|
width: "w-[200px] content-md:w-1/6",
|
|
@@ -29030,7 +29107,7 @@ function DeviceSelector({
|
|
|
29030
29107
|
header: "STATUS",
|
|
29031
29108
|
cell: ({ row }) => {
|
|
29032
29109
|
const config = getDeviceStatusConfig(row.original.status);
|
|
29033
|
-
return /* @__PURE__ */
|
|
29110
|
+
return /* @__PURE__ */ jsx273(Tag, { label: config.label, variant: config.variant, className: "w-min" });
|
|
29034
29111
|
},
|
|
29035
29112
|
enableSorting: false,
|
|
29036
29113
|
meta: {
|
|
@@ -29044,14 +29121,14 @@ function DeviceSelector({
|
|
|
29044
29121
|
const device = row.original;
|
|
29045
29122
|
const disabledReason = isDeviceDisabled?.(device);
|
|
29046
29123
|
if (disabledReason) {
|
|
29047
|
-
return /* @__PURE__ */
|
|
29048
|
-
/* @__PURE__ */
|
|
29049
|
-
/* @__PURE__ */
|
|
29124
|
+
return /* @__PURE__ */ jsxs215("div", { "data-no-row-click": true, className: "pointer-events-auto flex w-full items-center justify-end gap-2", children: [
|
|
29125
|
+
/* @__PURE__ */ jsx273("span", { className: "whitespace-pre-line text-right text-ods-text-secondary text-h6 content-max-md:hidden", children: disabledReason }),
|
|
29126
|
+
/* @__PURE__ */ jsx273(
|
|
29050
29127
|
Button,
|
|
29051
29128
|
{
|
|
29052
29129
|
variant: "outline",
|
|
29053
29130
|
size: "icon",
|
|
29054
|
-
leftIcon: /* @__PURE__ */
|
|
29131
|
+
leftIcon: /* @__PURE__ */ jsx273(PlusCircleIcon, { size: 24 }),
|
|
29055
29132
|
className: "shrink-0 text-ods-text-secondary",
|
|
29056
29133
|
disabled: true
|
|
29057
29134
|
}
|
|
@@ -29062,25 +29139,25 @@ function DeviceSelector({
|
|
|
29062
29139
|
if (key === void 0) return null;
|
|
29063
29140
|
const isSelected = selectedIds.has(key);
|
|
29064
29141
|
if (activeSubTab === "selected") {
|
|
29065
|
-
return /* @__PURE__ */
|
|
29142
|
+
return /* @__PURE__ */ jsx273("div", { "data-no-row-click": true, className: "pointer-events-auto flex w-full items-center justify-end", children: /* @__PURE__ */ jsx273(
|
|
29066
29143
|
Button,
|
|
29067
29144
|
{
|
|
29068
29145
|
variant: "outline",
|
|
29069
29146
|
size: "icon",
|
|
29070
29147
|
onClick: () => toggleDevice(device),
|
|
29071
|
-
leftIcon: /* @__PURE__ */
|
|
29148
|
+
leftIcon: /* @__PURE__ */ jsx273(TrashIcon, { size: 24 }),
|
|
29072
29149
|
className: "text-ods-error hover:opacity-80",
|
|
29073
29150
|
disabled
|
|
29074
29151
|
}
|
|
29075
29152
|
) });
|
|
29076
29153
|
}
|
|
29077
|
-
return /* @__PURE__ */
|
|
29154
|
+
return /* @__PURE__ */ jsx273("div", { "data-no-row-click": true, className: "pointer-events-auto flex w-full items-center justify-end", children: /* @__PURE__ */ jsx273(
|
|
29078
29155
|
Button,
|
|
29079
29156
|
{
|
|
29080
29157
|
variant: "outline",
|
|
29081
29158
|
size: "icon",
|
|
29082
29159
|
onClick: () => toggleDevice(device),
|
|
29083
|
-
leftIcon: isSelected ? /* @__PURE__ */
|
|
29160
|
+
leftIcon: isSelected ? /* @__PURE__ */ jsx273(CheckCircleIcon, { size: 24 }) : /* @__PURE__ */ jsx273(PlusCircleIcon, { size: 24 }),
|
|
29084
29161
|
className: isSelected ? "border-ods-accent bg-ods-open-yellow-secondary text-ods-accent hover:border-ods-accent hover:bg-ods-open-yellow-secondary" : "text-ods-text-secondary hover:text-ods-text-primary",
|
|
29085
29162
|
disabled
|
|
29086
29163
|
}
|
|
@@ -29144,7 +29221,7 @@ function DeviceSelector({
|
|
|
29144
29221
|
[selectedCount, singleSelect]
|
|
29145
29222
|
);
|
|
29146
29223
|
const availableInfiniteScroll = activeSubTab === "available" ? infiniteScroll : void 0;
|
|
29147
|
-
const bulkAction = singleSelect || isCriteria ? null : activeSubTab === "available" ? /* @__PURE__ */
|
|
29224
|
+
const bulkAction = singleSelect || isCriteria ? null : activeSubTab === "available" ? /* @__PURE__ */ jsx273(
|
|
29148
29225
|
"button",
|
|
29149
29226
|
{
|
|
29150
29227
|
type: "button",
|
|
@@ -29153,7 +29230,7 @@ function DeviceSelector({
|
|
|
29153
29230
|
className: "cursor-pointer border-0 bg-transparent text-ods-accent underline text-h6 hover:text-ods-accent-hover disabled:cursor-not-allowed disabled:opacity-50",
|
|
29154
29231
|
children: "Add All Devices"
|
|
29155
29232
|
}
|
|
29156
|
-
) : selectedCount > 0 ? /* @__PURE__ */
|
|
29233
|
+
) : selectedCount > 0 ? /* @__PURE__ */ jsxs215(
|
|
29157
29234
|
"button",
|
|
29158
29235
|
{
|
|
29159
29236
|
type: "button",
|
|
@@ -29169,14 +29246,14 @@ function DeviceSelector({
|
|
|
29169
29246
|
) : null;
|
|
29170
29247
|
const hasActiveFilter = columnFilters.length > 0 || selectedTags.length > 0 || searchTerm.trim().length > 0;
|
|
29171
29248
|
const showHeader = isCriteria || loading || devicesForTable.length > 0 || hasActiveFilter;
|
|
29172
|
-
const deviceTable = /* @__PURE__ */
|
|
29173
|
-
showHeader && /* @__PURE__ */
|
|
29249
|
+
const deviceTable = /* @__PURE__ */ jsxs215(DataTable, { table, children: [
|
|
29250
|
+
showHeader && /* @__PURE__ */ jsx273(
|
|
29174
29251
|
DataTable.Header,
|
|
29175
29252
|
{
|
|
29176
|
-
rightSlot: bulkAction ?? /* @__PURE__ */
|
|
29253
|
+
rightSlot: bulkAction ?? /* @__PURE__ */ jsx273(DataTable.RowCount, { itemName: "device", totalCount: totalCount ?? server?.totalCount })
|
|
29177
29254
|
}
|
|
29178
29255
|
),
|
|
29179
|
-
/* @__PURE__ */
|
|
29256
|
+
/* @__PURE__ */ jsx273(
|
|
29180
29257
|
DataTable.Body,
|
|
29181
29258
|
{
|
|
29182
29259
|
loading,
|
|
@@ -29185,7 +29262,7 @@ function DeviceSelector({
|
|
|
29185
29262
|
rowClassName
|
|
29186
29263
|
}
|
|
29187
29264
|
),
|
|
29188
|
-
availableInfiniteScroll && /* @__PURE__ */
|
|
29265
|
+
availableInfiniteScroll && /* @__PURE__ */ jsx273(
|
|
29189
29266
|
DataTable.InfiniteFooter,
|
|
29190
29267
|
{
|
|
29191
29268
|
hasNextPage: availableInfiniteScroll.hasNextPage,
|
|
@@ -29199,10 +29276,10 @@ function DeviceSelector({
|
|
|
29199
29276
|
// The page-level stack (info bar → mode picker → the picker card) uses
|
|
29200
29277
|
// `--spacing-system-l`, the token every other stacked page surface in the app
|
|
29201
29278
|
// separates its blocks with (16px mobile / 24px desktop).
|
|
29202
|
-
/* @__PURE__ */
|
|
29279
|
+
/* @__PURE__ */ jsxs215("div", { className: "flex flex-col gap-[var(--spacing-system-l)]", children: [
|
|
29203
29280
|
headerContent,
|
|
29204
|
-
showSelectionModeRadio && /* @__PURE__ */
|
|
29205
|
-
isCriteria ? /* @__PURE__ */
|
|
29281
|
+
showSelectionModeRadio && /* @__PURE__ */ jsx273(DeviceSelectionModeRadio, { value: selectionMode, onChange: onSelectionModeChange, disabled }),
|
|
29282
|
+
isCriteria ? /* @__PURE__ */ jsxs215(Fragment49, { children: [
|
|
29206
29283
|
criteriaContent,
|
|
29207
29284
|
deviceTable
|
|
29208
29285
|
] }) : (
|
|
@@ -29214,8 +29291,8 @@ function DeviceSelector({
|
|
|
29214
29291
|
absolutely positioned INSIDE this box rather than portaled, so clipping
|
|
29215
29292
|
it would cut them off whenever the table is short. The tab strip clips
|
|
29216
29293
|
its own corners instead: it is the only child that reaches the radius. */
|
|
29217
|
-
/* @__PURE__ */
|
|
29218
|
-
!singleSelect && /* @__PURE__ */
|
|
29294
|
+
/* @__PURE__ */ jsxs215("div", { className: "flex flex-col rounded-[6px] border border-ods-border bg-ods-bg", children: [
|
|
29295
|
+
!singleSelect && /* @__PURE__ */ jsx273(
|
|
29219
29296
|
TabNavigation,
|
|
29220
29297
|
{
|
|
29221
29298
|
tabs: assignTabs,
|
|
@@ -29224,8 +29301,8 @@ function DeviceSelector({
|
|
|
29224
29301
|
className: "overflow-clip rounded-t-[6px]"
|
|
29225
29302
|
}
|
|
29226
29303
|
),
|
|
29227
|
-
/* @__PURE__ */
|
|
29228
|
-
showToolbar && /* @__PURE__ */
|
|
29304
|
+
/* @__PURE__ */ jsxs215("div", { className: "flex flex-col gap-[var(--spacing-system-m)] p-[var(--spacing-system-m)]", children: [
|
|
29305
|
+
showToolbar && /* @__PURE__ */ jsx273(
|
|
29229
29306
|
DevicesFilterToolbar,
|
|
29230
29307
|
{
|
|
29231
29308
|
sticky: false,
|
|
@@ -29255,10 +29332,10 @@ function DeviceSelector({
|
|
|
29255
29332
|
}
|
|
29256
29333
|
|
|
29257
29334
|
// src/components/features/devices/device-selector/device-selector-skeleton.tsx
|
|
29258
|
-
import { jsx as
|
|
29335
|
+
import { jsx as jsx274 } from "react/jsx-runtime";
|
|
29259
29336
|
var NO_DEVICES = [];
|
|
29260
29337
|
function DeviceSelectorSkeleton(props) {
|
|
29261
|
-
return /* @__PURE__ */
|
|
29338
|
+
return /* @__PURE__ */ jsx274(DeviceSelector, { ...props, devices: NO_DEVICES, loading: true, disabled: true });
|
|
29262
29339
|
}
|
|
29263
29340
|
|
|
29264
29341
|
// src/components/features/devices/device-selector/narrowing.ts
|
|
@@ -29284,7 +29361,7 @@ function narrowingToFilter(narrowing) {
|
|
|
29284
29361
|
}
|
|
29285
29362
|
|
|
29286
29363
|
// src/components/features/devices/devices-grid.tsx
|
|
29287
|
-
import { Fragment as Fragment50, jsx as
|
|
29364
|
+
import { Fragment as Fragment50, jsx as jsx275, jsxs as jsxs216 } from "react/jsx-runtime";
|
|
29288
29365
|
function DevicesGrid({
|
|
29289
29366
|
devices,
|
|
29290
29367
|
isLoading,
|
|
@@ -29299,11 +29376,11 @@ function DevicesGrid({
|
|
|
29299
29376
|
const href = device.machineId || device.id ? getDeviceHref?.(device) : void 0;
|
|
29300
29377
|
if (href) router.push(href);
|
|
29301
29378
|
};
|
|
29302
|
-
return /* @__PURE__ */
|
|
29303
|
-
/* @__PURE__ */
|
|
29379
|
+
return /* @__PURE__ */ jsx275("div", { className: "space-y-4", children: isLoading && devices.length === 0 ? /* @__PURE__ */ jsx275(DeviceCardSkeletonGrid, { count: 12 }) : devices.length === 0 ? /* @__PURE__ */ jsx275("div", { className: "flex h-64 items-center justify-center rounded-[6px] border border-ods-border bg-ods-card", children: /* @__PURE__ */ jsx275("p", { className: "text-ods-text-secondary", children: emptyMessage }) }) : /* @__PURE__ */ jsxs216(Fragment50, { children: [
|
|
29380
|
+
/* @__PURE__ */ jsxs216("div", { className: "grid grid-cols-1 gap-4 content-md:grid-cols-2 content-lg:grid-cols-3", children: [
|
|
29304
29381
|
devices.map((device) => {
|
|
29305
29382
|
const statusConfig2 = getDeviceStatusConfig(device.status);
|
|
29306
|
-
return /* @__PURE__ */
|
|
29383
|
+
return /* @__PURE__ */ jsx275(
|
|
29307
29384
|
DeviceCard,
|
|
29308
29385
|
{
|
|
29309
29386
|
device: {
|
|
@@ -29329,14 +29406,14 @@ function DevicesGrid({
|
|
|
29329
29406
|
device.id || device.machineId
|
|
29330
29407
|
);
|
|
29331
29408
|
}),
|
|
29332
|
-
isFetchingNextPage && Array.from({ length: 4 }, (_, i) => /* @__PURE__ */
|
|
29409
|
+
isFetchingNextPage && Array.from({ length: 4 }, (_, i) => /* @__PURE__ */ jsx275(DeviceCardSkeleton, {}, `skeleton-${i}`))
|
|
29333
29410
|
] }),
|
|
29334
|
-
hasNextPage && /* @__PURE__ */
|
|
29411
|
+
hasNextPage && /* @__PURE__ */ jsx275("div", { ref: sentinelRef, className: "h-1", "aria-hidden": "true" })
|
|
29335
29412
|
] }) });
|
|
29336
29413
|
}
|
|
29337
29414
|
|
|
29338
29415
|
// src/components/features/devices/devices-grid-filters.tsx
|
|
29339
|
-
import { jsx as
|
|
29416
|
+
import { jsx as jsx276, jsxs as jsxs217 } from "react/jsx-runtime";
|
|
29340
29417
|
function DevicesGridFilters({
|
|
29341
29418
|
filterColumns,
|
|
29342
29419
|
currentFilters,
|
|
@@ -29350,22 +29427,22 @@ function DevicesGridFilters({
|
|
|
29350
29427
|
if (filterableColumns.length === 0 && totalCount === void 0) {
|
|
29351
29428
|
return null;
|
|
29352
29429
|
}
|
|
29353
|
-
return /* @__PURE__ */
|
|
29430
|
+
return /* @__PURE__ */ jsxs217("div", { className: "sticky top-[96px] z-10 flex flex-wrap items-start gap-[var(--spacing-system-m)] bg-ods-bg px-[var(--spacing-system-m)]", children: [
|
|
29354
29431
|
filterableColumns.map((column) => {
|
|
29355
29432
|
const selected = currentFilters[column.key] ?? [];
|
|
29356
29433
|
const active = selected.length > 0;
|
|
29357
|
-
return /* @__PURE__ */
|
|
29434
|
+
return /* @__PURE__ */ jsx276(
|
|
29358
29435
|
FiltersDropdown,
|
|
29359
29436
|
{
|
|
29360
|
-
triggerElement: /* @__PURE__ */
|
|
29437
|
+
triggerElement: /* @__PURE__ */ jsxs217(
|
|
29361
29438
|
"button",
|
|
29362
29439
|
{
|
|
29363
29440
|
type: "button",
|
|
29364
29441
|
className: "group inline-flex cursor-pointer select-none items-center gap-[var(--spacing-system-xsf)] py-[var(--spacing-system-sf)]",
|
|
29365
29442
|
"aria-label": `Filter by ${column.label}`,
|
|
29366
29443
|
children: [
|
|
29367
|
-
/* @__PURE__ */
|
|
29368
|
-
/* @__PURE__ */
|
|
29444
|
+
/* @__PURE__ */ jsx276("span", { className: "whitespace-nowrap uppercase text-ods-text-secondary transition-colors text-h5 group-hover:text-ods-text-primary", children: column.label }),
|
|
29445
|
+
/* @__PURE__ */ jsx276(
|
|
29369
29446
|
Filter02Icon,
|
|
29370
29447
|
{
|
|
29371
29448
|
className: cn(
|
|
@@ -29398,7 +29475,7 @@ function DevicesGridFilters({
|
|
|
29398
29475
|
column.key
|
|
29399
29476
|
);
|
|
29400
29477
|
}),
|
|
29401
|
-
totalCount !== void 0 && /* @__PURE__ */
|
|
29478
|
+
totalCount !== void 0 && /* @__PURE__ */ jsx276("div", { className: "absolute inset-y-0 right-0 flex items-center", children: /* @__PURE__ */ jsxs217("span", { className: "whitespace-nowrap text-ods-text-secondary text-h6", children: [
|
|
29402
29479
|
totalCount,
|
|
29403
29480
|
" results"
|
|
29404
29481
|
] }) })
|
|
@@ -29407,7 +29484,7 @@ function DevicesGridFilters({
|
|
|
29407
29484
|
|
|
29408
29485
|
// src/components/features/devices/devices-list.tsx
|
|
29409
29486
|
import { useCallback as useCallback29, useMemo as useMemo30 } from "react";
|
|
29410
|
-
import { jsx as
|
|
29487
|
+
import { jsx as jsx277, jsxs as jsxs218 } from "react/jsx-runtime";
|
|
29411
29488
|
var EMPTY_DEVICES_NARROWING = {
|
|
29412
29489
|
search: "",
|
|
29413
29490
|
statuses: [],
|
|
@@ -29518,13 +29595,13 @@ function DevicesList({
|
|
|
29518
29595
|
// No gap under a pinned toolbar: its own `p-l` is the space below the search
|
|
29519
29596
|
// box, and a gap here would double it. An unpinned toolbar has no padding of
|
|
29520
29597
|
// its own, so there it is the gap that separates the two.
|
|
29521
|
-
/* @__PURE__ */
|
|
29598
|
+
/* @__PURE__ */ jsxs218(
|
|
29522
29599
|
"div",
|
|
29523
29600
|
{
|
|
29524
29601
|
className: className ?? (stickyToolbar ? "flex flex-col" : "flex flex-col gap-[var(--spacing-system-l)]"),
|
|
29525
29602
|
style: containerStyle,
|
|
29526
29603
|
children: [
|
|
29527
|
-
!isEmptyState && /* @__PURE__ */
|
|
29604
|
+
!isEmptyState && /* @__PURE__ */ jsx277(
|
|
29528
29605
|
DevicesFilterToolbar,
|
|
29529
29606
|
{
|
|
29530
29607
|
sticky: stickyToolbar,
|
|
@@ -29546,7 +29623,7 @@ function DevicesList({
|
|
|
29546
29623
|
onTagsChange: handleModalTagsChange
|
|
29547
29624
|
}
|
|
29548
29625
|
),
|
|
29549
|
-
/* @__PURE__ */
|
|
29626
|
+
/* @__PURE__ */ jsx277("div", { className: `transition-opacity duration-200 ${isPending ? "opacity-60" : ""}`, children: /* @__PURE__ */ jsx277(
|
|
29550
29627
|
DevicesTableBody,
|
|
29551
29628
|
{
|
|
29552
29629
|
devices,
|
|
@@ -29563,7 +29640,7 @@ function DevicesList({
|
|
|
29563
29640
|
hideColumns,
|
|
29564
29641
|
disableColumnFilters: hideFilters,
|
|
29565
29642
|
totalCount,
|
|
29566
|
-
footerSlot: infiniteScroll && /* @__PURE__ */
|
|
29643
|
+
footerSlot: infiniteScroll && /* @__PURE__ */ jsx277(
|
|
29567
29644
|
DataTable.InfiniteFooter,
|
|
29568
29645
|
{
|
|
29569
29646
|
hasNextPage: infiniteScroll.hasNextPage,
|
|
@@ -29581,10 +29658,10 @@ function DevicesList({
|
|
|
29581
29658
|
}
|
|
29582
29659
|
|
|
29583
29660
|
// src/components/features/devices/devices-panel-header.tsx
|
|
29584
|
-
import { jsx as
|
|
29661
|
+
import { jsx as jsx278 } from "react/jsx-runtime";
|
|
29585
29662
|
var DEVICE_VIEW_MODE_ITEMS = [
|
|
29586
|
-
{ id: "table", icon: /* @__PURE__ */
|
|
29587
|
-
{ id: "grid", icon: /* @__PURE__ */
|
|
29663
|
+
{ id: "table", icon: /* @__PURE__ */ jsx278(TableCellIcon, { className: "h-6 w-6" }) },
|
|
29664
|
+
{ id: "grid", icon: /* @__PURE__ */ jsx278(GridIcon, { className: "h-6 w-6" }) }
|
|
29588
29665
|
];
|
|
29589
29666
|
function buildDevicePanelActions({
|
|
29590
29667
|
archiveHref,
|
|
@@ -29603,7 +29680,7 @@ function buildDevicePanelActions({
|
|
|
29603
29680
|
// A disabled `href` still renders a live link, so the loading copy carries
|
|
29604
29681
|
// no destination at all rather than a navigable one it cannot honour.
|
|
29605
29682
|
...disabled ? { disabled: true } : { href: archiveHref },
|
|
29606
|
-
icon: /* @__PURE__ */
|
|
29683
|
+
icon: /* @__PURE__ */ jsx278(BoxArchiveIcon, { className: "h-5 w-5 text-ods-text-secondary" }),
|
|
29607
29684
|
variant: "outline"
|
|
29608
29685
|
});
|
|
29609
29686
|
}
|
|
@@ -29612,7 +29689,7 @@ function buildDevicePanelActions({
|
|
|
29612
29689
|
result.push({
|
|
29613
29690
|
label: "Add Customer",
|
|
29614
29691
|
...disabled || !addCustomerHref ? { disabled: true } : { href: addCustomerHref },
|
|
29615
|
-
icon: /* @__PURE__ */
|
|
29692
|
+
icon: /* @__PURE__ */ jsx278(PlusCircleIcon, { className: "h-5 w-5 text-ods-text-secondary" }),
|
|
29616
29693
|
variant: "outline"
|
|
29617
29694
|
});
|
|
29618
29695
|
}
|
|
@@ -29620,14 +29697,14 @@ function buildDevicePanelActions({
|
|
|
29620
29697
|
label: "Add Device",
|
|
29621
29698
|
onClick: disabled ? void 0 : onAddDevice,
|
|
29622
29699
|
disabled: disabled || noOrganizations || isCheckingOrganizations,
|
|
29623
|
-
icon: /* @__PURE__ */
|
|
29700
|
+
icon: /* @__PURE__ */ jsx278(PlusCircleIcon, { className: `h-5 w-5 ${accent ? "text-ods-text-on-accent" : "text-ods-text-secondary"}` }),
|
|
29624
29701
|
variant: accent ? "accent" : "outline"
|
|
29625
29702
|
});
|
|
29626
29703
|
return result;
|
|
29627
29704
|
}
|
|
29628
29705
|
|
|
29629
29706
|
// src/components/features/devices/devices-panel-view.tsx
|
|
29630
|
-
import { Fragment as Fragment51, jsx as
|
|
29707
|
+
import { Fragment as Fragment51, jsx as jsx279, jsxs as jsxs219 } from "react/jsx-runtime";
|
|
29631
29708
|
var NO_FILTERS = {};
|
|
29632
29709
|
var NO_TAGS = [];
|
|
29633
29710
|
var NO_FILTER_GROUPS = [];
|
|
@@ -29680,9 +29757,9 @@ function DevicesPanelView({
|
|
|
29680
29757
|
gridSentinelRef
|
|
29681
29758
|
}) {
|
|
29682
29759
|
const gridColumns = filterColumns ?? getDeviceFilterColumns(deviceFilters).filter((column) => !hideFilters?.includes(column.key));
|
|
29683
|
-
const list = /* @__PURE__ */
|
|
29684
|
-
/* @__PURE__ */
|
|
29685
|
-
viewMode === "table" ? /* @__PURE__ */
|
|
29760
|
+
const list = /* @__PURE__ */ jsxs219(Fragment51, { children: [
|
|
29761
|
+
/* @__PURE__ */ jsx279(DevicesFilterToolbar, { ...toolbar, isLoading: loading }),
|
|
29762
|
+
viewMode === "table" ? /* @__PURE__ */ jsx279(
|
|
29686
29763
|
DevicesTableBody,
|
|
29687
29764
|
{
|
|
29688
29765
|
devices,
|
|
@@ -29698,7 +29775,7 @@ function DevicesPanelView({
|
|
|
29698
29775
|
hideColumns,
|
|
29699
29776
|
disableColumnFilters: hideFilters,
|
|
29700
29777
|
totalCount: loading ? void 0 : totalCount,
|
|
29701
|
-
footerSlot: loading ? void 0 : /* @__PURE__ */
|
|
29778
|
+
footerSlot: loading ? void 0 : /* @__PURE__ */ jsx279(
|
|
29702
29779
|
DataTable.InfiniteFooter,
|
|
29703
29780
|
{
|
|
29704
29781
|
hasNextPage,
|
|
@@ -29708,8 +29785,8 @@ function DevicesPanelView({
|
|
|
29708
29785
|
}
|
|
29709
29786
|
)
|
|
29710
29787
|
}
|
|
29711
|
-
) : /* @__PURE__ */
|
|
29712
|
-
/* @__PURE__ */
|
|
29788
|
+
) : /* @__PURE__ */ jsxs219(Fragment51, { children: [
|
|
29789
|
+
/* @__PURE__ */ jsx279(
|
|
29713
29790
|
DevicesGridFilters,
|
|
29714
29791
|
{
|
|
29715
29792
|
filterColumns: gridColumns,
|
|
@@ -29719,7 +29796,7 @@ function DevicesPanelView({
|
|
|
29719
29796
|
isLoading: loading
|
|
29720
29797
|
}
|
|
29721
29798
|
),
|
|
29722
|
-
/* @__PURE__ */
|
|
29799
|
+
/* @__PURE__ */ jsx279(
|
|
29723
29800
|
DevicesGrid,
|
|
29724
29801
|
{
|
|
29725
29802
|
devices,
|
|
@@ -29732,7 +29809,7 @@ function DevicesPanelView({
|
|
|
29732
29809
|
)
|
|
29733
29810
|
] })
|
|
29734
29811
|
] });
|
|
29735
|
-
return /* @__PURE__ */
|
|
29812
|
+
return /* @__PURE__ */ jsxs219(
|
|
29736
29813
|
PageLayout,
|
|
29737
29814
|
{
|
|
29738
29815
|
title,
|
|
@@ -29740,7 +29817,7 @@ function DevicesPanelView({
|
|
|
29740
29817
|
showHeader: !headerSlot,
|
|
29741
29818
|
actionsVariant: "icon-buttons",
|
|
29742
29819
|
className,
|
|
29743
|
-
selector: /* @__PURE__ */
|
|
29820
|
+
selector: /* @__PURE__ */ jsx279(
|
|
29744
29821
|
TabSelector,
|
|
29745
29822
|
{
|
|
29746
29823
|
value: viewMode,
|
|
@@ -29753,24 +29830,24 @@ function DevicesPanelView({
|
|
|
29753
29830
|
contentClassName: "flex flex-col",
|
|
29754
29831
|
children: [
|
|
29755
29832
|
headerSlot,
|
|
29756
|
-
loading && /* @__PURE__ */
|
|
29833
|
+
loading && /* @__PURE__ */ jsx279("span", { role: "status", className: "sr-only", children: "Loading devices\u2026" }),
|
|
29757
29834
|
noOrganizations && !loading && // Core Alert restyled to the ODS warning tokens. The icon is wrapped in a
|
|
29758
29835
|
// span so Alert's `[&>svg]` absolute-positioning rules don't apply.
|
|
29759
|
-
/* @__PURE__ */
|
|
29760
|
-
/* @__PURE__ */
|
|
29761
|
-
/* @__PURE__ */
|
|
29836
|
+
/* @__PURE__ */ jsxs219(Alert, { className: "mb-[var(--spacing-system-l)] flex items-start gap-[var(--spacing-system-m)] rounded-[6px] border-0 bg-ods-warning-secondary text-ods-warning", children: [
|
|
29837
|
+
/* @__PURE__ */ jsx279("span", { className: "shrink-0", children: /* @__PURE__ */ jsx279(AlertTriangleIcon, { className: "h-6 w-6" }) }),
|
|
29838
|
+
/* @__PURE__ */ jsx279("p", { className: "text-h3", children: "Add a customer to connect a new device" })
|
|
29762
29839
|
] }),
|
|
29763
29840
|
emptyState && !loading ? emptyState : loading ? (
|
|
29764
29841
|
// `inert` rather than per-control `disabled`: the toolbar's search field
|
|
29765
29842
|
// and tag chips have no disabled state of their own, and a focusable
|
|
29766
29843
|
// input that silently drops what is typed into it is worse than one
|
|
29767
29844
|
// that cannot be reached at all.
|
|
29768
|
-
/* @__PURE__ */
|
|
29845
|
+
/* @__PURE__ */ jsx279("div", { inert: true, children: list })
|
|
29769
29846
|
) : (
|
|
29770
29847
|
// Dimmed, not skeletoned, while a filter or search change resolves: the
|
|
29771
29848
|
// rows on screen are the previous answer and stay readable until the
|
|
29772
29849
|
// next one arrives.
|
|
29773
|
-
/* @__PURE__ */
|
|
29850
|
+
/* @__PURE__ */ jsx279("div", { className: cn(isNarrowing && "opacity-60 transition-opacity"), children: list })
|
|
29774
29851
|
)
|
|
29775
29852
|
]
|
|
29776
29853
|
}
|
|
@@ -29802,11 +29879,11 @@ var SOFTWARE_SOURCE_LABEL = {
|
|
|
29802
29879
|
};
|
|
29803
29880
|
|
|
29804
29881
|
// src/components/features/software/package-search-field-placeholder.tsx
|
|
29805
|
-
import { jsx as
|
|
29882
|
+
import { jsx as jsx280 } from "react/jsx-runtime";
|
|
29806
29883
|
var PACKAGE_SEARCH_LABEL = "Software Name";
|
|
29807
29884
|
var PACKAGE_SEARCH_PLACEHOLDER = "Search for Software";
|
|
29808
29885
|
function PackageSearchFieldPlaceholder({ error }) {
|
|
29809
|
-
return /* @__PURE__ */
|
|
29886
|
+
return /* @__PURE__ */ jsx280(
|
|
29810
29887
|
Autocomplete,
|
|
29811
29888
|
{
|
|
29812
29889
|
label: PACKAGE_SEARCH_LABEL,
|
|
@@ -29824,7 +29901,7 @@ function PackageSearchFieldPlaceholder({ error }) {
|
|
|
29824
29901
|
}
|
|
29825
29902
|
|
|
29826
29903
|
// src/components/features/software/schedule-fields.tsx
|
|
29827
|
-
import { jsx as
|
|
29904
|
+
import { jsx as jsx281, jsxs as jsxs220 } from "react/jsx-runtime";
|
|
29828
29905
|
function SoftwareScheduleFields({
|
|
29829
29906
|
date,
|
|
29830
29907
|
time,
|
|
@@ -29837,7 +29914,7 @@ function SoftwareScheduleFields({
|
|
|
29837
29914
|
}) {
|
|
29838
29915
|
const timeOptions = timing.getTimeOptions(date, timeReference);
|
|
29839
29916
|
const startError = timing.getStartError(date, time, timeReference);
|
|
29840
|
-
return /* @__PURE__ */
|
|
29917
|
+
return /* @__PURE__ */ jsxs220(
|
|
29841
29918
|
"div",
|
|
29842
29919
|
{
|
|
29843
29920
|
className: cn(
|
|
@@ -29845,9 +29922,9 @@ function SoftwareScheduleFields({
|
|
|
29845
29922
|
columns === "fill" ? "content-md:grid-cols-3" : "content-md:grid-cols-4"
|
|
29846
29923
|
),
|
|
29847
29924
|
children: [
|
|
29848
|
-
/* @__PURE__ */
|
|
29849
|
-
/* @__PURE__ */
|
|
29850
|
-
/* @__PURE__ */
|
|
29925
|
+
/* @__PURE__ */ jsxs220("div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
|
|
29926
|
+
/* @__PURE__ */ jsx281(Label, { className: "text-h4", children: "Date" }),
|
|
29927
|
+
/* @__PURE__ */ jsx281(
|
|
29851
29928
|
DatePickerInputSimple,
|
|
29852
29929
|
{
|
|
29853
29930
|
placeholder: "Select date",
|
|
@@ -29860,18 +29937,18 @@ function SoftwareScheduleFields({
|
|
|
29860
29937
|
}
|
|
29861
29938
|
)
|
|
29862
29939
|
] }),
|
|
29863
|
-
/* @__PURE__ */
|
|
29864
|
-
/* @__PURE__ */
|
|
29865
|
-
/* @__PURE__ */
|
|
29866
|
-
/* @__PURE__ */
|
|
29867
|
-
/* @__PURE__ */
|
|
29940
|
+
/* @__PURE__ */ jsxs220("div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
|
|
29941
|
+
/* @__PURE__ */ jsx281(Label, { className: "text-h4", children: "Time" }),
|
|
29942
|
+
/* @__PURE__ */ jsxs220(Select, { value: time, onValueChange: onTimeChange, children: [
|
|
29943
|
+
/* @__PURE__ */ jsx281(SelectTrigger, { children: /* @__PURE__ */ jsx281(SelectValue, { placeholder: "Select time" }) }),
|
|
29944
|
+
/* @__PURE__ */ jsx281(SelectContent, { children: timeOptions.map((option) => /* @__PURE__ */ jsx281(SelectItem, { value: option.value, children: option.label }, option.value)) })
|
|
29868
29945
|
] })
|
|
29869
29946
|
] }),
|
|
29870
|
-
/* @__PURE__ */
|
|
29871
|
-
/* @__PURE__ */
|
|
29872
|
-
/* @__PURE__ */
|
|
29873
|
-
/* @__PURE__ */
|
|
29874
|
-
/* @__PURE__ */
|
|
29947
|
+
/* @__PURE__ */ jsxs220("div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
|
|
29948
|
+
/* @__PURE__ */ jsx281(Label, { className: "text-h4", children: "Timezone" }),
|
|
29949
|
+
/* @__PURE__ */ jsxs220(Select, { value: timeReference, onValueChange: (value) => onTimeReferenceChange(value), children: [
|
|
29950
|
+
/* @__PURE__ */ jsx281(SelectTrigger, { children: /* @__PURE__ */ jsx281(SelectValue, {}) }),
|
|
29951
|
+
/* @__PURE__ */ jsx281(SelectContent, { children: timing.timeReferenceOptions.map((option) => /* @__PURE__ */ jsx281(SelectItem, { value: option.value, children: option.label }, option.value)) })
|
|
29875
29952
|
] })
|
|
29876
29953
|
] })
|
|
29877
29954
|
]
|
|
@@ -29934,41 +30011,41 @@ function newSoftwareRow(key) {
|
|
|
29934
30011
|
}
|
|
29935
30012
|
|
|
29936
30013
|
// src/components/features/software/software-row-fields.tsx
|
|
29937
|
-
import { jsx as
|
|
30014
|
+
import { jsx as jsx282, jsxs as jsxs221 } from "react/jsx-runtime";
|
|
29938
30015
|
function InfoCell2({ value, label }) {
|
|
29939
|
-
return /* @__PURE__ */
|
|
29940
|
-
/* @__PURE__ */
|
|
29941
|
-
/* @__PURE__ */
|
|
30016
|
+
return /* @__PURE__ */ jsxs221("div", { className: "flex min-w-0 flex-1 flex-col justify-center", children: [
|
|
30017
|
+
/* @__PURE__ */ jsx282("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xxs)]", children: value ? /* @__PURE__ */ jsx282("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx282(TruncateText, { children: value }) }) : /* @__PURE__ */ jsx282("div", { className: "min-w-0 flex-1 text-h4", children: /* @__PURE__ */ jsx282("span", { className: "text-ods-text-secondary", children: "\u2014" }) }) }),
|
|
30018
|
+
/* @__PURE__ */ jsx282("p", { className: "truncate text-ods-text-secondary text-h6", children: label })
|
|
29942
30019
|
] });
|
|
29943
30020
|
}
|
|
29944
30021
|
function SoftwareRowFields({ row, removable, onChange, onRemove, renderPackageSearch }) {
|
|
29945
|
-
return /* @__PURE__ */
|
|
29946
|
-
/* @__PURE__ */
|
|
30022
|
+
return /* @__PURE__ */ jsxs221("div", { className: "flex flex-col gap-[var(--spacing-system-l)] rounded-md border border-ods-border bg-ods-bg p-[var(--spacing-system-l)] content-lg:flex-row content-lg:items-end", children: [
|
|
30023
|
+
/* @__PURE__ */ jsx282("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxs221(
|
|
29947
30024
|
Select,
|
|
29948
30025
|
{
|
|
29949
30026
|
value: row.packageManager,
|
|
29950
30027
|
onValueChange: (value) => onChange({ ...row, packageManager: value, pkg: null }),
|
|
29951
30028
|
children: [
|
|
29952
|
-
/* @__PURE__ */
|
|
29953
|
-
/* @__PURE__ */
|
|
30029
|
+
/* @__PURE__ */ jsx282(SelectTrigger, { label: "Package Manager", labelVariant: "large", children: /* @__PURE__ */ jsx282(SelectValue, {}) }),
|
|
30030
|
+
/* @__PURE__ */ jsx282(SelectContent, { children: PACKAGE_MANAGERS.map((manager) => {
|
|
29954
30031
|
const Icon = PACKAGE_MANAGER_ICON[manager];
|
|
29955
|
-
return /* @__PURE__ */
|
|
29956
|
-
/* @__PURE__ */
|
|
30032
|
+
return /* @__PURE__ */ jsx282(SelectItem, { value: manager, children: /* @__PURE__ */ jsxs221("span", { className: "flex items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
30033
|
+
/* @__PURE__ */ jsx282(Icon, { size: 20, className: "shrink-0 text-ods-text-secondary" }),
|
|
29957
30034
|
PACKAGE_MANAGER_LABEL[manager]
|
|
29958
30035
|
] }) }, manager);
|
|
29959
30036
|
}) })
|
|
29960
30037
|
]
|
|
29961
30038
|
}
|
|
29962
30039
|
) }),
|
|
29963
|
-
/* @__PURE__ */
|
|
30040
|
+
/* @__PURE__ */ jsx282("div", { className: "min-w-0 flex-1", children: renderPackageSearch({
|
|
29964
30041
|
packageManager: row.packageManager,
|
|
29965
30042
|
value: row.pkg,
|
|
29966
30043
|
onChange: (pkg) => onChange({ ...row, pkg })
|
|
29967
30044
|
}) }),
|
|
29968
|
-
/* @__PURE__ */
|
|
29969
|
-
/* @__PURE__ */
|
|
29970
|
-
/* @__PURE__ */
|
|
29971
|
-
/* @__PURE__ */
|
|
30045
|
+
/* @__PURE__ */ jsx282(InfoCell2, { value: row.pkg?.description, label: "Description" }),
|
|
30046
|
+
/* @__PURE__ */ jsxs221("div", { className: "flex min-w-0 flex-1 items-end gap-[var(--spacing-system-lf)]", children: [
|
|
30047
|
+
/* @__PURE__ */ jsx282(InfoCell2, { value: row.pkg?.version, label: "Current Version" }),
|
|
30048
|
+
/* @__PURE__ */ jsx282(
|
|
29972
30049
|
Button,
|
|
29973
30050
|
{
|
|
29974
30051
|
type: "button",
|
|
@@ -29977,7 +30054,7 @@ function SoftwareRowFields({ row, removable, onChange, onRemove, renderPackageSe
|
|
|
29977
30054
|
"aria-label": "Remove software",
|
|
29978
30055
|
onClick: onRemove,
|
|
29979
30056
|
disabled: !removable,
|
|
29980
|
-
leftIcon: /* @__PURE__ */
|
|
30057
|
+
leftIcon: /* @__PURE__ */ jsx282(TrashIcon, { size: 24, className: "text-ods-error" })
|
|
29981
30058
|
}
|
|
29982
30059
|
)
|
|
29983
30060
|
] })
|
|
@@ -29985,7 +30062,7 @@ function SoftwareRowFields({ row, removable, onChange, onRemove, renderPackageSe
|
|
|
29985
30062
|
}
|
|
29986
30063
|
|
|
29987
30064
|
// src/components/features/software/software-action-form.tsx
|
|
29988
|
-
import { Fragment as Fragment52, jsx as
|
|
30065
|
+
import { Fragment as Fragment52, jsx as jsx283, jsxs as jsxs222 } from "react/jsx-runtime";
|
|
29989
30066
|
var INITIAL_ROWS = () => [newSoftwareRow("row-0")];
|
|
29990
30067
|
function SoftwareActionForm({
|
|
29991
30068
|
action,
|
|
@@ -30024,7 +30101,7 @@ function SoftwareActionForm({
|
|
|
30024
30101
|
const removeRow = (key) => setRows((current) => current.filter((row) => row.key !== key));
|
|
30025
30102
|
const addRow = () => setRows((current) => [...current, newSoftwareRow(crypto.randomUUID())]);
|
|
30026
30103
|
const inline = runModeLayout === "inline";
|
|
30027
|
-
const runModeField = /* @__PURE__ */
|
|
30104
|
+
const runModeField = /* @__PURE__ */ jsx283(
|
|
30028
30105
|
RadioGroupBlock,
|
|
30029
30106
|
{
|
|
30030
30107
|
name: "runMode",
|
|
@@ -30036,7 +30113,7 @@ function SoftwareActionForm({
|
|
|
30036
30113
|
itemClassName: "py-[var(--spacing-system-sf)]"
|
|
30037
30114
|
}
|
|
30038
30115
|
);
|
|
30039
|
-
const scheduleFields = mode === "schedule" && /* @__PURE__ */
|
|
30116
|
+
const scheduleFields = mode === "schedule" && /* @__PURE__ */ jsx283(
|
|
30040
30117
|
SoftwareScheduleFields,
|
|
30041
30118
|
{
|
|
30042
30119
|
date,
|
|
@@ -30049,7 +30126,7 @@ function SoftwareActionForm({
|
|
|
30049
30126
|
columns: inline ? "fill" : "page"
|
|
30050
30127
|
}
|
|
30051
30128
|
);
|
|
30052
|
-
return /* @__PURE__ */
|
|
30129
|
+
return /* @__PURE__ */ jsxs222(
|
|
30053
30130
|
PageLayout,
|
|
30054
30131
|
{
|
|
30055
30132
|
title: copy.formTitle,
|
|
@@ -30059,7 +30136,7 @@ function SoftwareActionForm({
|
|
|
30059
30136
|
showHeader,
|
|
30060
30137
|
className,
|
|
30061
30138
|
children: [
|
|
30062
|
-
rows.map((row) => /* @__PURE__ */
|
|
30139
|
+
rows.map((row) => /* @__PURE__ */ jsx283(
|
|
30063
30140
|
SoftwareRowFields,
|
|
30064
30141
|
{
|
|
30065
30142
|
row,
|
|
@@ -30070,7 +30147,7 @@ function SoftwareActionForm({
|
|
|
30070
30147
|
},
|
|
30071
30148
|
row.key
|
|
30072
30149
|
)),
|
|
30073
|
-
addRows && /* @__PURE__ */
|
|
30150
|
+
addRows && /* @__PURE__ */ jsx283(
|
|
30074
30151
|
Button,
|
|
30075
30152
|
{
|
|
30076
30153
|
type: "button",
|
|
@@ -30078,18 +30155,18 @@ function SoftwareActionForm({
|
|
|
30078
30155
|
size: "small",
|
|
30079
30156
|
className: "self-start",
|
|
30080
30157
|
onClick: addRow,
|
|
30081
|
-
leftIcon: /* @__PURE__ */
|
|
30158
|
+
leftIcon: /* @__PURE__ */ jsx283(PlusCircleIcon, { size: 24, className: "text-ods-text-secondary" }),
|
|
30082
30159
|
children: "Add Software"
|
|
30083
30160
|
}
|
|
30084
30161
|
),
|
|
30085
|
-
inline ? /* @__PURE__ */
|
|
30086
|
-
/* @__PURE__ */
|
|
30087
|
-
scheduleFields && /* @__PURE__ */
|
|
30088
|
-
] }) : /* @__PURE__ */
|
|
30162
|
+
inline ? /* @__PURE__ */ jsxs222("div", { className: "flex flex-col gap-[var(--spacing-system-l)] content-lg:flex-row content-lg:items-end", children: [
|
|
30163
|
+
/* @__PURE__ */ jsx283("div", { className: "min-w-0 content-lg:flex-1", children: runModeField }),
|
|
30164
|
+
scheduleFields && /* @__PURE__ */ jsx283("div", { className: "min-w-0 content-lg:flex-1", children: scheduleFields })
|
|
30165
|
+
] }) : /* @__PURE__ */ jsxs222(Fragment52, { children: [
|
|
30089
30166
|
runModeField,
|
|
30090
30167
|
scheduleFields
|
|
30091
30168
|
] }),
|
|
30092
|
-
showDeviceHeading && /* @__PURE__ */
|
|
30169
|
+
showDeviceHeading && /* @__PURE__ */ jsx283("h2", { className: "pt-[var(--spacing-system-l)] text-ods-text-primary text-h2", children: "Device Selection" }),
|
|
30093
30170
|
renderDevicePicker({ osTypes: osTypesKey.split(","), osTypesKey })
|
|
30094
30171
|
]
|
|
30095
30172
|
}
|
|
@@ -30097,10 +30174,10 @@ function SoftwareActionForm({
|
|
|
30097
30174
|
}
|
|
30098
30175
|
|
|
30099
30176
|
// src/components/features/logs/log-drawer.tsx
|
|
30100
|
-
import { jsx as
|
|
30177
|
+
import { jsx as jsx284, jsxs as jsxs223 } from "react/jsx-runtime";
|
|
30101
30178
|
var EMPTY_MARK = "\u2014";
|
|
30102
30179
|
function EmptyMark() {
|
|
30103
|
-
return /* @__PURE__ */
|
|
30180
|
+
return /* @__PURE__ */ jsx284("span", { className: "text-ods-text-secondary", children: EMPTY_MARK });
|
|
30104
30181
|
}
|
|
30105
30182
|
function LogDrawer({
|
|
30106
30183
|
isOpen,
|
|
@@ -30113,14 +30190,14 @@ function LogDrawer({
|
|
|
30113
30190
|
children,
|
|
30114
30191
|
docked = false
|
|
30115
30192
|
}) {
|
|
30116
|
-
return /* @__PURE__ */
|
|
30193
|
+
return /* @__PURE__ */ jsx284(
|
|
30117
30194
|
AppLayoutDrawerRoot,
|
|
30118
30195
|
{
|
|
30119
30196
|
open: isOpen,
|
|
30120
30197
|
onOpenChange: (open) => {
|
|
30121
30198
|
if (!open) onClose();
|
|
30122
30199
|
},
|
|
30123
|
-
children: /* @__PURE__ */
|
|
30200
|
+
children: /* @__PURE__ */ jsxs223(
|
|
30124
30201
|
AppLayoutDrawerContent,
|
|
30125
30202
|
{
|
|
30126
30203
|
side: "right",
|
|
@@ -30128,23 +30205,23 @@ function LogDrawer({
|
|
|
30128
30205
|
overlayClassName: docked ? "hidden" : void 0,
|
|
30129
30206
|
dismissOnInteractOutside: docked ? false : void 0,
|
|
30130
30207
|
children: [
|
|
30131
|
-
/* @__PURE__ */
|
|
30132
|
-
/* @__PURE__ */
|
|
30133
|
-
(statusTag || timestamp) && /* @__PURE__ */
|
|
30134
|
-
statusTag && /* @__PURE__ */
|
|
30135
|
-
timestamp && /* @__PURE__ */
|
|
30208
|
+
/* @__PURE__ */ jsxs223(AppLayoutDrawerHeader, { children: [
|
|
30209
|
+
/* @__PURE__ */ jsx284(AppLayoutDrawerTitle, { children: "Log Details" }),
|
|
30210
|
+
(statusTag || timestamp) && /* @__PURE__ */ jsxs223("div", { className: "flex items-center gap-2", children: [
|
|
30211
|
+
statusTag && /* @__PURE__ */ jsx284(Tag, { label: statusTag.label, variant: statusTag.variant }),
|
|
30212
|
+
timestamp && /* @__PURE__ */ jsx284("span", { className: "text-ods-text-secondary text-h6", children: timestamp })
|
|
30136
30213
|
] })
|
|
30137
30214
|
] }),
|
|
30138
|
-
/* @__PURE__ */
|
|
30139
|
-
/* @__PURE__ */
|
|
30140
|
-
description && /* @__PURE__ */
|
|
30141
|
-
infoFields && infoFields.length > 0 && /* @__PURE__ */
|
|
30142
|
-
typeof field.value === "string" ? field.value === "" || field.value === EMPTY_MARK ? /* @__PURE__ */
|
|
30143
|
-
/* @__PURE__ */
|
|
30215
|
+
/* @__PURE__ */ jsxs223(AppLayoutDrawerBody, { children: [
|
|
30216
|
+
/* @__PURE__ */ jsxs223("div", { className: "min-h-0 flex-1 space-y-4 overflow-y-auto", children: [
|
|
30217
|
+
description && /* @__PURE__ */ jsx284(AppLayoutDrawerDescription, { asChild: true, className: "leading-6 text-ods-text-primary text-h4", children: /* @__PURE__ */ jsx284("div", { children: description }) }),
|
|
30218
|
+
infoFields && infoFields.length > 0 && /* @__PURE__ */ jsx284("div", { className: "grid grid-cols-1 gap-3 rounded-[6px] border border-ods-border bg-ods-card p-4", children: infoFields.map((field) => /* @__PURE__ */ jsxs223("div", { className: "grid grid-cols-1 gap-0.5", children: [
|
|
30219
|
+
typeof field.value === "string" ? field.value === "" || field.value === EMPTY_MARK ? /* @__PURE__ */ jsx284("span", { className: "text-h4", children: /* @__PURE__ */ jsx284(EmptyMark, {}) }) : /* @__PURE__ */ jsx284(TruncateText, { children: field.value }) : /* @__PURE__ */ jsx284("span", { className: "truncate text-ods-text-primary text-h4", children: field.value === null || field.value === void 0 || field.value === false ? /* @__PURE__ */ jsx284(EmptyMark, {}) : field.value }),
|
|
30220
|
+
/* @__PURE__ */ jsx284("span", { className: "truncate text-ods-text-secondary text-h6", children: field.label })
|
|
30144
30221
|
] }, typeof field.label === "string" ? field.label : "")) }),
|
|
30145
30222
|
children
|
|
30146
30223
|
] }),
|
|
30147
|
-
deviceCard && /* @__PURE__ */
|
|
30224
|
+
deviceCard && /* @__PURE__ */ jsx284("div", { className: "mt-auto", children: deviceCard })
|
|
30148
30225
|
] })
|
|
30149
30226
|
]
|
|
30150
30227
|
}
|
|
@@ -30165,7 +30242,7 @@ function logSourceLabels(device) {
|
|
|
30165
30242
|
|
|
30166
30243
|
// src/components/features/logs/logs-page-view.tsx
|
|
30167
30244
|
import { useMemo as useMemo31 } from "react";
|
|
30168
|
-
import { jsx as
|
|
30245
|
+
import { jsx as jsx285, jsxs as jsxs224 } from "react/jsx-runtime";
|
|
30169
30246
|
function LogsPageView({
|
|
30170
30247
|
children,
|
|
30171
30248
|
onRefresh,
|
|
@@ -30181,25 +30258,25 @@ function LogsPageView({
|
|
|
30181
30258
|
{
|
|
30182
30259
|
label: "Refresh",
|
|
30183
30260
|
variant: "outline",
|
|
30184
|
-
icon: /* @__PURE__ */
|
|
30261
|
+
icon: /* @__PURE__ */ jsx285(Refresh02HrIcon, { size: 24, className: "text-ods-text-secondary" }),
|
|
30185
30262
|
onClick: onRefresh
|
|
30186
30263
|
}
|
|
30187
30264
|
],
|
|
30188
30265
|
[onRefresh]
|
|
30189
30266
|
);
|
|
30190
|
-
return /* @__PURE__ */
|
|
30191
|
-
!hideSearch && /* @__PURE__ */
|
|
30192
|
-
/* @__PURE__ */
|
|
30267
|
+
return /* @__PURE__ */ jsxs224(PageLayout, { title: "Logs", actions, showHeader, className, children: [
|
|
30268
|
+
!hideSearch && /* @__PURE__ */ jsxs224("div", { className: "sticky top-0 z-20 -my-[var(--spacing-system-l)] flex items-center gap-[var(--spacing-system-m)] bg-ods-bg py-[var(--spacing-system-l)]", children: [
|
|
30269
|
+
/* @__PURE__ */ jsx285(
|
|
30193
30270
|
Input,
|
|
30194
30271
|
{
|
|
30195
30272
|
placeholder: "Search for Logs",
|
|
30196
30273
|
value: search,
|
|
30197
30274
|
onChange: (e) => onSearchChange(e.target.value),
|
|
30198
30275
|
className: "flex-1",
|
|
30199
|
-
startAdornment: /* @__PURE__ */
|
|
30276
|
+
startAdornment: /* @__PURE__ */ jsx285(SearchIcon, { className: "h-4 w-4 content-md:h-6 content-md:w-6" })
|
|
30200
30277
|
}
|
|
30201
30278
|
),
|
|
30202
|
-
/* @__PURE__ */
|
|
30279
|
+
/* @__PURE__ */ jsx285(
|
|
30203
30280
|
Button,
|
|
30204
30281
|
{
|
|
30205
30282
|
variant: "outline",
|
|
@@ -30207,7 +30284,7 @@ function LogsPageView({
|
|
|
30207
30284
|
className: "content-md:hidden",
|
|
30208
30285
|
onClick: onOpenFilters,
|
|
30209
30286
|
"aria-label": "Open filters",
|
|
30210
|
-
leftIcon: /* @__PURE__ */
|
|
30287
|
+
leftIcon: /* @__PURE__ */ jsx285(Filter02Icon, { className: "text-ods-text-primary" })
|
|
30211
30288
|
}
|
|
30212
30289
|
)
|
|
30213
30290
|
] }),
|
|
@@ -30215,14 +30292,14 @@ function LogsPageView({
|
|
|
30215
30292
|
] });
|
|
30216
30293
|
}
|
|
30217
30294
|
function LogCopyIconButton({ onClick, copied = false, disabled = false }) {
|
|
30218
|
-
return /* @__PURE__ */
|
|
30295
|
+
return /* @__PURE__ */ jsx285(
|
|
30219
30296
|
Button,
|
|
30220
30297
|
{
|
|
30221
30298
|
onClick,
|
|
30222
30299
|
disabled,
|
|
30223
30300
|
variant: "outline",
|
|
30224
30301
|
size: "icon",
|
|
30225
|
-
leftIcon: copied ? /* @__PURE__ */
|
|
30302
|
+
leftIcon: copied ? /* @__PURE__ */ jsx285(CheckIcon, { className: "h-5 w-5 text-ods-success" }) : /* @__PURE__ */ jsx285(Copy02Icon, { className: "h-5 w-5" }),
|
|
30226
30303
|
"aria-label": "Copy log details",
|
|
30227
30304
|
className: "bg-ods-card"
|
|
30228
30305
|
}
|
|
@@ -30246,7 +30323,7 @@ var LOG_COLUMN_WIDTHS = {
|
|
|
30246
30323
|
import { useCallback as useCallback30, useEffect as useEffect46, useMemo as useMemo32 } from "react";
|
|
30247
30324
|
|
|
30248
30325
|
// src/components/platform/ToolBadge.tsx
|
|
30249
|
-
import { jsx as
|
|
30326
|
+
import { jsx as jsx286, jsxs as jsxs225 } from "react/jsx-runtime";
|
|
30250
30327
|
var ToolBadge = ({
|
|
30251
30328
|
toolType,
|
|
30252
30329
|
label,
|
|
@@ -30258,8 +30335,8 @@ var ToolBadge = ({
|
|
|
30258
30335
|
iconClassName
|
|
30259
30336
|
}) => {
|
|
30260
30337
|
const text = label ?? (toolType ? getToolLabel(toolType) : "");
|
|
30261
|
-
const mark = icon ?? (toolType ? /* @__PURE__ */
|
|
30262
|
-
const linked = (node, linkClassName) => href && targetPlatform ? /* @__PURE__ */
|
|
30338
|
+
const mark = icon ?? (toolType ? /* @__PURE__ */ jsx286(ToolIcon, { toolType, className: iconClassName, size: 16 }) : null);
|
|
30339
|
+
const linked = (node, linkClassName) => href && targetPlatform ? /* @__PURE__ */ jsx286(
|
|
30263
30340
|
NavLinkAnchorViaRuntime,
|
|
30264
30341
|
{
|
|
30265
30342
|
href,
|
|
@@ -30268,10 +30345,10 @@ var ToolBadge = ({
|
|
|
30268
30345
|
className: linkClassName,
|
|
30269
30346
|
children: node
|
|
30270
30347
|
}
|
|
30271
|
-
) : href ? /* @__PURE__ */
|
|
30348
|
+
) : href ? /* @__PURE__ */ jsx286("a", { href, target: "_blank", rel: "noopener noreferrer", title: text || void 0, className: linkClassName, children: node }) : node;
|
|
30272
30349
|
if (variant === "chip") {
|
|
30273
30350
|
return linked(
|
|
30274
|
-
/* @__PURE__ */
|
|
30351
|
+
/* @__PURE__ */ jsxs225(
|
|
30275
30352
|
"span",
|
|
30276
30353
|
{
|
|
30277
30354
|
className: cn(
|
|
@@ -30280,8 +30357,8 @@ var ToolBadge = ({
|
|
|
30280
30357
|
className
|
|
30281
30358
|
),
|
|
30282
30359
|
children: [
|
|
30283
|
-
mark && /* @__PURE__ */
|
|
30284
|
-
text && /* @__PURE__ */
|
|
30360
|
+
mark && /* @__PURE__ */ jsx286("span", { className: "flex h-3.5 w-3.5 shrink-0 items-center justify-center [&_img]:h-full [&_img]:w-full [&_img]:object-contain [&_svg]:h-full [&_svg]:w-full", children: mark }),
|
|
30361
|
+
text && /* @__PURE__ */ jsx286("span", { className: "whitespace-nowrap", children: text })
|
|
30285
30362
|
]
|
|
30286
30363
|
}
|
|
30287
30364
|
),
|
|
@@ -30289,16 +30366,16 @@ var ToolBadge = ({
|
|
|
30289
30366
|
);
|
|
30290
30367
|
}
|
|
30291
30368
|
return linked(
|
|
30292
|
-
/* @__PURE__ */
|
|
30369
|
+
/* @__PURE__ */ jsxs225("div", { className: cn("flex items-center gap-1 text-ods-text-secondary", className), children: [
|
|
30293
30370
|
mark,
|
|
30294
|
-
/* @__PURE__ */
|
|
30371
|
+
/* @__PURE__ */ jsx286("span", { className: "text-ods-text-primary text-h4", children: text })
|
|
30295
30372
|
] }),
|
|
30296
30373
|
"inline-flex rounded-sm hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-focus"
|
|
30297
30374
|
);
|
|
30298
30375
|
};
|
|
30299
30376
|
|
|
30300
30377
|
// src/components/features/logs/logs-table-view.tsx
|
|
30301
|
-
import { Fragment as Fragment53, jsx as
|
|
30378
|
+
import { Fragment as Fragment53, jsx as jsx287, jsxs as jsxs226 } from "react/jsx-runtime";
|
|
30302
30379
|
function multiSelectFor() {
|
|
30303
30380
|
return multiSelectFilterFn;
|
|
30304
30381
|
}
|
|
@@ -30336,9 +30413,9 @@ function LogsTableView({
|
|
|
30336
30413
|
{
|
|
30337
30414
|
accessorKey: "logId",
|
|
30338
30415
|
header: logIdHeader ? () => logIdHeader : "Log ID",
|
|
30339
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
30340
|
-
/* @__PURE__ */
|
|
30341
|
-
/* @__PURE__ */
|
|
30416
|
+
cell: ({ row }) => /* @__PURE__ */ jsxs226("div", { className: "flex shrink-0 flex-col justify-center", children: [
|
|
30417
|
+
/* @__PURE__ */ jsx287(TruncateText, { children: row.original.timestamp }),
|
|
30418
|
+
/* @__PURE__ */ jsx287(TruncateText, { variant: "h6", tone: "secondary", children: row.original.logId })
|
|
30342
30419
|
] }),
|
|
30343
30420
|
enableSorting: false,
|
|
30344
30421
|
meta: { width: LOG_COLUMN_WIDTHS.logId, alwaysShowHeader: true }
|
|
@@ -30346,7 +30423,7 @@ function LogsTableView({
|
|
|
30346
30423
|
{
|
|
30347
30424
|
accessorKey: "status",
|
|
30348
30425
|
header: "Status",
|
|
30349
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
30426
|
+
cell: ({ row }) => /* @__PURE__ */ jsx287("div", { className: "shrink-0", children: /* @__PURE__ */ jsx287(Tag, { label: row.original.status.label, variant: row.original.status.variant }) }),
|
|
30350
30427
|
enableSorting: false,
|
|
30351
30428
|
filterFn: multiSelect,
|
|
30352
30429
|
meta: {
|
|
@@ -30363,7 +30440,7 @@ function LogsTableView({
|
|
|
30363
30440
|
{
|
|
30364
30441
|
accessorKey: "tool",
|
|
30365
30442
|
header: "Tool",
|
|
30366
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
30443
|
+
cell: ({ row }) => /* @__PURE__ */ jsx287(
|
|
30367
30444
|
ToolBadge,
|
|
30368
30445
|
{
|
|
30369
30446
|
toolType: normalizeToolTypeWithFallback(row.original.source.toolType),
|
|
@@ -30389,9 +30466,9 @@ function LogsTableView({
|
|
|
30389
30466
|
header: "SOURCE",
|
|
30390
30467
|
cell: ({ row }) => {
|
|
30391
30468
|
const { deviceName, organization } = logSourceLabels(row.original.device);
|
|
30392
|
-
return /* @__PURE__ */
|
|
30393
|
-
deviceName && /* @__PURE__ */
|
|
30394
|
-
organization && /* @__PURE__ */
|
|
30469
|
+
return /* @__PURE__ */ jsxs226("div", { className: "flex min-h-[60px] flex-col justify-center gap-1 py-2", children: [
|
|
30470
|
+
deviceName && /* @__PURE__ */ jsx287(TruncateText, { children: deviceName }),
|
|
30471
|
+
organization && /* @__PURE__ */ jsx287(TruncateText, { variant: "h6", tone: "secondary", children: organization })
|
|
30395
30472
|
] });
|
|
30396
30473
|
},
|
|
30397
30474
|
enableSorting: false,
|
|
@@ -30405,25 +30482,25 @@ function LogsTableView({
|
|
|
30405
30482
|
{
|
|
30406
30483
|
accessorKey: "description",
|
|
30407
30484
|
header: "Log Details",
|
|
30408
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
30485
|
+
cell: ({ row }) => /* @__PURE__ */ jsx287(TruncateText, { lines: 3, className: "text-ods-text-secondary text-h6", children: row.original.description.title }),
|
|
30409
30486
|
enableSorting: false,
|
|
30410
30487
|
meta: { width: LOG_COLUMN_WIDTHS.description, hideAt: "lg" }
|
|
30411
30488
|
},
|
|
30412
30489
|
{
|
|
30413
30490
|
id: "copy",
|
|
30414
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
30491
|
+
cell: ({ row }) => /* @__PURE__ */ jsx287("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: renderCopyAction?.(row.original) }),
|
|
30415
30492
|
enableSorting: false,
|
|
30416
30493
|
meta: { width: `${LOG_COLUMN_WIDTHS.action} ml-auto`, align: "right" }
|
|
30417
30494
|
},
|
|
30418
30495
|
{
|
|
30419
30496
|
id: "quickView",
|
|
30420
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
30497
|
+
cell: ({ row }) => /* @__PURE__ */ jsx287("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ jsx287(
|
|
30421
30498
|
Button,
|
|
30422
30499
|
{
|
|
30423
30500
|
onClick: () => onQuickView?.(row.original),
|
|
30424
30501
|
variant: "outline",
|
|
30425
30502
|
size: "icon",
|
|
30426
|
-
leftIcon: /* @__PURE__ */
|
|
30503
|
+
leftIcon: /* @__PURE__ */ jsx287(EyeIcon2, { className: "h-5 w-5" }),
|
|
30427
30504
|
"aria-label": "Quick view",
|
|
30428
30505
|
className: "bg-ods-card"
|
|
30429
30506
|
}
|
|
@@ -30433,13 +30510,13 @@ function LogsTableView({
|
|
|
30433
30510
|
},
|
|
30434
30511
|
{
|
|
30435
30512
|
id: "open",
|
|
30436
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
30513
|
+
cell: ({ row }) => /* @__PURE__ */ jsx287("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ jsx287(
|
|
30437
30514
|
Button,
|
|
30438
30515
|
{
|
|
30439
30516
|
onClick: getLogHref ? openInNewTab(getLogHref(row.original)) : void 0,
|
|
30440
30517
|
variant: "outline",
|
|
30441
30518
|
size: "icon",
|
|
30442
|
-
leftIcon: /* @__PURE__ */
|
|
30519
|
+
leftIcon: /* @__PURE__ */ jsx287(ArrowRightUpIcon, { className: "h-5 w-5" }),
|
|
30443
30520
|
"aria-label": "Open in new tab",
|
|
30444
30521
|
className: "bg-ods-card"
|
|
30445
30522
|
}
|
|
@@ -30494,30 +30571,30 @@ function LogsTableView({
|
|
|
30494
30571
|
onHideSearchChange?.(hideSearch);
|
|
30495
30572
|
}, [hideSearch, onHideSearchChange]);
|
|
30496
30573
|
if (showEmptyState) {
|
|
30497
|
-
const emptyProps = deviceScoped ? { icon: /* @__PURE__ */
|
|
30498
|
-
icon: /* @__PURE__ */
|
|
30574
|
+
const emptyProps = deviceScoped ? { icon: /* @__PURE__ */ jsx287(ClipboardListIcon, {}), title: EMPTY_TITLE, description: EMPTY_DESCRIPTION } : {
|
|
30575
|
+
icon: /* @__PURE__ */ jsx287(ClipboardListIcon, {}),
|
|
30499
30576
|
title: EMPTY_TITLE,
|
|
30500
30577
|
description: EMPTY_DESCRIPTION,
|
|
30501
30578
|
actions: [
|
|
30502
|
-
{ icon: /* @__PURE__ */
|
|
30503
|
-
{ icon: /* @__PURE__ */
|
|
30504
|
-
{ icon: /* @__PURE__ */
|
|
30579
|
+
{ icon: /* @__PURE__ */ jsx287(EyeAltIcon, {}), label: "Track who did what, when, and on which device" },
|
|
30580
|
+
{ icon: /* @__PURE__ */ jsx287(Filter01ListIcon, {}), label: "Filter by user, action type, Customer, or date range" },
|
|
30581
|
+
{ icon: /* @__PURE__ */ jsx287(SearchIcon, {}), label: "Investigate incidents and audit security events" }
|
|
30505
30582
|
],
|
|
30506
30583
|
...guideButton
|
|
30507
30584
|
};
|
|
30508
|
-
return /* @__PURE__ */
|
|
30585
|
+
return /* @__PURE__ */ jsx287(Fragment53, { children: renderEmptyState ? renderEmptyState(emptyProps) : /* @__PURE__ */ jsx287(NoData, { ...emptyProps }) });
|
|
30509
30586
|
}
|
|
30510
|
-
return /* @__PURE__ */
|
|
30511
|
-
/* @__PURE__ */
|
|
30512
|
-
!(scopedEmpty && !hasQuery) && /* @__PURE__ */
|
|
30513
|
-
/* @__PURE__ */
|
|
30587
|
+
return /* @__PURE__ */ jsxs226(Fragment53, { children: [
|
|
30588
|
+
/* @__PURE__ */ jsxs226(DataTable, { table, children: [
|
|
30589
|
+
!(scopedEmpty && !hasQuery) && /* @__PURE__ */ jsx287(DataTable.Header, { stickyHeader: true, stickyHeaderOffset: "top-[96px]", rightSlot: /* @__PURE__ */ jsx287(DataTable.RowCount, {}) }),
|
|
30590
|
+
/* @__PURE__ */ jsx287(
|
|
30514
30591
|
DataTable.Body,
|
|
30515
30592
|
{
|
|
30516
30593
|
loading,
|
|
30517
30594
|
skeletonRows: 10,
|
|
30518
30595
|
...scoped ? {
|
|
30519
30596
|
emptyState: {
|
|
30520
|
-
icon: /* @__PURE__ */
|
|
30597
|
+
icon: /* @__PURE__ */ jsx287(ClipboardListIcon, {}),
|
|
30521
30598
|
title: "No logs found",
|
|
30522
30599
|
description: hasQuery ? "No results. Try adjusting your search or filters." : deviceScoped ? "Logs for this device will appear here." : "Logs for this customer will appear here."
|
|
30523
30600
|
}
|
|
@@ -30526,7 +30603,7 @@ function LogsTableView({
|
|
|
30526
30603
|
rowClassName: "mb-1"
|
|
30527
30604
|
}
|
|
30528
30605
|
),
|
|
30529
|
-
/* @__PURE__ */
|
|
30606
|
+
/* @__PURE__ */ jsx287(
|
|
30530
30607
|
DataTable.InfiniteFooter,
|
|
30531
30608
|
{
|
|
30532
30609
|
hasNextPage,
|
|
@@ -30536,7 +30613,7 @@ function LogsTableView({
|
|
|
30536
30613
|
}
|
|
30537
30614
|
)
|
|
30538
30615
|
] }),
|
|
30539
|
-
/* @__PURE__ */
|
|
30616
|
+
/* @__PURE__ */ jsx287(
|
|
30540
30617
|
FilterModal,
|
|
30541
30618
|
{
|
|
30542
30619
|
isOpen: mobileFilterOpen,
|
|
@@ -30619,9 +30696,9 @@ function LogsTableSkeleton({ logIdHeader }) {
|
|
|
30619
30696
|
getRowId: () => "",
|
|
30620
30697
|
enableSorting: false
|
|
30621
30698
|
});
|
|
30622
|
-
return /* @__PURE__ */
|
|
30623
|
-
/* @__PURE__ */
|
|
30624
|
-
/* @__PURE__ */
|
|
30699
|
+
return /* @__PURE__ */ jsxs226(DataTable, { table, children: [
|
|
30700
|
+
/* @__PURE__ */ jsx287(DataTable.Header, { stickyHeader: true, stickyHeaderOffset: "top-[96px]" }),
|
|
30701
|
+
/* @__PURE__ */ jsx287(DataTable.Body, { loading: true, skeletonRows: 10, emptyMessage: "", rowClassName: "mb-1" })
|
|
30625
30702
|
] });
|
|
30626
30703
|
}
|
|
30627
30704
|
|
|
@@ -30658,17 +30735,17 @@ var KNOWLEDGE_BASE_STATUS_VARIANT = {
|
|
|
30658
30735
|
};
|
|
30659
30736
|
|
|
30660
30737
|
// src/components/features/knowledge-base/knowledge-base-table.tsx
|
|
30661
|
-
import { jsx as
|
|
30738
|
+
import { jsx as jsx288, jsxs as jsxs227 } from "react/jsx-runtime";
|
|
30662
30739
|
function getKnowledgeBaseOpenColumn(getHref) {
|
|
30663
30740
|
return {
|
|
30664
30741
|
id: "open",
|
|
30665
|
-
cell: ({ row }) => /* @__PURE__ */
|
|
30742
|
+
cell: ({ row }) => /* @__PURE__ */ jsx288("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ jsx288(
|
|
30666
30743
|
Button,
|
|
30667
30744
|
{
|
|
30668
30745
|
onClick: openInNewTab(getHref(row.original)),
|
|
30669
30746
|
variant: "outline",
|
|
30670
30747
|
size: "icon",
|
|
30671
|
-
leftIcon: /* @__PURE__ */
|
|
30748
|
+
leftIcon: /* @__PURE__ */ jsx288(ArrowRightUpIcon, { className: "h-5 w-5" }),
|
|
30672
30749
|
"aria-label": "Open in new tab",
|
|
30673
30750
|
className: "bg-ods-card"
|
|
30674
30751
|
}
|
|
@@ -30687,12 +30764,12 @@ function getKnowledgeBaseColumns(mode) {
|
|
|
30687
30764
|
const Icon = item.type === "FOLDER" ? KNOWLEDGE_BASE_ITEM_ICON.FOLDER : KNOWLEDGE_BASE_ITEM_ICON.ARTICLE;
|
|
30688
30765
|
const status = item.status;
|
|
30689
30766
|
const tagStatus = status === "DRAFT" || status === "ARCHIVED" ? status : null;
|
|
30690
|
-
return /* @__PURE__ */
|
|
30691
|
-
/* @__PURE__ */
|
|
30692
|
-
/* @__PURE__ */
|
|
30693
|
-
/* @__PURE__ */
|
|
30694
|
-
/* @__PURE__ */
|
|
30695
|
-
tagStatus && /* @__PURE__ */
|
|
30767
|
+
return /* @__PURE__ */ jsxs227("div", { className: "relative box-border flex h-20 w-full shrink-0 content-stretch items-center justify-start gap-[var(--spacing-system-m)] py-0", children: [
|
|
30768
|
+
/* @__PURE__ */ jsx288("div", { className: "relative flex h-8 w-8 shrink-0 items-center justify-center rounded-[6px] border border-ods-border", children: /* @__PURE__ */ jsx288(Icon, { size: 16, className: "shrink-0 text-ods-text-secondary" }) }),
|
|
30769
|
+
/* @__PURE__ */ jsxs227("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
30770
|
+
/* @__PURE__ */ jsxs227("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
30771
|
+
/* @__PURE__ */ jsx288("div", { className: "min-w-0", children: /* @__PURE__ */ jsx288(TruncateText, { children: item.name }) }),
|
|
30772
|
+
tagStatus && /* @__PURE__ */ jsx288(
|
|
30696
30773
|
Tag,
|
|
30697
30774
|
{
|
|
30698
30775
|
variant: KNOWLEDGE_BASE_STATUS_VARIANT[tagStatus],
|
|
@@ -30701,7 +30778,7 @@ function getKnowledgeBaseColumns(mode) {
|
|
|
30701
30778
|
}
|
|
30702
30779
|
)
|
|
30703
30780
|
] }),
|
|
30704
|
-
item.type === "ARTICLE" && item.summary && /* @__PURE__ */
|
|
30781
|
+
item.type === "ARTICLE" && item.summary && /* @__PURE__ */ jsx288(TruncateText, { variant: "h6", tone: "secondary", children: item.summary })
|
|
30705
30782
|
] })
|
|
30706
30783
|
] });
|
|
30707
30784
|
},
|
|
@@ -30715,9 +30792,9 @@ function getKnowledgeBaseColumns(mode) {
|
|
|
30715
30792
|
if (row.original.type !== "ARTICLE") return null;
|
|
30716
30793
|
const ts = mode === "archive" ? row.original.updatedAt ?? row.original.createdAt : row.original.createdAt;
|
|
30717
30794
|
if (!ts) return null;
|
|
30718
|
-
return /* @__PURE__ */
|
|
30719
|
-
/* @__PURE__ */
|
|
30720
|
-
/* @__PURE__ */
|
|
30795
|
+
return /* @__PURE__ */ jsxs227("div", { className: "flex flex-col whitespace-nowrap", children: [
|
|
30796
|
+
/* @__PURE__ */ jsx288("span", { className: "text-ods-text-primary text-h4", children: formatDate2(ts) }),
|
|
30797
|
+
/* @__PURE__ */ jsx288("span", { className: "text-heading-5 text-ods-text-secondary", children: formatTime(ts) })
|
|
30721
30798
|
] });
|
|
30722
30799
|
},
|
|
30723
30800
|
enableSorting: false,
|
|
@@ -30750,22 +30827,22 @@ function KnowledgeBaseTableBody({
|
|
|
30750
30827
|
getRowId: (row) => row.id,
|
|
30751
30828
|
enableSorting: false
|
|
30752
30829
|
});
|
|
30753
|
-
return /* @__PURE__ */
|
|
30754
|
-
/* @__PURE__ */
|
|
30830
|
+
return /* @__PURE__ */ jsxs227(DataTable, { table, children: [
|
|
30831
|
+
/* @__PURE__ */ jsx288(
|
|
30755
30832
|
DataTable.Header,
|
|
30756
30833
|
{
|
|
30757
30834
|
stickyHeader: !!stickyHeaderOffset,
|
|
30758
30835
|
stickyHeaderOffset,
|
|
30759
|
-
rightSlot: /* @__PURE__ */
|
|
30836
|
+
rightSlot: /* @__PURE__ */ jsx288(DataTable.RowCount, { itemName: mode === "archive" ? "article" : "item", totalCount })
|
|
30760
30837
|
}
|
|
30761
30838
|
),
|
|
30762
|
-
/* @__PURE__ */
|
|
30839
|
+
/* @__PURE__ */ jsx288(DataTable.Body, { loading: isLoading, skeletonRows, emptyMessage, rowHref: getHref }),
|
|
30763
30840
|
footerSlot
|
|
30764
30841
|
] });
|
|
30765
30842
|
}
|
|
30766
30843
|
|
|
30767
30844
|
// src/components/features/knowledge-base/knowledge-base-article-view.tsx
|
|
30768
|
-
import { jsx as
|
|
30845
|
+
import { jsx as jsx289, jsxs as jsxs228 } from "react/jsx-runtime";
|
|
30769
30846
|
function KnowledgeBaseArticleView({
|
|
30770
30847
|
title,
|
|
30771
30848
|
onBack,
|
|
@@ -30780,7 +30857,7 @@ function KnowledgeBaseArticleView({
|
|
|
30780
30857
|
children,
|
|
30781
30858
|
className = "px-[var(--spacing-system-l)] pb-[var(--spacing-system-l)]"
|
|
30782
30859
|
}) {
|
|
30783
|
-
return /* @__PURE__ */
|
|
30860
|
+
return /* @__PURE__ */ jsxs228(
|
|
30784
30861
|
PageLayout,
|
|
30785
30862
|
{
|
|
30786
30863
|
title,
|
|
@@ -30790,10 +30867,10 @@ function KnowledgeBaseArticleView({
|
|
|
30790
30867
|
menuActions,
|
|
30791
30868
|
className,
|
|
30792
30869
|
children: [
|
|
30793
|
-
tags.length > 0 && /* @__PURE__ */
|
|
30794
|
-
/* @__PURE__ */
|
|
30795
|
-
/* @__PURE__ */
|
|
30796
|
-
author.deleted ? /* @__PURE__ */
|
|
30870
|
+
tags.length > 0 && /* @__PURE__ */ jsx289("div", { className: "flex flex-wrap gap-[var(--spacing-system-xsf)]", children: tags.map((tag) => /* @__PURE__ */ jsx289(Tag, { label: tag.label, variant: "outline", className: "max-w-full" }, tag.id)) }),
|
|
30871
|
+
/* @__PURE__ */ jsx289(Card, { className: "border-ods-border px-[var(--spacing-system-mf)] py-0", children: /* @__PURE__ */ jsxs228("div", { className: "grid grid-cols-2 gap-x-[var(--spacing-system-mf)] content-lg:grid-cols-3", children: [
|
|
30872
|
+
/* @__PURE__ */ jsxs228("div", { className: "flex h-20 min-w-0 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
30873
|
+
author.deleted ? /* @__PURE__ */ jsx289(DeletedUserAvatar, { size: "md" }) : /* @__PURE__ */ jsx289(
|
|
30797
30874
|
SquareAvatar,
|
|
30798
30875
|
{
|
|
30799
30876
|
src: author.imageUrl,
|
|
@@ -30803,29 +30880,29 @@ function KnowledgeBaseArticleView({
|
|
|
30803
30880
|
variant: "round"
|
|
30804
30881
|
}
|
|
30805
30882
|
),
|
|
30806
|
-
/* @__PURE__ */
|
|
30807
|
-
/* @__PURE__ */
|
|
30808
|
-
/* @__PURE__ */
|
|
30883
|
+
/* @__PURE__ */ jsxs228("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
30884
|
+
/* @__PURE__ */ jsx289(TruncateText, { className: author.deleted ? "text-ods-error" : void 0, children: author.name ?? "Unknown" }),
|
|
30885
|
+
/* @__PURE__ */ jsx289("p", { className: "truncate text-heading-5 text-ods-text-secondary", children: "Author" })
|
|
30809
30886
|
] })
|
|
30810
30887
|
] }),
|
|
30811
|
-
/* @__PURE__ */
|
|
30812
|
-
/* @__PURE__ */
|
|
30813
|
-
/* @__PURE__ */
|
|
30888
|
+
/* @__PURE__ */ jsxs228("div", { className: "flex h-20 min-w-0 flex-col justify-center", children: [
|
|
30889
|
+
/* @__PURE__ */ jsx289(TruncateText, { children: updatedLabel }),
|
|
30890
|
+
/* @__PURE__ */ jsx289("p", { className: "truncate text-heading-5 text-ods-text-secondary", children: "Updated" })
|
|
30814
30891
|
] }),
|
|
30815
|
-
/* @__PURE__ */
|
|
30892
|
+
/* @__PURE__ */ jsx289(
|
|
30816
30893
|
"div",
|
|
30817
30894
|
{
|
|
30818
30895
|
className: "col-span-2 -mx-[var(--spacing-system-mf)] border-t border-ods-border content-lg:hidden",
|
|
30819
30896
|
"aria-hidden": true
|
|
30820
30897
|
}
|
|
30821
30898
|
),
|
|
30822
|
-
/* @__PURE__ */
|
|
30823
|
-
/* @__PURE__ */
|
|
30824
|
-
/* @__PURE__ */
|
|
30899
|
+
/* @__PURE__ */ jsxs228("div", { className: "flex h-20 min-w-0 flex-col items-start justify-center gap-[var(--spacing-system-xxs)]", children: [
|
|
30900
|
+
/* @__PURE__ */ jsx289(Tag, { variant: KNOWLEDGE_BASE_STATUS_VARIANT[status], label: status }),
|
|
30901
|
+
/* @__PURE__ */ jsx289("p", { className: "truncate text-heading-5 text-ods-text-secondary", children: "Status" })
|
|
30825
30902
|
] })
|
|
30826
30903
|
] }) }),
|
|
30827
30904
|
content,
|
|
30828
|
-
attachments.length > 0 && /* @__PURE__ */
|
|
30905
|
+
attachments.length > 0 && /* @__PURE__ */ jsx289(TicketDetailSection, { label: "Attachments", children: /* @__PURE__ */ jsx289(TicketAttachmentsList, { attachments }) }),
|
|
30829
30906
|
children
|
|
30830
30907
|
]
|
|
30831
30908
|
}
|
|
@@ -30869,9 +30946,9 @@ function shiftFor(slots, index, to) {
|
|
|
30869
30946
|
}
|
|
30870
30947
|
|
|
30871
30948
|
// src/components/features/sortable-list/sortable-drag-handle.tsx
|
|
30872
|
-
import { jsx as
|
|
30949
|
+
import { jsx as jsx290 } from "react/jsx-runtime";
|
|
30873
30950
|
function SortableDragHandle({ handleProps, label, className }) {
|
|
30874
|
-
return /* @__PURE__ */
|
|
30951
|
+
return /* @__PURE__ */ jsx290(
|
|
30875
30952
|
Button,
|
|
30876
30953
|
{
|
|
30877
30954
|
type: "button",
|
|
@@ -30880,7 +30957,7 @@ function SortableDragHandle({ handleProps, label, className }) {
|
|
|
30880
30957
|
"aria-label": label ? `Drag ${label} to reorder` : "Drag to reorder",
|
|
30881
30958
|
...handleProps,
|
|
30882
30959
|
className: cn("shrink-0 cursor-grab touch-none text-ods-text-secondary hover:text-ods-text-primary", className),
|
|
30883
|
-
leftIcon: /* @__PURE__ */
|
|
30960
|
+
leftIcon: /* @__PURE__ */ jsx290(DraggerIcon, {})
|
|
30884
30961
|
}
|
|
30885
30962
|
);
|
|
30886
30963
|
}
|
|
@@ -30899,7 +30976,7 @@ import {
|
|
|
30899
30976
|
useRef as useRef41,
|
|
30900
30977
|
useState as useState81
|
|
30901
30978
|
} from "react";
|
|
30902
|
-
import { jsx as
|
|
30979
|
+
import { jsx as jsx291, jsxs as jsxs229 } from "react/jsx-runtime";
|
|
30903
30980
|
var SORTABLE_ITEM_ATTRIBUTE = "data-sortable-item";
|
|
30904
30981
|
var SHIFT_MS = 200;
|
|
30905
30982
|
var DROP_MS = 150;
|
|
@@ -31038,15 +31115,15 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
|
|
|
31038
31115
|
() => ({ dragType, disabled, dragAndDropEnabled, reorder, readItems }),
|
|
31039
31116
|
[dragType, disabled, dragAndDropEnabled, reorder, readItems]
|
|
31040
31117
|
);
|
|
31041
|
-
return /* @__PURE__ */
|
|
31118
|
+
return /* @__PURE__ */ jsx291(SortableListContext.Provider, { value: context, children: /* @__PURE__ */ jsxs229("div", { ref: listRef, className, children: [
|
|
31042
31119
|
children,
|
|
31043
|
-
/* @__PURE__ */
|
|
31120
|
+
/* @__PURE__ */ jsx291("p", { "aria-live": "polite", className: "sr-only", children: announcement })
|
|
31044
31121
|
] }) });
|
|
31045
31122
|
}
|
|
31046
31123
|
|
|
31047
31124
|
// src/components/features/sortable-list/sortable-move-buttons.tsx
|
|
31048
31125
|
import { useRef as useRef42 } from "react";
|
|
31049
|
-
import { jsx as
|
|
31126
|
+
import { jsx as jsx292, jsxs as jsxs230 } from "react/jsx-runtime";
|
|
31050
31127
|
function SortableMoveButtons({ index, count, label, className }) {
|
|
31051
31128
|
const { disabled, reorder } = useSortableListContext();
|
|
31052
31129
|
const upRef = useRef42(null);
|
|
@@ -31061,8 +31138,8 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
31061
31138
|
});
|
|
31062
31139
|
};
|
|
31063
31140
|
const subject = label ?? "item";
|
|
31064
|
-
return /* @__PURE__ */
|
|
31065
|
-
/* @__PURE__ */
|
|
31141
|
+
return /* @__PURE__ */ jsxs230("div", { className: cn("inline-flex shrink-0", className), children: [
|
|
31142
|
+
/* @__PURE__ */ jsx292(
|
|
31066
31143
|
Button,
|
|
31067
31144
|
{
|
|
31068
31145
|
ref: upRef,
|
|
@@ -31073,10 +31150,10 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
31073
31150
|
disabled: disabled || index <= 0,
|
|
31074
31151
|
onClick: () => move(-1),
|
|
31075
31152
|
className: "rounded-r-none border-r-0",
|
|
31076
|
-
children: /* @__PURE__ */
|
|
31153
|
+
children: /* @__PURE__ */ jsx292(Arrow01UpIcon, {})
|
|
31077
31154
|
}
|
|
31078
31155
|
),
|
|
31079
|
-
/* @__PURE__ */
|
|
31156
|
+
/* @__PURE__ */ jsx292(
|
|
31080
31157
|
Button,
|
|
31081
31158
|
{
|
|
31082
31159
|
ref: downRef,
|
|
@@ -31087,7 +31164,7 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
31087
31164
|
disabled: disabled || index >= count - 1,
|
|
31088
31165
|
onClick: () => move(1),
|
|
31089
31166
|
className: "rounded-l-none",
|
|
31090
|
-
children: /* @__PURE__ */
|
|
31167
|
+
children: /* @__PURE__ */ jsx292(Arrow01DownIcon, {})
|
|
31091
31168
|
}
|
|
31092
31169
|
)
|
|
31093
31170
|
] });
|
|
@@ -31143,7 +31220,7 @@ function useSortableItem() {
|
|
|
31143
31220
|
}
|
|
31144
31221
|
|
|
31145
31222
|
// src/components/features/ticket-status-config-list/ticket-status-config-list.tsx
|
|
31146
|
-
import { jsx as
|
|
31223
|
+
import { jsx as jsx293 } from "react/jsx-runtime";
|
|
31147
31224
|
function TicketStatusConfigList({
|
|
31148
31225
|
items,
|
|
31149
31226
|
onReorder,
|
|
@@ -31151,13 +31228,13 @@ function TicketStatusConfigList({
|
|
|
31151
31228
|
getItemLabel,
|
|
31152
31229
|
className
|
|
31153
31230
|
}) {
|
|
31154
|
-
return /* @__PURE__ */
|
|
31231
|
+
return /* @__PURE__ */ jsx293(
|
|
31155
31232
|
SortableList,
|
|
31156
31233
|
{
|
|
31157
31234
|
onReorder,
|
|
31158
31235
|
getItemLabel,
|
|
31159
31236
|
className: cn("flex w-full flex-col gap-[var(--spacing-system-xs)]", className),
|
|
31160
|
-
children: items.map((item, index) => /* @__PURE__ */
|
|
31237
|
+
children: items.map((item, index) => /* @__PURE__ */ jsx293(SortableRow, { index, count: items.length, label: getItemLabel?.(index), children: (args) => renderRow(item, args) }, item.id))
|
|
31161
31238
|
}
|
|
31162
31239
|
);
|
|
31163
31240
|
}
|
|
@@ -31168,7 +31245,7 @@ function SortableRow({
|
|
|
31168
31245
|
children
|
|
31169
31246
|
}) {
|
|
31170
31247
|
const { itemRef, dragHandleProps, isDragging, dragAndDropEnabled } = useSortableItem();
|
|
31171
|
-
return /* @__PURE__ */
|
|
31248
|
+
return /* @__PURE__ */ jsx293(
|
|
31172
31249
|
"div",
|
|
31173
31250
|
{
|
|
31174
31251
|
ref: itemRef,
|
|
@@ -31176,18 +31253,18 @@ function SortableRow({
|
|
|
31176
31253
|
children: children({
|
|
31177
31254
|
dragHandleProps,
|
|
31178
31255
|
isDragging,
|
|
31179
|
-
moveButtons: dragAndDropEnabled ? null : /* @__PURE__ */
|
|
31256
|
+
moveButtons: dragAndDropEnabled ? null : /* @__PURE__ */ jsx293(SortableMoveButtons, { index, count, label })
|
|
31180
31257
|
})
|
|
31181
31258
|
}
|
|
31182
31259
|
);
|
|
31183
31260
|
}
|
|
31184
31261
|
|
|
31185
31262
|
// src/components/features/conversation-card.tsx
|
|
31186
|
-
import { jsx as
|
|
31263
|
+
import { jsx as jsx294, jsxs as jsxs231 } from "react/jsx-runtime";
|
|
31187
31264
|
function Who({ speaker }) {
|
|
31188
|
-
return /* @__PURE__ */
|
|
31265
|
+
return /* @__PURE__ */ jsxs231("div", { className: "flex items-baseline gap-2 text-ods-text-primary text-h4", children: [
|
|
31189
31266
|
speaker.name,
|
|
31190
|
-
speaker.meta && /* @__PURE__ */
|
|
31267
|
+
speaker.meta && /* @__PURE__ */ jsx294("span", { className: "text-ods-text-secondary text-h6", children: speaker.meta })
|
|
31191
31268
|
] });
|
|
31192
31269
|
}
|
|
31193
31270
|
function ConversationCard({
|
|
@@ -31201,36 +31278,36 @@ function ConversationCard({
|
|
|
31201
31278
|
footerTone = "default",
|
|
31202
31279
|
className
|
|
31203
31280
|
}) {
|
|
31204
|
-
return /* @__PURE__ */
|
|
31281
|
+
return /* @__PURE__ */ jsxs231(
|
|
31205
31282
|
"div",
|
|
31206
31283
|
{
|
|
31207
31284
|
className: cn("flex h-full flex-col gap-4 rounded-xl border border-ods-border bg-ods-card p-5 md:p-7", className),
|
|
31208
31285
|
children: [
|
|
31209
|
-
/* @__PURE__ */
|
|
31210
|
-
/* @__PURE__ */
|
|
31211
|
-
/* @__PURE__ */
|
|
31212
|
-
/* @__PURE__ */
|
|
31213
|
-
/* @__PURE__ */
|
|
31286
|
+
/* @__PURE__ */ jsxs231("div", { className: "flex items-start gap-3", children: [
|
|
31287
|
+
/* @__PURE__ */ jsx294("span", { className: "shrink-0", children: requester.avatar }),
|
|
31288
|
+
/* @__PURE__ */ jsxs231("div", { className: "min-w-0 flex-1", children: [
|
|
31289
|
+
/* @__PURE__ */ jsx294(Who, { speaker: requester }),
|
|
31290
|
+
/* @__PURE__ */ jsxs231("p", { className: "m-0 mt-1 line-clamp-2 min-h-[2lh] text-ods-text-primary text-h3", title: request, children: [
|
|
31214
31291
|
"\u201C",
|
|
31215
31292
|
request,
|
|
31216
31293
|
"\u201D"
|
|
31217
31294
|
] })
|
|
31218
31295
|
] })
|
|
31219
31296
|
] }),
|
|
31220
|
-
/* @__PURE__ */
|
|
31221
|
-
/* @__PURE__ */
|
|
31222
|
-
/* @__PURE__ */
|
|
31223
|
-
/* @__PURE__ */
|
|
31224
|
-
/* @__PURE__ */
|
|
31225
|
-
/* @__PURE__ */
|
|
31226
|
-
/* @__PURE__ */
|
|
31297
|
+
/* @__PURE__ */ jsxs231("div", { className: "flex items-start gap-3 rounded-md border border-ods-border bg-ods-bg p-3.5", children: [
|
|
31298
|
+
/* @__PURE__ */ jsx294("span", { className: "shrink-0", children: responder.avatar }),
|
|
31299
|
+
/* @__PURE__ */ jsxs231("div", { className: "min-w-0 flex-1", children: [
|
|
31300
|
+
/* @__PURE__ */ jsx294(Who, { speaker: responder }),
|
|
31301
|
+
/* @__PURE__ */ jsxs231("div", { className: "mt-1 flex items-start gap-2 text-ods-text-secondary text-h4", children: [
|
|
31302
|
+
/* @__PURE__ */ jsx294(CheckCircleIcon, { size: 16, className: "mt-1 shrink-0 text-ods-success", "aria-hidden": true }),
|
|
31303
|
+
/* @__PURE__ */ jsx294("span", { className: "line-clamp-3 min-h-[3lh] min-w-0 flex-1", title: outcome, children: outcome }),
|
|
31227
31304
|
outcomeAside
|
|
31228
31305
|
] })
|
|
31229
31306
|
] })
|
|
31230
31307
|
] }),
|
|
31231
|
-
/* @__PURE__ */
|
|
31232
|
-
/* @__PURE__ */
|
|
31233
|
-
/* @__PURE__ */
|
|
31308
|
+
/* @__PURE__ */ jsxs231("div", { className: "mt-auto flex items-center justify-between gap-3 border-t border-ods-border pt-3.5 text-ods-text-secondary text-h6", children: [
|
|
31309
|
+
/* @__PURE__ */ jsx294("span", { children: footerLabel }),
|
|
31310
|
+
/* @__PURE__ */ jsx294(
|
|
31234
31311
|
"span",
|
|
31235
31312
|
{
|
|
31236
31313
|
className: cn(
|
|
@@ -31248,7 +31325,7 @@ function ConversationCard({
|
|
|
31248
31325
|
|
|
31249
31326
|
// src/components/features/capability-explorer.tsx
|
|
31250
31327
|
import { useRef as useRef43 } from "react";
|
|
31251
|
-
import { jsx as
|
|
31328
|
+
import { jsx as jsx295, jsxs as jsxs232 } from "react/jsx-runtime";
|
|
31252
31329
|
var PANEL_HEIGHT_CLASS = "h-[824px]";
|
|
31253
31330
|
var PANEL_TOP_HEIGHT_CLASS = "h-[256px]";
|
|
31254
31331
|
var PANEL_SCREEN_HEIGHT_CLASS = "h-[420px]";
|
|
@@ -31258,9 +31335,9 @@ var SKELETON_HEIGHT_CLASS = "h-[700px] content-lg:h-[824px]";
|
|
|
31258
31335
|
var capabilityTabId = (id) => `${id}-tab`;
|
|
31259
31336
|
function Highlights({ items, className }) {
|
|
31260
31337
|
if (items.length === 0) return null;
|
|
31261
|
-
return /* @__PURE__ */
|
|
31262
|
-
/* @__PURE__ */
|
|
31263
|
-
/* @__PURE__ */
|
|
31338
|
+
return /* @__PURE__ */ jsx295("ul", { className: cn("grid grid-cols-1 gap-2", className), children: items.slice(0, 3).map((text) => /* @__PURE__ */ jsxs232("li", { className: "flex min-w-0 items-center gap-2.5", children: [
|
|
31339
|
+
/* @__PURE__ */ jsx295(CheckIcon, { size: 16, className: "shrink-0 text-ods-flamingo-cyan" }),
|
|
31340
|
+
/* @__PURE__ */ jsx295(TruncateText, { variant: "h6", triggerClassName: "flex-1", children: text })
|
|
31264
31341
|
] }, text)) });
|
|
31265
31342
|
}
|
|
31266
31343
|
function Example({
|
|
@@ -31270,14 +31347,14 @@ function Example({
|
|
|
31270
31347
|
responderMark,
|
|
31271
31348
|
className
|
|
31272
31349
|
}) {
|
|
31273
|
-
const who = (name, note) => /* @__PURE__ */
|
|
31274
|
-
/* @__PURE__ */
|
|
31275
|
-
note && /* @__PURE__ */
|
|
31350
|
+
const who = (name, note) => /* @__PURE__ */ jsxs232("p", { className: "flex min-w-0 items-baseline gap-2 text-ods-text-primary text-h6", children: [
|
|
31351
|
+
/* @__PURE__ */ jsx295("span", { className: "shrink-0", children: name }),
|
|
31352
|
+
note && /* @__PURE__ */ jsx295("span", { className: "truncate text-ods-text-secondary", children: note })
|
|
31276
31353
|
] });
|
|
31277
|
-
const mark = (node) => node ? /* @__PURE__ */
|
|
31354
|
+
const mark = (node) => node ? /* @__PURE__ */ jsx295("span", { className: "flex size-6 shrink-0 items-center justify-center", children: node }) : null;
|
|
31278
31355
|
const requester = example.requester;
|
|
31279
31356
|
const responder = example.responder;
|
|
31280
|
-
return /* @__PURE__ */
|
|
31357
|
+
return /* @__PURE__ */ jsxs232(
|
|
31281
31358
|
"div",
|
|
31282
31359
|
{
|
|
31283
31360
|
className: cn(
|
|
@@ -31285,20 +31362,20 @@ function Example({
|
|
|
31285
31362
|
className
|
|
31286
31363
|
),
|
|
31287
31364
|
children: [
|
|
31288
|
-
/* @__PURE__ */
|
|
31365
|
+
/* @__PURE__ */ jsxs232("div", { className: "flex min-w-0 gap-2.5", children: [
|
|
31289
31366
|
mark(requester?.mark ?? requesterMark),
|
|
31290
|
-
/* @__PURE__ */
|
|
31367
|
+
/* @__PURE__ */ jsxs232("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
|
|
31291
31368
|
who(requester?.name ?? labels.requester, requester?.note ?? labels.requesterNote),
|
|
31292
|
-
/* @__PURE__ */
|
|
31369
|
+
/* @__PURE__ */ jsx295(TruncateText, { lines: 2, variant: "h4", className: "min-h-[2lh]", children: `\u201C${example.request}\u201D` })
|
|
31293
31370
|
] })
|
|
31294
31371
|
] }),
|
|
31295
|
-
/* @__PURE__ */
|
|
31372
|
+
/* @__PURE__ */ jsxs232("div", { className: "flex min-w-0 gap-2.5 border-t border-ods-border pt-3", children: [
|
|
31296
31373
|
mark(responder?.mark ?? responderMark),
|
|
31297
|
-
/* @__PURE__ */
|
|
31374
|
+
/* @__PURE__ */ jsxs232("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
|
|
31298
31375
|
who(responder?.name ?? labels.responder, responder?.note ?? labels.responderNote),
|
|
31299
|
-
/* @__PURE__ */
|
|
31300
|
-
/* @__PURE__ */
|
|
31301
|
-
/* @__PURE__ */
|
|
31376
|
+
/* @__PURE__ */ jsxs232("div", { className: "flex min-w-0 items-start gap-2", children: [
|
|
31377
|
+
/* @__PURE__ */ jsx295(CheckIcon, { size: 16, className: "mt-0.5 shrink-0 text-ods-flamingo-cyan" }),
|
|
31378
|
+
/* @__PURE__ */ jsx295(TruncateText, { lines: 2, variant: "h6", tone: "secondary", className: "min-h-[2lh]", triggerClassName: "flex-1", children: example.outcome })
|
|
31302
31379
|
] })
|
|
31303
31380
|
] })
|
|
31304
31381
|
] })
|
|
@@ -31307,9 +31384,9 @@ function Example({
|
|
|
31307
31384
|
);
|
|
31308
31385
|
}
|
|
31309
31386
|
function CapabilityExplorerSkeleton({ className }) {
|
|
31310
|
-
return /* @__PURE__ */
|
|
31311
|
-
/* @__PURE__ */
|
|
31312
|
-
/* @__PURE__ */
|
|
31387
|
+
return /* @__PURE__ */ jsxs232("div", { className, children: [
|
|
31388
|
+
/* @__PURE__ */ jsx295(Skeleton, { className: cn(SKELETON_HEIGHT_CLASS, "w-full") }),
|
|
31389
|
+
/* @__PURE__ */ jsx295(SnapCarouselControlsSkeleton, { className: "content-lg:hidden" })
|
|
31313
31390
|
] });
|
|
31314
31391
|
}
|
|
31315
31392
|
function CapabilityExplorer({
|
|
@@ -31325,9 +31402,9 @@ function CapabilityExplorer({
|
|
|
31325
31402
|
const wide = useContentLgUp();
|
|
31326
31403
|
const listRef = useRef43(null);
|
|
31327
31404
|
if (items.length === 0) return null;
|
|
31328
|
-
if (wide === void 0) return /* @__PURE__ */
|
|
31405
|
+
if (wide === void 0) return /* @__PURE__ */ jsx295(CapabilityExplorerSkeleton, { className });
|
|
31329
31406
|
if (!wide) {
|
|
31330
|
-
return /* @__PURE__ */
|
|
31407
|
+
return /* @__PURE__ */ jsx295(
|
|
31331
31408
|
SnapCarousel,
|
|
31332
31409
|
{
|
|
31333
31410
|
className,
|
|
@@ -31338,7 +31415,7 @@ function CapabilityExplorer({
|
|
|
31338
31415
|
getKey: (item) => item.id,
|
|
31339
31416
|
focusIndex: items.findIndex((item) => item.id === activeId),
|
|
31340
31417
|
slideClassName: "min-w-0 basis-[86%]",
|
|
31341
|
-
renderItem: (item) => /* @__PURE__ */
|
|
31418
|
+
renderItem: (item) => /* @__PURE__ */ jsxs232(
|
|
31342
31419
|
"article",
|
|
31343
31420
|
{
|
|
31344
31421
|
className: cn(
|
|
@@ -31346,19 +31423,19 @@ function CapabilityExplorer({
|
|
|
31346
31423
|
CARD_HEIGHT_CLASS
|
|
31347
31424
|
),
|
|
31348
31425
|
children: [
|
|
31349
|
-
/* @__PURE__ */
|
|
31350
|
-
item.iconName && /* @__PURE__ */
|
|
31351
|
-
/* @__PURE__ */
|
|
31352
|
-
/* @__PURE__ */
|
|
31353
|
-
/* @__PURE__ */
|
|
31426
|
+
/* @__PURE__ */ jsxs232("div", { className: "flex min-w-0 items-center gap-3", children: [
|
|
31427
|
+
item.iconName && /* @__PURE__ */ jsx295("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-lg border border-ods-border bg-ods-bg text-ods-flamingo-cyan", children: /* @__PURE__ */ jsx295(EntityIcon, { icon: { name: item.iconName }, size: 18 }) }),
|
|
31428
|
+
/* @__PURE__ */ jsxs232("div", { className: "min-w-0 flex-1", children: [
|
|
31429
|
+
/* @__PURE__ */ jsxs232("h3", { className: "flex min-w-0 items-center gap-2 text-ods-text-primary text-h4", children: [
|
|
31430
|
+
/* @__PURE__ */ jsx295(TruncateText, { as: "span", variant: "h4", triggerClassName: "flex-1", children: item.title }),
|
|
31354
31431
|
item.badge
|
|
31355
31432
|
] }),
|
|
31356
|
-
item.caption && /* @__PURE__ */
|
|
31433
|
+
item.caption && /* @__PURE__ */ jsx295(TruncateText, { variant: "h6", tone: "secondary", children: item.caption })
|
|
31357
31434
|
] })
|
|
31358
31435
|
] }),
|
|
31359
|
-
/* @__PURE__ */
|
|
31360
|
-
/* @__PURE__ */
|
|
31361
|
-
item.example && /* @__PURE__ */
|
|
31436
|
+
/* @__PURE__ */ jsx295(TruncateText, { lines: 3, variant: "h6", tone: "secondary", className: "min-h-[3lh]", children: item.intro }),
|
|
31437
|
+
/* @__PURE__ */ jsx295("div", { className: "shrink-0 overflow-hidden rounded-lg border border-ods-border", children: renderScreen(item, { compact: true }) }),
|
|
31438
|
+
item.example && /* @__PURE__ */ jsx295(
|
|
31362
31439
|
Example,
|
|
31363
31440
|
{
|
|
31364
31441
|
example: item.example,
|
|
@@ -31368,7 +31445,7 @@ function CapabilityExplorer({
|
|
|
31368
31445
|
className: "shrink-0"
|
|
31369
31446
|
}
|
|
31370
31447
|
),
|
|
31371
|
-
item.footer && /* @__PURE__ */
|
|
31448
|
+
item.footer && /* @__PURE__ */ jsx295("div", { className: "mt-auto min-w-0 shrink-0 overflow-hidden", children: item.footer })
|
|
31372
31449
|
]
|
|
31373
31450
|
}
|
|
31374
31451
|
)
|
|
@@ -31389,7 +31466,7 @@ function CapabilityExplorer({
|
|
|
31389
31466
|
onActiveChange(items[next].id);
|
|
31390
31467
|
listRef.current?.querySelectorAll('[role="tab"]')[next]?.focus();
|
|
31391
31468
|
};
|
|
31392
|
-
return /* @__PURE__ */
|
|
31469
|
+
return /* @__PURE__ */ jsxs232(
|
|
31393
31470
|
"div",
|
|
31394
31471
|
{
|
|
31395
31472
|
className: cn(
|
|
@@ -31398,7 +31475,7 @@ function CapabilityExplorer({
|
|
|
31398
31475
|
className
|
|
31399
31476
|
),
|
|
31400
31477
|
children: [
|
|
31401
|
-
/* @__PURE__ */
|
|
31478
|
+
/* @__PURE__ */ jsx295(
|
|
31402
31479
|
"div",
|
|
31403
31480
|
{
|
|
31404
31481
|
ref: listRef,
|
|
@@ -31409,7 +31486,7 @@ function CapabilityExplorer({
|
|
|
31409
31486
|
className: "flex min-h-0 flex-col gap-1 overflow-y-auto",
|
|
31410
31487
|
children: items.map((item, index) => {
|
|
31411
31488
|
const selected = index === activeIndex;
|
|
31412
|
-
return /* @__PURE__ */
|
|
31489
|
+
return /* @__PURE__ */ jsxs232(
|
|
31413
31490
|
"button",
|
|
31414
31491
|
{
|
|
31415
31492
|
id: capabilityTabId(item.id),
|
|
@@ -31424,18 +31501,18 @@ function CapabilityExplorer({
|
|
|
31424
31501
|
selected ? "border-ods-border bg-ods-card" : "border-transparent hover:bg-ods-bg-hover"
|
|
31425
31502
|
),
|
|
31426
31503
|
children: [
|
|
31427
|
-
item.iconName && /* @__PURE__ */
|
|
31504
|
+
item.iconName && /* @__PURE__ */ jsx295(
|
|
31428
31505
|
"span",
|
|
31429
31506
|
{
|
|
31430
31507
|
className: cn(
|
|
31431
31508
|
"flex size-9 shrink-0 items-center justify-center rounded-lg border border-ods-border bg-ods-bg",
|
|
31432
31509
|
selected ? "text-ods-flamingo-cyan" : "text-ods-text-secondary"
|
|
31433
31510
|
),
|
|
31434
|
-
children: /* @__PURE__ */
|
|
31511
|
+
children: /* @__PURE__ */ jsx295(EntityIcon, { icon: { name: item.iconName }, size: 18 })
|
|
31435
31512
|
}
|
|
31436
31513
|
),
|
|
31437
|
-
/* @__PURE__ */
|
|
31438
|
-
/* @__PURE__ */
|
|
31514
|
+
/* @__PURE__ */ jsxs232("span", { className: "min-w-0 flex-1", children: [
|
|
31515
|
+
/* @__PURE__ */ jsxs232(
|
|
31439
31516
|
"span",
|
|
31440
31517
|
{
|
|
31441
31518
|
className: cn(
|
|
@@ -31443,14 +31520,14 @@ function CapabilityExplorer({
|
|
|
31443
31520
|
selected ? "text-ods-text-primary" : "text-ods-text-secondary"
|
|
31444
31521
|
),
|
|
31445
31522
|
children: [
|
|
31446
|
-
/* @__PURE__ */
|
|
31523
|
+
/* @__PURE__ */ jsx295("span", { className: "truncate", children: item.title }),
|
|
31447
31524
|
item.badge
|
|
31448
31525
|
]
|
|
31449
31526
|
}
|
|
31450
31527
|
),
|
|
31451
|
-
item.caption && /* @__PURE__ */
|
|
31528
|
+
item.caption && /* @__PURE__ */ jsx295("span", { className: "mt-0.5 block truncate text-ods-text-secondary text-h6", title: item.caption, children: item.caption })
|
|
31452
31529
|
] }),
|
|
31453
|
-
/* @__PURE__ */
|
|
31530
|
+
/* @__PURE__ */ jsx295(
|
|
31454
31531
|
Chevron02RightIcon,
|
|
31455
31532
|
{
|
|
31456
31533
|
size: 16,
|
|
@@ -31465,7 +31542,7 @@ function CapabilityExplorer({
|
|
|
31465
31542
|
})
|
|
31466
31543
|
}
|
|
31467
31544
|
),
|
|
31468
|
-
/* @__PURE__ */
|
|
31545
|
+
/* @__PURE__ */ jsxs232(
|
|
31469
31546
|
"div",
|
|
31470
31547
|
{
|
|
31471
31548
|
id: panelId,
|
|
@@ -31473,7 +31550,7 @@ function CapabilityExplorer({
|
|
|
31473
31550
|
"aria-labelledby": capabilityTabId(active.id),
|
|
31474
31551
|
className: "flex min-h-0 min-w-0 flex-col gap-5 overflow-hidden rounded-xl border border-ods-border bg-ods-card px-8 py-7",
|
|
31475
31552
|
children: [
|
|
31476
|
-
/* @__PURE__ */
|
|
31553
|
+
/* @__PURE__ */ jsxs232(
|
|
31477
31554
|
"div",
|
|
31478
31555
|
{
|
|
31479
31556
|
className: cn(
|
|
@@ -31483,12 +31560,12 @@ function CapabilityExplorer({
|
|
|
31483
31560
|
PANEL_TOP_HEIGHT_CLASS
|
|
31484
31561
|
),
|
|
31485
31562
|
children: [
|
|
31486
|
-
/* @__PURE__ */
|
|
31487
|
-
/* @__PURE__ */
|
|
31488
|
-
/* @__PURE__ */
|
|
31489
|
-
/* @__PURE__ */
|
|
31563
|
+
/* @__PURE__ */ jsxs232("div", { className: "flex min-w-0 flex-col overflow-hidden", children: [
|
|
31564
|
+
/* @__PURE__ */ jsx295(TruncateText, { lines: 2, variant: "h2", className: "mb-2", children: active.title }),
|
|
31565
|
+
/* @__PURE__ */ jsx295(TruncateText, { lines: 3, variant: "h4", tone: "secondary", className: "min-h-[3lh]", children: active.intro }),
|
|
31566
|
+
/* @__PURE__ */ jsx295(Highlights, { items: active.highlights ?? [], className: "mt-auto" })
|
|
31490
31567
|
] }),
|
|
31491
|
-
active.example && /* @__PURE__ */
|
|
31568
|
+
active.example && /* @__PURE__ */ jsx295(
|
|
31492
31569
|
Example,
|
|
31493
31570
|
{
|
|
31494
31571
|
example: active.example,
|
|
@@ -31500,8 +31577,8 @@ function CapabilityExplorer({
|
|
|
31500
31577
|
]
|
|
31501
31578
|
}
|
|
31502
31579
|
),
|
|
31503
|
-
/* @__PURE__ */
|
|
31504
|
-
active.footer && /* @__PURE__ */
|
|
31580
|
+
/* @__PURE__ */ jsx295("div", { className: cn("shrink-0 overflow-hidden rounded-xl border border-ods-border", PANEL_SCREEN_HEIGHT_CLASS), children: renderScreen(active, { compact: false }) }),
|
|
31581
|
+
active.footer && /* @__PURE__ */ jsx295("div", { className: cn("flex min-w-0 shrink-0 items-center overflow-hidden", PANEL_FOOTER_HEIGHT_CLASS), children: active.footer })
|
|
31505
31582
|
]
|
|
31506
31583
|
}
|
|
31507
31584
|
)
|
|
@@ -31881,6 +31958,10 @@ export {
|
|
|
31881
31958
|
TranscribeAndSummarizeCombinedSection,
|
|
31882
31959
|
HighlightVideoCombinedSection,
|
|
31883
31960
|
ViewToggle,
|
|
31961
|
+
APPROVAL_LEVELS,
|
|
31962
|
+
APPROVAL_LEVEL_META,
|
|
31963
|
+
ApprovalLevelMark,
|
|
31964
|
+
ApprovalLevelControl,
|
|
31884
31965
|
PolicyConfigurationPanel,
|
|
31885
31966
|
DataTableEmpty,
|
|
31886
31967
|
DataTableRow,
|