import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-DaN-XFub.js";import{n as i,t as a}from"./Text-BPlJUr3R.js";import{l as o,s}from"./odata-service-DnPlNGpU-Bpd4Zh9L.js";import{a as c,g as l,h as u}from"./formatters--mhLir82-v41eaI4a.js";import{r as d,t as f}from"./DateInput-D8_Oleoy.js";import{n as p,t as m}from"./GridContainer-qDguE1HS.js";import{n as h,o as g,r as _,t as v}from"./PresetSelect-C8uIYhPJ.js";function y(e){return typeof e==`string`&&D.has(e)}function b(e,t=E){let n=_(e,y,t),r=n.length>0?n:E,i=new Set(r);return E.filter(e=>i.has(e))}function x(e,t=T){return g(e,t)}function S({maxDayRangeDays:e,maxWeekRangeWeeks:t,labels:n}={}){let r=o(e),i=o(t);return T.map(e=>{let t={...e,label:n?.[e.id]??e.label};return e.id===`day`&&r!==void 0?{...t,maxRangeDays:r}:e.id===`week`&&i!==void 0?{...t,maxRangeDays:i*7}:t})}function C(e,t){let n=o(e.maxRangeDays);if(n===void 0||t===void 0)return!1;let r=l(t);return r!==null&&r>n}function w(e,t,n){if(t.length===0)return;let r=e===void 0?-1:t.findIndex(t=>t.id===e),i=r>=0?t[r]:void 0;return i&&!C(i,n)?i.id:(r>=0?t.slice(r+1):t).find(e=>!C(e,n))?.id??t.find(e=>!C(e,n))?.id}var T,E,D;function O(){return(O=e((()=>{u(),s(),T=Object.freeze([{id:`day`,label:`по дням`},{id:`week`,label:`по неделям`},{id:`month`,label:`по месяцам`},{id:`year`,label:`по годам`}]),E=Object.freeze([`day`,`week`,`month`,`year`]),D=new Set(T.map(e=>e.id))})))()}function k({value:e,onChange:t,options:n,labels:r,presetIds:i,dateRange:a,maxDayRangeDays:o,maxWeekRangeWeeks:s,...c}){let l=(0,A.useMemo)(()=>n??x(b(i),S({maxDayRangeDays:o,maxWeekRangeWeeks:s,labels:r})),[r,o,s,n,i]),u=(0,A.useMemo)(()=>w(e,l,a),[a,l,e]),d=(0,A.useRef)(null),f=(0,A.useEffectEvent)(()=>{if(u===void 0||u===e){d.current=null;return}let n=d.current;n&&n.value===e&&n.availableValue===u||(d.current={value:e,availableValue:u},t(u))});return(0,A.useEffect)(()=>{f()},[u,e]),(0,j.jsx)(v,{...c,options:l,value:u,onChange:t,getOptionDisabled:e=>C(e,a)})}var A,j;function M(){return(M=e((()=>{A=n(),h(),O(),j=r(),k.__docgenInfo={description:`Select периода детализации, который может ограничивать доступные варианты по диапазону дат.`,methods:[],displayName:`PeriodSelect`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``},value:{required:!0,tsType:{name:`V`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``},options:{required:!1,tsType:{name:`unknown`},description:"Полный список custom options с высшим приоритетом. При его передаче\nвстроенные `presetIds`, `labels` и пороги диапазона не применяются."},labels:{required:!1,tsType:{name:`Partial`,elements:[{name:`Readonly`,elements:[{name:`Record`,elements:[{name:`union`,raw:`"day" | "week" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"week"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},{name:`string`}],raw:`Record<PeriodSelectPresetId, string>`}],raw:`Readonly<Record<PeriodSelectPresetId, string>>`}],raw:`Partial<PeriodSelectLabels>`},description:`Частично заменяет подписи встроенных вариантов, не изменяя их id,
канонический порядок и правила доступности.
Не применяется, когда передан собственный \`options\`.`},presetIds:{required:!1,tsType:{name:`unknown`},description:`Разрешенные встроенные варианты периода. Значение нормализуется в канонический
порядок, а пустой либо невалидный список безопасно заменяется полным набором.
Не применяется, когда передан собственный \`options\`.`},dateRange:{required:!1,tsType:{name:`DateRangeInput`},description:``},maxDayRangeDays:{required:!1,tsType:{name:`number`},description:``},maxWeekRangeWeeks:{required:!1,tsType:{name:`number`},description:``}}}})))()}var N=t({AllAllowedOptionsDisabled:()=>K,AlternativeLabels:()=>G,AutoSwitchByRange:()=>U,Controlled:()=>H,Disabled:()=>q,MonthAndYear:()=>W,__namedExportsOrder:()=>J,default:()=>V});function P(e){return e!==void 0&&c(e)?e:null}function F(e){let[,t]=L(),n=P(e.dateRange),r=l(e.dateRange??null);return(0,I.jsxs)(m,{gap:`md`,children:[(0,I.jsx)(k,{...e,onChange:n=>{e.onChange(n),t({value:n})}}),(0,I.jsx)(f,{label:`Связанный диапазон дат`,placeholder:`дд.мм.гггг - дд.мм.гггг`,value:n,onChange:e=>t({dateRange:e??void 0})}),(0,I.jsxs)(a,{as:`p`,color:`secondary`,"aria-live":`polite`,children:[`Выбрано: `,(0,I.jsx)(a,{as:`code`,children:e.value??`не выбрано`}),`. Дней в диапазоне:`,` `,(0,I.jsx)(a,{as:`code`,children:r??`не задано`}),`.`]})]})}var I,L,R,z,B,V,H,U,W,G,K,q,J;function Y(){return(Y=e((()=>{u(),d(),p(),i(),O(),M(),I=r(),{useArgs:L}=__STORYBOOK_MODULE_PREVIEW_API__,{fn:R}=__STORYBOOK_MODULE_TEST__,z=[new Date(2026,2,1,0,0,0),new Date(2026,2,14,23,59,59)],B=[new Date(2026,0,1,0,0,0),new Date(2026,4,20,23,59,59)],V={title:`Shared/UI/PeriodSelect`,component:k,args:{label:`Период детализации`,description:`Выберите уровень группировки дат.`,placeholder:`Выберите период`,value:`day`,onChange:R(),presetIds:E,dateRange:z,maxDayRangeDays:31,maxWeekRangeWeeks:26,disabled:!1,size:`md`},parameters:{atomicCanvas:!0,layout:`padded`,docs:{description:{component:`Select периода детализации дат. Компонент работает с id периода и может блокировать слишком детальные варианты по переданному диапазону дат.`}}},argTypes:{label:{description:`Заголовок поля.`,control:`text`},description:{description:`Описание под заголовком.`,control:`text`},placeholder:{description:`Текст, когда период не выбран.`,control:`text`},value:{description:`Текущий id периода.`,control:`select`,options:E},onChange:{description:`Вызывается с id выбранного периода.`,control:!1},options:{description:"Кастомный список периодов по контракту `PeriodSelectOption`; имеет приоритет над `presetIds`, `labels` и порогами диапазона.",control:!1},labels:{description:`Частичные подписи встроенных периодов поверх канонического каталога.`,control:`object`},presetIds:{description:"Разрешенные встроенные периоды. Порядок отображения остается `day → week → month → year`.",control:`check`,options:E},dateRange:{description:`Диапазон дат, по которому вычисляются заблокированные периоды.`,control:!1},maxDayRangeDays:{description:"Максимальное количество дней, при котором доступен период `day`.",control:{type:`number`,min:1,step:1}},maxWeekRangeWeeks:{description:"Максимальное количество недель, при котором доступен период `week`.",control:{type:`number`,min:1,step:1}},disabled:{description:`Блокирует взаимодействие с полем.`,control:`boolean`},size:{description:`Размер поля и подписей.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]}}},H={name:`Контролируемый выбор`,render:function(e){return(0,I.jsx)(F,{...e})}},U={name:`Автопереключение по диапазону`,args:{value:`day`,dateRange:B,maxDayRangeDays:31,maxWeekRangeWeeks:8},render:function(e){return(0,I.jsx)(F,{...e})}},W={name:`Только месяцы и годы`,args:{value:`month`,presetIds:[`month`,`year`]},render:function(e){return(0,I.jsx)(F,{...e})}},G={name:`Альтернативные подписи`,args:{value:`month`,labels:{day:`за день`,week:`за неделю`,month:`за месяц`,year:`за год`}},render:function(e){return(0,I.jsx)(F,{...e})}},K={name:`Все разрешенные варианты недоступны`,args:{value:`day`,presetIds:[`day`,`week`],dateRange:B,maxDayRangeDays:31,maxWeekRangeWeeks:8},render:function(e){return(0,I.jsx)(F,{...e})}},q={name:`Заблокированный контрол`,args:{disabled:!0,value:`week`}},H.parameters={...H.parameters,docs:{...H.parameters?.docs,source:{originalSource:`{
  name: "Контролируемый выбор",
  render: function Render(args) {
    return <PeriodSelectStoryCanvas {...args} />;
  }
}`,...H.parameters?.docs?.source},description:{story:"Контролируемый сценарий синхронизирует `value` и `dateRange` через Storybook args.",...H.parameters?.docs?.description}}},U.parameters={...U.parameters,docs:{...U.parameters?.docs,source:{originalSource:`{
  name: "Автопереключение по диапазону",
  args: {
    value: "day",
    dateRange: longDateRange,
    maxDayRangeDays: 31,
    maxWeekRangeWeeks: 8
  },
  render: function Render(args) {
    return <PeriodSelectStoryCanvas {...args} />;
  }
}`,...U.parameters?.docs?.source},description:{story:"Длинный диапазон блокирует `day` и `week`, поэтому контрол переключает значение на ближайший доступный период.",...U.parameters?.docs?.description}}},W.parameters={...W.parameters,docs:{...W.parameters?.docs,source:{originalSource:`{
  name: "Только месяцы и годы",
  args: {
    value: "month",
    presetIds: ["month", "year"]
  },
  render: function Render(args) {
    return <PeriodSelectStoryCanvas {...args} />;
  }
}`,...W.parameters?.docs?.source},description:{story:`Allow-list ограничивает встроенный каталог двумя крупными уровнями детализации.`,...W.parameters?.docs?.description}}},G.parameters={...G.parameters,docs:{...G.parameters?.docs,source:{originalSource:`{
  name: "Альтернативные подписи",
  args: {
    value: "month",
    labels: {
      day: "за день",
      week: "за неделю",
      month: "за месяц",
      year: "за год"
    }
  },
  render: function Render(args) {
    return <PeriodSelectStoryCanvas {...args} />;
  }
}`,...G.parameters?.docs?.source},description:{story:`Частичный labels override меняет формулировки встроенных вариантов,
сохраняя их id, порядок и ограничения доступности.`,...G.parameters?.docs?.description}}},K.parameters={...K.parameters,docs:{...K.parameters?.docs,source:{originalSource:`{
  name: "Все разрешенные варианты недоступны",
  args: {
    value: "day",
    presetIds: ["day", "week"],
    dateRange: longDateRange,
    maxDayRangeDays: 31,
    maxWeekRangeWeeks: 8
  },
  render: function Render(args) {
    return <PeriodSelectStoryCanvas {...args} />;
  }
}`,...K.parameters?.docs?.source},description:{story:`При длинном диапазоне все разрешенные варианты временно недоступны; внешний
controlled-id сохраняется, и после сокращения диапазона отображение восстанавливается.`,...K.parameters?.docs?.description}}},q.parameters={...q.parameters,docs:{...q.parameters?.docs,source:{originalSource:`{
  name: "Заблокированный контрол",
  args: {
    disabled: true,
    value: "week"
  }
}`,...q.parameters?.docs?.source}}},J=[`Controlled`,`AutoSwitchByRange`,`MonthAndYear`,`AlternativeLabels`,`AllAllowedOptionsDisabled`,`Disabled`]})))()}export{q as a,Y as c,H as i,G as n,W as o,U as r,N as s,K as t};