@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.
Files changed (73) hide show
  1. package/dist/{chunk-FCAVAEHF.js → chunk-2LZ3IYGT.js} +701 -620
  2. package/dist/{chunk-G3OMVCID.js → chunk-4GFAKUHF.js} +1 -1
  3. package/dist/{chunk-7NSU5EQD.cjs → chunk-5MMCYJAJ.cjs} +11 -11
  4. package/dist/{chunk-3SEEGNRE.js → chunk-AQI74KC7.js} +3 -3
  5. package/dist/{chunk-5Y72YQEK.js → chunk-BIFUUH4K.js} +3 -3
  6. package/dist/{chunk-OPYODNV2.js → chunk-DI5VLY3G.js} +1 -1
  7. package/dist/{chunk-OBZJICEA.cjs → chunk-E25A235W.cjs} +3 -3
  8. package/dist/{chunk-BXSRTBLU.cjs → chunk-EORJFB2Z.cjs} +2 -2
  9. package/dist/{chunk-T3CLXR43.cjs → chunk-GXHWSAV6.cjs} +15 -15
  10. package/dist/{chunk-EFNKS5W4.js → chunk-JHSPIDV5.js} +1 -1
  11. package/dist/{chunk-4UYKNOZG.js → chunk-KSEOIICU.js} +2 -2
  12. package/dist/{chunk-JGCFRTND.cjs → chunk-LTLHCAZY.cjs} +4 -4
  13. package/dist/{chunk-5SDELRH3.js → chunk-OQVGA3YE.js} +1 -1
  14. package/dist/{chunk-7HNYYNKE.js → chunk-QW7KTWLB.js} +2 -2
  15. package/dist/{chunk-CSCJU6YC.cjs → chunk-S66W6HNZ.cjs} +10 -10
  16. package/dist/{chunk-WWJG4GVG.cjs → chunk-U4WCFIYB.cjs} +22 -22
  17. package/dist/{chunk-RBYVFPER.js → chunk-VBDGMXZO.js} +1 -1
  18. package/dist/{chunk-N67XG5GY.js → chunk-VKIRTB7K.js} +1 -1
  19. package/dist/{chunk-3UAJLO5U.cjs → chunk-W4CS6UJS.cjs} +3 -3
  20. package/dist/{chunk-Z5SWJW5Q.cjs → chunk-WEEZSGFD.cjs} +23 -23
  21. package/dist/{chunk-UT3ODMBU.cjs → chunk-XFFIUXVI.cjs} +2 -2
  22. package/dist/{chunk-L6ZQGWCX.cjs → chunk-ZSJ6WWFH.cjs} +191 -110
  23. package/dist/{cloud-tenants-KZUZGD4A.cjs → cloud-tenants-MI7APZJD.cjs} +2 -2
  24. package/dist/{cloud-tenants-OGLVVQ7X.js → cloud-tenants-NSEVWC26.js} +1 -1
  25. package/dist/components/case-studies/index.cjs +10 -10
  26. package/dist/components/case-studies/index.js +2 -2
  27. package/dist/components/contact/index.cjs +3 -3
  28. package/dist/components/contact/index.js +2 -2
  29. package/dist/components/docs/index.cjs +5 -5
  30. package/dist/components/docs/index.js +4 -4
  31. package/dist/components/embeds/index.cjs +3 -3
  32. package/dist/components/embeds/index.js +2 -2
  33. package/dist/components/faq/index.cjs +3 -3
  34. package/dist/components/faq/index.js +2 -2
  35. package/dist/components/features/approval-level.d.ts +53 -0
  36. package/dist/components/features/approval-level.d.ts.map +1 -0
  37. package/dist/components/features/index.cjs +10 -2
  38. package/dist/components/features/index.d.ts +1 -0
  39. package/dist/components/features/index.d.ts.map +1 -1
  40. package/dist/components/features/index.js +9 -1
  41. package/dist/components/features/policy-configuration-panel.d.ts.map +1 -1
  42. package/dist/components/help-center-pages/index.cjs +39 -39
  43. package/dist/components/help-center-pages/index.js +10 -10
  44. package/dist/components/index.cjs +26 -18
  45. package/dist/components/index.js +16 -8
  46. package/dist/components/meeting-scheduler/index.cjs +11 -11
  47. package/dist/components/meeting-scheduler/index.js +1 -1
  48. package/dist/components/navigation/index.cjs +3 -3
  49. package/dist/components/navigation/index.js +2 -2
  50. package/dist/components/onboarding-guides/index.cjs +4 -4
  51. package/dist/components/onboarding-guides/index.js +3 -3
  52. package/dist/components/product-demo/index.cjs +6 -6
  53. package/dist/components/product-demo/index.js +6 -6
  54. package/dist/components/tickets/index.cjs +5 -5
  55. package/dist/components/tickets/index.js +4 -4
  56. package/dist/components/ui/index.cjs +2 -2
  57. package/dist/components/ui/index.js +1 -1
  58. package/dist/{devices-YGYJIXQY.cjs → devices-6NMK4EXV.cjs} +3 -3
  59. package/dist/{devices-LBMG42K6.js → devices-W3VKQEVZ.js} +1 -1
  60. package/dist/index.cjs +11 -3
  61. package/dist/index.js +10 -2
  62. package/dist/{knowledge-KTCVJIWN.cjs → knowledge-GDMGHFEC.cjs} +2 -2
  63. package/dist/{knowledge-H5BIWJVI.js → knowledge-YWCB7HNC.js} +1 -1
  64. package/dist/{logs-RVCC2UQW.cjs → logs-7QDRV3GN.cjs} +10 -10
  65. package/dist/{logs-DB5Z7M5Q.js → logs-E742S5A2.js} +1 -1
  66. package/dist/{policies-HV4IQCBV.cjs → policies-BEVF6AEM.cjs} +6 -6
  67. package/dist/{policies-EWUULFBR.js → policies-XTPAKRHI.js} +1 -1
  68. package/dist/{software-update-6PXKRKBT.js → software-update-FXWIEKSW.js} +1 -1
  69. package/dist/{software-update-D4OVSWSG.cjs → software-update-KPHX4XQ7.cjs} +6 -6
  70. package/package.json +1 -1
  71. package/src/components/features/approval-level.tsx +153 -0
  72. package/src/components/features/index.ts +1 -0
  73. 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 jsx246, jsxs as jsxs196 } from "react/jsx-runtime";
25361
- var approvalLevelLabels = {
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) => approvalLevelLabels[level] ?? level;
25374
- var ApprovalLevelDropdown = ({ value, onChange, allowClear = false, triggerClassName, contentClassName }) => /* @__PURE__ */ jsxs196(DropdownMenu, { children: [
25375
- /* @__PURE__ */ jsx246(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx246(
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__ */ jsx246(ChevronDown7, { className: "h-6 w-6 text-ods-text-secondary" }),
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__ */ jsxs196(DropdownMenuContent, { align: "end", className: contentClassName, children: [
25389
- allowClear && /* @__PURE__ */ jsx246(DropdownMenuItem, { onClick: () => onChange(void 0), className: "text-h6", children: "Clear Global Permission" }),
25390
- approvalLevelOptions.map((option) => /* @__PURE__ */ jsx246(DropdownMenuItem, { onClick: () => onChange(option.value), className: "text-h6", children: option.label }, option.value))
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__ */ jsxs196("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: [
25398
- /* @__PURE__ */ jsx246("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-ods-border bg-ods-bg", children: /* @__PURE__ */ jsx246(ToolIcon, { toolType: policy.toolName, size: 16 }) }),
25399
- /* @__PURE__ */ jsxs196("div", { className: "flex min-w-0 flex-1 flex-col", children: [
25400
- /* @__PURE__ */ jsx246("p", { className: "truncate text-ods-text-primary text-h4", title: policy.name, children: policy.name }),
25401
- /* @__PURE__ */ jsx246("p", { className: "break-all text-ods-text-secondary text-h6", children: policy.commandPattern }),
25402
- editMode ? /* @__PURE__ */ jsx246("div", { className: "mt-[var(--spacing-system-xsf)] content-md:hidden", children: /* @__PURE__ */ jsx246(
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__ */ jsx246("span", { className: "text-ods-text-primary text-h4 content-md:hidden", children: getApprovalLevelLabel(policy.approvalLevel) }) : null
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__ */ jsx246("div", { className: "hidden shrink-0 content-md:block", children: editMode ? /* @__PURE__ */ jsx246(
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__ */ jsx246("div", { className: cn("px-[var(--spacing-system-sf)] py-[var(--spacing-system-xsf)]", POLICY_LEVEL_WIDTH), children: policy.approvalLevel && /* @__PURE__ */ jsx246("span", { className: "text-ods-text-primary text-h4", children: getApprovalLevelLabel(policy.approvalLevel) }) }) })
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__ */ jsxs196(Fragment40, { children: [
25427
- /* @__PURE__ */ jsxs196(
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__ */ jsx246("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-ods-border bg-ods-bg", children: /* @__PURE__ */ jsx246("div", { className: "text-ods-text-secondary", children: category.icon ?? /* @__PURE__ */ jsx246(Shield, { className: "h-4 w-4" }) }) }),
25434
- /* @__PURE__ */ jsxs196("div", { className: "flex min-w-0 flex-1 flex-col", children: [
25435
- /* @__PURE__ */ jsx246("p", { className: "truncate text-ods-text-primary text-h4", title: category.name, children: category.name }),
25436
- /* @__PURE__ */ jsxs196("p", { className: "text-ods-text-secondary text-h6", children: [
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__ */ jsx246("div", { className: "mt-[var(--spacing-system-xsf)] content-md:hidden", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx246(
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__ */ jsx246("div", { className: "hidden shrink-0 content-md:block", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx246(
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__ */ jsx246(
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__ */ jsx246(
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__ */ jsx246(
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__ */ jsx246(
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__ */ jsx246("div", { ref: innerRef, className: "px-[var(--spacing-system-mf)] pb-[var(--spacing-system-mf)] pt-0", children: /* @__PURE__ */ jsx246("div", { className: "overflow-hidden rounded-md border border-ods-border", children: category.policies.map((policy) => /* @__PURE__ */ jsx246(
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__ */ jsx246("div", { className: cn("overflow-hidden rounded-md border border-ods-border bg-ods-card", className), children: categories.map((category) => /* @__PURE__ */ jsx246(
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 jsx247, jsxs as jsxs197 } from "react/jsx-runtime";
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__ */ jsxs197("div", { className: "flex min-h-[60px] min-w-0 flex-col justify-center gap-1 py-2", children: [
25597
- /* @__PURE__ */ jsx247(TruncateText, { children: row.original.name }),
25598
- row.original.description && /* @__PURE__ */ jsx247(TruncateText, { variant: "h6", tone: "secondary", children: row.original.description })
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__ */ jsx247("span", { className: "text-ods-text-primary text-h6", children: row.original.severityLabel }),
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__ */ jsx247(OSTypeBadgeGroup, { osTypes, iconSize: "w-6 h-6" });
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__ */ jsxs197("div", { className: "flex flex-col items-start gap-1", children: [
25630
- /* @__PURE__ */ jsx247(Tag, { className: "self-start", label: status.label, variant: status.variant }),
25631
- status.note && /* @__PURE__ */ jsx247("span", { className: `text-h6 ${NOTE_TONE_CLASS[status.note.tone]}`, children: status.note.text })
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__ */ jsx247("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end gap-2", children: /* @__PURE__ */ jsx247(MoreActionsMenu, { items: row.original.actions }) }) : null,
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__ */ jsx247("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ jsx247(
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__ */ jsx247(ArrowRightUpIcon, { className: "h-5 w-5" }),
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__ */ jsxs197(DataTable, { table, children: [
25686
- showHeader && /* @__PURE__ */ jsx247(
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__ */ jsx247(
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__ */ jsx247(
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 jsx248, jsxs as jsxs198 } from "react/jsx-runtime";
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__ */ jsx248("div", { className: "grid grid-cols-1 gap-4 content-md:grid-cols-2 content-lg:grid-cols-4", children: isLoading ? (
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__ */ jsx248(Skeleton, { className: "h-16 w-full content-md:h-[104px]" }, key))
25728
- ) : /* @__PURE__ */ jsxs198(Fragment41, { children: [
25729
- /* @__PURE__ */ jsx248(DashboardInfoCard, { title: "Total Policies", value: hasData ? summary.totalPolicies : EMPTY_VALUE }),
25730
- /* @__PURE__ */ jsx248(
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__ */ jsx248(
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__ */ jsx248(
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 jsx249, jsxs as jsxs199 } from "react/jsx-runtime";
25954
+ import { jsx as jsx250, jsxs as jsxs200 } from "react/jsx-runtime";
25878
25955
  function TenantAccessCell({ accessState, lastReadAt: lastReadAt2, now }) {
25879
- return /* @__PURE__ */ jsxs199("div", { className: "flex min-w-0 flex-col justify-center gap-[var(--spacing-system-xxs)]", children: [
25880
- /* @__PURE__ */ jsx249(Tag, { ...accessStateTag(accessState), className: "self-start" }),
25881
- /* @__PURE__ */ jsx249(TruncateText, { variant: "h6", tone: "secondary", children: `Last read: ${formatLastRead(lastReadAt2, now)}` })
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 jsx250, jsxs as jsxs200 } from "react/jsx-runtime";
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__ */ jsxs200("div", { className: "flex min-w-0 flex-col justify-center", children: [
25890
- /* @__PURE__ */ jsxs200("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xxs)]", children: [
25891
- /* @__PURE__ */ jsx250(Logo, { size: 24, role: "img", "aria-label": label, className: "shrink-0" }),
25892
- /* @__PURE__ */ jsx250(TruncateText, { children: name })
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__ */ jsx250(TruncateText, { variant: "h6", tone: "secondary", children: domain ?? TENANT_EMPTY_VALUE })
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 jsx251, jsxs as jsxs201 } from "react/jsx-runtime";
25976
+ import { jsx as jsx252, jsxs as jsxs202 } from "react/jsx-runtime";
25900
25977
  function TenantCustomerCell({ name, imageUrl, userCount }) {
25901
- return /* @__PURE__ */ jsxs201("div", { className: "flex min-w-0 flex-col justify-center", children: [
25902
- /* @__PURE__ */ jsxs201("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xxs)]", children: [
25903
- /* @__PURE__ */ jsx251(SquareAvatar, { src: imageUrl ?? void 0, alt: name, fallback: name, size: "xs", variant: "square" }),
25904
- /* @__PURE__ */ jsx251(TruncateText, { children: name })
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__ */ jsx251(TruncateText, { variant: "h6", tone: "secondary", children: usersCountLabel(userCount) })
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 jsx252, jsxs as jsxs202 } from "react/jsx-runtime";
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__ */ jsx252(TenantCell, { provider: row.original.provider, name: row.original.name, domain: row.original.domain }),
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__ */ jsx252(
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__ */ jsx252(TenantAccessCell, { accessState: row.original.accessState, lastReadAt: row.original.lastReadAt, now }),
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__ */ jsx252("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ jsx252(
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__ */ jsx252(ArrowRightUpIcon, { className: "h-5 w-5" }),
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__ */ jsx252("div", { className: cn("transition-opacity duration-200", isPending && "opacity-60"), children: /* @__PURE__ */ jsxs202(DataTable, { table, children: [
25997
- /* @__PURE__ */ jsx252(
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__ */ jsx252(DataTable.RowCount, { itemName: "result", totalCount: totalCount ?? rows.length })
26079
+ rightSlot: /* @__PURE__ */ jsx253(DataTable.RowCount, { itemName: "result", totalCount: totalCount ?? rows.length })
26003
26080
  }
26004
26081
  ),
26005
- /* @__PURE__ */ jsx252(
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__ */ jsx252(
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 jsx253, jsxs as jsxs203 } from "react/jsx-runtime";
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__ */ jsxs203(
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__ */ jsx253("div", { className: "h-12 w-full animate-pulse rounded-[6px] border border-ods-border bg-ods-card" }),
26126
- /* @__PURE__ */ jsxs203("div", { className: "flex w-full gap-[var(--spacing-system-xs)]", children: [
26127
- /* @__PURE__ */ jsx253("div", { className: "h-12 w-[130px] shrink-0 animate-pulse rounded-[6px] border border-ods-border bg-ods-card" }),
26128
- /* @__PURE__ */ jsx253("div", { className: "h-12 flex-1 animate-pulse rounded-[6px] border border-ods-border bg-ods-card" })
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__ */ jsxs203("div", { className: "flex w-full flex-col items-end gap-[var(--spacing-system-m)]", children: [
26131
- /* @__PURE__ */ jsx253("div", { className: "w-full animate-pulse rounded-[6px] border border-ods-border bg-ods-bg px-4 py-6" }),
26132
- /* @__PURE__ */ jsx253("div", { className: "h-12 w-[200px] animate-pulse rounded-[6px] border border-ods-border bg-ods-card" })
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__ */ jsxs203(
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__ */ jsx253(HoneypotField, { ...honeypotInputProps }),
26156
- /* @__PURE__ */ jsx253(
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__ */ jsxs203("div", { className: "relative w-full", children: [
26171
- /* @__PURE__ */ jsx253(
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__ */ jsx253(
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__ */ jsxs203("div", { className: "flex w-full flex-col items-end gap-[var(--spacing-system-l)]", children: [
26197
- /* @__PURE__ */ jsx253(
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__ */ jsxs203(Fragment42, { children: [
26285
+ description: /* @__PURE__ */ jsxs204(Fragment42, { children: [
26209
26286
  consentText,
26210
26287
  " View our ",
26211
- /* @__PURE__ */ jsx253(PolicyLink, { href: termsOfServiceUrl || "#", children: "Terms of Service" }),
26288
+ /* @__PURE__ */ jsx254(PolicyLink, { href: termsOfServiceUrl || "#", children: "Terms of Service" }),
26212
26289
  " and ",
26213
- /* @__PURE__ */ jsx253(PolicyLink, { href: privacyPolicyUrl || "#", children: "Privacy Policy" }),
26290
+ /* @__PURE__ */ jsx254(PolicyLink, { href: privacyPolicyUrl || "#", children: "Privacy Policy" }),
26214
26291
  "."
26215
26292
  ] })
26216
26293
  }
26217
26294
  ),
26218
- /* @__PURE__ */ jsx253(
26295
+ /* @__PURE__ */ jsx254(
26219
26296
  Button,
26220
26297
  {
26221
26298
  type: "button",
26222
26299
  loading: isSubmitting,
26223
26300
  disabled: isSubmitting,
26224
- leftIcon: /* @__PURE__ */ jsx253(OpenFrameLogo, {}),
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 jsx254 } from "react/jsx-runtime";
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__ */ jsx254(NotificationsContext.Provider, { value, children });
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 jsx255, jsxs as jsxs204 } from "react/jsx-runtime";
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__ */ jsx255(DrawerOpenContext.Provider, { value: open, children: /* @__PURE__ */ jsx255(DialogPrimitive3.Root, { ...rest, open, onOpenChange: handleOpenChange, modal, children }) });
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__ */ jsxs204(DialogPrimitive3.Portal, { container: portalContainer, forceMount: persist || void 0, children: [
26718
- /* @__PURE__ */ jsx255(
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__ */ jsxs204(
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__ */ jsx255(
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__ */ jsx255(
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 jsx256, jsxs as jsxs205 } from "react/jsx-runtime";
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__ */ jsxs205(
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__ */ jsxs205(
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__ */ jsxs205("div", { className: "flex items-center gap-[var(--spacing-system-xs)]", children: [
26894
- /* @__PURE__ */ jsx256("span", { className: cn("flex size-4 shrink-0 items-center justify-center", typeColorByVariant[accentVariant]), children: image ? /* @__PURE__ */ jsx256(
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__ */ jsx256("span", { className: cn("size-1.5 rounded-full", dotColorByVariant[accentVariant]) }) }),
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__ */ jsx256("p", { className: "min-w-0 flex-1 break-words text-ods-text-secondary text-h6", children: type })
26909
- ) : /* @__PURE__ */ jsx256("p", { className: cn("min-w-0 flex-1 truncate text-h5", typeColorByVariant[accentVariant]), title: type, children: type }) : /* @__PURE__ */ jsx256("span", { className: "min-w-0 flex-1" }),
26910
- !isLive && createdAtIso ? /* @__PURE__ */ jsx256(
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__ */ jsx256(Fragment43, { children: /* @__PURE__ */ jsx256("span", { className: "relative size-4 shrink-0", children: [
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__ */ jsx256(XmarkIcon, { size: 16 }),
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__ */ jsx256(CheckCircleIcon, { size: 16 }),
27005
+ icon: /* @__PURE__ */ jsx257(CheckCircleIcon, { size: 16 }),
26929
27006
  onClick: () => onComplete(id)
26930
27007
  }
26931
- ].map(({ active, label, icon: actionIcon, onClick }) => /* @__PURE__ */ jsx256(
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__ */ jsxs205("div", { className: "flex min-w-0 flex-col", children: [
26947
- title ? /* @__PURE__ */ jsx256(
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__ */ jsx256(
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__ */ jsx256(
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 jsx257, jsxs as jsxs206 } from "react/jsx-runtime";
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__ */ jsxs206(Fragment44, { children: [
27023
- /* @__PURE__ */ jsx257("div", { className: "px-[var(--spacing-system-m)] pt-[var(--spacing-system-m)]", children: /* @__PURE__ */ jsx257(
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__ */ jsx257(
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__ */ jsx257(
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__ */ jsxs206("div", { className: "flex flex-col gap-[var(--spacing-system-xs)] px-[var(--spacing-system-m)] pb-[var(--spacing-system-m)]", children: [
27056
- /* @__PURE__ */ jsxs206("div", { className: "overflow-hidden rounded-md border border-ods-border bg-ods-card", children: [
27057
- /* @__PURE__ */ jsx257(ShowNotificationsToggleRow, { checked: showPopups, onChange: setShowPopups }),
27058
- desktopPopupsConfigured && /* @__PURE__ */ jsx257(DesktopNotificationsToggleRow, { checked: showDesktopPopups, onChange: setShowDesktopPopups })
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__ */ jsx257(
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__ */ jsx257(AppLayoutDrawerRoot, { open: isOpen, onOpenChange: (v) => v ? open() : close(), children: /* @__PURE__ */ jsx257(
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__ */ jsx257(Drawer, { open: isOpen, onOpenChange: (v) => v ? open() : close(), children: /* @__PURE__ */ jsx257(
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__ */ jsx257(
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__ */ jsx257(EmptyState, {}) : /* @__PURE__ */ jsxs206(Fragment44, { children: [
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__ */ jsx257("div", { children: custom }, n.id);
27138
- return /* @__PURE__ */ jsx257(
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__ */ jsx257(DrawerLoadingTiles, {}),
27150
- loadMore && hasMore && /* @__PURE__ */ jsx257("div", { ref: sentinelRef, className: "h-1", "aria-hidden": "true" })
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__ */ jsxs206(Fragment44, { children: [
27157
- /* @__PURE__ */ jsx257(
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__ */ jsx257(
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__ */ jsxs206("div", { className: "flex flex-1 flex-col items-center justify-center gap-[var(--spacing-system-xs)] py-[var(--spacing-system-l)]", children: [
27175
- /* @__PURE__ */ jsx257(BellOffIcon, { size: 24, className: "text-ods-text-secondary" }),
27176
- /* @__PURE__ */ jsx257("p", { className: "text-ods-text-secondary text-h6", children: "No new notifications" })
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__ */ jsxs206("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: [
27181
- /* @__PURE__ */ jsx257(Switch, { checked, onCheckedChange: onChange, "aria-label": "Show pop-up notifications" }),
27182
- /* @__PURE__ */ jsxs206("div", { className: "min-w-0 flex-1", children: [
27183
- /* @__PURE__ */ jsx257("p", { className: "text-ods-text-primary text-h4", children: "Show Notifications" }),
27184
- /* @__PURE__ */ jsx257("p", { className: "text-ods-text-secondary text-h6", children: "Show pop-up messages for new alerts" })
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__ */ jsxs206("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: [
27200
- /* @__PURE__ */ jsx257(
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__ */ jsxs206("div", { className: "min-w-0 flex-1", children: [
27210
- /* @__PURE__ */ jsx257("p", { className: cn("text-h4", blocked ? "text-ods-text-secondary" : "text-ods-text-primary"), children: "Desktop Notifications" }),
27211
- /* @__PURE__ */ jsx257("p", { className: "text-ods-text-secondary text-h6", children: blocked ? "Enable notifications in your browser settings" : "Notify when this tab is in the background" })
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__ */ jsx257(
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__ */ jsx257(ClockHistoryIcon, { className: "text-ods-text-secondary" }),
27300
+ leftIcon: /* @__PURE__ */ jsx258(ClockHistoryIcon, { className: "text-ods-text-secondary" }),
27224
27301
  groupAriaLabel: "Notifications history",
27225
27302
  iconAction: {
27226
- icon: /* @__PURE__ */ jsx257(ArrowRightUpIcon, { className: "text-ods-text-secondary" }),
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 jsx258 } from "react/jsx-runtime";
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__ */ jsx258(
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__ */ jsx258("div", { className: "pointer-events-auto", children: custom }, n.id);
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__ */ jsx258(
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__ */ jsx258(
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 jsx259, jsxs as jsxs207 } from "react/jsx-runtime";
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__ */ jsx259(
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__ */ jsxs207("div", { className: "flex w-full items-center gap-[var(--spacing-system-xs)]", children: [
27453
- status === "pending" ? /* @__PURE__ */ jsxs207(Fragment45, { children: [
27454
- /* @__PURE__ */ jsx259(
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__ */ jsx259(
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__ */ jsxs207("span", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xsf)]", children: [
27482
- /* @__PURE__ */ jsx259(ApprovalStatusTag, { status }),
27483
- approval.resolvedByName ? /* @__PURE__ */ jsxs207("span", { className: "truncate text-ods-text-secondary text-h6", children: [
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__ */ jsx259(
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__ */ jsx259(ExpandChevron, { expanded })
27577
+ children: /* @__PURE__ */ jsx260(ExpandChevron, { expanded })
27501
27578
  }
27502
27579
  )
27503
27580
  ] }),
27504
- children: !lockscreen && /* @__PURE__ */ jsx259("div", { style: containerStyle, children: /* @__PURE__ */ jsx259("div", { ref: innerRef, children: /* @__PURE__ */ jsx259("div", { className: "border-t border-ods-border", children: /* @__PURE__ */ jsx259(
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 jsx260 } from "react/jsx-runtime";
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__ */ jsx260(TimeTrackerContext.Provider, { value: enabled ? value : null, children });
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 jsx261, jsxs as jsxs208 } from "react/jsx-runtime";
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__ */ jsxs208("div", { className: "flex w-full min-w-0 items-center justify-between gap-[var(--spacing-system-xs)]", children: [
27577
- /* @__PURE__ */ jsxs208("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xs)]", children: [
27578
- /* @__PURE__ */ jsx261(SquareAvatar, { src: imageUrl, alt: label, fallback: label, size: "sm", variant: "square" }),
27579
- /* @__PURE__ */ jsx261("span", { className: "truncate", title: label, children: label })
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__ */ jsx261(CheckIcon, { className: "text-ods-accent", size: 20 })
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__ */ jsx261(
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__ */ jsxs208(
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__ */ jsx261(
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__ */ jsx261(XmarkIcon, {})
27765
+ children: /* @__PURE__ */ jsx262(XmarkIcon, {})
27689
27766
  }
27690
27767
  ),
27691
- /* @__PURE__ */ jsxs208("div", { className: "flex flex-col gap-[var(--spacing-system-m)]", children: [
27692
- /* @__PURE__ */ jsxs208("div", { className: "flex items-center gap-[var(--spacing-system-s)]", children: [
27693
- /* @__PURE__ */ jsx261(StatusTag, { status }),
27694
- isActive && /* @__PURE__ */ jsx261(
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__ */ jsxs208("div", { className: "flex items-stretch overflow-hidden rounded-md border border-ods-border", children: [
27705
- /* @__PURE__ */ jsx261("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__ */ jsx261(
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__ */ jsx261(
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__ */ jsx261(PauseIcon, {}) : /* @__PURE__ */ jsx261(PlayIcon, {})
27801
+ children: isRunning ? /* @__PURE__ */ jsx262(PauseIcon, {}) : /* @__PURE__ */ jsx262(PlayIcon, {})
27725
27802
  }
27726
27803
  ),
27727
- isActive && /* @__PURE__ */ jsx261(
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__ */ jsx261(CheckCircleIcon, {})
27813
+ children: /* @__PURE__ */ jsx262(CheckCircleIcon, {})
27737
27814
  }
27738
27815
  )
27739
27816
  ] }),
27740
- /* @__PURE__ */ jsxs208("div", { className: cn("grid gap-[var(--spacing-system-m)]", showCustomer && "grid-cols-2"), children: [
27741
- /* @__PURE__ */ jsx261(
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__ */ jsx261(
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__ */ jsx261(
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__ */ jsxs208("div", { className: "flex flex-col gap-[var(--spacing-system-m)]", children: [
27788
- visibleEntries.length === 0 ? /* @__PURE__ */ jsxs208("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: [
27789
- /* @__PURE__ */ jsx261(ClockHistoryIcon, { className: "size-6" }),
27790
- /* @__PURE__ */ jsxs208("div", { className: "flex flex-col", children: [
27791
- /* @__PURE__ */ jsx261("p", { className: "font-medium text-h4", children: "No time logged" }),
27792
- /* @__PURE__ */ jsx261("p", { className: "text-h6", children: "Last entries will appear here" })
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__ */ jsxs208("div", { className: "flex flex-col gap-[var(--spacing-system-xs)]", children: [
27795
- /* @__PURE__ */ jsx261("p", { className: "font-mono uppercase tracking-wide text-ods-text-secondary text-h6", children: "Last Entries" }),
27796
- /* @__PURE__ */ jsx261("div", { className: "overflow-hidden rounded-md border border-ods-border bg-ods-card", children: visibleEntries.map((entry) => /* @__PURE__ */ jsx261(LastEntryRow, { entry, onClick: handleEntryClick }, entry.id)) })
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__ */ jsxs208("div", { className: "grid grid-cols-2 gap-[var(--spacing-system-m)]", children: [
27799
- /* @__PURE__ */ jsx261(
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__ */ jsx261(PlusCircleIcon, { className: "text-ods-text-secondary" }),
27883
+ leftIcon: /* @__PURE__ */ jsx262(PlusCircleIcon, { className: "text-ods-text-secondary" }),
27807
27884
  children: "Manual Entry"
27808
27885
  }
27809
27886
  ),
27810
- /* @__PURE__ */ jsx261(
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__ */ jsx261(ArrowRightUpIcon, { size: 24 }),
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__ */ jsx261(Button, { variant: "outline", fullWidth: true, onClick: onClose, className: "md:hidden", children: "Close" })
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__ */ jsx261(
27917
+ return /* @__PURE__ */ jsx262(
27841
27918
  Tag,
27842
27919
  {
27843
27920
  variant: "success",
27844
27921
  className: STATUS_TAG_SKIN,
27845
- icon: /* @__PURE__ */ jsx261(DotsLoaderIcon, { className: "h-4 w-4" }),
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__ */ jsx261(Tag, { variant: "warning", className: STATUS_TAG_SKIN, icon: /* @__PURE__ */ jsx261(PauseIcon, { className: "h-4 w-4" }), label: "Paused" });
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__ */ jsx261(Tag, { variant: "grey", className: STATUS_TAG_SKIN, label: "Ready to Track" });
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__ */ jsxs208("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: [
27857
- /* @__PURE__ */ jsxs208("div", { className: "flex w-[88px] shrink-0 flex-col justify-center", children: [
27858
- /* @__PURE__ */ jsx261("span", { className: "truncate font-medium text-ods-text-primary text-h4", children: entry.durationLabel }),
27859
- /* @__PURE__ */ jsx261("span", { className: "truncate text-ods-text-secondary text-h6", children: entry.dateLabel })
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__ */ jsxs208("div", { className: "flex min-w-0 flex-1 flex-col justify-center", children: [
27862
- /* @__PURE__ */ jsx261("span", { className: "truncate font-medium text-ods-text-primary text-h4", children: entry.title }),
27863
- entry.description && /* @__PURE__ */ jsx261("span", { className: "truncate text-ods-text-secondary text-h6", children: entry.description })
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__ */ jsx261(
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__ */ jsx261(Chevron02RightIcon, {})
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 jsx262 } from "react/jsx-runtime";
27962
+ import { jsx as jsx263 } from "react/jsx-runtime";
27886
27963
  function UnreadDot({ size = "responsive", className }) {
27887
- return /* @__PURE__ */ jsx262(
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__ */ jsx262(
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 jsx263, jsxs as jsxs209 } from "react/jsx-runtime";
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__ */ jsx263(
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__ */ jsxs209("span", { className: "relative inline-flex", children: [
28018
+ children: showUnreadDot ? /* @__PURE__ */ jsxs210("span", { className: "relative inline-flex", children: [
27942
28019
  icon,
27943
- /* @__PURE__ */ jsx263(UnreadDot, {})
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 jsx264, jsxs as jsxs210 } from "react/jsx-runtime";
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__ */ jsxs210(PopoverPrimitive7.Root, { open: isOpen, onOpenChange: (next) => next ? open() : close(), children: [
27981
- /* @__PURE__ */ jsx264(PopoverPrimitive7.Trigger, { asChild: true, children: /* @__PURE__ */ jsx264(
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__ */ jsxs210(Fragment46, { children: [
27996
- /* @__PURE__ */ jsx264(
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__ */ jsx264(
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__ */ jsx264(PopoverPrimitive7.Portal, { container: layoutContainer ?? void 0, children: /* @__PURE__ */ jsx264(
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__ */ jsx264(PopoverPrimitive7.Portal, { children: /* @__PURE__ */ jsx264(
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__ */ jsx264(TimeTrackerPanel, { ...ctx, onClose: close })
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 jsx265 } from "react/jsx-runtime";
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__ */ jsx265(DevicesViewConfigContext.Provider, { value, children });
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 jsx266 } from "react/jsx-runtime";
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__ */ jsx266(Tag, { label: "Coming Soon", variant: "grey" })
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__ */ jsx266(
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 jsx267 } from "react/jsx-runtime";
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__ */ jsx267(MonitorIcon, { className });
28330
+ return /* @__PURE__ */ jsx268(MonitorIcon, { className });
28254
28331
  case "laptop":
28255
- return /* @__PURE__ */ jsx267(LaptopIcon, { className });
28332
+ return /* @__PURE__ */ jsx268(LaptopIcon, { className });
28256
28333
  case "server":
28257
- return /* @__PURE__ */ jsx267(HardDrivesIcon, { className });
28334
+ return /* @__PURE__ */ jsx268(HardDrivesIcon, { className });
28258
28335
  case "mobile":
28259
- return /* @__PURE__ */ jsx267(MobilePhoneIcon, { className });
28336
+ return /* @__PURE__ */ jsx268(MobilePhoneIcon, { className });
28260
28337
  case "tablet":
28261
- return /* @__PURE__ */ jsx267(TabletIcon, { className });
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 jsx268 } from "react/jsx-runtime";
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__ */ jsx268("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__ */ jsx268(MonitorIcon, { className: ICON_CLASS }) });
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 jsx269, jsxs as jsxs211 } from "react/jsx-runtime";
28352
+ import { Fragment as Fragment47, jsx as jsx270, jsxs as jsxs212 } from "react/jsx-runtime";
28276
28353
  function DeviceTagsFilterButton({ onClick }) {
28277
- return /* @__PURE__ */ jsxs211(Fragment47, { children: [
28278
- /* @__PURE__ */ jsx269(
28354
+ return /* @__PURE__ */ jsxs212(Fragment47, { children: [
28355
+ /* @__PURE__ */ jsx270(
28279
28356
  Button,
28280
28357
  {
28281
28358
  variant: "outline",
28282
28359
  onClick,
28283
- leftIcon: /* @__PURE__ */ jsx269(Filter02Icon, { className: "text-ods-text-secondary" }),
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__ */ jsx269(
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__ */ jsx269(Filter02Icon, { className: "text-ods-text-primary" }),
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 jsx270, jsxs as jsxs212 } from "react/jsx-runtime";
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__ */ jsxs212(Fragment48, { children: [
28325
- /* @__PURE__ */ jsxs212(
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__ */ jsx270("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx270(
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__ */ jsx270(DeviceTagsFilterButton, { onClick: onOpenFilterModal })
28424
+ /* @__PURE__ */ jsx271(DeviceTagsFilterButton, { onClick: onOpenFilterModal })
28348
28425
  ]
28349
28426
  }
28350
28427
  ),
28351
- /* @__PURE__ */ jsx270(
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 jsx271, jsxs as jsxs213 } from "react/jsx-runtime";
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__ */ jsx271("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end gap-2", children: renderRowActions(row.original) }) : () => null,
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__ */ jsx271("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ jsx271(
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__ */ jsx271(ArrowRightUpIcon, { className: "h-5 w-5" }),
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__ */ jsx271(OpenDeviceButton, { device: row.original }),
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__ */ jsxs213(DataTable, { table, children: [
28454
- showHeader && /* @__PURE__ */ jsx271(
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__ */ jsx271(DataTable.RowCount, { itemName: "device", totalCount })
28536
+ rightSlot: /* @__PURE__ */ jsx272(DataTable.RowCount, { itemName: "device", totalCount })
28460
28537
  }
28461
28538
  ),
28462
- /* @__PURE__ */ jsx271(
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__ */ jsxs213("div", { className: "flex items-center gap-3", children: [
28479
- /* @__PURE__ */ jsx271(EntityImage, { src: fullImageUrl, alt: device.organization || "Customer", className: "size-12 content-md:size-12" }),
28480
- /* @__PURE__ */ jsx271("div", { className: "flex min-w-0 flex-1 flex-col justify-center", children: /* @__PURE__ */ jsx271("span", { className: "break-words text-ods-text-primary text-h4", children: device.organization || "" }) })
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__ */ jsxs213("div", { className: "relative box-border flex h-20 w-full shrink-0 content-stretch items-center justify-start gap-4 py-0", children: [
28522
- /* @__PURE__ */ jsx271(DeviceTypeTile, { type: device.type }),
28523
- /* @__PURE__ */ jsx271("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx271(TruncateText, { children: getDeviceName(device) }) })
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__ */ jsxs213("div", { className: "flex shrink-0 flex-col items-start gap-1", children: [
28536
- /* @__PURE__ */ jsx271("div", { className: "inline-flex", children: /* @__PURE__ */ jsx271(Tag, { label: statusConfig2.label, variant: statusConfig2.variant }) }),
28537
- /* @__PURE__ */ jsx271("span", { className: "hidden text-ods-text-secondary text-h6 content-md:flex", children: device.last_seen ? formatDateTime(device.last_seen) : "Never" })
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__ */ jsx271(OSTypeBadge, { osType: row.original.osType, iconSize: "w-4 h-4 content-md:w-6 content-md:h-6" }),
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__ */ jsx271(OrganizationCell, { device: row.original }),
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 jsx272, jsxs as jsxs214 } from "react/jsx-runtime";
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__ */ jsxs214("div", { className: "flex min-w-0 items-center gap-3", children: [
28693
- /* @__PURE__ */ jsx272(
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__ */ jsxs214("div", { className: "flex min-w-0 flex-col justify-center", children: [
28702
- /* @__PURE__ */ jsx272(TruncateText, { children: device.organization || "" }),
28703
- device.organizationEmail && /* @__PURE__ */ jsx272(TruncateText, { variant: "h6", tone: "secondary", children: device.organizationEmail })
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__ */ jsxs214("div", { className: "flex h-20 items-center gap-3", children: [
28995
- /* @__PURE__ */ jsx272(DeviceTypeTile, { type: device.type }),
28996
- /* @__PURE__ */ jsxs214("div", { className: "flex min-w-0 flex-col", children: [
28997
- /* @__PURE__ */ jsx272(TruncateText, { children: getDeviceName(device) }),
28998
- /* @__PURE__ */ jsx272(TruncateText, { variant: "h6", tone: "secondary", children: formatLastOnline(lastSeen) })
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__ */ jsx272(CustomerCell, { device: row.original }),
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__ */ jsx272(OSTypeBadge, { osType: row.original.osType, iconSize: "w-4 h-4 content-md:w-6 content-md:h-6" }),
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__ */ jsx272(Tag, { label: config.label, variant: config.variant, className: "w-min" });
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__ */ jsxs214("div", { "data-no-row-click": true, className: "pointer-events-auto flex w-full items-center justify-end gap-2", children: [
29048
- /* @__PURE__ */ jsx272("span", { className: "whitespace-pre-line text-right text-ods-text-secondary text-h6 content-max-md:hidden", children: disabledReason }),
29049
- /* @__PURE__ */ jsx272(
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__ */ jsx272(PlusCircleIcon, { size: 24 }),
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__ */ jsx272("div", { "data-no-row-click": true, className: "pointer-events-auto flex w-full items-center justify-end", children: /* @__PURE__ */ jsx272(
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__ */ jsx272(TrashIcon, { size: 24 }),
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__ */ jsx272("div", { "data-no-row-click": true, className: "pointer-events-auto flex w-full items-center justify-end", children: /* @__PURE__ */ jsx272(
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__ */ jsx272(CheckCircleIcon, { size: 24 }) : /* @__PURE__ */ jsx272(PlusCircleIcon, { size: 24 }),
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__ */ jsx272(
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__ */ jsxs214(
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__ */ jsxs214(DataTable, { table, children: [
29173
- showHeader && /* @__PURE__ */ jsx272(
29249
+ const deviceTable = /* @__PURE__ */ jsxs215(DataTable, { table, children: [
29250
+ showHeader && /* @__PURE__ */ jsx273(
29174
29251
  DataTable.Header,
29175
29252
  {
29176
- rightSlot: bulkAction ?? /* @__PURE__ */ jsx272(DataTable.RowCount, { itemName: "device", totalCount: totalCount ?? server?.totalCount })
29253
+ rightSlot: bulkAction ?? /* @__PURE__ */ jsx273(DataTable.RowCount, { itemName: "device", totalCount: totalCount ?? server?.totalCount })
29177
29254
  }
29178
29255
  ),
29179
- /* @__PURE__ */ jsx272(
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__ */ jsx272(
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__ */ jsxs214("div", { className: "flex flex-col gap-[var(--spacing-system-l)]", children: [
29279
+ /* @__PURE__ */ jsxs215("div", { className: "flex flex-col gap-[var(--spacing-system-l)]", children: [
29203
29280
  headerContent,
29204
- showSelectionModeRadio && /* @__PURE__ */ jsx272(DeviceSelectionModeRadio, { value: selectionMode, onChange: onSelectionModeChange, disabled }),
29205
- isCriteria ? /* @__PURE__ */ jsxs214(Fragment49, { children: [
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__ */ jsxs214("div", { className: "flex flex-col rounded-[6px] border border-ods-border bg-ods-bg", children: [
29218
- !singleSelect && /* @__PURE__ */ jsx272(
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__ */ jsxs214("div", { className: "flex flex-col gap-[var(--spacing-system-m)] p-[var(--spacing-system-m)]", children: [
29228
- showToolbar && /* @__PURE__ */ jsx272(
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 jsx273 } from "react/jsx-runtime";
29335
+ import { jsx as jsx274 } from "react/jsx-runtime";
29259
29336
  var NO_DEVICES = [];
29260
29337
  function DeviceSelectorSkeleton(props) {
29261
- return /* @__PURE__ */ jsx273(DeviceSelector, { ...props, devices: NO_DEVICES, loading: true, disabled: true });
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 jsx274, jsxs as jsxs215 } from "react/jsx-runtime";
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__ */ jsx274("div", { className: "space-y-4", children: isLoading && devices.length === 0 ? /* @__PURE__ */ jsx274(DeviceCardSkeletonGrid, { count: 12 }) : devices.length === 0 ? /* @__PURE__ */ jsx274("div", { className: "flex h-64 items-center justify-center rounded-[6px] border border-ods-border bg-ods-card", children: /* @__PURE__ */ jsx274("p", { className: "text-ods-text-secondary", children: emptyMessage }) }) : /* @__PURE__ */ jsxs215(Fragment50, { children: [
29303
- /* @__PURE__ */ jsxs215("div", { className: "grid grid-cols-1 gap-4 content-md:grid-cols-2 content-lg:grid-cols-3", children: [
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__ */ jsx274(
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__ */ jsx274(DeviceCardSkeleton, {}, `skeleton-${i}`))
29409
+ isFetchingNextPage && Array.from({ length: 4 }, (_, i) => /* @__PURE__ */ jsx275(DeviceCardSkeleton, {}, `skeleton-${i}`))
29333
29410
  ] }),
29334
- hasNextPage && /* @__PURE__ */ jsx274("div", { ref: sentinelRef, className: "h-1", "aria-hidden": "true" })
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 jsx275, jsxs as jsxs216 } from "react/jsx-runtime";
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__ */ jsxs216("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: [
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__ */ jsx275(
29434
+ return /* @__PURE__ */ jsx276(
29358
29435
  FiltersDropdown,
29359
29436
  {
29360
- triggerElement: /* @__PURE__ */ jsxs216(
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__ */ jsx275("span", { className: "whitespace-nowrap uppercase text-ods-text-secondary transition-colors text-h5 group-hover:text-ods-text-primary", children: column.label }),
29368
- /* @__PURE__ */ jsx275(
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__ */ jsx275("div", { className: "absolute inset-y-0 right-0 flex items-center", children: /* @__PURE__ */ jsxs216("span", { className: "whitespace-nowrap text-ods-text-secondary text-h6", children: [
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 jsx276, jsxs as jsxs217 } from "react/jsx-runtime";
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__ */ jsxs217(
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__ */ jsx276(
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__ */ jsx276("div", { className: `transition-opacity duration-200 ${isPending ? "opacity-60" : ""}`, children: /* @__PURE__ */ jsx276(
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__ */ jsx276(
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 jsx277 } from "react/jsx-runtime";
29661
+ import { jsx as jsx278 } from "react/jsx-runtime";
29585
29662
  var DEVICE_VIEW_MODE_ITEMS = [
29586
- { id: "table", icon: /* @__PURE__ */ jsx277(TableCellIcon, { className: "h-6 w-6" }) },
29587
- { id: "grid", icon: /* @__PURE__ */ jsx277(GridIcon, { className: "h-6 w-6" }) }
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__ */ jsx277(BoxArchiveIcon, { className: "h-5 w-5 text-ods-text-secondary" }),
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__ */ jsx277(PlusCircleIcon, { className: "h-5 w-5 text-ods-text-secondary" }),
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__ */ jsx277(PlusCircleIcon, { className: `h-5 w-5 ${accent ? "text-ods-text-on-accent" : "text-ods-text-secondary"}` }),
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 jsx278, jsxs as jsxs218 } from "react/jsx-runtime";
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__ */ jsxs218(Fragment51, { children: [
29684
- /* @__PURE__ */ jsx278(DevicesFilterToolbar, { ...toolbar, isLoading: loading }),
29685
- viewMode === "table" ? /* @__PURE__ */ jsx278(
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__ */ jsx278(
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__ */ jsxs218(Fragment51, { children: [
29712
- /* @__PURE__ */ jsx278(
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__ */ jsx278(
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__ */ jsxs218(
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__ */ jsx278(
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__ */ jsx278("span", { role: "status", className: "sr-only", children: "Loading devices\u2026" }),
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__ */ jsxs218(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: [
29760
- /* @__PURE__ */ jsx278("span", { className: "shrink-0", children: /* @__PURE__ */ jsx278(AlertTriangleIcon, { className: "h-6 w-6" }) }),
29761
- /* @__PURE__ */ jsx278("p", { className: "text-h3", children: "Add a customer to connect a new device" })
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__ */ jsx278("div", { inert: true, children: list })
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__ */ jsx278("div", { className: cn(isNarrowing && "opacity-60 transition-opacity"), children: list })
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 jsx279 } from "react/jsx-runtime";
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__ */ jsx279(
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 jsx280, jsxs as jsxs219 } from "react/jsx-runtime";
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__ */ jsxs219(
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__ */ jsxs219("div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
29849
- /* @__PURE__ */ jsx280(Label, { className: "text-h4", children: "Date" }),
29850
- /* @__PURE__ */ jsx280(
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__ */ jsxs219("div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
29864
- /* @__PURE__ */ jsx280(Label, { className: "text-h4", children: "Time" }),
29865
- /* @__PURE__ */ jsxs219(Select, { value: time, onValueChange: onTimeChange, children: [
29866
- /* @__PURE__ */ jsx280(SelectTrigger, { children: /* @__PURE__ */ jsx280(SelectValue, { placeholder: "Select time" }) }),
29867
- /* @__PURE__ */ jsx280(SelectContent, { children: timeOptions.map((option) => /* @__PURE__ */ jsx280(SelectItem, { value: option.value, children: option.label }, option.value)) })
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__ */ jsxs219("div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
29871
- /* @__PURE__ */ jsx280(Label, { className: "text-h4", children: "Timezone" }),
29872
- /* @__PURE__ */ jsxs219(Select, { value: timeReference, onValueChange: (value) => onTimeReferenceChange(value), children: [
29873
- /* @__PURE__ */ jsx280(SelectTrigger, { children: /* @__PURE__ */ jsx280(SelectValue, {}) }),
29874
- /* @__PURE__ */ jsx280(SelectContent, { children: timing.timeReferenceOptions.map((option) => /* @__PURE__ */ jsx280(SelectItem, { value: option.value, children: option.label }, option.value)) })
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 jsx281, jsxs as jsxs220 } from "react/jsx-runtime";
30014
+ import { jsx as jsx282, jsxs as jsxs221 } from "react/jsx-runtime";
29938
30015
  function InfoCell2({ value, label }) {
29939
- return /* @__PURE__ */ jsxs220("div", { className: "flex min-w-0 flex-1 flex-col justify-center", children: [
29940
- /* @__PURE__ */ jsx281("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xxs)]", children: value ? /* @__PURE__ */ jsx281("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx281(TruncateText, { children: value }) }) : /* @__PURE__ */ jsx281("div", { className: "min-w-0 flex-1 text-h4", children: /* @__PURE__ */ jsx281("span", { className: "text-ods-text-secondary", children: "\u2014" }) }) }),
29941
- /* @__PURE__ */ jsx281("p", { className: "truncate text-ods-text-secondary text-h6", children: label })
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__ */ jsxs220("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: [
29946
- /* @__PURE__ */ jsx281("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxs220(
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__ */ jsx281(SelectTrigger, { label: "Package Manager", labelVariant: "large", children: /* @__PURE__ */ jsx281(SelectValue, {}) }),
29953
- /* @__PURE__ */ jsx281(SelectContent, { children: PACKAGE_MANAGERS.map((manager) => {
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__ */ jsx281(SelectItem, { value: manager, children: /* @__PURE__ */ jsxs220("span", { className: "flex items-center gap-[var(--spacing-system-xsf)]", children: [
29956
- /* @__PURE__ */ jsx281(Icon, { size: 20, className: "shrink-0 text-ods-text-secondary" }),
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__ */ jsx281("div", { className: "min-w-0 flex-1", children: renderPackageSearch({
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__ */ jsx281(InfoCell2, { value: row.pkg?.description, label: "Description" }),
29969
- /* @__PURE__ */ jsxs220("div", { className: "flex min-w-0 flex-1 items-end gap-[var(--spacing-system-lf)]", children: [
29970
- /* @__PURE__ */ jsx281(InfoCell2, { value: row.pkg?.version, label: "Current Version" }),
29971
- /* @__PURE__ */ jsx281(
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__ */ jsx281(TrashIcon, { size: 24, className: "text-ods-error" })
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 jsx282, jsxs as jsxs221 } from "react/jsx-runtime";
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__ */ jsx282(
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__ */ jsx282(
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__ */ jsxs221(
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__ */ jsx282(
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__ */ jsx282(
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__ */ jsx282(PlusCircleIcon, { size: 24, className: "text-ods-text-secondary" }),
30158
+ leftIcon: /* @__PURE__ */ jsx283(PlusCircleIcon, { size: 24, className: "text-ods-text-secondary" }),
30082
30159
  children: "Add Software"
30083
30160
  }
30084
30161
  ),
30085
- inline ? /* @__PURE__ */ jsxs221("div", { className: "flex flex-col gap-[var(--spacing-system-l)] content-lg:flex-row content-lg:items-end", children: [
30086
- /* @__PURE__ */ jsx282("div", { className: "min-w-0 content-lg:flex-1", children: runModeField }),
30087
- scheduleFields && /* @__PURE__ */ jsx282("div", { className: "min-w-0 content-lg:flex-1", children: scheduleFields })
30088
- ] }) : /* @__PURE__ */ jsxs221(Fragment52, { children: [
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__ */ jsx282("h2", { className: "pt-[var(--spacing-system-l)] text-ods-text-primary text-h2", children: "Device Selection" }),
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 jsx283, jsxs as jsxs222 } from "react/jsx-runtime";
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__ */ jsx283("span", { className: "text-ods-text-secondary", children: EMPTY_MARK });
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__ */ jsx283(
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__ */ jsxs222(
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__ */ jsxs222(AppLayoutDrawerHeader, { children: [
30132
- /* @__PURE__ */ jsx283(AppLayoutDrawerTitle, { children: "Log Details" }),
30133
- (statusTag || timestamp) && /* @__PURE__ */ jsxs222("div", { className: "flex items-center gap-2", children: [
30134
- statusTag && /* @__PURE__ */ jsx283(Tag, { label: statusTag.label, variant: statusTag.variant }),
30135
- timestamp && /* @__PURE__ */ jsx283("span", { className: "text-ods-text-secondary text-h6", children: timestamp })
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__ */ jsxs222(AppLayoutDrawerBody, { children: [
30139
- /* @__PURE__ */ jsxs222("div", { className: "min-h-0 flex-1 space-y-4 overflow-y-auto", children: [
30140
- description && /* @__PURE__ */ jsx283(AppLayoutDrawerDescription, { asChild: true, className: "leading-6 text-ods-text-primary text-h4", children: /* @__PURE__ */ jsx283("div", { children: description }) }),
30141
- infoFields && infoFields.length > 0 && /* @__PURE__ */ jsx283("div", { className: "grid grid-cols-1 gap-3 rounded-[6px] border border-ods-border bg-ods-card p-4", children: infoFields.map((field) => /* @__PURE__ */ jsxs222("div", { className: "grid grid-cols-1 gap-0.5", children: [
30142
- typeof field.value === "string" ? field.value === "" || field.value === EMPTY_MARK ? /* @__PURE__ */ jsx283("span", { className: "text-h4", children: /* @__PURE__ */ jsx283(EmptyMark, {}) }) : /* @__PURE__ */ jsx283(TruncateText, { children: field.value }) : /* @__PURE__ */ jsx283("span", { className: "truncate text-ods-text-primary text-h4", children: field.value === null || field.value === void 0 || field.value === false ? /* @__PURE__ */ jsx283(EmptyMark, {}) : field.value }),
30143
- /* @__PURE__ */ jsx283("span", { className: "truncate text-ods-text-secondary text-h6", children: field.label })
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__ */ jsx283("div", { className: "mt-auto", children: deviceCard })
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 jsx284, jsxs as jsxs223 } from "react/jsx-runtime";
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__ */ jsx284(Refresh02HrIcon, { size: 24, className: "text-ods-text-secondary" }),
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__ */ jsxs223(PageLayout, { title: "Logs", actions, showHeader, className, children: [
30191
- !hideSearch && /* @__PURE__ */ jsxs223("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: [
30192
- /* @__PURE__ */ jsx284(
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__ */ jsx284(SearchIcon, { className: "h-4 w-4 content-md:h-6 content-md:w-6" })
30276
+ startAdornment: /* @__PURE__ */ jsx285(SearchIcon, { className: "h-4 w-4 content-md:h-6 content-md:w-6" })
30200
30277
  }
30201
30278
  ),
30202
- /* @__PURE__ */ jsx284(
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__ */ jsx284(Filter02Icon, { className: "text-ods-text-primary" })
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__ */ jsx284(
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__ */ jsx284(CheckIcon, { className: "h-5 w-5 text-ods-success" }) : /* @__PURE__ */ jsx284(Copy02Icon, { className: "h-5 w-5" }),
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 jsx285, jsxs as jsxs224 } from "react/jsx-runtime";
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__ */ jsx285(ToolIcon, { toolType, className: iconClassName, size: 16 }) : null);
30262
- const linked = (node, linkClassName) => href && targetPlatform ? /* @__PURE__ */ jsx285(
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__ */ jsx285("a", { href, target: "_blank", rel: "noopener noreferrer", title: text || void 0, className: linkClassName, children: node }) : node;
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__ */ jsxs224(
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__ */ jsx285("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 }),
30284
- text && /* @__PURE__ */ jsx285("span", { className: "whitespace-nowrap", children: text })
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__ */ jsxs224("div", { className: cn("flex items-center gap-1 text-ods-text-secondary", className), children: [
30369
+ /* @__PURE__ */ jsxs225("div", { className: cn("flex items-center gap-1 text-ods-text-secondary", className), children: [
30293
30370
  mark,
30294
- /* @__PURE__ */ jsx285("span", { className: "text-ods-text-primary text-h4", children: text })
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 jsx286, jsxs as jsxs225 } from "react/jsx-runtime";
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__ */ jsxs225("div", { className: "flex shrink-0 flex-col justify-center", children: [
30340
- /* @__PURE__ */ jsx286(TruncateText, { children: row.original.timestamp }),
30341
- /* @__PURE__ */ jsx286(TruncateText, { variant: "h6", tone: "secondary", children: row.original.logId })
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__ */ jsx286("div", { className: "shrink-0", children: /* @__PURE__ */ jsx286(Tag, { label: row.original.status.label, variant: row.original.status.variant }) }),
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__ */ jsx286(
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__ */ jsxs225("div", { className: "flex min-h-[60px] flex-col justify-center gap-1 py-2", children: [
30393
- deviceName && /* @__PURE__ */ jsx286(TruncateText, { children: deviceName }),
30394
- organization && /* @__PURE__ */ jsx286(TruncateText, { variant: "h6", tone: "secondary", children: organization })
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__ */ jsx286(TruncateText, { lines: 3, className: "text-ods-text-secondary text-h6", children: row.original.description.title }),
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__ */ jsx286("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: renderCopyAction?.(row.original) }),
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__ */ jsx286("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ jsx286(
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__ */ jsx286(EyeIcon2, { className: "h-5 w-5" }),
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__ */ jsx286("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ jsx286(
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__ */ jsx286(ArrowRightUpIcon, { className: "h-5 w-5" }),
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__ */ jsx286(ClipboardListIcon, {}), title: EMPTY_TITLE, description: EMPTY_DESCRIPTION } : {
30498
- icon: /* @__PURE__ */ jsx286(ClipboardListIcon, {}),
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__ */ jsx286(EyeAltIcon, {}), label: "Track who did what, when, and on which device" },
30503
- { icon: /* @__PURE__ */ jsx286(Filter01ListIcon, {}), label: "Filter by user, action type, Customer, or date range" },
30504
- { icon: /* @__PURE__ */ jsx286(SearchIcon, {}), label: "Investigate incidents and audit security events" }
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__ */ jsx286(Fragment53, { children: renderEmptyState ? renderEmptyState(emptyProps) : /* @__PURE__ */ jsx286(NoData, { ...emptyProps }) });
30585
+ return /* @__PURE__ */ jsx287(Fragment53, { children: renderEmptyState ? renderEmptyState(emptyProps) : /* @__PURE__ */ jsx287(NoData, { ...emptyProps }) });
30509
30586
  }
30510
- return /* @__PURE__ */ jsxs225(Fragment53, { children: [
30511
- /* @__PURE__ */ jsxs225(DataTable, { table, children: [
30512
- !(scopedEmpty && !hasQuery) && /* @__PURE__ */ jsx286(DataTable.Header, { stickyHeader: true, stickyHeaderOffset: "top-[96px]", rightSlot: /* @__PURE__ */ jsx286(DataTable.RowCount, {}) }),
30513
- /* @__PURE__ */ jsx286(
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__ */ jsx286(ClipboardListIcon, {}),
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__ */ jsx286(
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__ */ jsx286(
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__ */ jsxs225(DataTable, { table, children: [
30623
- /* @__PURE__ */ jsx286(DataTable.Header, { stickyHeader: true, stickyHeaderOffset: "top-[96px]" }),
30624
- /* @__PURE__ */ jsx286(DataTable.Body, { loading: true, skeletonRows: 10, emptyMessage: "", rowClassName: "mb-1" })
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 jsx287, jsxs as jsxs226 } from "react/jsx-runtime";
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__ */ jsx287("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ jsx287(
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__ */ jsx287(ArrowRightUpIcon, { className: "h-5 w-5" }),
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__ */ jsxs226("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: [
30691
- /* @__PURE__ */ jsx287("div", { className: "relative flex h-8 w-8 shrink-0 items-center justify-center rounded-[6px] border border-ods-border", children: /* @__PURE__ */ jsx287(Icon, { size: 16, className: "shrink-0 text-ods-text-secondary" }) }),
30692
- /* @__PURE__ */ jsxs226("div", { className: "flex min-w-0 flex-1 flex-col", children: [
30693
- /* @__PURE__ */ jsxs226("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xsf)]", children: [
30694
- /* @__PURE__ */ jsx287("div", { className: "min-w-0", children: /* @__PURE__ */ jsx287(TruncateText, { children: item.name }) }),
30695
- tagStatus && /* @__PURE__ */ jsx287(
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__ */ jsx287(TruncateText, { variant: "h6", tone: "secondary", children: item.summary })
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__ */ jsxs226("div", { className: "flex flex-col whitespace-nowrap", children: [
30719
- /* @__PURE__ */ jsx287("span", { className: "text-ods-text-primary text-h4", children: formatDate2(ts) }),
30720
- /* @__PURE__ */ jsx287("span", { className: "text-heading-5 text-ods-text-secondary", children: formatTime(ts) })
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__ */ jsxs226(DataTable, { table, children: [
30754
- /* @__PURE__ */ jsx287(
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__ */ jsx287(DataTable.RowCount, { itemName: mode === "archive" ? "article" : "item", totalCount })
30836
+ rightSlot: /* @__PURE__ */ jsx288(DataTable.RowCount, { itemName: mode === "archive" ? "article" : "item", totalCount })
30760
30837
  }
30761
30838
  ),
30762
- /* @__PURE__ */ jsx287(DataTable.Body, { loading: isLoading, skeletonRows, emptyMessage, rowHref: getHref }),
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 jsx288, jsxs as jsxs227 } from "react/jsx-runtime";
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__ */ jsxs227(
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__ */ jsx288("div", { className: "flex flex-wrap gap-[var(--spacing-system-xsf)]", children: tags.map((tag) => /* @__PURE__ */ jsx288(Tag, { label: tag.label, variant: "outline", className: "max-w-full" }, tag.id)) }),
30794
- /* @__PURE__ */ jsx288(Card, { className: "border-ods-border px-[var(--spacing-system-mf)] py-0", children: /* @__PURE__ */ jsxs227("div", { className: "grid grid-cols-2 gap-x-[var(--spacing-system-mf)] content-lg:grid-cols-3", children: [
30795
- /* @__PURE__ */ jsxs227("div", { className: "flex h-20 min-w-0 items-center gap-[var(--spacing-system-xsf)]", children: [
30796
- author.deleted ? /* @__PURE__ */ jsx288(DeletedUserAvatar, { size: "md" }) : /* @__PURE__ */ jsx288(
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__ */ jsxs227("div", { className: "flex min-w-0 flex-1 flex-col", children: [
30807
- /* @__PURE__ */ jsx288(TruncateText, { className: author.deleted ? "text-ods-error" : void 0, children: author.name ?? "Unknown" }),
30808
- /* @__PURE__ */ jsx288("p", { className: "truncate text-heading-5 text-ods-text-secondary", children: "Author" })
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__ */ jsxs227("div", { className: "flex h-20 min-w-0 flex-col justify-center", children: [
30812
- /* @__PURE__ */ jsx288(TruncateText, { children: updatedLabel }),
30813
- /* @__PURE__ */ jsx288("p", { className: "truncate text-heading-5 text-ods-text-secondary", children: "Updated" })
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__ */ jsx288(
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__ */ jsxs227("div", { className: "flex h-20 min-w-0 flex-col items-start justify-center gap-[var(--spacing-system-xxs)]", children: [
30823
- /* @__PURE__ */ jsx288(Tag, { variant: KNOWLEDGE_BASE_STATUS_VARIANT[status], label: status }),
30824
- /* @__PURE__ */ jsx288("p", { className: "truncate text-heading-5 text-ods-text-secondary", children: "Status" })
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__ */ jsx288(TicketDetailSection, { label: "Attachments", children: /* @__PURE__ */ jsx288(TicketAttachmentsList, { attachments }) }),
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 jsx289 } from "react/jsx-runtime";
30949
+ import { jsx as jsx290 } from "react/jsx-runtime";
30873
30950
  function SortableDragHandle({ handleProps, label, className }) {
30874
- return /* @__PURE__ */ jsx289(
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__ */ jsx289(DraggerIcon, {})
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 jsx290, jsxs as jsxs228 } from "react/jsx-runtime";
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__ */ jsx290(SortableListContext.Provider, { value: context, children: /* @__PURE__ */ jsxs228("div", { ref: listRef, className, children: [
31118
+ return /* @__PURE__ */ jsx291(SortableListContext.Provider, { value: context, children: /* @__PURE__ */ jsxs229("div", { ref: listRef, className, children: [
31042
31119
  children,
31043
- /* @__PURE__ */ jsx290("p", { "aria-live": "polite", className: "sr-only", children: announcement })
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 jsx291, jsxs as jsxs229 } from "react/jsx-runtime";
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__ */ jsxs229("div", { className: cn("inline-flex shrink-0", className), children: [
31065
- /* @__PURE__ */ jsx291(
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__ */ jsx291(Arrow01UpIcon, {})
31153
+ children: /* @__PURE__ */ jsx292(Arrow01UpIcon, {})
31077
31154
  }
31078
31155
  ),
31079
- /* @__PURE__ */ jsx291(
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__ */ jsx291(Arrow01DownIcon, {})
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 jsx292 } from "react/jsx-runtime";
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__ */ jsx292(
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__ */ jsx292(SortableRow, { index, count: items.length, label: getItemLabel?.(index), children: (args) => renderRow(item, args) }, item.id))
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__ */ jsx292(
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__ */ jsx292(SortableMoveButtons, { index, count, label })
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 jsx293, jsxs as jsxs230 } from "react/jsx-runtime";
31263
+ import { jsx as jsx294, jsxs as jsxs231 } from "react/jsx-runtime";
31187
31264
  function Who({ speaker }) {
31188
- return /* @__PURE__ */ jsxs230("div", { className: "flex items-baseline gap-2 text-ods-text-primary text-h4", children: [
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__ */ jsx293("span", { className: "text-ods-text-secondary text-h6", children: speaker.meta })
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__ */ jsxs230(
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__ */ jsxs230("div", { className: "flex items-start gap-3", children: [
31210
- /* @__PURE__ */ jsx293("span", { className: "shrink-0", children: requester.avatar }),
31211
- /* @__PURE__ */ jsxs230("div", { className: "min-w-0 flex-1", children: [
31212
- /* @__PURE__ */ jsx293(Who, { speaker: requester }),
31213
- /* @__PURE__ */ jsxs230("p", { className: "m-0 mt-1 line-clamp-2 min-h-[2lh] text-ods-text-primary text-h3", title: request, children: [
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__ */ jsxs230("div", { className: "flex items-start gap-3 rounded-md border border-ods-border bg-ods-bg p-3.5", children: [
31221
- /* @__PURE__ */ jsx293("span", { className: "shrink-0", children: responder.avatar }),
31222
- /* @__PURE__ */ jsxs230("div", { className: "min-w-0 flex-1", children: [
31223
- /* @__PURE__ */ jsx293(Who, { speaker: responder }),
31224
- /* @__PURE__ */ jsxs230("div", { className: "mt-1 flex items-start gap-2 text-ods-text-secondary text-h4", children: [
31225
- /* @__PURE__ */ jsx293(CheckCircleIcon, { size: 16, className: "mt-1 shrink-0 text-ods-success", "aria-hidden": true }),
31226
- /* @__PURE__ */ jsx293("span", { className: "line-clamp-3 min-h-[3lh] min-w-0 flex-1", title: outcome, children: outcome }),
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__ */ jsxs230("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: [
31232
- /* @__PURE__ */ jsx293("span", { children: footerLabel }),
31233
- /* @__PURE__ */ jsx293(
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 jsx294, jsxs as jsxs231 } from "react/jsx-runtime";
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__ */ jsx294("ul", { className: cn("grid grid-cols-1 gap-2", className), children: items.slice(0, 3).map((text) => /* @__PURE__ */ jsxs231("li", { className: "flex min-w-0 items-center gap-2.5", children: [
31262
- /* @__PURE__ */ jsx294(CheckIcon, { size: 16, className: "shrink-0 text-ods-flamingo-cyan" }),
31263
- /* @__PURE__ */ jsx294(TruncateText, { variant: "h6", triggerClassName: "flex-1", children: text })
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__ */ jsxs231("p", { className: "flex min-w-0 items-baseline gap-2 text-ods-text-primary text-h6", children: [
31274
- /* @__PURE__ */ jsx294("span", { className: "shrink-0", children: name }),
31275
- note && /* @__PURE__ */ jsx294("span", { className: "truncate text-ods-text-secondary", children: note })
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__ */ jsx294("span", { className: "flex size-6 shrink-0 items-center justify-center", children: node }) : null;
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__ */ jsxs231(
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__ */ jsxs231("div", { className: "flex min-w-0 gap-2.5", children: [
31365
+ /* @__PURE__ */ jsxs232("div", { className: "flex min-w-0 gap-2.5", children: [
31289
31366
  mark(requester?.mark ?? requesterMark),
31290
- /* @__PURE__ */ jsxs231("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
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__ */ jsx294(TruncateText, { lines: 2, variant: "h4", className: "min-h-[2lh]", children: `\u201C${example.request}\u201D` })
31369
+ /* @__PURE__ */ jsx295(TruncateText, { lines: 2, variant: "h4", className: "min-h-[2lh]", children: `\u201C${example.request}\u201D` })
31293
31370
  ] })
31294
31371
  ] }),
31295
- /* @__PURE__ */ jsxs231("div", { className: "flex min-w-0 gap-2.5 border-t border-ods-border pt-3", children: [
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__ */ jsxs231("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
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__ */ jsxs231("div", { className: "flex min-w-0 items-start gap-2", children: [
31300
- /* @__PURE__ */ jsx294(CheckIcon, { size: 16, className: "mt-0.5 shrink-0 text-ods-flamingo-cyan" }),
31301
- /* @__PURE__ */ jsx294(TruncateText, { lines: 2, variant: "h6", tone: "secondary", className: "min-h-[2lh]", triggerClassName: "flex-1", children: example.outcome })
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__ */ jsxs231("div", { className, children: [
31311
- /* @__PURE__ */ jsx294(Skeleton, { className: cn(SKELETON_HEIGHT_CLASS, "w-full") }),
31312
- /* @__PURE__ */ jsx294(SnapCarouselControlsSkeleton, { className: "content-lg:hidden" })
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__ */ jsx294(CapabilityExplorerSkeleton, { className });
31405
+ if (wide === void 0) return /* @__PURE__ */ jsx295(CapabilityExplorerSkeleton, { className });
31329
31406
  if (!wide) {
31330
- return /* @__PURE__ */ jsx294(
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__ */ jsxs231(
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__ */ jsxs231("div", { className: "flex min-w-0 items-center gap-3", children: [
31350
- item.iconName && /* @__PURE__ */ jsx294("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__ */ jsx294(EntityIcon, { icon: { name: item.iconName }, size: 18 }) }),
31351
- /* @__PURE__ */ jsxs231("div", { className: "min-w-0 flex-1", children: [
31352
- /* @__PURE__ */ jsxs231("h3", { className: "flex min-w-0 items-center gap-2 text-ods-text-primary text-h4", children: [
31353
- /* @__PURE__ */ jsx294(TruncateText, { as: "span", variant: "h4", triggerClassName: "flex-1", children: item.title }),
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__ */ jsx294(TruncateText, { variant: "h6", tone: "secondary", children: item.caption })
31433
+ item.caption && /* @__PURE__ */ jsx295(TruncateText, { variant: "h6", tone: "secondary", children: item.caption })
31357
31434
  ] })
31358
31435
  ] }),
31359
- /* @__PURE__ */ jsx294(TruncateText, { lines: 3, variant: "h6", tone: "secondary", className: "min-h-[3lh]", children: item.intro }),
31360
- /* @__PURE__ */ jsx294("div", { className: "shrink-0 overflow-hidden rounded-lg border border-ods-border", children: renderScreen(item, { compact: true }) }),
31361
- item.example && /* @__PURE__ */ jsx294(
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__ */ jsx294("div", { className: "mt-auto min-w-0 shrink-0 overflow-hidden", children: item.footer })
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__ */ jsxs231(
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__ */ jsx294(
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__ */ jsxs231(
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__ */ jsx294(
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__ */ jsx294(EntityIcon, { icon: { name: item.iconName }, size: 18 })
31511
+ children: /* @__PURE__ */ jsx295(EntityIcon, { icon: { name: item.iconName }, size: 18 })
31435
31512
  }
31436
31513
  ),
31437
- /* @__PURE__ */ jsxs231("span", { className: "min-w-0 flex-1", children: [
31438
- /* @__PURE__ */ jsxs231(
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__ */ jsx294("span", { className: "truncate", children: item.title }),
31523
+ /* @__PURE__ */ jsx295("span", { className: "truncate", children: item.title }),
31447
31524
  item.badge
31448
31525
  ]
31449
31526
  }
31450
31527
  ),
31451
- item.caption && /* @__PURE__ */ jsx294("span", { className: "mt-0.5 block truncate text-ods-text-secondary text-h6", title: item.caption, children: item.caption })
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__ */ jsx294(
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__ */ jsxs231(
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__ */ jsxs231(
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__ */ jsxs231("div", { className: "flex min-w-0 flex-col overflow-hidden", children: [
31487
- /* @__PURE__ */ jsx294(TruncateText, { lines: 2, variant: "h2", className: "mb-2", children: active.title }),
31488
- /* @__PURE__ */ jsx294(TruncateText, { lines: 3, variant: "h4", tone: "secondary", className: "min-h-[3lh]", children: active.intro }),
31489
- /* @__PURE__ */ jsx294(Highlights, { items: active.highlights ?? [], className: "mt-auto" })
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__ */ jsx294(
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__ */ jsx294("div", { className: cn("shrink-0 overflow-hidden rounded-xl border border-ods-border", PANEL_SCREEN_HEIGHT_CLASS), children: renderScreen(active, { compact: false }) }),
31504
- active.footer && /* @__PURE__ */ jsx294("div", { className: cn("flex min-w-0 shrink-0 items-center overflow-hidden", PANEL_FOOTER_HEIGHT_CLASS), children: active.footer })
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,