@scbt-ecom/ui 0.96.7 → 0.96.9

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.
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownList.js","sources":["../../../../../lib/shared/ui/dropdownList/DropdownList.tsx"],"sourcesContent":["import { useRef } from 'react'\nimport { useKeyboardNavigation } from './hooks'\nimport { isOptionActive } from './model'\nimport { DropdownItem, type DropdownItemClasses, type DropdownItemOption } from './ui'\nimport { useClickOutside } from '$/shared/hooks'\nimport { cn } from '$/shared/utils'\n\nexport type DropdownListClasses = {\n root?: string\n item?: DropdownItemClasses\n}\n\nexport interface DropdownListProps<Multi extends boolean> extends React.HTMLAttributes<HTMLUListElement> {\n options: DropdownItemOption[]\n /**\n * Значения выбранные по умолчанию\n */\n value?: Multi extends true ? DropdownItemOption[] : DropdownItemOption | null\n /**\n * Функция при выборе значения из списка\n * @param item\n */\n onPick?: (item: DropdownItemOption) => void\n /**\n * Поддержка множественного выбора\n */\n multiple: Multi\n /**\n * Функция для управления отображаемым значением\n */\n displayValue?: (option: DropdownItemOption) => string\n /**\n * Дополнительные стили\n */\n classes?: DropdownListClasses\n}\n\nexport const DropdownList = <Multi extends boolean>({\n options,\n multiple,\n onPick,\n value,\n className,\n displayValue,\n classes,\n ...props\n}: DropdownListProps<Multi>) => {\n const ref = useRef<HTMLUListElement>(null)\n\n const { refs, focusedIndex, setFocusedIndex } = useKeyboardNavigation<HTMLUListElement, HTMLLIElement>({\n options,\n multiple,\n onPick\n })\n\n useClickOutside(ref, () => setFocusedIndex(-1))\n\n return (\n <ul\n {...props}\n ref={refs.setRoot()}\n className={cn(\n 'customScrollbar-y mt-1 max-h-[264px] w-full overflow-y-auto scroll-smooth rounded-md bg-color-white p-1 shadow-[0_8px_20px_0px_rgba(41,41,41,0.08)]',\n classes?.root,\n className\n )}\n >\n {options.map((option, index) => {\n const active = isOptionActive(option, value)\n\n return (\n <DropdownItem\n ref={refs.setReference}\n key={index}\n item={option}\n active={active}\n focused={focusedIndex === index}\n multiple={multiple}\n onPick={onPick}\n displayValue={displayValue}\n onMouseEnter={() => setFocusedIndex(index)}\n onMouseLeave={() => setFocusedIndex(-1)}\n classes={classes?.item}\n />\n )\n })}\n </ul>\n )\n}\n"],"names":["DropdownList","options","multiple","onPick","value","className","displayValue","classes","props","ref","useRef","refs","focusedIndex","setFocusedIndex","useKeyboardNavigation","useClickOutside","jsx","cn","option","index","active","isOptionActive","DropdownItem"],"mappings":"2WAqCO,MAAMA,EAAe,CAAwB,CAClD,QAAAC,EACA,SAAAC,EACA,OAAAC,EACA,MAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAAC,EACA,GAAGC,CACL,IAAgC,CAC9B,MAAMC,EAAMC,EAAyB,IAAI,EAEnC,CAAE,KAAAC,EAAM,aAAAC,EAAc,gBAAAC,CAAA,EAAoBC,EAAuD,CACrG,QAAAb,EACA,SAAAC,EACA,OAAAC,CAAA,CACD,EAED,OAAAY,EAAgBN,EAAK,IAAMI,EAAgB,EAAE,CAAC,EAG5CG,EAAC,KAAA,CACE,GAAGR,EACJ,IAAKG,EAAK,QAAA,EACV,UAAWM,EACT,sJACAV,GAAA,YAAAA,EAAS,KACTF,CAAA,EAGD,SAAAJ,EAAQ,IAAI,CAACiB,EAAQC,IAAU,CAC9B,MAAMC,EAASC,EAAeH,EAAQd,CAAK,EAE3C,OACEY,EAACM,EAAA,CACC,IAAKX,EAAK,aAEV,KAAMO,EACN,OAAAE,EACA,QAASR,IAAiBO,EAC1B,SAAAjB,EACA,OAAAC,EACA,aAAAG,EACA,aAAc,IAAMO,EAAgBM,CAAK,EACzC,aAAc,IAAMN,EAAgB,EAAE,EACtC,QAASN,GAAA,YAAAA,EAAS,IAAA,EATbY,CAAA,CAYX,CAAC,CAAA,CAAA,CAGP"}
1
+ {"version":3,"file":"DropdownList.js","sources":["../../../../../lib/shared/ui/dropdownList/DropdownList.tsx"],"sourcesContent":["import { useRef } from 'react'\nimport { useKeyboardNavigation } from './hooks'\nimport { isOptionActive } from './model'\nimport { DropdownItem, type DropdownItemClasses, type DropdownItemOption } from './ui'\nimport { useClickOutside } from '$/shared/hooks'\nimport { cn } from '$/shared/utils'\n\nexport type DropdownListClasses = {\n root?: string\n item?: DropdownItemClasses\n}\n\nexport interface DropdownListProps<Multi extends boolean = false> extends React.HTMLAttributes<HTMLUListElement> {\n options: DropdownItemOption[]\n /**\n * Значения выбранные по умолчанию\n */\n value?: Multi extends true ? DropdownItemOption[] : DropdownItemOption | null\n /**\n * Функция при выборе значения из списка\n * @param item\n */\n onPick?: (item: DropdownItemOption) => void\n /**\n * Поддержка множественного выбора\n */\n multiple?: Multi\n /**\n * Функция для управления отображаемым значением\n */\n displayValue?: (option: DropdownItemOption) => string\n /**\n * Дополнительные стили\n */\n classes?: DropdownListClasses\n}\n\nexport const DropdownList = <Multi extends boolean>({\n options,\n multiple,\n onPick,\n value,\n className,\n displayValue,\n classes,\n ...props\n}: DropdownListProps<Multi>) => {\n const ref = useRef<HTMLUListElement>(null)\n\n const { refs, focusedIndex, setFocusedIndex } = useKeyboardNavigation<HTMLUListElement, HTMLLIElement>({\n options,\n multiple,\n onPick\n })\n\n useClickOutside(ref, () => setFocusedIndex(-1))\n\n return (\n <ul\n {...props}\n ref={refs.setRoot()}\n className={cn(\n 'customScrollbar-y mt-1 max-h-[264px] w-full overflow-y-auto scroll-smooth rounded-md bg-color-white p-1 shadow-[0_8px_20px_0px_rgba(41,41,41,0.08)]',\n classes?.root,\n className\n )}\n >\n {options.map((option, index) => {\n const active = isOptionActive(option, value)\n\n return (\n <DropdownItem\n ref={refs.setReference}\n key={index}\n item={option}\n active={active}\n focused={focusedIndex === index}\n multiple={multiple}\n onPick={onPick}\n displayValue={displayValue}\n onMouseEnter={() => setFocusedIndex(index)}\n onMouseLeave={() => setFocusedIndex(-1)}\n classes={classes?.item}\n />\n )\n })}\n </ul>\n )\n}\n"],"names":["DropdownList","options","multiple","onPick","value","className","displayValue","classes","props","ref","useRef","refs","focusedIndex","setFocusedIndex","useKeyboardNavigation","useClickOutside","jsx","cn","option","index","active","isOptionActive","DropdownItem"],"mappings":"2WAqCO,MAAMA,EAAe,CAAwB,CAClD,QAAAC,EACA,SAAAC,EACA,OAAAC,EACA,MAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAAC,EACA,GAAGC,CACL,IAAgC,CAC9B,MAAMC,EAAMC,EAAyB,IAAI,EAEnC,CAAE,KAAAC,EAAM,aAAAC,EAAc,gBAAAC,CAAA,EAAoBC,EAAuD,CACrG,QAAAb,EACA,SAAAC,EACA,OAAAC,CAAA,CACD,EAED,OAAAY,EAAgBN,EAAK,IAAMI,EAAgB,EAAE,CAAC,EAG5CG,EAAC,KAAA,CACE,GAAGR,EACJ,IAAKG,EAAK,QAAA,EACV,UAAWM,EACT,sJACAV,GAAA,YAAAA,EAAS,KACTF,CAAA,EAGD,SAAAJ,EAAQ,IAAI,CAACiB,EAAQC,IAAU,CAC9B,MAAMC,EAASC,EAAeH,EAAQd,CAAK,EAE3C,OACEY,EAACM,EAAA,CACC,IAAKX,EAAK,aAEV,KAAMO,EACN,OAAAE,EACA,QAASR,IAAiBO,EAC1B,SAAAjB,EACA,OAAAC,EACA,aAAAG,EACA,aAAc,IAAMO,EAAgBM,CAAK,EACzC,aAAc,IAAMN,EAAgB,EAAE,EACtC,QAASN,GAAA,YAAAA,EAAS,IAAA,EATbY,CAAA,CAYX,CAAC,CAAA,CAAA,CAGP"}
@@ -1,2 +1,2 @@
1
- import{Color as o}from"../../../../../../../node_modules/@tiptap/extension-color/dist/index.js";import{Heading as s}from"../../../../../../../node_modules/@tiptap/extension-heading/dist/index.js";import{Link as l}from"../../../../../../../node_modules/@tiptap/extension-link/dist/index.js";import{TextStyle as n}from"../../../../../../../node_modules/@tiptap/extension-text-style/dist/index.js";import{Underline as a}from"../../../../../../../node_modules/@tiptap/extension-underline/dist/index.js";import{StarterKit as m}from"../../../../../../../node_modules/@tiptap/starter-kit/dist/index.js";import{editorHeadingClasses as p}from"./helper.js";import{mergeAttributes as r}from"../../../../../../../node_modules/@tiptap/core/dist/index.js";const H=[m.configure({heading:!1,bold:{HTMLAttributes:{class:"font-bold"}},bulletList:{HTMLAttributes:{class:"list-disc [&>li]:ml-4"}},paragraph:{HTMLAttributes:{class:"text-dark"}}}),a,n,o,s.configure({levels:[3,4]}).extend({renderHTML({node:t,HTMLAttributes:i}){const e=this.options.levels.includes(t.attrs.level)?t.attrs.level:this.options.levels[0];return[`h${e}`,r(this.options.HTMLAttributes,i,{class:`${p[e]}`}),0]}}),l.configure({openOnClick:!0}).extend({renderHTML({HTMLAttributes:t}){return["a",r(t)]}})];export{H as editorConfig};
1
+ import{Color as o}from"../../../../../../../node_modules/@tiptap/extension-color/dist/index.js";import{Heading as s}from"../../../../../../../node_modules/@tiptap/extension-heading/dist/index.js";import{Link as l}from"../../../../../../../node_modules/@tiptap/extension-link/dist/index.js";import{TextStyle as n}from"../../../../../../../node_modules/@tiptap/extension-text-style/dist/index.js";import{Underline as a}from"../../../../../../../node_modules/@tiptap/extension-underline/dist/index.js";import{StarterKit as m}from"../../../../../../../node_modules/@tiptap/starter-kit/dist/index.js";import{editorHeadingClasses as p}from"./helper.js";import{mergeAttributes as r}from"../../../../../../../node_modules/@tiptap/core/dist/index.js";const H=[m.configure({heading:!1,bold:{HTMLAttributes:{class:"font-bold"}},bulletList:{HTMLAttributes:{class:"list-disc [&>li]:ml-4"}},paragraph:{HTMLAttributes:{class:"text-dark"}}}),a,n,o,s.configure({levels:[1,2,3,4]}).extend({renderHTML({node:t,HTMLAttributes:i}){const e=this.options.levels.includes(t.attrs.level)?t.attrs.level:this.options.levels[0];return[`h${e}`,r(this.options.HTMLAttributes,i,{class:`${p[e]}`}),0]}}),l.configure({openOnClick:!0}).extend({renderHTML({HTMLAttributes:t}){return["a",r(t)]}})];export{H as editorConfig};
2
2
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../../../../../../lib/shared/ui/formElements/controlled/editor/model/config.ts"],"sourcesContent":["import Color from '@tiptap/extension-color'\nimport Heading from '@tiptap/extension-heading'\nimport Link from '@tiptap/extension-link'\nimport TextStyle from '@tiptap/extension-text-style'\nimport Underline from '@tiptap/extension-underline'\nimport { mergeAttributes } from '@tiptap/react'\nimport StarterKit from '@tiptap/starter-kit'\nimport { editorHeadingClasses } from './helper'\nimport { type THeadingLevel } from './types'\n\nexport const editorConfig = [\n StarterKit.configure({\n heading: false,\n bold: {\n HTMLAttributes: {\n class: 'font-bold'\n }\n },\n bulletList: {\n HTMLAttributes: {\n class: 'list-disc [&>li]:ml-4'\n }\n },\n paragraph: {\n HTMLAttributes: {\n class: 'text-dark'\n }\n }\n }),\n Underline,\n TextStyle,\n Color,\n Heading.configure({\n levels: [3, 4]\n }).extend({\n renderHTML({ node, HTMLAttributes }) {\n const hasLevel = this.options.levels.includes(node.attrs.level)\n const level: THeadingLevel = hasLevel ? node.attrs.level : this.options.levels[0]\n return [\n `h${level}`,\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n class: `${editorHeadingClasses[level]}`\n }),\n 0\n ]\n }\n }),\n Link.configure({\n openOnClick: true\n }).extend({\n renderHTML({ HTMLAttributes }) {\n return ['a', mergeAttributes(HTMLAttributes)]\n }\n })\n]\n"],"names":["editorConfig","StarterKit","Underline","TextStyle","Color","Heading","node","HTMLAttributes","level","mergeAttributes","editorHeadingClasses","Link"],"mappings":"suBAUO,MAAMA,EAAe,CAC1BC,EAAW,UAAU,CACnB,QAAS,GACT,KAAM,CACJ,eAAgB,CACd,MAAO,WAAA,CACT,EAEF,WAAY,CACV,eAAgB,CACd,MAAO,uBAAA,CACT,EAEF,UAAW,CACT,eAAgB,CACd,MAAO,WAAA,CACT,CACF,CACD,EACDC,EACAC,EACAC,EACAC,EAAQ,UAAU,CAChB,OAAQ,CAAC,EAAG,CAAC,CAAA,CACd,EAAE,OAAO,CACR,WAAW,CAAE,KAAAC,EAAM,eAAAC,GAAkB,CAEnC,MAAMC,EADW,KAAK,QAAQ,OAAO,SAASF,EAAK,MAAM,KAAK,EACtBA,EAAK,MAAM,MAAQ,KAAK,QAAQ,OAAO,CAAC,EAChF,MAAO,CACL,IAAIE,CAAK,GACTC,EAAgB,KAAK,QAAQ,eAAgBF,EAAgB,CAC3D,MAAO,GAAGG,EAAqBF,CAAK,CAAC,EAAA,CACtC,EACD,CAAA,CAEJ,CAAA,CACD,EACDG,EAAK,UAAU,CACb,YAAa,EAAA,CACd,EAAE,OAAO,CACR,WAAW,CAAE,eAAAJ,GAAkB,CAC7B,MAAO,CAAC,IAAKE,EAAgBF,CAAc,CAAC,CAC9C,CAAA,CACD,CACH"}
1
+ {"version":3,"file":"config.js","sources":["../../../../../../../../lib/shared/ui/formElements/controlled/editor/model/config.ts"],"sourcesContent":["import Color from '@tiptap/extension-color'\nimport Heading from '@tiptap/extension-heading'\nimport Link from '@tiptap/extension-link'\nimport TextStyle from '@tiptap/extension-text-style'\nimport Underline from '@tiptap/extension-underline'\nimport { mergeAttributes } from '@tiptap/react'\nimport StarterKit from '@tiptap/starter-kit'\nimport { editorHeadingClasses } from './helper'\nimport { type THeadingLevel } from './types'\n\nexport const editorConfig = [\n StarterKit.configure({\n heading: false,\n bold: {\n HTMLAttributes: {\n class: 'font-bold'\n }\n },\n bulletList: {\n HTMLAttributes: {\n class: 'list-disc [&>li]:ml-4'\n }\n },\n paragraph: {\n HTMLAttributes: {\n class: 'text-dark'\n }\n }\n }),\n Underline,\n TextStyle,\n Color,\n Heading.configure({\n levels: [1, 2, 3, 4]\n }).extend({\n renderHTML({ node, HTMLAttributes }) {\n const hasLevel = this.options.levels.includes(node.attrs.level)\n const level: THeadingLevel = hasLevel ? node.attrs.level : this.options.levels[0]\n return [\n `h${level}`,\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n class: `${editorHeadingClasses[level]}`\n }),\n 0\n ]\n }\n }),\n Link.configure({\n openOnClick: true\n }).extend({\n renderHTML({ HTMLAttributes }) {\n return ['a', mergeAttributes(HTMLAttributes)]\n }\n })\n]\n"],"names":["editorConfig","StarterKit","Underline","TextStyle","Color","Heading","node","HTMLAttributes","level","mergeAttributes","editorHeadingClasses","Link"],"mappings":"suBAUO,MAAMA,EAAe,CAC1BC,EAAW,UAAU,CACnB,QAAS,GACT,KAAM,CACJ,eAAgB,CACd,MAAO,WAAA,CACT,EAEF,WAAY,CACV,eAAgB,CACd,MAAO,uBAAA,CACT,EAEF,UAAW,CACT,eAAgB,CACd,MAAO,WAAA,CACT,CACF,CACD,EACDC,EACAC,EACAC,EACAC,EAAQ,UAAU,CAChB,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,CAAA,CACpB,EAAE,OAAO,CACR,WAAW,CAAE,KAAAC,EAAM,eAAAC,GAAkB,CAEnC,MAAMC,EADW,KAAK,QAAQ,OAAO,SAASF,EAAK,MAAM,KAAK,EACtBA,EAAK,MAAM,MAAQ,KAAK,QAAQ,OAAO,CAAC,EAChF,MAAO,CACL,IAAIE,CAAK,GACTC,EAAgB,KAAK,QAAQ,eAAgBF,EAAgB,CAC3D,MAAO,GAAGG,EAAqBF,CAAK,CAAC,EAAA,CACtC,EACD,CAAA,CAEJ,CAAA,CACD,EACDG,EAAK,UAAU,CACb,YAAa,EAAA,CACd,EAAE,OAAO,CACR,WAAW,CAAE,eAAAJ,GAAkB,CAC7B,MAAO,CAAC,IAAKE,EAAgBF,CAAc,CAAC,CAC9C,CAAA,CACD,CACH"}
@@ -1,2 +1,2 @@
1
- import{jsx as o}from"react/jsx-runtime";import"../../../../button/Button.js";import"../../../../buttonIcon/ButtonIcon.js";import"../../../../calendar/Calendar.js";import"../../../../calendar/model/utils.js";import"../../../../accordion/Accordion.js";import"react";import"react-dom";import"../../../../modal/ui/IframeModalContent.js";import"../../../../../../../node_modules/react-hot-toast/dist/index.js";import{Icon as e}from"../../../../icon/Icon.js";import"../../../../table/ui/primitives/Primitives.js";import"../../../../carousel/ui/CarouselContent.js";import"../../../../slot/Slot.js";import"../../../uncontrolled/autocomplete/Autocomplete.js";import"../../../uncontrolled/checkbox/Checkbox.js";import"../../../uncontrolled/combobox/combobox.js";import"../../../uncontrolled/dayPicker/DayPicker.js";import"../../../uncontrolled/input/Input.js";import"../../../uncontrolled/inputOtp/InputOtpBase.js";import"../../../uncontrolled/maskInput/MaskInput.js";import"../../../uncontrolled/radio/RadioGroup.js";import"../../../uncontrolled/radio/ui/RadioItem.js";import"../../../uncontrolled/slider/SliderBase.js";import"../../../uncontrolled/switch/Switch.js";import"../../../uncontrolled/textarea/Textarea.js";import"../../../uncontrolled/uploader/UploaderBase.js";import"../ui/Editor.js";import"../../input/MaskInputControl.js";import"../../../../dropdownList/ui/dropdownItem/DropdownItem.js";const P=[{shortcuts:["ctrl","alt","3"],level:3},{shortcuts:["ctrl","alt","4"],level:4}],j={3:"mob-title-bold-l desktop:desk-title-bold-l",4:"mob-title-bold-m desktop:desk-title-bold-s"},D=["#292929","#FFFFFF","#40465A","#5A6E85","#A9B6C5","#94A4B7","#003790","#042E73","#809BC7","#76BC21","#F49F00","#F42500"],M=i=>[{label:"Жирный текст",icon:o(e,{name:"editor/bold",className:"size-4"}),onClick:()=>i.chain().focus().toggleBold().run(),isActive:i.isActive("bold")},{label:"Курсивный текст",icon:o(e,{name:"editor/italic",className:"size-4"}),onClick:()=>i.chain().focus().toggleItalic().run(),isActive:i.isActive("italic")},{label:"Подчеркнутый текст",icon:o(e,{name:"editor/underline",className:"size-4"}),onClick:()=>i.chain().focus().toggleUnderline().run(),isActive:i.isActive("underline")},{label:"Зачеркнутый текст",icon:o(e,{name:"editor/strikethrough",className:"size-4"}),onClick:()=>i.chain().focus().toggleStrike().run(),isActive:i.isActive("strike")},{label:"Обычный текст",icon:o(e,{name:"editor/typography",className:"size-4"}),onClick:()=>i.chain().focus().setParagraph().run()},{label:"Маркированный список",icon:o(e,{name:"editor/list",className:"size-4"}),onClick:()=>i.chain().focus().toggleBulletList().run(),isActive:i.isActive("bulletList")},{label:"Перенос строки",icon:o(e,{name:"arrows/arrowDownRight",className:"size-4"}),onClick:()=>i.chain().focus().setHardBreak().run()},{label:"Отменить",icon:o(e,{name:"editor/undo",className:"size-4"}),onClick:()=>i.chain().focus().undo().run()},{label:"Вернуть",icon:o(e,{name:"editor/redo",className:"size-4"}),onClick:()=>i.chain().focus().redo().run()},{label:"Очистить стили и теги",icon:o(e,{name:"editor/removeFormatting",className:"size-4"}),onClick:()=>i.chain().focus().clearNodes().unsetAllMarks().run()},{label:"Удалить все",icon:o(e,{name:"general/close",className:"size-4"}),onClick:()=>i.commands.clearContent()}];export{D as editorAllowedColors,j as editorHeadingClasses,P as headingsOptions,M as renderEditorPanel};
1
+ import{jsx as i}from"react/jsx-runtime";import"../../../../button/Button.js";import"../../../../buttonIcon/ButtonIcon.js";import"../../../../calendar/Calendar.js";import"../../../../calendar/model/utils.js";import"../../../../accordion/Accordion.js";import"react";import"react-dom";import"../../../../modal/ui/IframeModalContent.js";import"../../../../../../../node_modules/react-hot-toast/dist/index.js";import{Icon as o}from"../../../../icon/Icon.js";import"../../../../table/ui/primitives/Primitives.js";import"../../../../carousel/ui/CarouselContent.js";import"../../../../slot/Slot.js";import"../../../uncontrolled/autocomplete/Autocomplete.js";import"../../../uncontrolled/checkbox/Checkbox.js";import"../../../uncontrolled/combobox/combobox.js";import"../../../uncontrolled/dayPicker/DayPicker.js";import"../../../uncontrolled/input/Input.js";import"../../../uncontrolled/inputOtp/InputOtpBase.js";import"../../../uncontrolled/maskInput/MaskInput.js";import"../../../uncontrolled/radio/RadioGroup.js";import"../../../uncontrolled/radio/ui/RadioItem.js";import"../../../uncontrolled/slider/SliderBase.js";import"../../../uncontrolled/switch/Switch.js";import"../../../uncontrolled/textarea/Textarea.js";import"../../../uncontrolled/uploader/UploaderBase.js";import"../ui/Editor.js";import"../../input/MaskInputControl.js";import"../../../../dropdownList/ui/dropdownItem/DropdownItem.js";const P=[{shortcuts:["ctrl","alt","1"],level:1},{shortcuts:["ctrl","alt","2"],level:2},{shortcuts:["ctrl","alt","3"],level:3},{shortcuts:["ctrl","alt","4"],level:4}],j={1:"mob-headline-bold-m desktop:desk-headline-bold-l",2:"mob-headline-bold-s desktop:desk-headline-bold-m",3:"mob-title-bold-l desktop:desk-title-bold-l",4:"mob-title-bold-m desktop:desk-title-bold-s"},D=["#292929","#FFFFFF","#40465A","#5A6E85","#A9B6C5","#94A4B7","#003790","#042E73","#809BC7","#76BC21","#F49F00","#F42500"],M=e=>[{label:"Жирный текст",icon:i(o,{name:"editor/bold",className:"size-4"}),onClick:()=>e.chain().focus().toggleBold().run(),isActive:e.isActive("bold")},{label:"Курсивный текст",icon:i(o,{name:"editor/italic",className:"size-4"}),onClick:()=>e.chain().focus().toggleItalic().run(),isActive:e.isActive("italic")},{label:"Подчеркнутый текст",icon:i(o,{name:"editor/underline",className:"size-4"}),onClick:()=>e.chain().focus().toggleUnderline().run(),isActive:e.isActive("underline")},{label:"Зачеркнутый текст",icon:i(o,{name:"editor/strikethrough",className:"size-4"}),onClick:()=>e.chain().focus().toggleStrike().run(),isActive:e.isActive("strike")},{label:"Обычный текст",icon:i(o,{name:"editor/typography",className:"size-4"}),onClick:()=>e.chain().focus().setParagraph().run()},{label:"Маркированный список",icon:i(o,{name:"editor/list",className:"size-4"}),onClick:()=>e.chain().focus().toggleBulletList().run(),isActive:e.isActive("bulletList")},{label:"Перенос строки",icon:i(o,{name:"arrows/arrowDownRight",className:"size-4"}),onClick:()=>e.chain().focus().setHardBreak().run()},{label:"Отменить",icon:i(o,{name:"editor/undo",className:"size-4"}),onClick:()=>e.chain().focus().undo().run()},{label:"Вернуть",icon:i(o,{name:"editor/redo",className:"size-4"}),onClick:()=>e.chain().focus().redo().run()},{label:"Очистить стили и теги",icon:i(o,{name:"editor/removeFormatting",className:"size-4"}),onClick:()=>e.chain().focus().clearNodes().unsetAllMarks().run()},{label:"Удалить все",icon:i(o,{name:"general/close",className:"size-4"}),onClick:()=>e.commands.clearContent()}];export{D as editorAllowedColors,j as editorHeadingClasses,P as headingsOptions,M as renderEditorPanel};
2
2
  //# sourceMappingURL=helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sources":["../../../../../../../../lib/shared/ui/formElements/controlled/editor/model/helper.tsx"],"sourcesContent":["import type { Editor } from '@tiptap/react'\nimport type { ColorOption, HeadingOptions } from './types'\nimport { Icon } from '$/shared/ui'\n\nexport const headingsOptions: HeadingOptions[] = [\n { shortcuts: ['ctrl', 'alt', '3'], level: 3 },\n { shortcuts: ['ctrl', 'alt', '4'], level: 4 }\n]\n\nexport const editorHeadingClasses: Record<number, string> = {\n 3: 'mob-title-bold-l desktop:desk-title-bold-l',\n 4: 'mob-title-bold-m desktop:desk-title-bold-s'\n}\n\nexport const editorAllowedColors: ColorOption[] = [\n '#292929',\n '#FFFFFF',\n '#40465A',\n '#5A6E85',\n '#A9B6C5',\n '#94A4B7',\n '#003790',\n '#042E73',\n '#809BC7',\n '#76BC21',\n '#F49F00',\n '#F42500'\n]\n\nexport const renderEditorPanel = (editor: Editor) => [\n {\n label: 'Жирный текст',\n icon: <Icon name='editor/bold' className='size-4' />,\n onClick: () => editor.chain().focus().toggleBold().run(),\n isActive: editor.isActive('bold')\n },\n {\n label: 'Курсивный текст',\n icon: <Icon name='editor/italic' className='size-4' />,\n onClick: () => editor.chain().focus().toggleItalic().run(),\n isActive: editor.isActive('italic')\n },\n {\n label: 'Подчеркнутый текст',\n icon: <Icon name='editor/underline' className='size-4' />,\n onClick: () => editor.chain().focus().toggleUnderline().run(),\n isActive: editor.isActive('underline')\n },\n {\n label: 'Зачеркнутый текст',\n icon: <Icon name='editor/strikethrough' className='size-4' />,\n onClick: () => editor.chain().focus().toggleStrike().run(),\n isActive: editor.isActive('strike')\n },\n {\n label: 'Обычный текст',\n icon: <Icon name='editor/typography' className='size-4' />,\n onClick: () => editor.chain().focus().setParagraph().run()\n },\n {\n label: 'Маркированный список',\n icon: <Icon name='editor/list' className='size-4' />,\n onClick: () => editor.chain().focus().toggleBulletList().run(),\n isActive: editor.isActive('bulletList')\n },\n {\n label: 'Перенос строки',\n icon: <Icon name='arrows/arrowDownRight' className='size-4' />,\n onClick: () => editor.chain().focus().setHardBreak().run()\n },\n\n {\n label: 'Отменить',\n icon: <Icon name='editor/undo' className='size-4' />,\n onClick: () => editor.chain().focus().undo().run()\n },\n {\n label: 'Вернуть',\n icon: <Icon name='editor/redo' className='size-4' />,\n onClick: () => editor.chain().focus().redo().run()\n },\n {\n label: 'Очистить стили и теги',\n icon: <Icon name='editor/removeFormatting' className='size-4' />,\n onClick: () => editor.chain().focus().clearNodes().unsetAllMarks().run()\n },\n {\n label: 'Удалить все',\n icon: <Icon name='general/close' className='size-4' />,\n onClick: () => editor.commands.clearContent()\n }\n]\n"],"names":["headingsOptions","editorHeadingClasses","editorAllowedColors","renderEditorPanel","editor","jsx","Icon"],"mappings":"i3CAIO,MAAMA,EAAoC,CAC/C,CAAE,UAAW,CAAC,OAAQ,MAAO,GAAG,EAAG,MAAO,CAAA,EAC1C,CAAE,UAAW,CAAC,OAAQ,MAAO,GAAG,EAAG,MAAO,CAAA,CAC5C,EAEaC,EAA+C,CAC1D,EAAG,6CACH,EAAG,4CACL,EAEaC,EAAqC,CAChD,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EAEaC,EAAqBC,GAAmB,CACnD,CACE,MAAO,eACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,WAAA,EAAa,IAAA,EACnD,SAAUA,EAAO,SAAS,MAAM,CAAA,EAElC,CACE,MAAO,kBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,gBAAgB,UAAU,SAAS,EACpD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,aAAA,EAAe,IAAA,EACrD,SAAUA,EAAO,SAAS,QAAQ,CAAA,EAEpC,CACE,MAAO,qBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,mBAAmB,UAAU,SAAS,EACvD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,gBAAA,EAAkB,IAAA,EACxD,SAAUA,EAAO,SAAS,WAAW,CAAA,EAEvC,CACE,MAAO,oBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,uBAAuB,UAAU,SAAS,EAC3D,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,aAAA,EAAe,IAAA,EACrD,SAAUA,EAAO,SAAS,QAAQ,CAAA,EAEpC,CACE,MAAO,gBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,oBAAoB,UAAU,SAAS,EACxD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,aAAA,EAAe,IAAA,CAAI,EAE3D,CACE,MAAO,uBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,iBAAA,EAAmB,IAAA,EACzD,SAAUA,EAAO,SAAS,YAAY,CAAA,EAExC,CACE,MAAO,iBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,wBAAwB,UAAU,SAAS,EAC5D,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,aAAA,EAAe,IAAA,CAAI,EAG3D,CACE,MAAO,WACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAI,EAEnD,CACE,MAAO,UACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAI,EAEnD,CACE,MAAO,wBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,0BAA0B,UAAU,SAAS,EAC9D,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,WAAA,EAAa,cAAA,EAAgB,IAAA,CAAI,EAEzE,CACE,MAAO,cACP,KAAMC,EAACC,EAAA,CAAK,KAAK,gBAAgB,UAAU,SAAS,EACpD,QAAS,IAAMF,EAAO,SAAS,aAAA,CAAa,CAEhD"}
1
+ {"version":3,"file":"helper.js","sources":["../../../../../../../../lib/shared/ui/formElements/controlled/editor/model/helper.tsx"],"sourcesContent":["import type { Editor } from '@tiptap/react'\nimport type { ColorOption, HeadingOptions } from './types'\nimport { Icon } from '$/shared/ui'\n\nexport const headingsOptions: HeadingOptions[] = [\n { shortcuts: ['ctrl', 'alt', '1'], level: 1 },\n { shortcuts: ['ctrl', 'alt', '2'], level: 2 },\n { shortcuts: ['ctrl', 'alt', '3'], level: 3 },\n { shortcuts: ['ctrl', 'alt', '4'], level: 4 }\n]\n\nexport const editorHeadingClasses: Record<number, string> = {\n 1: 'mob-headline-bold-m desktop:desk-headline-bold-l',\n 2: 'mob-headline-bold-s desktop:desk-headline-bold-m',\n 3: 'mob-title-bold-l desktop:desk-title-bold-l',\n 4: 'mob-title-bold-m desktop:desk-title-bold-s'\n}\n\nexport const editorAllowedColors: ColorOption[] = [\n '#292929',\n '#FFFFFF',\n '#40465A',\n '#5A6E85',\n '#A9B6C5',\n '#94A4B7',\n '#003790',\n '#042E73',\n '#809BC7',\n '#76BC21',\n '#F49F00',\n '#F42500'\n]\n\nexport const renderEditorPanel = (editor: Editor) => [\n {\n label: 'Жирный текст',\n icon: <Icon name='editor/bold' className='size-4' />,\n onClick: () => editor.chain().focus().toggleBold().run(),\n isActive: editor.isActive('bold')\n },\n {\n label: 'Курсивный текст',\n icon: <Icon name='editor/italic' className='size-4' />,\n onClick: () => editor.chain().focus().toggleItalic().run(),\n isActive: editor.isActive('italic')\n },\n {\n label: 'Подчеркнутый текст',\n icon: <Icon name='editor/underline' className='size-4' />,\n onClick: () => editor.chain().focus().toggleUnderline().run(),\n isActive: editor.isActive('underline')\n },\n {\n label: 'Зачеркнутый текст',\n icon: <Icon name='editor/strikethrough' className='size-4' />,\n onClick: () => editor.chain().focus().toggleStrike().run(),\n isActive: editor.isActive('strike')\n },\n {\n label: 'Обычный текст',\n icon: <Icon name='editor/typography' className='size-4' />,\n onClick: () => editor.chain().focus().setParagraph().run()\n },\n {\n label: 'Маркированный список',\n icon: <Icon name='editor/list' className='size-4' />,\n onClick: () => editor.chain().focus().toggleBulletList().run(),\n isActive: editor.isActive('bulletList')\n },\n {\n label: 'Перенос строки',\n icon: <Icon name='arrows/arrowDownRight' className='size-4' />,\n onClick: () => editor.chain().focus().setHardBreak().run()\n },\n\n {\n label: 'Отменить',\n icon: <Icon name='editor/undo' className='size-4' />,\n onClick: () => editor.chain().focus().undo().run()\n },\n {\n label: 'Вернуть',\n icon: <Icon name='editor/redo' className='size-4' />,\n onClick: () => editor.chain().focus().redo().run()\n },\n {\n label: 'Очистить стили и теги',\n icon: <Icon name='editor/removeFormatting' className='size-4' />,\n onClick: () => editor.chain().focus().clearNodes().unsetAllMarks().run()\n },\n {\n label: 'Удалить все',\n icon: <Icon name='general/close' className='size-4' />,\n onClick: () => editor.commands.clearContent()\n }\n]\n"],"names":["headingsOptions","editorHeadingClasses","editorAllowedColors","renderEditorPanel","editor","jsx","Icon"],"mappings":"i3CAIO,MAAMA,EAAoC,CAC/C,CAAE,UAAW,CAAC,OAAQ,MAAO,GAAG,EAAG,MAAO,CAAA,EAC1C,CAAE,UAAW,CAAC,OAAQ,MAAO,GAAG,EAAG,MAAO,CAAA,EAC1C,CAAE,UAAW,CAAC,OAAQ,MAAO,GAAG,EAAG,MAAO,CAAA,EAC1C,CAAE,UAAW,CAAC,OAAQ,MAAO,GAAG,EAAG,MAAO,CAAA,CAC5C,EAEaC,EAA+C,CAC1D,EAAG,mDACH,EAAG,mDACH,EAAG,6CACH,EAAG,4CACL,EAEaC,EAAqC,CAChD,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EAEaC,EAAqBC,GAAmB,CACnD,CACE,MAAO,eACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,WAAA,EAAa,IAAA,EACnD,SAAUA,EAAO,SAAS,MAAM,CAAA,EAElC,CACE,MAAO,kBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,gBAAgB,UAAU,SAAS,EACpD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,aAAA,EAAe,IAAA,EACrD,SAAUA,EAAO,SAAS,QAAQ,CAAA,EAEpC,CACE,MAAO,qBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,mBAAmB,UAAU,SAAS,EACvD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,gBAAA,EAAkB,IAAA,EACxD,SAAUA,EAAO,SAAS,WAAW,CAAA,EAEvC,CACE,MAAO,oBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,uBAAuB,UAAU,SAAS,EAC3D,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,aAAA,EAAe,IAAA,EACrD,SAAUA,EAAO,SAAS,QAAQ,CAAA,EAEpC,CACE,MAAO,gBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,oBAAoB,UAAU,SAAS,EACxD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,aAAA,EAAe,IAAA,CAAI,EAE3D,CACE,MAAO,uBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,iBAAA,EAAmB,IAAA,EACzD,SAAUA,EAAO,SAAS,YAAY,CAAA,EAExC,CACE,MAAO,iBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,wBAAwB,UAAU,SAAS,EAC5D,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,aAAA,EAAe,IAAA,CAAI,EAG3D,CACE,MAAO,WACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAI,EAEnD,CACE,MAAO,UACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAI,EAEnD,CACE,MAAO,wBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,0BAA0B,UAAU,SAAS,EAC9D,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,WAAA,EAAa,cAAA,EAAgB,IAAA,CAAI,EAEzE,CACE,MAAO,cACP,KAAMC,EAACC,EAAA,CAAK,KAAK,gBAAgB,UAAU,SAAS,EACpD,QAAS,IAAMF,EAAO,SAAS,aAAA,CAAa,CAEhD"}
@@ -1,2 +1,2 @@
1
- import{jsxs as U,jsx as i}from"react/jsx-runtime";import{forwardRef as q,useRef as G}from"react";import{useFloating as J}from"../../../../../../node_modules/@floating-ui/react/dist/floating-ui.react.js";import{useCombobox as K}from"./hooks/useCombobox.js";import{useClickOutside as Q}from"../../../../hooks/useClickOutside.js";import{cn as r}from"../../../../utils/cn.js";import{mergeRefs as T}from"../../../../utils/mergeRefs.js";import"../../../button/Button.js";import"../../../buttonIcon/ButtonIcon.js";import"../../../calendar/Calendar.js";import"../../../calendar/model/utils.js";import"../../../accordion/Accordion.js";import"react-dom";import"../../../modal/ui/IframeModalContent.js";import"../../../../../../node_modules/react-hot-toast/dist/index.js";import{Icon as V}from"../../../icon/Icon.js";import"../../../table/ui/primitives/Primitives.js";import"../../../carousel/ui/CarouselContent.js";import"../../../slot/Slot.js";import"../autocomplete/Autocomplete.js";import"../checkbox/Checkbox.js";import"../dayPicker/DayPicker.js";import{InputBase as W}from"../input/Input.js";import"../inputOtp/InputOtpBase.js";import"../maskInput/MaskInput.js";import"../radio/RadioGroup.js";import"../radio/ui/RadioItem.js";import"../slider/SliderBase.js";import"../switch/Switch.js";import"../textarea/Textarea.js";import"../uploader/UploaderBase.js";import"../../controlled/editor/ui/Editor.js";import"../../controlled/input/MaskInputControl.js";import"../../../dropdownList/ui/dropdownItem/DropdownItem.js";import{DropdownList as X}from"../../../dropdownList/DropdownList.js";import{AnimatePresence as Y}from"../../../../../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.js";import{motion as Z}from"../../../../../../node_modules/framer-motion/dist/es/render/components/motion/proxy.js";import{autoUpdate as _}from"../../../../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.js";import{flip as $,offset as s}from"../../../../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js";const l=({options:R,multiple:c,value:v,onChange:y,defaultOpen:b,attachmentProps:k,searchable:m,invalid:A,displayValue:e,label:B,disabled:p,readOnly:g,className:F,externalHandlers:o,inputValue:N,filterDisabled:O,onInputChange:P,classes:t},j)=>{var w;const{floating:z,...a}=(t==null?void 0:t.list)??{},n=G(null),{refs:C,floatingStyles:d}=J({placement:"bottom-start",strategy:"absolute",middleware:[$({boundary:"clippingAncestors",crossAxis:!1}),s(4)],whileElementsMounted:_}),{open:h,setOpen:f,state:D,changeHandler:E,options:L,search:M,onInputChange:S}=K({multiple:c,value:v,onChange:y,searchable:m,defaultOpen:b,displayValue:e,initialOptions:R,filterDisabled:O,externalHandlers:o,externalInputValue:N,externalOnInputChange:P});return Q(n,()=>f(!1)),U("div",{ref:n,className:r("relative w-full",t==null?void 0:t.root,F),children:[i(W,{ref:T(j,C.setReference),label:B,invalid:A,readOnly:g||!m,value:M,onChange:S,disabled:p,onClick:u=>{var I;f(!0),(I=o==null?void 0:o.clickHandler)==null||I.call(o,u)},onBlur:o==null?void 0:o.blurHandler,onFocus:o==null?void 0:o.focusHandler,classes:{input:r({"cursor-pointer":!m,"cursor-default":p,"pointer-events-none":p||g}),...t==null?void 0:t.input},autoComplete:"off",attachmentProps:{icon:i(V,{name:"arrows/arrowRight",className:r("size-6 rotate-90 text-color-blue-grey-600 duration-100",{"-rotate-90":h})}),onClickIcon:()=>f(u=>!u),...k}}),i(Y,{children:h&&i(Z.div,{ref:C.setFloating,initial:{opacity:0},animate:{opacity:1},transition:{duration:.1},className:r("z-[1000]",z),style:{...d,width:(w=n.current)==null?void 0:w.getBoundingClientRect().width},children:i(X,{options:L,multiple:c,onPick:E,value:D,displayValue:e,classes:a})})})]})},Go=q(l);export{Go as Combobox};
1
+ import{jsxs as G,jsx as r}from"react/jsx-runtime";import{forwardRef as J,useRef as K}from"react";import{useFloating as Q}from"../../../../../../node_modules/@floating-ui/react/dist/floating-ui.react.js";import{useCombobox as T}from"./hooks/useCombobox.js";import{useClickOutside as V}from"../../../../hooks/useClickOutside.js";import{cn as p}from"../../../../utils/cn.js";import{mergeRefs as W}from"../../../../utils/mergeRefs.js";import"../../../button/Button.js";import"../../../buttonIcon/ButtonIcon.js";import"../../../calendar/Calendar.js";import"../../../calendar/model/utils.js";import"../../../accordion/Accordion.js";import"react-dom";import"../../../modal/ui/IframeModalContent.js";import"../../../../../../node_modules/react-hot-toast/dist/index.js";import{Icon as X}from"../../../icon/Icon.js";import"../../../table/ui/primitives/Primitives.js";import"../../../carousel/ui/CarouselContent.js";import"../../../slot/Slot.js";import"../autocomplete/Autocomplete.js";import"../checkbox/Checkbox.js";import"../dayPicker/DayPicker.js";import{InputBase as Y}from"../input/Input.js";import"../inputOtp/InputOtpBase.js";import"../maskInput/MaskInput.js";import"../radio/RadioGroup.js";import"../radio/ui/RadioItem.js";import"../slider/SliderBase.js";import"../switch/Switch.js";import"../textarea/Textarea.js";import"../uploader/UploaderBase.js";import"../../controlled/editor/ui/Editor.js";import"../../controlled/input/MaskInputControl.js";import"../../../dropdownList/ui/dropdownItem/DropdownItem.js";import{DropdownList as Z}from"../../../dropdownList/DropdownList.js";import{AnimatePresence as _}from"../../../../../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.js";import{motion as $}from"../../../../../../node_modules/framer-motion/dist/es/render/components/motion/proxy.js";import{autoUpdate as a}from"../../../../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.js";import{flip as x,offset as l}from"../../../../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js";const H=({options:k,multiple:n,value:m,onChange:v,defaultOpen:A,attachmentProps:B,searchable:i,invalid:F,displayValue:g,label:N,disabled:f,readOnly:C,className:O,externalHandlers:o,inputValue:h,filterDisabled:P,onInputChange:j,classes:t},z)=>{var R;const{floating:D,...L}=(t==null?void 0:t.list)??{},u=K(null),{refs:w,floatingStyles:d}=Q({placement:"bottom-start",strategy:"absolute",middleware:[x({boundary:"clippingAncestors",crossAxis:!1}),l(4)],whileElementsMounted:a}),{open:I,setOpen:c,state:s,changeHandler:E,options:M,search:S,onInputChange:U,comboboxDisplayValue:y}=T({multiple:n,value:m,onChange:v,searchable:i,defaultOpen:A,displayValue:g,initialOptions:k,filterDisabled:P,externalHandlers:o,externalInputValue:h,externalOnInputChange:j}),q=()=>m?n&&i?y(m):i?S:y(m):"";return V(u,()=>c(!1)),G("div",{ref:u,className:p("relative w-full",t==null?void 0:t.root,O),children:[r(Y,{ref:W(z,w.setReference),label:N,invalid:F,readOnly:C||!i,value:h||q(),onChange:U,disabled:f,onClick:e=>{var b;c(!0),(b=o==null?void 0:o.clickHandler)==null||b.call(o,e)},onBlur:o==null?void 0:o.blurHandler,onFocus:o==null?void 0:o.focusHandler,classes:{input:p({"cursor-pointer":!i,"cursor-default":f,"pointer-events-none":f||C}),...t==null?void 0:t.input},autoComplete:"off",attachmentProps:{icon:r(X,{name:"arrows/arrowRight",className:p("size-6 rotate-90 text-color-blue-grey-600 duration-100",{"-rotate-90":I})}),onClickIcon:()=>c(e=>!e),...B}}),r(_,{children:I&&r($.div,{ref:w.setFloating,initial:{opacity:0},animate:{opacity:1},transition:{duration:.1},className:p("z-[1000]",D),style:{...d,width:(R=u.current)==null?void 0:R.getBoundingClientRect().width},children:r(Z,{options:M,multiple:n,onPick:E,value:s,displayValue:g,classes:L})})})]})},Ko=J(H);export{Ko as Combobox};
2
2
  //# sourceMappingURL=combobox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"combobox.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/combobox/combobox.tsx"],"sourcesContent":["import { type ForwardedRef, forwardRef, useRef } from 'react'\nimport { autoUpdate, flip, offset, useFloating } from '@floating-ui/react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { useCombobox } from './hooks'\nimport type { ChangeHandler, ComboboxValue } from './model'\nimport type { ComboboxItemOption } from './ui'\nimport { useClickOutside } from '$/shared/hooks'\nimport { type DeepPartial } from '$/shared/types'\nimport { Icon } from '$/shared/ui'\nimport { DropdownList, type DropdownListClasses, type DropdownListProps } from '$/shared/ui/dropdownList'\nimport { type IFieldAttachmentProps } from '$/shared/ui/formElements/ui'\nimport { InputBase, type InputBaseProps } from '$/shared/ui/formElements/uncontrolled/input'\nimport { cn, mergeRefs } from '$/shared/utils'\n\nexport type ComboboxClasses = {\n root?: string\n list?: { floating?: string } & DropdownListClasses\n input?: InputBaseProps['classes']\n}\n\nexport type ExternalHandlers<Multi extends boolean> = {\n changeHandler?: ChangeHandler<Multi>\n clickHandler?: (event: React.MouseEvent<HTMLElement>) => void\n blurHandler?: (event: React.FocusEvent<HTMLElement>) => void\n focusHandler?: (event: React.FocusEvent<HTMLElement>) => void\n inputChangeHandler?: (value: string) => void\n}\n\nexport interface ComboboxProps<Multi extends boolean> extends Omit<DropdownListProps<Multi>, 'options' | 'value' | 'onChange'> {\n /**\n * Список опций\n */\n options: ComboboxItemOption[]\n /**\n * Выбранное значение\n */\n value?: ComboboxValue<Multi>\n /**\n * Функция для изменения значения\n */\n onChange?: ChangeHandler<Multi>\n /**\n * Свойство управляющее поиском\n */\n searchable?: boolean\n /**\n * Открыть список по умолчанию\n */\n defaultOpen?: boolean\n /**\n * Свойства дополнительной иконки\n */\n attachmentProps?: DeepPartial<IFieldAttachmentProps>\n /**\n * Пометить поле как не валидное\n */\n invalid?: boolean\n /**\n * Функция для управления отображаемым значением\n */\n displayValue?: (option: ComboboxItemOption) => string\n /**\n * Отображаемый лейбл\n */\n label: string\n /**\n * Выключено поле\n */\n disabled?: boolean\n /**\n * Только для чтения\n */\n readOnly?: boolean\n /**\n * Дополнительные стили\n */\n classes?: ComboboxClasses\n /**\n * Дополнительные события\n */\n externalHandlers?: ExternalHandlers<Multi>\n /**\n * Функция для изменения значения поиска\n */\n onInputChange?: (value: string) => void\n /**\n * Значение инпута\n */\n inputValue?: string\n /**\n * Выключить фильтрацию списка\n */\n filterDisabled?: boolean\n}\n\nconst InnerComponent = <Multi extends boolean>(\n {\n options: initialOptions,\n multiple,\n value,\n onChange,\n defaultOpen,\n attachmentProps,\n searchable,\n invalid,\n displayValue,\n label,\n disabled,\n readOnly,\n className,\n externalHandlers,\n inputValue,\n filterDisabled,\n onInputChange: externalInputChangeHandler,\n classes\n }: ComboboxProps<Multi>,\n ref: ForwardedRef<HTMLInputElement>\n) => {\n const { floating, ...dropdownClasses } = classes?.list ?? {}\n\n const containerRef = useRef<HTMLDivElement>(null)\n\n const { refs, floatingStyles } = useFloating<HTMLInputElement>({\n placement: 'bottom-start',\n strategy: 'absolute',\n middleware: [\n flip({\n boundary: 'clippingAncestors',\n crossAxis: false\n }),\n offset(4)\n ],\n whileElementsMounted: autoUpdate\n })\n\n const { open, setOpen, state, changeHandler, options, search, onInputChange } = useCombobox({\n multiple,\n value,\n onChange,\n searchable,\n defaultOpen,\n displayValue,\n initialOptions,\n filterDisabled,\n externalHandlers,\n externalInputValue: inputValue,\n externalOnInputChange: externalInputChangeHandler\n })\n\n useClickOutside(containerRef, () => setOpen(false))\n\n return (\n <div ref={containerRef} className={cn('relative w-full', classes?.root, className)}>\n <InputBase\n ref={mergeRefs(ref, refs.setReference)}\n label={label}\n invalid={invalid}\n readOnly={readOnly || !searchable}\n value={search}\n onChange={onInputChange}\n disabled={disabled}\n onClick={(event) => {\n setOpen(true)\n externalHandlers?.clickHandler?.(event)\n }}\n onBlur={externalHandlers?.blurHandler}\n onFocus={externalHandlers?.focusHandler}\n classes={{\n input: cn({\n 'cursor-pointer': !searchable,\n 'cursor-default': disabled,\n 'pointer-events-none': disabled || readOnly\n }),\n ...classes?.input\n }}\n autoComplete='off'\n attachmentProps={{\n icon: (\n <Icon\n name='arrows/arrowRight'\n className={cn('size-6 rotate-90 text-color-blue-grey-600 duration-100', {\n '-rotate-90': open\n })}\n />\n ),\n onClickIcon: () => setOpen((prev) => !prev),\n ...attachmentProps\n }}\n />\n\n <AnimatePresence>\n {open && (\n <motion.div\n ref={refs.setFloating}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.1 }}\n className={cn('z-[1000]', floating)}\n style={{ ...floatingStyles, width: containerRef.current?.getBoundingClientRect().width }}\n >\n <DropdownList\n options={options}\n multiple={multiple}\n onPick={changeHandler}\n value={state}\n displayValue={displayValue}\n classes={dropdownClasses}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )\n}\n\nexport const Combobox = forwardRef(InnerComponent) as <Multi extends boolean>(\n props: ComboboxProps<Multi> & { ref?: ForwardedRef<HTMLInputElement> }\n) => React.JSX.Element\n"],"names":["InnerComponent","initialOptions","multiple","value","onChange","defaultOpen","attachmentProps","searchable","invalid","displayValue","label","disabled","readOnly","className","externalHandlers","inputValue","filterDisabled","externalInputChangeHandler","classes","ref","floating","dropdownClasses","containerRef","useRef","refs","floatingStyles","useFloating","flip","offset","autoUpdate","open","setOpen","state","changeHandler","options","search","onInputChange","useCombobox","useClickOutside","jsxs","cn","jsx","InputBase","mergeRefs","event","_a","Icon","prev","AnimatePresence","motion","DropdownList","Combobox","forwardRef"],"mappings":"++DA+FA,MAAMA,EAAiB,CACrB,CACE,QAASC,EACT,SAAAC,EACA,MAAAC,EACA,SAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,WAAAC,EACA,QAAAC,EACA,aAAAC,EACA,MAAAC,EACA,SAAAC,EACA,SAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,eAAAC,EACA,cAAeC,EACf,QAAAC,CACF,EACAC,IACG,OACH,KAAM,CAAE,SAAAC,EAAU,GAAGC,IAAoBH,GAAA,YAAAA,EAAS,OAAQ,CAAA,EAEpDI,EAAeC,EAAuB,IAAI,EAE1C,CAAE,KAAAC,EAAM,eAAAC,CAAA,EAAmBC,EAA8B,CAC7D,UAAW,eACX,SAAU,WACV,WAAY,CACVC,EAAK,CACH,SAAU,oBACV,UAAW,EAAA,CACZ,EACDC,EAAO,CAAC,CAAA,EAEV,qBAAsBC,CAAA,CACvB,EAEK,CAAE,KAAAC,EAAM,QAAAC,EAAS,MAAAC,EAAO,cAAAC,EAAe,QAAAC,EAAS,OAAAC,EAAQ,cAAAC,CAAA,EAAkBC,EAAY,CAC1F,SAAAnC,EACA,MAAAC,EACA,SAAAC,EACA,WAAAG,EACA,YAAAF,EACA,aAAAI,EACA,eAAAR,EACA,eAAAe,EACA,iBAAAF,EACA,mBAAoBC,EACpB,sBAAuBE,CAAA,CACxB,EAED,OAAAqB,EAAgBhB,EAAc,IAAMS,EAAQ,EAAK,CAAC,EAGhDQ,EAAC,MAAA,CAAI,IAAKjB,EAAc,UAAWkB,EAAG,kBAAmBtB,GAAA,YAAAA,EAAS,KAAML,CAAS,EAC/E,SAAA,CAAA4B,EAACC,EAAA,CACC,IAAKC,EAAUxB,EAAKK,EAAK,YAAY,EACrC,MAAAd,EACA,QAAAF,EACA,SAAUI,GAAY,CAACL,EACvB,MAAO4B,EACP,SAAUC,EACV,SAAAzB,EACA,QAAUiC,GAAU,OAClBb,EAAQ,EAAI,GACZc,EAAA/B,GAAA,YAAAA,EAAkB,eAAlB,MAAA+B,EAAA,KAAA/B,EAAiC8B,EACnC,EACA,OAAQ9B,GAAA,YAAAA,EAAkB,YAC1B,QAASA,GAAA,YAAAA,EAAkB,aAC3B,QAAS,CACP,MAAO0B,EAAG,CACR,iBAAkB,CAACjC,EACnB,iBAAkBI,EAClB,sBAAuBA,GAAYC,CAAA,CACpC,EACD,GAAGM,GAAA,YAAAA,EAAS,KAAA,EAEd,aAAa,MACb,gBAAiB,CACf,KACEuB,EAACK,EAAA,CACC,KAAK,oBACL,UAAWN,EAAG,yDAA0D,CACtE,aAAcV,CAAA,CACf,CAAA,CAAA,EAGL,YAAa,IAAMC,EAASgB,GAAS,CAACA,CAAI,EAC1C,GAAGzC,CAAA,CACL,CAAA,EAGFmC,EAACO,GACE,SAAAlB,GACCW,EAACQ,EAAO,IAAP,CACC,IAAKzB,EAAK,YACV,QAAS,CAAE,QAAS,CAAA,EACpB,QAAS,CAAE,QAAS,CAAA,EACpB,WAAY,CAAE,SAAU,EAAA,EACxB,UAAWgB,EAAG,WAAYpB,CAAQ,EAClC,MAAO,CAAE,GAAGK,EAAgB,OAAOoB,EAAAvB,EAAa,UAAb,YAAAuB,EAAsB,wBAAwB,KAAA,EAEjF,SAAAJ,EAACS,EAAA,CACC,QAAAhB,EACA,SAAAhC,EACA,OAAQ+B,EACR,MAAOD,EACP,aAAAvB,EACA,QAASY,CAAA,CAAA,CACX,CAAA,CACF,CAEJ,CAAA,EACF,CAEJ,EAEa8B,GAAWC,EAAWpD,CAAc"}
1
+ {"version":3,"file":"combobox.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/combobox/combobox.tsx"],"sourcesContent":["import { type ForwardedRef, forwardRef, useRef } from 'react'\nimport { autoUpdate, flip, offset, useFloating } from '@floating-ui/react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { useCombobox } from './hooks'\nimport type { ChangeHandler, ComboboxValue } from './model'\nimport type { ComboboxItemOption } from './ui'\nimport { useClickOutside } from '$/shared/hooks'\nimport { type DeepPartial } from '$/shared/types'\nimport { Icon } from '$/shared/ui'\nimport { DropdownList, type DropdownListClasses, type DropdownListProps } from '$/shared/ui/dropdownList'\nimport { type IFieldAttachmentProps } from '$/shared/ui/formElements/ui'\nimport { InputBase, type InputBaseProps } from '$/shared/ui/formElements/uncontrolled/input'\nimport { cn, mergeRefs } from '$/shared/utils'\n\nexport type ComboboxClasses = {\n root?: string\n list?: { floating?: string } & DropdownListClasses\n input?: InputBaseProps['classes']\n}\n\nexport type ExternalHandlers<Multi extends boolean> = {\n changeHandler?: ChangeHandler<Multi>\n clickHandler?: (event: React.MouseEvent<HTMLElement>) => void\n blurHandler?: (event: React.FocusEvent<HTMLElement>) => void\n focusHandler?: (event: React.FocusEvent<HTMLElement>) => void\n inputChangeHandler?: (value: string) => void\n}\n\nexport interface ComboboxProps<Multi extends boolean> extends Omit<DropdownListProps<Multi>, 'options' | 'value' | 'onChange'> {\n /**\n * Список опций\n */\n options: ComboboxItemOption[]\n /**\n * Выбранное значение\n */\n value?: ComboboxValue<Multi>\n /**\n * Функция для изменения значения\n */\n onChange?: ChangeHandler<Multi>\n /**\n * Свойство управляющее поиском\n */\n searchable?: boolean\n /**\n * Открыть список по умолчанию\n */\n defaultOpen?: boolean\n /**\n * Свойства дополнительной иконки\n */\n attachmentProps?: DeepPartial<IFieldAttachmentProps>\n /**\n * Пометить поле как не валидное\n */\n invalid?: boolean\n /**\n * Функция для управления отображаемым значением\n */\n displayValue?: (option: ComboboxItemOption) => string\n /**\n * Отображаемый лейбл\n */\n label: string\n /**\n * Выключено поле\n */\n disabled?: boolean\n /**\n * Только для чтения\n */\n readOnly?: boolean\n /**\n * Дополнительные стили\n */\n classes?: ComboboxClasses\n /**\n * Дополнительные события\n */\n externalHandlers?: ExternalHandlers<Multi>\n /**\n * Функция для изменения значения поиска\n */\n onInputChange?: (value: string) => void\n /**\n * Значение инпута\n */\n inputValue?: string\n /**\n * Выключить фильтрацию списка\n */\n filterDisabled?: boolean\n}\n\nconst InnerComponent = <Multi extends boolean>(\n {\n options: initialOptions,\n multiple,\n value,\n onChange,\n defaultOpen,\n attachmentProps,\n searchable,\n invalid,\n displayValue,\n label,\n disabled,\n readOnly,\n className,\n externalHandlers,\n inputValue,\n filterDisabled,\n onInputChange: externalInputChangeHandler,\n classes\n }: ComboboxProps<Multi>,\n ref: ForwardedRef<HTMLInputElement>\n) => {\n const { floating, ...dropdownClasses } = classes?.list ?? {}\n\n const containerRef = useRef<HTMLDivElement>(null)\n\n const { refs, floatingStyles } = useFloating<HTMLInputElement>({\n placement: 'bottom-start',\n strategy: 'absolute',\n middleware: [\n flip({\n boundary: 'clippingAncestors',\n crossAxis: false\n }),\n offset(4)\n ],\n whileElementsMounted: autoUpdate\n })\n\n const { open, setOpen, state, changeHandler, options, search, onInputChange, comboboxDisplayValue } = useCombobox({\n multiple,\n value,\n onChange,\n searchable,\n defaultOpen,\n displayValue,\n initialOptions,\n filterDisabled,\n externalHandlers,\n externalInputValue: inputValue,\n externalOnInputChange: externalInputChangeHandler\n })\n\n const getLabel = () => {\n if (!value) return ''\n\n if (multiple && searchable) {\n return comboboxDisplayValue(value)\n } else if (searchable) {\n return search\n } else {\n return comboboxDisplayValue(value)\n }\n }\n\n useClickOutside(containerRef, () => setOpen(false))\n\n return (\n <div ref={containerRef} className={cn('relative w-full', classes?.root, className)}>\n <InputBase\n ref={mergeRefs(ref, refs.setReference)}\n label={label}\n invalid={invalid}\n readOnly={readOnly || !searchable}\n value={inputValue || getLabel()}\n onChange={onInputChange}\n disabled={disabled}\n onClick={(event) => {\n setOpen(true)\n externalHandlers?.clickHandler?.(event)\n }}\n onBlur={externalHandlers?.blurHandler}\n onFocus={externalHandlers?.focusHandler}\n classes={{\n input: cn({\n 'cursor-pointer': !searchable,\n 'cursor-default': disabled,\n 'pointer-events-none': disabled || readOnly\n }),\n ...classes?.input\n }}\n autoComplete='off'\n attachmentProps={{\n icon: (\n <Icon\n name='arrows/arrowRight'\n className={cn('size-6 rotate-90 text-color-blue-grey-600 duration-100', {\n '-rotate-90': open\n })}\n />\n ),\n onClickIcon: () => setOpen((prev) => !prev),\n ...attachmentProps\n }}\n />\n\n <AnimatePresence>\n {open && (\n <motion.div\n ref={refs.setFloating}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.1 }}\n className={cn('z-[1000]', floating)}\n style={{ ...floatingStyles, width: containerRef.current?.getBoundingClientRect().width }}\n >\n <DropdownList\n options={options}\n multiple={multiple}\n onPick={changeHandler}\n value={state}\n displayValue={displayValue}\n classes={dropdownClasses}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )\n}\n\nexport const Combobox = forwardRef(InnerComponent) as <Multi extends boolean>(\n props: ComboboxProps<Multi> & { ref?: ForwardedRef<HTMLInputElement> }\n) => React.JSX.Element\n"],"names":["InnerComponent","initialOptions","multiple","value","onChange","defaultOpen","attachmentProps","searchable","invalid","displayValue","label","disabled","readOnly","className","externalHandlers","inputValue","filterDisabled","externalInputChangeHandler","classes","ref","floating","dropdownClasses","containerRef","useRef","refs","floatingStyles","useFloating","flip","offset","autoUpdate","open","setOpen","state","changeHandler","options","search","onInputChange","comboboxDisplayValue","useCombobox","getLabel","useClickOutside","jsxs","cn","jsx","InputBase","mergeRefs","event","_a","Icon","prev","AnimatePresence","motion","DropdownList","Combobox","forwardRef"],"mappings":"++DA+FA,MAAMA,EAAiB,CACrB,CACE,QAASC,EACT,SAAAC,EACA,MAAAC,EACA,SAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,WAAAC,EACA,QAAAC,EACA,aAAAC,EACA,MAAAC,EACA,SAAAC,EACA,SAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,eAAAC,EACA,cAAeC,EACf,QAAAC,CACF,EACAC,IACG,OACH,KAAM,CAAE,SAAAC,EAAU,GAAGC,IAAoBH,GAAA,YAAAA,EAAS,OAAQ,CAAA,EAEpDI,EAAeC,EAAuB,IAAI,EAE1C,CAAE,KAAAC,EAAM,eAAAC,CAAA,EAAmBC,EAA8B,CAC7D,UAAW,eACX,SAAU,WACV,WAAY,CACVC,EAAK,CACH,SAAU,oBACV,UAAW,EAAA,CACZ,EACDC,EAAO,CAAC,CAAA,EAEV,qBAAsBC,CAAA,CACvB,EAEK,CAAE,KAAAC,EAAM,QAAAC,EAAS,MAAAC,EAAO,cAAAC,EAAe,QAAAC,EAAS,OAAAC,EAAQ,cAAAC,EAAe,qBAAAC,CAAA,EAAyBC,EAAY,CAChH,SAAApC,EACA,MAAAC,EACA,SAAAC,EACA,WAAAG,EACA,YAAAF,EACA,aAAAI,EACA,eAAAR,EACA,eAAAe,EACA,iBAAAF,EACA,mBAAoBC,EACpB,sBAAuBE,CAAA,CACxB,EAEKsB,EAAW,IACVpC,EAEDD,GAAYK,EACP8B,EAAqBlC,CAAK,EACxBI,EACF4B,EAEAE,EAAqBlC,CAAK,EAPhB,GAWrB,OAAAqC,EAAgBlB,EAAc,IAAMS,EAAQ,EAAK,CAAC,EAGhDU,EAAC,MAAA,CAAI,IAAKnB,EAAc,UAAWoB,EAAG,kBAAmBxB,GAAA,YAAAA,EAAS,KAAML,CAAS,EAC/E,SAAA,CAAA8B,EAACC,EAAA,CACC,IAAKC,EAAU1B,EAAKK,EAAK,YAAY,EACrC,MAAAd,EACA,QAAAF,EACA,SAAUI,GAAY,CAACL,EACvB,MAAOQ,GAAcwB,EAAA,EACrB,SAAUH,EACV,SAAAzB,EACA,QAAUmC,GAAU,OAClBf,EAAQ,EAAI,GACZgB,EAAAjC,GAAA,YAAAA,EAAkB,eAAlB,MAAAiC,EAAA,KAAAjC,EAAiCgC,EACnC,EACA,OAAQhC,GAAA,YAAAA,EAAkB,YAC1B,QAASA,GAAA,YAAAA,EAAkB,aAC3B,QAAS,CACP,MAAO4B,EAAG,CACR,iBAAkB,CAACnC,EACnB,iBAAkBI,EAClB,sBAAuBA,GAAYC,CAAA,CACpC,EACD,GAAGM,GAAA,YAAAA,EAAS,KAAA,EAEd,aAAa,MACb,gBAAiB,CACf,KACEyB,EAACK,EAAA,CACC,KAAK,oBACL,UAAWN,EAAG,yDAA0D,CACtE,aAAcZ,CAAA,CACf,CAAA,CAAA,EAGL,YAAa,IAAMC,EAASkB,GAAS,CAACA,CAAI,EAC1C,GAAG3C,CAAA,CACL,CAAA,EAGFqC,EAACO,GACE,SAAApB,GACCa,EAACQ,EAAO,IAAP,CACC,IAAK3B,EAAK,YACV,QAAS,CAAE,QAAS,CAAA,EACpB,QAAS,CAAE,QAAS,CAAA,EACpB,WAAY,CAAE,SAAU,EAAA,EACxB,UAAWkB,EAAG,WAAYtB,CAAQ,EAClC,MAAO,CAAE,GAAGK,EAAgB,OAAOsB,EAAAzB,EAAa,UAAb,YAAAyB,EAAsB,wBAAwB,KAAA,EAEjF,SAAAJ,EAACS,EAAA,CACC,QAAAlB,EACA,SAAAhC,EACA,OAAQ+B,EACR,MAAOD,EACP,aAAAvB,EACA,QAASY,CAAA,CAAA,CACX,CAAA,CACF,CAEJ,CAAA,EACF,CAEJ,EAEagC,GAAWC,EAAWtD,CAAc"}
@@ -1,2 +1,2 @@
1
- import{useState as p,useMemo as E}from"react";const N=D=>{const{multiple:w,defaultOpen:H,value:M,onChange:e,initialOptions:u,searchable:L,filterDisabled:V,displayValue:i,externalHandlers:k,externalInputValue:f,externalOnInputChange:t}=D,{changeHandler:l,inputChangeHandler:b}=k??{},[r,m]=p(""),[q,v]=p(H??!1),[z,A]=p(M??(w?[]:null)),B=E(()=>V||!r.length||!L?u:u.filter(s=>s.label.toLowerCase().includes(f?f.toLowerCase():r.toLowerCase())),[f,V,u,r,L]);return{open:q,setOpen:v,changeHandler:s=>{A(a=>{if(w){const d=a,n=d.some(c=>c.value===s.value)?d.filter(c=>c.value!==s.value):[...d,s];e==null||e(n),l==null||l(n);const y=n.map(c=>i?i(c):c.label).join(", ");return m(y),t==null||t(y),n}const o=(a==null?void 0:a.value)===s.value?null:s;e==null||e(o),l==null||l(o);const j=i&&o?i(o):o==null?void 0:o.label;return m(j??""),t==null||t(j??""),v(!1),o})},options:B,search:r,onInputChange:s=>{m(s.target.value),b==null||b(s.target.value),t==null||t(s.target.value)},state:z}};export{N as useCombobox};
1
+ import{useState as d,useMemo as B}from"react";import{TypeGuards as E}from"../../../../../utils/typeGuards.js";const R=A=>{const{multiple:y,defaultOpen:G,value:H,onChange:r,initialOptions:u,searchable:V,filterDisabled:w,displayValue:t,externalHandlers:M,externalInputValue:b,externalOnInputChange:o}=A,{changeHandler:c,inputChangeHandler:f}=M??{},[a,m]=d(""),[T,D]=d(G??!1),[k,q]=d(H??(y?[]:null)),z=B(()=>w||!a.length||!V?u:u.filter(s=>s.label.toLowerCase().includes(b?b.toLowerCase():a.toLowerCase())),[b,w,u,a,V]);return{open:T,setOpen:D,changeHandler:s=>{q(l=>{if(y){const p=l,n=p.some(i=>i.value===s.value)?p.filter(i=>i.value!==s.value):[...p,s];r==null||r(n),c==null||c(n);const j=n.map(i=>t?t(i):i.label).join(", ");return m(j),o==null||o(j),n}const e=(l==null?void 0:l.value)===s.value?null:s;r==null||r(e),c==null||c(e);const L=t&&e?t(e):e==null?void 0:e.label;return m(L??""),o==null||o(L??""),D(!1),e})},options:z,search:a,onInputChange:s=>{m(s.target.value),f==null||f(s.target.value),o==null||o(s.target.value)},state:k,comboboxDisplayValue:s=>{if(s)return E.isArray(s)?s.map(l=>t?t(l):l.label).join(", "):t?t(s):s.label}}};export{R as useCombobox};
2
2
  //# sourceMappingURL=useCombobox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCombobox.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/combobox/hooks/useCombobox.ts"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport type { ExternalHandlers } from '../combobox'\nimport { type ChangeHandler, type ComboboxValue } from '../model'\nimport type { ComboboxItemOption } from '../ui'\n\ntype UseComboboxOptions<Multi extends boolean> = {\n initialOptions: ComboboxItemOption[]\n searchable?: boolean\n multiple?: Multi\n value?: ComboboxValue<Multi>\n onChange?: ChangeHandler<Multi>\n displayValue?: (option: ComboboxItemOption) => string\n defaultOpen?: boolean\n externalHandlers?: ExternalHandlers<Multi>\n externalInputValue?: string\n externalOnInputChange?: (value: string) => void\n filterDisabled?: boolean\n}\n\nexport const useCombobox = <Multi extends boolean>(props: UseComboboxOptions<Multi>) => {\n const {\n multiple,\n defaultOpen,\n value,\n onChange,\n initialOptions,\n searchable,\n filterDisabled,\n displayValue,\n externalHandlers,\n externalInputValue,\n externalOnInputChange\n } = props\n const { changeHandler: externalChangeHandler, inputChangeHandler: externalInputChangeHandler } = externalHandlers ?? {}\n\n const [search, setSearch] = useState<string>('')\n const [open, setOpen] = useState<boolean>(defaultOpen ?? false)\n const [state, setState] = useState<ComboboxValue<Multi>>(value ?? ((multiple ? [] : null) as ComboboxValue<Multi>))\n\n const options = useMemo<ComboboxItemOption[]>(() => {\n if (filterDisabled) {\n return initialOptions\n }\n\n if (!search.length || !searchable) {\n return initialOptions\n }\n\n return initialOptions.filter((option) =>\n option.label.toLowerCase().includes(externalInputValue ? externalInputValue.toLowerCase() : search.toLowerCase())\n )\n }, [externalInputValue, filterDisabled, initialOptions, search, searchable])\n\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.target.value)\n externalInputChangeHandler?.(e.target.value)\n externalOnInputChange?.(e.target.value)\n }\n\n const changeHandler = (value: ComboboxItemOption) => {\n setState((prevState) => {\n if (multiple) {\n const prev = prevState as ComboboxItemOption[]\n const exists = prev.some((option) => option.value === value.value)\n\n const updated = (\n exists ? prev.filter((option) => option.value !== value.value) : [...prev, value]\n ) as ComboboxValue<Multi>\n\n onChange?.(updated)\n externalChangeHandler?.(updated)\n\n const searchValue = (updated as ComboboxItemOption[])\n .map((option) => (displayValue ? displayValue(option) : option.label))\n .join(', ')\n setSearch(searchValue)\n externalOnInputChange?.(searchValue)\n\n return updated\n }\n\n const updated = ((prevState as ComboboxItemOption)?.value === value.value ? null : value) as ComboboxValue<Multi>\n\n onChange?.(updated)\n externalChangeHandler?.(updated)\n\n const label = displayValue && updated ? displayValue(updated as ComboboxItemOption) : (updated as ComboboxItemOption)?.label\n setSearch(label ?? '')\n externalOnInputChange?.(label ?? '')\n setOpen(false)\n\n return updated\n })\n }\n\n return {\n open,\n setOpen,\n changeHandler,\n options,\n search,\n onInputChange,\n state\n }\n}\n"],"names":["useCombobox","props","multiple","defaultOpen","value","onChange","initialOptions","searchable","filterDisabled","displayValue","externalHandlers","externalInputValue","externalOnInputChange","externalChangeHandler","externalInputChangeHandler","search","setSearch","useState","open","setOpen","state","setState","options","useMemo","option","prevState","prev","updated","searchValue","label","e"],"mappings":"8CAmBO,MAAMA,EAAsCC,GAAqC,CACtF,KAAM,CACJ,SAAAC,EACA,YAAAC,EACA,MAAAC,EACA,SAAAC,EACA,eAAAC,EACA,WAAAC,EACA,eAAAC,EACA,aAAAC,EACA,iBAAAC,EACA,mBAAAC,EACA,sBAAAC,CAAA,EACEX,EACE,CAAE,cAAeY,EAAuB,mBAAoBC,CAAA,EAA+BJ,GAAoB,CAAA,EAE/G,CAACK,EAAQC,CAAS,EAAIC,EAAiB,EAAE,EACzC,CAACC,EAAMC,CAAO,EAAIF,EAAkBd,GAAe,EAAK,EACxD,CAACiB,EAAOC,CAAQ,EAAIJ,EAA+Bb,IAAWF,EAAW,GAAK,KAA8B,EAE5GoB,EAAUC,EAA8B,IACxCf,GAIA,CAACO,EAAO,QAAU,CAACR,EACdD,EAGFA,EAAe,OAAQkB,GAC5BA,EAAO,MAAM,YAAA,EAAc,SAASb,EAAqBA,EAAmB,cAAgBI,EAAO,aAAa,CAAA,EAEjH,CAACJ,EAAoBH,EAAgBF,EAAgBS,EAAQR,CAAU,CAAC,EA4C3E,MAAO,CACL,KAAAW,EACA,QAAAC,EACA,cAvCqBf,GAA8B,CACnDiB,EAAUI,GAAc,CACtB,GAAIvB,EAAU,CACZ,MAAMwB,EAAOD,EAGPE,EAFSD,EAAK,KAAMF,GAAWA,EAAO,QAAUpB,EAAM,KAAK,EAGtDsB,EAAK,OAAQF,GAAWA,EAAO,QAAUpB,EAAM,KAAK,EAAI,CAAC,GAAGsB,EAAMtB,CAAK,EAGlFC,GAAA,MAAAA,EAAWsB,GACXd,GAAA,MAAAA,EAAwBc,GAExB,MAAMC,EAAeD,EAClB,IAAKH,GAAYf,EAAeA,EAAae,CAAM,EAAIA,EAAO,KAAM,EACpE,KAAK,IAAI,EACZ,OAAAR,EAAUY,CAAW,EACrBhB,GAAA,MAAAA,EAAwBgB,GAEjBD,CACT,CAEA,MAAMA,GAAYF,GAAA,YAAAA,EAAkC,SAAUrB,EAAM,MAAQ,KAAOA,EAEnFC,GAAA,MAAAA,EAAWsB,GACXd,GAAA,MAAAA,EAAwBc,GAExB,MAAME,EAAQpB,GAAgBkB,EAAUlB,EAAakB,CAA6B,EAAKA,GAAA,YAAAA,EAAgC,MACvH,OAAAX,EAAUa,GAAS,EAAE,EACrBjB,GAAA,MAAAA,EAAwBiB,GAAS,IACjCV,EAAQ,EAAK,EAENQ,CACT,CAAC,CACH,EAME,QAAAL,EACA,OAAAP,EACA,cAhDqBe,GAA2C,CAChEd,EAAUc,EAAE,OAAO,KAAK,EACxBhB,GAAA,MAAAA,EAA6BgB,EAAE,OAAO,OACtClB,GAAA,MAAAA,EAAwBkB,EAAE,OAAO,MACnC,EA6CE,MAAAV,CAAA,CAEJ"}
1
+ {"version":3,"file":"useCombobox.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/combobox/hooks/useCombobox.ts"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport type { ExternalHandlers } from '../combobox'\nimport { type ChangeHandler, type ComboboxValue } from '../model'\nimport type { ComboboxItemOption } from '../ui'\nimport { TypeGuards } from '$/shared/utils'\n\ntype UseComboboxOptions<Multi extends boolean> = {\n initialOptions: ComboboxItemOption[]\n searchable?: boolean\n multiple?: Multi\n value?: ComboboxValue<Multi>\n onChange?: ChangeHandler<Multi>\n displayValue?: (option: ComboboxItemOption) => string\n defaultOpen?: boolean\n externalHandlers?: ExternalHandlers<Multi>\n externalInputValue?: string\n externalOnInputChange?: (value: string) => void\n filterDisabled?: boolean\n}\n\nexport const useCombobox = <Multi extends boolean>(props: UseComboboxOptions<Multi>) => {\n const {\n multiple,\n defaultOpen,\n value,\n onChange,\n initialOptions,\n searchable,\n filterDisabled,\n displayValue,\n externalHandlers,\n externalInputValue,\n externalOnInputChange\n } = props\n const { changeHandler: externalChangeHandler, inputChangeHandler: externalInputChangeHandler } = externalHandlers ?? {}\n\n const [search, setSearch] = useState<string>('')\n const [open, setOpen] = useState<boolean>(defaultOpen ?? false)\n const [state, setState] = useState<ComboboxValue<Multi>>(value ?? ((multiple ? [] : null) as ComboboxValue<Multi>))\n\n const options = useMemo<ComboboxItemOption[]>(() => {\n if (filterDisabled) {\n return initialOptions\n }\n\n if (!search.length || !searchable) {\n return initialOptions\n }\n\n return initialOptions.filter((option) =>\n option.label.toLowerCase().includes(externalInputValue ? externalInputValue.toLowerCase() : search.toLowerCase())\n )\n }, [externalInputValue, filterDisabled, initialOptions, search, searchable])\n\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.target.value)\n externalInputChangeHandler?.(e.target.value)\n externalOnInputChange?.(e.target.value)\n }\n\n const changeHandler = (value: ComboboxItemOption) => {\n setState((prevState) => {\n if (multiple) {\n const prev = prevState as ComboboxItemOption[]\n const exists = prev.some((option) => option.value === value.value)\n\n const updated = (\n exists ? prev.filter((option) => option.value !== value.value) : [...prev, value]\n ) as ComboboxValue<Multi>\n\n onChange?.(updated)\n externalChangeHandler?.(updated)\n\n const searchValue = (updated as ComboboxItemOption[])\n .map((option) => (displayValue ? displayValue(option) : option.label))\n .join(', ')\n setSearch(searchValue)\n externalOnInputChange?.(searchValue)\n\n return updated\n }\n\n const updated = ((prevState as ComboboxItemOption)?.value === value.value ? null : value) as ComboboxValue<Multi>\n\n onChange?.(updated)\n externalChangeHandler?.(updated)\n\n const label = displayValue && updated ? displayValue(updated as ComboboxItemOption) : (updated as ComboboxItemOption)?.label\n setSearch(label ?? '')\n externalOnInputChange?.(label ?? '')\n setOpen(false)\n\n return updated\n })\n }\n\n const comboboxDisplayValue = (value: ComboboxValue<Multi>) => {\n if (!value) return\n\n if (TypeGuards.isArray(value)) {\n return value.map((item) => (displayValue ? displayValue(item) : item.label)).join(', ')\n }\n\n return displayValue ? displayValue(value) : value.label\n }\n\n return {\n open,\n setOpen,\n changeHandler,\n options,\n search,\n onInputChange,\n state,\n comboboxDisplayValue\n }\n}\n"],"names":["useCombobox","props","multiple","defaultOpen","value","onChange","initialOptions","searchable","filterDisabled","displayValue","externalHandlers","externalInputValue","externalOnInputChange","externalChangeHandler","externalInputChangeHandler","search","setSearch","useState","open","setOpen","state","setState","options","useMemo","option","prevState","prev","updated","searchValue","label","e","TypeGuards","item"],"mappings":"8GAoBO,MAAMA,EAAsCC,GAAqC,CACtF,KAAM,CACJ,SAAAC,EACA,YAAAC,EACA,MAAAC,EACA,SAAAC,EACA,eAAAC,EACA,WAAAC,EACA,eAAAC,EACA,aAAAC,EACA,iBAAAC,EACA,mBAAAC,EACA,sBAAAC,CAAA,EACEX,EACE,CAAE,cAAeY,EAAuB,mBAAoBC,CAAA,EAA+BJ,GAAoB,CAAA,EAE/G,CAACK,EAAQC,CAAS,EAAIC,EAAiB,EAAE,EACzC,CAACC,EAAMC,CAAO,EAAIF,EAAkBd,GAAe,EAAK,EACxD,CAACiB,EAAOC,CAAQ,EAAIJ,EAA+Bb,IAAWF,EAAW,GAAK,KAA8B,EAE5GoB,EAAUC,EAA8B,IACxCf,GAIA,CAACO,EAAO,QAAU,CAACR,EACdD,EAGFA,EAAe,OAAQkB,GAC5BA,EAAO,MAAM,YAAA,EAAc,SAASb,EAAqBA,EAAmB,cAAgBI,EAAO,aAAa,CAAA,EAEjH,CAACJ,EAAoBH,EAAgBF,EAAgBS,EAAQR,CAAU,CAAC,EAsD3E,MAAO,CACL,KAAAW,EACA,QAAAC,EACA,cAjDqBf,GAA8B,CACnDiB,EAAUI,GAAc,CACtB,GAAIvB,EAAU,CACZ,MAAMwB,EAAOD,EAGPE,EAFSD,EAAK,KAAMF,GAAWA,EAAO,QAAUpB,EAAM,KAAK,EAGtDsB,EAAK,OAAQF,GAAWA,EAAO,QAAUpB,EAAM,KAAK,EAAI,CAAC,GAAGsB,EAAMtB,CAAK,EAGlFC,GAAA,MAAAA,EAAWsB,GACXd,GAAA,MAAAA,EAAwBc,GAExB,MAAMC,EAAeD,EAClB,IAAKH,GAAYf,EAAeA,EAAae,CAAM,EAAIA,EAAO,KAAM,EACpE,KAAK,IAAI,EACZ,OAAAR,EAAUY,CAAW,EACrBhB,GAAA,MAAAA,EAAwBgB,GAEjBD,CACT,CAEA,MAAMA,GAAYF,GAAA,YAAAA,EAAkC,SAAUrB,EAAM,MAAQ,KAAOA,EAEnFC,GAAA,MAAAA,EAAWsB,GACXd,GAAA,MAAAA,EAAwBc,GAExB,MAAME,EAAQpB,GAAgBkB,EAAUlB,EAAakB,CAA6B,EAAKA,GAAA,YAAAA,EAAgC,MACvH,OAAAX,EAAUa,GAAS,EAAE,EACrBjB,GAAA,MAAAA,EAAwBiB,GAAS,IACjCV,EAAQ,EAAK,EAENQ,CACT,CAAC,CACH,EAgBE,QAAAL,EACA,OAAAP,EACA,cA1DqBe,GAA2C,CAChEd,EAAUc,EAAE,OAAO,KAAK,EACxBhB,GAAA,MAAAA,EAA6BgB,EAAE,OAAO,OACtClB,GAAA,MAAAA,EAAwBkB,EAAE,OAAO,MACnC,EAuDE,MAAAV,EACA,qBAlB4BhB,GAAgC,CAC5D,GAAKA,EAEL,OAAI2B,EAAW,QAAQ3B,CAAK,EACnBA,EAAM,IAAK4B,GAAUvB,EAAeA,EAAauB,CAAI,EAAIA,EAAK,KAAM,EAAE,KAAK,IAAI,EAGjFvB,EAAeA,EAAaL,CAAK,EAAIA,EAAM,KACpD,CAUE,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"cn.js","sources":["../../../../lib/shared/utils/cn.ts"],"sourcesContent":["import clsx, { type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport const cn = (...inputs: ClassValue[]) => {\n return twMerge(clsx(inputs))\n}\n"],"names":["cn","inputs","twMerge","clsx"],"mappings":"iJAGO,MAAMA,EAAK,IAAIC,IACbC,EAAQC,EAAKF,CAAM,CAAC"}
1
+ {"version":3,"file":"cn.js","sources":["../../../../lib/shared/utils/cn.ts"],"sourcesContent":["import { type ClassValue, default as clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport const cn = (...inputs: ClassValue[]) => {\n return twMerge(clsx(inputs))\n}\n"],"names":["cn","inputs","twMerge","clsx"],"mappings":"iJAGO,MAAMA,EAAK,IAAIC,IACbC,EAAQC,EAAKF,CAAM,CAAC"}