diff --git a/user/web/package.json b/user/web/package.json
index f0a3620..916f394 100644
--- a/user/web/package.json
+++ b/user/web/package.json
@@ -11,7 +11,8 @@
"@mantine/form": "^7.0.0",
"@mantine/modals": "^7.0.0",
"@tabler/icons-react": "^2.40.0",
- "axios": "^1.6.0"
+ "axios": "^1.6.0",
+ "@skybridge/web-components": "workspace:*"
},
"devDependencies": {
"@babel/core": "^7.22.0",
diff --git a/web-components/README.md b/web-components/README.md
index 158d791..a71f9ca 100644
--- a/web-components/README.md
+++ b/web-components/README.md
@@ -12,6 +12,132 @@ npm install @skybridge/web-components
## Components
+### StatusBadge
+
+A standardized badge component with consistent color schemes across all microfrontends.
+
+```tsx
+import { StatusBadge, UserRoleBadge, RuntimeBadge } from '@skybridge/web-components';
+
+// Generic usage
+
+
+// Context-specific usage
+
+
+
+// Variants: 'status', 'role', 'runtime', 'type', 'severity', 'execution'
+```
+
+### EmptyState
+
+A comprehensive empty state component for consistent empty data handling.
+
+```tsx
+import { EmptyState, NoUsersState, NoSearchResults } from '@skybridge/web-components';
+
+// Generic empty state
+ handleAddUser()}
+ onRefresh={() => handleRefresh()}
+/>
+
+// Convenience components
+
+
+```
+
+### Sidebar
+
+A flexible base sidebar component for consistent slide-out panels.
+
+```tsx
+import { Sidebar, DetailsSidebar, useSidebar } from '@skybridge/web-components';
+
+const MySidebar = () => {
+ const { opened, open, close } = useSidebar();
+
+ return (
+
+ Content goes here
+
+ );
+};
+
+// For item details
+}
+ editButton={}
+>
+
+
+```
+
+### ActionMenu
+
+A standardized action menu component for table rows and items.
+
+```tsx
+import { ActionMenu, getUserActions, createEditAction } from '@skybridge/web-components';
+
+// Using pre-built action sets
+
+
+// Custom actions
+
+```
+
+### LoadingState
+
+Comprehensive loading states for different scenarios.
+
+```tsx
+import {
+ LoadingState,
+ TableLoadingState,
+ PageLoadingState,
+ useLoadingState
+} from '@skybridge/web-components';
+
+// Different loading variants
+
+
+
+
+// Convenience components
+
+
+
+// Hook for loading state management
+const { loading, startLoading, stopLoading, updateProgress } = useLoadingState();
+```
+
### FormSidebar
A reusable sidebar form component that handles create/edit operations with validation.
@@ -288,14 +414,18 @@ The component library is designed to:
## Common Patterns Extracted
-Based on analysis of the existing microfrontends, this library extracts these common patterns:
+Based on deep analysis of the existing microfrontends, this library extracts these common patterns:
-1. **Sidebar Forms**: All microfrontends use similar slide-out forms
-2. **Data Tables**: Consistent table layouts with actions and filtering
-3. **API Integration**: Standard CRUD operations with error handling
-4. **Validation**: Common validation rules and patterns
-5. **Notifications**: Standardized success/error messaging
-6. **Filtering**: Client-side search and filter functionality
+1. **Status Display**: Standardized color schemes and formatting for status badges across all apps
+2. **Empty States**: Consistent empty data handling with contextual actions and messaging
+3. **Sidebar Components**: All microfrontends use similar slide-out forms and detail panels
+4. **Action Menus**: Standardized table actions with confirmation dialogs and consistent UX
+5. **Loading States**: Multiple loading variants (spinners, progress, skeletons) for different scenarios
+6. **Form Handling**: Reusable form sidebars with validation and error handling
+7. **Data Tables**: Consistent table layouts with actions, filtering, and pagination
+8. **API Integration**: Standard CRUD operations with error handling and state management
+9. **Validation**: Common validation rules and patterns with consistent error messages
+10. **Notifications**: Standardized success/error messaging and CRUD operation feedback
## Compatibility
diff --git a/web-components/dist/components/ActionMenu/ActionMenu.d.ts b/web-components/dist/components/ActionMenu/ActionMenu.d.ts
new file mode 100644
index 0000000..5c634d1
--- /dev/null
+++ b/web-components/dist/components/ActionMenu/ActionMenu.d.ts
@@ -0,0 +1,43 @@
+import React from 'react';
+import { TablerIconsProps } from '@tabler/icons-react';
+export interface ActionMenuItem {
+ key: string;
+ label: string;
+ icon?: React.ComponentType;
+ color?: string;
+ disabled?: boolean;
+ hidden?: boolean;
+ onClick: (item?: any) => void | Promise;
+ confirm?: {
+ title: string;
+ message: string;
+ confirmLabel?: string;
+ cancelLabel?: string;
+ };
+ show?: (item: any) => boolean;
+}
+export interface ActionMenuProps {
+ item?: any;
+ actions: ActionMenuItem[];
+ trigger?: 'dots' | 'button' | 'custom';
+ triggerLabel?: string;
+ triggerIcon?: React.ComponentType;
+ triggerProps?: any;
+ customTrigger?: React.ReactNode;
+ position?: 'bottom-end' | 'bottom-start' | 'top-end' | 'top-start';
+ withArrow?: boolean;
+ withinPortal?: boolean;
+ 'aria-label'?: string;
+}
+declare const ActionMenu: React.FC;
+export default ActionMenu;
+export declare const createViewAction: (onView: (item: any) => void) => ActionMenuItem;
+export declare const createEditAction: (onEdit: (item: any) => void) => ActionMenuItem;
+export declare const createCopyAction: (onCopy: (item: any) => void) => ActionMenuItem;
+export declare const createDeleteAction: (onDelete: (item: any) => void | Promise, itemName?: string) => ActionMenuItem;
+export declare const createArchiveAction: (onArchive: (item: any) => void) => ActionMenuItem;
+export declare const createRestoreAction: (onRestore: (item: any) => void) => ActionMenuItem;
+export declare const getUserActions: (onEdit: (item: any) => void, onDelete: (item: any) => void, onViewDetails?: (item: any) => void) => ActionMenuItem[];
+export declare const getApplicationActions: (onEdit: (item: any) => void, onDelete: (item: any) => void, onConfigure?: (item: any) => void) => ActionMenuItem[];
+export declare const getFunctionActions: (onEdit: (item: any) => void, onDelete: (item: any) => void, onExecute?: (item: any) => void, onViewLogs?: (item: any) => void) => ActionMenuItem[];
+export declare const getTokenActions: (onRevoke: (item: any) => void, onCopy?: (item: any) => void, onRefresh?: (item: any) => void) => ActionMenuItem[];
diff --git a/web-components/dist/components/EmptyState/EmptyState.d.ts b/web-components/dist/components/EmptyState/EmptyState.d.ts
new file mode 100644
index 0000000..7bb47d7
--- /dev/null
+++ b/web-components/dist/components/EmptyState/EmptyState.d.ts
@@ -0,0 +1,47 @@
+import React from 'react';
+import { TablerIconsProps } from '@tabler/icons-react';
+export type EmptyStateVariant = 'no-data' | 'no-results' | 'error' | 'loading-failed' | 'access-denied' | 'coming-soon';
+export type EmptyStateContext = 'users' | 'applications' | 'functions' | 'tokens' | 'executions' | 'permissions' | 'audit' | 'generic';
+export interface EmptyStateAction {
+ label: string;
+ onClick: () => void;
+ variant?: 'filled' | 'light' | 'outline';
+ color?: string;
+ leftSection?: React.ReactNode;
+}
+export interface EmptyStateProps {
+ variant?: EmptyStateVariant;
+ context?: EmptyStateContext;
+ title?: string;
+ message?: string;
+ icon?: React.ComponentType;
+ iconSize?: number;
+ iconColor?: string;
+ actions?: EmptyStateAction[];
+ height?: number | string;
+}
+declare const EmptyState: React.FC void;
+ onRefresh?: () => void;
+ onClearFilters?: () => void;
+}>;
+export default EmptyState;
+export declare const NoUsersState: React.FC & {
+ onAddUser?: () => void;
+}>;
+export declare const NoApplicationsState: React.FC & {
+ onCreateApp?: () => void;
+}>;
+export declare const NoFunctionsState: React.FC & {
+ onCreateFunction?: () => void;
+}>;
+export declare const NoTokensState: React.FC & {
+ onGenerateToken?: () => void;
+}>;
+export declare const NoSearchResults: React.FC & {
+ onClearFilters?: () => void;
+ onRefresh?: () => void;
+}>;
+export declare const ErrorState: React.FC & {
+ onRetry?: () => void;
+}>;
diff --git a/web-components/dist/components/LoadingState/LoadingState.d.ts b/web-components/dist/components/LoadingState/LoadingState.d.ts
new file mode 100644
index 0000000..e8cd6cb
--- /dev/null
+++ b/web-components/dist/components/LoadingState/LoadingState.d.ts
@@ -0,0 +1,46 @@
+import React from 'react';
+export type LoadingVariant = 'spinner' | 'progress' | 'skeleton-table' | 'skeleton-cards' | 'skeleton-form' | 'skeleton-text' | 'dots' | 'overlay';
+export type LoadingSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
+export interface LoadingStateProps {
+ variant?: LoadingVariant;
+ size?: LoadingSize;
+ height?: number | string;
+ message?: string;
+ submessage?: string;
+ progress?: number;
+ progressLabel?: string;
+ rows?: number;
+ columns?: number;
+ color?: string;
+ withContainer?: boolean;
+ animate?: boolean;
+}
+declare const LoadingState: React.FC;
+export default LoadingState;
+export declare const TableLoadingState: React.FC<{
+ rows?: number;
+ columns?: number;
+}>;
+export declare const CardsLoadingState: React.FC<{
+ count?: number;
+ columns?: number;
+}>;
+export declare const FormLoadingState: React.FC<{
+ fields?: number;
+}>;
+export declare const PageLoadingState: React.FC<{
+ message?: string;
+}>;
+export declare const InlineLoadingState: React.FC<{
+ message?: string;
+ size?: LoadingSize;
+}>;
+export declare const useLoadingState: (initialLoading?: boolean) => {
+ loading: boolean;
+ progress: number;
+ startLoading: () => void;
+ stopLoading: () => void;
+ updateProgress: (value: number) => void;
+ setLoading: React.Dispatch>;
+ setProgress: React.Dispatch>;
+};
diff --git a/web-components/dist/components/Sidebar/Sidebar.d.ts b/web-components/dist/components/Sidebar/Sidebar.d.ts
new file mode 100644
index 0000000..f601615
--- /dev/null
+++ b/web-components/dist/components/Sidebar/Sidebar.d.ts
@@ -0,0 +1,49 @@
+import React from 'react';
+export interface SidebarProps {
+ opened: boolean;
+ onClose: () => void;
+ title: string;
+ width?: number;
+ position?: 'left' | 'right';
+ headerActions?: React.ReactNode;
+ footer?: React.ReactNode;
+ children: React.ReactNode;
+ zIndex?: number;
+ offsetTop?: number;
+ backgroundColor?: string;
+ borderColor?: string;
+ animationDuration?: string;
+ 'aria-label'?: string;
+}
+declare const Sidebar: React.FC;
+export default Sidebar;
+export interface FormSidebarWrapperProps extends Omit {
+ children: React.ReactNode;
+ cancelLabel?: string;
+ submitLabel?: string;
+ onCancel?: () => void;
+ onSubmit?: () => void;
+ submitDisabled?: boolean;
+ showFooterActions?: boolean;
+}
+export declare const FormSidebarWrapper: React.FC;
+export interface DetailsSidebarProps extends Omit {
+ itemName: string;
+ itemType?: string;
+ editButton?: React.ReactNode;
+ deleteButton?: React.ReactNode;
+ status?: React.ReactNode;
+}
+export declare const DetailsSidebar: React.FC;
+export interface QuickSidebarProps extends Omit {
+ content: React.ReactNode;
+ actions?: React.ReactNode;
+}
+export declare const QuickSidebar: React.FC;
+export declare const useSidebar: (initialOpened?: boolean) => {
+ opened: boolean;
+ open: () => void;
+ close: () => void;
+ toggle: () => void;
+ setOpened: React.Dispatch>;
+};
diff --git a/web-components/dist/components/StatusBadge/StatusBadge.d.ts b/web-components/dist/components/StatusBadge/StatusBadge.d.ts
new file mode 100644
index 0000000..42d4fee
--- /dev/null
+++ b/web-components/dist/components/StatusBadge/StatusBadge.d.ts
@@ -0,0 +1,18 @@
+import React from 'react';
+import { BadgeProps } from '@mantine/core';
+export type StatusVariant = 'status' | 'role' | 'runtime' | 'type' | 'severity' | 'execution';
+export interface StatusBadgeProps extends Omit {
+ value: string;
+ variant?: StatusVariant;
+ customColorMap?: Record;
+}
+declare const COLOR_MAPS: Record>;
+declare const DEFAULT_COLORS: Record;
+declare const StatusBadge: React.FC;
+export default StatusBadge;
+export { COLOR_MAPS, DEFAULT_COLORS };
+export declare const UserRoleBadge: React.FC>;
+export declare const ApplicationTypeBadge: React.FC>;
+export declare const RuntimeBadge: React.FC>;
+export declare const ExecutionStatusBadge: React.FC>;
+export declare const SeverityBadge: React.FC>;
diff --git a/web-components/dist/index.d.ts b/web-components/dist/index.d.ts
index 0a776ef..54baba7 100644
--- a/web-components/dist/index.d.ts
+++ b/web-components/dist/index.d.ts
@@ -1,5 +1,10 @@
export { default as FormSidebar } from './components/FormSidebar/FormSidebar';
export { default as DataTable } from './components/DataTable/DataTable';
+export { default as StatusBadge, UserRoleBadge, ApplicationTypeBadge, RuntimeBadge, ExecutionStatusBadge, SeverityBadge } from './components/StatusBadge/StatusBadge';
+export { default as EmptyState, NoUsersState, NoApplicationsState, NoFunctionsState, NoTokensState, NoSearchResults, ErrorState } from './components/EmptyState/EmptyState';
+export { default as Sidebar, FormSidebarWrapper, DetailsSidebar, QuickSidebar, useSidebar } from './components/Sidebar/Sidebar';
+export { default as ActionMenu, createViewAction, createEditAction, createCopyAction, createDeleteAction, createArchiveAction, createRestoreAction, getUserActions, getApplicationActions, getFunctionActions, getTokenActions } from './components/ActionMenu/ActionMenu';
+export { default as LoadingState, TableLoadingState, CardsLoadingState, FormLoadingState, PageLoadingState, InlineLoadingState, useLoadingState } from './components/LoadingState/LoadingState';
export * from './types';
export { useApiService } from './hooks/useApiService';
export { useDataFilter } from './hooks/useDataFilter';
diff --git a/web-components/dist/index.esm.js b/web-components/dist/index.esm.js
index 073b0a5..0a03f9e 100644
--- a/web-components/dist/index.esm.js
+++ b/web-components/dist/index.esm.js
@@ -1,2 +1,2 @@
-import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useEffect as n,useState as r,useCallback as o,useMemo as i}from"react";import{Paper as a,Group as c,Title as l,ActionIcon as u,ScrollArea as s,Box as d,Stack as f,Button as h,TextInput as m,JsonInput as v,MultiSelect as p,Select as g,Textarea as y,NumberInput as b,Text as w,LoadingOverlay as x,Center as I,Table as C,Pagination as S,Badge as k,Menu as E}from"@mantine/core";export{ActionIcon,Badge,Box,Button,Center,Divider,Group,JsonInput,LoadingOverlay,Menu,MultiSelect,NumberInput,Pagination,Paper,ScrollArea,Select,Stack,Table,Text,TextInput,Textarea,Title}from"@mantine/core";import{IconX as F,IconRefresh as A,IconPlus as T,IconSearch as L,IconFilter as z,IconEdit as D,IconTrash as P,IconDots as U}from"@tabler/icons-react";export{IconAlertCircle,IconCheck,IconChevronDown,IconChevronRight,IconCopy,IconDots,IconEdit,IconEye,IconEyeOff,IconFilter,IconInfoCircle,IconKey,IconPlus,IconRefresh,IconSearch,IconSettings,IconTrash,IconUser,IconUsers,IconX}from"@tabler/icons-react";import{useForm as O}from"@mantine/form";export{useForm}from"@mantine/form";import{notifications as j}from"@mantine/notifications";export{notifications}from"@mantine/notifications";import{modals as R}from"@mantine/modals";export{modals}from"@mantine/modals";import q from"axios";export{useDisclosure,useLocalStorage,useToggle}from"@mantine/hooks";var M=function(){return M=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==c[0]&&2!==c[0])){i=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]e.validation.maxLength?"".concat(e.label," must be no more than ").concat(e.validation.maxLength," characters"):(null===(a=e.validation)||void 0===a?void 0:a.pattern)&&t&&!e.validation.pattern.test(t)?"".concat(e.label," format is invalid"):(null===(c=e.validation)||void 0===c?void 0:c.custom)?e.validation.custom(t):null}}),D)});n(function(){if(P&&S){var e={};k.forEach(function(t){var n,r;e[t.name]=null!==(r=null!==(n=S[t.name])&&void 0!==n?n:t.defaultValue)&&void 0!==r?r:""}),R.setValues(e)}else P||R.setValues(U())},[S,o,P]);return e(a,{style:{position:"fixed",top:60,right:o?0:"-".concat(T,"px"),bottom:0,width:"".concat(T,"px"),zIndex:1e3,borderRadius:0,display:"flex",flexDirection:"column",borderLeft:"1px solid var(--mantine-color-gray-3)",backgroundColor:"var(--mantine-color-body)",transition:"right 0.3s ease"},children:[e(c,{justify:"space-between",p:"md",style:{borderBottom:"1px solid var(--mantine-color-gray-3)"},children:[t(l,{order:4,children:P?"Edit ".concat(x):"Create New ".concat(x)}),t(u,{variant:"subtle",color:"gray",onClick:i,children:t(F,{size:18})})]}),t(s,{style:{flex:1},children:t(d,{p:"md",children:t("form",{onSubmit:R.onSubmit(function(e){return B(void 0,void 0,void 0,function(){var t,n,r;return N(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,E(e)];case 1:return o.sent(),t={title:"Success",message:"".concat(x," ").concat(P?"updated":"created"," successfully"),color:"green"},j.show(t),w(),i(),R.reset(),[3,3];case 2:return n=o.sent(),console.error("Error ".concat(P?"updating":"creating"," ").concat(x.toLowerCase(),":"),n),r={title:"Error",message:n.message||"Failed to ".concat(P?"update":"create"," ").concat(x.toLowerCase()),color:"red"},j.show(r),[3,3];case 3:return[2]}})})}),children:e(f,{gap:"md",children:[k.map(function(e){var n=R.getInputProps(e.name),r=M({key:e.name,label:e.label,placeholder:e.placeholder,description:e.description,required:e.required,disabled:e.disabled||P&&"id"===e.name},n);switch(e.type){case"email":return t(m,M({},r,{type:"email"}));case"number":return t(b,M({},r));case"textarea":return t(y,M({},r,{autosize:!0,minRows:3,maxRows:6}));case"select":return t(g,M({},r,{data:e.options||[]}));case"multiselect":return t(p,M({},r,{data:e.options||[]}));case"json":return t(v,M({},r,{validationError:"Invalid JSON format",formatOnBlur:!0,autosize:!0,minRows:3}));default:return t(m,M({},r))}}),e(c,{justify:"flex-end",mt:"md",children:[t(h,{variant:"light",onClick:i,children:"Cancel"}),e(h,{type:"submit",children:[P?"Update":"Create"," ",x]})]})]})})})})]})},J=function(o){var i=o.data,l=o.columns,s=o.loading,d=void 0!==s&&s,v=o.error,p=void 0===v?null:v,g=o.title,y=o.total,b=void 0===y?0:y,F=o.page,O=void 0===F?1:F,q=o.pageSize,$=void 0===q?10:q,V=o.onPageChange,J=o.onAdd,H=o.onEdit,_=o.onDelete,G=o.onRefresh,X=o.customActions,Z=void 0===X?[]:X,K=o.searchable,W=void 0===K||K,Y=o.filterable,Q=void 0!==Y&&Y,ee=o.filters,te=void 0===ee?{}:ee,ne=o.onFiltersChange,re=o.withBorder,oe=void 0===re||re,ie=o.withColumnBorders,ae=void 0!==ie&&ie,ce=o.striped,le=void 0===ce||ce,ue=o.highlightOnHover,se=void 0===ue||ue,de=o.emptyMessage,fe=void 0===de?"No data available":de,he=r(te),me=he[0],ve=he[1];n(function(){ve(te)},[te]);var pe=function(e){!function(e,t){var n,r=M(M({},me),((n={})[e]=t,n));ve(r),null==ne||ne(r)}("search",e)},ge=function(e,n){var r=n[e.key];if(e.render)return e.render(r,n);if(null==r)return t(w,{c:"dimmed",children:"-"});if("boolean"==typeof r)return t(k,{color:r?"green":"gray",size:"sm",children:r?"Yes":"No"});if("status"===e.key){return t(k,{color:{active:"green",inactive:"gray",pending:"yellow",suspended:"red",success:"green",error:"red",warning:"yellow"}[r]||"blue",size:"sm",children:r})}return t(w,{children:r.toString()})},ye=function(n){var r=[];H&&r.push({key:"edit",label:"Edit",icon:t(D,{size:14}),onClick:H}),_&&r.push({key:"delete",label:"Delete",icon:t(P,{size:14}),color:"red",onClick:function(){return function(e){R.openConfirmModal({title:"Confirm Delete",children:t(w,{size:"sm",children:"Are you sure you want to delete this item? This action cannot be undone."}),labels:{confirm:"Delete",cancel:"Cancel"},confirmProps:{color:"red"},onConfirm:function(){return B(void 0,void 0,void 0,function(){var t;return N(this,function(n){switch(n.label){case 0:return n.trys.push([0,3,,4]),_?[4,_(e)]:[3,2];case 1:n.sent(),j.show({title:"Success",message:"Item deleted successfully",color:"green"}),n.label=2;case 2:return[3,4];case 3:return t=n.sent(),j.show({title:"Error",message:t.message||"Failed to delete item",color:"red"}),[3,4];case 4:return[2]}})})}})}(n)}}),r.push.apply(r,Z);var o=r.filter(function(e){return!e.show||e.show(n)});return 0===o.length?null:e(E,{position:"bottom-end",children:[t(E.Target,{children:t(u,{variant:"subtle",color:"gray",children:t(U,{size:16})})}),t(E.Dropdown,{children:o.map(function(e){return t(E.Item,{leftSection:e.icon,color:e.color,onClick:function(){return e.onClick(n)},children:e.label},e.key)})})]})},be=Math.ceil(b/$);return e(f,{gap:"md",children:[e(c,{justify:"space-between",children:[t(c,{children:g&&t(w,{size:"xl",fw:600,children:g})}),e(c,{children:[G&&t(u,{variant:"light",onClick:G,children:t(A,{size:16})}),J&&t(h,{leftSection:t(T,{size:16}),onClick:J,children:"Add New"})]})]}),(W||Q)&&e(c,{children:[W&&t(m,{placeholder:"Search...",leftSection:t(L,{size:16}),value:me.search||"",onChange:function(e){return pe(e.currentTarget.value)},style:{flex:1}}),Q&&t(c,{children:t(u,{variant:"light",children:t(z,{size:16})})})]}),e(a,{withBorder:oe,pos:"relative",children:[t(x,{visible:d}),p?t(I,{p:"xl",children:e(f,{align:"center",gap:"xs",children:[t(w,{c:"red",fw:500,children:"Error loading data"}),t(w,{c:"dimmed",size:"sm",children:p}),G&&t(h,{variant:"light",size:"sm",onClick:G,children:"Try Again"})]})}):0===i.length?t(I,{p:"xl",children:e(f,{align:"center",gap:"xs",children:[t(w,{c:"dimmed",children:fe}),J&&t(h,{variant:"light",size:"sm",onClick:J,children:"Add First Item"})]})}):e(C,{striped:le,highlightOnHover:se,withColumnBorders:ae,children:[t(C.Thead,{children:e(C.Tr,{children:[l.map(function(e){return t(C.Th,{style:{width:e.width},children:e.label},e.key)}),(H||_||Z.length>0)&&t(C.Th,{style:{width:50},children:"Actions"})]})}),t(C.Tbody,{children:i.map(function(n){return e(C.Tr,{children:[l.map(function(e){return t(C.Td,{children:ge(e,n)},"".concat(n.id,"-").concat(e.key))}),(H||_||Z.length>0)&&t(C.Td,{children:ye(n)})]},n.id)})})]})]}),be>1&&t(c,{justify:"center",children:t(S,{total:be,value:O,onChange:V,size:"sm"})})]})},H=function(e,t){var n=r([]),i=n[0],a=n[1],c=r(!1),l=c[0],u=c[1],s=r(null),d=s[0],f=s[1],h=r(0),m=h[0],v=h[1],p=r(!1),g=p[0],y=p[1],b=q.create({baseURL:e.baseURL,timeout:e.timeout||1e4,headers:M({"Content-Type":"application/json"},e.defaultHeaders)});b.interceptors.request.use(function(e){return e.headers["X-User-Email"]="admin@example.com",e},function(e){return Promise.reject(e)}),b.interceptors.response.use(function(e){return e},function(e){var t,n,r=(null===(n=null===(t=e.response)||void 0===t?void 0:t.data)||void 0===n?void 0:n.message)||e.message||"An error occurred";return f(r),Promise.reject(e)});var w=o(function(){f(null)},[]),x=o(function(){for(var e=[],n=0;n0?t.filter(function(e){return r.includes(e[n])}):t.filter(function(e){var t=e[n];return null!=t&&(t.toString().toLowerCase()===r.toString().toLowerCase()||"string"==typeof t&&"string"==typeof r&&t.toLowerCase().includes(r.toLowerCase()))}))}),t},[e,h,s,a]);return{filteredData:y,filters:s,setFilter:v,clearFilters:p,resetFilters:g,searchTerm:h,setSearchTerm:m}},G=function(e,t){void 0===t&&(t="Success");var n={title:t,message:e,color:"green"};j.show(n)},X=function(e,t){void 0===t&&(t="Error");var n={title:t,message:e,color:"red"};j.show(n)},Z=function(e,t){void 0===t&&(t="Warning");var n={title:t,message:e,color:"yellow"};j.show(n)},K=function(e,t){void 0===t&&(t="Info");var n={title:t,message:e,color:"blue"};j.show(n)},W={createSuccess:function(e){return"".concat(e," created successfully")},updateSuccess:function(e){return"".concat(e," updated successfully")},deleteSuccess:function(e){return"".concat(e," deleted successfully")},createError:function(e){return"Failed to create ".concat(e)},updateError:function(e){return"Failed to update ".concat(e)},deleteError:function(e){return"Failed to delete ".concat(e)},loadError:function(e){return"Failed to load ".concat(e)},networkError:"Network error occurred. Please try again.",validationError:"Please check the form for errors",requiredFieldError:function(e){return"".concat(e," is required")},authRequired:"Authentication required",permissionDenied:"Permission denied",sessionExpired:"Session expired. Please log in again.",applicationCreated:"Application created successfully",applicationUpdated:"Application updated successfully",applicationDeleted:"Application deleted successfully",tokenCreated:"Token created successfully",tokenRevoked:"Token revoked successfully",userCreated:"User created successfully",userUpdated:"User updated successfully",userDeleted:"User deleted successfully",functionCreated:"Function created successfully",functionUpdated:"Function updated successfully",functionDeleted:"Function deleted successfully",executionStarted:"Function execution started",executionCompleted:"Function execution completed",executionFailed:"Function execution failed"},Y={success:function(e,t){var n=W["".concat(e,"Success")](t);G(n)},error:function(e,t,n){var r=n||W["".concat(e,"Error")](t);X(r)}},Q={email:/^\S+@\S+\.\S+$/,url:/^https?:\/\/.+/,duration:/^\d+[smhd]$/,token:/^[a-zA-Z0-9_-]+$/,appId:/^[a-zA-Z0-9-_]+$/,uuid:/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i},ee={required:function(e){return"".concat(e," is required")},email:"Please enter a valid email address",url:"Please enter a valid URL (http:// or https://)",duration:"Duration must be in format like 30s, 5m, 2h, 1d",minLength:function(e,t){return"".concat(e," must be at least ").concat(t," characters")},maxLength:function(e,t){return"".concat(e," must be no more than ").concat(t," characters")},pattern:function(e){return"".concat(e," format is invalid")},token:"Token can only contain letters, numbers, underscores and hyphens",appId:"App ID can only contain letters, numbers, hyphens and underscores",uuid:"Please enter a valid UUID",positiveNumber:"Must be a positive number",range:function(e,t,n){return"".concat(e," must be between ").concat(t," and ").concat(n)}},te=function(e){return null==e||""===e||Array.isArray(e)&&0===e.length?"This field is required":null},ne=function(e){return e?Q.email.test(e)?null:ee.email:null},re=function(e){return e?Q.url.test(e)?null:ee.url:null},oe=function(e){return e?Q.duration.test(e)?null:ee.duration:null},ie=function(e,t,n){return void 0===n&&(n="Field"),e?e.length>=t?null:ee.minLength(n,t):null},ae=function(e,t,n){return void 0===n&&(n="Field"),e?e.length<=t?null:ee.maxLength(n,t):null},ce=function(e,t,n){return void 0===n&&(n="Field"),e?t.test(e)?null:ee.pattern(n):null},le=function(e,t,n,r){return void 0===r&&(r="Field"),null==e?null:en?ee.range(r,t,n):null},ue=function(e){return e?Q.appId.test(e)?null:ee.appId:null},se=function(e){return e?Q.token.test(e)?null:ee.token:null},de=function(e){return e?Q.uuid.test(e)?null:ee.uuid:null},fe=function(e){if(!e||""===e.trim())return null;try{return JSON.parse(e),null}catch(e){return"Invalid JSON format"}},he=function(e){var t=e.match(/^(\d+)([smhd]?)$/);if(!t)return 86400;var n=parseInt(t[1]);switch(t[2]||"h"){case"s":return n;case"m":return 60*n;case"h":default:return 3600*n;case"d":return 86400*n}},me=function(e){return e<60?"".concat(e,"s"):e<3600?"".concat(Math.floor(e/60),"m"):e<86400?"".concat(Math.floor(e/3600),"h"):"".concat(Math.floor(e/86400),"d")},ve=function(){for(var e=[],t=0;t0&&i[i.length-1])||6!==c[0]&&2!==c[0])){o=0;continue}if(3===c[0]&&(!i||c[1]>i[0]&&c[1]e.validation.maxLength?"".concat(e.label," must be no more than ").concat(e.validation.maxLength," characters"):(null===(a=e.validation)||void 0===a?void 0:a.pattern)&&n&&!e.validation.pattern.test(n)?"".concat(e.label," format is invalid"):(null===(c=e.validation)||void 0===c?void 0:c.custom)?e.validation.custom(n):null}}),E)});i(function(){if(j&&A){var e={};S.forEach(function(n){var t,r;e[n.name]=null!==(r=null!==(t=A[n.name])&&void 0!==t?t:n.defaultValue)&&void 0!==r?r:""}),R.setValues(e)}else j||R.setValues(P())},[A,r,j]);return e(l,{style:{position:"fixed",top:60,right:r?0:"-".concat(F,"px"),bottom:0,width:"".concat(F,"px"),zIndex:1e3,borderRadius:0,display:"flex",flexDirection:"column",borderLeft:"1px solid var(--mantine-color-gray-3)",backgroundColor:"var(--mantine-color-body)",transition:"right 0.3s ease"},children:[e(s,{justify:"space-between",p:"md",style:{borderBottom:"1px solid var(--mantine-color-gray-3)"},children:[n(u,{order:4,children:j?"Edit ".concat(c):"Create New ".concat(c)}),n(d,{variant:"subtle",color:"gray",onClick:o,children:n(D,{size:18})})]}),n(f,{style:{flex:1},children:n(h,{p:"md",children:n("form",{onSubmit:R.onSubmit(function(e){return le(void 0,void 0,void 0,function(){var n,t,r;return se(this,function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,z(e)];case 1:return i.sent(),n={title:"Success",message:"".concat(c," ").concat(j?"updated":"created"," successfully"),color:"green"},re.show(n),a(),o(),R.reset(),[3,3];case 2:return t=i.sent(),console.error("Error ".concat(j?"updating":"creating"," ").concat(c.toLowerCase(),":"),t),r={title:"Error",message:t.message||"Failed to ".concat(j?"update":"create"," ").concat(c.toLowerCase()),color:"red"},re.show(r),[3,3];case 3:return[2]}})})}),children:e(m,{gap:"md",children:[S.map(function(e){var t=R.getInputProps(e.name),r=ae({key:e.name,label:e.label,placeholder:e.placeholder,description:e.description,required:e.required,disabled:e.disabled||j&&"id"===e.name},t);switch(e.type){case"email":return n(v,ae({},r,{type:"email"}));case"number":return n(k,ae({},r));case"textarea":return n(w,ae({},r,{autosize:!0,minRows:3,maxRows:6}));case"select":return n(b,ae({},r,{data:e.options||[]}));case"multiselect":return n(y,ae({},r,{data:e.options||[]}));case"json":return n(g,ae({},r,{validationError:"Invalid JSON format",formatOnBlur:!0,autosize:!0,minRows:3}));default:return n(v,ae({},r))}}),e(s,{justify:"flex-end",mt:"md",children:[n(p,{variant:"light",onClick:o,children:"Cancel"}),e(p,{type:"submit",children:[j?"Update":"Create"," ",c]})]})]})})})})]})},fe=function(t){var r=t.data,a=t.columns,c=t.loading,u=void 0!==c&&c,f=t.error,h=void 0===f?null:f,g=t.title,y=t.total,b=void 0===y?0:y,w=t.page,k=void 0===w?1:w,L=t.pageSize,T=void 0===L?10:L,E=t.onPageChange,j=t.onAdd,P=t.onEdit,R=t.onDelete,D=t.onRefresh,W=t.customActions,G=void 0===W?[]:W,$=t.searchable,J=void 0===$||$,H=t.filterable,Y=void 0!==H&&H,_=t.filters,X=void 0===_?{}:_,Z=t.onFiltersChange,K=t.withBorder,Q=void 0===K||K,ee=t.withColumnBorders,ne=void 0!==ee&&ee,te=t.striped,oe=void 0===te||te,ce=t.highlightOnHover,ue=void 0===ce||ce,de=t.emptyMessage,fe=void 0===de?"No data available":de,he=o(X),me=he[0],pe=he[1];i(function(){pe(X)},[X]);var ve=function(e){!function(e,n){var t,r=ae(ae({},me),((t={})[e]=n,t));pe(r),null==Z||Z(r)}("search",e)},ge=function(e,t){var r=t[e.key];if(e.render)return e.render(r,t);if(null==r)return n(C,{c:"dimmed",children:"-"});if("boolean"==typeof r)return n(I,{color:r?"green":"gray",size:"sm",children:r?"Yes":"No"});if("status"===e.key){return n(I,{color:{active:"green",inactive:"gray",pending:"yellow",suspended:"red",success:"green",error:"red",warning:"yellow"}[r]||"blue",size:"sm",children:r})}return n(C,{children:r.toString()})},ye=function(t){var r=[];P&&r.push({key:"edit",label:"Edit",icon:n(B,{size:14}),onClick:P}),R&&r.push({key:"delete",label:"Delete",icon:n(q,{size:14}),color:"red",onClick:function(){return function(e){ie.openConfirmModal({title:"Confirm Delete",children:n(C,{size:"sm",children:"Are you sure you want to delete this item? This action cannot be undone."}),labels:{confirm:"Delete",cancel:"Cancel"},confirmProps:{color:"red"},onConfirm:function(){return le(void 0,void 0,void 0,function(){var n;return se(this,function(t){switch(t.label){case 0:return t.trys.push([0,3,,4]),R?[4,R(e)]:[3,2];case 1:t.sent(),re.show({title:"Success",message:"Item deleted successfully",color:"green"}),t.label=2;case 2:return[3,4];case 3:return n=t.sent(),re.show({title:"Error",message:n.message||"Failed to delete item",color:"red"}),[3,4];case 4:return[2]}})})}})}(t)}}),r.push.apply(r,G);var i=r.filter(function(e){return!e.show||e.show(t)});return 0===i.length?null:e(F,{position:"bottom-end",children:[n(F.Target,{children:n(d,{variant:"subtle",color:"gray",children:n(V,{size:16})})}),n(F.Dropdown,{children:i.map(function(e){return n(F.Item,{leftSection:e.icon,color:e.color,onClick:function(){return e.onClick(t)},children:e.label},e.key)})})]})},be=Math.ceil(b/T);return e(m,{gap:"md",children:[e(s,{justify:"space-between",children:[n(s,{children:g&&n(C,{size:"xl",fw:600,children:g})}),e(s,{children:[D&&n(d,{variant:"light",onClick:D,children:n(O,{size:16})}),j&&n(p,{leftSection:n(U,{size:16}),onClick:j,children:"Add New"})]})]}),(J||Y)&&e(s,{children:[J&&n(v,{placeholder:"Search...",leftSection:n(N,{size:16}),value:me.search||"",onChange:function(e){return ve(e.currentTarget.value)},style:{flex:1}}),Y&&n(s,{children:n(d,{variant:"light",children:n(M,{size:16})})})]}),e(l,{withBorder:Q,pos:"relative",children:[n(x,{visible:u}),h?n(A,{p:"xl",children:e(m,{align:"center",gap:"xs",children:[n(C,{c:"red",fw:500,children:"Error loading data"}),n(C,{c:"dimmed",size:"sm",children:h}),D&&n(p,{variant:"light",size:"sm",onClick:D,children:"Try Again"})]})}):0===r.length?n(A,{p:"xl",children:e(m,{align:"center",gap:"xs",children:[n(C,{c:"dimmed",children:fe}),j&&n(p,{variant:"light",size:"sm",onClick:j,children:"Add First Item"})]})}):e(S,{striped:oe,highlightOnHover:ue,withColumnBorders:ne,children:[n(S.Thead,{children:e(S.Tr,{children:[a.map(function(e){return n(S.Th,{style:{width:e.width},children:e.label},e.key)}),(P||R||G.length>0)&&n(S.Th,{style:{width:50},children:"Actions"})]})}),n(S.Tbody,{children:r.map(function(t){return e(S.Tr,{children:[a.map(function(e){return n(S.Td,{children:ge(e,t)},"".concat(t.id,"-").concat(e.key))}),(P||R||G.length>0)&&n(S.Td,{children:ye(t)})]},t.id)})})]})]}),be>1&&n(s,{justify:"center",children:n(z,{total:be,value:k,onChange:E,size:"sm"})})]})},he={status:{active:"green",inactive:"gray",pending:"yellow",suspended:"red",enabled:"green",disabled:"gray",online:"green",offline:"gray",running:"green",stopped:"gray",paused:"yellow",failed:"red",success:"green",completed:"green",error:"red",warning:"yellow",info:"blue"},role:{admin:"red",moderator:"orange",user:"blue",viewer:"gray",owner:"purple",editor:"cyan",contributor:"teal",guest:"gray"},type:{static:"blue",user:"cyan",service:"green",application:"purple",api:"orange",web:"teal",mobile:"pink",desktop:"indigo"},runtime:{nodejs18:"green",nodejs20:"lime","python3.9":"blue","python3.11":"indigo","go1.20":"cyan","go1.21":"teal",java11:"orange",java17:"red",dotnet6:"purple",dotnet7:"violet",rust:"dark",php8:"grape"},severity:{critical:"red",high:"orange",medium:"yellow",low:"blue",info:"gray",debug:"dark"},execution:{queued:"gray",running:"blue",succeeded:"green",failed:"red",timeout:"orange",cancelled:"yellow",retrying:"cyan"}},me={status:"gray",role:"blue",runtime:"blue",type:"blue",severity:"gray",execution:"gray"},pe=function(e){var t=e.value,r=e.variant,i=void 0===r?"status":r,o=e.customColorMap,a=e.size,c=void 0===a?"sm":a,l=ce(e,["value","variant","customColorMap","size"]);if(!t)return n(I,ae({color:"gray",size:c},l,{children:"-"}));var s=(o||he[i]||he.status)[t.toLowerCase()]||me[i],u=ve(t,i);return n(I,ae({color:s,size:c,variant:"filled"},l,{children:u}))},ve=function(e,n){switch(n){case"runtime":if(e.startsWith("nodejs"))return"Node.js ".concat(e.replace("nodejs",""));if(e.startsWith("python"))return"Python ".concat(e.replace("python",""));if(e.startsWith("go"))return"Go ".concat(e.replace("go",""));if(e.startsWith("java"))return"Java ".concat(e.replace("java",""));if(e.startsWith("dotnet"))return".NET ".concat(e.replace("dotnet",""));break;case"type":if("api"===e)return"API";if("web"===e)return"Web App";if("mobile"===e)return"Mobile App"}return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()},ge=function(e){return n(pe,ae({},e,{variant:"role"}))},ye=function(e){return n(pe,ae({},e,{variant:"type"}))},be=function(e){return n(pe,ae({},e,{variant:"runtime"}))},we=function(e){return n(pe,ae({},e,{variant:"execution"}))},ke=function(e){return n(pe,ae({},e,{variant:"severity"}))},Ce={users:G,applications:$,functions:W,tokens:J,executions:W,permissions:J,audit:H,generic:H},xe=function(t){var r=t.variant,i=void 0===r?"no-data":r,o=t.context,a=void 0===o?"generic":o,c=t.title,l=t.message,s=t.icon,u=t.iconSize,d=void 0===u?48:u,f=t.iconColor,v=void 0===f?"dimmed":f,g=t.actions,y=t.height,b=void 0===y?400:y,w=t.onAdd,k=t.onRefresh,x=t.onClearFilters,S=function(e,n){var t={users:"users",applications:"applications",functions:"functions",tokens:"tokens",executions:"executions",permissions:"permissions",audit:"audit events",generic:"items"}[n],r=t.charAt(0).toUpperCase()+t.slice(1);switch(e){case"no-data":return{title:"No ".concat(t," found"),message:"You haven't created any ".concat(t," yet. Get started by adding your first ").concat(t.slice(0,-1),".")};case"no-results":return{title:"No matching results",message:"No ".concat(t," match your current filters or search criteria. Try adjusting your search terms or clearing filters.")};case"error":return{title:"Something went wrong",message:"We couldn't load your ".concat(t,". Please try again or contact support if the problem persists.")};case"loading-failed":return{title:"Failed to load data",message:"There was a problem loading ".concat(t,". Check your connection and try again.")};case"access-denied":return{title:"Access denied",message:"You don't have permission to view ".concat(t,". Contact your administrator if you need access.")};case"coming-soon":return{title:"Coming soon",message:"".concat(r," functionality is being developed. Check back soon for updates.")};default:return{title:"No ".concat(t),message:"There are no ".concat(t," to display.")}}}(i,a),z=c||S.title,I=l||S.message,F=s||Ce[a]||function(e){switch(e){case"no-results":return N;case"error":case"loading-failed":case"access-denied":return Y;default:return H}}(i),L=g||function(e,t,r,i,o){var a=[];switch(e){case"no-data":if(r){var c={users:{label:"Add User",onClick:r,variant:"filled",leftSection:n(U,{size:16})},applications:{label:"Create Application",onClick:r,variant:"filled",leftSection:n(U,{size:16})},functions:{label:"Create Function",onClick:r,variant:"filled",leftSection:n(U,{size:16})},tokens:{label:"Generate Token",onClick:r,variant:"filled",leftSection:n(U,{size:16})},executions:{label:"Run Function",onClick:r,variant:"filled",leftSection:n(W,{size:16})},permissions:{label:"Add Permission",onClick:r,variant:"filled",leftSection:n(U,{size:16})},audit:{label:"Refresh",onClick:r,variant:"light",leftSection:n(O,{size:16})},generic:{label:"Add New",onClick:r,variant:"filled",leftSection:n(U,{size:16})}};a.push(c[t])}break;case"no-results":o&&a.push({label:"Clear Filters",onClick:o,variant:"light",leftSection:n(M,{size:16})}),i&&a.push({label:"Refresh",onClick:i,variant:"outline",leftSection:n(O,{size:16})});break;case"error":case"loading-failed":i&&a.push({label:"Try Again",onClick:i,variant:"filled",leftSection:n(O,{size:16})})}return a}(i,a,w,k,x);return n(A,{h:b,children:e(m,{align:"center",gap:"lg",maw:400,ta:"center",children:[n(h,{c:v,children:n(F,{size:d,stroke:1.5})}),e(m,{align:"center",gap:"xs",children:[n(C,{size:"lg",fw:600,c:"dimmed",children:z}),n(C,{size:"sm",c:"dimmed",lh:1.5,children:I})]}),L.length>0&&n(m,{align:"center",gap:"sm",w:"100%",children:L.map(function(e,t){return n(p,{onClick:e.onClick,variant:e.variant||"filled",color:e.color,leftSection:e.leftSection,size:"sm",children:e.label},t)})})]})})},Ae=function(e){var t=e.onAddUser,r=ce(e,["onAddUser"]);return n(xe,ae({},r,{variant:"no-data",context:"users",onAdd:t}))},Se=function(e){var t=e.onCreateApp,r=ce(e,["onCreateApp"]);return n(xe,ae({},r,{variant:"no-data",context:"applications",onAdd:t}))},ze=function(e){var t=e.onCreateFunction,r=ce(e,["onCreateFunction"]);return n(xe,ae({},r,{variant:"no-data",context:"functions",onAdd:t}))},Ie=function(e){var t=e.onGenerateToken,r=ce(e,["onGenerateToken"]);return n(xe,ae({},r,{variant:"no-data",context:"tokens",onAdd:t}))},Fe=function(e){var t=e.onClearFilters,r=e.onRefresh,i=ce(e,["onClearFilters","onRefresh"]);return n(xe,ae({},i,{variant:"no-results",onClearFilters:t,onRefresh:r}))},Le=function(e){var t=e.onRetry,r=ce(e,["onRetry"]);return n(xe,ae({},r,{variant:"error",onRefresh:t}))},Te=function(r){var i,o=r.opened,a=r.onClose,c=r.title,m=r.width,p=void 0===m?450:m,v=r.position,g=void 0===v?"right":v,y=r.headerActions,b=r.footer,w=r.children,k=r.zIndex,C=void 0===k?1e3:k,x=r.offsetTop,A=void 0===x?60:x,S=r.backgroundColor,z=void 0===S?"var(--mantine-color-body)":S,I=r.borderColor,F=void 0===I?"var(--mantine-color-gray-3)":I,T=r.animationDuration,E=void 0===T?"0.3s":T,j=r["aria-label"];return e(l,{style:(i={position:"fixed",top:A,bottom:0,width:"".concat(p,"px"),zIndex:C,borderRadius:0,display:"flex",flexDirection:"column",backgroundColor:z,transition:"".concat(g," ").concat(E," ease")},ae(ae({},i),"right"===g?{right:o?0:"-".concat(p,"px"),borderLeft:"1px solid ".concat(F)}:{left:o?0:"-".concat(p,"px"),borderRight:"1px solid ".concat(F)})),role:"dialog","aria-modal":"true","aria-label":j||c,"aria-hidden":!o,children:[e(s,{justify:"space-between",p:"md",style:{borderBottom:"1px solid ".concat(F)},children:[n(u,{order:4,style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c}),y&&n(s,{gap:"xs",children:y}),n(d,{variant:"subtle",color:"gray",onClick:a,"aria-label":"Close sidebar",ml:"xs",children:n(D,{size:18})})]}),n(f,{style:{flex:1},scrollbarSize:6,children:n(h,{p:"md",children:w})}),b&&e(t,{children:[n(L,{}),n(h,{p:"md",style:{borderTop:"1px solid ".concat(F)},children:b})]})]})},Ee=function(t){var r=t.children,i=t.cancelLabel,o=void 0===i?"Cancel":i,a=t.submitLabel,c=void 0===a?"Save":a,l=t.onCancel,u=t.onSubmit,f=t.submitDisabled,h=void 0!==f&&f,m=t.showFooterActions,p=void 0===m||m,v=t.onClose,g=ce(t,["children","cancelLabel","submitLabel","onCancel","onSubmit","submitDisabled","showFooterActions","onClose"]),y=p?e(s,{justify:"flex-end",gap:"sm",children:[n(d,{variant:"subtle",onClick:function(){null==l||l(),v()},size:"sm",children:o}),n(d,{onClick:u,disabled:h,size:"sm",children:c})]}):void 0;return n(Te,ae({},g,{onClose:v,footer:y,children:r}))},je=function(t){var r=t.itemName,i=t.itemType,o=void 0===i?"Item":i,a=t.editButton,c=t.deleteButton,l=t.status,u=t.children,d=ce(t,["itemName","itemType","editButton","deleteButton","status","children"]),f=e(s,{gap:"xs",children:[l,a,c]});return n(Te,ae({},d,{title:"".concat(o,": ").concat(r),headerActions:f,children:u}))},Pe=function(e){var t=e.content,r=e.actions,i=ce(e,["content","actions"]);return n(Te,ae({},i,{footer:r,children:t}))},Re=function(e){void 0===e&&(e=!1);var n=r.useState(e),t=n[0],i=n[1];return{opened:t,open:r.useCallback(function(){return i(!0)},[]),close:r.useCallback(function(){return i(!1)},[]),toggle:r.useCallback(function(){return i(function(e){return!e})},[]),setOpened:i}},De=function(t){var i=t.item,o=t.actions,a=t.trigger,c=void 0===a?"dots":a,l=t.triggerLabel,s=void 0===l?"Actions":l,u=t.triggerIcon,f=void 0===u?V:u,h=t.triggerProps,m=void 0===h?{}:h,v=t.customTrigger,g=t.position,y=void 0===g?"bottom-end":g,b=t.withArrow,w=void 0!==b&&b,k=t.withinPortal,x=void 0===k||k,A=t["aria-label"],S=o.filter(function(e){return!e.hidden&&!(e.show&&!e.show(i))}),z=Oe(S);if(0===S.length)return null;var I=function(e){var t=e.icon;return n(F.Item,{leftSection:t&&n(t,{size:14}),color:e.color,disabled:e.disabled,onClick:function(){return function(e){return le(void 0,void 0,void 0,function(){var t;return se(this,function(r){switch(r.label){case 0:return r.trys.push([0,4,,5]),e.confirm?[2,new Promise(function(t){ie.openConfirmModal({title:e.confirm.title,children:n(C,{size:"sm",children:e.confirm.message}),labels:{confirm:e.confirm.confirmLabel||"Confirm",cancel:e.confirm.cancelLabel||"Cancel"},confirmProps:{color:e.color||"red"},onConfirm:function(){return le(void 0,void 0,void 0,function(){var n;return se(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,e.onClick(i)];case 1:return r.sent(),t(),[3,3];case 2:return n=r.sent(),console.error("Action ".concat(e.key," failed:"),n),re.show({title:"Action Failed",message:"Failed to ".concat(e.label.toLowerCase()),color:"red"}),[3,3];case 3:return[2]}})})},onCancel:function(){return t()}})})]:[3,1];case 1:return[4,e.onClick(i)];case 2:r.sent(),r.label=3;case 3:return[3,5];case 4:return t=r.sent(),console.error("Action ".concat(e.key," failed:"),t),re.show({title:"Action Failed",message:"Failed to ".concat(e.label.toLowerCase()),color:"red"}),[3,5];case 5:return[2]}})})}(e)},children:e.label},e.key)};return e(F,{position:y,withArrow:w,withinPortal:x,children:[n(F.Target,{children:v||("button"===c?n(p,ae({variant:"light",size:"xs",leftSection:n(f,{size:16})},m,{children:s})):n(d,ae({variant:"subtle",color:"gray",size:"sm","aria-label":A||"".concat(s," menu")},m,{children:n(f,{size:16})})))}),n(F.Dropdown,{children:z.map(function(t,i){return e(r.Fragment,{children:[t.map(I),i0&&i.push(n),t.length>0&&i.push(t),r.length>0&&i.push(r),i},Ue=function(e){return{key:"view",label:"View Details",icon:_,onClick:e}},Ne=function(e){return{key:"edit",label:"Edit",icon:B,color:"blue",onClick:e}},Me=function(e){return{key:"copy",label:"Duplicate",icon:X,onClick:e}},Be=function(e,n){return void 0===n&&(n="item"),{key:"delete",label:"Delete",icon:q,color:"red",onClick:e,confirm:{title:"Confirm Delete",message:"Are you sure you want to delete this ".concat(n,"? This action cannot be undone."),confirmLabel:"Delete",cancelLabel:"Cancel"}}},qe=function(e){return{key:"archive",label:"Archive",icon:Z,color:"orange",onClick:e,confirm:{title:"Archive Item",message:"Are you sure you want to archive this item?"}}},Ve=function(e){return{key:"restore",label:"Restore",icon:K,color:"green",onClick:e}},We=function(e,n,t){return ue(ue([],t?[Ue(t)]:[],!0),[Ne(e),Be(n,"user")],!1)},Ge=function(e,n,t){return ue(ue([Ne(e)],t?[{key:"configure",label:"Configure",icon:Q,onClick:t}]:[],!0),[Be(n,"application")],!1)},$e=function(e,n,t,r){return ue(ue(ue([],t?[{key:"execute",label:"Execute",icon:ee,color:"green",onClick:t}]:[],!0),r?[{key:"logs",label:"View Logs",icon:_,onClick:r}]:[],!0),[Ne(e),Be(n,"function")],!1)},Je=function(e,n,t){return ue(ue(ue([],n?[Me(n)]:[],!0),t?[{key:"refresh",label:"Refresh",icon:O,onClick:t}]:[],!0),[{key:"revoke",label:"Revoke",icon:ne,color:"red",onClick:e,confirm:{title:"Revoke Token",message:"Are you sure you want to revoke this token? This action cannot be undone and will immediately disable the token.",confirmLabel:"Revoke"}}],!1)},He=function(r){var i=r.variant,o=void 0===i?"spinner":i,a=r.size,c=void 0===a?"md":a,l=r.height,u=void 0===l?200:l,d=r.message,f=r.submessage,p=r.progress,v=r.progressLabel,g=r.rows,y=void 0===g?5:g,b=r.columns,w=void 0===b?3:b,k=r.color,x=void 0===k?"blue":k,S=r.withContainer,z=void 0===S||S,I=r.animate,F=void 0===I||I,L=function(){return{xs:"xs",sm:"sm",md:"md",lg:"lg",xl:"xl"}[c]},D=function(){return e(m,{align:"center",gap:"md",children:[n(T,{size:{xs:16,sm:24,md:32,lg:48,xl:64}[c],color:x}),d&&n(C,{size:L(),c:"dimmed",ta:"center",children:d}),f&&n(C,{size:"xs",c:"dimmed",ta:"center",children:f})]})},O=function(){switch(o){case"progress":return e(m,{gap:"md",children:[(d||v)&&e(s,{justify:"space-between",children:[n(C,{size:L(),children:d||"Loading..."}),v&&n(C,{size:"sm",c:"dimmed",children:v})]}),n(E,{value:p||0,color:x,size:c,animated:F}),f&&n(C,{size:"xs",c:"dimmed",ta:"center",children:f})]});case"skeleton-table":return e(m,{gap:"xs",children:[n(s,{gap:"md",children:Array.from({length:w}).map(function(e,t){return n(j,{height:20,width:"".concat(100/w,"%")},"header-".concat(t))})}),Array.from({length:y}).map(function(e,t){return n(s,{gap:"md",children:Array.from({length:w}).map(function(e,r){return n(j,{height:16,width:"".concat(100/w,"%")},"cell-".concat(t,"-").concat(r))})},"row-".concat(t))})]});case"skeleton-cards":return n(P,{cols:{base:1,sm:2,lg:w},children:Array.from({length:y*w}).map(function(t,r){return n(R,{padding:"md",withBorder:!0,children:e(m,{gap:"xs",children:[n(j,{height:20,width:"70%"}),n(j,{height:14}),n(j,{height:14,width:"90%"}),e(s,{justify:"apart",mt:"md",children:[n(j,{height:12,width:"40%"}),n(j,{height:12,width:"30%"})]})]})},"card-".concat(r))})});case"skeleton-form":return e(m,{gap:"md",children:[Array.from({length:y}).map(function(t,r){return e(h,{children:[n(j,{height:12,width:"30%",mb:"xs"}),n(j,{height:36})]},"form-field-".concat(r))}),e(s,{justify:"flex-end",mt:"xl",children:[n(j,{height:36,width:80}),n(j,{height:36,width:100})]})]});case"skeleton-text":return n(m,{gap:"xs",children:Array.from({length:y}).map(function(e,t){var r=["100%","95%","85%","90%","75%"];return n(j,{height:16,width:r[t%r.length]},"text-".concat(t))})});case"dots":return t=Array.from({length:3}).map(function(e,t){return n(h,{w:8,h:8,bg:x,style:{borderRadius:"50%",animation:F?"loading-dots 1.4s infinite ease-in-out ".concat(.16*t,"s"):void 0}},t)}),e(m,{align:"center",gap:"md",children:[n(s,{gap:"xs",children:t}),d&&n(C,{size:L(),c:"dimmed",ta:"center",children:d})]});case"overlay":return n(h,{style:{position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(255, 255, 255, 0.8)",backdropFilter:"blur(2px)",zIndex:1e3},children:n(A,{h:"100%",children:D()})});default:return D()}var t};if("overlay"===o)return e(t,{children:[O(),n("style",{children:Ye})]});var U=e(t,{children:[O(),F&&n("style",{children:Ye})]});return z?n(A,{h:u,children:U}):U},Ye="\n @keyframes loading-dots {\n 0%, 80%, 100% {\n transform: scale(0);\n opacity: 0.5;\n }\n 40% {\n transform: scale(1);\n opacity: 1;\n }\n }\n",_e=function(e){var t=e.rows,r=void 0===t?5:t,i=e.columns;return n(He,{variant:"skeleton-table",rows:r,columns:void 0===i?4:i,withContainer:!1})},Xe=function(e){var t=e.count,r=void 0===t?6:t,i=e.columns,o=void 0===i?3:i;return n(He,{variant:"skeleton-cards",rows:Math.ceil(r/o),columns:o,withContainer:!1})},Ze=function(e){var t=e.fields;return n(He,{variant:"skeleton-form",rows:void 0===t?4:t,withContainer:!1})},Ke=function(e){var t=e.message;return n(He,{variant:"spinner",message:void 0===t?"Loading page...":t,height:"60vh",size:"lg"})},Qe=function(t){var r=t.message,i=void 0===r?"Loading...":r,o=t.size,a=void 0===o?"sm":o;return e(s,{gap:"xs",children:[n(T,{size:"xs"===a?12:"sm"===a?16:20}),n(C,{size:a,c:"dimmed",children:i})]})},en=function(e){void 0===e&&(e=!1);var n=r.useState(e),t=n[0],i=n[1],o=r.useState(0),a=o[0],c=o[1];return{loading:t,progress:a,startLoading:r.useCallback(function(){return i(!0)},[]),stopLoading:r.useCallback(function(){i(!1),c(0)},[]),updateProgress:r.useCallback(function(e){c(Math.max(0,Math.min(100,e)))},[]),setLoading:i,setProgress:c}},nn=function(e,n){var t=o([]),r=t[0],i=t[1],c=o(!1),l=c[0],s=c[1],u=o(null),d=u[0],f=u[1],h=o(0),m=h[0],p=h[1],v=o(!1),g=v[0],y=v[1],b=oe.create({baseURL:e.baseURL,timeout:e.timeout||1e4,headers:ae({"Content-Type":"application/json"},e.defaultHeaders)});b.interceptors.request.use(function(e){return e.headers["X-User-Email"]="admin@example.com",e},function(e){return Promise.reject(e)}),b.interceptors.response.use(function(e){return e},function(e){var n,t,r=(null===(t=null===(n=e.response)||void 0===n?void 0:n.data)||void 0===t?void 0:t.message)||e.message||"An error occurred";return f(r),Promise.reject(e)});var w=a(function(){f(null)},[]),k=a(function(){for(var e=[],t=0;t0?n.filter(function(e){return r.includes(e[t])}):n.filter(function(e){var n=e[t];return null!=n&&(n.toString().toLowerCase()===r.toString().toLowerCase()||"string"==typeof n&&"string"==typeof r&&n.toLowerCase().includes(r.toLowerCase()))}))}),n},[e,h,u,r]);return{filteredData:y,filters:u,setFilter:p,clearFilters:v,resetFilters:g,searchTerm:h,setSearchTerm:m}},rn=function(e,n){void 0===n&&(n="Success");var t={title:n,message:e,color:"green"};re.show(t)},on=function(e,n){void 0===n&&(n="Error");var t={title:n,message:e,color:"red"};re.show(t)},an=function(e,n){void 0===n&&(n="Warning");var t={title:n,message:e,color:"yellow"};re.show(t)},cn=function(e,n){void 0===n&&(n="Info");var t={title:n,message:e,color:"blue"};re.show(t)},ln={createSuccess:function(e){return"".concat(e," created successfully")},updateSuccess:function(e){return"".concat(e," updated successfully")},deleteSuccess:function(e){return"".concat(e," deleted successfully")},createError:function(e){return"Failed to create ".concat(e)},updateError:function(e){return"Failed to update ".concat(e)},deleteError:function(e){return"Failed to delete ".concat(e)},loadError:function(e){return"Failed to load ".concat(e)},networkError:"Network error occurred. Please try again.",validationError:"Please check the form for errors",requiredFieldError:function(e){return"".concat(e," is required")},authRequired:"Authentication required",permissionDenied:"Permission denied",sessionExpired:"Session expired. Please log in again.",applicationCreated:"Application created successfully",applicationUpdated:"Application updated successfully",applicationDeleted:"Application deleted successfully",tokenCreated:"Token created successfully",tokenRevoked:"Token revoked successfully",userCreated:"User created successfully",userUpdated:"User updated successfully",userDeleted:"User deleted successfully",functionCreated:"Function created successfully",functionUpdated:"Function updated successfully",functionDeleted:"Function deleted successfully",executionStarted:"Function execution started",executionCompleted:"Function execution completed",executionFailed:"Function execution failed"},sn={success:function(e,n){var t=ln["".concat(e,"Success")](n);rn(t)},error:function(e,n,t){var r=t||ln["".concat(e,"Error")](n);on(r)}},un={email:/^\S+@\S+\.\S+$/,url:/^https?:\/\/.+/,duration:/^\d+[smhd]$/,token:/^[a-zA-Z0-9_-]+$/,appId:/^[a-zA-Z0-9-_]+$/,uuid:/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i},dn={required:function(e){return"".concat(e," is required")},email:"Please enter a valid email address",url:"Please enter a valid URL (http:// or https://)",duration:"Duration must be in format like 30s, 5m, 2h, 1d",minLength:function(e,n){return"".concat(e," must be at least ").concat(n," characters")},maxLength:function(e,n){return"".concat(e," must be no more than ").concat(n," characters")},pattern:function(e){return"".concat(e," format is invalid")},token:"Token can only contain letters, numbers, underscores and hyphens",appId:"App ID can only contain letters, numbers, hyphens and underscores",uuid:"Please enter a valid UUID",positiveNumber:"Must be a positive number",range:function(e,n,t){return"".concat(e," must be between ").concat(n," and ").concat(t)}},fn=function(e){return null==e||""===e||Array.isArray(e)&&0===e.length?"This field is required":null},hn=function(e){return e?un.email.test(e)?null:dn.email:null},mn=function(e){return e?un.url.test(e)?null:dn.url:null},pn=function(e){return e?un.duration.test(e)?null:dn.duration:null},vn=function(e,n,t){return void 0===t&&(t="Field"),e?e.length>=n?null:dn.minLength(t,n):null},gn=function(e,n,t){return void 0===t&&(t="Field"),e?e.length<=n?null:dn.maxLength(t,n):null},yn=function(e,n,t){return void 0===t&&(t="Field"),e?n.test(e)?null:dn.pattern(t):null},bn=function(e,n,t,r){return void 0===r&&(r="Field"),null==e?null:et?dn.range(r,n,t):null},wn=function(e){return e?un.appId.test(e)?null:dn.appId:null},kn=function(e){return e?un.token.test(e)?null:dn.token:null},Cn=function(e){return e?un.uuid.test(e)?null:dn.uuid:null},xn=function(e){if(!e||""===e.trim())return null;try{return JSON.parse(e),null}catch(e){return"Invalid JSON format"}},An=function(e){var n=e.match(/^(\d+)([smhd]?)$/);if(!n)return 86400;var t=parseInt(n[1]);switch(n[2]||"h"){case"s":return t;case"m":return 60*t;case"h":default:return 3600*t;case"d":return 86400*t}},Sn=function(e){return e<60?"".concat(e,"s"):e<3600?"".concat(Math.floor(e/60),"m"):e<86400?"".concat(Math.floor(e/3600),"h"):"".concat(Math.floor(e/86400),"d")},zn=function(){for(var e=[],n=0;n= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React, { useEffect } from 'react';\nimport {\n Paper,\n TextInput,\n Select,\n MultiSelect,\n NumberInput,\n Textarea,\n JsonInput,\n Button,\n Group,\n Stack,\n Title,\n ActionIcon,\n ScrollArea,\n Box,\n Text,\n} from '@mantine/core';\nimport { IconX } from '@tabler/icons-react';\nimport { useForm } from '@mantine/form';\nimport { notifications } from '@mantine/notifications';\nimport { FormField, NotificationConfig } from '../../types';\n\nexport interface FormSidebarProps {\n opened: boolean;\n onClose: () => void;\n onSuccess: () => void;\n title: string;\n editMode?: boolean;\n editItem?: any;\n fields: FormField[];\n onSubmit: (values: any) => Promise;\n width?: number;\n initialValues?: Record;\n validateOnSubmit?: boolean;\n}\n\nconst FormSidebar: React.FC = ({\n opened,\n onClose,\n onSuccess,\n title,\n editMode = false,\n editItem,\n fields,\n onSubmit,\n width = 450,\n initialValues = {},\n validateOnSubmit = true,\n}) => {\n const isEditing = editMode && !!editItem;\n\n // Build initial form values from fields\n const buildInitialValues = () => {\n const values: Record = {};\n fields.forEach(field => {\n values[field.name] = field.defaultValue ?? (field.type === 'multiselect' ? [] : '');\n });\n return { ...values, ...initialValues };\n };\n\n // Build validation rules from fields\n const buildValidation = () => {\n const validation: Record string | null> = {};\n fields.forEach(field => {\n validation[field.name] = (value: any) => {\n if (field.required && (!value || (typeof value === 'string' && value.trim() === ''))) {\n return `${field.label} is required`;\n }\n if (field.validation?.email && value && !/^\\S+@\\S+$/.test(value)) {\n return 'Invalid email format';\n }\n if (field.validation?.url && value && !/^https?:\\/\\/.+/.test(value)) {\n return 'Invalid URL format';\n }\n if (field.validation?.minLength && value && value.length < field.validation.minLength) {\n return `${field.label} must be at least ${field.validation.minLength} characters`;\n }\n if (field.validation?.maxLength && value && value.length > field.validation.maxLength) {\n return `${field.label} must be no more than ${field.validation.maxLength} characters`;\n }\n if (field.validation?.pattern && value && !field.validation.pattern.test(value)) {\n return `${field.label} format is invalid`;\n }\n if (field.validation?.custom) {\n return field.validation.custom(value);\n }\n return null;\n };\n });\n return validation;\n };\n\n const form = useForm({\n initialValues: buildInitialValues(),\n validate: buildValidation(),\n });\n\n // Update form values when editItem changes\n useEffect(() => {\n if (isEditing && editItem) {\n const updatedValues: Record = {};\n fields.forEach(field => {\n updatedValues[field.name] = editItem[field.name] ?? field.defaultValue ?? '';\n });\n form.setValues(updatedValues);\n } else if (!isEditing) {\n form.setValues(buildInitialValues());\n }\n }, [editItem, opened, isEditing]);\n\n const handleSubmit = async (values: typeof form.values) => {\n try {\n await onSubmit(values);\n \n const successNotification: NotificationConfig = {\n title: 'Success',\n message: `${title} ${isEditing ? 'updated' : 'created'} successfully`,\n color: 'green',\n };\n \n notifications.show(successNotification);\n onSuccess();\n onClose();\n form.reset();\n } catch (error: any) {\n console.error(`Error ${isEditing ? 'updating' : 'creating'} ${title.toLowerCase()}:`, error);\n \n const errorNotification: NotificationConfig = {\n title: 'Error',\n message: error.message || `Failed to ${isEditing ? 'update' : 'create'} ${title.toLowerCase()}`,\n color: 'red',\n };\n \n notifications.show(errorNotification);\n }\n };\n\n const renderField = (field: FormField) => {\n const inputProps = form.getInputProps(field.name);\n const commonProps = {\n key: field.name,\n label: field.label,\n placeholder: field.placeholder,\n description: field.description,\n required: field.required,\n disabled: field.disabled || (isEditing && field.name === 'id'),\n ...inputProps,\n };\n\n switch (field.type) {\n case 'email':\n return ;\n \n case 'number':\n return ;\n \n case 'textarea':\n return ;\n \n case 'select':\n return (\n \n );\n \n case 'multiselect':\n return (\n \n );\n \n case 'json':\n return (\n \n );\n \n default:\n return ;\n }\n };\n\n return (\n \n {/* Header */}\n \n \n {isEditing ? `Edit ${title}` : `Create New ${title}`}\n \n \n \n \n \n\n {/* Content */}\n \n \n \n \n \n \n );\n};\n\nexport default FormSidebar;","import React, { useState, useEffect } from 'react';\nimport {\n Table,\n Paper,\n Group,\n Button,\n TextInput,\n Select,\n ActionIcon,\n Menu,\n Text,\n Badge,\n Box,\n Stack,\n Pagination,\n LoadingOverlay,\n Center,\n} from '@mantine/core';\nimport {\n IconSearch,\n IconPlus,\n IconDots,\n IconEdit,\n IconTrash,\n IconRefresh,\n IconFilter,\n} from '@tabler/icons-react';\nimport { modals } from '@mantine/modals';\nimport { notifications } from '@mantine/notifications';\nimport { ListItem, FilterOptions } from '../../types';\n\nexport interface TableColumn {\n key: string;\n label: string;\n sortable?: boolean;\n filterable?: boolean;\n width?: string | number;\n render?: (value: any, item: ListItem) => React.ReactNode;\n}\n\nexport interface TableAction {\n key: string;\n label: string;\n icon?: React.ReactNode;\n color?: string;\n onClick: (item: ListItem) => void;\n show?: (item: ListItem) => boolean;\n}\n\nexport interface DataTableProps {\n data: ListItem[];\n columns: TableColumn[];\n loading?: boolean;\n error?: string | null;\n title?: string;\n \n // Pagination\n total?: number;\n page?: number;\n pageSize?: number;\n onPageChange?: (page: number) => void;\n \n // Actions\n onAdd?: () => void;\n onEdit?: (item: ListItem) => void;\n onDelete?: (item: ListItem) => Promise;\n onRefresh?: () => void;\n customActions?: TableAction[];\n \n // Filtering & Search\n searchable?: boolean;\n filterable?: boolean;\n filters?: FilterOptions;\n onFiltersChange?: (filters: FilterOptions) => void;\n \n // Styling\n withBorder?: boolean;\n withColumnBorders?: boolean;\n striped?: boolean;\n highlightOnHover?: boolean;\n \n // Empty state\n emptyMessage?: string;\n}\n\nconst DataTable: React.FC = ({\n data,\n columns,\n loading = false,\n error = null,\n title,\n total = 0,\n page = 1,\n pageSize = 10,\n onPageChange,\n onAdd,\n onEdit,\n onDelete,\n onRefresh,\n customActions = [],\n searchable = true,\n filterable = false,\n filters = {},\n onFiltersChange,\n withBorder = true,\n withColumnBorders = false,\n striped = true,\n highlightOnHover = true,\n emptyMessage = 'No data available',\n}) => {\n const [localFilters, setLocalFilters] = useState(filters);\n \n useEffect(() => {\n setLocalFilters(filters);\n }, [filters]);\n\n const handleFilterChange = (key: string, value: string) => {\n const newFilters = { ...localFilters, [key]: value };\n setLocalFilters(newFilters);\n onFiltersChange?.(newFilters);\n };\n\n const handleSearchChange = (value: string) => {\n handleFilterChange('search', value);\n };\n\n const handleDeleteConfirm = (item: ListItem) => {\n modals.openConfirmModal({\n title: 'Confirm Delete',\n children: (\n \n Are you sure you want to delete this item? This action cannot be undone.\n \n ),\n labels: { confirm: 'Delete', cancel: 'Cancel' },\n confirmProps: { color: 'red' },\n onConfirm: async () => {\n try {\n if (onDelete) {\n await onDelete(item);\n notifications.show({\n title: 'Success',\n message: 'Item deleted successfully',\n color: 'green',\n });\n }\n } catch (error: any) {\n notifications.show({\n title: 'Error',\n message: error.message || 'Failed to delete item',\n color: 'red',\n });\n }\n },\n });\n };\n\n const renderCellValue = (column: TableColumn, item: ListItem) => {\n const value = item[column.key];\n \n if (column.render) {\n return column.render(value, item);\n }\n \n // Default rendering for common data types\n if (value === null || value === undefined) {\n return -;\n }\n \n if (typeof value === 'boolean') {\n return (\n \n {value ? 'Yes' : 'No'}\n \n );\n }\n \n if (column.key === 'status') {\n const statusColors: Record = {\n active: 'green',\n inactive: 'gray',\n pending: 'yellow',\n suspended: 'red',\n success: 'green',\n error: 'red',\n warning: 'yellow',\n };\n return (\n \n {value}\n \n );\n }\n \n return {value.toString()};\n };\n\n const renderActionMenu = (item: ListItem) => {\n const actions: TableAction[] = [];\n \n if (onEdit) {\n actions.push({\n key: 'edit',\n label: 'Edit',\n icon: ,\n onClick: onEdit,\n });\n }\n \n if (onDelete) {\n actions.push({\n key: 'delete',\n label: 'Delete',\n icon: ,\n color: 'red',\n onClick: () => handleDeleteConfirm(item),\n });\n }\n \n actions.push(...customActions);\n \n const visibleActions = actions.filter(action => \n !action.show || action.show(item)\n );\n \n if (visibleActions.length === 0) {\n return null;\n }\n \n return (\n \n );\n };\n\n const totalPages = Math.ceil(total / pageSize);\n\n return (\n \n {/* Header with title and actions */}\n \n \n {title && {title}}\n \n \n \n {onRefresh && (\n \n \n \n )}\n \n {onAdd && (\n } onClick={onAdd}>\n Add New\n \n )}\n \n \n\n {/* Filters and Search */}\n {(searchable || filterable) && (\n \n {searchable && (\n }\n value={localFilters.search || ''}\n onChange={(e) => handleSearchChange(e.currentTarget.value)}\n style={{ flex: 1 }}\n />\n )}\n \n {filterable && (\n \n \n \n \n {/* Add specific filter components as needed */}\n \n )}\n \n )}\n\n {/* Table */}\n \n \n \n {error ? (\n \n \n Error loading data\n {error}\n {onRefresh && (\n \n )}\n \n \n ) : data.length === 0 ? (\n \n \n {emptyMessage}\n {onAdd && (\n \n )}\n \n \n ) : (\n \n \n \n {columns.map((column) => (\n \n {column.label}\n \n ))}\n {(onEdit || onDelete || customActions.length > 0) && (\n Actions\n )}\n \n \n \n {data.map((item) => (\n \n {columns.map((column) => (\n \n {renderCellValue(column, item)}\n \n ))}\n {(onEdit || onDelete || customActions.length > 0) && (\n \n {renderActionMenu(item)}\n \n )}\n \n ))}\n \n
\n )}\n \n\n {/* Pagination */}\n {totalPages > 1 && (\n \n \n \n )}\n \n );\n};\n\nexport default DataTable;","import { useState, useCallback } from 'react';\nimport axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { ApiResponse, PaginatedResponse, FilterOptions } from '../types';\n\nexport interface ApiServiceConfig {\n baseURL: string;\n defaultHeaders?: Record;\n timeout?: number;\n}\n\nexport interface UseApiServiceReturn {\n data: T[];\n loading: boolean;\n error: string | null;\n total: number;\n hasMore: boolean;\n client: AxiosInstance;\n \n // CRUD operations\n getAll: (filters?: FilterOptions) => Promise;\n getById: (id: string) => Promise;\n create: (data: Partial) => Promise;\n update: (id: string, data: Partial) => Promise;\n delete: (id: string) => Promise;\n \n // Utility methods\n clearError: () => void;\n refresh: () => Promise;\n}\n\nexport const useApiService = (\n config: ApiServiceConfig,\n endpoint: string\n): UseApiServiceReturn => {\n const [data, setData] = useState([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n const [total, setTotal] = useState(0);\n const [hasMore, setHasMore] = useState(false);\n\n // Create axios instance\n const client = axios.create({\n baseURL: config.baseURL,\n timeout: config.timeout || 10000,\n headers: {\n 'Content-Type': 'application/json',\n ...config.defaultHeaders,\n },\n });\n\n // Add request interceptor for common headers\n client.interceptors.request.use(\n (config) => {\n // Add user email header if available (common pattern in the codebase)\n const userEmail = 'admin@example.com'; // This could come from a context or config\n if (userEmail) {\n config.headers['X-User-Email'] = userEmail;\n }\n return config;\n },\n (error) => Promise.reject(error)\n );\n\n // Add response interceptor for error handling\n client.interceptors.response.use(\n (response) => response,\n (error) => {\n const errorMessage = error.response?.data?.message || error.message || 'An error occurred';\n setError(errorMessage);\n return Promise.reject(error);\n }\n );\n\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n const getAll = useCallback(async (filters: FilterOptions = {}): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n const params = new URLSearchParams();\n Object.entries(filters).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '') {\n params.append(key, value.toString());\n }\n });\n\n const response = await client.get | ApiResponse>(`${endpoint}?${params.toString()}`);\n \n // Handle both paginated and simple array responses\n if ('data' in response.data && Array.isArray(response.data.data)) {\n // Paginated response\n const paginatedData = response.data as PaginatedResponse;\n setData(paginatedData.data);\n setTotal(paginatedData.total);\n setHasMore(paginatedData.has_more || false);\n return paginatedData.data;\n } else if ('data' in response.data && Array.isArray(response.data.data)) {\n // Simple array response wrapped in ApiResponse\n const apiData = response.data as ApiResponse;\n setData(apiData.data);\n setTotal(apiData.data.length);\n setHasMore(false);\n return apiData.data;\n } else if (Array.isArray(response.data)) {\n // Direct array response\n setData(response.data);\n setTotal(response.data.length);\n setHasMore(false);\n return response.data;\n } else {\n throw new Error('Invalid response format');\n }\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to fetch data';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const getById = useCallback(async (id: string): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n const response = await client.get | T>(`${endpoint}/${id}`);\n const item = 'data' in response.data ? response.data.data : response.data;\n return item;\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to fetch item';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const create = useCallback(async (itemData: Partial): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n const response = await client.post | T>(endpoint, itemData);\n const newItem = 'data' in response.data ? response.data.data : response.data;\n \n // Update local data\n setData(prev => [...prev, newItem]);\n setTotal(prev => prev + 1);\n \n return newItem;\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to create item';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const update = useCallback(async (id: string, itemData: Partial): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n const response = await client.put | T>(`${endpoint}/${id}`, itemData);\n const updatedItem = 'data' in response.data ? response.data.data : response.data;\n \n // Update local data\n setData(prev => prev.map(item => item.id === id ? updatedItem : item));\n \n return updatedItem;\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to update item';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const deleteItem = useCallback(async (id: string): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n await client.delete(`${endpoint}/${id}`);\n \n // Update local data\n setData(prev => prev.filter(item => item.id !== id));\n setTotal(prev => prev - 1);\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to delete item';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const refresh = useCallback(async () => {\n await getAll();\n }, [getAll]);\n\n return {\n data,\n loading,\n error,\n total,\n hasMore,\n client,\n getAll,\n getById,\n create,\n update,\n delete: deleteItem,\n clearError,\n refresh,\n };\n};","import { useState, useMemo, useCallback } from 'react';\nimport { FilterOptions, ListItem } from '../types';\n\nexport interface UseDataFilterOptions {\n searchFields?: string[];\n defaultFilters?: FilterOptions;\n debounceMs?: number;\n}\n\nexport interface UseDataFilterReturn {\n filteredData: ListItem[];\n filters: FilterOptions;\n setFilter: (key: string, value: any) => void;\n clearFilters: () => void;\n resetFilters: () => void;\n searchTerm: string;\n setSearchTerm: (term: string) => void;\n}\n\nexport const useDataFilter = (\n data: ListItem[],\n options: UseDataFilterOptions = {}\n): UseDataFilterReturn => {\n const {\n searchFields = ['name', 'title', 'email', 'description'],\n defaultFilters = {},\n } = options;\n\n const [filters, setFilters] = useState(defaultFilters);\n const [searchTerm, setSearchTerm] = useState('');\n\n const setFilter = useCallback((key: string, value: any) => {\n if (key === 'search') {\n setSearchTerm(value);\n setFilters(prev => ({ ...prev, search: value }));\n } else {\n setFilters(prev => ({ ...prev, [key]: value }));\n }\n }, []);\n\n const clearFilters = useCallback(() => {\n setFilters({});\n setSearchTerm('');\n }, []);\n\n const resetFilters = useCallback(() => {\n setFilters(defaultFilters);\n setSearchTerm('');\n }, [defaultFilters]);\n\n const filteredData = useMemo(() => {\n let result = [...data];\n\n // Apply search filter\n if (searchTerm.trim()) {\n const term = searchTerm.toLowerCase().trim();\n result = result.filter(item => {\n return searchFields.some(field => {\n const value = item[field];\n if (!value) return false;\n return value.toString().toLowerCase().includes(term);\n });\n });\n }\n\n // Apply other filters\n Object.entries(filters).forEach(([key, value]) => {\n if (key === 'search') return; // Already handled above\n \n if (value !== undefined && value !== null && value !== '') {\n if (Array.isArray(value) && value.length > 0) {\n // Array filter (e.g., multiple status selection)\n result = result.filter(item => value.includes(item[key]));\n } else {\n // Single value filter\n result = result.filter(item => {\n const itemValue = item[key];\n if (itemValue == null) return false;\n \n // Exact match for most cases\n if (itemValue.toString().toLowerCase() === value.toString().toLowerCase()) {\n return true;\n }\n \n // Partial match for string fields\n if (typeof itemValue === 'string' && typeof value === 'string') {\n return itemValue.toLowerCase().includes(value.toLowerCase());\n }\n \n return false;\n });\n }\n }\n });\n\n return result;\n }, [data, searchTerm, filters, searchFields]);\n\n return {\n filteredData,\n filters,\n setFilter,\n clearFilters,\n resetFilters,\n searchTerm,\n setSearchTerm,\n };\n};","import { notifications } from '@mantine/notifications';\nimport { NotificationConfig } from '../types';\n\nexport const showSuccessNotification = (message: string, title = 'Success') => {\n const config: NotificationConfig = {\n title,\n message,\n color: 'green',\n };\n notifications.show(config);\n};\n\nexport const showErrorNotification = (message: string, title = 'Error') => {\n const config: NotificationConfig = {\n title,\n message,\n color: 'red',\n };\n notifications.show(config);\n};\n\nexport const showWarningNotification = (message: string, title = 'Warning') => {\n const config: NotificationConfig = {\n title,\n message,\n color: 'yellow',\n };\n notifications.show(config);\n};\n\nexport const showInfoNotification = (message: string, title = 'Info') => {\n const config: NotificationConfig = {\n title,\n message,\n color: 'blue',\n };\n notifications.show(config);\n};\n\n// Common notification messages used across microfrontends\nexport const NotificationMessages = {\n // Generic CRUD operations\n createSuccess: (entityName: string) => `${entityName} created successfully`,\n updateSuccess: (entityName: string) => `${entityName} updated successfully`,\n deleteSuccess: (entityName: string) => `${entityName} deleted successfully`,\n \n createError: (entityName: string) => `Failed to create ${entityName}`,\n updateError: (entityName: string) => `Failed to update ${entityName}`,\n deleteError: (entityName: string) => `Failed to delete ${entityName}`,\n \n loadError: (entityName: string) => `Failed to load ${entityName}`,\n networkError: 'Network error occurred. Please try again.',\n \n // Validation\n validationError: 'Please check the form for errors',\n requiredFieldError: (fieldName: string) => `${fieldName} is required`,\n \n // Authentication\n authRequired: 'Authentication required',\n permissionDenied: 'Permission denied',\n sessionExpired: 'Session expired. Please log in again.',\n \n // Application-specific\n applicationCreated: 'Application created successfully',\n applicationUpdated: 'Application updated successfully',\n applicationDeleted: 'Application deleted successfully',\n \n tokenCreated: 'Token created successfully',\n tokenRevoked: 'Token revoked successfully',\n \n userCreated: 'User created successfully',\n userUpdated: 'User updated successfully',\n userDeleted: 'User deleted successfully',\n \n functionCreated: 'Function created successfully',\n functionUpdated: 'Function updated successfully',\n functionDeleted: 'Function deleted successfully',\n \n executionStarted: 'Function execution started',\n executionCompleted: 'Function execution completed',\n executionFailed: 'Function execution failed',\n};\n\n// Utility to show notifications for common operations\nexport const showCrudNotification = {\n success: (operation: 'create' | 'update' | 'delete', entityName: string) => {\n const message = NotificationMessages[`${operation}Success`](entityName);\n showSuccessNotification(message);\n },\n \n error: (operation: 'create' | 'update' | 'delete' | 'load', entityName: string, customMessage?: string) => {\n const message = customMessage || NotificationMessages[`${operation}Error`](entityName);\n showErrorNotification(message);\n },\n};","// Common validation patterns used across microfrontends\n\nexport const ValidationPatterns = {\n email: /^\\S+@\\S+\\.\\S+$/,\n url: /^https?:\\/\\/.+/,\n duration: /^\\d+[smhd]$/, // e.g., \"30s\", \"5m\", \"2h\", \"1d\"\n token: /^[a-zA-Z0-9_-]+$/,\n appId: /^[a-zA-Z0-9-_]+$/,\n uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\n};\n\nexport const ValidationMessages = {\n required: (fieldName: string) => `${fieldName} is required`,\n email: 'Please enter a valid email address',\n url: 'Please enter a valid URL (http:// or https://)',\n duration: 'Duration must be in format like 30s, 5m, 2h, 1d',\n minLength: (fieldName: string, minLength: number) => \n `${fieldName} must be at least ${minLength} characters`,\n maxLength: (fieldName: string, maxLength: number) => \n `${fieldName} must be no more than ${maxLength} characters`,\n pattern: (fieldName: string) => `${fieldName} format is invalid`,\n token: 'Token can only contain letters, numbers, underscores and hyphens',\n appId: 'App ID can only contain letters, numbers, hyphens and underscores',\n uuid: 'Please enter a valid UUID',\n positiveNumber: 'Must be a positive number',\n range: (fieldName: string, min: number, max: number) => \n `${fieldName} must be between ${min} and ${max}`,\n};\n\n// Common validation functions\nexport const validateRequired = (value: any): string | null => {\n if (value === null || value === undefined || value === '' || \n (Array.isArray(value) && value.length === 0)) {\n return 'This field is required';\n }\n return null;\n};\n\nexport const validateEmail = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.email.test(value) ? null : ValidationMessages.email;\n};\n\nexport const validateUrl = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.url.test(value) ? null : ValidationMessages.url;\n};\n\nexport const validateDuration = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.duration.test(value) ? null : ValidationMessages.duration;\n};\n\nexport const validateMinLength = (value: string, minLength: number, fieldName = 'Field'): string | null => {\n if (!value) return null;\n return value.length >= minLength ? null : ValidationMessages.minLength(fieldName, minLength);\n};\n\nexport const validateMaxLength = (value: string, maxLength: number, fieldName = 'Field'): string | null => {\n if (!value) return null;\n return value.length <= maxLength ? null : ValidationMessages.maxLength(fieldName, maxLength);\n};\n\nexport const validatePattern = (value: string, pattern: RegExp, fieldName = 'Field'): string | null => {\n if (!value) return null;\n return pattern.test(value) ? null : ValidationMessages.pattern(fieldName);\n};\n\nexport const validateRange = (value: number, min: number, max: number, fieldName = 'Field'): string | null => {\n if (value == null) return null;\n if (value < min || value > max) {\n return ValidationMessages.range(fieldName, min, max);\n }\n return null;\n};\n\nexport const validateAppId = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.appId.test(value) ? null : ValidationMessages.appId;\n};\n\nexport const validateToken = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.token.test(value) ? null : ValidationMessages.token;\n};\n\nexport const validateUuid = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.uuid.test(value) ? null : ValidationMessages.uuid;\n};\n\nexport const validateJsonString = (value: string): string | null => {\n if (!value || value.trim() === '') return null;\n \n try {\n JSON.parse(value);\n return null;\n } catch (error) {\n return 'Invalid JSON format';\n }\n};\n\n// Utility function to parse duration strings to seconds (common across KMS and FaaS)\nexport const parseDuration = (duration: string): number => {\n const match = duration.match(/^(\\d+)([smhd]?)$/);\n if (!match) return 86400; // Default to 24h in seconds\n \n const value = parseInt(match[1]);\n const unit = match[2] || 'h';\n \n switch (unit) {\n case 's': return value; // seconds\n case 'm': return value * 60; // minutes to seconds\n case 'h': return value * 3600; // hours to seconds \n case 'd': return value * 86400; // days to seconds\n default: return value * 3600; // default to hours\n }\n};\n\n// Utility function to format duration from seconds to human readable\nexport const formatDuration = (seconds: number): string => {\n if (seconds < 60) return `${seconds}s`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`;\n return `${Math.floor(seconds / 86400)}d`;\n};\n\n// Combine multiple validators\nexport const combineValidators = (...validators: Array<(value: any) => string | null>) => {\n return (value: any): string | null => {\n for (const validator of validators) {\n const error = validator(value);\n if (error) return error;\n }\n return null;\n };\n};"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","create","Iterator","verb","Symbol","iterator","v","op","TypeError","pop","push","__spreadArray","to","from","pack","ar","l","Array","slice","concat","SuppressedError","FormSidebar","_a","opened","onClose","onSuccess","title","_b","editMode","editItem","fields","onSubmit","_c","width","_d","initialValues","validation","isEditing","buildInitialValues","values","forEach","field","name","defaultValue","type","form","useForm","validate","required","trim","email","test","url","minLength","maxLength","_e","pattern","_f","custom","useEffect","updatedValues_1","setValues","_jsxs","Paper","style","position","top","right","bottom","zIndex","borderRadius","display","flexDirection","borderLeft","backgroundColor","transition","children","Group","justify","borderBottom","_jsx","Title","order","ActionIcon","variant","color","onClick","IconX","size","ScrollArea","flex","Box","successNotification","message","notifications","show","reset","console","error","toLowerCase","error_1","errorNotification","Stack","gap","map","inputProps","getInputProps","commonProps","key","placeholder","description","disabled","TextInput","NumberInput","Textarea","autosize","minRows","maxRows","Select","data","options","MultiSelect","JsonInput","validationError","formatOnBlur","mt","Button","DataTable","columns","loading","total","page","pageSize","onPageChange","onAdd","onEdit","onDelete","onRefresh","_g","customActions","_h","searchable","_j","filterable","_k","filters","onFiltersChange","_l","withBorder","_m","withColumnBorders","_o","striped","_p","highlightOnHover","_q","emptyMessage","_r","useState","localFilters","setLocalFilters","handleSearchChange","newFilters","handleFilterChange","renderCellValue","column","item","render","Text","c","Badge","active","inactive","pending","suspended","success","warning","toString","renderActionMenu","actions","icon","IconEdit","IconTrash","modals","openConfirmModal","labels","confirm","cancel","confirmProps","onConfirm","handleDeleteConfirm","visibleActions","filter","action","Menu","Target","IconDots","Dropdown","Item","leftSection","totalPages","Math","ceil","fw","IconRefresh","IconPlus","IconSearch","search","onChange","currentTarget","IconFilter","pos","LoadingOverlay","visible","Center","align","Table","Thead","Tr","Th","Tbody","Td","id","Pagination","useApiService","config","endpoint","setData","setLoading","setError","setTotal","hasMore","setHasMore","client","axios","baseURL","timeout","headers","defaultHeaders","interceptors","request","use","response","errorMessage","clearError","useCallback","getAll","params_1","URLSearchParams","entries","append","get","isArray","paginatedData","has_more","apiData","Error","err_1","getById","err_2","itemData","post","newItem_1","prev","err_3","update","put","updatedItem_1","err_4","deleteItem","delete","err_5","refresh","useDataFilter","searchFields","defaultFilters","setFilters","searchTerm","setSearchTerm","setFilter","clearFilters","resetFilters","filteredData","useMemo","term_1","some","includes","itemValue","showSuccessNotification","showErrorNotification","showWarningNotification","showInfoNotification","NotificationMessages","createSuccess","entityName","updateSuccess","deleteSuccess","createError","updateError","deleteError","loadError","networkError","requiredFieldError","fieldName","authRequired","permissionDenied","sessionExpired","applicationCreated","applicationUpdated","applicationDeleted","tokenCreated","tokenRevoked","userCreated","userUpdated","userDeleted","functionCreated","functionUpdated","functionDeleted","executionStarted","executionCompleted","executionFailed","showCrudNotification","operation","customMessage","ValidationPatterns","duration","token","appId","uuid","ValidationMessages","positiveNumber","range","min","max","validateRequired","validateEmail","validateUrl","validateDuration","validateMinLength","validateMaxLength","validatePattern","validateRange","validateAppId","validateToken","validateUuid","validateJsonString","JSON","parse","parseDuration","match","parseInt","formatDuration","seconds","floor","combineValidators","validators","_i","validators_1","validator"],"mappings":"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","x_google_ignoreList":[0]}
\ No newline at end of file
+{"version":3,"file":"index.esm.js","sources":["../../node_modules/tslib/tslib.es6.js","../src/components/FormSidebar/FormSidebar.tsx","../src/components/DataTable/DataTable.tsx","../src/components/StatusBadge/StatusBadge.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/ActionMenu/ActionMenu.tsx","../src/components/LoadingState/LoadingState.tsx","../src/hooks/useApiService.ts","../src/hooks/useDataFilter.ts","../src/utils/notifications.ts","../src/utils/validation.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React, { useEffect } from 'react';\nimport {\n Paper,\n TextInput,\n Select,\n MultiSelect,\n NumberInput,\n Textarea,\n JsonInput,\n Button,\n Group,\n Stack,\n Title,\n ActionIcon,\n ScrollArea,\n Box,\n Text,\n} from '@mantine/core';\nimport { IconX } from '@tabler/icons-react';\nimport { useForm } from '@mantine/form';\nimport { notifications } from '@mantine/notifications';\nimport { FormField, NotificationConfig } from '../../types';\n\nexport interface FormSidebarProps {\n opened: boolean;\n onClose: () => void;\n onSuccess: () => void;\n title: string;\n editMode?: boolean;\n editItem?: any;\n fields: FormField[];\n onSubmit: (values: any) => Promise;\n width?: number;\n initialValues?: Record;\n validateOnSubmit?: boolean;\n}\n\nconst FormSidebar: React.FC = ({\n opened,\n onClose,\n onSuccess,\n title,\n editMode = false,\n editItem,\n fields,\n onSubmit,\n width = 450,\n initialValues = {},\n validateOnSubmit = true,\n}) => {\n const isEditing = editMode && !!editItem;\n\n // Build initial form values from fields\n const buildInitialValues = () => {\n const values: Record = {};\n fields.forEach(field => {\n values[field.name] = field.defaultValue ?? (field.type === 'multiselect' ? [] : '');\n });\n return { ...values, ...initialValues };\n };\n\n // Build validation rules from fields\n const buildValidation = () => {\n const validation: Record string | null> = {};\n fields.forEach(field => {\n validation[field.name] = (value: any) => {\n if (field.required && (!value || (typeof value === 'string' && value.trim() === ''))) {\n return `${field.label} is required`;\n }\n if (field.validation?.email && value && !/^\\S+@\\S+$/.test(value)) {\n return 'Invalid email format';\n }\n if (field.validation?.url && value && !/^https?:\\/\\/.+/.test(value)) {\n return 'Invalid URL format';\n }\n if (field.validation?.minLength && value && value.length < field.validation.minLength) {\n return `${field.label} must be at least ${field.validation.minLength} characters`;\n }\n if (field.validation?.maxLength && value && value.length > field.validation.maxLength) {\n return `${field.label} must be no more than ${field.validation.maxLength} characters`;\n }\n if (field.validation?.pattern && value && !field.validation.pattern.test(value)) {\n return `${field.label} format is invalid`;\n }\n if (field.validation?.custom) {\n return field.validation.custom(value);\n }\n return null;\n };\n });\n return validation;\n };\n\n const form = useForm({\n initialValues: buildInitialValues(),\n validate: buildValidation(),\n });\n\n // Update form values when editItem changes\n useEffect(() => {\n if (isEditing && editItem) {\n const updatedValues: Record = {};\n fields.forEach(field => {\n updatedValues[field.name] = editItem[field.name] ?? field.defaultValue ?? '';\n });\n form.setValues(updatedValues);\n } else if (!isEditing) {\n form.setValues(buildInitialValues());\n }\n }, [editItem, opened, isEditing]);\n\n const handleSubmit = async (values: typeof form.values) => {\n try {\n await onSubmit(values);\n \n const successNotification: NotificationConfig = {\n title: 'Success',\n message: `${title} ${isEditing ? 'updated' : 'created'} successfully`,\n color: 'green',\n };\n \n notifications.show(successNotification);\n onSuccess();\n onClose();\n form.reset();\n } catch (error: any) {\n console.error(`Error ${isEditing ? 'updating' : 'creating'} ${title.toLowerCase()}:`, error);\n \n const errorNotification: NotificationConfig = {\n title: 'Error',\n message: error.message || `Failed to ${isEditing ? 'update' : 'create'} ${title.toLowerCase()}`,\n color: 'red',\n };\n \n notifications.show(errorNotification);\n }\n };\n\n const renderField = (field: FormField) => {\n const inputProps = form.getInputProps(field.name);\n const commonProps = {\n key: field.name,\n label: field.label,\n placeholder: field.placeholder,\n description: field.description,\n required: field.required,\n disabled: field.disabled || (isEditing && field.name === 'id'),\n ...inputProps,\n };\n\n switch (field.type) {\n case 'email':\n return ;\n \n case 'number':\n return ;\n \n case 'textarea':\n return ;\n \n case 'select':\n return (\n \n );\n \n case 'multiselect':\n return (\n \n );\n \n case 'json':\n return (\n \n );\n \n default:\n return ;\n }\n };\n\n return (\n \n {/* Header */}\n \n \n {isEditing ? `Edit ${title}` : `Create New ${title}`}\n \n \n \n \n \n\n {/* Content */}\n \n \n \n \n \n \n );\n};\n\nexport default FormSidebar;","import React, { useState, useEffect } from 'react';\nimport {\n Table,\n Paper,\n Group,\n Button,\n TextInput,\n Select,\n ActionIcon,\n Menu,\n Text,\n Badge,\n Box,\n Stack,\n Pagination,\n LoadingOverlay,\n Center,\n} from '@mantine/core';\nimport {\n IconSearch,\n IconPlus,\n IconDots,\n IconEdit,\n IconTrash,\n IconRefresh,\n IconFilter,\n} from '@tabler/icons-react';\nimport { modals } from '@mantine/modals';\nimport { notifications } from '@mantine/notifications';\nimport { ListItem, FilterOptions } from '../../types';\n\nexport interface TableColumn {\n key: string;\n label: string;\n sortable?: boolean;\n filterable?: boolean;\n width?: string | number;\n render?: (value: any, item: ListItem) => React.ReactNode;\n}\n\nexport interface TableAction {\n key: string;\n label: string;\n icon?: React.ReactNode;\n color?: string;\n onClick: (item: ListItem) => void;\n show?: (item: ListItem) => boolean;\n}\n\nexport interface DataTableProps {\n data: ListItem[];\n columns: TableColumn[];\n loading?: boolean;\n error?: string | null;\n title?: string;\n \n // Pagination\n total?: number;\n page?: number;\n pageSize?: number;\n onPageChange?: (page: number) => void;\n \n // Actions\n onAdd?: () => void;\n onEdit?: (item: ListItem) => void;\n onDelete?: (item: ListItem) => Promise;\n onRefresh?: () => void;\n customActions?: TableAction[];\n \n // Filtering & Search\n searchable?: boolean;\n filterable?: boolean;\n filters?: FilterOptions;\n onFiltersChange?: (filters: FilterOptions) => void;\n \n // Styling\n withBorder?: boolean;\n withColumnBorders?: boolean;\n striped?: boolean;\n highlightOnHover?: boolean;\n \n // Empty state\n emptyMessage?: string;\n}\n\nconst DataTable: React.FC = ({\n data,\n columns,\n loading = false,\n error = null,\n title,\n total = 0,\n page = 1,\n pageSize = 10,\n onPageChange,\n onAdd,\n onEdit,\n onDelete,\n onRefresh,\n customActions = [],\n searchable = true,\n filterable = false,\n filters = {},\n onFiltersChange,\n withBorder = true,\n withColumnBorders = false,\n striped = true,\n highlightOnHover = true,\n emptyMessage = 'No data available',\n}) => {\n const [localFilters, setLocalFilters] = useState(filters);\n \n useEffect(() => {\n setLocalFilters(filters);\n }, [filters]);\n\n const handleFilterChange = (key: string, value: string) => {\n const newFilters = { ...localFilters, [key]: value };\n setLocalFilters(newFilters);\n onFiltersChange?.(newFilters);\n };\n\n const handleSearchChange = (value: string) => {\n handleFilterChange('search', value);\n };\n\n const handleDeleteConfirm = (item: ListItem) => {\n modals.openConfirmModal({\n title: 'Confirm Delete',\n children: (\n \n Are you sure you want to delete this item? This action cannot be undone.\n \n ),\n labels: { confirm: 'Delete', cancel: 'Cancel' },\n confirmProps: { color: 'red' },\n onConfirm: async () => {\n try {\n if (onDelete) {\n await onDelete(item);\n notifications.show({\n title: 'Success',\n message: 'Item deleted successfully',\n color: 'green',\n });\n }\n } catch (error: any) {\n notifications.show({\n title: 'Error',\n message: error.message || 'Failed to delete item',\n color: 'red',\n });\n }\n },\n });\n };\n\n const renderCellValue = (column: TableColumn, item: ListItem) => {\n const value = item[column.key];\n \n if (column.render) {\n return column.render(value, item);\n }\n \n // Default rendering for common data types\n if (value === null || value === undefined) {\n return -;\n }\n \n if (typeof value === 'boolean') {\n return (\n \n {value ? 'Yes' : 'No'}\n \n );\n }\n \n if (column.key === 'status') {\n const statusColors: Record = {\n active: 'green',\n inactive: 'gray',\n pending: 'yellow',\n suspended: 'red',\n success: 'green',\n error: 'red',\n warning: 'yellow',\n };\n return (\n \n {value}\n \n );\n }\n \n return {value.toString()};\n };\n\n const renderActionMenu = (item: ListItem) => {\n const actions: TableAction[] = [];\n \n if (onEdit) {\n actions.push({\n key: 'edit',\n label: 'Edit',\n icon: ,\n onClick: onEdit,\n });\n }\n \n if (onDelete) {\n actions.push({\n key: 'delete',\n label: 'Delete',\n icon: ,\n color: 'red',\n onClick: () => handleDeleteConfirm(item),\n });\n }\n \n actions.push(...customActions);\n \n const visibleActions = actions.filter(action => \n !action.show || action.show(item)\n );\n \n if (visibleActions.length === 0) {\n return null;\n }\n \n return (\n \n );\n };\n\n const totalPages = Math.ceil(total / pageSize);\n\n return (\n \n {/* Header with title and actions */}\n \n \n {title && {title}}\n \n \n \n {onRefresh && (\n \n \n \n )}\n \n {onAdd && (\n } onClick={onAdd}>\n Add New\n \n )}\n \n \n\n {/* Filters and Search */}\n {(searchable || filterable) && (\n \n {searchable && (\n }\n value={localFilters.search || ''}\n onChange={(e) => handleSearchChange(e.currentTarget.value)}\n style={{ flex: 1 }}\n />\n )}\n \n {filterable && (\n \n \n \n \n {/* Add specific filter components as needed */}\n \n )}\n \n )}\n\n {/* Table */}\n \n \n \n {error ? (\n \n \n Error loading data\n {error}\n {onRefresh && (\n \n )}\n \n \n ) : data.length === 0 ? (\n \n \n {emptyMessage}\n {onAdd && (\n \n )}\n \n \n ) : (\n \n \n \n {columns.map((column) => (\n \n {column.label}\n \n ))}\n {(onEdit || onDelete || customActions.length > 0) && (\n Actions\n )}\n \n \n \n {data.map((item) => (\n \n {columns.map((column) => (\n \n {renderCellValue(column, item)}\n \n ))}\n {(onEdit || onDelete || customActions.length > 0) && (\n \n {renderActionMenu(item)}\n \n )}\n \n ))}\n \n
\n )}\n \n\n {/* Pagination */}\n {totalPages > 1 && (\n \n \n \n )}\n \n );\n};\n\nexport default DataTable;","import React from 'react';\nimport { Badge, BadgeProps } from '@mantine/core';\n\nexport type StatusVariant = 'status' | 'role' | 'runtime' | 'type' | 'severity' | 'execution';\n\nexport interface StatusBadgeProps extends Omit {\n value: string;\n variant?: StatusVariant;\n customColorMap?: Record;\n}\n\n// Standardized color mappings across all Skybridge apps\nconst COLOR_MAPS: Record> = {\n // Common status colors (used in User, KMS, etc.)\n status: {\n active: 'green',\n inactive: 'gray',\n pending: 'yellow',\n suspended: 'red',\n enabled: 'green',\n disabled: 'gray',\n online: 'green',\n offline: 'gray',\n running: 'green',\n stopped: 'gray',\n paused: 'yellow',\n failed: 'red',\n success: 'green',\n completed: 'green',\n error: 'red',\n warning: 'yellow',\n info: 'blue',\n },\n \n // User roles (User Management)\n role: {\n admin: 'red',\n moderator: 'orange',\n user: 'blue',\n viewer: 'gray',\n owner: 'purple',\n editor: 'cyan',\n contributor: 'teal',\n guest: 'gray',\n },\n \n // Application types (KMS)\n type: {\n static: 'blue',\n user: 'cyan',\n service: 'green',\n application: 'purple',\n api: 'orange',\n web: 'teal',\n mobile: 'pink',\n desktop: 'indigo',\n },\n \n // Runtime environments (FaaS)\n runtime: {\n 'nodejs18': 'green',\n 'nodejs20': 'lime',\n 'python3.9': 'blue',\n 'python3.11': 'indigo',\n 'go1.20': 'cyan',\n 'go1.21': 'teal',\n 'java11': 'orange',\n 'java17': 'red',\n 'dotnet6': 'purple',\n 'dotnet7': 'violet',\n 'rust': 'dark',\n 'php8': 'grape',\n },\n \n // Audit severity levels (KMS Audit)\n severity: {\n critical: 'red',\n high: 'orange',\n medium: 'yellow',\n low: 'blue',\n info: 'gray',\n debug: 'dark',\n },\n \n // Function execution states (FaaS)\n execution: {\n queued: 'gray',\n running: 'blue',\n succeeded: 'green',\n failed: 'red',\n timeout: 'orange',\n cancelled: 'yellow',\n retrying: 'cyan',\n },\n};\n\n// Default fallback colors for unknown values\nconst DEFAULT_COLORS: Record = {\n status: 'gray',\n role: 'blue',\n runtime: 'blue',\n type: 'blue', \n severity: 'gray',\n execution: 'gray',\n};\n\nconst StatusBadge: React.FC = ({\n value,\n variant = 'status',\n customColorMap,\n size = 'sm',\n ...badgeProps\n}) => {\n if (!value) {\n return -;\n }\n\n // Determine color from appropriate mapping\n const colorMap = customColorMap || COLOR_MAPS[variant] || COLOR_MAPS.status;\n const color = colorMap[value.toLowerCase()] || DEFAULT_COLORS[variant];\n \n // Format display value (capitalize first letter, handle special cases)\n const displayValue = formatDisplayValue(value, variant);\n\n return (\n \n {displayValue}\n \n );\n};\n\n// Helper function to format display values consistently\nconst formatDisplayValue = (value: string, variant: StatusVariant): string => {\n // Special formatting for specific variants\n switch (variant) {\n case 'runtime':\n // Format runtime names nicely (e.g., \"nodejs18\" -> \"Node.js 18\")\n if (value.startsWith('nodejs')) return `Node.js ${value.replace('nodejs', '')}`;\n if (value.startsWith('python')) return `Python ${value.replace('python', '')}`;\n if (value.startsWith('go')) return `Go ${value.replace('go', '')}`;\n if (value.startsWith('java')) return `Java ${value.replace('java', '')}`;\n if (value.startsWith('dotnet')) return `.NET ${value.replace('dotnet', '')}`;\n break;\n \n case 'type':\n // Capitalize application types\n if (value === 'api') return 'API';\n if (value === 'web') return 'Web App';\n if (value === 'mobile') return 'Mobile App';\n break;\n }\n \n // Default: capitalize first letter\n return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n};\n\nexport default StatusBadge;\n\n// Export additional utilities for advanced use cases\nexport { COLOR_MAPS, DEFAULT_COLORS };\n\n// Convenience components for common use cases\nexport const UserRoleBadge: React.FC> = (props) => (\n \n);\n\nexport const ApplicationTypeBadge: React.FC> = (props) => (\n \n);\n\nexport const RuntimeBadge: React.FC> = (props) => (\n \n);\n\nexport const ExecutionStatusBadge: React.FC> = (props) => (\n \n);\n\nexport const SeverityBadge: React.FC> = (props) => (\n \n);","import React from 'react';\nimport { Stack, Text, Button, Center, Box } from '@mantine/core';\nimport {\n IconDatabase,\n IconUsers,\n IconApps,\n IconFunction,\n IconKey,\n IconSearch,\n IconFilter,\n IconPlus,\n IconRefresh,\n IconAlertCircle,\n TablerIconsProps,\n} from '@tabler/icons-react';\n\nexport type EmptyStateVariant = \n | 'no-data'\n | 'no-results' \n | 'error'\n | 'loading-failed'\n | 'access-denied'\n | 'coming-soon';\n\nexport type EmptyStateContext =\n | 'users'\n | 'applications' \n | 'functions'\n | 'tokens'\n | 'executions'\n | 'permissions'\n | 'audit'\n | 'generic';\n\nexport interface EmptyStateAction {\n label: string;\n onClick: () => void;\n variant?: 'filled' | 'light' | 'outline';\n color?: string;\n leftSection?: React.ReactNode;\n}\n\nexport interface EmptyStateProps {\n variant?: EmptyStateVariant;\n context?: EmptyStateContext;\n title?: string;\n message?: string;\n icon?: React.ComponentType;\n iconSize?: number;\n iconColor?: string;\n actions?: EmptyStateAction[];\n height?: number | string;\n}\n\n// Default icons for each context\nconst CONTEXT_ICONS: Record> = {\n users: IconUsers,\n applications: IconApps,\n functions: IconFunction,\n tokens: IconKey,\n executions: IconFunction,\n permissions: IconKey,\n audit: IconDatabase,\n generic: IconDatabase,\n};\n\n// Default messages based on variant and context\nconst getDefaultContent = (variant: EmptyStateVariant, context: EmptyStateContext) => {\n const contextNames: Record = {\n users: 'users',\n applications: 'applications',\n functions: 'functions',\n tokens: 'tokens',\n executions: 'executions',\n permissions: 'permissions',\n audit: 'audit events',\n generic: 'items',\n };\n\n const contextName = contextNames[context];\n const capitalizedContext = contextName.charAt(0).toUpperCase() + contextName.slice(1);\n\n switch (variant) {\n case 'no-data':\n return {\n title: `No ${contextName} found`,\n message: `You haven't created any ${contextName} yet. Get started by adding your first ${contextName.slice(0, -1)}.`,\n };\n \n case 'no-results':\n return {\n title: 'No matching results',\n message: `No ${contextName} match your current filters or search criteria. Try adjusting your search terms or clearing filters.`,\n };\n \n case 'error':\n return {\n title: 'Something went wrong',\n message: `We couldn't load your ${contextName}. Please try again or contact support if the problem persists.`,\n };\n \n case 'loading-failed':\n return {\n title: 'Failed to load data',\n message: `There was a problem loading ${contextName}. Check your connection and try again.`,\n };\n \n case 'access-denied':\n return {\n title: 'Access denied',\n message: `You don't have permission to view ${contextName}. Contact your administrator if you need access.`,\n };\n \n case 'coming-soon':\n return {\n title: 'Coming soon',\n message: `${capitalizedContext} functionality is being developed. Check back soon for updates.`,\n };\n \n default:\n return {\n title: `No ${contextName}`,\n message: `There are no ${contextName} to display.`,\n };\n }\n};\n\n// Default actions based on variant and context\nconst getDefaultActions = (\n variant: EmptyStateVariant,\n context: EmptyStateContext,\n onAdd?: () => void,\n onRefresh?: () => void,\n onClearFilters?: () => void\n): EmptyStateAction[] => {\n const actions: EmptyStateAction[] = [];\n\n switch (variant) {\n case 'no-data':\n if (onAdd) {\n const contextActions: Record = {\n users: {\n label: 'Add User',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n applications: {\n label: 'Create Application',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n functions: {\n label: 'Create Function',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n tokens: {\n label: 'Generate Token',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n executions: {\n label: 'Run Function',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n permissions: {\n label: 'Add Permission',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n audit: {\n label: 'Refresh',\n onClick: onAdd,\n variant: 'light',\n leftSection: ,\n },\n generic: {\n label: 'Add New',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n };\n actions.push(contextActions[context]);\n }\n break;\n \n case 'no-results':\n if (onClearFilters) {\n actions.push({\n label: 'Clear Filters',\n onClick: onClearFilters,\n variant: 'light',\n leftSection: ,\n });\n }\n if (onRefresh) {\n actions.push({\n label: 'Refresh',\n onClick: onRefresh,\n variant: 'outline',\n leftSection: ,\n });\n }\n break;\n \n case 'error':\n case 'loading-failed':\n if (onRefresh) {\n actions.push({\n label: 'Try Again',\n onClick: onRefresh,\n variant: 'filled',\n leftSection: ,\n });\n }\n break;\n }\n\n return actions;\n};\n\n// Default icon based on variant\nconst getVariantIcon = (variant: EmptyStateVariant): React.ComponentType => {\n switch (variant) {\n case 'no-results':\n return IconSearch;\n case 'error':\n case 'loading-failed':\n case 'access-denied':\n return IconAlertCircle;\n default:\n return IconDatabase;\n }\n};\n\nconst EmptyState: React.FC void;\n onRefresh?: () => void;\n onClearFilters?: () => void;\n}> = ({\n variant = 'no-data',\n context = 'generic',\n title,\n message,\n icon,\n iconSize = 48,\n iconColor = 'dimmed',\n actions,\n height = 400,\n onAdd,\n onRefresh,\n onClearFilters,\n}) => {\n const defaultContent = getDefaultContent(variant, context);\n const finalTitle = title || defaultContent.title;\n const finalMessage = message || defaultContent.message;\n \n const IconComponent = icon || CONTEXT_ICONS[context] || getVariantIcon(variant);\n \n const finalActions = actions || getDefaultActions(\n variant, \n context, \n onAdd, \n onRefresh, \n onClearFilters\n );\n\n return (\n \n \n \n \n \n \n \n \n {finalTitle}\n \n \n {finalMessage}\n \n \n \n {finalActions.length > 0 && (\n \n {finalActions.map((action, index) => (\n \n ))}\n \n )}\n \n \n );\n};\n\nexport default EmptyState;\n\n// Convenience components for common scenarios\nexport const NoUsersState: React.FC & { onAddUser?: () => void }> = \n ({ onAddUser, ...props }) => (\n \n );\n\nexport const NoApplicationsState: React.FC & { onCreateApp?: () => void }> = \n ({ onCreateApp, ...props }) => (\n \n );\n\nexport const NoFunctionsState: React.FC & { onCreateFunction?: () => void }> = \n ({ onCreateFunction, ...props }) => (\n \n );\n\nexport const NoTokensState: React.FC & { onGenerateToken?: () => void }> = \n ({ onGenerateToken, ...props }) => (\n \n );\n\nexport const NoSearchResults: React.FC & { \n onClearFilters?: () => void; \n onRefresh?: () => void;\n}> = ({ onClearFilters, onRefresh, ...props }) => (\n \n);\n\nexport const ErrorState: React.FC & { onRetry?: () => void }> = \n ({ onRetry, ...props }) => (\n \n );","import React from 'react';\nimport {\n Paper,\n Group,\n Title,\n ActionIcon,\n ScrollArea,\n Box,\n Divider,\n} from '@mantine/core';\nimport { IconX } from '@tabler/icons-react';\n\nexport interface SidebarProps {\n opened: boolean;\n onClose: () => void;\n title: string;\n width?: number;\n position?: 'left' | 'right';\n headerActions?: React.ReactNode;\n footer?: React.ReactNode;\n children: React.ReactNode;\n \n // Styling customization\n zIndex?: number;\n offsetTop?: number;\n backgroundColor?: string;\n borderColor?: string;\n \n // Animation\n animationDuration?: string;\n \n // Accessibility\n 'aria-label'?: string;\n}\n\nconst Sidebar: React.FC = ({\n opened,\n onClose,\n title,\n width = 450,\n position = 'right',\n headerActions,\n footer,\n children,\n zIndex = 1000,\n offsetTop = 60,\n backgroundColor = 'var(--mantine-color-body)',\n borderColor = 'var(--mantine-color-gray-3)',\n animationDuration = '0.3s',\n 'aria-label': ariaLabel,\n}) => {\n // Calculate position styles based on position prop\n const getPositionStyles = () => {\n const baseStyles = {\n position: 'fixed' as const,\n top: offsetTop,\n bottom: 0,\n width: `${width}px`,\n zIndex,\n borderRadius: 0,\n display: 'flex',\n flexDirection: 'column' as const,\n backgroundColor,\n transition: `${position} ${animationDuration} ease`,\n };\n\n if (position === 'right') {\n return {\n ...baseStyles,\n right: opened ? 0 : `-${width}px`,\n borderLeft: `1px solid ${borderColor}`,\n };\n } else {\n return {\n ...baseStyles,\n left: opened ? 0 : `-${width}px`,\n borderRight: `1px solid ${borderColor}`,\n };\n }\n };\n\n return (\n \n {/* Header */}\n \n \n {title}\n \n \n {/* Header actions (optional) */}\n {headerActions && (\n \n {headerActions}\n \n )}\n \n {/* Close button */}\n \n \n \n \n\n {/* Content */}\n \n \n {children}\n \n \n\n {/* Footer (optional) */}\n {footer && (\n <>\n \n \n {footer}\n \n >\n )}\n \n );\n};\n\nexport default Sidebar;\n\n// Higher-level convenience component that combines Sidebar with common form patterns\nexport interface FormSidebarWrapperProps extends Omit {\n children: React.ReactNode;\n cancelLabel?: string;\n submitLabel?: string;\n onCancel?: () => void;\n onSubmit?: () => void;\n submitDisabled?: boolean;\n showFooterActions?: boolean;\n}\n\nexport const FormSidebarWrapper: React.FC = ({\n children,\n cancelLabel = 'Cancel',\n submitLabel = 'Save',\n onCancel,\n onSubmit,\n submitDisabled = false,\n showFooterActions = true,\n onClose,\n ...sidebarProps\n}) => {\n const handleCancel = () => {\n onCancel?.();\n onClose();\n };\n\n const footer = showFooterActions ? (\n \n \n {cancelLabel}\n \n \n {submitLabel}\n \n \n ) : undefined;\n\n return (\n \n {children}\n \n );\n};\n\n// Specialized sidebar variants for common use cases\nexport interface DetailsSidebarProps extends Omit {\n itemName: string;\n itemType?: string;\n editButton?: React.ReactNode;\n deleteButton?: React.ReactNode;\n status?: React.ReactNode;\n}\n\nexport const DetailsSidebar: React.FC = ({\n itemName,\n itemType = 'Item',\n editButton,\n deleteButton,\n status,\n children,\n ...sidebarProps\n}) => {\n const headerActions = (\n \n {status}\n {editButton}\n {deleteButton}\n \n );\n\n return (\n \n {children}\n \n );\n};\n\n// Quick sidebar for simple content display\nexport interface QuickSidebarProps extends Omit {\n content: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nexport const QuickSidebar: React.FC = ({\n content,\n actions,\n ...sidebarProps\n}) => (\n \n {content}\n \n);\n\n// Hooks for sidebar state management\nexport const useSidebar = (initialOpened = false) => {\n const [opened, setOpened] = React.useState(initialOpened);\n \n const open = React.useCallback(() => setOpened(true), []);\n const close = React.useCallback(() => setOpened(false), []);\n const toggle = React.useCallback(() => setOpened(prev => !prev), []);\n \n return {\n opened,\n open,\n close,\n toggle,\n setOpened,\n };\n};","import React from 'react';\nimport {\n Menu,\n ActionIcon,\n Button,\n Group,\n Text,\n Divider,\n} from '@mantine/core';\nimport {\n IconDots,\n IconEdit,\n IconTrash,\n IconEye,\n IconCopy,\n IconDownload,\n IconShare,\n IconArchive,\n IconRestore,\n IconSettings,\n IconPlayerPlay,\n IconPlayerPause,\n IconPlayerStop,\n IconRefresh,\n TablerIconsProps,\n} from '@tabler/icons-react';\nimport { modals } from '@mantine/modals';\nimport { notifications } from '@mantine/notifications';\n\nexport interface ActionMenuItem {\n key: string;\n label: string;\n icon?: React.ComponentType;\n color?: string;\n disabled?: boolean;\n hidden?: boolean;\n onClick: (item?: any) => void | Promise;\n \n // Confirmation dialog for destructive actions\n confirm?: {\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n };\n \n // Show/hide based on item properties\n show?: (item: any) => boolean;\n}\n\nexport interface ActionMenuProps {\n item?: any; // The data item this menu is for\n actions: ActionMenuItem[];\n \n // Menu trigger customization\n trigger?: 'dots' | 'button' | 'custom';\n triggerLabel?: string;\n triggerIcon?: React.ComponentType;\n triggerProps?: any;\n customTrigger?: React.ReactNode;\n \n // Menu positioning\n position?: 'bottom-end' | 'bottom-start' | 'top-end' | 'top-start';\n \n // Menu styling\n withArrow?: boolean;\n withinPortal?: boolean;\n \n // Accessibility\n 'aria-label'?: string;\n}\n\nconst ActionMenu: React.FC = ({\n item,\n actions,\n trigger = 'dots',\n triggerLabel = 'Actions',\n triggerIcon: TriggerIcon = IconDots,\n triggerProps = {},\n customTrigger,\n position = 'bottom-end',\n withArrow = false,\n withinPortal = true,\n 'aria-label': ariaLabel,\n}) => {\n // Filter actions based on show/hidden conditions\n const visibleActions = actions.filter(action => {\n if (action.hidden) return false;\n if (action.show && !action.show(item)) return false;\n return true;\n });\n\n // Group actions by type (with dividers)\n const groupedActions = groupActionsByType(visibleActions);\n\n // Don't render if no visible actions\n if (visibleActions.length === 0) {\n return null;\n }\n\n const handleActionClick = async (action: ActionMenuItem) => {\n try {\n // Show confirmation dialog for destructive actions\n if (action.confirm) {\n return new Promise((resolve) => {\n modals.openConfirmModal({\n title: action.confirm!.title,\n children: (\n {action.confirm!.message}\n ),\n labels: { \n confirm: action.confirm!.confirmLabel || 'Confirm', \n cancel: action.confirm!.cancelLabel || 'Cancel' \n },\n confirmProps: { color: action.color || 'red' },\n onConfirm: async () => {\n try {\n await action.onClick(item);\n resolve();\n } catch (error) {\n console.error(`Action ${action.key} failed:`, error);\n notifications.show({\n title: 'Action Failed',\n message: `Failed to ${action.label.toLowerCase()}`,\n color: 'red',\n });\n }\n },\n onCancel: () => resolve(),\n });\n });\n } else {\n await action.onClick(item);\n }\n } catch (error) {\n console.error(`Action ${action.key} failed:`, error);\n notifications.show({\n title: 'Action Failed', \n message: `Failed to ${action.label.toLowerCase()}`,\n color: 'red',\n });\n }\n };\n\n const renderTrigger = () => {\n if (customTrigger) {\n return customTrigger;\n }\n\n if (trigger === 'button') {\n return (\n }\n {...triggerProps}\n >\n {triggerLabel}\n \n );\n }\n\n // Default dots trigger\n return (\n \n \n \n );\n };\n\n const renderMenuItem = (action: ActionMenuItem) => {\n const IconComponent = action.icon;\n \n return (\n }\n color={action.color}\n disabled={action.disabled}\n onClick={() => handleActionClick(action)}\n >\n {action.label}\n \n );\n };\n\n return (\n \n );\n};\n\n// Helper function to group actions by type for better UX\nconst groupActionsByType = (actions: ActionMenuItem[]): ActionMenuItem[][] => {\n const primaryActions: ActionMenuItem[] = [];\n const secondaryActions: ActionMenuItem[] = [];\n const destructiveActions: ActionMenuItem[] = [];\n\n actions.forEach(action => {\n if (action.color === 'red' || action.key.includes('delete') || action.key.includes('remove')) {\n destructiveActions.push(action);\n } else if (action.key.includes('edit') || action.key.includes('view') || action.key.includes('copy')) {\n primaryActions.push(action);\n } else {\n secondaryActions.push(action);\n }\n });\n\n const groups: ActionMenuItem[][] = [];\n if (primaryActions.length > 0) groups.push(primaryActions);\n if (secondaryActions.length > 0) groups.push(secondaryActions);\n if (destructiveActions.length > 0) groups.push(destructiveActions);\n\n return groups;\n};\n\nexport default ActionMenu;\n\n// Pre-built action creators for common operations\nexport const createViewAction = (onView: (item: any) => void): ActionMenuItem => ({\n key: 'view',\n label: 'View Details',\n icon: IconEye,\n onClick: onView,\n});\n\nexport const createEditAction = (onEdit: (item: any) => void): ActionMenuItem => ({\n key: 'edit',\n label: 'Edit',\n icon: IconEdit,\n color: 'blue',\n onClick: onEdit,\n});\n\nexport const createCopyAction = (onCopy: (item: any) => void): ActionMenuItem => ({\n key: 'copy',\n label: 'Duplicate',\n icon: IconCopy,\n onClick: onCopy,\n});\n\nexport const createDeleteAction = (\n onDelete: (item: any) => void | Promise,\n itemName = 'item'\n): ActionMenuItem => ({\n key: 'delete',\n label: 'Delete',\n icon: IconTrash,\n color: 'red',\n onClick: onDelete,\n confirm: {\n title: 'Confirm Delete',\n message: `Are you sure you want to delete this ${itemName}? This action cannot be undone.`,\n confirmLabel: 'Delete',\n cancelLabel: 'Cancel',\n },\n});\n\nexport const createArchiveAction = (onArchive: (item: any) => void): ActionMenuItem => ({\n key: 'archive',\n label: 'Archive',\n icon: IconArchive,\n color: 'orange',\n onClick: onArchive,\n confirm: {\n title: 'Archive Item',\n message: 'Are you sure you want to archive this item?',\n },\n});\n\nexport const createRestoreAction = (onRestore: (item: any) => void): ActionMenuItem => ({\n key: 'restore',\n label: 'Restore',\n icon: IconRestore,\n color: 'green',\n onClick: onRestore,\n});\n\n// Context-specific action sets\nexport const getUserActions = (\n onEdit: (item: any) => void,\n onDelete: (item: any) => void,\n onViewDetails?: (item: any) => void\n): ActionMenuItem[] => [\n ...(onViewDetails ? [createViewAction(onViewDetails)] : []),\n createEditAction(onEdit),\n createDeleteAction(onDelete, 'user'),\n];\n\nexport const getApplicationActions = (\n onEdit: (item: any) => void,\n onDelete: (item: any) => void,\n onConfigure?: (item: any) => void\n): ActionMenuItem[] => [\n createEditAction(onEdit),\n ...(onConfigure ? [{\n key: 'configure',\n label: 'Configure',\n icon: IconSettings,\n onClick: onConfigure,\n }] : []),\n createDeleteAction(onDelete, 'application'),\n];\n\nexport const getFunctionActions = (\n onEdit: (item: any) => void,\n onDelete: (item: any) => void,\n onExecute?: (item: any) => void,\n onViewLogs?: (item: any) => void\n): ActionMenuItem[] => [\n ...(onExecute ? [{\n key: 'execute',\n label: 'Execute',\n icon: IconPlayerPlay,\n color: 'green',\n onClick: onExecute,\n }] : []),\n ...(onViewLogs ? [{\n key: 'logs',\n label: 'View Logs',\n icon: IconEye,\n onClick: onViewLogs,\n }] : []),\n createEditAction(onEdit),\n createDeleteAction(onDelete, 'function'),\n];\n\nexport const getTokenActions = (\n onRevoke: (item: any) => void,\n onCopy?: (item: any) => void,\n onRefresh?: (item: any) => void\n): ActionMenuItem[] => [\n ...(onCopy ? [createCopyAction(onCopy)] : []),\n ...(onRefresh ? [{\n key: 'refresh',\n label: 'Refresh',\n icon: IconRefresh,\n onClick: onRefresh,\n }] : []),\n {\n key: 'revoke',\n label: 'Revoke',\n icon: IconPlayerStop,\n color: 'red',\n onClick: onRevoke,\n confirm: {\n title: 'Revoke Token',\n message: 'Are you sure you want to revoke this token? This action cannot be undone and will immediately disable the token.',\n confirmLabel: 'Revoke',\n },\n },\n];","import React from 'react';\nimport { \n Stack, \n Text, \n Loader, \n Center, \n Progress, \n Box, \n Group,\n Skeleton,\n Card,\n SimpleGrid,\n} from '@mantine/core';\n\nexport type LoadingVariant = \n | 'spinner' // Simple spinner with text\n | 'progress' // Progress bar with percentage\n | 'skeleton-table' // Table skeleton\n | 'skeleton-cards' // Card grid skeleton\n | 'skeleton-form' // Form skeleton\n | 'skeleton-text' // Text content skeleton\n | 'dots' // Animated dots\n | 'overlay'; // Full overlay spinner\n\nexport type LoadingSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface LoadingStateProps {\n variant?: LoadingVariant;\n size?: LoadingSize;\n height?: number | string;\n \n // Text content\n message?: string;\n submessage?: string;\n \n // Progress specific\n progress?: number; // 0-100\n progressLabel?: string;\n \n // Skeleton specific\n rows?: number;\n columns?: number;\n \n // Styling\n color?: string;\n withContainer?: boolean;\n \n // Animation\n animate?: boolean;\n}\n\nconst LoadingState: React.FC = ({\n variant = 'spinner',\n size = 'md',\n height = 200,\n message,\n submessage,\n progress,\n progressLabel,\n rows = 5,\n columns = 3,\n color = 'blue',\n withContainer = true,\n animate = true,\n}) => {\n const getLoaderSize = (): number => {\n const sizeMap: Record = {\n xs: 16,\n sm: 24,\n md: 32,\n lg: 48,\n xl: 64,\n };\n return sizeMap[size];\n };\n\n const getTextSize = (): string => {\n const sizeMap: Record = {\n xs: 'xs',\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n xl: 'xl',\n };\n return sizeMap[size];\n };\n\n const renderSpinner = () => (\n \n \n {message && (\n \n {message}\n \n )}\n {submessage && (\n \n {submessage}\n \n )}\n \n );\n\n const renderProgress = () => (\n \n {(message || progressLabel) && (\n \n \n {message || 'Loading...'}\n \n {progressLabel && (\n \n {progressLabel}\n \n )}\n \n )}\n \n \n \n {submessage && (\n \n {submessage}\n \n )}\n \n );\n\n const renderSkeletonTable = () => (\n \n {/* Table header */}\n \n {Array.from({ length: columns }).map((_, i) => (\n \n ))}\n \n \n {/* Table rows */}\n {Array.from({ length: rows }).map((_, rowIndex) => (\n \n {Array.from({ length: columns }).map((_, colIndex) => (\n \n ))}\n \n ))}\n \n );\n\n const renderSkeletonCards = () => (\n \n {Array.from({ length: rows * columns }).map((_, i) => (\n \n \n \n \n \n \n \n \n \n \n \n ))}\n \n );\n\n const renderSkeletonForm = () => (\n \n {Array.from({ length: rows }).map((_, i) => (\n \n \n \n \n ))}\n \n \n \n \n \n \n );\n\n const renderSkeletonText = () => (\n \n {Array.from({ length: rows }).map((_, i) => {\n // Vary line widths for more realistic skeleton\n const widths = ['100%', '95%', '85%', '90%', '75%'];\n return (\n \n );\n })}\n \n );\n\n const renderDots = () => {\n const dots = Array.from({ length: 3 }).map((_, i) => (\n \n ));\n\n return (\n \n \n {dots}\n \n {message && (\n \n {message}\n \n )}\n \n );\n };\n\n const renderOverlay = () => (\n \n \n {renderSpinner()}\n \n \n );\n\n const getContent = () => {\n switch (variant) {\n case 'progress':\n return renderProgress();\n case 'skeleton-table':\n return renderSkeletonTable();\n case 'skeleton-cards':\n return renderSkeletonCards();\n case 'skeleton-form':\n return renderSkeletonForm();\n case 'skeleton-text':\n return renderSkeletonText();\n case 'dots':\n return renderDots();\n case 'overlay':\n return renderOverlay();\n default:\n return renderSpinner();\n }\n };\n\n // For overlay variant, don't wrap in container\n if (variant === 'overlay') {\n return (\n <>\n {getContent()}\n \n >\n );\n }\n\n const content = (\n <>\n {getContent()}\n {animate && }\n >\n );\n\n if (!withContainer) {\n return content;\n }\n\n return (\n \n {content}\n \n );\n};\n\n// CSS keyframes for dot animation\nconst loadingDotsKeyframes = `\n @keyframes loading-dots {\n 0%, 80%, 100% {\n transform: scale(0);\n opacity: 0.5;\n }\n 40% {\n transform: scale(1);\n opacity: 1;\n }\n }\n`;\n\nexport default LoadingState;\n\n// Convenience components for common loading scenarios\nexport const TableLoadingState: React.FC<{ rows?: number; columns?: number }> = \n ({ rows = 5, columns = 4 }) => (\n \n );\n\nexport const CardsLoadingState: React.FC<{ count?: number; columns?: number }> = \n ({ count = 6, columns = 3 }) => (\n \n );\n\nexport const FormLoadingState: React.FC<{ fields?: number }> = \n ({ fields = 4 }) => (\n \n );\n\nexport const PageLoadingState: React.FC<{ message?: string }> = \n ({ message = 'Loading page...' }) => (\n \n );\n\nexport const InlineLoadingState: React.FC<{ message?: string; size?: LoadingSize }> = \n ({ message = 'Loading...', size = 'sm' }) => (\n \n \n {message}\n \n );\n\n// Hook for loading state management\nexport const useLoadingState = (initialLoading = false) => {\n const [loading, setLoading] = React.useState(initialLoading);\n const [progress, setProgress] = React.useState(0);\n \n const startLoading = React.useCallback(() => setLoading(true), []);\n const stopLoading = React.useCallback(() => {\n setLoading(false);\n setProgress(0);\n }, []);\n \n const updateProgress = React.useCallback((value: number) => {\n setProgress(Math.max(0, Math.min(100, value)));\n }, []);\n \n return {\n loading,\n progress,\n startLoading,\n stopLoading,\n updateProgress,\n setLoading,\n setProgress,\n };\n};","import { useState, useCallback } from 'react';\nimport axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { ApiResponse, PaginatedResponse, FilterOptions } from '../types';\n\nexport interface ApiServiceConfig {\n baseURL: string;\n defaultHeaders?: Record;\n timeout?: number;\n}\n\nexport interface UseApiServiceReturn {\n data: T[];\n loading: boolean;\n error: string | null;\n total: number;\n hasMore: boolean;\n client: AxiosInstance;\n \n // CRUD operations\n getAll: (filters?: FilterOptions) => Promise;\n getById: (id: string) => Promise;\n create: (data: Partial) => Promise;\n update: (id: string, data: Partial) => Promise;\n delete: (id: string) => Promise;\n \n // Utility methods\n clearError: () => void;\n refresh: () => Promise;\n}\n\nexport const useApiService = (\n config: ApiServiceConfig,\n endpoint: string\n): UseApiServiceReturn => {\n const [data, setData] = useState([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n const [total, setTotal] = useState(0);\n const [hasMore, setHasMore] = useState(false);\n\n // Create axios instance\n const client = axios.create({\n baseURL: config.baseURL,\n timeout: config.timeout || 10000,\n headers: {\n 'Content-Type': 'application/json',\n ...config.defaultHeaders,\n },\n });\n\n // Add request interceptor for common headers\n client.interceptors.request.use(\n (config) => {\n // Add user email header if available (common pattern in the codebase)\n const userEmail = 'admin@example.com'; // This could come from a context or config\n if (userEmail) {\n config.headers['X-User-Email'] = userEmail;\n }\n return config;\n },\n (error) => Promise.reject(error)\n );\n\n // Add response interceptor for error handling\n client.interceptors.response.use(\n (response) => response,\n (error) => {\n const errorMessage = error.response?.data?.message || error.message || 'An error occurred';\n setError(errorMessage);\n return Promise.reject(error);\n }\n );\n\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n const getAll = useCallback(async (filters: FilterOptions = {}): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n const params = new URLSearchParams();\n Object.entries(filters).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '') {\n params.append(key, value.toString());\n }\n });\n\n const response = await client.get | ApiResponse>(`${endpoint}?${params.toString()}`);\n \n // Handle both paginated and simple array responses\n if ('data' in response.data && Array.isArray(response.data.data)) {\n // Paginated response\n const paginatedData = response.data as PaginatedResponse;\n setData(paginatedData.data);\n setTotal(paginatedData.total);\n setHasMore(paginatedData.has_more || false);\n return paginatedData.data;\n } else if ('data' in response.data && Array.isArray(response.data.data)) {\n // Simple array response wrapped in ApiResponse\n const apiData = response.data as ApiResponse;\n setData(apiData.data);\n setTotal(apiData.data.length);\n setHasMore(false);\n return apiData.data;\n } else if (Array.isArray(response.data)) {\n // Direct array response\n setData(response.data);\n setTotal(response.data.length);\n setHasMore(false);\n return response.data;\n } else {\n throw new Error('Invalid response format');\n }\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to fetch data';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const getById = useCallback(async (id: string): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n const response = await client.get | T>(`${endpoint}/${id}`);\n const item = 'data' in response.data ? response.data.data : response.data;\n return item;\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to fetch item';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const create = useCallback(async (itemData: Partial): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n const response = await client.post | T>(endpoint, itemData);\n const newItem = 'data' in response.data ? response.data.data : response.data;\n \n // Update local data\n setData(prev => [...prev, newItem]);\n setTotal(prev => prev + 1);\n \n return newItem;\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to create item';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const update = useCallback(async (id: string, itemData: Partial): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n const response = await client.put | T>(`${endpoint}/${id}`, itemData);\n const updatedItem = 'data' in response.data ? response.data.data : response.data;\n \n // Update local data\n setData(prev => prev.map(item => item.id === id ? updatedItem : item));\n \n return updatedItem;\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to update item';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const deleteItem = useCallback(async (id: string): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n await client.delete(`${endpoint}/${id}`);\n \n // Update local data\n setData(prev => prev.filter(item => item.id !== id));\n setTotal(prev => prev - 1);\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to delete item';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const refresh = useCallback(async () => {\n await getAll();\n }, [getAll]);\n\n return {\n data,\n loading,\n error,\n total,\n hasMore,\n client,\n getAll,\n getById,\n create,\n update,\n delete: deleteItem,\n clearError,\n refresh,\n };\n};","import { useState, useMemo, useCallback } from 'react';\nimport { FilterOptions, ListItem } from '../types';\n\nexport interface UseDataFilterOptions {\n searchFields?: string[];\n defaultFilters?: FilterOptions;\n debounceMs?: number;\n}\n\nexport interface UseDataFilterReturn {\n filteredData: ListItem[];\n filters: FilterOptions;\n setFilter: (key: string, value: any) => void;\n clearFilters: () => void;\n resetFilters: () => void;\n searchTerm: string;\n setSearchTerm: (term: string) => void;\n}\n\nexport const useDataFilter = (\n data: ListItem[],\n options: UseDataFilterOptions = {}\n): UseDataFilterReturn => {\n const {\n searchFields = ['name', 'title', 'email', 'description'],\n defaultFilters = {},\n } = options;\n\n const [filters, setFilters] = useState(defaultFilters);\n const [searchTerm, setSearchTerm] = useState('');\n\n const setFilter = useCallback((key: string, value: any) => {\n if (key === 'search') {\n setSearchTerm(value);\n setFilters(prev => ({ ...prev, search: value }));\n } else {\n setFilters(prev => ({ ...prev, [key]: value }));\n }\n }, []);\n\n const clearFilters = useCallback(() => {\n setFilters({});\n setSearchTerm('');\n }, []);\n\n const resetFilters = useCallback(() => {\n setFilters(defaultFilters);\n setSearchTerm('');\n }, [defaultFilters]);\n\n const filteredData = useMemo(() => {\n let result = [...data];\n\n // Apply search filter\n if (searchTerm.trim()) {\n const term = searchTerm.toLowerCase().trim();\n result = result.filter(item => {\n return searchFields.some(field => {\n const value = item[field];\n if (!value) return false;\n return value.toString().toLowerCase().includes(term);\n });\n });\n }\n\n // Apply other filters\n Object.entries(filters).forEach(([key, value]) => {\n if (key === 'search') return; // Already handled above\n \n if (value !== undefined && value !== null && value !== '') {\n if (Array.isArray(value) && value.length > 0) {\n // Array filter (e.g., multiple status selection)\n result = result.filter(item => value.includes(item[key]));\n } else {\n // Single value filter\n result = result.filter(item => {\n const itemValue = item[key];\n if (itemValue == null) return false;\n \n // Exact match for most cases\n if (itemValue.toString().toLowerCase() === value.toString().toLowerCase()) {\n return true;\n }\n \n // Partial match for string fields\n if (typeof itemValue === 'string' && typeof value === 'string') {\n return itemValue.toLowerCase().includes(value.toLowerCase());\n }\n \n return false;\n });\n }\n }\n });\n\n return result;\n }, [data, searchTerm, filters, searchFields]);\n\n return {\n filteredData,\n filters,\n setFilter,\n clearFilters,\n resetFilters,\n searchTerm,\n setSearchTerm,\n };\n};","import { notifications } from '@mantine/notifications';\nimport { NotificationConfig } from '../types';\n\nexport const showSuccessNotification = (message: string, title = 'Success') => {\n const config: NotificationConfig = {\n title,\n message,\n color: 'green',\n };\n notifications.show(config);\n};\n\nexport const showErrorNotification = (message: string, title = 'Error') => {\n const config: NotificationConfig = {\n title,\n message,\n color: 'red',\n };\n notifications.show(config);\n};\n\nexport const showWarningNotification = (message: string, title = 'Warning') => {\n const config: NotificationConfig = {\n title,\n message,\n color: 'yellow',\n };\n notifications.show(config);\n};\n\nexport const showInfoNotification = (message: string, title = 'Info') => {\n const config: NotificationConfig = {\n title,\n message,\n color: 'blue',\n };\n notifications.show(config);\n};\n\n// Common notification messages used across microfrontends\nexport const NotificationMessages = {\n // Generic CRUD operations\n createSuccess: (entityName: string) => `${entityName} created successfully`,\n updateSuccess: (entityName: string) => `${entityName} updated successfully`,\n deleteSuccess: (entityName: string) => `${entityName} deleted successfully`,\n \n createError: (entityName: string) => `Failed to create ${entityName}`,\n updateError: (entityName: string) => `Failed to update ${entityName}`,\n deleteError: (entityName: string) => `Failed to delete ${entityName}`,\n \n loadError: (entityName: string) => `Failed to load ${entityName}`,\n networkError: 'Network error occurred. Please try again.',\n \n // Validation\n validationError: 'Please check the form for errors',\n requiredFieldError: (fieldName: string) => `${fieldName} is required`,\n \n // Authentication\n authRequired: 'Authentication required',\n permissionDenied: 'Permission denied',\n sessionExpired: 'Session expired. Please log in again.',\n \n // Application-specific\n applicationCreated: 'Application created successfully',\n applicationUpdated: 'Application updated successfully',\n applicationDeleted: 'Application deleted successfully',\n \n tokenCreated: 'Token created successfully',\n tokenRevoked: 'Token revoked successfully',\n \n userCreated: 'User created successfully',\n userUpdated: 'User updated successfully',\n userDeleted: 'User deleted successfully',\n \n functionCreated: 'Function created successfully',\n functionUpdated: 'Function updated successfully',\n functionDeleted: 'Function deleted successfully',\n \n executionStarted: 'Function execution started',\n executionCompleted: 'Function execution completed',\n executionFailed: 'Function execution failed',\n};\n\n// Utility to show notifications for common operations\nexport const showCrudNotification = {\n success: (operation: 'create' | 'update' | 'delete', entityName: string) => {\n const message = NotificationMessages[`${operation}Success`](entityName);\n showSuccessNotification(message);\n },\n \n error: (operation: 'create' | 'update' | 'delete' | 'load', entityName: string, customMessage?: string) => {\n const message = customMessage || NotificationMessages[`${operation}Error`](entityName);\n showErrorNotification(message);\n },\n};","// Common validation patterns used across microfrontends\n\nexport const ValidationPatterns = {\n email: /^\\S+@\\S+\\.\\S+$/,\n url: /^https?:\\/\\/.+/,\n duration: /^\\d+[smhd]$/, // e.g., \"30s\", \"5m\", \"2h\", \"1d\"\n token: /^[a-zA-Z0-9_-]+$/,\n appId: /^[a-zA-Z0-9-_]+$/,\n uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\n};\n\nexport const ValidationMessages = {\n required: (fieldName: string) => `${fieldName} is required`,\n email: 'Please enter a valid email address',\n url: 'Please enter a valid URL (http:// or https://)',\n duration: 'Duration must be in format like 30s, 5m, 2h, 1d',\n minLength: (fieldName: string, minLength: number) => \n `${fieldName} must be at least ${minLength} characters`,\n maxLength: (fieldName: string, maxLength: number) => \n `${fieldName} must be no more than ${maxLength} characters`,\n pattern: (fieldName: string) => `${fieldName} format is invalid`,\n token: 'Token can only contain letters, numbers, underscores and hyphens',\n appId: 'App ID can only contain letters, numbers, hyphens and underscores',\n uuid: 'Please enter a valid UUID',\n positiveNumber: 'Must be a positive number',\n range: (fieldName: string, min: number, max: number) => \n `${fieldName} must be between ${min} and ${max}`,\n};\n\n// Common validation functions\nexport const validateRequired = (value: any): string | null => {\n if (value === null || value === undefined || value === '' || \n (Array.isArray(value) && value.length === 0)) {\n return 'This field is required';\n }\n return null;\n};\n\nexport const validateEmail = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.email.test(value) ? null : ValidationMessages.email;\n};\n\nexport const validateUrl = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.url.test(value) ? null : ValidationMessages.url;\n};\n\nexport const validateDuration = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.duration.test(value) ? null : ValidationMessages.duration;\n};\n\nexport const validateMinLength = (value: string, minLength: number, fieldName = 'Field'): string | null => {\n if (!value) return null;\n return value.length >= minLength ? null : ValidationMessages.minLength(fieldName, minLength);\n};\n\nexport const validateMaxLength = (value: string, maxLength: number, fieldName = 'Field'): string | null => {\n if (!value) return null;\n return value.length <= maxLength ? null : ValidationMessages.maxLength(fieldName, maxLength);\n};\n\nexport const validatePattern = (value: string, pattern: RegExp, fieldName = 'Field'): string | null => {\n if (!value) return null;\n return pattern.test(value) ? null : ValidationMessages.pattern(fieldName);\n};\n\nexport const validateRange = (value: number, min: number, max: number, fieldName = 'Field'): string | null => {\n if (value == null) return null;\n if (value < min || value > max) {\n return ValidationMessages.range(fieldName, min, max);\n }\n return null;\n};\n\nexport const validateAppId = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.appId.test(value) ? null : ValidationMessages.appId;\n};\n\nexport const validateToken = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.token.test(value) ? null : ValidationMessages.token;\n};\n\nexport const validateUuid = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.uuid.test(value) ? null : ValidationMessages.uuid;\n};\n\nexport const validateJsonString = (value: string): string | null => {\n if (!value || value.trim() === '') return null;\n \n try {\n JSON.parse(value);\n return null;\n } catch (error) {\n return 'Invalid JSON format';\n }\n};\n\n// Utility function to parse duration strings to seconds (common across KMS and FaaS)\nexport const parseDuration = (duration: string): number => {\n const match = duration.match(/^(\\d+)([smhd]?)$/);\n if (!match) return 86400; // Default to 24h in seconds\n \n const value = parseInt(match[1]);\n const unit = match[2] || 'h';\n \n switch (unit) {\n case 's': return value; // seconds\n case 'm': return value * 60; // minutes to seconds\n case 'h': return value * 3600; // hours to seconds \n case 'd': return value * 86400; // days to seconds\n default: return value * 3600; // default to hours\n }\n};\n\n// Utility function to format duration from seconds to human readable\nexport const formatDuration = (seconds: number): string => {\n if (seconds < 60) return `${seconds}s`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`;\n return `${Math.floor(seconds / 86400)}d`;\n};\n\n// Combine multiple validators\nexport const combineValidators = (...validators: Array<(value: any) => string | null>) => {\n return (value: any): string | null => {\n for (const validator of validators) {\n const error = validator(value);\n if (error) return error;\n }\n return null;\n };\n};"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","create","Iterator","verb","Symbol","iterator","v","op","TypeError","pop","push","__spreadArray","to","from","pack","ar","l","Array","slice","concat","SuppressedError","FormSidebar","_a","opened","onClose","onSuccess","title","_b","editMode","editItem","fields","onSubmit","_c","width","_d","initialValues","validation","isEditing","buildInitialValues","values","forEach","field","name","defaultValue","type","form","useForm","validate","required","trim","email","test","url","minLength","maxLength","_e","pattern","_f","custom","useEffect","updatedValues_1","setValues","_jsxs","Paper","style","position","top","right","bottom","zIndex","borderRadius","display","flexDirection","borderLeft","backgroundColor","transition","children","Group","justify","borderBottom","_jsx","Title","order","ActionIcon","variant","color","onClick","IconX","size","ScrollArea","flex","Box","successNotification","message","notifications","show","reset","console","error","toLowerCase","error_1","errorNotification","Stack","gap","map","inputProps","getInputProps","commonProps","key","placeholder","description","disabled","TextInput","NumberInput","Textarea","autosize","minRows","maxRows","Select","data","options","MultiSelect","JsonInput","validationError","formatOnBlur","mt","Button","DataTable","columns","loading","total","page","pageSize","onPageChange","onAdd","onEdit","onDelete","onRefresh","_g","customActions","_h","searchable","_j","filterable","_k","filters","onFiltersChange","_l","withBorder","_m","withColumnBorders","_o","striped","_p","highlightOnHover","_q","emptyMessage","_r","useState","localFilters","setLocalFilters","handleSearchChange","newFilters","handleFilterChange","renderCellValue","column","item","render","Text","c","Badge","active","inactive","pending","suspended","success","warning","toString","renderActionMenu","actions","icon","IconEdit","IconTrash","modals","openConfirmModal","labels","confirm","cancel","confirmProps","onConfirm","handleDeleteConfirm","visibleActions","filter","action","Menu","Target","IconDots","Dropdown","Item","leftSection","totalPages","Math","ceil","fw","IconRefresh","IconPlus","IconSearch","search","onChange","currentTarget","IconFilter","pos","LoadingOverlay","visible","Center","align","Table","Thead","Tr","Th","Tbody","Td","id","Pagination","COLOR_MAPS","status","enabled","online","offline","running","stopped","paused","failed","completed","info","role","admin","moderator","user","viewer","owner","editor","contributor","guest","static","service","application","api","web","mobile","desktop","runtime","nodejs18","nodejs20","java11","java17","dotnet6","dotnet7","rust","php8","severity","critical","high","medium","low","debug","execution","queued","succeeded","timeout","cancelled","retrying","DEFAULT_COLORS","StatusBadge","customColorMap","badgeProps","displayValue","formatDisplayValue","startsWith","replace","charAt","toUpperCase","UserRoleBadge","props","ApplicationTypeBadge","RuntimeBadge","ExecutionStatusBadge","SeverityBadge","CONTEXT_ICONS","users","IconUsers","applications","IconApps","functions","IconFunction","tokens","IconKey","executions","permissions","audit","IconDatabase","generic","EmptyState","context","iconSize","iconColor","height","onClearFilters","defaultContent","contextName","capitalizedContext","getDefaultContent","finalTitle","finalMessage","IconComponent","IconAlertCircle","getVariantIcon","finalActions","contextActions","getDefaultActions","h","maw","ta","stroke","lh","w","index","NoUsersState","onAddUser","NoApplicationsState","onCreateApp","NoFunctionsState","onCreateFunction","NoTokensState","onGenerateToken","NoSearchResults","ErrorState","onRetry","Sidebar","baseStyles","headerActions","footer","offsetTop","borderColor","animationDuration","ariaLabel","left","borderRight","overflow","textOverflow","whiteSpace","ml","scrollbarSize","_Fragment","Divider","borderTop","FormSidebarWrapper","cancelLabel","submitLabel","onCancel","submitDisabled","showFooterActions","sidebarProps","undefined","DetailsSidebar","itemName","itemType","editButton","deleteButton","QuickSidebar","content","useSidebar","initialOpened","React","setOpened","open","useCallback","close","toggle","prev","ActionMenu","trigger","triggerLabel","triggerIcon","TriggerIcon","triggerProps","customTrigger","withArrow","withinPortal","hidden","groupedActions","groupActionsByType","renderMenuItem","confirmLabel","error_2","handleActionClick","group","groupIndex","Fragment","primaryActions","secondaryActions","destructiveActions","includes","groups","createViewAction","onView","IconEye","createEditAction","createCopyAction","onCopy","IconCopy","createDeleteAction","createArchiveAction","onArchive","IconArchive","createRestoreAction","onRestore","IconRestore","getUserActions","onViewDetails","getApplicationActions","onConfigure","IconSettings","getFunctionActions","onExecute","onViewLogs","IconPlayerPlay","getTokenActions","onRevoke","IconPlayerStop","LoadingState","submessage","progress","progressLabel","rows","withContainer","animate","getTextSize","xs","sm","md","lg","xl","renderSpinner","Loader","getContent","Progress","animated","Skeleton","rowIndex","colIndex","SimpleGrid","cols","base","Card","padding","mb","widths","dots","bg","animation","backdropFilter","loadingDotsKeyframes","TableLoadingState","CardsLoadingState","count","FormLoadingState","PageLoadingState","InlineLoadingState","useLoadingState","initialLoading","setLoading","setProgress","startLoading","stopLoading","updateProgress","max","min","useApiService","config","endpoint","setData","setError","setTotal","hasMore","setHasMore","client","axios","baseURL","headers","defaultHeaders","interceptors","request","use","response","errorMessage","clearError","getAll","params_1","URLSearchParams","entries","append","get","isArray","paginatedData","has_more","apiData","Error","err_1","getById","err_2","itemData","post","newItem_1","err_3","update","put","updatedItem_1","err_4","deleteItem","delete","err_5","refresh","useDataFilter","searchFields","defaultFilters","setFilters","searchTerm","setSearchTerm","setFilter","clearFilters","resetFilters","filteredData","useMemo","term_1","some","itemValue","showSuccessNotification","showErrorNotification","showWarningNotification","showInfoNotification","NotificationMessages","createSuccess","entityName","updateSuccess","deleteSuccess","createError","updateError","deleteError","loadError","networkError","requiredFieldError","fieldName","authRequired","permissionDenied","sessionExpired","applicationCreated","applicationUpdated","applicationDeleted","tokenCreated","tokenRevoked","userCreated","userUpdated","userDeleted","functionCreated","functionUpdated","functionDeleted","executionStarted","executionCompleted","executionFailed","showCrudNotification","operation","customMessage","ValidationPatterns","duration","token","appId","uuid","ValidationMessages","positiveNumber","range","validateRequired","validateEmail","validateUrl","validateDuration","validateMinLength","validateMaxLength","validatePattern","validateRange","validateAppId","validateToken","validateUuid","validateJsonString","JSON","parse","parseDuration","match","parseInt","formatDuration","seconds","floor","combineValidators","validators","_i","validators_1","validator"],"mappings":"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","x_google_ignoreList":[0]}
\ No newline at end of file
diff --git a/web-components/dist/index.js b/web-components/dist/index.js
index 2052032..b80d1d8 100644
--- a/web-components/dist/index.js
+++ b/web-components/dist/index.js
@@ -1,2 +1,2 @@
-"use strict";var e=require("react/jsx-runtime"),t=require("react"),n=require("@mantine/core"),r=require("@tabler/icons-react"),o=require("@mantine/form"),i=require("@mantine/notifications"),a=require("@mantine/modals"),c=require("axios"),u=require("@mantine/hooks"),s=function(){return s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==c[0]&&2!==c[0])){i=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]0)&&e.jsx(n.Table.Th,{style:{width:50},children:"Actions"})]})}),e.jsx(n.Table.Tbody,{children:c.map(function(t){return e.jsxs(n.Table.Tr,{children:[u.map(function(r){return e.jsx(n.Table.Td,{children:Z(r,t)},"".concat(t.id,"-").concat(r.key))}),(S||O||T.length>0)&&e.jsx(n.Table.Td,{children:Y(t)})]},t.id)})})]})]}),Q>1&&e.jsx(n.Group,{justify:"center",children:e.jsx(n.Pagination,{total:Q,value:y,onChange:w,size:"sm"})})]})},exports.FormSidebar=function(a){var c=a.opened,u=a.onClose,f=a.onSuccess,p=a.title,h=a.editMode,m=void 0!==h&&h,v=a.editItem,b=a.fields,x=a.onSubmit,g=a.width,y=void 0===g?450:g,j=a.initialValues,I=void 0===j?{}:j;a.validateOnSubmit;var w,P=m&&!!v,S=function(){var e={};return b.forEach(function(t){var n;e[t.name]=null!==(n=t.defaultValue)&&void 0!==n?n:"multiselect"===t.type?[]:""}),s(s({},e),I)},O=o.useForm({initialValues:S(),validate:(w={},b.forEach(function(e){w[e.name]=function(t){var n,r,o,i,a,c;return e.required&&(!t||"string"==typeof t&&""===t.trim())?"".concat(e.label," is required"):(null===(n=e.validation)||void 0===n?void 0:n.email)&&t&&!/^\S+@\S+$/.test(t)?"Invalid email format":(null===(r=e.validation)||void 0===r?void 0:r.url)&&t&&!/^https?:\/\/.+/.test(t)?"Invalid URL format":(null===(o=e.validation)||void 0===o?void 0:o.minLength)&&t&&t.lengthe.validation.maxLength?"".concat(e.label," must be no more than ").concat(e.validation.maxLength," characters"):(null===(a=e.validation)||void 0===a?void 0:a.pattern)&&t&&!e.validation.pattern.test(t)?"".concat(e.label," format is invalid"):(null===(c=e.validation)||void 0===c?void 0:c.custom)?e.validation.custom(t):null}}),w)});t.useEffect(function(){if(P&&v){var e={};b.forEach(function(t){var n,r;e[t.name]=null!==(r=null!==(n=v[t.name])&&void 0!==n?n:t.defaultValue)&&void 0!==r?r:""}),O.setValues(e)}else P||O.setValues(S())},[v,c,P]);return e.jsxs(n.Paper,{style:{position:"fixed",top:60,right:c?0:"-".concat(y,"px"),bottom:0,width:"".concat(y,"px"),zIndex:1e3,borderRadius:0,display:"flex",flexDirection:"column",borderLeft:"1px solid var(--mantine-color-gray-3)",backgroundColor:"var(--mantine-color-body)",transition:"right 0.3s ease"},children:[e.jsxs(n.Group,{justify:"space-between",p:"md",style:{borderBottom:"1px solid var(--mantine-color-gray-3)"},children:[e.jsx(n.Title,{order:4,children:P?"Edit ".concat(p):"Create New ".concat(p)}),e.jsx(n.ActionIcon,{variant:"subtle",color:"gray",onClick:u,children:e.jsx(r.IconX,{size:18})})]}),e.jsx(n.ScrollArea,{style:{flex:1},children:e.jsx(n.Box,{p:"md",children:e.jsx("form",{onSubmit:O.onSubmit(function(e){return l(void 0,void 0,void 0,function(){var t,n,r;return d(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,x(e)];case 1:return o.sent(),t={title:"Success",message:"".concat(p," ").concat(P?"updated":"created"," successfully"),color:"green"},i.notifications.show(t),f(),u(),O.reset(),[3,3];case 2:return n=o.sent(),console.error("Error ".concat(P?"updating":"creating"," ").concat(p.toLowerCase(),":"),n),r={title:"Error",message:n.message||"Failed to ".concat(P?"update":"create"," ").concat(p.toLowerCase()),color:"red"},i.notifications.show(r),[3,3];case 3:return[2]}})})}),children:e.jsxs(n.Stack,{gap:"md",children:[b.map(function(t){var r=O.getInputProps(t.name),o=s({key:t.name,label:t.label,placeholder:t.placeholder,description:t.description,required:t.required,disabled:t.disabled||P&&"id"===t.name},r);switch(t.type){case"email":return e.jsx(n.TextInput,s({},o,{type:"email"}));case"number":return e.jsx(n.NumberInput,s({},o));case"textarea":return e.jsx(n.Textarea,s({},o,{autosize:!0,minRows:3,maxRows:6}));case"select":return e.jsx(n.Select,s({},o,{data:t.options||[]}));case"multiselect":return e.jsx(n.MultiSelect,s({},o,{data:t.options||[]}));case"json":return e.jsx(n.JsonInput,s({},o,{validationError:"Invalid JSON format",formatOnBlur:!0,autosize:!0,minRows:3}));default:return e.jsx(n.TextInput,s({},o))}}),e.jsxs(n.Group,{justify:"flex-end",mt:"md",children:[e.jsx(n.Button,{variant:"light",onClick:u,children:"Cancel"}),e.jsxs(n.Button,{type:"submit",children:[P?"Update":"Create"," ",p]})]})]})})})})]})},exports.NotificationMessages=m,exports.ValidationMessages=x,exports.ValidationPatterns=b,exports.combineValidators=function(){for(var e=[],t=0;t0?t.filter(function(e){return r.includes(e[n])}):t.filter(function(e){var t=e[n];return null!=t&&(t.toString().toLowerCase()===r.toString().toLowerCase()||"string"==typeof t&&"string"==typeof r&&t.toLowerCase().includes(r.toLowerCase()))}))}),t},[e,p,u,o]);return{filteredData:x,filters:u,setFilter:m,clearFilters:v,resetFilters:b,searchTerm:p,setSearchTerm:h}},exports.validateAppId=function(e){return e?b.appId.test(e)?null:x.appId:null},exports.validateDuration=function(e){return e?b.duration.test(e)?null:x.duration:null},exports.validateEmail=function(e){return e?b.email.test(e)?null:x.email:null},exports.validateJsonString=function(e){if(!e||""===e.trim())return null;try{return JSON.parse(e),null}catch(e){return"Invalid JSON format"}},exports.validateMaxLength=function(e,t,n){return void 0===n&&(n="Field"),e?e.length<=t?null:x.maxLength(n,t):null},exports.validateMinLength=function(e,t,n){return void 0===n&&(n="Field"),e?e.length>=t?null:x.minLength(n,t):null},exports.validatePattern=function(e,t,n){return void 0===n&&(n="Field"),e?t.test(e)?null:x.pattern(n):null},exports.validateRange=function(e,t,n,r){return void 0===r&&(r="Field"),null==e?null:en?x.range(r,t,n):null},exports.validateRequired=function(e){return null==e||""===e||Array.isArray(e)&&0===e.length?"This field is required":null},exports.validateToken=function(e){return e?b.token.test(e)?null:x.token:null},exports.validateUrl=function(e){return e?b.url.test(e)?null:x.url:null},exports.validateUuid=function(e){return e?b.uuid.test(e)?null:x.uuid:null};
+"use strict";var e=require("react/jsx-runtime"),t=require("react"),n=require("@mantine/core"),r=require("@tabler/icons-react"),o=require("@mantine/form"),i=require("@mantine/notifications"),a=require("@mantine/modals"),s=require("axios"),c=require("@mantine/hooks"),l=function(){return l=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]0&&e.jsx(n.Stack,{align:"center",gap:"sm",w:"100%",children:I.map(function(t,r){return e.jsx(n.Button,{onClick:t.onClick,variant:t.variant||"filled",color:t.color,leftSection:t.leftSection,size:"sm",children:t.label},r)})})]})})},y=function(t){var o,i=t.opened,a=t.onClose,s=t.title,c=t.width,u=void 0===c?450:c,d=t.position,f=void 0===d?"right":d,p=t.headerActions,h=t.footer,m=t.children,x=t.zIndex,g=void 0===x?1e3:x,v=t.offsetTop,b=void 0===v?60:v,y=t.backgroundColor,j=void 0===y?"var(--mantine-color-body)":y,k=t.borderColor,w=void 0===k?"var(--mantine-color-gray-3)":k,C=t.animationDuration,S=void 0===C?"0.3s":C,I=t["aria-label"];return e.jsxs(n.Paper,{style:(o={position:"fixed",top:b,bottom:0,width:"".concat(u,"px"),zIndex:g,borderRadius:0,display:"flex",flexDirection:"column",backgroundColor:j,transition:"".concat(f," ").concat(S," ease")},l(l({},o),"right"===f?{right:i?0:"-".concat(u,"px"),borderLeft:"1px solid ".concat(w)}:{left:i?0:"-".concat(u,"px"),borderRight:"1px solid ".concat(w)})),role:"dialog","aria-modal":"true","aria-label":I||s,"aria-hidden":!i,children:[e.jsxs(n.Group,{justify:"space-between",p:"md",style:{borderBottom:"1px solid ".concat(w)},children:[e.jsx(n.Title,{order:4,style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:s}),p&&e.jsx(n.Group,{gap:"xs",children:p}),e.jsx(n.ActionIcon,{variant:"subtle",color:"gray",onClick:a,"aria-label":"Close sidebar",ml:"xs",children:e.jsx(r.IconX,{size:18})})]}),e.jsx(n.ScrollArea,{style:{flex:1},scrollbarSize:6,children:e.jsx(n.Box,{p:"md",children:m})}),h&&e.jsxs(e.Fragment,{children:[e.jsx(n.Divider,{}),e.jsx(n.Box,{p:"md",style:{borderTop:"1px solid ".concat(w)},children:h})]})]})},j=function(e){var t=[],n=[],r=[];e.forEach(function(e){"red"===e.color||e.key.includes("delete")||e.key.includes("remove")?r.push(e):e.key.includes("edit")||e.key.includes("view")||e.key.includes("copy")?t.push(e):n.push(e)});var o=[];return t.length>0&&o.push(t),n.length>0&&o.push(n),r.length>0&&o.push(r),o},k=function(e){return{key:"view",label:"View Details",icon:r.IconEye,onClick:e}},w=function(e){return{key:"edit",label:"Edit",icon:r.IconEdit,color:"blue",onClick:e}},C=function(e){return{key:"copy",label:"Duplicate",icon:r.IconCopy,onClick:e}},S=function(e,t){return void 0===t&&(t="item"),{key:"delete",label:"Delete",icon:r.IconTrash,color:"red",onClick:e,confirm:{title:"Confirm Delete",message:"Are you sure you want to delete this ".concat(t,"? This action cannot be undone."),confirmLabel:"Delete",cancelLabel:"Cancel"}}},I=function(t){var r=t.variant,o=void 0===r?"spinner":r,i=t.size,a=void 0===i?"md":i,s=t.height,c=void 0===s?200:s,l=t.message,u=t.submessage,d=t.progress,f=t.progressLabel,p=t.rows,h=void 0===p?5:p,m=t.columns,x=void 0===m?3:m,g=t.color,v=void 0===g?"blue":g,b=t.withContainer,y=void 0===b||b,j=t.animate,k=void 0===j||j,w=function(){return{xs:"xs",sm:"sm",md:"md",lg:"lg",xl:"xl"}[a]},C=function(){return e.jsxs(n.Stack,{align:"center",gap:"md",children:[e.jsx(n.Loader,{size:{xs:16,sm:24,md:32,lg:48,xl:64}[a],color:v}),l&&e.jsx(n.Text,{size:w(),c:"dimmed",ta:"center",children:l}),u&&e.jsx(n.Text,{size:"xs",c:"dimmed",ta:"center",children:u})]})},S=function(){switch(o){case"progress":return e.jsxs(n.Stack,{gap:"md",children:[(l||f)&&e.jsxs(n.Group,{justify:"space-between",children:[e.jsx(n.Text,{size:w(),children:l||"Loading..."}),f&&e.jsx(n.Text,{size:"sm",c:"dimmed",children:f})]}),e.jsx(n.Progress,{value:d||0,color:v,size:a,animated:k}),u&&e.jsx(n.Text,{size:"xs",c:"dimmed",ta:"center",children:u})]});case"skeleton-table":return e.jsxs(n.Stack,{gap:"xs",children:[e.jsx(n.Group,{gap:"md",children:Array.from({length:x}).map(function(t,r){return e.jsx(n.Skeleton,{height:20,width:"".concat(100/x,"%")},"header-".concat(r))})}),Array.from({length:h}).map(function(t,r){return e.jsx(n.Group,{gap:"md",children:Array.from({length:x}).map(function(t,o){return e.jsx(n.Skeleton,{height:16,width:"".concat(100/x,"%")},"cell-".concat(r,"-").concat(o))})},"row-".concat(r))})]});case"skeleton-cards":return e.jsx(n.SimpleGrid,{cols:{base:1,sm:2,lg:x},children:Array.from({length:h*x}).map(function(t,r){return e.jsx(n.Card,{padding:"md",withBorder:!0,children:e.jsxs(n.Stack,{gap:"xs",children:[e.jsx(n.Skeleton,{height:20,width:"70%"}),e.jsx(n.Skeleton,{height:14}),e.jsx(n.Skeleton,{height:14,width:"90%"}),e.jsxs(n.Group,{justify:"apart",mt:"md",children:[e.jsx(n.Skeleton,{height:12,width:"40%"}),e.jsx(n.Skeleton,{height:12,width:"30%"})]})]})},"card-".concat(r))})});case"skeleton-form":return e.jsxs(n.Stack,{gap:"md",children:[Array.from({length:h}).map(function(t,r){return e.jsxs(n.Box,{children:[e.jsx(n.Skeleton,{height:12,width:"30%",mb:"xs"}),e.jsx(n.Skeleton,{height:36})]},"form-field-".concat(r))}),e.jsxs(n.Group,{justify:"flex-end",mt:"xl",children:[e.jsx(n.Skeleton,{height:36,width:80}),e.jsx(n.Skeleton,{height:36,width:100})]})]});case"skeleton-text":return e.jsx(n.Stack,{gap:"xs",children:Array.from({length:h}).map(function(t,r){var o=["100%","95%","85%","90%","75%"];return e.jsx(n.Skeleton,{height:16,width:o[r%o.length]},"text-".concat(r))})});case"dots":return t=Array.from({length:3}).map(function(t,r){return e.jsx(n.Box,{w:8,h:8,bg:v,style:{borderRadius:"50%",animation:k?"loading-dots 1.4s infinite ease-in-out ".concat(.16*r,"s"):void 0}},r)}),e.jsxs(n.Stack,{align:"center",gap:"md",children:[e.jsx(n.Group,{gap:"xs",children:t}),l&&e.jsx(n.Text,{size:w(),c:"dimmed",ta:"center",children:l})]});case"overlay":return e.jsx(n.Box,{style:{position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(255, 255, 255, 0.8)",backdropFilter:"blur(2px)",zIndex:1e3},children:e.jsx(n.Center,{h:"100%",children:C()})});default:return C()}var t};if("overlay"===o)return e.jsxs(e.Fragment,{children:[S(),e.jsx("style",{children:A})]});var I=e.jsxs(e.Fragment,{children:[S(),k&&e.jsx("style",{children:A})]});return y?e.jsx(n.Center,{h:c,children:I}):I},A="\n @keyframes loading-dots {\n 0%, 80%, 100% {\n transform: scale(0);\n opacity: 0.5;\n }\n 40% {\n transform: scale(1);\n opacity: 1;\n }\n }\n",P=function(e,t){void 0===t&&(t="Success");var n={title:t,message:e,color:"green"};i.notifications.show(n)},T=function(e,t){void 0===t&&(t="Error");var n={title:t,message:e,color:"red"};i.notifications.show(n)},O={createSuccess:function(e){return"".concat(e," created successfully")},updateSuccess:function(e){return"".concat(e," updated successfully")},deleteSuccess:function(e){return"".concat(e," deleted successfully")},createError:function(e){return"Failed to create ".concat(e)},updateError:function(e){return"Failed to update ".concat(e)},deleteError:function(e){return"Failed to delete ".concat(e)},loadError:function(e){return"Failed to load ".concat(e)},networkError:"Network error occurred. Please try again.",validationError:"Please check the form for errors",requiredFieldError:function(e){return"".concat(e," is required")},authRequired:"Authentication required",permissionDenied:"Permission denied",sessionExpired:"Session expired. Please log in again.",applicationCreated:"Application created successfully",applicationUpdated:"Application updated successfully",applicationDeleted:"Application deleted successfully",tokenCreated:"Token created successfully",tokenRevoked:"Token revoked successfully",userCreated:"User created successfully",userUpdated:"User updated successfully",userDeleted:"User deleted successfully",functionCreated:"Function created successfully",functionUpdated:"Function updated successfully",functionDeleted:"Function deleted successfully",executionStarted:"Function execution started",executionCompleted:"Function execution completed",executionFailed:"Function execution failed"},z={success:function(e,t){var n=O["".concat(e,"Success")](t);P(n)},error:function(e,t,n){var r=n||O["".concat(e,"Error")](t);T(r)}},F={email:/^\S+@\S+\.\S+$/,url:/^https?:\/\/.+/,duration:/^\d+[smhd]$/,token:/^[a-zA-Z0-9_-]+$/,appId:/^[a-zA-Z0-9-_]+$/,uuid:/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i},L={required:function(e){return"".concat(e," is required")},email:"Please enter a valid email address",url:"Please enter a valid URL (http:// or https://)",duration:"Duration must be in format like 30s, 5m, 2h, 1d",minLength:function(e,t){return"".concat(e," must be at least ").concat(t," characters")},maxLength:function(e,t){return"".concat(e," must be no more than ").concat(t," characters")},pattern:function(e){return"".concat(e," format is invalid")},token:"Token can only contain letters, numbers, underscores and hyphens",appId:"App ID can only contain letters, numbers, hyphens and underscores",uuid:"Please enter a valid UUID",positiveNumber:"Must be a positive number",range:function(e,t,n){return"".concat(e," must be between ").concat(t," and ").concat(n)}};Object.defineProperty(exports,"ActionIcon",{enumerable:!0,get:function(){return n.ActionIcon}}),Object.defineProperty(exports,"Badge",{enumerable:!0,get:function(){return n.Badge}}),Object.defineProperty(exports,"Box",{enumerable:!0,get:function(){return n.Box}}),Object.defineProperty(exports,"Button",{enumerable:!0,get:function(){return n.Button}}),Object.defineProperty(exports,"Center",{enumerable:!0,get:function(){return n.Center}}),Object.defineProperty(exports,"Divider",{enumerable:!0,get:function(){return n.Divider}}),Object.defineProperty(exports,"Group",{enumerable:!0,get:function(){return n.Group}}),Object.defineProperty(exports,"JsonInput",{enumerable:!0,get:function(){return n.JsonInput}}),Object.defineProperty(exports,"LoadingOverlay",{enumerable:!0,get:function(){return n.LoadingOverlay}}),Object.defineProperty(exports,"Menu",{enumerable:!0,get:function(){return n.Menu}}),Object.defineProperty(exports,"MultiSelect",{enumerable:!0,get:function(){return n.MultiSelect}}),Object.defineProperty(exports,"NumberInput",{enumerable:!0,get:function(){return n.NumberInput}}),Object.defineProperty(exports,"Pagination",{enumerable:!0,get:function(){return n.Pagination}}),Object.defineProperty(exports,"Paper",{enumerable:!0,get:function(){return n.Paper}}),Object.defineProperty(exports,"ScrollArea",{enumerable:!0,get:function(){return n.ScrollArea}}),Object.defineProperty(exports,"Select",{enumerable:!0,get:function(){return n.Select}}),Object.defineProperty(exports,"Stack",{enumerable:!0,get:function(){return n.Stack}}),Object.defineProperty(exports,"Table",{enumerable:!0,get:function(){return n.Table}}),Object.defineProperty(exports,"Text",{enumerable:!0,get:function(){return n.Text}}),Object.defineProperty(exports,"TextInput",{enumerable:!0,get:function(){return n.TextInput}}),Object.defineProperty(exports,"Textarea",{enumerable:!0,get:function(){return n.Textarea}}),Object.defineProperty(exports,"Title",{enumerable:!0,get:function(){return n.Title}}),Object.defineProperty(exports,"IconAlertCircle",{enumerable:!0,get:function(){return r.IconAlertCircle}}),Object.defineProperty(exports,"IconCheck",{enumerable:!0,get:function(){return r.IconCheck}}),Object.defineProperty(exports,"IconChevronDown",{enumerable:!0,get:function(){return r.IconChevronDown}}),Object.defineProperty(exports,"IconChevronRight",{enumerable:!0,get:function(){return r.IconChevronRight}}),Object.defineProperty(exports,"IconCopy",{enumerable:!0,get:function(){return r.IconCopy}}),Object.defineProperty(exports,"IconDots",{enumerable:!0,get:function(){return r.IconDots}}),Object.defineProperty(exports,"IconEdit",{enumerable:!0,get:function(){return r.IconEdit}}),Object.defineProperty(exports,"IconEye",{enumerable:!0,get:function(){return r.IconEye}}),Object.defineProperty(exports,"IconEyeOff",{enumerable:!0,get:function(){return r.IconEyeOff}}),Object.defineProperty(exports,"IconFilter",{enumerable:!0,get:function(){return r.IconFilter}}),Object.defineProperty(exports,"IconInfoCircle",{enumerable:!0,get:function(){return r.IconInfoCircle}}),Object.defineProperty(exports,"IconKey",{enumerable:!0,get:function(){return r.IconKey}}),Object.defineProperty(exports,"IconPlus",{enumerable:!0,get:function(){return r.IconPlus}}),Object.defineProperty(exports,"IconRefresh",{enumerable:!0,get:function(){return r.IconRefresh}}),Object.defineProperty(exports,"IconSearch",{enumerable:!0,get:function(){return r.IconSearch}}),Object.defineProperty(exports,"IconSettings",{enumerable:!0,get:function(){return r.IconSettings}}),Object.defineProperty(exports,"IconTrash",{enumerable:!0,get:function(){return r.IconTrash}}),Object.defineProperty(exports,"IconUser",{enumerable:!0,get:function(){return r.IconUser}}),Object.defineProperty(exports,"IconUsers",{enumerable:!0,get:function(){return r.IconUsers}}),Object.defineProperty(exports,"IconX",{enumerable:!0,get:function(){return r.IconX}}),Object.defineProperty(exports,"useForm",{enumerable:!0,get:function(){return o.useForm}}),Object.defineProperty(exports,"notifications",{enumerable:!0,get:function(){return i.notifications}}),Object.defineProperty(exports,"modals",{enumerable:!0,get:function(){return a.modals}}),Object.defineProperty(exports,"useDisclosure",{enumerable:!0,get:function(){return c.useDisclosure}}),Object.defineProperty(exports,"useLocalStorage",{enumerable:!0,get:function(){return c.useLocalStorage}}),Object.defineProperty(exports,"useToggle",{enumerable:!0,get:function(){return c.useToggle}}),exports.ActionMenu=function(o){var s=o.item,c=o.actions,u=o.trigger,p=void 0===u?"dots":u,h=o.triggerLabel,m=void 0===h?"Actions":h,x=o.triggerIcon,g=void 0===x?r.IconDots:x,v=o.triggerProps,b=void 0===v?{}:v,y=o.customTrigger,k=o.position,w=void 0===k?"bottom-end":k,C=o.withArrow,S=void 0!==C&&C,I=o.withinPortal,A=void 0===I||I,P=o["aria-label"],T=c.filter(function(e){return!e.hidden&&!(e.show&&!e.show(s))}),O=j(T);if(0===T.length)return null;var z=function(t){var r=t.icon;return e.jsx(n.Menu.Item,{leftSection:r&&e.jsx(r,{size:14}),color:t.color,disabled:t.disabled,onClick:function(){return function(t){return d(void 0,void 0,void 0,function(){var r;return f(this,function(o){switch(o.label){case 0:return o.trys.push([0,4,,5]),t.confirm?[2,new Promise(function(r){a.modals.openConfirmModal({title:t.confirm.title,children:e.jsx(n.Text,{size:"sm",children:t.confirm.message}),labels:{confirm:t.confirm.confirmLabel||"Confirm",cancel:t.confirm.cancelLabel||"Cancel"},confirmProps:{color:t.color||"red"},onConfirm:function(){return d(void 0,void 0,void 0,function(){var e;return f(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,t.onClick(s)];case 1:return n.sent(),r(),[3,3];case 2:return e=n.sent(),console.error("Action ".concat(t.key," failed:"),e),i.notifications.show({title:"Action Failed",message:"Failed to ".concat(t.label.toLowerCase()),color:"red"}),[3,3];case 3:return[2]}})})},onCancel:function(){return r()}})})]:[3,1];case 1:return[4,t.onClick(s)];case 2:o.sent(),o.label=3;case 3:return[3,5];case 4:return r=o.sent(),console.error("Action ".concat(t.key," failed:"),r),i.notifications.show({title:"Action Failed",message:"Failed to ".concat(t.label.toLowerCase()),color:"red"}),[3,5];case 5:return[2]}})})}(t)},children:t.label},t.key)};return e.jsxs(n.Menu,{position:w,withArrow:S,withinPortal:A,children:[e.jsx(n.Menu.Target,{children:y||("button"===p?e.jsx(n.Button,l({variant:"light",size:"xs",leftSection:e.jsx(g,{size:16})},b,{children:m})):e.jsx(n.ActionIcon,l({variant:"subtle",color:"gray",size:"sm","aria-label":P||"".concat(m," menu")},b,{children:e.jsx(g,{size:16})})))}),e.jsx(n.Menu.Dropdown,{children:O.map(function(r,o){return e.jsxs(t.Fragment,{children:[r.map(z),o0)&&e.jsx(n.Table.Th,{style:{width:50},children:"Actions"})]})}),e.jsx(n.Table.Tbody,{children:s.map(function(t){return e.jsxs(n.Table.Tr,{children:[c.map(function(r){return e.jsx(n.Table.Td,{children:_(r,t)},"".concat(t.id,"-").concat(r.key))}),(S||I||T.length>0)&&e.jsx(n.Table.Td,{children:Z(t)})]},t.id)})})]})]}),Q>1&&e.jsx(n.Group,{justify:"center",children:e.jsx(n.Pagination,{total:Q,value:y,onChange:w,size:"sm"})})]})},exports.DetailsSidebar=function(t){var r=t.itemName,o=t.itemType,i=void 0===o?"Item":o,a=t.editButton,s=t.deleteButton,c=t.status,d=t.children,f=u(t,["itemName","itemType","editButton","deleteButton","status","children"]),p=e.jsxs(n.Group,{gap:"xs",children:[c,a,s]});return e.jsx(y,l({},f,{title:"".concat(i,": ").concat(r),headerActions:p,children:d}))},exports.EmptyState=b,exports.ErrorState=function(t){var n=t.onRetry,r=u(t,["onRetry"]);return e.jsx(b,l({},r,{variant:"error",onRefresh:n}))},exports.ExecutionStatusBadge=function(t){return e.jsx(x,l({},t,{variant:"execution"}))},exports.FormLoadingState=function(t){var n=t.fields,r=void 0===n?4:n;return e.jsx(I,{variant:"skeleton-form",rows:r,withContainer:!1})},exports.FormSidebar=function(a){var s=a.opened,c=a.onClose,u=a.onSuccess,p=a.title,h=a.editMode,m=void 0!==h&&h,x=a.editItem,g=a.fields,v=a.onSubmit,b=a.width,y=void 0===b?450:b,j=a.initialValues,k=void 0===j?{}:j;a.validateOnSubmit;var w,C=m&&!!x,S=function(){var e={};return g.forEach(function(t){var n;e[t.name]=null!==(n=t.defaultValue)&&void 0!==n?n:"multiselect"===t.type?[]:""}),l(l({},e),k)},I=o.useForm({initialValues:S(),validate:(w={},g.forEach(function(e){w[e.name]=function(t){var n,r,o,i,a,s;return e.required&&(!t||"string"==typeof t&&""===t.trim())?"".concat(e.label," is required"):(null===(n=e.validation)||void 0===n?void 0:n.email)&&t&&!/^\S+@\S+$/.test(t)?"Invalid email format":(null===(r=e.validation)||void 0===r?void 0:r.url)&&t&&!/^https?:\/\/.+/.test(t)?"Invalid URL format":(null===(o=e.validation)||void 0===o?void 0:o.minLength)&&t&&t.lengthe.validation.maxLength?"".concat(e.label," must be no more than ").concat(e.validation.maxLength," characters"):(null===(a=e.validation)||void 0===a?void 0:a.pattern)&&t&&!e.validation.pattern.test(t)?"".concat(e.label," format is invalid"):(null===(s=e.validation)||void 0===s?void 0:s.custom)?e.validation.custom(t):null}}),w)});t.useEffect(function(){if(C&&x){var e={};g.forEach(function(t){var n,r;e[t.name]=null!==(r=null!==(n=x[t.name])&&void 0!==n?n:t.defaultValue)&&void 0!==r?r:""}),I.setValues(e)}else C||I.setValues(S())},[x,s,C]);return e.jsxs(n.Paper,{style:{position:"fixed",top:60,right:s?0:"-".concat(y,"px"),bottom:0,width:"".concat(y,"px"),zIndex:1e3,borderRadius:0,display:"flex",flexDirection:"column",borderLeft:"1px solid var(--mantine-color-gray-3)",backgroundColor:"var(--mantine-color-body)",transition:"right 0.3s ease"},children:[e.jsxs(n.Group,{justify:"space-between",p:"md",style:{borderBottom:"1px solid var(--mantine-color-gray-3)"},children:[e.jsx(n.Title,{order:4,children:C?"Edit ".concat(p):"Create New ".concat(p)}),e.jsx(n.ActionIcon,{variant:"subtle",color:"gray",onClick:c,children:e.jsx(r.IconX,{size:18})})]}),e.jsx(n.ScrollArea,{style:{flex:1},children:e.jsx(n.Box,{p:"md",children:e.jsx("form",{onSubmit:I.onSubmit(function(e){return d(void 0,void 0,void 0,function(){var t,n,r;return f(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,v(e)];case 1:return o.sent(),t={title:"Success",message:"".concat(p," ").concat(C?"updated":"created"," successfully"),color:"green"},i.notifications.show(t),u(),c(),I.reset(),[3,3];case 2:return n=o.sent(),console.error("Error ".concat(C?"updating":"creating"," ").concat(p.toLowerCase(),":"),n),r={title:"Error",message:n.message||"Failed to ".concat(C?"update":"create"," ").concat(p.toLowerCase()),color:"red"},i.notifications.show(r),[3,3];case 3:return[2]}})})}),children:e.jsxs(n.Stack,{gap:"md",children:[g.map(function(t){var r=I.getInputProps(t.name),o=l({key:t.name,label:t.label,placeholder:t.placeholder,description:t.description,required:t.required,disabled:t.disabled||C&&"id"===t.name},r);switch(t.type){case"email":return e.jsx(n.TextInput,l({},o,{type:"email"}));case"number":return e.jsx(n.NumberInput,l({},o));case"textarea":return e.jsx(n.Textarea,l({},o,{autosize:!0,minRows:3,maxRows:6}));case"select":return e.jsx(n.Select,l({},o,{data:t.options||[]}));case"multiselect":return e.jsx(n.MultiSelect,l({},o,{data:t.options||[]}));case"json":return e.jsx(n.JsonInput,l({},o,{validationError:"Invalid JSON format",formatOnBlur:!0,autosize:!0,minRows:3}));default:return e.jsx(n.TextInput,l({},o))}}),e.jsxs(n.Group,{justify:"flex-end",mt:"md",children:[e.jsx(n.Button,{variant:"light",onClick:c,children:"Cancel"}),e.jsxs(n.Button,{type:"submit",children:[C?"Update":"Create"," ",p]})]})]})})})})]})},exports.FormSidebarWrapper=function(t){var r=t.children,o=t.cancelLabel,i=void 0===o?"Cancel":o,a=t.submitLabel,s=void 0===a?"Save":a,c=t.onCancel,d=t.onSubmit,f=t.submitDisabled,p=void 0!==f&&f,h=t.showFooterActions,m=void 0===h||h,x=t.onClose,g=u(t,["children","cancelLabel","submitLabel","onCancel","onSubmit","submitDisabled","showFooterActions","onClose"]),v=m?e.jsxs(n.Group,{justify:"flex-end",gap:"sm",children:[e.jsx(n.ActionIcon,{variant:"subtle",onClick:function(){null==c||c(),x()},size:"sm",children:i}),e.jsx(n.ActionIcon,{onClick:d,disabled:p,size:"sm",children:s})]}):void 0;return e.jsx(y,l({},g,{onClose:x,footer:v,children:r}))},exports.InlineLoadingState=function(t){var r=t.message,o=void 0===r?"Loading...":r,i=t.size,a=void 0===i?"sm":i;return e.jsxs(n.Group,{gap:"xs",children:[e.jsx(n.Loader,{size:"xs"===a?12:"sm"===a?16:20}),e.jsx(n.Text,{size:a,c:"dimmed",children:o})]})},exports.LoadingState=I,exports.NoApplicationsState=function(t){var n=t.onCreateApp,r=u(t,["onCreateApp"]);return e.jsx(b,l({},r,{variant:"no-data",context:"applications",onAdd:n}))},exports.NoFunctionsState=function(t){var n=t.onCreateFunction,r=u(t,["onCreateFunction"]);return e.jsx(b,l({},r,{variant:"no-data",context:"functions",onAdd:n}))},exports.NoSearchResults=function(t){var n=t.onClearFilters,r=t.onRefresh,o=u(t,["onClearFilters","onRefresh"]);return e.jsx(b,l({},o,{variant:"no-results",onClearFilters:n,onRefresh:r}))},exports.NoTokensState=function(t){var n=t.onGenerateToken,r=u(t,["onGenerateToken"]);return e.jsx(b,l({},r,{variant:"no-data",context:"tokens",onAdd:n}))},exports.NoUsersState=function(t){var n=t.onAddUser,r=u(t,["onAddUser"]);return e.jsx(b,l({},r,{variant:"no-data",context:"users",onAdd:n}))},exports.NotificationMessages=O,exports.PageLoadingState=function(t){var n=t.message,r=void 0===n?"Loading page...":n;return e.jsx(I,{variant:"spinner",message:r,height:"60vh",size:"lg"})},exports.QuickSidebar=function(t){var n=t.content,r=t.actions,o=u(t,["content","actions"]);return e.jsx(y,l({},o,{footer:r,children:n}))},exports.RuntimeBadge=function(t){return e.jsx(x,l({},t,{variant:"runtime"}))},exports.SeverityBadge=function(t){return e.jsx(x,l({},t,{variant:"severity"}))},exports.Sidebar=y,exports.StatusBadge=x,exports.TableLoadingState=function(t){var n=t.rows,r=void 0===n?5:n,o=t.columns,i=void 0===o?4:o;return e.jsx(I,{variant:"skeleton-table",rows:r,columns:i,withContainer:!1})},exports.UserRoleBadge=function(t){return e.jsx(x,l({},t,{variant:"role"}))},exports.ValidationMessages=L,exports.ValidationPatterns=F,exports.combineValidators=function(){for(var e=[],t=0;t0?t.filter(function(e){return r.includes(e[n])}):t.filter(function(e){var t=e[n];return null!=t&&(t.toString().toLowerCase()===r.toString().toLowerCase()||"string"==typeof t&&"string"==typeof r&&t.toLowerCase().includes(r.toLowerCase()))}))}),t},[e,f,c,o]);return{filteredData:v,filters:c,setFilter:m,clearFilters:x,resetFilters:g,searchTerm:f,setSearchTerm:h}},exports.useLoadingState=function(e){void 0===e&&(e=!1);var n=t.useState(e),r=n[0],o=n[1],i=t.useState(0),a=i[0],s=i[1];return{loading:r,progress:a,startLoading:t.useCallback(function(){return o(!0)},[]),stopLoading:t.useCallback(function(){o(!1),s(0)},[]),updateProgress:t.useCallback(function(e){s(Math.max(0,Math.min(100,e)))},[]),setLoading:o,setProgress:s}},exports.useSidebar=function(e){void 0===e&&(e=!1);var n=t.useState(e),r=n[0],o=n[1];return{opened:r,open:t.useCallback(function(){return o(!0)},[]),close:t.useCallback(function(){return o(!1)},[]),toggle:t.useCallback(function(){return o(function(e){return!e})},[]),setOpened:o}},exports.validateAppId=function(e){return e?F.appId.test(e)?null:L.appId:null},exports.validateDuration=function(e){return e?F.duration.test(e)?null:L.duration:null},exports.validateEmail=function(e){return e?F.email.test(e)?null:L.email:null},exports.validateJsonString=function(e){if(!e||""===e.trim())return null;try{return JSON.parse(e),null}catch(e){return"Invalid JSON format"}},exports.validateMaxLength=function(e,t,n){return void 0===n&&(n="Field"),e?e.length<=t?null:L.maxLength(n,t):null},exports.validateMinLength=function(e,t,n){return void 0===n&&(n="Field"),e?e.length>=t?null:L.minLength(n,t):null},exports.validatePattern=function(e,t,n){return void 0===n&&(n="Field"),e?t.test(e)?null:L.pattern(n):null},exports.validateRange=function(e,t,n,r){return void 0===r&&(r="Field"),null==e?null:en?L.range(r,t,n):null},exports.validateRequired=function(e){return null==e||""===e||Array.isArray(e)&&0===e.length?"This field is required":null},exports.validateToken=function(e){return e?F.token.test(e)?null:L.token:null},exports.validateUrl=function(e){return e?F.url.test(e)?null:L.url:null},exports.validateUuid=function(e){return e?F.uuid.test(e)?null:L.uuid:null};
//# sourceMappingURL=index.js.map
diff --git a/web-components/dist/index.js.map b/web-components/dist/index.js.map
index 946f356..716a11e 100644
--- a/web-components/dist/index.js.map
+++ b/web-components/dist/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sources":["../../node_modules/tslib/tslib.es6.js","../src/components/FormSidebar/FormSidebar.tsx","../src/utils/notifications.ts","../src/utils/validation.ts","../src/components/DataTable/DataTable.tsx","../src/hooks/useApiService.ts","../src/hooks/useDataFilter.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React, { useEffect } from 'react';\nimport {\n Paper,\n TextInput,\n Select,\n MultiSelect,\n NumberInput,\n Textarea,\n JsonInput,\n Button,\n Group,\n Stack,\n Title,\n ActionIcon,\n ScrollArea,\n Box,\n Text,\n} from '@mantine/core';\nimport { IconX } from '@tabler/icons-react';\nimport { useForm } from '@mantine/form';\nimport { notifications } from '@mantine/notifications';\nimport { FormField, NotificationConfig } from '../../types';\n\nexport interface FormSidebarProps {\n opened: boolean;\n onClose: () => void;\n onSuccess: () => void;\n title: string;\n editMode?: boolean;\n editItem?: any;\n fields: FormField[];\n onSubmit: (values: any) => Promise;\n width?: number;\n initialValues?: Record;\n validateOnSubmit?: boolean;\n}\n\nconst FormSidebar: React.FC = ({\n opened,\n onClose,\n onSuccess,\n title,\n editMode = false,\n editItem,\n fields,\n onSubmit,\n width = 450,\n initialValues = {},\n validateOnSubmit = true,\n}) => {\n const isEditing = editMode && !!editItem;\n\n // Build initial form values from fields\n const buildInitialValues = () => {\n const values: Record = {};\n fields.forEach(field => {\n values[field.name] = field.defaultValue ?? (field.type === 'multiselect' ? [] : '');\n });\n return { ...values, ...initialValues };\n };\n\n // Build validation rules from fields\n const buildValidation = () => {\n const validation: Record string | null> = {};\n fields.forEach(field => {\n validation[field.name] = (value: any) => {\n if (field.required && (!value || (typeof value === 'string' && value.trim() === ''))) {\n return `${field.label} is required`;\n }\n if (field.validation?.email && value && !/^\\S+@\\S+$/.test(value)) {\n return 'Invalid email format';\n }\n if (field.validation?.url && value && !/^https?:\\/\\/.+/.test(value)) {\n return 'Invalid URL format';\n }\n if (field.validation?.minLength && value && value.length < field.validation.minLength) {\n return `${field.label} must be at least ${field.validation.minLength} characters`;\n }\n if (field.validation?.maxLength && value && value.length > field.validation.maxLength) {\n return `${field.label} must be no more than ${field.validation.maxLength} characters`;\n }\n if (field.validation?.pattern && value && !field.validation.pattern.test(value)) {\n return `${field.label} format is invalid`;\n }\n if (field.validation?.custom) {\n return field.validation.custom(value);\n }\n return null;\n };\n });\n return validation;\n };\n\n const form = useForm({\n initialValues: buildInitialValues(),\n validate: buildValidation(),\n });\n\n // Update form values when editItem changes\n useEffect(() => {\n if (isEditing && editItem) {\n const updatedValues: Record = {};\n fields.forEach(field => {\n updatedValues[field.name] = editItem[field.name] ?? field.defaultValue ?? '';\n });\n form.setValues(updatedValues);\n } else if (!isEditing) {\n form.setValues(buildInitialValues());\n }\n }, [editItem, opened, isEditing]);\n\n const handleSubmit = async (values: typeof form.values) => {\n try {\n await onSubmit(values);\n \n const successNotification: NotificationConfig = {\n title: 'Success',\n message: `${title} ${isEditing ? 'updated' : 'created'} successfully`,\n color: 'green',\n };\n \n notifications.show(successNotification);\n onSuccess();\n onClose();\n form.reset();\n } catch (error: any) {\n console.error(`Error ${isEditing ? 'updating' : 'creating'} ${title.toLowerCase()}:`, error);\n \n const errorNotification: NotificationConfig = {\n title: 'Error',\n message: error.message || `Failed to ${isEditing ? 'update' : 'create'} ${title.toLowerCase()}`,\n color: 'red',\n };\n \n notifications.show(errorNotification);\n }\n };\n\n const renderField = (field: FormField) => {\n const inputProps = form.getInputProps(field.name);\n const commonProps = {\n key: field.name,\n label: field.label,\n placeholder: field.placeholder,\n description: field.description,\n required: field.required,\n disabled: field.disabled || (isEditing && field.name === 'id'),\n ...inputProps,\n };\n\n switch (field.type) {\n case 'email':\n return ;\n \n case 'number':\n return ;\n \n case 'textarea':\n return ;\n \n case 'select':\n return (\n \n );\n \n case 'multiselect':\n return (\n \n );\n \n case 'json':\n return (\n \n );\n \n default:\n return ;\n }\n };\n\n return (\n \n {/* Header */}\n \n \n {isEditing ? `Edit ${title}` : `Create New ${title}`}\n \n \n \n \n \n\n {/* Content */}\n \n \n \n \n \n \n );\n};\n\nexport default FormSidebar;","import { notifications } from '@mantine/notifications';\nimport { NotificationConfig } from '../types';\n\nexport const showSuccessNotification = (message: string, title = 'Success') => {\n const config: NotificationConfig = {\n title,\n message,\n color: 'green',\n };\n notifications.show(config);\n};\n\nexport const showErrorNotification = (message: string, title = 'Error') => {\n const config: NotificationConfig = {\n title,\n message,\n color: 'red',\n };\n notifications.show(config);\n};\n\nexport const showWarningNotification = (message: string, title = 'Warning') => {\n const config: NotificationConfig = {\n title,\n message,\n color: 'yellow',\n };\n notifications.show(config);\n};\n\nexport const showInfoNotification = (message: string, title = 'Info') => {\n const config: NotificationConfig = {\n title,\n message,\n color: 'blue',\n };\n notifications.show(config);\n};\n\n// Common notification messages used across microfrontends\nexport const NotificationMessages = {\n // Generic CRUD operations\n createSuccess: (entityName: string) => `${entityName} created successfully`,\n updateSuccess: (entityName: string) => `${entityName} updated successfully`,\n deleteSuccess: (entityName: string) => `${entityName} deleted successfully`,\n \n createError: (entityName: string) => `Failed to create ${entityName}`,\n updateError: (entityName: string) => `Failed to update ${entityName}`,\n deleteError: (entityName: string) => `Failed to delete ${entityName}`,\n \n loadError: (entityName: string) => `Failed to load ${entityName}`,\n networkError: 'Network error occurred. Please try again.',\n \n // Validation\n validationError: 'Please check the form for errors',\n requiredFieldError: (fieldName: string) => `${fieldName} is required`,\n \n // Authentication\n authRequired: 'Authentication required',\n permissionDenied: 'Permission denied',\n sessionExpired: 'Session expired. Please log in again.',\n \n // Application-specific\n applicationCreated: 'Application created successfully',\n applicationUpdated: 'Application updated successfully',\n applicationDeleted: 'Application deleted successfully',\n \n tokenCreated: 'Token created successfully',\n tokenRevoked: 'Token revoked successfully',\n \n userCreated: 'User created successfully',\n userUpdated: 'User updated successfully',\n userDeleted: 'User deleted successfully',\n \n functionCreated: 'Function created successfully',\n functionUpdated: 'Function updated successfully',\n functionDeleted: 'Function deleted successfully',\n \n executionStarted: 'Function execution started',\n executionCompleted: 'Function execution completed',\n executionFailed: 'Function execution failed',\n};\n\n// Utility to show notifications for common operations\nexport const showCrudNotification = {\n success: (operation: 'create' | 'update' | 'delete', entityName: string) => {\n const message = NotificationMessages[`${operation}Success`](entityName);\n showSuccessNotification(message);\n },\n \n error: (operation: 'create' | 'update' | 'delete' | 'load', entityName: string, customMessage?: string) => {\n const message = customMessage || NotificationMessages[`${operation}Error`](entityName);\n showErrorNotification(message);\n },\n};","// Common validation patterns used across microfrontends\n\nexport const ValidationPatterns = {\n email: /^\\S+@\\S+\\.\\S+$/,\n url: /^https?:\\/\\/.+/,\n duration: /^\\d+[smhd]$/, // e.g., \"30s\", \"5m\", \"2h\", \"1d\"\n token: /^[a-zA-Z0-9_-]+$/,\n appId: /^[a-zA-Z0-9-_]+$/,\n uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\n};\n\nexport const ValidationMessages = {\n required: (fieldName: string) => `${fieldName} is required`,\n email: 'Please enter a valid email address',\n url: 'Please enter a valid URL (http:// or https://)',\n duration: 'Duration must be in format like 30s, 5m, 2h, 1d',\n minLength: (fieldName: string, minLength: number) => \n `${fieldName} must be at least ${minLength} characters`,\n maxLength: (fieldName: string, maxLength: number) => \n `${fieldName} must be no more than ${maxLength} characters`,\n pattern: (fieldName: string) => `${fieldName} format is invalid`,\n token: 'Token can only contain letters, numbers, underscores and hyphens',\n appId: 'App ID can only contain letters, numbers, hyphens and underscores',\n uuid: 'Please enter a valid UUID',\n positiveNumber: 'Must be a positive number',\n range: (fieldName: string, min: number, max: number) => \n `${fieldName} must be between ${min} and ${max}`,\n};\n\n// Common validation functions\nexport const validateRequired = (value: any): string | null => {\n if (value === null || value === undefined || value === '' || \n (Array.isArray(value) && value.length === 0)) {\n return 'This field is required';\n }\n return null;\n};\n\nexport const validateEmail = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.email.test(value) ? null : ValidationMessages.email;\n};\n\nexport const validateUrl = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.url.test(value) ? null : ValidationMessages.url;\n};\n\nexport const validateDuration = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.duration.test(value) ? null : ValidationMessages.duration;\n};\n\nexport const validateMinLength = (value: string, minLength: number, fieldName = 'Field'): string | null => {\n if (!value) return null;\n return value.length >= minLength ? null : ValidationMessages.minLength(fieldName, minLength);\n};\n\nexport const validateMaxLength = (value: string, maxLength: number, fieldName = 'Field'): string | null => {\n if (!value) return null;\n return value.length <= maxLength ? null : ValidationMessages.maxLength(fieldName, maxLength);\n};\n\nexport const validatePattern = (value: string, pattern: RegExp, fieldName = 'Field'): string | null => {\n if (!value) return null;\n return pattern.test(value) ? null : ValidationMessages.pattern(fieldName);\n};\n\nexport const validateRange = (value: number, min: number, max: number, fieldName = 'Field'): string | null => {\n if (value == null) return null;\n if (value < min || value > max) {\n return ValidationMessages.range(fieldName, min, max);\n }\n return null;\n};\n\nexport const validateAppId = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.appId.test(value) ? null : ValidationMessages.appId;\n};\n\nexport const validateToken = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.token.test(value) ? null : ValidationMessages.token;\n};\n\nexport const validateUuid = (value: string): string | null => {\n if (!value) return null;\n return ValidationPatterns.uuid.test(value) ? null : ValidationMessages.uuid;\n};\n\nexport const validateJsonString = (value: string): string | null => {\n if (!value || value.trim() === '') return null;\n \n try {\n JSON.parse(value);\n return null;\n } catch (error) {\n return 'Invalid JSON format';\n }\n};\n\n// Utility function to parse duration strings to seconds (common across KMS and FaaS)\nexport const parseDuration = (duration: string): number => {\n const match = duration.match(/^(\\d+)([smhd]?)$/);\n if (!match) return 86400; // Default to 24h in seconds\n \n const value = parseInt(match[1]);\n const unit = match[2] || 'h';\n \n switch (unit) {\n case 's': return value; // seconds\n case 'm': return value * 60; // minutes to seconds\n case 'h': return value * 3600; // hours to seconds \n case 'd': return value * 86400; // days to seconds\n default: return value * 3600; // default to hours\n }\n};\n\n// Utility function to format duration from seconds to human readable\nexport const formatDuration = (seconds: number): string => {\n if (seconds < 60) return `${seconds}s`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`;\n return `${Math.floor(seconds / 86400)}d`;\n};\n\n// Combine multiple validators\nexport const combineValidators = (...validators: Array<(value: any) => string | null>) => {\n return (value: any): string | null => {\n for (const validator of validators) {\n const error = validator(value);\n if (error) return error;\n }\n return null;\n };\n};","import React, { useState, useEffect } from 'react';\nimport {\n Table,\n Paper,\n Group,\n Button,\n TextInput,\n Select,\n ActionIcon,\n Menu,\n Text,\n Badge,\n Box,\n Stack,\n Pagination,\n LoadingOverlay,\n Center,\n} from '@mantine/core';\nimport {\n IconSearch,\n IconPlus,\n IconDots,\n IconEdit,\n IconTrash,\n IconRefresh,\n IconFilter,\n} from '@tabler/icons-react';\nimport { modals } from '@mantine/modals';\nimport { notifications } from '@mantine/notifications';\nimport { ListItem, FilterOptions } from '../../types';\n\nexport interface TableColumn {\n key: string;\n label: string;\n sortable?: boolean;\n filterable?: boolean;\n width?: string | number;\n render?: (value: any, item: ListItem) => React.ReactNode;\n}\n\nexport interface TableAction {\n key: string;\n label: string;\n icon?: React.ReactNode;\n color?: string;\n onClick: (item: ListItem) => void;\n show?: (item: ListItem) => boolean;\n}\n\nexport interface DataTableProps {\n data: ListItem[];\n columns: TableColumn[];\n loading?: boolean;\n error?: string | null;\n title?: string;\n \n // Pagination\n total?: number;\n page?: number;\n pageSize?: number;\n onPageChange?: (page: number) => void;\n \n // Actions\n onAdd?: () => void;\n onEdit?: (item: ListItem) => void;\n onDelete?: (item: ListItem) => Promise;\n onRefresh?: () => void;\n customActions?: TableAction[];\n \n // Filtering & Search\n searchable?: boolean;\n filterable?: boolean;\n filters?: FilterOptions;\n onFiltersChange?: (filters: FilterOptions) => void;\n \n // Styling\n withBorder?: boolean;\n withColumnBorders?: boolean;\n striped?: boolean;\n highlightOnHover?: boolean;\n \n // Empty state\n emptyMessage?: string;\n}\n\nconst DataTable: React.FC = ({\n data,\n columns,\n loading = false,\n error = null,\n title,\n total = 0,\n page = 1,\n pageSize = 10,\n onPageChange,\n onAdd,\n onEdit,\n onDelete,\n onRefresh,\n customActions = [],\n searchable = true,\n filterable = false,\n filters = {},\n onFiltersChange,\n withBorder = true,\n withColumnBorders = false,\n striped = true,\n highlightOnHover = true,\n emptyMessage = 'No data available',\n}) => {\n const [localFilters, setLocalFilters] = useState(filters);\n \n useEffect(() => {\n setLocalFilters(filters);\n }, [filters]);\n\n const handleFilterChange = (key: string, value: string) => {\n const newFilters = { ...localFilters, [key]: value };\n setLocalFilters(newFilters);\n onFiltersChange?.(newFilters);\n };\n\n const handleSearchChange = (value: string) => {\n handleFilterChange('search', value);\n };\n\n const handleDeleteConfirm = (item: ListItem) => {\n modals.openConfirmModal({\n title: 'Confirm Delete',\n children: (\n \n Are you sure you want to delete this item? This action cannot be undone.\n \n ),\n labels: { confirm: 'Delete', cancel: 'Cancel' },\n confirmProps: { color: 'red' },\n onConfirm: async () => {\n try {\n if (onDelete) {\n await onDelete(item);\n notifications.show({\n title: 'Success',\n message: 'Item deleted successfully',\n color: 'green',\n });\n }\n } catch (error: any) {\n notifications.show({\n title: 'Error',\n message: error.message || 'Failed to delete item',\n color: 'red',\n });\n }\n },\n });\n };\n\n const renderCellValue = (column: TableColumn, item: ListItem) => {\n const value = item[column.key];\n \n if (column.render) {\n return column.render(value, item);\n }\n \n // Default rendering for common data types\n if (value === null || value === undefined) {\n return -;\n }\n \n if (typeof value === 'boolean') {\n return (\n \n {value ? 'Yes' : 'No'}\n \n );\n }\n \n if (column.key === 'status') {\n const statusColors: Record = {\n active: 'green',\n inactive: 'gray',\n pending: 'yellow',\n suspended: 'red',\n success: 'green',\n error: 'red',\n warning: 'yellow',\n };\n return (\n \n {value}\n \n );\n }\n \n return {value.toString()};\n };\n\n const renderActionMenu = (item: ListItem) => {\n const actions: TableAction[] = [];\n \n if (onEdit) {\n actions.push({\n key: 'edit',\n label: 'Edit',\n icon: ,\n onClick: onEdit,\n });\n }\n \n if (onDelete) {\n actions.push({\n key: 'delete',\n label: 'Delete',\n icon: ,\n color: 'red',\n onClick: () => handleDeleteConfirm(item),\n });\n }\n \n actions.push(...customActions);\n \n const visibleActions = actions.filter(action => \n !action.show || action.show(item)\n );\n \n if (visibleActions.length === 0) {\n return null;\n }\n \n return (\n \n );\n };\n\n const totalPages = Math.ceil(total / pageSize);\n\n return (\n \n {/* Header with title and actions */}\n \n \n {title && {title}}\n \n \n \n {onRefresh && (\n \n \n \n )}\n \n {onAdd && (\n } onClick={onAdd}>\n Add New\n \n )}\n \n \n\n {/* Filters and Search */}\n {(searchable || filterable) && (\n \n {searchable && (\n }\n value={localFilters.search || ''}\n onChange={(e) => handleSearchChange(e.currentTarget.value)}\n style={{ flex: 1 }}\n />\n )}\n \n {filterable && (\n \n \n \n \n {/* Add specific filter components as needed */}\n \n )}\n \n )}\n\n {/* Table */}\n \n \n \n {error ? (\n \n \n Error loading data\n {error}\n {onRefresh && (\n \n )}\n \n \n ) : data.length === 0 ? (\n \n \n {emptyMessage}\n {onAdd && (\n \n )}\n \n \n ) : (\n \n \n \n {columns.map((column) => (\n \n {column.label}\n \n ))}\n {(onEdit || onDelete || customActions.length > 0) && (\n Actions\n )}\n \n \n \n {data.map((item) => (\n \n {columns.map((column) => (\n \n {renderCellValue(column, item)}\n \n ))}\n {(onEdit || onDelete || customActions.length > 0) && (\n \n {renderActionMenu(item)}\n \n )}\n \n ))}\n \n
\n )}\n \n\n {/* Pagination */}\n {totalPages > 1 && (\n \n \n \n )}\n \n );\n};\n\nexport default DataTable;","import { useState, useCallback } from 'react';\nimport axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { ApiResponse, PaginatedResponse, FilterOptions } from '../types';\n\nexport interface ApiServiceConfig {\n baseURL: string;\n defaultHeaders?: Record;\n timeout?: number;\n}\n\nexport interface UseApiServiceReturn {\n data: T[];\n loading: boolean;\n error: string | null;\n total: number;\n hasMore: boolean;\n client: AxiosInstance;\n \n // CRUD operations\n getAll: (filters?: FilterOptions) => Promise;\n getById: (id: string) => Promise;\n create: (data: Partial) => Promise;\n update: (id: string, data: Partial) => Promise;\n delete: (id: string) => Promise;\n \n // Utility methods\n clearError: () => void;\n refresh: () => Promise;\n}\n\nexport const useApiService = (\n config: ApiServiceConfig,\n endpoint: string\n): UseApiServiceReturn => {\n const [data, setData] = useState([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n const [total, setTotal] = useState(0);\n const [hasMore, setHasMore] = useState(false);\n\n // Create axios instance\n const client = axios.create({\n baseURL: config.baseURL,\n timeout: config.timeout || 10000,\n headers: {\n 'Content-Type': 'application/json',\n ...config.defaultHeaders,\n },\n });\n\n // Add request interceptor for common headers\n client.interceptors.request.use(\n (config) => {\n // Add user email header if available (common pattern in the codebase)\n const userEmail = 'admin@example.com'; // This could come from a context or config\n if (userEmail) {\n config.headers['X-User-Email'] = userEmail;\n }\n return config;\n },\n (error) => Promise.reject(error)\n );\n\n // Add response interceptor for error handling\n client.interceptors.response.use(\n (response) => response,\n (error) => {\n const errorMessage = error.response?.data?.message || error.message || 'An error occurred';\n setError(errorMessage);\n return Promise.reject(error);\n }\n );\n\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n const getAll = useCallback(async (filters: FilterOptions = {}): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n const params = new URLSearchParams();\n Object.entries(filters).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '') {\n params.append(key, value.toString());\n }\n });\n\n const response = await client.get | ApiResponse>(`${endpoint}?${params.toString()}`);\n \n // Handle both paginated and simple array responses\n if ('data' in response.data && Array.isArray(response.data.data)) {\n // Paginated response\n const paginatedData = response.data as PaginatedResponse;\n setData(paginatedData.data);\n setTotal(paginatedData.total);\n setHasMore(paginatedData.has_more || false);\n return paginatedData.data;\n } else if ('data' in response.data && Array.isArray(response.data.data)) {\n // Simple array response wrapped in ApiResponse\n const apiData = response.data as ApiResponse;\n setData(apiData.data);\n setTotal(apiData.data.length);\n setHasMore(false);\n return apiData.data;\n } else if (Array.isArray(response.data)) {\n // Direct array response\n setData(response.data);\n setTotal(response.data.length);\n setHasMore(false);\n return response.data;\n } else {\n throw new Error('Invalid response format');\n }\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to fetch data';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const getById = useCallback(async (id: string): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n const response = await client.get | T>(`${endpoint}/${id}`);\n const item = 'data' in response.data ? response.data.data : response.data;\n return item;\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to fetch item';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const create = useCallback(async (itemData: Partial): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n const response = await client.post | T>(endpoint, itemData);\n const newItem = 'data' in response.data ? response.data.data : response.data;\n \n // Update local data\n setData(prev => [...prev, newItem]);\n setTotal(prev => prev + 1);\n \n return newItem;\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to create item';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const update = useCallback(async (id: string, itemData: Partial): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n const response = await client.put | T>(`${endpoint}/${id}`, itemData);\n const updatedItem = 'data' in response.data ? response.data.data : response.data;\n \n // Update local data\n setData(prev => prev.map(item => item.id === id ? updatedItem : item));\n \n return updatedItem;\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to update item';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const deleteItem = useCallback(async (id: string): Promise => {\n setLoading(true);\n setError(null);\n \n try {\n await client.delete(`${endpoint}/${id}`);\n \n // Update local data\n setData(prev => prev.filter(item => item.id !== id));\n setTotal(prev => prev - 1);\n } catch (err: any) {\n const errorMessage = err.response?.data?.message || err.message || 'Failed to delete item';\n setError(errorMessage);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [client, endpoint]);\n\n const refresh = useCallback(async () => {\n await getAll();\n }, [getAll]);\n\n return {\n data,\n loading,\n error,\n total,\n hasMore,\n client,\n getAll,\n getById,\n create,\n update,\n delete: deleteItem,\n clearError,\n refresh,\n };\n};","import { useState, useMemo, useCallback } from 'react';\nimport { FilterOptions, ListItem } from '../types';\n\nexport interface UseDataFilterOptions {\n searchFields?: string[];\n defaultFilters?: FilterOptions;\n debounceMs?: number;\n}\n\nexport interface UseDataFilterReturn {\n filteredData: ListItem[];\n filters: FilterOptions;\n setFilter: (key: string, value: any) => void;\n clearFilters: () => void;\n resetFilters: () => void;\n searchTerm: string;\n setSearchTerm: (term: string) => void;\n}\n\nexport const useDataFilter = (\n data: ListItem[],\n options: UseDataFilterOptions = {}\n): UseDataFilterReturn => {\n const {\n searchFields = ['name', 'title', 'email', 'description'],\n defaultFilters = {},\n } = options;\n\n const [filters, setFilters] = useState(defaultFilters);\n const [searchTerm, setSearchTerm] = useState('');\n\n const setFilter = useCallback((key: string, value: any) => {\n if (key === 'search') {\n setSearchTerm(value);\n setFilters(prev => ({ ...prev, search: value }));\n } else {\n setFilters(prev => ({ ...prev, [key]: value }));\n }\n }, []);\n\n const clearFilters = useCallback(() => {\n setFilters({});\n setSearchTerm('');\n }, []);\n\n const resetFilters = useCallback(() => {\n setFilters(defaultFilters);\n setSearchTerm('');\n }, [defaultFilters]);\n\n const filteredData = useMemo(() => {\n let result = [...data];\n\n // Apply search filter\n if (searchTerm.trim()) {\n const term = searchTerm.toLowerCase().trim();\n result = result.filter(item => {\n return searchFields.some(field => {\n const value = item[field];\n if (!value) return false;\n return value.toString().toLowerCase().includes(term);\n });\n });\n }\n\n // Apply other filters\n Object.entries(filters).forEach(([key, value]) => {\n if (key === 'search') return; // Already handled above\n \n if (value !== undefined && value !== null && value !== '') {\n if (Array.isArray(value) && value.length > 0) {\n // Array filter (e.g., multiple status selection)\n result = result.filter(item => value.includes(item[key]));\n } else {\n // Single value filter\n result = result.filter(item => {\n const itemValue = item[key];\n if (itemValue == null) return false;\n \n // Exact match for most cases\n if (itemValue.toString().toLowerCase() === value.toString().toLowerCase()) {\n return true;\n }\n \n // Partial match for string fields\n if (typeof itemValue === 'string' && typeof value === 'string') {\n return itemValue.toLowerCase().includes(value.toLowerCase());\n }\n \n return false;\n });\n }\n }\n });\n\n return result;\n }, [data, searchTerm, filters, searchFields]);\n\n return {\n filteredData,\n filters,\n setFilter,\n clearFilters,\n resetFilters,\n searchTerm,\n setSearchTerm,\n };\n};"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","create","Iterator","verb","Symbol","iterator","v","op","TypeError","pop","push","__spreadArray","to","from","pack","ar","l","Array","slice","concat","SuppressedError","showSuccessNotification","message","title","config","color","notifications","show","showErrorNotification","NotificationMessages","createSuccess","entityName","updateSuccess","deleteSuccess","createError","updateError","deleteError","loadError","networkError","validationError","requiredFieldError","fieldName","authRequired","permissionDenied","sessionExpired","applicationCreated","applicationUpdated","applicationDeleted","tokenCreated","tokenRevoked","userCreated","userUpdated","userDeleted","functionCreated","functionUpdated","functionDeleted","executionStarted","executionCompleted","executionFailed","showCrudNotification","success","operation","error","customMessage","ValidationPatterns","email","url","duration","token","appId","uuid","ValidationMessages","required","minLength","maxLength","pattern","positiveNumber","range","min","max","_a","data","columns","_b","loading","_c","_d","total","_e","page","_f","pageSize","onPageChange","onAdd","onEdit","onDelete","onRefresh","_g","customActions","_h","searchable","_j","filterable","_k","filters","onFiltersChange","_l","withBorder","_m","withColumnBorders","_o","striped","_p","highlightOnHover","_q","emptyMessage","_r","useState","localFilters","setLocalFilters","useEffect","handleSearchChange","key","newFilters","handleFilterChange","renderCellValue","column","item","render","_jsx","Text","c","Badge","size","children","active","inactive","pending","suspended","warning","toString","renderActionMenu","actions","icon","jsx","IconEdit","onClick","IconTrash","modals","openConfirmModal","labels","confirm","cancel","confirmProps","onConfirm","error_1","handleDeleteConfirm","visibleActions","filter","action","_jsxs","Menu","position","Target","ActionIcon","variant","IconDots","Dropdown","map","Item","leftSection","totalPages","Math","ceil","Stack","gap","jsxs","Group","justify","fw","IconRefresh","Button","IconPlus","TextInput","placeholder","IconSearch","search","onChange","currentTarget","style","flex","IconFilter","Paper","pos","LoadingOverlay","visible","Center","align","Table","Thead","Tr","Th","width","Tbody","Td","id","Pagination","opened","onClose","onSuccess","editMode","editItem","fields","onSubmit","initialValues","validation","isEditing","buildInitialValues","values","forEach","field","name","defaultValue","type","form","useForm","validate","trim","test","custom","updatedValues_1","setValues","top","right","bottom","zIndex","borderRadius","display","flexDirection","borderLeft","backgroundColor","transition","borderBottom","Title","order","IconX","ScrollArea","Box","successNotification","reset","console","toLowerCase","errorNotification","inputProps","getInputProps","commonProps","description","disabled","NumberInput","Textarea","autosize","minRows","maxRows","Select","options","MultiSelect","JsonInput","formatOnBlur","mt","validators","_i","validators_1","validator","seconds","floor","match","parseInt","endpoint","setData","setLoading","setError","setTotal","hasMore","setHasMore","client","axios","baseURL","timeout","headers","defaultHeaders","interceptors","request","use","response","errorMessage","clearError","useCallback","getAll","params_1","URLSearchParams","entries","append","get","isArray","paginatedData","has_more","apiData","Error","err_1","getById","err_2","itemData","post","newItem_1","prev","err_3","update","put","updatedItem_1","err_4","deleteItem","delete","err_5","refresh","searchFields","defaultFilters","setFilters","searchTerm","setSearchTerm","setFilter","clearFilters","resetFilters","filteredData","useMemo","term_1","some","includes","itemValue","JSON","parse"],"mappings":"0QA+BWA,EAAW,WAQlB,OAPAA,EAAWC,OAAOC,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAII,KADTL,EAAIG,UAAUF,GACOJ,OAAOS,UAAUC,eAAeC,KAAKR,EAAGK,KAAIN,EAAEM,GAAKL,EAAEK,IAE9E,OAAON,GAEJH,EAASa,MAAMC,KAAMP,UAChC,EA0EO,SAASQ,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,UAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAU,CAAC,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC1F,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAU,CAAC,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC7F,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,EAAE,SAAUG,GAAWA,EAAQG,EAAQ,IAIjBO,KAAKR,EAAWK,EAAW,CAC7GH,GAAMN,EAAYA,EAAUN,MAAMG,EAASC,GAAc,KAAKS,OAClE,EACJ,CAEO,SAASM,EAAYhB,EAASiB,GACjC,IAAsGC,EAAGC,EAAGhC,EAAxGiC,EAAI,CAAEC,MAAO,EAAGC,KAAM,WAAa,GAAW,EAAPnC,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,EAAK,EAAEoC,KAAM,GAAIC,IAAK,IAAeC,EAAIxC,OAAOyC,QAA4B,mBAAbC,SAA0BA,SAAW1C,QAAQS,WACtL,OAAO+B,EAAEf,KAAOkB,EAAK,GAAIH,EAAS,MAAIG,EAAK,GAAIH,EAAU,OAAIG,EAAK,GAAsB,mBAAXC,SAA0BJ,EAAEI,OAAOC,UAAY,WAAa,OAAOhC,IAAO,GAAG2B,EAC1J,SAASG,EAAKtC,GAAK,OAAO,SAAUyC,GAAK,OACzC,SAAcC,GACV,GAAId,EAAG,MAAM,IAAIe,UAAU,mCAC3B,KAAOR,IAAMA,EAAI,EAAGO,EAAG,KAAOZ,EAAI,IAAKA,OACnC,GAAIF,EAAI,EAAGC,IAAMhC,EAAY,EAAR6C,EAAG,GAASb,EAAU,OAAIa,EAAG,GAAKb,EAAS,SAAOhC,EAAIgC,EAAU,SAAMhC,EAAES,KAAKuB,GAAI,GAAKA,EAAET,SAAWvB,EAAIA,EAAES,KAAKuB,EAAGa,EAAG,KAAKlB,KAAM,OAAO3B,EAE3J,OADIgC,EAAI,EAAGhC,IAAG6C,EAAK,CAAS,EAARA,EAAG,GAAQ7C,EAAEqB,QACzBwB,EAAG,IACP,KAAK,EAAG,KAAK,EAAG7C,EAAI6C,EAAI,MACxB,KAAK,EAAc,OAAXZ,EAAEC,QAAgB,CAAEb,MAAOwB,EAAG,GAAIlB,MAAM,GAChD,KAAK,EAAGM,EAAEC,QAASF,EAAIa,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKZ,EAAEI,IAAIU,MAAOd,EAAEG,KAAKW,MAAO,SACxC,QACI,KAAM/C,EAAIiC,EAAEG,MAAMpC,EAAIA,EAAEK,OAAS,GAAKL,EAAEA,EAAEK,OAAS,KAAkB,IAAVwC,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEZ,EAAI,EAAG,QAAU,CAC3G,GAAc,IAAVY,EAAG,MAAc7C,GAAM6C,EAAG,GAAK7C,EAAE,IAAM6C,EAAG,GAAK7C,EAAE,IAAM,CAAEiC,EAAEC,MAAQW,EAAG,GAAI,KAAO,CACrF,GAAc,IAAVA,EAAG,IAAYZ,EAAEC,MAAQlC,EAAE,GAAI,CAAEiC,EAAEC,MAAQlC,EAAE,GAAIA,EAAI6C,EAAI,KAAO,CACpE,GAAI7C,GAAKiC,EAAEC,MAAQlC,EAAE,GAAI,CAAEiC,EAAEC,MAAQlC,EAAE,GAAIiC,EAAEI,IAAIW,KAAKH,GAAK,KAAO,CAC9D7C,EAAE,IAAIiC,EAAEI,IAAIU,MAChBd,EAAEG,KAAKW,MAAO,SAEtBF,EAAKf,EAAKrB,KAAKI,EAASoB,EAC3B,CAAC,MAAOT,GAAKqB,EAAK,CAAC,EAAGrB,GAAIQ,EAAI,CAAG,CAAU,QAAED,EAAI/B,EAAI,CAAG,CACzD,GAAY,EAAR6C,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAExB,MAAOwB,EAAG,GAAKA,EAAG,QAAK,EAAQlB,MAAM,EAC9E,CAtBgDL,CAAK,CAACnB,EAAGyC,IAAQ,CAuBrE,CA+DO,SAASK,EAAcC,EAAIC,EAAMC,GACpC,GAAIA,GAA6B,IAArBhD,UAAUC,OAAc,IAAK,IAA4BgD,EAAxBnD,EAAI,EAAGoD,EAAIH,EAAK9C,OAAYH,EAAIoD,EAAGpD,KACxEmD,GAAQnD,KAAKiD,IACRE,IAAIA,EAAKE,MAAMhD,UAAUiD,MAAM/C,KAAK0C,EAAM,EAAGjD,IAClDmD,EAAGnD,GAAKiD,EAAKjD,IAGrB,OAAOgD,EAAGO,OAAOJ,GAAME,MAAMhD,UAAUiD,MAAM/C,KAAK0C,GACtD,CA2GkD,mBAApBO,iBAAiCA,gBCnS/D,IClCaC,EAA0B,SAACC,EAAiBC,QAAA,IAAAA,IAAAA,EAAiB,WACxE,IAAMC,EAA6B,CACjCD,MAAKA,EACLD,QAAOA,EACPG,MAAO,SAETC,gBAAcC,KAAKH,EACrB,EAEaI,EAAwB,SAACN,EAAiBC,QAAA,IAAAA,IAAAA,EAAe,SACpE,IAAMC,EAA6B,CACjCD,MAAKA,EACLD,QAAOA,EACPG,MAAO,OAETC,gBAAcC,KAAKH,EACrB,EAqBaK,EAAuB,CAElCC,cAAe,SAACC,GAAuB,MAAA,GAAGZ,OAAAY,EAAiC,wBAAA,EAC3EC,cAAe,SAACD,GAAuB,MAAA,GAAGZ,OAAAY,EAAiC,wBAAA,EAC3EE,cAAe,SAACF,GAAuB,MAAA,GAAGZ,OAAAY,EAAiC,wBAAA,EAE3EG,YAAa,SAACH,GAAuB,MAAA,oBAAoBZ,OAAAY,EAAY,EACrEI,YAAa,SAACJ,GAAuB,MAAA,oBAAoBZ,OAAAY,EAAY,EACrEK,YAAa,SAACL,GAAuB,MAAA,oBAAoBZ,OAAAY,EAAY,EAErEM,UAAW,SAACN,GAAuB,MAAA,kBAAkBZ,OAAAY,EAAY,EACjEO,aAAc,4CAGdC,gBAAiB,mCACjBC,mBAAoB,SAACC,GAAsB,MAAA,GAAGtB,OAAAsB,EAAuB,eAAA,EAGrEC,aAAc,0BACdC,iBAAkB,oBAClBC,eAAgB,wCAGhBC,mBAAoB,mCACpBC,mBAAoB,mCACpBC,mBAAoB,mCAEpBC,aAAc,6BACdC,aAAc,6BAEdC,YAAa,4BACbC,YAAa,4BACbC,YAAa,4BAEbC,gBAAiB,gCACjBC,gBAAiB,gCACjBC,gBAAiB,gCAEjBC,iBAAkB,6BAClBC,mBAAoB,+BACpBC,gBAAiB,6BAINC,EAAuB,CAClCC,QAAS,SAACC,EAA2C9B,GACnD,IAAMT,EAAUO,EAAqB,GAAAV,OAAG0C,EAAS,YAAW9B,GAC5DV,EAAwBC,EACzB,EAEDwC,MAAO,SAACD,EAAoD9B,EAAoBgC,GAC9E,IAAMzC,EAAUyC,GAAiBlC,EAAqB,GAAGV,OAAA0C,EAAgB,UAAE9B,GAC3EH,EAAsBN,EACxB,GC3FW0C,EAAqB,CAChCC,MAAO,iBACPC,IAAK,iBACLC,SAAU,cACVC,MAAO,mBACPC,MAAO,mBACPC,KAAM,8EAGKC,EAAqB,CAChCC,SAAU,SAAC/B,GAAsB,MAAA,GAAGtB,OAAAsB,EAAuB,eAAA,EAC3DwB,MAAO,qCACPC,IAAK,iDACLC,SAAU,kDACVM,UAAW,SAAChC,EAAmBgC,GAC7B,MAAA,GAAGtD,OAAAsB,EAA8B,sBAAAtB,OAAAsD,EAAsB,cAAA,EACzDC,UAAW,SAACjC,EAAmBiC,GAC7B,MAAA,GAAGvD,OAAAsB,EAAkC,0BAAAtB,OAAAuD,EAAsB,cAAA,EAC7DC,QAAS,SAAClC,GAAsB,MAAA,GAAGtB,OAAAsB,EAA6B,qBAAA,EAChE2B,MAAO,mEACPC,MAAO,oEACPC,KAAM,4BACNM,eAAgB,4BAChBC,MAAO,SAACpC,EAAmBqC,EAAaC,GACtC,MAAA,UAAGtC,EAAS,qBAAAtB,OAAoB2D,EAAG,SAAA3D,OAAQ4D,EAA3C,65IC2DwC,SAACC,OAC3CC,EAAID,EAAAC,KACJC,EAAOF,EAAAE,QACPC,EAAeH,EAAAI,QAAfA,OAAO,IAAAD,GAAQA,EACfE,EAAAL,EAAAlB,MAAAA,OAAQ,IAAAuB,EAAA,KAAIA,EACZ9D,EAAKyD,EAAAzD,MACL+D,EAAAN,EAAAO,MAAAA,OAAQ,IAAAD,EAAA,EAACA,EACTE,EAAQR,EAAAS,KAARA,OAAI,IAAAD,EAAG,EAACA,EACRE,EAAAV,EAAAW,SAAAA,OAAW,IAAAD,EAAA,GAAEA,EACbE,EAAYZ,EAAAY,aACZC,EAAKb,EAAAa,MACLC,EAAMd,EAAAc,OACNC,EAAQf,EAAAe,SACRC,EAAShB,EAAAgB,UACTC,EAAAjB,EAAAkB,cAAAA,aAAgB,GAAED,EAClBE,EAAAnB,EAAAoB,WAAAA,OAAa,IAAAD,GAAIA,EACjBE,EAAkBrB,EAAAsB,WAAlBA,OAAU,IAAAD,GAAQA,EAClBE,EAAAvB,EAAAwB,QAAAA,OAAU,IAAAD,EAAA,CAAE,EAAAA,EACZE,EAAezB,EAAAyB,gBACfC,EAAA1B,EAAA2B,WAAAA,OAAa,IAAAD,GAAIA,EACjBE,EAAyB5B,EAAA6B,kBAAzBA,OAAiB,IAAAD,GAAQA,EACzBE,EAAA9B,EAAA+B,QAAAA,OAAU,IAAAD,GAAIA,EACdE,EAAuBhC,EAAAiC,iBAAvBA,OAAgB,IAAAD,GAAOA,EACvBE,EAAAlC,EAAAmC,aAAAA,OAAe,IAAAD,EAAA,oBAAmBA,EAE5BE,EAAkCC,EAAQA,SAAgBb,GAAzDc,EAAYF,EAAA,GAAEG,EAAeH,EAAA,GAEpCI,EAAAA,UAAU,WACRD,EAAgBf,EAClB,EAAG,CAACA,IAEJ,IAMMiB,EAAqB,SAAC1I,IAND,SAAC2I,EAAa3I,SACjC4I,SAAkBL,KAAYtC,EAAA,CAAA,GAAG0C,GAAM3I,MAC7CwI,EAAgBI,GAChBlB,SAAAA,EAAkBkB,GAIlBC,CAAmB,SAAU7I,IAkCzB8I,EAAkB,SAACC,EAAqBC,GAC5C,IAAMhJ,EAAQgJ,EAAKD,EAAOJ,KAE1B,GAAII,EAAOE,OACT,OAAOF,EAAOE,OAAOjJ,EAAOgJ,GAI9B,GAAIhJ,QACF,OAAOkJ,EAAAA,IAACC,EAAAA,KAAI,CAACC,EAAE,wBAGjB,GAAqB,kBAAVpJ,EACT,OACEkJ,EAAAA,IAACG,EAAAA,MAAK,CAAC3G,MAAO1C,EAAQ,QAAU,OAAQsJ,KAAK,KAC1CC,SAAAvJ,EAAQ,MAAQ,OAKvB,GAAmB,WAAf+I,EAAOJ,IAAkB,CAU3B,OACEO,EAAAA,IAACG,EAAAA,MAAK,CAAC3G,MAVoC,CAC3C8G,OAAQ,QACRC,SAAU,OACVC,QAAS,SACTC,UAAW,MACX9E,QAAS,QACTE,MAAO,MACP6E,QAAS,UAGkB5J,IAAU,OAAQsJ,KAAK,cAC/CtJ,GAGP,CAEA,OAAOkJ,EAAAA,IAACC,EAAAA,KAAM,CAAAI,SAAAvJ,EAAM6J,cAGhBC,EAAmB,SAACd,GACxB,IAAMe,EAAyB,GAE3BhD,GACFgD,EAAQpI,KAAK,CACXgH,IAAK,OACL9H,MAAO,OACPmJ,KAAMd,EAACe,IAAAC,YAASZ,KAAM,KACtBa,QAASpD,IAITC,GACF+C,EAAQpI,KAAK,CACXgH,IAAK,SACL9H,MAAO,SACPmJ,KAAMd,EAACe,IAAAG,aAAUd,KAAM,KACvB5G,MAAO,MACPyH,QAAS,WAAM,OAzFO,SAACnB,GAC3BqB,EAAAA,OAAOC,iBAAiB,CACtB9H,MAAO,iBACP+G,SACEL,EAACe,IAAAd,QAAKG,KAAK,KAAIC,SAAA,6EAIjBgB,OAAQ,CAAEC,QAAS,SAAUC,OAAQ,UACrCC,aAAc,CAAEhI,MAAO,OACvBiI,UAAW,WAAA,OAAApL,OAAA,OAAA,OAAA,EAAA,kEAEH,6BAAAyH,EACF,CAAA,EAAMA,EAASgC,IADL,CAAA,EAAA,UACV/C,EAAAnF,OACA6B,EAAAA,cAAcC,KAAK,CACjBJ,MAAO,UACPD,QAAS,4BACTG,MAAO,gEAIXC,EAAAA,cAAcC,KAAK,CACjBJ,MAAO,QACPD,QAASqI,EAAMrI,SAAW,wBAC1BG,MAAO,iCAGZ,EAAA,IA8DgBmI,CAAoB7B,EAApB,IAInBe,EAAQpI,KAAItC,MAAZ0K,EAAgB5C,GAEhB,IAAM2D,EAAiBf,EAAQgB,OAAO,SAAAC,GACpC,OAACA,EAAOpI,MAAQoI,EAAOpI,KAAKoG,EAA5B,GAGF,OAA8B,IAA1B8B,EAAe9L,OACV,KAIPiM,EAAAA,KAACC,EAAAA,KAAI,CAACC,SAAS,uBACbjC,EAAAA,IAACgC,EAAIA,KAACE,OAAM,CAAA7B,SACVL,MAACmC,aAAU,CAACC,QAAQ,SAAS5I,MAAM,OACjC6G,SAAAL,EAAAe,IAACsB,WAAS,CAAAjC,KAAM,SAGpBJ,EAAAA,IAACgC,EAAIA,KAACM,SACH,CAAAjC,SAAAuB,EAAeW,IAAI,SAACT,GAAW,OAC9B9B,EAAAe,IAACiB,EAAIA,KAACQ,MAEJC,YAAaX,EAAOhB,KACpBtH,MAAOsI,EAAOtI,MACdyH,QAAS,WAAM,OAAAa,EAAOb,QAAQnB,EAAK,EAElCO,SAAAyB,EAAOnK,OALHmK,EAAOrC,aAalBiD,EAAaC,KAAKC,KAAKtF,EAAQI,GAErC,OACEqE,EAAAA,KAACc,EAAAA,MAAK,CAACC,IAAI,KAAIzC,SAAA,CAEb0B,EAACgB,KAAAC,QAAM,CAAAC,QAAQ,gBAAe5C,SAAA,CAC5BL,EAACe,IAAAiC,QACE,CAAA3C,SAAA/G,GAAS0G,EAAAe,IAACd,OAAI,CAACG,KAAK,KAAK8C,GAAI,IAAM7C,SAAA/G,MAGtCyI,EAAAgB,KAACC,QAAK,CAAA3C,SAAA,CACHtC,GACCiC,EAAAe,IAACoB,aAAU,CAACC,QAAQ,QAAQnB,QAASlD,EACnCsC,SAAAL,EAAAe,IAACoC,cAAW,CAAC/C,KAAM,OAItBxC,GACCoC,EAACe,IAAAqC,SAAO,CAAAX,YAAazC,EAAAe,IAACsC,WAAQ,CAACjD,KAAM,KAAQa,QAASrD,8BAQ1DO,GAAcE,IACd0D,EAAAA,KAACiB,EAAAA,MACE,CAAA3C,SAAA,CAAAlC,GACC6B,MAACsD,YAAS,CACRC,YAAY,YACZd,YAAazC,EAACe,IAAAyC,aAAW,CAAApD,KAAM,KAC/BtJ,MAAOuI,EAAaoE,QAAU,GAC9BC,SAAU,SAACzM,GAAM,OAAAuI,EAAmBvI,EAAE0M,cAAc7M,MAAM,EAC1D8M,MAAO,CAAEC,KAAM,KAIlBxF,GACC2B,EAACe,IAAAiC,QACC,CAAA3C,SAAAL,EAAAe,IAACoB,aAAU,CAACC,QAAQ,QAAO/B,SACzBL,EAACe,IAAA+C,aAAW,CAAA1D,KAAM,YAS5B2B,EAACgB,KAAAgB,QAAM,CAAArF,WAAYA,EAAYsF,IAAI,WAAU3D,SAAA,CAC3CL,EAACe,IAAAkD,iBAAe,CAAAC,QAAS/G,IAExBtB,EACCmE,EAACe,IAAAoD,UAAOpO,EAAE,KAAIsK,SACZ0B,EAACgB,KAAAF,QAAM,CAAAuB,MAAM,SAAStB,IAAI,KACxBzC,SAAA,CAAAL,EAAAe,IAACd,OAAK,CAAAC,EAAE,MAAMgD,GAAI,oCAClBlD,EAAAe,IAACd,OAAI,CAACC,EAAE,SAASE,KAAK,KAAMC,SAAAxE,IAC3BkC,GACCiC,EAAAe,IAACqC,SAAM,CAAChB,QAAQ,QAAQhC,KAAK,KAAKa,QAASlD,EAElCsC,SAAA,mBAIG,IAAhBrD,EAAKlH,OACPkK,EAAAA,IAACmE,EAAAA,OAAM,CAACpO,EAAE,KAAIsK,SACZ0B,EAACgB,KAAAF,QAAM,CAAAuB,MAAM,SAAStB,IAAI,KAAIzC,SAAA,CAC5BL,EAACe,IAAAd,OAAK,CAAAC,EAAE,SAAUG,SAAAnB,IACjBtB,GACCoC,EAACe,IAAAqC,SAAO,CAAAhB,QAAQ,QAAQhC,KAAK,KAAKa,QAASrD,mCAOjDmE,OAACsC,QAAK,CACJvF,QAASA,EACTE,iBAAkBA,EAClBJ,kBAAmBA,EAEnByB,SAAA,CAAAL,EAAAA,IAACqE,EAAKA,MAACC,MAAK,CAAAjE,SACV0B,EAAAA,KAACsC,EAAKA,MAACE,GACJ,CAAAlE,SAAA,CAAApD,EAAQsF,IAAI,SAAC1C,GAAW,OACvBG,EAAAe,IAACsD,EAAKA,MAACG,GAAoB,CAAAZ,MAAO,CAAEa,MAAO5E,EAAO4E,OAAOpE,SACtDR,EAAOlI,OADKkI,EAAOJ,IADC,IAKvB5B,GAAUC,GAAYG,EAAcnI,OAAS,IAC7CkK,EAAAA,IAACqE,EAAKA,MAACG,IAAGZ,MAAO,CAAEa,MAAO,IAAIpE,SAAA,iBAIpCL,EAAAA,IAACqE,EAAKA,MAACK,gBACJ1H,EAAKuF,IAAI,SAACzC,GAAS,OAClBiC,EAACgB,KAAAsB,EAAKA,MAACE,GACJ,CAAAlE,SAAA,CAAApD,EAAQsF,IAAI,SAAC1C,GAAW,OACvBG,EAAAe,IAACsD,EAAKA,MAACM,GAAE,CAAAtE,SACNT,EAAgBC,EAAQC,IADZ,GAAG5G,OAAA4G,EAAK8E,GAAM,KAAA1L,OAAA2G,EAAOJ,KADb,IAKvB5B,GAAUC,GAAYG,EAAcnI,OAAS,IAC7CkK,EAAAA,IAACqE,EAAKA,MAACM,GACJ,CAAAtE,SAAAO,EAAiBd,OARTA,EAAK8E,cAmB7BlC,EAAa,GACZ1C,EAAAA,IAACgD,EAAAA,MAAK,CAACC,QAAQ,SAAQ5C,SACrBL,EAACe,IAAA8D,aACC,CAAAvH,MAAOoF,EACP5L,MAAO0G,EACPkG,SAAU/F,EACVyC,KAAK,WAMjB,sBHtVgD,SAACrD,OAC/C+H,EAAM/H,EAAA+H,OACNC,EAAOhI,EAAAgI,QACPC,EAASjI,EAAAiI,UACT1L,EAAKyD,EAAAzD,MACL4D,EAAgBH,EAAAkI,SAAhBA,OAAW,IAAA/H,KACXgI,EAAQnI,EAAAmI,SACRC,EAAMpI,EAAAoI,OACNC,EAAQrI,EAAAqI,SACRhI,EAAWL,EAAA0H,MAAXA,OAAQ,IAAArH,EAAA,MACRC,EAAAN,EAAAsI,cAAAA,OAAa,IAAAhI,EAAG,CAAA,EAAEA,qBAGlB,IAaQiI,EAbFC,EAAYN,KAAcC,EAG1BM,EAAqB,WACzB,IAAMC,EAA8B,CAAA,EAIpC,OAHAN,EAAOO,QAAQ,SAAAC,SACbF,EAAOE,EAAMC,MAA0B,QAAlB7I,EAAA4I,EAAME,oBAAY,IAAA9I,EAAAA,EAAoB,gBAAf4I,EAAMG,KAAyB,GAAK,EAClF,GACYxQ,EAAAA,EAAA,CAAA,EAAAmQ,GAAWJ,IAmCnBU,EAAOC,EAAAA,QAAQ,CACnBX,cAAeG,IACfS,UAhCMX,EAA4D,CAAA,EAClEH,EAAOO,QAAQ,SAAAC,GACbL,EAAWK,EAAMC,MAAQ,SAAC9O,mBACxB,OAAI6O,EAAMpJ,YAAczF,GAA2B,iBAAVA,GAAuC,KAAjBA,EAAMoP,QAC5D,GAAGhN,OAAAyM,EAAMhO,uBAEE,QAAhBoF,EAAA4I,EAAML,kBAAU,IAAAvI,OAAA,EAAAA,EAAEf,QAASlF,IAAU,YAAYqP,KAAKrP,GACjD,wBAEW,QAAhBoG,EAAAyI,EAAML,kBAAU,IAAApI,OAAA,EAAAA,EAAEjB,MAAOnF,IAAU,iBAAiBqP,KAAKrP,GACpD,sBAEa,UAAlB6O,EAAML,kBAAY,IAAAlI,OAAA,EAAAA,EAAAZ,YAAa1F,GAASA,EAAMhB,OAAS6P,EAAML,WAAW9I,UACnE,GAAAtD,OAAGyM,EAAMhO,MAAK,sBAAAuB,OAAqByM,EAAML,WAAW9I,UAAS,gBAEhD,UAAlBmJ,EAAML,kBAAY,IAAAjI,OAAA,EAAAA,EAAAZ,YAAa3F,GAASA,EAAMhB,OAAS6P,EAAML,WAAW7I,UACnE,GAAAvD,OAAGyM,EAAMhO,MAAK,0BAAAuB,OAAyByM,EAAML,WAAW7I,UAAS,gBAEpD,UAAlBkJ,EAAML,kBAAY,IAAA/H,OAAA,EAAAA,EAAAb,UAAW5F,IAAU6O,EAAML,WAAW5I,QAAQyJ,KAAKrP,GAChE,GAAGoC,OAAAyM,EAAMhO,6BAEI,UAAlBgO,EAAML,kBAAY,IAAA7H,OAAA,EAAAA,EAAA2I,QACbT,EAAML,WAAWc,OAAOtP,GAE1B,KAEX,GACOwO,KAST/F,EAAAA,UAAU,WACR,GAAIgG,GAAaL,EAAU,CACzB,IAAMmB,EAAqC,CAAA,EAC3ClB,EAAOO,QAAQ,SAAAC,WACbU,EAAcV,EAAMC,MAAkD,QAA1C1I,EAAwB,UAAxBgI,EAASS,EAAMC,aAAS,IAAA7I,EAAAA,EAAA4I,EAAME,oBAAY,IAAA3I,EAAAA,EAAI,EAC5E,GACA6I,EAAKO,UAAUD,EACjB,MAAYd,GACVQ,EAAKO,UAAUd,IAElB,EAAE,CAACN,EAAUJ,EAAQS,IAmFtB,OACExD,EAAAA,KAACgC,EAAAA,MAAK,CACJH,MAAO,CACL3B,SAAU,QACVsE,IAAK,GACLC,MAAO1B,EAAS,EAAI,IAAI5L,OAAAuL,EAAS,MACjCgC,OAAQ,EACRhC,MAAO,GAAGvL,OAAAuL,EAAS,MACnBiC,OAAQ,IACRC,aAAc,EACdC,QAAS,OACTC,cAAe,SACfC,WAAY,wCACZC,gBAAiB,4BACjBC,WAAY,mBACb3G,SAAA,CAGD0B,OAACiB,QAAK,CAACC,QAAQ,gBAAgBlN,EAAE,KAAK6N,MAAO,CAAEqD,aAAc,yCAC3D5G,SAAA,CAAAL,EAAAe,IAACmG,QAAM,CAAAC,MAAO,WACX5B,EAAY,eAAQjM,GAAU,cAAcJ,OAAAI,KAE/C0G,EAACe,IAAAoB,aACC,CAAAC,QAAQ,SACR5I,MAAM,OACNyH,QAAS8D,WAET/E,EAACe,IAAAqG,QAAM,CAAAhH,KAAM,UAKjBJ,EAACe,IAAAsG,aAAW,CAAAzD,MAAO,CAAEC,KAAM,GACzBxD,SAAAL,EAAAe,IAACuG,MAAG,CAACvR,EAAE,KACLsK,SAAAL,EAAAe,IAAA,OAAA,CAAMqE,SAAUW,EAAKX,SAnHR,SAAOK,GAA0B,OAAApP,OAAA,OAAA,OAAA,EAAA,sEAElD,6BAAA,CAAA,EAAM+O,EAASK,kBAAf1I,EAAAnF,OAEM2P,EAA0C,CAC9CjO,MAAO,UACPD,QAAS,GAAAH,OAAGI,EAAK,KAAAJ,OAAIqM,EAAY,UAAY,UAAwB,iBACrE/L,MAAO,SAGTC,gBAAcC,KAAK6N,GACnBvC,IACAD,IACAgB,EAAKyB,uCAELC,QAAQ5L,MAAM,SAAA3C,OAASqM,EAAY,WAAa,WAAU,KAAArM,OAAII,EAAMoO,cAAgB,KAAEhG,GAEhFiG,EAAwC,CAC5CrO,MAAO,QACPD,QAASqI,EAAMrI,SAAW,aAAaH,OAAAqM,EAAY,SAAW,SAAQ,KAAArM,OAAII,EAAMoO,eAChFlO,MAAO,OAGTC,gBAAcC,KAAKiO,iCA6FbtH,SAAA0B,EAAAgB,KAACF,QAAM,CAAAC,IAAI,eACRqC,EAAO5C,IA1FA,SAACoD,GACnB,IAAMiC,EAAa7B,EAAK8B,cAAclC,EAAMC,MACtCkC,KACJrI,IAAKkG,EAAMC,KACXjO,MAAOgO,EAAMhO,MACb4L,YAAaoC,EAAMpC,YACnBwE,YAAapC,EAAMoC,YACnBxL,SAAUoJ,EAAMpJ,SAChByL,SAAUrC,EAAMqC,UAAazC,GAA4B,OAAfI,EAAMC,MAC7CgC,GAGL,OAAQjC,EAAMG,MACZ,IAAK,QACH,OAAO9F,EAAAe,IAACuC,EAASA,UAAKhO,EAAA,CAAA,EAAAwS,GAAahC,KAAK,WAE1C,IAAK,SACH,OAAO9F,EAAAA,IAACiI,EAAAA,YAAgB3S,EAAA,CAAA,EAAAwS,IAE1B,IAAK,WACH,OAAO9H,EAACe,IAAAmH,EAAQA,SAAK5S,EAAA,CAAA,EAAAwS,GAAaK,UAAQ,EAACC,QAAS,EAAGC,QAAS,KAElE,IAAK,SACH,OACErI,EAAAe,IAACuH,EAAMA,OAAAhT,EAAA,CAAA,EACDwS,EACJ,CAAA9K,KAAM2I,EAAM4C,SAAW,MAI7B,IAAK,cACH,OACEvI,EAAAe,IAACyH,EAAWA,YAAAlT,EAAA,CAAA,EACNwS,EACJ,CAAA9K,KAAM2I,EAAM4C,SAAW,MAI7B,IAAK,OACH,OACEvI,EAACe,IAAA0H,EAASA,eACJX,EAAW,CACfxN,gBAAgB,sBAChBoO,cAAY,EACZP,UACA,EAAAC,QAAS,KAIf,QACE,OAAOpI,EAAAA,IAACsD,EAAAA,UAAchO,EAAA,CAAA,EAAAwS,OA0ChB/F,EAACgB,KAAAC,SAAMC,QAAQ,WAAW0F,GAAG,KAC3BtI,SAAA,CAAAL,EAAAe,IAACqC,SAAO,CAAAhB,QAAQ,QAAQnB,QAAS8D,EAAO1E,SAAA,WAGxC0B,EAACgB,KAAAK,SAAO,CAAA0C,KAAK,SAAQzF,SAAA,CAClBkF,EAAY,SAAW,SAAQ,IAAGjM,mBASrD,qHEpHiC,eAAC,IAAmDsP,EAAA,GAAAC,EAAA,EAAnDA,EAAmDhT,UAAAC,OAAnD+S,IAAAD,EAAmDC,GAAAhT,UAAAgT,GACnF,OAAO,SAAC/R,GACN,IAAwB,IAAA+R,EAAA,EAAAC,EAAUF,EAAVC,WAAAA,IAAY,CAA/B,IACGhN,GAAQkN,EADID,EAAAD,IACM/R,GACxB,GAAI+E,EAAO,OAAOA,CACpB,CACA,OAAO,KAEX,yBAhB8B,SAACmN,GAC7B,OAAIA,EAAU,GAAW,GAAA9P,OAAG8P,EAAO,KAC/BA,EAAU,KAAa,GAAA9P,OAAGyJ,KAAKsG,MAAMD,EAAU,IAAG,KAClDA,EAAU,MAAc,GAAA9P,OAAGyJ,KAAKsG,MAAMD,EAAU,MAAK,KAClD,GAAA9P,OAAGyJ,KAAKsG,MAAMD,EAAU,OAAM,IACvC,wBAtB6B,SAAC9M,GAC5B,IAAMgN,EAAQhN,EAASgN,MAAM,oBAC7B,IAAKA,EAAO,OAAO,MAEnB,IAAMpS,EAAQqS,SAASD,EAAM,IAG7B,OAFaA,EAAM,IAAM,KAGvB,IAAK,IAAK,OAAOpS,EACjB,IAAK,IAAK,OAAe,GAARA,EACjB,IAAK,IAEL,QAAS,OAAe,KAARA,EADhB,IAAK,IAAK,OAAe,MAARA,EAGrB,8FDvFoC,SAACuC,EAAiBC,QAAA,IAAAA,IAAAA,EAAc,QAClE,IAAMC,EAA6B,CACjCD,MAAKA,EACLD,QAAOA,EACPG,MAAO,QAETC,gBAAcC,KAAKH,EACrB,oEAhBuC,SAACF,EAAiBC,QAAA,IAAAA,IAAAA,EAAiB,WACxE,IAAMC,EAA6B,CACjCD,MAAKA,EACLD,QAAOA,EACPG,MAAO,UAETC,gBAAcC,KAAKH,EACrB,wBGE6B,SAC3BA,EACA6P,GAEM,IAAArM,EAAkBqC,EAAQA,SAAM,IAA/BpC,EAAID,EAAA,GAAEsM,EAAOtM,EAAA,GACdG,EAAwBkC,EAAQA,UAAC,GAAhCjC,EAAOD,EAAA,GAAEoM,EAAUpM,EAAA,GACpBE,EAAoBgC,EAAQA,SAAgB,MAA3CvD,EAAKuB,EAAA,GAAEmM,EAAQnM,EAAA,GAChBC,EAAoB+B,EAAQA,SAAC,GAA5B9B,EAAKD,EAAA,GAAEmM,EAAQnM,EAAA,GAChBE,EAAwB6B,EAAQA,UAAC,GAAhCqK,EAAOlM,EAAA,GAAEmM,EAAUnM,EAAA,GAGpBoM,EAASC,EAAM5R,OAAO,CAC1B6R,QAAStQ,EAAOsQ,QAChBC,QAASvQ,EAAOuQ,SAAW,IAC3BC,QAAOzU,EAAA,CACL,eAAgB,oBACbiE,EAAOyQ,kBAKdL,EAAOM,aAAaC,QAAQC,IAC1B,SAAC5Q,GAMC,OAFEA,EAAOwQ,QAAQ,gBAFC,oBAIXxQ,CACR,EACD,SAACsC,GAAU,OAAAnF,QAAQE,OAAOiF,EAAf,GAIb8N,EAAOM,aAAaG,SAASD,IAC3B,SAACC,GAAa,OAAAA,CAAQ,EACtB,SAACvO,WACOwO,GAAmC,UAAN,QAAdtN,EAAAlB,EAAMuO,gBAAQ,IAAArN,OAAA,EAAAA,EAAEC,YAAI,IAAAE,OAAA,EAAAA,EAAE7D,UAAWwC,EAAMxC,SAAW,oBAEvE,OADAkQ,EAASc,GACF3T,QAAQE,OAAOiF,EACxB,GAGF,IAAMyO,EAAaC,EAAAA,YAAY,WAC7BhB,EAAS,KACV,EAAE,IAEGiB,EAASD,EAAAA,YAAY,gHAAOhM,mCAAA,IAAAA,IAAAA,EAA2B,CAAA,6CAC3D+K,GAAW,GACXC,EAAS,uBAUU,8BAPXkB,EAAS,IAAIC,gBACnBnV,OAAOoV,QAAQpM,GAASmH,QAAQ,SAAC3I,OAAC0C,EAAG1C,EAAA,GAAEjG,EAAKiG,EAAA,GACtCjG,SAAmD,KAAVA,GAC3C2T,EAAOG,OAAOnL,EAAK3I,EAAM6J,WAE7B,GAEiB,CAAA,EAAMgJ,EAAOkB,IAA6C,GAAG3R,OAAAkQ,EAAY,KAAAlQ,OAAAuR,EAAO9J,qBAGjG,GAAI,SAHEyJ,EAAWhN,EAA6FxF,QAGvFoF,MAAQhE,MAAM8R,QAAQV,EAASpN,KAAKA,MAMzD,OAJM+N,EAAgBX,EAASpN,KAC/BqM,EAAQ0B,EAAc/N,MACtBwM,EAASuB,EAAczN,OACvBoM,EAAWqB,EAAcC,WAAY,GAC9B,CAAA,EAAAD,EAAc/N,MAChB,GAAI,SAAUoN,EAASpN,MAAQhE,MAAM8R,QAAQV,EAASpN,KAAKA,MAMhE,OAJMiO,EAAUb,EAASpN,KACzBqM,EAAQ4B,EAAQjO,MAChBwM,EAASyB,EAAQjO,KAAKlH,QACtB4T,GAAW,GACJ,CAAA,EAAAuB,EAAQjO,MACV,GAAIhE,MAAM8R,QAAQV,EAASpN,MAKhC,OAHAqM,EAAQe,EAASpN,MACjBwM,EAASY,EAASpN,KAAKlH,QACvB4T,GAAW,GACJ,CAAA,EAAAU,EAASpN,MAEhB,MAAM,IAAIkO,MAAM,kCAKlB,iBAFMb,GAAiC,QAAlBnN,EAAY,QAAZH,EAAAoO,EAAIf,gBAAQ,IAAArN,OAAA,EAAAA,EAAEC,YAAI,IAAAE,OAAA,EAAAA,EAAE7D,UAAW8R,EAAI9R,SAAW,uBACnEkQ,EAASc,GACHc,gBAEN7B,GAAW,4BAEd,EAAE,CAACK,EAAQP,IAENgC,EAAUb,cAAY,SAAO3F,GAAU,OAAAvO,OAAA,OAAA,OAAA,EAAA,0EAC3CiT,GAAW,GACXC,EAAS,uBAGU,8BAAM,CAAA,EAAAI,EAAOkB,IAAwB,GAAA3R,OAAGkQ,EAAY,KAAAlQ,OAAA0L,YAErE,OAFMwF,EAAWhN,EAAyDxF,OAE1E,CAAA,EADa,SAAUwS,EAASpN,KAAOoN,EAASpN,KAAKA,KAAOoN,EAASpN,aAKrE,iBAFMqN,GAAiC,QAAlBnN,EAAY,QAAZH,EAAAsO,EAAIjB,gBAAQ,IAAArN,OAAA,EAAAA,EAAEC,YAAI,IAAAE,OAAA,EAAAA,EAAE7D,UAAWgS,EAAIhS,SAAW,uBACnEkQ,EAASc,GACHgB,gBAEN/B,GAAW,0BAEd,EAAA,EAAE,CAACK,EAAQP,IAENpR,EAASuS,cAAY,SAAOe,GAAoB,OAAAjV,OAAA,OAAA,OAAA,EAAA,4EACpDiT,GAAW,GACXC,EAAS,uBAGU,8BAAM,CAAA,EAAAI,EAAO4B,KAAyBnC,EAAUkC,WAOjE,OAPMlB,EAAWhN,EAAyDxF,OACpE4T,EAAU,SAAUpB,EAASpN,KAAOoN,EAASpN,KAAKA,KAAOoN,EAASpN,KAGxEqM,EAAQ,SAAAoC,GAAQ,OAAA/S,EAAAA,EAAA,GAAI+S,GAAI,GAAA,CAAED,IAAO,EAAjB,GAChBhC,EAAS,SAAAiC,GAAQ,OAAAA,EAAO,CAAP,GAEjB,CAAA,EAAOD,UAIP,iBAFMnB,GAAiC,QAAlBnN,EAAY,QAAZH,EAAA2O,EAAItB,gBAAQ,IAAArN,OAAA,EAAAA,EAAEC,YAAI,IAAAE,OAAA,EAAAA,EAAE7D,UAAWqS,EAAIrS,SAAW,wBACnEkQ,EAASc,GACHqB,gBAENpC,GAAW,0BAEd,EAAA,EAAE,CAACK,EAAQP,IAENuC,EAASpB,EAAAA,YAAY,SAAO3F,EAAY0G,GAAoB,OAAAjV,OAAA,OAAA,OAAA,EAAA,4EAChEiT,GAAW,GACXC,EAAS,uBAGU,8BAAA,CAAA,EAAMI,EAAOiC,IAAwB,GAAG1S,OAAAkQ,EAAY,KAAAlQ,OAAA0L,GAAM0G,WAM3E,OANMlB,EAAWhN,EAAmExF,OAC9EiU,EAAc,SAAUzB,EAASpN,KAAOoN,EAASpN,KAAKA,KAAOoN,EAASpN,KAG5EqM,EAAQ,SAAAoC,GAAQ,OAAAA,EAAKlJ,IAAI,SAAAzC,GAAQ,OAAAA,EAAK8E,KAAOA,EAAKiH,EAAc/L,CAA/B,EAAjB,GAEhB,CAAA,EAAO+L,UAIP,iBAFMxB,GAAiC,QAAlBnN,EAAY,QAAZH,EAAA+O,EAAI1B,gBAAQ,IAAArN,OAAA,EAAAA,EAAEC,YAAI,IAAAE,OAAA,EAAAA,EAAE7D,UAAWyS,EAAIzS,SAAW,wBACnEkQ,EAASc,GACHyB,gBAENxC,GAAW,0BAEd,EAAA,EAAE,CAACK,EAAQP,IAEN2C,EAAaxB,cAAY,SAAO3F,GAAU,OAAAvO,OAAA,OAAA,OAAA,EAAA,wEAC9CiT,GAAW,GACXC,EAAS,uBAGP,8BAAM,CAAA,EAAAI,EAAOqC,OAAO,GAAA9S,OAAGkQ,EAAY,KAAAlQ,OAAA0L,mBAAnCxH,EAAAxF,OAGAyR,EAAQ,SAAAoC,GAAQ,OAAAA,EAAK5J,OAAO,SAAA/B,GAAQ,OAAAA,EAAK8E,KAAOA,CAAZ,EAApB,GAChB4E,EAAS,SAAAiC,GAAQ,OAAAA,EAAO,CAAP,gBAIjB,iBAFMpB,GAAiC,QAAlBnN,EAAY,QAAZH,EAAAkP,EAAI7B,gBAAQ,IAAArN,OAAA,EAAAA,EAAEC,YAAI,IAAAE,OAAA,EAAAA,EAAE7D,UAAW4S,EAAI5S,SAAW,wBACnEkQ,EAASc,GACH4B,gBAEN3C,GAAW,0BAEd,EAAA,EAAE,CAACK,EAAQP,IAEN8C,EAAU3B,EAAAA,YAAY,WAAA,OAAAlU,OAAA,OAAA,OAAA,EAAA,4DAC1B,MAAM,CAAA,EAAAmU,mBAANzN,EAAAnF,aACD,EAAA,EAAE,CAAC4S,IAEJ,MAAO,CACLxN,KAAIA,EACJG,QAAOA,EACPtB,MAAKA,EACLyB,MAAKA,EACLmM,QAAOA,EACPE,OAAMA,EACNa,OAAMA,EACNY,QAAOA,EACPpT,OAAMA,EACN2T,OAAMA,EACNK,OAAQD,EACRzB,WAAUA,EACV4B,QAAOA,EAEX,wBC3M6B,SAC3BlP,EACAuL,QAAA,IAAAA,IAAAA,EAAkC,CAAA,GAGhC,IAAAxL,EAEEwL,EAAO4D,aAFTA,aAAe,CAAC,OAAQ,QAAS,QAAS,eAAcpP,EACxDG,EACEqL,EADiB6D,eAAnBA,OAAc,IAAAlP,EAAG,CAAA,EAAEA,EAGfE,EAAwBgC,EAAQA,SAAgBgN,GAA/C7N,EAAOnB,EAAA,GAAEiP,EAAUjP,EAAA,GACpBC,EAA8B+B,EAAQA,SAAC,IAAtCkN,EAAUjP,EAAA,GAAEkP,EAAalP,EAAA,GAE1BmP,EAAYjC,EAAAA,YAAY,SAAC9K,EAAa3I,GAC9B,WAAR2I,GACF8M,EAAczV,GACduV,EAAW,SAAAZ,GAAQ,OAAMnW,EAAAA,EAAA,CAAA,EAAAmW,GAAM,CAAAhI,OAAQ3M,GAApB,IAEnBuV,EAAW,SAAAZ,SAAQ,cAAMA,KAAI1O,EAAA,CAAA,GAAG0C,GAAM3I,EAAQiG,GAA3B,EAEtB,EAAE,IAEG0P,EAAelC,EAAAA,YAAY,WAC/B8B,EAAW,CAAE,GACbE,EAAc,GACf,EAAE,IAEGG,EAAenC,EAAAA,YAAY,WAC/B8B,EAAWD,GACXG,EAAc,GAChB,EAAG,CAACH,IAEEO,EAAeC,EAAAA,QAAQ,WAC3B,IAAIzV,EAAMuB,EAAA,GAAOsE,GAAI,GAGrB,GAAIsP,EAAWpG,OAAQ,CACrB,IAAM2G,EAAOP,EAAW5E,cAAcxB,OACtC/O,EAASA,EAAO0K,OAAO,SAAA/B,GACrB,OAAOqM,EAAaW,KAAK,SAAAnH,GACvB,IAAM7O,EAAQgJ,EAAK6F,GACnB,QAAK7O,GACEA,EAAM6J,WAAW+G,cAAcqF,SAASF,EACjD,EACF,EACF,CAgCA,OA7BAtX,OAAOoV,QAAQpM,GAASmH,QAAQ,SAAC3I,OAAC0C,EAAG1C,EAAA,GAAEjG,EAAKiG,EAAA,GAC9B,WAAR0C,GAEA3I,SAAmD,KAAVA,IAGzCK,EAFE6B,MAAM8R,QAAQhU,IAAUA,EAAMhB,OAAS,EAEhCqB,EAAO0K,OAAO,SAAA/B,GAAQ,OAAAhJ,EAAMiW,SAASjN,EAAKL,GAApB,GAGtBtI,EAAO0K,OAAO,SAAA/B,GACrB,IAAMkN,EAAYlN,EAAKL,GACvB,OAAiB,MAAbuN,IAGAA,EAAUrM,WAAW+G,gBAAkB5Q,EAAM6J,WAAW+G,eAKnC,iBAAdsF,GAA2C,iBAAVlW,GACnCkW,EAAUtF,cAAcqF,SAASjW,EAAM4Q,eAIlD,GAGN,GAEOvQ,CACR,EAAE,CAAC6F,EAAMsP,EAAY/N,EAAS4N,IAE/B,MAAO,CACLQ,aAAYA,EACZpO,QAAOA,EACPiO,UAASA,EACTC,aAAYA,EACZC,aAAYA,EACZJ,WAAUA,EACVC,cAAaA,EAEjB,wBH/B6B,SAACzV,GAC5B,OAAKA,EACEiF,EAAmBK,MAAM+J,KAAKrP,GAAS,KAAOwF,EAAmBF,MADrD,IAErB,2BA/BgC,SAACtF,GAC/B,OAAKA,EACEiF,EAAmBG,SAASiK,KAAKrP,GAAS,KAAOwF,EAAmBJ,SADxD,IAErB,wBAb6B,SAACpF,GAC5B,OAAKA,EACEiF,EAAmBC,MAAMmK,KAAKrP,GAAS,KAAOwF,EAAmBN,MADrD,IAErB,6BAkDkC,SAAClF,GACjC,IAAKA,GAA0B,KAAjBA,EAAMoP,OAAe,OAAO,KAE1C,IAEE,OADA+G,KAAKC,MAAMpW,GACJ,IACR,CAAC,MAAO+E,GACP,MAAO,qBACT,CACF,4BA1CiC,SAAC/E,EAAe2F,EAAmBjC,GAClE,YADkE,IAAAA,IAAAA,EAAmB,SAChF1D,EACEA,EAAMhB,QAAU2G,EAAY,KAAOH,EAAmBG,UAAUjC,EAAWiC,GAD/D,IAErB,4BARiC,SAAC3F,EAAe0F,EAAmBhC,GAClE,YADkE,IAAAA,IAAAA,EAAmB,SAChF1D,EACEA,EAAMhB,QAAU0G,EAAY,KAAOF,EAAmBE,UAAUhC,EAAWgC,GAD/D,IAErB,0BAO+B,SAAC1F,EAAe4F,EAAiBlC,GAC9D,YAD8D,IAAAA,IAAAA,EAAmB,SAC5E1D,EACE4F,EAAQyJ,KAAKrP,GAAS,KAAOwF,EAAmBI,QAAQlC,GAD5C,IAErB,wBAE6B,SAAC1D,EAAe+F,EAAaC,EAAatC,GACrE,YADqE,IAAAA,IAAAA,EAAmB,SAC3E,MAAT1D,EAAsB,KACtBA,EAAQ+F,GAAO/F,EAAQgG,EAClBR,EAAmBM,MAAMpC,EAAWqC,EAAKC,GAE3C,IACT,2BA5CgC,SAAChG,GAC/B,OAAIA,SAAmD,KAAVA,GACxCkC,MAAM8R,QAAQhU,IAA2B,IAAjBA,EAAMhB,OAC1B,yBAEF,IACT,wBA6C6B,SAACgB,GAC5B,OAAKA,EACEiF,EAAmBI,MAAMgK,KAAKrP,GAAS,KAAOwF,EAAmBH,MADrD,IAErB,sBAzC2B,SAACrF,GAC1B,OAAKA,EACEiF,EAAmBE,IAAIkK,KAAKrP,GAAS,KAAOwF,EAAmBL,IADnD,IAErB,uBAwC4B,SAACnF,GAC3B,OAAKA,EACEiF,EAAmBM,KAAK8J,KAAKrP,GAAS,KAAOwF,EAAmBD,KADpD,IAErB","x_google_ignoreList":[0]}
\ No newline at end of file
+{"version":3,"file":"index.js","sources":["../../node_modules/tslib/tslib.es6.js","../src/components/FormSidebar/FormSidebar.tsx","../src/components/StatusBadge/StatusBadge.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/ActionMenu/ActionMenu.tsx","../src/components/LoadingState/LoadingState.tsx","../src/utils/notifications.ts","../src/utils/validation.ts","../src/components/DataTable/DataTable.tsx","../src/hooks/useApiService.ts","../src/hooks/useDataFilter.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React, { useEffect } from 'react';\nimport {\n Paper,\n TextInput,\n Select,\n MultiSelect,\n NumberInput,\n Textarea,\n JsonInput,\n Button,\n Group,\n Stack,\n Title,\n ActionIcon,\n ScrollArea,\n Box,\n Text,\n} from '@mantine/core';\nimport { IconX } from '@tabler/icons-react';\nimport { useForm } from '@mantine/form';\nimport { notifications } from '@mantine/notifications';\nimport { FormField, NotificationConfig } from '../../types';\n\nexport interface FormSidebarProps {\n opened: boolean;\n onClose: () => void;\n onSuccess: () => void;\n title: string;\n editMode?: boolean;\n editItem?: any;\n fields: FormField[];\n onSubmit: (values: any) => Promise;\n width?: number;\n initialValues?: Record;\n validateOnSubmit?: boolean;\n}\n\nconst FormSidebar: React.FC = ({\n opened,\n onClose,\n onSuccess,\n title,\n editMode = false,\n editItem,\n fields,\n onSubmit,\n width = 450,\n initialValues = {},\n validateOnSubmit = true,\n}) => {\n const isEditing = editMode && !!editItem;\n\n // Build initial form values from fields\n const buildInitialValues = () => {\n const values: Record = {};\n fields.forEach(field => {\n values[field.name] = field.defaultValue ?? (field.type === 'multiselect' ? [] : '');\n });\n return { ...values, ...initialValues };\n };\n\n // Build validation rules from fields\n const buildValidation = () => {\n const validation: Record string | null> = {};\n fields.forEach(field => {\n validation[field.name] = (value: any) => {\n if (field.required && (!value || (typeof value === 'string' && value.trim() === ''))) {\n return `${field.label} is required`;\n }\n if (field.validation?.email && value && !/^\\S+@\\S+$/.test(value)) {\n return 'Invalid email format';\n }\n if (field.validation?.url && value && !/^https?:\\/\\/.+/.test(value)) {\n return 'Invalid URL format';\n }\n if (field.validation?.minLength && value && value.length < field.validation.minLength) {\n return `${field.label} must be at least ${field.validation.minLength} characters`;\n }\n if (field.validation?.maxLength && value && value.length > field.validation.maxLength) {\n return `${field.label} must be no more than ${field.validation.maxLength} characters`;\n }\n if (field.validation?.pattern && value && !field.validation.pattern.test(value)) {\n return `${field.label} format is invalid`;\n }\n if (field.validation?.custom) {\n return field.validation.custom(value);\n }\n return null;\n };\n });\n return validation;\n };\n\n const form = useForm({\n initialValues: buildInitialValues(),\n validate: buildValidation(),\n });\n\n // Update form values when editItem changes\n useEffect(() => {\n if (isEditing && editItem) {\n const updatedValues: Record = {};\n fields.forEach(field => {\n updatedValues[field.name] = editItem[field.name] ?? field.defaultValue ?? '';\n });\n form.setValues(updatedValues);\n } else if (!isEditing) {\n form.setValues(buildInitialValues());\n }\n }, [editItem, opened, isEditing]);\n\n const handleSubmit = async (values: typeof form.values) => {\n try {\n await onSubmit(values);\n \n const successNotification: NotificationConfig = {\n title: 'Success',\n message: `${title} ${isEditing ? 'updated' : 'created'} successfully`,\n color: 'green',\n };\n \n notifications.show(successNotification);\n onSuccess();\n onClose();\n form.reset();\n } catch (error: any) {\n console.error(`Error ${isEditing ? 'updating' : 'creating'} ${title.toLowerCase()}:`, error);\n \n const errorNotification: NotificationConfig = {\n title: 'Error',\n message: error.message || `Failed to ${isEditing ? 'update' : 'create'} ${title.toLowerCase()}`,\n color: 'red',\n };\n \n notifications.show(errorNotification);\n }\n };\n\n const renderField = (field: FormField) => {\n const inputProps = form.getInputProps(field.name);\n const commonProps = {\n key: field.name,\n label: field.label,\n placeholder: field.placeholder,\n description: field.description,\n required: field.required,\n disabled: field.disabled || (isEditing && field.name === 'id'),\n ...inputProps,\n };\n\n switch (field.type) {\n case 'email':\n return ;\n \n case 'number':\n return ;\n \n case 'textarea':\n return ;\n \n case 'select':\n return (\n \n );\n \n case 'multiselect':\n return (\n \n );\n \n case 'json':\n return (\n \n );\n \n default:\n return ;\n }\n };\n\n return (\n \n {/* Header */}\n \n \n {isEditing ? `Edit ${title}` : `Create New ${title}`}\n \n \n \n \n \n\n {/* Content */}\n \n \n \n \n \n \n );\n};\n\nexport default FormSidebar;","import React from 'react';\nimport { Badge, BadgeProps } from '@mantine/core';\n\nexport type StatusVariant = 'status' | 'role' | 'runtime' | 'type' | 'severity' | 'execution';\n\nexport interface StatusBadgeProps extends Omit {\n value: string;\n variant?: StatusVariant;\n customColorMap?: Record;\n}\n\n// Standardized color mappings across all Skybridge apps\nconst COLOR_MAPS: Record> = {\n // Common status colors (used in User, KMS, etc.)\n status: {\n active: 'green',\n inactive: 'gray',\n pending: 'yellow',\n suspended: 'red',\n enabled: 'green',\n disabled: 'gray',\n online: 'green',\n offline: 'gray',\n running: 'green',\n stopped: 'gray',\n paused: 'yellow',\n failed: 'red',\n success: 'green',\n completed: 'green',\n error: 'red',\n warning: 'yellow',\n info: 'blue',\n },\n \n // User roles (User Management)\n role: {\n admin: 'red',\n moderator: 'orange',\n user: 'blue',\n viewer: 'gray',\n owner: 'purple',\n editor: 'cyan',\n contributor: 'teal',\n guest: 'gray',\n },\n \n // Application types (KMS)\n type: {\n static: 'blue',\n user: 'cyan',\n service: 'green',\n application: 'purple',\n api: 'orange',\n web: 'teal',\n mobile: 'pink',\n desktop: 'indigo',\n },\n \n // Runtime environments (FaaS)\n runtime: {\n 'nodejs18': 'green',\n 'nodejs20': 'lime',\n 'python3.9': 'blue',\n 'python3.11': 'indigo',\n 'go1.20': 'cyan',\n 'go1.21': 'teal',\n 'java11': 'orange',\n 'java17': 'red',\n 'dotnet6': 'purple',\n 'dotnet7': 'violet',\n 'rust': 'dark',\n 'php8': 'grape',\n },\n \n // Audit severity levels (KMS Audit)\n severity: {\n critical: 'red',\n high: 'orange',\n medium: 'yellow',\n low: 'blue',\n info: 'gray',\n debug: 'dark',\n },\n \n // Function execution states (FaaS)\n execution: {\n queued: 'gray',\n running: 'blue',\n succeeded: 'green',\n failed: 'red',\n timeout: 'orange',\n cancelled: 'yellow',\n retrying: 'cyan',\n },\n};\n\n// Default fallback colors for unknown values\nconst DEFAULT_COLORS: Record = {\n status: 'gray',\n role: 'blue',\n runtime: 'blue',\n type: 'blue', \n severity: 'gray',\n execution: 'gray',\n};\n\nconst StatusBadge: React.FC = ({\n value,\n variant = 'status',\n customColorMap,\n size = 'sm',\n ...badgeProps\n}) => {\n if (!value) {\n return -;\n }\n\n // Determine color from appropriate mapping\n const colorMap = customColorMap || COLOR_MAPS[variant] || COLOR_MAPS.status;\n const color = colorMap[value.toLowerCase()] || DEFAULT_COLORS[variant];\n \n // Format display value (capitalize first letter, handle special cases)\n const displayValue = formatDisplayValue(value, variant);\n\n return (\n \n {displayValue}\n \n );\n};\n\n// Helper function to format display values consistently\nconst formatDisplayValue = (value: string, variant: StatusVariant): string => {\n // Special formatting for specific variants\n switch (variant) {\n case 'runtime':\n // Format runtime names nicely (e.g., \"nodejs18\" -> \"Node.js 18\")\n if (value.startsWith('nodejs')) return `Node.js ${value.replace('nodejs', '')}`;\n if (value.startsWith('python')) return `Python ${value.replace('python', '')}`;\n if (value.startsWith('go')) return `Go ${value.replace('go', '')}`;\n if (value.startsWith('java')) return `Java ${value.replace('java', '')}`;\n if (value.startsWith('dotnet')) return `.NET ${value.replace('dotnet', '')}`;\n break;\n \n case 'type':\n // Capitalize application types\n if (value === 'api') return 'API';\n if (value === 'web') return 'Web App';\n if (value === 'mobile') return 'Mobile App';\n break;\n }\n \n // Default: capitalize first letter\n return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n};\n\nexport default StatusBadge;\n\n// Export additional utilities for advanced use cases\nexport { COLOR_MAPS, DEFAULT_COLORS };\n\n// Convenience components for common use cases\nexport const UserRoleBadge: React.FC> = (props) => (\n \n);\n\nexport const ApplicationTypeBadge: React.FC> = (props) => (\n \n);\n\nexport const RuntimeBadge: React.FC> = (props) => (\n \n);\n\nexport const ExecutionStatusBadge: React.FC> = (props) => (\n \n);\n\nexport const SeverityBadge: React.FC> = (props) => (\n \n);","import React from 'react';\nimport { Stack, Text, Button, Center, Box } from '@mantine/core';\nimport {\n IconDatabase,\n IconUsers,\n IconApps,\n IconFunction,\n IconKey,\n IconSearch,\n IconFilter,\n IconPlus,\n IconRefresh,\n IconAlertCircle,\n TablerIconsProps,\n} from '@tabler/icons-react';\n\nexport type EmptyStateVariant = \n | 'no-data'\n | 'no-results' \n | 'error'\n | 'loading-failed'\n | 'access-denied'\n | 'coming-soon';\n\nexport type EmptyStateContext =\n | 'users'\n | 'applications' \n | 'functions'\n | 'tokens'\n | 'executions'\n | 'permissions'\n | 'audit'\n | 'generic';\n\nexport interface EmptyStateAction {\n label: string;\n onClick: () => void;\n variant?: 'filled' | 'light' | 'outline';\n color?: string;\n leftSection?: React.ReactNode;\n}\n\nexport interface EmptyStateProps {\n variant?: EmptyStateVariant;\n context?: EmptyStateContext;\n title?: string;\n message?: string;\n icon?: React.ComponentType;\n iconSize?: number;\n iconColor?: string;\n actions?: EmptyStateAction[];\n height?: number | string;\n}\n\n// Default icons for each context\nconst CONTEXT_ICONS: Record> = {\n users: IconUsers,\n applications: IconApps,\n functions: IconFunction,\n tokens: IconKey,\n executions: IconFunction,\n permissions: IconKey,\n audit: IconDatabase,\n generic: IconDatabase,\n};\n\n// Default messages based on variant and context\nconst getDefaultContent = (variant: EmptyStateVariant, context: EmptyStateContext) => {\n const contextNames: Record = {\n users: 'users',\n applications: 'applications',\n functions: 'functions',\n tokens: 'tokens',\n executions: 'executions',\n permissions: 'permissions',\n audit: 'audit events',\n generic: 'items',\n };\n\n const contextName = contextNames[context];\n const capitalizedContext = contextName.charAt(0).toUpperCase() + contextName.slice(1);\n\n switch (variant) {\n case 'no-data':\n return {\n title: `No ${contextName} found`,\n message: `You haven't created any ${contextName} yet. Get started by adding your first ${contextName.slice(0, -1)}.`,\n };\n \n case 'no-results':\n return {\n title: 'No matching results',\n message: `No ${contextName} match your current filters or search criteria. Try adjusting your search terms or clearing filters.`,\n };\n \n case 'error':\n return {\n title: 'Something went wrong',\n message: `We couldn't load your ${contextName}. Please try again or contact support if the problem persists.`,\n };\n \n case 'loading-failed':\n return {\n title: 'Failed to load data',\n message: `There was a problem loading ${contextName}. Check your connection and try again.`,\n };\n \n case 'access-denied':\n return {\n title: 'Access denied',\n message: `You don't have permission to view ${contextName}. Contact your administrator if you need access.`,\n };\n \n case 'coming-soon':\n return {\n title: 'Coming soon',\n message: `${capitalizedContext} functionality is being developed. Check back soon for updates.`,\n };\n \n default:\n return {\n title: `No ${contextName}`,\n message: `There are no ${contextName} to display.`,\n };\n }\n};\n\n// Default actions based on variant and context\nconst getDefaultActions = (\n variant: EmptyStateVariant,\n context: EmptyStateContext,\n onAdd?: () => void,\n onRefresh?: () => void,\n onClearFilters?: () => void\n): EmptyStateAction[] => {\n const actions: EmptyStateAction[] = [];\n\n switch (variant) {\n case 'no-data':\n if (onAdd) {\n const contextActions: Record = {\n users: {\n label: 'Add User',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n applications: {\n label: 'Create Application',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n functions: {\n label: 'Create Function',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n tokens: {\n label: 'Generate Token',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n executions: {\n label: 'Run Function',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n permissions: {\n label: 'Add Permission',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n audit: {\n label: 'Refresh',\n onClick: onAdd,\n variant: 'light',\n leftSection: ,\n },\n generic: {\n label: 'Add New',\n onClick: onAdd,\n variant: 'filled',\n leftSection: ,\n },\n };\n actions.push(contextActions[context]);\n }\n break;\n \n case 'no-results':\n if (onClearFilters) {\n actions.push({\n label: 'Clear Filters',\n onClick: onClearFilters,\n variant: 'light',\n leftSection: ,\n });\n }\n if (onRefresh) {\n actions.push({\n label: 'Refresh',\n onClick: onRefresh,\n variant: 'outline',\n leftSection: ,\n });\n }\n break;\n \n case 'error':\n case 'loading-failed':\n if (onRefresh) {\n actions.push({\n label: 'Try Again',\n onClick: onRefresh,\n variant: 'filled',\n leftSection: ,\n });\n }\n break;\n }\n\n return actions;\n};\n\n// Default icon based on variant\nconst getVariantIcon = (variant: EmptyStateVariant): React.ComponentType => {\n switch (variant) {\n case 'no-results':\n return IconSearch;\n case 'error':\n case 'loading-failed':\n case 'access-denied':\n return IconAlertCircle;\n default:\n return IconDatabase;\n }\n};\n\nconst EmptyState: React.FC void;\n onRefresh?: () => void;\n onClearFilters?: () => void;\n}> = ({\n variant = 'no-data',\n context = 'generic',\n title,\n message,\n icon,\n iconSize = 48,\n iconColor = 'dimmed',\n actions,\n height = 400,\n onAdd,\n onRefresh,\n onClearFilters,\n}) => {\n const defaultContent = getDefaultContent(variant, context);\n const finalTitle = title || defaultContent.title;\n const finalMessage = message || defaultContent.message;\n \n const IconComponent = icon || CONTEXT_ICONS[context] || getVariantIcon(variant);\n \n const finalActions = actions || getDefaultActions(\n variant, \n context, \n onAdd, \n onRefresh, \n onClearFilters\n );\n\n return (\n \n \n \n \n \n \n \n \n {finalTitle}\n \n \n {finalMessage}\n \n \n \n {finalActions.length > 0 && (\n \n {finalActions.map((action, index) => (\n \n ))}\n \n )}\n \n \n );\n};\n\nexport default EmptyState;\n\n// Convenience components for common scenarios\nexport const NoUsersState: React.FC & { onAddUser?: () => void }> = \n ({ onAddUser, ...props }) => (\n \n );\n\nexport const NoApplicationsState: React.FC & { onCreateApp?: () => void }> = \n ({ onCreateApp, ...props }) => (\n \n );\n\nexport const NoFunctionsState: React.FC & { onCreateFunction?: () => void }> = \n ({ onCreateFunction, ...props }) => (\n \n );\n\nexport const NoTokensState: React.FC & { onGenerateToken?: () => void }> = \n ({ onGenerateToken, ...props }) => (\n \n );\n\nexport const NoSearchResults: React.FC & { \n onClearFilters?: () => void; \n onRefresh?: () => void;\n}> = ({ onClearFilters, onRefresh, ...props }) => (\n \n);\n\nexport const ErrorState: React.FC & { onRetry?: () => void }> = \n ({ onRetry, ...props }) => (\n \n );","import React from 'react';\nimport {\n Paper,\n Group,\n Title,\n ActionIcon,\n ScrollArea,\n Box,\n Divider,\n} from '@mantine/core';\nimport { IconX } from '@tabler/icons-react';\n\nexport interface SidebarProps {\n opened: boolean;\n onClose: () => void;\n title: string;\n width?: number;\n position?: 'left' | 'right';\n headerActions?: React.ReactNode;\n footer?: React.ReactNode;\n children: React.ReactNode;\n \n // Styling customization\n zIndex?: number;\n offsetTop?: number;\n backgroundColor?: string;\n borderColor?: string;\n \n // Animation\n animationDuration?: string;\n \n // Accessibility\n 'aria-label'?: string;\n}\n\nconst Sidebar: React.FC = ({\n opened,\n onClose,\n title,\n width = 450,\n position = 'right',\n headerActions,\n footer,\n children,\n zIndex = 1000,\n offsetTop = 60,\n backgroundColor = 'var(--mantine-color-body)',\n borderColor = 'var(--mantine-color-gray-3)',\n animationDuration = '0.3s',\n 'aria-label': ariaLabel,\n}) => {\n // Calculate position styles based on position prop\n const getPositionStyles = () => {\n const baseStyles = {\n position: 'fixed' as const,\n top: offsetTop,\n bottom: 0,\n width: `${width}px`,\n zIndex,\n borderRadius: 0,\n display: 'flex',\n flexDirection: 'column' as const,\n backgroundColor,\n transition: `${position} ${animationDuration} ease`,\n };\n\n if (position === 'right') {\n return {\n ...baseStyles,\n right: opened ? 0 : `-${width}px`,\n borderLeft: `1px solid ${borderColor}`,\n };\n } else {\n return {\n ...baseStyles,\n left: opened ? 0 : `-${width}px`,\n borderRight: `1px solid ${borderColor}`,\n };\n }\n };\n\n return (\n \n {/* Header */}\n \n \n {title}\n \n \n {/* Header actions (optional) */}\n {headerActions && (\n \n {headerActions}\n \n )}\n \n {/* Close button */}\n \n \n \n \n\n {/* Content */}\n \n \n {children}\n \n \n\n {/* Footer (optional) */}\n {footer && (\n <>\n \n \n {footer}\n \n >\n )}\n \n );\n};\n\nexport default Sidebar;\n\n// Higher-level convenience component that combines Sidebar with common form patterns\nexport interface FormSidebarWrapperProps extends Omit {\n children: React.ReactNode;\n cancelLabel?: string;\n submitLabel?: string;\n onCancel?: () => void;\n onSubmit?: () => void;\n submitDisabled?: boolean;\n showFooterActions?: boolean;\n}\n\nexport const FormSidebarWrapper: React.FC = ({\n children,\n cancelLabel = 'Cancel',\n submitLabel = 'Save',\n onCancel,\n onSubmit,\n submitDisabled = false,\n showFooterActions = true,\n onClose,\n ...sidebarProps\n}) => {\n const handleCancel = () => {\n onCancel?.();\n onClose();\n };\n\n const footer = showFooterActions ? (\n \n \n {cancelLabel}\n \n \n {submitLabel}\n \n \n ) : undefined;\n\n return (\n \n {children}\n \n );\n};\n\n// Specialized sidebar variants for common use cases\nexport interface DetailsSidebarProps extends Omit {\n itemName: string;\n itemType?: string;\n editButton?: React.ReactNode;\n deleteButton?: React.ReactNode;\n status?: React.ReactNode;\n}\n\nexport const DetailsSidebar: React.FC = ({\n itemName,\n itemType = 'Item',\n editButton,\n deleteButton,\n status,\n children,\n ...sidebarProps\n}) => {\n const headerActions = (\n \n {status}\n {editButton}\n {deleteButton}\n \n );\n\n return (\n \n {children}\n \n );\n};\n\n// Quick sidebar for simple content display\nexport interface QuickSidebarProps extends Omit {\n content: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nexport const QuickSidebar: React.FC = ({\n content,\n actions,\n ...sidebarProps\n}) => (\n \n {content}\n \n);\n\n// Hooks for sidebar state management\nexport const useSidebar = (initialOpened = false) => {\n const [opened, setOpened] = React.useState(initialOpened);\n \n const open = React.useCallback(() => setOpened(true), []);\n const close = React.useCallback(() => setOpened(false), []);\n const toggle = React.useCallback(() => setOpened(prev => !prev), []);\n \n return {\n opened,\n open,\n close,\n toggle,\n setOpened,\n };\n};","import React from 'react';\nimport {\n Menu,\n ActionIcon,\n Button,\n Group,\n Text,\n Divider,\n} from '@mantine/core';\nimport {\n IconDots,\n IconEdit,\n IconTrash,\n IconEye,\n IconCopy,\n IconDownload,\n IconShare,\n IconArchive,\n IconRestore,\n IconSettings,\n IconPlayerPlay,\n IconPlayerPause,\n IconPlayerStop,\n IconRefresh,\n TablerIconsProps,\n} from '@tabler/icons-react';\nimport { modals } from '@mantine/modals';\nimport { notifications } from '@mantine/notifications';\n\nexport interface ActionMenuItem {\n key: string;\n label: string;\n icon?: React.ComponentType;\n color?: string;\n disabled?: boolean;\n hidden?: boolean;\n onClick: (item?: any) => void | Promise;\n \n // Confirmation dialog for destructive actions\n confirm?: {\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n };\n \n // Show/hide based on item properties\n show?: (item: any) => boolean;\n}\n\nexport interface ActionMenuProps {\n item?: any; // The data item this menu is for\n actions: ActionMenuItem[];\n \n // Menu trigger customization\n trigger?: 'dots' | 'button' | 'custom';\n triggerLabel?: string;\n triggerIcon?: React.ComponentType;\n triggerProps?: any;\n customTrigger?: React.ReactNode;\n \n // Menu positioning\n position?: 'bottom-end' | 'bottom-start' | 'top-end' | 'top-start';\n \n // Menu styling\n withArrow?: boolean;\n withinPortal?: boolean;\n \n // Accessibility\n 'aria-label'?: string;\n}\n\nconst ActionMenu: React.FC = ({\n item,\n actions,\n trigger = 'dots',\n triggerLabel = 'Actions',\n triggerIcon: TriggerIcon = IconDots,\n triggerProps = {},\n customTrigger,\n position = 'bottom-end',\n withArrow = false,\n withinPortal = true,\n 'aria-label': ariaLabel,\n}) => {\n // Filter actions based on show/hidden conditions\n const visibleActions = actions.filter(action => {\n if (action.hidden) return false;\n if (action.show && !action.show(item)) return false;\n return true;\n });\n\n // Group actions by type (with dividers)\n const groupedActions = groupActionsByType(visibleActions);\n\n // Don't render if no visible actions\n if (visibleActions.length === 0) {\n return null;\n }\n\n const handleActionClick = async (action: ActionMenuItem) => {\n try {\n // Show confirmation dialog for destructive actions\n if (action.confirm) {\n return new Promise((resolve) => {\n modals.openConfirmModal({\n title: action.confirm!.title,\n children: (\n {action.confirm!.message}\n ),\n labels: { \n confirm: action.confirm!.confirmLabel || 'Confirm', \n cancel: action.confirm!.cancelLabel || 'Cancel' \n },\n confirmProps: { color: action.color || 'red' },\n onConfirm: async () => {\n try {\n await action.onClick(item);\n resolve();\n } catch (error) {\n console.error(`Action ${action.key} failed:`, error);\n notifications.show({\n title: 'Action Failed',\n message: `Failed to ${action.label.toLowerCase()}`,\n color: 'red',\n });\n }\n },\n onCancel: () => resolve(),\n });\n });\n } else {\n await action.onClick(item);\n }\n } catch (error) {\n console.error(`Action ${action.key} failed:`, error);\n notifications.show({\n title: 'Action Failed', \n message: `Failed to ${action.label.toLowerCase()}`,\n color: 'red',\n });\n }\n };\n\n const renderTrigger = () => {\n if (customTrigger) {\n return customTrigger;\n }\n\n if (trigger === 'button') {\n return (\n }\n {...triggerProps}\n >\n {triggerLabel}\n \n );\n }\n\n // Default dots trigger\n return (\n \n \n \n );\n };\n\n const renderMenuItem = (action: ActionMenuItem) => {\n const IconComponent = action.icon;\n \n return (\n }\n color={action.color}\n disabled={action.disabled}\n onClick={() => handleActionClick(action)}\n >\n {action.label}\n \n );\n };\n\n return (\n