{"version":3,"file":"ScheduleHeaderBase.cjs","names":["ScheduleHeader","getLabel","classes","NativeSelect"],"sources":["../../../src/components/ScheduleHeader/ScheduleHeaderBase.tsx"],"sourcesContent":["import { NativeSelect, StylesApiProps } from '@mantine/core';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport { DateStringValue, ScheduleViewLevel } from '../../types';\nimport { MonthYearSelectProps } from './MonthYearSelect/MonthYearSelect';\nimport { ScheduleHeader } from './ScheduleHeader';\nimport { ViewSelectProps } from './ViewSelect/ViewSelect';\nimport classes from './ScheduleHeader.module.css';\n\ninterface NavigationHandlers {\n  /** Handler for previous button click, returns new date */\n  previous: () => DateStringValue;\n\n  /** Handler for next button click, returns new date */\n  next: () => DateStringValue;\n\n  /** Handler for today button click, returns new date */\n  today: () => DateStringValue;\n}\n\ninterface HeaderControlOptions {\n  /** Title to render in a simple control (used by DayView, WeekView) */\n  title?: React.ReactNode;\n  /** MonthYearSelect props (used by MonthView, YearView) */\n  monthYearSelect?: {\n    yearValue: number;\n    monthValue: number;\n    onYearChange?: (year: number) => void;\n    onMonthChange?: (month: number) => void;\n    withMonths?: boolean;\n  } & Partial<MonthYearSelectProps>;\n  /** Minimum width for control */\n  miw?: React.CSSProperties['minWidth'];\n}\n\nexport interface ScheduleHeaderBaseProps {\n  /** Current view level */\n  view: ScheduleViewLevel;\n\n  /** Navigation handlers for previous, next, and today */\n  navigationHandlers: NavigationHandlers;\n\n  /** Central control configuration (either title or monthYearSelect) */\n  control: HeaderControlOptions;\n\n  /** Label overrides */\n  labels?: ScheduleLabelsOverride;\n\n  /** Called when date is changed */\n  onDateChange?: (date: DateStringValue) => void;\n\n  /** Called when view is changed */\n  onViewChange?: (view: ScheduleViewLevel) => void;\n\n  /** Props passed to previous control button */\n  previousControlProps?: React.ComponentProps<'button'>;\n\n  /** Props passed to next control button */\n  nextControlProps?: React.ComponentProps<'button'>;\n\n  /** Props passed to today control button */\n  todayControlProps?: React.ComponentProps<'button'>;\n\n  /** Props passed to view select */\n  viewSelectProps?: Partial<ViewSelectProps>;\n\n  /** Styles API props to pass through */\n  stylesApiProps?: StylesApiProps<any>;\n\n  /** Called when agenda button is clicked */\n  onAgendaClick?: () => void;\n\n  /** Whether the agenda view is currently active */\n  agendaActive?: boolean;\n}\n\nconst VIEW_LEVELS: ScheduleViewLevel[] = ['day', 'week', 'month', 'year'];\n\nexport function ScheduleHeaderBase({\n  view,\n  navigationHandlers,\n  control,\n  labels,\n  onDateChange,\n  onViewChange,\n  previousControlProps,\n  nextControlProps,\n  todayControlProps,\n  viewSelectProps,\n  stylesApiProps,\n  onAgendaClick,\n  agendaActive,\n}: ScheduleHeaderBaseProps) {\n  const centralControl = control.monthYearSelect ? (\n    <ScheduleHeader.MonthYearSelect\n      {...stylesApiProps}\n      labels={labels}\n      {...control.monthYearSelect}\n    />\n  ) : (\n    <ScheduleHeader.Control {...stylesApiProps} interactive={false} miw={control.miw}>\n      {control.title}\n    </ScheduleHeader.Control>\n  );\n\n  const views = viewSelectProps?.views || VIEW_LEVELS;\n  const compactViewSelectData = views.map((v) => ({\n    value: v,\n    label: getLabel(v, labels) as string,\n  }));\n\n  return (\n    <ScheduleHeader {...stylesApiProps} labels={labels}>\n      <div className={classes.navigationGroup}>\n        <ScheduleHeader.Previous\n          {...stylesApiProps}\n          onClick={() => onDateChange?.(navigationHandlers.previous())}\n          labels={labels}\n          {...previousControlProps}\n        />\n\n        {centralControl}\n\n        <ScheduleHeader.Next\n          {...stylesApiProps}\n          onClick={() => onDateChange?.(navigationHandlers.next())}\n          labels={labels}\n          {...nextControlProps}\n        />\n      </div>\n\n      <div className={classes.todayControl}>\n        <ScheduleHeader.Today\n          {...stylesApiProps}\n          onClick={() => onDateChange?.(navigationHandlers.today())}\n          labels={labels}\n          {...todayControlProps}\n        />\n        {onAgendaClick && (\n          <ScheduleHeader.Control\n            {...stylesApiProps}\n            data-type=\"agenda\"\n            active={agendaActive}\n            onClick={onAgendaClick}\n            aria-label={getLabel('agenda', labels) as string}\n          >\n            {getLabel('agenda', labels)}\n          </ScheduleHeader.Control>\n        )}\n      </div>\n\n      <div className={classes.compactControls}>\n        {onAgendaClick && (\n          <ScheduleHeader.Control\n            {...stylesApiProps}\n            data-type=\"agenda\"\n            active={agendaActive}\n            onClick={onAgendaClick}\n            aria-label={getLabel('agenda', labels) as string}\n            className={classes.compactAgendaControl}\n          >\n            {getLabel('agenda', labels)}\n          </ScheduleHeader.Control>\n        )}\n        <NativeSelect\n          className={classes.compactViewSelect}\n          data={compactViewSelectData}\n          value={view}\n          onChange={(event) => onViewChange?.(event.currentTarget.value as ScheduleViewLevel)}\n          aria-label={getLabel('viewSelectLabel', labels) as string}\n          size=\"sm\"\n        />\n      </div>\n\n      <div className={classes.viewSelect} style={{ marginInlineStart: 'auto' }}>\n        <ScheduleHeader.ViewSelect\n          value={view}\n          onChange={onViewChange}\n          labels={labels}\n          {...stylesApiProps}\n          {...viewSelectProps}\n        />\n      </div>\n    </ScheduleHeader>\n  );\n}\n"],"mappings":";;;;;;;AA2EA,MAAM,cAAmC;CAAC;CAAO;CAAQ;CAAS;AAAM;AAExE,SAAgB,mBAAmB,EACjC,MACA,oBACA,SACA,QACA,cACA,cACA,sBACA,kBACA,mBACA,iBACA,gBACA,eACA,gBAC0B;CAC1B,MAAM,iBAAiB,QAAQ,kBAC7B,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,eAAe,iBAAhB;EACE,GAAI;EACI;EACR,GAAI,QAAQ;CACb,CAAA,IAED,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,eAAe,SAAhB;EAAwB,GAAI;EAAgB,aAAa;EAAO,KAAK,QAAQ;YAC1E,QAAQ;CACa,CAAA;CAI1B,MAAM,yBADQ,iBAAiB,SAAS,YAAA,CACJ,KAAK,OAAO;EAC9C,OAAO;EACP,OAAOC,eAAAA,SAAS,GAAG,MAAM;CAC3B,EAAE;CAEF,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACD,uBAAAA,gBAAD;EAAgB,GAAI;EAAwB;YAA5C;GACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWE,8BAAAA,QAAQ;cAAxB;KACE,iBAAA,GAAA,kBAAA,IAAA,CAACF,uBAAAA,eAAe,UAAhB;MACE,GAAI;MACJ,eAAe,eAAe,mBAAmB,SAAS,CAAC;MACnD;MACR,GAAI;KACL,CAAA;KAEA;KAED,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,eAAe,MAAhB;MACE,GAAI;MACJ,eAAe,eAAe,mBAAmB,KAAK,CAAC;MAC/C;MACR,GAAI;KACL,CAAA;IACE;;GAEL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWE,8BAAAA,QAAQ;cAAxB,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACF,uBAAAA,eAAe,OAAhB;KACE,GAAI;KACJ,eAAe,eAAe,mBAAmB,MAAM,CAAC;KAChD;KACR,GAAI;IACL,CAAA,GACA,iBACC,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,eAAe,SAAhB;KACE,GAAI;KACJ,aAAU;KACV,QAAQ;KACR,SAAS;KACT,cAAYC,eAAAA,SAAS,UAAU,MAAM;eAEpCA,eAAAA,SAAS,UAAU,MAAM;IACJ,CAAA,CAEvB;;GAEL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWC,8BAAAA,QAAQ;cAAxB,CACG,iBACC,iBAAA,GAAA,kBAAA,IAAA,CAACF,uBAAAA,eAAe,SAAhB;KACE,GAAI;KACJ,aAAU;KACV,QAAQ;KACR,SAAS;KACT,cAAYC,eAAAA,SAAS,UAAU,MAAM;KACrC,WAAWC,8BAAAA,QAAQ;eAElBD,eAAAA,SAAS,UAAU,MAAM;IACJ,CAAA,GAE1B,iBAAA,GAAA,kBAAA,IAAA,CAACE,cAAAA,cAAD;KACE,WAAWD,8BAAAA,QAAQ;KACnB,MAAM;KACN,OAAO;KACP,WAAW,UAAU,eAAe,MAAM,cAAc,KAA0B;KAClF,cAAYD,eAAAA,SAAS,mBAAmB,MAAM;KAC9C,MAAK;IACN,CAAA,CACE;;GAEL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAWC,8BAAAA,QAAQ;IAAY,OAAO,EAAE,mBAAmB,OAAO;cACrE,iBAAA,GAAA,kBAAA,IAAA,CAACF,uBAAAA,eAAe,YAAhB;KACE,OAAO;KACP,UAAU;KACF;KACR,GAAI;KACJ,GAAI;IACL,CAAA;GACE,CAAA;EACS;;AAEpB"}