@flamingo-stack/openframe-frontend-core 0.0.442 → 0.0.443-snapshot.20260717175152

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 (112) hide show
  1. package/dist/{chunk-J5NO7PAG.cjs → chunk-2CJ734N2.cjs} +3 -3
  2. package/dist/{chunk-J5NO7PAG.cjs.map → chunk-2CJ734N2.cjs.map} +1 -1
  3. package/dist/{chunk-KUXGQ2FQ.cjs → chunk-2PLNDTRG.cjs} +32 -32
  4. package/dist/{chunk-KUXGQ2FQ.cjs.map → chunk-2PLNDTRG.cjs.map} +1 -1
  5. package/dist/{chunk-Y3NFB6HR.js → chunk-37ZZQXHK.js} +4 -4
  6. package/dist/{chunk-YZJUHEPZ.js → chunk-3SCNEGL2.js} +5 -5
  7. package/dist/{chunk-DUQQEQ7G.cjs → chunk-4R3SVOKH.cjs} +190 -156
  8. package/dist/chunk-4R3SVOKH.cjs.map +1 -0
  9. package/dist/{chunk-QO6MCQYE.cjs → chunk-7CZ4MJSI.cjs} +13 -10
  10. package/dist/chunk-7CZ4MJSI.cjs.map +1 -0
  11. package/dist/{chunk-W3JZXLJ2.js → chunk-ABIRMYG5.js} +6 -6
  12. package/dist/{chunk-TAQMYVO6.cjs → chunk-BYTJNRJW.cjs} +40 -40
  13. package/dist/{chunk-TAQMYVO6.cjs.map → chunk-BYTJNRJW.cjs.map} +1 -1
  14. package/dist/{chunk-IAZ5AN2E.js → chunk-CE3AITV2.js} +6 -6
  15. package/dist/{chunk-FPE3SQ5D.js → chunk-DCDB3SM4.js} +3 -3
  16. package/dist/{chunk-LFWPWIAC.cjs → chunk-DSW6FIEF.cjs} +7 -7
  17. package/dist/{chunk-LFWPWIAC.cjs.map → chunk-DSW6FIEF.cjs.map} +1 -1
  18. package/dist/{chunk-JYI4R25Q.js → chunk-DTMJWBDQ.js} +3 -3
  19. package/dist/{chunk-SM26C2L7.js → chunk-F2XHBAHT.js} +2 -2
  20. package/dist/{chunk-JNC4LVD6.cjs → chunk-F6NMMPDL.cjs} +29 -29
  21. package/dist/{chunk-JNC4LVD6.cjs.map → chunk-F6NMMPDL.cjs.map} +1 -1
  22. package/dist/{chunk-7QP65IE4.cjs → chunk-FO4CI4R5.cjs} +5 -5
  23. package/dist/{chunk-7QP65IE4.cjs.map → chunk-FO4CI4R5.cjs.map} +1 -1
  24. package/dist/{chunk-7KDR5P23.js → chunk-FQASXKBK.js} +2 -2
  25. package/dist/{chunk-7KNOHGMI.js → chunk-H7H3AFLF.js} +2 -2
  26. package/dist/{chunk-QAG357PE.js → chunk-LCJGOV6P.js} +2 -2
  27. package/dist/{chunk-2BTDPDME.js → chunk-MG4AMIFX.js} +4 -1
  28. package/dist/chunk-MG4AMIFX.js.map +1 -0
  29. package/dist/{chunk-ZQYFDYWV.js → chunk-NDWIFCLS.js} +120 -86
  30. package/dist/chunk-NDWIFCLS.js.map +1 -0
  31. package/dist/{chunk-UFBUQO7Z.cjs → chunk-OXZLBIR7.cjs} +18 -18
  32. package/dist/{chunk-UFBUQO7Z.cjs.map → chunk-OXZLBIR7.cjs.map} +1 -1
  33. package/dist/{chunk-63TSTDME.js → chunk-PMTR5W5G.js} +5 -5
  34. package/dist/{chunk-XMCVUYKC.cjs → chunk-Q6XOEVPH.cjs} +12 -12
  35. package/dist/{chunk-XMCVUYKC.cjs.map → chunk-Q6XOEVPH.cjs.map} +1 -1
  36. package/dist/{chunk-IZ6A6K6N.cjs → chunk-RALJEQWM.cjs} +15 -15
  37. package/dist/{chunk-IZ6A6K6N.cjs.map → chunk-RALJEQWM.cjs.map} +1 -1
  38. package/dist/{chunk-AGV26PUR.js → chunk-U7U2CZBZ.js} +3 -3
  39. package/dist/{chunk-LUKRPHEW.cjs → chunk-VI2QQIGR.cjs} +73 -73
  40. package/dist/{chunk-LUKRPHEW.cjs.map → chunk-VI2QQIGR.cjs.map} +1 -1
  41. package/dist/{chunk-JOH5D76X.cjs → chunk-WXU6A6CA.cjs} +73 -73
  42. package/dist/{chunk-JOH5D76X.cjs.map → chunk-WXU6A6CA.cjs.map} +1 -1
  43. package/dist/{chunk-IPEIOR77.cjs → chunk-YP7VJPCJ.cjs} +40 -40
  44. package/dist/{chunk-IPEIOR77.cjs.map → chunk-YP7VJPCJ.cjs.map} +1 -1
  45. package/dist/components/case-studies/index.cjs +9 -9
  46. package/dist/components/case-studies/index.js +3 -3
  47. package/dist/components/chat/index.cjs +3 -3
  48. package/dist/components/chat/index.js +2 -2
  49. package/dist/components/contact/index.cjs +4 -4
  50. package/dist/components/contact/index.js +3 -3
  51. package/dist/components/docs/index.cjs +6 -6
  52. package/dist/components/docs/index.js +5 -5
  53. package/dist/components/embeds/index.cjs +4 -4
  54. package/dist/components/embeds/index.js +3 -3
  55. package/dist/components/faq/index.cjs +5 -5
  56. package/dist/components/faq/index.js +4 -4
  57. package/dist/components/features/index.cjs +3 -3
  58. package/dist/components/features/index.js +2 -2
  59. package/dist/components/features/policy-configuration-panel.d.ts +11 -0
  60. package/dist/components/features/policy-configuration-panel.d.ts.map +1 -1
  61. package/dist/components/help-center-pages/index.cjs +22 -22
  62. package/dist/components/help-center-pages/index.js +13 -13
  63. package/dist/components/index.cjs +135 -135
  64. package/dist/components/index.js +11 -11
  65. package/dist/components/navigation/index.cjs +3 -3
  66. package/dist/components/navigation/index.js +2 -2
  67. package/dist/components/onboarding-guides/index.cjs +7 -7
  68. package/dist/components/onboarding-guides/index.js +6 -6
  69. package/dist/components/related-content/index.cjs +5 -5
  70. package/dist/components/related-content/index.js +4 -4
  71. package/dist/components/tickets/index.cjs +6 -6
  72. package/dist/components/tickets/index.js +5 -5
  73. package/dist/components/ui/checkbox-block.d.ts +6 -0
  74. package/dist/components/ui/checkbox-block.d.ts.map +1 -1
  75. package/dist/components/ui/index.cjs +3 -3
  76. package/dist/components/ui/index.js +2 -2
  77. package/dist/hooks/index.cjs +2 -2
  78. package/dist/hooks/index.js +1 -1
  79. package/dist/index.cjs +3 -3
  80. package/dist/index.js +2 -2
  81. package/dist/types/permissions.d.ts +9 -6
  82. package/dist/types/permissions.d.ts.map +1 -1
  83. package/dist/utils/embed-authed-fetch.d.ts +19 -3
  84. package/dist/utils/embed-authed-fetch.d.ts.map +1 -1
  85. package/dist/utils/index.cjs +3 -0
  86. package/dist/utils/index.cjs.map +1 -1
  87. package/dist/utils/index.js +3 -0
  88. package/dist/utils/index.js.map +1 -1
  89. package/package.json +1 -1
  90. package/src/components/features/policy-configuration-panel.tsx +182 -122
  91. package/src/components/ui/checkbox-block.tsx +12 -1
  92. package/src/stories/CheckboxBlock.stories.tsx +18 -0
  93. package/src/stories/PolicyConfigurationPanel.stories.tsx +254 -0
  94. package/src/types/permissions.ts +10 -7
  95. package/src/utils/__tests__/embed-authed-fetch.test.ts +39 -0
  96. package/src/utils/embed-authed-fetch.ts +27 -3
  97. package/dist/chunk-2BTDPDME.js.map +0 -1
  98. package/dist/chunk-DUQQEQ7G.cjs.map +0 -1
  99. package/dist/chunk-QO6MCQYE.cjs.map +0 -1
  100. package/dist/chunk-ZQYFDYWV.js.map +0 -1
  101. /package/dist/{chunk-Y3NFB6HR.js.map → chunk-37ZZQXHK.js.map} +0 -0
  102. /package/dist/{chunk-YZJUHEPZ.js.map → chunk-3SCNEGL2.js.map} +0 -0
  103. /package/dist/{chunk-W3JZXLJ2.js.map → chunk-ABIRMYG5.js.map} +0 -0
  104. /package/dist/{chunk-IAZ5AN2E.js.map → chunk-CE3AITV2.js.map} +0 -0
  105. /package/dist/{chunk-FPE3SQ5D.js.map → chunk-DCDB3SM4.js.map} +0 -0
  106. /package/dist/{chunk-JYI4R25Q.js.map → chunk-DTMJWBDQ.js.map} +0 -0
  107. /package/dist/{chunk-SM26C2L7.js.map → chunk-F2XHBAHT.js.map} +0 -0
  108. /package/dist/{chunk-7KDR5P23.js.map → chunk-FQASXKBK.js.map} +0 -0
  109. /package/dist/{chunk-7KNOHGMI.js.map → chunk-H7H3AFLF.js.map} +0 -0
  110. /package/dist/{chunk-QAG357PE.js.map → chunk-LCJGOV6P.js.map} +0 -0
  111. /package/dist/{chunk-63TSTDME.js.map → chunk-PMTR5W5G.js.map} +0 -0
  112. /package/dist/{chunk-AGV26PUR.js.map → chunk-U7U2CZBZ.js.map} +0 -0
@@ -27,7 +27,7 @@ import {
27
27
  useOgPlaceholderUrl,
28
28
  useOnboardingState,
29
29
  useToast
30
- } from "./chunk-2BTDPDME.js";
30
+ } from "./chunk-MG4AMIFX.js";
31
31
  import {
32
32
  AlertCircleIcon,
33
33
  AnthropicLogoGreyIcon,
@@ -14000,13 +14000,15 @@ import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
14000
14000
  import * as React40 from "react";
14001
14001
  init_cn();
14002
14002
  import { jsx as jsx96, jsxs as jsxs74 } from "react/jsx-runtime";
14003
- var CheckboxBlock = React40.forwardRef(({ id, checked, defaultChecked, onCheckedChange, label, description, truncateLabel, disabled, error, className }, ref) => /* @__PURE__ */ jsxs74("div", { className: cn("relative flex w-full flex-col", className), children: [
14003
+ var CheckboxBlock = React40.forwardRef(({ id, checked, defaultChecked, onCheckedChange, label, description, truncateLabel, trailing, disabled, error, className }, ref) => /* @__PURE__ */ jsxs74("div", { className: cn("relative flex w-full flex-col", className), children: [
14004
14004
  /* @__PURE__ */ jsxs74(
14005
14005
  "label",
14006
14006
  {
14007
14007
  htmlFor: id,
14008
14008
  className: cn(
14009
14009
  "flex items-center gap-[var(--spacing-system-s)] rounded-md ring-1 ring-inset w-full",
14010
+ // Trailing content stacks full-width below the text on mobile.
14011
+ trailing && "flex-wrap md:flex-nowrap",
14010
14012
  "p-[var(--spacing-system-sf)]",
14011
14013
  !description && "min-h-[44px] md:min-h-[48px]",
14012
14014
  description && "min-h-[60px] md:min-h-[64px]",
@@ -14054,7 +14056,8 @@ var CheckboxBlock = React40.forwardRef(({ id, checked, defaultChecked, onChecked
14054
14056
  "text-h6 !leading-4",
14055
14057
  "text-ods-text-secondary select-none break-words"
14056
14058
  ), children: description })
14057
- ] })
14059
+ ] }),
14060
+ trailing && /* @__PURE__ */ jsx96("div", { className: "flex w-full shrink-0 items-center md:ml-auto md:w-auto", children: trailing })
14058
14061
  ]
14059
14062
  }
14060
14063
  ),
@@ -31937,7 +31940,7 @@ function ViewToggle({
31937
31940
  // src/components/features/policy-configuration-panel.tsx
31938
31941
  init_cn();
31939
31942
  import { useRef as useRef37, useEffect as useEffect52, useState as useState71 } from "react";
31940
- import { ChevronDown as ChevronDown8 } from "lucide-react";
31943
+ import { ChevronDown as ChevronDown8, Shield as Shield2 } from "lucide-react";
31941
31944
  init_button2();
31942
31945
  import { Fragment as Fragment43, jsx as jsx253, jsxs as jsxs197 } from "react/jsx-runtime";
31943
31946
  var approvalLevelOptions = [
@@ -31953,33 +31956,61 @@ var getApprovalLevelLabel = (level, editMode = false) => {
31953
31956
  const option = approvalLevelOptions.find((opt) => opt.value === level);
31954
31957
  return option?.label || level;
31955
31958
  };
31959
+ var ApprovalLevelDropdown = ({ value, onChange, allowClear = false, triggerClassName, contentClassName }) => /* @__PURE__ */ jsxs197(DropdownMenu, { children: [
31960
+ /* @__PURE__ */ jsx253(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx253(
31961
+ Button,
31962
+ {
31963
+ variant: "outline",
31964
+ rightIcon: /* @__PURE__ */ jsx253(ChevronDown8, { className: "h-6 w-6 text-ods-text-secondary" }),
31965
+ className: cn(
31966
+ "!text-h6 bg-ods-card border border-ods-border rounded-md flex gap-[var(--spacing-system-xsf)] items-center justify-between !px-[var(--spacing-system-xsf)] py-[var(--spacing-system-xsf)] hover:bg-ods-bg-hover transition-colors h-auto",
31967
+ value ? "text-ods-text-primary" : "text-ods-text-secondary",
31968
+ triggerClassName
31969
+ ),
31970
+ children: getApprovalLevelLabel(value, true)
31971
+ }
31972
+ ) }),
31973
+ /* @__PURE__ */ jsxs197(DropdownMenuContent, { align: "end", className: contentClassName, children: [
31974
+ allowClear && /* @__PURE__ */ jsx253(DropdownMenuItem, { onClick: () => onChange(void 0), className: "text-h6", children: "Clear Global Permission" }),
31975
+ approvalLevelOptions.map((option) => /* @__PURE__ */ jsx253(
31976
+ DropdownMenuItem,
31977
+ {
31978
+ onClick: () => onChange(option.value),
31979
+ className: "text-h6",
31980
+ children: option.label
31981
+ },
31982
+ option.value
31983
+ ))
31984
+ ] })
31985
+ ] });
31956
31986
  var PolicyRow = ({ policy, categoryId, editMode, onPermissionChange }) => {
31957
- return /* @__PURE__ */ jsxs197("div", { className: "bg-ods-bg border-b border-ods-border flex gap-4 items-center px-4 py-3", children: [
31958
- /* @__PURE__ */ jsx253("div", { className: "bg-ods-bg border border-ods-border rounded-md flex items-center justify-center w-8 h-8", children: /* @__PURE__ */ jsx253(ToolIcon, { toolType: policy.toolName, size: 16 }) }),
31987
+ const handleChange = (level) => {
31988
+ if (level) onPermissionChange(categoryId, policy.id, level);
31989
+ };
31990
+ return /* @__PURE__ */ jsxs197("div", { className: "bg-ods-bg border-b last:border-b-0 border-ods-border flex gap-[var(--spacing-system-m)] items-start md:items-center px-[var(--spacing-system-m)] py-[var(--spacing-system-sf)]", children: [
31991
+ /* @__PURE__ */ jsx253("div", { className: "bg-ods-bg border border-ods-border rounded-md flex items-center justify-center w-8 h-8 shrink-0", children: /* @__PURE__ */ jsx253(ToolIcon, { toolType: policy.toolName, size: 16 }) }),
31959
31992
  /* @__PURE__ */ jsxs197("div", { className: "flex-1 flex flex-col min-w-0", children: [
31960
- /* @__PURE__ */ jsx253("p", { className: "text-h6 text-ods-text-primary truncate", title: policy.name, children: policy.name }),
31961
- /* @__PURE__ */ jsx253("p", { className: "text-code text-ods-text-secondary break-all", children: policy.commandPattern })
31962
- ] }),
31963
- editMode ? /* @__PURE__ */ jsxs197(DropdownMenu, { children: [
31964
- /* @__PURE__ */ jsx253(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx253(
31965
- Button,
31993
+ /* @__PURE__ */ jsx253("p", { className: "text-h4 text-ods-text-primary truncate", title: policy.name, children: policy.name }),
31994
+ /* @__PURE__ */ jsx253("p", { className: "text-h6 text-ods-text-secondary break-all", children: policy.commandPattern }),
31995
+ editMode ? /* @__PURE__ */ jsx253("div", { className: "md:hidden mt-[var(--spacing-system-xsf)]", children: /* @__PURE__ */ jsx253(
31996
+ ApprovalLevelDropdown,
31966
31997
  {
31967
- variant: "outline",
31968
- rightIcon: /* @__PURE__ */ jsx253(ChevronDown8, { className: "h-6 w-6 text-ods-text-secondary" }),
31969
- className: "md:!text-sm bg-ods-card border border-ods-border rounded-md flex gap-2 items-center justify-between !px-2 py-2 w-[180px] hover:bg-ods-bg-hover transition-colors text-ods-text-primary h-auto",
31970
- children: getApprovalLevelLabel(policy.approvalLevel, editMode)
31998
+ value: policy.approvalLevel,
31999
+ onChange: handleChange,
32000
+ triggerClassName: "w-full",
32001
+ contentClassName: "w-[180px]"
31971
32002
  }
31972
- ) }),
31973
- /* @__PURE__ */ jsx253(DropdownMenuContent, { align: "end", className: "w-[180px]", children: approvalLevelOptions.map((option) => /* @__PURE__ */ jsx253(
31974
- DropdownMenuItem,
31975
- {
31976
- onClick: () => onPermissionChange(categoryId, policy.id, option.value),
31977
- className: "text-h6",
31978
- children: option.label
31979
- },
31980
- option.value
31981
- )) })
31982
- ] }) : policy.approvalLevel ? /* @__PURE__ */ jsx253("div", { className: "px-3 py-2 w-[180px]", children: /* @__PURE__ */ jsx253("span", { className: "text-h6 text-ods-text-primary", children: getApprovalLevelLabel(policy.approvalLevel, editMode) }) }) : /* @__PURE__ */ jsx253("div", { className: "px-3 py-2 w-[180px]" })
32003
+ ) }) : policy.approvalLevel ? /* @__PURE__ */ jsx253("span", { className: "md:hidden text-h4 text-ods-text-primary", children: getApprovalLevelLabel(policy.approvalLevel) }) : null
32004
+ ] }),
32005
+ /* @__PURE__ */ jsx253("div", { className: "hidden md:block shrink-0", children: editMode ? /* @__PURE__ */ jsx253(
32006
+ ApprovalLevelDropdown,
32007
+ {
32008
+ value: policy.approvalLevel,
32009
+ onChange: handleChange,
32010
+ triggerClassName: "w-[180px]",
32011
+ contentClassName: "w-[180px]"
32012
+ }
32013
+ ) : /* @__PURE__ */ jsx253("div", { className: "px-[var(--spacing-system-sf)] py-[var(--spacing-system-xsf)] w-[180px]", children: policy.approvalLevel && /* @__PURE__ */ jsx253("span", { className: "text-h4 text-ods-text-primary", children: getApprovalLevelLabel(policy.approvalLevel) }) }) })
31983
32014
  ] });
31984
32015
  };
31985
32016
  var useAnimatedHeight = (isExpanded) => {
@@ -31996,69 +32027,52 @@ var useAnimatedHeight = (isExpanded) => {
31996
32027
  var CategorySection = ({
31997
32028
  category,
31998
32029
  editMode,
31999
- onCategoryToggle,
32000
- onGlobalPermissionChange,
32030
+ isExpanded,
32031
+ bulkLevel,
32032
+ onToggle,
32033
+ onBulkLevelChange,
32001
32034
  onPolicyPermissionChange
32002
32035
  }) => {
32003
- const { contentRef, height } = useAnimatedHeight(category.isExpanded);
32036
+ const { contentRef, height } = useAnimatedHeight(isExpanded);
32037
+ const handleBulkChange = (level) => onBulkLevelChange(category.id, level);
32004
32038
  return /* @__PURE__ */ jsxs197(Fragment43, { children: [
32005
32039
  /* @__PURE__ */ jsxs197(
32006
32040
  "div",
32007
32041
  {
32008
- className: "bg-ods-card border-t border-ods-border flex gap-4 items-center pl-4 pr-2 py-3 cursor-pointer hover:bg-ods-bg-hover transition-colors",
32009
- onClick: () => onCategoryToggle(category.id),
32042
+ className: "bg-ods-card border-t first:border-t-0 border-ods-border flex gap-[var(--spacing-system-m)] items-center pl-[var(--spacing-system-m)] pr-[var(--spacing-system-xsf)] py-[var(--spacing-system-s)] cursor-pointer hover:bg-ods-bg-hover transition-colors",
32043
+ onClick: () => onToggle(category.id),
32010
32044
  children: [
32011
- /* @__PURE__ */ jsx253("div", { className: "bg-ods-bg border border-ods-border rounded-md flex items-center justify-center w-8 h-8", children: /* @__PURE__ */ jsx253("div", { className: "text-ods-text-secondary", children: category.icon }) }),
32012
- /* @__PURE__ */ jsxs197("div", { className: "flex-1 flex flex-col", children: [
32013
- /* @__PURE__ */ jsx253("p", { className: "md:!text-sm font-medium text-ods-text-primary", children: category.name }),
32045
+ /* @__PURE__ */ jsx253("div", { className: "bg-ods-bg border border-ods-border rounded-md flex items-center justify-center w-8 h-8 shrink-0", children: /* @__PURE__ */ jsx253("div", { className: "text-ods-text-secondary", children: category.icon ?? /* @__PURE__ */ jsx253(Shield2, { className: "w-4 h-4" }) }) }),
32046
+ /* @__PURE__ */ jsxs197("div", { className: "flex-1 flex flex-col min-w-0", children: [
32047
+ /* @__PURE__ */ jsx253("p", { className: "text-h4 text-ods-text-primary truncate", title: category.name, children: category.name }),
32014
32048
  /* @__PURE__ */ jsxs197("p", { className: "text-h6 text-ods-text-secondary", children: [
32015
- category.configurationsCount,
32049
+ category.policies.length,
32016
32050
  " Configurations"
32017
- ] })
32018
- ] }),
32019
- editMode ? /* @__PURE__ */ jsx253("div", { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxs197(DropdownMenu, { children: [
32020
- /* @__PURE__ */ jsx253(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx253(
32021
- Button,
32051
+ ] }),
32052
+ editMode && /* @__PURE__ */ jsx253("div", { className: "md:hidden mt-[var(--spacing-system-xsf)]", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx253(
32053
+ ApprovalLevelDropdown,
32022
32054
  {
32023
- variant: "outline",
32024
- rightIcon: /* @__PURE__ */ jsx253(ChevronDown8, { className: "h-6 w-6 text-ods-text-secondary" }),
32025
- className: "md:!text-sm bg-ods-card border border-ods-border rounded-md flex gap-2 items-center justify-between !px-2 py-2 w-[256px] hover:bg-ods-bg-hover transition-colors h-auto",
32026
- children: /* @__PURE__ */ jsx253("span", { className: cn(
32027
- "md:!text-sm font-medium",
32028
- category.globalPermission ? "text-ods-text-primary" : "text-ods-text-secondary"
32029
- ), children: getApprovalLevelLabel(category.globalPermission, editMode) })
32055
+ value: bulkLevel,
32056
+ onChange: handleBulkChange,
32057
+ allowClear: true,
32058
+ triggerClassName: "w-full",
32059
+ contentClassName: "w-[256px]"
32030
32060
  }
32031
- ) }),
32032
- /* @__PURE__ */ jsxs197(DropdownMenuContent, { align: "end", className: "w-[256px]", children: [
32033
- /* @__PURE__ */ jsx253(
32034
- DropdownMenuItem,
32035
- {
32036
- onClick: () => onGlobalPermissionChange(category.id, void 0),
32037
- className: "md:!text-sm",
32038
- children: "Clear Global Permission"
32039
- }
32040
- ),
32041
- approvalLevelOptions.map((option) => /* @__PURE__ */ jsx253(
32042
- DropdownMenuItem,
32043
- {
32044
- onClick: () => onGlobalPermissionChange(category.id, option.value),
32045
- className: "md:!text-sm",
32046
- children: option.label
32047
- },
32048
- option.value
32049
- ))
32050
- ] })
32051
- ] }) }) : category.globalPermission ? /* @__PURE__ */ jsx253(
32052
- "div",
32061
+ ) })
32062
+ ] }),
32063
+ editMode ? /* @__PURE__ */ jsx253("div", { className: "hidden md:block shrink-0", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx253(
32064
+ ApprovalLevelDropdown,
32053
32065
  {
32054
- className: "px-3 py-2 w-[256px]",
32055
- onClick: (e) => e.stopPropagation(),
32056
- children: /* @__PURE__ */ jsx253("span", { className: "md:!text-sm font-medium text-ods-text-primary", children: getApprovalLevelLabel(category.globalPermission, editMode) })
32066
+ value: bulkLevel,
32067
+ onChange: handleBulkChange,
32068
+ allowClear: true,
32069
+ triggerClassName: "w-[256px]",
32070
+ contentClassName: "w-[256px]"
32057
32071
  }
32058
- ) : /* @__PURE__ */ jsx253(
32072
+ ) }) : /* @__PURE__ */ jsx253(
32059
32073
  "div",
32060
32074
  {
32061
- className: "px-3 py-2 w-[256px]",
32075
+ className: "hidden md:block px-[var(--spacing-system-sf)] py-[var(--spacing-system-xsf)] w-[256px] shrink-0",
32062
32076
  onClick: (e) => e.stopPropagation()
32063
32077
  }
32064
32078
  ),
@@ -32069,19 +32083,19 @@ var CategorySection = ({
32069
32083
  variant: "transparent",
32070
32084
  onClick: (e) => {
32071
32085
  e.stopPropagation();
32072
- onCategoryToggle(category.id);
32086
+ onToggle(category.id);
32073
32087
  },
32074
32088
  leftIcon: /* @__PURE__ */ jsx253(
32075
32089
  ChevronDown8,
32076
32090
  {
32077
32091
  className: cn(
32078
32092
  "h-6 w-6 text-ods-text-primary transition-transform duration-300",
32079
- category.isExpanded && "rotate-180"
32093
+ isExpanded && "rotate-180"
32080
32094
  )
32081
32095
  }
32082
32096
  ),
32083
- className: "rounded-md h-auto w-auto",
32084
- "aria-label": category.isExpanded ? "Collapse" : "Expand"
32097
+ className: "rounded-md h-auto w-auto shrink-0",
32098
+ "aria-label": isExpanded ? "Collapse" : "Expand"
32085
32099
  }
32086
32100
  )
32087
32101
  ]
@@ -32097,9 +32111,9 @@ var CategorySection = ({
32097
32111
  },
32098
32112
  className: cn(
32099
32113
  "overflow-hidden",
32100
- category.isExpanded ? "opacity-100" : "opacity-0"
32114
+ isExpanded ? "opacity-100" : "opacity-0"
32101
32115
  ),
32102
- children: /* @__PURE__ */ jsx253("div", { className: "px-4 pb-4 pt-0", children: /* @__PURE__ */ jsx253("div", { className: "border border-ods-border rounded-md overflow-hidden", children: category.policies.map((policy) => /* @__PURE__ */ jsx253(
32116
+ children: /* @__PURE__ */ jsx253("div", { className: "px-[var(--spacing-system-mf)] pb-[var(--spacing-system-mf)] pt-0", children: /* @__PURE__ */ jsx253("div", { className: "border border-ods-border rounded-md overflow-hidden", children: category.policies.map((policy) => /* @__PURE__ */ jsx253(
32103
32117
  PolicyRow,
32104
32118
  {
32105
32119
  policy,
@@ -32116,11 +32130,29 @@ var CategorySection = ({
32116
32130
  var PolicyConfigurationPanel = ({
32117
32131
  categories,
32118
32132
  editMode,
32119
- onCategoryToggle,
32120
- onGlobalPermissionChange,
32121
32133
  onPolicyPermissionChange,
32134
+ onCategoryPermissionChange,
32122
32135
  className
32123
32136
  }) => {
32137
+ const [expandedIds, setExpandedIds] = useState71(/* @__PURE__ */ new Set());
32138
+ const [bulkLevels, setBulkLevels] = useState71({});
32139
+ useEffect52(() => {
32140
+ setBulkLevels({});
32141
+ }, [editMode]);
32142
+ const handleToggle = (categoryId) => {
32143
+ setExpandedIds((prev) => {
32144
+ const next = new Set(prev);
32145
+ if (next.has(categoryId)) next.delete(categoryId);
32146
+ else next.add(categoryId);
32147
+ return next;
32148
+ });
32149
+ };
32150
+ const handleBulkLevelChange = (categoryId, level) => {
32151
+ setBulkLevels((prev) => ({ ...prev, [categoryId]: level }));
32152
+ if (level) {
32153
+ onCategoryPermissionChange(categoryId, level);
32154
+ }
32155
+ };
32124
32156
  return /* @__PURE__ */ jsx253("div", { className: cn(
32125
32157
  "bg-ods-card border border-ods-border rounded-md overflow-hidden",
32126
32158
  className
@@ -32129,8 +32161,10 @@ var PolicyConfigurationPanel = ({
32129
32161
  {
32130
32162
  category,
32131
32163
  editMode,
32132
- onCategoryToggle,
32133
- onGlobalPermissionChange,
32164
+ isExpanded: expandedIds.has(category.id),
32165
+ bulkLevel: bulkLevels[category.id],
32166
+ onToggle: handleToggle,
32167
+ onBulkLevelChange: handleBulkLevelChange,
32134
32168
  onPolicyPermissionChange
32135
32169
  },
32136
32170
  category.id
@@ -54084,4 +54118,4 @@ export {
54084
54118
  LogsList,
54085
54119
  assets
54086
54120
  };
54087
- //# sourceMappingURL=chunk-ZQYFDYWV.js.map
54121
+ //# sourceMappingURL=chunk-NDWIFCLS.js.map