{"version":3,"sources":["../../../../src/primitives/Scheduling/Admin/SettingsPanel.tsx"],"names":["value"],"mappings":"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","file":"SettingsPanel.mjs","sourcesContent":["import {\n  createContext,\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useState,\n  type FormEvent,\n  type ReactNode,\n} from 'react';\nimport type { UseSchedulingAdminResult } from '../../../hooks/useSchedulingAdmin';\nimport type {\n  SchedulingSettings,\n  SchedulingVerticalPreset,\n} from '../../../types/scheduling';\nimport {\n  DEFAULT_TIMEZONE_GROUPS,\n  detectBrowserTimezone,\n  isInTimezoneGroups,\n  type SchedulingTimezoneGroup,\n} from '../../../lib/schedulingTimezones';\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ninterface PanelContextValue {\n  admin: UseSchedulingAdminResult;\n  settings: SchedulingSettings | null;\n  draft: Partial<SchedulingSettings>;\n  setDraft: (next: Partial<SchedulingSettings>) => void;\n  change: <K extends keyof SchedulingSettings>(key: K, value: SchedulingSettings[K]) => void;\n  labelsText: string;\n  setLabelsText: (next: string) => void;\n  labelsError: string | null;\n  setLabelsError: (next: string | null) => void;\n  savedAt: number | null;\n  setSavedAt: (next: number | null) => void;\n}\n\nconst PanelContext = createContext<PanelContextValue | null>(null);\n\nfunction usePanelContext(): PanelContextValue {\n  const ctx = useContext(PanelContext);\n  if (!ctx) {\n    throw new Error('<SchedulingSettingsPanel.*> must be inside <SchedulingSettingsPanel>.');\n  }\n  return ctx;\n}\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nexport interface SchedulingSettingsPanelProps {\n  admin: UseSchedulingAdminResult;\n  className?: string;\n  children: ReactNode;\n  /**\n   * Override the default form-submit handler. Receives the merged draft\n   * (including parsed labels). When omitted, the panel calls\n   * `admin.settings.update(draft)` directly. Useful when consumers want to\n   * intercept (e.g. confirm modal) before the server write.\n   */\n  onSubmit?: (draft: Partial<SchedulingSettings>) => Promise<void> | void;\n}\n\nfunction SchedulingSettingsPanelRoot({\n  admin,\n  className,\n  children,\n  onSubmit,\n}: SchedulingSettingsPanelProps) {\n  const settings = admin.settings.value;\n  const [draft, setDraft] = useState<Partial<SchedulingSettings>>({});\n  const [labelsText, setLabelsText] = useState('{}');\n  const [labelsError, setLabelsError] = useState<string | null>(null);\n  const [savedAt, setSavedAt] = useState<number | null>(null);\n\n  // Sync the editable draft with the latest server value whenever it lands.\n  // Without this, a refresh wouldn't clear stale local edits after a remote\n  // update.\n  useEffect(() => {\n    if (settings) {\n      setDraft(settings);\n      setLabelsText(JSON.stringify(settings.labels ?? {}, null, 2));\n    }\n  }, [settings]);\n\n  const change = useCallback(\n    <K extends keyof SchedulingSettings>(key: K, value: SchedulingSettings[K]) =>\n      setDraft((prev) => ({ ...prev, [key]: value })),\n    [],\n  );\n\n  const handleFormSubmit = async (e: FormEvent<HTMLFormElement>) => {\n    e.preventDefault();\n    setLabelsError(null);\n\n    // Parse labels on submit (not per-keystroke). Surfaces invalid JSON so\n    // the consumer can show a useful error instead of silently dropping it.\n    let parsedLabels: Record<string, string> = {};\n    try {\n      const parsed = JSON.parse(labelsText || '{}');\n      if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n        parsedLabels = parsed as Record<string, string>;\n      } else {\n        setLabelsError('Label overrides must be a JSON object.');\n        return;\n      }\n    } catch {\n      setLabelsError('Invalid JSON for label overrides.');\n      return;\n    }\n\n    const merged: Partial<SchedulingSettings> = { ...draft, labels: parsedLabels };\n    if (onSubmit) {\n      await onSubmit(merged);\n    } else {\n      await admin.settings.update(merged);\n    }\n    setSavedAt(Date.now());\n  };\n\n  const value: PanelContextValue = {\n    admin,\n    settings,\n    draft,\n    setDraft,\n    change,\n    labelsText,\n    setLabelsText,\n    labelsError,\n    setLabelsError,\n    savedAt,\n    setSavedAt,\n  };\n\n  // Keep the early-return cases (loading / no settings) inside the provider so\n  // sub-primitives don't have to special-case them. Consumers can render\n  // SchedulingSettingsPanel.NotReady or check admin.settings.value themselves\n  // if they want a custom skeleton.\n  return (\n    <PanelContext.Provider value={value}>\n      <form className={className} onSubmit={handleFormSubmit} noValidate>\n        {children}\n      </form>\n    </PanelContext.Provider>\n  );\n}\n\n// ─── Field shells ─────────────────────────────────────────────────────────────\n//\n// Internal helper — keeps the per-field boilerplate (label + help + suffix)\n// out of every sub-primitive. NOT exported; consumers wire className strings\n// per sub-primitive.\n\ninterface FieldShellProps {\n  className?: string;\n  labelClassName?: string;\n  helpClassName?: string;\n  suffixClassName?: string;\n  actionClassName?: string;\n  label: ReactNode;\n  help?: ReactNode;\n  suffix?: ReactNode;\n  action?: ReactNode;\n  children: ReactNode;\n}\n\nfunction FieldShell({\n  className,\n  labelClassName,\n  helpClassName,\n  suffixClassName,\n  actionClassName,\n  label,\n  help,\n  suffix,\n  action,\n  children,\n}: FieldShellProps) {\n  // The wrapper is a <div>, not a <label> — putting interactive elements\n  // (e.g. the \"Use browser timezone\" action button) inside a <label> pollutes\n  // the accessible name of those buttons with the surrounding label text.\n  // The label element wraps only the static label string.\n  const labelEl = <label className={labelClassName}>{label}</label>;\n  const actionEl = action ? <span className={actionClassName}>{action}</span> : null;\n  const labelRow =\n    actionEl ? (\n      <div>\n        {labelEl}\n        {actionEl}\n      </div>\n    ) : (\n      labelEl\n    );\n\n  const body = suffix ? (\n    <div>\n      {children}\n      <span className={suffixClassName}>{suffix}</span>\n    </div>\n  ) : (\n    children\n  );\n\n  return (\n    <div className={className}>\n      {labelRow}\n      {body}\n      {help ? <span className={helpClassName}>{help}</span> : null}\n    </div>\n  );\n}\n\n// ─── Timezone ─────────────────────────────────────────────────────────────────\n\nexport interface SchedulingSettingsTimezoneProps {\n  className?: string;\n  labelClassName?: string;\n  helpClassName?: string;\n  inputClassName?: string;\n  customInputClassName?: string;\n  actionClassName?: string;\n  /**\n   * Curated IANA groups for the dropdown. Defaults to DEFAULT_TIMEZONE_GROUPS.\n   * Pass `null` to render a free-text input instead.\n   */\n  groups?: SchedulingTimezoneGroup[] | null;\n  /**\n   * When true (default) and the browser timezone differs from the current\n   * value AND `groups` is set, render a \"Use my browser timezone (…)\"\n   * shortcut. Pass false to suppress.\n   */\n  showBrowserShortcut?: boolean;\n  /**\n   * Override the detected browser timezone. Default: detectBrowserTimezone().\n   * Pass `null` to force-suppress the shortcut even if the browser exposes\n   * one. Useful for SSR (where Intl may resolve differently than the user)\n   * and for tests.\n   */\n  browserTimezone?: string | null;\n  label?: ReactNode;\n  help?: ReactNode;\n}\n\nfunction Timezone({\n  className,\n  labelClassName,\n  helpClassName,\n  inputClassName,\n  customInputClassName,\n  actionClassName,\n  groups = DEFAULT_TIMEZONE_GROUPS,\n  showBrowserShortcut = true,\n  browserTimezone,\n  label = 'Timezone',\n  help,\n}: SchedulingSettingsTimezoneProps) {\n  const { draft, change } = usePanelContext();\n  const tz = String(draft.timezone ?? '');\n  // Memoize the platform detection so changing timezone state doesn't\n  // re-invoke Intl on every render. The `browserTimezone` prop, when supplied,\n  // takes precedence (SSR / test injection).\n  const detected = useMemo(() => detectBrowserTimezone(), []);\n  const browserTz = browserTimezone === undefined ? detected : browserTimezone;\n\n  // Free-text mode (groups === null) — single text input.\n  if (!groups) {\n    return (\n      <FieldShell\n        className={className}\n        labelClassName={labelClassName}\n        helpClassName={helpClassName}\n        label={label}\n        help={help}\n      >\n        <input\n          type=\"text\"\n          value={tz}\n          onChange={(e) => change('timezone', e.target.value)}\n          placeholder=\"Australia/Sydney\"\n          className={inputClassName}\n        />\n      </FieldShell>\n    );\n  }\n\n  // Curated mode — dropdown + custom-fallback text input.\n  const tzInList = isInTimezoneGroups(tz, groups);\n  const action =\n    showBrowserShortcut && browserTz && browserTz !== tz ? (\n      <button\n        type=\"button\"\n        onClick={() => change('timezone', browserTz)}\n        className={actionClassName}\n      >\n        Use my browser timezone ({browserTz})\n      </button>\n    ) : null;\n\n  return (\n    <FieldShell\n      className={className}\n      labelClassName={labelClassName}\n      helpClassName={helpClassName}\n      actionClassName={actionClassName}\n      label={label}\n      help={help}\n      action={action}\n    >\n      <select\n        value={tzInList ? tz : '__custom__'}\n        onChange={(e) => {\n          // Selecting \"Custom…\" leaves the current value intact and reveals\n          // the text input for fine-grained editing.\n          if (e.target.value === '__custom__') return;\n          change('timezone', e.target.value);\n        }}\n        className={inputClassName}\n      >\n        {groups.map((group) => (\n          <optgroup key={group.region} label={group.region}>\n            {group.values.map((v) => (\n              <option key={v.tz} value={v.tz}>\n                {v.label}\n              </option>\n            ))}\n          </optgroup>\n        ))}\n        <option value=\"__custom__\">Custom…</option>\n      </select>\n      {!tzInList ? (\n        <input\n          type=\"text\"\n          value={tz}\n          onChange={(e) => change('timezone', e.target.value)}\n          placeholder=\"e.g. Europe/Lisbon\"\n          className={customInputClassName}\n        />\n      ) : null}\n    </FieldShell>\n  );\n}\n\n// ─── Granularity ──────────────────────────────────────────────────────────────\n\nexport type SchedulingSettingsGranularityOption =\n  | number\n  | { value: number; label: ReactNode };\n\nexport interface SchedulingSettingsGranularityProps {\n  className?: string;\n  labelClassName?: string;\n  helpClassName?: string;\n  inputClassName?: string;\n  options?: SchedulingSettingsGranularityOption[];\n  label?: ReactNode;\n  help?: ReactNode;\n}\n\nconst DEFAULT_GRANULARITIES: SchedulingSettingsGranularityOption[] = [\n  { value: 15, label: 'Every 15 minutes' },\n  { value: 30, label: 'Every 30 minutes' },\n  { value: 60, label: 'Every hour' },\n];\n\nfunction Granularity({\n  className,\n  labelClassName,\n  helpClassName,\n  inputClassName,\n  options = DEFAULT_GRANULARITIES,\n  label = 'Slot granularity',\n  help,\n}: SchedulingSettingsGranularityProps) {\n  const { draft, settings, change } = usePanelContext();\n  const value = Number(draft.slot_granularity_minutes ?? settings?.slot_granularity_minutes ?? 30);\n  return (\n    <FieldShell\n      className={className}\n      labelClassName={labelClassName}\n      helpClassName={helpClassName}\n      label={label}\n      help={help}\n    >\n      <select\n        value={value}\n        onChange={(e) => change('slot_granularity_minutes', Number(e.target.value))}\n        className={inputClassName}\n      >\n        {options.map((opt) => {\n          const v = typeof opt === 'number' ? opt : opt.value;\n          const lbl = typeof opt === 'number' ? `${opt} minutes` : opt.label;\n          return (\n            <option key={v} value={v}>\n              {lbl}\n            </option>\n          );\n        })}\n      </select>\n    </FieldShell>\n  );\n}\n\n// ─── Number fields (lead time / max advance / cancellation window) ───────────\n\ninterface NumberFieldProps {\n  className?: string;\n  labelClassName?: string;\n  helpClassName?: string;\n  inputClassName?: string;\n  suffixClassName?: string;\n  label?: ReactNode;\n  help?: ReactNode;\n  suffix?: ReactNode;\n  min?: number;\n  step?: number;\n}\n\nfunction makeNumberField(\n  field: 'min_lead_time_minutes' | 'max_advance_days' | 'cancellation_window_hours',\n  defaults: { label: ReactNode; suffix: ReactNode; min: number; step?: number },\n) {\n  return function NumberField({\n    className,\n    labelClassName,\n    helpClassName,\n    inputClassName,\n    suffixClassName,\n    label = defaults.label,\n    help,\n    suffix = defaults.suffix,\n    min = defaults.min,\n    step = defaults.step,\n  }: NumberFieldProps) {\n    const { draft, change } = usePanelContext();\n    const value = Number(draft[field] ?? 0);\n    return (\n      <FieldShell\n        className={className}\n        labelClassName={labelClassName}\n        helpClassName={helpClassName}\n        suffixClassName={suffixClassName}\n        label={label}\n        help={help}\n        suffix={suffix}\n      >\n        <input\n          type=\"number\"\n          min={min}\n          step={step}\n          value={value}\n          onChange={(e) => change(field, Number(e.target.value))}\n          className={inputClassName}\n        />\n      </FieldShell>\n    );\n  };\n}\n\nconst MinLeadTime = makeNumberField('min_lead_time_minutes', {\n  label: 'Min lead time',\n  suffix: 'minutes',\n  min: 0,\n  step: 5,\n});\n\nconst MaxAdvance = makeNumberField('max_advance_days', {\n  label: 'Max advance',\n  suffix: 'days',\n  min: 1,\n});\n\nconst CancellationWindow = makeNumberField('cancellation_window_hours', {\n  label: 'Cancellation window',\n  suffix: 'hours before',\n  min: 0,\n});\n\nexport type SchedulingSettingsMinLeadTimeProps = NumberFieldProps;\nexport type SchedulingSettingsMaxAdvanceProps = NumberFieldProps;\nexport type SchedulingSettingsCancellationWindowProps = NumberFieldProps;\n\n// ─── Vertical preset ──────────────────────────────────────────────────────────\n\nexport type SchedulingSettingsPresetOption =\n  | SchedulingVerticalPreset\n  | { value: SchedulingVerticalPreset; label: ReactNode };\n\nexport interface SchedulingSettingsVerticalPresetProps {\n  className?: string;\n  labelClassName?: string;\n  helpClassName?: string;\n  inputClassName?: string;\n  presets?: SchedulingSettingsPresetOption[];\n  label?: ReactNode;\n  help?: ReactNode;\n}\n\nconst DEFAULT_PRESETS: SchedulingSettingsPresetOption[] = [\n  { value: 'salon', label: 'Salon (Stylist · Service · Booking)' },\n  { value: 'generic', label: 'Generic (Provider · Service · Booking)' },\n];\n\nfunction VerticalPreset({\n  className,\n  labelClassName,\n  helpClassName,\n  inputClassName,\n  presets = DEFAULT_PRESETS,\n  label = 'Vertical preset',\n  help,\n}: SchedulingSettingsVerticalPresetProps) {\n  const { draft, settings, change } = usePanelContext();\n  const value = String(draft.vertical_preset ?? settings?.vertical_preset ?? 'salon');\n  return (\n    <FieldShell\n      className={className}\n      labelClassName={labelClassName}\n      helpClassName={helpClassName}\n      label={label}\n      help={help}\n    >\n      <select\n        value={value}\n        onChange={(e) =>\n          change('vertical_preset', e.target.value as SchedulingVerticalPreset)\n        }\n        className={inputClassName}\n      >\n        {presets.map((p) => {\n          const v = typeof p === 'string' ? p : p.value;\n          const lbl = typeof p === 'string' ? p : p.label;\n          return (\n            <option key={v} value={v}>\n              {lbl}\n            </option>\n          );\n        })}\n      </select>\n    </FieldShell>\n  );\n}\n\n// ─── Labels (jsonb) ───────────────────────────────────────────────────────────\n\nexport interface SchedulingSettingsLabelsProps {\n  className?: string;\n  labelClassName?: string;\n  helpClassName?: string;\n  inputClassName?: string;\n  errorClassName?: string;\n  label?: ReactNode;\n  help?: ReactNode;\n  rows?: number;\n}\n\nfunction Labels({\n  className,\n  labelClassName,\n  helpClassName,\n  inputClassName,\n  errorClassName,\n  label = 'Label overrides',\n  help,\n  rows = 4,\n}: SchedulingSettingsLabelsProps) {\n  const { labelsText, setLabelsText, labelsError } = usePanelContext();\n  return (\n    <FieldShell\n      className={className}\n      labelClassName={labelClassName}\n      helpClassName={helpClassName}\n      label={label}\n      help={help}\n    >\n      <textarea\n        value={labelsText}\n        onChange={(e) => setLabelsText(e.target.value)}\n        rows={rows}\n        className={inputClassName}\n      />\n      {labelsError ? (\n        <span className={errorClassName} role=\"alert\">\n          {labelsError}\n        </span>\n      ) : null}\n    </FieldShell>\n  );\n}\n\n// ─── Submit ───────────────────────────────────────────────────────────────────\n\nexport interface SchedulingSettingsSubmitProps {\n  className?: string;\n  /** Default: 'Save settings'. */\n  children?: ReactNode;\n  /** Default: 'Saving…'. */\n  loadingLabel?: ReactNode;\n}\n\nfunction Submit({\n  className,\n  children,\n  loadingLabel,\n}: SchedulingSettingsSubmitProps) {\n  const { admin } = usePanelContext();\n  return (\n    <button type=\"submit\" disabled={admin.settings.loading} className={className}>\n      {admin.settings.loading\n        ? (loadingLabel ?? 'Saving…')\n        : (children ?? 'Save settings')}\n    </button>\n  );\n}\n\n// ─── Saved indicator ──────────────────────────────────────────────────────────\n\nexport interface SchedulingSettingsSavedProps {\n  className?: string;\n  children?: ReactNode;\n  /** How long to show the indicator after a successful save. Default 4000ms. */\n  durationMs?: number;\n}\n\nfunction Saved({\n  className,\n  children,\n  durationMs = 4000,\n}: SchedulingSettingsSavedProps) {\n  const { savedAt, setSavedAt } = usePanelContext();\n  // Auto-clear so the indicator naturally disappears even without re-renders.\n  useEffect(() => {\n    if (savedAt == null) return;\n    const handle = setTimeout(() => setSavedAt(null), durationMs);\n    return () => clearTimeout(handle);\n  }, [savedAt, durationMs, setSavedAt]);\n\n  if (savedAt == null) return null;\n  return <span className={className}>{children ?? 'Saved.'}</span>;\n}\n\n// ─── Error ────────────────────────────────────────────────────────────────────\n\nexport interface SchedulingSettingsErrorProps {\n  className?: string;\n  children?: (message: string) => ReactNode;\n}\n\nfunction ErrorMessage({ className, children }: SchedulingSettingsErrorProps) {\n  const { admin } = usePanelContext();\n  if (!admin.settings.error) return null;\n  return (\n    <div className={className} role=\"alert\">\n      {children ? children(admin.settings.error) : admin.settings.error}\n    </div>\n  );\n}\n\n// ─── Compound export ──────────────────────────────────────────────────────────\n\nexport const SchedulingSettingsPanel = Object.assign(SchedulingSettingsPanelRoot, {\n  Timezone,\n  Granularity,\n  MinLeadTime,\n  MaxAdvance,\n  CancellationWindow,\n  VerticalPreset,\n  Labels,\n  Submit,\n  Saved,\n  Error: ErrorMessage,\n});\n"]}