@hh.ru/magritte-ui-new-select 1.0.1 → 1.1.1

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 (60) hide show
  1. package/Select.d.ts +5 -2
  2. package/Select.js +21 -9
  3. package/Select.js.map +1 -1
  4. package/SelectSearchTrigger.d.ts +3 -0
  5. package/SelectSearchTrigger.js +61 -0
  6. package/SelectSearchTrigger.js.map +1 -0
  7. package/SelectTrigger.d.ts +3 -0
  8. package/SelectTrigger.js +42 -0
  9. package/SelectTrigger.js.map +1 -0
  10. package/dataProviderTypes.js +1 -0
  11. package/index.css +25 -0
  12. package/index.d.ts +1 -0
  13. package/index.js +18 -6
  14. package/index.js.map +1 -1
  15. package/internal/ConfigContext.d.ts +1 -3
  16. package/internal/ConfigContext.js +3 -4
  17. package/internal/ConfigContext.js.map +1 -1
  18. package/internal/NavigationManagement.d.ts +8 -0
  19. package/internal/NavigationManagement.js +29 -0
  20. package/internal/NavigationManagement.js.map +1 -0
  21. package/internal/SearchStateContext.d.ts +10 -0
  22. package/internal/SearchStateContext.js +21 -0
  23. package/internal/SearchStateContext.js.map +1 -0
  24. package/internal/SelectDataProvider.d.ts +2 -2
  25. package/internal/SelectDataProvider.js +6 -4
  26. package/internal/SelectDataProvider.js.map +1 -1
  27. package/internal/SelectStateContext.d.ts +5 -5
  28. package/internal/SelectStateContext.js +43 -12
  29. package/internal/SelectStateContext.js.map +1 -1
  30. package/internal/SelectStore.d.ts +16 -0
  31. package/internal/SelectStore.js +60 -0
  32. package/internal/SelectStore.js.map +1 -0
  33. package/internal/VisibilityContext.js +1 -0
  34. package/internal/focusOrchestrator.d.ts +35 -0
  35. package/internal/focusOrchestrator.js +93 -0
  36. package/internal/focusOrchestrator.js.map +1 -0
  37. package/internal/slots.js +1 -0
  38. package/internal/useDataProvider.d.ts +8 -0
  39. package/internal/{useSearch.js → useDataProvider.js} +11 -31
  40. package/internal/useDataProvider.js.map +1 -0
  41. package/internal/useFocusWithin.d.ts +11 -0
  42. package/internal/useFocusWithin.js +87 -0
  43. package/internal/useFocusWithin.js.map +1 -0
  44. package/internal/utils.d.ts +5 -1
  45. package/internal/utils.js +16 -4
  46. package/internal/utils.js.map +1 -1
  47. package/package.json +4 -2
  48. package/types.d.ts +9 -6
  49. package/types.js +1 -0
  50. package/useSelectTrigger.d.ts +6 -0
  51. package/useSelectTrigger.js +112 -0
  52. package/useSelectTrigger.js.map +1 -0
  53. package/internal/NavigationContext.d.ts +0 -17
  54. package/internal/NavigationContext.js +0 -30
  55. package/internal/NavigationContext.js.map +0 -1
  56. package/internal/useSearch.d.ts +0 -8
  57. package/internal/useSearch.js.map +0 -1
  58. package/internal/useSelectState.d.ts +0 -16
  59. package/internal/useSelectState.js +0 -145
  60. package/internal/useSelectState.js.map +0 -1
package/Select.d.ts CHANGED
@@ -1,9 +1,12 @@
1
1
  import { ReactElement } from 'react';
2
2
  import { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';
3
+ import { SelectSearchTrigger } from '@hh.ru/magritte-ui-new-select/SelectSearchTrigger';
4
+ import { SelectTrigger } from '@hh.ru/magritte-ui-new-select/SelectTrigger';
3
5
  import { SelectProps } from '@hh.ru/magritte-ui-new-select/types';
4
6
  export interface SelectComponents {
5
- Trigger?: ReactElement;
7
+ Trigger: typeof SelectTrigger;
8
+ SearchTrigger: typeof SelectSearchTrigger;
6
9
  }
7
- declare const SelectRoot: <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({ children, commitModel, dataProvider, error, errorTrls, hints, maxSelectedOptions, multiple, name, loading, onBlur: onBlurExternal, onChange: onChangeExternal, onFocus: onFocusExternal, onOptionsChange: onOptionsChangeExternal, onSelectOption: onSelectOptionExternal, options, value, }: SelectProps<MultipleType, DataType>) => ReactElement;
10
+ declare const SelectRoot: <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({ children, commitModel, dataProvider, error, errorTrls, hints, maxSelectedOptions, multiple, name, loading, onBlur: onBlurExternal, onChange: onChangeExternal, onFocus: onFocusExternal, onOptionsChange: onOptionsChangeExternal, options, value, }: SelectProps<MultipleType, DataType>) => ReactElement;
8
11
  declare const Select: typeof SelectRoot & SelectComponents;
9
12
  export { Select };
package/Select.js CHANGED
@@ -1,32 +1,44 @@
1
+ import './index.css';
1
2
  import { jsx } from 'react/jsx-runtime';
2
3
  import { useState } from 'react';
4
+ import { SelectSearchTrigger } from './SelectSearchTrigger.js';
5
+ import { SelectTrigger } from './SelectTrigger.js';
3
6
  import { ConfigProvider } from './internal/ConfigContext.js';
4
- import { NavigationProvider } from './internal/NavigationContext.js';
7
+ import { NavigationManagement } from './internal/NavigationManagement.js';
8
+ import { SearchStateProvider } from './internal/SearchStateContext.js';
5
9
  import { SelectDataProvider } from './internal/SelectDataProvider.js';
6
10
  import { SelectStateProvider } from './internal/SelectStateContext.js';
7
11
  import { VisibilityProvider } from './internal/VisibilityContext.js';
12
+ import { FocusOrchestratorProvider } from './internal/focusOrchestrator.js';
8
13
  import { SelectElementsSlotRegistryProvider } from './internal/slots.js';
9
14
  import { useEventCallback } from './internal/utils.js';
15
+ import 'classnames';
16
+ import '@hh.ru/magritte-common-use-disabled';
17
+ import '@hh.ru/magritte-common-use-multiple-refs';
18
+ import '@hh.ru/magritte-ui-input/BaseInput';
19
+ import './useSelectTrigger.js';
20
+ import '@hh.ru/magritte-common-keyboard';
21
+ import '@hh.ru/magritte-ui-trigger';
22
+ import './internal/useFocusWithin.js';
10
23
  import '@hh.ru/magritte-common-data-provider';
11
- import './internal/useSearch.js';
12
- import './internal/useSelectState.js';
24
+ import './internal/useDataProvider.js';
25
+ import './internal/SelectStore.js';
13
26
  import '@hh.ru/magritte-internal-slot-registry';
14
- import '@hh.ru/magritte-common-keyboard';
15
27
 
16
28
  const SelectRoot = ({ children, commitModel = 'instant', dataProvider, error, errorTrls, hints, maxSelectedOptions,
17
29
  // TODO commitModel === multiple?
18
- multiple, name, loading, onBlur: onBlurExternal, onChange: onChangeExternal, onFocus: onFocusExternal, onOptionsChange: onOptionsChangeExternal, onSelectOption: onSelectOptionExternal, options, value, }) => {
30
+ multiple, name, loading, onBlur: onBlurExternal, onChange: onChangeExternal, onFocus: onFocusExternal, onOptionsChange: onOptionsChangeExternal, options, value, }) => {
19
31
  const onBlur = useEventCallback(onBlurExternal);
20
32
  const onFocus = useEventCallback(onFocusExternal);
21
33
  const onChange = useEventCallback(onChangeExternal);
22
34
  const onOptionsChange = useEventCallback(onOptionsChangeExternal);
23
- const onSelectOption = useEventCallback(onSelectOptionExternal);
24
35
  const [showOptions, setShowOptions] = useState(false);
25
- // forcedState - это отложенная команда фокуса
26
- const [forcedState, setForcedState] = useState(null);
27
- return (jsx(SelectElementsSlotRegistryProvider, { children: jsx(ConfigProvider, { maxSelectedOptions: maxSelectedOptions, multiple: multiple, name: name, onBlur: onBlur, onFocus: onFocus, commitModel: commitModel, loading: loading, children: jsx(VisibilityProvider, { showOptions: showOptions, setShowOptions: setShowOptions, children: jsx(SelectStateProvider, { onChange: onChange, onSelectOption: onSelectOption, value: value, children: jsx(SelectDataProvider, { dataProvider: dataProvider, error: error, errorTrls: errorTrls, hints: hints, options: options, onOptionsChange: onOptionsChange, children: jsx(NavigationProvider, { forcedState: forcedState, setForcedState: setForcedState, children: children }) }) }) }) }) }));
36
+ const [searchValue, setSearchValue] = useState('');
37
+ return (jsx(SelectElementsSlotRegistryProvider, { children: jsx(ConfigProvider, { maxSelectedOptions: maxSelectedOptions, multiple: multiple, name: name, commitModel: commitModel, loading: loading, children: jsx(VisibilityProvider, { showOptions: showOptions, setShowOptions: setShowOptions, children: jsx(SelectStateProvider, { onChange: onChange, value: value, children: jsx(SearchStateProvider, { searchValue: searchValue, setSearchValue: setSearchValue, children: jsx(SelectDataProvider, { dataProvider: dataProvider, error: error, errorTrls: errorTrls, hints: hints, options: options, onOptionsChange: onOptionsChange, children: jsx(FocusOrchestratorProvider, { children: jsx(NavigationManagement, { onBlur: onBlur, onFocus: onFocus, children: children }) }) }) }) }) }) }) }));
28
38
  };
29
39
  const Select = SelectRoot;
40
+ Select.Trigger = SelectTrigger;
41
+ Select.SearchTrigger = SelectSearchTrigger;
30
42
 
31
43
  export { Select };
32
44
  //# sourceMappingURL=Select.js.map
package/Select.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","sources":["src/Select.tsx"],"sourcesContent":["import { ReactElement, useState } from 'react';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\n// import { ApplyChangesButton } from '@hh.ru/magritte-ui-new-select/ApplyChangesButton';\n// import { ClearButton } from '@hh.ru/magritte-ui-new-select/ClearButton';\n// import { CloseBottomSheet } from '@hh.ru/magritte-ui-new-select/CloseBottomSheet';\n// import { Footer } from '@hh.ru/magritte-ui-new-select/Footer';\n// import { Header } from '@hh.ru/magritte-ui-new-select/Header';\n// import { Options } from '@hh.ru/magritte-ui-new-select/Options';\n// import { SearchInput } from '@hh.ru/magritte-ui-new-select/SearchInput';\n// import { SelectBottomSheet } from '@hh.ru/magritte-ui-new-select/SelectBottomSheet';\n// import { SelectDrop } from '@hh.ru/magritte-ui-new-select/SelectDrop';\n// import { SelectTrigger } from '@hh.ru/magritte-ui-new-select/SelectTrigger';\nimport { ConfigProvider } from '@hh.ru/magritte-ui-new-select/internal/ConfigContext';\nimport { NavigationProvider, FocusStateType } from '@hh.ru/magritte-ui-new-select/internal/NavigationContext';\nimport { SelectDataProvider } from '@hh.ru/magritte-ui-new-select/internal/SelectDataProvider';\nimport { SelectStateProvider } from '@hh.ru/magritte-ui-new-select/internal/SelectStateContext';\nimport { VisibilityProvider } from '@hh.ru/magritte-ui-new-select/internal/VisibilityContext';\nimport { SelectElementsSlotRegistryProvider } from '@hh.ru/magritte-ui-new-select/internal/slots';\nimport { useEventCallback } from '@hh.ru/magritte-ui-new-select/internal/utils';\nimport { SelectProps } from '@hh.ru/magritte-ui-new-select/types';\n\nexport interface SelectComponents {\n Trigger?: ReactElement;\n // Trigger: typeof SelectTrigger;\n // Options: typeof Options;\n // Drop: typeof SelectDrop;\n // BottomSheet: typeof SelectBottomSheet;\n // SearchInput: typeof SearchInput;\n // ApplyChangesButton: typeof ApplyChangesButton;\n // ClearButton: typeof ClearButton;\n // Footer: typeof Footer;\n // Header: typeof Header;\n // CloseBottomSheet: typeof CloseBottomSheet;\n}\n\nconst SelectRoot = <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({\n children,\n commitModel = 'instant',\n dataProvider,\n error,\n errorTrls,\n hints,\n maxSelectedOptions,\n // TODO commitModel === multiple?\n multiple,\n name,\n loading,\n onBlur: onBlurExternal,\n onChange: onChangeExternal,\n onFocus: onFocusExternal,\n onOptionsChange: onOptionsChangeExternal,\n onSelectOption: onSelectOptionExternal,\n options,\n value,\n}: SelectProps<MultipleType, DataType>): ReactElement => {\n const onBlur = useEventCallback(onBlurExternal);\n const onFocus = useEventCallback(onFocusExternal);\n const onChange = useEventCallback(onChangeExternal);\n const onOptionsChange = useEventCallback(onOptionsChangeExternal);\n const onSelectOption = useEventCallback(onSelectOptionExternal);\n const [showOptions, setShowOptions] = useState(false);\n // forcedState - это отложенная команда фокуса\n const [forcedState, setForcedState] = useState<FocusStateType>(null);\n\n return (\n <SelectElementsSlotRegistryProvider>\n <ConfigProvider\n maxSelectedOptions={maxSelectedOptions}\n multiple={multiple}\n name={name}\n onBlur={onBlur}\n onFocus={onFocus}\n commitModel={commitModel}\n loading={loading}\n >\n <VisibilityProvider showOptions={showOptions} setShowOptions={setShowOptions}>\n <SelectStateProvider<MultipleType, DataType>\n onChange={onChange}\n onSelectOption={onSelectOption}\n value={value}\n >\n <SelectDataProvider<DataType>\n dataProvider={dataProvider}\n error={error}\n errorTrls={errorTrls}\n hints={hints}\n options={options}\n onOptionsChange={onOptionsChange}\n >\n <NavigationProvider forcedState={forcedState} setForcedState={setForcedState}>\n {children}\n </NavigationProvider>\n </SelectDataProvider>\n </SelectStateProvider>\n </VisibilityProvider>\n </ConfigProvider>\n </SelectElementsSlotRegistryProvider>\n );\n};\n\nconst Select = SelectRoot as typeof SelectRoot & SelectComponents;\n\n// Select.Trigger = SelectTrigger;\n// Select.Options = Options;\n// Select.Drop = SelectDrop;\n// Select.BottomSheet = SelectBottomSheet;\n// Select.SearchInput = SearchInput;\n// Select.ApplyChangesButton = ApplyChangesButton;\n// Select.Footer = Footer;\n// Select.ClearButton = ClearButton;\n// Select.Header = Header;\n// Select.CloseBottomSheet = CloseBottomSheet;\n\nexport { Select };\n"],"names":["_jsx"],"mappings":";;;;;;;;;;;;;;;AAoCA,MAAM,UAAU,GAAG,CAAuE,EACtF,QAAQ,EACR,WAAW,GAAG,SAAS,EACvB,YAAY,EACZ,KAAK,EACL,SAAS,EACT,KAAK,EACL,kBAAkB;AAClB;AACA,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,eAAe,EACxB,eAAe,EAAE,uBAAuB,EACxC,cAAc,EAAE,sBAAsB,EACtC,OAAO,EACP,KAAK,GAC6B,KAAkB;AACpD,IAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAChD,IAAA,MAAM,OAAO,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAClD,IAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AACpD,IAAA,MAAM,eAAe,GAAG,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;AAClE,IAAA,MAAM,cAAc,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;IAChE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;;IAEtD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAiB,IAAI,CAAC,CAAC;IAErE,QACIA,IAAC,kCAAkC,EAAA,EAAA,QAAA,EAC/BA,IAAC,cAAc,EAAA,EACX,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,EAAA,QAAA,EAEhBA,GAAC,CAAA,kBAAkB,EAAC,EAAA,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAA,QAAA,EACxEA,IAAC,mBAAmB,EAAA,EAChB,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,KAAK,YAEZA,GAAC,CAAA,kBAAkB,EACf,EAAA,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,eAAe,EAAA,QAAA,EAEhCA,IAAC,kBAAkB,EAAA,EAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EACvE,QAAA,EAAA,QAAQ,EACQ,CAAA,EAAA,CACJ,GACH,EACL,CAAA,EAAA,CACR,EACgB,CAAA,EACvC;AACN,CAAC,CAAC;AAEI,MAAA,MAAM,GAAG;;;;"}
1
+ {"version":3,"file":"Select.js","sources":["src/Select.tsx"],"sourcesContent":["import { ReactElement, useState } from 'react';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\nimport { SelectSearchTrigger } from '@hh.ru/magritte-ui-new-select/SelectSearchTrigger';\n// import { ApplyChangesButton } from '@hh.ru/magritte-ui-new-select/ApplyChangesButton';\n// import { ClearButton } from '@hh.ru/magritte-ui-new-select/ClearButton';\n// import { CloseBottomSheet } from '@hh.ru/magritte-ui-new-select/CloseBottomSheet';\n// import { Footer } from '@hh.ru/magritte-ui-new-select/Footer';\n// import { Header } from '@hh.ru/magritte-ui-new-select/Header';\n// import { Options } from '@hh.ru/magritte-ui-new-select/Options';\n// import { SelectBottomSheet } from '@hh.ru/magritte-ui-new-select/SelectBottomSheet';\n// import { SelectDrop } from '@hh.ru/magritte-ui-new-select/SelectDrop';\nimport { SelectTrigger } from '@hh.ru/magritte-ui-new-select/SelectTrigger';\nimport { ConfigProvider } from '@hh.ru/magritte-ui-new-select/internal/ConfigContext';\nimport { NavigationManagement } from '@hh.ru/magritte-ui-new-select/internal/NavigationManagement';\nimport { SearchStateProvider } from '@hh.ru/magritte-ui-new-select/internal/SearchStateContext';\nimport { SelectDataProvider } from '@hh.ru/magritte-ui-new-select/internal/SelectDataProvider';\nimport { SelectStateProvider } from '@hh.ru/magritte-ui-new-select/internal/SelectStateContext';\nimport { VisibilityProvider } from '@hh.ru/magritte-ui-new-select/internal/VisibilityContext';\nimport { FocusOrchestratorProvider } from '@hh.ru/magritte-ui-new-select/internal/focusOrchestrator';\nimport { SelectElementsSlotRegistryProvider } from '@hh.ru/magritte-ui-new-select/internal/slots';\nimport { useEventCallback } from '@hh.ru/magritte-ui-new-select/internal/utils';\nimport { SelectProps } from '@hh.ru/magritte-ui-new-select/types';\n\nexport interface SelectComponents {\n Trigger: typeof SelectTrigger;\n SearchTrigger: typeof SelectSearchTrigger;\n // Options: typeof Options;\n // Drop: typeof SelectDrop;\n // BottomSheet: typeof SelectBottomSheet;\n // ApplyChangesButton: typeof ApplyChangesButton;\n // ClearButton: typeof ClearButton;\n // Footer: typeof Footer;\n // Header: typeof Header;\n // CloseBottomSheet: typeof CloseBottomSheet;\n}\n\nconst SelectRoot = <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({\n children,\n commitModel = 'instant',\n dataProvider,\n error,\n errorTrls,\n hints,\n maxSelectedOptions,\n // TODO commitModel === multiple?\n multiple,\n name,\n loading,\n onBlur: onBlurExternal,\n onChange: onChangeExternal,\n onFocus: onFocusExternal,\n onOptionsChange: onOptionsChangeExternal,\n options,\n value,\n}: SelectProps<MultipleType, DataType>): ReactElement => {\n const onBlur = useEventCallback(onBlurExternal);\n const onFocus = useEventCallback(onFocusExternal);\n const onChange = useEventCallback(onChangeExternal);\n const onOptionsChange = useEventCallback(onOptionsChangeExternal);\n const [showOptions, setShowOptions] = useState(false);\n const [searchValue, setSearchValue] = useState('');\n return (\n <SelectElementsSlotRegistryProvider>\n <ConfigProvider\n maxSelectedOptions={maxSelectedOptions}\n multiple={multiple}\n name={name}\n commitModel={commitModel}\n loading={loading}\n >\n <VisibilityProvider showOptions={showOptions} setShowOptions={setShowOptions}>\n <SelectStateProvider<MultipleType, DataType> onChange={onChange} value={value}>\n <SearchStateProvider searchValue={searchValue} setSearchValue={setSearchValue}>\n <SelectDataProvider<DataType>\n dataProvider={dataProvider}\n error={error}\n errorTrls={errorTrls}\n hints={hints}\n options={options}\n onOptionsChange={onOptionsChange}\n >\n <FocusOrchestratorProvider>\n <NavigationManagement onBlur={onBlur} onFocus={onFocus}>\n {children}\n </NavigationManagement>\n </FocusOrchestratorProvider>\n </SelectDataProvider>\n </SearchStateProvider>\n </SelectStateProvider>\n </VisibilityProvider>\n </ConfigProvider>\n </SelectElementsSlotRegistryProvider>\n );\n};\n\nconst Select = SelectRoot as typeof SelectRoot & SelectComponents;\n\nSelect.Trigger = SelectTrigger;\nSelect.SearchTrigger = SelectSearchTrigger;\n// Select.Options = Options;\n// Select.Drop = SelectDrop;\n// Select.BottomSheet = SelectBottomSheet;\n// Select.ApplyChangesButton = ApplyChangesButton;\n// Select.Footer = Footer;\n// Select.ClearButton = ClearButton;\n// Select.Header = Header;\n// Select.CloseBottomSheet = CloseBottomSheet;\n\nexport { Select };\n"],"names":["_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,MAAM,UAAU,GAAG,CAAuE,EACtF,QAAQ,EACR,WAAW,GAAG,SAAS,EACvB,YAAY,EACZ,KAAK,EACL,SAAS,EACT,KAAK,EACL,kBAAkB;AAClB;AACA,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,eAAe,EACxB,eAAe,EAAE,uBAAuB,EACxC,OAAO,EACP,KAAK,GAC6B,KAAkB;AACpD,IAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAChD,IAAA,MAAM,OAAO,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAClD,IAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AACpD,IAAA,MAAM,eAAe,GAAG,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;IAClE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnD,QACIA,GAAC,CAAA,kCAAkC,EAC/B,EAAA,QAAA,EAAAA,GAAA,CAAC,cAAc,EACX,EAAA,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,YAEhBA,GAAC,CAAA,kBAAkB,EAAC,EAAA,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAA,QAAA,EACxEA,GAAC,CAAA,mBAAmB,IAAyB,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAA,QAAA,EACzEA,GAAC,CAAA,mBAAmB,EAAC,EAAA,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAA,QAAA,EACzEA,GAAC,CAAA,kBAAkB,IACf,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,eAAe,EAAA,QAAA,EAEhCA,GAAC,CAAA,yBAAyB,EACtB,EAAA,QAAA,EAAAA,GAAA,CAAC,oBAAoB,EAAC,EAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAA,QAAA,EACjD,QAAQ,EAAA,CACU,EACC,CAAA,EAAA,CACX,EACH,CAAA,EAAA,CACJ,EACL,CAAA,EAAA,CACR,EACgB,CAAA,EACvC;AACN,CAAC,CAAC;AAEI,MAAA,MAAM,GAAG,WAAmD;AAElE,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC;AAC/B,MAAM,CAAC,aAAa,GAAG,mBAAmB;;;;"}
@@ -0,0 +1,3 @@
1
+ import { SelectUncontrolledTriggerProps } from '@hh.ru/magritte-ui-new-select/types';
2
+ declare const SelectSearchTrigger: import("react").ForwardRefExoticComponent<SelectUncontrolledTriggerProps & import("react").RefAttributes<HTMLElement>>;
3
+ export { SelectSearchTrigger };
@@ -0,0 +1,61 @@
1
+ import './index.css';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { forwardRef, useState, useRef, useCallback } from 'react';
4
+ import classnames from 'classnames';
5
+ import { useDisabled } from '@hh.ru/magritte-common-use-disabled';
6
+ import { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';
7
+ import { BaseInput } from '@hh.ru/magritte-ui-input/BaseInput';
8
+ import { useSearchState } from './internal/SearchStateContext.js';
9
+ import { useFocusCandidate, FocusTier } from './internal/focusOrchestrator.js';
10
+ import { useTriggerRef, useSelectTrigger } from './useSelectTrigger.js';
11
+ import { Trigger } from '@hh.ru/magritte-ui-trigger';
12
+ import './internal/utils.js';
13
+ import '@hh.ru/magritte-common-keyboard';
14
+ import './internal/SelectDataProvider.js';
15
+ import '@hh.ru/magritte-common-data-provider';
16
+ import './internal/useDataProvider.js';
17
+ import './internal/VisibilityContext.js';
18
+ import './internal/SelectStateContext.js';
19
+ import './internal/ConfigContext.js';
20
+ import './internal/SelectStore.js';
21
+ import './internal/slots.js';
22
+ import '@hh.ru/magritte-internal-slot-registry';
23
+
24
+ var styles = {"anchor":"magritte-anchor___IFvZk_1-1-1","anchor-stretched":"magritte-anchor-stretched___L14B-_1-1-1","anchorStretched":"magritte-anchor-stretched___L14B-_1-1-1","default-view":"magritte-default-view___oT4uN_1-1-1","defaultView":"magritte-default-view___oT4uN_1-1-1","input-view":"magritte-input-view___TCeV4_1-1-1","inputView":"magritte-input-view___TCeV4_1-1-1","hidden-view":"magritte-hidden-view___oJ4OI_1-1-1","hiddenView":"magritte-hidden-view___oJ4OI_1-1-1"};
25
+
26
+ const SelectSearchTriggerComponent = ({ 'aria-label': ariaLabel, 'data-qa': dataQa = 'magritte-select-input-activator', disabled, size, maxWidth, stretched, ...triggerProps }, ref) => {
27
+ const [useSearchInput, setUseSearchInput] = useState(false);
28
+ const activatorRef = useTriggerRef();
29
+ const activatorRefCallback = useMultipleRefs(activatorRef, ref);
30
+ const inputRef = useRef(null);
31
+ const forceDisabled = useDisabled();
32
+ const isComponentDisabled = disabled || forceDisabled;
33
+ const { searchValue, setSearchValue } = useSearchState();
34
+ // TODO focusAndSelect потерян
35
+ const { onKeyDown, onChange, onBlur, expanded, onClear, values, onFocus } = useSelectTrigger(isComponentDisabled);
36
+ useFocusCandidate('select-search-input', FocusTier.Trigger, () => {
37
+ const input = inputRef.current;
38
+ if (!input) {
39
+ return false;
40
+ }
41
+ input.focus();
42
+ return true;
43
+ });
44
+ const onFocusTrigger = useCallback(() => {
45
+ if (isComponentDisabled || expanded) {
46
+ return;
47
+ }
48
+ onFocus?.();
49
+ setUseSearchInput(true);
50
+ }, [isComponentDisabled, expanded, onFocus]);
51
+ return (jsxs("div", { ref: activatorRefCallback, className: classnames(styles.anchor, { [styles.anchorStretched]: stretched }), style: { maxWidth }, children: [jsx("div", { className: classnames(styles.defaultView, { [styles.hiddenView]: useSearchInput }), children: jsx(Trigger, { ...triggerProps,
52
+ // size={size}
53
+ role: "combobox", maxWidth: maxWidth, stretched: stretched, expanded: expanded, onChange: onChange, onBlur: onBlur, onClear: onClear, onFocus: onFocusTrigger, onKeyDown: onKeyDown, values: values, "aria-label": ariaLabel, "data-qa": dataQa, disabled: isComponentDisabled }) }), jsx("div", { className: classnames(styles.inputView, {
54
+ [styles.hiddenView]: !useSearchInput,
55
+ }), children: jsx(BaseInput, { size: size === 'large' ? 'large' : 'medium', ref: inputRef, wrapperRef: activatorRef, value: searchValue, onChange: setSearchValue, onKeyDown: onKeyDown, onBlur: onBlur, "data-qa": dataQa, placeholder: values.length > 0 ? values.join(', ') : ariaLabel, autoComplete: "off", role: "combobox", "aria-expanded": expanded, "aria-label": ariaLabel, "aria-autocomplete": "list" }) })] }));
56
+ };
57
+ const SelectSearchTrigger = forwardRef(SelectSearchTriggerComponent);
58
+ SelectSearchTrigger.displayName = 'SelectSearchTrigger';
59
+
60
+ export { SelectSearchTrigger };
61
+ //# sourceMappingURL=SelectSearchTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectSearchTrigger.js","sources":["src/SelectSearchTrigger.tsx"],"sourcesContent":["import { ReactElement, forwardRef, ForwardedRef, useRef, useCallback, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\nimport { useDisabled } from '@hh.ru/magritte-common-use-disabled';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { BaseInput } from '@hh.ru/magritte-ui-input/BaseInput';\nimport { useSearchState } from '@hh.ru/magritte-ui-new-select/internal/SearchStateContext';\nimport { FocusTier, useFocusCandidate } from '@hh.ru/magritte-ui-new-select/internal/focusOrchestrator';\nimport { SelectUncontrolledTriggerProps } from '@hh.ru/magritte-ui-new-select/types';\nimport { useSelectTrigger, useTriggerRef } from '@hh.ru/magritte-ui-new-select/useSelectTrigger';\nimport { Trigger } from '@hh.ru/magritte-ui-trigger';\n\nimport styles from './select-search-trigger.less';\n\nconst SelectSearchTriggerComponent = <DataType extends StaticDataFetcherItem>(\n {\n 'aria-label': ariaLabel,\n 'data-qa': dataQa = 'magritte-select-input-activator',\n disabled,\n size,\n maxWidth,\n stretched,\n ...triggerProps\n }: SelectUncontrolledTriggerProps,\n ref: ForwardedRef<HTMLElement>\n): ReactElement => {\n const [useSearchInput, setUseSearchInput] = useState(false);\n const activatorRef = useTriggerRef();\n const activatorRefCallback = useMultipleRefs(activatorRef, ref);\n const inputRef = useRef<HTMLInputElement>(null);\n const forceDisabled = useDisabled();\n const isComponentDisabled = disabled || forceDisabled;\n const { searchValue, setSearchValue } = useSearchState();\n\n // TODO focusAndSelect потерян\n const { onKeyDown, onChange, onBlur, expanded, onClear, values, onFocus } =\n useSelectTrigger<DataType>(isComponentDisabled);\n\n useFocusCandidate('select-search-input', FocusTier.Trigger, () => {\n const input = inputRef.current;\n if (!input) {\n return false;\n }\n input.focus();\n return true;\n });\n\n const onFocusTrigger = useCallback(() => {\n if (isComponentDisabled || expanded) {\n return;\n }\n onFocus?.();\n setUseSearchInput(true);\n }, [isComponentDisabled, expanded, onFocus]);\n\n return (\n <div\n ref={activatorRefCallback}\n className={classnames(styles.anchor, { [styles.anchorStretched]: stretched })}\n style={{ maxWidth }}\n >\n <div className={classnames(styles.defaultView, { [styles.hiddenView]: useSearchInput })}>\n <Trigger\n {...triggerProps}\n // size={size}\n role=\"combobox\"\n maxWidth={maxWidth}\n stretched={stretched}\n expanded={expanded}\n onChange={onChange}\n onBlur={onBlur}\n onClear={onClear}\n onFocus={onFocusTrigger}\n onKeyDown={onKeyDown}\n values={values}\n aria-label={ariaLabel}\n data-qa={dataQa}\n disabled={isComponentDisabled}\n />\n </div>\n <div\n className={classnames(styles.inputView, {\n [styles.hiddenView]: !useSearchInput,\n })}\n >\n <BaseInput\n size={size === 'large' ? 'large' : 'medium'}\n ref={inputRef}\n wrapperRef={activatorRef}\n value={searchValue}\n onChange={setSearchValue}\n onKeyDown={onKeyDown}\n onBlur={onBlur}\n data-qa={dataQa}\n placeholder={values.length > 0 ? values.join(', ') : ariaLabel}\n autoComplete=\"off\"\n role=\"combobox\"\n aria-expanded={expanded}\n aria-label={ariaLabel}\n aria-autocomplete=\"list\"\n // TODO aria-controls\n />\n </div>\n </div>\n );\n};\n\nconst SelectSearchTrigger = forwardRef<HTMLElement, SelectUncontrolledTriggerProps>(SelectSearchTriggerComponent);\n\nSelectSearchTrigger.displayName = 'SelectSearchTrigger';\n\nexport { SelectSearchTrigger };\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAM,4BAA4B,GAAG,CACjC,EACI,YAAY,EAAE,SAAS,EACvB,SAAS,EAAE,MAAM,GAAG,iCAAiC,EACrD,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,GAAG,YAAY,EACc,EACjC,GAA8B,KAChB;IACd,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5D,IAAA,MAAM,YAAY,GAAG,aAAa,EAAE,CAAC;IACrC,MAAM,oBAAoB,GAAG,eAAe,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AAChE,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;AAChD,IAAA,MAAM,aAAa,GAAG,WAAW,EAAE,CAAC;AACpC,IAAA,MAAM,mBAAmB,GAAG,QAAQ,IAAI,aAAa,CAAC;IACtD,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC;;IAGzD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GACrE,gBAAgB,CAAW,mBAAmB,CAAC,CAAC;IAEpD,iBAAiB,CAAC,qBAAqB,EAAE,SAAS,CAAC,OAAO,EAAE,MAAK;AAC7D,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,OAAO,KAAK,CAAC;SAChB;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;AAChB,KAAC,CAAC,CAAC;AAEH,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,MAAK;AACpC,QAAA,IAAI,mBAAmB,IAAI,QAAQ,EAAE;YACjC,OAAO;SACV;QACD,OAAO,IAAI,CAAC;QACZ,iBAAiB,CAAC,IAAI,CAAC,CAAC;KAC3B,EAAE,CAAC,mBAAmB,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAE7C,QACIA,IACI,CAAA,KAAA,EAAA,EAAA,GAAG,EAAE,oBAAoB,EACzB,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,GAAG,SAAS,EAAE,CAAC,EAC7E,KAAK,EAAE,EAAE,QAAQ,EAAE,EAEnB,QAAA,EAAA,CAAAC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,cAAc,EAAE,CAAC,EACnF,QAAA,EAAAA,GAAA,CAAC,OAAO,EAAA,EAAA,GACA,YAAY;;oBAEhB,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EAAA,YAAA,EACF,SAAS,EAAA,SAAA,EACZ,MAAM,EACf,QAAQ,EAAE,mBAAmB,EAAA,CAC/B,EACA,CAAA,EACNA,GACI,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE;AACpC,oBAAA,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,cAAc;AACvC,iBAAA,CAAC,YAEFA,GAAC,CAAA,SAAS,EACN,EAAA,IAAI,EAAE,IAAI,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ,EAC3C,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,YAAY,EACxB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACL,SAAA,EAAA,MAAM,EACf,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,EAC9D,YAAY,EAAC,KAAK,EAClB,IAAI,EAAC,UAAU,EAAA,eAAA,EACA,QAAQ,EAAA,YAAA,EACX,SAAS,EACH,mBAAA,EAAA,MAAM,GAE1B,EACA,CAAA,CAAA,EAAA,CACJ,EACR;AACN,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,UAAU,CAA8C,4BAA4B,EAAE;AAElH,mBAAmB,CAAC,WAAW,GAAG,qBAAqB;;;;"}
@@ -0,0 +1,3 @@
1
+ import { SelectUncontrolledTriggerProps } from '@hh.ru/magritte-ui-new-select/types';
2
+ declare const SelectTrigger: import("react").ForwardRefExoticComponent<SelectUncontrolledTriggerProps & import("react").RefAttributes<HTMLElement>>;
3
+ export { SelectTrigger };
@@ -0,0 +1,42 @@
1
+ import './index.css';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { forwardRef } from 'react';
4
+ import { useDisabled } from '@hh.ru/magritte-common-use-disabled';
5
+ import { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';
6
+ import { useFocusCandidate, FocusTier } from './internal/focusOrchestrator.js';
7
+ import { useTriggerRef, useSelectTrigger } from './useSelectTrigger.js';
8
+ import { Trigger } from '@hh.ru/magritte-ui-trigger';
9
+ import './internal/utils.js';
10
+ import '@hh.ru/magritte-common-keyboard';
11
+ import './internal/SelectDataProvider.js';
12
+ import '@hh.ru/magritte-common-data-provider';
13
+ import './internal/useDataProvider.js';
14
+ import './internal/SearchStateContext.js';
15
+ import './internal/VisibilityContext.js';
16
+ import './internal/SelectStateContext.js';
17
+ import './internal/ConfigContext.js';
18
+ import './internal/SelectStore.js';
19
+ import './internal/slots.js';
20
+ import '@hh.ru/magritte-internal-slot-registry';
21
+
22
+ const SelectTriggerComponent = ({ 'data-qa': dataQa = 'magritte-select-activator', disabled, ...triggerProps }, ref) => {
23
+ const activatorRef = useTriggerRef();
24
+ const activatorRefCallback = useMultipleRefs(activatorRef, ref);
25
+ const forceDisabled = useDisabled();
26
+ const isComponentDisabled = disabled || forceDisabled;
27
+ const { onKeyDown, onChange, onBlur, expanded, onClear, values, onFocus } = useSelectTrigger(isComponentDisabled);
28
+ useFocusCandidate('default-trigger', FocusTier.Trigger, () => {
29
+ const trigger = activatorRef.current;
30
+ if (!trigger || isComponentDisabled) {
31
+ return false;
32
+ }
33
+ trigger.focus();
34
+ return true;
35
+ });
36
+ return (jsx(Trigger, { ...triggerProps, ref: activatorRefCallback, role: 'combobox', disabled: isComponentDisabled, "data-qa": dataQa, expanded: expanded, onChange: onChange, onBlur: onBlur, onClear: onClear, onFocus: onFocus, onKeyDown: onKeyDown, values: values }));
37
+ };
38
+ const SelectTrigger = forwardRef(SelectTriggerComponent);
39
+ SelectTrigger.displayName = 'SelectTrigger';
40
+
41
+ export { SelectTrigger };
42
+ //# sourceMappingURL=SelectTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectTrigger.js","sources":["src/SelectTrigger.tsx"],"sourcesContent":["import { ReactElement, forwardRef, ForwardedRef } from 'react';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\nimport { useDisabled } from '@hh.ru/magritte-common-use-disabled';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { FocusTier, useFocusCandidate } from '@hh.ru/magritte-ui-new-select/internal/focusOrchestrator';\nimport { SelectUncontrolledTriggerProps } from '@hh.ru/magritte-ui-new-select/types';\nimport { useSelectTrigger, useTriggerRef } from '@hh.ru/magritte-ui-new-select/useSelectTrigger';\nimport { Trigger } from '@hh.ru/magritte-ui-trigger';\n\nconst SelectTriggerComponent = <DataType extends StaticDataFetcherItem>(\n { 'data-qa': dataQa = 'magritte-select-activator', disabled, ...triggerProps }: SelectUncontrolledTriggerProps,\n ref: ForwardedRef<HTMLElement>\n): ReactElement => {\n const activatorRef = useTriggerRef();\n const activatorRefCallback = useMultipleRefs(activatorRef, ref);\n const forceDisabled = useDisabled();\n const isComponentDisabled = disabled || forceDisabled;\n\n const { onKeyDown, onChange, onBlur, expanded, onClear, values, onFocus } =\n useSelectTrigger<DataType>(isComponentDisabled);\n\n useFocusCandidate('default-trigger', FocusTier.Trigger, () => {\n const trigger = activatorRef.current;\n if (!trigger || isComponentDisabled) {\n return false;\n }\n trigger.focus();\n return true;\n });\n\n return (\n <Trigger\n {...triggerProps}\n ref={activatorRefCallback}\n role={'combobox'}\n disabled={isComponentDisabled}\n data-qa={dataQa}\n expanded={expanded}\n onChange={onChange}\n onBlur={onBlur}\n onClear={onClear}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n values={values}\n // TODO aria-haspopup/aria-controls\n />\n );\n};\n\nconst SelectTrigger = forwardRef<HTMLElement, SelectUncontrolledTriggerProps>(SelectTriggerComponent);\n\nSelectTrigger.displayName = 'SelectTrigger';\n\nexport { SelectTrigger };\n"],"names":["_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;AAUA,MAAM,sBAAsB,GAAG,CAC3B,EAAE,SAAS,EAAE,MAAM,GAAG,2BAA2B,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAkC,EAC9G,GAA8B,KAChB;AACd,IAAA,MAAM,YAAY,GAAG,aAAa,EAAE,CAAC;IACrC,MAAM,oBAAoB,GAAG,eAAe,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AAChE,IAAA,MAAM,aAAa,GAAG,WAAW,EAAE,CAAC;AACpC,IAAA,MAAM,mBAAmB,GAAG,QAAQ,IAAI,aAAa,CAAC;IAEtD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GACrE,gBAAgB,CAAW,mBAAmB,CAAC,CAAC;IAEpD,iBAAiB,CAAC,iBAAiB,EAAE,SAAS,CAAC,OAAO,EAAE,MAAK;AACzD,QAAA,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,OAAO,IAAI,mBAAmB,EAAE;AACjC,YAAA,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,CAAC,KAAK,EAAE,CAAC;AAChB,QAAA,OAAO,IAAI,CAAC;AAChB,KAAC,CAAC,CAAC;IAEH,QACIA,IAAC,OAAO,EAAA,EAAA,GACA,YAAY,EAChB,GAAG,EAAE,oBAAoB,EACzB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,mBAAmB,aACpB,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EAEhB,CAAA,EACJ;AACN,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,UAAU,CAA8C,sBAAsB,EAAE;AAEtG,aAAa,CAAC,WAAW,GAAG,eAAe;;;;"}
@@ -1,2 +1,3 @@
1
+ import './index.css';
1
2
 
2
3
  //# sourceMappingURL=dataProviderTypes.js.map
package/index.css ADDED
@@ -0,0 +1,25 @@
1
+ .magritte-anchor___IFvZk_1-1-1{
2
+ position:relative;
3
+ width:fit-content;
4
+ }
5
+ .magritte-anchor-stretched___L14B-_1-1-1{
6
+ width:100%;
7
+ }
8
+ .magritte-default-view___oT4uN_1-1-1{
9
+ min-width:0;
10
+ }
11
+ .magritte-input-view___TCeV4_1-1-1{
12
+ position:absolute;
13
+ top:0;
14
+ left:0;
15
+ width:100%;
16
+ display:flex;
17
+ min-width:0;
18
+ }
19
+ .magritte-hidden-view___oJ4OI_1-1-1{
20
+ visibility:hidden;
21
+ }
22
+
23
+ .magritte-select-layout___MIlpQ_1-1-1{
24
+ display:contents;
25
+ }
package/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export { Select } from '@hh.ru/magritte-ui-new-select/Select';
2
+ export { useSelectTrigger, useTriggerRef } from '@hh.ru/magritte-ui-new-select/useSelectTrigger';
package/index.js CHANGED
@@ -1,16 +1,28 @@
1
+ import './index.css';
1
2
  export { Select } from './Select.js';
3
+ export { useSelectTrigger, useTriggerRef } from './useSelectTrigger.js';
2
4
  import 'react/jsx-runtime';
3
5
  import 'react';
4
- import './internal/ConfigContext.js';
6
+ import './SelectSearchTrigger.js';
7
+ import 'classnames';
8
+ import '@hh.ru/magritte-common-use-disabled';
9
+ import '@hh.ru/magritte-common-use-multiple-refs';
10
+ import '@hh.ru/magritte-ui-input/BaseInput';
11
+ import './internal/SearchStateContext.js';
5
12
  import './internal/utils.js';
6
13
  import '@hh.ru/magritte-common-keyboard';
7
- import './internal/NavigationContext.js';
14
+ import './internal/focusOrchestrator.js';
15
+ import '@hh.ru/magritte-ui-trigger';
16
+ import './SelectTrigger.js';
17
+ import './internal/ConfigContext.js';
18
+ import './internal/NavigationManagement.js';
19
+ import './internal/slots.js';
20
+ import '@hh.ru/magritte-internal-slot-registry';
21
+ import './internal/useFocusWithin.js';
8
22
  import './internal/SelectDataProvider.js';
9
23
  import '@hh.ru/magritte-common-data-provider';
10
- import './internal/useSearch.js';
24
+ import './internal/useDataProvider.js';
11
25
  import './internal/VisibilityContext.js';
12
26
  import './internal/SelectStateContext.js';
13
- import './internal/useSelectState.js';
14
- import './internal/slots.js';
15
- import '@hh.ru/magritte-internal-slot-registry';
27
+ import './internal/SelectStore.js';
16
28
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -5,12 +5,10 @@ interface ConfigContextProps {
5
5
  maxSelectedOptions?: number;
6
6
  multiple?: boolean;
7
7
  name?: string;
8
- onBlur?: VoidFunction;
9
- onFocus?: VoidFunction;
10
8
  loading?: boolean;
11
9
  }
12
10
  export declare const useSelectConfig: () => ConfigContextProps;
13
- export declare const ConfigProvider: ({ children, commitModel, maxSelectedOptions, multiple, name, onBlur, onFocus, loading, }: ConfigContextProps & {
11
+ export declare const ConfigProvider: ({ children, commitModel, maxSelectedOptions, multiple, name, loading, }: ConfigContextProps & {
14
12
  children: ReactNode;
15
13
  }) => ReactElement;
16
14
  export {};
@@ -1,3 +1,4 @@
1
+ import './../index.css';
1
2
  import { jsx } from 'react/jsx-runtime';
2
3
  import { createContext, useContext, useMemo } from 'react';
3
4
  import { assertSelectContext } from './utils.js';
@@ -8,16 +9,14 @@ const useSelectConfig = () => {
8
9
  return assertSelectContext(useContext(ConfigContext), 'useSelectConfig');
9
10
  };
10
11
  // провайдер внешних/глобальных свойств select
11
- const ConfigProvider = ({ children, commitModel, maxSelectedOptions, multiple, name, onBlur, onFocus, loading, }) => {
12
+ const ConfigProvider = ({ children, commitModel, maxSelectedOptions, multiple, name, loading, }) => {
12
13
  const value = useMemo(() => ({
13
14
  commitModel,
14
15
  maxSelectedOptions,
15
16
  multiple,
16
17
  name,
17
- onBlur,
18
- onFocus,
19
18
  loading,
20
- }), [commitModel, maxSelectedOptions, multiple, name, onBlur, onFocus, loading]);
19
+ }), [commitModel, maxSelectedOptions, multiple, name, loading]);
21
20
  return jsx(ConfigContext.Provider, { value: value, children: children });
22
21
  };
23
22
 
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigContext.js","sources":["src/internal/ConfigContext.tsx"],"sourcesContent":["import { createContext, useContext, useMemo, type ReactNode, type ReactElement } from 'react';\n\nimport { assertSelectContext } from '@hh.ru/magritte-ui-new-select/internal/utils';\nimport { CommitModel } from '@hh.ru/magritte-ui-new-select/types';\n\ninterface ConfigContextProps {\n commitModel: CommitModel;\n maxSelectedOptions?: number;\n multiple?: boolean;\n name?: string;\n onBlur?: VoidFunction;\n onFocus?: VoidFunction;\n loading?: boolean;\n}\n\nconst ConfigContext = createContext<ConfigContextProps | null>(null);\n\nexport const useSelectConfig = (): ConfigContextProps => {\n return assertSelectContext(useContext(ConfigContext), 'useSelectConfig');\n};\n\n// провайдер внешних/глобальных свойств select\nexport const ConfigProvider = ({\n children,\n commitModel,\n maxSelectedOptions,\n multiple,\n name,\n onBlur,\n onFocus,\n loading,\n}: ConfigContextProps & { children: ReactNode }): ReactElement => {\n const value = useMemo<ConfigContextProps>(\n () => ({\n commitModel,\n maxSelectedOptions,\n multiple,\n name,\n onBlur,\n onFocus,\n loading,\n }),\n [commitModel, maxSelectedOptions, multiple, name, onBlur, onFocus, loading]\n );\n\n return <ConfigContext.Provider value={value}>{children}</ConfigContext.Provider>;\n};\n"],"names":["_jsx"],"mappings":";;;;;AAeA,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAC;AAE9D,MAAM,eAAe,GAAG,MAAyB;IACpD,OAAO,mBAAmB,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAC7E,EAAE;AAEF;MACa,cAAc,GAAG,CAAC,EAC3B,QAAQ,EACR,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,OAAO,EACP,OAAO,GACoC,KAAkB;AAC7D,IAAA,MAAM,KAAK,GAAG,OAAO,CACjB,OAAO;QACH,WAAW;QACX,kBAAkB;QAClB,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,OAAO;QACP,OAAO;AACV,KAAA,CAAC,EACF,CAAC,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAC9E,CAAC;IAEF,OAAOA,GAAA,CAAC,aAAa,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,KAAK,EAAA,QAAA,EAAG,QAAQ,EAAA,CAA0B,CAAC;AACrF;;;;"}
1
+ {"version":3,"file":"ConfigContext.js","sources":["src/internal/ConfigContext.tsx"],"sourcesContent":["import { createContext, useContext, useMemo, type ReactNode, type ReactElement } from 'react';\n\nimport { assertSelectContext } from '@hh.ru/magritte-ui-new-select/internal/utils';\nimport { CommitModel } from '@hh.ru/magritte-ui-new-select/types';\n\ninterface ConfigContextProps {\n commitModel: CommitModel;\n maxSelectedOptions?: number;\n multiple?: boolean;\n name?: string;\n loading?: boolean;\n}\n\nconst ConfigContext = createContext<ConfigContextProps | null>(null);\n\nexport const useSelectConfig = (): ConfigContextProps => {\n return assertSelectContext(useContext(ConfigContext), 'useSelectConfig');\n};\n\n// провайдер внешних/глобальных свойств select\nexport const ConfigProvider = ({\n children,\n commitModel,\n maxSelectedOptions,\n multiple,\n name,\n loading,\n}: ConfigContextProps & { children: ReactNode }): ReactElement => {\n const value = useMemo<ConfigContextProps>(\n () => ({\n commitModel,\n maxSelectedOptions,\n multiple,\n name,\n loading,\n }),\n [commitModel, maxSelectedOptions, multiple, name, loading]\n );\n\n return <ConfigContext.Provider value={value}>{children}</ConfigContext.Provider>;\n};\n"],"names":["_jsx"],"mappings":";;;;;AAaA,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAC;AAE9D,MAAM,eAAe,GAAG,MAAyB;IACpD,OAAO,mBAAmB,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAC7E,EAAE;AAEF;AACa,MAAA,cAAc,GAAG,CAAC,EAC3B,QAAQ,EACR,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,IAAI,EACJ,OAAO,GACoC,KAAkB;AAC7D,IAAA,MAAM,KAAK,GAAG,OAAO,CACjB,OAAO;QACH,WAAW;QACX,kBAAkB;QAClB,QAAQ;QACR,IAAI;QACJ,OAAO;AACV,KAAA,CAAC,EACF,CAAC,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAC7D,CAAC;IAEF,OAAOA,GAAA,CAAC,aAAa,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,KAAK,EAAA,QAAA,EAAG,QAAQ,EAAA,CAA0B,CAAC;AACrF;;;;"}
@@ -0,0 +1,8 @@
1
+ import { type ReactNode, type ReactElement } from 'react';
2
+ interface NavigationManagementProps {
3
+ children: ReactNode;
4
+ onFocus: VoidFunction;
5
+ onBlur: VoidFunction;
6
+ }
7
+ export declare const NavigationManagement: ({ children, onFocus, onBlur }: NavigationManagementProps) => ReactElement;
8
+ export {};
@@ -0,0 +1,29 @@
1
+ import './../index.css';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { useCallback } from 'react';
4
+ import { useFocusOrchestrator } from './focusOrchestrator.js';
5
+ import { useSelectElementsValue } from './slots.js';
6
+ import { useFocusWithin } from './useFocusWithin.js';
7
+ import './utils.js';
8
+ import '@hh.ru/magritte-common-keyboard';
9
+ import '@hh.ru/magritte-internal-slot-registry';
10
+
11
+ var styles = {"select-layout":"magritte-select-layout___MIlpQ_1-1-1","selectLayout":"magritte-select-layout___MIlpQ_1-1-1"};
12
+
13
+ const NavigationManagement = ({ children, onFocus, onBlur }) => {
14
+ const focusOrchestrator = useFocusOrchestrator();
15
+ const pickerRef = useSelectElementsValue('pickerRef');
16
+ const activatorRef = useSelectElementsValue('activatorRef');
17
+ const predicateBlur = useCallback((event) => {
18
+ const element = event.relatedTarget;
19
+ if (!activatorRef?.current || !pickerRef?.current) {
20
+ return false;
21
+ }
22
+ return activatorRef.current?.contains(element) || pickerRef.current?.contains(element);
23
+ }, [activatorRef, pickerRef]);
24
+ const focusWithinProps = useFocusWithin(onFocus, onBlur, focusOrchestrator.subscribeStability, predicateBlur);
25
+ return (jsx("div", { className: styles.selectLayout, ...focusWithinProps, children: children }));
26
+ };
27
+
28
+ export { NavigationManagement };
29
+ //# sourceMappingURL=NavigationManagement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavigationManagement.js","sources":["src/internal/NavigationManagement.tsx"],"sourcesContent":["import { type ReactNode, type ReactElement, useCallback } from 'react';\n\nimport { useFocusOrchestrator } from '@hh.ru/magritte-ui-new-select/internal/focusOrchestrator';\nimport { useSelectElementsValue } from '@hh.ru/magritte-ui-new-select/internal/slots';\nimport { useFocusWithin } from '@hh.ru/magritte-ui-new-select/internal/useFocusWithin';\n\nimport styles from './select-layout.less';\n\ninterface NavigationManagementProps {\n children: ReactNode;\n onFocus: VoidFunction;\n onBlur: VoidFunction;\n}\n\nexport const NavigationManagement = ({ children, onFocus, onBlur }: NavigationManagementProps): ReactElement => {\n const focusOrchestrator = useFocusOrchestrator();\n const pickerRef = useSelectElementsValue('pickerRef');\n const activatorRef = useSelectElementsValue('activatorRef');\n const predicateBlur = useCallback(\n (event: FocusEvent) => {\n const element = event.relatedTarget as Node;\n if (!activatorRef?.current || !pickerRef?.current) {\n return false;\n }\n return activatorRef.current?.contains(element) || pickerRef.current?.contains(element);\n },\n [activatorRef, pickerRef]\n );\n const focusWithinProps = useFocusWithin(onFocus, onBlur, focusOrchestrator.subscribeStability, predicateBlur);\n return (\n <div className={styles.selectLayout} {...focusWithinProps}>\n {children}\n </div>\n );\n};\n"],"names":["_jsx"],"mappings":";;;;;;;;;;;AAcO,MAAM,oBAAoB,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAA6B,KAAkB;AAC3G,IAAA,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;AACjD,IAAA,MAAM,SAAS,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;AACtD,IAAA,MAAM,YAAY,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;AAC5D,IAAA,MAAM,aAAa,GAAG,WAAW,CAC7B,CAAC,KAAiB,KAAI;AAClB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAAqB,CAAC;QAC5C,IAAI,CAAC,YAAY,EAAE,OAAO,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;AAC/C,YAAA,OAAO,KAAK,CAAC;SAChB;AACD,QAAA,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3F,KAAC,EACD,CAAC,YAAY,EAAE,SAAS,CAAC,CAC5B,CAAC;AACF,IAAA,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;AAC9G,IAAA,QACIA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,YAAY,EAAA,GAAM,gBAAgB,EAAA,QAAA,EACpD,QAAQ,EAAA,CACP,EACR;AACN;;;;"}
@@ -0,0 +1,10 @@
1
+ import { type ReactNode, type ReactElement, SetStateAction, Dispatch } from 'react';
2
+ interface SearchContextValue {
3
+ searchValue: string;
4
+ setSearchValue: Dispatch<SetStateAction<string>>;
5
+ }
6
+ export declare const useSearchState: () => SearchContextValue;
7
+ export declare const SearchStateProvider: ({ children, searchValue, setSearchValue, }: {
8
+ children: ReactNode;
9
+ } & SearchContextValue) => ReactElement;
10
+ export {};
@@ -0,0 +1,21 @@
1
+ import './../index.css';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { createContext, useContext, useMemo } from 'react';
4
+ import { assertSelectContext } from './utils.js';
5
+ import '@hh.ru/magritte-common-keyboard';
6
+
7
+ const SearchContext = createContext(null);
8
+ const useSearchState = () => {
9
+ return assertSelectContext(useContext(SearchContext), 'useSearchState');
10
+ };
11
+ // стейт поиска
12
+ const SearchStateProvider = ({ children, searchValue, setSearchValue, }) => {
13
+ const value = useMemo(() => ({
14
+ searchValue,
15
+ setSearchValue,
16
+ }), [searchValue, setSearchValue]);
17
+ return jsx(SearchContext.Provider, { value: value, children: children });
18
+ };
19
+
20
+ export { SearchStateProvider, useSearchState };
21
+ //# sourceMappingURL=SearchStateContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchStateContext.js","sources":["src/internal/SearchStateContext.tsx"],"sourcesContent":["import { createContext, useContext, useMemo, type ReactNode, type ReactElement, SetStateAction, Dispatch } from 'react';\n\nimport { assertSelectContext } from '@hh.ru/magritte-ui-new-select/internal/utils';\n\ninterface SearchContextValue {\n searchValue: string;\n setSearchValue: Dispatch<SetStateAction<string>>;\n}\n\nconst SearchContext = createContext<SearchContextValue | null>(null);\n\nexport const useSearchState = (): SearchContextValue => {\n return assertSelectContext(useContext(SearchContext), 'useSearchState');\n};\n\n// стейт поиска\nexport const SearchStateProvider = ({\n children,\n searchValue,\n setSearchValue,\n}: { children: ReactNode } & SearchContextValue): ReactElement => {\n const value = useMemo<SearchContextValue>(\n () => ({\n searchValue,\n setSearchValue,\n }),\n [searchValue, setSearchValue]\n );\n\n return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>;\n};\n"],"names":["_jsx"],"mappings":";;;;;AASA,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAC;AAE9D,MAAM,cAAc,GAAG,MAAyB;IACnD,OAAO,mBAAmB,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC,CAAC;AAC5E,EAAE;AAEF;AACO,MAAM,mBAAmB,GAAG,CAAC,EAChC,QAAQ,EACR,WAAW,EACX,cAAc,GAC6B,KAAkB;AAC7D,IAAA,MAAM,KAAK,GAAG,OAAO,CACjB,OAAO;QACH,WAAW;QACX,cAAc;AACjB,KAAA,CAAC,EACF,CAAC,WAAW,EAAE,cAAc,CAAC,CAChC,CAAC;IAEF,OAAOA,GAAA,CAAC,aAAa,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,KAAK,EAAA,QAAA,EAAG,QAAQ,EAAA,CAA0B,CAAC;AACrF;;;;"}
@@ -1,14 +1,14 @@
1
1
  import { type ReactNode, ReactElement } from 'react';
2
2
  import { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';
3
3
  import { UseDataProviderParams, ErrorState, ErrorTrls, Hints } from '@hh.ru/magritte-ui-new-select/dataProviderTypes';
4
- import { UseSelectSearch } from '@hh.ru/magritte-ui-new-select/internal/useSearch';
4
+ import { type UseDataProvider } from '@hh.ru/magritte-ui-new-select/internal/useDataProvider';
5
5
  import { OnOptionsChangeCallback } from '@hh.ru/magritte-ui-new-select/types';
6
6
  interface DataProviderMetaContextValue {
7
7
  error?: ErrorState;
8
8
  errorTrls?: ErrorTrls;
9
9
  hints?: Hints;
10
10
  }
11
- export declare const useSearch: <DataType extends StaticDataFetcherItem = StaticDataFetcherItem>() => UseSelectSearch<DataType>;
11
+ export declare const useDataProvider: <DataType extends StaticDataFetcherItem = StaticDataFetcherItem>() => UseDataProvider<DataType>;
12
12
  export declare const useDataProviderMeta: () => DataProviderMetaContextValue | undefined;
13
13
  interface SelectDataProviderProps<DataType extends StaticDataFetcherItem> extends UseDataProviderParams<DataType> {
14
14
  children: ReactNode;
@@ -1,13 +1,15 @@
1
+ import './../index.css';
1
2
  import { jsx } from 'react/jsx-runtime';
2
3
  import { createContext, useContext, useMemo } from 'react';
3
4
  import { createStaticDataProvider } from '@hh.ru/magritte-common-data-provider';
4
- import { useSearch as useSearch$1 } from './useSearch.js';
5
+ import { useDataProvider as useDataProvider$1 } from './useDataProvider.js';
5
6
  import { assertSelectContext } from './utils.js';
7
+ import './SearchStateContext.js';
6
8
  import './VisibilityContext.js';
7
9
  import '@hh.ru/magritte-common-keyboard';
8
10
 
9
11
  const DataProviderContext = createContext(null);
10
- const useSearch = () => {
12
+ const useDataProvider = () => {
11
13
  return assertSelectContext(useContext(DataProviderContext), 'useSearch')
12
14
  .searchData;
13
15
  };
@@ -24,7 +26,7 @@ const SelectDataProvider = ({ children, error, errorTrls, hints, onOptionsChange
24
26
  }
25
27
  return dataProviderExternal;
26
28
  }, [dataProviderExternal, options]);
27
- const searchData = useSearch$1(dataProvider, onOptionsChange);
29
+ const searchData = useDataProvider$1(dataProvider, onOptionsChange);
28
30
  const meta = useMemo(() => {
29
31
  if (!error && !errorTrls && !hints) {
30
32
  return undefined;
@@ -35,5 +37,5 @@ const SelectDataProvider = ({ children, error, errorTrls, hints, onOptionsChange
35
37
  return jsx(DataProviderContext.Provider, { value: contextValue, children: children });
36
38
  };
37
39
 
38
- export { SelectDataProvider, useDataProviderMeta, useSearch };
40
+ export { SelectDataProvider, useDataProvider, useDataProviderMeta };
39
41
  //# sourceMappingURL=SelectDataProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectDataProvider.js","sources":["src/internal/SelectDataProvider.tsx"],"sourcesContent":["import { type ReactNode, useMemo, ReactElement, createContext, useContext } from 'react';\n\nimport {\n StaticDataFetcherItem,\n createStaticDataProvider,\n DataProvider as DataProviderType,\n} from '@hh.ru/magritte-common-data-provider';\nimport { UseDataProviderParams, ErrorState, ErrorTrls, Hints } from '@hh.ru/magritte-ui-new-select/dataProviderTypes';\nimport { useSearch as useSearchInternal, UseSelectSearch } from '@hh.ru/magritte-ui-new-select/internal/useSearch';\nimport { assertSelectContext } from '@hh.ru/magritte-ui-new-select/internal/utils';\nimport { OnOptionsChangeCallback } from '@hh.ru/magritte-ui-new-select/types';\n\ninterface DataProviderMetaContextValue {\n error?: ErrorState;\n errorTrls?: ErrorTrls;\n hints?: Hints;\n}\n\ninterface DataProviderContextValue<DataType extends StaticDataFetcherItem> {\n meta?: DataProviderMetaContextValue;\n searchData: UseSelectSearch<DataType>;\n}\n\nconst DataProviderContext = createContext<DataProviderContextValue<StaticDataFetcherItem> | null>(null);\n\nexport const useSearch = <\n DataType extends StaticDataFetcherItem = StaticDataFetcherItem,\n>(): UseSelectSearch<DataType> => {\n return assertSelectContext(useContext(DataProviderContext), 'useSearch')\n .searchData as unknown as UseSelectSearch<DataType>;\n};\n\nexport const useDataProviderMeta = (): DataProviderMetaContextValue | undefined => {\n return assertSelectContext(useContext(DataProviderContext), 'useMeta').meta;\n};\n\ninterface SelectDataProviderProps<DataType extends StaticDataFetcherItem> extends UseDataProviderParams<DataType> {\n children: ReactNode;\n onOptionsChange?: OnOptionsChangeCallback<DataType>;\n}\n\nconst SelectDataProvider = <DataType extends StaticDataFetcherItem>({\n children,\n error,\n errorTrls,\n hints,\n onOptionsChange,\n options,\n dataProvider: dataProviderExternal,\n}: SelectDataProviderProps<DataType>): ReactElement => {\n const dataProvider = useMemo(() => {\n if (!options && !dataProviderExternal) {\n throw new Error(`dataProvider or options must be used within <Select>`);\n }\n if (options) {\n return createStaticDataProvider<DataType>(options);\n }\n return dataProviderExternal as DataProviderType<DataType>;\n }, [dataProviderExternal, options]);\n\n const searchData = useSearchInternal<DataType>(dataProvider, onOptionsChange);\n\n const meta = useMemo<DataProviderMetaContextValue | undefined>(() => {\n if (!error && !errorTrls && !hints) {\n return undefined;\n }\n return { error, errorTrls, hints };\n }, [error, errorTrls, hints]);\n\n const contextValue = useMemo(() => ({ meta, searchData }), [meta, searchData]);\n\n return <DataProviderContext.Provider value={contextValue}>{children}</DataProviderContext.Provider>;\n};\n\nexport { SelectDataProvider };\n"],"names":["useSearchInternal","_jsx"],"mappings":";;;;;;;;AAuBA,MAAM,mBAAmB,GAAG,aAAa,CAAyD,IAAI,CAAC,CAAC;AAEjG,MAAM,SAAS,GAAG,MAEQ;IAC7B,OAAO,mBAAmB,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC;AACnE,SAAA,UAAkD,CAAC;AAC5D,EAAE;AAEK,MAAM,mBAAmB,GAAG,MAA+C;IAC9E,OAAO,mBAAmB,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC;AAChF,EAAE;AAOI,MAAA,kBAAkB,GAAG,CAAyC,EAChE,QAAQ,EACR,KAAK,EACL,SAAS,EACT,KAAK,EACL,eAAe,EACf,OAAO,EACP,YAAY,EAAE,oBAAoB,GACF,KAAkB;AAClD,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,oBAAoB,EAAE;AACnC,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,oDAAA,CAAsD,CAAC,CAAC;SAC3E;QACD,IAAI,OAAO,EAAE;AACT,YAAA,OAAO,wBAAwB,CAAW,OAAO,CAAC,CAAC;SACtD;AACD,QAAA,OAAO,oBAAkD,CAAC;AAC9D,KAAC,EAAE,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAGA,WAAiB,CAAW,YAAY,EAAE,eAAe,CAAC,CAAC;AAE9E,IAAA,MAAM,IAAI,GAAG,OAAO,CAA2C,MAAK;QAChE,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE;AAChC,YAAA,OAAO,SAAS,CAAC;SACpB;AACD,QAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;KACtC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAE9B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAE/E,OAAOC,GAAA,CAAC,mBAAmB,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,YAAY,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAgC,CAAC;AACxG;;;;"}
1
+ {"version":3,"file":"SelectDataProvider.js","sources":["src/internal/SelectDataProvider.tsx"],"sourcesContent":["import { type ReactNode, useMemo, ReactElement, createContext, useContext } from 'react';\n\nimport {\n StaticDataFetcherItem,\n createStaticDataProvider,\n DataProvider as DataProviderType,\n} from '@hh.ru/magritte-common-data-provider';\nimport { UseDataProviderParams, ErrorState, ErrorTrls, Hints } from '@hh.ru/magritte-ui-new-select/dataProviderTypes';\nimport {\n useDataProvider as useDataProviderInternal,\n type UseDataProvider,\n} from '@hh.ru/magritte-ui-new-select/internal/useDataProvider';\nimport { assertSelectContext } from '@hh.ru/magritte-ui-new-select/internal/utils';\nimport { OnOptionsChangeCallback } from '@hh.ru/magritte-ui-new-select/types';\n\ninterface DataProviderMetaContextValue {\n error?: ErrorState;\n errorTrls?: ErrorTrls;\n hints?: Hints;\n}\n\ninterface DataProviderContextValue<DataType extends StaticDataFetcherItem> {\n meta?: DataProviderMetaContextValue;\n searchData: UseDataProvider<DataType>;\n}\n\nconst DataProviderContext = createContext<DataProviderContextValue<StaticDataFetcherItem> | null>(null);\n\nexport const useDataProvider = <\n DataType extends StaticDataFetcherItem = StaticDataFetcherItem,\n>(): UseDataProvider<DataType> => {\n return assertSelectContext(useContext(DataProviderContext), 'useSearch')\n .searchData as unknown as UseDataProvider<DataType>;\n};\n\nexport const useDataProviderMeta = (): DataProviderMetaContextValue | undefined => {\n return assertSelectContext(useContext(DataProviderContext), 'useMeta').meta;\n};\n\ninterface SelectDataProviderProps<DataType extends StaticDataFetcherItem> extends UseDataProviderParams<DataType> {\n children: ReactNode;\n onOptionsChange?: OnOptionsChangeCallback<DataType>;\n}\n\nconst SelectDataProvider = <DataType extends StaticDataFetcherItem>({\n children,\n error,\n errorTrls,\n hints,\n onOptionsChange,\n options,\n dataProvider: dataProviderExternal,\n}: SelectDataProviderProps<DataType>): ReactElement => {\n const dataProvider = useMemo(() => {\n if (!options && !dataProviderExternal) {\n throw new Error(`dataProvider or options must be used within <Select>`);\n }\n if (options) {\n return createStaticDataProvider<DataType>(options);\n }\n return dataProviderExternal as DataProviderType<DataType>;\n }, [dataProviderExternal, options]);\n\n const searchData = useDataProviderInternal<DataType>(dataProvider, onOptionsChange);\n\n const meta = useMemo<DataProviderMetaContextValue | undefined>(() => {\n if (!error && !errorTrls && !hints) {\n return undefined;\n }\n return { error, errorTrls, hints };\n }, [error, errorTrls, hints]);\n\n const contextValue = useMemo(() => ({ meta, searchData }), [meta, searchData]);\n\n return <DataProviderContext.Provider value={contextValue}>{children}</DataProviderContext.Provider>;\n};\n\nexport { SelectDataProvider };\n"],"names":["useDataProviderInternal","_jsx"],"mappings":";;;;;;;;;AA0BA,MAAM,mBAAmB,GAAG,aAAa,CAAyD,IAAI,CAAC,CAAC;AAEjG,MAAM,eAAe,GAAG,MAEE;IAC7B,OAAO,mBAAmB,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC;AACnE,SAAA,UAAkD,CAAC;AAC5D,EAAE;AAEK,MAAM,mBAAmB,GAAG,MAA+C;IAC9E,OAAO,mBAAmB,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC;AAChF,EAAE;AAOI,MAAA,kBAAkB,GAAG,CAAyC,EAChE,QAAQ,EACR,KAAK,EACL,SAAS,EACT,KAAK,EACL,eAAe,EACf,OAAO,EACP,YAAY,EAAE,oBAAoB,GACF,KAAkB;AAClD,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,oBAAoB,EAAE;AACnC,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,oDAAA,CAAsD,CAAC,CAAC;SAC3E;QACD,IAAI,OAAO,EAAE;AACT,YAAA,OAAO,wBAAwB,CAAW,OAAO,CAAC,CAAC;SACtD;AACD,QAAA,OAAO,oBAAkD,CAAC;AAC9D,KAAC,EAAE,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAGA,iBAAuB,CAAW,YAAY,EAAE,eAAe,CAAC,CAAC;AAEpF,IAAA,MAAM,IAAI,GAAG,OAAO,CAA2C,MAAK;QAChE,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE;AAChC,YAAA,OAAO,SAAS,CAAC;SACpB;AACD,QAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;KACtC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAE9B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAE/E,OAAOC,GAAA,CAAC,mBAAmB,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,YAAY,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAgC,CAAC;AACxG;;;;"}
@@ -1,13 +1,13 @@
1
1
  import { type ReactNode, type ReactElement } from 'react';
2
2
  import { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';
3
- import { UseSelectState } from '@hh.ru/magritte-ui-new-select/internal/useSelectState';
3
+ import { SelectStore } from '@hh.ru/magritte-ui-new-select/internal/SelectStore';
4
4
  import { ValueTypeHelper } from '@hh.ru/magritte-ui-new-select/types';
5
- export declare const useSelectState: <MultipleType extends boolean = boolean, DataType extends StaticDataFetcherItem = StaticDataFetcherItem>() => UseSelectState<MultipleType, DataType>;
6
- interface SelectStateProviderProps<MultipleType extends boolean, DataType extends StaticDataFetcherItem> {
5
+ export declare const useSelectStore: <DataType extends StaticDataFetcherItem>() => SelectStore<DataType>;
6
+ export declare const useSelected: <DataType extends StaticDataFetcherItem>(store: SelectStore<DataType>) => readonly DataType[];
7
+ interface SelectStateProviderNewProps<MultipleType extends boolean, DataType extends StaticDataFetcherItem> {
7
8
  children: ReactNode;
8
9
  onChange?: (value: ValueTypeHelper<MultipleType, DataType>) => void;
9
- onSelectOption?: (values: DataType[]) => void;
10
10
  value?: ValueTypeHelper<MultipleType, DataType>;
11
11
  }
12
- export declare const SelectStateProvider: <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({ children, onChange, onSelectOption, value, }: SelectStateProviderProps<MultipleType, DataType>) => ReactElement;
12
+ export declare const SelectStateProvider: <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({ children, onChange, value: valueOrValuesExternal, }: SelectStateProviderNewProps<MultipleType, DataType>) => ReactElement;
13
13
  export {};