@flamingo-stack/openframe-frontend-core 0.0.442 → 0.0.443

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 (107) 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-UFBUQO7Z.cjs → chunk-323TCNF3.cjs} +18 -18
  4. package/dist/{chunk-UFBUQO7Z.cjs.map → chunk-323TCNF3.cjs.map} +1 -1
  5. package/dist/{chunk-63TSTDME.js → chunk-3ZE55IH6.js} +5 -5
  6. package/dist/{chunk-Y3NFB6HR.js → chunk-5U6OZ5FD.js} +4 -4
  7. package/dist/{chunk-IAZ5AN2E.js → chunk-6IPNXMB7.js} +6 -6
  8. package/dist/{chunk-XMCVUYKC.cjs → chunk-6NO4YYU7.cjs} +12 -12
  9. package/dist/{chunk-XMCVUYKC.cjs.map → chunk-6NO4YYU7.cjs.map} +1 -1
  10. package/dist/{chunk-QO6MCQYE.cjs → chunk-7CZ4MJSI.cjs} +13 -10
  11. package/dist/chunk-7CZ4MJSI.cjs.map +1 -0
  12. package/dist/{chunk-FPE3SQ5D.js → chunk-A7MG4SBL.js} +3 -3
  13. package/dist/{chunk-SM26C2L7.js → chunk-AZQOX2RS.js} +2 -2
  14. package/dist/{chunk-JYI4R25Q.js → chunk-DOVBNECK.js} +3 -3
  15. package/dist/{chunk-7KDR5P23.js → chunk-FQASXKBK.js} +2 -2
  16. package/dist/{chunk-LFWPWIAC.cjs → chunk-H4W3NCR2.cjs} +7 -7
  17. package/dist/{chunk-LFWPWIAC.cjs.map → chunk-H4W3NCR2.cjs.map} +1 -1
  18. package/dist/{chunk-DUQQEQ7G.cjs → chunk-IBIGXER5.cjs} +191 -153
  19. package/dist/chunk-IBIGXER5.cjs.map +1 -0
  20. package/dist/{chunk-IZ6A6K6N.cjs → chunk-KNNSS3CZ.cjs} +15 -15
  21. package/dist/{chunk-IZ6A6K6N.cjs.map → chunk-KNNSS3CZ.cjs.map} +1 -1
  22. package/dist/{chunk-AGV26PUR.js → chunk-LGMRNYTX.js} +3 -3
  23. package/dist/{chunk-YZJUHEPZ.js → chunk-LYYVTI34.js} +5 -5
  24. package/dist/{chunk-TAQMYVO6.cjs → chunk-M6XUXQ5Q.cjs} +40 -40
  25. package/dist/{chunk-TAQMYVO6.cjs.map → chunk-M6XUXQ5Q.cjs.map} +1 -1
  26. package/dist/{chunk-2BTDPDME.js → chunk-MG4AMIFX.js} +4 -1
  27. package/dist/chunk-MG4AMIFX.js.map +1 -0
  28. package/dist/{chunk-ZQYFDYWV.js → chunk-NQODKJ2F.js} +121 -83
  29. package/dist/{chunk-ZQYFDYWV.js.map → chunk-NQODKJ2F.js.map} +1 -1
  30. package/dist/{chunk-KUXGQ2FQ.cjs → chunk-OHKKI6EF.cjs} +32 -32
  31. package/dist/{chunk-KUXGQ2FQ.cjs.map → chunk-OHKKI6EF.cjs.map} +1 -1
  32. package/dist/{chunk-JOH5D76X.cjs → chunk-PRJFSF4W.cjs} +73 -73
  33. package/dist/{chunk-JOH5D76X.cjs.map → chunk-PRJFSF4W.cjs.map} +1 -1
  34. package/dist/{chunk-W3JZXLJ2.js → chunk-PVMPBWKX.js} +6 -6
  35. package/dist/{chunk-7KNOHGMI.js → chunk-RQVR7I73.js} +2 -2
  36. package/dist/{chunk-7QP65IE4.cjs → chunk-RYKANQE6.cjs} +5 -5
  37. package/dist/{chunk-7QP65IE4.cjs.map → chunk-RYKANQE6.cjs.map} +1 -1
  38. package/dist/{chunk-QAG357PE.js → chunk-UXJ47OJF.js} +2 -2
  39. package/dist/{chunk-JNC4LVD6.cjs → chunk-VACXEUGF.cjs} +29 -29
  40. package/dist/{chunk-JNC4LVD6.cjs.map → chunk-VACXEUGF.cjs.map} +1 -1
  41. package/dist/{chunk-LUKRPHEW.cjs → chunk-YPFQ2UIH.cjs} +73 -73
  42. package/dist/{chunk-LUKRPHEW.cjs.map → chunk-YPFQ2UIH.cjs.map} +1 -1
  43. package/dist/{chunk-IPEIOR77.cjs → chunk-ZVAAIP5Y.cjs} +40 -40
  44. package/dist/{chunk-IPEIOR77.cjs.map → chunk-ZVAAIP5Y.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/index.cjs +3 -3
  74. package/dist/components/ui/index.js +2 -2
  75. package/dist/hooks/index.cjs +2 -2
  76. package/dist/hooks/index.js +1 -1
  77. package/dist/index.cjs +3 -3
  78. package/dist/index.js +2 -2
  79. package/dist/types/permissions.d.ts +9 -6
  80. package/dist/types/permissions.d.ts.map +1 -1
  81. package/dist/utils/embed-authed-fetch.d.ts +19 -3
  82. package/dist/utils/embed-authed-fetch.d.ts.map +1 -1
  83. package/dist/utils/index.cjs +3 -0
  84. package/dist/utils/index.cjs.map +1 -1
  85. package/dist/utils/index.js +3 -0
  86. package/dist/utils/index.js.map +1 -1
  87. package/package.json +1 -1
  88. package/src/components/features/policy-configuration-panel.tsx +185 -122
  89. package/src/stories/PolicyConfigurationPanel.stories.tsx +254 -0
  90. package/src/types/permissions.ts +10 -7
  91. package/src/utils/__tests__/embed-authed-fetch.test.ts +39 -0
  92. package/src/utils/embed-authed-fetch.ts +27 -3
  93. package/dist/chunk-2BTDPDME.js.map +0 -1
  94. package/dist/chunk-DUQQEQ7G.cjs.map +0 -1
  95. package/dist/chunk-QO6MCQYE.cjs.map +0 -1
  96. /package/dist/{chunk-63TSTDME.js.map → chunk-3ZE55IH6.js.map} +0 -0
  97. /package/dist/{chunk-Y3NFB6HR.js.map → chunk-5U6OZ5FD.js.map} +0 -0
  98. /package/dist/{chunk-IAZ5AN2E.js.map → chunk-6IPNXMB7.js.map} +0 -0
  99. /package/dist/{chunk-FPE3SQ5D.js.map → chunk-A7MG4SBL.js.map} +0 -0
  100. /package/dist/{chunk-SM26C2L7.js.map → chunk-AZQOX2RS.js.map} +0 -0
  101. /package/dist/{chunk-JYI4R25Q.js.map → chunk-DOVBNECK.js.map} +0 -0
  102. /package/dist/{chunk-7KDR5P23.js.map → chunk-FQASXKBK.js.map} +0 -0
  103. /package/dist/{chunk-AGV26PUR.js.map → chunk-LGMRNYTX.js.map} +0 -0
  104. /package/dist/{chunk-YZJUHEPZ.js.map → chunk-LYYVTI34.js.map} +0 -0
  105. /package/dist/{chunk-W3JZXLJ2.js.map → chunk-PVMPBWKX.js.map} +0 -0
  106. /package/dist/{chunk-7KNOHGMI.js.map → chunk-RQVR7I73.js.map} +0 -0
  107. /package/dist/{chunk-QAG357PE.js.map → chunk-UXJ47OJF.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,
@@ -31937,7 +31937,7 @@ function ViewToggle({
31937
31937
  // src/components/features/policy-configuration-panel.tsx
31938
31938
  init_cn();
31939
31939
  import { useRef as useRef37, useEffect as useEffect52, useState as useState71 } from "react";
31940
- import { ChevronDown as ChevronDown8 } from "lucide-react";
31940
+ import { ChevronDown as ChevronDown8, Shield as Shield2 } from "lucide-react";
31941
31941
  init_button2();
31942
31942
  import { Fragment as Fragment43, jsx as jsx253, jsxs as jsxs197 } from "react/jsx-runtime";
31943
31943
  var approvalLevelOptions = [
@@ -31953,33 +31953,68 @@ var getApprovalLevelLabel = (level, editMode = false) => {
31953
31953
  const option = approvalLevelOptions.find((opt) => opt.value === level);
31954
31954
  return option?.label || level;
31955
31955
  };
31956
+ var ApprovalLevelDropdown = ({ value, onChange, allowClear = false, triggerClassName, contentClassName }) => /* @__PURE__ */ jsxs197(DropdownMenu, { children: [
31957
+ /* @__PURE__ */ jsx253(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx253(
31958
+ Button,
31959
+ {
31960
+ variant: "outline",
31961
+ rightIcon: /* @__PURE__ */ jsx253(ChevronDown8, { className: "h-6 w-6 text-ods-text-secondary" }),
31962
+ className: cn(
31963
+ "!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",
31964
+ value ? "text-ods-text-primary" : "text-ods-text-secondary",
31965
+ triggerClassName
31966
+ ),
31967
+ children: getApprovalLevelLabel(value, true)
31968
+ }
31969
+ ) }),
31970
+ /* @__PURE__ */ jsxs197(DropdownMenuContent, { align: "end", className: contentClassName, children: [
31971
+ allowClear && /* @__PURE__ */ jsx253(DropdownMenuItem, { onClick: () => onChange(void 0), className: "text-h6", children: "Clear Global Permission" }),
31972
+ approvalLevelOptions.map((option) => /* @__PURE__ */ jsx253(
31973
+ DropdownMenuItem,
31974
+ {
31975
+ onClick: () => onChange(option.value),
31976
+ className: "text-h6",
31977
+ children: option.label
31978
+ },
31979
+ option.value
31980
+ ))
31981
+ ] })
31982
+ ] });
31956
31983
  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 }) }),
31984
+ const handleChange = (level) => {
31985
+ if (level) onPermissionChange(categoryId, policy.id, level);
31986
+ };
31987
+ 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: [
31988
+ /* @__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
31989
  /* @__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,
31990
+ /* @__PURE__ */ jsx253("p", { className: "text-h4 text-ods-text-primary truncate", title: policy.name, children: policy.name }),
31991
+ /* @__PURE__ */ jsx253(
31992
+ "p",
31966
31993
  {
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)
31994
+ className: "text-h6 text-ods-text-secondary truncate md:whitespace-normal md:break-all",
31995
+ title: policy.commandPattern,
31996
+ children: policy.commandPattern
31971
31997
  }
31972
- ) }),
31973
- /* @__PURE__ */ jsx253(DropdownMenuContent, { align: "end", className: "w-[180px]", children: approvalLevelOptions.map((option) => /* @__PURE__ */ jsx253(
31974
- DropdownMenuItem,
31998
+ ),
31999
+ editMode ? /* @__PURE__ */ jsx253("div", { className: "md:hidden mt-[var(--spacing-system-xsf)]", children: /* @__PURE__ */ jsx253(
32000
+ ApprovalLevelDropdown,
31975
32001
  {
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]" })
32002
+ value: policy.approvalLevel,
32003
+ onChange: handleChange,
32004
+ triggerClassName: "w-full",
32005
+ contentClassName: "w-[180px]"
32006
+ }
32007
+ ) }) : policy.approvalLevel ? /* @__PURE__ */ jsx253("span", { className: "md:hidden text-h4 text-ods-text-primary", children: getApprovalLevelLabel(policy.approvalLevel) }) : null
32008
+ ] }),
32009
+ /* @__PURE__ */ jsx253("div", { className: "hidden md:block shrink-0", children: editMode ? /* @__PURE__ */ jsx253(
32010
+ ApprovalLevelDropdown,
32011
+ {
32012
+ value: policy.approvalLevel,
32013
+ onChange: handleChange,
32014
+ triggerClassName: "w-[180px]",
32015
+ contentClassName: "w-[180px]"
32016
+ }
32017
+ ) : /* @__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
32018
  ] });
31984
32019
  };
31985
32020
  var useAnimatedHeight = (isExpanded) => {
@@ -31996,69 +32031,52 @@ var useAnimatedHeight = (isExpanded) => {
31996
32031
  var CategorySection = ({
31997
32032
  category,
31998
32033
  editMode,
31999
- onCategoryToggle,
32000
- onGlobalPermissionChange,
32034
+ isExpanded,
32035
+ bulkLevel,
32036
+ onToggle,
32037
+ onBulkLevelChange,
32001
32038
  onPolicyPermissionChange
32002
32039
  }) => {
32003
- const { contentRef, height } = useAnimatedHeight(category.isExpanded);
32040
+ const { contentRef, height } = useAnimatedHeight(isExpanded);
32041
+ const handleBulkChange = (level) => onBulkLevelChange(category.id, level);
32004
32042
  return /* @__PURE__ */ jsxs197(Fragment43, { children: [
32005
32043
  /* @__PURE__ */ jsxs197(
32006
32044
  "div",
32007
32045
  {
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),
32046
+ 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",
32047
+ onClick: () => onToggle(category.id),
32010
32048
  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 }),
32049
+ /* @__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" }) }) }),
32050
+ /* @__PURE__ */ jsxs197("div", { className: "flex-1 flex flex-col min-w-0", children: [
32051
+ /* @__PURE__ */ jsx253("p", { className: "text-h4 text-ods-text-primary truncate", title: category.name, children: category.name }),
32014
32052
  /* @__PURE__ */ jsxs197("p", { className: "text-h6 text-ods-text-secondary", children: [
32015
- category.configurationsCount,
32053
+ category.policies.length,
32016
32054
  " 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,
32055
+ ] }),
32056
+ editMode && /* @__PURE__ */ jsx253("div", { className: "md:hidden mt-[var(--spacing-system-xsf)]", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx253(
32057
+ ApprovalLevelDropdown,
32022
32058
  {
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) })
32059
+ value: bulkLevel,
32060
+ onChange: handleBulkChange,
32061
+ allowClear: true,
32062
+ triggerClassName: "w-full",
32063
+ contentClassName: "w-[256px]"
32030
32064
  }
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",
32065
+ ) })
32066
+ ] }),
32067
+ editMode ? /* @__PURE__ */ jsx253("div", { className: "hidden md:block shrink-0", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx253(
32068
+ ApprovalLevelDropdown,
32053
32069
  {
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) })
32070
+ value: bulkLevel,
32071
+ onChange: handleBulkChange,
32072
+ allowClear: true,
32073
+ triggerClassName: "w-[256px]",
32074
+ contentClassName: "w-[256px]"
32057
32075
  }
32058
- ) : /* @__PURE__ */ jsx253(
32076
+ ) }) : /* @__PURE__ */ jsx253(
32059
32077
  "div",
32060
32078
  {
32061
- className: "px-3 py-2 w-[256px]",
32079
+ className: "hidden md:block px-[var(--spacing-system-sf)] py-[var(--spacing-system-xsf)] w-[256px] shrink-0",
32062
32080
  onClick: (e) => e.stopPropagation()
32063
32081
  }
32064
32082
  ),
@@ -32069,19 +32087,19 @@ var CategorySection = ({
32069
32087
  variant: "transparent",
32070
32088
  onClick: (e) => {
32071
32089
  e.stopPropagation();
32072
- onCategoryToggle(category.id);
32090
+ onToggle(category.id);
32073
32091
  },
32074
32092
  leftIcon: /* @__PURE__ */ jsx253(
32075
32093
  ChevronDown8,
32076
32094
  {
32077
32095
  className: cn(
32078
32096
  "h-6 w-6 text-ods-text-primary transition-transform duration-300",
32079
- category.isExpanded && "rotate-180"
32097
+ isExpanded && "rotate-180"
32080
32098
  )
32081
32099
  }
32082
32100
  ),
32083
- className: "rounded-md h-auto w-auto",
32084
- "aria-label": category.isExpanded ? "Collapse" : "Expand"
32101
+ className: "rounded-md h-auto w-auto shrink-0",
32102
+ "aria-label": isExpanded ? "Collapse" : "Expand"
32085
32103
  }
32086
32104
  )
32087
32105
  ]
@@ -32097,9 +32115,9 @@ var CategorySection = ({
32097
32115
  },
32098
32116
  className: cn(
32099
32117
  "overflow-hidden",
32100
- category.isExpanded ? "opacity-100" : "opacity-0"
32118
+ isExpanded ? "opacity-100" : "opacity-0"
32101
32119
  ),
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(
32120
+ 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
32121
  PolicyRow,
32104
32122
  {
32105
32123
  policy,
@@ -32116,11 +32134,29 @@ var CategorySection = ({
32116
32134
  var PolicyConfigurationPanel = ({
32117
32135
  categories,
32118
32136
  editMode,
32119
- onCategoryToggle,
32120
- onGlobalPermissionChange,
32121
32137
  onPolicyPermissionChange,
32138
+ onCategoryPermissionChange,
32122
32139
  className
32123
32140
  }) => {
32141
+ const [expandedIds, setExpandedIds] = useState71(/* @__PURE__ */ new Set());
32142
+ const [bulkLevels, setBulkLevels] = useState71({});
32143
+ useEffect52(() => {
32144
+ setBulkLevels({});
32145
+ }, [editMode]);
32146
+ const handleToggle = (categoryId) => {
32147
+ setExpandedIds((prev) => {
32148
+ const next = new Set(prev);
32149
+ if (next.has(categoryId)) next.delete(categoryId);
32150
+ else next.add(categoryId);
32151
+ return next;
32152
+ });
32153
+ };
32154
+ const handleBulkLevelChange = (categoryId, level) => {
32155
+ setBulkLevels((prev) => ({ ...prev, [categoryId]: level }));
32156
+ if (level) {
32157
+ onCategoryPermissionChange(categoryId, level);
32158
+ }
32159
+ };
32124
32160
  return /* @__PURE__ */ jsx253("div", { className: cn(
32125
32161
  "bg-ods-card border border-ods-border rounded-md overflow-hidden",
32126
32162
  className
@@ -32129,8 +32165,10 @@ var PolicyConfigurationPanel = ({
32129
32165
  {
32130
32166
  category,
32131
32167
  editMode,
32132
- onCategoryToggle,
32133
- onGlobalPermissionChange,
32168
+ isExpanded: expandedIds.has(category.id),
32169
+ bulkLevel: bulkLevels[category.id],
32170
+ onToggle: handleToggle,
32171
+ onBulkLevelChange: handleBulkLevelChange,
32134
32172
  onPolicyPermissionChange
32135
32173
  },
32136
32174
  category.id
@@ -54084,4 +54122,4 @@ export {
54084
54122
  LogsList,
54085
54123
  assets
54086
54124
  };
54087
- //# sourceMappingURL=chunk-ZQYFDYWV.js.map
54125
+ //# sourceMappingURL=chunk-NQODKJ2F.js.map