@easyteam/auto-scheduler-modal-ui 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/AutoSchedulerModal.tsx","../src/icons/AutoSchedulerIcons.tsx","../src/theme/mergeTheme.ts","../src/constants.ts","../src/utils/theme.ts","../src/buildSchedulePayload.ts","../src/api/solveSchedule.ts","../src/utils/violationMessages.ts","../src/utils/mapViolationsToResult.ts","../src/ViolatedConstraintsPanel.tsx","../src/AutoSchedulerModalWithProvider.tsx","../src/ViolatedConstraintsPanelWithProvider.tsx","../src/utils/ruleIdFriendlyNames.ts","../src/api/types.ts"],"sourcesContent":["export { AutoSchedulerModal } from \"./AutoSchedulerModal\";\nexport { AutoSchedulerModalWithProvider } from \"./AutoSchedulerModalWithProvider\";\nexport { ViolatedConstraintsPanel } from \"./ViolatedConstraintsPanel\";\nexport { ViolatedConstraintsPanelWithProvider } from \"./ViolatedConstraintsPanelWithProvider\";\nexport { buildSchedulePayload, buildRulesPayload } from \"./buildSchedulePayload\";\nexport type { BuildSchedulePayloadInput } from \"./buildSchedulePayload\";\nexport { getFriendlyRuleName } from \"./utils/ruleIdFriendlyNames\";\nexport * from \"./types\";\nexport * from \"./api/types\";","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Badge,\n Box,\n Button,\n ChakraProvider,\n Checkbox,\n Divider,\n HStack,\n IconButton,\n Input,\n InputGroup,\n InputRightAddon,\n Modal,\n ModalBody,\n ModalContent,\n ModalFooter,\n ModalHeader,\n ModalOverlay,\n Popover,\n PopoverBody,\n PopoverContent,\n PopoverTrigger,\n Spinner,\n Stack,\n Text,\n useTheme,\n} from \"@chakra-ui/react\";\nimport type { AutoSchedulerModalProps, SolveApiResponse } from \"./types\";\nimport {\n ChevronDownIcon,\n CheckIcon,\n CloseIcon,\n FailedIcon,\n InfoIcon,\n MagicIcon,\n WarningIcon,\n} from \"./icons/AutoSchedulerIcons\";\nimport { mergeThemeWithBase, resolveThemeParts } from \"./theme/mergeTheme\";\nimport {\n defaultStyles,\n HARD_CONSTRAINT_DEFAULTS,\n HARD_CONSTRAINT_OPTIONS,\n OPTIMIZATION_OPTION_GROUPS,\n SCHEDULE_STEPS,\n STEP_INTERVAL_MS,\n OPTIMIZING_STEP_INDEX,\n NETWORK_ERROR_FAILURE,\n} from \"./constants\";\nimport { buildStyles } from \"./utils/theme\";\nimport { buildSchedulePayload } from \"./buildSchedulePayload\";\nimport { solveSchedule } from \"./api/solveSchedule\";\nimport { mapViolationsToResult } from \"./utils/mapViolationsToResult\";\nimport type { Screen, StepStatus, ViolatedConstraintsResult } from \"./types\";\nimport { ViolatedConstraintsPanel } from \"./ViolatedConstraintsPanel\";\n\n\nexport function AutoSchedulerModal({\n baseURL,\n isOpen,\n title = \"Auto-scheduling\",\n bannerText,\n jurisdictions,\n openShifts,\n employees,\n timeOffs,\n locationPlaceholder = \"Select locations\",\n onClose,\n cancelLabel = \"Cancel\",\n primaryActionLabel = \"Create schedule\",\n onPrimaryAction: _onPrimaryAction,\n onFixManually,\n initialConfig,\n theme,\n cssVarsRoot,\n generateRecommendationsURLAndHeaders,\n onSolution,\n}: AutoSchedulerModalProps) {\n const baseTheme = useTheme();\n const { chakraOverride, styleOverrides } = useMemo(\n () => resolveThemeParts(theme),\n [theme],\n );\n const mergedTheme = useMemo(\n () => mergeThemeWithBase(baseTheme as Record<string, unknown>, chakraOverride),\n [baseTheme, chakraOverride],\n );\n const styles = useMemo(() => buildStyles(defaultStyles, styleOverrides), [styleOverrides]);\n const [selectedConstraintIds, setSelectedConstraintIds] = useState<string[]>([]);\n const [constraintValues, setConstraintValues] = useState<Record<string, string>>({});\n const [selectedOptimizationIds, setSelectedOptimizationIds] = useState<string[]>([]);\n const [optimizationValues, setOptimizationValues] = useState<Record<string, string>>({});\n const [screen, setScreen] = useState<Screen>(\"configure\");\n const [activeStepIndex, setActiveStepIndex] = useState(0);\n const [completedStepIndex, setCompletedStepIndex] = useState(-1);\n const [lastFailure, setLastFailure] = useState<ViolatedConstraintsResult | null>(null);\n const [selectedLocationIds, setSelectedLocationIds] = useState<string[]>([]);\n const timersRef = useRef<Array<ReturnType<typeof setTimeout>>>([]);\n const runIdRef = useRef(0);\n\n const selectedByJurisdiction = useMemo(\n () =>\n jurisdictions\n .map((jurisdiction) => ({\n ...jurisdiction,\n selectedLocations: jurisdiction.locations.filter((location) =>\n selectedLocationIds.includes(location.id),\n ),\n }))\n .filter((jurisdiction) => jurisdiction.selectedLocations.length > 0),\n [jurisdictions, selectedLocationIds],\n );\n\n const selectedCount = selectedByJurisdiction.reduce(\n (total, jurisdiction) => total + jurisdiction.selectedLocations.length,\n 0,\n );\n\n const selectedConstraints = useMemo(\n () => HARD_CONSTRAINT_OPTIONS.filter((option) => selectedConstraintIds.includes(option.id)),\n [selectedConstraintIds],\n );\n\n const optimizationOptions = useMemo(\n () =>\n OPTIMIZATION_OPTION_GROUPS.flatMap((group) =>\n group.options.map((option) => ({\n ...option,\n groupId: group.id,\n groupName: group.name,\n })),\n ),\n [],\n );\n\n const selectedOptimizationOptions = useMemo(\n () =>\n optimizationOptions.filter((option) =>\n selectedOptimizationIds.includes(option.id),\n ),\n [optimizationOptions, selectedOptimizationIds],\n );\n\n\n const hasEmptyInputs = useMemo(() => {\n const hasEmptyConstraint = selectedConstraints.some(\n (opt) => !constraintValues[opt.id]?.trim(),\n );\n const hasEmptyWeight =\n selectedOptimizationOptions.length >= 2 &&\n selectedOptimizationOptions.some(\n (opt) => !optimizationValues[`${opt.id}_weightPoints`]?.trim(),\n );\n return hasEmptyConstraint || hasEmptyWeight;\n }, [selectedConstraints, constraintValues, selectedOptimizationOptions, optimizationValues]);\n\n const allocationSummary = useMemo(() => {\n if (selectedOptimizationOptions.length === 0) return \"\";\n const totalWeight = selectedOptimizationOptions.reduce(\n (sum, opt) => sum + (Number(optimizationValues[`${opt.id}_weightPoints`]) || 1),\n 0,\n );\n const parts = selectedOptimizationOptions.map((opt) => {\n const weight = Number(optimizationValues[`${opt.id}_weightPoints`]) || 1;\n const pct = Math.round((weight / totalWeight) * 100);\n return `${opt.title} ${pct}%`;\n });\n return `Scheduling priorities: ${parts.join(\", \")}.`;\n }, [selectedOptimizationOptions, optimizationValues]);\n\n const clearTimers = () => {\n timersRef.current.forEach((timerId) => clearTimeout(timerId));\n timersRef.current = [];\n };\n\n const resetProgress = () => {\n setActiveStepIndex(0);\n setCompletedStepIndex(-1);\n };\n\n useEffect(() => {\n if (!isOpen) {\n clearTimers();\n setScreen(\"configure\");\n setLastFailure(null);\n setSelectedLocationIds([]);\n setSelectedOptimizationIds([]);\n setSelectedConstraintIds([]);\n setConstraintValues({});\n setOptimizationValues({});\n resetProgress();\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen && initialConfig) {\n setSelectedLocationIds(initialConfig.selectedLocationIds);\n setSelectedConstraintIds(initialConfig.selectedConstraintIds);\n setConstraintValues(initialConfig.constraintValues);\n setSelectedOptimizationIds(initialConfig.selectedOptimizationIds);\n setOptimizationValues(initialConfig.optimizationValues);\n if (initialConfig.failure) {\n setLastFailure(initialConfig.failure);\n }\n setScreen(\"configure\");\n }\n }, [isOpen, initialConfig]);\n\n useEffect(() => () => clearTimers(), []);\n\n const stepStatusForIndex = (index: number): StepStatus => {\n if (index <= completedStepIndex) {\n return \"done\";\n }\n if (index === activeStepIndex) {\n return \"active\";\n }\n return \"pending\";\n };\n\n const resetBeforeSubmit = () => {\n clearTimers();\n setScreen(\"creating\");\n setLastFailure(null);\n resetProgress();\n runIdRef.current += 1;\n return runIdRef.current;\n }\n\n const schedule = (delayMs: number, action: () => void, runId: number) => {\n const timerId = setTimeout(() => {\n if (runIdRef.current !== runId) {\n return;\n }\n action();\n }, delayMs);\n timersRef.current.push(timerId);\n };\n\n const afterSuccessSteps = (runId: number, response: SolveApiResponse) => {\n schedule(STEP_INTERVAL_MS, () => {\n if (runIdRef.current !== runId) return;\n setCompletedStepIndex(2);\n setActiveStepIndex(3);\n }, runId);\n schedule(STEP_INTERVAL_MS * 2, () => {\n if (runIdRef.current !== runId) return;\n setCompletedStepIndex(3);\n setActiveStepIndex(4);\n }, runId);\n schedule(STEP_INTERVAL_MS * 3, async () => {\n if (runIdRef.current !== runId) return;\n\n try {\n await onSolution(response.solution);\n setCompletedStepIndex(4);\n setActiveStepIndex(4);\n } catch (err) {\n console.error(err);\n const defaultErrorMessage = \"Failed to create schedule shifts\";\n const detailedErrorMessage = (err instanceof Error) ? err.message || defaultErrorMessage : defaultErrorMessage;\n setLastFailure({\n violatedConstraints: [\n {\n title: \"Something went wrong\",\n detail: detailedErrorMessage,\n },\n ],\n recommendedFixes: [],\n });\n setScreen(\"failed\");\n }\n }, runId);\n }\n\n const handleCreateSchedule = () => {\n if (selectedCount === 0) {\n return;\n }\n\n const payload = buildSchedulePayload({\n employees,\n openShifts,\n timeOffs,\n selectedLocationIds,\n jurisdictions,\n selectedConstraintIds,\n constraintValues,\n selectedOptimizationIds,\n optimizationValues,\n });\n\n const solvePromise = solveSchedule(baseURL, payload);\n const runId = resetBeforeSubmit();\n\n schedule(STEP_INTERVAL_MS, async () => {\n setCompletedStepIndex(0);\n setActiveStepIndex(1);\n\n try {\n const response = await solvePromise;\n if (runIdRef.current !== runId) {\n return;\n }\n\n if (!response.explanation.isFeasible) {\n const result = mapViolationsToResult(\n response.explanation.violations ?? [],\n response.explanation.summary\n );\n\n const selectedLocations = jurisdictions.flatMap((j) => j.locations).filter((l) =>\n selectedLocationIds.includes(l.id)\n );\n const recommendationPayload = generateRecommendationsURLAndHeaders\n ? {\n context: {\n selectedLocationIds,\n selectedConstraintIds,\n constraintValues,\n selectedOptimizationIds,\n optimizationValues,\n timezone: selectedLocations[0]?.timezone,\n },\n locations: selectedLocations,\n employees,\n openShifts: openShifts.filter((s) => !s.employeeId),\n assignedShifts: openShifts.filter((s) => Boolean(s.employeeId)),\n timeOffs: timeOffs ?? [],\n explanation: response.explanation,\n }\n : undefined;\n\n setLastFailure({\n ...result,\n recommendedFixes: [],\n recommendationPayload,\n });\n setScreen(\"failed\");\n } else {\n setCompletedStepIndex(1);\n setActiveStepIndex(OPTIMIZING_STEP_INDEX);\n afterSuccessSteps(runId, response);\n }\n } catch (err) {\n if (runIdRef.current !== runId) {\n return;\n }\n console.error(err);\n setLastFailure(NETWORK_ERROR_FAILURE);\n setScreen(\"failed\");\n }\n }, runId);\n };\n\n const handleAdjustConstraints = () => {\n clearTimers();\n setScreen(\"configure\");\n };\n\n const handleToggleLocation = (locationId: string) => {\n if (selectedLocationIds.includes(locationId)) {\n setSelectedLocationIds(selectedLocationIds.filter((id) => id !== locationId));\n return;\n }\n\n setSelectedLocationIds([...selectedLocationIds, locationId]);\n };\n\n const handleToggleConstraint = (constraintId: string) => {\n setSelectedConstraintIds((prev) => {\n if (prev.includes(constraintId)) {\n setConstraintValues((values) => {\n const next = { ...values };\n delete next[constraintId];\n return next;\n });\n return prev.filter((id) => id !== constraintId);\n }\n\n if (HARD_CONSTRAINT_DEFAULTS[constraintId]) {\n setConstraintValues((values) => ({\n ...values,\n [constraintId]: HARD_CONSTRAINT_DEFAULTS[constraintId],\n }));\n }\n return [...prev, constraintId];\n });\n };\n\n const handleToggleOptimization = (optionId: string) => {\n setSelectedOptimizationIds((prev) => {\n if (prev.includes(optionId)) {\n setOptimizationValues((values) => {\n const next = { ...values };\n delete next[`${optionId}_weightPoints`];\n if (optionId === \"fair_hour_distribution\") {\n delete next[\"fair_hour_distribution_balanceTarget\"];\n delete next[\"fair_hour_distribution_period\"];\n } else if (optionId === \"minimize_overtime\") {\n delete next[\"minimize_overtime_thresholdMinutes\"];\n delete next[\"minimize_overtime_period\"];\n }\n return next;\n });\n return prev.filter((id) => id !== optionId);\n }\n\n if (prev.length >= 3) return prev;\n\n setOptimizationValues((values) => ({\n ...values,\n [`${optionId}_weightPoints`]: \"1\",\n }));\n return [...prev, optionId];\n });\n };\n\n const modalTitle = screen === \"configure\" ? title : \"Creating schedule\";\n const showConfiguration = screen === \"configure\";\n const showFailed = screen === \"failed\";\n\n const violationTitle = useMemo(\n () => showFailed ? \"Schedule can’t be created\" : \"Validating compliance rules\",\n [showFailed]\n );\n\n const violationPanel = lastFailure ? (\n <ViolatedConstraintsPanel\n violatedConstraints={lastFailure}\n title={violationTitle}\n subtitle=\"\"\n generateRecommendationsURLAndHeaders={generateRecommendationsURLAndHeaders}\n styles={styles}\n />\n ) : null;\n\n const configurationContent = (\n <Stack spacing=\"20px\">\n <Box sx={styles.banner}>\n <Box sx={styles.bannerIcon}>\n <MagicIcon />\n </Box>\n {bannerText ? (\n <Text sx={styles.bannerText}>{bannerText}</Text>\n ) : (\n <Stack spacing=\"4px\" flex={1}>\n <Text sx={styles.bannerTitle}>\n Create a smarter retail schedule in seconds.\n </Text>\n <Text sx={styles.bannerText}>\n AI assigns open shifts using your rules, availability, and\n optimization priorities while keeping existing assigned shifts in\n place.\n </Text>\n </Stack>\n )}\n </Box>\n\n {openShifts.length === 0 ? (\n <Box\n sx={{\n bg: \"#FFF4E5\",\n borderRadius: \"8px\",\n px: \"8px\",\n py: \"8px\",\n display: \"flex\",\n gap: \"8px\",\n alignItems: \"flex-start\",\n }}\n >\n <Box sx={{ color: \"#B76E00\", flexShrink: 0, mt: \"2px\" }}>\n <WarningIcon />\n </Box>\n <Text sx={{ fontSize: \"13px\", color: \"#7A4100\", lineHeight: \"20px\" }}>\n There are no open shifts to schedule. Add open shifts before creating a schedule.\n </Text>\n </Box>\n ) : null}\n\n <Stack spacing=\"8px\" sx={styles.locationSection}>\n <Stack spacing=\"4px\">\n <HStack sx={styles.locationLabelRow}>\n <Text sx={styles.locationLabel}>Location</Text>\n {selectedCount > 0 ? (\n <Badge sx={styles.locationBadge}>{selectedCount}</Badge>\n ) : null}\n </HStack>\n <Text sx={styles.locationSubtitle}>\n Select locations within the same labor jurisdiction. Locations from different jurisdictions cannot be combined.\n </Text>\n </Stack>\n\n <Popover placement=\"bottom-start\" matchWidth isLazy>\n <PopoverTrigger>\n <Button variant=\"unstyled\" sx={styles.locationTrigger}>\n <HStack justify=\"space-between\" w=\"full\">\n <Text\n sx={{\n ...styles.locationTriggerText,\n ...(selectedLocationIds.length > 0 ? { color: \"#303030\" } : {}),\n }}\n noOfLines={1}\n >\n {selectedLocationIds.length > 0\n ? jurisdictions\n .flatMap((j) => j.locations)\n .filter((l) => selectedLocationIds.includes(l.id))\n .map((l) => l.name)\n .join(\", \")\n : locationPlaceholder}\n </Text>\n <Box color=\"#5c5c5c\">\n <ChevronDownIcon />\n </Box>\n </HStack>\n </Button>\n </PopoverTrigger>\n <PopoverContent sx={styles.popoverContent}>\n <PopoverBody p={0}>\n <Stack spacing=\"4px\">\n {jurisdictions.map((jurisdiction) => (\n <Box key={jurisdiction.id}>\n <Text sx={styles.groupHeader}>{jurisdiction.title}</Text>\n <Stack spacing=\"2px\">\n {jurisdiction.locations.map((location) => (\n <HStack\n key={location.id}\n as=\"label\"\n sx={{ ...styles.optionRow, cursor: \"pointer\" }}\n >\n <Checkbox\n id={`location-${location.id}`}\n isChecked={selectedLocationIds.includes(location.id)}\n onChange={() => handleToggleLocation(location.id)}\n />\n <Text sx={styles.optionLabel}>{location.name}</Text>\n </HStack>\n ))}\n </Stack>\n </Box>\n ))}\n </Stack>\n </PopoverBody>\n </PopoverContent>\n </Popover>\n\n <Stack spacing=\"8px\">\n {selectedByJurisdiction.map((jurisdiction) => (\n <Box key={jurisdiction.id} sx={styles.selectedBanner}>\n <Box sx={styles.selectedBannerIcon}>\n <InfoIcon />\n </Box>\n <Box sx={styles.selectedBannerText}>\n <Text fontWeight={600}>Compliance jurisdiction: {jurisdiction.title}</Text>\n <Text>\n {jurisdiction.selectedLocations.map((location) => location.name).join(\", \")}\n </Text>\n </Box>\n </Box>\n ))}\n </Stack>\n </Stack>\n\n <Stack spacing=\"16px\" sx={styles.hardConstraintsSection}>\n <Stack spacing=\"4px\">\n <HStack sx={styles.hardConstraintsLabelRow}>\n <Text sx={styles.hardConstraintsLabel}>\n Required rules\n </Text>\n {selectedConstraintIds.length > 0 ? (\n <Badge sx={styles.hardConstraintsBadge}>{selectedConstraintIds.length}</Badge>\n ) : null}\n </HStack>\n <Text sx={styles.hardConstraintsSubtitle}>\n Assigned shifts will be required to meet the following rules:\n </Text>\n </Stack>\n\n {showConfiguration && lastFailure ? violationPanel : null}\n\n <Popover placement=\"bottom-start\" matchWidth isLazy>\n <PopoverTrigger>\n <Button variant=\"unstyled\" sx={styles.hardConstraintsTrigger}>\n <HStack justify=\"space-between\" w=\"full\">\n <Text\n sx={{\n ...styles.hardConstraintsTriggerText,\n ...(selectedConstraintIds.length > 0 ? { color: \"#303030\" } : {}),\n }}\n noOfLines={1}\n >\n {selectedConstraintIds.length > 0\n ? HARD_CONSTRAINT_OPTIONS\n .filter((o) => selectedConstraintIds.includes(o.id))\n .map((o) => o.name)\n .join(\", \")\n : \"Select rules\"}\n </Text>\n <Box color=\"#5c5c5c\">\n <ChevronDownIcon />\n </Box>\n </HStack>\n </Button>\n </PopoverTrigger>\n <PopoverContent sx={styles.hardConstraintsPopoverContent}>\n <PopoverBody p={0}>\n <Stack spacing=\"4px\">\n {HARD_CONSTRAINT_OPTIONS.map((option) => (\n <HStack\n key={option.id}\n as=\"label\"\n sx={{ ...styles.hardConstraintsOptionRow, cursor: \"pointer\" }}\n >\n <Checkbox\n id={`constraint-${option.id}`}\n isChecked={selectedConstraintIds.includes(option.id)}\n onChange={() => handleToggleConstraint(option.id)}\n />\n <Text sx={styles.hardConstraintsOptionLabel}>{option.name}</Text>\n </HStack>\n ))}\n </Stack>\n </PopoverBody>\n </PopoverContent>\n </Popover>\n\n {selectedConstraints.length > 0 ? (\n <Box sx={styles.hardConstraintsInputsContainer}>\n <Stack spacing=\"16px\">\n {selectedConstraints.map((option, index) => (\n <Stack key={option.id} sx={styles.hardConstraintsInputItem}>\n <Text sx={styles.hardConstraintsInputLabel}>\n {index + 1}. {option.name}\n </Text>\n <InputGroup>\n <Input\n type=\"number\"\n value={constraintValues[option.id] ?? \"\"}\n onChange={(event) =>\n setConstraintValues((prev) => ({\n ...prev,\n [option.id]: event.target.value,\n }))\n }\n min={option.id === \"max_work_days_per_week\" ? 1 : undefined}\n max={option.id === \"max_work_days_per_week\" ? 6 : undefined}\n step={option.id === \"max_work_days_per_week\" ? undefined : \"any\"}\n sx={styles.hardConstraintsInputField}\n />\n <InputRightAddon sx={styles.optimizationSuffix}>\n {option.id === \"max_work_days_per_week\" ? \"days\" : \"hours\"}\n </InputRightAddon>\n </InputGroup>\n </Stack>\n ))}\n </Stack>\n </Box>\n ) : null}\n </Stack>\n\n <Stack spacing=\"16px\" sx={styles.optimizationSection}>\n <Stack spacing=\"4px\">\n <HStack sx={styles.optimizationLabelRow}>\n <Text sx={styles.optimizationLabel}>Optimization</Text>\n {selectedOptimizationIds.length > 0 ? (\n <Badge sx={styles.optimizationBadge}>{selectedOptimizationIds.length}</Badge>\n ) : null}\n </HStack>\n <Text sx={styles.optimizationSubtitle}>\n Your schedule will be optimized based on the following priorities:\n </Text>\n </Stack>\n\n <Popover placement=\"bottom-start\" matchWidth isLazy>\n <PopoverTrigger>\n <Button variant=\"unstyled\" sx={styles.optimizationTrigger}>\n <HStack justify=\"space-between\" w=\"full\">\n <Text\n sx={{\n ...styles.optimizationTriggerText,\n ...(selectedOptimizationIds.length > 0 ? { color: \"#303030\" } : {}),\n }}\n noOfLines={1}\n >\n {selectedOptimizationIds.length > 0\n ? optimizationOptions\n .filter((o) => selectedOptimizationIds.includes(o.id))\n .map((o) => o.title)\n .join(\", \")\n : \"Select optimization priorities\"}\n </Text>\n <Box color=\"#5c5c5c\">\n <ChevronDownIcon />\n </Box>\n </HStack>\n </Button>\n </PopoverTrigger>\n <PopoverContent sx={styles.optimizationPopoverContent}>\n <PopoverBody p={0}>\n <Stack spacing=\"4px\">\n {OPTIMIZATION_OPTION_GROUPS.map((group) => (\n <Box key={group.id}>\n <Text sx={styles.optimizationGroupHeader}>{group.name}</Text>\n <Stack spacing=\"2px\">\n {group.options.map((option) => (\n <Stack\n key={option.id}\n as=\"label\"\n spacing=\"2px\"\n sx={{ ...styles.optimizationOptionRow, cursor: \"pointer\" }}\n >\n <HStack spacing=\"8px\">\n <Checkbox\n id={`optimization-${option.id}`}\n isChecked={selectedOptimizationIds.includes(option.id)}\n isDisabled={\n !selectedOptimizationIds.includes(option.id) &&\n selectedOptimizationIds.length >= 3\n }\n onChange={() => handleToggleOptimization(option.id)}\n />\n <Text sx={styles.optimizationOptionLabel}>{option.title}</Text>\n </HStack>\n {option.subtitle ? (\n <Text sx={styles.optimizationOptionHelp}>{option.subtitle}</Text>\n ) : null}\n </Stack>\n ))}\n </Stack>\n </Box>\n ))}\n </Stack>\n </PopoverBody>\n </PopoverContent>\n </Popover>\n\n {selectedOptimizationOptions.length >= 2 ? (\n <Box sx={styles.optimizationInputsContainer}>\n <Stack spacing=\"16px\">\n {selectedOptimizationOptions.map((option, index) => (\n <Stack\n key={option.id}\n sx={styles.optimizationInputItem}\n >\n <Stack sx={styles.hardConstraintsInputItem}>\n <Text sx={styles.hardConstraintsInputLabel}>{index + 1}. {option.title}</Text>\n <InputGroup>\n <Input\n type=\"text\"\n value={optimizationValues[`${option.id}_weightPoints`] ?? \"1\"}\n onChange={(e) => {\n const val = e.target.value;\n if (val !== \"\" && (!/^\\d+$/.test(val) || Number(val) < 1)) return;\n setOptimizationValues((prev) => ({\n ...prev,\n [`${option.id}_weightPoints`]: val,\n }));\n }}\n sx={styles.hardConstraintsInputField}\n />\n <InputRightAddon sx={styles.optimizationSuffix}>\n points\n </InputRightAddon>\n </InputGroup>\n </Stack>\n </Stack>\n ))}\n </Stack>\n <Divider sx={{ ...styles.optimizationDivider, my: \"16px\" }} />\n <Text sx={styles.optimizationSummary}>{allocationSummary}</Text>\n </Box>\n ) : null}\n </Stack>\n </Stack>\n );\n\n const stepsContent = (\n <Stack spacing=\"16px\" sx={styles.stepsContainer}>\n {showFailed ? violationPanel : null}\n <Stack spacing=\"14px\" sx={styles.stepsList}>\n {SCHEDULE_STEPS.map((step, index) => {\n const status = stepStatusForIndex(index);\n const isFailedStep = showFailed && index === activeStepIndex;\n const iconStyles = {\n ...styles.stepIcon,\n ...(status === \"active\" ? styles.stepIconActive : null),\n ...(status === \"done\" ? styles.stepIconDone : null),\n ...(status === \"pending\" ? styles.stepIconPending : null),\n ...(isFailedStep ? styles.stepIconFailed : null),\n };\n const titleStyles = {\n ...styles.stepTitle,\n ...(status === \"active\" ? styles.stepTitleActive : null),\n ...(status === \"done\" ? styles.stepTitleDone : null),\n ...(status === \"pending\" ? styles.stepTitlePending : null),\n ...(isFailedStep ? styles.stepTitleFailed : null),\n };\n return (\n <HStack key={step.title} sx={styles.stepRow}>\n <Box sx={iconStyles}>\n {isFailedStep ? (\n <FailedIcon width={12} height={12} />\n ) : status === \"active\" ? (\n <Spinner size=\"sm\" thickness=\"2px\" speed=\"0.7s\" />\n ) : status === \"done\" ? (\n <CheckIcon width={12} height={12} />\n ) : null}\n </Box>\n <Box>\n <Text sx={titleStyles}>{step.title}</Text>\n {status === \"active\" && step.subtitle ? (\n <Text sx={styles.stepSubtitle}>{step.subtitle}</Text>\n ) : null}\n </Box>\n </HStack>\n );\n })}\n </Stack>\n </Stack>\n );\n\n const modalFooter = showConfiguration ? (\n <ModalFooter sx={styles.footer}>\n <Button variant=\"outline\" onClick={onClose} sx={styles.cancelButton}>\n {cancelLabel}\n </Button>\n <Button\n onClick={handleCreateSchedule}\n isDisabled={selectedCount === 0 || openShifts.length === 0 || hasEmptyInputs}\n sx={styles.primaryButton}\n >\n {primaryActionLabel}\n </Button>\n </ModalFooter>\n ) : showFailed ? (\n <ModalFooter sx={styles.failedFooter}>\n <Button\n variant=\"outline\"\n onClick={() => {\n if (lastFailure) {\n onFixManually?.(lastFailure, {\n selectedLocationIds,\n selectedConstraintIds,\n constraintValues,\n selectedOptimizationIds,\n optimizationValues,\n });\n }\n onClose();\n }}\n sx={styles.failedSecondaryButton}\n >\n Fix manually on schedule\n </Button>\n <Button onClick={handleAdjustConstraints} sx={styles.failedPrimaryButton}>\n Adjust constraints\n </Button>\n </ModalFooter>\n ) : null;\n\n const modalContent = (\n <Modal isOpen={isOpen} onClose={onClose} isCentered motionPreset=\"scale\" closeOnOverlayClick={false} closeOnEsc={false}>\n <ModalOverlay sx={styles.overlay} />\n <ModalContent sx={styles.content}>\n <ModalHeader sx={styles.header}>\n <HStack justify=\"space-between\" w=\"full\">\n <Text sx={styles.title}>{modalTitle}</Text>\n <IconButton\n aria-label=\"Close modal\"\n variant=\"ghost\"\n size=\"sm\"\n icon={<CloseIcon />}\n onClick={onClose}\n sx={styles.closeButton}\n />\n </HStack>\n </ModalHeader>\n <ModalBody sx={showConfiguration ? styles.body : { ...styles.body, ...styles.creatingBody }}>\n {showConfiguration ? configurationContent : stepsContent}\n </ModalBody>\n {modalFooter}\n </ModalContent>\n </Modal>\n );\n\n if (theme || cssVarsRoot) {\n return (\n <ChakraProvider theme={mergedTheme} cssVarsRoot={cssVarsRoot}>\n {modalContent}\n </ChakraProvider>\n );\n }\n\n return modalContent;\n}\n","import type { SVGProps } from \"react\";\n\nexport interface DotIconProps extends SVGProps<SVGSVGElement> {\n /** Size of the dot in pixels. Defaults to 6. */\n size?: number;\n}\n\nexport function DotIcon({ size = 6, fill, stroke, ...props }: DotIconProps) {\n const useStroke = stroke != null;\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 20 20\"\n fill={useStroke ? \"none\" : (fill ?? \"currentColor\")}\n stroke={stroke}\n width={size}\n height={size}\n {...props}\n >\n <circle cx=\"10\" cy=\"10\" r=\"10\" />\n </svg>\n );\n}\n\nexport function MagicIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n width=\"20\"\n height=\"20\"\n {...props}\n >\n <path d=\"M10 2.5l1.2 3.3 3.3 1.2-3.3 1.2-1.2 3.3-1.2-3.3-3.3-1.2 3.3-1.2L10 2.5z\" />\n <path d=\"M4.5 11.2l.7 1.9 1.9.7-1.9.7-.7 1.9-.7-1.9-1.9-.7 1.9-.7.7-1.9z\" />\n <path d=\"M15.5 12.5l.6 1.7 1.7.6-1.7.6-.6 1.7-.6-1.7-1.7-.6 1.7-.6.6-1.7z\" />\n </svg>\n );\n}\n\nexport function InfoIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n width=\"20\"\n height=\"20\"\n {...props}\n >\n <path d=\"M10 1.75a8.25 8.25 0 1 0 0 16.5 8.25 8.25 0 0 0 0-16.5zm0 3.75a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm-1 4.25c0-.41.34-.75.75-.75h.5c.41 0 .75.34.75.75v5.25a.75.75 0 0 1-1.5 0v-4.5h-.25a.75.75 0 0 1-.75-.75z\" />\n </svg>\n );\n}\n\nexport function WarningIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n width=\"20\"\n height=\"20\"\n {...props}\n >\n <path\n d=\"M9.25 3.6a.86.86 0 0 1 1.5 0l7.2 12.1a.86.86 0 0 1-.75 1.3H2.8a.86.86 0 0 1-.75-1.3l7.2-12.1z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 7v4.7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n />\n <circle cx=\"10\" cy=\"13.5\" r=\"0.9\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nexport function ChevronDownIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n width=\"20\"\n height=\"20\"\n {...props}\n >\n <path\n d=\"M5 7.5l5 5 5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport function CloseIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n width=\"20\"\n height=\"20\"\n {...props}\n >\n <path\n d=\"M5.5 5.5l9 9m0-9l-9 9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport function CheckIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n width=\"20\"\n height=\"20\"\n {...props}\n >\n <path\n d=\"M5.5 10.5l3 3 6-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport function FailedIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n width=\"20\"\n height=\"20\"\n {...props}\n >\n <path\n d=\"M6.5 6.5l7 7m0-7l-7 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import type { ThemeOverride } from \"@chakra-ui/react\";\nimport type {\n AutoSchedulerModalStyleOverrides,\n AutoSchedulerModalTheme,\n EasyTeamThemeOverrides,\n} from \"../types\";\n\nconst componentNameMap: Record<string, string> = {\n button: \"Button\",\n input: \"Input\",\n tooltip: \"Tooltip\",\n modal: \"Modal\",\n switch: \"Switch\",\n drawer: \"Drawer\",\n checkbox: \"Checkbox\",\n radio: \"Radio\",\n menu: \"Menu\",\n tabs: \"Tabs\",\n select: \"Select\",\n numberinput: \"NumberInput\",\n textarea: \"Textarea\",\n popover: \"Popover\",\n badge: \"Badge\",\n text: \"Text\",\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n\nconst mapComponentOverrides = (overrides: Record<string, unknown>): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n\n Object.entries(overrides).forEach(([key, value]) => {\n if (key === \"components\" && isRecord(value)) {\n Object.assign(result, value);\n return;\n }\n\n const normalizedKey = componentNameMap[key] ?? componentNameMap[key.toLowerCase()] ?? key;\n result[normalizedKey] = value;\n });\n\n return result;\n};\n\nconst deepMerge = (\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n): Record<string, unknown> => {\n const result: Record<string, unknown> = { ...target };\n\n Object.entries(source).forEach(([key, value]) => {\n if (isRecord(value) && isRecord(result[key])) {\n result[key] = deepMerge(result[key] as Record<string, unknown>, value);\n return;\n }\n\n result[key] = value;\n });\n\n return result;\n};\n\nexport type ResolvedThemeParts = {\n chakraOverride?: ThemeOverride;\n styleOverrides?: AutoSchedulerModalStyleOverrides;\n};\n\nexport const resolveThemeParts = (\n theme?: AutoSchedulerModalTheme,\n): ResolvedThemeParts => {\n if (!theme || !isRecord(theme)) {\n return {};\n }\n\n const autoSchedulerModal = isRecord(theme.autoSchedulerModal)\n ? (theme.autoSchedulerModal as AutoSchedulerModalStyleOverrides)\n : undefined;\n\n if (\"tokens\" in theme) {\n const easyTheme = theme as EasyTeamThemeOverrides & {\n autoSchedulerModal?: AutoSchedulerModalStyleOverrides;\n };\n const { tokens, autoSchedulerModal: _ignored, ...rest } = easyTheme;\n const chakraOverride: ThemeOverride = {\n ...(isRecord(tokens) ? tokens : {}),\n components: mapComponentOverrides(rest),\n };\n\n return { chakraOverride, styleOverrides: autoSchedulerModal };\n }\n\n const { autoSchedulerModal: _ignored, ...override } =\n theme as ThemeOverride & { autoSchedulerModal?: AutoSchedulerModalStyleOverrides };\n\n return { chakraOverride: override, styleOverrides: autoSchedulerModal };\n};\n\nexport const mergeThemeWithBase = (\n baseTheme: Record<string, unknown>,\n override?: ThemeOverride,\n): Record<string, unknown> => {\n if (!override) {\n return baseTheme;\n }\n\n return deepMerge(baseTheme, override as Record<string, unknown>);\n};\n","import { AutoSchedulerModalStyleOverrides, ViolatedConstraintsResult } from \"./types\";\n\nexport const HARD_CONSTRAINT_DEFAULTS: Record<string, string> = {\n max_weekly_hours: \"40\",\n max_daily_hours: \"8\",\n min_rest_between_shifts: \"24\",\n max_work_days_per_week: \"6\",\n};\n\nexport const HARD_CONSTRAINT_OPTIONS = [\n { id: \"max_weekly_hours\", name: \"Maximum weekly hours\" },\n { id: \"max_daily_hours\", name: \"Maximum daily hours\" },\n { id: \"min_rest_between_shifts\", name: \"Minimum rest between shifts\" },\n { id: \"max_work_days_per_week\", name: \"Maximum work days per week\" },\n // { id: \"minor_max_daily_hours\", name: \"Minor maximum daily hours\" },\n // { id: \"minor_late_hours_restriction\", name: \"Minor late hours restriction\" },\n // { id: \"part_time_weekly_limit\", name: \"Part-time weekly limit\" },\n // { id: \"min_staffing\", name: \"Minimum staffing\" },\n] as const;\n\nexport const OPTIMIZATION_OPTION_GROUPS = [\n {\n id: \"employee_happiness\",\n name: \"Employee happiness\",\n options: [\n {\n id: \"fair_hour_distribution\",\n title: \"Fair hour distribution\",\n subtitle: \"Distribute shifts evenly across all staff members\",\n },\n {\n id: \"staff_preferences\",\n title: \"Respect open shift preferences\",\n subtitle: \"Consider staff requests and preferred shifts when assigning\",\n },\n ],\n },\n {\n id: \"labor_cost_optimization\",\n name: \"Labor cost optimization\",\n options: [\n {\n id: \"minimize_overtime\",\n title: \"Minimize overtime\",\n subtitle: \"Reduce hours beyond standard work time\",\n },\n {\n id: \"cost_to_sales_ratio\",\n title: \"Cost-to-sales ratio\",\n subtitle:\n \"Assign shifts based on total compensation (wages + commissions) compared to sales performance\",\n },\n ],\n },\n {\n id: \"sales_optimization\",\n name: \"Sales optimization\",\n options: [\n {\n id: \"maximize_sales\",\n title: \"Maximize sales\",\n subtitle: \"Prioritize top-performing staff during peak hours\",\n },\n ],\n },\n] as const;\n\n// fair-hour-distribution\nexport const BALANCE_TARGET_OPTIONS = [\n { value: \"HOURS\", label: \"Hours\" },\n { value: \"SHIFTS\", label: \"Shifts\" },\n { value: \"WEEKEND_SHIFTS\", label: \"Weekend shifts\" },\n { value: \"OVERTIME_HOURS\", label: \"Overtime hours\" },\n] as const;\n\nexport const PERIOD_OPTIONS = [\n { value: \"DAY\", label: \"Day\" },\n { value: \"WEEK\", label: \"Week\" },\n { value: \"MONTH\", label: \"Month\" },\n] as const;\n\n// labor-cost-optimization\nexport const DIRECTION_OPTIONS = [\n { value: \"MINIMIZE\", label: \"Minimize\" },\n { value: \"MAXIMIZE\", label: \"Maximize\" },\n] as const;\n\nexport const defaultStyles: Required<AutoSchedulerModalStyleOverrides> = {\n overlay: {\n bg: \"rgba(0, 0, 0, 0.45)\",\n },\n content: {\n maxW: \"600px\",\n bg: \"white\",\n borderRadius: \"20px\",\n boxShadow:\n \"0px 20px 20px -8px rgba(26, 26, 26, 0.28), inset 0px 1px 0px rgba(204, 204, 204, 0.5), inset 0px -1px 0px rgba(0, 0, 0, 0.17), inset 1px 0px 0px rgba(0, 0, 0, 0.13), inset -1px 0px 0px rgba(0, 0, 0, 0.17)\",\n overflow: \"hidden\",\n maxH: \"calc(100vh - 32px)\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n header: {\n bg: \"#f3f3f3\",\n borderBottom: \"1px solid #e3e3e3\",\n px: \"16px\",\n py: \"12px\",\n },\n title: {\n fontSize: \"14px\",\n fontWeight: 600,\n color: \"#303030\",\n },\n closeButton: {\n color: \"#5c5c5c\",\n borderRadius: \"8px\",\n },\n body: {\n px: \"16px\",\n py: \"16px\",\n overflowY: \"auto\",\n flex: \"1 1 auto\",\n },\n banner: {\n backgroundColor: \"#F5EFFF !important\",\n borderRadius: \"8px\",\n px: \"8px\",\n py: \"8px\",\n display: \"flex\",\n gap: \"8px\",\n alignItems: \"flex-start\",\n },\n bannerIcon: {\n color: \"#5c2dbf\",\n },\n bannerTitle: {\n fontSize: \"13px\",\n fontWeight: 700,\n color: \"#370e88\",\n lineHeight: \"20px\",\n },\n bannerText: {\n fontSize: \"13px\",\n color: \"#370e88\",\n lineHeight: \"20px\",\n },\n locationSection: {},\n locationLabelRow: {\n alignItems: \"center\",\n gap: \"8px\",\n },\n locationLabel: {\n fontSize: \"14px\",\n fontWeight: 600,\n color: \"#303030\",\n },\n locationBadge: {\n bg: \"#e1e3e5\",\n color: \"#303030\",\n borderRadius: \"999px\",\n px: \"6px\",\n py: \"2px\",\n fontSize: \"11px\",\n fontWeight: 600,\n },\n locationSubtitle: {\n fontSize: \"12px\",\n color: \"#616161\",\n },\n locationTrigger: {\n w: \"100%\",\n justifyContent: \"space-between\",\n px: \"12px\",\n h: \"32px\",\n borderRadius: \"8px\",\n border: \"1px solid rgb(185, 184, 184)\",\n },\n locationTriggerText: {\n fontSize: \"13px\",\n fontWeight: 450,\n color: \"#616161\",\n },\n popoverContent: {\n w: \"100%\",\n bg: \"white\",\n borderRadius: \"12px\",\n px: \"6px\",\n py: \"6px\",\n border: \"none\",\n maxH: \"260px\",\n overflowY: \"auto\",\n boxShadow:\n \"0px 4px 6px -2px rgba(26, 26, 26, 0.2), inset 0px 1px 0px rgba(204, 204, 204, 0.5), inset 0px -1px 0px rgba(0, 0, 0, 0.17), inset 1px 0px 0px rgba(0, 0, 0, 0.13), inset -1px 0px 0px rgba(0, 0, 0, 0.13)\",\n },\n groupHeader: {\n px: \"6px\",\n pt: \"2px\",\n pb: \"4px\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"#303030\",\n },\n optionRow: {\n px: \"6px\",\n py: \"6px\",\n borderRadius: \"8px\",\n alignItems: \"center\",\n gap: \"8px\",\n },\n optionLabel: {\n fontSize: \"13px\",\n color: \"#303030\",\n },\n selectedBanner: {\n bg: \"#eaf4ff\",\n borderRadius: \"8px\",\n px: \"8px\",\n py: \"8px\",\n display: \"flex\",\n gap: \"8px\",\n alignItems: \"flex-start\",\n color: \"#00527c\",\n },\n selectedBannerIcon: {\n color: \"#00527c\",\n },\n selectedBannerText: {\n fontSize: \"13px\",\n lineHeight: \"20px\",\n color: \"#00527c\",\n },\n hardConstraintsSection: {},\n hardConstraintsLabelRow: {\n alignItems: \"center\",\n gap: \"8px\",\n },\n hardConstraintsLabel: {\n fontSize: \"14px\",\n fontWeight: 600,\n color: \"#303030\",\n },\n hardConstraintsBadge: {\n bg: \"rgba(0, 0, 0, 0.06)\",\n color: \"#616161\",\n borderRadius: \"8px\",\n px: \"8px\",\n py: \"2px\",\n fontSize: \"12px\",\n fontWeight: 500,\n },\n hardConstraintsSubtitle: {\n fontSize: \"13px\",\n color: \"#616161\",\n },\n hardConstraintsTrigger: {\n w: \"100%\",\n justifyContent: \"space-between\",\n px: \"12px\",\n h: \"32px\",\n borderRadius: \"8px\",\n border: \"1px solid rgb(185, 184, 184)\",\n },\n hardConstraintsTriggerText: {\n fontSize: \"13px\",\n fontWeight: 450,\n color: \"#616161\",\n },\n hardConstraintsPopoverContent: {\n w: \"100%\",\n bg: \"white\",\n borderRadius: \"12px\",\n px: \"6px\",\n py: \"6px\",\n border: \"none\",\n boxShadow:\n \"0px 4px 6px -2px rgba(26, 26, 26, 0.2), inset 0px 1px 0px rgba(204, 204, 204, 0.5), inset 0px -1px 0px rgba(0, 0, 0, 0.17), inset 1px 0px 0px rgba(0, 0, 0, 0.13), inset -1px 0px 0px rgba(0, 0, 0, 0.13)\",\n },\n hardConstraintsOptionRow: {\n px: \"6px\",\n py: \"6px\",\n borderRadius: \"8px\",\n alignItems: \"center\",\n gap: \"8px\",\n },\n hardConstraintsOptionLabel: {\n fontSize: \"13px\",\n color: \"#303030\",\n },\n hardConstraintsInputsContainer: {\n bg: \"#f7f7f7\",\n border: \"1px solid #ebebeb\",\n borderRadius: \"8px\",\n px: \"16px\",\n py: \"16px\",\n },\n hardConstraintsInputItem: {\n gap: \"4px\",\n maxW: \"320px\",\n },\n hardConstraintsInputLabel: {\n fontSize: \"13px\",\n color: \"#303030\",\n },\n hardConstraintsInputField: {\n bg: \"#fdfdfd\",\n border: \"1px solid #8a8a8a\",\n borderTopLeftRadius: \"8px\",\n borderBottomLeftRadius: \"8px\",\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n h: \"28px\",\n px: \"12px\",\n },\n optimizationSection: {},\n optimizationLabelRow: {\n alignItems: \"center\",\n gap: \"8px\",\n },\n optimizationLabel: {\n fontSize: \"14px\",\n fontWeight: 600,\n color: \"#303030\",\n },\n optimizationBadge: {\n bg: \"rgba(0, 0, 0, 0.06)\",\n color: \"#616161\",\n borderRadius: \"8px\",\n px: \"8px\",\n py: \"2px\",\n fontSize: \"12px\",\n fontWeight: 500,\n },\n optimizationSubtitle: {\n fontSize: \"13px\",\n color: \"#616161\",\n },\n optimizationTrigger: {\n w: \"100%\",\n justifyContent: \"space-between\",\n px: \"12px\",\n h: \"32px\",\n borderRadius: \"8px\",\n border: \"1px solid rgb(185, 184, 184)\",\n },\n optimizationTriggerText: {\n fontSize: \"13px\",\n fontWeight: 450,\n color: \"#616161\",\n },\n optimizationPopoverContent: {\n w: \"100%\",\n bg: \"white\",\n borderRadius: \"12px\",\n px: \"6px\",\n py: \"6px\",\n border: \"none\",\n boxShadow:\n \"0px 4px 6px -2px rgba(26, 26, 26, 0.2), inset 0px 1px 0px rgba(204, 204, 204, 0.5), inset 0px -1px 0px rgba(0, 0, 0, 0.17), inset 1px 0px 0px rgba(0, 0, 0, 0.13), inset -1px 0px 0px rgba(0, 0, 0, 0.13)\",\n },\n optimizationGroupHeader: {\n px: \"6px\",\n pt: \"2px\",\n pb: \"4px\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"#303030\",\n },\n optimizationOptionRow: {\n px: \"6px\",\n py: \"6px\",\n borderRadius: \"8px\",\n alignItems: \"flex-start\",\n gap: \"8px\",\n },\n optimizationOptionLabel: {\n fontSize: \"13px\",\n color: \"#303030\",\n },\n optimizationOptionHelp: {\n fontSize: \"13px\",\n color: \"#616161\",\n ml: \"1.5rem\"\n },\n optimizationInputsContainer: {\n bg: \"#f7f7f7\",\n border: \"1px solid #ebebeb\",\n borderRadius: \"8px\",\n px: \"16px\",\n py: \"16px\",\n },\n optimizationInputItem: {\n gap: \"4px\",\n maxW: \"320px\",\n },\n optimizationInputLabel: {\n fontSize: \"13px\",\n color: \"#303030\",\n },\n optimizationInputField: {\n bg: \"#fdfdfd\",\n border: \"1px solid #8a8a8a\",\n borderTopLeftRadius: \"8px\",\n borderBottomLeftRadius: \"8px\",\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n h: \"28px\",\n px: \"12px\",\n },\n optimizationSuffix: {\n fontSize: \"13px\",\n color: \"#616161\",\n h: \"28px\",\n bg: \"#fdfdfd\",\n border: \"1px solid #8a8a8a\",\n borderLeft: \"none\",\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n borderTopRightRadius: \"8px\",\n borderBottomRightRadius: \"8px\",\n },\n optimizationDivider: {\n borderColor: \"#ebebeb\",\n },\n optimizationSummary: {\n fontSize: \"13px\",\n color: \"#616161\",\n },\n creatingBody: {\n py: \"20px\",\n },\n stepsContainer: {},\n stepsList: {},\n stepRow: {\n alignItems: \"flex-start\",\n gap: \"12px\",\n },\n stepIcon: {\n width: \"20px\",\n height: \"20px\",\n borderRadius: \"999px\",\n border: \"2px solid #d1d1d1\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"#616161\",\n flexShrink: 0,\n },\n stepIconActive: {\n border: \"none\",\n color: \"#303030\",\n },\n stepIconDone: {\n border: \"none\",\n bg: \"#008060\",\n color: \"white\",\n borderRadius: \"10px\",\n },\n stepIconPending: {\n borderColor: \"#d1d1d1\",\n color: \"#d1d1d1\",\n },\n stepIconFailed: {\n border: \"none\",\n bg: \"#d72c0d\",\n color: \"white\",\n borderRadius: \"10px\",\n },\n stepTitle: {\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"#303030\",\n },\n stepTitleActive: {},\n stepTitleDone: {\n color: \"#9b9b9b\",\n fontWeight: 500,\n },\n stepTitlePending: {\n color: \"#9b9b9b\",\n fontWeight: 500,\n },\n stepTitleFailed: {\n color: \"#d72c0d\",\n fontWeight: 600,\n },\n stepSubtitle: {\n fontSize: \"12px\",\n color: \"#616161\",\n },\n violationPanel: {\n border: \"1px solid #e7e7e7\",\n borderRadius: \"12px\",\n px: \"12px\",\n py: \"12px\",\n bg: \"white\",\n },\n violationHeaderRow: {\n alignItems: \"center\",\n justifyContent: \"space-between\",\n },\n violationHeader: {\n alignItems: \"center\",\n gap: \"8px\",\n },\n violationIcon: {\n color: \"#8E1F0B\",\n },\n violationTitle: {\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"#8E1F0B\",\n },\n violationSubtitle: {\n fontSize: \"12px\",\n color: \"#616161\",\n },\n violationToggleButton: {\n borderRadius: \"8px\",\n color: \"#5c5c5c\",\n },\n violationToggleIcon: {\n color: \"#5c5c5c\",\n },\n violationContent: {\n pt: \"8px\",\n },\n violationItem: {\n bg: \"#fceaea\",\n borderRadius: \"8px\",\n px: \"10px\",\n py: \"8px\",\n },\n violationItemTitle: {\n fontSize: \"12px\",\n fontWeight: 600,\n color: \"#8E1F0B\",\n },\n violationItemDetailRow: {\n alignItems: \"center\",\n },\n violationItemDetail: {\n fontSize: \"12px\",\n color: \"#b42318\",\n },\n violationBullet: {\n color: \"#b42318\",\n flexShrink: 0,\n },\n recommendationsBox: {\n bg: \"#eaf2ff\",\n borderRadius: \"8px\",\n px: \"10px\",\n py: \"8px\",\n },\n recommendationsTitle: {\n fontSize: \"12px\",\n fontWeight: 600,\n color: \"#1f4eb0\",\n mb: \"4px\",\n },\n recommendationsList: {},\n recommendationsItem: {\n fontSize: \"12px\",\n color: \"#1f4eb0\",\n },\n recommendationsBullet: {\n color: \"#1f4eb0\",\n flexShrink: 0,\n },\n recommendationsToggle: {\n alignSelf: \"flex-start\",\n borderRadius: \"8px\",\n fontSize: \"12px\",\n height: \"28px\",\n px: \"12px\",\n },\n failedFooter: {\n borderTop: \"1px solid #e3e3e3\",\n px: \"16px\",\n py: \"16px\",\n justifyContent: \"flex-end\",\n gap: \"8px\",\n },\n failedPrimaryButton: {\n fontSize: \"12px\",\n fontWeight: 600,\n borderRadius: \"8px\",\n bg: \"#303030\",\n color: \"white\",\n height: \"30px\",\n },\n failedSecondaryButton: {\n fontSize: \"12px\",\n fontWeight: 500,\n borderRadius: \"8px\",\n borderColor: \"#e3e3e3\",\n color: \"#303030\",\n height: \"30px\",\n },\n footer: {\n borderTop: \"1px solid #e3e3e3\",\n px: \"16px\",\n py: \"16px\",\n justifyContent: \"flex-end\",\n gap: \"8px\",\n },\n cancelButton: {\n fontSize: \"12px\",\n fontWeight: 500,\n borderRadius: \"8px\",\n borderColor: \"#e3e3e3\",\n color: \"#303030\",\n height: \"30px\",\n },\n primaryButton: {\n fontSize: \"12px\",\n fontWeight: 600,\n borderRadius: \"8px\",\n bg: \"#303030\",\n color: \"white\",\n height: \"30px\",\n },\n violatedConstraintsSecondaryButton: {\n fontWeight: 600,\n },\n};\n\nexport const SCHEDULE_STEPS: Array<{ title: string; subtitle?: string }> = [\n {\n title: \"Analyzing requirements\",\n subtitle: \"Reviewing your required rules and optimization priorities.\",\n },\n { title: \"Validating required rules\",\n subtitle: \"Ensuring all assigned shifts meet your required rules.\"\n },\n { title: \"Optimizing assigned shifts\",\n subtitle: \"Applying optimization priorities to improve coverage and performance.\",\n },\n { title: \"Checking schedule feasibility\", subtitle: \"Confirming the schedule is feasible and respects all required rules.\" },\n { title: \"Finalizing schedule\" },\n];\n\nexport const STEP_INTERVAL_MS = 1200;\nexport const OPTIMIZING_STEP_INDEX = 2;\nexport const API_BASE_URL = \"http://localhost:8080\";\n\nexport const OPTIONS_WITHOUT_INPUTS = [\"staff_preferences\", \"cost_to_sales_ratio\", \"maximize_sales\"];\n\nexport const NETWORK_ERROR_FAILURE: ViolatedConstraintsResult = {\n violatedConstraints: [\n { title: \"Something went wrong\", detail: \"Please try again or check your connection.\" },\n ],\n recommendedFixes: [],\n};\n","import type { AutoSchedulerModalStyleOverrides } from \"../types\";\n\nexport const buildStyles = (defaultStyles: Required<AutoSchedulerModalStyleOverrides>, overrides?: AutoSchedulerModalStyleOverrides): Required<AutoSchedulerModalStyleOverrides> => ({\n overlay: { ...defaultStyles.overlay, ...overrides?.overlay },\n content: { ...defaultStyles.content, ...overrides?.content },\n header: { ...defaultStyles.header, ...overrides?.header },\n title: { ...defaultStyles.title, ...overrides?.title },\n closeButton: { ...defaultStyles.closeButton, ...overrides?.closeButton },\n body: { ...defaultStyles.body, ...overrides?.body },\n banner: { ...defaultStyles.banner, ...overrides?.banner },\n bannerIcon: { ...defaultStyles.bannerIcon, ...overrides?.bannerIcon },\n bannerTitle: { ...defaultStyles.bannerTitle, ...overrides?.bannerTitle },\n bannerText: { ...defaultStyles.bannerText, ...overrides?.bannerText },\n locationSection: { ...defaultStyles.locationSection, ...overrides?.locationSection },\n locationLabelRow: { ...defaultStyles.locationLabelRow, ...overrides?.locationLabelRow },\n locationLabel: { ...defaultStyles.locationLabel, ...overrides?.locationLabel },\n locationBadge: { ...defaultStyles.locationBadge, ...overrides?.locationBadge },\n locationSubtitle: { ...defaultStyles.locationSubtitle, ...overrides?.locationSubtitle },\n locationTrigger: { ...defaultStyles.locationTrigger, ...overrides?.locationTrigger },\n locationTriggerText: {\n ...defaultStyles.locationTriggerText,\n ...overrides?.locationTriggerText,\n },\n popoverContent: { ...defaultStyles.popoverContent, ...overrides?.popoverContent },\n groupHeader: { ...defaultStyles.groupHeader, ...overrides?.groupHeader },\n optionRow: { ...defaultStyles.optionRow, ...overrides?.optionRow },\n optionLabel: { ...defaultStyles.optionLabel, ...overrides?.optionLabel },\n selectedBanner: { ...defaultStyles.selectedBanner, ...overrides?.selectedBanner },\n selectedBannerIcon: { ...defaultStyles.selectedBannerIcon, ...overrides?.selectedBannerIcon },\n selectedBannerText: {\n ...defaultStyles.selectedBannerText,\n ...overrides?.selectedBannerText,\n },\n hardConstraintsSection: {\n ...defaultStyles.hardConstraintsSection,\n ...overrides?.hardConstraintsSection,\n },\n hardConstraintsLabelRow: {\n ...defaultStyles.hardConstraintsLabelRow,\n ...overrides?.hardConstraintsLabelRow,\n },\n hardConstraintsLabel: {\n ...defaultStyles.hardConstraintsLabel,\n ...overrides?.hardConstraintsLabel,\n },\n hardConstraintsBadge: {\n ...defaultStyles.hardConstraintsBadge,\n ...overrides?.hardConstraintsBadge,\n },\n hardConstraintsSubtitle: {\n ...defaultStyles.hardConstraintsSubtitle,\n ...overrides?.hardConstraintsSubtitle,\n },\n hardConstraintsTrigger: {\n ...defaultStyles.hardConstraintsTrigger,\n ...overrides?.hardConstraintsTrigger,\n },\n hardConstraintsTriggerText: {\n ...defaultStyles.hardConstraintsTriggerText,\n ...overrides?.hardConstraintsTriggerText,\n },\n hardConstraintsPopoverContent: {\n ...defaultStyles.hardConstraintsPopoverContent,\n ...overrides?.hardConstraintsPopoverContent,\n },\n hardConstraintsOptionRow: {\n ...defaultStyles.hardConstraintsOptionRow,\n ...overrides?.hardConstraintsOptionRow,\n },\n hardConstraintsOptionLabel: {\n ...defaultStyles.hardConstraintsOptionLabel,\n ...overrides?.hardConstraintsOptionLabel,\n },\n hardConstraintsInputsContainer: {\n ...defaultStyles.hardConstraintsInputsContainer,\n ...overrides?.hardConstraintsInputsContainer,\n },\n hardConstraintsInputItem: {\n ...defaultStyles.hardConstraintsInputItem,\n ...overrides?.hardConstraintsInputItem,\n },\n hardConstraintsInputLabel: {\n ...defaultStyles.hardConstraintsInputLabel,\n ...overrides?.hardConstraintsInputLabel,\n },\n hardConstraintsInputField: {\n ...defaultStyles.hardConstraintsInputField,\n ...overrides?.hardConstraintsInputField,\n },\n optimizationSection: {\n ...defaultStyles.optimizationSection,\n ...overrides?.optimizationSection,\n },\n optimizationLabelRow: {\n ...defaultStyles.optimizationLabelRow,\n ...overrides?.optimizationLabelRow,\n },\n optimizationLabel: {\n ...defaultStyles.optimizationLabel,\n ...overrides?.optimizationLabel,\n },\n optimizationBadge: {\n ...defaultStyles.optimizationBadge,\n ...overrides?.optimizationBadge,\n },\n optimizationSubtitle: {\n ...defaultStyles.optimizationSubtitle,\n ...overrides?.optimizationSubtitle,\n },\n optimizationTrigger: {\n ...defaultStyles.optimizationTrigger,\n ...overrides?.optimizationTrigger,\n },\n optimizationTriggerText: {\n ...defaultStyles.optimizationTriggerText,\n ...overrides?.optimizationTriggerText,\n },\n optimizationPopoverContent: {\n ...defaultStyles.optimizationPopoverContent,\n ...overrides?.optimizationPopoverContent,\n },\n optimizationGroupHeader: {\n ...defaultStyles.optimizationGroupHeader,\n ...overrides?.optimizationGroupHeader,\n },\n optimizationOptionRow: {\n ...defaultStyles.optimizationOptionRow,\n ...overrides?.optimizationOptionRow,\n },\n optimizationOptionLabel: {\n ...defaultStyles.optimizationOptionLabel,\n ...overrides?.optimizationOptionLabel,\n },\n optimizationOptionHelp: {\n ...defaultStyles.optimizationOptionHelp,\n ...overrides?.optimizationOptionHelp,\n },\n optimizationInputsContainer: {\n ...defaultStyles.optimizationInputsContainer,\n ...overrides?.optimizationInputsContainer,\n },\n optimizationInputItem: {\n ...defaultStyles.optimizationInputItem,\n ...overrides?.optimizationInputItem,\n },\n optimizationInputLabel: {\n ...defaultStyles.optimizationInputLabel,\n ...overrides?.optimizationInputLabel,\n },\n optimizationInputField: {\n ...defaultStyles.optimizationInputField,\n ...overrides?.optimizationInputField,\n },\n optimizationSuffix: {\n ...defaultStyles.optimizationSuffix,\n ...overrides?.optimizationSuffix,\n },\n optimizationDivider: {\n ...defaultStyles.optimizationDivider,\n ...overrides?.optimizationDivider,\n },\n optimizationSummary: {\n ...defaultStyles.optimizationSummary,\n ...overrides?.optimizationSummary,\n },\n creatingBody: {\n ...defaultStyles.creatingBody,\n ...overrides?.creatingBody,\n },\n stepsContainer: {\n ...defaultStyles.stepsContainer,\n ...overrides?.stepsContainer,\n },\n stepsList: {\n ...defaultStyles.stepsList,\n ...overrides?.stepsList,\n },\n stepRow: {\n ...defaultStyles.stepRow,\n ...overrides?.stepRow,\n },\n stepIcon: {\n ...defaultStyles.stepIcon,\n ...overrides?.stepIcon,\n },\n stepIconActive: {\n ...defaultStyles.stepIconActive,\n ...overrides?.stepIconActive,\n },\n stepIconDone: {\n ...defaultStyles.stepIconDone,\n ...overrides?.stepIconDone,\n },\n stepIconPending: {\n ...defaultStyles.stepIconPending,\n ...overrides?.stepIconPending,\n },\n stepIconFailed: {\n ...defaultStyles.stepIconFailed,\n ...overrides?.stepIconFailed,\n },\n stepTitle: {\n ...defaultStyles.stepTitle,\n ...overrides?.stepTitle,\n },\n stepTitleActive: {\n ...defaultStyles.stepTitleActive,\n ...overrides?.stepTitleActive,\n },\n stepTitleDone: {\n ...defaultStyles.stepTitleDone,\n ...overrides?.stepTitleDone,\n },\n stepTitlePending: {\n ...defaultStyles.stepTitlePending,\n ...overrides?.stepTitlePending,\n },\n stepTitleFailed: {\n ...defaultStyles.stepTitleFailed,\n ...overrides?.stepTitleFailed,\n },\n stepSubtitle: {\n ...defaultStyles.stepSubtitle,\n ...overrides?.stepSubtitle,\n },\n violationPanel: {\n ...defaultStyles.violationPanel,\n ...overrides?.violationPanel,\n },\n violationHeaderRow: {\n ...defaultStyles.violationHeaderRow,\n ...overrides?.violationHeaderRow,\n },\n violationHeader: {\n ...defaultStyles.violationHeader,\n ...overrides?.violationHeader,\n },\n violationIcon: {\n ...defaultStyles.violationIcon,\n ...overrides?.violationIcon,\n },\n violationTitle: {\n ...defaultStyles.violationTitle,\n ...overrides?.violationTitle,\n },\n violationSubtitle: {\n ...defaultStyles.violationSubtitle,\n ...overrides?.violationSubtitle,\n },\n violationToggleButton: {\n ...defaultStyles.violationToggleButton,\n ...overrides?.violationToggleButton,\n },\n violationToggleIcon: {\n ...defaultStyles.violationToggleIcon,\n ...overrides?.violationToggleIcon,\n },\n violationContent: {\n ...defaultStyles.violationContent,\n ...overrides?.violationContent,\n },\n violationItem: {\n ...defaultStyles.violationItem,\n ...overrides?.violationItem,\n },\n violationItemTitle: {\n ...defaultStyles.violationItemTitle,\n ...overrides?.violationItemTitle,\n },\n violationItemDetailRow: {\n ...defaultStyles.violationItemDetailRow,\n ...overrides?.violationItemDetailRow,\n },\n violationItemDetail: {\n ...defaultStyles.violationItemDetail,\n ...overrides?.violationItemDetail,\n },\n violationBullet: {\n ...defaultStyles.violationBullet,\n ...overrides?.violationBullet,\n },\n recommendationsBox: {\n ...defaultStyles.recommendationsBox,\n ...overrides?.recommendationsBox,\n },\n recommendationsTitle: {\n ...defaultStyles.recommendationsTitle,\n ...overrides?.recommendationsTitle,\n },\n recommendationsList: {\n ...defaultStyles.recommendationsList,\n ...overrides?.recommendationsList,\n },\n recommendationsItem: {\n ...defaultStyles.recommendationsItem,\n ...overrides?.recommendationsItem,\n },\n recommendationsBullet: {\n ...defaultStyles.recommendationsBullet,\n ...overrides?.recommendationsBullet,\n },\n recommendationsToggle: {\n ...defaultStyles.recommendationsToggle,\n ...overrides?.recommendationsToggle,\n },\n failedFooter: {\n ...defaultStyles.failedFooter,\n ...overrides?.failedFooter,\n },\n failedPrimaryButton: {\n ...defaultStyles.failedPrimaryButton,\n ...overrides?.failedPrimaryButton,\n },\n failedSecondaryButton: {\n ...defaultStyles.failedSecondaryButton,\n ...overrides?.failedSecondaryButton,\n },\n footer: { ...defaultStyles.footer, ...overrides?.footer },\n cancelButton: { ...defaultStyles.cancelButton, ...overrides?.cancelButton },\n primaryButton: { ...defaultStyles.primaryButton, ...overrides?.primaryButton },\n violatedConstraintsSecondaryButton: {\n ...defaultStyles.violatedConstraintsSecondaryButton,\n ...overrides?.violatedConstraintsSecondaryButton,\n },\n});","import type { RuleOverrideEntry, SchedulePayload, TimeOff } from \"./types\";\nimport type { Employee, OpenShift, JurisdictionGroup, LocationOption } from \"./types\";\n\nconst UI_TO_BACKEND_RULE_ID: Record<string, string> = {\n max_weekly_hours: \"max-weekly-hours\",\n max_daily_hours: \"max-daily-hours\",\n min_rest_between_shifts: \"min-rest-between-shifts\",\n max_work_days_per_week: \"max-work-days-per-week\",\n fair_hour_distribution: \"fair-hour-distribution\",\n minimize_overtime: \"overtime-balance\",\n cost_to_sales_ratio: \"labor-cost-optimization\",\n maximize_sales: \"maximize-sales-performance\",\n staff_preferences: \"staff-open-shift-preferences\",\n};\n\nconst BACKEND_TO_UI_RULE_ID: Record<string, string> = Object.fromEntries(\n Object.entries(UI_TO_BACKEND_RULE_ID).map(([ui, backend]) => [backend, ui]),\n);\n\nfunction toBackendRuleId(uiOptionId: string): string | undefined {\n return UI_TO_BACKEND_RULE_ID[uiOptionId];\n}\n\nfunction buildParametersForRule(\n backendRuleId: string,\n constraintValues: Record<string, string>,\n _optimizationValues: Record<string, string>\n): Record<string, unknown> {\n const params: Record<string, unknown> = {};\n\n switch (backendRuleId) {\n case \"max-weekly-hours\": {\n const value = constraintValues[\"max_weekly_hours\"]?.trim();\n if (value) {\n const limitMinutes = Number(value) * 60;\n if (Number.isFinite(limitMinutes) && limitMinutes >= 1) {\n params.limitMinutes = limitMinutes;\n }\n }\n break;\n }\n case \"max-daily-hours\": {\n const value = constraintValues[\"max_daily_hours\"]?.trim();\n if (value) {\n const limitMinutes = Number(value) * 60;\n if (Number.isFinite(limitMinutes) && limitMinutes >= 1) {\n params.limitMinutes = limitMinutes;\n }\n }\n break;\n }\n case \"min-rest-between-shifts\": {\n const value = constraintValues[\"min_rest_between_shifts\"]?.trim();\n if (value) {\n const minGapMinutes = Number(value) * 60;\n if (Number.isFinite(minGapMinutes) && minGapMinutes >= 1) {\n params.minGapMinutes = minGapMinutes;\n }\n }\n break;\n }\n case \"max-work-days-per-week\": {\n const value = constraintValues[\"max_work_days_per_week\"]?.trim();\n if (value) {\n const maxWorkDays = Number(value);\n if (Number.isFinite(maxWorkDays) && maxWorkDays >= 1 && maxWorkDays <= 6) {\n params.limitDays = maxWorkDays;\n }\n }\n break;\n }\n default:\n break;\n }\n\n return params;\n}\n\nfunction hasAnyParameterOverrides(\n selectedConstraintIds: string[],\n constraintValues: Record<string, string>,\n selectedOptimizationIds: string[],\n optimizationValues: Record<string, string>\n): boolean {\n for (const id of selectedConstraintIds) {\n const value = constraintValues[id]?.trim();\n if (value && Number.isFinite(Number(value))) return true;\n }\n for (const id of selectedOptimizationIds) {\n const weight = optimizationValues[`${id}_weightPoints`]?.trim();\n if (weight && Number.isFinite(Number(weight))) return true;\n if (id === \"fair_hour_distribution\") {\n if (\n optimizationValues[\"fair_hour_distribution_balanceTarget\"]?.trim() ||\n optimizationValues[\"fair_hour_distribution_period\"]?.trim()\n ) {\n return true;\n }\n } else if (id === \"minimize_overtime\") {\n if (\n optimizationValues[\"minimize_overtime_thresholdMinutes\"]?.trim() ||\n optimizationValues[\"minimize_overtime_period\"]?.trim()\n ) return true;\n } else if (id === \"cost_to_sales_ratio\" || id === \"maximize_sales\") {\n // These rules always need explicit parameters sent to the backend\n return true;\n }\n }\n return false;\n}\n\nexport function buildRulesPayload(\n selectedConstraintIds: string[],\n constraintValues: Record<string, string>,\n selectedOptimizationIds: string[],\n optimizationValues: Record<string, string>\n): { ruleIds?: string[]; ruleOverrides?: RuleOverrideEntry[] } {\n const allSelectedRuleIds = [\n ...selectedConstraintIds.map(toBackendRuleId),\n ...selectedOptimizationIds.map(toBackendRuleId),\n ].filter((id): id is string => Boolean(id));\n\n if (allSelectedRuleIds.length === 0) {\n return {};\n }\n\n const hasOverrides = hasAnyParameterOverrides(\n selectedConstraintIds,\n constraintValues,\n selectedOptimizationIds,\n optimizationValues\n );\n\n if (!hasOverrides) {\n return { ruleIds: allSelectedRuleIds };\n }\n\n const ruleOverrides: RuleOverrideEntry[] = allSelectedRuleIds.map((ruleId) => {\n const params = buildParametersForRule(ruleId, constraintValues, optimizationValues);\n const uiId = BACKEND_TO_UI_RULE_ID[ruleId];\n const weightRaw = uiId ? optimizationValues[`${uiId}_weightPoints`]?.trim() : undefined;\n const weightPoints = weightRaw ? Number(weightRaw) : undefined;\n if (weightPoints && Number.isFinite(weightPoints) && weightPoints >= 1) {\n params.weightPoints = weightPoints;\n }\n return {\n ruleId,\n ...(Object.keys(params).length > 0 ? { parameters: params } : {}),\n };\n });\n\n return { ruleIds: allSelectedRuleIds, ruleOverrides };\n}\n\nfunction toApiShift(\n shift: OpenShift,\n includeEmployeePreferences: boolean\n): SchedulePayload[\"shifts\"][0] {\n const startDateTime =\n \"startDateTime\" in shift ? (shift as { startDateTime: string }).startDateTime : shift.startTime;\n const endDateTime =\n \"endDateTime\" in shift ? (shift as { endDateTime: string }).endDateTime : shift.endTime;\n return {\n id: shift.id,\n startDateTime,\n endDateTime,\n ...(shift.employeeId ? { employeeId: String(shift.employeeId) } : {}),\n requiredPosition: shift.requiredPosition ?? undefined,\n requiredCount: shift.requiredCount ?? 1,\n location: shift.location\n ? {\n id: String(shift.location.id),\n timezone: \"timezone\" in shift.location ? (shift.location as { timezone?: string }).timezone : undefined,\n tags: \"tags\" in shift.location ? (shift.location as { tags?: string[] }).tags : undefined,\n }\n : undefined,\n ...(includeEmployeePreferences && shift.employeePreferences\n ? {\n employeePreferences: shift.employeePreferences.map((p) => ({\n employeeId: p.employeeId,\n level: p.level,\n })),\n }\n : {}),\n };\n}\n\nfunction toApiEmployee(employee: Employee): SchedulePayload[\"employees\"][0] {\n return {\n id: String(employee.id),\n name: employee.name ?? undefined,\n position: employee.position ?? undefined,\n locationIds: employee.locationIds ?? undefined,\n properties: employee.properties ? (employee.properties as Record<string, unknown>) : undefined,\n };\n}\n\nfunction toApiLocation(location: LocationOption): SchedulePayload[\"locations\"][0] {\n return {\n id: String(location.id),\n timezone: location.timezone ?? undefined,\n jurisdiction: location.jurisdiction ?? undefined,\n tags: \"tags\" in location ? (location as { tags?: string[] }).tags : undefined,\n };\n}\n\nexport type BuildSchedulePayloadInput = {\n employees: Employee[];\n openShifts: OpenShift[];\n timeOffs?: TimeOff[];\n selectedLocationIds: string[];\n jurisdictions: JurisdictionGroup[];\n selectedConstraintIds: string[];\n constraintValues: Record<string, string>;\n selectedOptimizationIds: string[];\n optimizationValues: Record<string, string>;\n};\n\nexport function buildSchedulePayload(input: BuildSchedulePayloadInput): SchedulePayload {\n const {\n employees,\n openShifts,\n timeOffs,\n selectedLocationIds,\n jurisdictions,\n selectedConstraintIds,\n constraintValues,\n selectedOptimizationIds,\n optimizationValues,\n } = input;\n\n const locationsMap = new Map<string, LocationOption>();\n for (const j of jurisdictions) {\n for (const loc of j.locations) {\n locationsMap.set(loc.id, loc);\n }\n }\n\n const selectedLocations = selectedLocationIds\n .map((id) => locationsMap.get(id))\n .filter((loc): loc is LocationOption => Boolean(loc));\n\n const rules = buildRulesPayload(\n selectedConstraintIds,\n constraintValues,\n selectedOptimizationIds,\n optimizationValues\n );\n\n const includeEmployeePreferences = selectedOptimizationIds.includes(\"staff_preferences\");\n\n return {\n employees: employees.map(toApiEmployee),\n shifts: openShifts.map((shift) => toApiShift(shift, includeEmployeePreferences)),\n locations: selectedLocations.map(toApiLocation),\n ...(timeOffs && timeOffs.length > 0 ? { timeOffs } : {}),\n ...rules,\n };\n}\n","import axios from \"axios\";\nimport type { SchedulePayload } from \"../types\";\nimport type { SolveApiResponse } from \"../types\";\n\nconst axiosInstance = axios.create({\n headers: { \"Content-Type\": \"application/json\" },\n});\n\nexport async function solveSchedule(\n baseURL: string,\n payload: SchedulePayload,\n): Promise<SolveApiResponse> {\n const cleanBaseUrl = baseURL.replace(/\\/$/, \"\");\n const response = await axiosInstance.post<SolveApiResponse>(`${cleanBaseUrl}/api/schedule/solve`, payload);\n return response.data;\n}\n","export type ViolationMessage = {\n title: string;\n detail: string;\n};\n\nconst SYSTEM_CONSTRAINT_MESSAGES: Record<string, ViolationMessage> = {\n \"system-unassigned-Hard\": {\n title: \"Not enough eligible staff to cover all shifts\",\n detail: \"Some open shifts require more team members with the required position than are currently available.\",\n },\n \"system-position-Hard\": {\n title: \"Required position not matched\",\n detail: \"Some open shifts require a position that isn't assigned to the available team members.\",\n },\n \"system-location-Hard\": {\n title: \"Location assignment mismatch\",\n detail: \"Some open shifts are set for a location that isn't assigned to the available team members.\",\n },\n \"system-employee-unavailable-Hard\": {\n title: \"No eligible staff available for shift\",\n detail: \"Some open shifts don't have any remaining eligible team members available at that time.\",\n },\n \"system-employee-unavailable-time-Hard\": {\n title: \"Unavailable time\",\n detail: \"Unavailable time\",\n },\n \"system-employee-available-time-Hard\": {\n title: \"Outside available time\",\n detail: \"Outside available time\",\n },\n \"system-employee-time-off-Hard\": {\n title: \"Time off prevents assignment\",\n detail: \"Some open shifts overlap with approved time off for the remaining eligible team members.\",\n },\n};\n\nconst RULE_ID_MESSAGES: Record<string, ViolationMessage> = {\n \"max-weekly-hours\": {\n title: \"Maximum weekly hours exceeded\",\n detail: \"Some team members would exceed weekly hour limits if all open shifts are assigned.\",\n },\n \"max-daily-hours\": {\n title: \"Maximum daily hours exceeded\",\n detail: \"Some team members would exceed daily hour limits if all open shifts are assigned.\",\n },\n \"min-rest-between-shifts\": {\n title: \"Minimum rest between shifts\",\n detail: \"Some team members would not receive the required rest time if all open shifts are assigned.\",\n },\n \"min-days-off-per-week\": {\n title: \"Maximum work days per week exceeded\",\n detail: \"Some team members would exceed the allowed work days this week if all open shifts are assigned.\",\n },\n \"fair-hour-distribution\": {\n title: \"Work distribution not balanced\",\n detail: \"Work distribution not balanced\",\n },\n \"overtime-balance\": {\n title: \"Overtime balance rule violated\",\n detail: \"Overtime balance rule violated\",\n },\n \"manager-cashier-ratio\": {\n title: \"Staffing ratio violated\",\n detail: \"Staffing ratio violated\",\n },\n \"min-staffing\": {\n title: \"Minimum staffing not met\",\n detail: \"Minimum staffing not met\",\n },\n \"shift-duration-limits\": {\n title: \"Shift duration outside allowed range\",\n detail: \"Shift duration outside allowed range\",\n },\n \"max-consecutive-days\": {\n title: \"Shift sequence rule violated\",\n detail: \"Shift sequence rule violated\",\n },\n \"some-transactional-rule\": {\n title: \"Policy rule violated\",\n detail: \"Policy rule violated\",\n },\n};\n\nconst ARCHETYPE_FALLBACK_MESSAGES: Record<string, ViolationMessage> = {\n \"Accumulator violation (HARD)\": {\n title: \"Hours limit exceeded\",\n detail: \"Hours limit exceeded\",\n },\n \"Spacer violation (HARD)\": {\n title: \"Rest period not met\",\n detail: \"Rest period not met\",\n },\n \"Spacer periodic violation (HARD)\": {\n title: \"Required rest period not met\",\n detail: \"Required rest period not met\",\n },\n \"Composition violation (HARD)\": {\n title: \"Staffing ratio violated\",\n detail: \"Staffing ratio violated\",\n },\n \"Transactional violation (HARD)\": {\n title: \"Policy rule violated\",\n detail: \"Policy rule violated\",\n },\n \"Balancer violation (HARD)\": {\n title: \"Work distribution not balanced\",\n detail: \"Work distribution not balanced\",\n },\n \"Coverage violation (HARD)\": {\n title: \"Minimum staffing not met\",\n detail: \"Minimum staffing not met\",\n },\n \"Sizing violation (HARD)\": {\n title: \"Shift duration outside allowed range\",\n detail: \"Shift duration outside allowed range\",\n },\n \"Sequencer violation (HARD)\": {\n title: \"Shift sequence rule violated\",\n detail: \"Shift sequence rule violated\",\n },\n \"Overtime balance violation (HARD)\": {\n title: \"Overtime balance rule violated\",\n detail: \"Overtime balance rule violated\",\n },\n};\n\nconst FALLBACK_MESSAGE: ViolationMessage = {\n title: \"Rule violated\",\n detail: \"Rule violated\",\n};\n\nexport function getSystemConstraintMessage(\n constraintName?: string,\n description?: string\n): ViolationMessage {\n if (constraintName && constraintName in SYSTEM_CONSTRAINT_MESSAGES) {\n return SYSTEM_CONSTRAINT_MESSAGES[constraintName];\n }\n if (description?.trim()) {\n return { title: description, detail: description };\n }\n return FALLBACK_MESSAGE;\n}\n\nexport function getRuleBasedViolationMessage(\n ruleId: string,\n constraintName?: string,\n description?: string\n): ViolationMessage {\n if (ruleId && ruleId in RULE_ID_MESSAGES) {\n return RULE_ID_MESSAGES[ruleId];\n }\n if (constraintName && constraintName in ARCHETYPE_FALLBACK_MESSAGES) {\n return ARCHETYPE_FALLBACK_MESSAGES[constraintName];\n }\n if (description?.trim()) {\n return { title: description, detail: description };\n }\n return FALLBACK_MESSAGE;\n}\n","import type { SolveApiResponse, ViolatedConstraintsResult } from \"../types\";\nimport {\n getSystemConstraintMessage,\n getRuleBasedViolationMessage,\n} from \"./violationMessages\";\n\ntype Violation = SolveApiResponse[\"explanation\"][\"violations\"][number];\n\nexport function mapViolationsToResult(\n violations: Violation[],\n summary?: string\n): ViolatedConstraintsResult {\n const hardViolations = violations.filter((v) => v.isHardViolation === true);\n\n const seenTitles = new Set<string>();\n const violatedConstraints: Array<{ title: string; detail: string }> = [];\n\n for (const v of hardViolations) {\n const hasRuleId = v.ruleId != null && v.ruleId !== undefined && String(v.ruleId).trim() !== \"\";\n\n const msg = hasRuleId\n ? getRuleBasedViolationMessage(\n v.ruleId!,\n v.constraintName,\n v.description\n )\n : getSystemConstraintMessage(v.constraintName, v.description);\n\n if (!seenTitles.has(msg.title)) {\n seenTitles.add(msg.title);\n violatedConstraints.push(msg);\n }\n }\n\n const result: ViolatedConstraintsResult = {\n violatedConstraints,\n recommendedFixes: [],\n };\n\n if (violatedConstraints.length === 0 && summary?.trim()) {\n result.violatedConstraints = [\n {\n title: \"Schedule could not be created\",\n detail: summary,\n },\n ];\n } else if (violatedConstraints.length === 0) {\n result.violatedConstraints = [\n {\n title: \"Schedule could not be created\",\n detail: \"Please adjust constraints and try again.\",\n },\n ];\n }\n\n return result;\n}\n","import { useCallback, useMemo, useState } from \"react\";\nimport {\n Box,\n Button,\n HStack,\n IconButton,\n Spinner,\n Stack,\n Text,\n} from \"@chakra-ui/react\";\nimport axios from \"axios\";\nimport type { ScheduleRecommendation, ViolatedConstraintsPanelProps } from \"./types\";\nimport { ChevronDownIcon, DotIcon, WarningIcon } from \"./icons/AutoSchedulerIcons\";\nimport { defaultStyles } from \"./constants\";\nimport { buildStyles } from \"./utils/theme\";\n\nconst DEFAULT_TITLE = \"Schedule can't be created\";\nconst DEFAULT_SUBTITLE =\n \"Some required rules aren't being met. Review the issues below to continue.\";\n\nexport function ViolatedConstraintsPanel({\n violatedConstraints,\n title = DEFAULT_TITLE,\n subtitle = DEFAULT_SUBTITLE,\n showSecondaryButton = false,\n secondaryButtonTitle,\n onSecondaryButtonClick,\n generateRecommendationsURLAndHeaders,\n styles: stylesProp,\n styleOverrides,\n}: ViolatedConstraintsPanelProps) {\n const [showRecommendations, setShowRecommendations] = useState(false);\n const [isExpanded, setIsExpanded] = useState(true);\n const [recommendations, setRecommendations] = useState<string[] | null>(null);\n const [isLoadingRecommendations, setIsLoadingRecommendations] = useState(false);\n\n const styles = useMemo(() => {\n if (stylesProp) return stylesProp;\n return buildStyles(defaultStyles, styleOverrides);\n }, [stylesProp, styleOverrides]);\n\n const canFetchRecommendations =\n Boolean(generateRecommendationsURLAndHeaders) &&\n Boolean(violatedConstraints.recommendationPayload);\n\n const hasPreFetchedFixes = violatedConstraints.recommendedFixes.length > 0;\n const showRecommendationsButton = canFetchRecommendations || hasPreFetchedFixes;\n\n const displayRecommendations =\n recommendations !== null ? recommendations : violatedConstraints.recommendedFixes;\n const hasRecommendations = displayRecommendations.length > 0;\n\n const handleToggleRecommendations = useCallback(async () => {\n if (showRecommendations) {\n setShowRecommendations(false);\n return;\n }\n\n setShowRecommendations(true);\n\n if (recommendations !== null) {\n return;\n }\n\n if (!canFetchRecommendations) {\n return;\n }\n\n const payload = violatedConstraints.recommendationPayload!;\n setIsLoadingRecommendations(true);\n try {\n const recResponse = await axios.post(\n generateRecommendationsURLAndHeaders!.url,\n payload,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n ...generateRecommendationsURLAndHeaders!.headers,\n },\n }\n );\n const data = (recResponse.data?.data ?? recResponse.data) as\n | ScheduleRecommendation[]\n | undefined;\n if (data) {\n setRecommendations(data.map((r) => r.recommendation));\n } else {\n setRecommendations([]);\n }\n } catch (recErr) {\n console.error(\"[ViolatedConstraintsPanel] failed to fetch recommendations:\", recErr);\n setRecommendations([]);\n } finally {\n setIsLoadingRecommendations(false);\n }\n }, [\n showRecommendations,\n recommendations,\n canFetchRecommendations,\n violatedConstraints.recommendationPayload,\n generateRecommendationsURLAndHeaders,\n ]);\n\n return (\n <Box sx={styles.violationPanel}>\n <HStack sx={styles.violationHeaderRow}>\n <HStack sx={styles.violationHeader}>\n <Box sx={styles.violationIcon}>\n <WarningIcon />\n </Box>\n <Box>\n <Text sx={styles.violationTitle}>{title}</Text>\n <Text sx={styles.violationSubtitle}>{subtitle}</Text>\n </Box>\n </HStack>\n <IconButton\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n variant=\"ghost\"\n size=\"sm\"\n icon={\n <Box\n sx={styles.violationToggleIcon}\n transform={isExpanded ? \"rotate(180deg)\" : \"rotate(0deg)\"}\n >\n <ChevronDownIcon />\n </Box>\n }\n onClick={() => setIsExpanded((prev) => !prev)}\n sx={styles.violationToggleButton}\n />\n </HStack>\n {isExpanded ? (\n <Stack spacing=\"8px\" sx={styles.violationContent}>\n <Stack spacing=\"8px\">\n {violatedConstraints.violatedConstraints.map((constraint, index) => (\n <Box key={`${constraint.title}-${index}`} sx={styles.violationItem}>\n <Text sx={styles.violationItemTitle}>{constraint.title}</Text>\n <HStack spacing=\"6px\" sx={styles.violationItemDetailRow}>\n <Box sx={styles.violationBullet}>\n <DotIcon size={6} />\n </Box>\n <Text sx={styles.violationItemDetail}>{constraint.detail}</Text>\n </HStack>\n </Box>\n ))}\n </Stack>\n {showRecommendations && hasRecommendations ? (\n <Box sx={styles.recommendationsBox}>\n <Text sx={styles.recommendationsTitle}>Recommended fixes</Text>\n <Stack spacing=\"4px\" sx={styles.recommendationsList}>\n {displayRecommendations.map((fix, index) => (\n <HStack key={`${fix}-${index}`} spacing=\"6px\">\n <Box sx={styles.recommendationsBullet}>\n <DotIcon size={6} />\n </Box>\n <Text sx={styles.recommendationsItem}>{fix}</Text>\n </HStack>\n ))}\n </Stack>\n </Box>\n ) : null}\n <HStack spacing=\"8px\" flexWrap=\"wrap\">\n {showRecommendationsButton ? (\n <Button\n variant=\"outline\"\n size=\"xs\"\n onClick={handleToggleRecommendations}\n isDisabled={isLoadingRecommendations}\n sx={{ ...styles.recommendationsToggle, minWidth: \"140px\" }}\n >\n {isLoadingRecommendations ? (\n <Spinner size=\"sm\" thickness=\"2px\" />\n ) : (\n showRecommendations ? \"Hide recommendations\" : \"Show recommendations\"\n )}\n </Button>\n ) : null}\n {showSecondaryButton && secondaryButtonTitle && onSecondaryButtonClick ? (\n <Button\n variant=\"outline\"\n size=\"xs\"\n onClick={onSecondaryButtonClick}\n sx={{ ...styles.failedSecondaryButton, ...styles.violatedConstraintsSecondaryButton }}\n >\n {secondaryButtonTitle}\n </Button>\n ) : null}\n </HStack>\n </Stack>\n ) : null}\n </Box>\n );\n}\n","import { ChakraProvider } from \"@chakra-ui/react\";\nimport { AutoSchedulerModal } from \"./AutoSchedulerModal\";\nimport type { AutoSchedulerModalProps } from \"./types\";\n\n/**\n * Self-contained AutoSchedulerModal that wraps itself in ChakraProvider.\n * Use this when the host app may have multiple React instances (e.g. local packages in Next.js),\n * which can cause \"Cannot read properties of null (reading 'useContext')\" when using Chakra's useTheme.\n */\nexport function AutoSchedulerModalWithProvider(props: AutoSchedulerModalProps) {\n return (\n <ChakraProvider>\n <AutoSchedulerModal {...props} />\n </ChakraProvider>\n );\n}\n","\nimport type { ViolatedConstraintsPanelProps } from \"./types\";\nimport { ViolatedConstraintsPanel } from \"./ViolatedConstraintsPanel\";\nimport { ChakraProvider } from \"@chakra-ui/react\";\n\nexport function ViolatedConstraintsPanelWithProvider(props: ViolatedConstraintsPanelProps) {\n return (\n <ChakraProvider>\n <ViolatedConstraintsPanel {...props} />\n </ChakraProvider>\n );\n}\n","/**\n * Mapping of ruleId/constraintName to user-friendly display names.\n * Used for justification messages like \"Staff preferences is fully met\".\n *\n * Source: auto-scheduler solver constraint names and rules JSON.\n */\nexport const RULE_ID_FRIENDLY_NAMES: Record<string, string> = {\n // System soft constraints (format: system-{type}-soft)\n \"system-employee-preference-soft\": \"Staff preferences\",\n \"system-employee-prefer-not-time-soft\": \"Prefer-not availability\",\n \"system-no-overlapping-shifts-soft\": \"No overlapping shifts\",\n \"system-overtime-soft\": \"Expected overtime\",\n\n // Archetype soft constraints (format: {archetype}-soft)\n \"accumulator-soft\": \"Hours limit\",\n \"accumulatordays-soft\": \"Work days limit\",\n \"spacer-soft\": \"Rest between shifts\",\n \"spacerperiodic-soft\": \"Required rest period\",\n \"composition-soft\": \"Staffing ratio\",\n \"transactional-soft\": \"Policy rule\",\n \"balancer-medium\": \"Fair work distribution\",\n \"balancerovertime-medium\": \"Minimize overtime\",\n \"coverage-soft\": \"Minimum staffing\",\n \"sizing-soft\": \"Shift duration limit\",\n \"sequencer-soft\": \"Shift sequence\",\n \"optimizerminimize-soft\": \"Minimize target\",\n \"optimizermaximize-soft\": \"Maximize target\",\n\n // Rule IDs (from rules JSON)\n \"max-weekly-hours\": \"Max weekly hours\",\n \"max-daily-hours\": \"Max daily hours\",\n \"min-rest-between-shifts\": \"Min rest between shifts\",\n \"min-days-off-per-week\": \"Min days off per week\",\n \"max-work-days-per-week\": \"Max work days per week\",\n \"fair-hour-distribution\": \"Fair hour distribution\",\n \"overtime-balance\": \"Overtime balance\",\n \"labor-cost-optimization\": \"Labor cost optimization\",\n \"maximize-sales-performance\": \"Maximize sales performance\",\n \"split-shift-penalty\": \"Split shift penalty\",\n \"shift-continuity-penalty\": \"Shift continuity penalty\",\n \"manager-cashier-ratio\": \"Staffing ratio\",\n \"min-staffing\": \"Minimum staffing\",\n \"shift-duration-limits\": \"Shift duration limit\",\n \"max-consecutive-days\": \"Shift sequence\",\n \"some-transactional-rule\": \"Policy rule\",\n};\n\n/**\n * Returns a user-friendly display name for a ruleId or constraintName.\n * Falls back to humanizing the raw string (replace - with spaces, capitalize) for unknown values.\n */\nexport function getFriendlyRuleName(ruleIdOrConstraintName: string): string {\n const trimmed = ruleIdOrConstraintName?.trim();\n if (!trimmed) return \"Unknown\";\n\n const mapped = RULE_ID_FRIENDLY_NAMES[trimmed.toLocaleLowerCase()];\n if (mapped) return mapped;\n\n // Fallback: humanize (replace - with spaces, capitalize words)\n return trimmed\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(\" \");\n}\n","export class RequestError extends Error {\n status: number;\n payload?: unknown;\n\n constructor(message: string, status: number, payload?: unknown) {\n super(message);\n this.name = \"RequestError\";\n this.status = status;\n this.payload = payload;\n }\n}\n\n// --- schedule solution types (matches API response from POST /api/schedule/solve) ---\n\nexport type ScheduleSolutionEmployee = {\n id: string;\n name?: string;\n position?: string;\n properties?: Record<string, unknown>;\n locationIds?: string[];\n};\n\nexport type ScheduleSolutionLocation = {\n id: string;\n timezone?: string;\n jurisdiction?: string;\n tags?: string[];\n properties?: Record<string, unknown>;\n};\n\nexport type ScheduleSolutionShift = {\n id: string;\n startDateTime?: string;\n endDateTime?: string;\n startTime?: string;\n endTime?: string;\n requiredHours?: number;\n requiredPosition?: string | null;\n requiredCount?: number;\n location?: ScheduleSolutionLocation;\n employeePreferences?: Array<{ employeeId: string; level: string }>;\n};\n\nexport type ShiftAssignmentJustification = {\n status: string; // \"SATISFIED\" | \"VIOLATED\"\n constraintName?: string;\n ruleId?: string | null;\n archetype?: string | null;\n jurisdiction?: string | null;\n type: string; // \"HARD\" | \"SOFT\"\n impact?: string;\n description?: string;\n};\n\nexport type ScheduleSolutionShiftAssignment = {\n id: number;\n shift?: ScheduleSolutionShift;\n slotIndex?: number;\n employee?: ScheduleSolutionEmployee | null;\n pinned: boolean;\n justifications?: ShiftAssignmentJustification[];\n};\n\nexport type ScheduleSolutionAvailability = {\n employeeId: string;\n type?: string;\n daysOfWeek?: string[];\n specificDates?: string[];\n startTime?: string;\n endTime?: string;\n};\n\nexport type ScheduleSolutionTimeOff = {\n employeeId: string;\n startDateTime: string;\n endDateTime: string;\n};\n\nexport type ScheduleSolutionWaiver = {\n employeeId: string;\n ruleId: string;\n expiry?: string;\n};\n\nexport type ScheduleSolutionRuleMetadata = Record<string, unknown>;\n\nexport type ScheduleSolutionRuleOverride = {\n ruleId: string;\n parameters?: Record<string, unknown>;\n};\n\nexport type ScheduleSolution = {\n employees?: ScheduleSolutionEmployee[];\n shifts?: ScheduleSolutionShift[];\n shiftAssignments?: ScheduleSolutionShiftAssignment[];\n locations?: ScheduleSolutionLocation[];\n availabilities?: ScheduleSolutionAvailability[];\n timeOffs?: ScheduleSolutionTimeOff[];\n waivers?: ScheduleSolutionWaiver[];\n ruleMetadata?: ScheduleSolutionRuleMetadata[];\n ruleOverrides?: ScheduleSolutionRuleOverride[];\n ruleIds?: string[] | null;\n demandCurve?: unknown | null;\n mode?: \"FIXED_TEMPLATE\" | \"FLEXIBLE_DEMAND\" | \"MIXED\";\n score?: string;\n};\n"],"mappings":"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","names":["import_react","_ignored","defaultStyles","axios","import_react","import_axios","import_jsx_runtime","axios","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}