@alphakits/ui 2.0.12 → 2.1.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 (148) hide show
  1. package/dist/badge/component.d.ts +1 -1
  2. package/dist/box/component.d.ts +2 -2
  3. package/dist/calendar/typings.d.ts +42 -0
  4. package/dist/calendar/use-calendar.d.ts +2 -40
  5. package/dist/calendar/use-calendar.js +1 -1
  6. package/dist/calendar/use-calendar.js.map +1 -1
  7. package/dist/calendar-input/component.d.ts +1 -1
  8. package/dist/checkbox/component.js +12 -15
  9. package/dist/checkbox/component.js.map +1 -1
  10. package/dist/checkbox-lists/component.d.ts +2 -2
  11. package/dist/collapsable-row/addons.d.ts +3 -3
  12. package/dist/copy-button/component.d.ts +2 -1
  13. package/dist/date-switcher/component.d.ts +2 -2
  14. package/dist/flex/component.d.ts +2 -2
  15. package/dist/footer/component.js +32 -38
  16. package/dist/footer/component.js.map +1 -1
  17. package/dist/footer/index.module.css +1 -1
  18. package/dist/footer/index.module.css.js +16 -14
  19. package/dist/footer/index.module.css.js.map +1 -1
  20. package/dist/form/component.d.ts +2 -2
  21. package/dist/form/templates/base-form/index.d.ts +1 -1
  22. package/dist/form/templates/rest-form/form.d.ts +2 -1
  23. package/dist/form/templates/rest-form/index.d.ts +2 -2
  24. package/dist/form/templates/rest-form/index.js.map +1 -1
  25. package/dist/grid/component.d.ts +20 -5
  26. package/dist/grid/component.js +49 -7
  27. package/dist/grid/component.js.map +1 -1
  28. package/dist/grid/index.js +4 -2
  29. package/dist/grid/index.module.css +1 -0
  30. package/dist/grid/index.module.css.js +11 -0
  31. package/dist/grid/{row/index.module.css.js.map → index.module.css.js.map} +1 -1
  32. package/dist/hooks/useClickOutside/index.d.ts +1 -1
  33. package/dist/hooks/useClickOutside/index.js.map +1 -1
  34. package/dist/hooks/useFocus/index.d.ts +1 -1
  35. package/dist/hooks/useFocus/index.js.map +1 -1
  36. package/dist/hooks/usePrevious/index.js +3 -3
  37. package/dist/hooks/usePrevious/index.js.map +1 -1
  38. package/dist/image/use-image-render-component.d.ts +1 -1
  39. package/dist/image-gallery/component.d.ts +2 -2
  40. package/dist/index.js +254 -252
  41. package/dist/input/component.js +56 -60
  42. package/dist/input/component.js.map +1 -1
  43. package/dist/input/index.module.css +1 -1
  44. package/dist/input-autocomplete/autocomplete-field/index.d.ts +2 -1
  45. package/dist/input-autocomplete/autocomplete-field/index.js.map +1 -1
  46. package/dist/input-autocomplete/component.d.ts +3 -3
  47. package/dist/input-ghost/component.d.ts +1 -1
  48. package/dist/masked-input/component.d.ts +1 -1
  49. package/dist/menu/component.d.ts +3 -2
  50. package/dist/menu/component.js.map +1 -1
  51. package/dist/menu/hooks/use-menu.d.ts +1 -1
  52. package/dist/menu/hooks/use-menu.js +6 -6
  53. package/dist/menu/hooks/use-menu.js.map +1 -1
  54. package/dist/modal/components/modals/modal.d.ts +2 -1
  55. package/dist/notification/component.js +33 -37
  56. package/dist/notification/component.js.map +1 -1
  57. package/dist/notification/utils/index.d.ts +1 -1
  58. package/dist/notification/utils/index.js.map +1 -1
  59. package/dist/page-loading/component.d.ts +2 -2
  60. package/dist/picker-button/component.d.ts +1 -1
  61. package/dist/picker-button/field/Component.d.ts +2 -1
  62. package/dist/portal/utils.d.ts +1 -1
  63. package/dist/portal/utils.js.map +1 -1
  64. package/dist/radio-groups/component.d.ts +2 -2
  65. package/dist/select/components/arrow/component.d.ts +2 -1
  66. package/dist/select/components/base-select/component.js +262 -259
  67. package/dist/select/components/base-select/component.js.map +1 -1
  68. package/dist/select/components/checkmark/component.d.ts +2 -1
  69. package/dist/select/components/field/component.d.ts +2 -1
  70. package/dist/select/components/field/component.js.map +1 -1
  71. package/dist/select/components/native-select/component.js.map +1 -1
  72. package/dist/select/components/optgroup/component.d.ts +2 -1
  73. package/dist/select/components/select-search/index.d.ts +1 -1
  74. package/dist/select/components/virtual-options-list/component.d.ts +2 -1
  75. package/dist/select/presets/use-lazy-loading/index.d.ts +4 -4
  76. package/dist/select/presets/use-lazy-loading/index.js +20 -20
  77. package/dist/select/presets/use-lazy-loading/index.js.map +1 -1
  78. package/dist/select/presets/use-select-with-loading/hook.d.ts +3 -2
  79. package/dist/select/presets/use-select-with-loading/hook.js +7 -7
  80. package/dist/select/presets/use-select-with-loading/hook.js.map +1 -1
  81. package/dist/select/typings.d.ts +1 -1
  82. package/dist/select/utils.d.ts +2 -2
  83. package/dist/select/utils.js +17 -15
  84. package/dist/select/utils.js.map +1 -1
  85. package/dist/sidepanel/component.d.ts +1 -0
  86. package/dist/sidepanel/component.js.map +1 -1
  87. package/dist/space/Item.d.ts +1 -1
  88. package/dist/status/component.d.ts +2 -1
  89. package/dist/status/component.js.map +1 -1
  90. package/dist/switch/component.d.ts +1 -1
  91. package/dist/table/components/cells/index.d.ts +2 -1
  92. package/dist/table/components/empty-list/index.d.ts +2 -2
  93. package/dist/table/components/error/index.d.ts +2 -2
  94. package/dist/table/components/loading/index.d.ts +1 -1
  95. package/dist/table/components/table-header/index.d.ts +1 -1
  96. package/dist/table/components/table-header/index.js.map +1 -1
  97. package/dist/table/table.d.ts +2 -2
  98. package/dist/table/table.js.map +1 -1
  99. package/dist/table/utils/get-tags.d.ts +3 -2
  100. package/dist/table/utils/get-tags.js.map +1 -1
  101. package/dist/table/utils/prepare-rows.d.ts +2 -1
  102. package/dist/table/utils/prepare-rows.js.map +1 -1
  103. package/dist/textarea/component.js +68 -75
  104. package/dist/textarea/component.js.map +1 -1
  105. package/dist/theme-provider/component.d.ts +1 -0
  106. package/dist/theme-provider/component.js.map +1 -1
  107. package/dist/toast/component.d.ts +1 -1
  108. package/dist/toast-notifier/component.js +39 -40
  109. package/dist/toast-notifier/component.js.map +1 -1
  110. package/dist/tooltip/component.d.ts +2 -2
  111. package/dist/tooltip/component.js +4 -4
  112. package/dist/tooltip/component.js.map +1 -1
  113. package/dist/tooltip/node-resolver.d.ts +26 -0
  114. package/dist/tooltip/node-resolver.js +14 -0
  115. package/dist/tooltip/node-resolver.js.map +1 -0
  116. package/dist/typography/title/component.d.ts +2 -2
  117. package/dist/with-suffix/component.d.ts +1 -1
  118. package/package.json +8 -12
  119. package/dist/calendar/typings.js +0 -2
  120. package/dist/calendar/typings.js.map +0 -1
  121. package/dist/grid/col/component.d.ts +0 -52
  122. package/dist/grid/col/component.js +0 -39
  123. package/dist/grid/col/component.js.map +0 -1
  124. package/dist/grid/col/index.d.ts +0 -1
  125. package/dist/grid/col/index.js +0 -5
  126. package/dist/grid/col/index.js.map +0 -1
  127. package/dist/grid/col/index.module.css +0 -1
  128. package/dist/grid/col/index.module.css.js +0 -519
  129. package/dist/grid/col/index.module.css.js.map +0 -1
  130. package/dist/grid/gutters.module.css +0 -1
  131. package/dist/grid/gutters.module.css.js +0 -50
  132. package/dist/grid/gutters.module.css.js.map +0 -1
  133. package/dist/grid/row/component.d.ts +0 -41
  134. package/dist/grid/row/component.js +0 -43
  135. package/dist/grid/row/component.js.map +0 -1
  136. package/dist/grid/row/index.d.ts +0 -1
  137. package/dist/grid/row/index.js +0 -5
  138. package/dist/grid/row/index.js.map +0 -1
  139. package/dist/grid/row/index.module.css +0 -1
  140. package/dist/grid/row/index.module.css.js +0 -25
  141. package/dist/grid/typings.d.ts +0 -15
  142. package/dist/grid/typings.js +0 -2
  143. package/dist/grid/typings.js.map +0 -1
  144. package/dist/grid/utils/index.d.ts +0 -2
  145. package/dist/grid/utils/index.js +0 -31
  146. package/dist/grid/utils/index.js.map +0 -1
  147. package/dist/select/typings.js +0 -2
  148. package/dist/select/typings.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../src/select/utils.ts"],"sourcesContent":["import {\n cloneElement, isValidElement, ReactNode, RefObject, useEffect,\n} from 'react';\n\nimport { BaseSelectProps, GroupShape, OptionShape } from './typings';\n\nexport const isGroup = (item: OptionShape | GroupShape): item is GroupShape =>\n Object.prototype.hasOwnProperty.call(item, 'options');\n\nexport const isOptionShape = (item: OptionShape | string | number | null): item is OptionShape =>\n !!item && Object.prototype.hasOwnProperty.call(item, 'key');\n\nexport const joinOptions = ({\n selected,\n selectedMultiple,\n}: {\n selected?: OptionShape;\n selectedMultiple?: OptionShape[];\n}) => {\n const options = selectedMultiple || (selected ? [selected] : []);\n\n if (!options.length) return null;\n\n return options.reduce((acc: Array<ReactNode | string>, option: OptionShape, index: number) => {\n if (isValidElement(option.content)) {\n acc.push(cloneElement(option.content, { key: option.key }));\n } else {\n acc.push(option.content);\n }\n\n if (index < options.length - 1) acc.push(', ');\n\n return acc;\n }, []);\n};\n\n// За один проход делает список пунктов меню плоским и находит выбранные пункты по ключу\nexport function processOptions(\n options: BaseSelectProps['options'],\n selected: BaseSelectProps['selected'] = [],\n) {\n const flatOptions: OptionShape[] = [];\n\n const selectedArray = Array.isArray(selected) ? selected : [selected];\n const selectedOptions = selectedArray.filter(isOptionShape);\n const selectedKeys = selectedArray.filter(\n (option): option is string | number => typeof option === 'string' || typeof option === 'number',\n );\n\n const isSelected = (option: OptionShape) => selectedKeys.includes(option.key);\n\n const process = (option: OptionShape) => {\n flatOptions.push(option);\n\n if (isSelected(option)) {\n selectedOptions.push(option);\n }\n };\n\n options.forEach((option) => {\n if (isGroup(option)) {\n option.options.forEach(process);\n } else {\n process(option);\n }\n });\n\n return { flatOptions, selectedOptions };\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\ntype useVisibleOptionsArgs = {\n /**\n * Количество видимых пунктов\n */\n visibleOptions: number;\n\n /**\n * Реф на контейнер с пунтами меню\n */\n listRef: RefObject<HTMLElement>;\n\n /**\n * Реф на контейнер, которому нужно установить высоту\n */\n styleTargetRef?: RefObject<HTMLElement>;\n\n /**\n * Флаг открытия меню\n */\n open?: boolean;\n\n /**\n * Позволяет вызвать пересчет высоты\n */\n invalidate?: unknown;\n};\n\nexport function useVisibleOptions({\n visibleOptions,\n listRef,\n styleTargetRef = listRef,\n open,\n invalidate,\n}: useVisibleOptionsArgs) {\n useEffect(() => {\n const list = listRef.current;\n const styleTarget = styleTargetRef.current;\n\n if (open && list && styleTarget) {\n const optionsNodes = ([] as HTMLElement[]).slice.call(\n list.children,\n 0,\n visibleOptions + 1,\n );\n\n let height = optionsNodes\n .slice(0, visibleOptions)\n .reduce((acc, child) => acc + child.clientHeight, 0);\n\n if (visibleOptions < list.children.length) {\n // Добавляем половинку\n height += Math.round(optionsNodes[optionsNodes.length - 1].clientHeight / 2);\n }\n\n styleTarget.style.height = `${height}px`;\n }\n }, [listRef, open, styleTargetRef, visibleOptions, invalidate]);\n}\n\n// TODO: перенести\n// export function usePrevious<T>(value: T) {\n// const ref = useRef<T>();\n\n// useEffect(() => {\n// ref.current = value;\n// }, [value]);\n\n// return ref.current;\n// }\n\n// TODO: перенести\nexport const lastIndexOf = <T>(array: T[], predicate: (item: T) => boolean) => {\n for (let i = array.length - 1; i >= 0; i--) {\n if (predicate(array[i])) return i;\n }\n\n return -1;\n};\n\nexport type OptionsType<T> = Array<{\n key: T;\n content: any;\n}>;\n\ntype ConvertToOptions = <T extends {id: string | number; [field: string]: any}>(data: T[], field?: string) => Array<{key: T['id']; content: any}>;\n\nexport const convertToOptions: ConvertToOptions = (data, field) => data.map((item) => ({\n key: item.id,\n content: (field && item[field]) || item.title || item.name,\n}));\n"],"names":["isGroup","item","isOptionShape","joinOptions","selected","selectedMultiple","options","acc","option","index","isValidElement","cloneElement","processOptions","flatOptions","selectedArray","selectedOptions","selectedKeys","isSelected","process","useVisibleOptions","visibleOptions","listRef","styleTargetRef","open","invalidate","useEffect","list","styleTarget","optionsNodes","height","child","lastIndexOf","array","predicate","i","convertToOptions","data","field"],"mappings":";AAMO,MAAMA,IAAU,CAACC,MACpB,OAAO,UAAU,eAAe,KAAKA,GAAM,SAAS,GAE3CC,IAAgB,CAACD,MAC1B,CAAC,CAACA,KAAQ,OAAO,UAAU,eAAe,KAAKA,GAAM,KAAK,GAEjDE,IAAc,CAAC;AAAA,EACxB,UAAAC;AAAA,EACA,kBAAAC;AACJ,MAGM;AACF,QAAMC,IAAUD,MAAqBD,IAAW,CAACA,CAAQ,IAAI,CAAA;AAE7D,SAAKE,EAAQ,SAENA,EAAQ,OAAO,CAACC,GAAgCC,GAAqBC,OACpEC,EAAeF,EAAO,OAAO,IAC7BD,EAAI,KAAKI,EAAaH,EAAO,SAAS,EAAE,KAAKA,EAAO,IAAA,CAAK,CAAC,IAE1DD,EAAI,KAAKC,EAAO,OAAO,GAGvBC,IAAQH,EAAQ,SAAS,KAAGC,EAAI,KAAK,IAAI,GAEtCA,IACR,CAAA,CAAE,IAZuB;AAahC;AAGO,SAASK,EACZN,GACAF,IAAwC,IAC1C;AACE,QAAMS,IAA6B,CAAA,GAE7BC,IAAgB,MAAM,QAAQV,CAAQ,IAAIA,IAAW,CAACA,CAAQ,GAC9DW,IAAkBD,EAAc,OAAOZ,CAAa,GACpDc,IAAeF,EAAc;AAAA,IAC/B,CAACN,MAAsC,OAAOA,KAAW,YAAY,OAAOA,KAAW;AAAA,EAAA,GAGrFS,IAAa,CAACT,MAAwBQ,EAAa,SAASR,EAAO,GAAG,GAEtEU,IAAU,CAACV,MAAwB;AACrC,IAAAK,EAAY,KAAKL,CAAM,GAEnBS,EAAWT,CAAM,KACjBO,EAAgB,KAAKP,CAAM;AAAA,EAEnC;AAEA,SAAAF,EAAQ,QAAQ,CAACE,MAAW;AACxB,IAAIR,EAAQQ,CAAM,IACdA,EAAO,QAAQ,QAAQU,CAAO,IAE9BA,EAAQV,CAAM;AAAA,EAEtB,CAAC,GAEM,EAAE,aAAAK,GAAa,iBAAAE,EAAA;AAC1B;AA8BO,SAASI,EAAkB;AAAA,EAC9B,gBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,gBAAAC,IAAiBD;AAAA,EACjB,MAAAE;AAAA,EACA,YAAAC;AACJ,GAA0B;AACtB,EAAAC,EAAU,MAAM;AACZ,UAAMC,IAAOL,EAAQ,SACfM,IAAcL,EAAe;AAEnC,QAAIC,KAAQG,KAAQC,GAAa;AAC7B,YAAMC,IAAgB,GAAqB,MAAM;AAAA,QAC7CF,EAAK;AAAA,QACL;AAAA,QACAN,IAAiB;AAAA,MAAA;AAGrB,UAAIS,IAASD,EACR,MAAM,GAAGR,CAAc,EACvB,OAAO,CAACb,GAAKuB,MAAUvB,IAAMuB,EAAM,cAAc,CAAC;AAEvD,MAAIV,IAAiBM,EAAK,SAAS,WAE/BG,KAAU,KAAK,MAAMD,EAAaA,EAAa,SAAS,CAAC,EAAE,eAAe,CAAC,IAG/ED,EAAY,MAAM,SAAS,GAAGE,CAAM;AAAA,IACxC;AAAA,EACJ,GAAG,CAACR,GAASE,GAAMD,GAAgBF,GAAgBI,CAAU,CAAC;AAClE;AAcO,MAAMO,IAAc,CAAIC,GAAYC,MAAoC;AAC3E,WAASC,IAAIF,EAAM,SAAS,GAAGE,KAAK,GAAGA;AACnC,QAAID,EAAUD,EAAME,CAAC,CAAC,EAAG,QAAOA;AAGpC,SAAO;AACX,GASaC,IAAqC,CAACC,GAAMC,MAAUD,EAAK,IAAI,CAACnC,OAAU;AAAA,EACnF,KAAKA,EAAK;AAAA,EACV,SAAUoC,KAASpC,EAAKoC,CAAK,KAAMpC,EAAK,SAASA,EAAK;AAC1D,EAAE;"}
1
+ {"version":3,"file":"utils.js","sources":["../../src/select/utils.ts"],"sourcesContent":["import {\n cloneElement, isValidElement, ReactNode, RefObject, useEffect,\n} from 'react';\n\nimport { BaseSelectProps, GroupShape, OptionShape } from './typings';\n\nexport const isGroup = (item: OptionShape | GroupShape): item is GroupShape =>\n Object.prototype.hasOwnProperty.call(item, 'options');\n\nexport const isOptionShape = (item: OptionShape | string | number | null): item is OptionShape =>\n !!item && Object.prototype.hasOwnProperty.call(item, 'key');\n\nexport const joinOptions = ({\n selected,\n selectedMultiple,\n}: {\n selected?: OptionShape;\n selectedMultiple?: OptionShape[];\n}) => {\n const options = selectedMultiple || (selected ? [selected] : []);\n\n if (!options.length) return null;\n\n return options.reduce((acc: Array<ReactNode | string>, option: OptionShape, index: number) => {\n if (isValidElement(option.content)) {\n acc.push(cloneElement(option.content, { key: option.key }));\n } else {\n acc.push(option.content);\n }\n\n if (index < options.length - 1) acc.push(', ');\n\n return acc;\n }, []);\n};\n\n// За один проход делает список пунктов меню плоским и находит выбранные пункты по ключу\nexport function processOptions(\n options: BaseSelectProps['options'],\n selected: BaseSelectProps['selected'] = [],\n) {\n const flatOptions: OptionShape[] = [];\n\n const selectedArray = Array.isArray(selected) ? selected : [selected];\n const selectedOptions = selectedArray.filter(isOptionShape);\n const selectedKeys = new Set(\n selectedArray.filter(\n (option): option is string | number =>\n typeof option === 'string' || typeof option === 'number',\n ),\n );\n\n const isSelected = (option: OptionShape) => selectedKeys.has(option.key);\n\n const process = (option: OptionShape) => {\n flatOptions.push(option);\n\n if (isSelected(option)) {\n selectedOptions.push(option);\n }\n };\n\n options.forEach((option) => {\n if (isGroup(option)) {\n option.options.forEach(process);\n } else {\n process(option);\n }\n });\n\n return { flatOptions, selectedOptions };\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\ntype useVisibleOptionsArgs = {\n /**\n * Количество видимых пунктов\n */\n visibleOptions: number;\n\n /**\n * Реф на контейнер с пунтами меню\n */\n listRef: RefObject<HTMLElement | null>;\n\n /**\n * Реф на контейнер, которому нужно установить высоту\n */\n styleTargetRef?: RefObject<HTMLElement | null>;\n\n /**\n * Флаг открытия меню\n */\n open?: boolean;\n\n /**\n * Позволяет вызвать пересчет высоты\n */\n invalidate?: unknown;\n};\n\nexport function useVisibleOptions({\n visibleOptions,\n listRef,\n styleTargetRef = listRef,\n open,\n invalidate,\n}: useVisibleOptionsArgs) {\n useEffect(() => {\n const list = listRef.current;\n const styleTarget = styleTargetRef.current;\n\n if (open && list && styleTarget) {\n const optionsNodes = ([] as HTMLElement[]).slice.call(\n list.children,\n 0,\n visibleOptions + 1,\n );\n\n let height = optionsNodes\n .slice(0, visibleOptions)\n .reduce((acc, child) => acc + child.clientHeight, 0);\n\n if (visibleOptions < list.children.length) {\n // Добавляем половинку\n height += Math.round(optionsNodes[optionsNodes.length - 1].clientHeight / 2);\n }\n\n styleTarget.style.height = `${height}px`;\n }\n }, [listRef, open, styleTargetRef, visibleOptions, invalidate]);\n}\n\n// TODO: перенести\n// export function usePrevious<T>(value: T) {\n// const ref = useRef<T>();\n\n// useEffect(() => {\n// ref.current = value;\n// }, [value]);\n\n// return ref.current;\n// }\n\n// TODO: перенести\nexport const lastIndexOf = <T>(array: T[], predicate: (item: T) => boolean) => {\n for (let i = array.length - 1; i >= 0; i--) {\n if (predicate(array[i])) return i;\n }\n\n return -1;\n};\n\nexport type OptionsType<T> = Array<{\n key: T;\n content: any;\n}>;\n\ntype ConvertToOptions = <T extends {id: string | number; [field: string]: any}>(data: T[], field?: string) => Array<{key: T['id']; content: any}>;\n\nexport const convertToOptions: ConvertToOptions = (data, field) => data.map((item) => ({\n key: item.id,\n content: (field && item[field]) || item.title || item.name,\n}));\n"],"names":["isGroup","item","isOptionShape","joinOptions","selected","selectedMultiple","options","acc","option","index","isValidElement","cloneElement","processOptions","flatOptions","selectedArray","selectedOptions","selectedKeys","isSelected","process","useVisibleOptions","visibleOptions","listRef","styleTargetRef","open","invalidate","useEffect","list","styleTarget","optionsNodes","height","child","lastIndexOf","array","predicate","i","convertToOptions","data","field"],"mappings":";AAMO,MAAMA,IAAU,CAACC,MACpB,OAAO,UAAU,eAAe,KAAKA,GAAM,SAAS,GAE3CC,IAAgB,CAACD,MAC1B,CAAC,CAACA,KAAQ,OAAO,UAAU,eAAe,KAAKA,GAAM,KAAK,GAEjDE,IAAc,CAAC;AAAA,EACxB,UAAAC;AAAA,EACA,kBAAAC;AACJ,MAGM;AACF,QAAMC,IAAUD,MAAqBD,IAAW,CAACA,CAAQ,IAAI,CAAA;AAE7D,SAAKE,EAAQ,SAENA,EAAQ,OAAO,CAACC,GAAgCC,GAAqBC,OACpEC,EAAeF,EAAO,OAAO,IAC7BD,EAAI,KAAKI,EAAaH,EAAO,SAAS,EAAE,KAAKA,EAAO,IAAA,CAAK,CAAC,IAE1DD,EAAI,KAAKC,EAAO,OAAO,GAGvBC,IAAQH,EAAQ,SAAS,KAAGC,EAAI,KAAK,IAAI,GAEtCA,IACR,CAAA,CAAE,IAZuB;AAahC;AAGO,SAASK,EACZN,GACAF,IAAwC,IAC1C;AACE,QAAMS,IAA6B,CAAA,GAE7BC,IAAgB,MAAM,QAAQV,CAAQ,IAAIA,IAAW,CAACA,CAAQ,GAC9DW,IAAkBD,EAAc,OAAOZ,CAAa,GACpDc,IAAe,IAAI;AAAA,IACrBF,EAAc;AAAA,MACV,CAACN,MACG,OAAOA,KAAW,YAAY,OAAOA,KAAW;AAAA,IAAA;AAAA,EACxD,GAGES,IAAa,CAACT,MAAwBQ,EAAa,IAAIR,EAAO,GAAG,GAEjEU,IAAU,CAACV,MAAwB;AACrC,IAAAK,EAAY,KAAKL,CAAM,GAEnBS,EAAWT,CAAM,KACjBO,EAAgB,KAAKP,CAAM;AAAA,EAEnC;AAEA,SAAAF,EAAQ,QAAQ,CAACE,MAAW;AACxB,IAAIR,EAAQQ,CAAM,IACdA,EAAO,QAAQ,QAAQU,CAAO,IAE9BA,EAAQV,CAAM;AAAA,EAEtB,CAAC,GAEM,EAAE,aAAAK,GAAa,iBAAAE,EAAA;AAC1B;AA8BO,SAASI,EAAkB;AAAA,EAC9B,gBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,gBAAAC,IAAiBD;AAAA,EACjB,MAAAE;AAAA,EACA,YAAAC;AACJ,GAA0B;AACtB,EAAAC,EAAU,MAAM;AACZ,UAAMC,IAAOL,EAAQ,SACfM,IAAcL,EAAe;AAEnC,QAAIC,KAAQG,KAAQC,GAAa;AAC7B,YAAMC,IAAgB,GAAqB,MAAM;AAAA,QAC7CF,EAAK;AAAA,QACL;AAAA,QACAN,IAAiB;AAAA,MAAA;AAGrB,UAAIS,IAASD,EACR,MAAM,GAAGR,CAAc,EACvB,OAAO,CAACb,GAAKuB,MAAUvB,IAAMuB,EAAM,cAAc,CAAC;AAEvD,MAAIV,IAAiBM,EAAK,SAAS,WAE/BG,KAAU,KAAK,MAAMD,EAAaA,EAAa,SAAS,CAAC,EAAE,eAAe,CAAC,IAG/ED,EAAY,MAAM,SAAS,GAAGE,CAAM;AAAA,IACxC;AAAA,EACJ,GAAG,CAACR,GAASE,GAAMD,GAAgBF,GAAgBI,CAAU,CAAC;AAClE;AAcO,MAAMO,IAAc,CAAIC,GAAYC,MAAoC;AAC3E,WAASC,IAAIF,EAAM,SAAS,GAAGE,KAAK,GAAGA;AACnC,QAAID,EAAUD,EAAME,CAAC,CAAC,EAAG,QAAOA;AAGpC,SAAO;AACX,GASaC,IAAqC,CAACC,GAAMC,MAAUD,EAAK,IAAI,CAACnC,OAAU;AAAA,EACnF,KAAKA,EAAK;AAAA,EACV,SAAUoC,KAASpC,EAAKoC,CAAK,KAAMpC,EAAK,SAASA,EAAK;AAC1D,EAAE;"}
@@ -19,6 +19,7 @@ export type SidepanelProps = {
19
19
  showCloser?: boolean;
20
20
  noStickyFooter?: boolean;
21
21
  noStickyHeader?: boolean;
22
+ children?: React.ReactNode;
22
23
  } & Back;
23
24
  export declare const Sidepanel: React.FC<SidepanelProps>;
24
25
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../src/sidepanel/component.tsx"],"sourcesContent":["/* eslint-disable react/no-array-index-key */\nimport React from 'react';\nimport classNames from 'classnames';\n\nimport { FlexColumns } from '../flex-columns';\nimport { TFunction } from '../modal';\nimport { SidepanelHeader } from '../sidepanel-header';\nimport { Skeleton } from '../skeleton';\n\nimport styles from './index.module.css';\n\ntype Back = {\n back?: () => void;\n t: TFunction;\n} | {\n back?: never;\n t?: never;\n};\n\nexport type SidepanelProps = {\n title?: string;\n loading?: boolean;\n subtitle?: string;\n headerRightAddons?: React.ReactNode;\n headerBottomAddons?: React.ReactNode;\n bottomAddons?: React.ReactNode;\n dataTestId?: string;\n noCloser?: boolean;\n showCloser?: boolean;\n noStickyFooter?: boolean;\n noStickyHeader?: boolean;\n} & Back;\n\nexport const Sidepanel: React.FC<SidepanelProps> = ({\n dataTestId,\n title,\n loading,\n headerRightAddons,\n subtitle,\n noCloser,\n showCloser,\n headerBottomAddons,\n noStickyFooter,\n noStickyHeader,\n bottomAddons,\n children,\n ...props\n}) => (\n <React.Fragment>\n { loading ? (\n <FlexColumns className={ styles.loader } columns={ 1 } gr={ 20 }>\n { new Array(7).fill('').map((_, i) => (\n <Skeleton key={ i } animate={ true } visible={ true } className={ styles.input } />\n )) }\n </FlexColumns>\n ) : (\n <div>\n <SidepanelHeader\n title={ title }\n className={ noStickyHeader ? undefined : styles.header }\n subtitle={ subtitle }\n noCloser={ noCloser }\n showCloser={ showCloser }\n dataTestId={ dataTestId }\n rightAddons={ headerRightAddons }\n bottomAddons={ headerBottomAddons }\n { ...props }\n />\n\n <div className={ styles.content }>\n { children }\n </div>\n\n { bottomAddons && (\n <div className={ classNames(styles.footer, { [styles.noSticky]: noStickyFooter }) }>\n { bottomAddons }\n </div>\n ) }\n </div>\n ) }\n </React.Fragment>\n);\n"],"names":["Sidepanel","dataTestId","title","loading","headerRightAddons","subtitle","noCloser","showCloser","headerBottomAddons","noStickyFooter","noStickyHeader","bottomAddons","children","props","React","FlexColumns","styles","_","i","jsx","Skeleton","SidepanelHeader","classNames"],"mappings":";;;;;;;AAiCO,MAAMA,IAAsC,CAAC;AAAA,EAChD,YAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACP,wBACKC,EAAM,UAAN,EACK,UAAAX,sBACGY,GAAA,EAAY,WAAYC,EAAO,QAAS,SAAU,GAAI,IAAK,IACtD,UAAA,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,CAACC,GAAGC,MAC5B,gBAAAC,EAACC,GAAA,EAAmB,SAAU,IAAO,SAAU,IAAO,WAAYJ,EAAO,MAAA,GAAzDE,CAAiE,CACpF,EAAA,CACL,sBAEC,OAAA,EACG,UAAA;AAAA,EAAA,gBAAAC;AAAA,IAACE;AAAA,IAAA;AAAA,MACG,OAAAnB;AAAA,MACA,WAAYQ,IAAiB,SAAYM,EAAO;AAAA,MAChD,UAAAX;AAAA,MACA,UAAAC;AAAA,MACA,YAAAC;AAAA,MACA,YAAAN;AAAA,MACA,aAAcG;AAAA,MACd,cAAeI;AAAA,MACb,GAAGK;AAAA,IAAA;AAAA,EAAA;AAAA,EAGT,gBAAAM,EAAC,OAAA,EAAI,WAAYH,EAAO,SAClB,UAAAJ,GACN;AAAA,EAEED,KACE,gBAAAQ,EAAC,OAAA,EAAI,WAAYG,EAAWN,EAAO,QAAQ,EAAE,CAACA,EAAO,QAAQ,GAAGP,EAAA,CAAgB,GAC1E,UAAAE,EAAA,CACN;AAAA,EAAA,CAER,EAAA,CAER;"}
1
+ {"version":3,"file":"component.js","sources":["../../src/sidepanel/component.tsx"],"sourcesContent":["/* eslint-disable react/no-array-index-key */\nimport React from 'react';\nimport classNames from 'classnames';\n\nimport { FlexColumns } from '../flex-columns';\nimport { TFunction } from '../modal';\nimport { SidepanelHeader } from '../sidepanel-header';\nimport { Skeleton } from '../skeleton';\n\nimport styles from './index.module.css';\n\ntype Back = {\n back?: () => void;\n t: TFunction;\n} | {\n back?: never;\n t?: never;\n};\n\nexport type SidepanelProps = {\n title?: string;\n loading?: boolean;\n subtitle?: string;\n headerRightAddons?: React.ReactNode;\n headerBottomAddons?: React.ReactNode;\n bottomAddons?: React.ReactNode;\n dataTestId?: string;\n noCloser?: boolean;\n showCloser?: boolean;\n noStickyFooter?: boolean;\n noStickyHeader?: boolean;\n children?: React.ReactNode;\n} & Back;\n\nexport const Sidepanel: React.FC<SidepanelProps> = ({\n dataTestId,\n title,\n loading,\n headerRightAddons,\n subtitle,\n noCloser,\n showCloser,\n headerBottomAddons,\n noStickyFooter,\n noStickyHeader,\n bottomAddons,\n children,\n ...props\n}) => (\n <React.Fragment>\n { loading ? (\n <FlexColumns className={ styles.loader } columns={ 1 } gr={ 20 }>\n { new Array(7).fill('').map((_, i) => (\n <Skeleton key={ i } animate={ true } visible={ true } className={ styles.input } />\n )) }\n </FlexColumns>\n ) : (\n <div>\n <SidepanelHeader\n title={ title }\n className={ noStickyHeader ? undefined : styles.header }\n subtitle={ subtitle }\n noCloser={ noCloser }\n showCloser={ showCloser }\n dataTestId={ dataTestId }\n rightAddons={ headerRightAddons }\n bottomAddons={ headerBottomAddons }\n { ...props }\n />\n\n <div className={ styles.content }>\n { children }\n </div>\n\n { bottomAddons && (\n <div className={ classNames(styles.footer, { [styles.noSticky]: noStickyFooter }) }>\n { bottomAddons }\n </div>\n ) }\n </div>\n ) }\n </React.Fragment>\n);\n"],"names":["Sidepanel","dataTestId","title","loading","headerRightAddons","subtitle","noCloser","showCloser","headerBottomAddons","noStickyFooter","noStickyHeader","bottomAddons","children","props","React","FlexColumns","styles","_","i","jsx","Skeleton","SidepanelHeader","classNames"],"mappings":";;;;;;;AAkCO,MAAMA,IAAsC,CAAC;AAAA,EAChD,YAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACP,wBACKC,EAAM,UAAN,EACK,UAAAX,sBACGY,GAAA,EAAY,WAAYC,EAAO,QAAS,SAAU,GAAI,IAAK,IACtD,UAAA,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,CAACC,GAAGC,MAC5B,gBAAAC,EAACC,GAAA,EAAmB,SAAU,IAAO,SAAU,IAAO,WAAYJ,EAAO,MAAA,GAAzDE,CAAiE,CACpF,EAAA,CACL,sBAEC,OAAA,EACG,UAAA;AAAA,EAAA,gBAAAC;AAAA,IAACE;AAAA,IAAA;AAAA,MACG,OAAAnB;AAAA,MACA,WAAYQ,IAAiB,SAAYM,EAAO;AAAA,MAChD,UAAAX;AAAA,MACA,UAAAC;AAAA,MACA,YAAAC;AAAA,MACA,YAAAN;AAAA,MACA,aAAcG;AAAA,MACd,cAAeI;AAAA,MACb,GAAGK;AAAA,IAAA;AAAA,EAAA;AAAA,EAGT,gBAAAM,EAAC,OAAA,EAAI,WAAYH,EAAO,SAClB,UAAAJ,GACN;AAAA,EAEED,KACE,gBAAAQ,EAAC,OAAA,EAAI,WAAYG,EAAWN,EAAO,QAAQ,EAAE,CAACA,EAAO,QAAQ,GAAGP,EAAA,CAAgB,GAC1E,UAAAE,EAAA,CACN;AAAA,EAAA,CAER,EAAA,CAER;"}
@@ -11,5 +11,5 @@ export interface ItemProps {
11
11
  divider?: string | React.ReactNode;
12
12
  wrap?: boolean;
13
13
  }
14
- declare const Item: (props: ItemProps) => JSX.Element | null;
14
+ declare const Item: (props: ItemProps) => React.JSX.Element | null;
15
15
  export default Item;
@@ -1,4 +1,4 @@
1
- import { FC } from 'react';
1
+ import { default as React, FC } from 'react';
2
2
  export type StatusProps = {
3
3
  /**
4
4
  * Дополнительный класс
@@ -24,5 +24,6 @@ export type StatusProps = {
24
24
  * Идентификатор для систем автоматизированного тестирования
25
25
  */
26
26
  dataTestId?: string;
27
+ children?: React.ReactNode;
27
28
  };
28
29
  export declare const Status: FC<StatusProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../src/status/component.tsx"],"sourcesContent":["import React, { FC } from 'react';\nimport cn from 'classnames';\n\nimport styles from './index.module.css';\n\nexport type StatusProps = {\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * текст внутри заглавными буквамиы\n */\n upperCase?: boolean;\n\n /**\n * Вид компонента\n */\n view: 'contrast' | 'soft';\n /**\n * Вид компонента\n */\n size?: 's' | 'm';\n\n /**\n * Цветовое оформление иконки\n */\n color: 'green' | 'orange' | 'red' | 'blue' | 'grey' | 'teal' | 'purple';\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n};\n\nexport const Status: FC<StatusProps> = ({\n className,\n view,\n color,\n children,\n dataTestId,\n upperCase,\n size = 's',\n}) => (\n <span\n className={ cn(styles.component, styles[color], styles[size], styles[view], className, {\n [styles.upper_case]: upperCase,\n }) }\n data-test-id={ dataTestId }\n >\n { children }\n </span>\n);\n"],"names":["Status","className","view","color","children","dataTestId","upperCase","size","jsx","cn","styles"],"mappings":";;;AAoCO,MAAMA,IAA0B,CAAC;AAAA,EACpC,WAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,MAAAC,IAAO;AACX,MACI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACG,WAAYC,EAAGC,EAAO,WAAWA,EAAOP,CAAK,GAAGO,EAAOH,CAAI,GAAGG,EAAOR,CAAI,GAAGD,GAAW;AAAA,MACnF,CAACS,EAAO,UAAU,GAAGJ;AAAA,IAAA,CACxB;AAAA,IACD,gBAAeD;AAAA,IAEb,UAAAD;AAAA,EAAA;AACN;"}
1
+ {"version":3,"file":"component.js","sources":["../../src/status/component.tsx"],"sourcesContent":["import React, { FC } from 'react';\nimport cn from 'classnames';\n\nimport styles from './index.module.css';\n\nexport type StatusProps = {\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * текст внутри заглавными буквамиы\n */\n upperCase?: boolean;\n\n /**\n * Вид компонента\n */\n view: 'contrast' | 'soft';\n /**\n * Вид компонента\n */\n size?: 's' | 'm';\n\n /**\n * Цветовое оформление иконки\n */\n color: 'green' | 'orange' | 'red' | 'blue' | 'grey' | 'teal' | 'purple';\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n children?: React.ReactNode;\n};\n\nexport const Status: FC<StatusProps> = ({\n className,\n view,\n color,\n children,\n dataTestId,\n upperCase,\n size = 's',\n}) => (\n <span\n className={ cn(styles.component, styles[color], styles[size], styles[view], className, {\n [styles.upper_case]: upperCase,\n }) }\n data-test-id={ dataTestId }\n >\n { children }\n </span>\n);\n"],"names":["Status","className","view","color","children","dataTestId","upperCase","size","jsx","cn","styles"],"mappings":";;;AAsCO,MAAMA,IAA0B,CAAC;AAAA,EACpC,WAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,MAAAC,IAAO;AACX,MACI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACG,WAAYC,EAAGC,EAAO,WAAWA,EAAOP,CAAK,GAAGO,EAAOH,CAAI,GAAGG,EAAOR,CAAI,GAAGD,GAAW;AAAA,MACnF,CAACS,EAAO,UAAU,GAAGJ;AAAA,IAAA,CACxB;AAAA,IACD,gBAAeD;AAAA,IAEb,UAAAD;AAAA,EAAA;AACN;"}
@@ -41,7 +41,7 @@ export type SwitchProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | '
41
41
  */
42
42
  dataTestId?: string;
43
43
  };
44
- export declare const Switch: React.ForwardRefExoticComponent<Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange" | "type" | "hint"> & {
44
+ export declare const Switch: React.ForwardRefExoticComponent<Omit<React.InputHTMLAttributes<HTMLInputElement>, "hint" | "onChange" | "type"> & {
45
45
  /**
46
46
  * Управление состоянием вкл/выкл компонента
47
47
  */
@@ -1,3 +1,4 @@
1
+ import { default as React } from 'react';
1
2
  import { Query, QueryDTO, TableColumns } from '../../types';
2
3
  type Props<T extends object> = {
3
4
  columns: TableColumns<T>;
@@ -6,5 +7,5 @@ type Props<T extends object> = {
6
7
  addParam: ({ sort, order }: Pick<Query, 'order' | 'sort'>) => void;
7
8
  compact?: boolean;
8
9
  };
9
- export declare function Cells<T extends object>({ columns, sort, order, addParam, compact, }: Props<T>): JSX.Element;
10
+ export declare function Cells<T extends object>({ columns, sort, order, addParam, compact, }: Props<T>): React.JSX.Element;
10
11
  export {};
@@ -1,4 +1,4 @@
1
- /// <reference types="react" />
1
+ import { default as React } from 'react';
2
2
  export declare const EmptyList: ({ language }: {
3
3
  language: 'en' | 'de' | 'ru';
4
- }) => JSX.Element;
4
+ }) => React.JSX.Element;
@@ -1,4 +1,4 @@
1
- /// <reference types="react" />
1
+ import { default as React } from 'react';
2
2
  export declare const Error: ({ language }: {
3
3
  language: 'en' | 'de' | 'ru';
4
- }) => JSX.Element;
4
+ }) => React.JSX.Element;
@@ -2,5 +2,5 @@ import { default as React } from 'react';
2
2
  type Props = {
3
3
  columnsLength: number;
4
4
  };
5
- export declare const Loading: React.MemoExoticComponent<({ columnsLength }: Props) => JSX.Element>;
5
+ export declare const Loading: React.MemoExoticComponent<({ columnsLength }: Props) => React.JSX.Element>;
6
6
  export {};
@@ -1,7 +1,7 @@
1
1
  import { default as React } from 'react';
2
2
  import { Query } from '../../types';
3
3
  type Props = {
4
- tags: JSX.Element[];
4
+ tags: React.ReactElement[];
5
5
  searchPlaceholder: string;
6
6
  searchText?: string;
7
7
  addParam: (val: Query) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/table/components/table-header/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport ControllerS from '@alphakits/icons/dist/ControllerS';\nimport PlusS from '@alphakits/icons/dist/PlusS';\nimport { useDebounce } from 'rooks';\nimport cn from 'classnames';\n\nimport { Button } from '../../../button';\nimport { Flex } from '../../../flex';\nimport { HeaderSearch } from '../../../header-search';\nimport { translate } from '../../languages';\nimport { Query } from '../../types';\n\nimport styles from './index.module.css';\n\ntype Props = {\n tags: JSX.Element[];\n searchPlaceholder: string;\n searchText?: string;\n addParam: (val: Query) => void;\n onCreateClick?: () => void;\n onFiltersClick?: () => void;\n language: 'en' | 'de' | 'ru';\n showFiltersButton: boolean;\n filtersButtonLabel?: string;\n createButtonLabel?: string;\n rightHeaderAddons?: React.ReactNode;\n leftHeaderAddons?: React.ReactNode;\n hideSearch?: boolean;\n compact?: boolean;\n};\n\nexport const TableHeader: React.FC<Props> = ({\n tags,\n searchPlaceholder = 'Type something..',\n searchText,\n hideSearch,\n compact = false,\n rightHeaderAddons,\n leftHeaderAddons,\n addParam,\n onCreateClick,\n onFiltersClick,\n createButtonLabel,\n showFiltersButton,\n filtersButtonLabel,\n language,\n}) => {\n // локальное состояние поля ввода\n const [value, setValue] = useState<string>(searchText ?? '');\n const [debouncedValue, setDebouncedValue] = useState<string>(searchText ?? '');\n\n // если проп searchText меняется извне — синхронизируем локальные стейты\n useEffect(() => {\n const v = `${searchText ?? ''}`;\n\n lastSentRef.current = v.trim();\n setValue(v);\n setDebouncedValue(v);\n }, [searchText]);\n\n // дебаунсим только установку debouncedValue\n const setValueDebounced = useDebounce((v: string) => setDebouncedValue(v), 500);\n\n // не отправляем одинаковые значения повторно\n const lastSentRef = useRef<string>('');\n\n useEffect(() => {\n const next = `${debouncedValue || ''}`.trim();\n\n if (lastSentRef.current === next) return;\n\n addParam({ searchText: next, page: 1 });\n lastSentRef.current = next;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [debouncedValue]);\n\n const handleChangeValue = useCallback((v: string) => {\n setValue(v);\n setValueDebounced(v);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleClear = useCallback(() => {\n // достаточно обнулить значение — эффект сам отправит пустую строку\n handleChangeValue('');\n }, [handleChangeValue]);\n\n return (\n <div className={cn(styles.table_header, { [styles.compact]: compact })}>\n <div className={styles.actions}>\n <Flex justify='start' gap='md'>\n {!hideSearch && (\n <HeaderSearch\n value={value}\n onChange={handleChangeValue}\n onClear={handleClear}\n placeholder={searchPlaceholder}\n />\n )}\n\n {leftHeaderAddons && (\n <>{leftHeaderAddons}</>\n )}\n </Flex>\n\n <div className={styles.buttons}>\n {rightHeaderAddons}\n\n {!!onCreateClick && (\n <Button\n dataTestId='createbtn'\n onClick={onCreateClick}\n view='primary'\n leftAddons={<PlusS />}\n size='xs'\n >\n {createButtonLabel || translate(language)('create')}\n </Button>\n )}\n\n {showFiltersButton && (\n <Button\n leftAddons={<ControllerS />}\n onClick={onFiltersClick}\n view='outlined'\n size='xs'\n >\n {filtersButtonLabel}\n </Button>\n )}\n </div>\n </div>\n\n {!!tags.length && <div className={styles.tags}>{tags}</div>}\n </div>\n );\n};\n"],"names":["TableHeader","tags","searchPlaceholder","searchText","hideSearch","compact","rightHeaderAddons","leftHeaderAddons","addParam","onCreateClick","onFiltersClick","createButtonLabel","showFiltersButton","filtersButtonLabel","language","value","setValue","useState","debouncedValue","setDebouncedValue","useEffect","v","lastSentRef","setValueDebounced","useDebounce","useRef","next","handleChangeValue","useCallback","handleClear","jsxs","cn","styles","Flex","jsx","HeaderSearch","Button","PlusS","translate","ControllerS"],"mappings":";;;;;;;;;;;AAgCO,MAAMA,IAA+B,CAAC;AAAA,EACzC,MAAAC;AAAA,EACA,mBAAAC,IAAoB;AAAA,EACpB,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,mBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,UAAAC;AACJ,MAAM;AAEF,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAiBd,KAAA,OAAAA,IAAc,EAAE,GACrD,CAACe,GAAgBC,CAAiB,IAAIF,EAAiBd,KAAA,OAAAA,IAAc,EAAE;AAG7E,EAAAiB,EAAU,MAAM;AACZ,UAAMC,IAAI,GAAGlB,KAAA,OAAAA,IAAc,EAAE;AAE7B,IAAAmB,EAAY,UAAUD,EAAE,KAAA,GACxBL,EAASK,CAAC,GACVF,EAAkBE,CAAC;AAAA,EACvB,GAAG,CAAClB,CAAU,CAAC;AAGf,QAAMoB,IAAoBC,EAAY,CAACH,MAAcF,EAAkBE,CAAC,GAAG,GAAG,GAGxEC,IAAcG,EAAe,EAAE;AAErC,EAAAL,EAAU,MAAM;AACZ,UAAMM,IAAO,GAAGR,KAAkB,EAAE,GAAG,KAAA;AAEvC,IAAII,EAAY,YAAYI,MAE5BlB,EAAS,EAAE,YAAYkB,GAAM,MAAM,GAAG,GACtCJ,EAAY,UAAUI;AAAA,EAE1B,GAAG,CAACR,CAAc,CAAC;AAEnB,QAAMS,IAAoBC,EAAY,CAACP,MAAc;AACjD,IAAAL,EAASK,CAAC,GACVE,EAAkBF,CAAC;AAAA,EAEvB,GAAG,CAAA,CAAE,GAECQ,IAAcD,EAAY,MAAM;AAElC,IAAAD,EAAkB,EAAE;AAAA,EACxB,GAAG,CAACA,CAAiB,CAAC;AAEtB,SACI,gBAAAG,EAAC,OAAA,EAAI,WAAWC,EAAGC,EAAO,cAAc,EAAE,CAACA,EAAO,OAAO,GAAG3B,EAAA,CAAS,GACjE,UAAA;AAAA,IAAA,gBAAAyB,EAAC,OAAA,EAAI,WAAWE,EAAO,SACnB,UAAA;AAAA,MAAA,gBAAAF,EAACG,GAAA,EAAK,SAAQ,SAAQ,KAAI,MACrB,UAAA;AAAA,QAAA,CAAC7B,KACE,gBAAA8B;AAAA,UAACC;AAAA,UAAA;AAAA,YACG,OAAApB;AAAA,YACA,UAAUY;AAAA,YACV,SAASE;AAAA,YACT,aAAa3B;AAAA,UAAA;AAAA,QAAA;AAAA,QAIpBK,4BACM,UAAAA,EAAA,CAAiB;AAAA,MAAA,GAE5B;AAAA,MAEA,gBAAAuB,EAAC,OAAA,EAAI,WAAWE,EAAO,SAClB,UAAA;AAAA,QAAA1B;AAAA,QAEA,CAAC,CAACG,KACC,gBAAAyB;AAAA,UAACE;AAAA,UAAA;AAAA,YACG,YAAW;AAAA,YACX,SAAS3B;AAAA,YACT,MAAK;AAAA,YACL,8BAAa4B,GAAA,EAAM;AAAA,YACnB,MAAK;AAAA,YAEJ,UAAA1B,KAAqB2B,EAAUxB,CAAQ,EAAE,QAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAIzDF,KACG,gBAAAsB;AAAA,UAACE;AAAA,UAAA;AAAA,YACG,8BAAaG,GAAA,EAAY;AAAA,YACzB,SAAS7B;AAAA,YACT,MAAK;AAAA,YACL,MAAK;AAAA,YAEJ,UAAAG;AAAA,UAAA;AAAA,QAAA;AAAA,MACL,EAAA,CAER;AAAA,IAAA,GACJ;AAAA,IAEC,CAAC,CAACZ,EAAK,4BAAW,OAAA,EAAI,WAAW+B,EAAO,MAAO,UAAA/B,EAAA,CAAK;AAAA,EAAA,GACzD;AAER;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/table/components/table-header/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport ControllerS from '@alphakits/icons/dist/ControllerS';\nimport PlusS from '@alphakits/icons/dist/PlusS';\nimport { useDebounce } from 'rooks';\nimport cn from 'classnames';\n\nimport { Button } from '../../../button';\nimport { Flex } from '../../../flex';\nimport { HeaderSearch } from '../../../header-search';\nimport { translate } from '../../languages';\nimport { Query } from '../../types';\n\nimport styles from './index.module.css';\n\ntype Props = {\n tags: React.ReactElement[];\n searchPlaceholder: string;\n searchText?: string;\n addParam: (val: Query) => void;\n onCreateClick?: () => void;\n onFiltersClick?: () => void;\n language: 'en' | 'de' | 'ru';\n showFiltersButton: boolean;\n filtersButtonLabel?: string;\n createButtonLabel?: string;\n rightHeaderAddons?: React.ReactNode;\n leftHeaderAddons?: React.ReactNode;\n hideSearch?: boolean;\n compact?: boolean;\n};\n\nexport const TableHeader: React.FC<Props> = ({\n tags,\n searchPlaceholder = 'Type something..',\n searchText,\n hideSearch,\n compact = false,\n rightHeaderAddons,\n leftHeaderAddons,\n addParam,\n onCreateClick,\n onFiltersClick,\n createButtonLabel,\n showFiltersButton,\n filtersButtonLabel,\n language,\n}) => {\n // локальное состояние поля ввода\n const [value, setValue] = useState<string>(searchText ?? '');\n const [debouncedValue, setDebouncedValue] = useState<string>(searchText ?? '');\n\n // если проп searchText меняется извне — синхронизируем локальные стейты\n useEffect(() => {\n const v = `${searchText ?? ''}`;\n\n lastSentRef.current = v.trim();\n setValue(v);\n setDebouncedValue(v);\n }, [searchText]);\n\n // дебаунсим только установку debouncedValue\n const setValueDebounced = useDebounce((v: string) => setDebouncedValue(v), 500);\n\n // не отправляем одинаковые значения повторно\n const lastSentRef = useRef<string>('');\n\n useEffect(() => {\n const next = `${debouncedValue || ''}`.trim();\n\n if (lastSentRef.current === next) return;\n\n addParam({ searchText: next, page: 1 });\n lastSentRef.current = next;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [debouncedValue]);\n\n const handleChangeValue = useCallback((v: string) => {\n setValue(v);\n setValueDebounced(v);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleClear = useCallback(() => {\n // достаточно обнулить значение — эффект сам отправит пустую строку\n handleChangeValue('');\n }, [handleChangeValue]);\n\n return (\n <div className={cn(styles.table_header, { [styles.compact]: compact })}>\n <div className={styles.actions}>\n <Flex justify='start' gap='md'>\n {!hideSearch && (\n <HeaderSearch\n value={value}\n onChange={handleChangeValue}\n onClear={handleClear}\n placeholder={searchPlaceholder}\n />\n )}\n\n {leftHeaderAddons && (\n <>{leftHeaderAddons}</>\n )}\n </Flex>\n\n <div className={styles.buttons}>\n {rightHeaderAddons}\n\n {!!onCreateClick && (\n <Button\n dataTestId='createbtn'\n onClick={onCreateClick}\n view='primary'\n leftAddons={<PlusS />}\n size='xs'\n >\n {createButtonLabel || translate(language)('create')}\n </Button>\n )}\n\n {showFiltersButton && (\n <Button\n leftAddons={<ControllerS />}\n onClick={onFiltersClick}\n view='outlined'\n size='xs'\n >\n {filtersButtonLabel}\n </Button>\n )}\n </div>\n </div>\n\n {!!tags.length && <div className={styles.tags}>{tags}</div>}\n </div>\n );\n};\n"],"names":["TableHeader","tags","searchPlaceholder","searchText","hideSearch","compact","rightHeaderAddons","leftHeaderAddons","addParam","onCreateClick","onFiltersClick","createButtonLabel","showFiltersButton","filtersButtonLabel","language","value","setValue","useState","debouncedValue","setDebouncedValue","useEffect","v","lastSentRef","setValueDebounced","useDebounce","useRef","next","handleChangeValue","useCallback","handleClear","jsxs","cn","styles","Flex","jsx","HeaderSearch","Button","PlusS","translate","ControllerS"],"mappings":";;;;;;;;;;;AAgCO,MAAMA,IAA+B,CAAC;AAAA,EACzC,MAAAC;AAAA,EACA,mBAAAC,IAAoB;AAAA,EACpB,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,mBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,UAAAC;AACJ,MAAM;AAEF,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAiBd,KAAA,OAAAA,IAAc,EAAE,GACrD,CAACe,GAAgBC,CAAiB,IAAIF,EAAiBd,KAAA,OAAAA,IAAc,EAAE;AAG7E,EAAAiB,EAAU,MAAM;AACZ,UAAMC,IAAI,GAAGlB,KAAA,OAAAA,IAAc,EAAE;AAE7B,IAAAmB,EAAY,UAAUD,EAAE,KAAA,GACxBL,EAASK,CAAC,GACVF,EAAkBE,CAAC;AAAA,EACvB,GAAG,CAAClB,CAAU,CAAC;AAGf,QAAMoB,IAAoBC,EAAY,CAACH,MAAcF,EAAkBE,CAAC,GAAG,GAAG,GAGxEC,IAAcG,EAAe,EAAE;AAErC,EAAAL,EAAU,MAAM;AACZ,UAAMM,IAAO,GAAGR,KAAkB,EAAE,GAAG,KAAA;AAEvC,IAAII,EAAY,YAAYI,MAE5BlB,EAAS,EAAE,YAAYkB,GAAM,MAAM,GAAG,GACtCJ,EAAY,UAAUI;AAAA,EAE1B,GAAG,CAACR,CAAc,CAAC;AAEnB,QAAMS,IAAoBC,EAAY,CAACP,MAAc;AACjD,IAAAL,EAASK,CAAC,GACVE,EAAkBF,CAAC;AAAA,EAEvB,GAAG,CAAA,CAAE,GAECQ,IAAcD,EAAY,MAAM;AAElC,IAAAD,EAAkB,EAAE;AAAA,EACxB,GAAG,CAACA,CAAiB,CAAC;AAEtB,SACI,gBAAAG,EAAC,OAAA,EAAI,WAAWC,EAAGC,EAAO,cAAc,EAAE,CAACA,EAAO,OAAO,GAAG3B,EAAA,CAAS,GACjE,UAAA;AAAA,IAAA,gBAAAyB,EAAC,OAAA,EAAI,WAAWE,EAAO,SACnB,UAAA;AAAA,MAAA,gBAAAF,EAACG,GAAA,EAAK,SAAQ,SAAQ,KAAI,MACrB,UAAA;AAAA,QAAA,CAAC7B,KACE,gBAAA8B;AAAA,UAACC;AAAA,UAAA;AAAA,YACG,OAAApB;AAAA,YACA,UAAUY;AAAA,YACV,SAASE;AAAA,YACT,aAAa3B;AAAA,UAAA;AAAA,QAAA;AAAA,QAIpBK,4BACM,UAAAA,EAAA,CAAiB;AAAA,MAAA,GAE5B;AAAA,MAEA,gBAAAuB,EAAC,OAAA,EAAI,WAAWE,EAAO,SAClB,UAAA;AAAA,QAAA1B;AAAA,QAEA,CAAC,CAACG,KACC,gBAAAyB;AAAA,UAACE;AAAA,UAAA;AAAA,YACG,YAAW;AAAA,YACX,SAAS3B;AAAA,YACT,MAAK;AAAA,YACL,8BAAa4B,GAAA,EAAM;AAAA,YACnB,MAAK;AAAA,YAEJ,UAAA1B,KAAqB2B,EAAUxB,CAAQ,EAAE,QAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAIzDF,KACG,gBAAAsB;AAAA,UAACE;AAAA,UAAA;AAAA,YACG,8BAAaG,GAAA,EAAY;AAAA,YACzB,SAAS7B;AAAA,YACT,MAAK;AAAA,YACL,MAAK;AAAA,YAEJ,UAAAG;AAAA,UAAA;AAAA,QAAA;AAAA,MACL,EAAA,CAER;AAAA,IAAA,GACJ;AAAA,IAEC,CAAC,CAACZ,EAAK,4BAAW,OAAA,EAAI,WAAW+B,EAAO,MAAO,UAAA/B,EAAA,CAAK;AAAA,EAAA,GACzD;AAER;"}
@@ -28,7 +28,7 @@ export type TableProps<T extends object> = Records<T> & {
28
28
  hideSearch?: boolean;
29
29
  loading?: boolean;
30
30
  height?: 'fill' | 'default';
31
- tagsBuilder?: (props: FiltersMapper) => JSX.Element | null;
31
+ tagsBuilder?: (props: FiltersMapper) => React.ReactElement | null;
32
32
  onCreateClick?: (refech: () => void) => void;
33
33
  refetch?: () => void;
34
34
  onRowClick?: (params: T, refech: () => void) => void;
@@ -36,5 +36,5 @@ export type TableProps<T extends object> = Records<T> & {
36
36
  /** true — параметры из URL; false — только локальное состояние. */
37
37
  fromPath?: boolean;
38
38
  } & FiltersButton;
39
- export declare function Table<T extends object>({ columns, searchPlaceholder, records, hideSearch, rightHeaderAddons, leftHeaderAddons, filtersButtonLabel, createButtonLabel, loading, height, view, tagsBuilder, promise, onRowClick, onCreateClick, onFiltersClick, refetch, language, fromPath, }: TableProps<T>): JSX.Element;
39
+ export declare function Table<T extends object>({ columns, searchPlaceholder, records, hideSearch, rightHeaderAddons, leftHeaderAddons, filtersButtonLabel, createButtonLabel, loading, height, view, tagsBuilder, promise, onRowClick, onCreateClick, onFiltersClick, refetch, language, fromPath, }: TableProps<T>): React.JSX.Element;
40
40
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sources":["../../src/table/table.tsx"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable react/no-array-index-key */\n/* eslint-disable @typescript-eslint/ban-types */\nimport React, {\n useCallback, useMemo,\n} from 'react';\nimport cn from 'classnames';\n\nimport { ApiMethodDeclaration, MakeServiceFromServiceDeclaration } from '../typings/api';\n\nimport { Cells } from './components/cells';\nimport { EmptyList } from './components/empty-list';\nimport { Error } from './components/error';\nimport { Loading } from './components/loading';\nimport { Pagination } from './components/pagination';\nimport { TableHeader } from './components/table-header';\nimport { useTableData } from './hooks/use-table-data';\nimport { getTags } from './utils/get-tags';\nimport { prepareRows } from './utils/prepare-rows';\nimport {\n FiltersMapper, OnFiltersClickProps, Query, TableColumns,\n} from './types';\n\nimport styles from './index.module.css';\n\ntype Records<T> =\n | {\n records: T[];\n promise?: never;\n }\n | {\n records?: never;\n promise: MakeServiceFromServiceDeclaration<\n ApiMethodDeclaration<any, { items: T[]; meta: any }>\n >;\n };\n\ntype FiltersButton =\n | {\n onFiltersClick: (props: OnFiltersClickProps) => void;\n filtersButtonLabel: string;\n }\n | {\n onFiltersClick?: never;\n filtersButtonLabel?: never;\n };\n\nexport type TableProps<T extends object> = Records<T> & {\n columns: TableColumns<T>;\n view?: 'default' | 'compact';\n searchPlaceholder?: string;\n rightHeaderAddons?: React.ReactNode;\n leftHeaderAddons?: React.ReactNode;\n createButtonLabel?: string;\n hideSearch?: boolean;\n loading?: boolean;\n height?: 'fill' | 'default';\n tagsBuilder?: (props: FiltersMapper) => JSX.Element | null;\n onCreateClick?: (refech: () => void) => void;\n refetch?: () => void;\n onRowClick?: (params: T, refech: () => void) => void;\n language: 'de' | 'ru' | 'en';\n\n /** true — параметры из URL; false — только локальное состояние. */\n fromPath?: boolean;\n} & FiltersButton;\n\nexport function Table<T extends object>({\n columns,\n searchPlaceholder = 'Поиск по таблице',\n records,\n hideSearch,\n rightHeaderAddons,\n leftHeaderAddons,\n filtersButtonLabel,\n createButtonLabel,\n loading,\n height = 'fill',\n view = 'default',\n tagsBuilder,\n promise,\n onRowClick,\n onCreateClick,\n onFiltersClick,\n refetch,\n language,\n fromPath = true,\n}: TableProps<T>) {\n const {\n loading: dataLoading,\n error,\n data,\n total,\n params,\n pagesCount,\n updateData,\n\n addParam,\n removeParam,\n resetParams,\n } = useTableData({\n promise,\n records,\n fromPath,\n });\n\n const dataSorted = useMemo(\n () => [...(data || [])].sort(\n (a: any, b: any) => (a.sortPosition || 0) - (b.sortPosition || 0),\n ),\n [data],\n );\n\n const handleRowClick = (p: T) => onRowClick?.(p, updateData);\n const handleCreateClick = onCreateClick ? () => onCreateClick(updateData) : undefined;\n\n const resetParamsHandler = useCallback(\n (param: Query) => {\n resetParams(param);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },\n [resetParams],\n );\n\n const handleFiltesClick = () =>\n (onFiltersClick\n ? onFiltersClick({\n submitCallback: (values) => resetParamsHandler(values),\n initialValues: params,\n })\n : null);\n\n const addParamHandler = (param: Query) => {\n addParam(param);\n };\n\n const removeParamHandler = (paramName: string, id?: string) => {\n removeParam(paramName, id);\n };\n\n const tags = getTags({\n params: params?.where || {},\n onDelete: removeParamHandler,\n tagsBuilder,\n onClick: handleFiltesClick,\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const rows = useMemo(\n () => prepareRows({\n columns,\n view,\n data: dataSorted,\n refetch: refetch || updateData,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataSorted, columns, view],\n );\n\n const showLoader = dataLoading || loading;\n\n const hasFooter = !!promise;\n\n return (\n <div className={ cn(styles.table_wrapper, styles[height], styles[view]) }>\n { (!hideSearch ||\n rightHeaderAddons ||\n leftHeaderAddons ||\n onCreateClick ||\n onFiltersClick) && (\n <TableHeader\n language={ language }\n hideSearch={ hideSearch }\n rightHeaderAddons={ rightHeaderAddons }\n leftHeaderAddons={ leftHeaderAddons }\n searchText={ params?.searchText || '' }\n addParam={ addParamHandler }\n searchPlaceholder={ searchPlaceholder }\n filtersButtonLabel={ filtersButtonLabel }\n tags={ tags }\n onCreateClick={ handleCreateClick }\n createButtonLabel={ createButtonLabel }\n onFiltersClick={ handleFiltesClick }\n showFiltersButton={ !!onFiltersClick }\n compact={ view === 'compact' }\n />\n ) }\n\n <div className={ cn(styles.table, { [styles.no_footer]: !hasFooter }) }>\n <table cellSpacing=\"0\" cellPadding=\"0\">\n <Cells\n sort={ params?.sort }\n order={ params?.order }\n addParam={ addParamHandler }\n columns={ columns }\n compact={ view === 'compact' }\n />\n\n <tbody>\n { error && <Error language={ language } /> }\n\n { !rows.length && !showLoader && !error && (\n <EmptyList language={ language } />\n ) }\n\n { showLoader && <Loading columnsLength={ columns.length } /> }\n\n { rows.map(({ row, cells }) => (\n <tr\n key={ String((row as any).id) }\n onClick={ () => handleRowClick(row as T) }\n className={ cn({ [styles.clickable]: !!onRowClick }) }\n style={ { visibility: showLoader ? 'collapse' : 'visible' } }\n >\n { cells.map((cell, i) =>\n React.cloneElement(cell as any, { key: i })) }\n </tr>\n )) }\n </tbody>\n </table>\n </div>\n\n { hasFooter && (\n <Pagination\n language={ language }\n currentPage={ params ? +params.page : 1 }\n recordsPerPage={ params ? +params.limit : 10 }\n pagesCount={ +pagesCount }\n addParam={ addParamHandler }\n total={ +total }\n />\n ) }\n </div>\n );\n}\n"],"names":["Table","columns","searchPlaceholder","records","hideSearch","rightHeaderAddons","leftHeaderAddons","filtersButtonLabel","createButtonLabel","loading","height","view","tagsBuilder","promise","onRowClick","onCreateClick","onFiltersClick","refetch","language","fromPath","dataLoading","error","data","total","params","pagesCount","updateData","addParam","removeParam","resetParams","useTableData","dataSorted","useMemo","a","b","handleRowClick","p","handleCreateClick","resetParamsHandler","useCallback","param","handleFiltesClick","values","addParamHandler","removeParamHandler","paramName","id","tags","getTags","rows","prepareRows","showLoader","hasFooter","jsxs","cn","styles","jsx","TableHeader","Cells","Error","EmptyList","Loading","row","cells","cell","i","React","Pagination"],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sources":["../../src/table/table.tsx"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable react/no-array-index-key */\n/* eslint-disable @typescript-eslint/ban-types */\nimport React, {\n useCallback, useMemo,\n} from 'react';\nimport cn from 'classnames';\n\nimport { ApiMethodDeclaration, MakeServiceFromServiceDeclaration } from '../typings/api';\n\nimport { Cells } from './components/cells';\nimport { EmptyList } from './components/empty-list';\nimport { Error } from './components/error';\nimport { Loading } from './components/loading';\nimport { Pagination } from './components/pagination';\nimport { TableHeader } from './components/table-header';\nimport { useTableData } from './hooks/use-table-data';\nimport { getTags } from './utils/get-tags';\nimport { prepareRows } from './utils/prepare-rows';\nimport {\n FiltersMapper, OnFiltersClickProps, Query, TableColumns,\n} from './types';\n\nimport styles from './index.module.css';\n\ntype Records<T> =\n | {\n records: T[];\n promise?: never;\n }\n | {\n records?: never;\n promise: MakeServiceFromServiceDeclaration<\n ApiMethodDeclaration<any, { items: T[]; meta: any }>\n >;\n };\n\ntype FiltersButton =\n | {\n onFiltersClick: (props: OnFiltersClickProps) => void;\n filtersButtonLabel: string;\n }\n | {\n onFiltersClick?: never;\n filtersButtonLabel?: never;\n };\n\nexport type TableProps<T extends object> = Records<T> & {\n columns: TableColumns<T>;\n view?: 'default' | 'compact';\n searchPlaceholder?: string;\n rightHeaderAddons?: React.ReactNode;\n leftHeaderAddons?: React.ReactNode;\n createButtonLabel?: string;\n hideSearch?: boolean;\n loading?: boolean;\n height?: 'fill' | 'default';\n tagsBuilder?: (props: FiltersMapper) => React.ReactElement | null;\n onCreateClick?: (refech: () => void) => void;\n refetch?: () => void;\n onRowClick?: (params: T, refech: () => void) => void;\n language: 'de' | 'ru' | 'en';\n\n /** true — параметры из URL; false — только локальное состояние. */\n fromPath?: boolean;\n} & FiltersButton;\n\nexport function Table<T extends object>({\n columns,\n searchPlaceholder = 'Поиск по таблице',\n records,\n hideSearch,\n rightHeaderAddons,\n leftHeaderAddons,\n filtersButtonLabel,\n createButtonLabel,\n loading,\n height = 'fill',\n view = 'default',\n tagsBuilder,\n promise,\n onRowClick,\n onCreateClick,\n onFiltersClick,\n refetch,\n language,\n fromPath = true,\n}: TableProps<T>) {\n const {\n loading: dataLoading,\n error,\n data,\n total,\n params,\n pagesCount,\n updateData,\n\n addParam,\n removeParam,\n resetParams,\n } = useTableData({\n promise,\n records,\n fromPath,\n });\n\n const dataSorted = useMemo(\n () => [...(data || [])].sort(\n (a: any, b: any) => (a.sortPosition || 0) - (b.sortPosition || 0),\n ),\n [data],\n );\n\n const handleRowClick = (p: T) => onRowClick?.(p, updateData);\n const handleCreateClick = onCreateClick ? () => onCreateClick(updateData) : undefined;\n\n const resetParamsHandler = useCallback(\n (param: Query) => {\n resetParams(param);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },\n [resetParams],\n );\n\n const handleFiltesClick = () =>\n (onFiltersClick\n ? onFiltersClick({\n submitCallback: (values) => resetParamsHandler(values),\n initialValues: params,\n })\n : null);\n\n const addParamHandler = (param: Query) => {\n addParam(param);\n };\n\n const removeParamHandler = (paramName: string, id?: string) => {\n removeParam(paramName, id);\n };\n\n const tags = getTags({\n params: params?.where || {},\n onDelete: removeParamHandler,\n tagsBuilder,\n onClick: handleFiltesClick,\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const rows = useMemo(\n () => prepareRows({\n columns,\n view,\n data: dataSorted,\n refetch: refetch || updateData,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataSorted, columns, view],\n );\n\n const showLoader = dataLoading || loading;\n\n const hasFooter = !!promise;\n\n return (\n <div className={ cn(styles.table_wrapper, styles[height], styles[view]) }>\n { (!hideSearch ||\n rightHeaderAddons ||\n leftHeaderAddons ||\n onCreateClick ||\n onFiltersClick) && (\n <TableHeader\n language={ language }\n hideSearch={ hideSearch }\n rightHeaderAddons={ rightHeaderAddons }\n leftHeaderAddons={ leftHeaderAddons }\n searchText={ params?.searchText || '' }\n addParam={ addParamHandler }\n searchPlaceholder={ searchPlaceholder }\n filtersButtonLabel={ filtersButtonLabel }\n tags={ tags }\n onCreateClick={ handleCreateClick }\n createButtonLabel={ createButtonLabel }\n onFiltersClick={ handleFiltesClick }\n showFiltersButton={ !!onFiltersClick }\n compact={ view === 'compact' }\n />\n ) }\n\n <div className={ cn(styles.table, { [styles.no_footer]: !hasFooter }) }>\n <table cellSpacing=\"0\" cellPadding=\"0\">\n <Cells\n sort={ params?.sort }\n order={ params?.order }\n addParam={ addParamHandler }\n columns={ columns }\n compact={ view === 'compact' }\n />\n\n <tbody>\n { error && <Error language={ language } /> }\n\n { !rows.length && !showLoader && !error && (\n <EmptyList language={ language } />\n ) }\n\n { showLoader && <Loading columnsLength={ columns.length } /> }\n\n { rows.map(({ row, cells }) => (\n <tr\n key={ String((row as any).id) }\n onClick={ () => handleRowClick(row as T) }\n className={ cn({ [styles.clickable]: !!onRowClick }) }\n style={ { visibility: showLoader ? 'collapse' : 'visible' } }\n >\n { cells.map((cell, i) =>\n React.cloneElement(cell as any, { key: i })) }\n </tr>\n )) }\n </tbody>\n </table>\n </div>\n\n { hasFooter && (\n <Pagination\n language={ language }\n currentPage={ params ? +params.page : 1 }\n recordsPerPage={ params ? +params.limit : 10 }\n pagesCount={ +pagesCount }\n addParam={ addParamHandler }\n total={ +total }\n />\n ) }\n </div>\n );\n}\n"],"names":["Table","columns","searchPlaceholder","records","hideSearch","rightHeaderAddons","leftHeaderAddons","filtersButtonLabel","createButtonLabel","loading","height","view","tagsBuilder","promise","onRowClick","onCreateClick","onFiltersClick","refetch","language","fromPath","dataLoading","error","data","total","params","pagesCount","updateData","addParam","removeParam","resetParams","useTableData","dataSorted","useMemo","a","b","handleRowClick","p","handleCreateClick","resetParamsHandler","useCallback","param","handleFiltesClick","values","addParamHandler","removeParamHandler","paramName","id","tags","getTags","rows","prepareRows","showLoader","hasFooter","jsxs","cn","styles","jsx","TableHeader","Cells","Error","EmptyList","Loading","row","cells","cell","i","React","Pagination"],"mappings":"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"}
@@ -1,9 +1,10 @@
1
+ import { ReactElement } from 'react';
1
2
  import { FiltersMapper, Query } from '../types';
2
3
  type Props = {
3
4
  params?: Query;
4
5
  onDelete: (param: string) => void;
5
- tagsBuilder?: (props: FiltersMapper) => JSX.Element | null;
6
+ tagsBuilder?: (props: FiltersMapper) => ReactElement | null;
6
7
  onClick: () => void;
7
8
  };
8
- export declare function getTags({ params, onClick, onDelete, tagsBuilder, }: Props): JSX.Element[];
9
+ export declare function getTags({ params, onClick, onDelete, tagsBuilder, }: Props): ReactElement<unknown, string | import('react').JSXElementConstructor<any>>[];
9
10
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"get-tags.js","sources":["../../../src/table/utils/get-tags.ts"],"sourcesContent":["import { FiltersMapper, Query } from '../types';\n\ntype Props = {\n params?: Query;\n onDelete: (param: string) => void;\n tagsBuilder?: (props: FiltersMapper) => JSX.Element | null;\n onClick: () => void;\n};\n\nexport function getTags({\n params,\n onClick,\n onDelete,\n tagsBuilder,\n}: Props) {\n if (!tagsBuilder) return [];\n\n const tags = params ? Object.entries(params).map(([paramName, paramValue]) => tagsBuilder({\n paramName, paramValue, onDelete, onClick,\n })) : [];\n\n return tags.filter((tag) => tag !== null) as JSX.Element[];\n}\n"],"names":["getTags","params","onClick","onDelete","tagsBuilder","paramName","paramValue","tag"],"mappings":"AASO,SAASA,EAAQ;AAAA,EACpB,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AACJ,GAAU;AACN,SAAKA,KAEQH,IAAS,OAAO,QAAQA,CAAM,EAAE,IAAI,CAAC,CAACI,GAAWC,CAAU,MAAMF,EAAY;AAAA,IACtF,WAAAC;AAAA,IAAW,YAAAC;AAAA,IAAY,UAAAH;AAAA,IAAU,SAAAD;AAAA,EAAA,CACpC,CAAC,IAAI,CAAA,GAEM,OAAO,CAACK,MAAQA,MAAQ,IAAI,IANf,CAAA;AAO7B;"}
1
+ {"version":3,"file":"get-tags.js","sources":["../../../src/table/utils/get-tags.ts"],"sourcesContent":["import { ReactElement } from 'react';\n\nimport { FiltersMapper, Query } from '../types';\n\ntype Props = {\n params?: Query;\n onDelete: (param: string) => void;\n tagsBuilder?: (props: FiltersMapper) => ReactElement | null;\n onClick: () => void;\n};\n\nexport function getTags({\n params,\n onClick,\n onDelete,\n tagsBuilder,\n}: Props) {\n if (!tagsBuilder) return [];\n\n const tags = params ? Object.entries(params).map(([paramName, paramValue]) => tagsBuilder({\n paramName, paramValue, onDelete, onClick,\n })) : [];\n\n return tags.filter((tag) => tag !== null) as ReactElement[];\n}\n"],"names":["getTags","params","onClick","onDelete","tagsBuilder","paramName","paramValue","tag"],"mappings":"AAWO,SAASA,EAAQ;AAAA,EACpB,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AACJ,GAAU;AACN,SAAKA,KAEQH,IAAS,OAAO,QAAQA,CAAM,EAAE,IAAI,CAAC,CAACI,GAAWC,CAAU,MAAMF,EAAY;AAAA,IACtF,WAAAC;AAAA,IAAW,YAAAC;AAAA,IAAY,UAAAH;AAAA,IAAU,SAAAD;AAAA,EAAA,CACpC,CAAC,IAAI,CAAA,GAEM,OAAO,CAACK,MAAQA,MAAQ,IAAI,IANf,CAAA;AAO7B;"}
@@ -1,3 +1,4 @@
1
+ import { default as React } from 'react';
1
2
  import { TableProps } from '../table';
2
3
  type Props<T extends object> = {
3
4
  columns: TableProps<T>['columns'];
@@ -7,6 +8,6 @@ type Props<T extends object> = {
7
8
  };
8
9
  export declare function prepareRows<T extends object>({ columns, view, data, refetch, }: Props<T>): {
9
10
  row: T;
10
- cells: JSX.Element[];
11
+ cells: React.JSX.Element[];
11
12
  }[];
12
13
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-rows.js","sources":["../../../src/table/utils/prepare-rows.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport React, { ReactNode } from 'react';\nimport PhotoM from '@alphakits/icons/dist/PhotoM';\n\nimport { Image } from '../../image';\nimport { TableCell } from '../components/cell';\nimport { TableProps } from '../table';\n\ntype Props<T extends object> = {\n columns: TableProps<T>['columns'];\n view: TableProps<T>['view'];\n data: T[];\n refetch: () => void;\n};\n\nfunction getCellNode<T extends object>(row: unknown, record: T, refetch: () => void) {\n if (!row) return null;\n\n if (typeof row === 'string') return record[row as keyof T];\n\n if (typeof row === 'function') return row({ row: record, refetch });\n\n return null;\n}\n\nfunction getCellValue<T extends object>(\n row: unknown,\n record: T,\n refetch: () => void,\n): string | ReactNode {\n if (!row) return null;\n\n if (typeof row === 'string') return record[row as keyof T];\n\n if (typeof row === 'function') return row({ row: record, refetch });\n\n return null;\n}\n\nexport function prepareRows<T extends object>({\n columns,\n view = 'default',\n data,\n refetch,\n}: Props<T>) {\n const isCompact = view === 'compact';\n const rows = data.map((row) => ({\n row,\n cells: columns.map((col) => {\n const title = getCellValue(col.row?.title || col.accessor, row, refetch);\n\n let addon;\n\n if (col.row?.image) {\n const imageSrc = getCellNode(col.row?.image, row, refetch);\n\n addon = imageSrc ? (\n <Image\n bgColor=\"secondary\"\n src={ imageSrc }\n text={ title?.toString() }\n view=\"ellipse\"\n size={ isCompact ? 'xs' : 'm' }\n />\n ) : (\n <Image\n bgColor=\"secondary\"\n icon={ <PhotoM /> }\n text={ title?.toString() }\n view=\"ellipse\"\n size={ isCompact ? 'xs' : 'm' }\n />\n );\n } else if (col.row?.icon) {\n const iconNode = getCellNode(col.row?.icon, row, refetch);\n\n addon = (\n <Image\n icon={ iconNode || <PhotoM /> }\n text={ title?.toString() }\n view=\"ellipse\"\n size={ isCompact ? 'xs' : 'm' }\n />\n );\n } else if (col.row?.customAddon) {\n addon = getCellNode(col.row?.customAddon, row, refetch);\n }\n\n return (\n <TableCell\n title={ title }\n align={ col.align }\n compact={ isCompact }\n subtitle={\n isCompact\n ? undefined\n : (col.row?.subtitle && getCellValue(col.row?.subtitle, row, refetch))\n }\n addon={ addon }\n />\n );\n }),\n }));\n\n return rows;\n}\n"],"names":["getCellNode","row","record","refetch","getCellValue","prepareRows","columns","view","data","isCompact","col","title","_a","addon","_b","imageSrc","_c","jsx","Image","PhotoM","_d","iconNode","_e","_f","_g","TableCell","_h","_i"],"mappings":";;;;AAeA,SAASA,EAA8BC,GAAcC,GAAWC,GAAqB;AACjF,SAAKF,IAED,OAAOA,KAAQ,WAAiBC,EAAOD,CAAc,IAErD,OAAOA,KAAQ,aAAmBA,EAAI,EAAE,KAAKC,GAAQ,SAAAC,GAAS,IAE3D,OANU;AAOrB;AAEA,SAASC,EACLH,GACAC,GACAC,GACkB;AAClB,SAAKF,IAED,OAAOA,KAAQ,WAAiBC,EAAOD,CAAc,IAErD,OAAOA,KAAQ,aAAmBA,EAAI,EAAE,KAAKC,GAAQ,SAAAC,GAAS,IAE3D,OANU;AAOrB;AAEO,SAASE,EAA8B;AAAA,EAC1C,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,MAAAC;AAAA,EACA,SAAAL;AACJ,GAAa;AACT,QAAMM,IAAYF,MAAS;AA2D3B,SA1DaC,EAAK,IAAI,CAACP,OAAS;AAAA,IAC5B,KAAAA;AAAA,IACA,OAAOK,EAAQ,IAAI,CAACI,MAAQ;;AACxB,YAAMC,IAAQP,IAAaQ,IAAAF,EAAI,QAAJ,gBAAAE,EAAS,UAASF,EAAI,UAAUT,GAAKE,CAAO;AAEvE,UAAIU;AAEJ,WAAIC,IAAAJ,EAAI,QAAJ,QAAAI,EAAS,OAAO;AAChB,cAAMC,IAAWf,GAAYgB,IAAAN,EAAI,QAAJ,gBAAAM,EAAS,OAAOf,GAAKE,CAAO;AAEzD,QAAAU,IAAQE,IACJ,gBAAAE;AAAA,UAACC;AAAA,UAAA;AAAA,YACG,SAAQ;AAAA,YACR,KAAMH;AAAA,YACN,MAAOJ,KAAA,gBAAAA,EAAO;AAAA,YACd,MAAK;AAAA,YACL,MAAOF,IAAY,OAAO;AAAA,UAAA;AAAA,QAAA,IAG9B,gBAAAQ;AAAA,UAACC;AAAA,UAAA;AAAA,YACG,SAAQ;AAAA,YACR,wBAAQC,GAAA,EAAO;AAAA,YACf,MAAOR,KAAA,gBAAAA,EAAO;AAAA,YACd,MAAK;AAAA,YACL,MAAOF,IAAY,OAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAGtC,YAAWW,IAAAV,EAAI,QAAJ,QAAAU,EAAS,MAAM;AACtB,cAAMC,IAAWrB,GAAYsB,IAAAZ,EAAI,QAAJ,gBAAAY,EAAS,MAAMrB,GAAKE,CAAO;AAExD,QAAAU,IACI,gBAAAI;AAAA,UAACC;AAAA,UAAA;AAAA,YACG,MAAOG,KAAY,gBAAAJ,EAACE,GAAA,CAAA,CAAO;AAAA,YAC3B,MAAOR,KAAA,gBAAAA,EAAO;AAAA,YACd,MAAK;AAAA,YACL,MAAOF,IAAY,OAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAGtC,MAAA,EAAWc,IAAAb,EAAI,QAAJ,QAAAa,EAAS,gBAChBV,IAAQb,GAAYwB,IAAAd,EAAI,QAAJ,gBAAAc,EAAS,aAAavB,GAAKE,CAAO;AAG1D,aACI,gBAAAc;AAAA,QAACQ;AAAA,QAAA;AAAA,UACG,OAAAd;AAAA,UACA,OAAQD,EAAI;AAAA,UACZ,SAAUD;AAAA,UACV,UACIA,IACM,WACCiB,IAAAhB,EAAI,QAAJ,gBAAAgB,EAAS,aAAYtB,GAAauB,IAAAjB,EAAI,QAAJ,gBAAAiB,EAAS,UAAU1B,GAAKE,CAAO;AAAA,UAE5E,OAAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAGZ,CAAC;AAAA,EAAA,EACH;AAGN;"}
1
+ {"version":3,"file":"prepare-rows.js","sources":["../../../src/table/utils/prepare-rows.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport React, { ReactNode } from 'react';\nimport PhotoM from '@alphakits/icons/dist/PhotoM';\n\nimport { Image } from '../../image';\nimport { TableCell } from '../components/cell';\nimport { TableProps } from '../table';\n\ntype Props<T extends object> = {\n columns: TableProps<T>['columns'];\n view: TableProps<T>['view'];\n data: T[];\n refetch: () => void;\n};\n\nfunction getCellNode<T extends object>(row: unknown, record: T, refetch: () => void) {\n if (!row) return null;\n\n if (typeof row === 'string') return record[row as keyof T];\n\n if (typeof row === 'function') return row({ row: record, refetch });\n\n return null;\n}\n\nfunction getCellValue<T extends object>(\n row: unknown,\n record: T,\n refetch: () => void,\n): string | ReactNode {\n if (!row) return null;\n\n if (typeof row === 'string') return record[row as keyof T] as ReactNode;\n\n if (typeof row === 'function') return row({ row: record, refetch });\n\n return null;\n}\n\nexport function prepareRows<T extends object>({\n columns,\n view = 'default',\n data,\n refetch,\n}: Props<T>) {\n const isCompact = view === 'compact';\n const rows = data.map((row) => ({\n row,\n cells: columns.map((col) => {\n const title = getCellValue(col.row?.title || col.accessor, row, refetch);\n\n let addon;\n\n if (col.row?.image) {\n const imageSrc = getCellNode(col.row?.image, row, refetch);\n\n addon = imageSrc ? (\n <Image\n bgColor=\"secondary\"\n src={ imageSrc }\n text={ title?.toString() }\n view=\"ellipse\"\n size={ isCompact ? 'xs' : 'm' }\n />\n ) : (\n <Image\n bgColor=\"secondary\"\n icon={ <PhotoM /> }\n text={ title?.toString() }\n view=\"ellipse\"\n size={ isCompact ? 'xs' : 'm' }\n />\n );\n } else if (col.row?.icon) {\n const iconNode = getCellNode(col.row?.icon, row, refetch);\n\n addon = (\n <Image\n icon={ iconNode || <PhotoM /> }\n text={ title?.toString() }\n view=\"ellipse\"\n size={ isCompact ? 'xs' : 'm' }\n />\n );\n } else if (col.row?.customAddon) {\n addon = getCellNode(col.row?.customAddon, row, refetch);\n }\n\n return (\n <TableCell\n title={ title }\n align={ col.align }\n compact={ isCompact }\n subtitle={\n isCompact\n ? undefined\n : (col.row?.subtitle && getCellValue(col.row?.subtitle, row, refetch))\n }\n addon={ addon }\n />\n );\n }),\n }));\n\n return rows;\n}\n"],"names":["getCellNode","row","record","refetch","getCellValue","prepareRows","columns","view","data","isCompact","col","title","_a","addon","_b","imageSrc","_c","jsx","Image","PhotoM","_d","iconNode","_e","_f","_g","TableCell","_h","_i"],"mappings":";;;;AAeA,SAASA,EAA8BC,GAAcC,GAAWC,GAAqB;AACjF,SAAKF,IAED,OAAOA,KAAQ,WAAiBC,EAAOD,CAAc,IAErD,OAAOA,KAAQ,aAAmBA,EAAI,EAAE,KAAKC,GAAQ,SAAAC,GAAS,IAE3D,OANU;AAOrB;AAEA,SAASC,EACLH,GACAC,GACAC,GACkB;AAClB,SAAKF,IAED,OAAOA,KAAQ,WAAiBC,EAAOD,CAAc,IAErD,OAAOA,KAAQ,aAAmBA,EAAI,EAAE,KAAKC,GAAQ,SAAAC,GAAS,IAE3D,OANU;AAOrB;AAEO,SAASE,EAA8B;AAAA,EAC1C,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,MAAAC;AAAA,EACA,SAAAL;AACJ,GAAa;AACT,QAAMM,IAAYF,MAAS;AA2D3B,SA1DaC,EAAK,IAAI,CAACP,OAAS;AAAA,IAC5B,KAAAA;AAAA,IACA,OAAOK,EAAQ,IAAI,CAACI,MAAQ;;AACxB,YAAMC,IAAQP,IAAaQ,IAAAF,EAAI,QAAJ,gBAAAE,EAAS,UAASF,EAAI,UAAUT,GAAKE,CAAO;AAEvE,UAAIU;AAEJ,WAAIC,IAAAJ,EAAI,QAAJ,QAAAI,EAAS,OAAO;AAChB,cAAMC,IAAWf,GAAYgB,IAAAN,EAAI,QAAJ,gBAAAM,EAAS,OAAOf,GAAKE,CAAO;AAEzD,QAAAU,IAAQE,IACJ,gBAAAE;AAAA,UAACC;AAAA,UAAA;AAAA,YACG,SAAQ;AAAA,YACR,KAAMH;AAAA,YACN,MAAOJ,KAAA,gBAAAA,EAAO;AAAA,YACd,MAAK;AAAA,YACL,MAAOF,IAAY,OAAO;AAAA,UAAA;AAAA,QAAA,IAG9B,gBAAAQ;AAAA,UAACC;AAAA,UAAA;AAAA,YACG,SAAQ;AAAA,YACR,wBAAQC,GAAA,EAAO;AAAA,YACf,MAAOR,KAAA,gBAAAA,EAAO;AAAA,YACd,MAAK;AAAA,YACL,MAAOF,IAAY,OAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAGtC,YAAWW,IAAAV,EAAI,QAAJ,QAAAU,EAAS,MAAM;AACtB,cAAMC,IAAWrB,GAAYsB,IAAAZ,EAAI,QAAJ,gBAAAY,EAAS,MAAMrB,GAAKE,CAAO;AAExD,QAAAU,IACI,gBAAAI;AAAA,UAACC;AAAA,UAAA;AAAA,YACG,MAAOG,KAAY,gBAAAJ,EAACE,GAAA,CAAA,CAAO;AAAA,YAC3B,MAAOR,KAAA,gBAAAA,EAAO;AAAA,YACd,MAAK;AAAA,YACL,MAAOF,IAAY,OAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAGtC,MAAA,EAAWc,IAAAb,EAAI,QAAJ,QAAAa,EAAS,gBAChBV,IAAQb,GAAYwB,IAAAd,EAAI,QAAJ,gBAAAc,EAAS,aAAavB,GAAKE,CAAO;AAG1D,aACI,gBAAAc;AAAA,QAACQ;AAAA,QAAA;AAAA,UACG,OAAAd;AAAA,UACA,OAAQD,EAAI;AAAA,UACZ,SAAUD;AAAA,UACV,UACIA,IACM,WACCiB,IAAAhB,EAAI,QAAJ,gBAAAgB,EAAS,aAAYtB,GAAauB,IAAAjB,EAAI,QAAJ,gBAAAiB,EAAS,UAAU1B,GAAKE,CAAO;AAAA,UAE5E,OAAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAGZ,CAAC;AAAA,EAAA,EACH;AAGN;"}
@@ -1,130 +1,123 @@
1
- import { jsxs as H, jsx as m } from "react/jsx-runtime";
2
- import v, { useRef as ee, useState as N, useEffect as te, useCallback as d } from "react";
1
+ import { jsxs as H, jsx as u } from "react/jsx-runtime";
2
+ import v, { useRef as ee, useState as C, useEffect as te, useCallback as d } from "react";
3
3
  import re from "react-merge-refs";
4
4
  import se from "react-textarea-autosize";
5
5
  import p from "classnames";
6
6
  import { FormControl as oe } from "../form-control/component.js";
7
7
  import { useFocus as ae } from "../hooks/useFocus/index.js";
8
8
  import t from "./index.module.css.js";
9
- const le = v.forwardRef(
9
+ const pe = v.forwardRef(
10
10
  ({
11
- autoComplete: k = "on",
11
+ autoComplete: F = "on",
12
12
  autosize: a = !0,
13
13
  size: x = "s",
14
- block: F = !1,
15
- bottomAddons: S,
16
- fieldClassName: $,
17
- className: g,
18
- dataTestId: j,
14
+ block: S = !1,
15
+ bottomAddons: $,
16
+ fieldClassName: g,
17
+ className: j,
18
+ dataTestId: k,
19
19
  disabled: y,
20
20
  error: A,
21
- hint: P,
22
- textareaClassName: w,
21
+ hint: w,
22
+ textareaClassName: B,
23
23
  label: R,
24
- leftAddons: z,
24
+ leftAddons: E,
25
25
  onFocus: f,
26
- required: B,
27
- onBlur: c,
26
+ required: M,
27
+ onBlur: l,
28
28
  onChange: n,
29
- onHeightChange: E,
30
- rightAddons: M,
31
- maxRows: q,
32
- minRows: D,
33
- maxHeight: l,
34
- resize: G = "none",
29
+ onHeightChange: P,
30
+ rightAddons: q,
31
+ maxRows: D,
32
+ minRows: G,
33
+ maxHeight: c,
34
+ resize: I = "none",
35
35
  value: r,
36
- defaultValue: I,
36
+ defaultValue: J,
37
37
  maxLength: i = 500,
38
- counter: J,
39
- rows: K = a ? 1 : 3,
40
- ...O
41
- }, Q) => {
42
- const o = r === void 0, s = ee(null), [b, T] = N(!1), [u, U] = N(I || ""), [W] = ae(s, "keyboard"), V = !!(o ? u : r);
38
+ counter: K,
39
+ rows: O = a ? 1 : 3,
40
+ ...Q
41
+ }, U) => {
42
+ const o = r === void 0, s = ee(null), [T, V] = C(!1), [m, W] = C(J || ""), [X] = ae(s, "keyboard"), b = !!(o ? m : r);
43
43
  te(() => {
44
- a && l && s.current && s.current.style && (s.current.style.maxHeight = `${l}px`);
45
- }, [s, a, l]);
46
- const X = d(
44
+ a && c && s.current && s.current.style && (s.current.style.maxHeight = `${c}px`);
45
+ }, [s, a, c]);
46
+ const Y = d(
47
47
  (e) => {
48
- T(!0), f && f(e);
48
+ V(!0), f && f(e);
49
49
  },
50
50
  [f]
51
- ), Y = d(
51
+ ), Z = d(
52
52
  (e) => {
53
- T(!1), c && c(e);
53
+ V(!1), l && l(e);
54
54
  },
55
- [c]
56
- ), Z = d(
55
+ [l]
56
+ ), _ = d(
57
57
  (e) => {
58
- n && n(e, { value: e.target.value }), o && U(e.target.value);
58
+ n && n(e, { value: e.target.value }), o && W(e.target.value);
59
59
  },
60
60
  [n, o]
61
- ), _ = {
62
- ...O,
61
+ ), L = {
62
+ ...Q,
63
63
  className: p(
64
64
  t.textarea,
65
65
  t[x],
66
66
  {
67
67
  [t.hasLabel]: R,
68
- [t.filled]: V,
69
- [t.resizeVertical]: G === "vertical"
68
+ [t.filled]: b,
69
+ [t.resizeVertical]: I === "vertical"
70
70
  },
71
- w
71
+ B
72
72
  ),
73
- autoComplete: k,
73
+ autoComplete: F,
74
74
  disabled: y,
75
- onBlur: Y,
76
- onFocus: X,
77
- onChange: Z,
78
- value: o ? u : r,
79
- rows: K,
80
- ref: re([Q, s]),
81
- "data-test-id": j
82
- }, L = () => `${o ? u.length : r == null ? void 0 : r.length} / ${i || "-"}`, { ref: h, ...C } = _;
75
+ onBlur: Z,
76
+ onFocus: Y,
77
+ onChange: _,
78
+ value: o ? m : r,
79
+ rows: O,
80
+ ref: re([U, s]),
81
+ "data-test-id": k
82
+ }, z = () => `${o ? m.length : r == null ? void 0 : r.length} / ${i || "-"}`, { ref: h, ...N } = L;
83
83
  return /* @__PURE__ */ H(
84
84
  oe,
85
85
  {
86
- className: p(g),
87
- fieldClassName: p($, {
88
- [t.focusVisible]: W
86
+ className: p(j),
87
+ fieldClassName: p(g, {
88
+ [t.focusVisible]: X
89
89
  }),
90
90
  size: x,
91
- block: F,
92
- required: B,
91
+ block: S,
92
+ required: M,
93
93
  disabled: y,
94
- filled: V || b,
95
- focused: b,
94
+ filled: b || T,
95
+ focused: T,
96
96
  error: A,
97
97
  label: R,
98
- hint: P,
99
- leftAddons: z,
100
- rightAddons: M,
101
- bottomAddons: S,
98
+ hint: w,
99
+ leftAddons: E,
100
+ rightAddons: q,
101
+ bottomAddons: $,
102
102
  children: [
103
- a ? /* @__PURE__ */ m(
103
+ a ? /* @__PURE__ */ u(
104
104
  se,
105
105
  {
106
- ...C,
106
+ ...N,
107
107
  maxLength: i,
108
- maxRows: q,
109
- minRows: D,
110
- onHeightChange: E,
108
+ maxRows: D,
109
+ minRows: G,
110
+ onHeightChange: P,
111
111
  ref: h
112
112
  }
113
- ) : /* @__PURE__ */ m("textarea", { maxLength: i, ...C, ref: h, style: { maxHeight: l } }),
114
- J && /* @__PURE__ */ m("span", { className: t.counter, children: L() })
113
+ ) : /* @__PURE__ */ u("textarea", { maxLength: i, ...N, ref: h, style: { maxHeight: c } }),
114
+ K && /* @__PURE__ */ u("span", { className: t.counter, children: z() })
115
115
  ]
116
116
  }
117
117
  );
118
118
  }
119
119
  );
120
- le.defaultProps = {
121
- autoComplete: "on",
122
- autosize: !0,
123
- size: "s",
124
- block: !1,
125
- resize: "none"
126
- };
127
120
  export {
128
- le as Textarea
121
+ pe as Textarea
129
122
  };
130
123
  //# sourceMappingURL=component.js.map