@viswa-test/creative-workspace-ui-component 0.0.71 → 0.0.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_commonjsHelpers.js +2 -0
- package/dist/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/_virtual/_tslib.js +1 -1
- package/dist/_virtual/index.js +2 -0
- package/dist/_virtual/index.js.map +1 -0
- package/dist/_virtual/index2.js +2 -0
- package/dist/_virtual/index2.js.map +1 -0
- package/dist/_virtual/index3.js +2 -0
- package/dist/_virtual/index3.js.map +1 -0
- package/dist/_virtual/index4.js +2 -0
- package/dist/_virtual/index4.js.map +1 -0
- package/dist/_virtual/index5.js +2 -0
- package/dist/_virtual/index5.js.map +1 -0
- package/dist/_virtual/react-is.development.js +2 -0
- package/dist/_virtual/react-is.development.js.map +1 -0
- package/dist/_virtual/react-is.development2.js +2 -0
- package/dist/_virtual/react-is.development2.js.map +1 -0
- package/dist/_virtual/react-is.production.js +2 -0
- package/dist/_virtual/react-is.production.js.map +1 -0
- package/dist/_virtual/react-is.production.min.js +2 -0
- package/dist/_virtual/react-is.production.min.js.map +1 -0
- package/dist/cjs/_virtual/_commonjsHelpers.js +2 -0
- package/dist/cjs/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/cjs/_virtual/_tslib.js +1 -1
- package/dist/cjs/_virtual/index.js +2 -0
- package/dist/cjs/_virtual/index.js.map +1 -0
- package/dist/cjs/_virtual/index2.js +2 -0
- package/dist/cjs/_virtual/index2.js.map +1 -0
- package/dist/cjs/_virtual/index3.js +2 -0
- package/dist/cjs/_virtual/index3.js.map +1 -0
- package/dist/cjs/_virtual/index4.js +2 -0
- package/dist/cjs/_virtual/index4.js.map +1 -0
- package/dist/cjs/_virtual/index5.js +2 -0
- package/dist/cjs/_virtual/index5.js.map +1 -0
- package/dist/cjs/_virtual/react-is.development.js +2 -0
- package/dist/cjs/_virtual/react-is.development.js.map +1 -0
- package/dist/cjs/_virtual/react-is.development2.js +2 -0
- package/dist/cjs/_virtual/react-is.development2.js.map +1 -0
- package/dist/cjs/_virtual/react-is.production.js +2 -0
- package/dist/cjs/_virtual/react-is.production.js.map +1 -0
- package/dist/cjs/_virtual/react-is.production.min.js +2 -0
- package/dist/cjs/_virtual/react-is.production.min.js.map +1 -0
- package/dist/cjs/components/AssignReminders/AssignReminderLevels.js +1 -1
- package/dist/cjs/components/AssignReminders/AssignReminderWrapper.js +1 -1
- package/dist/cjs/components/AssignReminders/ManageReminders.js +1 -1
- package/dist/cjs/components/AssignReminders/components/AssignLevelsDatePicker.js +1 -1
- package/dist/cjs/components/AssignReminders/components/CustomDatePicker.js +1 -1
- package/dist/cjs/components/AssignReminders/components/ReviewStatus.js +1 -1
- package/dist/cjs/components/AssignReminders/utils/approvalDateValidation.js +2 -0
- package/dist/cjs/components/AssignReminders/utils/approvalDateValidation.js.map +1 -0
- package/dist/cjs/components/PromptEditor/PromptEditor.js +2 -0
- package/dist/cjs/components/PromptEditor/PromptEditor.js.map +1 -0
- package/dist/cjs/components/ScopeTree/TreeTooltip.js +1 -1
- package/dist/cjs/features/lsc-guidelines/LscGuidelines.js +1 -1
- package/dist/cjs/features/lsc-guidelines/components/DataSourceCard.js +2 -0
- package/dist/cjs/features/lsc-guidelines/components/DataSourceCard.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/components/GuidelineAttachmentIcon.js +1 -1
- package/dist/cjs/features/lsc-guidelines/components/GuidelineCardMenu.js +1 -1
- package/dist/cjs/features/lsc-guidelines/components/GuidelineCart.js +1 -1
- package/dist/cjs/features/lsc-guidelines/components/GuidelineCartItem.js +1 -1
- package/dist/cjs/features/lsc-guidelines/components/GuidelineCreateForm.js +2 -0
- package/dist/cjs/features/lsc-guidelines/components/GuidelineCreateForm.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/components/GuidelineEditorWrapper.js +2 -0
- package/dist/cjs/features/lsc-guidelines/components/GuidelineEditorWrapper.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/components/GuidelineFilterPanel.js +2 -0
- package/dist/cjs/features/lsc-guidelines/components/GuidelineFilterPanel.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/components/GuidelineLandingPage.js +1 -1
- package/dist/cjs/features/lsc-guidelines/components/GuidelineLibrary.js +1 -1
- package/dist/cjs/features/lsc-guidelines/components/GuidelineLibraryCard.js +1 -1
- package/dist/cjs/features/lsc-guidelines/components/GuidelinePopoverCart.js +1 -1
- package/dist/cjs/features/lsc-guidelines/components/GuidelineTooltip.js +1 -1
- package/dist/cjs/features/lsc-guidelines/components/GuidelineWorkspaceHostProvider.js +2 -0
- package/dist/cjs/features/lsc-guidelines/components/GuidelineWorkspaceHostProvider.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/components/GuidelineWorkspacePage.js +2 -0
- package/dist/cjs/features/lsc-guidelines/components/GuidelineWorkspacePage.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/components/LearningManagementWrapper.js +2 -0
- package/dist/cjs/features/lsc-guidelines/components/LearningManagementWrapper.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/constants.js +1 -1
- package/dist/cjs/features/lsc-guidelines/hooks/useClearGuidelineCartOnReload.js +2 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useClearGuidelineCartOnReload.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useDebounce.js +2 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useDebounce.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useGuidelineCartMemstoreSync.js +2 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useGuidelineCartMemstoreSync.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useGuidelineDataCart.js +2 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useGuidelineDataCart.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useGuidelineSelection.js +1 -1
- package/dist/cjs/features/lsc-guidelines/hooks/useGuidelineWorkspaceLegacyBridge.js +2 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useGuidelineWorkspaceLegacyBridge.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useInstantLearningGuidelineCart.js +2 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useInstantLearningGuidelineCart.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useInstantLearningGuidelines.js +2 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useInstantLearningGuidelines.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useMemstoreGuidelineCart.js +2 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useMemstoreGuidelineCart.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useSavedGuidelines.js +2 -0
- package/dist/cjs/features/lsc-guidelines/hooks/useSavedGuidelines.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/index.js +1 -1
- package/dist/cjs/features/lsc-guidelines/queryClient.js +2 -0
- package/dist/cjs/features/lsc-guidelines/queryClient.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/services/guideline.api.js +2 -0
- package/dist/cjs/features/lsc-guidelines/services/guideline.api.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/services/guideline.cart.api.js +2 -0
- package/dist/cjs/features/lsc-guidelines/services/guideline.cart.api.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/services/guideline.content.js +2 -0
- package/dist/cjs/features/lsc-guidelines/services/guideline.content.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/services/guideline.runtime.config.js +2 -0
- package/dist/cjs/features/lsc-guidelines/services/guideline.runtime.config.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/services/guideline.session.js +2 -0
- package/dist/cjs/features/lsc-guidelines/services/guideline.session.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/services/instant-learning.api.js +2 -0
- package/dist/cjs/features/lsc-guidelines/services/instant-learning.api.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/services/instant-learning.wishlist.js +2 -0
- package/dist/cjs/features/lsc-guidelines/services/instant-learning.wishlist.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/theme.css +6 -0
- package/dist/cjs/features/lsc-guidelines/utils/addContextHelpers.js +2 -0
- package/dist/cjs/features/lsc-guidelines/utils/addContextHelpers.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/utils/cn.js +2 -0
- package/dist/cjs/features/lsc-guidelines/utils/cn.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/utils/guidelineFiles.js +2 -0
- package/dist/cjs/features/lsc-guidelines/utils/guidelineFiles.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/utils/guidelineOverlay.js +2 -0
- package/dist/cjs/features/lsc-guidelines/utils/guidelineOverlay.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/utils/guidelineSort.js +2 -0
- package/dist/cjs/features/lsc-guidelines/utils/guidelineSort.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/utils/microfrontend.js +2 -0
- package/dist/cjs/features/lsc-guidelines/utils/microfrontend.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/utils/session.js +2 -0
- package/dist/cjs/features/lsc-guidelines/utils/session.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/utils/url.js +2 -0
- package/dist/cjs/features/lsc-guidelines/utils/url.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/utils.js +1 -1
- package/dist/cjs/features/lsc-guidelines/workspace/GuidelineWorkspace.js +2 -0
- package/dist/cjs/features/lsc-guidelines/workspace/GuidelineWorkspace.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/workspace/GuidelineWorkspaceHydrator.js +2 -0
- package/dist/cjs/features/lsc-guidelines/workspace/GuidelineWorkspaceHydrator.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/workspace/GuidelineWorkspaceProvider.js +2 -0
- package/dist/cjs/features/lsc-guidelines/workspace/GuidelineWorkspaceProvider.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/workspace/useGuidelineWorkspace.js +2 -0
- package/dist/cjs/features/lsc-guidelines/workspace/useGuidelineWorkspace.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/workspace/workspace.context.js +2 -0
- package/dist/cjs/features/lsc-guidelines/workspace/workspace.context.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/workspace/workspace.runtime.js +2 -0
- package/dist/cjs/features/lsc-guidelines/workspace/workspace.runtime.js.map +1 -0
- package/dist/cjs/features/lsc-guidelines/workspace/workspace.selectors.js +2 -0
- package/dist/cjs/features/lsc-guidelines/workspace/workspace.selectors.js.map +1 -0
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js +2 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js.map +1 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/extends.js +2 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/extends.js.map +1 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js +2 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js.map +1 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js +2 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +1 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js +2 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js.map +1 -0
- package/dist/cjs/node_modules/@emotion/hash/dist/emotion-hash.esm.js +2 -0
- package/dist/cjs/node_modules/@emotion/hash/dist/emotion-hash.esm.js.map +1 -0
- package/dist/cjs/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js +2 -0
- package/dist/cjs/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js.map +1 -0
- package/dist/cjs/node_modules/@emotion/serialize/dist/emotion-serialize.esm.js +2 -0
- package/dist/cjs/node_modules/@emotion/serialize/dist/emotion-serialize.esm.js.map +1 -0
- package/dist/cjs/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js +2 -0
- package/dist/cjs/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js.map +1 -0
- package/dist/cjs/node_modules/@mui/private-theming/esm/ThemeProvider/ThemeProvider.js +2 -0
- package/dist/cjs/node_modules/@mui/private-theming/esm/ThemeProvider/ThemeProvider.js.map +1 -0
- package/dist/cjs/node_modules/@mui/private-theming/esm/ThemeProvider/nested.js +2 -0
- package/dist/cjs/node_modules/@mui/private-theming/esm/ThemeProvider/nested.js.map +1 -0
- package/dist/cjs/node_modules/@mui/private-theming/esm/useTheme/ThemeContext.js +2 -0
- package/dist/cjs/node_modules/@mui/private-theming/esm/useTheme/ThemeContext.js.map +1 -0
- package/dist/cjs/node_modules/@mui/private-theming/esm/useTheme/useTheme.js +2 -0
- package/dist/cjs/node_modules/@mui/private-theming/esm/useTheme/useTheme.js.map +1 -0
- package/dist/cjs/node_modules/@mui/private-theming/node_modules/@mui/utils/esm/exactProp/exactProp.js +2 -0
- package/dist/cjs/node_modules/@mui/private-theming/node_modules/@mui/utils/esm/exactProp/exactProp.js.map +1 -0
- package/dist/cjs/node_modules/@mui/styled-engine/esm/GlobalStyles/GlobalStyles.js +2 -0
- package/dist/cjs/node_modules/@mui/styled-engine/esm/GlobalStyles/GlobalStyles.js.map +1 -0
- package/dist/cjs/node_modules/@mui/styled-engine/esm/StyledEngineProvider/StyledEngineProvider.js +2 -0
- package/dist/cjs/node_modules/@mui/styled-engine/esm/StyledEngineProvider/StyledEngineProvider.js.map +1 -0
- package/dist/cjs/node_modules/@mui/styled-engine/esm/index.js +9 -0
- package/dist/cjs/node_modules/@mui/styled-engine/esm/index.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Box/Box.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Box/Box.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Box/boxClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Box/boxClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Container/Container.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Container/Container.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Container/containerClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Container/containerClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Container/createContainer.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Container/createContainer.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/DefaultPropsProvider/DefaultPropsProvider.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/DefaultPropsProvider/DefaultPropsProvider.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/GlobalStyles/GlobalStyles.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/GlobalStyles/GlobalStyles.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Grid/Grid.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Grid/Grid.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Grid/createGrid.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Grid/createGrid.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Grid/deleteLegacyGridProps.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Grid/deleteLegacyGridProps.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Grid/gridClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Grid/gridClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Grid/gridGenerator.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Grid/gridGenerator.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Grid/traverseBreakpoints.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Grid/traverseBreakpoints.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/RtlProvider/index.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/RtlProvider/index.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Stack/Stack.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Stack/Stack.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Stack/createStack.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Stack/createStack.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/Stack/stackClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/Stack/stackClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/ThemeProvider/ThemeProvider.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/ThemeProvider/ThemeProvider.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/ThemeProvider/useLayerOrder.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/ThemeProvider/useLayerOrder.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/borders/borders.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/borders/borders.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/breakpoints/breakpoints.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/breakpoints/breakpoints.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/compose/compose.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/compose/compose.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/createBox/createBox.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/createBox/createBox.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/createBreakpoints/createBreakpoints.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/createBreakpoints/createBreakpoints.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/createStyled/createStyled.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/createStyled/createStyled.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/createTheme/applyStyles.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/createTheme/applyStyles.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/createTheme/createSpacing.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/createTheme/createSpacing.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/createTheme/createTheme.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/createTheme/createTheme.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/createTheme/shape.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/createTheme/shape.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/cssContainerQueries/cssContainerQueries.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/cssContainerQueries/cssContainerQueries.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/cssGrid/cssGrid.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/cssGrid/cssGrid.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/display/display.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/display/display.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/flexbox/flexbox.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/flexbox/flexbox.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/getThemeValue/getThemeValue.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/getThemeValue/getThemeValue.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/memoize/memoize.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/memoize/memoize.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/merge/merge.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/merge/merge.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/palette/palette.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/palette/palette.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/positions/positions.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/positions/positions.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/preprocessStyles.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/preprocessStyles.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/responsivePropType/responsivePropType.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/responsivePropType/responsivePropType.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/shadows/shadows.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/shadows/shadows.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/sizing/sizing.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/sizing/sizing.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/spacing/spacing.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/spacing/spacing.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/style/style.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/style/style.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/styled/styled.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/styled/styled.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/typography/typography.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/typography/typography.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/useTheme/useTheme.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/useTheme/useTheme.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/useThemeProps/getThemeProps.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/useThemeProps/getThemeProps.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/useThemeProps/useThemeProps.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/useThemeProps/useThemeProps.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/esm/useThemeWithoutDefault/useThemeWithoutDefault.js +2 -0
- package/dist/cjs/node_modules/@mui/system/esm/useThemeWithoutDefault/useThemeWithoutDefault.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js +2 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/capitalize/capitalize.js +2 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/capitalize/capitalize.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/composeClasses/composeClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/composeClasses/composeClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/deepmerge/deepmerge.js +2 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/deepmerge/deepmerge.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/exactProp/exactProp.js +2 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/exactProp/exactProp.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js +2 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js +2 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js +2 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js +2 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/resolveProps/resolveProps.js +2 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/resolveProps/resolveProps.js.map +1 -0
- package/dist/cjs/node_modules/{@radix-ui/react-use-layout-effect/dist/index.mjs.js → @mui/system/node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js} +2 -2
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js.map +1 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/useId/useId.js +2 -0
- package/dist/cjs/node_modules/@mui/system/node_modules/@mui/utils/esm/useId/useId.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/appendOwnerState/appendOwnerState.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/appendOwnerState/appendOwnerState.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/capitalize/capitalize.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/capitalize/capitalize.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/chainPropTypes/chainPropTypes.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/chainPropTypes/chainPropTypes.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/composeClasses/composeClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/composeClasses/composeClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/elementAcceptingRef/elementAcceptingRef.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/elementAcceptingRef/elementAcceptingRef.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/elementTypeAcceptingRef/elementTypeAcceptingRef.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/elementTypeAcceptingRef/elementTypeAcceptingRef.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/extractEventHandlers/extractEventHandlers.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/extractEventHandlers/extractEventHandlers.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/integerPropType/integerPropType.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/integerPropType/integerPropType.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/isHostComponent/isHostComponent.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/isHostComponent/isHostComponent.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/mergeSlotProps/mergeSlotProps.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/mergeSlotProps/mergeSlotProps.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/omitEventHandlers/omitEventHandlers.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/omitEventHandlers/omitEventHandlers.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/ponyfillGlobal/ponyfillGlobal.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/ponyfillGlobal/ponyfillGlobal.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/refType/refType.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/refType/refType.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/resolveComponentProps/resolveComponentProps.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/resolveComponentProps/resolveComponentProps.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/useControlled/useControlled.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/useControlled/useControlled.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/useForkRef/useForkRef.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/useForkRef/useForkRef.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/useId/useId.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/useId/useId.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/useSlotProps/useSlotProps.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/useSlotProps/useSlotProps.js.map +1 -0
- package/dist/cjs/node_modules/@mui/utils/esm/visuallyHidden/visuallyHidden.js +2 -0
- package/dist/cjs/node_modules/@mui/utils/esm/visuallyHidden/visuallyHidden.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/AdapterDayjs/AdapterDayjs.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/AdapterDayjs/AdapterDayjs.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/DateCalendar.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/DateCalendar.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/DayCalendar.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/DayCalendar.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/PickersFadeTransitionGroup.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/PickersFadeTransitionGroup.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/PickersSlideTransition.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/PickersSlideTransition.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/dateCalendarClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/dateCalendarClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/dayCalendarClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/dayCalendarClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/pickersFadeTransitionGroupClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/pickersFadeTransitionGroupClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/pickersSlideTransitionClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/pickersSlideTransitionClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/useCalendarState.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/useCalendarState.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/useIsDateDisabled.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateCalendar/useIsDateDisabled.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateField/DateField.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateField/DateField.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateField/useDateField.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateField/useDateField.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DatePicker/DatePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DatePicker/DatePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DatePicker/DatePickerToolbar.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DatePicker/DatePickerToolbar.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DatePicker/datePickerToolbarClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DatePicker/datePickerToolbarClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DatePicker/shared.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DatePicker/shared.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimeField/DateTimeField.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimeField/DateTimeField.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimeField/useDateTimeField.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimeField/useDateTimeField.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimePicker/DateTimePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimePicker/DateTimePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimePicker/DateTimePickerTabs.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimePicker/DateTimePickerTabs.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimePicker/DateTimePickerToolbar.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimePicker/DateTimePickerToolbar.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimePicker/dateTimePickerTabsClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimePicker/dateTimePickerTabsClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimePicker/dateTimePickerToolbarClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimePicker/dateTimePickerToolbarClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimePicker/shared.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DateTimePicker/shared.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DayCalendarSkeleton/DayCalendarSkeleton.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DayCalendarSkeleton/DayCalendarSkeleton.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DayCalendarSkeleton/dayCalendarSkeletonClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DayCalendarSkeleton/dayCalendarSkeletonClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DesktopDatePicker/DesktopDatePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DesktopDatePicker/DesktopDatePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DesktopDateTimePicker/DesktopDateTimePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DesktopDateTimePicker/DesktopDateTimePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DesktopDateTimePicker/DesktopDateTimePickerLayout.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DesktopTimePicker/DesktopTimePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DesktopTimePicker/DesktopTimePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DigitalClock/DigitalClock.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DigitalClock/DigitalClock.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DigitalClock/digitalClockClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/DigitalClock/digitalClockClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/LocalizationProvider/LocalizationProvider.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/LocalizationProvider/LocalizationProvider.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MobileDatePicker/MobileDatePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MobileDatePicker/MobileDatePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MobileDateTimePicker/MobileDateTimePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MobileDateTimePicker/MobileDateTimePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MobileTimePicker/MobileTimePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MobileTimePicker/MobileTimePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MonthCalendar/MonthCalendar.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MonthCalendar/MonthCalendar.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MonthCalendar/PickersMonth.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MonthCalendar/PickersMonth.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MonthCalendar/monthCalendarClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MonthCalendar/monthCalendarClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MonthCalendar/pickersMonthClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MonthCalendar/pickersMonthClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/MultiSectionDigitalClock.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/MultiSectionDigitalClock.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/multiSectionDigitalClockClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/multiSectionDigitalClockClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/multiSectionDigitalClockSectionClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/multiSectionDigitalClockSectionClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersActionBar/PickersActionBar.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersActionBar/PickersActionBar.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersCalendarHeader/PickersCalendarHeader.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersCalendarHeader/PickersCalendarHeader.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersCalendarHeader/pickersCalendarHeaderClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersCalendarHeader/pickersCalendarHeaderClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersDay/PickersDay.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersDay/PickersDay.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersDay/pickersDayClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersDay/pickersDayClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersLayout/PickersLayout.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersLayout/PickersLayout.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersLayout/pickersLayoutClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersLayout/pickersLayoutClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersLayout/usePickerLayout.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersLayout/usePickerLayout.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersSectionList/PickersSectionList.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersSectionList/PickersSectionList.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersSectionList/pickersSectionListClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersSectionList/pickersSectionListClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersShortcuts/PickersShortcuts.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersShortcuts/PickersShortcuts.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersFilledInput/PickersFilledInput.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersFilledInput/PickersFilledInput.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersFilledInput/pickersFilledInputClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersFilledInput/pickersFilledInputClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersInput/PickersInput.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersInput/PickersInput.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersInput/pickersInputClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersInput/pickersInputClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersInputBase/PickersInputBase.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersInputBase/PickersInputBase.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersInputBase/pickersInputBaseClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersInputBase/pickersInputBaseClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersOutlinedInput/Outline.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersOutlinedInput/Outline.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersOutlinedInput/pickersOutlinedInputClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersOutlinedInput/pickersOutlinedInputClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersTextField.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/PickersTextField.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/pickersTextFieldClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/PickersTextField/pickersTextFieldClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/StaticDatePicker/StaticDatePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/StaticDatePicker/StaticDatePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/StaticDateTimePicker/StaticDateTimePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/StaticDateTimePicker/StaticDateTimePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/StaticTimePicker/StaticTimePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/StaticTimePicker/StaticTimePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/Clock.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/Clock.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/ClockNumber.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/ClockNumber.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/ClockNumbers.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/ClockNumbers.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/ClockPointer.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/ClockPointer.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/TimeClock.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/TimeClock.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/clockClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/clockClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/clockNumberClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/clockNumberClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/clockPointerClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/clockPointerClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/shared.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/shared.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/timeClockClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeClock/timeClockClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeField/TimeField.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeField/TimeField.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeField/useTimeField.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimeField/useTimeField.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimePicker/TimePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimePicker/TimePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimePicker/TimePickerToolbar.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimePicker/TimePickerToolbar.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimePicker/shared.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimePicker/shared.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimePicker/timePickerToolbarClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/TimePicker/timePickerToolbarClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/YearCalendar/PickersYear.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/YearCalendar/PickersYear.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/YearCalendar/YearCalendar.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/YearCalendar/YearCalendar.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/YearCalendar/pickersYearClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/YearCalendar/pickersYearClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/YearCalendar/yearCalendarClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/YearCalendar/yearCalendarClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/dateViewRenderers/dateViewRenderers.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/dateViewRenderers/dateViewRenderers.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/hooks/useClearableField.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/hooks/useClearableField.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/hooks/usePickersTranslations.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/hooks/usePickersTranslations.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/hooks/useSplitFieldProps.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/hooks/useSplitFieldProps.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/icons/index.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/icons/index.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickerViewRoot/PickerViewRoot.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickerViewRoot/PickerViewRoot.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersArrowSwitcher/pickersArrowSwitcherClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersArrowSwitcher/pickersArrowSwitcherClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersModalDialog.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersModalDialog.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersPopper.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersPopper.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersProvider.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersProvider.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersToolbar.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersToolbar.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersToolbarButton.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersToolbarButton.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersToolbarText.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/PickersToolbarText.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/pickersPopperClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/pickersPopperClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/pickersToolbarClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/pickersToolbarClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/pickersToolbarTextClasses.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/components/pickersToolbarTextClasses.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/constants/dimensions.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/constants/dimensions.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/date-helpers-hooks.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/date-helpers-hooks.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/defaultizedFieldProps.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/defaultizedFieldProps.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useClockReferenceDate.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useClockReferenceDate.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useDefaultReduceAnimations.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useDefaultReduceAnimations.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useDesktopPicker/useDesktopPicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useDesktopPicker/useDesktopPicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/buildSectionsFromFormat.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/buildSectionsFromFormat.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/useField.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/useField.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/useField.utils.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/useField.utils.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldCharacterEditing.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldCharacterEditing.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldState.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldState.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldV6TextField.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldV6TextField.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldV7TextField.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldV7TextField.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useIsLandscape.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useIsLandscape.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useMobilePicker/useMobilePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useMobilePicker/useMobilePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useOpenState.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useOpenState.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerLayoutProps.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerLayoutProps.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerOwnerState.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerOwnerState.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerValue.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerValue.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerViews.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerViews.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useStaticPicker/useStaticPicker.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useStaticPicker/useStaticPicker.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useUtils.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useUtils.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useValueWithTimezone.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useValueWithTimezone.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useViews.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/hooks/useViews.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/convertFieldResponseIntoMuiTextFieldProps.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/convertFieldResponseIntoMuiTextFieldProps.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/date-time-utils.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/date-time-utils.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/date-utils.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/date-utils.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/getDefaultReferenceDate.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/getDefaultReferenceDate.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/time-utils.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/time-utils.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/utils.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/utils.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/valueManagers.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/valueManagers.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/views.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/internals/utils/views.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/locales/enUS.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/locales/enUS.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/locales/utils/getPickersLocalization.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/locales/utils/getPickersLocalization.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/timeViewRenderers/timeViewRenderers.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/timeViewRenderers/timeViewRenderers.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/validation/extractValidationProps.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/validation/extractValidationProps.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/validation/useValidation.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/validation/useValidation.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/validation/validateDate.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/validation/validateDate.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/validation/validateDateTime.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/validation/validateDateTime.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/validation/validateTime.js +2 -0
- package/dist/cjs/node_modules/@mui/x-date-pickers/validation/validateTime.js.map +1 -0
- package/dist/cjs/node_modules/@mui/x-internals/esm/warning/warning.js +2 -0
- package/dist/cjs/node_modules/@mui/x-internals/esm/warning/warning.js.map +1 -0
- package/dist/cjs/node_modules/appsec-ui/dist/index.mjs.js +2 -0
- package/dist/cjs/node_modules/appsec-ui/dist/index.mjs.js.map +1 -0
- package/dist/cjs/node_modules/appsec-ui/node_modules/tailwind-merge/dist/bundle-mjs.mjs.js +2 -0
- package/dist/cjs/node_modules/appsec-ui/node_modules/tailwind-merge/dist/bundle-mjs.mjs.js.map +1 -0
- package/dist/cjs/node_modules/clsx/dist/clsx.mjs.js +2 -0
- package/dist/cjs/node_modules/clsx/dist/clsx.mjs.js.map +1 -0
- package/dist/cjs/node_modules/dom-helpers/esm/addClass.js +2 -0
- package/dist/cjs/node_modules/dom-helpers/esm/addClass.js.map +1 -0
- package/dist/cjs/node_modules/dom-helpers/esm/hasClass.js +2 -0
- package/dist/cjs/node_modules/dom-helpers/esm/hasClass.js.map +1 -0
- package/dist/cjs/node_modules/dom-helpers/esm/removeClass.js +2 -0
- package/dist/cjs/node_modules/dom-helpers/esm/removeClass.js.map +1 -0
- package/dist/cjs/node_modules/object-assign/index.js +8 -0
- package/dist/cjs/node_modules/object-assign/index.js.map +1 -0
- package/dist/cjs/node_modules/prop-types/checkPropTypes.js +2 -0
- package/dist/cjs/node_modules/prop-types/checkPropTypes.js.map +1 -0
- package/dist/cjs/node_modules/prop-types/factoryWithThrowingShims.js +2 -0
- package/dist/cjs/node_modules/prop-types/factoryWithThrowingShims.js.map +1 -0
- package/dist/cjs/node_modules/prop-types/factoryWithTypeCheckers.js +2 -0
- package/dist/cjs/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -0
- package/dist/cjs/node_modules/prop-types/index.js +2 -0
- package/dist/cjs/node_modules/prop-types/index.js.map +1 -0
- package/dist/cjs/node_modules/prop-types/lib/ReactPropTypesSecret.js +2 -0
- package/dist/cjs/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +1 -0
- package/dist/cjs/node_modules/prop-types/lib/has.js +2 -0
- package/dist/cjs/node_modules/prop-types/lib/has.js.map +1 -0
- package/dist/cjs/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +10 -0
- package/dist/cjs/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +1 -0
- package/dist/cjs/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +10 -0
- package/dist/cjs/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
- package/dist/cjs/node_modules/prop-types/node_modules/react-is/index.js +2 -0
- package/dist/cjs/node_modules/prop-types/node_modules/react-is/index.js.map +1 -0
- package/dist/cjs/node_modules/react-is/cjs/react-is.development.js +11 -0
- package/dist/cjs/node_modules/react-is/cjs/react-is.development.js.map +1 -0
- package/dist/cjs/node_modules/react-is/cjs/react-is.production.js +11 -0
- package/dist/cjs/node_modules/react-is/cjs/react-is.production.js.map +1 -0
- package/dist/cjs/node_modules/react-is/index.js +2 -0
- package/dist/cjs/node_modules/react-is/index.js.map +1 -0
- package/dist/cjs/node_modules/react-transition-group/esm/CSSTransition.js +2 -0
- package/dist/cjs/node_modules/react-transition-group/esm/CSSTransition.js.map +1 -0
- package/dist/cjs/node_modules/react-transition-group/esm/ReplaceTransition.js +2 -0
- package/dist/cjs/node_modules/react-transition-group/esm/ReplaceTransition.js.map +1 -0
- package/dist/cjs/node_modules/react-transition-group/esm/SwitchTransition.js +2 -0
- package/dist/cjs/node_modules/react-transition-group/esm/SwitchTransition.js.map +1 -0
- package/dist/cjs/node_modules/react-transition-group/esm/Transition.js +2 -0
- package/dist/cjs/node_modules/react-transition-group/esm/Transition.js.map +1 -0
- package/dist/cjs/node_modules/react-transition-group/esm/TransitionGroup.js +2 -0
- package/dist/cjs/node_modules/react-transition-group/esm/TransitionGroup.js.map +1 -0
- package/dist/cjs/node_modules/react-transition-group/esm/TransitionGroupContext.js +2 -0
- package/dist/cjs/node_modules/react-transition-group/esm/TransitionGroupContext.js.map +1 -0
- package/dist/cjs/node_modules/react-transition-group/esm/config.js +2 -0
- package/dist/cjs/node_modules/react-transition-group/esm/config.js.map +1 -0
- package/dist/cjs/node_modules/react-transition-group/esm/utils/ChildMapping.js +2 -0
- package/dist/cjs/node_modules/react-transition-group/esm/utils/ChildMapping.js.map +1 -0
- package/dist/cjs/node_modules/react-transition-group/esm/utils/PropTypes.js +2 -0
- package/dist/cjs/node_modules/react-transition-group/esm/utils/PropTypes.js.map +1 -0
- package/dist/cjs/node_modules/react-transition-group/esm/utils/reflow.js +2 -0
- package/dist/cjs/node_modules/react-transition-group/esm/utils/reflow.js.map +1 -0
- package/dist/cjs/node_modules/tailwind-merge/dist/bundle-mjs.mjs.js +2 -0
- package/dist/cjs/node_modules/tailwind-merge/dist/bundle-mjs.mjs.js.map +1 -0
- package/dist/cjs/node_modules/uuid/dist/native.js +2 -0
- package/dist/cjs/node_modules/uuid/dist/native.js.map +1 -0
- package/dist/cjs/node_modules/uuid/dist/rng.js +2 -0
- package/dist/cjs/node_modules/uuid/dist/rng.js.map +1 -0
- package/dist/cjs/node_modules/uuid/dist/stringify.js +2 -0
- package/dist/cjs/node_modules/uuid/dist/stringify.js.map +1 -0
- package/dist/cjs/node_modules/uuid/dist/v4.js +2 -0
- package/dist/cjs/node_modules/uuid/dist/v4.js.map +1 -0
- package/dist/components/AssignReminders/AssignReminderLevels.js +1 -1
- package/dist/components/AssignReminders/AssignReminderWrapper.js +1 -1
- package/dist/components/AssignReminders/ManageReminders.js +1 -1
- package/dist/components/AssignReminders/components/AssignLevelsDatePicker.js +1 -1
- package/dist/components/AssignReminders/components/CustomDatePicker.js +1 -1
- package/dist/components/AssignReminders/components/ReviewStatus.js +1 -1
- package/dist/components/AssignReminders/utils/approvalDateValidation.js +2 -0
- package/dist/components/AssignReminders/utils/approvalDateValidation.js.map +1 -0
- package/dist/components/PromptEditor/PromptEditor.js +2 -0
- package/dist/components/PromptEditor/PromptEditor.js.map +1 -0
- package/dist/components/ScopeTree/TreeTooltip.js +1 -1
- package/dist/features/lsc-guidelines/LscGuidelines.js +1 -1
- package/dist/features/lsc-guidelines/components/DataSourceCard.js +2 -0
- package/dist/features/lsc-guidelines/components/DataSourceCard.js.map +1 -0
- package/dist/features/lsc-guidelines/components/GuidelineAttachmentIcon.js +1 -1
- package/dist/features/lsc-guidelines/components/GuidelineCardMenu.js +1 -1
- package/dist/features/lsc-guidelines/components/GuidelineCart.js +1 -1
- package/dist/features/lsc-guidelines/components/GuidelineCartItem.js +1 -1
- package/dist/features/lsc-guidelines/components/GuidelineCreateForm.js +2 -0
- package/dist/features/lsc-guidelines/components/GuidelineCreateForm.js.map +1 -0
- package/dist/features/lsc-guidelines/components/GuidelineEditorWrapper.js +2 -0
- package/dist/features/lsc-guidelines/components/GuidelineEditorWrapper.js.map +1 -0
- package/dist/features/lsc-guidelines/components/GuidelineFilterPanel.js +2 -0
- package/dist/features/lsc-guidelines/components/GuidelineFilterPanel.js.map +1 -0
- package/dist/features/lsc-guidelines/components/GuidelineLandingPage.js +1 -1
- package/dist/features/lsc-guidelines/components/GuidelineLibrary.js +1 -1
- package/dist/features/lsc-guidelines/components/GuidelineLibraryCard.js +1 -1
- package/dist/features/lsc-guidelines/components/GuidelinePopoverCart.js +1 -1
- package/dist/features/lsc-guidelines/components/GuidelineTooltip.js +1 -1
- package/dist/features/lsc-guidelines/components/GuidelineWorkspaceHostProvider.js +2 -0
- package/dist/features/lsc-guidelines/components/GuidelineWorkspaceHostProvider.js.map +1 -0
- package/dist/features/lsc-guidelines/components/GuidelineWorkspacePage.js +2 -0
- package/dist/features/lsc-guidelines/components/GuidelineWorkspacePage.js.map +1 -0
- package/dist/features/lsc-guidelines/components/LearningManagementWrapper.js +2 -0
- package/dist/features/lsc-guidelines/components/LearningManagementWrapper.js.map +1 -0
- package/dist/features/lsc-guidelines/constants.js +1 -1
- package/dist/features/lsc-guidelines/hooks/useClearGuidelineCartOnReload.js +2 -0
- package/dist/features/lsc-guidelines/hooks/useClearGuidelineCartOnReload.js.map +1 -0
- package/dist/features/lsc-guidelines/hooks/useDebounce.js +2 -0
- package/dist/features/lsc-guidelines/hooks/useDebounce.js.map +1 -0
- package/dist/features/lsc-guidelines/hooks/useGuidelineCartMemstoreSync.js +2 -0
- package/dist/features/lsc-guidelines/hooks/useGuidelineCartMemstoreSync.js.map +1 -0
- package/dist/features/lsc-guidelines/hooks/useGuidelineDataCart.js +2 -0
- package/dist/features/lsc-guidelines/hooks/useGuidelineDataCart.js.map +1 -0
- package/dist/features/lsc-guidelines/hooks/useGuidelineSelection.js +1 -1
- package/dist/features/lsc-guidelines/hooks/useGuidelineWorkspaceLegacyBridge.js +2 -0
- package/dist/features/lsc-guidelines/hooks/useGuidelineWorkspaceLegacyBridge.js.map +1 -0
- package/dist/features/lsc-guidelines/hooks/useInstantLearningGuidelineCart.js +2 -0
- package/dist/features/lsc-guidelines/hooks/useInstantLearningGuidelineCart.js.map +1 -0
- package/dist/features/lsc-guidelines/hooks/useInstantLearningGuidelines.js +2 -0
- package/dist/features/lsc-guidelines/hooks/useInstantLearningGuidelines.js.map +1 -0
- package/dist/features/lsc-guidelines/hooks/useMemstoreGuidelineCart.js +2 -0
- package/dist/features/lsc-guidelines/hooks/useMemstoreGuidelineCart.js.map +1 -0
- package/dist/features/lsc-guidelines/hooks/useSavedGuidelines.js +2 -0
- package/dist/features/lsc-guidelines/hooks/useSavedGuidelines.js.map +1 -0
- package/dist/features/lsc-guidelines/index.js +1 -1
- package/dist/features/lsc-guidelines/queryClient.js +2 -0
- package/dist/features/lsc-guidelines/queryClient.js.map +1 -0
- package/dist/features/lsc-guidelines/services/guideline.api.js +2 -0
- package/dist/features/lsc-guidelines/services/guideline.api.js.map +1 -0
- package/dist/features/lsc-guidelines/services/guideline.cart.api.js +2 -0
- package/dist/features/lsc-guidelines/services/guideline.cart.api.js.map +1 -0
- package/dist/features/lsc-guidelines/services/guideline.content.js +2 -0
- package/dist/features/lsc-guidelines/services/guideline.content.js.map +1 -0
- package/dist/features/lsc-guidelines/services/guideline.runtime.config.js +2 -0
- package/dist/features/lsc-guidelines/services/guideline.runtime.config.js.map +1 -0
- package/dist/features/lsc-guidelines/services/guideline.session.js +2 -0
- package/dist/features/lsc-guidelines/services/guideline.session.js.map +1 -0
- package/dist/features/lsc-guidelines/services/instant-learning.api.js +2 -0
- package/dist/features/lsc-guidelines/services/instant-learning.api.js.map +1 -0
- package/dist/features/lsc-guidelines/services/instant-learning.wishlist.js +2 -0
- package/dist/features/lsc-guidelines/services/instant-learning.wishlist.js.map +1 -0
- package/dist/features/lsc-guidelines/theme.css +6 -0
- package/dist/features/lsc-guidelines/utils/addContextHelpers.js +2 -0
- package/dist/features/lsc-guidelines/utils/addContextHelpers.js.map +1 -0
- package/dist/features/lsc-guidelines/utils/cn.js +2 -0
- package/dist/features/lsc-guidelines/utils/cn.js.map +1 -0
- package/dist/features/lsc-guidelines/utils/guidelineFiles.js +2 -0
- package/dist/features/lsc-guidelines/utils/guidelineFiles.js.map +1 -0
- package/dist/features/lsc-guidelines/utils/guidelineOverlay.js +2 -0
- package/dist/features/lsc-guidelines/utils/guidelineOverlay.js.map +1 -0
- package/dist/features/lsc-guidelines/utils/guidelineSort.js +2 -0
- package/dist/features/lsc-guidelines/utils/guidelineSort.js.map +1 -0
- package/dist/features/lsc-guidelines/utils/microfrontend.js +2 -0
- package/dist/features/lsc-guidelines/utils/microfrontend.js.map +1 -0
- package/dist/features/lsc-guidelines/utils/session.js +2 -0
- package/dist/features/lsc-guidelines/utils/session.js.map +1 -0
- package/dist/features/lsc-guidelines/utils/url.js +2 -0
- package/dist/features/lsc-guidelines/utils/url.js.map +1 -0
- package/dist/features/lsc-guidelines/utils.js +1 -1
- package/dist/features/lsc-guidelines/workspace/GuidelineWorkspace.js +2 -0
- package/dist/features/lsc-guidelines/workspace/GuidelineWorkspace.js.map +1 -0
- package/dist/features/lsc-guidelines/workspace/GuidelineWorkspaceHydrator.js +2 -0
- package/dist/features/lsc-guidelines/workspace/GuidelineWorkspaceHydrator.js.map +1 -0
- package/dist/features/lsc-guidelines/workspace/GuidelineWorkspaceProvider.js +2 -0
- package/dist/features/lsc-guidelines/workspace/GuidelineWorkspaceProvider.js.map +1 -0
- package/dist/features/lsc-guidelines/workspace/useGuidelineWorkspace.js +2 -0
- package/dist/features/lsc-guidelines/workspace/useGuidelineWorkspace.js.map +1 -0
- package/dist/features/lsc-guidelines/workspace/workspace.context.js +2 -0
- package/dist/features/lsc-guidelines/workspace/workspace.context.js.map +1 -0
- package/dist/features/lsc-guidelines/workspace/workspace.runtime.js +2 -0
- package/dist/features/lsc-guidelines/workspace/workspace.runtime.js.map +1 -0
- package/dist/features/lsc-guidelines/workspace/workspace.selectors.js +2 -0
- package/dist/features/lsc-guidelines/workspace/workspace.selectors.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js +2 -0
- package/dist/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/esm/extends.js +2 -0
- package/dist/node_modules/@babel/runtime/helpers/esm/extends.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js +2 -0
- package/dist/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js +2 -0
- package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js +2 -0
- package/dist/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js.map +1 -0
- package/dist/node_modules/@emotion/hash/dist/emotion-hash.esm.js +2 -0
- package/dist/node_modules/@emotion/hash/dist/emotion-hash.esm.js.map +1 -0
- package/dist/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js +2 -0
- package/dist/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js.map +1 -0
- package/dist/node_modules/@emotion/serialize/dist/emotion-serialize.esm.js +2 -0
- package/dist/node_modules/@emotion/serialize/dist/emotion-serialize.esm.js.map +1 -0
- package/dist/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js +2 -0
- package/dist/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js.map +1 -0
- package/dist/node_modules/@mui/private-theming/esm/ThemeProvider/ThemeProvider.js +2 -0
- package/dist/node_modules/@mui/private-theming/esm/ThemeProvider/ThemeProvider.js.map +1 -0
- package/dist/node_modules/@mui/private-theming/esm/ThemeProvider/nested.js +2 -0
- package/dist/node_modules/@mui/private-theming/esm/ThemeProvider/nested.js.map +1 -0
- package/dist/node_modules/@mui/private-theming/esm/useTheme/ThemeContext.js +2 -0
- package/dist/node_modules/@mui/private-theming/esm/useTheme/ThemeContext.js.map +1 -0
- package/dist/node_modules/@mui/private-theming/esm/useTheme/useTheme.js +2 -0
- package/dist/node_modules/@mui/private-theming/esm/useTheme/useTheme.js.map +1 -0
- package/dist/node_modules/@mui/private-theming/node_modules/@mui/utils/esm/exactProp/exactProp.js +2 -0
- package/dist/node_modules/@mui/private-theming/node_modules/@mui/utils/esm/exactProp/exactProp.js.map +1 -0
- package/dist/node_modules/@mui/styled-engine/esm/GlobalStyles/GlobalStyles.js +2 -0
- package/dist/node_modules/@mui/styled-engine/esm/GlobalStyles/GlobalStyles.js.map +1 -0
- package/dist/node_modules/@mui/styled-engine/esm/StyledEngineProvider/StyledEngineProvider.js +2 -0
- package/dist/node_modules/@mui/styled-engine/esm/StyledEngineProvider/StyledEngineProvider.js.map +1 -0
- package/dist/node_modules/@mui/styled-engine/esm/index.js +9 -0
- package/dist/node_modules/@mui/styled-engine/esm/index.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Box/Box.js +2 -0
- package/dist/node_modules/@mui/system/esm/Box/Box.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Box/boxClasses.js +2 -0
- package/dist/node_modules/@mui/system/esm/Box/boxClasses.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Container/Container.js +2 -0
- package/dist/node_modules/@mui/system/esm/Container/Container.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Container/containerClasses.js +2 -0
- package/dist/node_modules/@mui/system/esm/Container/containerClasses.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Container/createContainer.js +2 -0
- package/dist/node_modules/@mui/system/esm/Container/createContainer.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/DefaultPropsProvider/DefaultPropsProvider.js +2 -0
- package/dist/node_modules/@mui/system/esm/DefaultPropsProvider/DefaultPropsProvider.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/GlobalStyles/GlobalStyles.js +2 -0
- package/dist/node_modules/@mui/system/esm/GlobalStyles/GlobalStyles.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Grid/Grid.js +2 -0
- package/dist/node_modules/@mui/system/esm/Grid/Grid.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Grid/createGrid.js +2 -0
- package/dist/node_modules/@mui/system/esm/Grid/createGrid.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Grid/deleteLegacyGridProps.js +2 -0
- package/dist/node_modules/@mui/system/esm/Grid/deleteLegacyGridProps.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Grid/gridClasses.js +2 -0
- package/dist/node_modules/@mui/system/esm/Grid/gridClasses.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Grid/gridGenerator.js +2 -0
- package/dist/node_modules/@mui/system/esm/Grid/gridGenerator.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Grid/traverseBreakpoints.js +2 -0
- package/dist/node_modules/@mui/system/esm/Grid/traverseBreakpoints.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/RtlProvider/index.js +2 -0
- package/dist/node_modules/@mui/system/esm/RtlProvider/index.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Stack/Stack.js +2 -0
- package/dist/node_modules/@mui/system/esm/Stack/Stack.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Stack/createStack.js +2 -0
- package/dist/node_modules/@mui/system/esm/Stack/createStack.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/Stack/stackClasses.js +2 -0
- package/dist/node_modules/@mui/system/esm/Stack/stackClasses.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/ThemeProvider/ThemeProvider.js +2 -0
- package/dist/node_modules/@mui/system/esm/ThemeProvider/ThemeProvider.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/ThemeProvider/useLayerOrder.js +2 -0
- package/dist/node_modules/@mui/system/esm/ThemeProvider/useLayerOrder.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/borders/borders.js +2 -0
- package/dist/node_modules/@mui/system/esm/borders/borders.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/breakpoints/breakpoints.js +2 -0
- package/dist/node_modules/@mui/system/esm/breakpoints/breakpoints.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/compose/compose.js +2 -0
- package/dist/node_modules/@mui/system/esm/compose/compose.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/createBox/createBox.js +2 -0
- package/dist/node_modules/@mui/system/esm/createBox/createBox.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/createBreakpoints/createBreakpoints.js +2 -0
- package/dist/node_modules/@mui/system/esm/createBreakpoints/createBreakpoints.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/createStyled/createStyled.js +2 -0
- package/dist/node_modules/@mui/system/esm/createStyled/createStyled.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/createTheme/applyStyles.js +2 -0
- package/dist/node_modules/@mui/system/esm/createTheme/applyStyles.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/createTheme/createSpacing.js +2 -0
- package/dist/node_modules/@mui/system/esm/createTheme/createSpacing.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/createTheme/createTheme.js +2 -0
- package/dist/node_modules/@mui/system/esm/createTheme/createTheme.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/createTheme/shape.js +2 -0
- package/dist/node_modules/@mui/system/esm/createTheme/shape.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/cssContainerQueries/cssContainerQueries.js +2 -0
- package/dist/node_modules/@mui/system/esm/cssContainerQueries/cssContainerQueries.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/cssGrid/cssGrid.js +2 -0
- package/dist/node_modules/@mui/system/esm/cssGrid/cssGrid.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/display/display.js +2 -0
- package/dist/node_modules/@mui/system/esm/display/display.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/flexbox/flexbox.js +2 -0
- package/dist/node_modules/@mui/system/esm/flexbox/flexbox.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/getThemeValue/getThemeValue.js +2 -0
- package/dist/node_modules/@mui/system/esm/getThemeValue/getThemeValue.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/memoize/memoize.js +2 -0
- package/dist/node_modules/@mui/system/esm/memoize/memoize.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/merge/merge.js +2 -0
- package/dist/node_modules/@mui/system/esm/merge/merge.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/palette/palette.js +2 -0
- package/dist/node_modules/@mui/system/esm/palette/palette.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/positions/positions.js +2 -0
- package/dist/node_modules/@mui/system/esm/positions/positions.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/preprocessStyles.js +2 -0
- package/dist/node_modules/@mui/system/esm/preprocessStyles.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/responsivePropType/responsivePropType.js +2 -0
- package/dist/node_modules/@mui/system/esm/responsivePropType/responsivePropType.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/shadows/shadows.js +2 -0
- package/dist/node_modules/@mui/system/esm/shadows/shadows.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/sizing/sizing.js +2 -0
- package/dist/node_modules/@mui/system/esm/sizing/sizing.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/spacing/spacing.js +2 -0
- package/dist/node_modules/@mui/system/esm/spacing/spacing.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/style/style.js +2 -0
- package/dist/node_modules/@mui/system/esm/style/style.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js +2 -0
- package/dist/node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js +2 -0
- package/dist/node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js +2 -0
- package/dist/node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/styled/styled.js +2 -0
- package/dist/node_modules/@mui/system/esm/styled/styled.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/typography/typography.js +2 -0
- package/dist/node_modules/@mui/system/esm/typography/typography.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/useTheme/useTheme.js +2 -0
- package/dist/node_modules/@mui/system/esm/useTheme/useTheme.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/useThemeProps/getThemeProps.js +2 -0
- package/dist/node_modules/@mui/system/esm/useThemeProps/getThemeProps.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/useThemeProps/useThemeProps.js +2 -0
- package/dist/node_modules/@mui/system/esm/useThemeProps/useThemeProps.js.map +1 -0
- package/dist/node_modules/@mui/system/esm/useThemeWithoutDefault/useThemeWithoutDefault.js +2 -0
- package/dist/node_modules/@mui/system/esm/useThemeWithoutDefault/useThemeWithoutDefault.js.map +1 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js +2 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js.map +1 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/capitalize/capitalize.js +2 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/capitalize/capitalize.js.map +1 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/composeClasses/composeClasses.js +2 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/composeClasses/composeClasses.js.map +1 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/deepmerge/deepmerge.js +2 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/deepmerge/deepmerge.js.map +1 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/exactProp/exactProp.js +2 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/exactProp/exactProp.js.map +1 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js +2 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js.map +1 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js +2 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js.map +1 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js +2 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js.map +1 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js +2 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js.map +1 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js +2 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js.map +1 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/resolveProps/resolveProps.js +2 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/resolveProps/resolveProps.js.map +1 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js +2 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js.map +1 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/useId/useId.js +2 -0
- package/dist/node_modules/@mui/system/node_modules/@mui/utils/esm/useId/useId.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js +2 -0
- package/dist/node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/appendOwnerState/appendOwnerState.js +2 -0
- package/dist/node_modules/@mui/utils/esm/appendOwnerState/appendOwnerState.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/capitalize/capitalize.js +2 -0
- package/dist/node_modules/@mui/utils/esm/capitalize/capitalize.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/chainPropTypes/chainPropTypes.js +2 -0
- package/dist/node_modules/@mui/utils/esm/chainPropTypes/chainPropTypes.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/composeClasses/composeClasses.js +2 -0
- package/dist/node_modules/@mui/utils/esm/composeClasses/composeClasses.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/elementAcceptingRef/elementAcceptingRef.js +2 -0
- package/dist/node_modules/@mui/utils/esm/elementAcceptingRef/elementAcceptingRef.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/elementTypeAcceptingRef/elementTypeAcceptingRef.js +2 -0
- package/dist/node_modules/@mui/utils/esm/elementTypeAcceptingRef/elementTypeAcceptingRef.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/extractEventHandlers/extractEventHandlers.js +2 -0
- package/dist/node_modules/@mui/utils/esm/extractEventHandlers/extractEventHandlers.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js +2 -0
- package/dist/node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js +2 -0
- package/dist/node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js +2 -0
- package/dist/node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/integerPropType/integerPropType.js +2 -0
- package/dist/node_modules/@mui/utils/esm/integerPropType/integerPropType.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/isHostComponent/isHostComponent.js +2 -0
- package/dist/node_modules/@mui/utils/esm/isHostComponent/isHostComponent.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/mergeSlotProps/mergeSlotProps.js +2 -0
- package/dist/node_modules/@mui/utils/esm/mergeSlotProps/mergeSlotProps.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/omitEventHandlers/omitEventHandlers.js +2 -0
- package/dist/node_modules/@mui/utils/esm/omitEventHandlers/omitEventHandlers.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js +2 -0
- package/dist/node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/ponyfillGlobal/ponyfillGlobal.js +2 -0
- package/dist/node_modules/@mui/utils/esm/ponyfillGlobal/ponyfillGlobal.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/refType/refType.js +2 -0
- package/dist/node_modules/@mui/utils/esm/refType/refType.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/resolveComponentProps/resolveComponentProps.js +2 -0
- package/dist/node_modules/@mui/utils/esm/resolveComponentProps/resolveComponentProps.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/useControlled/useControlled.js +2 -0
- package/dist/node_modules/@mui/utils/esm/useControlled/useControlled.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js +2 -0
- package/dist/node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js +2 -0
- package/dist/node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/useForkRef/useForkRef.js +2 -0
- package/dist/node_modules/@mui/utils/esm/useForkRef/useForkRef.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/useId/useId.js +2 -0
- package/dist/node_modules/@mui/utils/esm/useId/useId.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/useSlotProps/useSlotProps.js +2 -0
- package/dist/node_modules/@mui/utils/esm/useSlotProps/useSlotProps.js.map +1 -0
- package/dist/node_modules/@mui/utils/esm/visuallyHidden/visuallyHidden.js +2 -0
- package/dist/node_modules/@mui/utils/esm/visuallyHidden/visuallyHidden.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/AdapterDayjs/AdapterDayjs.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/AdapterDayjs/AdapterDayjs.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/DateCalendar.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/DateCalendar.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/DayCalendar.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/DayCalendar.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/PickersFadeTransitionGroup.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/PickersFadeTransitionGroup.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/PickersSlideTransition.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/PickersSlideTransition.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/dateCalendarClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/dateCalendarClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/dayCalendarClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/dayCalendarClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/pickersFadeTransitionGroupClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/pickersFadeTransitionGroupClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/pickersSlideTransitionClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/pickersSlideTransitionClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/useCalendarState.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/useCalendarState.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/useIsDateDisabled.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateCalendar/useIsDateDisabled.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateField/DateField.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateField/DateField.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateField/useDateField.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateField/useDateField.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DatePicker/DatePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DatePicker/DatePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DatePicker/DatePickerToolbar.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DatePicker/DatePickerToolbar.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DatePicker/datePickerToolbarClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DatePicker/datePickerToolbarClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DatePicker/shared.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DatePicker/shared.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimeField/DateTimeField.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimeField/DateTimeField.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimeField/useDateTimeField.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimeField/useDateTimeField.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimePicker/DateTimePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimePicker/DateTimePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimePicker/DateTimePickerTabs.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimePicker/DateTimePickerTabs.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimePicker/DateTimePickerToolbar.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimePicker/DateTimePickerToolbar.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimePicker/dateTimePickerTabsClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimePicker/dateTimePickerTabsClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimePicker/dateTimePickerToolbarClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimePicker/dateTimePickerToolbarClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimePicker/shared.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DateTimePicker/shared.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DayCalendarSkeleton/DayCalendarSkeleton.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DayCalendarSkeleton/DayCalendarSkeleton.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DayCalendarSkeleton/dayCalendarSkeletonClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DayCalendarSkeleton/dayCalendarSkeletonClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DesktopDatePicker/DesktopDatePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DesktopDatePicker/DesktopDatePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DesktopDateTimePicker/DesktopDateTimePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DesktopDateTimePicker/DesktopDateTimePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DesktopDateTimePicker/DesktopDateTimePickerLayout.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DesktopTimePicker/DesktopTimePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DesktopTimePicker/DesktopTimePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DigitalClock/DigitalClock.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DigitalClock/DigitalClock.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/DigitalClock/digitalClockClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/DigitalClock/digitalClockClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/LocalizationProvider/LocalizationProvider.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/LocalizationProvider/LocalizationProvider.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/MobileDatePicker/MobileDatePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/MobileDatePicker/MobileDatePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/MobileDateTimePicker/MobileDateTimePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/MobileDateTimePicker/MobileDateTimePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/MobileTimePicker/MobileTimePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/MobileTimePicker/MobileTimePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/MonthCalendar/MonthCalendar.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/MonthCalendar/MonthCalendar.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/MonthCalendar/PickersMonth.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/MonthCalendar/PickersMonth.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/MonthCalendar/monthCalendarClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/MonthCalendar/monthCalendarClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/MonthCalendar/pickersMonthClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/MonthCalendar/pickersMonthClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/MultiSectionDigitalClock.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/MultiSectionDigitalClock.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/multiSectionDigitalClockClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/multiSectionDigitalClockClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/multiSectionDigitalClockSectionClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/MultiSectionDigitalClock/multiSectionDigitalClockSectionClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersActionBar/PickersActionBar.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersActionBar/PickersActionBar.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersCalendarHeader/PickersCalendarHeader.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersCalendarHeader/PickersCalendarHeader.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersCalendarHeader/pickersCalendarHeaderClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersCalendarHeader/pickersCalendarHeaderClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersDay/PickersDay.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersDay/PickersDay.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersDay/pickersDayClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersDay/pickersDayClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersLayout/PickersLayout.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersLayout/PickersLayout.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersLayout/pickersLayoutClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersLayout/pickersLayoutClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersLayout/usePickerLayout.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersLayout/usePickerLayout.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersSectionList/PickersSectionList.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersSectionList/PickersSectionList.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersSectionList/pickersSectionListClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersSectionList/pickersSectionListClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersShortcuts/PickersShortcuts.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersShortcuts/PickersShortcuts.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersFilledInput/PickersFilledInput.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersFilledInput/PickersFilledInput.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersFilledInput/pickersFilledInputClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersFilledInput/pickersFilledInputClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersInput/PickersInput.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersInput/PickersInput.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersInput/pickersInputClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersInput/pickersInputClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersInputBase/PickersInputBase.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersInputBase/PickersInputBase.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersInputBase/pickersInputBaseClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersInputBase/pickersInputBaseClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersOutlinedInput/Outline.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersOutlinedInput/Outline.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersOutlinedInput/pickersOutlinedInputClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersOutlinedInput/pickersOutlinedInputClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersTextField.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/PickersTextField.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/pickersTextFieldClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/PickersTextField/pickersTextFieldClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/StaticDatePicker/StaticDatePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/StaticDatePicker/StaticDatePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/StaticDateTimePicker/StaticDateTimePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/StaticDateTimePicker/StaticDateTimePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/StaticTimePicker/StaticTimePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/StaticTimePicker/StaticTimePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/Clock.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/Clock.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/ClockNumber.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/ClockNumber.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/ClockNumbers.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/ClockNumbers.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/ClockPointer.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/ClockPointer.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/TimeClock.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/TimeClock.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/clockClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/clockClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/clockNumberClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/clockNumberClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/clockPointerClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/clockPointerClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/shared.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/shared.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/timeClockClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeClock/timeClockClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeField/TimeField.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeField/TimeField.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeField/useTimeField.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimeField/useTimeField.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimePicker/TimePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimePicker/TimePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimePicker/TimePickerToolbar.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimePicker/TimePickerToolbar.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimePicker/shared.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimePicker/shared.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/TimePicker/timePickerToolbarClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/TimePicker/timePickerToolbarClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/YearCalendar/PickersYear.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/YearCalendar/PickersYear.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/YearCalendar/YearCalendar.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/YearCalendar/YearCalendar.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/YearCalendar/pickersYearClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/YearCalendar/pickersYearClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/YearCalendar/yearCalendarClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/YearCalendar/yearCalendarClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/dateViewRenderers/dateViewRenderers.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/dateViewRenderers/dateViewRenderers.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/hooks/useClearableField.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/hooks/useClearableField.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/hooks/usePickersTranslations.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/hooks/usePickersTranslations.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/hooks/useSplitFieldProps.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/hooks/useSplitFieldProps.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/icons/index.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/icons/index.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickerViewRoot/PickerViewRoot.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickerViewRoot/PickerViewRoot.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersArrowSwitcher/pickersArrowSwitcherClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersArrowSwitcher/pickersArrowSwitcherClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersModalDialog.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersModalDialog.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersPopper.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersPopper.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersProvider.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersProvider.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersToolbar.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersToolbar.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersToolbarButton.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersToolbarButton.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersToolbarText.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/PickersToolbarText.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/pickersPopperClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/pickersPopperClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/pickersToolbarClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/pickersToolbarClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/pickersToolbarTextClasses.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/components/pickersToolbarTextClasses.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/constants/dimensions.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/constants/dimensions.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/date-helpers-hooks.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/date-helpers-hooks.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/defaultizedFieldProps.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/defaultizedFieldProps.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useClockReferenceDate.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useClockReferenceDate.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useDefaultReduceAnimations.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useDefaultReduceAnimations.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useDesktopPicker/useDesktopPicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useDesktopPicker/useDesktopPicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/buildSectionsFromFormat.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/buildSectionsFromFormat.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/useField.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/useField.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/useField.utils.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/useField.utils.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldCharacterEditing.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldCharacterEditing.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldState.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldState.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldV6TextField.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldV6TextField.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldV7TextField.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useField/useFieldV7TextField.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useIsLandscape.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useIsLandscape.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useMobilePicker/useMobilePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useMobilePicker/useMobilePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useOpenState.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useOpenState.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerLayoutProps.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerLayoutProps.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerOwnerState.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerOwnerState.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerValue.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerValue.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerViews.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePickerViews.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useStaticPicker/useStaticPicker.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useStaticPicker/useStaticPicker.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useUtils.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useUtils.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useValueWithTimezone.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useValueWithTimezone.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useViews.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/hooks/useViews.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/convertFieldResponseIntoMuiTextFieldProps.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/convertFieldResponseIntoMuiTextFieldProps.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/date-time-utils.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/date-time-utils.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/date-utils.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/date-utils.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/getDefaultReferenceDate.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/getDefaultReferenceDate.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/time-utils.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/time-utils.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/utils.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/utils.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/valueManagers.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/valueManagers.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/views.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/internals/utils/views.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/locales/enUS.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/locales/enUS.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/locales/utils/getPickersLocalization.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/locales/utils/getPickersLocalization.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/timeViewRenderers/timeViewRenderers.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/timeViewRenderers/timeViewRenderers.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/validation/extractValidationProps.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/validation/extractValidationProps.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/validation/useValidation.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/validation/useValidation.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/validation/validateDate.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/validation/validateDate.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/validation/validateDateTime.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/validation/validateDateTime.js.map +1 -0
- package/dist/node_modules/@mui/x-date-pickers/validation/validateTime.js +2 -0
- package/dist/node_modules/@mui/x-date-pickers/validation/validateTime.js.map +1 -0
- package/dist/node_modules/@mui/x-internals/esm/warning/warning.js +2 -0
- package/dist/node_modules/@mui/x-internals/esm/warning/warning.js.map +1 -0
- package/dist/node_modules/appsec-ui/dist/index.mjs.js +2 -0
- package/dist/node_modules/appsec-ui/dist/index.mjs.js.map +1 -0
- package/dist/node_modules/appsec-ui/node_modules/tailwind-merge/dist/bundle-mjs.mjs.js +2 -0
- package/dist/node_modules/appsec-ui/node_modules/tailwind-merge/dist/bundle-mjs.mjs.js.map +1 -0
- package/dist/node_modules/clsx/dist/clsx.mjs.js +2 -0
- package/dist/node_modules/clsx/dist/clsx.mjs.js.map +1 -0
- package/dist/node_modules/dom-helpers/esm/addClass.js +2 -0
- package/dist/node_modules/dom-helpers/esm/addClass.js.map +1 -0
- package/dist/node_modules/dom-helpers/esm/hasClass.js +2 -0
- package/dist/node_modules/dom-helpers/esm/hasClass.js.map +1 -0
- package/dist/node_modules/dom-helpers/esm/removeClass.js +2 -0
- package/dist/node_modules/dom-helpers/esm/removeClass.js.map +1 -0
- package/dist/node_modules/object-assign/index.js +7 -0
- package/dist/node_modules/object-assign/index.js.map +1 -0
- package/dist/node_modules/prop-types/checkPropTypes.js +2 -0
- package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -0
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js +2 -0
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +1 -0
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +2 -0
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -0
- package/dist/node_modules/prop-types/index.js +2 -0
- package/dist/node_modules/prop-types/index.js.map +1 -0
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +2 -0
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +1 -0
- package/dist/node_modules/prop-types/lib/has.js +2 -0
- package/dist/node_modules/prop-types/lib/has.js.map +1 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +10 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +1 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +10 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
- package/dist/node_modules/prop-types/node_modules/react-is/index.js +2 -0
- package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +1 -0
- package/dist/node_modules/react-is/cjs/react-is.development.js +11 -0
- package/dist/node_modules/react-is/cjs/react-is.development.js.map +1 -0
- package/dist/node_modules/react-is/cjs/react-is.production.js +11 -0
- package/dist/node_modules/react-is/cjs/react-is.production.js.map +1 -0
- package/dist/node_modules/react-is/index.js +2 -0
- package/dist/node_modules/react-is/index.js.map +1 -0
- package/dist/node_modules/react-transition-group/esm/CSSTransition.js +2 -0
- package/dist/node_modules/react-transition-group/esm/CSSTransition.js.map +1 -0
- package/dist/node_modules/react-transition-group/esm/ReplaceTransition.js +2 -0
- package/dist/node_modules/react-transition-group/esm/ReplaceTransition.js.map +1 -0
- package/dist/node_modules/react-transition-group/esm/SwitchTransition.js +2 -0
- package/dist/node_modules/react-transition-group/esm/SwitchTransition.js.map +1 -0
- package/dist/node_modules/react-transition-group/esm/Transition.js +2 -0
- package/dist/node_modules/react-transition-group/esm/Transition.js.map +1 -0
- package/dist/node_modules/react-transition-group/esm/TransitionGroup.js +2 -0
- package/dist/node_modules/react-transition-group/esm/TransitionGroup.js.map +1 -0
- package/dist/node_modules/react-transition-group/esm/TransitionGroupContext.js +2 -0
- package/dist/node_modules/react-transition-group/esm/TransitionGroupContext.js.map +1 -0
- package/dist/node_modules/react-transition-group/esm/config.js +2 -0
- package/dist/node_modules/react-transition-group/esm/config.js.map +1 -0
- package/dist/node_modules/react-transition-group/esm/utils/ChildMapping.js +2 -0
- package/dist/node_modules/react-transition-group/esm/utils/ChildMapping.js.map +1 -0
- package/dist/node_modules/react-transition-group/esm/utils/PropTypes.js +2 -0
- package/dist/node_modules/react-transition-group/esm/utils/PropTypes.js.map +1 -0
- package/dist/node_modules/react-transition-group/esm/utils/reflow.js +2 -0
- package/dist/node_modules/react-transition-group/esm/utils/reflow.js.map +1 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.mjs.js +2 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.mjs.js.map +1 -0
- package/dist/node_modules/uuid/dist/native.js +2 -0
- package/dist/node_modules/uuid/dist/native.js.map +1 -0
- package/dist/node_modules/uuid/dist/rng.js +2 -0
- package/dist/node_modules/uuid/dist/rng.js.map +1 -0
- package/dist/node_modules/uuid/dist/stringify.js +2 -0
- package/dist/node_modules/uuid/dist/stringify.js.map +1 -0
- package/dist/node_modules/uuid/dist/v4.js +2 -0
- package/dist/node_modules/uuid/dist/v4.js.map +1 -0
- package/dist/types/components/AssignReminders/AssignReminderLevels.d.ts.map +1 -1
- package/dist/types/components/AssignReminders/AssignReminderWrapper.d.ts.map +1 -1
- package/dist/types/components/AssignReminders/ManageReminders.d.ts.map +1 -1
- package/dist/types/components/AssignReminders/components/AssignLevelsDatePicker.d.ts.map +1 -1
- package/dist/types/components/AssignReminders/components/CustomDatePicker.d.ts.map +1 -1
- package/dist/types/components/AssignReminders/components/ReviewStatus.d.ts.map +1 -1
- package/dist/types/components/AssignReminders/styles/AssignLevelsDatePickerStyles.d.ts +1 -0
- package/dist/types/components/AssignReminders/styles/AssignLevelsDatePickerStyles.d.ts.map +1 -1
- package/dist/types/components/AssignReminders/styles/AssignReminderStyles.d.ts +1 -0
- package/dist/types/components/AssignReminders/styles/AssignReminderStyles.d.ts.map +1 -1
- package/dist/types/components/AssignReminders/styles/AssignReminderWrapperStyles.d.ts +1 -0
- package/dist/types/components/AssignReminders/styles/AssignReminderWrapperStyles.d.ts.map +1 -1
- package/dist/types/components/AssignReminders/styles/ReviewStatusStyles.d.ts +1 -0
- package/dist/types/components/AssignReminders/styles/ReviewStatusStyles.d.ts.map +1 -1
- package/dist/types/components/AssignReminders/utils/approvalDateValidation.d.ts +7 -0
- package/dist/types/components/AssignReminders/utils/approvalDateValidation.d.ts.map +1 -0
- package/dist/types/components/PromptEditor/PromptEditor.d.ts +16 -0
- package/dist/types/components/PromptEditor/PromptEditor.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/LscGuidelines.d.ts +1 -1
- package/dist/types/features/lsc-guidelines/LscGuidelines.d.ts.map +1 -1
- package/dist/types/features/lsc-guidelines/components/DataSourceCard.d.ts +5 -0
- package/dist/types/features/lsc-guidelines/components/DataSourceCard.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/components/GuidelineAttachmentIcon.d.ts.map +1 -1
- package/dist/types/features/lsc-guidelines/components/GuidelineCardMenu.d.ts +1 -7
- package/dist/types/features/lsc-guidelines/components/GuidelineCardMenu.d.ts.map +1 -1
- package/dist/types/features/lsc-guidelines/components/GuidelineCartItem.d.ts.map +1 -1
- package/dist/types/features/lsc-guidelines/components/GuidelineCreateForm.d.ts +4 -0
- package/dist/types/features/lsc-guidelines/components/GuidelineCreateForm.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/components/GuidelineEditorWrapper.d.ts +11 -0
- package/dist/types/features/lsc-guidelines/components/GuidelineEditorWrapper.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/components/GuidelineFilterPanel.d.ts +9 -0
- package/dist/types/features/lsc-guidelines/components/GuidelineFilterPanel.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/components/GuidelineLandingPage.d.ts +1 -1
- package/dist/types/features/lsc-guidelines/components/GuidelineLandingPage.d.ts.map +1 -1
- package/dist/types/features/lsc-guidelines/components/GuidelineLibrary.d.ts +21 -8
- package/dist/types/features/lsc-guidelines/components/GuidelineLibrary.d.ts.map +1 -1
- package/dist/types/features/lsc-guidelines/components/GuidelineLibraryCard.d.ts +9 -2
- package/dist/types/features/lsc-guidelines/components/GuidelineLibraryCard.d.ts.map +1 -1
- package/dist/types/features/lsc-guidelines/components/GuidelineWorkspaceHostProvider.d.ts +8 -0
- package/dist/types/features/lsc-guidelines/components/GuidelineWorkspaceHostProvider.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/components/GuidelineWorkspacePage.d.ts +24 -0
- package/dist/types/features/lsc-guidelines/components/GuidelineWorkspacePage.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/components/LearningManagementWrapper.d.ts +19 -0
- package/dist/types/features/lsc-guidelines/components/LearningManagementWrapper.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/constants.d.ts +47 -0
- package/dist/types/features/lsc-guidelines/constants.d.ts.map +1 -1
- package/dist/types/features/lsc-guidelines/hooks/useClearGuidelineCartOnReload.d.ts +2 -0
- package/dist/types/features/lsc-guidelines/hooks/useClearGuidelineCartOnReload.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/hooks/useDebounce.d.ts +2 -0
- package/dist/types/features/lsc-guidelines/hooks/useDebounce.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/hooks/useGuidelineCartMemstoreSync.d.ts +15 -0
- package/dist/types/features/lsc-guidelines/hooks/useGuidelineCartMemstoreSync.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/hooks/useGuidelineDataCart.d.ts +6 -0
- package/dist/types/features/lsc-guidelines/hooks/useGuidelineDataCart.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/hooks/useGuidelineSelection.d.ts.map +1 -1
- package/dist/types/features/lsc-guidelines/hooks/useGuidelineWorkspaceLegacyBridge.d.ts +5 -0
- package/dist/types/features/lsc-guidelines/hooks/useGuidelineWorkspaceLegacyBridge.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/hooks/useInstantLearningGuidelineCart.d.ts +191 -0
- package/dist/types/features/lsc-guidelines/hooks/useInstantLearningGuidelineCart.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/hooks/useInstantLearningGuidelines.d.ts +179 -0
- package/dist/types/features/lsc-guidelines/hooks/useInstantLearningGuidelines.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/hooks/useMemstoreGuidelineCart.d.ts +187 -0
- package/dist/types/features/lsc-guidelines/hooks/useMemstoreGuidelineCart.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/hooks/useSavedGuidelines.d.ts +177 -0
- package/dist/types/features/lsc-guidelines/hooks/useSavedGuidelines.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/index.d.ts +34 -2
- package/dist/types/features/lsc-guidelines/index.d.ts.map +1 -1
- package/dist/types/features/lsc-guidelines/queryClient.d.ts +3 -0
- package/dist/types/features/lsc-guidelines/queryClient.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/services/guideline.api.d.ts +19 -0
- package/dist/types/features/lsc-guidelines/services/guideline.api.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/services/guideline.cart.api.d.ts +28 -0
- package/dist/types/features/lsc-guidelines/services/guideline.cart.api.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/services/guideline.chat.d.ts +2 -0
- package/dist/types/features/lsc-guidelines/services/guideline.chat.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/services/guideline.content.d.ts +3 -0
- package/dist/types/features/lsc-guidelines/services/guideline.content.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/services/guideline.runtime.config.d.ts +68 -0
- package/dist/types/features/lsc-guidelines/services/guideline.runtime.config.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/services/guideline.session.d.ts +10 -0
- package/dist/types/features/lsc-guidelines/services/guideline.session.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/services/instant-learning.api.d.ts +109 -0
- package/dist/types/features/lsc-guidelines/services/instant-learning.api.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/services/instant-learning.wishlist.d.ts +8 -0
- package/dist/types/features/lsc-guidelines/services/instant-learning.wishlist.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/types/add-context.types.d.ts +38 -0
- package/dist/types/features/lsc-guidelines/types/add-context.types.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/types/api.types.d.ts +116 -0
- package/dist/types/features/lsc-guidelines/types/api.types.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/types/file-item.d.ts +45 -0
- package/dist/types/features/lsc-guidelines/types/file-item.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/types/guideline.api.types.d.ts +11 -0
- package/dist/types/features/lsc-guidelines/types/guideline.api.types.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/types/guideline.types.d.ts +41 -0
- package/dist/types/features/lsc-guidelines/types/guideline.types.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/types.d.ts +214 -2
- package/dist/types/features/lsc-guidelines/types.d.ts.map +1 -1
- package/dist/types/features/lsc-guidelines/utils/addContextHelpers.d.ts +7 -0
- package/dist/types/features/lsc-guidelines/utils/addContextHelpers.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/utils/cn.d.ts +3 -0
- package/dist/types/features/lsc-guidelines/utils/cn.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/utils/guidelineFiles.d.ts +17 -0
- package/dist/types/features/lsc-guidelines/utils/guidelineFiles.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/utils/guidelineOverlay.d.ts +3 -0
- package/dist/types/features/lsc-guidelines/utils/guidelineOverlay.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/utils/guidelineSort.d.ts +3 -0
- package/dist/types/features/lsc-guidelines/utils/guidelineSort.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/utils/microfrontend.d.ts +13 -0
- package/dist/types/features/lsc-guidelines/utils/microfrontend.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/utils/session.d.ts +4 -0
- package/dist/types/features/lsc-guidelines/utils/session.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/utils/url.d.ts +2 -0
- package/dist/types/features/lsc-guidelines/utils/url.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/utils.d.ts +10 -1
- package/dist/types/features/lsc-guidelines/utils.d.ts.map +1 -1
- package/dist/types/features/lsc-guidelines/workspace/GuidelineWorkspace.d.ts +23 -0
- package/dist/types/features/lsc-guidelines/workspace/GuidelineWorkspace.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/workspace/GuidelineWorkspaceHydrator.d.ts +2 -0
- package/dist/types/features/lsc-guidelines/workspace/GuidelineWorkspaceHydrator.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/workspace/GuidelineWorkspaceProvider.d.ts +8 -0
- package/dist/types/features/lsc-guidelines/workspace/GuidelineWorkspaceProvider.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/workspace/useGuidelineWorkspace.d.ts +44 -0
- package/dist/types/features/lsc-guidelines/workspace/useGuidelineWorkspace.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/workspace/workspace.context.d.ts +9 -0
- package/dist/types/features/lsc-guidelines/workspace/workspace.context.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/workspace/workspace.runtime.d.ts +12 -0
- package/dist/types/features/lsc-guidelines/workspace/workspace.runtime.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/workspace/workspace.selectors.d.ts +5 -0
- package/dist/types/features/lsc-guidelines/workspace/workspace.selectors.d.ts.map +1 -0
- package/dist/types/features/lsc-guidelines/workspace/workspace.types.d.ts +87 -0
- package/dist/types/features/lsc-guidelines/workspace/workspace.types.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +15 -8
- package/dist/cjs/components/AssignReminders/AssignReminderTest.js +0 -2
- package/dist/cjs/components/AssignReminders/AssignReminderTest.js.map +0 -1
- package/dist/cjs/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js +0 -2
- package/dist/cjs/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs.js +0 -2
- package/dist/cjs/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs.js +0 -2
- package/dist/cjs/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs.js +0 -2
- package/dist/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs.js +0 -2
- package/dist/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/primitive/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/primitive/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-arrow/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-arrow/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-compose-refs/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-compose-refs/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-context/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-context/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-id/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-id/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-popper/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-popper/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-portal/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-portal/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-presence/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-presence/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-primitive/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-primitive/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-slot/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-slot/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-tooltip/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-tooltip/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-use-size/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-use-size/dist/index.mjs.js.map +0 -1
- package/dist/cjs/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs.js +0 -2
- package/dist/cjs/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs.js.map +0 -1
- package/dist/components/AssignReminders/AssignReminderTest.js +0 -2
- package/dist/components/AssignReminders/AssignReminderTest.js.map +0 -1
- package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js +0 -2
- package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js.map +0 -1
- package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs.js +0 -2
- package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs.js.map +0 -1
- package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs.js +0 -2
- package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs.js.map +0 -1
- package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs.js +0 -2
- package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs.js.map +0 -1
- package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs.js +0 -2
- package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/primitive/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/primitive/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-arrow/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-arrow/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-context/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-context/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-id/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-id/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-popper/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-popper/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-portal/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-portal/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-presence/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-presence/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-primitive/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-primitive/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-slot/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-slot/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-tooltip/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-tooltip/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-use-size/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-use-size/dist/index.mjs.js.map +0 -1
- package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs.js +0 -2
- package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs.js","sources":["../../../../node_modules/appsec-ui/dist/index.mjs"],"sourcesContent":["import React11, { createContext, forwardRef, memo, useState, useRef, useMemo, useEffect, useCallback, useContext } from 'react';\nimport { QueryClient, useQueryClient, useMutation, useQuery, QueryClientProvider } from '@tanstack/react-query';\nimport { jsxs, jsx, Fragment } from 'react/jsx-runtime';\nimport { Search, X, Trash2, ChevronLeft, ChevronRight, FileText, Users, Share2, ChevronUp, ChevronDown, Layers, Pencil, Plus, AlertTriangle, ChevronsUpDown, Upload, Download, GripVertical, CheckCircle2, ArrowRight, Check, Copy, UserPlus, UserMinus, Box, Key, Shield, Network, Users2, Settings2, Info, XCircle, CheckCircle, Minimize2, Maximize2 } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n// src/context/AppsecProvider.tsx\n\n// src/api/client.ts\nvar createApiClient = (baseUrl, getAuthToken) => {\n const request = async (path, options = {}) => {\n const token = getAuthToken?.();\n const res = await fetch(`${baseUrl}${path}`, {\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...token && { Authorization: `Bearer ${token}` },\n ...options.headers\n }\n });\n if (!res.ok) {\n let msg = `Request failed (${res.status})`;\n try {\n const body = await res.json();\n if (body?.message) msg = body.message;\n } catch {\n }\n throw new Error(msg);\n }\n return res.json();\n };\n return { request };\n};\n\n// src/api/adapter.ts\nvar createRbacApi = (client) => ({\n importConfig: (appId, data) => client.request(`/rbac/import-json`, {\n method: \"POST\",\n body: JSON.stringify(data)\n }),\n getAppId: (name) => client.request(`/apps?name=${name}`, {\n method: \"GET\"\n }),\n getModules: (appId, page, limit, name = \"\") => client.request(`/modules?appId=${appId}${page ? `&page=${page}` : \"\"}${limit ? `&limit=${limit}` : \"\"}${name ? `&name=${encodeURIComponent(name)}` : \"\"}`, {\n method: \"GET\"\n }),\n getRoles: (appId, page, limit, name = \"\") => client.request(`/roles?appId=${appId}${page ? `&page=${page}` : \"\"}${limit ? `&limit=${limit}` : \"\"}${name ? `&name=${encodeURIComponent(name)}` : \"\"}`, {\n method: \"GET\"\n }),\n getPermission: (appId, page, limit, name = \"\") => client.request(`/permissions?appId=${appId}${page ? `&page=${page}` : \"\"}${limit ? `&limit=${limit}` : \"\"}${name ? `&name=${encodeURIComponent(name)}` : \"\"}`, {\n method: \"GET\"\n }),\n getAcls: (appId, page = 1, limit = 50, resourceId, pagination = true) => client.request(\n `/acl?application=${appId}${pagination ? `&page=${page}&limit=${limit}` : \"&pagination=false\"}${resourceId ? `&resourceId=${resourceId}` : \"\"}`,\n {\n method: \"GET\"\n }\n ),\n getResourceForModuleId: (moduleId, page = 1, limit = 30) => client.request(`/resource?module=${moduleId}&page=${page}&limit=${limit}`, {\n method: \"GET\"\n }),\n getRoleModuleMapping: (appId) => client.request(`/modules/mapping?appId=${appId}`, {\n method: \"GET\"\n }),\n createAcl: (data) => client.request(\"/acl\", {\n method: \"POST\",\n body: JSON.stringify(data)\n }),\n deleteAcl: (id) => client.request(`/acl?_id=${id}`, {\n method: \"DELETE\"\n }),\n bulkUpdateAcl: (data) => client.request(\"/acl/bulkUpdate\", {\n method: \"PUT\",\n body: JSON.stringify(data)\n }),\n updateModule: (id, data) => client.request(`/modules/update/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(data)\n }),\n createModule: (data) => client.request(\"/modules/create\", {\n method: \"POST\",\n body: JSON.stringify(data)\n }),\n deleteModule: (id) => client.request(`/modules/${id}`, {\n method: \"DELETE\"\n }),\n createPermission: (data) => client.request(`/permissions`, {\n method: \"POST\",\n body: JSON.stringify(data)\n }),\n updatePermission: (id, data) => client.request(`/permissions/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(data)\n }),\n deletePermission: (id) => client.request(`/permissions?id=${id}`, {\n method: \"DELETE\"\n }),\n createRole: (data) => client.request(`/roles`, {\n method: \"POST\",\n body: JSON.stringify(data)\n }),\n updateRole: (id, data) => client.request(`/roles/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(data)\n }),\n deleteRole: (id) => client.request(`/roles/${id}`, {\n method: \"DELETE\"\n }),\n updateModuleMapping: (data) => client.request(`/modules/updateMapping`, {\n method: \"PUT\",\n body: JSON.stringify(data)\n }),\n getGroups: (appId, page = 1, limit = 30) => client.request(`/groups?appId=${appId}&page=${page}&limit=${limit}`, {\n method: \"GET\"\n }),\n updateGroup: (id, data) => client.request(`/groups/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(data)\n }),\n deleteGroup: (id) => client.request(`/groups/${id}`, {\n method: \"DELETE\"\n }),\n createGroup: (data) => client.request(`/groups`, {\n method: \"POST\",\n body: JSON.stringify(data)\n }),\n searchUsers: (query) => client.request(`/users/search?q=${encodeURIComponent(query)}`, {\n method: \"GET\"\n }),\n getResourceGroups: (appId, moduleId, page = 1, limit = 30) => client.request(\n `/resource-group?application=${appId}&module=${moduleId}&page=${page}&limit=${limit}`,\n {\n method: \"GET\"\n }\n ),\n createResourceGroup: (data) => client.request(\"/resource-group\", {\n method: \"POST\",\n body: JSON.stringify(data)\n }),\n updateResourceGroup: (id, data) => client.request(`/resource-group/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(data)\n }),\n deleteResourceGroup: (id) => client.request(`/resource-group/${id}`, {\n method: \"DELETE\"\n }),\n shareResourceGroup: (data) => client.request(\"/acl/resource-group\", {\n method: \"POST\",\n body: JSON.stringify(data)\n }),\n sendMail: (data) => client.request(\"/mail\", {\n method: \"POST\",\n body: JSON.stringify(data)\n }),\n deleteAclsByResourceGroup: (data) => client.request(\"/acl/resource-group\", {\n method: \"DELETE\",\n body: JSON.stringify(data)\n })\n});\nvar queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1e3,\n // 5 minutes\n gcTime: 10 * 60 * 1e3,\n // 10 minutes (formerly cacheTime)\n retry: (failureCount, error) => {\n if (error instanceof Error && error.message.includes(\"4\")) {\n return false;\n }\n return failureCount < 3;\n },\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false\n },\n mutations: {\n retry: false\n }\n }\n});\nfunction RbacQueryProvider({ children }) {\n return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children });\n}\nfunction cn(...inputs) {\n return twMerge(clsx(inputs));\n}\nvar ToastContext = createContext(null);\nvar ICONS = {\n success: /* @__PURE__ */ jsx(CheckCircle, { className: \"h-4 w-4 shrink-0 text-appsec-success\" }),\n error: /* @__PURE__ */ jsx(XCircle, { className: \"h-4 w-4 shrink-0 text-appsec-danger\" }),\n info: /* @__PURE__ */ jsx(Info, { className: \"h-4 w-4 shrink-0 text-appsec-primary\" })\n};\nvar STYLES = {\n success: \"border-appsec-success/30 bg-appsec-success-light text-appsec-text\",\n error: \"border-appsec-danger/30 bg-appsec-danger-light text-appsec-text\",\n info: \"border-appsec-primary/30 bg-appsec-primary-light text-appsec-text\"\n};\nvar AUTO_DISMISS_MS = 4e3;\nfunction ToastEntry({ toast, onDismiss }) {\n const [visible, setVisible] = useState(false);\n useEffect(() => {\n const raf = requestAnimationFrame(() => setVisible(true));\n return () => cancelAnimationFrame(raf);\n }, []);\n useEffect(() => {\n const t = setTimeout(() => {\n setVisible(false);\n setTimeout(onDismiss, 200);\n }, AUTO_DISMISS_MS);\n return () => clearTimeout(t);\n }, [onDismiss]);\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: cn(\n \"flex items-start gap-2.5 px-3 py-2.5 rounded-appsec border shadow-sm max-w-xs w-full pointer-events-auto\",\n \"transition-all duration-200\",\n visible ? \"opacity-100 translate-x-0\" : \"opacity-0 translate-x-4\",\n STYLES[toast.type]\n ),\n children: [\n ICONS[toast.type],\n /* @__PURE__ */ jsx(\"p\", { className: \"flex-1 text-xs leading-snug\", children: toast.message }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n setVisible(false);\n setTimeout(onDismiss, 200);\n },\n className: \"shrink-0 p-0.5 rounded hover:bg-black/10 transition-colors\",\n children: /* @__PURE__ */ jsx(X, { className: \"h-3 w-3 text-appsec-text-secondary\" })\n }\n )\n ]\n }\n );\n}\nfunction ToastProvider({ children }) {\n const [toasts, setToasts] = useState([]);\n const addToast = useCallback((type, message) => {\n const id = Math.random().toString(36).slice(2, 9);\n setToasts((prev) => [...prev, { id, type, message }]);\n }, []);\n const removeToast = useCallback((id) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n return /* @__PURE__ */ jsxs(ToastContext.Provider, { value: { addToast }, children: [\n children,\n /* @__PURE__ */ jsx(\"div\", { className: \"fixed top-4 right-4 z-[9999] flex flex-col gap-2 pointer-events-none\", children: toasts.map((t) => /* @__PURE__ */ jsx(ToastEntry, { toast: t, onDismiss: () => removeToast(t.id) }, t.id)) })\n ] });\n}\nfunction useToast() {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error(\"useToast must be used inside <ToastProvider>\");\n return {\n success: (message) => ctx.addToast(\"success\", message),\n error: (message) => ctx.addToast(\"error\", message),\n info: (message) => ctx.addToast(\"info\", message)\n };\n}\nvar DEFAULT_BADGE_COLORS = {\n admin: { bg: \"bg-appsec-danger-light\", text: \"text-appsec-danger\" },\n editor: { bg: \"bg-appsec-warning-light\", text: \"text-appsec-warning\" },\n viewer: { bg: \"bg-appsec-success-light\", text: \"text-appsec-success\" }\n};\nvar AppsecContext = createContext(null);\nfunction AppsecProvider({\n children,\n appId,\n mode,\n appsecUrl,\n roleTemplates = [],\n badgeColorMap = {},\n onError,\n baseUrl,\n getAuthToken\n}) {\n const [isLoading, setIsLoading] = useState(false);\n const [lastError, setLastError] = useState(null);\n const setLoading = useCallback((loading) => {\n setIsLoading(loading);\n }, []);\n const setError = useCallback(\n (err) => {\n setLastError(err);\n if (err && onError) onError(err);\n },\n [onError]\n );\n const clearError = useCallback(() => setLastError(null), []);\n const currentUserEmail = useMemo(() => {\n if (!getAuthToken) return \"\";\n try {\n const token = getAuthToken();\n const payload = JSON.parse(atob(token.split(\".\")[1]));\n return payload.email || \"\";\n } catch {\n return \"\";\n }\n }, [getAuthToken]);\n const finalAdapter = useMemo(() => {\n if (!baseUrl) {\n throw new Error(\"Either apiAdapter or baseUrl must be provided\");\n }\n const client = createApiClient(baseUrl, getAuthToken);\n return createRbacApi(client);\n }, [baseUrl, getAuthToken]);\n const mergedBadgeColors = {\n ...DEFAULT_BADGE_COLORS,\n ...badgeColorMap\n };\n const value = {\n adapter: finalAdapter,\n appId,\n baseUrl,\n appsecUrl,\n mode,\n roleTemplates,\n badgeColorMap: mergedBadgeColors,\n isLoading,\n setLoading,\n lastError,\n setError,\n clearError,\n currentUserEmail\n };\n return /* @__PURE__ */ jsx(RbacQueryProvider, { children: /* @__PURE__ */ jsx(AppsecContext.Provider, { value, children: /* @__PURE__ */ jsx(ToastProvider, { children }) }) });\n}\nfunction useAppsec() {\n const ctx = useContext(AppsecContext);\n if (!ctx) {\n throw new Error(\"useAppsec must be used inside <AppsecProvider>.\");\n }\n return ctx;\n}\nvar variantClasses = {\n primary: \"bg-appsec-primary text-white hover:opacity-90 disabled:opacity-50\",\n secondary: \"border border-appsec-border bg-appsec-bg text-appsec-text hover:bg-appsec-surface disabled:opacity-50\",\n danger: \"bg-appsec-danger text-white hover:opacity-90 disabled:opacity-50\",\n ghost: \"bg-transparent text-appsec-text-secondary hover:bg-appsec-surface disabled:opacity-50\",\n link: \"bg-transparent text-appsec-primary underline-offset-2 hover:underline p-0 h-auto disabled:opacity-50\"\n};\nvar sizeClasses = {\n sm: \"h-8 px-3 text-xs gap-1.5\",\n md: \"h-9 px-4 text-sm gap-2\",\n lg: \"h-10 px-5 text-sm gap-2\"\n};\nvar Button = forwardRef(\n ({\n variant = \"primary\",\n size = \"md\",\n loading = false,\n iconLeft,\n iconRight,\n children,\n className,\n disabled,\n ...rest\n }, ref) => {\n const isDisabled = disabled || loading;\n return /* @__PURE__ */ jsxs(\n \"button\",\n {\n ref,\n disabled: isDisabled,\n className: cn(\n \"inline-flex items-center justify-center font-medium rounded-appsec transition-all\",\n \"select-none cursor-pointer disabled:cursor-not-allowed\",\n variantClasses[variant],\n variant !== \"link\" && sizeClasses[size],\n className\n ),\n ...rest,\n children: [\n loading ? /* @__PURE__ */ jsx(\"span\", { className: \"inline-block h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" }) : iconLeft,\n children && /* @__PURE__ */ jsx(\"span\", { children }),\n !loading && iconRight\n ]\n }\n );\n }\n);\nButton.displayName = \"Button\";\nvar Input = forwardRef(\n ({\n label,\n error,\n hint,\n iconLeft,\n iconRight,\n wrapperClassName,\n className,\n id,\n lscId,\n lscLabel,\n lscDescription,\n lscWhenToApply,\n lscWhenNotToApply,\n ...rest\n }, ref) => {\n const inputId = id ?? (label ? label.toLowerCase().replace(/\\s+/g, \"-\") : void 0);\n return /* @__PURE__ */ jsxs(\"div\", { className: cn(\"flex flex-col gap-1\", wrapperClassName), children: [\n label && /* @__PURE__ */ jsx(\n \"label\",\n {\n htmlFor: inputId,\n className: \"text-sm font-medium text-appsec-text\",\n children: label\n }\n ),\n /* @__PURE__ */ jsxs(\"div\", { className: \"relative flex items-center\", children: [\n iconLeft && /* @__PURE__ */ jsx(\"span\", { className: \"absolute left-3 text-appsec-text-tertiary flex items-center pointer-events-none\", children: iconLeft }),\n /* @__PURE__ */ jsx(\n \"input\",\n {\n ref,\n id: inputId,\n \"data-lsc-ui-id\": lscId,\n \"data-lsc-ui-type\": lscId ? \"input\" : void 0,\n \"data-lsc-ui-label\": lscLabel,\n \"data-lsc-ui-description\": lscDescription,\n \"data-lsc-ui-when-to-apply\": lscWhenToApply,\n \"data-lsc-ui-when-not-to-apply\": lscWhenNotToApply,\n \"data-lsc-ui-interact-behaviour-control\": lscId ? \"mode\" : void 0,\n className: cn(\n \"w-full h-9 rounded-appsec border border-appsec-border bg-appsec-bg px-3 py-2\",\n \"text-sm text-appsec-text placeholder:text-appsec-text-tertiary\",\n \"transition-colors outline-none\",\n \"focus:border-appsec-primary focus:ring-2 focus:ring-appsec-primary-light\",\n \"disabled:bg-appsec-surface disabled:cursor-not-allowed disabled:opacity-60\",\n error && \"border-appsec-danger focus:border-appsec-danger focus:ring-appsec-danger-light\",\n iconLeft && \"pl-9\",\n iconRight && \"pr-9\",\n className\n ),\n ...rest\n }\n ),\n iconRight && /* @__PURE__ */ jsx(\"span\", { className: \"absolute right-3 text-appsec-text-tertiary flex items-center pointer-events-none\", children: iconRight })\n ] }),\n error && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-danger\", children: error }),\n !error && hint && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-secondary\", children: hint })\n ] });\n }\n);\nInput.displayName = \"Input\";\n\n// src/utils/validators.ts\nfunction isNonEmpty(value) {\n return value.trim().length > 0;\n}\nfunction isWithinLength(value, max) {\n return value.trim().length <= max;\n}\nfunction validateAppRegistration(values) {\n const errors = {};\n if (!isNonEmpty(values.name)) errors.name = \"App name is required.\";\n else if (!isWithinLength(values.name, 80)) errors.name = \"App name must be 80 characters or fewer.\";\n return errors;\n}\nvar fallbackApiInstance = null;\nvar createRemoteMicroFrontendManager = () => {\n if (fallbackApiInstance) {\n return fallbackApiInstance;\n }\n const eventHandlers = /* @__PURE__ */ new Map();\n const api = {\n dispatch(eventName, payload) {\n console.log(\"[Remote] Dispatching event:\", eventName, payload);\n const handlers = eventHandlers.get(eventName);\n if (handlers) {\n handlers.forEach((handler) => handler(payload));\n }\n },\n subscribe(eventName, handler) {\n if (!eventHandlers.has(eventName)) {\n eventHandlers.set(eventName, /* @__PURE__ */ new Set());\n }\n const handlers = eventHandlers.get(eventName);\n handlers?.add(handler);\n console.log(\"[Remote] Subscribed to event:\", eventName);\n return () => api.unsubscribe(eventName, handler);\n },\n unsubscribe(eventName, handler) {\n const handlers = eventHandlers.get(eventName);\n if (handlers) {\n handlers.delete(handler);\n if (handlers.size === 0) {\n eventHandlers.delete(eventName);\n }\n }\n }\n };\n fallbackApiInstance = api;\n return api;\n};\nvar useMicroFrontendApi = () => {\n const apiRef = useRef(null);\n if (!apiRef.current) {\n if (window.hostMicroFrontendApi) {\n apiRef.current = window.hostMicroFrontendApi;\n } else {\n console.warn(\"[Admin Settings] No hostMicroFrontendApi found. Creating fallback local manager.\");\n apiRef.current = createRemoteMicroFrontendManager();\n window.hostMicroFrontendApi = apiRef.current;\n }\n }\n return apiRef.current;\n};\nvar LABELS = {\n heading: \"Register your mode\",\n subheading: \"Tell us a bit about the app you want to manage access for.\",\n namePlaceholder: \"e.g. Admin Dashboard\",\n descriptionPlaceholder: \"Short description (optional)\",\n descriptionLabel: \"Description\",\n ownersLabel: \"App Owners\",\n ownersHint: \"These emails will receive the highest-level role automatically.\",\n ownerPlaceholder: \"owner@example.com\",\n addOwner: \"Add\",\n importConfig: \"Import Config\",\n exportConfig: \"Export Config\",\n importSuccess: \"Config loaded \\u2014 all steps pre-filled.\",\n importError: \"Invalid config file. Expected a valid RBAC export.\"\n};\nvar EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nfunction AppRegistration({\n initialValues = {},\n onChange,\n onImportConfig,\n onExportConfig\n}) {\n const mfApi = useMicroFrontendApi();\n useEffect(() => {\n if (!mfApi) return;\n mfApi.subscribe(\n \"MODE_UI_INTERACTION_TO_PERFORM\",\n (eventData) => {\n if (eventData.action === \"input\") {\n console.log(\"Event from library\", eventData);\n setValues((prev) => ({\n ...prev,\n name: eventData.value\n }));\n }\n }\n );\n }, [mfApi]);\n const [values, setValues] = useState({\n name: initialValues.name ?? \"\",\n description: initialValues.description ?? \"\",\n ownerEmails: initialValues.ownerEmails ?? []\n });\n const [touched, setTouched] = useState({ name: false });\n const [ownerInput, setOwnerInput] = useState(\"\");\n const [ownerError, setOwnerError] = useState(\"\");\n const [importStatus, setImportStatus] = useState(\n null\n );\n const fileInputRef = useRef(null);\n const errors = validateAppRegistration(values);\n function generateId5() {\n return Math.random().toString(36).slice(2, 9);\n }\n const update = (patch) => {\n const next = { ...values, ...patch };\n setValues(next);\n const nextErrors = validateAppRegistration(next);\n onChange(next, Object.keys(nextErrors).length === 0);\n };\n const addOwner = () => {\n const email = ownerInput.trim().toLowerCase();\n if (!email) return;\n if (!EMAIL_RE.test(email)) {\n setOwnerError(\"Enter a valid email.\");\n return;\n }\n if (values.ownerEmails.includes(email)) {\n setOwnerError(\"Already added.\");\n return;\n }\n setOwnerError(\"\");\n setOwnerInput(\"\");\n update({ ownerEmails: [...values.ownerEmails, email] });\n };\n const removeOwner = (email) => update({ ownerEmails: values.ownerEmails.filter((e) => e !== email) });\n const handleFileChange = (e) => {\n const file = e.target.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = (evt) => {\n try {\n const parsed = JSON.parse(evt.target?.result);\n if (!parsed?.app || !parsed.app.name || !Array.isArray(parsed.app.permissions) || !Array.isArray(parsed.app.roles) || !Array.isArray(parsed.app.modules)) {\n throw new Error(\"Invalid RBAC schema\");\n }\n const permissions = parsed.app.permissions.map((p) => ({\n id: generateId5(),\n name: p.name,\n label: p.name\n }));\n const roles = parsed.app.roles.map((r) => ({\n id: generateId5(),\n name: r.name,\n description: \"\",\n permissions: r.permissions.map(\n (permName) => permissions.find((p) => p.name === permName)\n ).filter((p) => !!p)\n // remove undefined\n }));\n const modules = parsed.app.modules.map((m) => ({\n id: generateId5(),\n name: m.module_type,\n roles: m.roles\n }));\n const mapping = parsed.app.modules.flatMap(\n (m) => m.roles.map((roleName) => {\n const role = roles.find((r) => r.name === roleName);\n const module = modules.find((mod) => mod.name === m.module_type);\n if (!role || !module) return null;\n return {\n roleId: role.id,\n moduleId: module.id\n };\n })\n ).filter(Boolean);\n setImportStatus(\"success\");\n setValues((prev) => ({\n ...prev,\n name: parsed.app.name\n }));\n onImportConfig?.({\n app: {\n name: parsed.app.name,\n modules,\n permissions,\n roles\n }\n });\n } catch (err) {\n console.error(err);\n setImportStatus(\"error\");\n }\n };\n reader.readAsText(file);\n e.target.value = \"\";\n };\n return /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-5\", children: [\n /* @__PURE__ */ jsxs(\"div\", { children: [\n /* @__PURE__ */ jsx(\"h2\", { className: \"text-lg font-semibold text-appsec-text\", children: LABELS.heading }),\n /* @__PURE__ */ jsx(\"p\", { className: \"mt-1 text-sm text-appsec-text-secondary\", children: LABELS.subheading })\n ] }),\n (onImportConfig || onExportConfig) && /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2 p-3 rounded-appsec border border-appsec-border bg-appsec-surface\", children: [\n /* @__PURE__ */ jsxs(\"span\", { className: \"flex-1 text-xs text-appsec-text-secondary\", children: [\n importStatus === \"success\" && /* @__PURE__ */ jsx(\"span\", { className: \"text-appsec-success font-medium\", children: LABELS.importSuccess }),\n importStatus === \"error\" && /* @__PURE__ */ jsx(\"span\", { className: \"text-appsec-danger font-medium\", children: LABELS.importError }),\n !importStatus && \"Import an existing RBAC config to skip manual setup.\"\n ] }),\n onImportConfig && /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n \"input\",\n {\n ref: fileInputRef,\n type: \"file\",\n accept: \".json\",\n className: \"hidden\",\n onChange: handleFileChange\n }\n ),\n /* @__PURE__ */ jsx(\n Button,\n {\n variant: \"secondary\",\n size: \"sm\",\n iconLeft: /* @__PURE__ */ jsx(Upload, { className: \"h-3.5 w-3.5\" }),\n onClick: () => {\n setImportStatus(null);\n fileInputRef.current?.click();\n },\n children: LABELS.importConfig\n }\n )\n ] }),\n onExportConfig && /* @__PURE__ */ jsx(\n Button,\n {\n variant: \"secondary\",\n size: \"sm\",\n iconLeft: /* @__PURE__ */ jsx(Download, { className: \"h-3.5 w-3.5\" }),\n onClick: onExportConfig,\n children: LABELS.exportConfig\n }\n )\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-4\", children: [\n /* @__PURE__ */ jsx(\n Input,\n {\n lscId: \"app-name-input\",\n lscLabel: \"Application\",\n lscDescription: \"Enter the application name. This is a unique identifier for the application.\",\n lscWhenToApply: \"when user provides an application name, when creating or updating application\",\n lscWhenNotToApply: \"\",\n label: \"Application\",\n value: values.name,\n placeholder: LABELS.namePlaceholder,\n onChange: (e) => update({ name: e.target.value }),\n onBlur: () => setTouched((t) => ({ ...t, name: true })),\n error: touched.name ? errors.name : void 0,\n required: true\n }\n ),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [\n /* @__PURE__ */ jsx(\n \"label\",\n {\n className: \"text-sm font-medium text-appsec-text\",\n htmlFor: \"app-description\",\n children: LABELS.descriptionLabel\n }\n ),\n /* @__PURE__ */ jsx(\n \"textarea\",\n {\n id: \"app-description\",\n value: values.description,\n placeholder: LABELS.descriptionPlaceholder,\n onChange: (e) => update({ description: e.target.value }),\n rows: 2,\n className: \"w-full rounded-appsec border border-appsec-border bg-appsec-bg px-3 py-2 text-sm text-appsec-text placeholder:text-appsec-text-tertiary resize-none outline-none transition-colors focus:border-appsec-primary focus:ring-2 focus:ring-appsec-primary-light\"\n }\n )\n ] })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-2\", children: [\n /* @__PURE__ */ jsxs(\"div\", { children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-sm font-medium text-appsec-text\", children: LABELS.ownersLabel }),\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-secondary mt-0.5\", children: LABELS.ownersHint })\n ] }),\n values.ownerEmails.length > 0 && /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-wrap gap-1.5\", children: values.ownerEmails.map((email) => /* @__PURE__ */ jsxs(\n \"span\",\n {\n className: \"inline-flex items-center gap-1 pl-2.5 pr-1 py-0.5 rounded-full text-xs font-medium bg-appsec-primary-light border border-appsec-primary/30 text-appsec-primary\",\n children: [\n email,\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => removeOwner(email),\n className: \"text-appsec-primary/60 hover:text-appsec-danger transition-colors rounded-full p-0.5\",\n \"aria-label\": `Remove ${email}`,\n children: /* @__PURE__ */ jsx(X, { className: \"h-3 w-3\" })\n }\n )\n ]\n },\n email\n )) }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex gap-2 items-start\", children: [\n /* @__PURE__ */ jsx(\n Input,\n {\n value: ownerInput,\n placeholder: LABELS.ownerPlaceholder,\n onChange: (e) => {\n setOwnerInput(e.target.value);\n setOwnerError(\"\");\n },\n onKeyDown: (e) => e.key === \"Enter\" && addOwner(),\n error: ownerError || void 0,\n wrapperClassName: \"flex-1\",\n type: \"email\"\n }\n ),\n /* @__PURE__ */ jsx(\n Button,\n {\n variant: \"secondary\",\n size: \"md\",\n iconLeft: /* @__PURE__ */ jsx(Plus, { className: \"h-4 w-4\" }),\n onClick: addOwner,\n disabled: !ownerInput.trim(),\n className: \"shrink-0\",\n children: LABELS.addOwner\n }\n )\n ] })\n ] })\n ] });\n}\nfunction EmptyState({ icon, title, description, action, dashed = false, className }) {\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: cn(\n \"flex flex-col items-center justify-center gap-3 rounded-appsec p-10 text-center\",\n dashed ? \"border-2 border-dashed border-appsec-border\" : \"bg-appsec-surface border border-appsec-border\",\n className\n ),\n children: [\n icon && /* @__PURE__ */ jsx(\"span\", { className: \"text-appsec-text-tertiary\", children: icon }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-1\", children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-sm font-semibold text-appsec-text\", children: title }),\n description && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-secondary max-w-xs\", children: description })\n ] }),\n action && /* @__PURE__ */ jsx(\"div\", { className: \"mt-1\", children: action })\n ]\n }\n );\n}\n\n// src/utils/importExport.ts\nfunction downloadCsv(rows, filename) {\n const content = rows.map((r) => r.join(\",\")).join(\"\\n\");\n const blob = new Blob([content], { type: \"text/csv\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename;\n a.click();\n URL.revokeObjectURL(url);\n}\nfunction CsvImportButton({\n onImport,\n templateHeaders,\n templateExamples,\n templateFilename\n}) {\n const fileRef = useRef(null);\n const handleChange = (e) => {\n const file = e.target.files?.[0];\n if (!file) return;\n e.target.value = \"\";\n const reader = new FileReader();\n reader.onload = (evt) => onImport(evt.target?.result ?? \"\");\n reader.readAsText(file);\n };\n const downloadTemplate = () => {\n downloadCsv([templateHeaders, ...templateExamples], templateFilename);\n };\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1\", children: [\n /* @__PURE__ */ jsx(\n \"input\",\n {\n ref: fileRef,\n type: \"file\",\n accept: \".csv,.txt\",\n className: \"hidden\",\n onChange: handleChange\n }\n ),\n /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onClick: () => fileRef.current?.click(),\n className: \"flex items-center gap-1 px-2.5 py-1 rounded-appsec text-xs border border-appsec-border bg-appsec-bg text-appsec-text-secondary hover:border-appsec-primary hover:text-appsec-primary transition-all cursor-pointer\",\n children: [\n /* @__PURE__ */ jsx(Upload, { className: \"h-3.5 w-3.5\" }),\n \"Import CSV\"\n ]\n }\n ),\n /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onClick: downloadTemplate,\n className: \"flex items-center gap-1 px-2 py-1 rounded-appsec text-xs text-appsec-text-tertiary hover:text-appsec-primary transition-colors cursor-pointer\",\n children: [\n /* @__PURE__ */ jsx(Download, { className: \"h-3.5 w-3.5\" }),\n \"Template\"\n ]\n }\n )\n ] });\n}\nfunction generateId() {\n return Math.random().toString(36).slice(2, 9);\n}\nvar CSV_HEADERS = [\"name\"];\nvar CSV_EXAMPLES = [[\"Dashboard\"], [\"Billing\"], [\"Reports\"], [\"User Management\"]];\nfunction ModuleDeclaration({ modules, onChange }) {\n const [errors, setErrors] = useState({});\n const [csvError, setCsvError] = useState(\"\");\n const addModule = () => onChange([...modules, { id: generateId(), name: \"\" }]);\n const removeModule = (id) => {\n onChange(modules.filter((m) => m.id !== id));\n setErrors((e) => {\n const next = { ...e };\n delete next[id];\n return next;\n });\n };\n const updateModule = (id, name) => {\n onChange(modules.map((m) => m.id === id ? { ...m, name } : m));\n setErrors((e) => ({ ...e, [id]: name.trim() ? void 0 : \"Name is required.\" }));\n };\n const handleImport = (text) => {\n const names = text.split(/[\\n,]+/).map((s) => s.trim()).filter(Boolean);\n if (names.length === 0) {\n setCsvError(\"No names found.\");\n return;\n }\n setCsvError(\"\");\n const existing = new Set(modules.map((m) => m.name.toLowerCase()));\n const newMods = names.filter((n) => !existing.has(n.toLowerCase())).map((name) => ({ id: generateId(), name }));\n if (newMods.length > 0) onChange([...modules, ...newMods]);\n };\n return /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-4\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-start justify-between gap-4\", children: [\n /* @__PURE__ */ jsxs(\"div\", { children: [\n /* @__PURE__ */ jsx(\"h2\", { className: \"text-lg font-semibold text-appsec-text\", children: \"Declare your modules\" }),\n /* @__PURE__ */ jsx(\"p\", { className: \"mt-1 text-sm text-appsec-text-secondary\", children: \"Top-level sections of your app (e.g. Reports, Users, Billing).\" })\n ] }),\n /* @__PURE__ */ jsx(\n CsvImportButton,\n {\n onImport: handleImport,\n templateHeaders: CSV_HEADERS,\n templateExamples: CSV_EXAMPLES,\n templateFilename: \"modules-template.csv\"\n }\n )\n ] }),\n csvError && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-danger\", children: csvError }),\n modules.length === 0 ? /* @__PURE__ */ jsx(\n EmptyState,\n {\n dashed: true,\n title: \"No modules yet\",\n description: \"Add at least one module to continue.\",\n action: /* @__PURE__ */ jsx(Button, { size: \"sm\", iconLeft: /* @__PURE__ */ jsx(Plus, { className: \"h-4 w-4\" }), onClick: addModule, children: \"Add Module\" })\n }\n ) : /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-2\", children: [\n modules.map((mod, idx) => /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2\", children: [\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-xs text-appsec-text-tertiary w-5 shrink-0 text-right\", children: [\n idx + 1,\n \".\"\n ] }),\n /* @__PURE__ */ jsx(\"div\", { className: \"flex-1\", children: /* @__PURE__ */ jsx(\n Input,\n {\n value: mod.name,\n placeholder: \"e.g. Reports\",\n onChange: (e) => updateModule(mod.id, e.target.value),\n error: errors[mod.id]\n }\n ) }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => removeModule(mod.id),\n className: \"text-appsec-text-tertiary hover:text-appsec-danger transition-colors shrink-0\",\n \"aria-label\": \"Remove module\",\n children: /* @__PURE__ */ jsx(Trash2, { className: \"h-4 w-4\" })\n }\n )\n ] }, mod.id)),\n /* @__PURE__ */ jsx(Button, { variant: \"secondary\", size: \"sm\", iconLeft: /* @__PURE__ */ jsx(Plus, { className: \"h-4 w-4\" }), onClick: addModule, className: \"mt-2\", children: \"Add Module\" })\n ] })\n ] });\n}\nvar COMMON_PERMISSIONS = [\"read\", \"write\", \"delete\", \"admin\"];\nvar CSV_HEADERS2 = [\"name\", \"label\"];\nvar CSV_EXAMPLES2 = [\n [\"read\", \"Read access\"],\n [\"write\", \"Write access\"],\n [\"delete\", \"Delete records\"],\n [\"approve_invoice\", \"Approve Invoice\"]\n];\nfunction generateId2() {\n return Math.random().toString(36).slice(2, 9);\n}\nfunction PermissionDefinition({ permissions, onChange }) {\n const [draftName, setDraftName] = useState(\"\");\n const [draftLabel, setDraftLabel] = useState(\"\");\n const [csvError, setCsvError] = useState(\"\");\n const [editingId, setEditingId] = useState(null);\n const [editingName, setEditingName] = useState(\"\");\n const [editingLabel, setEditingLabel] = useState(\"\");\n const nameInputRef = useRef(null);\n const editNameRef = useRef(null);\n const addPerm = () => {\n const name = draftName.trim();\n if (!name) return;\n if (permissions.some((p) => p.name === name)) return;\n onChange([...permissions, { id: generateId2(), name, label: draftLabel.trim() }]);\n setDraftName(\"\");\n setDraftLabel(\"\");\n setTimeout(() => nameInputRef.current?.focus(), 0);\n };\n const addQuick = (name) => {\n if (permissions.some((p) => p.name === name)) return;\n onChange([...permissions, { id: generateId2(), name, label: \"\" }]);\n };\n const removePerm = (id) => onChange(permissions.filter((p) => p.id !== id));\n const clonePerm = (perm) => {\n const existing = new Set(permissions.map((p) => p.name));\n let candidate = `${perm.name}_copy`;\n let n = 2;\n while (existing.has(candidate)) {\n candidate = `${perm.name}_copy_${n++}`;\n }\n onChange([...permissions, { id: generateId2(), name: candidate, label: perm.label }]);\n };\n const startEdit = (perm) => {\n setEditingId(perm.id);\n setEditingName(perm.name);\n setEditingLabel(perm.label);\n setTimeout(() => editNameRef.current?.focus(), 0);\n };\n const commitEdit = (id) => {\n const name = editingName.trim();\n if (!name) {\n cancelEdit();\n return;\n }\n if (permissions.some((p) => p.id !== id && p.name === name)) {\n cancelEdit();\n return;\n }\n onChange(permissions.map((p) => p.id === id ? { ...p, name, label: editingLabel.trim() } : p));\n setEditingId(null);\n };\n const cancelEdit = () => setEditingId(null);\n const handleImport = (text) => {\n const lines = text.split(/\\n/).map((s) => s.trim()).filter(Boolean);\n if (lines.length === 0) {\n setCsvError(\"No rows found.\");\n return;\n }\n setCsvError(\"\");\n const existing = new Set(permissions.map((p) => p.name));\n const newPerms = [];\n for (const line of lines) {\n const [rawName, rawLabel = \"\"] = line.split(\",\");\n const name = rawName.trim();\n if (!name || existing.has(name)) continue;\n existing.add(name);\n newPerms.push({ id: generateId2(), name, label: rawLabel.trim() });\n }\n if (newPerms.length > 0) onChange([...permissions, ...newPerms]);\n else setCsvError(\"All permissions already exist.\");\n };\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-4\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-start justify-between gap-4\", children: [\n /* @__PURE__ */ jsxs(\"div\", { children: [\n /* @__PURE__ */ jsx(\"h2\", { className: \"text-lg font-semibold text-appsec-text\", children: \"Define permissions\" }),\n /* @__PURE__ */ jsx(\"p\", { className: \"mt-1 text-sm text-appsec-text-secondary\", children: \"Standalone permissions \\u2014 assigned to roles in next step.\" })\n ] }),\n /* @__PURE__ */ jsx(\n CsvImportButton,\n {\n onImport: handleImport,\n templateHeaders: CSV_HEADERS2,\n templateExamples: CSV_EXAMPLES2,\n templateFilename: \"permissions-template.csv\"\n }\n )\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-wrap items-center gap-1.5\", children: [\n /* @__PURE__ */ jsx(\"span\", { className: \"text-xs text-appsec-text-secondary\", children: \"Quick add:\" }),\n COMMON_PERMISSIONS.map((p) => {\n const exists = permissions.some((x) => x.name === p);\n return /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n disabled: exists,\n onClick: () => addQuick(p),\n className: cn(\n \"px-2 py-0.5 rounded-full text-xs border transition-all\",\n exists ? \"bg-appsec-surface-alt text-appsec-text-tertiary border-transparent cursor-default\" : \"bg-appsec-bg text-appsec-primary border-appsec-primary hover:bg-appsec-primary-light cursor-pointer\"\n ),\n children: exists ? `\\u2713 ${p}` : `+ ${p}`\n },\n p\n );\n }),\n csvError && /* @__PURE__ */ jsx(\"span\", { className: \"text-xs text-appsec-danger\", children: csvError })\n ] }),\n permissions.length > 0 ? /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-wrap gap-1.5 p-3 rounded-appsec bg-appsec-surface border border-appsec-border min-h-12 overflow-y-auto\", style: { maxHeight: \"260px\" }, children: permissions.map((perm) => {\n const isEditing = editingId === perm.id;\n if (isEditing) {\n return /* @__PURE__ */ jsxs(\n \"span\",\n {\n className: \"inline-flex items-center gap-1 pl-1.5 pr-1 py-0.5 rounded-full text-xs bg-appsec-primary-light border border-appsec-primary\",\n children: [\n /* @__PURE__ */ jsx(\n \"input\",\n {\n ref: editNameRef,\n value: editingName,\n onChange: (e) => setEditingName(e.target.value),\n onKeyDown: (e) => {\n if (e.key === \"Enter\") commitEdit(perm.id);\n if (e.key === \"Escape\") cancelEdit();\n },\n onBlur: () => commitEdit(perm.id),\n className: \"bg-transparent outline-none text-appsec-primary font-medium w-20 min-w-0\",\n placeholder: \"name\"\n }\n ),\n /* @__PURE__ */ jsx(\"span\", { className: \"text-appsec-text-tertiary\", children: \"\\xB7\" }),\n /* @__PURE__ */ jsx(\n \"input\",\n {\n value: editingLabel,\n onChange: (e) => setEditingLabel(e.target.value),\n onKeyDown: (e) => {\n if (e.key === \"Enter\") commitEdit(perm.id);\n if (e.key === \"Escape\") cancelEdit();\n },\n onBlur: () => commitEdit(perm.id),\n className: \"bg-transparent outline-none text-appsec-text-secondary w-24 min-w-0\",\n placeholder: \"label\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onMouseDown: (e) => {\n e.preventDefault();\n cancelEdit();\n },\n className: \"text-appsec-text-tertiary hover:text-appsec-danger p-0.5 rounded-full\",\n title: \"Cancel\",\n children: /* @__PURE__ */ jsx(X, { className: \"h-3 w-3\" })\n }\n )\n ]\n },\n perm.id\n );\n }\n return /* @__PURE__ */ jsxs(\n \"span\",\n {\n className: \"inline-flex items-center gap-0.5 pl-2.5 pr-1 py-0.5 rounded-full text-xs font-medium bg-appsec-bg border border-appsec-border text-appsec-text hover:border-appsec-primary group transition-colors\",\n title: \"Click name to edit\",\n children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => startEdit(perm),\n className: \"hover:text-appsec-primary transition-colors cursor-text\",\n title: \"Click to edit\",\n children: perm.name\n }\n ),\n perm.label && perm.label !== perm.name && /* @__PURE__ */ jsxs(\"span\", { className: \"text-appsec-text-tertiary ml-1\", children: [\n \"\\xB7 \",\n perm.label\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => clonePerm(perm),\n className: \"ml-0.5 text-appsec-text-tertiary hover:text-appsec-primary transition-colors rounded-full hover:bg-appsec-primary-light p-0.5\",\n title: \"Clone\",\n children: /* @__PURE__ */ jsx(Copy, { className: \"h-3 w-3\" })\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => removePerm(perm.id),\n className: \"text-appsec-text-tertiary group-hover:text-appsec-danger transition-colors rounded-full hover:bg-appsec-danger-light p-0.5\",\n title: \"Remove\",\n children: /* @__PURE__ */ jsx(X, { className: \"h-3 w-3\" })\n }\n )\n ]\n },\n perm.id\n );\n }) }) : /* @__PURE__ */ jsx(\"div\", { className: \"flex items-center justify-center p-6 rounded-appsec border border-dashed border-appsec-border text-sm text-appsec-text-tertiary\", children: \"No permissions yet \\u2014 use quick add, CSV, or type below.\" }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex gap-2 items-end\", children: [\n /* @__PURE__ */ jsx(\n Input,\n {\n ref: nameInputRef,\n value: draftName,\n placeholder: \"Permission name (e.g. read)\",\n onChange: (e) => setDraftName(e.target.value),\n wrapperClassName: \"flex-1\",\n onKeyDown: (e) => e.key === \"Enter\" && addPerm()\n }\n ),\n /* @__PURE__ */ jsx(\n Input,\n {\n value: draftLabel,\n placeholder: \"Display label (optional)\",\n onChange: (e) => setDraftLabel(e.target.value),\n wrapperClassName: \"flex-1\",\n onKeyDown: (e) => e.key === \"Enter\" && addPerm()\n }\n ),\n /* @__PURE__ */ jsx(\n Button,\n {\n size: \"md\",\n iconLeft: /* @__PURE__ */ jsx(Plus, { className: \"h-4 w-4\" }),\n onClick: addPerm,\n disabled: !draftName.trim(),\n className: \"shrink-0\",\n children: \"Add\"\n }\n )\n ] }),\n permissions.length > 0 && /* @__PURE__ */ jsxs(\"p\", { className: \"text-xs text-appsec-text-tertiary\", children: [\n permissions.length,\n \" permission\",\n permissions.length !== 1 ? \"s\" : \"\",\n \" defined\"\n ] })\n ] });\n}\nfunction RoleTemplates({ templates, selectedIds, onSelect }) {\n if (templates.length === 0) return null;\n return /* @__PURE__ */ jsx(\"div\", { className: \"grid grid-cols-1 sm:grid-cols-2 gap-3\", children: templates.map((tpl) => {\n const isSelected = selectedIds.includes(tpl.name.toLowerCase());\n return /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onClick: () => onSelect(tpl),\n disabled: isSelected,\n className: cn(\n \"flex items-start gap-3 rounded-appsec border p-4 text-left transition-colors\",\n isSelected ? \"border-appsec-primary bg-appsec-primary-light cursor-default\" : \"border-appsec-border bg-appsec-bg hover:border-appsec-primary hover:bg-appsec-surface\"\n ),\n children: [\n /* @__PURE__ */ jsx(\n \"span\",\n {\n className: cn(\n \"mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-full border-2 transition-colors\",\n isSelected ? \"border-appsec-primary bg-appsec-primary text-white\" : \"border-appsec-border\"\n ),\n children: isSelected && /* @__PURE__ */ jsx(Check, { className: \"h-3 w-3\" })\n }\n ),\n /* @__PURE__ */ jsxs(\"div\", { children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-sm font-semibold text-appsec-text\", children: tpl.name }),\n /* @__PURE__ */ jsx(\"p\", { className: \"mt-0.5 text-xs text-appsec-text-secondary\", children: tpl.description }),\n tpl.suggestedPermissions.length > 0 && /* @__PURE__ */ jsxs(\"p\", { className: \"mt-1.5 text-xs text-appsec-text-tertiary\", children: [\n \"Permissions: \",\n tpl.suggestedPermissions.join(\", \")\n ] })\n ] })\n ]\n },\n tpl.id\n );\n }) });\n}\nvar LABELS2 = {\n heading: \"Create roles\",\n subheading: \"Define roles and assign permissions to each.\",\n fromTemplates: \"Start from templates\",\n customRoles: \"Custom roles\",\n addRole: \"Add Role\",\n emptyTitle: \"No roles yet\",\n emptyDescription: \"Add at least one role to continue.\",\n namePlaceholder: \"e.g. Billing Manager\",\n descPlaceholder: \"Description (optional)\",\n noPerms: \"No permissions defined yet \\u2014 go back to add some.\"\n};\nfunction generateId3() {\n return Math.random().toString(36).slice(2, 9);\n}\nfunction RoleCreation({ roles, permissions, onChange, roleTemplates = [] }) {\n const [nameErrors, setNameErrors] = useState({});\n const [csvError, setCsvError] = useState(\"\");\n const addBlankRole = () => {\n onChange([...roles, { id: generateId3(), name: \"\", description: \"\", permissionIds: [] }]);\n };\n const applyTemplate2 = (tpl) => {\n if (roles.some((r) => r.name.toLowerCase() === tpl.name.toLowerCase())) return;\n const matchedIds = permissions.filter((p) => tpl.suggestedPermissions.includes(p.name)).map((p) => p.id);\n onChange([...roles, { id: generateId3(), name: tpl.name, description: tpl.description, permissionIds: matchedIds }]);\n };\n const removeRole = (id) => {\n onChange(roles.filter((r) => r.id !== id));\n setNameErrors((e) => {\n const next = { ...e };\n delete next[id];\n return next;\n });\n };\n const cloneRole = (role) => {\n const existing = new Set(roles.map((r) => r.name.toLowerCase()));\n let candidate = `${role.name} (copy)`;\n let n = 2;\n while (existing.has(candidate.toLowerCase())) {\n candidate = `${role.name} (copy ${n++})`;\n }\n onChange([...roles, { id: generateId3(), name: candidate, description: role.description, permissionIds: [...role.permissionIds] }]);\n };\n const updateRole = (id, patch) => {\n onChange(roles.map((r) => r.id === id ? { ...r, ...patch } : r));\n if (patch.name !== void 0) {\n setNameErrors((e) => ({ ...e, [id]: patch.name.trim() ? void 0 : \"Name is required.\" }));\n }\n };\n const togglePerm = (roleId, permId) => {\n const role = roles.find((r) => r.id === roleId);\n if (!role) return;\n const has = role.permissionIds.includes(permId);\n updateRole(roleId, {\n permissionIds: has ? role.permissionIds.filter((id) => id !== permId) : [...role.permissionIds, permId]\n });\n };\n const handleImport = (text) => {\n const lines = text.split(/\\n/).map((s) => s.trim()).filter(Boolean);\n if (lines.length === 0) {\n setCsvError(\"No rows found.\");\n return;\n }\n setCsvError(\"\");\n const existingNames = new Set(roles.map((r) => r.name.toLowerCase()));\n const newRoles = [];\n for (const line of lines) {\n const [rawName, rawDesc = \"\"] = line.split(\",\");\n const name = rawName.trim();\n if (!name || existingNames.has(name.toLowerCase())) continue;\n existingNames.add(name.toLowerCase());\n newRoles.push({ id: generateId3(), name, description: rawDesc.trim(), permissionIds: [] });\n }\n if (newRoles.length > 0) onChange([...roles, ...newRoles]);\n else setCsvError(\"All roles already exist.\");\n };\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col h-full\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-start justify-between gap-4 mb-3\", children: [\n /* @__PURE__ */ jsxs(\"div\", { children: [\n /* @__PURE__ */ jsx(\"h2\", { className: \"text-lg font-semibold text-appsec-text\", children: LABELS2.heading }),\n /* @__PURE__ */ jsx(\"p\", { className: \"mt-1 text-sm text-appsec-text-secondary\", children: LABELS2.subheading })\n ] }),\n /* @__PURE__ */ jsx(\n CsvImportButton,\n {\n onImport: handleImport,\n templateHeaders: [\"name\", \"description\"],\n templateExamples: [\n [\"Admin\", \"Full access to everything\"],\n [\"Editor\", \"Can read and write\"],\n [\"Viewer\", \"Read-only access\"]\n ],\n templateFilename: \"roles-template.csv\"\n }\n )\n ] }),\n csvError && /* @__PURE__ */ jsx(\"p\", { className: \"mb-2 text-xs text-appsec-danger\", children: csvError }),\n roleTemplates.length > 0 && /* @__PURE__ */ jsxs(\"div\", { className: \"mb-4\", children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs font-semibold uppercase tracking-wide text-appsec-text-secondary mb-2\", children: LABELS2.fromTemplates }),\n /* @__PURE__ */ jsx(\n RoleTemplates,\n {\n templates: roleTemplates,\n selectedIds: roles.map((r) => r.name.toLowerCase()),\n onSelect: applyTemplate2\n }\n )\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col flex-1 min-h-0\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between mb-2\", children: [\n /* @__PURE__ */ jsxs(\"p\", { className: \"text-xs font-semibold uppercase tracking-wide text-appsec-text-secondary\", children: [\n LABELS2.customRoles,\n roles.length > 0 && /* @__PURE__ */ jsxs(\"span\", { className: \"ml-2 normal-case font-normal text-appsec-text-tertiary\", children: [\n \"(\",\n roles.length,\n \")\"\n ] })\n ] }),\n roles.length > 0 && /* @__PURE__ */ jsx(Button, { variant: \"secondary\", size: \"sm\", iconLeft: /* @__PURE__ */ jsx(Plus, { className: \"h-3.5 w-3.5\" }), onClick: addBlankRole, children: LABELS2.addRole })\n ] }),\n roles.length === 0 ? /* @__PURE__ */ jsx(\n EmptyState,\n {\n dashed: true,\n title: LABELS2.emptyTitle,\n description: LABELS2.emptyDescription,\n action: /* @__PURE__ */ jsx(Button, { size: \"sm\", iconLeft: /* @__PURE__ */ jsx(Plus, { className: \"h-4 w-4\" }), onClick: addBlankRole, children: LABELS2.addRole })\n }\n ) : /* @__PURE__ */ jsx(\"div\", { className: \"overflow-y-auto flex-1 space-y-3 pr-1\", style: { maxHeight: \"340px\" }, children: roles.map((role) => /* @__PURE__ */ jsxs(\"div\", { className: \"rounded-appsec border border-appsec-border overflow-hidden\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2 bg-appsec-surface px-3 py-2\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex-1 grid grid-cols-2 gap-2\", children: [\n /* @__PURE__ */ jsx(\n Input,\n {\n value: role.name,\n placeholder: LABELS2.namePlaceholder,\n onChange: (e) => updateRole(role.id, { name: e.target.value }),\n error: nameErrors[role.id]\n }\n ),\n /* @__PURE__ */ jsx(\n Input,\n {\n value: role.description,\n placeholder: LABELS2.descPlaceholder,\n onChange: (e) => updateRole(role.id, { description: e.target.value })\n }\n )\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => cloneRole(role),\n className: \"text-appsec-text-tertiary hover:text-appsec-primary transition-colors shrink-0\",\n title: \"Clone role\",\n children: /* @__PURE__ */ jsx(Copy, { className: \"h-4 w-4\" })\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => removeRole(role.id),\n className: \"text-appsec-text-tertiary hover:text-appsec-danger transition-colors shrink-0\",\n title: \"Remove role\",\n children: /* @__PURE__ */ jsx(Trash2, { className: \"h-4 w-4\" })\n }\n )\n ] }),\n permissions.length > 0 ? /* @__PURE__ */ jsx(\"div\", { className: \"px-3 py-2.5 bg-appsec-bg border-t border-appsec-border\", children: /* @__PURE__ */ jsx(\"div\", { className: \"grid grid-cols-2 sm:grid-cols-3 gap-x-4 gap-y-1.5\", children: permissions.map((perm) => {\n const checked = role.permissionIds.includes(perm.id);\n return /* @__PURE__ */ jsxs(\n \"label\",\n {\n className: \"flex items-center gap-2 cursor-pointer group\",\n children: [\n /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n checked,\n onChange: () => togglePerm(role.id, perm.id),\n className: \"h-3.5 w-3.5 rounded border-appsec-border text-appsec-primary accent-appsec-primary cursor-pointer\"\n }\n ),\n /* @__PURE__ */ jsxs(\"span\", { className: cn(\n \"text-xs transition-colors\",\n checked ? \"text-appsec-text font-medium\" : \"text-appsec-text-secondary group-hover:text-appsec-text\"\n ), children: [\n perm.name,\n perm.label && perm.label !== perm.name && /* @__PURE__ */ jsxs(\"span\", { className: \"text-appsec-text-tertiary ml-1\", children: [\n \"\\xB7 \",\n perm.label\n ] })\n ] })\n ]\n },\n perm.id\n );\n }) }) }) : /* @__PURE__ */ jsx(\"div\", { className: \"px-3 py-2 bg-appsec-bg border-t border-appsec-border\", children: /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-tertiary italic\", children: LABELS2.noPerms }) })\n ] }, role.id)) })\n ] })\n ] });\n}\nvar LABELS3 = {\n heading: \"Map roles to modules\",\n subheading: \"Drag roles into module drop zones to assign access.\",\n roles: \"Roles\",\n moduleZones: \"Module Drop Zones\",\n hint: \"Drag & drop roles into modules. \\xD7 to remove.\",\n noRoles: \"No roles defined \\u2014 go back and add some.\",\n noModules: \"No modules defined \\u2014 go back and add some.\"\n};\nfunction RoleModuleMapping({ roles, modules, mapping, onChange }) {\n const [dragRoleId, setDragRoleId] = useState(null);\n const [overModuleId, setOverModuleId] = useState(null);\n const rolesInModule = (moduleId) => mapping.filter((e) => e.moduleId === moduleId).map((e) => roles.find((r) => r.id === e.roleId)).filter((r) => !!r);\n const addMapping = (roleId, moduleId) => {\n if (mapping.some((e) => e.roleId === roleId && e.moduleId === moduleId)) return;\n onChange([...mapping, { roleId, moduleId }]);\n };\n const removeMapping = (roleId, moduleId) => {\n onChange(mapping.filter((e) => !(e.roleId === roleId && e.moduleId === moduleId)));\n };\n const handleDragStart = (roleId) => setDragRoleId(roleId);\n const handleDragEnd = () => {\n setDragRoleId(null);\n setOverModuleId(null);\n };\n const handleDragOver = (e, moduleId) => {\n e.preventDefault();\n setOverModuleId(moduleId);\n };\n const handleDrop = (e, moduleId) => {\n e.preventDefault();\n if (dragRoleId) addMapping(dragRoleId, moduleId);\n setDragRoleId(null);\n setOverModuleId(null);\n };\n if (roles.length === 0) {\n return /* @__PURE__ */ jsx(\"p\", { className: \"text-sm text-appsec-text-secondary\", children: LABELS3.noRoles });\n }\n if (modules.length === 0) {\n return /* @__PURE__ */ jsx(\"p\", { className: \"text-sm text-appsec-text-secondary\", children: LABELS3.noModules });\n }\n return /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-6\", children: [\n /* @__PURE__ */ jsxs(\"div\", { children: [\n /* @__PURE__ */ jsx(\"h2\", { className: \"text-lg font-semibold text-appsec-text\", children: LABELS3.heading }),\n /* @__PURE__ */ jsx(\"p\", { className: \"mt-1 text-sm text-appsec-text-secondary\", children: LABELS3.subheading })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-wrap gap-6\", style: { minHeight: 0 }, children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"w-36 shrink-0 flex flex-col\", children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs font-semibold uppercase tracking-wide text-appsec-text-secondary mb-3\", children: LABELS3.roles }),\n /* @__PURE__ */ jsx(\"div\", { className: \"overflow-y-auto flex flex-col gap-2 pr-1\", style: { maxHeight: \"340px\" }, children: roles.map((role) => /* @__PURE__ */ jsx(\n \"div\",\n {\n draggable: true,\n onDragStart: () => handleDragStart(role.id),\n onDragEnd: handleDragEnd,\n className: cn(\n \"px-3 py-2 rounded-appsec border border-appsec-primary bg-appsec-primary-light\",\n \"text-sm font-medium text-appsec-primary text-center\",\n \"cursor-grab active:cursor-grabbing select-none transition-opacity\",\n dragRoleId === role.id && \"opacity-40\"\n ),\n children: role.name || \"(unnamed)\"\n },\n role.id\n )) })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"grow shrink basis-80 min-w-0 flex flex-col\", children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs font-semibold uppercase tracking-wide text-appsec-text-secondary mb-3\", children: LABELS3.moduleZones }),\n /* @__PURE__ */ jsx(\"div\", { className: \"overflow-y-auto flex flex-col gap-3 pr-1\", style: { maxHeight: \"340px\" }, children: modules.map((mod) => {\n const assigned = rolesInModule(mod.id);\n const isOver = overModuleId === mod.id;\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n onDragOver: (e) => handleDragOver(e, mod.id),\n onDragLeave: () => setOverModuleId(null),\n onDrop: (e) => handleDrop(e, mod.id),\n className: cn(\n \"min-h-18 rounded-appsec border-2 border-dashed p-3 transition-colors\",\n isOver ? \"border-appsec-primary bg-appsec-primary-light\" : \"border-appsec-border bg-appsec-surface\"\n ),\n children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs font-semibold text-appsec-text mb-2\", children: mod.name }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-wrap gap-2\", children: [\n assigned.map((role) => /* @__PURE__ */ jsxs(\n \"span\",\n {\n className: \"inline-flex items-center gap-1 px-2.5 py-1 rounded-full bg-appsec-primary-light border border-appsec-primary text-appsec-primary text-xs font-medium\",\n children: [\n role.name,\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => removeMapping(role.id, mod.id),\n className: \"text-appsec-danger hover:opacity-70 transition-opacity\",\n \"aria-label\": `Remove ${role.name}`,\n children: /* @__PURE__ */ jsx(X, { className: \"h-3 w-3\" })\n }\n )\n ]\n },\n role.id\n )),\n assigned.length === 0 && !isOver && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-tertiary italic\", children: \"Drop a role here\\u2026\" })\n ] })\n ]\n },\n mod.id\n );\n }) })\n ] })\n ] }),\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-secondary\", children: LABELS3.hint })\n ] });\n}\nvar LABELS4 = {\n heading: \"You're all set!\",\n description: (appName, modules, roles) => `${appName} has been configured with ${modules} module${modules !== 1 ? \"s\" : \"\"} and ${roles} role${roles !== 1 ? \"s\" : \"\"}.`,\n cta: \"Finish Mode Onboarding\"\n};\nfunction OnboardingSuccess({\n appName,\n moduleCount,\n roleCount,\n onComplete\n}) {\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col items-center justify-center gap-6 py-10 text-center\", children: [\n /* @__PURE__ */ jsx(\"span\", { className: \"text-appsec-success\", children: /* @__PURE__ */ jsx(CheckCircle2, { className: \"h-16 w-16\", strokeWidth: 1.5 }) }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-2 max-w-md\", children: [\n /* @__PURE__ */ jsx(\"h2\", { className: \"text-xl font-bold text-appsec-text\", children: LABELS4.heading }),\n /* @__PURE__ */ jsx(\"p\", { className: \"text-sm text-appsec-text-secondary\", children: LABELS4.description(appName, moduleCount, roleCount) })\n ] }),\n /* @__PURE__ */ jsx(\n Button,\n {\n size: \"lg\",\n onClick: onComplete,\n iconRight: /* @__PURE__ */ jsx(ArrowRight, { className: \"h-4 w-4\" }),\n children: LABELS4.cta\n }\n )\n ] });\n}\nvar STEPS = [\n { key: \"app\", label: \"App\" },\n { key: \"modules\", label: \"Modules\" },\n { key: \"permissions\", label: \"Permissions\" },\n { key: \"roles\", label: \"Roles\" },\n { key: \"mapping\", label: \"Access\" }\n];\nvar LABELS5 = {\n back: \"Back\",\n next: \"Next\",\n finish: (mode) => mode === \"update\" ? \"Save Changes\" : \"Finish Setup\",\n saving: \"Saving\\u2026\"\n};\nfunction StepIndicator({ steps, current }) {\n return /* @__PURE__ */ jsx(\"nav\", { \"aria-label\": \"Progress\", className: \"flex items-center mb-8 px-1\", children: steps.map((step, idx) => {\n const isDone = idx < current;\n const isActive = idx === current;\n return /* @__PURE__ */ jsxs(React11.Fragment, { children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col items-center gap-1 shrink-0\", children: [\n /* @__PURE__ */ jsx(\n \"span\",\n {\n className: cn(\n \"flex h-7 w-7 items-center justify-center rounded-full text-xs font-bold border-2 transition-all\",\n isDone ? \"border-appsec-primary bg-appsec-primary text-white\" : isActive ? \"border-appsec-primary bg-appsec-bg text-appsec-primary\" : \"border-appsec-border bg-appsec-bg text-appsec-text-tertiary\"\n ),\n children: isDone ? /* @__PURE__ */ jsx(Check, { className: \"h-3.5 w-3.5\" }) : /* @__PURE__ */ jsx(\"span\", { children: idx + 1 })\n }\n ),\n /* @__PURE__ */ jsx(\n \"span\",\n {\n className: cn(\n \"text-[11px] font-medium leading-none\",\n isActive ? \"text-appsec-primary\" : isDone ? \"text-appsec-text-secondary\" : \"text-appsec-text-tertiary\"\n ),\n children: step.label\n }\n )\n ] }),\n idx < steps.length - 1 && /* @__PURE__ */ jsx(\n \"div\",\n {\n className: cn(\n \"flex-1 h-px mb-4 mx-2 transition-colors\",\n isDone ? \"bg-appsec-primary\" : \"bg-appsec-border\"\n )\n }\n )\n ] }, step.key);\n }) });\n}\nfunction generateId4() {\n return Math.random().toString(36).slice(2, 9);\n}\nfunction OnboardingStepper({ mode = \"create\", initialData, onComplete, className }) {\n const { adapter, baseUrl, appId, roleTemplates, setLoading, setError } = useAppsec();\n const toast = useToast();\n const mfApi = useMicroFrontendApi();\n const [currentStep, setCurrentStep] = useState(0);\n const [saving, setSaving] = useState(false);\n const [done, setDone] = useState(false);\n useEffect(() => {\n if (!mfApi) {\n console.warn(\"Remote MicroFrontend API not initialized\");\n return;\n }\n console.log(\"Mf api\", mfApi);\n }, [mfApi]);\n const [state, setState] = useState({\n app: { name: \"\", description: \"\", ownerEmails: [], ...initialData?.app },\n appValid: mode === \"update\",\n // update mode starts valid — data already exists\n modules: initialData?.modules ?? [],\n permissions: initialData?.permissions ?? [],\n roles: initialData?.roles ?? [],\n mapping: initialData?.mapping ?? []\n });\n const handleImportConfig = (data) => {\n try {\n if (!data?.app || !data.app.name || !Array.isArray(data.app.permissions) || !Array.isArray(data.app.roles) || !Array.isArray(data.app.modules)) {\n throw new Error(\"Invalid import schema\");\n }\n const permissions = data.app.permissions.map((p) => ({\n id: p.id,\n name: p.name,\n label: p.name\n }));\n const roles = data.app.roles.map((r) => ({\n id: generateId4(),\n name: r.name,\n description: \"\",\n permissionIds: r.permissions.map((perm) => perm.id)\n }));\n const modules = data.app.modules.map((m) => ({\n id: generateId4(),\n name: m.name\n }));\n const mapping = data.app.modules.flatMap(\n (m) => m.roles.map((roleName) => {\n const role = roles.find((r) => r.name === roleName);\n const module = modules.find((mod) => mod.name === m.name);\n if (!role || !module) return null;\n return {\n roleId: role.id,\n moduleId: module.id\n };\n })\n ).filter((x) => !!x);\n setState((s) => ({\n ...s,\n app: {\n ...s.app,\n name: data.app.name\n },\n modules,\n permissions,\n roles,\n mapping\n }));\n } catch (err) {\n toast.error(err instanceof Error ? err.message : \"Failed to import config.\");\n }\n };\n const canNext = useCallback(() => {\n const key = STEPS[currentStep].key;\n if (key === \"app\") return state.appValid;\n return true;\n }, [currentStep, state]);\n const handleFinish = async () => {\n setSaving(true);\n setLoading(true);\n try {\n const permissions = state.permissions.map((p) => ({\n name: p.name\n }));\n const roles = state.roles.map((r) => ({\n name: r.name,\n permissions: (r.permissionIds ?? []).map((pid) => state.permissions.find((p) => p.id === pid)?.name).filter((name) => !!name)\n }));\n const moduleRoleMap = /* @__PURE__ */ new Map();\n for (const entry of state.mapping) {\n if (!moduleRoleMap.has(entry.moduleId)) {\n moduleRoleMap.set(entry.moduleId, /* @__PURE__ */ new Set());\n }\n const roleName = state.roles.find((r) => r.id === entry.roleId)?.name;\n if (roleName) {\n moduleRoleMap.get(entry.moduleId).add(roleName);\n }\n }\n const modules = state.modules.map((m) => ({\n module_type: m.name.toUpperCase().replace(/\\s+/g, \"_\"),\n roles: Array.from(moduleRoleMap.get(m.id) ?? [])\n }));\n const payload = {\n app: {\n name: state.app.name,\n permissions,\n roles,\n modules\n }\n };\n await adapter.importConfig(appId, payload);\n setDone(true);\n } catch (err) {\n toast.error(err instanceof Error ? err.message : \"Setup failed.\");\n } finally {\n setSaving(false);\n setLoading(false);\n }\n };\n if (done) {\n return /* @__PURE__ */ jsx(\n OnboardingSuccess,\n {\n appName: state.app.name,\n moduleCount: state.modules.length,\n roleCount: state.roles.length,\n onComplete: onComplete ?? (() => {\n })\n }\n );\n }\n const isLastStep = currentStep === STEPS.length - 1;\n return /* @__PURE__ */ jsxs(\"div\", { className: cn(\"flex flex-col font-appsec\", className), children: [\n /* @__PURE__ */ jsx(StepIndicator, { steps: STEPS, current: currentStep }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex-1 min-h-0\", children: [\n currentStep === 0 && /* @__PURE__ */ jsx(\n AppRegistration,\n {\n initialValues: state.app,\n onChange: (data, isValid) => setState((s) => ({ ...s, app: data, appValid: isValid })),\n onImportConfig: handleImportConfig,\n onExportConfig: (\n // state.modules.length > 0 || state.roles.length > 0\n // ? handleExportConfig\n void 0\n )\n }\n ),\n currentStep === 1 && /* @__PURE__ */ jsx(\n ModuleDeclaration,\n {\n modules: state.modules,\n onChange: (modules) => setState((s) => ({ ...s, modules }))\n }\n ),\n currentStep === 2 && /* @__PURE__ */ jsx(\n PermissionDefinition,\n {\n permissions: state.permissions,\n onChange: (permissions) => setState((s) => ({ ...s, permissions }))\n }\n ),\n currentStep === 3 && /* @__PURE__ */ jsx(\n RoleCreation,\n {\n roles: state.roles,\n permissions: state.permissions,\n onChange: (roles) => setState((s) => ({ ...s, roles })),\n roleTemplates\n }\n ),\n currentStep === 4 && /* @__PURE__ */ jsx(\n RoleModuleMapping,\n {\n roles: state.roles,\n modules: state.modules,\n mapping: state.mapping,\n onChange: (mapping) => setState((s) => ({ ...s, mapping }))\n }\n )\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between mt-8 pt-4 border-t border-appsec-border\", children: [\n /* @__PURE__ */ jsx(\n Button,\n {\n variant: \"secondary\",\n size: \"md\",\n onClick: () => setCurrentStep((s) => s - 1),\n disabled: currentStep === 0 || saving,\n children: LABELS5.back\n }\n ),\n isLastStep ? /* @__PURE__ */ jsx(Button, { size: \"md\", onClick: handleFinish, loading: saving, children: saving ? LABELS5.saving : LABELS5.finish(mode) }) : /* @__PURE__ */ jsx(Button, { size: \"md\", onClick: () => setCurrentStep((s) => s + 1), disabled: !canNext(), children: LABELS5.next })\n ] })\n ] });\n}\nfunction Tabs({ items, activeKey, onChange, className }) {\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n role: \"tablist\",\n className: cn(\n \"flex border-b border-appsec-border gap-0\",\n className\n ),\n children: items.map((tab) => {\n const isActive = tab.key === activeKey;\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center\", children: [\n tab.separator && /* @__PURE__ */ jsx(\"div\", { className: \"self-stretch w-px bg-appsec-border mx-1.5 my-2\" }),\n /* @__PURE__ */ jsxs(\n \"button\",\n {\n id: `${tab.label}`,\n \"data-lsc-ui-type\": \"button\",\n \"data-lsc-ui-label\": `${tab.label}`,\n \"data-lsc-description\": `Open ${tab.label} tab, click ${tab.label} tab,Open config tab, click ${tab.label}`,\n \"data-lsc-when-to-apply\": `when user request to click or open the or ${tab.label}`,\n role: \"tab\",\n \"aria-selected\": isActive,\n \"aria-disabled\": tab.disabled,\n disabled: tab.disabled,\n onClick: () => !tab.disabled && onChange(tab.key),\n className: cn(\n \"inline-flex items-center gap-1.5 px-4 py-2.5 text-sm font-medium border-b-2 transition-colors\",\n \"-mb-px\",\n // overlap border-b of parent\n isActive ? \"border-appsec-primary text-appsec-primary\" : \"border-transparent text-appsec-text-secondary hover:text-appsec-text hover:border-appsec-border\",\n tab.disabled && \"opacity-40 cursor-not-allowed\"\n ),\n children: [\n tab.icon,\n tab.label,\n tab.count !== void 0 && /* @__PURE__ */ jsx(\n \"span\",\n {\n className: cn(\n \"inline-flex items-center justify-center min-w-[1.25rem] h-5 rounded-full px-1.5 text-xs font-semibold\",\n isActive ? \"bg-appsec-primary-light text-appsec-primary\" : \"bg-appsec-surface-alt text-appsec-text-secondary\"\n ),\n children: tab.count\n }\n )\n ]\n },\n tab.key\n )\n ] }, tab.key);\n })\n }\n );\n}\nfunction TabPanel({\n tabKey,\n activeKey,\n children,\n className,\n lscId,\n lscLabel,\n lscDescription,\n lscWhenToApply,\n lscWhenNotToApply\n}) {\n if (tabKey !== activeKey) return null;\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n \"data-lsc-ui-id\": lscId,\n \"data-lsc-ui-type\": lscId ? \"input\" : void 0,\n \"data-lsc-ui-label\": lscLabel,\n \"data-lsc-ui-description\": lscDescription,\n \"data-lsc-ui-when-to-apply\": lscWhenToApply,\n \"data-lsc-ui-when-not-to-apply\": lscWhenNotToApply,\n \"data-lsc-ui-interact-behaviour-control\": lscId ? \"mode\" : void 0,\n role: \"tabpanel\",\n className: cn(\"py-4\", className),\n children\n }\n );\n}\nvar sizeClasses2 = {\n xs: \"h-6 w-6 text-[10px]\",\n sm: \"h-8 w-8 text-xs\",\n md: \"h-9 w-9 text-sm\",\n lg: \"h-11 w-11 text-base\"\n};\nvar COLORS = [\n \"bg-blue-500\",\n \"bg-purple-500\",\n \"bg-green-600\",\n \"bg-orange-500\",\n \"bg-pink-500\",\n \"bg-teal-500\",\n \"bg-indigo-500\",\n \"bg-rose-500\"\n];\nfunction getColor(name) {\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n return COLORS[Math.abs(hash) % COLORS.length];\n}\nfunction getInitials(name) {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\nfunction Avatar({ name, src, size = \"md\", className }) {\n if (src) {\n return /* @__PURE__ */ jsx(\n \"img\",\n {\n src,\n alt: name,\n className: cn(\n \"rounded-full object-cover shrink-0\",\n sizeClasses2[size],\n className\n )\n }\n );\n }\n return /* @__PURE__ */ jsx(\n \"span\",\n {\n className: cn(\n \"inline-flex items-center justify-center rounded-full text-white font-semibold shrink-0\",\n getColor(name),\n sizeClasses2[size],\n className\n ),\n \"aria-label\": name,\n children: getInitials(name)\n }\n );\n}\nvar variantMap = {\n admin: { bg: \"bg-appsec-danger-light\", text: \"text-appsec-danger\" },\n editor: { bg: \"bg-appsec-warning-light\", text: \"text-appsec-warning\" },\n viewer: { bg: \"bg-appsec-success-light\", text: \"text-appsec-success\" },\n neutral: { bg: \"bg-appsec-surface-alt\", text: \"text-appsec-text-secondary\" },\n primary: { bg: \"bg-appsec-primary-light\", text: \"text-appsec-primary\" }\n};\nfunction Badge({ label, variant = \"neutral\", bgClass, textClass, className }) {\n const { bg, text } = variantMap[variant];\n return /* @__PURE__ */ jsx(\n \"span\",\n {\n className: cn(\n \"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium\",\n bgClass ?? bg,\n textClass ?? text,\n className\n ),\n children: label\n }\n );\n}\nfunction Chip({ label, onRemove, icon, disabled = false, className }) {\n return /* @__PURE__ */ jsxs(\n \"span\",\n {\n className: cn(\n \"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full\",\n \"bg-appsec-surface-alt border border-appsec-border\",\n \"text-xs font-medium text-appsec-text\",\n className\n ),\n children: [\n icon && /* @__PURE__ */ jsx(\"span\", { className: \"text-appsec-text-secondary\", children: icon }),\n /* @__PURE__ */ jsx(\"span\", { children: label }),\n onRemove && !disabled && /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: onRemove,\n className: \"text-appsec-text-tertiary hover:text-appsec-danger transition-colors ml-0.5\",\n \"aria-label\": `Remove ${label}`,\n children: /* @__PURE__ */ jsx(X, { className: \"h-3 w-3\" })\n }\n )\n ]\n }\n );\n}\nvar sizeClasses3 = {\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-2xl\"\n};\nfunction Modal({\n open,\n onClose,\n title,\n description,\n size = \"md\",\n children,\n footer,\n className\n}) {\n const overlayRef = useRef(null);\n useEffect(() => {\n if (!open) return;\n const onKey = (e) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [open, onClose]);\n if (!open) return null;\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n ref: overlayRef,\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-labelledby\": title ? \"modal-title\" : void 0,\n className: \"fixed inset-0 z-50 flex items-center justify-center p-4\",\n children: [\n /* @__PURE__ */ jsx(\n \"div\",\n {\n className: \"absolute inset-0 bg-black/40 backdrop-blur-sm\",\n onClick: onClose,\n \"aria-hidden\": \"true\"\n }\n ),\n /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: cn(\n \"relative z-10 w-full bg-appsec-bg rounded-appsec shadow-xl\",\n \"border border-appsec-border\",\n \"flex flex-col max-h-[90vh]\",\n sizeClasses3[size],\n className\n ),\n children: [\n (title || description) && /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-start justify-between gap-4 px-6 py-4 border-b border-appsec-border\", children: [\n /* @__PURE__ */ jsxs(\"div\", { children: [\n title && /* @__PURE__ */ jsx(\"h2\", { id: \"modal-title\", className: \"text-base font-semibold text-appsec-text\", children: title }),\n description && /* @__PURE__ */ jsx(\"p\", { className: \"mt-1 text-sm text-appsec-text-secondary\", children: description })\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: onClose,\n className: \"text-appsec-text-tertiary hover:text-appsec-text transition-colors shrink-0\",\n \"aria-label\": \"Close\",\n children: /* @__PURE__ */ jsx(X, { className: \"h-5 w-5\" })\n }\n )\n ] }),\n /* @__PURE__ */ jsx(\"div\", { className: \"overflow-y-auto px-6 py-4 flex-1\", children }),\n footer && /* @__PURE__ */ jsx(\"div\", { className: \"flex items-center justify-end gap-2 px-6 py-4 border-t border-appsec-border\", children: footer })\n ]\n }\n )\n ]\n }\n );\n}\nvar LABELS6 = {\n defaultTitle: \"Are you sure?\",\n confirm: \"Confirm\",\n cancel: \"Cancel\"\n};\nfunction ConfirmDialog({\n open,\n onClose,\n onConfirm,\n title = LABELS6.defaultTitle,\n message,\n confirmLabel = LABELS6.confirm,\n cancelLabel = LABELS6.cancel,\n variant = \"danger\",\n loading = false\n}) {\n return /* @__PURE__ */ jsx(\n Modal,\n {\n open,\n onClose,\n size: \"sm\",\n footer: /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Button, { variant: \"secondary\", size: \"sm\", onClick: onClose, disabled: loading, children: cancelLabel }),\n /* @__PURE__ */ jsx(Button, { variant, size: \"sm\", onClick: onConfirm, loading, children: confirmLabel })\n ] }),\n children: /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-start gap-4\", children: [\n variant === \"danger\" && /* @__PURE__ */ jsx(\"span\", { className: \"shrink-0 mt-0.5 text-appsec-danger\", children: /* @__PURE__ */ jsx(AlertTriangle, { className: \"h-5 w-5\" }) }),\n /* @__PURE__ */ jsxs(\"div\", { children: [\n /* @__PURE__ */ jsx(\"h3\", { className: \"text-sm font-semibold text-appsec-text mb-1\", children: title }),\n /* @__PURE__ */ jsx(\"p\", { className: \"text-sm text-appsec-text-secondary\", children: message })\n ] })\n ] })\n }\n );\n}\nvar SearchBar = forwardRef(\n ({ value, onChange, onClear, placeholder = \"Search\\u2026\", className, ...rest }, ref) => {\n return /* @__PURE__ */ jsxs(\"div\", { className: cn(\"relative flex items-center\", className), children: [\n /* @__PURE__ */ jsx(Search, { className: \"absolute left-3 h-4 w-4 text-appsec-text-tertiary pointer-events-none\" }),\n /* @__PURE__ */ jsx(\n \"input\",\n {\n ref,\n type: \"search\",\n value,\n onChange: (e) => onChange(e.target.value),\n placeholder,\n className: cn(\n \"h-9 w-full rounded-appsec border border-appsec-border bg-appsec-bg\",\n \"pl-9 pr-8 py-2 text-sm text-appsec-text placeholder:text-appsec-text-tertiary\",\n \"transition-colors outline-none\",\n \"focus:border-appsec-primary focus:ring-2 focus:ring-appsec-primary-light\",\n \"[&::-webkit-search-cancel-button]:hidden\"\n ),\n ...rest\n }\n ),\n value && /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n onChange(\"\");\n onClear?.();\n },\n className: \"absolute right-2.5 text-appsec-text-tertiary hover:text-appsec-text transition-colors\",\n \"aria-label\": \"Clear search\",\n children: /* @__PURE__ */ jsx(X, { className: \"h-4 w-4\" })\n }\n )\n ] });\n }\n);\nSearchBar.displayName = \"SearchBar\";\n\n// src/utils/search.ts\nfunction createSearchMatcher(query) {\n const trimmed = query.trim();\n if (!trimmed) return () => true;\n try {\n const regex = new RegExp(trimmed, \"i\");\n return (value) => regex.test(String(value ?? \"\"));\n } catch {\n const normalized = trimmed.toLowerCase();\n return (value) => String(value ?? \"\").toLowerCase().includes(normalized);\n }\n}\nfunction matchesAny(query, values) {\n const matches = createSearchMatcher(query);\n return values.some(matches);\n}\nfunction useDebouncedValue(value, delay = 300) {\n const [debouncedValue, setDebouncedValue] = useState(value);\n useEffect(() => {\n const timeout = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(timeout);\n }, [value, delay]);\n return debouncedValue;\n}\nvar rbacQueryKeys = {\n app: (appId) => [\"rbac\", \"app\", appId],\n modules: (appId) => [\"rbac\", \"modules\", appId],\n roles: (appId) => [\"rbac\", \"roles\", appId],\n permissions: (appId) => [\"rbac\", \"permissions\", appId],\n acls: (appId, resourceId) => [\n \"rbac\",\n \"acls\",\n appId,\n resourceId\n ],\n roleModuleMapping: (appId) => [\"rbac\", \"roleModuleMapping\", appId],\n groups: (appId) => [\"rbac\", \"groups\", appId],\n resources: (moduleId) => [\"rbac\", \"resources\", moduleId],\n resourceGroups: (appId, moduleId) => [\n \"rbac\",\n \"resourceGroups\",\n appId,\n moduleId\n ],\n users: (query) => [\"rbac\", \"users\", query]\n};\nfunction useAppQuery(appId) {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: rbacQueryKeys.app(appId),\n queryFn: () => adapter.getAppId(appId),\n enabled: !!appId,\n staleTime: 5 * 60 * 1e3,\n // 5 minutes\n refetchOnWindowFocus: false,\n refetchOnMount: false\n });\n}\nfunction useModulesQuery(appMongoId) {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: rbacQueryKeys.modules(appMongoId),\n queryFn: () => adapter.getModules(appMongoId),\n enabled: !!appMongoId,\n staleTime: 5 * 60 * 1e3,\n refetchOnWindowFocus: false,\n refetchOnMount: false\n });\n}\nfunction useRolesQuery(appMongoId) {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: rbacQueryKeys.roles(appMongoId),\n queryFn: () => adapter.getRoles(appMongoId),\n enabled: !!appMongoId,\n staleTime: 5 * 60 * 1e3,\n refetchOnWindowFocus: false,\n refetchOnMount: false\n });\n}\nfunction useAllRolesQuery(appMongoId) {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: [...rbacQueryKeys.roles(appMongoId), \"all\"],\n queryFn: async () => {\n const PAGE_SIZE2 = 100;\n const CONCURRENCY = 10;\n const first = await adapter.getRoles(appMongoId, 1, PAGE_SIZE2);\n const totalPages = first?.pagination?.totalPages ?? 1;\n if (totalPages <= 1) return first;\n const remaining = Array.from({ length: totalPages - 1 }, (_, i) => i + 2);\n const results = [];\n for (let i = 0; i < remaining.length; i += CONCURRENCY) {\n const batch = remaining.slice(i, i + CONCURRENCY);\n const pages = await Promise.all(\n batch.map((page) => adapter.getRoles(appMongoId, page, PAGE_SIZE2))\n );\n results.push(...pages);\n }\n return {\n ...first,\n data: [...first.data ?? [], ...results.flatMap((r) => r.data ?? [])]\n };\n },\n enabled: !!appMongoId,\n staleTime: 5 * 60 * 1e3,\n refetchOnWindowFocus: false,\n refetchOnMount: false\n });\n}\nfunction usePermissionsQuery(appMongoId) {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: rbacQueryKeys.permissions(appMongoId),\n queryFn: () => adapter.getPermission(appMongoId),\n enabled: !!appMongoId,\n staleTime: 5 * 60 * 1e3,\n refetchOnWindowFocus: false,\n refetchOnMount: false\n });\n}\nfunction useModulesPaginatedQuery(appMongoId, page, limit = 10, name = \"\") {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: [...rbacQueryKeys.modules(appMongoId), \"paginated\", page, limit, name],\n queryFn: () => adapter.getModules(appMongoId, page, limit, name),\n enabled: !!appMongoId,\n staleTime: 5 * 60 * 1e3,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n placeholderData: (prev) => prev\n });\n}\nfunction useRolesPaginatedQuery(appMongoId, page, limit = 10, name = \"\") {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: [...rbacQueryKeys.roles(appMongoId), \"paginated\", page, limit, name],\n queryFn: () => adapter.getRoles(appMongoId, page, limit, name),\n enabled: !!appMongoId,\n staleTime: 5 * 60 * 1e3,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n placeholderData: (prev) => prev\n });\n}\nfunction usePermissionsPaginatedQuery(appMongoId, page, limit = 10, name = \"\", enabled = true) {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: [...rbacQueryKeys.permissions(appMongoId), \"paginated\", page, limit, name],\n queryFn: () => adapter.getPermission(appMongoId, page, limit, name),\n enabled: !!appMongoId && enabled,\n staleTime: 5 * 60 * 1e3,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n placeholderData: (prev) => prev\n });\n}\nfunction useAclsQuery(appMongoId, resourceId) {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: rbacQueryKeys.acls(appMongoId, resourceId),\n queryFn: () => adapter.getAcls(appMongoId, 1, 50, resourceId),\n enabled: !!appMongoId,\n staleTime: 2 * 60 * 1e3,\n refetchOnWindowFocus: false,\n refetchOnMount: false\n });\n}\nfunction useAllAclsQuery(appMongoId) {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: [...rbacQueryKeys.acls(appMongoId), \"all\"],\n queryFn: () => adapter.getAcls(appMongoId, 1, 50, void 0, false),\n enabled: !!appMongoId,\n staleTime: 2 * 60 * 1e3,\n refetchOnWindowFocus: false,\n refetchOnMount: false\n });\n}\nfunction useRoleModuleMappingQuery(appMongoId) {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: rbacQueryKeys.roleModuleMapping(appMongoId),\n queryFn: () => adapter.getRoleModuleMapping(appMongoId),\n enabled: !!appMongoId,\n staleTime: 5 * 60 * 1e3,\n refetchOnWindowFocus: false,\n refetchOnMount: false\n });\n}\nfunction useGroupsQuery(appMongoId) {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: rbacQueryKeys.groups(appMongoId),\n queryFn: () => adapter.getGroups(appMongoId),\n enabled: !!appMongoId,\n staleTime: 5 * 60 * 1e3,\n refetchOnWindowFocus: false,\n refetchOnMount: false\n });\n}\nfunction useUsersSearchQuery(query) {\n const { appsecUrl } = useAppsec();\n return useQuery({\n queryKey: rbacQueryKeys.users(query),\n queryFn: async () => {\n const res = await fetch(\n `${appsecUrl}/api/user/get-by-query-v2?search=${encodeURIComponent(\n query\n )}`,\n {\n method: \"GET\",\n credentials: \"include\"\n }\n );\n const data = await res.json();\n if (data?.success) {\n return (data.data || []).map((u) => ({\n email: u.email,\n displayName: u.displayName ?? u.firstname ? `${u.firstname} ${u.lastname}`.trim() : u.email\n }));\n } else {\n return [];\n }\n },\n enabled: query.length > 2,\n // Only search when query is meaningful\n staleTime: 10 * 60 * 1e3\n // 10 minutes for user search results\n });\n}\nfunction useCreateAclMutation() {\n const { adapter } = useAppsec();\n const queryClient2 = useQueryClient();\n const toast = useToast();\n return useMutation({\n mutationFn: (data) => adapter.createAcl(data),\n onSuccess: () => {\n queryClient2.invalidateQueries({ queryKey: [\"rbac\", \"acls\"] });\n },\n onError: (error) => {\n toast.error(error.message || \"Failed to grant access.\");\n }\n });\n}\nfunction useDeleteAclMutation() {\n const { adapter } = useAppsec();\n const queryClient2 = useQueryClient();\n const toast = useToast();\n return useMutation({\n mutationFn: (entryId) => adapter.deleteAcl(entryId),\n onSuccess: () => {\n queryClient2.invalidateQueries({ queryKey: [\"rbac\", \"acls\"] });\n toast.success(\"Access removed successfully.\");\n },\n onError: (error) => {\n toast.error(error.message || \"Failed to remove access.\");\n }\n });\n}\nfunction useDeleteAclsByResourceGroupMutation() {\n const { adapter } = useAppsec();\n const queryClient2 = useQueryClient();\n const toast = useToast();\n return useMutation({\n mutationFn: (data) => adapter.deleteAclsByResourceGroup(data),\n onSuccess: () => {\n queryClient2.invalidateQueries({ queryKey: [\"rbac\", \"acls\"] });\n },\n onError: (error) => {\n toast.error(\n error.message || \"Failed to remove access from resource group.\"\n );\n }\n });\n}\nfunction useShareResourceGroupMutation() {\n const { adapter } = useAppsec();\n const queryClient2 = useQueryClient();\n const toast = useToast();\n return useMutation({\n mutationFn: (data) => adapter.shareResourceGroup(data),\n onSuccess: () => {\n queryClient2.invalidateQueries({ queryKey: [\"rbac\", \"acls\"] });\n },\n onError: (error) => {\n toast.error(error.message || \"Failed to grant access to resource group.\");\n }\n });\n}\nfunction useBulkUpdateAclMutation() {\n const { adapter } = useAppsec();\n const queryClient2 = useQueryClient();\n const toast = useToast();\n return useMutation({\n mutationFn: (data) => adapter.bulkUpdateAcl(data),\n onSuccess: () => {\n queryClient2.invalidateQueries({ queryKey: [\"rbac\", \"acls\"] });\n toast.success(\"Roles updated successfully.\");\n },\n onError: (error) => {\n toast.error(error.message || \"Failed to update roles.\");\n }\n });\n}\nfunction useResourcesPaginatedQuery(moduleId, page, limit = 20, disabled = false) {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: [...rbacQueryKeys.resources(moduleId), \"paginated\", page, limit],\n queryFn: () => adapter.getResourceForModuleId(moduleId, page, limit),\n enabled: !!moduleId && !disabled,\n staleTime: 5 * 60 * 1e3,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n placeholderData: (prev) => prev\n });\n}\nfunction useResourceGroupsPaginatedQuery(appMongoId, moduleId, page, limit = 20) {\n const { adapter } = useAppsec();\n return useQuery({\n queryKey: [...rbacQueryKeys.resourceGroups(appMongoId, moduleId), \"paginated\", page, limit],\n queryFn: () => adapter.getResourceGroups(appMongoId, moduleId, page, limit),\n enabled: !!appMongoId && !!moduleId,\n staleTime: 5 * 60 * 1e3,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n placeholderData: (prev) => prev\n });\n}\nvar getPaginationTotalItems = (pagination, fallback = 0) => Number(pagination?.totalItems ?? pagination?.total ?? fallback);\nvar getPaginationTotalPages = (pagination, totalItems, pageSize) => Number(pagination?.totalPages ?? Math.ceil(totalItems / pageSize) ?? 1);\nmemo(function ShareModal2({\n open,\n onClose,\n resource,\n roles,\n groups,\n onShare,\n onSearchUsers,\n roleModuleMapping\n}) {\n const [mode, setMode] = useState(\"user\");\n const [selectedUsers, setSelectedUsers] = useState([]);\n const [inputValue, setInputValue] = useState(\"\");\n const [suggestions, setSuggestions] = useState([]);\n const [showDropdown, setShowDropdown] = useState(false);\n const [searching, setSearching] = useState(false);\n const inputRef = useRef(null);\n const dropdownRef = useRef(null);\n const [groupId, setGroupId] = useState(\"\");\n const [roleId, setRoleId] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n const submittingRef = useRef(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [buttonDisabled, setButtonDisabled] = useState(false);\n const filteredRoles = useMemo(\n () => roles.filter(\n (role) => roleModuleMapping.some(\n (m) => m.roleId?._id === role._id && m.moduleId?._id === resource.module\n )\n ),\n [roles, roleModuleMapping, resource.module]\n );\n useEffect(() => {\n if (open) {\n setMode(\"user\");\n setSelectedUsers([]);\n setInputValue(\"\");\n setSuggestions([]);\n setShowDropdown(false);\n setGroupId(\"\");\n setRoleId(\"\");\n setError(\"\");\n setLoading(false);\n submittingRef.current = false;\n setIsSubmitting(false);\n setButtonDisabled(false);\n }\n }, [open]);\n useEffect(() => {\n if (inputValue.trim().length < 2) {\n setSuggestions([]);\n setShowDropdown(false);\n return;\n }\n const timer = setTimeout(async () => {\n setSearching(true);\n try {\n const results = await onSearchUsers(inputValue.trim());\n setSuggestions(\n results.filter(\n (u) => !selectedUsers.some((s) => s.email === u.email)\n )\n );\n setShowDropdown(true);\n } catch {\n setSuggestions([]);\n } finally {\n setSearching(false);\n }\n }, 300);\n return () => clearTimeout(timer);\n }, [inputValue, selectedUsers, onSearchUsers]);\n useEffect(() => {\n if (!showDropdown) return;\n const handler = (e) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target)) {\n setShowDropdown(false);\n }\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [showDropdown]);\n const addUser = (user) => {\n setSelectedUsers((prev) => [...prev, user]);\n setInputValue(\"\");\n setSuggestions([]);\n setShowDropdown(false);\n inputRef.current?.focus();\n };\n const addRawEmail = () => {\n const trimmed = inputValue.trim().toLowerCase();\n if (!trimmed || selectedUsers.some((u) => u.email === trimmed)) return;\n setSelectedUsers((prev) => [\n ...prev,\n { email: trimmed, displayName: trimmed }\n ]);\n setInputValue(\"\");\n setSuggestions([]);\n setShowDropdown(false);\n };\n const removeUser = (email) => {\n setSelectedUsers((prev) => prev.filter((u) => u.email !== email));\n };\n const handleKeyDown = (e) => {\n if ((e.key === \"Enter\" || e.key === \",\") && inputValue.trim()) {\n e.preventDefault();\n if (suggestions.length > 0) addUser(suggestions[0]);\n else addRawEmail();\n }\n if (e.key === \"Backspace\" && !inputValue && selectedUsers.length > 0) {\n setSelectedUsers((prev) => prev.slice(0, -1));\n }\n if (e.key === \"Escape\") setShowDropdown(false);\n };\n const submit = async () => {\n if (mode === \"user\" && selectedUsers.length === 0) {\n setError(\"Add at least one email.\");\n return;\n }\n if (mode === \"group\" && !groupId) {\n setError(\"Select a group.\");\n return;\n }\n if (!roleId) {\n setError(\"Select a role.\");\n return;\n }\n submittingRef.current = true;\n setIsSubmitting(true);\n setLoading(true);\n setError(\"\");\n try {\n await onShare(\n selectedUsers.map((u) => u.email),\n roleId,\n mode === \"group\" ? groupId : void 0\n );\n onClose();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Share failed.\");\n } finally {\n setLoading(false);\n submittingRef.current = false;\n setIsSubmitting(false);\n setButtonDisabled(false);\n }\n };\n return /* @__PURE__ */ jsx(\n Modal,\n {\n open,\n onClose,\n title: `Share \\u2014 ${resource.name}`,\n description: \"Grant access to this document.\",\n size: \"sm\",\n footer: /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n Button,\n {\n variant: \"secondary\",\n size: \"sm\",\n onClick: onClose,\n disabled: loading || isSubmitting,\n children: \"Cancel\"\n }\n ),\n /* @__PURE__ */ jsx(\n Button,\n {\n size: \"sm\",\n onClick: (e) => {\n e.preventDefault();\n e.stopPropagation();\n submit();\n },\n loading,\n disabled: loading || isSubmitting || buttonDisabled,\n children: \"Share\"\n }\n )\n ] }),\n children: /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-4\", children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-1 p-1 rounded-appsec bg-appsec-surface border border-appsec-border\", children: [\"user\", \"group\"].map((m) => /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n setMode(m);\n setError(\"\");\n },\n className: cn(\n \"flex-1 py-1.5 text-xs font-medium rounded transition-colors capitalize\",\n mode === m ? \"bg-appsec-bg text-appsec-text shadow-sm border border-appsec-border\" : \"text-appsec-text-secondary hover:text-appsec-text\"\n ),\n children: m === \"user\" ? \"By Email\" : \"By Group\"\n },\n m\n )) }),\n mode === \"user\" ? /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [\n /* @__PURE__ */ jsx(\"label\", { className: \"text-sm font-medium text-appsec-text\", children: \"Add people\" }),\n /* @__PURE__ */ jsxs(\"div\", { ref: dropdownRef, className: \"relative\", children: [\n /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: cn(\n \"flex flex-wrap gap-1.5 p-2 min-h-10 rounded-appsec border bg-appsec-bg cursor-text transition-colors\",\n showDropdown || document.activeElement === inputRef.current ? \"border-appsec-primary\" : \"border-appsec-border\"\n ),\n onClick: () => inputRef.current?.focus(),\n children: [\n selectedUsers.map((u) => /* @__PURE__ */ jsx(\n Chip,\n {\n label: u.displayName !== u.email ? u.displayName : u.email,\n onRemove: () => removeUser(u.email)\n },\n u.email\n )),\n /* @__PURE__ */ jsx(\n \"input\",\n {\n ref: inputRef,\n type: \"text\",\n value: inputValue,\n onChange: (e) => setInputValue(e.target.value),\n onKeyDown: handleKeyDown,\n onFocus: () => inputValue.trim().length >= 2 && suggestions.length > 0 && setShowDropdown(true),\n placeholder: selectedUsers.length === 0 ? \"Search by name or email\\u2026\" : \"\",\n className: \"flex-1 min-w-32 bg-transparent outline-none text-sm text-appsec-text placeholder:text-appsec-text-tertiary\"\n }\n ),\n searching && /* @__PURE__ */ jsx(\"span\", { className: \"self-center ml-1\", children: /* @__PURE__ */ jsxs(\n \"svg\",\n {\n className: \"animate-spin h-3.5 w-3.5 text-appsec-text-secondary\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n children: [\n /* @__PURE__ */ jsx(\n \"circle\",\n {\n className: \"opacity-25\",\n cx: \"12\",\n cy: \"12\",\n r: \"10\",\n stroke: \"currentColor\",\n strokeWidth: \"4\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"path\",\n {\n className: \"opacity-75\",\n fill: \"currentColor\",\n d: \"M4 12a8 8 0 018-8v8H4z\"\n }\n )\n ]\n }\n ) })\n ]\n }\n ),\n showDropdown && suggestions.length > 0 && /* @__PURE__ */ jsx(\"div\", { className: \"absolute z-50 mt-1 w-full rounded-appsec border border-appsec-border bg-appsec-bg shadow-lg overflow-hidden\", children: suggestions.map((u) => /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onMouseDown: (e) => {\n e.preventDefault();\n addUser(u);\n },\n className: \"flex items-center gap-3 w-full px-3 py-2.5 text-left hover:bg-appsec-surface transition-colors\",\n children: [\n /* @__PURE__ */ jsx(Avatar, { name: u.displayName, size: \"sm\" }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col min-w-0\", children: [\n /* @__PURE__ */ jsx(\"span\", { className: \"text-sm font-medium text-appsec-text truncate\", children: u.displayName }),\n /* @__PURE__ */ jsx(\"span\", { className: \"text-xs text-appsec-text-secondary truncate\", children: u.email })\n ] })\n ]\n },\n u.email\n )) })\n ] }),\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-tertiary\", children: \"Press Enter or comma to add a raw email address.\" })\n ] }) : /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [\n /* @__PURE__ */ jsx(\"label\", { className: \"text-sm font-medium text-appsec-text\", children: \"Group\" }),\n /* @__PURE__ */ jsxs(\n \"select\",\n {\n value: groupId,\n onChange: (e) => setGroupId(e.target.value),\n className: \"h-9 text-sm rounded-appsec border border-appsec-border bg-appsec-bg px-3 pr-8 appearance-none outline-none focus:border-appsec-primary text-appsec-text\",\n children: [\n /* @__PURE__ */ jsx(\"option\", { value: \"\", children: \"Select group\\u2026\" }),\n groups.map((g) => /* @__PURE__ */ jsxs(\"option\", { value: g._id, children: [\n g.name,\n g.description ? ` \\u2014 ${g.description}` : \"\"\n ] }, g._id))\n ]\n }\n )\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [\n /* @__PURE__ */ jsx(\"label\", { className: \"text-sm font-medium text-appsec-text\", children: \"Role\" }),\n /* @__PURE__ */ jsxs(\n \"select\",\n {\n value: roleId,\n onChange: (e) => setRoleId(e.target.value),\n className: \"h-9 text-sm rounded-appsec border border-appsec-border bg-appsec-bg px-3 pr-8 appearance-none outline-none focus:border-appsec-primary text-appsec-text\",\n children: [\n /* @__PURE__ */ jsx(\"option\", { value: \"\", children: \"Select role\\u2026\" }),\n filteredRoles.map((r) => /* @__PURE__ */ jsx(\"option\", { value: r._id, children: r.name }, r._id))\n ]\n }\n )\n ] }),\n error && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-danger\", children: error })\n ] })\n }\n );\n});\nvar TYPE_OPTIONS = [\"all\", \"user\", \"group\"];\nvar ACL_PAGE_SIZE = 10;\nvar AccessList = memo(function AccessList2({\n entries,\n roles,\n users,\n groups,\n onRemove,\n onBulkRoleChange,\n roleModuleMapping,\n module\n}) {\n const toast = useToast();\n const [selected, setSelected] = useState(/* @__PURE__ */ new Set());\n const [bulkRole, setBulkRole] = useState(\"\");\n const [removing, setRemoving] = useState(null);\n const [bulkLoading, setBulkLoading] = useState(false);\n const [confirmRemove, setConfirmRemove] = useState(null);\n const [aclPage, setAclPage] = useState(0);\n const [search, setSearch] = useState(\"\");\n const debouncedSearch = useDebouncedValue(search.trim(), 300);\n const [roleFilter, setRoleFilter] = useState(\"\");\n const [typeFilter, setTypeFilter] = useState(\"all\");\n const filteredRoles = useMemo(\n () => roles.filter(\n (role) => roleModuleMapping.some(\n (m) => m.roleId?._id === role._id && m.moduleId?._id === module._id\n )\n ),\n [roles, roleModuleMapping, module._id]\n );\n const isGroupEntry = (entry) => !!entry.groupId;\n const groupFor = (groupId) => groups.find((g) => g._id === groupId);\n const normalizedEntries = useMemo(\n () => entries.map((e) => ({\n ...e,\n id: e.id || e._id\n })),\n [entries]\n );\n const availableRoles = useMemo(\n () => [\n ...new Set(normalizedEntries.map((e) => e.role?.name).filter(Boolean))\n ].sort(),\n [normalizedEntries]\n );\n const visibleEntries = useMemo(() => {\n let result = normalizedEntries;\n if (typeFilter !== \"all\") {\n result = result.filter(\n (e) => typeFilter === \"group\" ? isGroupEntry(e) : !isGroupEntry(e)\n );\n }\n if (roleFilter) {\n result = result.filter((e) => e.role?.name === roleFilter);\n }\n if (debouncedSearch) {\n result = result.filter((e) => {\n if (isGroupEntry(e)) {\n const group = groupFor(e.groupId);\n return matchesAny(debouncedSearch, [\n group?.name,\n group?.description,\n \"group\",\n e.role?.name,\n e.grantedBy ? decodeURIComponent(e.grantedBy) : \"\",\n e.grantedAt,\n e.resourceId\n ]);\n }\n return matchesAny(debouncedSearch, [\n e.user_email,\n \"user\",\n e.role?.name,\n e.grantedBy ? decodeURIComponent(e.grantedBy) : \"\",\n e.grantedAt,\n e.resourceId\n ]);\n });\n }\n return result;\n }, [normalizedEntries, typeFilter, roleFilter, debouncedSearch]);\n const totalAclPages = Math.max(1, Math.ceil(visibleEntries.length / ACL_PAGE_SIZE));\n const pageEntries = useMemo(\n () => visibleEntries.slice(aclPage * ACL_PAGE_SIZE, (aclPage + 1) * ACL_PAGE_SIZE),\n [visibleEntries, aclPage]\n );\n useEffect(() => {\n setAclPage(0);\n }, [search, roleFilter, typeFilter, module._id]);\n const allPageSelected = useMemo(\n () => pageEntries.length > 0 && pageEntries.every((e) => selected.has(e.id)),\n [pageEntries, selected]\n );\n const toggleAll = useCallback(\n () => setSelected((s) => {\n const n = new Set(s);\n if (allPageSelected) {\n pageEntries.forEach((e) => n.delete(e.id));\n } else {\n pageEntries.forEach((e) => n.add(e.id));\n }\n return n;\n }),\n [allPageSelected, pageEntries]\n );\n const toggleOne = (id) => setSelected((s) => {\n const n = new Set(s);\n n.has(id) ? n.delete(id) : n.add(id);\n return n;\n });\n const handleRemove = async (entryId) => {\n setRemoving(entryId);\n try {\n await onRemove(entryId);\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Failed to remove access.\"\n );\n } finally {\n setRemoving(null);\n setConfirmRemove(null);\n }\n };\n const handleBulkApply = async () => {\n if (!bulkRole || selected.size === 0) return;\n setBulkLoading(true);\n try {\n await onBulkRoleChange([...selected], bulkRole);\n toast.success(\n `Role updated for ${selected.size} user${selected.size !== 1 ? \"s\" : \"\"}.`\n );\n setSelected(/* @__PURE__ */ new Set());\n setBulkRole(\"\");\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Failed to update roles.\"\n );\n } finally {\n setBulkLoading(false);\n }\n };\n const userFor = (email) => users.find((u) => u.email === email);\n if (normalizedEntries.length === 0) {\n return /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-tertiary py-3 text-center\", children: \"No one has access yet. Use Share to grant access.\" });\n }\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-2\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2 flex-wrap\", children: [\n /* @__PURE__ */ jsx(\n SearchBar,\n {\n value: search,\n onChange: setSearch,\n placeholder: \"Search by email or group name\\u2026\",\n className: \"flex-1 min-w-40\"\n }\n ),\n /* @__PURE__ */ jsxs(\n \"select\",\n {\n value: roleFilter,\n onChange: (e) => setRoleFilter(e.target.value),\n className: \"h-8 text-xs rounded-appsec border border-appsec-border bg-appsec-bg px-2 pr-6 appearance-none outline-none focus:border-appsec-primary text-appsec-text\",\n children: [\n /* @__PURE__ */ jsx(\"option\", { value: \"\", children: \"All Roles\" }),\n availableRoles.map((r) => /* @__PURE__ */ jsx(\"option\", { value: r, children: r }, r))\n ]\n }\n ),\n /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-0.5 p-0.5 rounded-appsec bg-appsec-surface border border-appsec-border\", children: TYPE_OPTIONS.map((t) => /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setTypeFilter(t),\n className: cn(\n \"px-2.5 py-1 text-[11px] font-medium rounded capitalize transition-colors\",\n typeFilter === t ? \"bg-appsec-bg text-appsec-text shadow-sm border border-appsec-border\" : \"text-appsec-text-secondary hover:text-appsec-text\"\n ),\n children: t\n },\n t\n )) })\n ] }),\n selected.size > 0 && /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2 px-3 py-2 rounded-appsec bg-appsec-primary-light border border-appsec-primary/30\", children: [\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-xs font-semibold text-appsec-primary\", children: [\n selected.size,\n \" selected\"\n ] }),\n /* @__PURE__ */ jsxs(\n \"select\",\n {\n value: bulkRole,\n onChange: (e) => setBulkRole(e.target.value),\n className: \"h-7 text-xs rounded-appsec border px-2\",\n children: [\n /* @__PURE__ */ jsx(\"option\", { value: \"\", children: \"Change role\\u2026\" }),\n filteredRoles.map((r) => /* @__PURE__ */ jsx(\"option\", { value: r._id, children: r.name }, r._id))\n ]\n }\n ),\n /* @__PURE__ */ jsx(\n Button,\n {\n size: \"sm\",\n variant: \"secondary\",\n disabled: !bulkRole || bulkLoading,\n onClick: handleBulkApply,\n children: \"Apply\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n onClick: () => setSelected(/* @__PURE__ */ new Set()),\n className: \"text-xs ml-auto\",\n children: \"\\u2715 Clear\"\n }\n )\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col divide-y border rounded-appsec overflow-x-auto\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-3 px-3 py-2 bg-appsec-surface\", children: [\n /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n checked: allPageSelected,\n onChange: toggleAll,\n className: \"shrink-0\"\n }\n ),\n /* @__PURE__ */ jsx(\"span\", { className: \"min-w-0 flex-1 text-xs font-semibold\", children: \"Subject\" }),\n /* @__PURE__ */ jsx(\"span\", { className: \"w-14 shrink-0 text-xs font-semibold\", children: \"Type\" }),\n /* @__PURE__ */ jsx(\"span\", { className: \"w-36 shrink-0 text-xs font-semibold\", children: \"Role\" }),\n /* @__PURE__ */ jsx(\"span\", { className: \"w-28 shrink-0 text-xs font-semibold\", children: \"Granted\" }),\n /* @__PURE__ */ jsx(\"span\", { className: \"w-36 shrink-0 text-xs font-semibold\", children: \"Granted By\" }),\n /* @__PURE__ */ jsx(\"span\", { className: \"w-8 shrink-0\" })\n ] }),\n visibleEntries.length === 0 ? /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-tertiary py-4 text-center\", children: \"No results match your filters.\" }) : pageEntries.map((entry) => {\n const isSelected = selected.has(entry.id);\n const user = userFor(entry.user_email);\n const group = groupFor(entry.groupId);\n const isGroup = isGroupEntry(entry);\n const subjectLabel = isGroup ? group?.name || \"Unknown Group\" : entry.user_email;\n const subjectDetail = isGroup ? `${group?.users?.length || 0} members` : entry.user_email;\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: cn(\n \"flex min-w-0 items-center gap-3 px-3 py-2\",\n isSelected && \"bg-appsec-primary-light\"\n ),\n children: [\n /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n checked: isSelected,\n onChange: () => toggleOne(entry.id),\n className: \"shrink-0\"\n }\n ),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex min-w-0 flex-1 items-center gap-2\", children: [\n /* @__PURE__ */ jsx(\n Avatar,\n {\n name: subjectLabel,\n src: user?.avatarUrl,\n size: \"xs\"\n }\n ),\n /* @__PURE__ */ jsxs(\"div\", { className: \"min-w-0\", children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"truncate text-xs font-medium\", title: subjectLabel, children: subjectLabel }),\n /* @__PURE__ */ jsx(\"p\", { className: \"truncate text-[10px] text-gray-500\", title: subjectDetail, children: subjectDetail })\n ] })\n ] }),\n /* @__PURE__ */ jsx(\"div\", { className: \"w-14 shrink-0\", children: /* @__PURE__ */ jsx(Badge, { label: isGroup ? \"Group\" : \"User\", variant: \"neutral\" }) }),\n /* @__PURE__ */ jsx(\"div\", { className: \"w-36 min-w-0 shrink-0\", children: /* @__PURE__ */ jsx(\n Badge,\n {\n label: entry.role?.name || \"\\u2014\",\n variant: \"neutral\",\n className: \"max-w-full whitespace-normal break-words rounded-xl px-3 py-2 text-left leading-snug\"\n }\n ) }),\n /* @__PURE__ */ jsx(\"div\", { className: \"w-28 shrink-0 text-[10px] text-gray-500\", children: new Date(entry.grantedAt).toLocaleDateString() }),\n /* @__PURE__ */ jsx(\"div\", { className: \"w-36 shrink-0 truncate text-[10px] text-appsec-primary\", children: entry.grantedBy ? decodeURIComponent(entry.grantedBy) : \"\\u2014\" }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n disabled: removing === entry.id,\n onClick: () => setConfirmRemove(entry.id),\n className: \"w-8 shrink-0\",\n children: /* @__PURE__ */ jsx(Trash2, { className: \"h-3.5 w-3.5\" })\n }\n )\n ]\n },\n entry.id\n );\n })\n ] }),\n totalAclPages > 1 && /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between px-1\", children: [\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-tertiary\", children: [\n aclPage * ACL_PAGE_SIZE + 1,\n \"\\u2013\",\n Math.min((aclPage + 1) * ACL_PAGE_SIZE, visibleEntries.length),\n \" of \",\n visibleEntries.length\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1\", children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setAclPage((p) => Math.max(0, p - 1)),\n disabled: aclPage === 0,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 disabled:cursor-default transition-colors\",\n children: /* @__PURE__ */ jsx(ChevronLeft, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-secondary px-1\", children: [\n aclPage + 1,\n \" / \",\n totalAclPages\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setAclPage((p) => Math.min(totalAclPages - 1, p + 1)),\n disabled: aclPage >= totalAclPages - 1,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 disabled:cursor-default transition-colors\",\n children: /* @__PURE__ */ jsx(ChevronRight, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] })\n ] }),\n /* @__PURE__ */ jsx(\n ConfirmDialog,\n {\n open: !!confirmRemove,\n onClose: () => setConfirmRemove(null),\n onConfirm: () => confirmRemove && handleRemove(confirmRemove),\n title: \"Remove access\",\n message: \"Remove this subject's access?\",\n confirmLabel: \"Remove\",\n variant: \"danger\",\n loading: removing !== null\n }\n )\n ] });\n});\nvar ResourceRow = memo(function ResourceRow2({\n resource,\n roles,\n users,\n groups,\n aclEntries,\n onShare,\n onRemoveAccess,\n onBulkRoleChange,\n roleModuleMapping,\n module,\n mfApi\n}) {\n const clickLock = useRef(false);\n useEffect(() => {\n if (!mfApi) return;\n mfApi.subscribe(\n \"MODE_UI_INTERACTION_TO_PERFORM\",\n (eventData) => {\n console.log(\"Event received\", eventData);\n if (eventData.action === \"input\" && eventData.elementId === `expand-${resource.name}`) {\n console.log(\"Clicking expand\", resource.name);\n setExpanded(true);\n }\n }\n );\n }, [mfApi]);\n const [expanded, setExpanded] = useState(false);\n const resourceEntries = useMemo(\n () => aclEntries.filter((e) => e.resourceId === resource._id),\n [aclEntries, resource._id]\n );\n return /* @__PURE__ */ jsxs(\"div\", { className: \"border border-appsec-border rounded-appsec overflow-hidden\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-3 px-4 py-3 bg-appsec-bg hover:bg-appsec-surface transition-colors\", children: [\n /* @__PURE__ */ jsx(FileText, { className: \"h-4 w-4 text-appsec-text-tertiary shrink-0\" }),\n /* @__PURE__ */ jsx(\"span\", { className: \"text-sm text-appsec-text flex-1 truncate\", children: resource.name }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1 text-xs text-appsec-text-secondary shrink-0\", children: [\n /* @__PURE__ */ jsx(Users, { className: \"h-3.5 w-3.5\" }),\n /* @__PURE__ */ jsx(\"span\", { children: resourceEntries.length })\n ] }),\n /* @__PURE__ */ jsx(\n Button,\n {\n id: `share-${resource.name}`,\n \"data-lsc-ui-type\": \"button\",\n \"data-lsc-ui-label\": `share-${resource.name}`,\n \"data-lsc-description\": `Share ${resource.name}`,\n \"data-lsc-when-to-apply\": `when user request to Share the ${resource.name}`,\n size: \"sm\",\n variant: \"secondary\",\n iconLeft: /* @__PURE__ */ jsx(Share2, { className: \"h-3.5 w-3.5\" }),\n onClick: () => onShare(resource),\n className: \"shrink-0\",\n children: \"Share\"\n },\n `share-${resource._id}`\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n id: `expand-${resource.name}`,\n \"data-lsc-ui-type\": \"button\",\n \"data-lsc-ui-label\": `expand-${resource.name}`,\n \"data-lsc-description\": `Expand ${resource.name}`,\n \"data-lsc-when-to-apply\": `when user request to click or open or expand the ${resource.name}`,\n type: \"button\",\n \"aria-label\": expanded ? \"Collapse\" : \"Show access list\",\n onClick: (e) => {\n e.stopPropagation();\n if (clickLock.current) return;\n clickLock.current = true;\n setExpanded((prev) => !prev);\n setTimeout(() => {\n clickLock.current = false;\n }, 0);\n },\n className: cn(\n \"p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-text transition-colors\",\n resourceEntries.length === 0 && \"opacity-30 cursor-default pointer-events-none\"\n ),\n children: expanded ? /* @__PURE__ */ jsx(ChevronUp, { className: \"h-4 w-4\" }) : /* @__PURE__ */ jsx(ChevronDown, { className: \"h-4 w-4\" })\n },\n `expand-${resource._id}`\n )\n ] }),\n expanded && /* @__PURE__ */ jsx(\"div\", { className: \"border-t border-appsec-border bg-appsec-surface px-4 py-3\", children: /* @__PURE__ */ jsx(\n AccessList,\n {\n entries: resourceEntries,\n roles,\n users,\n groups,\n onRemove: onRemoveAccess,\n onBulkRoleChange,\n roleModuleMapping,\n module\n }\n ) })\n ] });\n});\nfunction ResourceGroupFormModal({\n open,\n onClose,\n moduleId,\n existing,\n onSave\n}) {\n const RESOURCE_PAGE_SIZE = 10;\n const [form, setForm] = useState({\n name: \"\",\n description: \"\",\n resources: []\n });\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n const [resourceSearch, setResourceSearch] = useState(\"\");\n const debouncedResourceSearch = useDebouncedValue(resourceSearch.trim(), 300);\n const [resourcePage, setResourcePage] = useState(1);\n const resourcesQuery = useResourcesPaginatedQuery(moduleId, resourcePage, RESOURCE_PAGE_SIZE, !open);\n const resources = resourcesQuery.data?.data || [];\n const resourcePagination = resourcesQuery.data?.pagination;\n const resTotalCount = getPaginationTotalItems(resourcePagination);\n const totalResourcePages = Math.max(\n 1,\n getPaginationTotalPages(resourcePagination, resTotalCount, RESOURCE_PAGE_SIZE)\n );\n const filteredModalResources = useMemo(() => {\n if (!debouncedResourceSearch) return resources;\n return resources.filter(\n (r) => matchesAny(debouncedResourceSearch, [r.name, r.description, r._id])\n );\n }, [resources, debouncedResourceSearch]);\n useEffect(() => {\n setResourcePage(1);\n }, [resourceSearch]);\n useEffect(() => {\n if (open) {\n setForm({\n name: existing?.name ?? \"\",\n description: existing?.description ?? \"\",\n resources: (existing?.resources ?? []).map(\n (r) => typeof r === \"string\" ? r : String(r._id ?? r)\n )\n });\n setError(\"\");\n setResourceSearch(\"\");\n setResourcePage(1);\n }\n }, [open, existing]);\n const toggleResource = (id) => setForm((f) => ({\n ...f,\n resources: f.resources.includes(id) ? f.resources.filter((r) => r !== id) : [...f.resources, id]\n }));\n const submit = async () => {\n if (!form.name.trim()) {\n setError(\"Name is required.\");\n return;\n }\n setLoading(true);\n setError(\"\");\n try {\n await onSave(form);\n onClose();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Save failed.\");\n } finally {\n setLoading(false);\n }\n };\n return /* @__PURE__ */ jsx(\n Modal,\n {\n open,\n onClose,\n title: existing ? \"Edit resource group\" : \"Create resource group\",\n size: \"sm\",\n footer: /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n Button,\n {\n variant: \"secondary\",\n size: \"sm\",\n onClick: onClose,\n disabled: loading,\n children: \"Cancel\"\n }\n ),\n /* @__PURE__ */ jsx(Button, { size: \"sm\", onClick: submit, loading, children: existing ? \"Save\" : \"Create\" })\n ] }),\n children: /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-3\", children: [\n /* @__PURE__ */ jsx(\n Input,\n {\n label: \"Name\",\n value: form.name,\n onChange: (e) => setForm((f) => ({ ...f, name: e.target.value })),\n placeholder: \"e.g. Finance Documents\",\n required: true\n }\n ),\n /* @__PURE__ */ jsx(\n Input,\n {\n label: \"Description\",\n value: form.description,\n onChange: (e) => setForm((f) => ({ ...f, description: e.target.value })),\n placeholder: \"Optional\"\n }\n ),\n resources.length > 0 && /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1.5\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between\", children: [\n /* @__PURE__ */ jsxs(\"label\", { className: \"text-sm font-medium text-appsec-text\", children: [\n \"Resources\",\n /* @__PURE__ */ jsxs(\"span\", { className: \"ml-1.5 text-xs font-normal text-appsec-text-tertiary\", children: [\n \"(\",\n form.resources.length,\n \" selected)\"\n ] })\n ] }),\n form.resources.length > 0 && /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setForm((f) => ({ ...f, resources: [] })),\n className: \"text-[11px] text-appsec-text-tertiary hover:text-appsec-danger transition-colors\",\n children: \"Clear all\"\n }\n )\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"relative\", children: [\n /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"text\",\n value: resourceSearch,\n onChange: (e) => setResourceSearch(e.target.value),\n placeholder: \"Search resources\\u2026\",\n className: \"w-full h-8 pl-8 pr-3 text-xs rounded-appsec border border-appsec-border bg-appsec-bg text-appsec-text placeholder:text-appsec-text-tertiary outline-none focus:border-appsec-primary transition-colors\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"svg\",\n {\n className: \"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-appsec-text-tertiary pointer-events-none\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n children: /* @__PURE__ */ jsx(\n \"path\",\n {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M21 21l-4.35-4.35M17 11A6 6 0 1 1 5 11a6 6 0 0 1 12 0z\"\n }\n )\n }\n )\n ] }),\n /* @__PURE__ */ jsx(\"div\", { className: \"rounded-appsec border border-appsec-border bg-appsec-surface overflow-hidden\", children: filteredModalResources.length === 0 ? /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-tertiary text-center py-4\", children: \"No resources match your search.\" }) : /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-col divide-y divide-appsec-border\", children: filteredModalResources.map((r) => /* @__PURE__ */ jsxs(\n \"label\",\n {\n className: \"flex items-center gap-2 cursor-pointer py-2 px-3 hover:bg-appsec-bg transition-colors\",\n children: [\n /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n checked: form.resources.includes(r._id),\n onChange: () => toggleResource(r._id),\n className: \"h-3.5 w-3.5 rounded border-appsec-border accent-appsec-primary cursor-pointer shrink-0\"\n }\n ),\n /* @__PURE__ */ jsx(\"span\", { className: \"text-xs text-appsec-text truncate\", children: r.name })\n ]\n },\n r._id\n )) }) }),\n totalResourcePages > 1 && /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between px-0.5\", children: [\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-tertiary\", children: [\n (resourcePage - 1) * RESOURCE_PAGE_SIZE + 1,\n \"\\u2013\",\n Math.min(resourcePage * RESOURCE_PAGE_SIZE, resTotalCount),\n \" of \",\n resTotalCount\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1\", children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setResourcePage((p) => Math.max(1, p - 1)),\n disabled: resourcePage === 1,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 disabled:cursor-default transition-colors\",\n children: /* @__PURE__ */ jsx(ChevronLeft, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-secondary px-1\", children: [\n resourcePage,\n \" / \",\n totalResourcePages\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setResourcePage((p) => Math.min(totalResourcePages, p + 1)),\n disabled: resourcePage >= totalResourcePages,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 disabled:cursor-default transition-colors\",\n children: /* @__PURE__ */ jsx(ChevronRight, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] })\n ] })\n ] }),\n error && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-danger\", children: error })\n ] })\n }\n );\n}\nvar ResourceGroupRow = memo(function ResourceGroupRow2({\n group,\n roles,\n users,\n groups: userGroups,\n aclEntries,\n onShare,\n onBulkRoleChange,\n onEdit,\n onDelete,\n roleModuleMapping,\n module,\n allResources\n}) {\n const [expanded, setExpanded] = useState(false);\n const [resourcesPopoverOpen, setResourcesPopoverOpen] = useState(false);\n const [popoverPos, setPopoverPos] = useState({ top: 0, left: 0 });\n const resourcesBtnRef = React11.useRef(null);\n const deleteGroupAclMutation = useDeleteAclsByResourceGroupMutation();\n const groupEntries = useMemo(() => {\n const resourceIds = new Set(\n group.resources.map(\n (r) => typeof r === \"string\" ? r : String(r._id ?? r)\n )\n );\n const totalResources = resourceIds.size;\n if (totalResources === 0) return [];\n const byPrincipal = /* @__PURE__ */ new Map();\n for (const entry of aclEntries) {\n if (!resourceIds.has(String(entry.resourceId))) continue;\n const principal = entry.user_email || entry.group_id || \"\";\n if (!principal) continue;\n if (!byPrincipal.has(principal)) byPrincipal.set(principal, []);\n byPrincipal.get(principal).push(entry);\n }\n const result = [];\n for (const entries of byPrincipal.values()) {\n const covered = new Set(entries.map((e) => String(e.resourceId)));\n if (covered.size === totalResources) {\n result.push(entries[0]);\n }\n }\n return result;\n }, [aclEntries, group.resources]);\n const handleRemoveFromGroup = useCallback(\n async (entryId) => {\n const entry = groupEntries.find((e) => e._id === entryId);\n if (!entry) return;\n await deleteGroupAclMutation.mutateAsync({\n resource_group_id: group._id,\n ...entry.user_email ? { user_email: entry.user_email } : { group_id: entry.group_id }\n });\n },\n [groupEntries, group._id, deleteGroupAclMutation]\n );\n const asShareable = {\n _id: group._id,\n name: group.name,\n module: module._id,\n application: group.application,\n isResourceGroup: true\n };\n return /* @__PURE__ */ jsxs(\"div\", { className: \"border border-appsec-border rounded-appsec overflow-hidden\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-3 px-4 py-3 bg-appsec-bg hover:bg-appsec-surface transition-colors\", children: [\n /* @__PURE__ */ jsx(Layers, { className: \"h-4 w-4 text-appsec-primary shrink-0\" }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex-1 min-w-0\", children: [\n /* @__PURE__ */ jsx(\"span\", { className: \"text-sm font-medium text-appsec-text truncate block\", children: group.name }),\n group.description && /* @__PURE__ */ jsx(\"span\", { className: \"text-xs text-appsec-text-secondary truncate block\", children: group.description })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"relative shrink-0\", children: [\n /* @__PURE__ */ jsxs(\n \"button\",\n {\n ref: resourcesBtnRef,\n type: \"button\",\n onClick: () => {\n if (!resourcesPopoverOpen && resourcesBtnRef.current) {\n const r = resourcesBtnRef.current.getBoundingClientRect();\n setPopoverPos({ top: r.bottom + 6, left: r.left });\n }\n setResourcesPopoverOpen((v) => !v);\n },\n className: \"flex items-center gap-1.5 text-xs font-medium text-white bg-appsec-primary hover:bg-appsec-primary/90 active:scale-95 px-2.5 py-1 rounded-full transition-all cursor-pointer shadow-sm\",\n title: \"View resources in this group\",\n children: [\n /* @__PURE__ */ jsx(FileText, { className: \"h-3.5 w-3.5 text-white\" }),\n /* @__PURE__ */ jsx(\"span\", { children: group.resources.length })\n ]\n }\n ),\n resourcesPopoverOpen && /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n \"div\",\n {\n className: \"fixed inset-0 z-40\",\n onClick: () => setResourcesPopoverOpen(false)\n }\n ),\n /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: \"fixed z-50 min-w-45 max-w-65 bg-appsec-bg border border-appsec-border rounded-appsec shadow-lg py-1\",\n style: { top: popoverPos.top, left: popoverPos.left },\n children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"px-3 py-1.5 text-[10px] font-semibold uppercase tracking-wide text-appsec-text-secondary border-b border-appsec-border\", children: \"Resources\" }),\n group.resources.length === 0 ? /* @__PURE__ */ jsx(\"p\", { className: \"px-3 py-2 text-xs text-appsec-text-tertiary\", children: \"No resources\" }) : group.resources.map((rId) => {\n const id = typeof rId === \"string\" ? rId : rId._id;\n const res = allResources.find((r) => r._id === id);\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2 px-3 py-1.5 hover:bg-appsec-surface\", children: [\n /* @__PURE__ */ jsx(FileText, { className: \"h-3 w-3 text-appsec-text-tertiary shrink-0\" }),\n /* @__PURE__ */ jsx(\"span\", { className: \"text-xs text-appsec-text truncate\", children: res?.name ?? id })\n ] }, id);\n })\n ]\n }\n )\n ] })\n ] }),\n /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: \"flex items-center gap-1 text-xs text-appsec-text-secondary shrink-0\",\n title: \"Access entries\",\n children: [\n /* @__PURE__ */ jsx(Users, { className: \"h-3.5 w-3.5\" }),\n /* @__PURE__ */ jsx(\"span\", { children: groupEntries.length })\n ]\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: onEdit,\n className: \"p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-primary hover:bg-appsec-primary-light transition-colors shrink-0\",\n title: \"Edit group\",\n children: /* @__PURE__ */ jsx(Pencil, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: onDelete,\n className: \"p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-danger hover:bg-appsec-danger-light transition-colors shrink-0\",\n title: \"Delete group\",\n children: /* @__PURE__ */ jsx(Trash2, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsx(\n Button,\n {\n size: \"sm\",\n variant: \"secondary\",\n iconLeft: /* @__PURE__ */ jsx(Share2, { className: \"h-3.5 w-3.5\" }),\n onClick: () => onShare(asShareable),\n className: \"shrink-0\",\n children: \"Share\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setExpanded((e) => !e),\n className: cn(\n \"p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-text transition-colors\",\n groupEntries.length === 0 && \"opacity-30 cursor-default pointer-events-none\"\n ),\n title: expanded ? \"Collapse\" : \"Show access list\",\n children: expanded ? /* @__PURE__ */ jsx(ChevronUp, { className: \"h-4 w-4\" }) : /* @__PURE__ */ jsx(ChevronDown, { className: \"h-4 w-4\" })\n }\n )\n ] }),\n expanded && /* @__PURE__ */ jsx(\"div\", { className: \"border-t border-appsec-border bg-appsec-surface px-4 py-3\", children: /* @__PURE__ */ jsx(\n AccessList,\n {\n entries: groupEntries,\n roles,\n users,\n groups: userGroups,\n onRemove: handleRemoveFromGroup,\n onBulkRoleChange,\n roleModuleMapping,\n module\n }\n ) })\n ] });\n});\nvar RES_PAGE_SIZE = 10;\nvar ModuleTabContent = memo(function ModuleTabContent2({\n module,\n roles,\n users,\n groups,\n aclEntries,\n mfApi,\n appMongoId,\n onShare,\n onRemoveAccess,\n onBulkRoleChange,\n roleModuleMapping\n}) {\n const { adapter } = useAppsec();\n const queryClient2 = useQueryClient();\n const toast = useToast();\n const [view, setView] = useState(\"resources\");\n const [search, setSearch] = useState(\"\");\n const debouncedSearch = useDebouncedValue(search.trim(), 300);\n const [resPage, setResPage] = useState(1);\n const [rgPage, setRgPage] = useState(1);\n const resourcesQuery = useResourcesPaginatedQuery(module._id, resPage, RES_PAGE_SIZE);\n const resources = resourcesQuery.data?.data || [];\n const resourcePagination = resourcesQuery.data?.pagination;\n const resTotalCount = getPaginationTotalItems(resourcePagination);\n const totalResPages = Math.max(\n 1,\n getPaginationTotalPages(resourcePagination, resTotalCount, RES_PAGE_SIZE)\n );\n const resourceGroupsQuery = useResourceGroupsPaginatedQuery(appMongoId, module._id, rgPage, RES_PAGE_SIZE);\n const resourceGroups = resourceGroupsQuery.data?.data || [];\n const resourceGroupPagination = resourceGroupsQuery.data?.pagination;\n const rgTotalCount = getPaginationTotalItems(resourceGroupPagination);\n const totalRgPages = Math.max(\n 1,\n getPaginationTotalPages(resourceGroupPagination, rgTotalCount, RES_PAGE_SIZE)\n );\n const loading = view === \"resources\" ? resourcesQuery.isLoading : resourceGroupsQuery.isLoading;\n const [createGroupOpen, setCreateGroupOpen] = useState(false);\n const [editingGroup, setEditingGroup] = useState(null);\n const [deleteGroupTarget, setDeleteGroupTarget] = useState(null);\n const [deleteGroupLoading, setDeleteGroupLoading] = useState(false);\n useEffect(() => {\n setResPage(1);\n setRgPage(1);\n }, [view, search]);\n const filteredResources = useMemo(() => {\n if (!debouncedSearch) return resources;\n return resources.filter(\n (r) => matchesAny(debouncedSearch, [r.name, r.description, r._id, r.module])\n );\n }, [resources, debouncedSearch]);\n const filteredGroups = useMemo(() => {\n if (!debouncedSearch) return resourceGroups;\n return resourceGroups.filter(\n (g) => matchesAny(debouncedSearch, [g.name, g.description, g._id, g.module])\n );\n }, [resourceGroups, debouncedSearch]);\n const handleCreateGroup = async (d) => {\n const payload = {\n name: d.name,\n description: d.description,\n resources: d.resources,\n module: module._id,\n application: appMongoId\n };\n await adapter.createResourceGroup(payload);\n queryClient2.invalidateQueries({\n queryKey: rbacQueryKeys.resourceGroups(appMongoId, module._id)\n });\n toast.success(\"Resource group created.\");\n };\n const handleEditGroup = async (d) => {\n if (!editingGroup) return;\n await adapter.updateResourceGroup(editingGroup._id, {\n name: d.name,\n description: d.description,\n resources: d.resources\n });\n queryClient2.invalidateQueries({\n queryKey: rbacQueryKeys.resourceGroups(appMongoId, module._id)\n });\n toast.success(\"Resource group updated.\");\n setEditingGroup(null);\n };\n const handleDeleteGroup = async () => {\n if (!deleteGroupTarget) return;\n setDeleteGroupLoading(true);\n try {\n await adapter.deleteResourceGroup(deleteGroupTarget._id);\n queryClient2.invalidateQueries({\n queryKey: rbacQueryKeys.resourceGroups(appMongoId, module._id)\n });\n toast.success(\"Resource group deleted.\");\n setDeleteGroupTarget(null);\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Failed to delete resource group.\"\n );\n } finally {\n setDeleteGroupLoading(false);\n }\n };\n if (loading) {\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-col gap-2\", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsx(\n \"div\",\n {\n className: \"h-12 rounded-appsec bg-appsec-surface animate-pulse\"\n },\n i\n )) });\n }\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-3\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2\", children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-1 p-1 rounded-appsec bg-appsec-surface border border-appsec-border\", children: [\n {\n key: \"resources\",\n label: \"Resources\",\n icon: /* @__PURE__ */ jsx(FileText, { className: \"h-3 w-3\" })\n },\n {\n key: \"groups\",\n label: \"Resource Groups\",\n icon: /* @__PURE__ */ jsx(Layers, { className: \"h-3 w-3\" })\n }\n ].map((t) => /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n setView(t.key);\n setSearch(\"\");\n },\n className: cn(\n \"flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded transition-colors\",\n view === t.key ? \"bg-appsec-bg text-appsec-text shadow-sm border border-appsec-border\" : \"text-appsec-text-secondary hover:text-appsec-text\"\n ),\n children: [\n t.icon,\n t.label\n ]\n },\n t.key\n )) }),\n view === \"groups\" && /* @__PURE__ */ jsx(\"div\", { className: \"ml-auto\", children: /* @__PURE__ */ jsx(\n Button,\n {\n size: \"sm\",\n iconLeft: /* @__PURE__ */ jsx(Plus, { className: \"h-3.5 w-3.5\" }),\n onClick: () => setCreateGroupOpen(true),\n children: \"Create Group\"\n }\n ) })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2\", children: [\n /* @__PURE__ */ jsx(\n SearchBar,\n {\n value: search,\n onChange: setSearch,\n placeholder: view === \"resources\" ? \"Search resources\\u2026\" : \"Search resource groups\\u2026\",\n className: \"flex-1\"\n }\n ),\n /* @__PURE__ */ jsx(\"span\", { className: \"text-[11px] text-appsec-text-tertiary shrink-0\", children: view === \"resources\" ? `${resTotalCount} resource${resTotalCount !== 1 ? \"s\" : \"\"}` : `${rgTotalCount} group${rgTotalCount !== 1 ? \"s\" : \"\"}` })\n ] }),\n view === \"resources\" && /* @__PURE__ */ jsxs(Fragment, { children: [\n filteredResources.length === 0 ? /* @__PURE__ */ jsx(\"p\", { className: \"text-sm text-appsec-text-tertiary text-center py-6\", children: search ? \"No resources match your search.\" : \"No resources found.\" }) : filteredResources.map((resource) => /* @__PURE__ */ jsx(\n ResourceRow,\n {\n resource,\n roles,\n users,\n groups,\n aclEntries,\n onShare,\n onRemoveAccess,\n onBulkRoleChange,\n roleModuleMapping,\n module,\n mfApi\n },\n resource._id\n )),\n totalResPages > 1 && /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between px-1\", children: [\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-tertiary\", children: [\n (resPage - 1) * RES_PAGE_SIZE + 1,\n \"\\u2013\",\n Math.min(resPage * RES_PAGE_SIZE, resTotalCount),\n \" of \",\n resTotalCount\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1\", children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setResPage((p) => Math.max(1, p - 1)),\n disabled: resPage === 1,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 disabled:cursor-default transition-colors\",\n children: /* @__PURE__ */ jsx(ChevronLeft, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-secondary px-1\", children: [\n resPage,\n \" / \",\n totalResPages\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setResPage((p) => Math.min(totalResPages, p + 1)),\n disabled: resPage >= totalResPages,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 disabled:cursor-default transition-colors\",\n children: /* @__PURE__ */ jsx(ChevronRight, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] })\n ] })\n ] }),\n view === \"groups\" && /* @__PURE__ */ jsxs(Fragment, { children: [\n filteredGroups.length === 0 ? /* @__PURE__ */ jsx(\"p\", { className: \"text-sm text-appsec-text-tertiary text-center py-6\", children: search ? \"No groups match your search.\" : \"No resource groups yet. Create one to get started.\" }) : filteredGroups.map((group) => /* @__PURE__ */ jsx(\n ResourceGroupRow,\n {\n group,\n roles,\n users,\n groups,\n aclEntries,\n onShare,\n onBulkRoleChange,\n onEdit: () => setEditingGroup(group),\n onDelete: () => setDeleteGroupTarget(group),\n roleModuleMapping,\n module,\n allResources: resources\n },\n group._id\n )),\n totalRgPages > 1 && /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between px-1\", children: [\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-tertiary\", children: [\n (rgPage - 1) * RES_PAGE_SIZE + 1,\n \"\\u2013\",\n Math.min(rgPage * RES_PAGE_SIZE, rgTotalCount),\n \" of \",\n rgTotalCount\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1\", children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setRgPage((p) => Math.max(1, p - 1)),\n disabled: rgPage === 1,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 disabled:cursor-default transition-colors\",\n children: /* @__PURE__ */ jsx(ChevronLeft, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-secondary px-1\", children: [\n rgPage,\n \" / \",\n totalRgPages\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setRgPage((p) => Math.min(totalRgPages, p + 1)),\n disabled: rgPage >= totalRgPages,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 disabled:cursor-default transition-colors\",\n children: /* @__PURE__ */ jsx(ChevronRight, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] })\n ] })\n ] }),\n /* @__PURE__ */ jsx(\n ResourceGroupFormModal,\n {\n open: createGroupOpen,\n onClose: () => setCreateGroupOpen(false),\n moduleId: module._id,\n onSave: handleCreateGroup\n }\n ),\n /* @__PURE__ */ jsx(\n ResourceGroupFormModal,\n {\n open: !!editingGroup,\n onClose: () => setEditingGroup(null),\n moduleId: module._id,\n existing: editingGroup ?? void 0,\n onSave: handleEditGroup\n }\n ),\n /* @__PURE__ */ jsx(\n ConfirmDialog,\n {\n open: !!deleteGroupTarget,\n onClose: () => setDeleteGroupTarget(null),\n onConfirm: handleDeleteGroup,\n title: \"Delete resource group\",\n message: `Delete \"${deleteGroupTarget?.name}\"? This cannot be undone.`,\n confirmLabel: \"Delete\",\n variant: \"danger\",\n loading: deleteGroupLoading\n }\n )\n ] }, module._id);\n});\nfunction useModuleSharedState() {\n const { appId, appsecUrl } = useAppsec();\n const toast = useToast();\n const [shareResource, setShareResource] = useState(null);\n const appQuery = useAppQuery(appId);\n const appMongoId = appQuery.data?.data?.[0]?._id || \"\";\n const modulesQuery = useModulesQuery(appMongoId);\n const rolesQuery = useAllRolesQuery(appMongoId);\n const permissionsQuery = usePermissionsQuery(appMongoId);\n const aclsQuery = useAllAclsQuery(appMongoId);\n const roleModuleMappingQuery = useRoleModuleMappingQuery(appMongoId);\n const groupsQuery = useGroupsQuery(appMongoId);\n const createAclMutation = useCreateAclMutation();\n const deleteAclMutation = useDeleteAclMutation();\n const bulkUpdateAclMutation = useBulkUpdateAclMutation();\n const shareResourceGroupMutation = useShareResourceGroupMutation();\n const modules = modulesQuery.data?.data || [];\n const roles = rolesQuery.data?.data || [];\n const permissions = permissionsQuery.data?.data || [];\n const aclEntries = aclsQuery.data?.data ?? [];\n const roleModuleMapping = roleModuleMappingQuery.data?.data || [];\n const groups = groupsQuery.data?.data ?? [];\n const users = [];\n const loading = appQuery.isLoading || modulesQuery.isLoading || rolesQuery.isLoading || permissionsQuery.isLoading || aclsQuery.isLoading || roleModuleMappingQuery.isLoading || groupsQuery.isLoading;\n const handleShare = useCallback(\n async (emails, roleId, groupId) => {\n if (!shareResource) return;\n const roleObj = roles.find((r) => r._id === roleId);\n if (!roleObj) throw new Error(\"Role not found\");\n if (shareResource.isResourceGroup) {\n if (groupId) {\n await shareResourceGroupMutation.mutateAsync({\n resource_group_id: shareResource._id,\n group_id: groupId,\n role: roleId,\n is_inherited: true\n });\n const group = groups.find((g) => g._id === groupId);\n toast.success(\n `Resource group shared with group \"${group?.name ?? groupId}\".`\n );\n } else {\n await Promise.all(\n emails.map(\n (email) => shareResourceGroupMutation.mutateAsync({\n resource_group_id: shareResource._id,\n user_email: email,\n role: roleId,\n is_inherited: true\n })\n )\n );\n toast.success(\n `Resource group shared with ${emails.length} user${emails.length !== 1 ? \"s\" : \"\"}.`\n );\n }\n return;\n }\n if (groupId) {\n const group = groups.find((g) => g._id === groupId);\n if (!group) throw new Error(\"Group not found\");\n await createAclMutation.mutateAsync({\n resource_type: shareResource.module,\n resource_id: shareResource._id,\n group_id: groupId,\n is_inherited: true,\n role: roleId\n });\n toast.success(`Access granted to group \"${group.name}\".`);\n } else {\n const existingEmails = aclEntries.filter(\n (acl) => acl.resourceId === shareResource._id && acl.resourceType === shareResource.module\n ).map((acl) => acl.user_email);\n const newEmails = emails.filter((e) => !existingEmails.includes(e));\n const skipped = emails.length - newEmails.length;\n if (newEmails.length === 0) {\n toast.info(\n \"All selected users already have access to this resource.\"\n );\n return;\n }\n const aclPromises = newEmails.map(\n (email) => createAclMutation.mutateAsync({\n resource_type: shareResource.module,\n resource_id: shareResource._id,\n user_email: email,\n is_inherited: false,\n role: roleId\n })\n );\n await Promise.all(aclPromises);\n if (skipped > 0) {\n toast.info(\n `Access granted to ${newEmails.length} user${newEmails.length !== 1 ? \"s\" : \"\"}. ${skipped} already had access.`\n );\n } else {\n toast.success(\n `Access granted to ${newEmails.length} user${newEmails.length !== 1 ? \"s\" : \"\"}.`\n );\n }\n }\n },\n [\n shareResource,\n roles,\n groups,\n aclEntries,\n createAclMutation,\n shareResourceGroupMutation,\n toast\n ]\n );\n const searchUsers = useCallback(\n async (query) => {\n const res = await fetch(\n `${appsecUrl}/api/user/get-by-query-v2?search=${encodeURIComponent(\n query\n )}`,\n {\n method: \"GET\",\n credentials: \"include\"\n }\n );\n const data = await res.json();\n if (data?.success) {\n return (data.data || []).map((u) => ({\n email: u.email,\n displayName: u.displayName ?? u.firstname ? `${u.firstname} ${u.lastname}`.trim() : u.email\n }));\n } else {\n return [];\n }\n },\n [appsecUrl]\n );\n const handleRemoveAccess = useCallback(\n async (entryId) => {\n await deleteAclMutation.mutateAsync(entryId);\n },\n [deleteAclMutation]\n );\n const handleBulkRoleChange = useCallback(\n async (entryIds, roleId) => {\n const payload = entryIds.map((id) => ({\n _id: id,\n role: roleId\n }));\n await bulkUpdateAclMutation.mutateAsync(payload);\n },\n [bulkUpdateAclMutation, roles]\n );\n return useMemo(\n () => ({\n modules,\n roles,\n permissions,\n users,\n groups,\n aclEntries,\n loading,\n appMongoId,\n shareResource,\n setShareResource,\n handleShare,\n searchUsers,\n handleRemoveAccess,\n roleModuleMapping,\n handleBulkRoleChange\n }),\n [\n modules,\n roles,\n permissions,\n users,\n groups,\n aclEntries,\n loading,\n appMongoId,\n shareResource,\n roleModuleMapping,\n handleBulkRoleChange,\n handleRemoveAccess,\n searchUsers,\n handleShare\n ]\n );\n}\nfunction Tooltip({ label, children, className, side = \"top\" }) {\n return /* @__PURE__ */ jsxs(\"span\", { className: cn(\"group/tt relative inline-flex\", className), children: [\n children,\n /* @__PURE__ */ jsx(\n \"span\",\n {\n role: \"tooltip\",\n className: cn(\n \"pointer-events-none absolute z-50 whitespace-nowrap rounded-appsec bg-appsec-text px-2 py-1 text-[11px] font-medium text-white opacity-0 shadow-sm transition-opacity group-hover/tt:opacity-100 group-focus-within/tt:opacity-100\",\n side === \"top\" && \"bottom-full left-1/2 mb-1.5 -translate-x-1/2\",\n side === \"bottom\" && \"top-full left-1/2 mt-1.5 -translate-x-1/2\",\n side === \"left\" && \"right-full top-1/2 mr-1.5 -translate-y-1/2\",\n side === \"right\" && \"left-full top-1/2 ml-1.5 -translate-y-1/2\"\n ),\n children: label\n }\n )\n ] });\n}\nfunction GroupFormModal({ open, onClose, roles, existing, onSave }) {\n const [name, setName] = useState(existing?.name ?? \"\");\n const [description, setDescription] = useState(existing?.description ?? \"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n useEffect(() => {\n if (open) {\n setName(existing?.name ?? \"\");\n setDescription(existing?.description ?? \"\");\n setError(\"\");\n }\n }, [open, existing]);\n const submit = async () => {\n if (!name.trim()) {\n setError(\"Group name is required.\");\n return;\n }\n setLoading(true);\n setError(\"\");\n try {\n await onSave({ name: name.trim(), description: description.trim() });\n onClose();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Save failed.\");\n } finally {\n setLoading(false);\n }\n };\n return /* @__PURE__ */ jsx(\n Modal,\n {\n open,\n onClose,\n title: existing ? \"Edit group\" : \"Create group\",\n size: \"sm\",\n footer: /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Button, { variant: \"secondary\", size: \"sm\", onClick: onClose, disabled: loading, children: \"Cancel\" }),\n /* @__PURE__ */ jsx(Button, { size: \"sm\", onClick: submit, loading, children: existing ? \"Save Changes\" : \"Create Group\" })\n ] }),\n children: /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-3\", children: [\n /* @__PURE__ */ jsx(\n Input,\n {\n label: \"Group name\",\n value: name,\n placeholder: \"e.g. Billing Team\",\n onChange: (e) => setName(e.target.value),\n required: true\n }\n ),\n /* @__PURE__ */ jsx(\n Input,\n {\n label: \"Description\",\n value: description,\n placeholder: \"Short description (optional)\",\n onChange: (e) => setDescription(e.target.value)\n }\n ),\n error && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-danger\", children: error })\n ] })\n }\n );\n}\nfunction AddMembersModal({\n open,\n onClose,\n currentMemberIds,\n onAdd\n}) {\n const { appsecUrl } = useAppsec();\n const { success, error } = useToast();\n const [search, setSearch] = useState(\"\");\n const [users, setUsers] = useState([]);\n const [loading, setLoading] = useState(false);\n const [adding, setAdding] = useState(null);\n const [recentlyAdded, setRecentlyAdded] = useState(null);\n useEffect(() => {\n if (!search.trim()) {\n setUsers([]);\n return;\n }\n const timeout = setTimeout(async () => {\n try {\n setLoading(true);\n const res = await fetch(\n `${appsecUrl}/api/user/get-by-query-v2?search=${encodeURIComponent(search)}`,\n {\n method: \"GET\",\n credentials: \"include\"\n }\n );\n const data = await res.json();\n if (data?.success) {\n setUsers(data.data || []);\n } else {\n setUsers([]);\n }\n } catch (err) {\n console.error(\"Search failed:\", err);\n setUsers([]);\n } finally {\n setLoading(false);\n }\n }, 300);\n return () => clearTimeout(timeout);\n }, [search]);\n const eligible = users.filter(\n (u) => u?.email && !currentMemberIds.includes(u.email)\n );\n const handleAdd = async (userId) => {\n setAdding(userId);\n try {\n await onAdd(userId);\n setRecentlyAdded(userId);\n success(\"User added to group\");\n } catch (err) {\n console.error(\"Add member failed:\", err);\n error(\"Could not add user to group\");\n } finally {\n setAdding(null);\n }\n };\n useEffect(() => {\n if (!open) {\n setRecentlyAdded(null);\n }\n }, [open]);\n useEffect(() => {\n if (!recentlyAdded) return;\n const timeout = window.setTimeout(() => setRecentlyAdded(null), 4e3);\n return () => window.clearTimeout(timeout);\n }, [recentlyAdded]);\n return /* @__PURE__ */ jsx(\n Modal,\n {\n open,\n onClose,\n title: \"Add members\",\n size: \"sm\",\n footer: /* @__PURE__ */ jsx(Button, { variant: \"secondary\", size: \"sm\", onClick: onClose, children: \"Done\" }),\n children: /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-3\", children: [\n /* @__PURE__ */ jsx(\n SearchBar,\n {\n value: search,\n onChange: setSearch,\n placeholder: \"Search users\\u2026\"\n }\n ),\n recentlyAdded && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-success\", children: \"User added to the group.\" }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1 max-h-64 overflow-y-auto\", children: [\n loading && /* @__PURE__ */ jsx(\"p\", { className: \"py-4 text-center text-xs text-appsec-text-tertiary\", children: \"Searching...\" }),\n !loading && search && eligible.length === 0 && /* @__PURE__ */ jsx(\"p\", { className: \"py-4 text-center text-xs text-appsec-text-tertiary\", children: \"No users found.\" }),\n !loading && eligible.map((user) => {\n const fullName = `${user.firstname || \"\"} ${user.lastname || \"\"}`.trim();\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: \"flex items-center gap-3 px-2 py-2 rounded-appsec hover:bg-appsec-surface transition-colors\",\n children: [\n /* @__PURE__ */ jsx(Avatar, { name: fullName, size: \"sm\" }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex-1 min-w-0\", children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-sm font-medium text-appsec-text truncate\", children: fullName || \"Unnamed User\" }),\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-secondary truncate\", children: user.email })\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n disabled: adding === user._id,\n onClick: () => handleAdd(user.email),\n className: \"shrink-0 p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-primary hover:bg-appsec-primary-light transition-colors disabled:opacity-50\",\n children: /* @__PURE__ */ jsx(UserPlus, { className: \"h-3.5 w-3.5\" })\n }\n )\n ]\n },\n user._id\n );\n })\n ] })\n ] })\n }\n );\n}\nvar MEMBER_PAGE_SIZE = 5;\nfunction GroupCard({ group, roles, onEdit, onDelete, onAddMembers, onRemoveMember }) {\n const [expanded, setExpanded] = useState(false);\n const [removingId, setRemovingId] = useState(null);\n const [memberPage, setMemberPage] = useState(0);\n useEffect(() => {\n setMemberPage(0);\n }, [expanded, group.users.length]);\n const totalMemberPages = Math.ceil(group.users.length / MEMBER_PAGE_SIZE);\n const visibleMembers = group.users.slice(\n memberPage * MEMBER_PAGE_SIZE,\n (memberPage + 1) * MEMBER_PAGE_SIZE\n );\n const handleRemove = async (userId) => {\n setRemovingId(userId);\n try {\n await onRemoveMember(userId);\n } finally {\n setRemovingId(null);\n }\n };\n return /* @__PURE__ */ jsxs(\"div\", { className: \"rounded-appsec border border-appsec-border bg-appsec-bg overflow-hidden\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-3 px-4 py-3\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex-1 min-w-0\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2\", children: [\n /* @__PURE__ */ jsx(Users, { className: \"h-4 w-4 text-appsec-accent shrink-0\" }),\n /* @__PURE__ */ jsx(Tooltip, { label: group.name, className: \"min-w-0\", children: /* @__PURE__ */ jsx(\"span\", { className: \"text-sm font-semibold text-appsec-text truncate block\", children: group.name }) })\n ] }),\n group.description && /* @__PURE__ */ jsx(Tooltip, { label: group.description, className: \"w-full min-w-0\", children: /* @__PURE__ */ jsx(\"span\", { className: \"mt-0.5 text-xs text-appsec-text-secondary pl-6 truncate block\", children: group.description }) })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"text-center shrink-0\", children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs font-semibold text-appsec-text\", children: group.users.length }),\n /* @__PURE__ */ jsx(\"p\", { className: \"text-[10px] text-appsec-text-tertiary\", children: \"members\" })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1 shrink-0\", children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: onEdit,\n className: \"px-2.5 py-1 text-xs rounded-appsec border border-appsec-border text-appsec-text-secondary hover:text-appsec-primary hover:border-appsec-primary transition-colors\",\n children: \"Edit\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: onAddMembers,\n className: \"p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-primary hover:bg-appsec-primary-light transition-colors\",\n children: /* @__PURE__ */ jsx(UserPlus, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: onDelete,\n className: \"p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-danger hover:bg-appsec-danger-light transition-colors\",\n children: /* @__PURE__ */ jsx(Trash2, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setExpanded((e) => !e),\n className: \"p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-text transition-colors\",\n children: expanded ? /* @__PURE__ */ jsx(ChevronUp, { className: \"h-3.5 w-3.5\" }) : /* @__PURE__ */ jsx(ChevronDown, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] })\n ] }),\n expanded && /* @__PURE__ */ jsx(\"div\", { className: \"border-t border-appsec-border bg-appsec-surface px-4 py-3 flex flex-col gap-2\", children: group.users.length === 0 ? /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-tertiary\", children: \"No members yet. Add some!\" }) : /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-col gap-1.5\", children: visibleMembers.map((user) => /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2.5\", children: [\n /* @__PURE__ */ jsx(Avatar, { name: user, size: \"xs\" }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex-1 min-w-0\", children: [\n /* @__PURE__ */ jsx(Tooltip, { label: user, className: \"w-full min-w-0\", children: /* @__PURE__ */ jsx(\"span\", { className: \"text-xs font-medium text-appsec-text truncate block\", children: user }) }),\n /* @__PURE__ */ jsx(\"span\", { className: \"text-[10px] text-appsec-text-secondary truncate block\", children: user })\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n disabled: removingId === user,\n onClick: () => handleRemove(user),\n className: \"p-1 rounded-appsec text-appsec-text-tertiary hover:text-appsec-danger hover:bg-appsec-danger-light transition-colors disabled:opacity-50\",\n children: /* @__PURE__ */ jsx(UserMinus, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] }, user)) }),\n totalMemberPages > 1 && /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between pt-1\", children: [\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-tertiary\", children: [\n memberPage * MEMBER_PAGE_SIZE + 1,\n \"\\u2013\",\n Math.min((memberPage + 1) * MEMBER_PAGE_SIZE, group.users.length),\n \" of \",\n group.users.length\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1\", children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setMemberPage((p) => Math.max(0, p - 1)),\n disabled: memberPage === 0,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 disabled:cursor-default transition-colors\",\n children: /* @__PURE__ */ jsx(ChevronLeft, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-secondary px-1\", children: [\n memberPage + 1,\n \" / \",\n totalMemberPages\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setMemberPage((p) => Math.min(totalMemberPages - 1, p + 1)),\n disabled: memberPage >= totalMemberPages - 1,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 disabled:cursor-default transition-colors\",\n children: /* @__PURE__ */ jsx(ChevronRight, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] })\n ] })\n ] }) })\n ] });\n}\nfunction UserGroupsTab({ appMongoId }) {\n const { adapter } = useAppsec();\n const queryClient2 = useQueryClient();\n const groupsQuery = useGroupsQuery(appMongoId);\n const rolesQuery = useRolesQuery(appMongoId);\n const groups = groupsQuery.data?.data || [];\n const roles = rolesQuery.data?.data || [];\n const loading = groupsQuery.isLoading || rolesQuery.isLoading;\n const [search, setSearch] = useState(\"\");\n const debouncedSearch = useDebouncedValue(search.trim(), 300);\n const [createOpen, setCreateOpen] = useState(false);\n const [editingGroup, setEditingGroup] = useState(null);\n const [deleteTarget, setDeleteTarget] = useState(null);\n const [deleteLoading, setDeleteLoading] = useState(false);\n const [addMembersGroup, setAddMembersGroup] = useState(null);\n const filtered = groups.filter(\n (g) => matchesAny(debouncedSearch, [\n g.name,\n g.description,\n g._id,\n ...g.users ?? []\n ])\n );\n const handleCreate = async (data) => {\n const payload = { name: data.name, appId: appMongoId, description: data.description };\n await adapter.createGroup(payload);\n queryClient2.invalidateQueries({ queryKey: rbacQueryKeys.groups(appMongoId) });\n setCreateOpen(false);\n };\n const handleEdit = async (data) => {\n if (!editingGroup) return;\n const payload = { name: data.name, description: data.description };\n await adapter.updateGroup(editingGroup._id, payload);\n queryClient2.invalidateQueries({ queryKey: rbacQueryKeys.groups(appMongoId) });\n setEditingGroup(null);\n };\n const handleDelete = async () => {\n if (!deleteTarget) return;\n setDeleteLoading(true);\n try {\n await adapter.deleteGroup(deleteTarget._id);\n queryClient2.invalidateQueries({ queryKey: rbacQueryKeys.groups(appMongoId) });\n setDeleteTarget(null);\n } finally {\n setDeleteLoading(false);\n }\n };\n const handleAddMember = async (userId) => {\n if (!addMembersGroup) return;\n const payload = {\n name: addMembersGroup.name,\n description: addMembersGroup.description,\n users: [...addMembersGroup.users, userId],\n isActive: addMembersGroup.isActive\n };\n await adapter.updateGroup(addMembersGroup._id, payload);\n setAddMembersGroup(\n (prev) => prev ? { ...prev, users: [...prev.users, userId] } : null\n );\n queryClient2.invalidateQueries({ queryKey: rbacQueryKeys.groups(appMongoId) });\n };\n const handleRemoveMember = async (group, userId) => {\n const payload = {\n name: group.name,\n description: group.description,\n users: group.users.filter((g) => g !== userId),\n isActive: group.isActive\n };\n await adapter.updateGroup(group._id, payload);\n queryClient2.invalidateQueries({ queryKey: rbacQueryKeys.groups(appMongoId) });\n };\n if (loading) {\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex items-center justify-center py-16 text-sm text-appsec-text-secondary\", children: \"Loading groups\\u2026\" });\n }\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-4\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2 flex-wrap\", children: [\n /* @__PURE__ */ jsx(\n SearchBar,\n {\n value: search,\n onChange: setSearch,\n placeholder: \"Search groups\\u2026\",\n className: \"w-56\"\n }\n ),\n /* @__PURE__ */ jsx(\"div\", { className: \"ml-auto\", children: /* @__PURE__ */ jsx(Button, { size: \"sm\", iconLeft: /* @__PURE__ */ jsx(Plus, { className: \"h-3.5 w-3.5\" }), onClick: () => setCreateOpen(true), children: \"Create Group\" }) })\n ] }),\n /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-col gap-2\", children: filtered.length === 0 ? /* @__PURE__ */ jsx(\"div\", { className: \"flex items-center justify-center py-12 text-sm text-appsec-text-tertiary\", children: \"No groups found.\" }) : filtered.map((group) => /* @__PURE__ */ jsx(\n GroupCard,\n {\n group,\n roles,\n onEdit: () => setEditingGroup(group),\n onDelete: () => setDeleteTarget(group),\n onAddMembers: () => setAddMembersGroup(group),\n onRemoveMember: (userId) => handleRemoveMember(group, userId)\n },\n group._id\n )) }),\n /* @__PURE__ */ jsxs(\"p\", { className: \"text-xs text-appsec-text-tertiary\", children: [\n filtered.length,\n \" of \",\n groups.length,\n \" group\",\n groups.length !== 1 ? \"s\" : \"\"\n ] }),\n /* @__PURE__ */ jsx(\n GroupFormModal,\n {\n open: createOpen,\n onClose: () => setCreateOpen(false),\n roles,\n onSave: handleCreate\n }\n ),\n /* @__PURE__ */ jsx(\n GroupFormModal,\n {\n open: !!editingGroup,\n onClose: () => setEditingGroup(null),\n roles,\n existing: editingGroup ?? void 0,\n onSave: handleEdit\n }\n ),\n /* @__PURE__ */ jsx(\n AddMembersModal,\n {\n open: !!addMembersGroup,\n onClose: () => setAddMembersGroup(null),\n currentMemberIds: addMembersGroup?.users ?? [],\n onAdd: handleAddMember\n }\n ),\n /* @__PURE__ */ jsx(\n ConfirmDialog,\n {\n open: !!deleteTarget,\n onClose: () => setDeleteTarget(null),\n onConfirm: handleDelete,\n title: \"Delete group\",\n message: `Delete group \"${deleteTarget?.name}\"? Members will not be removed from the app \\u2014 only from this group.`,\n confirmLabel: \"Delete\",\n variant: \"danger\",\n loading: deleteLoading\n }\n )\n ] });\n}\nvar PERMISSION_TOOLTIP_DELAY_MS = 75;\nfunction PermissionName({\n value,\n expanded\n}) {\n const textRef = useRef(null);\n const timerRef = useRef(null);\n const [tooltip, setTooltip] = useState(null);\n const clearTooltipTimer = () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n };\n const showTooltip = () => {\n clearTooltipTimer();\n timerRef.current = setTimeout(() => {\n const rect = textRef.current?.getBoundingClientRect();\n if (!rect) return;\n const viewportPadding = 12;\n const maxWidth = Math.min(360, window.innerWidth - viewportPadding * 2);\n const left = Math.min(\n Math.max(rect.left, viewportPadding),\n window.innerWidth - maxWidth - viewportPadding\n );\n setTooltip({\n top: rect.bottom + 6,\n left,\n maxWidth\n });\n }, PERMISSION_TOOLTIP_DELAY_MS);\n };\n const hideTooltip = () => {\n clearTooltipTimer();\n setTooltip(null);\n };\n useEffect(() => clearTooltipTimer, []);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n \"span\",\n {\n ref: textRef,\n onMouseEnter: showTooltip,\n onMouseLeave: hideTooltip,\n className: `min-w-0 text-xs leading-snug text-appsec-text transition-colors group-hover:text-appsec-primary ${expanded ? \"whitespace-normal break-words\" : \"truncate\"}`,\n children: value\n }\n ),\n tooltip && /* @__PURE__ */ jsx(\n \"span\",\n {\n role: \"tooltip\",\n className: \"pointer-events-none fixed z-[60] rounded-appsec border border-appsec-border bg-appsec-text px-2.5 py-1.5 text-xs leading-snug text-appsec-bg shadow-lg\",\n style: {\n top: tooltip.top,\n left: tooltip.left,\n maxWidth: tooltip.maxWidth\n },\n children: value\n }\n )\n ] });\n}\nfunction RoleFormModal({\n open,\n onClose,\n appMongoId,\n existing,\n onSave\n}) {\n const [name, setName] = useState(existing?.name ?? \"\");\n const [description, setDescription] = useState(existing?.description ?? \"\");\n const [permissionIds, setPermissionIds] = useState(\n existing?.permissions ?? []\n );\n const [permissionSearch, setPermissionSearch] = useState(\"\");\n const [debouncedPermissionSearch, setDebouncedPermissionSearch] = useState(\"\");\n const [permissionPage, setPermissionPage] = useState(1);\n const [permissionsExpanded, setPermissionsExpanded] = useState(false);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n const permissionsQuery = usePermissionsPaginatedQuery(\n appMongoId,\n permissionPage,\n 10,\n debouncedPermissionSearch,\n open\n );\n const permissions = permissionsQuery.data?.data || [];\n const permissionsPagination = permissionsQuery.data?.pagination;\n useEffect(() => {\n if (open) {\n setName(existing?.name ?? \"\");\n setDescription(existing?.description ?? \"\");\n setPermissionIds(existing?.permissions ?? []);\n setPermissionSearch(\"\");\n setDebouncedPermissionSearch(\"\");\n setPermissionPage(1);\n setPermissionsExpanded(false);\n setError(\"\");\n }\n }, [open, existing]);\n useEffect(() => {\n const timeout = setTimeout(() => {\n setDebouncedPermissionSearch(permissionSearch.trim());\n setPermissionPage(1);\n }, 300);\n return () => clearTimeout(timeout);\n }, [permissionSearch]);\n const togglePerm = (id) => {\n setPermissionIds((prev) => {\n const exists = prev.some((p) => p._id === id);\n if (exists) {\n return prev.filter((p) => p._id !== id);\n }\n const permObj = permissions.find((p) => p._id === id);\n if (!permObj) return prev;\n return [...prev, permObj];\n });\n };\n const submit = async () => {\n if (!name.trim()) {\n setError(\"Name is required.\");\n return;\n }\n setLoading(true);\n setError(\"\");\n try {\n const n = name.trim().toLowerCase();\n await onSave({\n name: name.trim(),\n description: description.trim(),\n permissions: permissionIds\n });\n onClose();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Save failed.\");\n } finally {\n setLoading(false);\n }\n };\n return /* @__PURE__ */ jsx(\n Modal,\n {\n open,\n onClose,\n title: existing ? \"Edit role\" : \"Create role\",\n size: \"md\",\n footer: /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n Button,\n {\n variant: \"secondary\",\n size: \"sm\",\n onClick: onClose,\n disabled: loading,\n children: \"Cancel\"\n }\n ),\n /* @__PURE__ */ jsx(Button, { size: \"sm\", onClick: submit, loading, children: existing ? \"Save Changes\" : \"Create Role\" })\n ] }),\n children: /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-4\", children: [\n /* @__PURE__ */ jsx(\n Input,\n {\n label: \"Role name\",\n value: name,\n placeholder: \"e.g. Billing Manager\",\n onChange: (e) => setName(e.target.value),\n required: true\n }\n ),\n /* @__PURE__ */ jsx(\n Input,\n {\n label: \"Description\",\n value: description,\n placeholder: \"Short description (optional)\",\n onChange: (e) => setDescription(e.target.value)\n }\n ),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-2\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between gap-3\", children: [\n /* @__PURE__ */ jsxs(\"p\", { className: \"text-sm font-medium text-appsec-text\", children: [\n \"Permissions\",\n /* @__PURE__ */ jsxs(\"span\", { className: \"ml-1.5 text-xs font-normal text-appsec-text-tertiary\", children: [\n \"(\",\n permissionIds.length,\n \" selected)\"\n ] })\n ] }),\n /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onClick: () => setPermissionsExpanded((expanded) => !expanded),\n className: \"inline-flex items-center gap-1 rounded-appsec px-2 py-1 text-xs font-medium text-appsec-text-secondary transition-colors hover:bg-appsec-surface hover:text-appsec-text\",\n \"aria-expanded\": permissionsExpanded,\n children: [\n permissionsExpanded ? /* @__PURE__ */ jsx(Minimize2, { className: \"h-3.5 w-3.5\" }) : /* @__PURE__ */ jsx(Maximize2, { className: \"h-3.5 w-3.5\" }),\n permissionsExpanded ? \"Collapse\" : \"Expand\"\n ]\n }\n )\n ] }),\n /* @__PURE__ */ jsx(\n SearchBar,\n {\n value: permissionSearch,\n onChange: setPermissionSearch,\n placeholder: \"Search permissions...\",\n className: \"w-full\"\n }\n ),\n /* @__PURE__ */ jsx(\"div\", { className: \"rounded-appsec bg-appsec-surface border border-appsec-border overflow-hidden\", children: permissionsQuery.isLoading ? /* @__PURE__ */ jsx(\"div\", { className: \"px-3 py-8 text-center text-xs text-appsec-text-tertiary\", children: \"Loading permissions...\" }) : permissions.length === 0 ? /* @__PURE__ */ jsx(\"div\", { className: \"px-3 py-8 text-center text-xs text-appsec-text-tertiary\", children: \"No permissions found.\" }) : /* @__PURE__ */ jsx(\n \"div\",\n {\n className: `grid grid-cols-1 gap-1.5 overflow-y-auto p-3 ${permissionsExpanded ? \"\" : \"sm:grid-cols-2\"}`,\n style: { maxHeight: permissionsExpanded ? \"20rem\" : \"12rem\" },\n children: permissions.map((p) => /* @__PURE__ */ jsxs(\n \"label\",\n {\n className: \"group flex min-w-0 cursor-pointer items-start gap-2 rounded-appsec px-1 py-1 transition-colors hover:bg-appsec-bg\",\n children: [\n /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n checked: permissionIds.some((perm) => perm._id === p._id),\n onChange: () => togglePerm(p._id),\n className: \"mt-0.5 h-3.5 w-3.5 shrink-0 cursor-pointer rounded border-appsec-border accent-appsec-primary\"\n }\n ),\n /* @__PURE__ */ jsx(\n PermissionName,\n {\n value: p.label || p.name,\n expanded: permissionsExpanded\n }\n )\n ]\n },\n p._id\n ))\n }\n ) }),\n permissionsPagination?.enabled && /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between px-1\", children: [\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-tertiary\", children: [\n \"Page \",\n permissionsPagination.page,\n \" of \",\n permissionsPagination.totalPages\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1\", children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setPermissionPage((page) => Math.max(1, page - 1)),\n disabled: !permissionsPagination.hasPrevPage || permissionsQuery.isFetching,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 transition-colors\",\n \"aria-label\": \"Previous permissions page\",\n children: /* @__PURE__ */ jsx(ChevronLeft, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-secondary px-1\", children: [\n permissionsPagination.page,\n \" / \",\n permissionsPagination.totalPages\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setPermissionPage((page) => page + 1),\n disabled: !permissionsPagination.hasNextPage || permissionsQuery.isFetching,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 transition-colors\",\n \"aria-label\": \"Next permissions page\",\n children: /* @__PURE__ */ jsx(ChevronRight, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] })\n ] })\n ] }),\n error && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-danger\", children: error })\n ] })\n }\n );\n}\nfunction RoleCard({\n role,\n userCount,\n onEdit,\n onClone,\n onDelete\n}) {\n const [expanded, setExpanded] = useState(false);\n const assignedPerms = role.permissions;\n return /* @__PURE__ */ jsxs(\"div\", { className: \"rounded-appsec border border-appsec-border bg-appsec-bg overflow-hidden\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-3 px-4 py-3\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex-1 min-w-0\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2\", children: [\n /* @__PURE__ */ jsx(Shield, { className: \"h-4 w-4 text-appsec-primary shrink-0\" }),\n /* @__PURE__ */ jsx(Tooltip, { label: role.name, className: \"min-w-0\", children: /* @__PURE__ */ jsx(\"span\", { className: \"text-sm font-semibold text-appsec-text truncate block\", children: role.name }) }),\n role.isSystem && /* @__PURE__ */ jsx(\"span\", { className: \"text-[10px] font-medium px-1.5 py-0.5 rounded bg-appsec-surface-alt text-appsec-text-tertiary border border-appsec-border\", children: \"system\" })\n ] }),\n role.description && /* @__PURE__ */ jsx(Tooltip, { label: role.description ?? \"\", className: \"w-full min-w-0\", children: /* @__PURE__ */ jsx(\"span\", { className: \"mt-0.5 text-xs text-appsec-text-secondary pl-6 truncate block\", children: role.description }) })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-4 shrink-0\", children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"text-center\" }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"text-center\", children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs font-semibold text-appsec-text\", children: assignedPerms.length }),\n /* @__PURE__ */ jsx(\"p\", { className: \"text-[10px] text-appsec-text-tertiary\", children: \"perms\" })\n ] })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1 shrink-0\", children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: onEdit,\n className: \"px-2.5 py-1 text-xs rounded-appsec border border-appsec-border text-appsec-text-secondary hover:text-appsec-primary hover:border-appsec-primary transition-colors\",\n children: \"Edit\"\n }\n ),\n !role.isSystem && /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: onDelete,\n className: \"p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-danger hover:bg-appsec-danger-light transition-colors\",\n children: /* @__PURE__ */ jsx(Trash2, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setExpanded((e) => !e),\n className: \"p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-text transition-colors\",\n children: expanded ? /* @__PURE__ */ jsx(ChevronUp, { className: \"h-3.5 w-3.5\" }) : /* @__PURE__ */ jsx(ChevronDown, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] })\n ] }),\n expanded && /* @__PURE__ */ jsx(\"div\", { className: \"border-t border-appsec-border bg-appsec-surface px-4 py-3\", children: assignedPerms.length === 0 ? /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-tertiary\", children: \"No permissions assigned.\" }) : /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-wrap gap-1.5\", children: assignedPerms.map((p) => /* @__PURE__ */ jsx(\n \"span\",\n {\n className: \"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-appsec-bg border border-appsec-border text-appsec-text\",\n children: p.label || p.name\n },\n p._id\n )) }) })\n ] });\n}\nfunction RolesTab({ appMongoId }) {\n const { adapter } = useAppsec();\n const toast = useToast();\n const queryClient2 = useQueryClient();\n const [rolesPage, setRolesPage] = useState(1);\n const [search, setSearch] = useState(\"\");\n const debouncedSearch = useDebouncedValue(search.trim(), 300);\n const pageSize = 10;\n const rolesQuery = useRolesPaginatedQuery(appMongoId, rolesPage, pageSize, debouncedSearch);\n const roles = rolesQuery.data?.data || [];\n const rolesPagination = rolesQuery.data?.pagination;\n const loading = rolesQuery.isLoading;\n const [createOpen, setCreateOpen] = useState(false);\n const [editingRole, setEditingRole] = useState(null);\n const [deleteTarget, setDeleteTarget] = useState(null);\n const [deleteLoading, setDeleteLoading] = useState(false);\n const filtered = roles;\n const handleCreate = async (data) => {\n const payload = {\n name: data.name,\n appId: appMongoId,\n permissions: data.permissions.map((p) => p._id)\n };\n const response = await adapter.createRole(payload);\n queryClient2.invalidateQueries({\n queryKey: rbacQueryKeys.roles(appMongoId)\n });\n toast.success(response.message ?? \"Role created successfully.\");\n setCreateOpen(false);\n };\n const handleEdit = async (data) => {\n if (!editingRole) return;\n const payload = {\n name: data.name,\n appId: appMongoId,\n permissions: data.permissions.map((p) => p._id)\n };\n const response = await adapter.updateRole(editingRole._id, payload);\n queryClient2.invalidateQueries({\n queryKey: rbacQueryKeys.roles(appMongoId)\n });\n toast.success(response.message ?? \"Role updated successfully.\");\n setEditingRole(null);\n };\n const handleClone = async (_role) => {\n };\n const handleDelete = async () => {\n if (!deleteTarget) return;\n setDeleteLoading(true);\n try {\n const res = await adapter.deleteRole(deleteTarget._id);\n queryClient2.invalidateQueries({\n queryKey: rbacQueryKeys.roles(appMongoId)\n });\n toast.success(res?.message ?? \"Role deleted successfully.\");\n setDeleteTarget(null);\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Failed to delete role.\"\n );\n } finally {\n setDeleteLoading(false);\n }\n };\n if (loading) {\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex items-center justify-center py-16 text-sm text-appsec-text-secondary\", children: \"Loading roles\\u2026\" });\n }\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-4\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2 flex-wrap\", children: [\n /* @__PURE__ */ jsx(\n SearchBar,\n {\n value: search,\n onChange: (value) => {\n setSearch(value);\n setRolesPage(1);\n },\n placeholder: \"Search roles\\u2026\",\n className: \"w-56\"\n }\n ),\n /* @__PURE__ */ jsx(\"div\", { className: \"ml-auto\", children: /* @__PURE__ */ jsx(\n Button,\n {\n size: \"sm\",\n iconLeft: /* @__PURE__ */ jsx(Plus, { className: \"h-3.5 w-3.5\" }),\n onClick: () => setCreateOpen(true),\n children: \"Create Role\"\n }\n ) })\n ] }),\n /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-col gap-2\", children: filtered.length === 0 ? /* @__PURE__ */ jsx(\"div\", { className: \"flex items-center justify-center py-12 text-sm text-appsec-text-tertiary\", children: \"No roles found.\" }) : filtered.map((role) => /* @__PURE__ */ jsx(\n RoleCard,\n {\n role,\n userCount: 0,\n onEdit: () => setEditingRole(role),\n onClone: () => handleClone(),\n onDelete: () => setDeleteTarget(role)\n },\n role._id\n )) }),\n rolesPagination?.enabled && /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between px-1\", children: [\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-tertiary\", children: [\n \"Page \",\n rolesPagination.page,\n \" of \",\n rolesPagination.totalPages,\n \" \\xB7 \",\n rolesPagination.totalItems,\n \" total\"\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1\", children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setRolesPage((page) => Math.max(1, page - 1)),\n disabled: !rolesPagination.hasPrevPage || rolesQuery.isFetching,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 transition-colors\",\n \"aria-label\": \"Previous roles page\",\n children: /* @__PURE__ */ jsx(ChevronLeft, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-secondary px-1\", children: [\n rolesPagination.page,\n \" / \",\n rolesPagination.totalPages\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setRolesPage((page) => page + 1),\n disabled: !rolesPagination.hasNextPage || rolesQuery.isFetching,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 transition-colors\",\n \"aria-label\": \"Next roles page\",\n children: /* @__PURE__ */ jsx(ChevronRight, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] })\n ] }),\n /* @__PURE__ */ jsx(\n RoleFormModal,\n {\n open: createOpen,\n onClose: () => setCreateOpen(false),\n appMongoId,\n onSave: handleCreate\n }\n ),\n /* @__PURE__ */ jsx(\n RoleFormModal,\n {\n open: !!editingRole,\n onClose: () => setEditingRole(null),\n appMongoId,\n existing: editingRole ?? void 0,\n onSave: handleEdit\n }\n ),\n /* @__PURE__ */ jsx(\n ConfirmDialog,\n {\n open: !!deleteTarget,\n onClose: () => setDeleteTarget(null),\n onConfirm: handleDelete,\n title: \"Delete role\",\n message: `Delete \"${deleteTarget?.name}\"? Users with this role will lose it. This cannot be undone.`,\n confirmLabel: \"Delete\",\n variant: \"danger\",\n loading: deleteLoading\n }\n )\n ] });\n}\nvar SECTIONS = [\n { key: \"modules\", label: \"Modules\", icon: /* @__PURE__ */ jsx(Box, { className: \"h-3.5 w-3.5\" }) },\n {\n key: \"permissions\",\n label: \"Permissions\",\n icon: /* @__PURE__ */ jsx(Key, { className: \"h-3.5 w-3.5\" })\n },\n { key: \"roles\", label: \"Roles\", icon: /* @__PURE__ */ jsx(Shield, { className: \"h-3.5 w-3.5\" }) },\n {\n key: \"mapping\",\n label: \"Mapping\",\n icon: /* @__PURE__ */ jsx(Network, { className: \"h-3.5 w-3.5\" })\n }\n];\nfunction ModuleFormModal({\n open,\n onClose,\n existing,\n onSave\n}) {\n const [form, setForm] = useState({\n name: \"\",\n key: \"\",\n description: \"\",\n order: \"0\"\n });\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n useEffect(() => {\n if (open) {\n setForm({\n name: existing?.module_type ?? \"\",\n key: existing?.key ?? \"\",\n description: existing?.description ?? \"\",\n order: String(existing?.order ?? \"0\")\n });\n setError(\"\");\n }\n }, [open, existing]);\n const set = (k) => (e) => setForm((f) => ({ ...f, [k]: e.target.value }));\n const handleNameChange = (e) => {\n const name = e.target.value;\n setForm((f) => ({\n ...f,\n name,\n key: existing ? f.key : name.toLowerCase().replace(/\\s+/g, \"-\").replace(/[^a-z0-9-]/g, \"\")\n }));\n };\n const submit = async () => {\n if (!form.name.trim()) {\n setError(\"Name is required.\");\n return;\n }\n setLoading(true);\n setError(\"\");\n try {\n await onSave(form);\n onClose();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Save failed.\");\n } finally {\n setLoading(false);\n }\n };\n return /* @__PURE__ */ jsx(\n Modal,\n {\n open,\n onClose,\n title: existing ? \"Edit module\" : \"Add module\",\n size: \"sm\",\n footer: /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n Button,\n {\n variant: \"secondary\",\n size: \"sm\",\n onClick: onClose,\n disabled: loading,\n children: \"Cancel\"\n }\n ),\n /* @__PURE__ */ jsx(Button, { size: \"sm\", onClick: submit, loading, children: existing ? \"Save\" : \"Add\" })\n ] }),\n children: /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-3\", children: [\n /* @__PURE__ */ jsx(\n Input,\n {\n label: \"Name\",\n value: form.name,\n onChange: handleNameChange,\n placeholder: \"e.g. Contracts\",\n required: true\n }\n ),\n /* @__PURE__ */ jsx(\n Input,\n {\n label: \"Description\",\n value: form.description,\n onChange: set(\"description\"),\n placeholder: \"Short description (optional)\"\n }\n ),\n error && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-danger\", children: error })\n ] })\n }\n );\n}\nfunction PageControls({\n pagination,\n isFetching,\n onPrevPage,\n onNextPage\n}) {\n if (!pagination?.enabled) return null;\n const page = pagination.page ?? 1;\n const totalPages = pagination.totalPages ?? 1;\n const totalItems = pagination.totalItems ?? 0;\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between px-1\", children: [\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-tertiary\", children: [\n \"Page \",\n page,\n \" of \",\n totalPages,\n \" \\xB7 \",\n totalItems,\n \" total\"\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1\", children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: onPrevPage,\n disabled: !pagination.hasPrevPage || isFetching,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 transition-colors\",\n \"aria-label\": \"Previous page\",\n children: /* @__PURE__ */ jsx(ChevronLeft, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-secondary px-1\", children: [\n page,\n \" / \",\n totalPages\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: onNextPage,\n disabled: !pagination.hasNextPage || isFetching,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 transition-colors\",\n \"aria-label\": \"Next page\",\n children: /* @__PURE__ */ jsx(ChevronRight, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] })\n ] });\n}\nfunction ModulesSection({\n appMongoId,\n modules = [],\n search = \"\",\n onSearchChange = () => {\n },\n pagination,\n isFetching,\n onPrevPage,\n onNextPage\n}) {\n const { adapter } = useAppsec();\n const toast = useToast();\n const queryClient2 = useQueryClient();\n const [items, setItems] = useState(modules);\n const [loading, setLoading] = useState(false);\n const [addOpen, setAddOpen] = useState(false);\n const [editing, setEditing] = useState(null);\n const [delTarget, setDelTarget] = useState(null);\n const [delLoading, setDelLoading] = useState(false);\n useEffect(() => {\n setItems(modules);\n }, [modules]);\n const handleSave = async (d) => {\n if (editing) {\n const payload = {\n name: d.name.trim(),\n description: d.description.trim()\n };\n const response = await adapter.updateModule(editing._id, payload);\n const updated = response.data;\n setItems(\n (prev) => prev.map((m) => m._id === updated._id ? updated : m)\n );\n queryClient2.invalidateQueries({\n queryKey: rbacQueryKeys.modules(appMongoId)\n });\n toast.success(response.message ?? \"Module updated successfully.\");\n setEditing(null);\n } else {\n const payload = {\n name: d.name.trim(),\n appId: appMongoId,\n description: d.description.trim()\n };\n const created = await adapter.createModule(payload);\n setItems((prev) => [...prev, created.data]);\n queryClient2.invalidateQueries({\n queryKey: rbacQueryKeys.modules(appMongoId)\n });\n toast.success(created.message ?? \"Module created successfully.\");\n setAddOpen(false);\n }\n };\n const handleDelete = async () => {\n if (!delTarget) return;\n setDelLoading(true);\n try {\n const res = await adapter.deleteModule(delTarget._id);\n setItems((prev) => prev.filter((m) => m._id !== delTarget._id));\n queryClient2.invalidateQueries({\n queryKey: rbacQueryKeys.modules(appMongoId)\n });\n toast.success(res?.message ?? \"Module deleted successfully.\");\n setDelTarget(null);\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Failed to delete module.\"\n );\n } finally {\n setDelLoading(false);\n }\n };\n const filtered = items;\n if (loading) return /* @__PURE__ */ jsx(SectionSkeleton, {});\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-4\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2\", children: [\n /* @__PURE__ */ jsx(\n SearchBar,\n {\n value: search,\n onChange: onSearchChange,\n placeholder: \"Search modules\\u2026\",\n className: \"w-56\"\n }\n ),\n /* @__PURE__ */ jsx(\"div\", { className: \"ml-auto\", children: /* @__PURE__ */ jsx(\n Button,\n {\n size: \"sm\",\n iconLeft: /* @__PURE__ */ jsx(Plus, { className: \"h-3.5 w-3.5\" }),\n onClick: () => setAddOpen(true),\n children: \"Add Module\"\n }\n ) })\n ] }),\n /* @__PURE__ */ jsx(\"div\", { className: \"rounded-appsec border border-appsec-border overflow-x-auto\", children: /* @__PURE__ */ jsxs(\"table\", { className: \"w-full text-sm\", children: [\n /* @__PURE__ */ jsx(\"thead\", { children: /* @__PURE__ */ jsxs(\"tr\", { className: \"border-b border-appsec-border bg-appsec-surface\", children: [\n /* @__PURE__ */ jsx(\"th\", { className: \"px-4 py-2.5 text-left text-[11px] font-semibold text-appsec-text-secondary uppercase tracking-wide\", children: \"Name\" }),\n /* @__PURE__ */ jsx(\"th\", { className: \"px-4 py-2.5 text-left text-[11px] font-semibold text-appsec-text-secondary uppercase tracking-wide \", children: \"Description\" }),\n /* @__PURE__ */ jsx(\"th\", { className: \"w-20\" })\n ] }) }),\n /* @__PURE__ */ jsx(\"tbody\", { className: \"divide-y divide-appsec-border\", children: filtered.length === 0 ? /* @__PURE__ */ jsx(\"tr\", { children: /* @__PURE__ */ jsx(\n \"td\",\n {\n colSpan: 3,\n className: \"px-4 py-10 text-center text-xs text-appsec-text-tertiary\",\n children: \"No modules found.\"\n }\n ) }) : filtered.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)).map((m) => /* @__PURE__ */ jsxs(\n \"tr\",\n {\n className: \"bg-appsec-bg hover:bg-appsec-surface transition-colors\",\n children: [\n /* @__PURE__ */ jsx(\"td\", { className: \"px-4 py-2.5 font-medium text-appsec-text\", children: m.module_type }),\n /* @__PURE__ */ jsx(\"td\", { className: \"px-4 py-2.5 text-xs text-appsec-text-secondary truncate max-w-xs\", children: m.description ?? \"\\u2014\" }),\n /* @__PURE__ */ jsx(\"td\", { className: \"px-4 py-2.5\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1 justify-end\", children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setEditing(m),\n className: \"p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-primary hover:bg-appsec-primary-light transition-colors\",\n children: /* @__PURE__ */ jsx(Pencil, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setDelTarget(m),\n className: \"p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-danger hover:bg-appsec-danger-light transition-colors\",\n children: /* @__PURE__ */ jsx(Trash2, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] }) })\n ]\n },\n m._id\n )) })\n ] }) }),\n /* @__PURE__ */ jsx(\n PageControls,\n {\n pagination,\n isFetching,\n onPrevPage,\n onNextPage\n }\n ),\n /* @__PURE__ */ jsx(\n ModuleFormModal,\n {\n open: addOpen,\n onClose: () => setAddOpen(false),\n onSave: handleSave\n }\n ),\n /* @__PURE__ */ jsx(\n ModuleFormModal,\n {\n open: !!editing,\n onClose: () => setEditing(null),\n existing: editing ?? void 0,\n onSave: handleSave\n }\n ),\n /* @__PURE__ */ jsx(\n ConfirmDialog,\n {\n open: !!delTarget,\n onClose: () => setDelTarget(null),\n onConfirm: handleDelete,\n title: \"Delete module\",\n message: `Delete \"${delTarget?.module_type}\"? This cannot be undone.`,\n confirmLabel: \"Delete\",\n variant: \"danger\",\n loading: delLoading\n }\n )\n ] });\n}\nfunction PermissionFormModal({\n open,\n onClose,\n existing,\n onSave\n}) {\n const [form, setForm] = useState({\n _id: \"\",\n name: \"\",\n label: \"\",\n description: \"\"\n });\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n useEffect(() => {\n if (!existing) return;\n if (open) {\n setForm({\n _id: existing._id ?? \"\",\n name: existing?.name ?? \"\",\n label: existing?.label ?? \"\",\n description: existing?.description ?? \"\"\n });\n setError(\"\");\n }\n }, [open, existing]);\n const set = (k) => (e) => setForm((f) => ({ ...f, [k]: e.target.value }));\n const handleNameChange = (e) => {\n const name = e.target.value;\n setForm((f) => ({ ...f, name, label: existing ? f.label : name }));\n };\n const submit = async () => {\n if (!form.name.trim()) {\n setError(\"Name is required.\");\n return;\n }\n setLoading(true);\n setError(\"\");\n try {\n await onSave({\n _id: form._id,\n name: form.name.trim(),\n label: form.label.trim(),\n description: form.description.trim()\n });\n onClose();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Save failed.\");\n } finally {\n setLoading(false);\n }\n };\n return /* @__PURE__ */ jsx(\n Modal,\n {\n open,\n onClose,\n title: existing ? \"Edit permission\" : \"Add permission\",\n size: \"sm\",\n footer: /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n Button,\n {\n variant: \"secondary\",\n size: \"sm\",\n onClick: onClose,\n disabled: loading,\n children: \"Cancel\"\n }\n ),\n /* @__PURE__ */ jsx(Button, { size: \"sm\", onClick: submit, loading, children: existing ? \"Save\" : \"Add\" })\n ] }),\n children: /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-3\", children: [\n /* @__PURE__ */ jsx(\n Input,\n {\n label: \"Name\",\n value: form.name,\n onChange: handleNameChange,\n placeholder: \"e.g. read\",\n className: \"font-mono\",\n required: true\n }\n ),\n /* @__PURE__ */ jsx(\n Input,\n {\n label: \"Description\",\n value: form.description,\n onChange: set(\"description\"),\n placeholder: \"Optional\"\n }\n ),\n error && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-danger\", children: error })\n ] })\n }\n );\n}\nfunction PermissionsSection({\n appMongoId,\n permissions = [],\n search = \"\",\n onSearchChange = () => {\n },\n pagination,\n isFetching,\n onPrevPage,\n onNextPage\n}) {\n const { adapter, appId } = useAppsec();\n const toast = useToast();\n const queryClient2 = useQueryClient();\n const [items, setItems] = useState(permissions);\n const [loading, setLoading] = useState(false);\n const [addOpen, setAddOpen] = useState(false);\n const [editing, setEditing] = useState(null);\n const [delTarget, setDelTarget] = useState(null);\n const [delLoading, setDelLoading] = useState(false);\n useEffect(() => {\n setItems(permissions);\n }, [permissions]);\n const handleSave = async (d) => {\n if (editing) {\n const payload = {\n _id: d._id,\n name: d.name,\n appId: appMongoId\n };\n const response = await adapter.updatePermission(payload._id, payload);\n const updated = response.data;\n setItems(\n (prev) => prev.map((p) => p._id === updated._id ? updated : p)\n );\n queryClient2.invalidateQueries({\n queryKey: rbacQueryKeys.permissions(appMongoId)\n });\n toast.success(response.message ?? \"Permission updated successfully.\");\n setEditing(null);\n } else {\n const payload = {\n name: d.name,\n appId: appMongoId\n };\n const response = await adapter.createPermission(payload);\n setItems((prev) => [...prev, response.data]);\n queryClient2.invalidateQueries({\n queryKey: rbacQueryKeys.permissions(appMongoId)\n });\n toast.success(response.message ?? \"Permission created successfully.\");\n setAddOpen(false);\n }\n };\n const handleDelete = async () => {\n if (!delTarget) return;\n setDelLoading(true);\n try {\n const res = await adapter.deletePermission(delTarget._id);\n setItems((prev) => prev.filter((p) => p._id !== delTarget._id));\n queryClient2.invalidateQueries({\n queryKey: rbacQueryKeys.permissions(appMongoId)\n });\n toast.success(res?.message ?? \"Permission deleted successfully.\");\n setDelTarget(null);\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Failed to delete permission.\"\n );\n } finally {\n setDelLoading(false);\n }\n };\n const filtered = items;\n if (loading) return /* @__PURE__ */ jsx(SectionSkeleton, {});\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-4\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2\", children: [\n /* @__PURE__ */ jsx(\n SearchBar,\n {\n value: search,\n onChange: onSearchChange,\n placeholder: \"Search permissions\\u2026\",\n className: \"w-56\"\n }\n ),\n /* @__PURE__ */ jsx(\"div\", { className: \"ml-auto\", children: /* @__PURE__ */ jsx(\n Button,\n {\n size: \"sm\",\n iconLeft: /* @__PURE__ */ jsx(Plus, { className: \"h-3.5 w-3.5\" }),\n onClick: () => setAddOpen(true),\n children: \"Add Permission\"\n }\n ) })\n ] }),\n /* @__PURE__ */ jsx(\"div\", { className: \"rounded-appsec border border-appsec-border overflow-x-auto\", children: /* @__PURE__ */ jsxs(\"table\", { className: \"w-full text-sm\", children: [\n /* @__PURE__ */ jsx(\"thead\", { children: /* @__PURE__ */ jsxs(\"tr\", { className: \"border-b border-appsec-border bg-appsec-surface\", children: [\n /* @__PURE__ */ jsx(\"th\", { className: \"px-4 py-2.5 text-left text-[11px] font-semibold text-appsec-text-secondary uppercase tracking-wide\", children: \"Name\" }),\n /* @__PURE__ */ jsx(\"th\", { className: \"px-4 py-2.5 text-left text-[11px] font-semibold text-appsec-text-secondary uppercase tracking-wide \", children: \"Description\" }),\n /* @__PURE__ */ jsx(\"th\", { className: \"w-20\" })\n ] }) }),\n /* @__PURE__ */ jsx(\"tbody\", { className: \"divide-y divide-appsec-border\", children: filtered.length === 0 ? /* @__PURE__ */ jsx(\"tr\", { children: /* @__PURE__ */ jsx(\n \"td\",\n {\n colSpan: 3,\n className: \"px-4 py-10 text-center text-xs text-appsec-text-tertiary\",\n children: \"No permissions found.\"\n }\n ) }) : filtered.map((p) => /* @__PURE__ */ jsxs(\n \"tr\",\n {\n className: \"bg-appsec-bg hover:bg-appsec-surface transition-colors\",\n children: [\n /* @__PURE__ */ jsx(\"td\", { className: \"px-4 py-2.5 font-mono text-xs text-appsec-text\", children: p.name }),\n /* @__PURE__ */ jsx(\"td\", { className: \"px-4 py-2.5 text-xs text-appsec-text-secondary truncate max-w-xs\", children: p.description ?? \"\\u2014\" }),\n /* @__PURE__ */ jsx(\"td\", { className: \"px-4 py-2.5\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1 justify-end\", children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setEditing(p),\n className: \"p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-primary hover:bg-appsec-primary-light transition-colors\",\n children: /* @__PURE__ */ jsx(Pencil, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setDelTarget(p),\n className: \"p-1.5 rounded-appsec text-appsec-text-tertiary hover:text-appsec-danger hover:bg-appsec-danger-light transition-colors\",\n children: /* @__PURE__ */ jsx(Trash2, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] }) })\n ]\n },\n p._id\n )) })\n ] }) }),\n /* @__PURE__ */ jsx(\n PageControls,\n {\n pagination,\n isFetching,\n onPrevPage,\n onNextPage\n }\n ),\n /* @__PURE__ */ jsx(\n PermissionFormModal,\n {\n open: addOpen,\n onClose: () => setAddOpen(false),\n onSave: handleSave\n }\n ),\n /* @__PURE__ */ jsx(\n PermissionFormModal,\n {\n open: !!editing,\n onClose: () => setEditing(null),\n existing: editing ?? void 0,\n onSave: handleSave\n }\n ),\n /* @__PURE__ */ jsx(\n ConfirmDialog,\n {\n open: !!delTarget,\n onClose: () => setDelTarget(null),\n onConfirm: handleDelete,\n title: \"Delete permission\",\n message: `Delete \"${delTarget?.label || delTarget?.name}\"? Roles using it will lose it.`,\n confirmLabel: \"Delete\",\n variant: \"danger\",\n loading: delLoading\n }\n )\n ] });\n}\nfunction MappingSection({\n appMongoId,\n modules,\n roleModuleMapping\n}) {\n const { adapter, appId } = useAppsec();\n const allRolesQuery = useAllRolesQuery(appMongoId);\n const roles = allRolesQuery.data?.data || [];\n const queryClient2 = useQueryClient();\n const [mapping, setMapping] = useState([]);\n const [saving, setSaving] = useState(false);\n const [dirty, setDirty] = useState(false);\n const [dragRoleId, setDragRoleId] = useState(null);\n const [overModuleId, setOverModuleId] = useState(null);\n useEffect(() => {\n const normalizedMapping = roleModuleMapping.map(\n (e) => ({\n roleId: e.roleId && typeof e.roleId === \"object\" ? e.roleId._id : e.roleId,\n moduleId: e.moduleId && typeof e.moduleId === \"object\" ? e.moduleId._id : e.moduleId\n })\n );\n setMapping(normalizedMapping);\n setDirty(false);\n }, [roleModuleMapping]);\n const sortedModules = useMemo(\n () => modules.slice().sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\n [modules]\n );\n const rolesInModule = (moduleId) => mapping.filter((e) => {\n const mId = typeof e.moduleId === \"object\" ? e.moduleId._id : e.moduleId;\n return mId === moduleId;\n }).map((e) => roles.find((r) => r._id === e.roleId)).filter((r) => !!r);\n const getId3 = (val) => typeof val === \"object\" && val !== null ? val._id : val;\n const addEntry = (roleId, moduleId) => {\n const exists = mapping.some((e) => {\n const mId = getId3(e.moduleId);\n return e.roleId === roleId && mId === moduleId;\n });\n if (exists) return;\n setMapping((prev) => [...prev, { roleId, moduleId }]);\n setDirty(true);\n };\n const removeEntry = (roleId, moduleId) => {\n setMapping(\n (prev) => prev.filter((e) => {\n const mId = getId3(e.moduleId);\n return !(e.roleId === roleId && mId === moduleId);\n })\n );\n setDirty(true);\n };\n const handleSave = async () => {\n setSaving(true);\n try {\n const payload = {\n appId: appMongoId,\n mappings: mapping\n };\n await adapter.updateModuleMapping(payload);\n queryClient2.invalidateQueries({\n queryKey: rbacQueryKeys.roleModuleMapping(appMongoId)\n });\n setDirty(false);\n } finally {\n setSaving(false);\n }\n };\n if (roles.length === 0)\n return /* @__PURE__ */ jsx(\"p\", { className: \"text-sm text-appsec-text-secondary\", children: \"No roles defined \\u2014 add some in the Roles section.\" });\n if (sortedModules.length === 0)\n return /* @__PURE__ */ jsx(\"p\", { className: \"text-sm text-appsec-text-secondary\", children: \"No modules defined \\u2014 add some in the Modules section.\" });\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-5\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between\", children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-secondary\", children: \"Drag roles into module drop zones to assign access. \\xD7 to remove.\" }),\n dirty && /* @__PURE__ */ jsx(Button, { size: \"sm\", loading: saving, onClick: handleSave, children: \"Save mapping\" })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col\", style: { height: 520 }, children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"shrink-0 pb-4 border-b border-appsec-border\", children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-[11px] font-semibold uppercase tracking-wide text-appsec-text-secondary mb-2\", children: \"Roles\" }),\n /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-wrap gap-1.5 max-h-24 overflow-y-auto pr-1\", children: roles.map((role) => /* @__PURE__ */ jsx(\n \"div\",\n {\n draggable: true,\n onDragStart: () => setDragRoleId(role._id),\n onDragEnd: () => {\n setDragRoleId(null);\n setOverModuleId(null);\n },\n className: cn(\n \"px-2 py-0.5 rounded-appsec border border-appsec-primary bg-appsec-primary-light\",\n \"text-xs font-medium text-appsec-primary text-center\",\n \"cursor-grab active:cursor-grabbing select-none transition-opacity\",\n dragRoleId === role._id && \"opacity-40\"\n ),\n children: role.name\n },\n role._id\n )) })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-2 flex-1 overflow-y-auto pt-4 pr-1\", children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-[11px] font-semibold uppercase tracking-wide text-appsec-text-secondary shrink-0\", children: \"Module Drop Zones\" }),\n /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-col gap-3\", children: sortedModules.map((mod) => {\n const assigned = rolesInModule(mod._id);\n const isOver = overModuleId === mod._id;\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n onDragOver: (e) => {\n e.preventDefault();\n setOverModuleId(mod._id);\n },\n onDragLeave: () => setOverModuleId(null),\n onDrop: (e) => {\n e.preventDefault();\n if (dragRoleId) addEntry(dragRoleId, mod._id);\n setDragRoleId(null);\n setOverModuleId(null);\n },\n className: cn(\n \"min-h-16 rounded-appsec border-2 border-dashed p-3 transition-colors\",\n isOver ? \"border-appsec-primary bg-appsec-primary-light\" : \"border-appsec-border bg-appsec-surface\"\n ),\n children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs font-semibold text-appsec-text mb-2\", children: mod.module_type }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-wrap gap-2\", children: [\n assigned.map((role) => /* @__PURE__ */ jsxs(\n \"span\",\n {\n className: \"inline-flex items-center gap-1 px-2.5 py-1 rounded-full bg-appsec-primary-light border border-appsec-primary text-appsec-primary text-xs font-medium\",\n children: [\n role.name,\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => removeEntry(role._id, mod._id),\n className: \"hover:opacity-70 transition-opacity leading-none\",\n \"aria-label\": `Remove ${role.name}`,\n children: /* @__PURE__ */ jsx(X, { className: \"h-3 w-3\" })\n }\n )\n ]\n },\n role._id\n )),\n assigned.length === 0 && !isOver && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-tertiary italic\", children: \"Drop a role here\\u2026\" })\n ] })\n ]\n },\n mod._id\n );\n }) })\n ] })\n ] })\n ] });\n}\nfunction SectionSkeleton() {\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-col gap-3\", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsx(\n \"div\",\n {\n className: \"h-12 rounded-appsec bg-appsec-surface animate-pulse\"\n },\n i\n )) });\n}\nfunction ConfigTab({ appMongoId }) {\n const [modulesPage, setModulesPage] = useState(1);\n const [rolesPage, setRolesPage] = useState(1);\n const [permissionsPage, setPermissionsPage] = useState(1);\n const [modulesSearch, setModulesSearch] = useState(\"\");\n const [permissionsSearch, setPermissionsSearch] = useState(\"\");\n const debouncedModulesSearch = useDebouncedValue(modulesSearch.trim(), 300);\n const debouncedPermissionsSearch = useDebouncedValue(permissionsSearch.trim(), 300);\n const pageSize = 10;\n const modulesQuery = useModulesPaginatedQuery(appMongoId, modulesPage, pageSize, debouncedModulesSearch);\n const rolesQuery = useRolesPaginatedQuery(appMongoId, rolesPage, pageSize);\n const permissionsQuery = usePermissionsPaginatedQuery(appMongoId, permissionsPage, pageSize, debouncedPermissionsSearch);\n const roleModuleMappingQuery = useRoleModuleMappingQuery(appMongoId);\n const modules = modulesQuery.data?.data || [];\n const roles = rolesQuery.data?.data || [];\n const permissions = permissionsQuery.data?.data || [];\n const roleModuleMapping = roleModuleMappingQuery.data?.data || [];\n modulesQuery.isLoading || rolesQuery.isLoading || permissionsQuery.isLoading || roleModuleMappingQuery.isLoading;\n const [section, setSection] = useState(\"modules\");\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-5\", children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-1 p-1 rounded-appsec bg-appsec-surface border border-appsec-border self-start\", children: SECTIONS.map((s) => /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onClick: () => setSection(s.key),\n className: cn(\n \"flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded transition-colors\",\n section === s.key ? \"bg-appsec-bg text-appsec-text shadow-sm border border-appsec-border\" : \"text-appsec-text-secondary hover:text-appsec-text\"\n ),\n children: [\n s.icon,\n s.label\n ]\n },\n s.key\n )) }),\n section === \"modules\" && /* @__PURE__ */ jsx(\n ModulesSection,\n {\n appMongoId,\n modules,\n search: modulesSearch,\n onSearchChange: (value) => {\n setModulesSearch(value);\n setModulesPage(1);\n },\n pagination: modulesQuery.data?.pagination,\n isFetching: modulesQuery.isFetching,\n onPrevPage: () => setModulesPage((page) => Math.max(1, page - 1)),\n onNextPage: () => setModulesPage((page) => page + 1)\n }\n ),\n section === \"permissions\" && /* @__PURE__ */ jsx(\n PermissionsSection,\n {\n appMongoId,\n permissions,\n search: permissionsSearch,\n onSearchChange: (value) => {\n setPermissionsSearch(value);\n setPermissionsPage(1);\n },\n pagination: permissionsQuery.data?.pagination,\n isFetching: permissionsQuery.isFetching,\n onPrevPage: () => setPermissionsPage((page) => Math.max(1, page - 1)),\n onNextPage: () => setPermissionsPage((page) => page + 1)\n }\n ),\n section === \"roles\" && /* @__PURE__ */ jsx(RolesTab, { appMongoId }),\n section === \"mapping\" && /* @__PURE__ */ jsx(\n MappingSection,\n {\n appMongoId,\n modules,\n roles,\n roleModuleMapping\n }\n )\n ] });\n}\nvar getId = (value) => typeof value === \"string\" ? value : String(value?._id ?? value?.id ?? \"\");\nvar stripHtml = (html) => html.replace(/<style[\\s\\S]*?<\\/style>/gi, \"\").replace(/<script[\\s\\S]*?<\\/script>/gi, \"\").replace(/<[^>]+>/g, \" \").replace(/\\s+/g, \" \").trim();\nvar applyTemplate = (template, recipientEmail, grantedBy, additionalData) => template.split(\"{{recipient_email}}\").join(recipientEmail).split(\"{{granted_by}}\").join(grantedBy).split(\"{{additional_data}}\").join(additionalData);\nvar ShareAccessModal = memo(function ShareAccessModal2({\n resourceId,\n moduleId,\n title,\n description,\n notifyByEmail = false,\n sendAdditionalMessage = false,\n emailTemplate,\n open = true,\n onSuccess,\n onClose,\n resourceName,\n isResourceGroup = false\n}) {\n const { adapter, appId, currentUserEmail } = useAppsec();\n const toast = useToast();\n const [mode, setMode] = useState(\"user\");\n const [selectedUsers, setSelectedUsers] = useState([]);\n const [inputValue, setInputValue] = useState(\"\");\n const [debouncedInput, setDebouncedInput] = useState(\"\");\n const [showDropdown, setShowDropdown] = useState(false);\n const [groupId, setGroupId] = useState(\"\");\n const [roleId, setRoleId] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n const [notifyPeople, setNotifyPeople] = useState(false);\n const [additionalMessage, setAdditionalMessage] = useState(\"\");\n const inputRef = useRef(null);\n const dropdownRef = useRef(null);\n const appQuery = useAppQuery(appId);\n const appMongoId = appQuery.data?.data?.[0]?._id || \"\";\n const rolesQuery = useAllRolesQuery(appMongoId);\n const groupsQuery = useGroupsQuery(appMongoId);\n const roleModuleMappingQuery = useRoleModuleMappingQuery(appMongoId);\n const aclsQuery = useAllAclsQuery(appMongoId);\n const usersQuery = useUsersSearchQuery(debouncedInput);\n const createAclMutation = useCreateAclMutation();\n const shareResourceGroupMutation = useShareResourceGroupMutation();\n const sendMailMutation = useMutation({\n mutationFn: (payload) => adapter.sendMail(payload)\n });\n const roles = rolesQuery.data?.data || [];\n const groups = groupsQuery.data?.data ?? [];\n const roleModuleMapping = roleModuleMappingQuery.data?.data || [];\n const aclEntries = aclsQuery.data?.data ?? [];\n const suggestions = useMemo(\n () => (usersQuery.data || []).filter(\n (u) => !selectedUsers.some((s) => s.email === u.email)\n ),\n [usersQuery.data, selectedUsers]\n );\n const filteredRoles = useMemo(\n () => {\n if (!moduleId || roleModuleMapping.length === 0) return [];\n return roles.filter(\n (role) => roleModuleMapping.some((m) => {\n const mappedRoleId = getId(m.roleId ?? m.role);\n const mappedModuleId = getId(m.moduleId ?? m.module);\n return mappedRoleId === role._id && mappedModuleId === moduleId;\n })\n );\n },\n [roles, roleModuleMapping, moduleId]\n );\n useEffect(() => {\n if (!open) return;\n setMode(\"user\");\n setSelectedUsers([]);\n setInputValue(\"\");\n setDebouncedInput(\"\");\n setShowDropdown(false);\n setGroupId(\"\");\n setRoleId(\"\");\n setError(\"\");\n setLoading(false);\n setNotifyPeople(false);\n setAdditionalMessage(\"\");\n }, [open]);\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedInput(inputValue.trim()), 300);\n return () => clearTimeout(timer);\n }, [inputValue]);\n useEffect(() => {\n if (suggestions.length > 0 && inputValue.trim().length >= 2) {\n setShowDropdown(true);\n } else {\n setShowDropdown(false);\n }\n }, [suggestions, inputValue]);\n useEffect(() => {\n if (!showDropdown) return;\n const handler = (e) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target)) {\n setShowDropdown(false);\n }\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [showDropdown]);\n const addUser = (user) => {\n setSelectedUsers((prev) => [...prev, user]);\n setInputValue(\"\");\n setDebouncedInput(\"\");\n setShowDropdown(false);\n inputRef.current?.focus();\n };\n const addRawEmail = () => {\n const trimmed = inputValue.trim().toLowerCase();\n if (!trimmed || selectedUsers.some((u) => u.email === trimmed)) return;\n setSelectedUsers((prev) => [\n ...prev,\n { email: trimmed, displayName: trimmed }\n ]);\n setInputValue(\"\");\n setDebouncedInput(\"\");\n setShowDropdown(false);\n };\n const removeUser = (email) => {\n setSelectedUsers((prev) => prev.filter((u) => u.email !== email));\n };\n const handleKeyDown = (e) => {\n if ((e.key === \"Enter\" || e.key === \",\") && inputValue.trim()) {\n e.preventDefault();\n if (suggestions.length > 0) addUser(suggestions[0]);\n else addRawEmail();\n }\n if (e.key === \"Backspace\" && !inputValue && selectedUsers.length > 0) {\n setSelectedUsers((prev) => prev.slice(0, -1));\n }\n if (e.key === \"Escape\") setShowDropdown(false);\n };\n const sendNotifications = async (emails) => {\n if (!notifyByEmail || !notifyPeople || !emailTemplate || emails.length === 0) {\n return;\n }\n const grantedBy = currentUserEmail || \"\";\n const additionalData = sendAdditionalMessage ? additionalMessage : \"\";\n await Promise.all(\n emails.map((email) => {\n const subject = applyTemplate(\n emailTemplate.subject,\n email,\n grantedBy,\n additionalData\n );\n const html = applyTemplate(\n emailTemplate.html,\n email,\n grantedBy,\n additionalData\n );\n return sendMailMutation.mutateAsync({\n recipients: {\n to: [email],\n cc: [],\n bcc: []\n },\n mail: {\n subject,\n html,\n text: stripHtml(html)\n }\n });\n })\n );\n };\n const submit = async () => {\n if (mode === \"user\" && selectedUsers.length === 0) {\n setError(\"Add at least one email.\");\n return;\n }\n if (mode === \"group\" && !groupId) {\n setError(\"Select a group.\");\n return;\n }\n if (!roleId) {\n setError(\"Select a role.\");\n return;\n }\n if (!appMongoId) {\n setError(\"Application is still loading.\");\n return;\n }\n if (notifyByEmail && notifyPeople && (!emailTemplate?.subject.trim() || !emailTemplate?.html.trim())) {\n setError(\"Email template is required when notifyByEmail is true.\");\n return;\n }\n setLoading(true);\n setError(\"\");\n try {\n const emails = selectedUsers.map((u) => u.email);\n let grantedEmails = [];\n const roleObj = roles.find((role) => role._id === roleId);\n if (!roleObj) throw new Error(\"Role not found\");\n if (isResourceGroup) {\n if (groupId) {\n const group = groups.find((g) => g._id === groupId);\n await shareResourceGroupMutation.mutateAsync({\n resource_group_id: resourceId,\n group_id: groupId,\n role: roleId,\n is_inherited: true\n });\n grantedEmails = (group?.users ?? []).filter(\n (email) => email.includes(\"@\")\n );\n await sendNotifications(grantedEmails);\n toast.success(\n `Resource group shared with group \"${group?.name ?? groupId}\".`\n );\n } else {\n grantedEmails = emails;\n await Promise.all(\n emails.map(\n (email) => shareResourceGroupMutation.mutateAsync({\n resource_group_id: resourceId,\n user_email: email,\n role: roleId,\n is_inherited: true\n })\n )\n );\n await sendNotifications(emails);\n toast.success(\n `Resource group shared with ${emails.length} user${emails.length !== 1 ? \"s\" : \"\"}.`\n );\n }\n } else if (groupId) {\n const group = groups.find((g) => g._id === groupId);\n if (!group) throw new Error(\"Group not found\");\n await createAclMutation.mutateAsync({\n resource_type: moduleId,\n resource_id: resourceId,\n group_id: groupId,\n is_inherited: true,\n role: roleId\n });\n grantedEmails = group.users.filter((email) => email.includes(\"@\"));\n await sendNotifications(grantedEmails);\n toast.success(`Access granted to group \"${group.name}\".`);\n } else {\n const existingEmails = aclEntries.filter(\n (acl) => acl.resourceId === resourceId && acl.resourceType === moduleId\n ).map((acl) => acl.user_email);\n const newEmails = emails.filter((email) => !existingEmails.includes(email));\n const skipped = emails.length - newEmails.length;\n if (newEmails.length === 0) {\n toast.info(\"All selected users already have access to this resource.\");\n setLoading(false);\n return;\n }\n grantedEmails = newEmails;\n await Promise.all(\n newEmails.map(\n (email) => createAclMutation.mutateAsync({\n resource_type: moduleId,\n resource_id: resourceId,\n user_email: email,\n is_inherited: false,\n role: roleId\n })\n )\n );\n await sendNotifications(newEmails);\n if (skipped > 0) {\n toast.info(\n `Access granted to ${newEmails.length} user${newEmails.length !== 1 ? \"s\" : \"\"}. ${skipped} already had access.`\n );\n } else {\n toast.success(\n `Access granted to ${newEmails.length} user${newEmails.length !== 1 ? \"s\" : \"\"}.`\n );\n }\n }\n onSuccess?.({\n emails: grantedEmails,\n roleId,\n groupId: mode === \"group\" ? groupId : void 0\n });\n onClose?.();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Share failed.\");\n } finally {\n setLoading(false);\n }\n };\n return /* @__PURE__ */ jsx(\n Modal,\n {\n open,\n onClose: () => onClose?.(),\n title: title || (resourceName ? `Share - ${resourceName}` : \"Share Access\"),\n description,\n size: \"sm\",\n footer: /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n Button,\n {\n variant: \"secondary\",\n size: \"sm\",\n onClick: () => onClose?.(),\n disabled: loading,\n children: \"Cancel\"\n }\n ),\n /* @__PURE__ */ jsx(Button, { size: \"sm\", onClick: submit, loading, disabled: loading, children: \"Share\" })\n ] }),\n children: /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-4\", children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-1 p-1 rounded-appsec bg-appsec-surface border border-appsec-border\", children: [\"user\", \"group\"].map((m) => /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n setMode(m);\n setError(\"\");\n },\n className: cn(\n \"flex-1 py-1.5 text-xs font-medium rounded transition-colors capitalize\",\n mode === m ? \"bg-appsec-bg text-appsec-text shadow-sm border border-appsec-border\" : \"text-appsec-text-secondary hover:text-appsec-text\"\n ),\n children: m === \"user\" ? \"By Email\" : \"By Group\"\n },\n m\n )) }),\n mode === \"user\" ? /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [\n /* @__PURE__ */ jsx(\"label\", { className: \"text-sm font-medium text-appsec-text\", children: \"Add people\" }),\n /* @__PURE__ */ jsxs(\"div\", { ref: dropdownRef, className: \"relative\", children: [\n /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: cn(\n \"flex flex-wrap gap-1.5 p-2 min-h-10 rounded-appsec border bg-appsec-bg cursor-text transition-colors\",\n showDropdown || document.activeElement === inputRef.current ? \"border-appsec-primary\" : \"border-appsec-border\"\n ),\n onClick: () => inputRef.current?.focus(),\n children: [\n selectedUsers.map((u) => /* @__PURE__ */ jsx(\n Chip,\n {\n label: u.displayName !== u.email ? u.displayName : u.email,\n onRemove: () => removeUser(u.email)\n },\n u.email\n )),\n /* @__PURE__ */ jsx(\n \"input\",\n {\n ref: inputRef,\n type: \"text\",\n value: inputValue,\n onChange: (e) => setInputValue(e.target.value),\n onKeyDown: handleKeyDown,\n onFocus: () => inputValue.trim().length >= 2 && suggestions.length > 0 && setShowDropdown(true),\n placeholder: selectedUsers.length === 0 ? \"Search by name or email...\" : \"\",\n className: \"flex-1 min-w-32 bg-transparent outline-none text-sm text-appsec-text placeholder:text-appsec-text-tertiary\"\n }\n ),\n usersQuery.isFetching && /* @__PURE__ */ jsx(\"span\", { className: \"self-center ml-1\", children: /* @__PURE__ */ jsxs(\n \"svg\",\n {\n className: \"animate-spin h-3.5 w-3.5 text-appsec-text-secondary\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n children: [\n /* @__PURE__ */ jsx(\n \"circle\",\n {\n className: \"opacity-25\",\n cx: \"12\",\n cy: \"12\",\n r: \"10\",\n stroke: \"currentColor\",\n strokeWidth: \"4\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"path\",\n {\n className: \"opacity-75\",\n fill: \"currentColor\",\n d: \"M4 12a8 8 0 018-8v8H4z\"\n }\n )\n ]\n }\n ) })\n ]\n }\n ),\n showDropdown && suggestions.length > 0 && /* @__PURE__ */ jsx(\"div\", { className: \"absolute z-50 mt-1 w-full rounded-appsec border border-appsec-border bg-appsec-bg shadow-lg overflow-hidden\", children: suggestions.map((u) => /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onMouseDown: (e) => {\n e.preventDefault();\n addUser(u);\n },\n className: \"flex items-center gap-3 w-full px-3 py-2.5 text-left hover:bg-appsec-surface transition-colors\",\n children: [\n /* @__PURE__ */ jsx(Avatar, { name: u.displayName, size: \"sm\" }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col min-w-0\", children: [\n /* @__PURE__ */ jsx(\"span\", { className: \"text-sm font-medium text-appsec-text truncate\", children: u.displayName }),\n /* @__PURE__ */ jsx(\"span\", { className: \"text-xs text-appsec-text-secondary truncate\", children: u.email })\n ] })\n ]\n },\n u.email\n )) })\n ] }),\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-tertiary\", children: \"Press Enter or comma to add a raw email address.\" })\n ] }) : /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [\n /* @__PURE__ */ jsx(\"label\", { className: \"text-sm font-medium text-appsec-text\", children: \"Group\" }),\n /* @__PURE__ */ jsxs(\n \"select\",\n {\n value: groupId,\n onChange: (e) => setGroupId(e.target.value),\n className: \"h-9 text-sm rounded-appsec border border-appsec-border bg-appsec-bg px-3 pr-8 appearance-none outline-none focus:border-appsec-primary text-appsec-text\",\n children: [\n /* @__PURE__ */ jsx(\"option\", { value: \"\", children: \"Select group...\" }),\n groups.map((g) => /* @__PURE__ */ jsxs(\"option\", { value: g._id, children: [\n g.name,\n g.description ? ` - ${g.description}` : \"\"\n ] }, g._id))\n ]\n }\n )\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [\n /* @__PURE__ */ jsx(\"label\", { className: \"text-sm font-medium text-appsec-text\", children: \"Role\" }),\n /* @__PURE__ */ jsxs(\n \"select\",\n {\n value: roleId,\n onChange: (e) => setRoleId(e.target.value),\n className: \"h-9 text-sm rounded-appsec border border-appsec-border bg-appsec-bg px-3 pr-8 appearance-none outline-none focus:border-appsec-primary text-appsec-text\",\n children: [\n /* @__PURE__ */ jsx(\"option\", { value: \"\", children: \"Select role...\" }),\n filteredRoles.length === 0 && /* @__PURE__ */ jsx(\"option\", { value: \"\", disabled: true, children: \"No roles mapped to this module\" }),\n filteredRoles.map((role) => /* @__PURE__ */ jsxs(\"option\", { value: role._id, children: [\n role.name,\n role.description ? ` - ${role.description}` : \"\"\n ] }, role._id))\n ]\n }\n )\n ] }),\n notifyByEmail && /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-2\", children: [\n /* @__PURE__ */ jsxs(\"label\", { className: \"inline-flex items-center gap-2 text-sm font-medium text-appsec-text\", children: [\n /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n checked: notifyPeople,\n onChange: (e) => setNotifyPeople(e.target.checked),\n className: \"h-4 w-4 accent-appsec-primary\"\n }\n ),\n /* @__PURE__ */ jsx(\"span\", { children: \"Notify people by email\" })\n ] }),\n notifyPeople && sendAdditionalMessage && /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [\n /* @__PURE__ */ jsx(\"label\", { className: \"text-sm font-medium text-appsec-text\", children: \"Additional Message\" }),\n /* @__PURE__ */ jsx(\n \"textarea\",\n {\n value: additionalMessage,\n onChange: (e) => setAdditionalMessage(e.target.value),\n rows: 3,\n className: \"w-full rounded-appsec border border-appsec-border bg-appsec-bg px-3 py-2 text-sm text-appsec-text placeholder:text-appsec-text-tertiary outline-none transition-colors focus:border-appsec-primary focus:ring-2 focus:ring-appsec-primary-light\"\n }\n )\n ] })\n ] }),\n error && /* @__PURE__ */ jsx(\"div\", { className: \"rounded-appsec bg-appsec-danger-light px-3 py-2 text-sm text-appsec-danger\", children: error })\n ] })\n }\n );\n});\nvar SECTION_TOGGLE = [\n { key: \"access\", label: \"Access Management\", icon: /* @__PURE__ */ jsx(Layers, { className: \"h-3.5 w-3.5\" }) },\n { key: \"rbac\", label: \"RBAC Configuration\", icon: /* @__PURE__ */ jsx(Shield, { className: \"h-3.5 w-3.5\" }) }\n];\nvar RBAC_TABS = [\n { key: \"groups\", label: \"User Groups\", icon: /* @__PURE__ */ jsx(Users2, { className: \"h-3.5 w-3.5\" }) },\n { key: \"config\", label: \"Configuration\", icon: /* @__PURE__ */ jsx(Settings2, { className: \"h-3.5 w-3.5\" }) }\n];\nfunction RBACConfiguration({ defaultTab = \"groups\", className }) {\n const { appId } = useAppsec();\n const appQuery = useAppQuery(appId);\n const appMongoId = appQuery.data?.data?.[0]?._id || \"\";\n const [rbacTab, setRbacTab] = useState(defaultTab);\n if (appQuery.isLoading) {\n return /* @__PURE__ */ jsx(\"div\", { className: cn(\"flex items-center justify-center py-16 text-sm text-appsec-text-secondary\", className), children: \"Loading RBAC configuration...\" });\n }\n if (!appMongoId) {\n return /* @__PURE__ */ jsx(\"div\", { className: cn(\"flex items-center justify-center py-16 text-sm text-appsec-text-secondary\", className), children: \"App not found.\" });\n }\n return /* @__PURE__ */ jsxs(\"div\", { className: cn(\"flex flex-col gap-0\", className), children: [\n /* @__PURE__ */ jsx(Tabs, { items: RBAC_TABS, activeKey: rbacTab, onChange: setRbacTab }),\n /* @__PURE__ */ jsx(TabPanel, { tabKey: \"groups\", activeKey: rbacTab, children: /* @__PURE__ */ jsx(UserGroupsTab, { appMongoId }) }),\n /* @__PURE__ */ jsx(TabPanel, { tabKey: \"config\", activeKey: rbacTab, children: /* @__PURE__ */ jsx(\"div\", { className: \"p-4\", children: /* @__PURE__ */ jsx(ConfigTab, { appMongoId }) }) })\n ] });\n}\nfunction RBACManagement({\n defaultTab,\n className,\n mfApi: mfApiProp,\n onRegisterEventHandler,\n onUnregisterEventHandler\n}) {\n const {\n modules,\n roles,\n permissions,\n users,\n groups,\n aclEntries,\n loading,\n appMongoId,\n shareResource,\n setShareResource,\n handleRemoveAccess,\n roleModuleMapping,\n handleBulkRoleChange\n } = useModuleSharedState();\n const [section, setSection] = useState(\"access\");\n const [activeTab, setActiveTab] = useState(defaultTab ?? \"\");\n const [rbacTab, setRbacTab] = useState(\"groups\");\n const mfApiInternal = useMicroFrontendApi();\n const mfApi = mfApiProp ?? mfApiInternal;\n const handleEvent = useCallback((eventData) => {\n if (eventData.action === \"click\") {\n if (eventData.elementId === \"Configuration\") {\n setSection(\"rbac\");\n setRbacTab(\"config\");\n } else if (eventData.elementId === \"User Groups\") {\n setSection(\"rbac\");\n setRbacTab(\"groups\");\n } else {\n setActiveTab(eventData.elementId);\n }\n }\n }, []);\n useEffect(() => {\n if (onRegisterEventHandler) {\n onRegisterEventHandler(handleEvent);\n return () => onUnregisterEventHandler?.();\n }\n const unsubscribe = mfApi.subscribe(\"MODE_UI_INTERACTION_TO_PERFORM\", handleEvent);\n return () => unsubscribe();\n }, [mfApi, handleEvent, onRegisterEventHandler, onUnregisterEventHandler]);\n useEffect(() => {\n if (!mfApi) return;\n return mfApi.subscribe(\"MODE_UI_INTERACTION_TO_PERFORM\", handleEvent);\n }, [mfApi, handleEvent]);\n useEffect(() => {\n if (!loading && modules.length > 0 && !activeTab) {\n setActiveTab(modules[0]._id);\n }\n }, [loading]);\n const moduleTabItems = useMemo(\n () => modules.map((m) => ({ key: m._id, label: m.module_type })),\n [modules]\n );\n if (loading) {\n return /* @__PURE__ */ jsxs(\"div\", { className: cn(\"flex flex-col gap-0\", className), children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-1 border-b border-appsec-border px-1 pb-0\", children: [1, 2, 3, 4].map((i) => /* @__PURE__ */ jsx(\"div\", { className: \"h-9 w-20 rounded-t-appsec bg-appsec-surface animate-pulse\" }, i)) }),\n /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-col gap-3 p-4\", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsx(\"div\", { className: \"h-12 rounded-appsec bg-appsec-surface animate-pulse\" }, i)) })\n ] });\n }\n return /* @__PURE__ */ jsxs(\"div\", { className: cn(\"flex flex-col gap-0\", className), children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"flex items-center gap-3 px-4 py-3 border-b border-appsec-border bg-appsec-bg\", children: /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-1 p-1 rounded-appsec bg-appsec-surface border border-appsec-border\", children: SECTION_TOGGLE.map(({ key, label, icon }) => /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onClick: () => setSection(key),\n className: cn(\n \"flex items-center gap-2 px-3 py-1.5 rounded text-sm font-medium transition-colors\",\n section === key ? \"bg-appsec-bg text-appsec-text shadow-sm border border-appsec-border\" : \"text-appsec-text-secondary hover:text-appsec-text\"\n ),\n children: [\n icon,\n label\n ]\n },\n key\n )) }) }),\n section === \"access\" && /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Tabs, { items: moduleTabItems, activeKey: activeTab, onChange: setActiveTab }),\n modules.filter((module) => module._id === activeTab).map((module) => /* @__PURE__ */ jsx(TabPanel, { tabKey: module._id, activeKey: activeTab, children: /* @__PURE__ */ jsx(\"div\", { className: \"p-4\", children: /* @__PURE__ */ jsx(\n ModuleTabContent,\n {\n module,\n roles,\n users,\n groups,\n aclEntries,\n appMongoId,\n onShare: setShareResource,\n onRemoveAccess: handleRemoveAccess,\n onBulkRoleChange: handleBulkRoleChange,\n roleModuleMapping\n }\n ) }) }, module._id))\n ] }),\n section === \"rbac\" && /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Tabs, { items: RBAC_TABS, activeKey: rbacTab, onChange: setRbacTab }),\n /* @__PURE__ */ jsx(TabPanel, { tabKey: \"groups\", activeKey: rbacTab, children: /* @__PURE__ */ jsx(UserGroupsTab, { appMongoId }) }),\n /* @__PURE__ */ jsx(TabPanel, { tabKey: \"config\", activeKey: rbacTab, children: /* @__PURE__ */ jsx(\"div\", { className: \"p-4\", children: /* @__PURE__ */ jsx(ConfigTab, { appMongoId }) }) })\n ] }),\n shareResource && /* @__PURE__ */ jsx(\n ShareAccessModal,\n {\n open: !!shareResource,\n onClose: () => setShareResource(null),\n resourceId: shareResource._id,\n moduleId: shareResource.module,\n title: `Share - ${shareResource.name}`,\n description: \"Grant access to this document.\",\n resourceName: shareResource.name,\n isResourceGroup: shareResource.isResourceGroup\n }\n )\n ] });\n}\nvar Select = forwardRef(\n ({ label, error, hint, options, placeholder, wrapperClassName, className, id, ...rest }, ref) => {\n const selectId = id ?? (label ? label.toLowerCase().replace(/\\s+/g, \"-\") : void 0);\n return /* @__PURE__ */ jsxs(\"div\", { className: cn(\"flex flex-col gap-1\", wrapperClassName), children: [\n label && /* @__PURE__ */ jsx(\"label\", { htmlFor: selectId, className: \"text-sm font-medium text-appsec-text\", children: label }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"relative flex items-center\", children: [\n /* @__PURE__ */ jsxs(\n \"select\",\n {\n ref,\n id: selectId,\n className: cn(\n \"w-full h-9 appearance-none rounded-appsec border border-appsec-border bg-appsec-bg pl-3 pr-8 py-2\",\n \"text-sm text-appsec-text\",\n \"transition-colors outline-none\",\n \"focus:border-appsec-primary focus:ring-2 focus:ring-appsec-primary-light\",\n \"disabled:bg-appsec-surface disabled:cursor-not-allowed disabled:opacity-60\",\n error && \"border-appsec-danger focus:border-appsec-danger focus:ring-appsec-danger-light\",\n className\n ),\n ...rest,\n children: [\n placeholder && /* @__PURE__ */ jsx(\"option\", { value: \"\", disabled: true, children: placeholder }),\n options.map((opt) => /* @__PURE__ */ jsx(\"option\", { value: opt.value, disabled: opt.disabled, children: opt.label }, opt.value))\n ]\n }\n ),\n /* @__PURE__ */ jsx(\n ChevronDown,\n {\n className: \"absolute right-2.5 h-4 w-4 text-appsec-text-tertiary pointer-events-none\"\n }\n )\n ] }),\n error && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-danger\", children: error }),\n !error && hint && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-secondary\", children: hint })\n ] });\n }\n);\nSelect.displayName = \"Select\";\nfunction TableRoot({ children, className, ...rest }) {\n return /* @__PURE__ */ jsx(\"div\", { className: \"w-full overflow-x-auto rounded-appsec border border-appsec-border\", children: /* @__PURE__ */ jsx(\n \"table\",\n {\n className: cn(\"w-full border-collapse text-sm\", className),\n ...rest,\n children\n }\n ) });\n}\nfunction TableHeader({ children, className, ...rest }) {\n return /* @__PURE__ */ jsx(\"thead\", { className: cn(\"bg-appsec-surface\", className), ...rest, children });\n}\nfunction TableBody({ children, className, ...rest }) {\n return /* @__PURE__ */ jsx(\"tbody\", { className: cn(\"divide-y divide-appsec-border bg-appsec-bg\", className), ...rest, children });\n}\nfunction TableRow({ children, className, ...rest }) {\n return /* @__PURE__ */ jsx(\n \"tr\",\n {\n className: cn(\"hover:bg-appsec-surface transition-colors\", className),\n ...rest,\n children\n }\n );\n}\nfunction TableHead({\n children,\n sortable = false,\n sortKey,\n sortState,\n onSort,\n className,\n ...rest\n}) {\n const isActive = sortState && sortKey && sortState.column === sortKey;\n const nextDirection = isActive && sortState.direction === \"asc\" ? \"desc\" : \"asc\";\n const handleClick = () => {\n if (sortable && sortKey && onSort) {\n onSort(sortKey, nextDirection);\n }\n };\n return /* @__PURE__ */ jsx(\n \"th\",\n {\n className: cn(\n \"px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-appsec-text-secondary\",\n sortable && \"cursor-pointer select-none hover:text-appsec-text\",\n className\n ),\n onClick: sortable ? handleClick : void 0,\n ...rest,\n children: /* @__PURE__ */ jsxs(\"span\", { className: \"inline-flex items-center gap-1\", children: [\n children,\n sortable && /* @__PURE__ */ jsx(\"span\", { className: \"text-appsec-text-tertiary\", children: isActive ? sortState.direction === \"asc\" ? /* @__PURE__ */ jsx(ChevronUp, { className: \"h-3.5 w-3.5\" }) : /* @__PURE__ */ jsx(ChevronDown, { className: \"h-3.5 w-3.5\" }) : /* @__PURE__ */ jsx(ChevronsUpDown, { className: \"h-3.5 w-3.5\" }) })\n ] })\n }\n );\n}\nfunction TableCell({ children, className, ...rest }) {\n return /* @__PURE__ */ jsx(\n \"td\",\n {\n className: cn(\"px-4 py-3 text-appsec-text align-middle\", className),\n ...rest,\n children\n }\n );\n}\nvar Table = Object.assign(TableRoot, {\n Header: TableHeader,\n Body: TableBody,\n Row: TableRow,\n Head: TableHead,\n Cell: TableCell\n});\nfunction DragList({\n items,\n onReorder,\n renderItem,\n keyExtractor = (item) => item.id,\n className,\n itemClassName\n}) {\n const [dragIndex, setDragIndex] = useState(null);\n const [overIndex, setOverIndex] = useState(null);\n const handleDragStart = useCallback((index) => {\n setDragIndex(index);\n }, []);\n const handleDragOver = useCallback(\n (e, index) => {\n e.preventDefault();\n if (index !== overIndex) setOverIndex(index);\n },\n [overIndex]\n );\n const handleDrop = useCallback(() => {\n if (dragIndex === null || overIndex === null || dragIndex === overIndex) {\n setDragIndex(null);\n setOverIndex(null);\n return;\n }\n const next = [...items];\n const [removed] = next.splice(dragIndex, 1);\n next.splice(overIndex, 0, removed);\n onReorder(next);\n setDragIndex(null);\n setOverIndex(null);\n }, [dragIndex, overIndex, items, onReorder]);\n const handleDragEnd = useCallback(() => {\n setDragIndex(null);\n setOverIndex(null);\n }, []);\n return /* @__PURE__ */ jsx(\"ul\", { className: cn(\"flex flex-col gap-1\", className), children: items.map((item, index) => /* @__PURE__ */ jsxs(\n \"li\",\n {\n draggable: true,\n onDragStart: () => handleDragStart(index),\n onDragOver: (e) => handleDragOver(e, index),\n onDrop: handleDrop,\n onDragEnd: handleDragEnd,\n className: cn(\n \"flex items-center gap-2 rounded-appsec border border-appsec-border bg-appsec-bg px-3 py-2\",\n \"transition-colors select-none\",\n dragIndex === index && \"opacity-40\",\n overIndex === index && dragIndex !== index && \"border-appsec-primary bg-appsec-primary-light\",\n itemClassName\n ),\n children: [\n /* @__PURE__ */ jsx(\"span\", { className: \"text-appsec-text-tertiary cursor-grab active:cursor-grabbing shrink-0\", children: /* @__PURE__ */ jsx(GripVertical, { className: \"h-4 w-4\" }) }),\n /* @__PURE__ */ jsx(\"div\", { className: \"flex-1 min-w-0\", children: renderItem(item, index) })\n ]\n },\n keyExtractor(item)\n )) });\n}\nvar LABELS7 = {\n dropHere: \"Drop files here, or click to browse\"};\nfunction DropZone({\n onDrop,\n accept,\n multiple = false,\n disabled = false,\n label = LABELS7.dropHere,\n hint,\n icon,\n className\n}) {\n const [isDragOver, setIsDragOver] = useState(false);\n const handleDragOver = useCallback((e) => {\n e.preventDefault();\n if (!disabled) setIsDragOver(true);\n }, [disabled]);\n const handleDragLeave = useCallback(() => {\n setIsDragOver(false);\n }, []);\n const handleDrop = useCallback(\n (e) => {\n e.preventDefault();\n setIsDragOver(false);\n if (disabled) return;\n if (e.dataTransfer.files.length > 0) {\n onDrop(e.dataTransfer.files);\n }\n },\n [disabled, onDrop]\n );\n const handleFileInput = useCallback(\n (e) => {\n if (e.target.files && e.target.files.length > 0) {\n onDrop(e.target.files);\n }\n },\n [onDrop]\n );\n return /* @__PURE__ */ jsxs(\n \"label\",\n {\n className: cn(\n \"flex flex-col items-center justify-center gap-3 rounded-appsec p-8 text-center\",\n \"border-2 border-dashed transition-colors cursor-pointer\",\n isDragOver ? \"border-appsec-primary bg-appsec-primary-light\" : \"border-appsec-border bg-appsec-surface hover:border-appsec-primary hover:bg-appsec-surface-alt\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n ),\n onDragOver: handleDragOver,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n children: [\n /* @__PURE__ */ jsx(\"span\", { className: \"text-appsec-text-tertiary\", children: icon ?? /* @__PURE__ */ jsx(Upload, { className: \"h-8 w-8\" }) }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-1\", children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-sm font-medium text-appsec-text\", children: label }),\n hint && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-secondary\", children: hint })\n ] }),\n /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"file\",\n accept,\n multiple,\n disabled,\n onChange: handleFileInput,\n className: \"sr-only\"\n }\n )\n ]\n }\n );\n}\nvar PAGE_SIZE = 10;\nvar TYPE_OPTIONS2 = [\"all\", \"user\", \"group\"];\nvar getId2 = (value) => typeof value === \"string\" ? value : String(value?._id ?? value?.id ?? \"\");\nvar AddModal = memo(function AddModal2({\n open,\n onClose,\n resourceId,\n moduleId,\n roles,\n groups,\n mode,\n roleModuleMapping,\n createAcl,\n allAcls\n}) {\n const [localMode, setLocalMode] = useState(\n mode === \"groups\" ? \"group\" : \"user\"\n );\n const [selectedUsers, setSelectedUsers] = useState([]);\n const [inputValue, setInputValue] = useState(\"\");\n const [debouncedInput, setDebouncedInput] = useState(\"\");\n const [showDropdown, setShowDropdown] = useState(false);\n const [groupId, setGroupId] = useState(\"\");\n const [roleId, setRoleId] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n const inputRef = useRef(null);\n const dropdownRef = useRef(null);\n const usersQuery = useUsersSearchQuery(debouncedInput);\n const suggestions = useMemo(\n () => (usersQuery.data || []).filter(\n (u) => !selectedUsers.some((s) => s.email === u.email)\n ),\n [usersQuery.data, selectedUsers]\n );\n const filteredRoles = useMemo(() => {\n if (!moduleId) return roles;\n return roles.filter(\n (role) => roleModuleMapping.some(\n (m) => m.roleId?._id === role._id && m.moduleId?._id === moduleId\n )\n );\n }, [roles, roleModuleMapping, moduleId]);\n useEffect(() => {\n if (open) {\n setLocalMode(mode === \"groups\" ? \"group\" : \"user\");\n setSelectedUsers([]);\n setInputValue(\"\");\n setDebouncedInput(\"\");\n setShowDropdown(false);\n setGroupId(\"\");\n setRoleId(\"\");\n setError(\"\");\n setLoading(false);\n }\n }, [open, mode]);\n useEffect(() => {\n const t = setTimeout(() => setDebouncedInput(inputValue.trim()), 300);\n return () => clearTimeout(t);\n }, [inputValue]);\n useEffect(() => {\n if (suggestions.length > 0 && inputValue.trim().length >= 2)\n setShowDropdown(true);\n else setShowDropdown(false);\n }, [suggestions, inputValue]);\n useEffect(() => {\n if (!showDropdown) return;\n const handler = (e) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target))\n setShowDropdown(false);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [showDropdown]);\n const addUser = (user) => {\n setSelectedUsers((prev) => [...prev, user]);\n setInputValue(\"\");\n setDebouncedInput(\"\");\n setShowDropdown(false);\n inputRef.current?.focus();\n };\n const addRawEmail = () => {\n const trimmed = inputValue.trim().toLowerCase();\n if (!trimmed || selectedUsers.some((u) => u.email === trimmed)) return;\n setSelectedUsers((prev) => [\n ...prev,\n { email: trimmed, displayName: trimmed }\n ]);\n setInputValue(\"\");\n setDebouncedInput(\"\");\n setShowDropdown(false);\n };\n const removeUser = (email) => setSelectedUsers((prev) => prev.filter((u) => u.email !== email));\n const handleKeyDown = (e) => {\n if ((e.key === \"Enter\" || e.key === \",\") && inputValue.trim()) {\n e.preventDefault();\n if (suggestions.length > 0) addUser(suggestions[0]);\n else addRawEmail();\n }\n if (e.key === \"Backspace\" && !inputValue && selectedUsers.length > 0)\n setSelectedUsers((prev) => prev.slice(0, -1));\n if (e.key === \"Escape\") setShowDropdown(false);\n };\n const submit = async () => {\n if (localMode === \"user\" && selectedUsers.length === 0) {\n setError(\"Add at least one email.\");\n return;\n }\n if (localMode === \"group\" && !groupId) {\n setError(\"Select a group.\");\n return;\n }\n if (!roleId) {\n setError(\"Select a role.\");\n return;\n }\n setLoading(true);\n setError(\"\");\n try {\n if (localMode === \"group\") {\n await createAcl({\n resource_type: moduleId || \"\",\n resource_id: resourceId,\n group_id: groupId,\n is_inherited: true,\n role: roleId\n });\n } else {\n const existingEmails = allAcls.map((a) => a.user_email);\n const newEmails = selectedUsers.map((u) => u.email).filter((e) => !existingEmails.includes(e));\n if (newEmails.length === 0) {\n setError(\"All selected users already have access.\");\n setLoading(false);\n return;\n }\n await Promise.all(\n newEmails.map(\n (email) => createAcl({\n resource_type: moduleId || \"\",\n resource_id: resourceId,\n user_email: email,\n is_inherited: false,\n role: roleId\n })\n )\n );\n }\n onClose();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to grant access.\");\n } finally {\n setLoading(false);\n }\n };\n return /* @__PURE__ */ jsx(\n Modal,\n {\n open,\n onClose,\n title: \"Add Access\",\n description: \"Grant access to this resource.\",\n size: \"sm\",\n footer: /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n Button,\n {\n variant: \"secondary\",\n size: \"sm\",\n onClick: onClose,\n disabled: loading,\n children: \"Cancel\"\n }\n ),\n /* @__PURE__ */ jsx(\n Button,\n {\n size: \"sm\",\n onClick: submit,\n loading,\n disabled: loading,\n children: localMode === \"group\" ? \"Add Group\" : \"Add Users\"\n }\n )\n ] }),\n children: /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-4\", children: [\n mode === \"both\" && /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-1 p-1 rounded-appsec bg-appsec-surface border border-appsec-border\", children: [\"user\", \"group\"].map((m) => /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n setLocalMode(m);\n setError(\"\");\n },\n className: cn(\n \"flex-1 py-1.5 text-xs font-medium rounded transition-colors capitalize\",\n localMode === m ? \"bg-appsec-bg text-appsec-text shadow-sm border border-appsec-border\" : \"text-appsec-text-secondary hover:text-appsec-text\"\n ),\n children: m === \"user\" ? \"By Email\" : \"By Group\"\n },\n m\n )) }),\n localMode === \"user\" ? /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [\n /* @__PURE__ */ jsx(\"label\", { className: \"text-sm font-medium text-appsec-text\", children: \"Add people\" }),\n /* @__PURE__ */ jsxs(\"div\", { ref: dropdownRef, className: \"relative\", children: [\n /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: cn(\n \"flex flex-wrap gap-1.5 p-2 min-h-10 rounded-appsec border bg-appsec-bg cursor-text transition-colors\",\n showDropdown ? \"border-appsec-primary\" : \"border-appsec-border\"\n ),\n onClick: () => inputRef.current?.focus(),\n children: [\n selectedUsers.map((u) => /* @__PURE__ */ jsx(\n Chip,\n {\n label: u.displayName !== u.email ? u.displayName : u.email,\n onRemove: () => removeUser(u.email)\n },\n u.email\n )),\n /* @__PURE__ */ jsx(\n \"input\",\n {\n ref: inputRef,\n type: \"text\",\n value: inputValue,\n onChange: (e) => setInputValue(e.target.value),\n onKeyDown: handleKeyDown,\n placeholder: selectedUsers.length === 0 ? \"Search by name or email\\u2026\" : \"\",\n className: \"flex-1 min-w-32 bg-transparent outline-none text-sm text-appsec-text placeholder:text-appsec-text-tertiary\"\n }\n ),\n usersQuery.isFetching && /* @__PURE__ */ jsx(\"span\", { className: \"self-center ml-1\", children: /* @__PURE__ */ jsxs(\n \"svg\",\n {\n className: \"animate-spin h-3.5 w-3.5 text-appsec-text-secondary\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n children: [\n /* @__PURE__ */ jsx(\n \"circle\",\n {\n className: \"opacity-25\",\n cx: \"12\",\n cy: \"12\",\n r: \"10\",\n stroke: \"currentColor\",\n strokeWidth: \"4\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"path\",\n {\n className: \"opacity-75\",\n fill: \"currentColor\",\n d: \"M4 12a8 8 0 018-8v8H4z\"\n }\n )\n ]\n }\n ) })\n ]\n }\n ),\n showDropdown && suggestions.length > 0 && /* @__PURE__ */ jsx(\"div\", { className: \"absolute z-50 mt-1 w-full rounded-appsec border border-appsec-border bg-appsec-bg shadow-lg overflow-hidden\", children: suggestions.map((u) => /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onMouseDown: (e) => {\n e.preventDefault();\n addUser(u);\n },\n className: \"flex items-center gap-3 w-full px-3 py-2.5 text-left hover:bg-appsec-surface transition-colors\",\n children: [\n /* @__PURE__ */ jsx(Avatar, { name: u.displayName, size: \"sm\" }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col min-w-0\", children: [\n /* @__PURE__ */ jsx(\"span\", { className: \"text-sm font-medium text-appsec-text truncate\", children: u.displayName }),\n /* @__PURE__ */ jsx(\"span\", { className: \"text-xs text-appsec-text-secondary truncate\", children: u.email })\n ] })\n ]\n },\n u.email\n )) })\n ] }),\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-tertiary\", children: \"Press Enter or comma to add a raw email address.\" })\n ] }) : /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [\n /* @__PURE__ */ jsx(\"label\", { className: \"text-sm font-medium text-appsec-text\", children: \"Group\" }),\n /* @__PURE__ */ jsxs(\n \"select\",\n {\n value: groupId,\n onChange: (e) => setGroupId(e.target.value),\n className: \"h-9 text-sm rounded-appsec border border-appsec-border bg-appsec-bg px-3 pr-8 appearance-none outline-none focus:border-appsec-primary text-appsec-text\",\n children: [\n /* @__PURE__ */ jsx(\"option\", { value: \"\", children: \"Select group\\u2026\" }),\n groups.map((g) => /* @__PURE__ */ jsxs(\"option\", { value: g._id, children: [\n g.name,\n g.description ? ` \\u2014 ${g.description}` : \"\"\n ] }, g._id))\n ]\n }\n )\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [\n /* @__PURE__ */ jsx(\"label\", { className: \"text-sm font-medium text-appsec-text\", children: \"Role\" }),\n /* @__PURE__ */ jsxs(\n \"select\",\n {\n value: roleId,\n onChange: (e) => setRoleId(e.target.value),\n className: \"h-9 text-sm rounded-appsec border border-appsec-border bg-appsec-bg px-3 pr-8 appearance-none outline-none focus:border-appsec-primary text-appsec-text\",\n children: [\n /* @__PURE__ */ jsx(\"option\", { value: \"\", children: \"Select role\\u2026\" }),\n filteredRoles.map((r) => /* @__PURE__ */ jsx(\"option\", { value: r._id, children: r.name }, r._id))\n ]\n }\n )\n ] }),\n error && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-danger\", children: error })\n ] })\n }\n );\n});\nvar EditModal = memo(function EditModal2({\n open,\n onClose,\n entry,\n roles,\n groups,\n moduleId,\n roleModuleMapping,\n bulkUpdateAcl\n}) {\n const [roleId, setRoleId] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n const filteredRoles = useMemo(() => {\n if (!moduleId) return roles;\n return roles.filter(\n (role) => roleModuleMapping.some(\n (m) => m.roleId?._id === role._id && m.moduleId?._id === moduleId\n )\n );\n }, [roles, roleModuleMapping, moduleId]);\n useEffect(() => {\n if (open && entry) {\n setRoleId(entry.role?._id || \"\");\n setError(\"\");\n setLoading(false);\n }\n }, [open, entry]);\n const submit = async () => {\n if (!entry || !roleId) {\n setError(\"Select a role.\");\n return;\n }\n setLoading(true);\n setError(\"\");\n try {\n await bulkUpdateAcl([{ _id: entry._id, role: roleId }]);\n onClose();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to update role.\");\n } finally {\n setLoading(false);\n }\n };\n const isGroup = !!entry?.groupId;\n const groupName = isGroup ? groups.find((g) => g._id === entry?.groupId)?.name : null;\n const subject = isGroup ? groupName || \"Unknown Group\" : entry?.user_email || \"\";\n return /* @__PURE__ */ jsx(\n Modal,\n {\n open,\n onClose,\n title: \"Edit Role\",\n size: \"sm\",\n footer: /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n Button,\n {\n variant: \"secondary\",\n size: \"sm\",\n onClick: onClose,\n disabled: loading,\n children: \"Cancel\"\n }\n ),\n /* @__PURE__ */ jsx(\n Button,\n {\n size: \"sm\",\n onClick: submit,\n loading,\n disabled: loading || !roleId,\n children: \"Save\"\n }\n )\n ] }),\n children: /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-4\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2 p-2 rounded-appsec bg-appsec-surface\", children: [\n /* @__PURE__ */ jsx(Avatar, { name: subject, size: \"sm\" }),\n /* @__PURE__ */ jsxs(\"div\", { children: [\n /* @__PURE__ */ jsx(\"p\", { className: \"text-sm font-medium text-appsec-text\", children: subject }),\n /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-secondary\", children: isGroup ? \"Group\" : \"User\" })\n ] })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [\n /* @__PURE__ */ jsx(\"label\", { className: \"text-sm font-medium text-appsec-text\", children: \"Role\" }),\n /* @__PURE__ */ jsxs(\n \"select\",\n {\n value: roleId,\n onChange: (e) => setRoleId(e.target.value),\n className: \"h-9 text-sm rounded-appsec border border-appsec-border bg-appsec-bg px-3 pr-8 appearance-none outline-none focus:border-appsec-primary text-appsec-text\",\n children: [\n /* @__PURE__ */ jsx(\"option\", { value: \"\", children: \"Select role\\u2026\" }),\n filteredRoles.map((r) => /* @__PURE__ */ jsx(\"option\", { value: r._id, children: r.name }, r._id))\n ]\n }\n )\n ] }),\n error && /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-danger\", children: error })\n ] })\n }\n );\n});\nvar AccessListPanel = memo(function AccessListPanel2({\n resourceId,\n moduleId,\n mode = \"both\",\n canAddUser = false,\n canEditUser = false,\n canDeleteUser = false,\n canAddGroup = false,\n canEditGroup = false,\n canDeleteGroup = false\n}) {\n const uPerms = {\n canAdd: canAddUser,\n canEdit: canEditUser,\n canDelete: canDeleteUser,\n canBulkEdit: canEditUser\n };\n const gPerms = {\n canAdd: canAddGroup,\n canEdit: canEditGroup,\n canDelete: canDeleteGroup,\n canBulkEdit: canEditGroup\n };\n const { appId } = useAppsec();\n const toast = useToast();\n const appQuery = useAppQuery(appId);\n const appMongoId = appQuery.data?.data?.[0]?._id || \"\";\n const aclsQuery = useAclsQuery(appMongoId, resourceId);\n const rolesQuery = useAllRolesQuery(appMongoId);\n const groupsQuery = useGroupsQuery(appMongoId);\n const roleModuleMappingQuery = useRoleModuleMappingQuery(appMongoId);\n const createAclMutation = useCreateAclMutation();\n const deleteAclMutation = useDeleteAclMutation();\n const bulkUpdateAclMutation = useBulkUpdateAclMutation();\n const allAcls = aclsQuery.data?.data || [];\n const roles = rolesQuery.data?.data || [];\n const groups = groupsQuery.data?.data || [];\n const roleModuleMapping = roleModuleMappingQuery.data?.data || [];\n const entries = allAcls;\n const resolvedModuleId = useMemo(() => {\n if (moduleId) return moduleId;\n const existing = entries.find((e) => e.resourceType);\n return getId2(existing?.resourceType);\n }, [moduleId, entries]);\n const [selected, setSelected] = useState(/* @__PURE__ */ new Set());\n const [bulkRole, setBulkRole] = useState(\"\");\n const [removing, setRemoving] = useState(null);\n const [bulkLoading, setBulkLoading] = useState(false);\n const [confirmRemove, setConfirmRemove] = useState(null);\n const [page, setPage] = useState(0);\n const [search, setSearch] = useState(\"\");\n const debouncedSearch = useDebouncedValue(search.trim(), 300);\n const [roleFilter, setRoleFilter] = useState(\"\");\n const [typeFilter, setTypeFilter] = useState(\"all\");\n const [addModalOpen, setAddModalOpen] = useState(false);\n const [editEntry, setEditEntry] = useState(null);\n useEffect(() => {\n if (mode === \"users\") setTypeFilter(\"user\");\n else if (mode === \"groups\") setTypeFilter(\"group\");\n else setTypeFilter(\"all\");\n }, [mode]);\n const filteredRoles = useMemo(() => {\n if (!resolvedModuleId) return roles;\n return roles.filter(\n (role) => roleModuleMapping.some(\n (m) => m.roleId?._id === role._id && m.moduleId?._id === resolvedModuleId\n )\n );\n }, [roles, roleModuleMapping, resolvedModuleId]);\n const isGroupEntry = (entry) => !!entry.groupId;\n const groupFor = (groupId) => groups.find((g) => g._id === groupId);\n const normalizedEntries = useMemo(\n () => entries.map((e) => ({\n ...e,\n id: e.id || e._id\n })),\n [entries]\n );\n const availableRoles = useMemo(\n () => [\n ...new Set(normalizedEntries.map((e) => e.role?.name).filter(Boolean))\n ].sort(),\n [normalizedEntries]\n );\n const visibleEntries = useMemo(() => {\n let result = normalizedEntries;\n if (typeFilter !== \"all\") {\n result = result.filter(\n (e) => typeFilter === \"group\" ? isGroupEntry(e) : !isGroupEntry(e)\n );\n }\n if (roleFilter) {\n result = result.filter((e) => e.role?.name === roleFilter);\n }\n if (debouncedSearch) {\n result = result.filter((e) => {\n const group = isGroupEntry(e) ? groupFor(e.groupId) : null;\n return matchesAny(debouncedSearch, [\n isGroupEntry(e) ? group?.name : e.user_email,\n isGroupEntry(e) ? \"group\" : \"user\",\n group?.description,\n e.user_email,\n e.role?.name,\n e.grantedBy ? decodeURIComponent(e.grantedBy) : \"\",\n e.grantedAt,\n e.resourceId\n ]);\n });\n }\n return result;\n }, [normalizedEntries, typeFilter, roleFilter, debouncedSearch]);\n useEffect(() => {\n setPage(0);\n }, [search, roleFilter, typeFilter, resourceId]);\n const totalPages = Math.max(1, Math.ceil(visibleEntries.length / PAGE_SIZE));\n const pageEntries = useMemo(\n () => visibleEntries.slice(page * PAGE_SIZE, (page + 1) * PAGE_SIZE),\n [visibleEntries, page]\n );\n const allPageSelected = useMemo(\n () => pageEntries.length > 0 && pageEntries.every((e) => selected.has(e.id)),\n [pageEntries, selected]\n );\n const toggleAll = useCallback(\n () => setSelected((s) => {\n const n = new Set(s);\n if (allPageSelected) pageEntries.forEach((e) => n.delete(e.id));\n else pageEntries.forEach((e) => n.add(e.id));\n return n;\n }),\n [allPageSelected, pageEntries]\n );\n const toggleOne = (id) => setSelected((s) => {\n const n = new Set(s);\n n.has(id) ? n.delete(id) : n.add(id);\n return n;\n });\n const handleRemove = async (entryId) => {\n setRemoving(entryId);\n try {\n await deleteAclMutation.mutateAsync(entryId);\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Failed to remove access.\"\n );\n } finally {\n setRemoving(null);\n setConfirmRemove(null);\n }\n };\n const handleBulkApply = async () => {\n if (!bulkRole || selected.size === 0) return;\n setBulkLoading(true);\n try {\n const payload = [...selected].map((id) => ({ _id: id, role: bulkRole }));\n await bulkUpdateAclMutation.mutateAsync(payload);\n setSelected(/* @__PURE__ */ new Set());\n setBulkRole(\"\");\n } catch (err) {\n toast.error(\n err instanceof Error ? err.message : \"Failed to update roles.\"\n );\n } finally {\n setBulkLoading(false);\n }\n };\n const isLoading = appQuery.isLoading || aclsQuery.isLoading || rolesQuery.isLoading || groupsQuery.isLoading;\n if (isLoading) {\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex items-center justify-center py-8 text-appsec-text-secondary text-sm\", children: \"Loading\\u2026\" });\n }\n const showAddUser = mode !== \"groups\" && uPerms.canAdd;\n const showAddGroup = mode !== \"users\" && gPerms.canAdd;\n const showAddButton = showAddUser || showAddGroup;\n const showBulkCheckbox = uPerms.canBulkEdit || gPerms.canBulkEdit;\n const addModalMode = showAddUser && showAddGroup ? \"both\" : showAddGroup ? \"groups\" : \"users\";\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-2\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2 flex-wrap\", children: [\n /* @__PURE__ */ jsx(\n SearchBar,\n {\n value: search,\n onChange: setSearch,\n placeholder: \"Search by email or group name\\u2026\",\n className: \"flex-1 min-w-40\"\n }\n ),\n /* @__PURE__ */ jsxs(\n \"select\",\n {\n value: roleFilter,\n onChange: (e) => setRoleFilter(e.target.value),\n className: \"h-8 text-xs rounded-appsec border border-appsec-border bg-appsec-bg px-2 pr-6 appearance-none outline-none focus:border-appsec-primary text-appsec-text\",\n children: [\n /* @__PURE__ */ jsx(\"option\", { value: \"\", children: \"All Roles\" }),\n availableRoles.map((r) => /* @__PURE__ */ jsx(\"option\", { value: r, children: r }, r))\n ]\n }\n ),\n mode === \"both\" && /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-0.5 p-0.5 rounded-appsec bg-appsec-surface border border-appsec-border\", children: TYPE_OPTIONS2.map((t) => /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setTypeFilter(t),\n className: cn(\n \"px-2.5 py-1 text-[11px] font-medium rounded capitalize transition-colors\",\n typeFilter === t ? \"bg-appsec-bg text-appsec-text shadow-sm border border-appsec-border\" : \"text-appsec-text-secondary hover:text-appsec-text\"\n ),\n children: t\n },\n t\n )) }),\n showAddButton && /* @__PURE__ */ jsxs(\n Button,\n {\n size: \"sm\",\n iconLeft: /* @__PURE__ */ jsx(Plus, { className: \"h-3.5 w-3.5\" }),\n onClick: () => setAddModalOpen(true),\n children: [\n \"Add \",\n showAddGroup && !showAddUser ? \"Group\" : \"User\"\n ]\n }\n )\n ] }),\n selected.size > 0 && showBulkCheckbox && /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-2 px-3 py-2 rounded-appsec bg-appsec-primary-light border border-appsec-primary/30\", children: [\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-xs font-semibold text-appsec-primary\", children: [\n selected.size,\n \" selected\"\n ] }),\n /* @__PURE__ */ jsxs(\n \"select\",\n {\n value: bulkRole,\n onChange: (e) => setBulkRole(e.target.value),\n className: \"h-7 text-xs rounded-appsec border px-2\",\n children: [\n /* @__PURE__ */ jsx(\"option\", { value: \"\", children: \"Change role\\u2026\" }),\n filteredRoles.map((r) => /* @__PURE__ */ jsx(\"option\", { value: r._id, children: r.name }, r._id))\n ]\n }\n ),\n /* @__PURE__ */ jsx(\n Button,\n {\n size: \"sm\",\n variant: \"secondary\",\n disabled: !bulkRole || bulkLoading,\n onClick: handleBulkApply,\n children: \"Apply\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n onClick: () => setSelected(/* @__PURE__ */ new Set()),\n className: \"text-xs ml-auto\",\n children: \"\\u2715 Clear\"\n }\n )\n ] }),\n /* @__PURE__ */ jsx(\"div\", { className: \"border rounded-appsec overflow-hidden\", children: /* @__PURE__ */ jsx(\"div\", { className: \"overflow-x-auto\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col divide-y min-w-[640px]\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-3 px-3 py-2 bg-appsec-surface\", children: [\n showBulkCheckbox && /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n checked: allPageSelected,\n onChange: toggleAll,\n className: \"shrink-0\"\n }\n ),\n /* @__PURE__ */ jsx(\"span\", { className: \"min-w-0 flex-1 text-xs font-semibold\", children: \"Subject\" }),\n /* @__PURE__ */ jsx(\"span\", { className: \"w-14 shrink-0 text-xs font-semibold\", children: \"Type\" }),\n /* @__PURE__ */ jsx(\"span\", { className: \"w-36 shrink-0 text-xs font-semibold\", children: \"Role\" }),\n /* @__PURE__ */ jsx(\"span\", { className: \"w-28 shrink-0 text-xs font-semibold\", children: \"Granted\" }),\n /* @__PURE__ */ jsx(\"span\", { className: \"w-32 shrink-0 text-xs font-semibold\", children: \"Granted By\" }),\n (uPerms.canEdit || gPerms.canEdit) && /* @__PURE__ */ jsx(\"span\", { className: \"w-8 shrink-0\" }),\n (uPerms.canDelete || gPerms.canDelete) && /* @__PURE__ */ jsx(\"span\", { className: \"w-8 shrink-0\" })\n ] }),\n normalizedEntries.length === 0 ? /* @__PURE__ */ jsxs(\"p\", { className: \"text-xs text-appsec-text-tertiary py-4 text-center\", children: [\n \"No one has access yet.\",\n showAddButton ? \" Use Add to grant access.\" : \"\"\n ] }) : pageEntries.length === 0 ? /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-appsec-text-tertiary py-4 text-center\", children: \"No results match your filters.\" }) : pageEntries.map((entry) => {\n const isSelected = selected.has(entry.id);\n const group = groupFor(entry.groupId);\n const isGroup = isGroupEntry(entry);\n const perms = isGroup ? gPerms : uPerms;\n const canCheck = perms.canBulkEdit;\n const canEdit = perms.canEdit;\n const canDelete = perms.canDelete;\n const subjectLabel = isGroup ? group?.name || \"Unknown Group\" : entry.user_email;\n const subjectDetail = isGroup ? `${group?.users?.length || 0} members` : entry.user_email;\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: cn(\n \"flex min-w-0 items-center gap-3 px-3 py-2\",\n isSelected && \"bg-appsec-primary-light\"\n ),\n children: [\n showBulkCheckbox && /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n checked: isSelected,\n disabled: !canCheck,\n onChange: () => canCheck && toggleOne(entry.id),\n className: \"shrink-0 disabled:opacity-30\"\n }\n ),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex min-w-0 flex-1 items-center gap-2\", children: [\n /* @__PURE__ */ jsx(\n Avatar,\n {\n name: subjectLabel,\n size: \"xs\"\n }\n ),\n /* @__PURE__ */ jsxs(\"div\", { className: \"min-w-0\", children: [\n /* @__PURE__ */ jsx(Tooltip, { label: subjectLabel, className: \"w-full min-w-0\", children: /* @__PURE__ */ jsx(\"span\", { className: \"truncate text-xs font-medium block\", children: subjectLabel }) }),\n /* @__PURE__ */ jsx(Tooltip, { label: subjectDetail, className: \"w-full min-w-0\", children: /* @__PURE__ */ jsx(\"span\", { className: \"truncate text-[10px] text-gray-500 block\", children: subjectDetail }) })\n ] })\n ] }),\n /* @__PURE__ */ jsx(\"div\", { className: \"w-14 shrink-0\", children: /* @__PURE__ */ jsx(Badge, { label: isGroup ? \"Group\" : \"User\", variant: \"neutral\" }) }),\n /* @__PURE__ */ jsx(\"div\", { className: \"w-36 min-w-0 shrink-0\", children: /* @__PURE__ */ jsx(\n Badge,\n {\n label: entry.role?.name || \"\\u2014\",\n variant: \"neutral\",\n className: \"max-w-full whitespace-normal break-words rounded-xl px-3 py-2 text-left leading-snug\"\n }\n ) }),\n /* @__PURE__ */ jsx(\"div\", { className: \"w-28 shrink-0 text-[10px] text-gray-500\", children: new Date(entry.grantedAt).toLocaleDateString() }),\n /* @__PURE__ */ jsx(\n Tooltip,\n {\n label: entry.grantedBy ? decodeURIComponent(entry.grantedBy) : \"\\u2014\",\n className: \"w-32 shrink-0 min-w-0\",\n children: /* @__PURE__ */ jsx(\"span\", { className: \"truncate text-[10px] text-appsec-text-secondary block w-full\", children: entry.grantedBy ? decodeURIComponent(entry.grantedBy) : \"\\u2014\" })\n }\n ),\n (uPerms.canEdit || gPerms.canEdit) && (canEdit ? /* @__PURE__ */ jsx(\n \"button\",\n {\n onClick: () => setEditEntry(entry),\n className: \"w-8 shrink-0 text-appsec-text-secondary hover:text-appsec-text transition-colors rounded-appsec\",\n children: /* @__PURE__ */ jsx(Pencil, { className: \"h-3.5 w-3.5\" })\n }\n ) : /* @__PURE__ */ jsx(\"span\", { className: \"w-8 shrink-0\" })),\n (uPerms.canDelete || gPerms.canDelete) && (canDelete ? /* @__PURE__ */ jsx(\n \"button\",\n {\n disabled: removing === entry.id,\n onClick: () => setConfirmRemove(entry.id),\n className: \"w-8 shrink-0 text-appsec-danger hover:text-appsec-danger/80 disabled:opacity-50 transition-colors\",\n children: /* @__PURE__ */ jsx(Trash2, { className: \"h-3.5 w-3.5\" })\n }\n ) : /* @__PURE__ */ jsx(\"span\", { className: \"w-8 shrink-0\" }))\n ]\n },\n entry.id\n );\n })\n ] }) }) }),\n totalPages > 1 && /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between px-1\", children: [\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-tertiary\", children: [\n page * PAGE_SIZE + 1,\n \"\\u2013\",\n Math.min((page + 1) * PAGE_SIZE, visibleEntries.length),\n \" of\",\n \" \",\n visibleEntries.length,\n visibleEntries.length !== normalizedEntries.length && ` (filtered from ${normalizedEntries.length})`\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center gap-1\", children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setPage((p) => Math.max(0, p - 1)),\n disabled: page === 0,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 transition-colors\",\n children: /* @__PURE__ */ jsx(ChevronLeft, { className: \"h-3.5 w-3.5\" })\n }\n ),\n /* @__PURE__ */ jsxs(\"span\", { className: \"text-[11px] text-appsec-text-secondary px-1\", children: [\n page + 1,\n \" / \",\n totalPages\n ] }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => setPage((p) => Math.min(totalPages - 1, p + 1)),\n disabled: page >= totalPages - 1,\n className: \"p-1 rounded-appsec text-appsec-text-secondary hover:text-appsec-text disabled:opacity-30 transition-colors\",\n children: /* @__PURE__ */ jsx(ChevronRight, { className: \"h-3.5 w-3.5\" })\n }\n )\n ] })\n ] }),\n /* @__PURE__ */ jsx(\n ConfirmDialog,\n {\n open: !!confirmRemove,\n onClose: () => setConfirmRemove(null),\n onConfirm: () => confirmRemove && handleRemove(confirmRemove),\n title: \"Remove access\",\n message: \"Remove this subject's access?\",\n confirmLabel: \"Remove\",\n variant: \"danger\",\n loading: removing !== null\n }\n ),\n /* @__PURE__ */ jsx(\n AddModal,\n {\n open: addModalOpen,\n onClose: () => setAddModalOpen(false),\n resourceId,\n moduleId: resolvedModuleId,\n roles,\n groups,\n mode: addModalMode,\n roleModuleMapping,\n createAcl: (data) => createAclMutation.mutateAsync(data),\n allAcls\n }\n ),\n /* @__PURE__ */ jsx(\n EditModal,\n {\n open: !!editEntry,\n onClose: () => setEditEntry(null),\n entry: editEntry,\n roles,\n groups,\n moduleId: resolvedModuleId,\n roleModuleMapping,\n bulkUpdateAcl: (data) => bulkUpdateAclMutation.mutateAsync(data)\n }\n )\n ] });\n});\nvar ICONS2 = {\n \"application-access\": /* @__PURE__ */ jsx(Layers, { className: \"h-4 w-4\" }),\n \"rbac-management\": /* @__PURE__ */ jsx(Shield, { className: \"h-4 w-4\" })\n};\nfunction AccessControlSidebar({\n items,\n activeKey,\n onChange,\n className,\n classNames = {},\n title,\n description,\n showWhenSingle = false\n}) {\n const visibleItems = items.filter((item) => !item.hidden);\n if (visibleItems.length === 0 || visibleItems.length === 1 && !showWhenSingle) {\n return null;\n }\n return /* @__PURE__ */ jsxs(\n \"aside\",\n {\n className: cn(\n \"w-60 shrink-0 border-r border-appsec-border bg-appsec-bg p-3\",\n className,\n classNames.sidebarContainer\n ),\n children: [\n (title || description) && /* @__PURE__ */ jsxs(\"div\", { className: cn(\"mb-5\", classNames.sidebarHeader), children: [\n title && /* @__PURE__ */ jsx(\n \"p\",\n {\n className: cn(\n \"text-sm font-semibold text-appsec-text\",\n classNames.sidebarTitle\n ),\n children: title\n }\n ),\n description && /* @__PURE__ */ jsx(\n \"p\",\n {\n className: cn(\n \"mt-1 text-xs text-appsec-text-secondary\",\n classNames.sidebarDescription\n ),\n children: description\n }\n )\n ] }),\n /* @__PURE__ */ jsx(\n \"nav\",\n {\n className: cn(\n \"flex flex-col gap-1\",\n classNames.sidebarNav\n ),\n children: visibleItems.map((item) => {\n const isActive = item.key === activeKey;\n const icon = item.icon === void 0 ? ICONS2[item.key] : item.icon;\n return /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onClick: () => onChange(item.key),\n className: cn(\n \"flex min-w-0 items-start gap-3 rounded-appsec px-4 py-3 text-left transition-colors\",\n isActive ? \"border border-appsec-border bg-appsec-bg text-appsec-text shadow-sm\" : \"text-appsec-text-secondary hover:bg-appsec-surface hover:text-appsec-text\",\n classNames.navItem,\n isActive ? classNames.activeNavItem : classNames.inactiveNavItem\n ),\n children: [\n icon !== false && /* @__PURE__ */ jsx(\"span\", { className: \"mt-0.5 shrink-0 text-appsec-text-secondary\", children: icon }),\n /* @__PURE__ */ jsxs(\"span\", { className: cn(\"min-w-0\", classNames.navContent), children: [\n /* @__PURE__ */ jsx(\n \"span\",\n {\n className: cn(\n \"block truncate text-sm font-semibold\",\n classNames.navLabel\n ),\n children: item.label\n }\n ),\n item.description && /* @__PURE__ */ jsx(\n \"span\",\n {\n className: cn(\n \"mt-0.5 block text-xs leading-snug text-appsec-text-tertiary\",\n classNames.navDescription\n ),\n children: item.description\n }\n )\n ] })\n ]\n },\n item.key\n );\n })\n }\n )\n ]\n }\n );\n}\nvar DEFAULT_RESTRICTED_FALLBACK = /* @__PURE__ */ jsx(\"div\", { className: \"flex min-h-56 items-center justify-center rounded-appsec border border-appsec-border bg-appsec-surface text-sm text-appsec-text-secondary\", children: \"You do not have permission to view access control.\" });\nvar DEFAULT_LOADING_FALLBACK = /* @__PURE__ */ jsx(\"div\", { className: \"flex min-h-56 items-center justify-center rounded-appsec border border-appsec-border bg-appsec-surface text-sm text-appsec-text-secondary\", children: \"Loading access control...\" });\nfunction getFirstVisibleSection(props, preferred) {\n const showApplicationAccess = props.showApplicationAccess === true;\n const showRBACManagement = props.showRBACManagement === true;\n if (preferred === \"application-access\" && showApplicationAccess) return preferred;\n if (preferred === \"rbac-management\" && showRBACManagement) return preferred;\n if (showApplicationAccess) return \"application-access\";\n return \"rbac-management\";\n}\nfunction AccessControl(props) {\n const { appId } = useAppsec();\n const [activeSection, setActiveSection] = useState(\n () => getFirstVisibleSection(props, props.defaultSection)\n );\n const sidebarItems = useMemo(() => {\n const DEFAULT_ORDER = [\n \"application-access\",\n \"rbac-management\"\n ];\n const itemDefs = {\n \"application-access\": {\n key: \"application-access\",\n label: props.sidebarItems?.[\"application-access\"]?.title ?? \"Application Access\",\n description: props.sidebarItems?.[\"application-access\"]?.description ?? \"Manage users and groups for this application.\",\n pageTitle: props.sidebarItems?.[\"application-access\"]?.pageTitle,\n pageDescription: props.sidebarItems?.[\"application-access\"]?.pageDescription,\n pageTitleClassName: props.sidebarItems?.[\"application-access\"]?.pageTitleClassName,\n pageDescriptionClassName: props.sidebarItems?.[\"application-access\"]?.pageDescriptionClassName,\n icon: props.sidebarItems?.[\"application-access\"]?.icon,\n hidden: props.showApplicationAccess !== true\n },\n \"rbac-management\": {\n key: \"rbac-management\",\n label: props.sidebarItems?.[\"rbac-management\"]?.title ?? \"RBAC Management\",\n description: props.sidebarItems?.[\"rbac-management\"]?.description ?? \"Manage access across application modules.\",\n pageTitle: props.sidebarItems?.[\"rbac-management\"]?.pageTitle,\n pageDescription: props.sidebarItems?.[\"rbac-management\"]?.pageDescription,\n pageTitleClassName: props.sidebarItems?.[\"rbac-management\"]?.pageTitleClassName,\n pageDescriptionClassName: props.sidebarItems?.[\"rbac-management\"]?.pageDescriptionClassName,\n icon: props.sidebarItems?.[\"rbac-management\"]?.icon,\n hidden: props.showRBACManagement !== true\n }\n };\n const configuredOrder = props.sidebarItems ? Object.keys(props.sidebarItems) : DEFAULT_ORDER;\n const orderedKeys = [\n ...configuredOrder,\n ...DEFAULT_ORDER.filter((k) => !configuredOrder.includes(k))\n ];\n return orderedKeys.map((key) => itemDefs[key]);\n }, [\n props.showApplicationAccess,\n props.showRBACManagement,\n props.sidebarItems\n ]);\n useEffect(() => {\n const currentItem = sidebarItems.find((item) => item.key === activeSection);\n if (currentItem && !currentItem.hidden) return;\n const nextItem = sidebarItems.find((item) => !item.hidden);\n if (nextItem) setActiveSection(nextItem.key);\n }, [activeSection, sidebarItems]);\n if (props.isLoading) {\n return /* @__PURE__ */ jsx(Fragment, { children: props.loadingFallback ?? DEFAULT_LOADING_FALLBACK });\n }\n if (props.isRestricted) {\n return /* @__PURE__ */ jsx(Fragment, { children: props.restrictedFallback ?? DEFAULT_RESTRICTED_FALLBACK });\n }\n const permissions = props.permissions ?? {};\n const hasVisibleSection = sidebarItems.some((item) => !item.hidden);\n const activeSidebarItem = sidebarItems.find((item) => item.key === activeSection);\n const pageTitle = activeSidebarItem?.pageTitle ?? props.title ?? activeSidebarItem?.label ?? \"Access Control\";\n const pageDescription = activeSidebarItem?.pageDescription ?? props.description ?? `Manage access for ${appId}.`;\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: cn(\n \"flex min-h-[560px] flex-row overflow-hidden rounded-appsec border border-appsec-border bg-appsec-bg font-appsec\",\n props.className,\n props.classNames?.pageContainer\n ),\n children: [\n /* @__PURE__ */ jsx(\n AccessControlSidebar,\n {\n items: sidebarItems,\n activeKey: activeSection,\n onChange: setActiveSection,\n classNames: props.classNames?.sidebar,\n title: props.sidebarTitle,\n description: props.sidebarDescription,\n showWhenSingle: props.showSidebarWhenSingle\n }\n ),\n /* @__PURE__ */ jsx(\n \"main\",\n {\n className: cn(\n \"min-w-0 flex-1 bg-appsec-bg p-4\",\n props.classNames?.contentPanel\n ),\n children: /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col h-full rounded-appsec border border-appsec-border overflow-hidden\", children: [\n /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: cn(\n \"border-b border-appsec-border px-5 py-4\",\n props.classNames?.pageHeader\n ),\n children: [\n /* @__PURE__ */ jsx(\n \"h1\",\n {\n className: cn(\n \"text-xl font-bold text-appsec-text\",\n props.classNames?.pageTitle,\n activeSidebarItem?.pageTitleClassName\n ),\n children: pageTitle\n }\n ),\n pageDescription && /* @__PURE__ */ jsx(\n \"p\",\n {\n className: cn(\n \"mt-1 text-sm text-appsec-text-secondary\",\n props.classNames?.pageDescription,\n activeSidebarItem?.pageDescriptionClassName\n ),\n children: pageDescription\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: cn(\n \"p-4 flex-1 overflow-y-auto\",\n props.classNames?.contentArea\n ),\n children: [\n !hasVisibleSection && /* @__PURE__ */ jsx(\"div\", { className: \"flex min-h-40 items-center justify-center rounded-appsec border border-appsec-border bg-appsec-surface text-sm text-appsec-text-secondary\", children: \"No access control sections are enabled.\" }),\n activeSection === \"application-access\" && props.showApplicationAccess === true && (props.resourceId ? /* @__PURE__ */ jsx(\n AccessListPanel,\n {\n resourceId: props.resourceId,\n moduleId: props.moduleId,\n mode: props.accessMode ?? \"both\",\n canAddUser: permissions.canAddUser,\n canEditUser: permissions.canEditUser,\n canDeleteUser: permissions.canDeleteUser,\n canAddGroup: permissions.canAddGroup,\n canEditGroup: permissions.canEditGroup,\n canDeleteGroup: permissions.canDeleteGroup\n }\n ) : /* @__PURE__ */ jsx(\"div\", { className: \"flex min-h-40 items-center justify-center rounded-appsec border border-appsec-border bg-appsec-surface text-sm text-appsec-text-secondary\", children: \"No resource selected.\" })),\n activeSection === \"rbac-management\" && props.showRBACManagement === true && /* @__PURE__ */ jsx(RBACManagement, {})\n ]\n }\n )\n ] })\n }\n )\n ]\n }\n );\n}\nvar AccessControlPage = AccessControl;\n\nexport { AccessControl, AccessControlPage, AccessListPanel, AppRegistration, AppsecProvider, Avatar, Badge, Button, Chip, ConfigTab, ConfirmDialog, CsvImportButton, DragList, DropZone, EmptyState, Input, Modal, ModuleTabContent, OnboardingStepper, RBACConfiguration, RBACManagement, RbacQueryProvider, SearchBar, Select, ShareAccessModal, TabPanel, Table, Tabs, ToastProvider, UserGroupsTab, queryClient, useAppsec, useToast };\n//# sourceMappingURL=index.mjs.map\n//# sourceMappingURL=index.mjs.map"],"names":["queryClient","QueryClient","defaultOptions","queries","staleTime","gcTime","retry","failureCount","error","Error","message","includes","refetchOnWindowFocus","refetchOnMount","refetchOnReconnect","mutations","RbacQueryProvider","children","jsx","QueryClientProvider","client","cn","inputs","twMerge","clsx","ToastContext","createContext","ICONS","success","CheckCircle","className","XCircle","info","Info","STYLES","ToastEntry","toast","onDismiss","visible","setVisible","useState","useEffect","raf","requestAnimationFrame","cancelAnimationFrame","t","setTimeout","clearTimeout","jsxs","type","onClick","X","ToastProvider","toasts","setToasts","addToast","useCallback","id","Math","random","toString","slice","prev","removeToast","filter","Provider","value","map","useToast","ctx","useContext","DEFAULT_BADGE_COLORS","admin","bg","text","editor","viewer","AppsecContext","AppsecProvider","appId","mode","appsecUrl","roleTemplates","badgeColorMap","onError","baseUrl","getAuthToken","isLoading","setIsLoading","lastError","setLastError","setLoading","loading","setError","err","clearError","currentUserEmail","useMemo","token","JSON","parse","atob","split","email","finalAdapter","request","async","path","options","res","fetch","headers","Authorization","ok","msg","status","body","json","createApiClient","importConfig","data","method","stringify","getAppId","name","getModules","page","limit","encodeURIComponent","getRoles","getPermission","getAcls","resourceId","pagination","getResourceForModuleId","moduleId","getRoleModuleMapping","createAcl","deleteAcl","bulkUpdateAcl","updateModule","createModule","deleteModule","createPermission","updatePermission","deletePermission","createRole","updateRole","deleteRole","updateModuleMapping","getGroups","updateGroup","deleteGroup","createGroup","searchUsers","query","getResourceGroups","createResourceGroup","updateResourceGroup","deleteResourceGroup","shareResourceGroup","sendMail","deleteAclsByResourceGroup","createRbacApi","mergedBadgeColors","adapter","useAppsec","variantClasses","primary","secondary","danger","ghost","link","sizeClasses","sm","md","lg","Button","forwardRef","variant","size","iconLeft","iconRight","disabled","rest","ref","displayName","Input","label","hint","wrapperClassName","lscId","lscLabel","lscDescription","lscWhenToApply","lscWhenNotToApply","inputId","toLowerCase","replace","htmlFor","sizeClasses2","xs","COLORS","getColor","hash","i","length","charCodeAt","abs","getInitials","parts","trim","toUpperCase","Avatar","src","alt","variantMap","neutral","Badge","bgClass","textClass","Chip","onRemove","icon","sizeClasses3","xl","Modal","open","onClose","title","description","footer","overlayRef","useRef","onKey","e","key","document","addEventListener","removeEventListener","role","LABELS6","ConfirmDialog","onConfirm","confirmLabel","cancelLabel","Fragment","AlertTriangle","SearchBar","onChange","onClear","placeholder","Search","target","matchesAny","values","matches","trimmed","regex","RegExp","test","String","normalized","createSearchMatcher","some","useDebouncedValue","delay","debouncedValue","setDebouncedValue","timeout","rbacQueryKeys","useAppQuery","useQuery","queryKey","queryFn","enabled","useAllRolesQuery","appMongoId","first","totalPages","remaining","Array","from","_","results","batch","pages","Promise","all","push","flatMap","r","useRoleModuleMappingQuery","useGroupsQuery","useUsersSearchQuery","credentials","u","firstname","lastname","useCreateAclMutation","queryClient2","useQueryClient","useMutation","mutationFn","onSuccess","invalidateQueries","useResourcesPaginatedQuery","placeholderData","getPaginationTotalItems","fallback","Number","totalItems","total","getPaginationTotalPages","pageSize","ceil","memo","resource","roles","groups","onShare","onSearchUsers","roleModuleMapping","setMode","selectedUsers","setSelectedUsers","inputValue","setInputValue","suggestions","setSuggestions","showDropdown","setShowDropdown","searching","setSearching","inputRef","dropdownRef","groupId","setGroupId","roleId","setRoleId","submittingRef","isSubmitting","setIsSubmitting","buttonDisabled","setButtonDisabled","filteredRoles","m","_id","module","current","timer","s","handler","contains","addUser","user","focus","preventDefault","stopPropagation","submit","activeElement","removeUser","onKeyDown","addRawEmail","onFocus","fill","viewBox","cx","cy","stroke","strokeWidth","d","onMouseDown","g","TYPE_OPTIONS","AccessList","entries","users","onBulkRoleChange","selected","setSelected","Set","bulkRole","setBulkRole","removing","setRemoving","bulkLoading","setBulkLoading","confirmRemove","setConfirmRemove","aclPage","setAclPage","search","setSearch","debouncedSearch","roleFilter","setRoleFilter","typeFilter","setTypeFilter","isGroupEntry","entry","groupFor","find","normalizedEntries","availableRoles","Boolean","sort","visibleEntries","result","group","grantedBy","decodeURIComponent","grantedAt","user_email","totalAclPages","max","pageEntries","allPageSelected","every","has","toggleAll","n","forEach","delete","add","checked","isSelected","isGroup","subjectLabel","subjectDetail","toggleOne","avatarUrl","Date","toLocaleDateString","Trash2","min","p","ChevronLeft","ChevronRight","entryId","handleRemove","ResourceRow","aclEntries","onRemoveAccess","mfApi","clickLock","subscribe","eventData","console","log","action","elementId","setExpanded","expanded","resourceEntries","FileText","Users","Share2","ChevronUp","ChevronDown","ResourceGroupFormModal","existing","onSave","form","setForm","resources","resourceSearch","setResourceSearch","debouncedResourceSearch","resourcePage","setResourcePage","resourcesQuery","resourcePagination","resTotalCount","totalResourcePages","filteredModalResources","f","required","strokeLinecap","strokeLinejoin","toggleResource","ResourceGroupRow","userGroups","onEdit","onDelete","allResources","resourcesPopoverOpen","setResourcesPopoverOpen","popoverPos","setPopoverPos","top","left","resourcesBtnRef","React11","deleteGroupAclMutation","useDeleteAclsByResourceGroupMutation","groupEntries","resourceIds","totalResources","byPrincipal","Map","principal","group_id","set","get","handleRemoveFromGroup","mutateAsync","resource_group_id","asShareable","application","isResourceGroup","Layers","getBoundingClientRect","bottom","v","style","rId","Pencil","RES_PAGE_SIZE","Tooltip","side","view","setView","resPage","setResPage","rgPage","setRgPage","totalResPages","resourceGroupsQuery","useResourceGroupsPaginatedQuery","resourceGroups","resourceGroupPagination","rgTotalCount","totalRgPages","createGroupOpen","setCreateGroupOpen","editingGroup","setEditingGroup","deleteGroupTarget","setDeleteGroupTarget","deleteGroupLoading","setDeleteGroupLoading","filteredResources","filteredGroups","Plus","payload","getId","stripHtml","html","applyTemplate","template","recipientEmail","additionalData","join","ShareAccessModal","notifyByEmail","sendAdditionalMessage","emailTemplate","resourceName","debouncedInput","setDebouncedInput","notifyPeople","setNotifyPeople","additionalMessage","setAdditionalMessage","appQuery","rolesQuery","groupsQuery","roleModuleMappingQuery","aclsQuery","useAllAclsQuery","usersQuery","createAclMutation","shareResourceGroupMutation","useShareResourceGroupMutation","sendMailMutation","mappedRoleId","mappedModuleId","sendNotifications","emails","subject","recipients","to","cc","bcc","mail","grantedEmails","is_inherited","resource_type","resource_id","existingEmails","acl","resourceType","newEmails","skipped","isFetching","rows","Select","selectId","opt","Object","assign","Header","Body","Row","Head","sortable","sortKey","sortState","onSort","isActive","column","nextDirection","direction","ChevronsUpDown","Cell","TYPE_OPTIONS2","AddModal","allAcls","localMode","setLocalMode","a","EditModal","groupName","canAddUser","canEditUser","canDeleteUser","canAddGroup","canEditGroup","canDeleteGroup","uPerms","canAdd","canEdit","canDelete","canBulkEdit","gPerms","useAclsQuery","deleteAclMutation","useDeleteAclMutation","bulkUpdateAclMutation","useBulkUpdateAclMutation","resolvedModuleId","setPage","addModalOpen","setAddModalOpen","editEntry","setEditEntry","showAddUser","showAddGroup","showAddButton","showBulkCheckbox","addModalMode","perms","canCheck"],"mappings":"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"}
|