@burdenoff/microfe-crewfoundry 2026.827.1 → 2026.830.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/crewfoundry/CrewFoundryRoot.d.ts.map +1 -1
  2. package/dist/crewfoundry/CrewFoundryRoot.js +190 -185
  3. package/dist/crewfoundry/CrewFoundryRoot.js.map +1 -1
  4. package/dist/crewfoundry/components/forms/ConfirmDialog.d.ts.map +1 -1
  5. package/dist/crewfoundry/components/forms/ConfirmDialog.js +25 -24
  6. package/dist/crewfoundry/components/forms/ConfirmDialog.js.map +1 -1
  7. package/dist/crewfoundry/components/forms/FormModal.d.ts.map +1 -1
  8. package/dist/crewfoundry/components/forms/FormModal.js +103 -101
  9. package/dist/crewfoundry/components/forms/FormModal.js.map +1 -1
  10. package/dist/crewfoundry/pages/DashboardDashboardPagePage.d.ts.map +1 -1
  11. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +207 -210
  12. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  13. package/dist/crewfoundry/pages/HiringJobsPagePage.d.ts.map +1 -1
  14. package/dist/crewfoundry/pages/HiringJobsPagePage.js +75 -78
  15. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  16. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.d.ts.map +1 -1
  17. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +101 -104
  18. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  19. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.d.ts.map +1 -1
  20. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +95 -98
  21. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  22. package/dist/crewfoundry/pages/TeamsTeamsPagePage.d.ts.map +1 -1
  23. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +101 -104
  24. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  25. package/dist/shared/hooks/useTr.d.ts +17 -0
  26. package/dist/shared/hooks/useTr.d.ts.map +1 -0
  27. package/dist/shared/hooks/useTr.js +14 -0
  28. package/dist/shared/hooks/useTr.js.map +1 -0
  29. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CrewFoundryRoot.js","names":[],"sources":["../../src/crewfoundry/CrewFoundryRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { FileText, Folder, LayoutDashboard } from 'lucide-react';\nimport { CrewFoundryProvider } from './providers/CrewFoundryProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport type { CrewFoundryRootProps, NavItem } from './types';\nimport { CrewFoundryRoutes } from './CrewFoundryRoutes';\nimport { useCrewFoundryStore } from './store/crewfoundryStore';\nimport { joinPath } from './utils/navigation';\n\ntype NavLeaf = {\n id: string;\n label: string;\n path: string;\n};\n\ntype NavSection = {\n id: string;\n label: string;\n path: string;\n children: NavLeaf[];\n};\n\nconst buildSections = (basePath: string): NavSection[] => [\n {\n id: 'crewfoundry-dashboard',\n label: 'Dashboard',\n path: joinPath(basePath, 'dashboard/dashboard-page'),\n children: [\n {\n id: 'crewfoundry-dashboard-overview',\n label: 'Overview',\n path: joinPath(basePath, 'dashboard/dashboard-page'),\n },\n {\n id: 'crewfoundry-dashboard-analytics',\n label: 'Analytics',\n path: joinPath(basePath, 'dashboard/analytics-page'),\n },\n {\n id: 'crewfoundry-dashboard-enhanced',\n label: 'Enhanced Dashboard',\n path: joinPath(basePath, 'dashboard/enhanced-dashboard-page'),\n },\n {\n id: 'crewfoundry-dashboard-executive',\n label: 'Executive Dashboard',\n path: joinPath(basePath, 'dashboard/executive-dashboard'),\n },\n ],\n },\n {\n id: 'crewfoundry-hiring',\n label: 'Hiring',\n path: joinPath(basePath, 'hiring/jobs-page'),\n children: [\n {\n id: 'crewfoundry-hiring-jobs',\n label: 'Jobs',\n path: joinPath(basePath, 'hiring/jobs-page'),\n },\n {\n id: 'crewfoundry-hiring-applications',\n label: 'Applications',\n path: joinPath(basePath, 'hiring/applications-page'),\n },\n {\n id: 'crewfoundry-hiring-candidates',\n label: 'Candidates',\n path: joinPath(basePath, 'hiring/candidates-page'),\n },\n {\n id: 'crewfoundry-hiring-interviews',\n label: 'Interviews',\n path: joinPath(basePath, 'hiring/interviews-page'),\n },\n {\n id: 'crewfoundry-hiring-create-job',\n label: 'Create Job',\n path: joinPath(basePath, 'hiring/create-job-page'),\n },\n {\n id: 'crewfoundry-hiring-job-details',\n label: 'Job Details',\n path: joinPath(basePath, 'hiring/job-details-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-hr',\n label: 'HR',\n path: joinPath(basePath, 'hr/employees-page'),\n children: [\n {\n id: 'crewfoundry-hr-employees',\n label: 'Employees',\n path: joinPath(basePath, 'hr/employees-page'),\n },\n {\n id: 'crewfoundry-hr-departments',\n label: 'Departments',\n path: joinPath(basePath, 'hr/departments-page'),\n },\n {\n id: 'crewfoundry-hr-payroll',\n label: 'Payroll',\n path: joinPath(basePath, 'hr/payroll-page'),\n },\n {\n id: 'crewfoundry-hr-leave',\n label: 'Leave Management',\n path: joinPath(basePath, 'hr/leave-management-page'),\n },\n {\n id: 'crewfoundry-hr-time',\n label: 'Time Tracking',\n path: joinPath(basePath, 'hr/time-tracking-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-learning',\n label: 'Learning',\n path: joinPath(basePath, 'learning/courses-page'),\n children: [\n {\n id: 'crewfoundry-learning-courses',\n label: 'Courses',\n path: joinPath(basePath, 'learning/courses-page'),\n },\n {\n id: 'crewfoundry-learning-paths',\n label: 'Learning Paths',\n path: joinPath(basePath, 'learning/learning-paths-page'),\n },\n {\n id: 'crewfoundry-learning-certificates',\n label: 'Certificates',\n path: joinPath(basePath, 'learning/certificates-page'),\n },\n {\n id: 'crewfoundry-learning-assessments',\n label: 'Assessments',\n path: joinPath(basePath, 'learning/assessments-page'),\n },\n {\n id: 'crewfoundry-learning-my-learning',\n label: 'My Learning',\n path: joinPath(basePath, 'learning/my-learning-page'),\n },\n {\n id: 'crewfoundry-learning-analytics',\n label: 'Learning Analytics',\n path: joinPath(basePath, 'learning/learning-analytics-page'),\n },\n {\n id: 'crewfoundry-learning-course-details',\n label: 'Course Details',\n path: joinPath(basePath, 'learning/course-details-page'),\n },\n {\n id: 'crewfoundry-learning-course-player',\n label: 'Course Learning',\n path: joinPath(basePath, 'learning/course-learning-page'),\n },\n {\n id: 'crewfoundry-learning-path-detail',\n label: 'Path Detail',\n path: joinPath(basePath, 'learning/learning-path-detail-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-teams',\n label: 'Teams',\n path: joinPath(basePath, 'teams/teams-page'),\n children: [\n {\n id: 'crewfoundry-teams-list',\n label: 'Teams',\n path: joinPath(basePath, 'teams/teams-page'),\n },\n {\n id: 'crewfoundry-teams-directory',\n label: 'Directory',\n path: joinPath(basePath, 'teams/team-directory-page'),\n },\n {\n id: 'crewfoundry-teams-detail',\n label: 'Team Detail',\n path: joinPath(basePath, 'teams/team-detail-page'),\n },\n {\n id: 'crewfoundry-teams-analytics',\n label: 'Team Analytics',\n path: joinPath(basePath, 'teams/team-analytics-page'),\n },\n {\n id: 'crewfoundry-teams-settings',\n label: 'Team Settings',\n path: joinPath(basePath, 'teams/team-settings-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-marketplace',\n label: 'Marketplace',\n path: joinPath(basePath, 'marketplace/marketplace-page'),\n children: [\n {\n id: 'crewfoundry-marketplace-browse',\n label: 'Marketplace',\n path: joinPath(basePath, 'marketplace/marketplace-page'),\n },\n {\n id: 'crewfoundry-marketplace-services',\n label: 'Services',\n path: joinPath(basePath, 'marketplace/marketplace-services-page'),\n },\n {\n id: 'crewfoundry-marketplace-my-services',\n label: 'My Services',\n path: joinPath(basePath, 'marketplace/my-services-page'),\n },\n {\n id: 'crewfoundry-marketplace-project-details',\n label: 'Project Details',\n path: joinPath(basePath, 'marketplace/project-details-page'),\n },\n {\n id: 'crewfoundry-marketplace-service-details',\n label: 'Service Details',\n path: joinPath(basePath, 'marketplace/service-details-page'),\n },\n {\n id: 'crewfoundry-marketplace-messaging',\n label: 'Messaging',\n path: joinPath(basePath, 'marketplace/messaging-page'),\n },\n {\n id: 'crewfoundry-marketplace-earnings',\n label: 'Earnings',\n path: joinPath(basePath, 'marketplace/earnings-page'),\n },\n {\n id: 'crewfoundry-marketplace-bookings',\n label: 'Booking Management',\n path: joinPath(basePath, 'marketplace/booking-management-page'),\n },\n {\n id: 'crewfoundry-marketplace-freelancer-profile',\n label: 'Freelancer Profile',\n path: joinPath(basePath, 'marketplace/freelancer-profile-page'),\n },\n {\n id: 'crewfoundry-marketplace-freelancer-profile-enhanced',\n label: 'Freelancer Profile Enhanced',\n path: joinPath(basePath, 'marketplace/freelancer-profile-page-enhanced'),\n },\n ],\n },\n {\n id: 'crewfoundry-payments',\n label: 'Payments',\n path: joinPath(basePath, 'payments/payment-dashboard-page'),\n children: [\n {\n id: 'crewfoundry-payments-dashboard',\n label: 'Payment Dashboard',\n path: joinPath(basePath, 'payments/payment-dashboard-page'),\n },\n {\n id: 'crewfoundry-payments-invoices',\n label: 'Invoices',\n path: joinPath(basePath, 'payments/invoices-page'),\n },\n {\n id: 'crewfoundry-payments-escrow',\n label: 'Escrow',\n path: joinPath(basePath, 'payments/escrow-page'),\n },\n {\n id: 'crewfoundry-payments-methods',\n label: 'Payment Methods',\n path: joinPath(basePath, 'payments/payment-methods-page'),\n },\n {\n id: 'crewfoundry-payments-security',\n label: 'Security',\n path: joinPath(basePath, 'payments/security-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-communications',\n label: 'Communications',\n path: joinPath(basePath, 'communications/announcements-page'),\n children: [\n {\n id: 'crewfoundry-communications-announcements',\n label: 'Announcements',\n path: joinPath(basePath, 'communications/announcements-page'),\n },\n {\n id: 'crewfoundry-communications-messages',\n label: 'Messages',\n path: joinPath(basePath, 'communications/messages-page'),\n },\n {\n id: 'crewfoundry-communications-calls',\n label: 'Calls',\n path: joinPath(basePath, 'communications/calls-page'),\n },\n {\n id: 'crewfoundry-communications-video-calls',\n label: 'Video Calls',\n path: joinPath(basePath, 'communications/video-calls-page'),\n },\n {\n id: 'crewfoundry-communications-files',\n label: 'Files',\n path: joinPath(basePath, 'communications/files-page'),\n },\n {\n id: 'crewfoundry-communications-directory',\n label: 'Directory',\n path: joinPath(basePath, 'communications/directory-page'),\n },\n {\n id: 'crewfoundry-communications-teams',\n label: 'Teams',\n path: joinPath(basePath, 'communications/teams-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-projects',\n label: 'Projects',\n path: joinPath(basePath, 'projects/projects-page'),\n children: [\n {\n id: 'crewfoundry-projects-list',\n label: 'Projects',\n path: joinPath(basePath, 'projects/projects-page'),\n },\n {\n id: 'crewfoundry-projects-create',\n label: 'Create Project',\n path: joinPath(basePath, 'projects/create-project-page'),\n },\n {\n id: 'crewfoundry-projects-details',\n label: 'Project Details',\n path: joinPath(basePath, 'projects/project-details-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-company',\n label: 'Company',\n path: joinPath(basePath, 'company/company-dashboard-page'),\n children: [\n {\n id: 'crewfoundry-company-dashboard',\n label: 'Company Dashboard',\n path: joinPath(basePath, 'company/company-dashboard-page'),\n },\n {\n id: 'crewfoundry-company-clients',\n label: 'Client Management',\n path: joinPath(basePath, 'company/client-management-page'),\n },\n {\n id: 'crewfoundry-company-vendors',\n label: 'Vendor Management',\n path: joinPath(basePath, 'company/vendor-management-page'),\n },\n {\n id: 'crewfoundry-company-profile',\n label: 'Company Profile',\n path: joinPath(basePath, 'company/company-profile-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-analytics',\n label: 'Analytics',\n path: joinPath(basePath, 'analytics/analytics-page'),\n children: [\n {\n id: 'crewfoundry-analytics-overview',\n label: 'Overview',\n path: joinPath(basePath, 'analytics/analytics-page'),\n },\n {\n id: 'crewfoundry-analytics-employee',\n label: 'Employee Analytics',\n path: joinPath(basePath, 'analytics/employee-analytics-page'),\n },\n {\n id: 'crewfoundry-analytics-financial',\n label: 'Financial Analytics',\n path: joinPath(basePath, 'analytics/financial-analytics-page'),\n },\n {\n id: 'crewfoundry-analytics-hiring',\n label: 'Hiring Analytics',\n path: joinPath(basePath, 'analytics/hiring-analytics-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-help',\n label: 'Help',\n path: joinPath(basePath, 'help/api-documentation-page'),\n children: [\n {\n id: 'crewfoundry-help-api',\n label: 'API Documentation',\n path: joinPath(basePath, 'help/api-documentation-page'),\n },\n ],\n },\n];\n\nexport const CrewFoundryRoot: FC<CrewFoundryRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const initializeData = useCrewFoundryStore((state) => state.initializeData);\n\n useEffect(() => {\n void initializeData({\n workspaceId: props.workspaceId,\n authToken: props.authToken,\n apiGatewayUrl: props.apiGatewayUrl,\n actorId: props.currentUser?.id,\n });\n }, [\n initializeData,\n props.workspaceId,\n props.authToken,\n props.apiGatewayUrl,\n props.currentUser?.id,\n ]);\n\n useEffect(() => {\n if (!registerNavItems) {\n return;\n }\n\n const navItem: NavItem = {\n id: 'crewfoundry',\n label: 'CrewFoundry',\n path: basePath,\n icon: <LayoutDashboard size={20} />,\n order: 80,\n group: 'products',\n children: buildSections(basePath).map((section) => ({\n id: section.id,\n label: section.label,\n path: section.path,\n icon: <Folder size={16} />,\n children: section.children.map((child) => ({\n id: child.id,\n label: child.label,\n path: child.path,\n icon: <FileText size={16} />,\n })),\n })),\n };\n\n return registerNavItems(navItem);\n }, [registerNavItems, basePath]);\n\n useEffect(() => {\n if (!registerFooterItems) {\n return;\n }\n\n return registerFooterItems([\n {\n id: 'crewfoundry-status',\n label: 'CrewFoundry Ready',\n type: 'status',\n section: 'left',\n order: 10,\n },\n ]);\n }, [registerFooterItems]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <CrewFoundryProvider {...props}>\n <CrewFoundryRoutes />\n </CrewFoundryProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"CrewFoundryRoot.js","names":[],"sources":["../../src/crewfoundry/CrewFoundryRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { FileText, Folder, LayoutDashboard } from 'lucide-react';\nimport { CrewFoundryProvider } from './providers/CrewFoundryProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport type { CrewFoundryRootProps, NavItem } from './types';\nimport { CrewFoundryRoutes } from './CrewFoundryRoutes';\nimport { useCrewFoundryStore } from './store/crewfoundryStore';\nimport { useTr } from '../shared/hooks/useTr';\nimport { joinPath } from './utils/navigation';\n\ntype NavLeaf = {\n id: string;\n label: string;\n path: string;\n};\n\ntype NavSection = {\n id: string;\n label: string;\n path: string;\n children: NavLeaf[];\n};\n\nconst buildSections = (\n basePath: string,\n tr: (key: string, fallback: string) => string\n): NavSection[] => [\n {\n id: 'crewfoundry-dashboard',\n label: tr('crewfoundry.nav.dashboard', 'Dashboard'),\n path: joinPath(basePath, 'dashboard/dashboard-page'),\n children: [\n {\n id: 'crewfoundry-dashboard-overview',\n label: tr('crewfoundry.nav.dashboardOverview', 'Overview'),\n path: joinPath(basePath, 'dashboard/dashboard-page'),\n },\n {\n id: 'crewfoundry-dashboard-analytics',\n label: tr('crewfoundry.nav.dashboardAnalytics', 'Analytics'),\n path: joinPath(basePath, 'dashboard/analytics-page'),\n },\n {\n id: 'crewfoundry-dashboard-enhanced',\n label: tr('crewfoundry.nav.dashboardEnhanced', 'Enhanced Dashboard'),\n path: joinPath(basePath, 'dashboard/enhanced-dashboard-page'),\n },\n {\n id: 'crewfoundry-dashboard-executive',\n label: tr('crewfoundry.nav.dashboardExecutive', 'Executive Dashboard'),\n path: joinPath(basePath, 'dashboard/executive-dashboard'),\n },\n ],\n },\n {\n id: 'crewfoundry-hiring',\n label: tr('crewfoundry.nav.hiring', 'Hiring'),\n path: joinPath(basePath, 'hiring/jobs-page'),\n children: [\n {\n id: 'crewfoundry-hiring-jobs',\n label: tr('crewfoundry.nav.hiringJobs', 'Jobs'),\n path: joinPath(basePath, 'hiring/jobs-page'),\n },\n {\n id: 'crewfoundry-hiring-applications',\n label: tr('crewfoundry.nav.hiringApplications', 'Applications'),\n path: joinPath(basePath, 'hiring/applications-page'),\n },\n {\n id: 'crewfoundry-hiring-candidates',\n label: tr('crewfoundry.nav.hiringCandidates', 'Candidates'),\n path: joinPath(basePath, 'hiring/candidates-page'),\n },\n {\n id: 'crewfoundry-hiring-interviews',\n label: tr('crewfoundry.nav.hiringInterviews', 'Interviews'),\n path: joinPath(basePath, 'hiring/interviews-page'),\n },\n {\n id: 'crewfoundry-hiring-create-job',\n label: tr('crewfoundry.nav.hiringCreateJob', 'Create Job'),\n path: joinPath(basePath, 'hiring/create-job-page'),\n },\n {\n id: 'crewfoundry-hiring-job-details',\n label: tr('crewfoundry.nav.hiringJobDetails', 'Job Details'),\n path: joinPath(basePath, 'hiring/job-details-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-hr',\n label: tr('crewfoundry.nav.hr', 'HR'),\n path: joinPath(basePath, 'hr/employees-page'),\n children: [\n {\n id: 'crewfoundry-hr-employees',\n label: tr('crewfoundry.nav.hrEmployees', 'Employees'),\n path: joinPath(basePath, 'hr/employees-page'),\n },\n {\n id: 'crewfoundry-hr-departments',\n label: tr('crewfoundry.nav.hrDepartments', 'Departments'),\n path: joinPath(basePath, 'hr/departments-page'),\n },\n {\n id: 'crewfoundry-hr-payroll',\n label: tr('crewfoundry.nav.hrPayroll', 'Payroll'),\n path: joinPath(basePath, 'hr/payroll-page'),\n },\n {\n id: 'crewfoundry-hr-leave',\n label: tr('crewfoundry.nav.hrLeaveManagement', 'Leave Management'),\n path: joinPath(basePath, 'hr/leave-management-page'),\n },\n {\n id: 'crewfoundry-hr-time',\n label: tr('crewfoundry.nav.hrTimeTracking', 'Time Tracking'),\n path: joinPath(basePath, 'hr/time-tracking-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-learning',\n label: tr('crewfoundry.nav.learning', 'Learning'),\n path: joinPath(basePath, 'learning/courses-page'),\n children: [\n {\n id: 'crewfoundry-learning-courses',\n label: tr('crewfoundry.nav.learningCourses', 'Courses'),\n path: joinPath(basePath, 'learning/courses-page'),\n },\n {\n id: 'crewfoundry-learning-paths',\n label: tr('crewfoundry.nav.learningPaths', 'Learning Paths'),\n path: joinPath(basePath, 'learning/learning-paths-page'),\n },\n {\n id: 'crewfoundry-learning-certificates',\n label: tr('crewfoundry.nav.learningCertificates', 'Certificates'),\n path: joinPath(basePath, 'learning/certificates-page'),\n },\n {\n id: 'crewfoundry-learning-assessments',\n label: tr('crewfoundry.nav.learningAssessments', 'Assessments'),\n path: joinPath(basePath, 'learning/assessments-page'),\n },\n {\n id: 'crewfoundry-learning-my-learning',\n label: tr('crewfoundry.nav.learningMyLearning', 'My Learning'),\n path: joinPath(basePath, 'learning/my-learning-page'),\n },\n {\n id: 'crewfoundry-learning-analytics',\n label: tr('crewfoundry.nav.learningAnalytics', 'Learning Analytics'),\n path: joinPath(basePath, 'learning/learning-analytics-page'),\n },\n {\n id: 'crewfoundry-learning-course-details',\n label: tr('crewfoundry.nav.learningCourseDetails', 'Course Details'),\n path: joinPath(basePath, 'learning/course-details-page'),\n },\n {\n id: 'crewfoundry-learning-course-player',\n label: tr('crewfoundry.nav.learningCourseLearning', 'Course Learning'),\n path: joinPath(basePath, 'learning/course-learning-page'),\n },\n {\n id: 'crewfoundry-learning-path-detail',\n label: tr('crewfoundry.nav.learningPathDetail', 'Path Detail'),\n path: joinPath(basePath, 'learning/learning-path-detail-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-teams',\n label: tr('crewfoundry.nav.teams', 'Teams'),\n path: joinPath(basePath, 'teams/teams-page'),\n children: [\n {\n id: 'crewfoundry-teams-list',\n label: tr('crewfoundry.nav.teamsList', 'Teams'),\n path: joinPath(basePath, 'teams/teams-page'),\n },\n {\n id: 'crewfoundry-teams-directory',\n label: tr('crewfoundry.nav.teamsDirectory', 'Directory'),\n path: joinPath(basePath, 'teams/team-directory-page'),\n },\n {\n id: 'crewfoundry-teams-detail',\n label: tr('crewfoundry.nav.teamsDetail', 'Team Detail'),\n path: joinPath(basePath, 'teams/team-detail-page'),\n },\n {\n id: 'crewfoundry-teams-analytics',\n label: tr('crewfoundry.nav.teamsAnalytics', 'Team Analytics'),\n path: joinPath(basePath, 'teams/team-analytics-page'),\n },\n {\n id: 'crewfoundry-teams-settings',\n label: tr('crewfoundry.nav.teamsSettings', 'Team Settings'),\n path: joinPath(basePath, 'teams/team-settings-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-marketplace',\n label: tr('crewfoundry.nav.marketplace', 'Marketplace'),\n path: joinPath(basePath, 'marketplace/marketplace-page'),\n children: [\n {\n id: 'crewfoundry-marketplace-browse',\n label: tr('crewfoundry.nav.marketplaceBrowse', 'Marketplace'),\n path: joinPath(basePath, 'marketplace/marketplace-page'),\n },\n {\n id: 'crewfoundry-marketplace-services',\n label: tr('crewfoundry.nav.marketplaceServices', 'Services'),\n path: joinPath(basePath, 'marketplace/marketplace-services-page'),\n },\n {\n id: 'crewfoundry-marketplace-my-services',\n label: tr('crewfoundry.nav.marketplaceMyServices', 'My Services'),\n path: joinPath(basePath, 'marketplace/my-services-page'),\n },\n {\n id: 'crewfoundry-marketplace-project-details',\n label: tr('crewfoundry.nav.marketplaceProjectDetails', 'Project Details'),\n path: joinPath(basePath, 'marketplace/project-details-page'),\n },\n {\n id: 'crewfoundry-marketplace-service-details',\n label: tr('crewfoundry.nav.marketplaceServiceDetails', 'Service Details'),\n path: joinPath(basePath, 'marketplace/service-details-page'),\n },\n {\n id: 'crewfoundry-marketplace-messaging',\n label: tr('crewfoundry.nav.marketplaceMessaging', 'Messaging'),\n path: joinPath(basePath, 'marketplace/messaging-page'),\n },\n {\n id: 'crewfoundry-marketplace-earnings',\n label: tr('crewfoundry.nav.marketplaceEarnings', 'Earnings'),\n path: joinPath(basePath, 'marketplace/earnings-page'),\n },\n {\n id: 'crewfoundry-marketplace-bookings',\n label: tr('crewfoundry.nav.marketplaceBookingManagement', 'Booking Management'),\n path: joinPath(basePath, 'marketplace/booking-management-page'),\n },\n {\n id: 'crewfoundry-marketplace-freelancer-profile',\n label: tr('crewfoundry.nav.marketplaceFreelancerProfile', 'Freelancer Profile'),\n path: joinPath(basePath, 'marketplace/freelancer-profile-page'),\n },\n {\n id: 'crewfoundry-marketplace-freelancer-profile-enhanced',\n label: tr(\n 'crewfoundry.nav.marketplaceFreelancerProfileEnhanced',\n 'Freelancer Profile Enhanced'\n ),\n path: joinPath(basePath, 'marketplace/freelancer-profile-page-enhanced'),\n },\n ],\n },\n {\n id: 'crewfoundry-payments',\n label: tr('crewfoundry.nav.payments', 'Payments'),\n path: joinPath(basePath, 'payments/payment-dashboard-page'),\n children: [\n {\n id: 'crewfoundry-payments-dashboard',\n label: tr('crewfoundry.nav.paymentsDashboard', 'Payment Dashboard'),\n path: joinPath(basePath, 'payments/payment-dashboard-page'),\n },\n {\n id: 'crewfoundry-payments-invoices',\n label: tr('crewfoundry.nav.paymentsInvoices', 'Invoices'),\n path: joinPath(basePath, 'payments/invoices-page'),\n },\n {\n id: 'crewfoundry-payments-escrow',\n label: tr('crewfoundry.nav.paymentsEscrow', 'Escrow'),\n path: joinPath(basePath, 'payments/escrow-page'),\n },\n {\n id: 'crewfoundry-payments-methods',\n label: tr('crewfoundry.nav.paymentsMethods', 'Payment Methods'),\n path: joinPath(basePath, 'payments/payment-methods-page'),\n },\n {\n id: 'crewfoundry-payments-security',\n label: tr('crewfoundry.nav.paymentsSecurity', 'Security'),\n path: joinPath(basePath, 'payments/security-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-communications',\n label: tr('crewfoundry.nav.communications', 'Communications'),\n path: joinPath(basePath, 'communications/announcements-page'),\n children: [\n {\n id: 'crewfoundry-communications-announcements',\n label: tr('crewfoundry.nav.communicationsAnnouncements', 'Announcements'),\n path: joinPath(basePath, 'communications/announcements-page'),\n },\n {\n id: 'crewfoundry-communications-messages',\n label: tr('crewfoundry.nav.communicationsMessages', 'Messages'),\n path: joinPath(basePath, 'communications/messages-page'),\n },\n {\n id: 'crewfoundry-communications-calls',\n label: tr('crewfoundry.nav.communicationsCalls', 'Calls'),\n path: joinPath(basePath, 'communications/calls-page'),\n },\n {\n id: 'crewfoundry-communications-video-calls',\n label: tr('crewfoundry.nav.communicationsVideoCalls', 'Video Calls'),\n path: joinPath(basePath, 'communications/video-calls-page'),\n },\n {\n id: 'crewfoundry-communications-files',\n label: tr('crewfoundry.nav.communicationsFiles', 'Files'),\n path: joinPath(basePath, 'communications/files-page'),\n },\n {\n id: 'crewfoundry-communications-directory',\n label: tr('crewfoundry.nav.communicationsDirectory', 'Directory'),\n path: joinPath(basePath, 'communications/directory-page'),\n },\n {\n id: 'crewfoundry-communications-teams',\n label: tr('crewfoundry.nav.communicationsTeams', 'Teams'),\n path: joinPath(basePath, 'communications/teams-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-projects',\n label: tr('crewfoundry.nav.projects', 'Projects'),\n path: joinPath(basePath, 'projects/projects-page'),\n children: [\n {\n id: 'crewfoundry-projects-list',\n label: tr('crewfoundry.nav.projectsList', 'Projects'),\n path: joinPath(basePath, 'projects/projects-page'),\n },\n {\n id: 'crewfoundry-projects-create',\n label: tr('crewfoundry.nav.projectsCreate', 'Create Project'),\n path: joinPath(basePath, 'projects/create-project-page'),\n },\n {\n id: 'crewfoundry-projects-details',\n label: tr('crewfoundry.nav.projectsDetails', 'Project Details'),\n path: joinPath(basePath, 'projects/project-details-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-company',\n label: tr('crewfoundry.nav.company', 'Company'),\n path: joinPath(basePath, 'company/company-dashboard-page'),\n children: [\n {\n id: 'crewfoundry-company-dashboard',\n label: tr('crewfoundry.nav.companyDashboard', 'Company Dashboard'),\n path: joinPath(basePath, 'company/company-dashboard-page'),\n },\n {\n id: 'crewfoundry-company-clients',\n label: tr('crewfoundry.nav.companyClientManagement', 'Client Management'),\n path: joinPath(basePath, 'company/client-management-page'),\n },\n {\n id: 'crewfoundry-company-vendors',\n label: tr('crewfoundry.nav.companyVendorManagement', 'Vendor Management'),\n path: joinPath(basePath, 'company/vendor-management-page'),\n },\n {\n id: 'crewfoundry-company-profile',\n label: tr('crewfoundry.nav.companyProfile', 'Company Profile'),\n path: joinPath(basePath, 'company/company-profile-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-analytics',\n label: tr('crewfoundry.nav.analytics', 'Analytics'),\n path: joinPath(basePath, 'analytics/analytics-page'),\n children: [\n {\n id: 'crewfoundry-analytics-overview',\n label: tr('crewfoundry.nav.analyticsOverview', 'Overview'),\n path: joinPath(basePath, 'analytics/analytics-page'),\n },\n {\n id: 'crewfoundry-analytics-employee',\n label: tr('crewfoundry.nav.analyticsEmployee', 'Employee Analytics'),\n path: joinPath(basePath, 'analytics/employee-analytics-page'),\n },\n {\n id: 'crewfoundry-analytics-financial',\n label: tr('crewfoundry.nav.analyticsFinancial', 'Financial Analytics'),\n path: joinPath(basePath, 'analytics/financial-analytics-page'),\n },\n {\n id: 'crewfoundry-analytics-hiring',\n label: tr('crewfoundry.nav.analyticsHiring', 'Hiring Analytics'),\n path: joinPath(basePath, 'analytics/hiring-analytics-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-help',\n label: tr('crewfoundry.nav.help', 'Help'),\n path: joinPath(basePath, 'help/api-documentation-page'),\n children: [\n {\n id: 'crewfoundry-help-api',\n label: tr('crewfoundry.nav.helpApiDocumentation', 'API Documentation'),\n path: joinPath(basePath, 'help/api-documentation-page'),\n },\n ],\n },\n];\n\nexport const CrewFoundryRoot: FC<CrewFoundryRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const initializeData = useCrewFoundryStore((state) => state.initializeData);\n const tr = useTr();\n\n useEffect(() => {\n void initializeData({\n workspaceId: props.workspaceId,\n authToken: props.authToken,\n apiGatewayUrl: props.apiGatewayUrl,\n actorId: props.currentUser?.id,\n });\n }, [\n initializeData,\n props.workspaceId,\n props.authToken,\n props.apiGatewayUrl,\n props.currentUser?.id,\n ]);\n\n useEffect(() => {\n if (!registerNavItems) {\n return;\n }\n\n const navItem: NavItem = {\n id: 'crewfoundry',\n label: tr('crewfoundry.nav.product', 'CrewFoundry'),\n path: basePath,\n icon: <LayoutDashboard size={20} />,\n order: 80,\n group: 'products',\n children: buildSections(basePath, tr).map((section) => ({\n id: section.id,\n label: section.label,\n path: section.path,\n icon: <Folder size={16} />,\n children: section.children.map((child) => ({\n id: child.id,\n label: child.label,\n path: child.path,\n icon: <FileText size={16} />,\n })),\n })),\n };\n\n return registerNavItems(navItem);\n }, [registerNavItems, basePath, tr]);\n\n useEffect(() => {\n if (!registerFooterItems) {\n return;\n }\n\n return registerFooterItems([\n {\n id: 'crewfoundry-status',\n label: tr('crewfoundry.nav.footerStatus', 'CrewFoundry Ready'),\n type: 'status',\n section: 'left',\n order: 10,\n },\n ]);\n }, [registerFooterItems, tr]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <CrewFoundryProvider {...props}>\n <CrewFoundryRoutes />\n </CrewFoundryProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmDialog.d.ts","sourceRoot":"","sources":["../../../../src/crewfoundry/components/forms/ConfirmDialog.tsx"],"names":[],"mappings":"AAYA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,YAAwB,EACxB,WAAmB,EACnB,SAAS,GACV,EAAE,kBAAkB,+BAiDpB"}
1
+ {"version":3,"file":"ConfirmDialog.d.ts","sourceRoot":"","sources":["../../../../src/crewfoundry/components/forms/ConfirmDialog.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,YAAY,EACZ,WAAmB,EACnB,SAAS,GACV,EAAE,kBAAkB,+BAsDpB"}
@@ -1,43 +1,44 @@
1
- import { useState as e } from "react";
2
- import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
- import { Button as r, ResponsiveDialog as i, ResponsiveDialogContent as a, ResponsiveDialogDescription as o, ResponsiveDialogFooter as s, ResponsiveDialogHeader as c, ResponsiveDialogTitle as l } from "@burdenoff/fe-libs/ui";
4
- import { useGlobalUi as u } from "@burdenoff/fe-libs/shared/providers/shell";
1
+ import { useTr as e } from "../../../shared/hooks/useTr.js";
2
+ import { useState as t } from "react";
3
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
+ import { Button as i, ResponsiveDialog as a, ResponsiveDialogContent as o, ResponsiveDialogDescription as s, ResponsiveDialogFooter as c, ResponsiveDialogHeader as l, ResponsiveDialogTitle as u } from "@burdenoff/fe-libs/ui";
5
+ import { useGlobalUi as d } from "@burdenoff/fe-libs/shared/providers/shell";
5
6
  //#region src/crewfoundry/components/forms/ConfirmDialog.tsx
6
- function d({ open: d, onOpenChange: f, title: p, description: m, confirmLabel: h = "Confirm", destructive: g = !1, onConfirm: _ }) {
7
- let { showToast: v } = u(), [y, b] = e(!1);
8
- return /* @__PURE__ */ t(i, {
9
- open: d,
10
- onOpenChange: f,
11
- children: /* @__PURE__ */ n(a, {
7
+ function f({ open: f, onOpenChange: p, title: m, description: h, confirmLabel: g, destructive: _ = !1, onConfirm: v }) {
8
+ let { showToast: y } = d(), b = e(), x = g ?? b("confirmDialog.confirm", "Confirm"), [S, C] = t(!1);
9
+ return /* @__PURE__ */ n(a, {
10
+ open: f,
11
+ onOpenChange: p,
12
+ children: /* @__PURE__ */ r(o, {
12
13
  className: "sm:max-w-[420px]",
13
- children: [/* @__PURE__ */ n(c, { children: [/* @__PURE__ */ t(l, { children: p }), m ? /* @__PURE__ */ t(o, { children: m }) : null] }), /* @__PURE__ */ n(s, { children: [/* @__PURE__ */ t(r, {
14
+ children: [/* @__PURE__ */ r(l, { children: [/* @__PURE__ */ n(u, { children: m }), h ? /* @__PURE__ */ n(s, { children: h }) : null] }), /* @__PURE__ */ r(c, { children: [/* @__PURE__ */ n(i, {
14
15
  type: "button",
15
16
  variant: "outline",
16
- onClick: () => f(!1),
17
- disabled: y,
18
- children: "Cancel"
19
- }), /* @__PURE__ */ t(r, {
17
+ onClick: () => p(!1),
18
+ disabled: S,
19
+ children: b("confirmDialog.cancel", "Cancel")
20
+ }), /* @__PURE__ */ n(i, {
20
21
  type: "button",
21
- variant: g ? "destructive" : "default",
22
+ variant: _ ? "destructive" : "default",
22
23
  onClick: async () => {
23
- if (!y) {
24
- b(!0);
24
+ if (!S) {
25
+ C(!0);
25
26
  try {
26
- await _(), f(!1);
27
+ await v(), p(!1);
27
28
  } catch (e) {
28
- v(e instanceof Error ? e.message : "Something went wrong", "error");
29
+ y(e instanceof Error ? e.message : b("confirmDialog.error", "Something went wrong"), "error");
29
30
  } finally {
30
- b(!1);
31
+ C(!1);
31
32
  }
32
33
  }
33
34
  },
34
- disabled: y,
35
- children: y ? "Working…" : h
35
+ disabled: S,
36
+ children: S ? b("confirmDialog.working", "Working…") : x
36
37
  })] })]
37
38
  })
38
39
  });
39
40
  }
40
41
  //#endregion
41
- export { d as ConfirmDialog };
42
+ export { f as ConfirmDialog };
42
43
 
43
44
  //# sourceMappingURL=ConfirmDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmDialog.js","names":[],"sources":["../../../../src/crewfoundry/components/forms/ConfirmDialog.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Button,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { useGlobalUi } from '@burdenoff/fe-libs/shared/providers/shell';\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: string;\n confirmLabel?: string;\n destructive?: boolean;\n onConfirm: () => Promise<void>;\n}\n\n/**\n * Small accessible confirm dialog built on the shared ResponsiveDialog so\n * destructive actions (delete) never rely on native window.confirm.\n */\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = 'Confirm',\n destructive = false,\n onConfirm,\n}: ConfirmDialogProps) {\n const { showToast } = useGlobalUi();\n const [pending, setPending] = useState(false);\n\n const handleConfirm = async () => {\n if (pending) {\n return;\n }\n setPending(true);\n try {\n await onConfirm();\n onOpenChange(false);\n } catch (error) {\n showToast(error instanceof Error ? error.message : 'Something went wrong', 'error');\n } finally {\n setPending(false);\n }\n };\n\n return (\n <ResponsiveDialog open={open} onOpenChange={onOpenChange}>\n <ResponsiveDialogContent className=\"sm:max-w-[420px]\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>{title}</ResponsiveDialogTitle>\n {description ? (\n <ResponsiveDialogDescription>{description}</ResponsiveDialogDescription>\n ) : null}\n </ResponsiveDialogHeader>\n <ResponsiveDialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={pending}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n variant={destructive ? 'destructive' : 'default'}\n onClick={handleConfirm}\n disabled={pending}\n >\n {pending ? 'Working…' : confirmLabel}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n"],"mappings":";;;;;AA0BA,SAAgB,EAAc,EAC5B,SACA,iBACA,UACA,gBACA,kBAAe,WACf,iBAAc,IACd,gBACqB;CACrB,IAAM,EAAE,iBAAc,GAAa,EAC7B,CAAC,GAAS,KAAc,EAAS,GAAM;AAiB7C,QACE,kBAAC,GAAD;EAAwB;EAAoB;YAC1C,kBAAC,GAAD;GAAyB,WAAU;aAAnC,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAwB,GAA8B,CAAA,EACrD,IACC,kBAAC,GAAD,EAAA,UAA8B,GAA0C,CAAA,GACtE,KACmB,EAAA,CAAA,EACzB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;IACE,MAAK;IACL,SAAQ;IACR,eAAe,EAAa,GAAM;IAClC,UAAU;cACX;IAEQ,CAAA,EACT,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,IAAc,gBAAgB;IACvC,SApCY,YAAY;AAC5B,aAGJ;QAAW,GAAK;AAChB,UAAI;AAEF,OADA,MAAM,GAAW,EACjB,EAAa,GAAM;eACZ,GAAO;AACd,SAAU,aAAiB,QAAQ,EAAM,UAAU,wBAAwB,QAAQ;gBAC3E;AACR,SAAW,GAAM;;;;IA0BX,UAAU;cAET,IAAU,aAAa;IACjB,CAAA,CACc,EAAA,CAAA,CACD;;EACT,CAAA"}
1
+ {"version":3,"file":"ConfirmDialog.js","names":[],"sources":["../../../../src/crewfoundry/components/forms/ConfirmDialog.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Button,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { useGlobalUi } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useTr } from '../../../shared/hooks/useTr';\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: string;\n confirmLabel?: string;\n destructive?: boolean;\n onConfirm: () => Promise<void>;\n}\n\n/**\n * Small accessible confirm dialog built on the shared ResponsiveDialog so\n * destructive actions (delete) never rely on native window.confirm.\n */\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel,\n destructive = false,\n onConfirm,\n}: ConfirmDialogProps) {\n const { showToast } = useGlobalUi();\n const tr = useTr();\n const resolvedConfirmLabel = confirmLabel ?? tr('confirmDialog.confirm', 'Confirm');\n const [pending, setPending] = useState(false);\n\n const handleConfirm = async () => {\n if (pending) {\n return;\n }\n setPending(true);\n try {\n await onConfirm();\n onOpenChange(false);\n } catch (error) {\n showToast(\n error instanceof Error ? error.message : tr('confirmDialog.error', 'Something went wrong'),\n 'error'\n );\n } finally {\n setPending(false);\n }\n };\n\n return (\n <ResponsiveDialog open={open} onOpenChange={onOpenChange}>\n <ResponsiveDialogContent className=\"sm:max-w-[420px]\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>{title}</ResponsiveDialogTitle>\n {description ? (\n <ResponsiveDialogDescription>{description}</ResponsiveDialogDescription>\n ) : null}\n </ResponsiveDialogHeader>\n <ResponsiveDialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={pending}\n >\n {tr('confirmDialog.cancel', 'Cancel')}\n </Button>\n <Button\n type=\"button\"\n variant={destructive ? 'destructive' : 'default'}\n onClick={handleConfirm}\n disabled={pending}\n >\n {pending ? tr('confirmDialog.working', 'Working…') : resolvedConfirmLabel}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n"],"mappings":";;;;;;AA2BA,SAAgB,EAAc,EAC5B,SACA,iBACA,UACA,gBACA,iBACA,iBAAc,IACd,gBACqB;CACrB,IAAM,EAAE,iBAAc,GAAa,EAC7B,IAAK,GAAO,EACZ,IAAuB,KAAgB,EAAG,yBAAyB,UAAU,EAC7E,CAAC,GAAS,KAAc,EAAS,GAAM;AAoB7C,QACE,kBAAC,GAAD;EAAwB;EAAoB;YAC1C,kBAAC,GAAD;GAAyB,WAAU;aAAnC,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAwB,GAA8B,CAAA,EACrD,IACC,kBAAC,GAAD,EAAA,UAA8B,GAA0C,CAAA,GACtE,KACmB,EAAA,CAAA,EACzB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;IACE,MAAK;IACL,SAAQ;IACR,eAAe,EAAa,GAAM;IAClC,UAAU;cAET,EAAG,wBAAwB,SAAS;IAC9B,CAAA,EACT,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,IAAc,gBAAgB;IACvC,SAvCY,YAAY;AAC5B,aAGJ;QAAW,GAAK;AAChB,UAAI;AAEF,OADA,MAAM,GAAW,EACjB,EAAa,GAAM;eACZ,GAAO;AACd,SACE,aAAiB,QAAQ,EAAM,UAAU,EAAG,uBAAuB,uBAAuB,EAC1F,QACD;gBACO;AACR,SAAW,GAAM;;;;IA0BX,UAAU;cAET,IAAU,EAAG,yBAAyB,WAAW,GAAG;IAC9C,CAAA,CACc,EAAA,CAAA,CACD;;EACT,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"FormModal.d.ts","sourceRoot":"","sources":["../../../../src/crewfoundry/components/forms/FormModal.tsx"],"names":[],"mappings":"AAkBA,MAAM,MAAM,aAAa,GACvB,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEnF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;AAC7D,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,wFAAwF;IACxF,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAkED,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,MAAM,EACN,aAAa,EACb,WAAoB,EACpB,QAAQ,GACT,EAAE,cAAc,+BAyQhB;AAGD,MAAM,WAAW,kBAAkB,CAAC,QAAQ;IAC1C,IAAI,EAAE,OAAO,CAAC;IACd,0EAA0E;IAC1E,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,GAAG,IAAI,KAAK,kBAAkB,CAAC,QAAQ,CAAC,CAmB5E"}
1
+ {"version":3,"file":"FormModal.d.ts","sourceRoot":"","sources":["../../../../src/crewfoundry/components/forms/FormModal.tsx"],"names":[],"mappings":"AAmBA,MAAM,MAAM,aAAa,GACvB,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEnF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;AAC7D,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,wFAAwF;IACxF,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAkED,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,MAAM,EACN,aAAa,EACb,WAAW,EACX,QAAQ,GACT,EAAE,cAAc,+BAsRhB;AAGD,MAAM,WAAW,kBAAkB,CAAC,QAAQ;IAC1C,IAAI,EAAE,OAAO,CAAC;IACd,0EAA0E;IAC1E,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,GAAG,IAAI,KAAK,kBAAkB,CAAC,QAAQ,CAAC,CAmB5E"}
@@ -1,17 +1,18 @@
1
- import { useCallback as e, useEffect as t, useRef as n, useState as r } from "react";
2
- import { X as i } from "lucide-react";
3
- import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
4
- import { Button as c, Input as l, Label as u, ResponsiveDialog as d, ResponsiveDialogContent as f, ResponsiveDialogDescription as p, ResponsiveDialogFooter as m, ResponsiveDialogHeader as h, ResponsiveDialogTitle as g, Switch as _, Textarea as v } from "@burdenoff/fe-libs/ui";
5
- import { useGlobalUi as y } from "@burdenoff/fe-libs/shared/providers/shell";
1
+ import { useTr as e } from "../../../shared/hooks/useTr.js";
2
+ import { useCallback as t, useEffect as n, useRef as r, useState as i } from "react";
3
+ import { X as a } from "lucide-react";
4
+ import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
5
+ import { Button as l, Input as u, Label as d, ResponsiveDialog as f, ResponsiveDialogContent as p, ResponsiveDialogDescription as m, ResponsiveDialogFooter as h, ResponsiveDialogHeader as g, ResponsiveDialogTitle as _, Switch as v, Textarea as y } from "@burdenoff/fe-libs/ui";
6
+ import { useGlobalUi as b } from "@burdenoff/fe-libs/shared/providers/shell";
6
7
  //#region src/crewfoundry/components/forms/FormModal.tsx
7
- var b = (e, t) => {
8
+ var x = (e, t) => {
8
9
  let n = {};
9
10
  for (let r of e) {
10
11
  let e = t?.[r.name];
11
12
  r.type === "switch" ? n[r.name] = !!e : r.type === "tags" ? Array.isArray(e) ? n[r.name] = e.map((e) => String(e)) : typeof e == "string" && e.length > 0 ? n[r.name] = e.split(",").map((e) => e.trim()).filter(Boolean) : n[r.name] = [] : n[r.name] = e == null ? "" : String(e);
12
13
  }
13
14
  return n;
14
- }, x = (e, t) => e.type === "switch" ? !1 : e.type === "tags" ? !Array.isArray(t) || t.length === 0 : typeof t != "string" || t.trim() === "", S = (e, t) => {
15
+ }, S = (e, t) => e.type === "switch" ? !1 : e.type === "tags" ? !Array.isArray(t) || t.length === 0 : typeof t != "string" || t.trim() === "", C = (e, t) => {
15
16
  let n = {};
16
17
  for (let r of e) {
17
18
  let e = t[r.name];
@@ -23,23 +24,23 @@ var b = (e, t) => {
23
24
  } else n[r.name] = typeof e == "string" ? e : "";
24
25
  }
25
26
  return n;
26
- }, C = "flex h-10 w-full rounded-input border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary transition-colors duration-200 focus-visible:border-border-focus focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)] focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)] disabled:cursor-not-allowed disabled:opacity-50";
27
- function w({ open: w, onOpenChange: T, title: E, description: D, fields: O, initialValues: k, submitLabel: A = "Save", onSubmit: j }) {
28
- let { showToast: M } = y(), [N, P] = r(() => b(O, k)), [F, I] = r({}), [L, R] = r(!1), z = n(O), B = n(k), V = n(!1);
29
- t(() => {
30
- z.current = O, B.current = k;
31
- }, [O, k]), t(() => {
32
- w && !V.current && (P(b(z.current, B.current)), I({}), R(!1)), V.current = w;
33
- }, [w]);
34
- let H = e((e, t) => {
35
- P((n) => ({
27
+ }, w = "flex h-10 w-full rounded-input border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary transition-colors duration-200 focus-visible:border-border-focus focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)] focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)] disabled:cursor-not-allowed disabled:opacity-50";
28
+ function T({ open: T, onOpenChange: E, title: D, description: O, fields: k, initialValues: A, submitLabel: j, onSubmit: M }) {
29
+ let { showToast: N } = b(), P = e(), F = j ?? P("formModal.submitLabel", "Save"), [I, L] = i(() => x(k, A)), [R, z] = i({}), [B, V] = i(!1), H = r(k), U = r(A), W = r(!1);
30
+ n(() => {
31
+ H.current = k, U.current = A;
32
+ }, [k, A]), n(() => {
33
+ T && !W.current && (L(x(H.current, U.current)), z({}), V(!1)), W.current = T;
34
+ }, [T]);
35
+ let G = t((e, t) => {
36
+ L((n) => ({
36
37
  ...n,
37
38
  [e]: t
38
39
  }));
39
- }, []), U = e((e) => {
40
- I((t) => {
40
+ }, []), K = t((e) => {
41
+ z((t) => {
41
42
  let n = (t[e] ?? "").trim();
42
- return n && P((t) => {
43
+ return n && L((t) => {
43
44
  let r = Array.isArray(t[e]) ? t[e] : [];
44
45
  return r.includes(n) ? t : {
45
46
  ...t,
@@ -50,171 +51,172 @@ function w({ open: w, onOpenChange: T, title: E, description: D, fields: O, init
50
51
  [e]: ""
51
52
  };
52
53
  });
53
- }, []), W = e((e, t) => {
54
- P((n) => {
54
+ }, []), q = t((e, t) => {
55
+ L((n) => {
55
56
  let r = Array.isArray(n[e]) ? n[e] : [];
56
57
  return {
57
58
  ...n,
58
59
  [e]: r.filter((e) => e !== t)
59
60
  };
60
61
  });
61
- }, []), G = e(async (e) => {
62
- if (e.preventDefault(), L) return;
63
- let t = { ...N };
64
- for (let e of O) if (e.type === "tags") {
65
- let n = (F[e.name] ?? "").trim();
62
+ }, []), J = t(async (e) => {
63
+ if (e.preventDefault(), B) return;
64
+ let t = { ...I };
65
+ for (let e of k) if (e.type === "tags") {
66
+ let n = (R[e.name] ?? "").trim();
66
67
  if (n) {
67
68
  let r = Array.isArray(t[e.name]) ? t[e.name] : [];
68
69
  r.includes(n) || (t[e.name] = [...r, n]);
69
70
  }
70
71
  }
71
- let n = O.find((e) => e.required && x(e, t[e.name]));
72
+ let n = k.find((e) => e.required && S(e, t[e.name]));
72
73
  if (n) {
73
- M(`${n.label} is required`, "warning");
74
+ N(P("formModal.fieldRequired", "{{label}} is required", { label: n.label }), "warning");
74
75
  return;
75
76
  }
76
- R(!0);
77
+ V(!0);
77
78
  try {
78
- await j(S(O, t)), T(!1);
79
+ await M(C(k, t)), E(!1);
79
80
  } catch (e) {
80
- M(e instanceof Error ? e.message : "Something went wrong", "error");
81
+ N(e instanceof Error ? e.message : P("formModal.submitError", "Something went wrong"), "error");
81
82
  } finally {
82
- R(!1);
83
+ V(!1);
83
84
  }
84
85
  }, [
85
- O,
86
- T,
87
- j,
86
+ k,
87
+ E,
88
88
  M,
89
- L,
90
- F,
91
- N
89
+ N,
90
+ B,
91
+ R,
92
+ P,
93
+ I
92
94
  ]);
93
- return /* @__PURE__ */ o(d, {
94
- open: w,
95
- onOpenChange: T,
96
- children: /* @__PURE__ */ s(f, {
95
+ return /* @__PURE__ */ s(f, {
96
+ open: T,
97
+ onOpenChange: E,
98
+ children: /* @__PURE__ */ c(p, {
97
99
  className: "max-h-[85vh] overflow-y-auto sm:max-w-[560px]",
98
- children: [/* @__PURE__ */ s(h, { children: [/* @__PURE__ */ o(g, { children: E }), D ? /* @__PURE__ */ o(p, { children: D }) : null] }), /* @__PURE__ */ s("form", {
99
- onSubmit: G,
100
+ children: [/* @__PURE__ */ c(g, { children: [/* @__PURE__ */ s(_, { children: D }), O ? /* @__PURE__ */ s(m, { children: O }) : null] }), /* @__PURE__ */ c("form", {
101
+ onSubmit: J,
100
102
  className: "space-y-4",
101
- children: [/* @__PURE__ */ o("div", {
103
+ children: [/* @__PURE__ */ s("div", {
102
104
  className: "grid grid-cols-1 gap-4 md:grid-cols-2",
103
- children: O.map((e) => {
104
- let t = `formmodal-${e.name}`, n = e.colSpan === 2 || e.colSpan === void 0 && (e.type === "textarea" || e.type === "tags"), r = N[e.name];
105
- return /* @__PURE__ */ o("div", {
105
+ children: k.map((e) => {
106
+ let t = `formmodal-${e.name}`, n = e.colSpan === 2 || e.colSpan === void 0 && (e.type === "textarea" || e.type === "tags"), r = I[e.name];
107
+ return /* @__PURE__ */ s("div", {
106
108
  className: `flex flex-col gap-1.5 ${n ? "md:col-span-2" : ""}`,
107
- children: e.type === "switch" ? /* @__PURE__ */ s("div", {
109
+ children: e.type === "switch" ? /* @__PURE__ */ c("div", {
108
110
  className: "flex items-center justify-between gap-3 rounded-input border border-border-default bg-bg-surface px-3 py-2",
109
- children: [/* @__PURE__ */ s(u, {
111
+ children: [/* @__PURE__ */ c(d, {
110
112
  htmlFor: t,
111
- children: [e.label, e.required ? /* @__PURE__ */ o("span", {
113
+ children: [e.label, e.required ? /* @__PURE__ */ s("span", {
112
114
  className: "text-status-error-fg",
113
115
  children: " *"
114
116
  }) : null]
115
- }), /* @__PURE__ */ o(_, {
117
+ }), /* @__PURE__ */ s(v, {
116
118
  id: t,
117
119
  checked: !!r,
118
- onCheckedChange: (t) => H(e.name, t),
119
- disabled: L
120
+ onCheckedChange: (t) => G(e.name, t),
121
+ disabled: B
120
122
  })]
121
- }) : /* @__PURE__ */ s(a, { children: [/* @__PURE__ */ s(u, {
123
+ }) : /* @__PURE__ */ c(o, { children: [/* @__PURE__ */ c(d, {
122
124
  htmlFor: t,
123
- children: [e.label, e.required ? /* @__PURE__ */ o("span", {
125
+ children: [e.label, e.required ? /* @__PURE__ */ s("span", {
124
126
  className: "text-status-error-fg",
125
127
  children: " *"
126
128
  }) : null]
127
- }), e.type === "textarea" ? /* @__PURE__ */ o(v, {
129
+ }), e.type === "textarea" ? /* @__PURE__ */ s(y, {
128
130
  id: t,
129
131
  value: typeof r == "string" ? r : "",
130
132
  placeholder: e.placeholder,
131
- disabled: L,
132
- onChange: (t) => H(e.name, t.target.value)
133
- }) : e.type === "select" ? /* @__PURE__ */ s("select", {
133
+ disabled: B,
134
+ onChange: (t) => G(e.name, t.target.value)
135
+ }) : e.type === "select" ? /* @__PURE__ */ c("select", {
134
136
  id: t,
135
- className: C,
137
+ className: w,
136
138
  value: typeof r == "string" ? r : "",
137
- disabled: L,
138
- onChange: (t) => H(e.name, t.target.value),
139
- children: [/* @__PURE__ */ o("option", {
139
+ disabled: B,
140
+ onChange: (t) => G(e.name, t.target.value),
141
+ children: [/* @__PURE__ */ s("option", {
140
142
  value: "",
141
143
  disabled: !0,
142
- children: e.placeholder ?? "Select…"
143
- }), (e.options ?? []).map((e) => /* @__PURE__ */ o("option", {
144
+ children: e.placeholder ?? P("formModal.selectPlaceholder", "Select…")
145
+ }), (e.options ?? []).map((e) => /* @__PURE__ */ s("option", {
144
146
  value: e.value,
145
147
  children: e.label
146
148
  }, e.value))]
147
- }) : e.type === "tags" ? /* @__PURE__ */ s("div", {
149
+ }) : e.type === "tags" ? /* @__PURE__ */ c("div", {
148
150
  className: "flex min-h-10 flex-wrap items-center gap-1.5 rounded-input border border-border-default bg-bg-surface px-2 py-1.5",
149
- children: [(Array.isArray(r) ? r : []).map((t) => /* @__PURE__ */ s("span", {
151
+ children: [(Array.isArray(r) ? r : []).map((t) => /* @__PURE__ */ c("span", {
150
152
  className: "inline-flex items-center gap-1 rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-primary",
151
- children: [t, /* @__PURE__ */ o("button", {
153
+ children: [t, /* @__PURE__ */ s("button", {
152
154
  type: "button",
153
- "aria-label": `Remove ${t}`,
155
+ "aria-label": P("formModal.removeTag", "Remove {{tag}}", { tag: t }),
154
156
  className: "text-text-secondary hover:text-text-primary",
155
- onClick: () => W(e.name, t),
156
- disabled: L,
157
- children: /* @__PURE__ */ o(i, { className: "h-3 w-3" })
157
+ onClick: () => q(e.name, t),
158
+ disabled: B,
159
+ children: /* @__PURE__ */ s(a, { className: "h-3 w-3" })
158
160
  })]
159
- }, t)), /* @__PURE__ */ o("input", {
161
+ }, t)), /* @__PURE__ */ s("input", {
160
162
  id: t,
161
163
  className: "min-w-[6rem] flex-1 bg-transparent text-sm text-text-primary outline-none placeholder:text-text-placeholder",
162
- value: F[e.name] ?? "",
163
- placeholder: e.placeholder ?? "Add and press Enter",
164
- disabled: L,
165
- onChange: (t) => I((n) => ({
164
+ value: R[e.name] ?? "",
165
+ placeholder: e.placeholder ?? P("formModal.tagsPlaceholder", "Add and press Enter"),
166
+ disabled: B,
167
+ onChange: (t) => z((n) => ({
166
168
  ...n,
167
169
  [e.name]: t.target.value
168
170
  })),
169
171
  onKeyDown: (t) => {
170
- if (t.key === "Enter" || t.key === ",") t.preventDefault(), U(e.name);
171
- else if (t.key === "Backspace" && (F[e.name] ?? "") === "") {
172
+ if (t.key === "Enter" || t.key === ",") t.preventDefault(), K(e.name);
173
+ else if (t.key === "Backspace" && (R[e.name] ?? "") === "") {
172
174
  let t = Array.isArray(r) ? r : [];
173
- t.length > 0 && W(e.name, t[t.length - 1]);
175
+ t.length > 0 && q(e.name, t[t.length - 1]);
174
176
  }
175
177
  },
176
- onBlur: () => U(e.name)
178
+ onBlur: () => K(e.name)
177
179
  })]
178
- }) : /* @__PURE__ */ o(l, {
180
+ }) : /* @__PURE__ */ s(u, {
179
181
  id: t,
180
182
  type: e.type === "number" ? "number" : e.type === "date" ? "date" : e.type === "email" ? "email" : "text",
181
183
  value: typeof r == "string" ? r : "",
182
184
  placeholder: e.placeholder,
183
- disabled: L,
184
- onChange: (t) => H(e.name, t.target.value)
185
+ disabled: B,
186
+ onChange: (t) => G(e.name, t.target.value)
185
187
  })] })
186
188
  }, e.name);
187
189
  })
188
- }), /* @__PURE__ */ s(m, { children: [/* @__PURE__ */ o(c, {
190
+ }), /* @__PURE__ */ c(h, { children: [/* @__PURE__ */ s(l, {
189
191
  type: "button",
190
192
  variant: "outline",
191
- onClick: () => T(!1),
192
- disabled: L,
193
- children: "Cancel"
194
- }), /* @__PURE__ */ o(c, {
193
+ onClick: () => E(!1),
194
+ disabled: B,
195
+ children: P("formModal.cancel", "Cancel")
196
+ }), /* @__PURE__ */ s(l, {
195
197
  type: "submit",
196
- disabled: L,
197
- children: L ? "Saving…" : A
198
+ disabled: B,
199
+ children: B ? P("formModal.saving", "Saving…") : F
198
200
  })] })]
199
201
  })]
200
202
  })
201
203
  });
202
204
  }
203
- function T() {
204
- let [t, n] = r(!1), [i, a] = r(null);
205
+ function E() {
206
+ let [e, n] = i(!1), [r, a] = i(null);
205
207
  return {
206
- open: t,
207
- context: i,
208
- openModal: e((e) => {
208
+ open: e,
209
+ context: r,
210
+ openModal: t((e) => {
209
211
  a(e ?? null), n(!0);
210
212
  }, []),
211
- closeModal: e(() => n(!1), []),
212
- onOpenChange: e((e) => {
213
+ closeModal: t(() => n(!1), []),
214
+ onOpenChange: t((e) => {
213
215
  n(e), e || a(null);
214
216
  }, [])
215
217
  };
216
218
  }
217
219
  //#endregion
218
- export { w as FormModal, T as useFormModal };
220
+ export { T as FormModal, E as useFormModal };
219
221
 
220
222
  //# sourceMappingURL=FormModal.js.map