@vibe/date-picker 4.0.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.
Files changed (61) hide show
  1. package/dist/DatePicker/DateContentHoverContext.d.ts +12 -0
  2. package/dist/DatePicker/DateContentHoverContext.js +2 -0
  3. package/dist/DatePicker/DateContentHoverContext.js.map +1 -0
  4. package/dist/DatePicker/DatePicker.d.ts +8 -0
  5. package/dist/DatePicker/DatePicker.js +2 -0
  6. package/dist/DatePicker/DatePicker.js.map +1 -0
  7. package/dist/DatePicker/DatePicker.module.scss.js +2 -0
  8. package/dist/DatePicker/DatePicker.module.scss.js.map +1 -0
  9. package/dist/DatePicker/DatePicker.types.d.ts +34 -0
  10. package/dist/DatePicker/DatePickerHeader.d.ts +17 -0
  11. package/dist/DatePicker/DatePickerHeader.js +2 -0
  12. package/dist/DatePicker/DatePickerHeader.js.map +1 -0
  13. package/dist/DatePicker/DatePickerHeader.module.scss.js +2 -0
  14. package/dist/DatePicker/DatePickerHeader.module.scss.js.map +1 -0
  15. package/dist/DatePicker/RangeDayContent.d.ts +3 -0
  16. package/dist/DatePicker/RangeDayContent.js +2 -0
  17. package/dist/DatePicker/RangeDayContent.js.map +1 -0
  18. package/dist/DatePicker/SingleDayContent.d.ts +3 -0
  19. package/dist/DatePicker/SingleDayContent.js +2 -0
  20. package/dist/DatePicker/SingleDayContent.js.map +1 -0
  21. package/dist/DatePicker/datePickerHooks.d.ts +18 -0
  22. package/dist/DatePicker/datePickerHooks.js +2 -0
  23. package/dist/DatePicker/datePickerHooks.js.map +1 -0
  24. package/dist/DatePicker/index.d.ts +2 -0
  25. package/dist/DatePicker/utils.d.ts +13 -0
  26. package/dist/DatePicker/utils.js +2 -0
  27. package/dist/DatePicker/utils.js.map +1 -0
  28. package/dist/index.d.ts +1 -0
  29. package/dist/index.js +2 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/mocked_classnames/DatePicker/DateContentHoverContext.d.ts +12 -0
  32. package/dist/mocked_classnames/DatePicker/DateContentHoverContext.js +2 -0
  33. package/dist/mocked_classnames/DatePicker/DateContentHoverContext.js.map +1 -0
  34. package/dist/mocked_classnames/DatePicker/DatePicker.d.ts +8 -0
  35. package/dist/mocked_classnames/DatePicker/DatePicker.js +2 -0
  36. package/dist/mocked_classnames/DatePicker/DatePicker.js.map +1 -0
  37. package/dist/mocked_classnames/DatePicker/DatePicker.module.scss.js +2 -0
  38. package/dist/mocked_classnames/DatePicker/DatePicker.module.scss.js.map +1 -0
  39. package/dist/mocked_classnames/DatePicker/DatePicker.types.d.ts +34 -0
  40. package/dist/mocked_classnames/DatePicker/DatePickerHeader.d.ts +17 -0
  41. package/dist/mocked_classnames/DatePicker/DatePickerHeader.js +2 -0
  42. package/dist/mocked_classnames/DatePicker/DatePickerHeader.js.map +1 -0
  43. package/dist/mocked_classnames/DatePicker/DatePickerHeader.module.scss.js +2 -0
  44. package/dist/mocked_classnames/DatePicker/DatePickerHeader.module.scss.js.map +1 -0
  45. package/dist/mocked_classnames/DatePicker/RangeDayContent.d.ts +3 -0
  46. package/dist/mocked_classnames/DatePicker/RangeDayContent.js +2 -0
  47. package/dist/mocked_classnames/DatePicker/RangeDayContent.js.map +1 -0
  48. package/dist/mocked_classnames/DatePicker/SingleDayContent.d.ts +3 -0
  49. package/dist/mocked_classnames/DatePicker/SingleDayContent.js +2 -0
  50. package/dist/mocked_classnames/DatePicker/SingleDayContent.js.map +1 -0
  51. package/dist/mocked_classnames/DatePicker/datePickerHooks.d.ts +18 -0
  52. package/dist/mocked_classnames/DatePicker/datePickerHooks.js +2 -0
  53. package/dist/mocked_classnames/DatePicker/datePickerHooks.js.map +1 -0
  54. package/dist/mocked_classnames/DatePicker/index.d.ts +2 -0
  55. package/dist/mocked_classnames/DatePicker/utils.d.ts +13 -0
  56. package/dist/mocked_classnames/DatePicker/utils.js +2 -0
  57. package/dist/mocked_classnames/DatePicker/utils.js.map +1 -0
  58. package/dist/mocked_classnames/index.d.ts +1 -0
  59. package/dist/mocked_classnames/index.js +2 -0
  60. package/dist/mocked_classnames/index.js.map +1 -0
  61. package/package.json +77 -0
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ export declare const DayContentHoverContext: React.Context<{
3
+ hover: Date | undefined;
4
+ setHover: (_hover: Date | undefined) => void;
5
+ }>;
6
+ export declare const DayContentHoverProvider: ({ children }: {
7
+ children: React.ReactNode;
8
+ }) => React.JSX.Element;
9
+ export declare const useDayContentHoverContext: () => {
10
+ hover: Date | undefined;
11
+ setHover: (_hover: Date | undefined) => void;
12
+ };
@@ -0,0 +1,2 @@
1
+ import e,{createContext as o,useState as r,useMemo as t,useContext as v}from"react";import{noop as i}from"es-toolkit";const c=o({hover:void 0,setHover:i}),m=({children:o})=>{const[v,i]=r(void 0),m=t((()=>({hover:v,setHover:i})),[v]);return e.createElement(c.Provider,{value:m},o)},n=()=>v(c);export{c as DayContentHoverContext,m as DayContentHoverProvider,n as useDayContentHoverContext};
2
+ //# sourceMappingURL=DateContentHoverContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateContentHoverContext.js","sources":["../../src/DatePicker/DateContentHoverContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo, useState } from \"react\";\nimport { noop } from \"es-toolkit\";\n\nexport const DayContentHoverContext = createContext<{\n hover: Date | undefined;\n setHover: (_hover: Date | undefined) => void;\n}>({ hover: undefined, setHover: noop });\n\nexport const DayContentHoverProvider = ({ children }: { children: React.ReactNode }) => {\n const [hover, setHover] = useState<Date | undefined>(undefined);\n const value = useMemo(() => ({ hover, setHover }), [hover]);\n return <DayContentHoverContext.Provider value={value}>{children}</DayContentHoverContext.Provider>;\n};\n\nexport const useDayContentHoverContext = () => useContext(DayContentHoverContext);\n"],"names":["DayContentHoverContext","createContext","hover","undefined","setHover","noop","DayContentHoverProvider","children","useState","value","useMemo","React","createElement","Provider","useDayContentHoverContext","useContext"],"mappings":"sHAGaA,MAAAA,EAAyBC,EAGnC,CAAEC,WAAOC,EAAWC,SAAUC,IAEpBC,EAA0BA,EAAGC,eACxC,MAAOL,EAAOE,GAAYI,OAA2BL,GAC/CM,EAAQC,GAAQ,KAAO,CAAER,QAAOE,cAAa,CAACF,IACpD,OAAOS,EAAAC,cAACZ,EAAuBa,SAAQ,CAACJ,MAAOA,GAAQF,EAA2C,EAGvFO,EAA4BA,IAAMC,EAAWf"}
@@ -0,0 +1,8 @@
1
+ import { type FC } from "react";
2
+ import { type DatePickerProps } from "./DatePicker.types";
3
+ export declare const DEFAULT_TIME: {
4
+ hours: number;
5
+ minutes: number;
6
+ };
7
+ declare const DatePicker: FC<DatePickerProps>;
8
+ export default DatePicker;
@@ -0,0 +1,2 @@
1
+ import e,{createContext as t,useMemo as a,useState as r,useRef as n,useEffect as o,useCallback as i}from"react";import s from"classnames";import{InternalModifier as d,DayPicker as l}from"react-day-picker";import c from"./DatePicker.module.scss.js";import m from"./DatePickerHeader.js";import{AddToRangeMiddle as u,AddToRangeStart as k,AddToRangeEnd as D,RemoveFromRange as g,HoveredDayExists as y,HalfRangeSelected as P,addToRange as b,addToRangeModifiers as f}from"./utils.js";import{RangeDayContent as h}from"./RangeDayContent.js";import{SingleDayContent as p}from"./SingleDayContent.js";import{DayContentHoverProvider as C,DayContentHoverContext as S}from"./DateContentHoverContext.js";const v={hours:9,minutes:0},R={[d.Outside]:c.datePickerDayOutside,[d.Selected]:c.datePickerDaySelected,[d.Today]:c.datePickerDayToday,[d.Disabled]:c.datePickerDayDisabled,[d.RangeStart]:c.datePickerDayRangeStart,[d.RangeEnd]:c.datePickerDayRangeEnd,[d.RangeMiddle]:c.datePickerDayRangeMiddle,[u]:c.datePickerAddToRangeMiddle,[k]:c.datePickerAddToRangeStart,[D]:c.datePickerAddToRangeEnd,[g]:c.datePickerRemoveFromRange,[y]:c.datePickerHoveredDayExists,[P]:c.datePickerHalfRangeSelected},N=t({}),A=()=>e.createElement(N.Consumer,null,(t=>e.createElement(m,Object.assign({},t)))),E=({className:t,dayClassName:m,selectedDayClassName:u,id:k,"data-testid":D,mode:g="single",date:y,endDate:P,onDateChange:E,firstDayOfWeek:j=0,showWeekNumber:w,isDateDisabled:L,locale:M,nextButtonAriaLabel:O="Next",prevButtonAriaLabel:x="Previous",monthSelectionAriaLabel:H="Month",yearSelectionAriaLabel:T="Year",dropdownsClassName:B,intent:W="to",dialogContainerSelector:q})=>{const F=a((()=>"single"===g?y:{from:y,to:P}),[y,P,g]),[Y,z]=r(y||new Date),G=n(),I=n(),J=n(!1);o((()=>{const e=+I.current!=+P,t=!J.current;+G.current!=+y?t&&y&&z(y):e&&t&&P&&z(P),G.current=y,I.current=P,J.current=!1}),[y,P]);const K=i(((e,t)=>{if(J.current=!0,"range"===g){const e=b(t,F,W);E({date:null==e?void 0:e.from,endDate:null==e?void 0:e.to})}else{const t=e,{hours:a,minutes:r}=y?{hours:y.getHours(),minutes:y.getMinutes()}:v;t.setHours(a,r),E(t)}}),[y,W,g,E,F]),Q=a((()=>({setDisplayMonth:z,locale:M,nextButtonAriaLabel:O,prevButtonAriaLabel:x,monthSelectionAriaLabel:H,yearSelectionAriaLabel:T,dropdownsClassName:B,dialogContainerSelector:q})),[M,H,O,z,x,T,B,q]),U=a((()=>Object.assign(Object.assign({},R),{[d.Selected]:s(R[d.Selected],u)})),[u]),V=a((()=>({months:c.datePickerMonths,head:c.datePickerHead,table:c.datePickerTable,tbody:c.datePickerBody,day:s(c.datePickerDay,m)})),[m]);return e.createElement("div",{id:k,className:s(c.datePicker,{[c.withWeekNumber]:w},t),"data-testid":D,"data-vibe":"DatePicker"},e.createElement(C,null,e.createElement(N.Provider,{value:Q},e.createElement(S.Consumer,null,(({hover:t})=>{const a=f(t,F,W);return e.createElement(l,{fixedWeeks:!0,showOutsideDays:!0,showWeekNumber:w,mode:g,required:!0,weekStartsOn:j,disabled:L,selected:F,onSelect:K,month:Y,onMonthChange:z,components:{Caption:A,DayContent:"single"===g?p:h},classNames:V,modifiers:a,modifiersClassNames:U,locale:M})})))))};export{v as DEFAULT_TIME,E as default};
2
+ //# sourceMappingURL=DatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.js","sources":["../../src/DatePicker/DatePicker.tsx"],"sourcesContent":["import React, { type FC, createContext, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport cx from \"classnames\";\nimport { type DateRange, DayPicker as ReactDatePicker, InternalModifier as DayModifier } from \"react-day-picker\";\nimport styles from \"./DatePicker.module.scss\";\nimport DatePickerHeader, { type DatePickerHeaderProps } from \"./DatePickerHeader\";\nimport { type DatePickerProps, type DatePickerRange } from \"./DatePicker.types\";\nimport {\n AddToRangeEnd,\n AddToRangeMiddle,\n AddToRangeStart,\n HalfRangeSelected,\n HoveredDayExists,\n RemoveFromRange,\n addToRange,\n addToRangeModifiers\n} from \"./utils\";\nimport { RangeDayContent } from \"./RangeDayContent\";\nimport { SingleDayContent } from \"./SingleDayContent\";\nimport { DayContentHoverContext, DayContentHoverProvider } from \"./DateContentHoverContext\";\n\nexport const DEFAULT_TIME = { hours: 9, minutes: 0 };\n\nconst MODIFIERS_CLASS_NAMES = {\n [DayModifier.Outside]: styles.datePickerDayOutside,\n [DayModifier.Selected]: styles.datePickerDaySelected,\n [DayModifier.Today]: styles.datePickerDayToday,\n [DayModifier.Disabled]: styles.datePickerDayDisabled,\n [DayModifier.RangeStart]: styles.datePickerDayRangeStart,\n [DayModifier.RangeEnd]: styles.datePickerDayRangeEnd,\n [DayModifier.RangeMiddle]: styles.datePickerDayRangeMiddle,\n [AddToRangeMiddle]: styles.datePickerAddToRangeMiddle,\n [AddToRangeStart]: styles.datePickerAddToRangeStart,\n [AddToRangeEnd]: styles.datePickerAddToRangeEnd,\n [RemoveFromRange]: styles.datePickerRemoveFromRange,\n [HoveredDayExists]: styles.datePickerHoveredDayExists,\n [HalfRangeSelected]: styles.datePickerHalfRangeSelected\n};\n\nconst DatePickerHeaderContext = createContext<DatePickerHeaderProps>({} as DatePickerHeaderProps);\n\nconst Caption = () => (\n <DatePickerHeaderContext.Consumer>{props => <DatePickerHeader {...props} />}</DatePickerHeaderContext.Consumer>\n);\n\nconst DatePicker: FC<DatePickerProps> = ({\n className,\n dayClassName,\n selectedDayClassName,\n id,\n \"data-testid\": dataTestId,\n mode = \"single\",\n date,\n endDate,\n onDateChange,\n firstDayOfWeek = 0,\n showWeekNumber,\n isDateDisabled,\n locale,\n nextButtonAriaLabel = \"Next\",\n prevButtonAriaLabel = \"Previous\",\n monthSelectionAriaLabel = \"Month\",\n yearSelectionAriaLabel = \"Year\",\n dropdownsClassName,\n intent = \"to\",\n dialogContainerSelector\n}) => {\n const selected = useMemo(() => (mode === \"single\" ? date : { from: date, to: endDate }), [date, endDate, mode]);\n const [displayMonth, setDisplayMonth] = useState(date || new Date());\n\n const prevDateRef = useRef<Date | undefined>();\n const prevEndDateRef = useRef<Date | undefined>();\n const lastChangeByInnerSelection = useRef(false);\n useEffect(() => {\n const dateChanged = +prevDateRef.current !== +date;\n const endDateChanged = +prevEndDateRef.current !== +endDate;\n const shouldSetDisplayMonth = !lastChangeByInnerSelection.current;\n\n if (dateChanged) {\n shouldSetDisplayMonth && date && setDisplayMonth(date);\n } else if (endDateChanged) {\n shouldSetDisplayMonth && endDate && setDisplayMonth(endDate);\n }\n\n prevDateRef.current = date;\n prevEndDateRef.current = endDate;\n lastChangeByInnerSelection.current = false;\n }, [date, endDate]);\n\n const onPickerDateChange = useCallback(\n (newValue: Date | DateRange, selectedDay: Date) => {\n lastChangeByInnerSelection.current = true;\n\n if (mode === \"range\") {\n const newRange = addToRange(selectedDay, selected as DateRange, intent);\n (onDateChange as (range: DatePickerRange) => void)({ date: newRange?.from, endDate: newRange?.to });\n } else {\n const newDate = newValue as Date;\n const { hours, minutes } = date ? { hours: date.getHours(), minutes: date.getMinutes() } : DEFAULT_TIME;\n newDate.setHours(hours, minutes);\n (onDateChange as (date: Date | undefined) => void)(newDate);\n }\n },\n [date, intent, mode, onDateChange, selected]\n );\n\n const DatePickerHeaderContextValue = useMemo<DatePickerHeaderProps>(\n () => ({\n setDisplayMonth,\n locale,\n nextButtonAriaLabel,\n prevButtonAriaLabel,\n monthSelectionAriaLabel,\n yearSelectionAriaLabel,\n dropdownsClassName,\n dialogContainerSelector\n }),\n [\n locale,\n monthSelectionAriaLabel,\n nextButtonAriaLabel,\n setDisplayMonth,\n prevButtonAriaLabel,\n yearSelectionAriaLabel,\n dropdownsClassName,\n dialogContainerSelector\n ]\n );\n\n const modifiersClassNames = useMemo(\n () => ({\n ...MODIFIERS_CLASS_NAMES,\n [DayModifier.Selected]: cx(MODIFIERS_CLASS_NAMES[DayModifier.Selected], selectedDayClassName)\n }),\n [selectedDayClassName]\n );\n\n const classNames = useMemo(\n () => ({\n months: styles.datePickerMonths,\n head: styles.datePickerHead,\n table: styles.datePickerTable,\n tbody: styles.datePickerBody,\n day: cx(styles.datePickerDay, dayClassName)\n }),\n [dayClassName]\n );\n\n return (\n <div\n id={id}\n className={cx(styles.datePicker, { [styles.withWeekNumber]: showWeekNumber }, className)}\n data-testid={dataTestId}\n data-vibe=\"DatePicker\"\n >\n <DayContentHoverProvider>\n <DatePickerHeaderContext.Provider value={DatePickerHeaderContextValue}>\n <DayContentHoverContext.Consumer>\n {({ hover }) => {\n const modifiers = addToRangeModifiers(hover, selected as DateRange, intent);\n return (\n <ReactDatePicker\n fixedWeeks\n showOutsideDays\n showWeekNumber={showWeekNumber}\n mode={mode as \"single\"} // cast to avoid type errors from ReactDatePicker\n required\n weekStartsOn={firstDayOfWeek}\n disabled={isDateDisabled}\n selected={selected as Date} // cast to avoid type errors from ReactDatePicker\n onSelect={onPickerDateChange}\n month={displayMonth}\n onMonthChange={setDisplayMonth}\n components={{ Caption, DayContent: mode === \"single\" ? SingleDayContent : RangeDayContent }}\n classNames={classNames}\n modifiers={modifiers}\n modifiersClassNames={modifiersClassNames}\n locale={locale}\n />\n );\n }}\n </DayContentHoverContext.Consumer>\n </DatePickerHeaderContext.Provider>\n </DayContentHoverProvider>\n </div>\n );\n};\n\nexport default DatePicker;\n"],"names":["DEFAULT_TIME","hours","minutes","MODIFIERS_CLASS_NAMES","DayModifier","Outside","styles","datePickerDayOutside","Selected","datePickerDaySelected","Today","datePickerDayToday","Disabled","datePickerDayDisabled","RangeStart","datePickerDayRangeStart","RangeEnd","datePickerDayRangeEnd","RangeMiddle","datePickerDayRangeMiddle","AddToRangeMiddle","datePickerAddToRangeMiddle","AddToRangeStart","datePickerAddToRangeStart","AddToRangeEnd","datePickerAddToRangeEnd","RemoveFromRange","datePickerRemoveFromRange","HoveredDayExists","datePickerHoveredDayExists","HalfRangeSelected","datePickerHalfRangeSelected","DatePickerHeaderContext","createContext","Caption","React","createElement","Consumer","props","DatePickerHeader","DatePicker","className","dayClassName","selectedDayClassName","id","dataTestId","mode","date","endDate","onDateChange","firstDayOfWeek","showWeekNumber","isDateDisabled","locale","nextButtonAriaLabel","prevButtonAriaLabel","monthSelectionAriaLabel","yearSelectionAriaLabel","dropdownsClassName","intent","dialogContainerSelector","selected","useMemo","from","to","displayMonth","setDisplayMonth","useState","Date","prevDateRef","useRef","prevEndDateRef","lastChangeByInnerSelection","useEffect","endDateChanged","current","shouldSetDisplayMonth","onPickerDateChange","useCallback","newValue","selectedDay","newRange","addToRange","newDate","getHours","getMinutes","setHours","DatePickerHeaderContextValue","modifiersClassNames","Object","assign","cx","classNames","months","datePickerMonths","head","datePickerHead","table","datePickerTable","tbody","datePickerBody","day","datePickerDay","datePicker","withWeekNumber","DayContentHoverProvider","Provider","value","DayContentHoverContext","hover","modifiers","addToRangeModifiers","ReactDatePicker","fixedWeeks","showOutsideDays","required","weekStartsOn","disabled","onSelect","month","onMonthChange","components","DayContent","SingleDayContent","RangeDayContent"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var e={datePicker:"datePicker_bf75fc73ed",datePickerMonths:"datePickerMonths_29f4b5a057",withWeekNumber:"withWeekNumber_a5ad281a86",datePickerHead:"datePickerHead_a341e64e0c",datePickerBody:"datePickerBody_a341e64e0c",datePickerTable:"datePickerTable_9b954bb3d0",datePickerDay:"datePickerDay_86a4b03509",datePickerDayContent:"datePickerDayContent_9f006d2c0f",datePickerDayDisabled:"datePickerDayDisabled_af3b838d0a",datePickerAddToRangeStart:"datePickerAddToRangeStart_b69e898f0e",datePickerAddToRangeEnd:"datePickerAddToRangeEnd_ac6f59c328",datePickerAddToRangeMiddle:"datePickerAddToRangeMiddle_98c2d0392a",datePickerDayRangeStart:"datePickerDayRangeStart_1c67b236e9",datePickerDayRangeEnd:"datePickerDayRangeEnd_8e1d884565",datePickerDayOutside:"datePickerDayOutside_d765fcfcb4",datePickerDaySelected:"datePickerDaySelected_8e1d884565",datePickerDayRangeMiddle:"datePickerDayRangeMiddle_04f0cd241f",datePickerRemoveFromRange:"datePickerRemoveFromRange_621ddd6b64",datePickerHalfRangeSelected:"datePickerHalfRangeSelected_17c06b983e"};!function(e){const a="s_id-601bce29f4a5_4_0_0";if("undefined"!=typeof document){const d=document.head||document.getElementsByTagName("head")[0];if(d.querySelector("#"+a))return;const r=document.createElement("style");r.id=a,d.firstChild?d.insertBefore(r,d.firstChild):d.appendChild(r),r.appendChild(document.createTextNode(e))}else globalThis.injectedStyles&&(globalThis.injectedStyles[a]=e)}('/* stylelint-disable */\n/* stylelint-enable */\n.datePicker_bf75fc73ed {\n --day-picker-header-height: 34px;\n --day-picker-content-height: 234px;\n --day-picker-day-width: 30px;\n --day-picker-day-height: 30px;\n --day-picker-days-horizontal-gap: 4px;\n --day-picker-days-vertical-gap: 2px;\n --day-picker-day-change-range: var(--primary-surface-color);\n}\n.datePicker_bf75fc73ed .datePickerMonths_29f4b5a057 {\n display: flex;\n flex-direction: row;\n gap: var(--space-16);\n align-items: flex-start;\n}\n.datePicker_bf75fc73ed.withWeekNumber_a5ad281a86 {\n --day-picker-days-horizontal-gap: 2px;\n width: 284px;\n margin: 0;\n}\n.datePicker_bf75fc73ed.withWeekNumber_a5ad281a86 .datePickerHead_a341e64e0c td:first-child {\n width: var(--day-picker-day-width);\n border-start-start-radius: var(--border-radius-medium);\n border-start-end-radius: var(--border-radius-medium);\n background-color: var(--primary-background-hover-color);\n}\n.datePicker_bf75fc73ed.withWeekNumber_a5ad281a86 .datePickerHead_a341e64e0c td:first-child::after {\n color: var(--secondary-text-color);\n font: var(--font-text2-normal);\n display: flex;\n justify-content: center;\n content: "No.";\n}\n.datePicker_bf75fc73ed.withWeekNumber_a5ad281a86 .datePickerBody_a341e64e0c td:first-child {\n background-color: var(--primary-background-hover-color);\n}\n.datePicker_bf75fc73ed.withWeekNumber_a5ad281a86 .datePickerBody_a341e64e0c tr:last-child td:first-child {\n border-end-start-radius: var(--border-radius-medium);\n border-end-end-radius: var(--border-radius-medium);\n}\n.datePicker_bf75fc73ed .datePickerTable_9b954bb3d0 {\n margin-top: var(--space-8);\n border-collapse: collapse;\n height: var(--day-picker-content-height);\n}\n.datePicker_bf75fc73ed .datePickerHead_a341e64e0c th {\n color: var(--secondary-text-color);\n font: var(--font-text2-normal);\n padding-block: var(--space-2);\n text-align: center;\n height: var(--day-picker-day-height);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c td {\n color: var(--secondary-text-color);\n font: var(--font-text2-normal);\n text-align: center;\n padding: 0;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509 {\n color: var(--primary-text-color);\n font: var(--font-text2-normal);\n width: var(--day-picker-day-width);\n height: var(--day-picker-day-height);\n background: none;\n border: none;\n cursor: pointer;\n border-radius: var(--border-radius-small);\n margin: var(--day-picker-days-vertical-gap) var(--day-picker-days-horizontal-gap);\n padding: 0;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509 .datePickerDayContent_9f006d2c0f {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n border-radius: var(--border-radius-small);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509:focus-visible {\n outline: none;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509:focus-visible .datePickerDayContent_9f006d2c0f {\n outline: 2px solid var(--primary-color);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerDayDisabled_af3b838d0a {\n color: var(--disabled-text-color);\n cursor: not-allowed;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509:not(.datePickerDayDisabled_af3b838d0a):not(.datePickerAddToRangeStart_b69e898f0e):not(.datePickerAddToRangeEnd_ac6f59c328):not(.datePickerAddToRangeMiddle_98c2d0392a):not(.datePickerDayRangeStart_1c67b236e9):not(.datePickerDayRangeEnd_8e1d884565) .datePickerDayContent_9f006d2c0f:hover {\n background: var(--primary-background-hover-color);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerDayOutside_d765fcfcb4 {\n color: var(--disabled-text-color);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerDaySelected_8e1d884565:not(.datePickerDayRangeMiddle_04f0cd241f):not(.datePickerRemoveFromRange_621ddd6b64) {\n background: var(--primary-color);\n color: var(--text-color-on-primary);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerDayRangeStart_1c67b236e9:not(.datePickerDayRangeEnd_8e1d884565):not(.datePickerRemoveFromRange_621ddd6b64), .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerDayRangeEnd_8e1d884565:not(.datePickerDayRangeStart_1c67b236e9):not(.datePickerRemoveFromRange_621ddd6b64) {\n background: var(--primary-color);\n width: calc(var(--day-picker-day-width) + var(--day-picker-days-horizontal-gap));\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerDayRangeStart_1c67b236e9.datePickerRemoveFromRange_621ddd6b64, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerDayRangeEnd_8e1d884565.datePickerRemoveFromRange_621ddd6b64 {\n background: var(--primary-color);\n color: var(--text-color-on-primary);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerDayRangeStart_1c67b236e9.datePickerRemoveFromRange_621ddd6b64:not(.datePickerDayRangeEnd_8e1d884565), .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerDayRangeEnd_8e1d884565.datePickerRemoveFromRange_621ddd6b64:not(.datePickerDayRangeStart_1c67b236e9) {\n width: calc(var(--day-picker-day-width) + var(--day-picker-days-horizontal-gap));\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerAddToRangeStart_b69e898f0e, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerDayRangeStart_1c67b236e9:not(.datePickerDayRangeEnd_8e1d884565) {\n margin-inline-end: 0;\n border-start-end-radius: 0;\n border-end-end-radius: 0;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerAddToRangeEnd_ac6f59c328, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerDayRangeEnd_8e1d884565:not(.datePickerDayRangeStart_1c67b236e9) {\n margin-inline-start: 0;\n border-start-start-radius: 0;\n border-end-start-radius: 0;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerAddToRangeStart_b69e898f0e, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerAddToRangeEnd_ac6f59c328, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerAddToRangeMiddle_98c2d0392a {\n margin: var(--day-picker-days-vertical-gap) 0;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerAddToRangeStart_b69e898f0e:not(.datePickerDayRangeStart_1c67b236e9):not(.datePickerDayRangeEnd_8e1d884565), .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerAddToRangeEnd_ac6f59c328:not(.datePickerDayRangeStart_1c67b236e9):not(.datePickerDayRangeEnd_8e1d884565), .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerAddToRangeMiddle_98c2d0392a, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerDayRangeMiddle_04f0cd241f:not(.datePickerAddToRangeStart_b69e898f0e):not(.datePickerAddToRangeEnd_ac6f59c328) {\n background-color: var(--primary-selected-color);\n border: var(--day-picker-days-horizontal-gap) var(--border-style) var(--primary-selected-color);\n border-top: none;\n border-bottom: none;\n width: calc(var(--day-picker-day-width) + 2 * var(--day-picker-days-horizontal-gap));\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerAddToRangeMiddle_98c2d0392a, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerDayRangeMiddle_04f0cd241f:not(.datePickerAddToRangeStart_b69e898f0e):not(.datePickerAddToRangeEnd_ac6f59c328) {\n background: var(--primary-selected-color);\n margin: var(--day-picker-days-vertical-gap) 0;\n border-radius: 0;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerRemoveFromRange_621ddd6b64:not(.datePickerDayRangeStart_1c67b236e9):not(.datePickerDayRangeEnd_8e1d884565), .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerAddToRangeStart_b69e898f0e:not(.datePickerDayRangeMiddle_04f0cd241f):not(.datePickerDayRangeEnd_8e1d884565), .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerAddToRangeEnd_ac6f59c328:not(.datePickerDayRangeMiddle_04f0cd241f):not(.datePickerDayRangeStart_1c67b236e9), .datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDay_86a4b03509.datePickerAddToRangeMiddle_98c2d0392a {\n background: var(--day-picker-day-change-range);\n border-color: var(--day-picker-day-change-range);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:first-child .datePickerDay_86a4b03509.datePickerDayRangeMiddle_04f0cd241f, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:first-child .datePickerDay_86a4b03509.datePickerAddToRangeStart_b69e898f0e:not(.datePickerDayRangeStart_1c67b236e9):not(.datePickerDayRangeEnd_8e1d884565), .datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:first-child .datePickerDay_86a4b03509.datePickerAddToRangeMiddle_98c2d0392a, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:first-child .datePickerDay_86a4b03509.datePickerAddToRangeEnd_ac6f59c328:not(.datePickerDayRangeStart_1c67b236e9):not(.datePickerDayRangeEnd_8e1d884565) {\n border: none;\n width: calc(var(--day-picker-day-width) + var(--day-picker-days-horizontal-gap));\n margin-inline-start: var(--day-picker-days-horizontal-gap);\n border-inline-end: var(--day-picker-days-horizontal-gap) solid var(--primary-selected-color);\n border-start-start-radius: var(--border-radius-small);\n border-end-start-radius: var(--border-radius-small);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:first-child .datePickerDay_86a4b03509.datePickerRemoveFromRange_621ddd6b64 {\n border-color: var(--day-picker-day-change-range);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:first-child .datePickerDay_86a4b03509.datePickerAddToRangeEnd_ac6f59c328, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:first-child .datePickerDay_86a4b03509.datePickerDayRangeEnd_8e1d884565:not(.datePickerDayRangeStart_1c67b236e9) {\n margin-inline-end: 0;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:last-child .datePickerDay_86a4b03509.datePickerDayRangeMiddle_04f0cd241f, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:last-child .datePickerDay_86a4b03509.datePickerAddToRangeStart_b69e898f0e:not(.datePickerDayRangeStart_1c67b236e9):not(.datePickerDayRangeEnd_8e1d884565), .datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:last-child .datePickerDay_86a4b03509.datePickerAddToRangeMiddle_98c2d0392a, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:last-child .datePickerDay_86a4b03509.datePickerAddToRangeEnd_ac6f59c328:not(.datePickerDayRangeStart_1c67b236e9):not(.datePickerDayRangeEnd_8e1d884565) {\n border: none;\n width: calc(var(--day-picker-day-width) + var(--day-picker-days-horizontal-gap));\n margin-inline-end: var(--day-picker-days-horizontal-gap);\n border-inline-start: var(--day-picker-days-horizontal-gap) solid var(--primary-selected-color);\n border-start-end-radius: var(--border-radius-small);\n border-end-end-radius: var(--border-radius-small);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:last-child .datePickerDay_86a4b03509.datePickerRemoveFromRange_621ddd6b64 {\n border-color: var(--day-picker-day-change-range);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:last-child .datePickerDay_86a4b03509.datePickerAddToRangeStart_b69e898f0e, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:last-child .datePickerDay_86a4b03509.datePickerDayRangeStart_1c67b236e9:not(.datePickerDayRangeEnd_8e1d884565) {\n margin-inline-start: 0;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:first-child .datePickerDay_86a4b03509.datePickerAddToRangeStart_b69e898f0e:not(.datePickerDayRangeMiddle_04f0cd241f), .datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:first-child .datePickerDay_86a4b03509.datePickerAddToRangeMiddle_98c2d0392a, .datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:first-child .datePickerDay_86a4b03509.datePickerAddToRangeEnd_ac6f59c328:not(.datePickerDayRangeMiddle_04f0cd241f),\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:last-child .datePickerDay_86a4b03509.datePickerAddToRangeStart_b69e898f0e:not(.datePickerDayRangeMiddle_04f0cd241f),\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:last-child .datePickerDay_86a4b03509.datePickerAddToRangeMiddle_98c2d0392a,\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:last-child .datePickerDay_86a4b03509.datePickerAddToRangeEnd_ac6f59c328:not(.datePickerDayRangeMiddle_04f0cd241f) {\n border-color: var(--day-picker-day-change-range);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:first-child .datePickerDay_86a4b03509.datePickerDaySelected_8e1d884565.datePickerDayRangeEnd_8e1d884565.datePickerAddToRangeStart_b69e898f0e,\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:last-child .datePickerDay_86a4b03509.datePickerDaySelected_8e1d884565.datePickerDayRangeEnd_8e1d884565.datePickerAddToRangeStart_b69e898f0e {\n border-inline-start-width: 0;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:first-child .datePickerDay_86a4b03509.datePickerDaySelected_8e1d884565.datePickerDayRangeStart_1c67b236e9.datePickerAddToRangeEnd_ac6f59c328,\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c tr td:last-child .datePickerDay_86a4b03509.datePickerDaySelected_8e1d884565.datePickerDayRangeStart_1c67b236e9.datePickerAddToRangeEnd_ac6f59c328 {\n border-inline-end-width: 0;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDaySelected_8e1d884565.datePickerDayRangeEnd_8e1d884565.datePickerAddToRangeStart_b69e898f0e {\n border-radius: var(--border-radius-small) !important;\n border-color: var(--primary-color) !important;\n background-color: var(--primary-color) !important;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDaySelected_8e1d884565.datePickerDayRangeEnd_8e1d884565.datePickerAddToRangeStart_b69e898f0e:not(.datePickerHalfRangeSelected_17c06b983e) {\n margin-inline-start: calc(var(--day-picker-days-horizontal-gap) * -1);\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDaySelected_8e1d884565.datePickerDayRangeStart_1c67b236e9.datePickerAddToRangeEnd_ac6f59c328 {\n border-radius: var(--border-radius-small) !important;\n border-color: var(--primary-color) !important;\n background-color: var(--primary-color) !important;\n}\n.datePicker_bf75fc73ed .datePickerBody_a341e64e0c .datePickerDaySelected_8e1d884565.datePickerDayRangeStart_1c67b236e9.datePickerAddToRangeEnd_ac6f59c328:not(.datePickerHalfRangeSelected_17c06b983e) {\n margin-inline-end: calc(var(--day-picker-days-horizontal-gap) * -1);\n}');export{e as default};
2
+ //# sourceMappingURL=DatePicker.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import type { VibeComponentProps } from "@vibe/shared";
2
+ import type { Intent } from "./utils";
3
+ interface DatePickerBaseProps extends VibeComponentProps {
4
+ mode?: "single" | "range";
5
+ date: Date | undefined;
6
+ endDate?: Date | undefined;
7
+ firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
8
+ showWeekNumber?: boolean;
9
+ isDateDisabled?: (date: Date) => boolean;
10
+ locale?: Locale;
11
+ monthSelectionAriaLabel?: string;
12
+ yearSelectionAriaLabel?: string;
13
+ nextButtonAriaLabel?: string;
14
+ prevButtonAriaLabel?: string;
15
+ dayClassName?: string;
16
+ selectedDayClassName?: string;
17
+ dropdownsClassName?: string;
18
+ intent?: Intent;
19
+ dialogContainerSelector?: string;
20
+ }
21
+ interface DatePickerSingleProps extends DatePickerBaseProps {
22
+ mode?: "single";
23
+ onDateChange: (date: Date | undefined) => void;
24
+ }
25
+ export type DatePickerRange = {
26
+ date: Date | undefined;
27
+ endDate: Date | undefined;
28
+ };
29
+ interface DatePickerRangeProps extends DatePickerBaseProps {
30
+ mode: "range";
31
+ onDateChange: (range: DatePickerRange) => void;
32
+ }
33
+ export type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;
34
+ export {};
@@ -0,0 +1,17 @@
1
+ import { type FC } from "react";
2
+ import { type Locale } from "date-fns";
3
+ export interface DatePickerHeaderProps {
4
+ setDisplayMonth: (displayMonth: Date) => void;
5
+ monthSelectionAriaLabel?: string;
6
+ yearSelectionAriaLabel?: string;
7
+ nextButtonAriaLabel?: string;
8
+ prevButtonAriaLabel?: string;
9
+ locale?: Locale;
10
+ className?: string;
11
+ dropdownsClassName?: string;
12
+ dialogContainerSelector?: string;
13
+ }
14
+ declare const DatePickerHeader: FC<DatePickerHeaderProps>;
15
+ export default DatePickerHeader;
16
+ export declare function getYearButtonLabel(displayMonth: Date, locale: Locale): string;
17
+ export declare function getMonthButtonLabel(displayMonth: Date, locale: Locale): string;
@@ -0,0 +1,2 @@
1
+ import e,{useCallback as a,useMemo as t}from"react";import o from"classnames";import{useDayPicker as r,useNavigation as l}from"react-day-picker";import{IconButton as n}from"@vibe/icon-button";import{Flex as s}from"@vibe/layout";import{Dropdown as i}from"@vibe/dropdown";import{DropdownChevronLeft as m,DropdownChevronRight as c}from"@vibe/icons";import u from"./DatePickerHeader.module.scss.js";import{useMonthsOptionItems as p,useYearsOptionItems as d}from"./datePickerHooks.js";import{format as b}from"date-fns";const v=({setDisplayMonth:b,monthSelectionAriaLabel:v,yearSelectionAriaLabel:y,nextButtonAriaLabel:g,prevButtonAriaLabel:k,locale:M,className:D})=>{const{month:w}=r(),{goToMonth:E,nextMonth:j,previousMonth:B}=l(),C=a((()=>E(j)),[E,j]),N=a((()=>E(B)),[E,B]),z=p({locale:M}),A=d({locale:M}),L=t((()=>z.map((e=>Object.assign(Object.assign({},e),{value:e.id})))),[z]),O=t((()=>A.map((e=>Object.assign(Object.assign({},e),{value:e.id})))),[A]),x=t((()=>h(w,M)),[w,M]),H=t((()=>f(w,M)),[w,M]),P=a((e=>{const a=e.value,t=new Date(w);t.setMonth(+a),b(t)}),[w,b]),F=a((e=>{const a=e.value,t=new Date(w);t.setFullYear(+a),b(t)}),[w,b]),R=t((()=>L.find((e=>e.value===""+w.getMonth()))),[L,w]),S=t((()=>O.find((e=>e.value===""+w.getFullYear()))),[O,w]);return e.createElement("div",{className:o(u.datePickerHeader,D)},e.createElement(s,{gap:"small"},e.createElement(i,{className:u.monthButtonDropdown,"aria-label":v,options:L,value:R,onChange:P,menuWrapperClassName:u.monthButtonDropdown,size:"small",valueRenderer:e=>x,searchable:!1,clearable:!1,borderless:!0}),e.createElement(i,{className:u.yearButtonDropdown,"aria-label":y,options:O,value:S,onChange:F,menuWrapperClassName:u.yearButtonDropdown,size:"small",valueRenderer:e=>H,searchable:!1,clearable:!1,borderless:!0})),e.createElement(s,null,e.createElement(n,{kind:"tertiary",size:"small","aria-label":k,onClick:N,icon:m}),e.createElement(n,{kind:"tertiary",size:"small","aria-label":g,onClick:C,icon:c})))};function f(e,a){return b(e,"yyyy",{locale:a})}function h(e,a){return b(e,"MMM",{locale:a})}export{v as default,h as getMonthButtonLabel,f as getYearButtonLabel};
2
+ //# sourceMappingURL=DatePickerHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePickerHeader.js","sources":["../../src/DatePicker/DatePickerHeader.tsx"],"sourcesContent":["import React, { type FC, useCallback, useMemo } from \"react\";\nimport cx from \"classnames\";\nimport { useDayPicker, useNavigation } from \"react-day-picker\";\nimport { IconButton } from \"@vibe/icon-button\";\nimport { Flex } from \"@vibe/layout\";\nimport { Dropdown } from \"@vibe/dropdown\";\nimport { DropdownChevronRight, DropdownChevronLeft } from \"@vibe/icons\";\nimport styles from \"./DatePickerHeader.module.scss\";\nimport { useMonthsOptionItems, useYearsOptionItems, type DatePickerDropdownItem } from \"./datePickerHooks\";\nimport { format, type Locale } from \"date-fns\";\n\nexport interface DatePickerHeaderProps {\n setDisplayMonth: (displayMonth: Date) => void;\n monthSelectionAriaLabel?: string;\n yearSelectionAriaLabel?: string;\n nextButtonAriaLabel?: string;\n prevButtonAriaLabel?: string;\n locale?: Locale;\n className?: string;\n dropdownsClassName?: string;\n dialogContainerSelector?: string;\n}\n\nconst DatePickerHeader: FC<DatePickerHeaderProps> = ({\n setDisplayMonth,\n monthSelectionAriaLabel,\n yearSelectionAriaLabel,\n nextButtonAriaLabel,\n prevButtonAriaLabel,\n locale,\n className,\n dialogContainerSelector: _dialogContainerSelector\n}) => {\n const { month: displayMonth } = useDayPicker();\n const { goToMonth, nextMonth, previousMonth } = useNavigation();\n const goToNextMonth = useCallback(() => goToMonth(nextMonth), [goToMonth, nextMonth]);\n const goToPreviousMonth = useCallback(() => goToMonth(previousMonth), [goToMonth, previousMonth]);\n const monthsData = useMonthsOptionItems({ locale });\n const yearsData = useYearsOptionItems({ locale });\n\n const months = useMemo(() => monthsData.map(item => ({ ...item, value: item.id })), [monthsData]);\n const years = useMemo(() => yearsData.map(item => ({ ...item, value: item.id })), [yearsData]);\n const monthButtonLabel = useMemo(() => getMonthButtonLabel(displayMonth, locale), [displayMonth, locale]);\n const yearsButtonLabel = useMemo(() => getYearButtonLabel(displayMonth, locale), [displayMonth, locale]);\n\n const onMonthSelect = useCallback(\n (option: DatePickerDropdownItem) => {\n const month = option.value;\n const date = new Date(displayMonth);\n date.setMonth(+month);\n setDisplayMonth(date);\n },\n [displayMonth, setDisplayMonth]\n );\n\n const onYearSelect = useCallback(\n (option: DatePickerDropdownItem) => {\n const year = option.value;\n const date = new Date(displayMonth);\n date.setFullYear(+year);\n setDisplayMonth(date);\n },\n [displayMonth, setDisplayMonth]\n );\n\n const selectedMonth = useMemo(\n () => months.find(month => month.value === displayMonth.getMonth().toString()),\n [months, displayMonth]\n );\n const selectedYear = useMemo(\n () => years.find(year => year.value === displayMonth.getFullYear().toString()),\n [years, displayMonth]\n );\n\n return (\n <div className={cx(styles.datePickerHeader, className)}>\n <Flex gap=\"small\">\n <Dropdown\n className={styles.monthButtonDropdown}\n aria-label={monthSelectionAriaLabel}\n options={months}\n value={selectedMonth}\n onChange={onMonthSelect}\n menuWrapperClassName={styles.monthButtonDropdown}\n size=\"small\"\n valueRenderer={(_option: DatePickerDropdownItem) => monthButtonLabel}\n searchable={false}\n clearable={false}\n borderless\n />\n <Dropdown\n className={styles.yearButtonDropdown}\n aria-label={yearSelectionAriaLabel}\n options={years}\n value={selectedYear}\n onChange={onYearSelect}\n menuWrapperClassName={styles.yearButtonDropdown}\n size=\"small\"\n valueRenderer={(_option: DatePickerDropdownItem) => yearsButtonLabel}\n searchable={false}\n clearable={false}\n borderless\n />\n </Flex>\n <Flex>\n <IconButton\n kind=\"tertiary\"\n size=\"small\"\n aria-label={prevButtonAriaLabel}\n onClick={goToPreviousMonth}\n icon={DropdownChevronLeft}\n />\n <IconButton\n kind=\"tertiary\"\n size=\"small\"\n aria-label={nextButtonAriaLabel}\n onClick={goToNextMonth}\n icon={DropdownChevronRight}\n />\n </Flex>\n </div>\n );\n};\n\nexport default DatePickerHeader;\n\nexport function getYearButtonLabel(displayMonth: Date, locale: Locale) {\n return format(displayMonth, \"yyyy\", { locale });\n}\n\nexport function getMonthButtonLabel(displayMonth: Date, locale: Locale) {\n return format(displayMonth, \"MMM\", { locale });\n}\n"],"names":["DatePickerHeader","setDisplayMonth","monthSelectionAriaLabel","yearSelectionAriaLabel","nextButtonAriaLabel","prevButtonAriaLabel","locale","className","month","displayMonth","useDayPicker","goToMonth","nextMonth","previousMonth","useNavigation","goToNextMonth","useCallback","goToPreviousMonth","monthsData","useMonthsOptionItems","yearsData","useYearsOptionItems","months","useMemo","map","item","Object","assign","value","id","years","monthButtonLabel","getMonthButtonLabel","yearsButtonLabel","getYearButtonLabel","onMonthSelect","option","date","Date","setMonth","onYearSelect","year","setFullYear","selectedMonth","find","getMonth","selectedYear","getFullYear","React","createElement","cx","styles","datePickerHeader","Flex","gap","Dropdown","monthButtonDropdown","options","onChange","menuWrapperClassName","size","valueRenderer","_option","searchable","clearable","borderless","yearButtonDropdown","IconButton","kind","onClick","icon","DropdownChevronLeft","DropdownChevronRight","format"],"mappings":"kgBAuBMA,MAAAA,EAA8CA,EAClDC,kBACAC,0BACAC,yBACAC,sBACAC,sBACAC,SACAC,gBAGA,MAAQC,MAAOC,GAAiBC,KAC1BC,UAAEA,EAASC,UAAEA,EAASC,cAAEA,GAAkBC,IAC1CC,EAAgBC,GAAY,IAAML,EAAUC,IAAY,CAACD,EAAWC,IACpEK,EAAoBD,GAAY,IAAML,EAAUE,IAAgB,CAACF,EAAWE,IAC5EK,EAAaC,EAAqB,CAAEb,WACpCc,EAAYC,EAAoB,CAAEf,WAElCgB,EAASC,GAAQ,IAAML,EAAWM,KAAIC,GAAcC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAF,GAAM,CAAAG,MAAOH,EAAKI,QAAQ,CAACX,IAC/EY,EAAQP,GAAQ,IAAMH,EAAUI,KAAIC,GAAcC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAF,GAAM,CAAAG,MAAOH,EAAKI,QAAQ,CAACT,IAC7EW,EAAmBR,GAAQ,IAAMS,EAAoBvB,EAAcH,IAAS,CAACG,EAAcH,IAC3F2B,EAAmBV,GAAQ,IAAMW,EAAmBzB,EAAcH,IAAS,CAACG,EAAcH,IAE1F6B,EAAgBnB,GACnBoB,IACC,MAAM5B,EAAQ4B,EAAOR,MACfS,EAAO,IAAIC,KAAK7B,GACtB4B,EAAKE,UAAU/B,GACfP,EAAgBoC,EAAK,GAEvB,CAAC5B,EAAcR,IAGXuC,EAAexB,GAClBoB,IACC,MAAMK,EAAOL,EAAOR,MACdS,EAAO,IAAIC,KAAK7B,GACtB4B,EAAKK,aAAaD,GAClBxC,EAAgBoC,EAAK,GAEvB,CAAC5B,EAAcR,IAGX0C,EAAgBpB,GACpB,IAAMD,EAAOsB,MAAKpC,GAASA,EAAMoB,QAAUnB,KAAaoC,cACxD,CAACvB,EAAQb,IAELqC,EAAevB,GACnB,IAAMO,EAAMc,MAAKH,GAAQA,EAAKb,QAAUnB,KAAasC,iBACrD,CAACjB,EAAOrB,IAGV,OACEuC,EAAKC,cAAA,MAAA,CAAA1C,UAAW2C,EAAGC,EAAOC,iBAAkB7C,IAC1CyC,EAAAC,cAACI,EAAI,CAACC,IAAI,SACRN,EAACC,cAAAM,GACChD,UAAW4C,EAAOK,oBACN,aAAAtD,EACZuD,QAASnC,EACTM,MAAOe,EACPe,SAAUvB,EACVwB,qBAAsBR,EAAOK,oBAC7BI,KAAK,QACLC,cAAgBC,GAAoC/B,EACpDgC,YAAY,EACZC,WAAW,EACXC,YACA,IACFjB,EAACC,cAAAM,GACChD,UAAW4C,EAAOe,mBACN,aAAA/D,EACZsD,QAAS3B,EACTF,MAAOkB,EACPY,SAAUlB,EACVmB,qBAAsBR,EAAOe,mBAC7BN,KAAK,QACLC,cAAgBC,GAAoC7B,EACpD8B,YAAY,EACZC,WAAW,EACXC,YAAU,KAGdjB,EAAAC,cAACI,EAAI,KACHL,EAAAC,cAACkB,EACC,CAAAC,KAAK,WACLR,KAAK,qBACOvD,EACZgE,QAASpD,EACTqD,KAAMC,IAERvB,EAACC,cAAAkB,GACCC,KAAK,WACLR,KAAK,QACO,aAAAxD,EACZiE,QAAStD,EACTuD,KAAME,KAGN,EAMM,SAAAtC,EAAmBzB,EAAoBH,GACrD,OAAOmE,EAAOhE,EAAc,OAAQ,CAAEH,UACxC,CAEgB,SAAA0B,EAAoBvB,EAAoBH,GACtD,OAAOmE,EAAOhE,EAAc,MAAO,CAAEH,UACvC"}
@@ -0,0 +1,2 @@
1
+ var e={monthButtonDropdown:"monthButtonDropdown_21461b5e9a",yearButtonDropdown:"yearButtonDropdown_77baae1d4f",datePickerHeader:"datePickerHeader_a604270d95"};!function(e){const t="s_id-a12251d5376d_4_0_0";if("undefined"!=typeof document){const n=document.head||document.getElementsByTagName("head")[0];if(n.querySelector("#"+t))return;const o=document.createElement("style");o.id=t,n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.appendChild(document.createTextNode(e))}else globalThis.injectedStyles&&(globalThis.injectedStyles[t]=e)}("/* stylelint-disable */\n/* stylelint-enable */\n.monthButtonDropdown_21461b5e9a {\n min-width: 70px;\n justify-content: space-between;\n}\n.yearButtonDropdown_77baae1d4f {\n justify-content: space-between;\n}\n.datePickerHeader_a604270d95 {\n font: var(--font-text2-normal);\n height: var(--day-picker-header-height);\n color: var(--primary-text-color);\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n}\n.datePickerHeader_a604270d95 button:focus:not(:active), .datePickerHeader_a604270d95 button:focus-visible {\n box-shadow: 0 0 0 2px var(--primary-color);\n background: var(--primary-background-color) !important;\n}");export{e as default};
2
+ //# sourceMappingURL=DatePickerHeader.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePickerHeader.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import { type DayContentProps as DatePickerDayContentProps } from "react-day-picker";
3
+ export declare const RangeDayContent: (props: DatePickerDayContentProps) => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import e from"classnames";import t,{useRef as r,useEffect as n}from"react";import{DayContent as o}from"react-day-picker";import{useDayContentHoverContext as s}from"./DateContentHoverContext.js";import m from"./DatePicker.module.scss.js";const a=a=>{const{date:i,activeModifiers:l}=a,{setHover:c}=s(),u=r(null);return n((()=>{const e=u.current.closest("td"),t=()=>c(i),r=()=>c(void 0);return null==e||e.addEventListener("mouseenter",t),null==e||e.addEventListener("mouseleave",r),()=>{null==e||e.removeEventListener("mouseenter",t),null==e||e.removeEventListener("mouseleave",r)}}),[i,c]),t.createElement("div",{ref:u,className:e(m.datePickerDayContent,l)},t.createElement(o,Object.assign({},a)))};export{a as RangeDayContent};
2
+ //# sourceMappingURL=RangeDayContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangeDayContent.js","sources":["../../src/DatePicker/RangeDayContent.tsx"],"sourcesContent":["import cx from \"classnames\";\nimport React, { useEffect, useRef } from \"react\";\nimport {\n type DayContentProps as DatePickerDayContentProps,\n DayContent as DatePickerDayContent\n} from \"react-day-picker\";\nimport { useDayContentHoverContext } from \"./DateContentHoverContext\";\nimport styles from \"./DatePicker.module.scss\";\n\nexport const RangeDayContent = (props: DatePickerDayContentProps) => {\n const { date, activeModifiers } = props;\n const { setHover } = useDayContentHoverContext();\n\n const ref = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const td = ref.current.closest(\"td\");\n const onMouseEnter = () => setHover(date);\n const onMouseLeave = () => setHover(undefined);\n\n td?.addEventListener(\"mouseenter\", onMouseEnter);\n td?.addEventListener(\"mouseleave\", onMouseLeave);\n\n return () => {\n td?.removeEventListener(\"mouseenter\", onMouseEnter);\n td?.removeEventListener(\"mouseleave\", onMouseLeave);\n };\n }, [date, setHover]);\n\n return (\n <div ref={ref} className={cx(styles.datePickerDayContent, activeModifiers)}>\n <DatePickerDayContent {...props} />\n </div>\n );\n};\n"],"names":["RangeDayContent","props","date","activeModifiers","setHover","useDayContentHoverContext","ref","useRef","useEffect","td","current","closest","onMouseEnter","onMouseLeave","undefined","addEventListener","removeEventListener","React","createElement","className","cx","styles","datePickerDayContent","DatePickerDayContent","Object","assign"],"mappings":"6OASaA,MAAAA,EAAmBC,IAC9B,MAAMC,KAAEA,EAAIC,gBAAEA,GAAoBF,GAC5BG,SAAEA,GAAaC,IAEfC,EAAMC,EAAuB,MAenC,OAdAC,GAAU,KACR,MAAMC,EAAKH,EAAII,QAAQC,QAAQ,MACzBC,EAAeA,IAAMR,EAASF,GAC9BW,EAAeA,IAAMT,OAASU,GAKpC,OAHAL,SAAAA,EAAIM,iBAAiB,aAAcH,GACnCH,SAAAA,EAAIM,iBAAiB,aAAcF,GAE5B,KACLJ,SAAAA,EAAIO,oBAAoB,aAAcJ,GACtCH,SAAAA,EAAIO,oBAAoB,aAAcH,EAAa,CACpD,GACA,CAACX,EAAME,IAGRa,EAAAC,cAAA,MAAA,CAAKZ,IAAKA,EAAKa,UAAWC,EAAGC,EAAOC,qBAAsBnB,IACxDc,EAAAC,cAACK,EAAyBC,OAAAC,OAAA,CAAA,EAAAxB,IACtB"}
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import { type DayContentProps as DatePickerDayContentProps } from "react-day-picker";
3
+ export declare const SingleDayContent: (dayContentProps: DatePickerDayContentProps) => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import e from"react";import{DayContent as t}from"react-day-picker";import r from"./DatePicker.module.scss.js";const a=a=>e.createElement("div",{className:r.datePickerDayContent},e.createElement(t,Object.assign({},a)));export{a as SingleDayContent};
2
+ //# sourceMappingURL=SingleDayContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SingleDayContent.js","sources":["../../src/DatePicker/SingleDayContent.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n type DayContentProps as DatePickerDayContentProps,\n DayContent as DatePickerDayContent\n} from \"react-day-picker\";\nimport styles from \"./DatePicker.module.scss\";\n\nexport const SingleDayContent = (dayContentProps: DatePickerDayContentProps) => (\n <div className={styles.datePickerDayContent}>\n <DatePickerDayContent {...dayContentProps} />\n </div>\n);\n"],"names":["SingleDayContent","dayContentProps","React","createElement","className","styles","datePickerDayContent","DatePickerDayContent","Object","assign"],"mappings":"8GAOO,MAAMA,EAAoBC,GAC/BC,EAAKC,cAAA,MAAA,CAAAC,UAAWC,EAAOC,sBACrBJ,EAAAC,cAACI,EAAyBC,OAAAC,OAAA,CAAA,EAAAR"}
@@ -0,0 +1,18 @@
1
+ import { type Locale } from "date-fns";
2
+ export interface DatePickerDropdownItem {
3
+ id: string;
4
+ label: string;
5
+ value: string;
6
+ }
7
+ export declare const useMonthsOptionItems: ({ locale }: {
8
+ locale?: Locale;
9
+ }) => {
10
+ id: string;
11
+ label: string;
12
+ }[];
13
+ export declare const useYearsOptionItems: ({ locale }: {
14
+ locale?: Locale;
15
+ }) => {
16
+ id: string;
17
+ label: string;
18
+ }[];
@@ -0,0 +1,2 @@
1
+ import{useMemo as e}from"react";import{format as l}from"date-fns";const t=[0,1,2,3,4,5,6,7,8,9,10,11],a=({locale:a})=>e((()=>t.map((e=>{const t=new Date;return t.setMonth(e,1),{id:""+e,label:l(t,"LLL",{locale:a})}}))),[a]),r=({locale:t})=>e((()=>Array.from({length:201},((e,l)=>{const t=new Date;return t.setFullYear(t.getFullYear()-100+l),t})).map((e=>({id:""+e.getFullYear(),label:l(e,"yyyy",{locale:t})})))),[t]);export{a as useMonthsOptionItems,r as useYearsOptionItems};
2
+ //# sourceMappingURL=datePickerHooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datePickerHooks.js","sources":["../../src/DatePicker/datePickerHooks.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { format, type Locale } from \"date-fns\";\n\nexport interface DatePickerDropdownItem {\n id: string;\n label: string;\n value: string;\n}\n\nconst monthsIndexes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\nexport const useMonthsOptionItems = ({ locale }: { locale?: Locale }) =>\n useMemo(\n () =>\n monthsIndexes.map(monthIndex => {\n const month = new Date();\n month.setMonth(monthIndex, 1);\n return { id: monthIndex.toString(), label: format(month, \"LLL\", { locale }) };\n }),\n [locale]\n );\n\n// returns a list of all years from 100 years ago to 100 years in the future\nconst YEARS_AGO = 100;\nconst YEARS_IN_FUTURE = 100;\nexport const useYearsOptionItems = ({ locale }: { locale?: Locale }) =>\n useMemo(\n () =>\n Array.from({ length: YEARS_AGO + YEARS_IN_FUTURE + 1 }, (_, i) => {\n const date = new Date();\n date.setFullYear(date.getFullYear() - YEARS_AGO + i);\n return date;\n }).map(year => ({\n id: year.getFullYear().toString(),\n label: format(year, \"yyyy\", { locale })\n })),\n [locale]\n );\n"],"names":["monthsIndexes","useMonthsOptionItems","locale","useMemo","map","monthIndex","month","Date","setMonth","id","label","format","useYearsOptionItems","Array","from","length","YEARS_AGO","_","i","date","setFullYear","getFullYear","year"],"mappings":"kEASA,MAAMA,EAAgB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAC5CC,EAAuBA,EAAGC,YACrCC,GACE,IACEH,EAAcI,KAAIC,IAChB,MAAMC,EAAQ,IAAIC,KAElB,OADAD,EAAME,SAASH,EAAY,GACpB,CAAEI,GAAIJ,KAAuBK,MAAOC,EAAOL,EAAO,MAAO,CAAEJ,WAAW,KAEjF,CAACA,IAMQU,EAAsBA,EAAGV,YACpCC,GACE,IACEU,MAAMC,KAAK,CAAEC,OAAQC,MAAmC,CAACC,EAAGC,KAC1D,MAAMC,EAAO,IAAIZ,KAEjB,OADAY,EAAKC,YAAYD,EAAKE,cAPZ,IAOwCH,GAC3CC,CAAI,IACVf,KAAIkB,IAAS,CACdb,GAAIa,KAAKD,cACTX,MAAOC,EAAOW,EAAM,OAAQ,CAAEpB,gBAElC,CAACA"}
@@ -0,0 +1,2 @@
1
+ export { default as DatePicker } from "./DatePicker";
2
+ export * from "./DatePicker.types";
@@ -0,0 +1,13 @@
1
+ import { type DateRange, type Matcher } from "react-day-picker";
2
+ export type Intent = "to" | "from";
3
+ export declare function addToRange(day: Date, { from, to }: DateRange, intent: Intent): DateRange;
4
+ export declare const AddToRangeMiddle = "addToRangeMiddle";
5
+ export declare const AddToRangeStart = "addToRangeStart";
6
+ export declare const AddToRangeEnd = "addToRangeEnd";
7
+ export declare const RemoveFromRange = "removeFromRange";
8
+ export declare const HoveredDayExists = "HoveredDayExists";
9
+ export declare const HalfRangeSelected = "HalfRangeSelected";
10
+ type GetDateNextStateResult = typeof AddToRangeMiddle | typeof AddToRangeStart | typeof AddToRangeEnd | typeof RemoveFromRange | undefined;
11
+ export declare function addToRangeNextState(day: Date, dayToAdd: Date, range: DateRange, intent: Intent): GetDateNextStateResult;
12
+ export declare function addToRangeModifiers(dayToAdd: Date, range: DateRange, intent: Intent): Record<string, Matcher>;
13
+ export {};
@@ -0,0 +1,2 @@
1
+ import{isBefore as r,isSameDay as o,isAfter as t}from"date-fns";function f(f,{from:e,to:n},i){if(!e&&!n)return"from"===i?{from:f,to:void 0}:{from:void 0,to:f};if(!e)return r(f,n)?{from:f,to:n}:{from:n,to:f};if(!n)return r(f,e)?{from:f,to:e}:{from:e,to:f};if("to"===i){if(o(f,e)&&o(f,n))return{from:void 0};if(o(f,e))return{from:void 0};if(r(f,e))return{from:f,to:n};if(t(f,e)&&r(f,n))return{from:e,to:f};if(t(f,n)||o(f,n))return{from:e,to:f}}else{if(o(f,e)&&o(f,n))return{from:void 0};if(o(f,n))return{from:f,to:f};if(t(f,n))return{from:e,to:f};if(r(f,n)&&t(f,e))return{from:f,to:n};if(r(f,e))return{from:f,to:n};if(o(f,n))return{from:f}}return{from:e,to:f}}const e=(f,e)=>!(!e.from||!e.to)&&((t(f,e.from)||o(f,e.from))&&(r(f,e.to)||o(f,e.to))),n="addToRangeMiddle",i="addToRangeStart",m="addToRangeEnd",u="removeFromRange",d="HoveredDayExists",a="HalfRangeSelected";function v(r,t,d,a){if(!t)return;const v=f(t,d,a);if(e(r,v)||e(r,d)){if(o(r,v.to)&&!o(r,d.to))return m;if(o(r,v.from)&&!o(r,d.from))return i;if(e(r,v)){if(e(r,d))return;return o(r,v.from)?i:o(r,v.to)?m:e(t,d)?void 0:n}return e(t,d)?u:void 0}}function c(r,o,t){return{[d]:()=>!!r,[a]:()=>!(!o||!(!o.from&&o.to||o.from&&!o.to)),[n]:f=>v(f,r,o,t)===n,[i]:f=>v(f,r,o,t)===i,[m]:f=>v(f,r,o,t)===m,[u]:f=>v(f,r,o,t)===u}}export{m as AddToRangeEnd,n as AddToRangeMiddle,i as AddToRangeStart,a as HalfRangeSelected,d as HoveredDayExists,u as RemoveFromRange,f as addToRange,c as addToRangeModifiers,v as addToRangeNextState};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../src/DatePicker/utils.ts"],"sourcesContent":["import { isAfter, isBefore, isSameDay } from \"date-fns\";\nimport { type DateRange, type Matcher } from \"react-day-picker\";\n\nexport type Intent = \"to\" | \"from\";\n\nexport function addToRange(day: Date, { from, to }: DateRange, intent: Intent): DateRange {\n if (!from && !to) {\n return intent === \"from\" ? { from: day, to: undefined } : { from: undefined, to: day };\n }\n\n if (!from) {\n if (isBefore(day, to)) {\n return { from: day, to };\n }\n\n return { from: to, to: day };\n }\n\n if (!to) {\n if (isBefore(day, from)) {\n return { from: day, to: from };\n }\n\n return { from, to: day };\n }\n\n if (intent === \"to\") {\n if (isSameDay(day, from) && isSameDay(day, to)) {\n return { from: undefined };\n }\n\n if (isSameDay(day, from)) {\n // both from & to selected + user clicks on start -> clear selection\n return { from: undefined };\n }\n\n if (isBefore(day, from)) {\n return { from: day, to };\n }\n\n if (isAfter(day, from) && isBefore(day, to)) {\n return { from, to: day };\n }\n\n if (isAfter(day, to) || isSameDay(day, to)) {\n return { from, to: day };\n }\n } else {\n // intent is from\n if (isSameDay(day, from) && isSameDay(day, to)) {\n return { from: undefined };\n }\n\n if (isSameDay(day, to)) {\n return { from: day, to: day };\n }\n\n if (isAfter(day, to)) {\n return { from, to: day };\n }\n\n if (isBefore(day, to) && isAfter(day, from)) {\n return { from: day, to };\n }\n\n if (isBefore(day, from)) {\n return { from: day, to };\n }\n\n if (isSameDay(day, to)) {\n // both from & to selected + user clicks on end -> end becomes start\n return { from: day };\n }\n }\n\n return { from, to: day };\n}\n\nconst isInRange = (day: Date, range: DateRange): boolean => {\n if (!range.from || !range.to) {\n return false;\n }\n\n return (\n (isAfter(day, range.from) || isSameDay(day, range.from)) && (isBefore(day, range.to) || isSameDay(day, range.to))\n );\n};\n\nexport const AddToRangeMiddle = \"addToRangeMiddle\";\nexport const AddToRangeStart = \"addToRangeStart\";\nexport const AddToRangeEnd = \"addToRangeEnd\";\nexport const RemoveFromRange = \"removeFromRange\";\nexport const HoveredDayExists = \"HoveredDayExists\";\nexport const HalfRangeSelected = \"HalfRangeSelected\";\n\ntype GetDateNextStateResult =\n | typeof AddToRangeMiddle\n | typeof AddToRangeStart\n | typeof AddToRangeEnd\n | typeof RemoveFromRange\n | undefined;\n\nexport function addToRangeNextState(\n day: Date,\n dayToAdd: Date,\n range: DateRange,\n intent: Intent\n): GetDateNextStateResult {\n if (!dayToAdd) {\n return undefined;\n }\n\n const nextRange = addToRange(dayToAdd, range, intent);\n\n if (!isInRange(day, nextRange) && !isInRange(day, range)) {\n return undefined;\n }\n\n if (isSameDay(day, nextRange.to) && !isSameDay(day, range.to)) {\n return AddToRangeEnd;\n }\n\n if (isSameDay(day, nextRange.from) && !isSameDay(day, range.from)) {\n return AddToRangeStart;\n }\n\n if (isInRange(day, nextRange)) {\n if (isInRange(day, range)) {\n return undefined;\n }\n\n if (isSameDay(day, nextRange.from)) {\n return AddToRangeStart;\n }\n\n if (isSameDay(day, nextRange.to)) {\n return AddToRangeEnd;\n }\n\n return !isInRange(dayToAdd, range) ? AddToRangeMiddle : undefined;\n }\n\n return isInRange(dayToAdd, range) ? RemoveFromRange : undefined;\n}\n\nexport function addToRangeModifiers(dayToAdd: Date, range: DateRange, intent: Intent): Record<string, Matcher> {\n return {\n [HoveredDayExists]: () => !!dayToAdd,\n [HalfRangeSelected]: () => !!(range && ((!range.from && range.to) || (range.from && !range.to))),\n [AddToRangeMiddle]: (day: Date) => addToRangeNextState(day, dayToAdd, range, intent) === AddToRangeMiddle,\n [AddToRangeStart]: (day: Date) => addToRangeNextState(day, dayToAdd, range, intent) === AddToRangeStart,\n [AddToRangeEnd]: (day: Date) => addToRangeNextState(day, dayToAdd, range, intent) === AddToRangeEnd,\n [RemoveFromRange]: (day: Date) => addToRangeNextState(day, dayToAdd, range, intent) === RemoveFromRange\n };\n}\n"],"names":["addToRange","day","from","to","intent","undefined","isBefore","isSameDay","isAfter","isInRange","range","AddToRangeMiddle","AddToRangeStart","AddToRangeEnd","RemoveFromRange","HoveredDayExists","HalfRangeSelected","addToRangeNextState","dayToAdd","nextRange","addToRangeModifiers"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from "./DatePicker";
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export{default as DatePicker}from"./DatePicker/DatePicker.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ export declare const DayContentHoverContext: React.Context<{
3
+ hover: Date | undefined;
4
+ setHover: (_hover: Date | undefined) => void;
5
+ }>;
6
+ export declare const DayContentHoverProvider: ({ children }: {
7
+ children: React.ReactNode;
8
+ }) => React.JSX.Element;
9
+ export declare const useDayContentHoverContext: () => {
10
+ hover: Date | undefined;
11
+ setHover: (_hover: Date | undefined) => void;
12
+ };
@@ -0,0 +1,2 @@
1
+ import e,{createContext as o,useState as r,useMemo as t,useContext as v}from"react";import{noop as i}from"es-toolkit";const c=o({hover:void 0,setHover:i}),m=({children:o})=>{const[v,i]=r(void 0),m=t((()=>({hover:v,setHover:i})),[v]);return e.createElement(c.Provider,{value:m},o)},n=()=>v(c);export{c as DayContentHoverContext,m as DayContentHoverProvider,n as useDayContentHoverContext};
2
+ //# sourceMappingURL=DateContentHoverContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateContentHoverContext.js","sources":["../../../src/DatePicker/DateContentHoverContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo, useState } from \"react\";\nimport { noop } from \"es-toolkit\";\n\nexport const DayContentHoverContext = createContext<{\n hover: Date | undefined;\n setHover: (_hover: Date | undefined) => void;\n}>({ hover: undefined, setHover: noop });\n\nexport const DayContentHoverProvider = ({ children }: { children: React.ReactNode }) => {\n const [hover, setHover] = useState<Date | undefined>(undefined);\n const value = useMemo(() => ({ hover, setHover }), [hover]);\n return <DayContentHoverContext.Provider value={value}>{children}</DayContentHoverContext.Provider>;\n};\n\nexport const useDayContentHoverContext = () => useContext(DayContentHoverContext);\n"],"names":["DayContentHoverContext","createContext","hover","undefined","setHover","noop","DayContentHoverProvider","children","useState","value","useMemo","React","createElement","Provider","useDayContentHoverContext","useContext"],"mappings":"sHAGaA,MAAAA,EAAyBC,EAGnC,CAAEC,WAAOC,EAAWC,SAAUC,IAEpBC,EAA0BA,EAAGC,eACxC,MAAOL,EAAOE,GAAYI,OAA2BL,GAC/CM,EAAQC,GAAQ,KAAO,CAAER,QAAOE,cAAa,CAACF,IACpD,OAAOS,EAAAC,cAACZ,EAAuBa,SAAQ,CAACJ,MAAOA,GAAQF,EAA2C,EAGvFO,EAA4BA,IAAMC,EAAWf"}
@@ -0,0 +1,8 @@
1
+ import { type FC } from "react";
2
+ import { type DatePickerProps } from "./DatePicker.types";
3
+ export declare const DEFAULT_TIME: {
4
+ hours: number;
5
+ minutes: number;
6
+ };
7
+ declare const DatePicker: FC<DatePickerProps>;
8
+ export default DatePicker;
@@ -0,0 +1,2 @@
1
+ import e,{createContext as t,useMemo as a,useState as r,useRef as n,useEffect as o,useCallback as i}from"react";import s from"classnames";import{InternalModifier as d,DayPicker as l}from"react-day-picker";import c from"./DatePicker.module.scss.js";import m from"./DatePickerHeader.js";import{AddToRangeMiddle as u,AddToRangeStart as k,AddToRangeEnd as D,RemoveFromRange as g,HoveredDayExists as y,HalfRangeSelected as P,addToRange as b,addToRangeModifiers as f}from"./utils.js";import{RangeDayContent as h}from"./RangeDayContent.js";import{SingleDayContent as p}from"./SingleDayContent.js";import{DayContentHoverProvider as C,DayContentHoverContext as S}from"./DateContentHoverContext.js";const v={hours:9,minutes:0},R={[d.Outside]:c.datePickerDayOutside,[d.Selected]:c.datePickerDaySelected,[d.Today]:c.datePickerDayToday,[d.Disabled]:c.datePickerDayDisabled,[d.RangeStart]:c.datePickerDayRangeStart,[d.RangeEnd]:c.datePickerDayRangeEnd,[d.RangeMiddle]:c.datePickerDayRangeMiddle,[u]:c.datePickerAddToRangeMiddle,[k]:c.datePickerAddToRangeStart,[D]:c.datePickerAddToRangeEnd,[g]:c.datePickerRemoveFromRange,[y]:c.datePickerHoveredDayExists,[P]:c.datePickerHalfRangeSelected},N=t({}),A=()=>e.createElement(N.Consumer,null,(t=>e.createElement(m,Object.assign({},t)))),E=({className:t,dayClassName:m,selectedDayClassName:u,id:k,"data-testid":D,mode:g="single",date:y,endDate:P,onDateChange:E,firstDayOfWeek:j=0,showWeekNumber:w,isDateDisabled:L,locale:M,nextButtonAriaLabel:O="Next",prevButtonAriaLabel:x="Previous",monthSelectionAriaLabel:H="Month",yearSelectionAriaLabel:T="Year",dropdownsClassName:B,intent:W="to",dialogContainerSelector:q})=>{const F=a((()=>"single"===g?y:{from:y,to:P}),[y,P,g]),[Y,z]=r(y||new Date),G=n(),I=n(),J=n(!1);o((()=>{const e=+I.current!=+P,t=!J.current;+G.current!=+y?t&&y&&z(y):e&&t&&P&&z(P),G.current=y,I.current=P,J.current=!1}),[y,P]);const K=i(((e,t)=>{if(J.current=!0,"range"===g){const e=b(t,F,W);E({date:null==e?void 0:e.from,endDate:null==e?void 0:e.to})}else{const t=e,{hours:a,minutes:r}=y?{hours:y.getHours(),minutes:y.getMinutes()}:v;t.setHours(a,r),E(t)}}),[y,W,g,E,F]),Q=a((()=>({setDisplayMonth:z,locale:M,nextButtonAriaLabel:O,prevButtonAriaLabel:x,monthSelectionAriaLabel:H,yearSelectionAriaLabel:T,dropdownsClassName:B,dialogContainerSelector:q})),[M,H,O,z,x,T,B,q]),U=a((()=>Object.assign(Object.assign({},R),{[d.Selected]:s(R[d.Selected],u)})),[u]),V=a((()=>({months:c.datePickerMonths,head:c.datePickerHead,table:c.datePickerTable,tbody:c.datePickerBody,day:s(c.datePickerDay,m)})),[m]);return e.createElement("div",{id:k,className:s(c.datePicker,{[c.withWeekNumber]:w},t),"data-testid":D,"data-vibe":"DatePicker"},e.createElement(C,null,e.createElement(N.Provider,{value:Q},e.createElement(S.Consumer,null,(({hover:t})=>{const a=f(t,F,W);return e.createElement(l,{fixedWeeks:!0,showOutsideDays:!0,showWeekNumber:w,mode:g,required:!0,weekStartsOn:j,disabled:L,selected:F,onSelect:K,month:Y,onMonthChange:z,components:{Caption:A,DayContent:"single"===g?p:h},classNames:V,modifiers:a,modifiersClassNames:U,locale:M})})))))};export{v as DEFAULT_TIME,E as default};
2
+ //# sourceMappingURL=DatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.js","sources":["../../../src/DatePicker/DatePicker.tsx"],"sourcesContent":["import React, { type FC, createContext, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport cx from \"classnames\";\nimport { type DateRange, DayPicker as ReactDatePicker, InternalModifier as DayModifier } from \"react-day-picker\";\nimport styles from \"./DatePicker.module.scss\";\nimport DatePickerHeader, { type DatePickerHeaderProps } from \"./DatePickerHeader\";\nimport { type DatePickerProps, type DatePickerRange } from \"./DatePicker.types\";\nimport {\n AddToRangeEnd,\n AddToRangeMiddle,\n AddToRangeStart,\n HalfRangeSelected,\n HoveredDayExists,\n RemoveFromRange,\n addToRange,\n addToRangeModifiers\n} from \"./utils\";\nimport { RangeDayContent } from \"./RangeDayContent\";\nimport { SingleDayContent } from \"./SingleDayContent\";\nimport { DayContentHoverContext, DayContentHoverProvider } from \"./DateContentHoverContext\";\n\nexport const DEFAULT_TIME = { hours: 9, minutes: 0 };\n\nconst MODIFIERS_CLASS_NAMES = {\n [DayModifier.Outside]: styles.datePickerDayOutside,\n [DayModifier.Selected]: styles.datePickerDaySelected,\n [DayModifier.Today]: styles.datePickerDayToday,\n [DayModifier.Disabled]: styles.datePickerDayDisabled,\n [DayModifier.RangeStart]: styles.datePickerDayRangeStart,\n [DayModifier.RangeEnd]: styles.datePickerDayRangeEnd,\n [DayModifier.RangeMiddle]: styles.datePickerDayRangeMiddle,\n [AddToRangeMiddle]: styles.datePickerAddToRangeMiddle,\n [AddToRangeStart]: styles.datePickerAddToRangeStart,\n [AddToRangeEnd]: styles.datePickerAddToRangeEnd,\n [RemoveFromRange]: styles.datePickerRemoveFromRange,\n [HoveredDayExists]: styles.datePickerHoveredDayExists,\n [HalfRangeSelected]: styles.datePickerHalfRangeSelected\n};\n\nconst DatePickerHeaderContext = createContext<DatePickerHeaderProps>({} as DatePickerHeaderProps);\n\nconst Caption = () => (\n <DatePickerHeaderContext.Consumer>{props => <DatePickerHeader {...props} />}</DatePickerHeaderContext.Consumer>\n);\n\nconst DatePicker: FC<DatePickerProps> = ({\n className,\n dayClassName,\n selectedDayClassName,\n id,\n \"data-testid\": dataTestId,\n mode = \"single\",\n date,\n endDate,\n onDateChange,\n firstDayOfWeek = 0,\n showWeekNumber,\n isDateDisabled,\n locale,\n nextButtonAriaLabel = \"Next\",\n prevButtonAriaLabel = \"Previous\",\n monthSelectionAriaLabel = \"Month\",\n yearSelectionAriaLabel = \"Year\",\n dropdownsClassName,\n intent = \"to\",\n dialogContainerSelector\n}) => {\n const selected = useMemo(() => (mode === \"single\" ? date : { from: date, to: endDate }), [date, endDate, mode]);\n const [displayMonth, setDisplayMonth] = useState(date || new Date());\n\n const prevDateRef = useRef<Date | undefined>();\n const prevEndDateRef = useRef<Date | undefined>();\n const lastChangeByInnerSelection = useRef(false);\n useEffect(() => {\n const dateChanged = +prevDateRef.current !== +date;\n const endDateChanged = +prevEndDateRef.current !== +endDate;\n const shouldSetDisplayMonth = !lastChangeByInnerSelection.current;\n\n if (dateChanged) {\n shouldSetDisplayMonth && date && setDisplayMonth(date);\n } else if (endDateChanged) {\n shouldSetDisplayMonth && endDate && setDisplayMonth(endDate);\n }\n\n prevDateRef.current = date;\n prevEndDateRef.current = endDate;\n lastChangeByInnerSelection.current = false;\n }, [date, endDate]);\n\n const onPickerDateChange = useCallback(\n (newValue: Date | DateRange, selectedDay: Date) => {\n lastChangeByInnerSelection.current = true;\n\n if (mode === \"range\") {\n const newRange = addToRange(selectedDay, selected as DateRange, intent);\n (onDateChange as (range: DatePickerRange) => void)({ date: newRange?.from, endDate: newRange?.to });\n } else {\n const newDate = newValue as Date;\n const { hours, minutes } = date ? { hours: date.getHours(), minutes: date.getMinutes() } : DEFAULT_TIME;\n newDate.setHours(hours, minutes);\n (onDateChange as (date: Date | undefined) => void)(newDate);\n }\n },\n [date, intent, mode, onDateChange, selected]\n );\n\n const DatePickerHeaderContextValue = useMemo<DatePickerHeaderProps>(\n () => ({\n setDisplayMonth,\n locale,\n nextButtonAriaLabel,\n prevButtonAriaLabel,\n monthSelectionAriaLabel,\n yearSelectionAriaLabel,\n dropdownsClassName,\n dialogContainerSelector\n }),\n [\n locale,\n monthSelectionAriaLabel,\n nextButtonAriaLabel,\n setDisplayMonth,\n prevButtonAriaLabel,\n yearSelectionAriaLabel,\n dropdownsClassName,\n dialogContainerSelector\n ]\n );\n\n const modifiersClassNames = useMemo(\n () => ({\n ...MODIFIERS_CLASS_NAMES,\n [DayModifier.Selected]: cx(MODIFIERS_CLASS_NAMES[DayModifier.Selected], selectedDayClassName)\n }),\n [selectedDayClassName]\n );\n\n const classNames = useMemo(\n () => ({\n months: styles.datePickerMonths,\n head: styles.datePickerHead,\n table: styles.datePickerTable,\n tbody: styles.datePickerBody,\n day: cx(styles.datePickerDay, dayClassName)\n }),\n [dayClassName]\n );\n\n return (\n <div\n id={id}\n className={cx(styles.datePicker, { [styles.withWeekNumber]: showWeekNumber }, className)}\n data-testid={dataTestId}\n data-vibe=\"DatePicker\"\n >\n <DayContentHoverProvider>\n <DatePickerHeaderContext.Provider value={DatePickerHeaderContextValue}>\n <DayContentHoverContext.Consumer>\n {({ hover }) => {\n const modifiers = addToRangeModifiers(hover, selected as DateRange, intent);\n return (\n <ReactDatePicker\n fixedWeeks\n showOutsideDays\n showWeekNumber={showWeekNumber}\n mode={mode as \"single\"} // cast to avoid type errors from ReactDatePicker\n required\n weekStartsOn={firstDayOfWeek}\n disabled={isDateDisabled}\n selected={selected as Date} // cast to avoid type errors from ReactDatePicker\n onSelect={onPickerDateChange}\n month={displayMonth}\n onMonthChange={setDisplayMonth}\n components={{ Caption, DayContent: mode === \"single\" ? SingleDayContent : RangeDayContent }}\n classNames={classNames}\n modifiers={modifiers}\n modifiersClassNames={modifiersClassNames}\n locale={locale}\n />\n );\n }}\n </DayContentHoverContext.Consumer>\n </DatePickerHeaderContext.Provider>\n </DayContentHoverProvider>\n </div>\n );\n};\n\nexport default DatePicker;\n"],"names":["DEFAULT_TIME","hours","minutes","MODIFIERS_CLASS_NAMES","DayModifier","Outside","styles","datePickerDayOutside","Selected","datePickerDaySelected","Today","datePickerDayToday","Disabled","datePickerDayDisabled","RangeStart","datePickerDayRangeStart","RangeEnd","datePickerDayRangeEnd","RangeMiddle","datePickerDayRangeMiddle","AddToRangeMiddle","datePickerAddToRangeMiddle","AddToRangeStart","datePickerAddToRangeStart","AddToRangeEnd","datePickerAddToRangeEnd","RemoveFromRange","datePickerRemoveFromRange","HoveredDayExists","datePickerHoveredDayExists","HalfRangeSelected","datePickerHalfRangeSelected","DatePickerHeaderContext","createContext","Caption","React","createElement","Consumer","props","DatePickerHeader","DatePicker","className","dayClassName","selectedDayClassName","id","dataTestId","mode","date","endDate","onDateChange","firstDayOfWeek","showWeekNumber","isDateDisabled","locale","nextButtonAriaLabel","prevButtonAriaLabel","monthSelectionAriaLabel","yearSelectionAriaLabel","dropdownsClassName","intent","dialogContainerSelector","selected","useMemo","from","to","displayMonth","setDisplayMonth","useState","Date","prevDateRef","useRef","prevEndDateRef","lastChangeByInnerSelection","useEffect","endDateChanged","current","shouldSetDisplayMonth","onPickerDateChange","useCallback","newValue","selectedDay","newRange","addToRange","newDate","getHours","getMinutes","setHours","DatePickerHeaderContextValue","modifiersClassNames","Object","assign","cx","classNames","months","datePickerMonths","head","datePickerHead","table","datePickerTable","tbody","datePickerBody","day","datePickerDay","datePicker","withWeekNumber","DayContentHoverProvider","Provider","value","DayContentHoverContext","hover","modifiers","addToRangeModifiers","ReactDatePicker","fixedWeeks","showOutsideDays","required","weekStartsOn","disabled","onSelect","month","onMonthChange","components","DayContent","SingleDayContent","RangeDayContent"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var e={datePicker:"datePicker",datePickerMonths:"datePickerMonths",withWeekNumber:"withWeekNumber",datePickerHead:"datePickerHead",datePickerBody:"datePickerBody",datePickerTable:"datePickerTable",datePickerDay:"datePickerDay",datePickerDayContent:"datePickerDayContent",datePickerDayDisabled:"datePickerDayDisabled",datePickerAddToRangeStart:"datePickerAddToRangeStart",datePickerAddToRangeEnd:"datePickerAddToRangeEnd",datePickerAddToRangeMiddle:"datePickerAddToRangeMiddle",datePickerDayRangeStart:"datePickerDayRangeStart",datePickerDayRangeEnd:"datePickerDayRangeEnd",datePickerDayOutside:"datePickerDayOutside",datePickerDaySelected:"datePickerDaySelected",datePickerDayRangeMiddle:"datePickerDayRangeMiddle",datePickerRemoveFromRange:"datePickerRemoveFromRange",datePickerHalfRangeSelected:"datePickerHalfRangeSelected"};!function(e){const a="s_id-601bce29f4a5_4_0_0";if("undefined"!=typeof document){const d=document.head||document.getElementsByTagName("head")[0];if(d.querySelector("#"+a))return;const r=document.createElement("style");r.id=a,d.firstChild?d.insertBefore(r,d.firstChild):d.appendChild(r),r.appendChild(document.createTextNode(e))}else globalThis.injectedStyles&&(globalThis.injectedStyles[a]=e)}('/* stylelint-disable */\n/* stylelint-enable */\n.datePicker {\n --day-picker-header-height: 34px;\n --day-picker-content-height: 234px;\n --day-picker-day-width: 30px;\n --day-picker-day-height: 30px;\n --day-picker-days-horizontal-gap: 4px;\n --day-picker-days-vertical-gap: 2px;\n --day-picker-day-change-range: var(--primary-surface-color);\n}\n.datePicker .datePickerMonths {\n display: flex;\n flex-direction: row;\n gap: var(--space-16);\n align-items: flex-start;\n}\n.datePicker.withWeekNumber {\n --day-picker-days-horizontal-gap: 2px;\n width: 284px;\n margin: 0;\n}\n.datePicker.withWeekNumber .datePickerHead td:first-child {\n width: var(--day-picker-day-width);\n border-start-start-radius: var(--border-radius-medium);\n border-start-end-radius: var(--border-radius-medium);\n background-color: var(--primary-background-hover-color);\n}\n.datePicker.withWeekNumber .datePickerHead td:first-child::after {\n color: var(--secondary-text-color);\n font: var(--font-text2-normal);\n display: flex;\n justify-content: center;\n content: "No.";\n}\n.datePicker.withWeekNumber .datePickerBody td:first-child {\n background-color: var(--primary-background-hover-color);\n}\n.datePicker.withWeekNumber .datePickerBody tr:last-child td:first-child {\n border-end-start-radius: var(--border-radius-medium);\n border-end-end-radius: var(--border-radius-medium);\n}\n.datePicker .datePickerTable {\n margin-top: var(--space-8);\n border-collapse: collapse;\n height: var(--day-picker-content-height);\n}\n.datePicker .datePickerHead th {\n color: var(--secondary-text-color);\n font: var(--font-text2-normal);\n padding-block: var(--space-2);\n text-align: center;\n height: var(--day-picker-day-height);\n}\n.datePicker .datePickerBody td {\n color: var(--secondary-text-color);\n font: var(--font-text2-normal);\n text-align: center;\n padding: 0;\n}\n.datePicker .datePickerBody .datePickerDay {\n color: var(--primary-text-color);\n font: var(--font-text2-normal);\n width: var(--day-picker-day-width);\n height: var(--day-picker-day-height);\n background: none;\n border: none;\n cursor: pointer;\n border-radius: var(--border-radius-small);\n margin: var(--day-picker-days-vertical-gap) var(--day-picker-days-horizontal-gap);\n padding: 0;\n}\n.datePicker .datePickerBody .datePickerDay .datePickerDayContent {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n border-radius: var(--border-radius-small);\n}\n.datePicker .datePickerBody .datePickerDay:focus-visible {\n outline: none;\n}\n.datePicker .datePickerBody .datePickerDay:focus-visible .datePickerDayContent {\n outline: 2px solid var(--primary-color);\n}\n.datePicker .datePickerBody .datePickerDay.datePickerDayDisabled {\n color: var(--disabled-text-color);\n cursor: not-allowed;\n}\n.datePicker .datePickerBody .datePickerDay:not(.datePickerDayDisabled):not(.datePickerAddToRangeStart):not(.datePickerAddToRangeEnd):not(.datePickerAddToRangeMiddle):not(.datePickerDayRangeStart):not(.datePickerDayRangeEnd) .datePickerDayContent:hover {\n background: var(--primary-background-hover-color);\n}\n.datePicker .datePickerBody .datePickerDay.datePickerDayOutside {\n color: var(--disabled-text-color);\n}\n.datePicker .datePickerBody .datePickerDay.datePickerDaySelected:not(.datePickerDayRangeMiddle):not(.datePickerRemoveFromRange) {\n background: var(--primary-color);\n color: var(--text-color-on-primary);\n}\n.datePicker .datePickerBody .datePickerDay.datePickerDayRangeStart:not(.datePickerDayRangeEnd):not(.datePickerRemoveFromRange), .datePicker .datePickerBody .datePickerDay.datePickerDayRangeEnd:not(.datePickerDayRangeStart):not(.datePickerRemoveFromRange) {\n background: var(--primary-color);\n width: calc(var(--day-picker-day-width) + var(--day-picker-days-horizontal-gap));\n}\n.datePicker .datePickerBody .datePickerDay.datePickerDayRangeStart.datePickerRemoveFromRange, .datePicker .datePickerBody .datePickerDay.datePickerDayRangeEnd.datePickerRemoveFromRange {\n background: var(--primary-color);\n color: var(--text-color-on-primary);\n}\n.datePicker .datePickerBody .datePickerDay.datePickerDayRangeStart.datePickerRemoveFromRange:not(.datePickerDayRangeEnd), .datePicker .datePickerBody .datePickerDay.datePickerDayRangeEnd.datePickerRemoveFromRange:not(.datePickerDayRangeStart) {\n width: calc(var(--day-picker-day-width) + var(--day-picker-days-horizontal-gap));\n}\n.datePicker .datePickerBody .datePickerDay.datePickerAddToRangeStart, .datePicker .datePickerBody .datePickerDay.datePickerDayRangeStart:not(.datePickerDayRangeEnd) {\n margin-inline-end: 0;\n border-start-end-radius: 0;\n border-end-end-radius: 0;\n}\n.datePicker .datePickerBody .datePickerDay.datePickerAddToRangeEnd, .datePicker .datePickerBody .datePickerDay.datePickerDayRangeEnd:not(.datePickerDayRangeStart) {\n margin-inline-start: 0;\n border-start-start-radius: 0;\n border-end-start-radius: 0;\n}\n.datePicker .datePickerBody .datePickerDay.datePickerAddToRangeStart, .datePicker .datePickerBody .datePickerDay.datePickerAddToRangeEnd, .datePicker .datePickerBody .datePickerDay.datePickerAddToRangeMiddle {\n margin: var(--day-picker-days-vertical-gap) 0;\n}\n.datePicker .datePickerBody .datePickerDay.datePickerAddToRangeStart:not(.datePickerDayRangeStart):not(.datePickerDayRangeEnd), .datePicker .datePickerBody .datePickerDay.datePickerAddToRangeEnd:not(.datePickerDayRangeStart):not(.datePickerDayRangeEnd), .datePicker .datePickerBody .datePickerDay.datePickerAddToRangeMiddle, .datePicker .datePickerBody .datePickerDay.datePickerDayRangeMiddle:not(.datePickerAddToRangeStart):not(.datePickerAddToRangeEnd) {\n background-color: var(--primary-selected-color);\n border: var(--day-picker-days-horizontal-gap) var(--border-style) var(--primary-selected-color);\n border-top: none;\n border-bottom: none;\n width: calc(var(--day-picker-day-width) + 2 * var(--day-picker-days-horizontal-gap));\n}\n.datePicker .datePickerBody .datePickerDay.datePickerAddToRangeMiddle, .datePicker .datePickerBody .datePickerDay.datePickerDayRangeMiddle:not(.datePickerAddToRangeStart):not(.datePickerAddToRangeEnd) {\n background: var(--primary-selected-color);\n margin: var(--day-picker-days-vertical-gap) 0;\n border-radius: 0;\n}\n.datePicker .datePickerBody .datePickerDay.datePickerRemoveFromRange:not(.datePickerDayRangeStart):not(.datePickerDayRangeEnd), .datePicker .datePickerBody .datePickerDay.datePickerAddToRangeStart:not(.datePickerDayRangeMiddle):not(.datePickerDayRangeEnd), .datePicker .datePickerBody .datePickerDay.datePickerAddToRangeEnd:not(.datePickerDayRangeMiddle):not(.datePickerDayRangeStart), .datePicker .datePickerBody .datePickerDay.datePickerAddToRangeMiddle {\n background: var(--day-picker-day-change-range);\n border-color: var(--day-picker-day-change-range);\n}\n.datePicker .datePickerBody tr td:first-child .datePickerDay.datePickerDayRangeMiddle, .datePicker .datePickerBody tr td:first-child .datePickerDay.datePickerAddToRangeStart:not(.datePickerDayRangeStart):not(.datePickerDayRangeEnd), .datePicker .datePickerBody tr td:first-child .datePickerDay.datePickerAddToRangeMiddle, .datePicker .datePickerBody tr td:first-child .datePickerDay.datePickerAddToRangeEnd:not(.datePickerDayRangeStart):not(.datePickerDayRangeEnd) {\n border: none;\n width: calc(var(--day-picker-day-width) + var(--day-picker-days-horizontal-gap));\n margin-inline-start: var(--day-picker-days-horizontal-gap);\n border-inline-end: var(--day-picker-days-horizontal-gap) solid var(--primary-selected-color);\n border-start-start-radius: var(--border-radius-small);\n border-end-start-radius: var(--border-radius-small);\n}\n.datePicker .datePickerBody tr td:first-child .datePickerDay.datePickerRemoveFromRange {\n border-color: var(--day-picker-day-change-range);\n}\n.datePicker .datePickerBody tr td:first-child .datePickerDay.datePickerAddToRangeEnd, .datePicker .datePickerBody tr td:first-child .datePickerDay.datePickerDayRangeEnd:not(.datePickerDayRangeStart) {\n margin-inline-end: 0;\n}\n.datePicker .datePickerBody tr td:last-child .datePickerDay.datePickerDayRangeMiddle, .datePicker .datePickerBody tr td:last-child .datePickerDay.datePickerAddToRangeStart:not(.datePickerDayRangeStart):not(.datePickerDayRangeEnd), .datePicker .datePickerBody tr td:last-child .datePickerDay.datePickerAddToRangeMiddle, .datePicker .datePickerBody tr td:last-child .datePickerDay.datePickerAddToRangeEnd:not(.datePickerDayRangeStart):not(.datePickerDayRangeEnd) {\n border: none;\n width: calc(var(--day-picker-day-width) + var(--day-picker-days-horizontal-gap));\n margin-inline-end: var(--day-picker-days-horizontal-gap);\n border-inline-start: var(--day-picker-days-horizontal-gap) solid var(--primary-selected-color);\n border-start-end-radius: var(--border-radius-small);\n border-end-end-radius: var(--border-radius-small);\n}\n.datePicker .datePickerBody tr td:last-child .datePickerDay.datePickerRemoveFromRange {\n border-color: var(--day-picker-day-change-range);\n}\n.datePicker .datePickerBody tr td:last-child .datePickerDay.datePickerAddToRangeStart, .datePicker .datePickerBody tr td:last-child .datePickerDay.datePickerDayRangeStart:not(.datePickerDayRangeEnd) {\n margin-inline-start: 0;\n}\n.datePicker .datePickerBody tr td:first-child .datePickerDay.datePickerAddToRangeStart:not(.datePickerDayRangeMiddle), .datePicker .datePickerBody tr td:first-child .datePickerDay.datePickerAddToRangeMiddle, .datePicker .datePickerBody tr td:first-child .datePickerDay.datePickerAddToRangeEnd:not(.datePickerDayRangeMiddle),\n.datePicker .datePickerBody tr td:last-child .datePickerDay.datePickerAddToRangeStart:not(.datePickerDayRangeMiddle),\n.datePicker .datePickerBody tr td:last-child .datePickerDay.datePickerAddToRangeMiddle,\n.datePicker .datePickerBody tr td:last-child .datePickerDay.datePickerAddToRangeEnd:not(.datePickerDayRangeMiddle) {\n border-color: var(--day-picker-day-change-range);\n}\n.datePicker .datePickerBody tr td:first-child .datePickerDay.datePickerDaySelected.datePickerDayRangeEnd.datePickerAddToRangeStart,\n.datePicker .datePickerBody tr td:last-child .datePickerDay.datePickerDaySelected.datePickerDayRangeEnd.datePickerAddToRangeStart {\n border-inline-start-width: 0;\n}\n.datePicker .datePickerBody tr td:first-child .datePickerDay.datePickerDaySelected.datePickerDayRangeStart.datePickerAddToRangeEnd,\n.datePicker .datePickerBody tr td:last-child .datePickerDay.datePickerDaySelected.datePickerDayRangeStart.datePickerAddToRangeEnd {\n border-inline-end-width: 0;\n}\n.datePicker .datePickerBody .datePickerDaySelected.datePickerDayRangeEnd.datePickerAddToRangeStart {\n border-radius: var(--border-radius-small) !important;\n border-color: var(--primary-color) !important;\n background-color: var(--primary-color) !important;\n}\n.datePicker .datePickerBody .datePickerDaySelected.datePickerDayRangeEnd.datePickerAddToRangeStart:not(.datePickerHalfRangeSelected) {\n margin-inline-start: calc(var(--day-picker-days-horizontal-gap) * -1);\n}\n.datePicker .datePickerBody .datePickerDaySelected.datePickerDayRangeStart.datePickerAddToRangeEnd {\n border-radius: var(--border-radius-small) !important;\n border-color: var(--primary-color) !important;\n background-color: var(--primary-color) !important;\n}\n.datePicker .datePickerBody .datePickerDaySelected.datePickerDayRangeStart.datePickerAddToRangeEnd:not(.datePickerHalfRangeSelected) {\n margin-inline-end: calc(var(--day-picker-days-horizontal-gap) * -1);\n}');export{e as default};
2
+ //# sourceMappingURL=DatePicker.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import type { VibeComponentProps } from "@vibe/shared";
2
+ import type { Intent } from "./utils";
3
+ interface DatePickerBaseProps extends VibeComponentProps {
4
+ mode?: "single" | "range";
5
+ date: Date | undefined;
6
+ endDate?: Date | undefined;
7
+ firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
8
+ showWeekNumber?: boolean;
9
+ isDateDisabled?: (date: Date) => boolean;
10
+ locale?: Locale;
11
+ monthSelectionAriaLabel?: string;
12
+ yearSelectionAriaLabel?: string;
13
+ nextButtonAriaLabel?: string;
14
+ prevButtonAriaLabel?: string;
15
+ dayClassName?: string;
16
+ selectedDayClassName?: string;
17
+ dropdownsClassName?: string;
18
+ intent?: Intent;
19
+ dialogContainerSelector?: string;
20
+ }
21
+ interface DatePickerSingleProps extends DatePickerBaseProps {
22
+ mode?: "single";
23
+ onDateChange: (date: Date | undefined) => void;
24
+ }
25
+ export type DatePickerRange = {
26
+ date: Date | undefined;
27
+ endDate: Date | undefined;
28
+ };
29
+ interface DatePickerRangeProps extends DatePickerBaseProps {
30
+ mode: "range";
31
+ onDateChange: (range: DatePickerRange) => void;
32
+ }
33
+ export type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;
34
+ export {};
@@ -0,0 +1,17 @@
1
+ import { type FC } from "react";
2
+ import { type Locale } from "date-fns";
3
+ export interface DatePickerHeaderProps {
4
+ setDisplayMonth: (displayMonth: Date) => void;
5
+ monthSelectionAriaLabel?: string;
6
+ yearSelectionAriaLabel?: string;
7
+ nextButtonAriaLabel?: string;
8
+ prevButtonAriaLabel?: string;
9
+ locale?: Locale;
10
+ className?: string;
11
+ dropdownsClassName?: string;
12
+ dialogContainerSelector?: string;
13
+ }
14
+ declare const DatePickerHeader: FC<DatePickerHeaderProps>;
15
+ export default DatePickerHeader;
16
+ export declare function getYearButtonLabel(displayMonth: Date, locale: Locale): string;
17
+ export declare function getMonthButtonLabel(displayMonth: Date, locale: Locale): string;
@@ -0,0 +1,2 @@
1
+ import e,{useCallback as a,useMemo as t}from"react";import o from"classnames";import{useDayPicker as r,useNavigation as l}from"react-day-picker";import{IconButton as n}from"@vibe/icon-button";import{Flex as s}from"@vibe/layout";import{Dropdown as i}from"@vibe/dropdown";import{DropdownChevronLeft as m,DropdownChevronRight as c}from"@vibe/icons";import u from"./DatePickerHeader.module.scss.js";import{useMonthsOptionItems as p,useYearsOptionItems as d}from"./datePickerHooks.js";import{format as b}from"date-fns";const v=({setDisplayMonth:b,monthSelectionAriaLabel:v,yearSelectionAriaLabel:y,nextButtonAriaLabel:g,prevButtonAriaLabel:k,locale:M,className:D})=>{const{month:w}=r(),{goToMonth:E,nextMonth:j,previousMonth:B}=l(),C=a((()=>E(j)),[E,j]),N=a((()=>E(B)),[E,B]),z=p({locale:M}),A=d({locale:M}),L=t((()=>z.map((e=>Object.assign(Object.assign({},e),{value:e.id})))),[z]),O=t((()=>A.map((e=>Object.assign(Object.assign({},e),{value:e.id})))),[A]),x=t((()=>h(w,M)),[w,M]),H=t((()=>f(w,M)),[w,M]),P=a((e=>{const a=e.value,t=new Date(w);t.setMonth(+a),b(t)}),[w,b]),F=a((e=>{const a=e.value,t=new Date(w);t.setFullYear(+a),b(t)}),[w,b]),R=t((()=>L.find((e=>e.value===""+w.getMonth()))),[L,w]),S=t((()=>O.find((e=>e.value===""+w.getFullYear()))),[O,w]);return e.createElement("div",{className:o(u.datePickerHeader,D)},e.createElement(s,{gap:"small"},e.createElement(i,{className:u.monthButtonDropdown,"aria-label":v,options:L,value:R,onChange:P,menuWrapperClassName:u.monthButtonDropdown,size:"small",valueRenderer:e=>x,searchable:!1,clearable:!1,borderless:!0}),e.createElement(i,{className:u.yearButtonDropdown,"aria-label":y,options:O,value:S,onChange:F,menuWrapperClassName:u.yearButtonDropdown,size:"small",valueRenderer:e=>H,searchable:!1,clearable:!1,borderless:!0})),e.createElement(s,null,e.createElement(n,{kind:"tertiary",size:"small","aria-label":k,onClick:N,icon:m}),e.createElement(n,{kind:"tertiary",size:"small","aria-label":g,onClick:C,icon:c})))};function f(e,a){return b(e,"yyyy",{locale:a})}function h(e,a){return b(e,"MMM",{locale:a})}export{v as default,h as getMonthButtonLabel,f as getYearButtonLabel};
2
+ //# sourceMappingURL=DatePickerHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePickerHeader.js","sources":["../../../src/DatePicker/DatePickerHeader.tsx"],"sourcesContent":["import React, { type FC, useCallback, useMemo } from \"react\";\nimport cx from \"classnames\";\nimport { useDayPicker, useNavigation } from \"react-day-picker\";\nimport { IconButton } from \"@vibe/icon-button\";\nimport { Flex } from \"@vibe/layout\";\nimport { Dropdown } from \"@vibe/dropdown\";\nimport { DropdownChevronRight, DropdownChevronLeft } from \"@vibe/icons\";\nimport styles from \"./DatePickerHeader.module.scss\";\nimport { useMonthsOptionItems, useYearsOptionItems, type DatePickerDropdownItem } from \"./datePickerHooks\";\nimport { format, type Locale } from \"date-fns\";\n\nexport interface DatePickerHeaderProps {\n setDisplayMonth: (displayMonth: Date) => void;\n monthSelectionAriaLabel?: string;\n yearSelectionAriaLabel?: string;\n nextButtonAriaLabel?: string;\n prevButtonAriaLabel?: string;\n locale?: Locale;\n className?: string;\n dropdownsClassName?: string;\n dialogContainerSelector?: string;\n}\n\nconst DatePickerHeader: FC<DatePickerHeaderProps> = ({\n setDisplayMonth,\n monthSelectionAriaLabel,\n yearSelectionAriaLabel,\n nextButtonAriaLabel,\n prevButtonAriaLabel,\n locale,\n className,\n dialogContainerSelector: _dialogContainerSelector\n}) => {\n const { month: displayMonth } = useDayPicker();\n const { goToMonth, nextMonth, previousMonth } = useNavigation();\n const goToNextMonth = useCallback(() => goToMonth(nextMonth), [goToMonth, nextMonth]);\n const goToPreviousMonth = useCallback(() => goToMonth(previousMonth), [goToMonth, previousMonth]);\n const monthsData = useMonthsOptionItems({ locale });\n const yearsData = useYearsOptionItems({ locale });\n\n const months = useMemo(() => monthsData.map(item => ({ ...item, value: item.id })), [monthsData]);\n const years = useMemo(() => yearsData.map(item => ({ ...item, value: item.id })), [yearsData]);\n const monthButtonLabel = useMemo(() => getMonthButtonLabel(displayMonth, locale), [displayMonth, locale]);\n const yearsButtonLabel = useMemo(() => getYearButtonLabel(displayMonth, locale), [displayMonth, locale]);\n\n const onMonthSelect = useCallback(\n (option: DatePickerDropdownItem) => {\n const month = option.value;\n const date = new Date(displayMonth);\n date.setMonth(+month);\n setDisplayMonth(date);\n },\n [displayMonth, setDisplayMonth]\n );\n\n const onYearSelect = useCallback(\n (option: DatePickerDropdownItem) => {\n const year = option.value;\n const date = new Date(displayMonth);\n date.setFullYear(+year);\n setDisplayMonth(date);\n },\n [displayMonth, setDisplayMonth]\n );\n\n const selectedMonth = useMemo(\n () => months.find(month => month.value === displayMonth.getMonth().toString()),\n [months, displayMonth]\n );\n const selectedYear = useMemo(\n () => years.find(year => year.value === displayMonth.getFullYear().toString()),\n [years, displayMonth]\n );\n\n return (\n <div className={cx(styles.datePickerHeader, className)}>\n <Flex gap=\"small\">\n <Dropdown\n className={styles.monthButtonDropdown}\n aria-label={monthSelectionAriaLabel}\n options={months}\n value={selectedMonth}\n onChange={onMonthSelect}\n menuWrapperClassName={styles.monthButtonDropdown}\n size=\"small\"\n valueRenderer={(_option: DatePickerDropdownItem) => monthButtonLabel}\n searchable={false}\n clearable={false}\n borderless\n />\n <Dropdown\n className={styles.yearButtonDropdown}\n aria-label={yearSelectionAriaLabel}\n options={years}\n value={selectedYear}\n onChange={onYearSelect}\n menuWrapperClassName={styles.yearButtonDropdown}\n size=\"small\"\n valueRenderer={(_option: DatePickerDropdownItem) => yearsButtonLabel}\n searchable={false}\n clearable={false}\n borderless\n />\n </Flex>\n <Flex>\n <IconButton\n kind=\"tertiary\"\n size=\"small\"\n aria-label={prevButtonAriaLabel}\n onClick={goToPreviousMonth}\n icon={DropdownChevronLeft}\n />\n <IconButton\n kind=\"tertiary\"\n size=\"small\"\n aria-label={nextButtonAriaLabel}\n onClick={goToNextMonth}\n icon={DropdownChevronRight}\n />\n </Flex>\n </div>\n );\n};\n\nexport default DatePickerHeader;\n\nexport function getYearButtonLabel(displayMonth: Date, locale: Locale) {\n return format(displayMonth, \"yyyy\", { locale });\n}\n\nexport function getMonthButtonLabel(displayMonth: Date, locale: Locale) {\n return format(displayMonth, \"MMM\", { locale });\n}\n"],"names":["DatePickerHeader","setDisplayMonth","monthSelectionAriaLabel","yearSelectionAriaLabel","nextButtonAriaLabel","prevButtonAriaLabel","locale","className","month","displayMonth","useDayPicker","goToMonth","nextMonth","previousMonth","useNavigation","goToNextMonth","useCallback","goToPreviousMonth","monthsData","useMonthsOptionItems","yearsData","useYearsOptionItems","months","useMemo","map","item","Object","assign","value","id","years","monthButtonLabel","getMonthButtonLabel","yearsButtonLabel","getYearButtonLabel","onMonthSelect","option","date","Date","setMonth","onYearSelect","year","setFullYear","selectedMonth","find","getMonth","selectedYear","getFullYear","React","createElement","cx","styles","datePickerHeader","Flex","gap","Dropdown","monthButtonDropdown","options","onChange","menuWrapperClassName","size","valueRenderer","_option","searchable","clearable","borderless","yearButtonDropdown","IconButton","kind","onClick","icon","DropdownChevronLeft","DropdownChevronRight","format"],"mappings":"kgBAuBMA,MAAAA,EAA8CA,EAClDC,kBACAC,0BACAC,yBACAC,sBACAC,sBACAC,SACAC,gBAGA,MAAQC,MAAOC,GAAiBC,KAC1BC,UAAEA,EAASC,UAAEA,EAASC,cAAEA,GAAkBC,IAC1CC,EAAgBC,GAAY,IAAML,EAAUC,IAAY,CAACD,EAAWC,IACpEK,EAAoBD,GAAY,IAAML,EAAUE,IAAgB,CAACF,EAAWE,IAC5EK,EAAaC,EAAqB,CAAEb,WACpCc,EAAYC,EAAoB,CAAEf,WAElCgB,EAASC,GAAQ,IAAML,EAAWM,KAAIC,GAAcC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAF,GAAM,CAAAG,MAAOH,EAAKI,QAAQ,CAACX,IAC/EY,EAAQP,GAAQ,IAAMH,EAAUI,KAAIC,GAAcC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAF,GAAM,CAAAG,MAAOH,EAAKI,QAAQ,CAACT,IAC7EW,EAAmBR,GAAQ,IAAMS,EAAoBvB,EAAcH,IAAS,CAACG,EAAcH,IAC3F2B,EAAmBV,GAAQ,IAAMW,EAAmBzB,EAAcH,IAAS,CAACG,EAAcH,IAE1F6B,EAAgBnB,GACnBoB,IACC,MAAM5B,EAAQ4B,EAAOR,MACfS,EAAO,IAAIC,KAAK7B,GACtB4B,EAAKE,UAAU/B,GACfP,EAAgBoC,EAAK,GAEvB,CAAC5B,EAAcR,IAGXuC,EAAexB,GAClBoB,IACC,MAAMK,EAAOL,EAAOR,MACdS,EAAO,IAAIC,KAAK7B,GACtB4B,EAAKK,aAAaD,GAClBxC,EAAgBoC,EAAK,GAEvB,CAAC5B,EAAcR,IAGX0C,EAAgBpB,GACpB,IAAMD,EAAOsB,MAAKpC,GAASA,EAAMoB,QAAUnB,KAAaoC,cACxD,CAACvB,EAAQb,IAELqC,EAAevB,GACnB,IAAMO,EAAMc,MAAKH,GAAQA,EAAKb,QAAUnB,KAAasC,iBACrD,CAACjB,EAAOrB,IAGV,OACEuC,EAAKC,cAAA,MAAA,CAAA1C,UAAW2C,EAAGC,EAAOC,iBAAkB7C,IAC1CyC,EAAAC,cAACI,EAAI,CAACC,IAAI,SACRN,EAACC,cAAAM,GACChD,UAAW4C,EAAOK,oBACN,aAAAtD,EACZuD,QAASnC,EACTM,MAAOe,EACPe,SAAUvB,EACVwB,qBAAsBR,EAAOK,oBAC7BI,KAAK,QACLC,cAAgBC,GAAoC/B,EACpDgC,YAAY,EACZC,WAAW,EACXC,YACA,IACFjB,EAACC,cAAAM,GACChD,UAAW4C,EAAOe,mBACN,aAAA/D,EACZsD,QAAS3B,EACTF,MAAOkB,EACPY,SAAUlB,EACVmB,qBAAsBR,EAAOe,mBAC7BN,KAAK,QACLC,cAAgBC,GAAoC7B,EACpD8B,YAAY,EACZC,WAAW,EACXC,YAAU,KAGdjB,EAAAC,cAACI,EAAI,KACHL,EAAAC,cAACkB,EACC,CAAAC,KAAK,WACLR,KAAK,qBACOvD,EACZgE,QAASpD,EACTqD,KAAMC,IAERvB,EAACC,cAAAkB,GACCC,KAAK,WACLR,KAAK,QACO,aAAAxD,EACZiE,QAAStD,EACTuD,KAAME,KAGN,EAMM,SAAAtC,EAAmBzB,EAAoBH,GACrD,OAAOmE,EAAOhE,EAAc,OAAQ,CAAEH,UACxC,CAEgB,SAAA0B,EAAoBvB,EAAoBH,GACtD,OAAOmE,EAAOhE,EAAc,MAAO,CAAEH,UACvC"}
@@ -0,0 +1,2 @@
1
+ var e={monthButtonDropdown:"monthButtonDropdown",yearButtonDropdown:"yearButtonDropdown",datePickerHeader:"datePickerHeader"};!function(e){const t="s_id-a12251d5376d_4_0_0";if("undefined"!=typeof document){const n=document.head||document.getElementsByTagName("head")[0];if(n.querySelector("#"+t))return;const o=document.createElement("style");o.id=t,n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.appendChild(document.createTextNode(e))}else globalThis.injectedStyles&&(globalThis.injectedStyles[t]=e)}("/* stylelint-disable */\n/* stylelint-enable */\n.monthButtonDropdown {\n min-width: 70px;\n justify-content: space-between;\n}\n.yearButtonDropdown {\n justify-content: space-between;\n}\n.datePickerHeader {\n font: var(--font-text2-normal);\n height: var(--day-picker-header-height);\n color: var(--primary-text-color);\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n}\n.datePickerHeader button:focus:not(:active), .datePickerHeader button:focus-visible {\n box-shadow: 0 0 0 2px var(--primary-color);\n background: var(--primary-background-color) !important;\n}");export{e as default};
2
+ //# sourceMappingURL=DatePickerHeader.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePickerHeader.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import { type DayContentProps as DatePickerDayContentProps } from "react-day-picker";
3
+ export declare const RangeDayContent: (props: DatePickerDayContentProps) => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import e from"classnames";import t,{useRef as r,useEffect as n}from"react";import{DayContent as o}from"react-day-picker";import{useDayContentHoverContext as s}from"./DateContentHoverContext.js";import m from"./DatePicker.module.scss.js";const a=a=>{const{date:i,activeModifiers:l}=a,{setHover:c}=s(),u=r(null);return n((()=>{const e=u.current.closest("td"),t=()=>c(i),r=()=>c(void 0);return null==e||e.addEventListener("mouseenter",t),null==e||e.addEventListener("mouseleave",r),()=>{null==e||e.removeEventListener("mouseenter",t),null==e||e.removeEventListener("mouseleave",r)}}),[i,c]),t.createElement("div",{ref:u,className:e(m.datePickerDayContent,l)},t.createElement(o,Object.assign({},a)))};export{a as RangeDayContent};
2
+ //# sourceMappingURL=RangeDayContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangeDayContent.js","sources":["../../../src/DatePicker/RangeDayContent.tsx"],"sourcesContent":["import cx from \"classnames\";\nimport React, { useEffect, useRef } from \"react\";\nimport {\n type DayContentProps as DatePickerDayContentProps,\n DayContent as DatePickerDayContent\n} from \"react-day-picker\";\nimport { useDayContentHoverContext } from \"./DateContentHoverContext\";\nimport styles from \"./DatePicker.module.scss\";\n\nexport const RangeDayContent = (props: DatePickerDayContentProps) => {\n const { date, activeModifiers } = props;\n const { setHover } = useDayContentHoverContext();\n\n const ref = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const td = ref.current.closest(\"td\");\n const onMouseEnter = () => setHover(date);\n const onMouseLeave = () => setHover(undefined);\n\n td?.addEventListener(\"mouseenter\", onMouseEnter);\n td?.addEventListener(\"mouseleave\", onMouseLeave);\n\n return () => {\n td?.removeEventListener(\"mouseenter\", onMouseEnter);\n td?.removeEventListener(\"mouseleave\", onMouseLeave);\n };\n }, [date, setHover]);\n\n return (\n <div ref={ref} className={cx(styles.datePickerDayContent, activeModifiers)}>\n <DatePickerDayContent {...props} />\n </div>\n );\n};\n"],"names":["RangeDayContent","props","date","activeModifiers","setHover","useDayContentHoverContext","ref","useRef","useEffect","td","current","closest","onMouseEnter","onMouseLeave","undefined","addEventListener","removeEventListener","React","createElement","className","cx","styles","datePickerDayContent","DatePickerDayContent","Object","assign"],"mappings":"6OASaA,MAAAA,EAAmBC,IAC9B,MAAMC,KAAEA,EAAIC,gBAAEA,GAAoBF,GAC5BG,SAAEA,GAAaC,IAEfC,EAAMC,EAAuB,MAenC,OAdAC,GAAU,KACR,MAAMC,EAAKH,EAAII,QAAQC,QAAQ,MACzBC,EAAeA,IAAMR,EAASF,GAC9BW,EAAeA,IAAMT,OAASU,GAKpC,OAHAL,SAAAA,EAAIM,iBAAiB,aAAcH,GACnCH,SAAAA,EAAIM,iBAAiB,aAAcF,GAE5B,KACLJ,SAAAA,EAAIO,oBAAoB,aAAcJ,GACtCH,SAAAA,EAAIO,oBAAoB,aAAcH,EAAa,CACpD,GACA,CAACX,EAAME,IAGRa,EAAAC,cAAA,MAAA,CAAKZ,IAAKA,EAAKa,UAAWC,EAAGC,EAAOC,qBAAsBnB,IACxDc,EAAAC,cAACK,EAAyBC,OAAAC,OAAA,CAAA,EAAAxB,IACtB"}
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import { type DayContentProps as DatePickerDayContentProps } from "react-day-picker";
3
+ export declare const SingleDayContent: (dayContentProps: DatePickerDayContentProps) => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import e from"react";import{DayContent as t}from"react-day-picker";import r from"./DatePicker.module.scss.js";const a=a=>e.createElement("div",{className:r.datePickerDayContent},e.createElement(t,Object.assign({},a)));export{a as SingleDayContent};
2
+ //# sourceMappingURL=SingleDayContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SingleDayContent.js","sources":["../../../src/DatePicker/SingleDayContent.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n type DayContentProps as DatePickerDayContentProps,\n DayContent as DatePickerDayContent\n} from \"react-day-picker\";\nimport styles from \"./DatePicker.module.scss\";\n\nexport const SingleDayContent = (dayContentProps: DatePickerDayContentProps) => (\n <div className={styles.datePickerDayContent}>\n <DatePickerDayContent {...dayContentProps} />\n </div>\n);\n"],"names":["SingleDayContent","dayContentProps","React","createElement","className","styles","datePickerDayContent","DatePickerDayContent","Object","assign"],"mappings":"8GAOO,MAAMA,EAAoBC,GAC/BC,EAAKC,cAAA,MAAA,CAAAC,UAAWC,EAAOC,sBACrBJ,EAAAC,cAACI,EAAyBC,OAAAC,OAAA,CAAA,EAAAR"}
@@ -0,0 +1,18 @@
1
+ import { type Locale } from "date-fns";
2
+ export interface DatePickerDropdownItem {
3
+ id: string;
4
+ label: string;
5
+ value: string;
6
+ }
7
+ export declare const useMonthsOptionItems: ({ locale }: {
8
+ locale?: Locale;
9
+ }) => {
10
+ id: string;
11
+ label: string;
12
+ }[];
13
+ export declare const useYearsOptionItems: ({ locale }: {
14
+ locale?: Locale;
15
+ }) => {
16
+ id: string;
17
+ label: string;
18
+ }[];
@@ -0,0 +1,2 @@
1
+ import{useMemo as e}from"react";import{format as l}from"date-fns";const t=[0,1,2,3,4,5,6,7,8,9,10,11],a=({locale:a})=>e((()=>t.map((e=>{const t=new Date;return t.setMonth(e,1),{id:""+e,label:l(t,"LLL",{locale:a})}}))),[a]),r=({locale:t})=>e((()=>Array.from({length:201},((e,l)=>{const t=new Date;return t.setFullYear(t.getFullYear()-100+l),t})).map((e=>({id:""+e.getFullYear(),label:l(e,"yyyy",{locale:t})})))),[t]);export{a as useMonthsOptionItems,r as useYearsOptionItems};
2
+ //# sourceMappingURL=datePickerHooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datePickerHooks.js","sources":["../../../src/DatePicker/datePickerHooks.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { format, type Locale } from \"date-fns\";\n\nexport interface DatePickerDropdownItem {\n id: string;\n label: string;\n value: string;\n}\n\nconst monthsIndexes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\nexport const useMonthsOptionItems = ({ locale }: { locale?: Locale }) =>\n useMemo(\n () =>\n monthsIndexes.map(monthIndex => {\n const month = new Date();\n month.setMonth(monthIndex, 1);\n return { id: monthIndex.toString(), label: format(month, \"LLL\", { locale }) };\n }),\n [locale]\n );\n\n// returns a list of all years from 100 years ago to 100 years in the future\nconst YEARS_AGO = 100;\nconst YEARS_IN_FUTURE = 100;\nexport const useYearsOptionItems = ({ locale }: { locale?: Locale }) =>\n useMemo(\n () =>\n Array.from({ length: YEARS_AGO + YEARS_IN_FUTURE + 1 }, (_, i) => {\n const date = new Date();\n date.setFullYear(date.getFullYear() - YEARS_AGO + i);\n return date;\n }).map(year => ({\n id: year.getFullYear().toString(),\n label: format(year, \"yyyy\", { locale })\n })),\n [locale]\n );\n"],"names":["monthsIndexes","useMonthsOptionItems","locale","useMemo","map","monthIndex","month","Date","setMonth","id","label","format","useYearsOptionItems","Array","from","length","YEARS_AGO","_","i","date","setFullYear","getFullYear","year"],"mappings":"kEASA,MAAMA,EAAgB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAC5CC,EAAuBA,EAAGC,YACrCC,GACE,IACEH,EAAcI,KAAIC,IAChB,MAAMC,EAAQ,IAAIC,KAElB,OADAD,EAAME,SAASH,EAAY,GACpB,CAAEI,GAAIJ,KAAuBK,MAAOC,EAAOL,EAAO,MAAO,CAAEJ,WAAW,KAEjF,CAACA,IAMQU,EAAsBA,EAAGV,YACpCC,GACE,IACEU,MAAMC,KAAK,CAAEC,OAAQC,MAAmC,CAACC,EAAGC,KAC1D,MAAMC,EAAO,IAAIZ,KAEjB,OADAY,EAAKC,YAAYD,EAAKE,cAPZ,IAOwCH,GAC3CC,CAAI,IACVf,KAAIkB,IAAS,CACdb,GAAIa,KAAKD,cACTX,MAAOC,EAAOW,EAAM,OAAQ,CAAEpB,gBAElC,CAACA"}
@@ -0,0 +1,2 @@
1
+ export { default as DatePicker } from "./DatePicker";
2
+ export * from "./DatePicker.types";
@@ -0,0 +1,13 @@
1
+ import { type DateRange, type Matcher } from "react-day-picker";
2
+ export type Intent = "to" | "from";
3
+ export declare function addToRange(day: Date, { from, to }: DateRange, intent: Intent): DateRange;
4
+ export declare const AddToRangeMiddle = "addToRangeMiddle";
5
+ export declare const AddToRangeStart = "addToRangeStart";
6
+ export declare const AddToRangeEnd = "addToRangeEnd";
7
+ export declare const RemoveFromRange = "removeFromRange";
8
+ export declare const HoveredDayExists = "HoveredDayExists";
9
+ export declare const HalfRangeSelected = "HalfRangeSelected";
10
+ type GetDateNextStateResult = typeof AddToRangeMiddle | typeof AddToRangeStart | typeof AddToRangeEnd | typeof RemoveFromRange | undefined;
11
+ export declare function addToRangeNextState(day: Date, dayToAdd: Date, range: DateRange, intent: Intent): GetDateNextStateResult;
12
+ export declare function addToRangeModifiers(dayToAdd: Date, range: DateRange, intent: Intent): Record<string, Matcher>;
13
+ export {};
@@ -0,0 +1,2 @@
1
+ import{isBefore as r,isSameDay as o,isAfter as t}from"date-fns";function f(f,{from:e,to:n},i){if(!e&&!n)return"from"===i?{from:f,to:void 0}:{from:void 0,to:f};if(!e)return r(f,n)?{from:f,to:n}:{from:n,to:f};if(!n)return r(f,e)?{from:f,to:e}:{from:e,to:f};if("to"===i){if(o(f,e)&&o(f,n))return{from:void 0};if(o(f,e))return{from:void 0};if(r(f,e))return{from:f,to:n};if(t(f,e)&&r(f,n))return{from:e,to:f};if(t(f,n)||o(f,n))return{from:e,to:f}}else{if(o(f,e)&&o(f,n))return{from:void 0};if(o(f,n))return{from:f,to:f};if(t(f,n))return{from:e,to:f};if(r(f,n)&&t(f,e))return{from:f,to:n};if(r(f,e))return{from:f,to:n};if(o(f,n))return{from:f}}return{from:e,to:f}}const e=(f,e)=>!(!e.from||!e.to)&&((t(f,e.from)||o(f,e.from))&&(r(f,e.to)||o(f,e.to))),n="addToRangeMiddle",i="addToRangeStart",m="addToRangeEnd",u="removeFromRange",d="HoveredDayExists",a="HalfRangeSelected";function v(r,t,d,a){if(!t)return;const v=f(t,d,a);if(e(r,v)||e(r,d)){if(o(r,v.to)&&!o(r,d.to))return m;if(o(r,v.from)&&!o(r,d.from))return i;if(e(r,v)){if(e(r,d))return;return o(r,v.from)?i:o(r,v.to)?m:e(t,d)?void 0:n}return e(t,d)?u:void 0}}function c(r,o,t){return{[d]:()=>!!r,[a]:()=>!(!o||!(!o.from&&o.to||o.from&&!o.to)),[n]:f=>v(f,r,o,t)===n,[i]:f=>v(f,r,o,t)===i,[m]:f=>v(f,r,o,t)===m,[u]:f=>v(f,r,o,t)===u}}export{m as AddToRangeEnd,n as AddToRangeMiddle,i as AddToRangeStart,a as HalfRangeSelected,d as HoveredDayExists,u as RemoveFromRange,f as addToRange,c as addToRangeModifiers,v as addToRangeNextState};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../src/DatePicker/utils.ts"],"sourcesContent":["import { isAfter, isBefore, isSameDay } from \"date-fns\";\nimport { type DateRange, type Matcher } from \"react-day-picker\";\n\nexport type Intent = \"to\" | \"from\";\n\nexport function addToRange(day: Date, { from, to }: DateRange, intent: Intent): DateRange {\n if (!from && !to) {\n return intent === \"from\" ? { from: day, to: undefined } : { from: undefined, to: day };\n }\n\n if (!from) {\n if (isBefore(day, to)) {\n return { from: day, to };\n }\n\n return { from: to, to: day };\n }\n\n if (!to) {\n if (isBefore(day, from)) {\n return { from: day, to: from };\n }\n\n return { from, to: day };\n }\n\n if (intent === \"to\") {\n if (isSameDay(day, from) && isSameDay(day, to)) {\n return { from: undefined };\n }\n\n if (isSameDay(day, from)) {\n // both from & to selected + user clicks on start -> clear selection\n return { from: undefined };\n }\n\n if (isBefore(day, from)) {\n return { from: day, to };\n }\n\n if (isAfter(day, from) && isBefore(day, to)) {\n return { from, to: day };\n }\n\n if (isAfter(day, to) || isSameDay(day, to)) {\n return { from, to: day };\n }\n } else {\n // intent is from\n if (isSameDay(day, from) && isSameDay(day, to)) {\n return { from: undefined };\n }\n\n if (isSameDay(day, to)) {\n return { from: day, to: day };\n }\n\n if (isAfter(day, to)) {\n return { from, to: day };\n }\n\n if (isBefore(day, to) && isAfter(day, from)) {\n return { from: day, to };\n }\n\n if (isBefore(day, from)) {\n return { from: day, to };\n }\n\n if (isSameDay(day, to)) {\n // both from & to selected + user clicks on end -> end becomes start\n return { from: day };\n }\n }\n\n return { from, to: day };\n}\n\nconst isInRange = (day: Date, range: DateRange): boolean => {\n if (!range.from || !range.to) {\n return false;\n }\n\n return (\n (isAfter(day, range.from) || isSameDay(day, range.from)) && (isBefore(day, range.to) || isSameDay(day, range.to))\n );\n};\n\nexport const AddToRangeMiddle = \"addToRangeMiddle\";\nexport const AddToRangeStart = \"addToRangeStart\";\nexport const AddToRangeEnd = \"addToRangeEnd\";\nexport const RemoveFromRange = \"removeFromRange\";\nexport const HoveredDayExists = \"HoveredDayExists\";\nexport const HalfRangeSelected = \"HalfRangeSelected\";\n\ntype GetDateNextStateResult =\n | typeof AddToRangeMiddle\n | typeof AddToRangeStart\n | typeof AddToRangeEnd\n | typeof RemoveFromRange\n | undefined;\n\nexport function addToRangeNextState(\n day: Date,\n dayToAdd: Date,\n range: DateRange,\n intent: Intent\n): GetDateNextStateResult {\n if (!dayToAdd) {\n return undefined;\n }\n\n const nextRange = addToRange(dayToAdd, range, intent);\n\n if (!isInRange(day, nextRange) && !isInRange(day, range)) {\n return undefined;\n }\n\n if (isSameDay(day, nextRange.to) && !isSameDay(day, range.to)) {\n return AddToRangeEnd;\n }\n\n if (isSameDay(day, nextRange.from) && !isSameDay(day, range.from)) {\n return AddToRangeStart;\n }\n\n if (isInRange(day, nextRange)) {\n if (isInRange(day, range)) {\n return undefined;\n }\n\n if (isSameDay(day, nextRange.from)) {\n return AddToRangeStart;\n }\n\n if (isSameDay(day, nextRange.to)) {\n return AddToRangeEnd;\n }\n\n return !isInRange(dayToAdd, range) ? AddToRangeMiddle : undefined;\n }\n\n return isInRange(dayToAdd, range) ? RemoveFromRange : undefined;\n}\n\nexport function addToRangeModifiers(dayToAdd: Date, range: DateRange, intent: Intent): Record<string, Matcher> {\n return {\n [HoveredDayExists]: () => !!dayToAdd,\n [HalfRangeSelected]: () => !!(range && ((!range.from && range.to) || (range.from && !range.to))),\n [AddToRangeMiddle]: (day: Date) => addToRangeNextState(day, dayToAdd, range, intent) === AddToRangeMiddle,\n [AddToRangeStart]: (day: Date) => addToRangeNextState(day, dayToAdd, range, intent) === AddToRangeStart,\n [AddToRangeEnd]: (day: Date) => addToRangeNextState(day, dayToAdd, range, intent) === AddToRangeEnd,\n [RemoveFromRange]: (day: Date) => addToRangeNextState(day, dayToAdd, range, intent) === RemoveFromRange\n };\n}\n"],"names":["addToRange","day","from","to","intent","undefined","isBefore","isSameDay","isAfter","isInRange","range","AddToRangeMiddle","AddToRangeStart","AddToRangeEnd","RemoveFromRange","HoveredDayExists","HalfRangeSelected","addToRangeNextState","dayToAdd","nextRange","addToRangeModifiers"],"mappings":"gEAKM,SAAUA,EAAWC,GAAWC,KAAEA,EAAIC,GAAEA,GAAiBC,GAC7D,IAAKF,IAASC,EACZ,MAAkB,SAAXC,EAAoB,CAAEF,KAAMD,EAAKE,QAAIE,GAAc,CAAEH,UAAMG,EAAWF,GAAIF,GAGnF,IAAKC,EACH,OAAII,EAASL,EAAKE,GACT,CAAED,KAAMD,EAAKE,MAGf,CAAED,KAAMC,EAAIA,GAAIF,GAGzB,IAAKE,EACH,OAAIG,EAASL,EAAKC,GACT,CAAEA,KAAMD,EAAKE,GAAID,GAGnB,CAAEA,OAAMC,GAAIF,GAGrB,GAAe,OAAXG,EAAiB,CACnB,GAAIG,EAAUN,EAAKC,IAASK,EAAUN,EAAKE,GACzC,MAAO,CAAED,UAAMG,GAGjB,GAAIE,EAAUN,EAAKC,GAEjB,MAAO,CAAEA,UAAMG,GAGjB,GAAIC,EAASL,EAAKC,GAChB,MAAO,CAAEA,KAAMD,EAAKE,MAGtB,GAAIK,EAAQP,EAAKC,IAASI,EAASL,EAAKE,GACtC,MAAO,CAAED,OAAMC,GAAIF,GAGrB,GAAIO,EAAQP,EAAKE,IAAOI,EAAUN,EAAKE,GACrC,MAAO,CAAED,OAAMC,GAAIF,EAEvB,KAAO,CAEL,GAAIM,EAAUN,EAAKC,IAASK,EAAUN,EAAKE,GACzC,MAAO,CAAED,UAAMG,GAGjB,GAAIE,EAAUN,EAAKE,GACjB,MAAO,CAAED,KAAMD,EAAKE,GAAIF,GAG1B,GAAIO,EAAQP,EAAKE,GACf,MAAO,CAAED,OAAMC,GAAIF,GAGrB,GAAIK,EAASL,EAAKE,IAAOK,EAAQP,EAAKC,GACpC,MAAO,CAAEA,KAAMD,EAAKE,MAGtB,GAAIG,EAASL,EAAKC,GAChB,MAAO,CAAEA,KAAMD,EAAKE,MAGtB,GAAII,EAAUN,EAAKE,GAEjB,MAAO,CAAED,KAAMD,EAEnB,CAEA,MAAO,CAAEC,OAAMC,GAAIF,EACrB,CAEA,MAAMQ,EAAYA,CAACR,EAAWS,OACvBA,EAAMR,OAASQ,EAAMP,OAKvBK,EAAQP,EAAKS,EAAMR,OAASK,EAAUN,EAAKS,EAAMR,SAAWI,EAASL,EAAKS,EAAMP,KAAOI,EAAUN,EAAKS,EAAMP,MAIpGQ,EAAmB,mBACnBC,EAAkB,kBAClBC,EAAgB,gBAChBC,EAAkB,kBAClBC,EAAmB,mBACnBC,EAAoB,oBAS3B,SAAUC,EACdhB,EACAiB,EACAR,EACAN,GAEA,IAAKc,EACH,OAGF,MAAMC,EAAYnB,EAAWkB,EAAUR,EAAON,GAE9C,GAAKK,EAAUR,EAAKkB,IAAeV,EAAUR,EAAKS,GAAlD,CAIA,GAAIH,EAAUN,EAAKkB,EAAUhB,MAAQI,EAAUN,EAAKS,EAAMP,IACxD,OAAOU,EAGT,GAAIN,EAAUN,EAAKkB,EAAUjB,QAAUK,EAAUN,EAAKS,EAAMR,MAC1D,OAAOU,EAGT,GAAIH,EAAUR,EAAKkB,GAAY,CAC7B,GAAIV,EAAUR,EAAKS,GACjB,OAGF,OAAIH,EAAUN,EAAKkB,EAAUjB,MACpBU,EAGLL,EAAUN,EAAKkB,EAAUhB,IACpBU,EAGDJ,EAAUS,EAAUR,QAA4BL,EAAnBM,CACvC,CAEA,OAAOF,EAAUS,EAAUR,GAASI,OAAkBT,CA1BtD,CA2BF,UAEgBe,EAAoBF,EAAgBR,EAAkBN,GACpE,MAAO,CACLW,CAACA,GAAmB,MAAQG,EAC5BF,CAACA,GAAoB,OAASN,MAAYA,EAAMR,MAAQQ,EAAMP,IAAQO,EAAMR,OAASQ,EAAMP,KAC3FQ,CAACA,GAAoBV,GAAcgB,EAAoBhB,EAAKiB,EAAUR,EAAON,KAAYO,EACzFC,CAACA,GAAmBX,GAAcgB,EAAoBhB,EAAKiB,EAAUR,EAAON,KAAYQ,EACxFC,CAACA,GAAiBZ,GAAcgB,EAAoBhB,EAAKiB,EAAUR,EAAON,KAAYS,EACtFC,CAACA,GAAmBb,GAAcgB,EAAoBhB,EAAKiB,EAAUR,EAAON,KAAYU,EAE5F"}
@@ -0,0 +1 @@
1
+ export * from "./DatePicker";
@@ -0,0 +1,2 @@
1
+ export{default as DatePicker}from"./DatePicker/DatePicker.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "@vibe/date-picker",
3
+ "version": "4.0.0",
4
+ "description": "Vibe sub-package for DatePicker component",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/mondaycom/vibe.git",
8
+ "directory": "packages/components/date-picker"
9
+ },
10
+ "bugs": {
11
+ "url": "https://github.com/mondaycom/vibe/issues"
12
+ },
13
+ "homepage": "https://github.com/mondaycom/vibe#readme",
14
+ "author": "monday.com",
15
+ "license": "MIT",
16
+ "type": "module",
17
+ "main": "dist/index.js",
18
+ "types": "dist/index.d.ts",
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "exports": {
23
+ "./package.json": "./package.json",
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/index.js",
27
+ "default": "./dist/index.js"
28
+ },
29
+ "./mockedClassNames": {
30
+ "import": "./dist/mocked_classnames/index.js",
31
+ "default": "./dist/mocked_classnames/index.js"
32
+ }
33
+ },
34
+ "scripts": {
35
+ "build": "rollup -c && yarn build:mocked-classnames",
36
+ "build:mocked-classnames": "[ \"$SKIP_RELEASE_ARTIFACTS\" = \"true\" ] || mock_classnames=on rollup -c",
37
+ "test": "vitest run",
38
+ "lint": "eslint \"./src/**/*.{js,jsx,ts,tsx}\""
39
+ },
40
+ "dependencies": {
41
+ "@vibe/dropdown": "4.0.1",
42
+ "@vibe/icon-button": "4.0.17",
43
+ "@vibe/icons": "4.1.0",
44
+ "@vibe/layout": "4.0.11",
45
+ "@vibe/shared": "4.0.9",
46
+ "@vibe/style": "4.1.0",
47
+ "classnames": "^2.5.1",
48
+ "date-fns": "^2.30.0",
49
+ "es-toolkit": "^1.39.10",
50
+ "react-day-picker": "^8.10.2"
51
+ },
52
+ "devDependencies": {
53
+ "@testing-library/jest-dom": "^6.4.6",
54
+ "@testing-library/react": "^12.1.2",
55
+ "@vibe/config": "4.0.2",
56
+ "react": "^16.13.0",
57
+ "react-dom": "^16.13.0",
58
+ "react-test-renderer": "16",
59
+ "typescript": "^5.9.3",
60
+ "vitest": "^1.6.0"
61
+ },
62
+ "peerDependencies": {
63
+ "react": ">=16.9.0",
64
+ "react-dom": ">=16.9.0"
65
+ },
66
+ "sideEffects": [
67
+ "*.scss",
68
+ "*.css",
69
+ "*.scss.js",
70
+ "*.css.js"
71
+ ],
72
+ "eslintConfig": {
73
+ "extends": [
74
+ "../../../node_modules/@vibe/config/.eslintrc.cjs"
75
+ ]
76
+ }
77
+ }