matsuri-ui-base 0.3.1-alpha-1725854469662-28b3fb8.0 → 0.3.1-alpha-1727461845773-fe061b9.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.
@@ -9,6 +9,7 @@ var useOnClickOutside = (ref, handler) => {
9
9
  }
10
10
  var listener = event => {
11
11
  if (Array.isArray(ref)) {
12
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
12
13
  for (var i = 0; i < ref.length; i++) {
13
14
  var element = ref[i].current;
14
15
  // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。
@@ -66,16 +67,19 @@ var getSearch = (items, query) => {
66
67
  }
67
68
  res.length = c;
68
69
  res.sort((a, b) => {
70
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
69
71
  if (a.score <= b.score) {
70
72
  return 1;
71
73
  } else {
72
74
  return -1;
73
75
  }
74
76
  });
77
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
75
78
  return res;
76
79
  };
77
80
  var dispatchChangeEvent = (element, value) => {
78
81
  var _Object$getOwnPropert;
82
+ // eslint-disable-next-line @typescript-eslint/unbound-method
79
83
  var nativeInputValueSetter = (_Object$getOwnPropert = Object.getOwnPropertyDescriptor(element.tagName.toLowerCase() === "input" ? HTMLInputElement.prototype : HTMLTextAreaElement.prototype, "value")) == null ? void 0 : _Object$getOwnPropert.set;
80
84
  nativeInputValueSetter == null || nativeInputValueSetter.call(element, value);
81
85
  element.dispatchEvent(new Event("change", {
@@ -83,6 +87,7 @@ var dispatchChangeEvent = (element, value) => {
83
87
  }));
84
88
  };
85
89
  function ownerDocument(node) {
90
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
86
91
  return (node == null ? void 0 : node.ownerDocument) || document;
87
92
  }
88
93
  var nextItem = (list, item) => {
@@ -121,10 +126,12 @@ var moveFocus = (list, currentFocus, traversalFunction) => {
121
126
  export var filterSelectOptionsByQuery = (options, query) => {
122
127
  var result = getSearch(options.map(option => {
123
128
  return _extends({}, option, {
129
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
124
130
  keys: option.keys || [option.label],
125
131
  content: option.value
126
132
  });
127
133
  }), query);
134
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
128
135
  return result;
129
136
  };
130
137
  var defaultLoadOptions = /*#__PURE__*/function () {
@@ -140,6 +147,7 @@ var defaultLoadOptions = /*#__PURE__*/function () {
140
147
  return options;
141
148
  }
142
149
  var result = filterSelectOptionsByQuery(options, query);
150
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
143
151
  return result.length ? result : options;
144
152
  });
145
153
  return function defaultLoadOptions(_x) {
@@ -213,7 +221,9 @@ export var useSelectField = args => {
213
221
  }, [name, required, value]);
214
222
  var displayValue = useMemo(() => {
215
223
  var _ref5, _selectedOptionsCache;
216
- return (_ref5 = ((_selectedOptionsCache = selectedOptionsCache.current) == null ? void 0 : _selectedOptionsCache.find(option => option.value === value)) || (options == null ? void 0 : options.find(option => option.value === value))) == null ? void 0 : _ref5.label;
224
+ return (_ref5 = ((_selectedOptionsCache = selectedOptionsCache.current) == null ? void 0 : _selectedOptionsCache.find(option => option.value === value
225
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
226
+ )) || (options == null ? void 0 : options.find(option => option.value === value))) == null ? void 0 : _ref5.label;
217
227
  }, [options, value]);
218
228
  var rootProps = useMemo(() => {
219
229
  return {
@@ -246,6 +256,7 @@ export var useSelectField = args => {
246
256
  onChange: event => {
247
257
  var query = event.currentTarget.value;
248
258
  var value = treatQueryAsValue ? query : undefined;
259
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
249
260
  updateQuery(query, value);
250
261
  if (treatQueryAsValue) {
251
262
  updateValue({
@@ -279,6 +290,7 @@ export var useSelectField = args => {
279
290
  if (key === "Delete" || key === "Backspace") {
280
291
  if (query === "") {
281
292
  setValue(undefined);
293
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
282
294
  updateOptions("", undefined);
283
295
  }
284
296
  } else if (key === "ArrowDown") {
@@ -341,6 +353,7 @@ export var useSelectField = args => {
341
353
  if (onSelectOption) {
342
354
  onSelectOption(option);
343
355
  }
356
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
344
357
  updateQuery("", option.value);
345
358
  if (blurOnSelect === false) {
346
359
  var _pseudoInputRef$curre2;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","useOnClickOutside","ref","handler","undefined","listener","event","Array","isArray","i","length","element","current","contains","composedPath","document","addEventListener","removeEventListener","getSearch","items","query","copy","slice","len","key","toLowerCase","c","tmp","res","j","index","keylen","keys","indexOf","score","_extends","sort","a","b","dispatchChangeEvent","value","_Object$getOwnPropert","nativeInputValueSetter","Object","getOwnPropertyDescriptor","tagName","HTMLInputElement","prototype","HTMLTextAreaElement","set","call","dispatchEvent","Event","bubbles","ownerDocument","node","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","nextFocus","disabledFocus","disabled","getAttribute","focus","filterSelectOptionsByQuery","options","result","map","option","label","content","defaultLoadOptions","_ref2","_asyncToGenerator","_ref","_x","apply","arguments","useSelectField","args","readOnly","name","required","propsOptions","loadOptions","treatQueryAsValue","blurOnSelect","defaultValue","onChangeOption","onSelectOption","open","setOpen","setQuery","setValue","selectedOptionsCache","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateOptions","_ref3","selectedOptions","_x2","_x3","updateQuery","_ref4","_x4","_x5","inputProps","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","_pseudoInputRef$curre","currentTarget","blur","displayValue","_ref5","_selectedOptionsCache","find","rootProps","updateValue","pseudoInputProps","onChange","onClick","activeElement","onBlur","onKeyDown","preventDefault","nativeEvent","isComposing","listProps","role","listItems","selected","props","_pseudoInputRef$curre2","click","openList"],"sources":["../../../src/SelectField/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst useOnClickOutside = (\n ref: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n handler?: (event: MouseEvent | TouchEvent) => void,\n) => {\n useEffect(() => {\n if (!handler) {\n return undefined;\n }\n const listener = (event: MouseEvent | TouchEvent) => {\n if (Array.isArray(ref)) {\n for (let i = 0; i < ref.length; i++) {\n const element = ref[i].current;\n // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。\n if (element?.contains(event.composedPath()[0] as Node)) {\n return;\n }\n }\n } else {\n if (\n !ref.current ||\n ref.current.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nconst getSearch = <\n T extends {\n keys: string[];\n },\n>(\n items: T[],\n query: string,\n) => {\n const copy = items.slice();\n const len = items.length;\n const key = query.toLowerCase();\n let i = -1;\n let c = 0;\n let tmp: {\n keys: string[];\n };\n const res = new Array(len);\n while (++i !== len) {\n tmp = copy[i];\n /**\n * Caluculate Minimum Index\n */\n let j = -1;\n let index = -1;\n const keylen = tmp.keys.length;\n let current;\n while (++j !== keylen) {\n current = tmp.keys[j].toLowerCase().indexOf(key);\n if (index === -1 || (current !== -1 && current < index)) {\n index = current;\n }\n }\n /**\n * Caluculate Score\n */\n const score = index > -1 ? 1 / (index + 1) : 0;\n if (score > 0) {\n res[c++] = { ...tmp, score };\n }\n }\n\n res.length = c;\n res.sort((a, b) => {\n if (a.score <= b.score) {\n return 1;\n } else {\n return -1;\n }\n });\n\n return res;\n};\n\nconst dispatchChangeEvent = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value?: string | number,\n) => {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n element.tagName.toLowerCase() === \"input\"\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype,\n \"value\",\n )?.set;\n\n nativeInputValueSetter?.call(element, value);\n\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\n\nfunction ownerDocument(node: Node | null | undefined): Document {\n return node?.ownerDocument || document;\n}\n\ntype TraversalFunction = (\n list: HTMLUListElement,\n item?: Element | null,\n) => ChildNode | null;\n\nconst nextItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item?.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\n\nconst previousItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item?.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\n\nconst moveFocus = (\n list: HTMLUListElement,\n currentFocus: Element | null,\n traversalFunction: TraversalFunction,\n) => {\n let nextFocus = traversalFunction(list, currentFocus) as HTMLElement | null;\n while (nextFocus) {\n if (\n currentFocus === null\n ? nextFocus === list.lastChild\n : nextFocus === currentFocus\n ) {\n break;\n }\n const disabledFocus =\n (nextFocus as HTMLInputElement).disabled ||\n nextFocus.getAttribute(\"aria-disabled\") === \"true\";\n if (disabledFocus) {\n nextFocus = traversalFunction(list, nextFocus) as HTMLElement;\n } else {\n nextFocus.focus();\n break;\n }\n }\n};\n\nexport const filterSelectOptionsByQuery = <\n T extends SelectOptionValue = SelectOptionValue,\n>(\n options: T[],\n query: string,\n) => {\n const result = getSearch(\n options.map((option) => {\n return {\n ...option,\n\n keys: option.keys || [option.label],\n content: option.value,\n };\n }),\n query,\n );\n\n return result;\n};\n\nconst defaultLoadOptions = async <\n T extends SelectOptionValue = SelectOptionValue,\n>({\n query,\n options,\n}: {\n query: string;\n options?: T[];\n}): Promise<T[] | undefined> => {\n if (options === undefined) {\n return undefined;\n }\n if (query === undefined) {\n return options;\n }\n const result = filterSelectOptionsByQuery(options, query);\n\n return result.length ? result : options;\n};\n\nexport type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> =\n (args: {\n value: string | undefined;\n query: string;\n options?: T[];\n selectedOptions?: T[];\n }) => Promise<T[] | undefined>;\n\nexport interface SelectOptionValue {\n value: string | undefined;\n label: string;\n keys?: string[];\n [key: string]: unknown;\n}\n\nexport interface UseSelectFieldArgs<T extends SelectOptionValue> {\n /**\n * 選択肢の初期値を指定する。\n */\n defaultValue?: string;\n /**\n * 選択肢の選択が可能かどうか指定する。\n * @default false\n */\n readOnly?: boolean;\n /**\n * 選択肢の選択が必須かどうか指定する。\n * @default false\n */\n required?: boolean;\n /**\n * input要素に渡したいname属性を指定する。\n */\n name?: string;\n /**\n * queryに応じて選択肢をロードする関数を指定する。\n * この関数で返された選択肢が、選択肢として表示される。\n */\n loadOptions?: SelectLoadOptions<T>;\n /**\n * 選択肢を指定する。\n * 各選択肢は、valueとlabel及び任意のプロパティを持つオブジェクトである必要がある。\n */\n options?: T[];\n /**\n * このフラグがtrueの場合、queryもvalueとして扱えるようになる\n * @default false\n */\n treatQueryAsValue?: boolean;\n /**\n * 選択肢が変更された時に呼ばれるコールバック関数を指定する。\n */\n onChangeOption?: (option: T) => void;\n /**\n * 選択肢が選択された時に呼ばれるコールバック関数を指定する。\n * 選択肢が選択されず、選択肢が変更された場合は呼ばれない。\n */\n onSelectOption?: (option: T) => void;\n /**\n * 選択後にinput要素から離脱する\n * @default false\n */\n blurOnSelect?: boolean;\n}\n\ninterface UseSelectFieldResult<T extends SelectOptionValue> {\n /**\n * 表示用の文字列。\n */\n displayValue: string | undefined;\n /**\n * 検索用に入力された文字列。\n */\n query: string;\n /**\n * input要素に渡される値。\n */\n value: string | undefined;\n /**\n * 選択肢のリストを開くかどうか。\n */\n openList: boolean;\n /**\n * 実態となるinput要素に渡すprops\n */\n inputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素に渡すprops\n */\n pseudoInputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 選択肢のリストに渡すprops\n */\n listProps: React.ComponentPropsWithRef<\"ul\">;\n /**\n * 選択肢のリストの各要素に渡すpropsと、各選択肢、及びkeyを持つオブジェクトの配列。\n */\n listItems?: {\n key: string;\n option: T;\n props: React.ComponentPropsWithoutRef<\"li\">;\n }[];\n /**\n * 全ての要素の親となる要素に渡すprops\n */\n rootProps: React.ComponentPropsWithRef<\"div\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素にフォーカスしているかどうかを表すフラグ。\n */\n isFocused: boolean;\n}\n\nexport const useSelectField = <T extends SelectOptionValue>(\n args: UseSelectFieldArgs<T>,\n): UseSelectFieldResult<T> => {\n const {\n readOnly = false,\n name,\n required = false,\n options: propsOptions,\n loadOptions = defaultLoadOptions,\n treatQueryAsValue = false,\n blurOnSelect = false,\n defaultValue = undefined,\n onChangeOption,\n onSelectOption,\n } = args;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [value, setValue] = useState<string | undefined>(defaultValue);\n const selectedOptionsCache = useRef<T[] | undefined>(propsOptions);\n const [options, setOptions] = useState(propsOptions);\n const [isFocused, setIsFocused] = useState(false);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const originalInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const pseudoInputRef = useRef<HTMLInputElement>(null);\n\n const updateOptions = useCallback(\n async (query: string, value: string | undefined) => {\n const options = await loadOptions({\n value,\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions],\n );\n\n const updateQuery = useCallback(\n async (query: string, value: string | undefined) => {\n setQuery(query);\n await updateOptions(query, value);\n },\n [updateOptions],\n );\n\n const inputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: originalInputRef,\n required: required,\n name: name,\n defaultValue: value,\n key: value,\n tabIndex: -1,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n onFocus: (event) => {\n event.currentTarget.blur();\n pseudoInputRef.current?.focus();\n },\n };\n }, [name, required, value]);\n\n const displayValue = useMemo(() => {\n return (\n selectedOptionsCache.current?.find((option) => option.value === value) ||\n options?.find((option) => option.value === value)\n )?.label;\n }, [options, value]);\n\n const rootProps = useMemo(() => {\n return {\n ref: rootRef,\n };\n }, []);\n\n useOnClickOutside([rootRef, listRef], () => {\n setOpen(false);\n });\n\n const updateValue = useCallback(\n (option: T) => {\n const value = option.value;\n setValue(value);\n if (onChangeOption) {\n onChangeOption(option);\n }\n selectedOptionsCache.current = options;\n if (originalInputRef.current) {\n dispatchChangeEvent(originalInputRef.current, value);\n }\n },\n [onChangeOption, options],\n );\n\n const pseudoInputProps = useMemo(() => {\n return {\n ref: pseudoInputRef,\n value: query,\n autoComplete: \"off\" as const,\n autoCorrect: \"off\" as const,\n autoCapitalize: \"none\" as const,\n spellCheck: false,\n tabIndex: 0,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n const query = event.currentTarget.value;\n const value = treatQueryAsValue ? query : undefined;\n\n updateQuery(query, value);\n if (treatQueryAsValue) {\n updateValue({\n label: query,\n value: query,\n } as T);\n }\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n /**\n * ユーザーがフォーカスされている状態で入力要素をクリックするのは、\n * ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。\n */\n if (event.currentTarget === document.activeElement) {\n setOpen(true);\n }\n },\n onFocus: () => {\n if (readOnly !== true) {\n setOpen(true);\n }\n setIsFocused(true);\n },\n onBlur: () => {\n setIsFocused(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { key } = event;\n if (key === \"Delete\" || key === \"Backspace\") {\n if (query === \"\") {\n setValue(undefined);\n\n updateOptions(\"\", undefined);\n }\n } else if (key === \"ArrowDown\") {\n event.preventDefault();\n const list = listRef.current;\n if (list) {\n moveFocus(list, null, nextItem);\n }\n } else if (\n treatQueryAsValue &&\n event.nativeEvent.isComposing === false &&\n key === \"Enter\"\n ) {\n if (treatQueryAsValue) {\n selectedOptionsCache.current = [\n {\n value: query,\n label: query,\n } as T,\n ];\n }\n setOpen(false);\n } else if (event.key.length === 1) {\n setOpen(true);\n }\n },\n };\n }, [\n query,\n treatQueryAsValue,\n updateQuery,\n updateValue,\n readOnly,\n updateOptions,\n ]);\n\n const listProps = useMemo(() => {\n return {\n ref: listRef,\n role: \"listbox\",\n tabIndex: -1,\n onKeyDown: (event: React.KeyboardEvent<HTMLUListElement>) => {\n const key = event.key;\n const list = listRef.current;\n if (list === null) {\n return;\n }\n const currentFocus = ownerDocument(list).activeElement;\n if (key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n } else if (key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n }\n },\n };\n }, []);\n\n const listItems = useMemo(() => {\n return options?.map((option, index) => {\n const selected = option.value === value;\n return {\n key: `${option.value}-${index}`,\n option,\n props: {\n role: \"option\",\n \"aria-selected\": selected,\n /**\n * 何も選択されていないときは、先頭のオプションに飛べるようにする\n */\n tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,\n onClick: () => {\n updateValue(option);\n\n if (onSelectOption) {\n onSelectOption(option);\n }\n\n updateQuery(\"\", option.value);\n if (blurOnSelect === false) {\n pseudoInputRef?.current?.focus();\n }\n setOpen(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLLIElement>) => {\n const key = event.key;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n },\n };\n });\n }, [blurOnSelect, onSelectOption, options, updateQuery, updateValue, value]);\n\n const result = useMemo(() => {\n return {\n displayValue,\n query,\n value,\n openList: open,\n inputProps,\n pseudoInputProps,\n listProps,\n listItems,\n rootProps,\n isFocused: isFocused,\n };\n }, [\n displayValue,\n inputProps,\n listItems,\n listProps,\n open,\n pseudoInputProps,\n query,\n rootProps,\n value,\n isFocused,\n ]);\n return result;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","useOnClickOutside","ref","handler","undefined","listener","event","Array","isArray","i","length","element","current","contains","composedPath","document","addEventListener","removeEventListener","getSearch","items","query","copy","slice","len","key","toLowerCase","c","tmp","res","j","index","keylen","keys","indexOf","score","_extends","sort","a","b","dispatchChangeEvent","value","_Object$getOwnPropert","nativeInputValueSetter","Object","getOwnPropertyDescriptor","tagName","HTMLInputElement","prototype","HTMLTextAreaElement","set","call","dispatchEvent","Event","bubbles","ownerDocument","node","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","nextFocus","disabledFocus","disabled","getAttribute","focus","filterSelectOptionsByQuery","options","result","map","option","label","content","defaultLoadOptions","_ref2","_asyncToGenerator","_ref","_x","apply","arguments","useSelectField","args","readOnly","name","required","propsOptions","loadOptions","treatQueryAsValue","blurOnSelect","defaultValue","onChangeOption","onSelectOption","open","setOpen","setQuery","setValue","selectedOptionsCache","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateOptions","_ref3","selectedOptions","_x2","_x3","updateQuery","_ref4","_x4","_x5","inputProps","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","_pseudoInputRef$curre","currentTarget","blur","displayValue","_ref5","_selectedOptionsCache","find","rootProps","updateValue","pseudoInputProps","onChange","onClick","activeElement","onBlur","onKeyDown","preventDefault","nativeEvent","isComposing","listProps","role","listItems","selected","props","_pseudoInputRef$curre2","click","openList"],"sources":["../../../src/SelectField/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst useOnClickOutside = (\n ref: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n handler?: (event: MouseEvent | TouchEvent) => void,\n) => {\n useEffect(() => {\n if (!handler) {\n return undefined;\n }\n const listener = (event: MouseEvent | TouchEvent) => {\n if (Array.isArray(ref)) {\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ref.length; i++) {\n const element = ref[i].current;\n // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。\n if (element?.contains(event.composedPath()[0] as Node)) {\n return;\n }\n }\n } else {\n if (\n !ref.current ||\n ref.current.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nconst getSearch = <\n T extends {\n keys: string[];\n },\n>(\n items: T[],\n query: string,\n) => {\n const copy = items.slice();\n const len = items.length;\n const key = query.toLowerCase();\n let i = -1;\n let c = 0;\n let tmp: {\n keys: string[];\n };\n const res = new Array(len);\n while (++i !== len) {\n tmp = copy[i];\n /**\n * Caluculate Minimum Index\n */\n let j = -1;\n let index = -1;\n const keylen = tmp.keys.length;\n let current;\n while (++j !== keylen) {\n current = tmp.keys[j].toLowerCase().indexOf(key);\n if (index === -1 || (current !== -1 && current < index)) {\n index = current;\n }\n }\n /**\n * Caluculate Score\n */\n const score = index > -1 ? 1 / (index + 1) : 0;\n if (score > 0) {\n res[c++] = { ...tmp, score };\n }\n }\n\n res.length = c;\n res.sort((a, b) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (a.score <= b.score) {\n return 1;\n } else {\n return -1;\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return res;\n};\n\nconst dispatchChangeEvent = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value?: string | number,\n) => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n element.tagName.toLowerCase() === \"input\"\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype,\n \"value\",\n )?.set;\n\n nativeInputValueSetter?.call(element, value);\n\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\n\nfunction ownerDocument(node: Node | null | undefined): Document {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n return node?.ownerDocument || document;\n}\n\ntype TraversalFunction = (\n list: HTMLUListElement,\n item?: Element | null,\n) => ChildNode | null;\n\nconst nextItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item?.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\n\nconst previousItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item?.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\n\nconst moveFocus = (\n list: HTMLUListElement,\n currentFocus: Element | null,\n traversalFunction: TraversalFunction,\n) => {\n let nextFocus = traversalFunction(list, currentFocus) as HTMLElement | null;\n while (nextFocus) {\n if (\n currentFocus === null\n ? nextFocus === list.lastChild\n : nextFocus === currentFocus\n ) {\n break;\n }\n const disabledFocus =\n (nextFocus as HTMLInputElement).disabled ||\n nextFocus.getAttribute(\"aria-disabled\") === \"true\";\n if (disabledFocus) {\n nextFocus = traversalFunction(list, nextFocus) as HTMLElement;\n } else {\n nextFocus.focus();\n break;\n }\n }\n};\n\nexport const filterSelectOptionsByQuery = <\n T extends SelectOptionValue = SelectOptionValue,\n>(\n options: T[],\n query: string,\n) => {\n const result = getSearch(\n options.map((option) => {\n return {\n ...option,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n keys: option.keys || [option.label],\n content: option.value,\n };\n }),\n query,\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n};\n\nconst defaultLoadOptions = async <\n T extends SelectOptionValue = SelectOptionValue,\n>({\n query,\n options,\n}: {\n query: string;\n options?: T[];\n // eslint-disable-next-line @typescript-eslint/require-await\n}): Promise<T[] | undefined> => {\n if (options === undefined) {\n return undefined;\n }\n if (query === undefined) {\n return options;\n }\n const result = filterSelectOptionsByQuery(options, query);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result.length ? result : options;\n};\n\nexport type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> =\n (args: {\n value: string | undefined;\n query: string;\n options?: T[];\n selectedOptions?: T[];\n }) => Promise<T[] | undefined>;\n\nexport interface SelectOptionValue {\n value: string | undefined;\n label: string;\n keys?: string[];\n [key: string]: unknown;\n}\n\nexport interface UseSelectFieldArgs<T extends SelectOptionValue> {\n /**\n * 選択肢の初期値を指定する。\n */\n defaultValue?: string;\n /**\n * 選択肢の選択が可能かどうか指定する。\n * @default false\n */\n readOnly?: boolean;\n /**\n * 選択肢の選択が必須かどうか指定する。\n * @default false\n */\n required?: boolean;\n /**\n * input要素に渡したいname属性を指定する。\n */\n name?: string;\n /**\n * queryに応じて選択肢をロードする関数を指定する。\n * この関数で返された選択肢が、選択肢として表示される。\n */\n loadOptions?: SelectLoadOptions<T>;\n /**\n * 選択肢を指定する。\n * 各選択肢は、valueとlabel及び任意のプロパティを持つオブジェクトである必要がある。\n */\n options?: T[];\n /**\n * このフラグがtrueの場合、queryもvalueとして扱えるようになる\n * @default false\n */\n treatQueryAsValue?: boolean;\n /**\n * 選択肢が変更された時に呼ばれるコールバック関数を指定する。\n */\n onChangeOption?: (option: T) => void;\n /**\n * 選択肢が選択された時に呼ばれるコールバック関数を指定する。\n * 選択肢が選択されず、選択肢が変更された場合は呼ばれない。\n */\n onSelectOption?: (option: T) => void;\n /**\n * 選択後にinput要素から離脱する\n * @default false\n */\n blurOnSelect?: boolean;\n}\n\ninterface UseSelectFieldResult<T extends SelectOptionValue> {\n /**\n * 表示用の文字列。\n */\n displayValue: string | undefined;\n /**\n * 検索用に入力された文字列。\n */\n query: string;\n /**\n * input要素に渡される値。\n */\n value: string | undefined;\n /**\n * 選択肢のリストを開くかどうか。\n */\n openList: boolean;\n /**\n * 実態となるinput要素に渡すprops\n */\n inputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素に渡すprops\n */\n pseudoInputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 選択肢のリストに渡すprops\n */\n listProps: React.ComponentPropsWithRef<\"ul\">;\n /**\n * 選択肢のリストの各要素に渡すpropsと、各選択肢、及びkeyを持つオブジェクトの配列。\n */\n listItems?: {\n key: string;\n option: T;\n props: React.ComponentPropsWithoutRef<\"li\">;\n }[];\n /**\n * 全ての要素の親となる要素に渡すprops\n */\n rootProps: React.ComponentPropsWithRef<\"div\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素にフォーカスしているかどうかを表すフラグ。\n */\n isFocused: boolean;\n}\n\nexport const useSelectField = <T extends SelectOptionValue>(\n args: UseSelectFieldArgs<T>,\n): UseSelectFieldResult<T> => {\n const {\n readOnly = false,\n name,\n required = false,\n options: propsOptions,\n loadOptions = defaultLoadOptions,\n treatQueryAsValue = false,\n blurOnSelect = false,\n defaultValue = undefined,\n onChangeOption,\n onSelectOption,\n } = args;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [value, setValue] = useState<string | undefined>(defaultValue);\n const selectedOptionsCache = useRef<T[] | undefined>(propsOptions);\n const [options, setOptions] = useState(propsOptions);\n const [isFocused, setIsFocused] = useState(false);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const originalInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const pseudoInputRef = useRef<HTMLInputElement>(null);\n\n const updateOptions = useCallback(\n async (query: string, value: string | undefined) => {\n const options = await loadOptions({\n value,\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions],\n );\n\n const updateQuery = useCallback(\n async (query: string, value: string | undefined) => {\n setQuery(query);\n await updateOptions(query, value);\n },\n [updateOptions],\n );\n\n const inputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: originalInputRef,\n required: required,\n name: name,\n defaultValue: value,\n key: value,\n tabIndex: -1,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n onFocus: (event) => {\n event.currentTarget.blur();\n pseudoInputRef.current?.focus();\n },\n };\n }, [name, required, value]);\n\n const displayValue = useMemo(() => {\n return (\n selectedOptionsCache.current?.find(\n (option) => option.value === value,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n ) || options?.find((option) => option.value === value)\n )?.label;\n }, [options, value]);\n\n const rootProps = useMemo(() => {\n return {\n ref: rootRef,\n };\n }, []);\n\n useOnClickOutside([rootRef, listRef], () => {\n setOpen(false);\n });\n\n const updateValue = useCallback(\n (option: T) => {\n const value = option.value;\n setValue(value);\n if (onChangeOption) {\n onChangeOption(option);\n }\n selectedOptionsCache.current = options;\n if (originalInputRef.current) {\n dispatchChangeEvent(originalInputRef.current, value);\n }\n },\n [onChangeOption, options],\n );\n\n const pseudoInputProps = useMemo(() => {\n return {\n ref: pseudoInputRef,\n value: query,\n autoComplete: \"off\" as const,\n autoCorrect: \"off\" as const,\n autoCapitalize: \"none\" as const,\n spellCheck: false,\n tabIndex: 0,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n const query = event.currentTarget.value;\n const value = treatQueryAsValue ? query : undefined;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(query, value);\n if (treatQueryAsValue) {\n updateValue({\n label: query,\n value: query,\n } as T);\n }\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n /**\n * ユーザーがフォーカスされている状態で入力要素をクリックするのは、\n * ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。\n */\n if (event.currentTarget === document.activeElement) {\n setOpen(true);\n }\n },\n onFocus: () => {\n if (readOnly !== true) {\n setOpen(true);\n }\n setIsFocused(true);\n },\n onBlur: () => {\n setIsFocused(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { key } = event;\n if (key === \"Delete\" || key === \"Backspace\") {\n if (query === \"\") {\n setValue(undefined);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateOptions(\"\", undefined);\n }\n } else if (key === \"ArrowDown\") {\n event.preventDefault();\n const list = listRef.current;\n if (list) {\n moveFocus(list, null, nextItem);\n }\n } else if (\n treatQueryAsValue &&\n event.nativeEvent.isComposing === false &&\n key === \"Enter\"\n ) {\n if (treatQueryAsValue) {\n selectedOptionsCache.current = [\n {\n value: query,\n label: query,\n } as T,\n ];\n }\n setOpen(false);\n } else if (event.key.length === 1) {\n setOpen(true);\n }\n },\n };\n }, [\n query,\n treatQueryAsValue,\n updateQuery,\n updateValue,\n readOnly,\n updateOptions,\n ]);\n\n const listProps = useMemo(() => {\n return {\n ref: listRef,\n role: \"listbox\",\n tabIndex: -1,\n onKeyDown: (event: React.KeyboardEvent<HTMLUListElement>) => {\n const key = event.key;\n const list = listRef.current;\n if (list === null) {\n return;\n }\n const currentFocus = ownerDocument(list).activeElement;\n if (key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n } else if (key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n }\n },\n };\n }, []);\n\n const listItems = useMemo(() => {\n return options?.map((option, index) => {\n const selected = option.value === value;\n return {\n key: `${option.value}-${index}`,\n option,\n props: {\n role: \"option\",\n \"aria-selected\": selected,\n /**\n * 何も選択されていないときは、先頭のオプションに飛べるようにする\n */\n tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,\n onClick: () => {\n updateValue(option);\n\n if (onSelectOption) {\n onSelectOption(option);\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(\"\", option.value);\n if (blurOnSelect === false) {\n pseudoInputRef?.current?.focus();\n }\n setOpen(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLLIElement>) => {\n const key = event.key;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n },\n };\n });\n }, [blurOnSelect, onSelectOption, options, updateQuery, updateValue, value]);\n\n const result = useMemo(() => {\n return {\n displayValue,\n query,\n value,\n openList: open,\n inputProps,\n pseudoInputProps,\n listProps,\n listItems,\n rootProps,\n isFocused: isFocused,\n };\n }, [\n displayValue,\n inputProps,\n listItems,\n listProps,\n open,\n pseudoInputProps,\n query,\n rootProps,\n value,\n isFocused,\n ]);\n return result;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -10,6 +10,7 @@ const useOnClickOutside = (ref, handler) => {
10
10
  }
11
11
  const listener = event => {
12
12
  if (Array.isArray(ref)) {
13
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
13
14
  for (let i = 0; i < ref.length; i++) {
14
15
  const element = ref[i].current;
15
16
  // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。
@@ -68,15 +69,18 @@ const getSearch = (items, query) => {
68
69
  }
69
70
  res.length = c;
70
71
  res.sort((a, b) => {
72
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
71
73
  if (a.score <= b.score) {
72
74
  return 1;
73
75
  } else {
74
76
  return -1;
75
77
  }
76
78
  });
79
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
77
80
  return res;
78
81
  };
79
82
  const dispatchChangeEvent = (element, value) => {
83
+ // eslint-disable-next-line @typescript-eslint/unbound-method
80
84
  const nativeInputValueSetter = Object.getOwnPropertyDescriptor(element.tagName.toLowerCase() === "input" ? HTMLInputElement.prototype : HTMLTextAreaElement.prototype, "value")?.set;
81
85
  nativeInputValueSetter?.call(element, value);
82
86
  element.dispatchEvent(new Event("change", {
@@ -84,6 +88,7 @@ const dispatchChangeEvent = (element, value) => {
84
88
  }));
85
89
  };
86
90
  function ownerDocument(node) {
91
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
87
92
  return node?.ownerDocument || document;
88
93
  }
89
94
  const nextItem = (list, item) => {
@@ -123,10 +128,12 @@ const filterSelectOptionsByQuery = (options, query) => {
123
128
  const result = getSearch(options.map(option => {
124
129
  return {
125
130
  ...option,
131
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
126
132
  keys: option.keys || [option.label],
127
133
  content: option.value
128
134
  };
129
135
  }), query);
136
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
130
137
  return result;
131
138
  };
132
139
  exports.filterSelectOptionsByQuery = filterSelectOptionsByQuery;
@@ -141,6 +148,7 @@ const defaultLoadOptions = async ({
141
148
  return options;
142
149
  }
143
150
  const result = filterSelectOptionsByQuery(options, query);
151
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
144
152
  return result.length ? result : options;
145
153
  };
146
154
  const useSelectField = args => {
@@ -198,7 +206,9 @@ const useSelectField = args => {
198
206
  };
199
207
  }, [name, required, value]);
200
208
  const displayValue = (0, _react.useMemo)(() => {
201
- return (selectedOptionsCache.current?.find(option => option.value === value) || options?.find(option => option.value === value))?.label;
209
+ return (selectedOptionsCache.current?.find(option => option.value === value
210
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
211
+ ) || options?.find(option => option.value === value))?.label;
202
212
  }, [options, value]);
203
213
  const rootProps = (0, _react.useMemo)(() => {
204
214
  return {
@@ -231,6 +241,7 @@ const useSelectField = args => {
231
241
  onChange: event => {
232
242
  const query = event.currentTarget.value;
233
243
  const value = treatQueryAsValue ? query : undefined;
244
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
234
245
  updateQuery(query, value);
235
246
  if (treatQueryAsValue) {
236
247
  updateValue({
@@ -264,6 +275,7 @@ const useSelectField = args => {
264
275
  if (key === "Delete" || key === "Backspace") {
265
276
  if (query === "") {
266
277
  setValue(undefined);
278
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
267
279
  updateOptions("", undefined);
268
280
  }
269
281
  } else if (key === "ArrowDown") {
@@ -326,6 +338,7 @@ const useSelectField = args => {
326
338
  if (onSelectOption) {
327
339
  onSelectOption(option);
328
340
  }
341
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
329
342
  updateQuery("", option.value);
330
343
  if (blurOnSelect === false) {
331
344
  pseudoInputRef?.current?.focus();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_react","require","useOnClickOutside","ref","handler","useEffect","undefined","listener","event","Array","isArray","i","length","element","current","contains","composedPath","document","addEventListener","removeEventListener","getSearch","items","query","copy","slice","len","key","toLowerCase","c","tmp","res","j","index","keylen","keys","indexOf","score","sort","a","b","dispatchChangeEvent","value","nativeInputValueSetter","Object","getOwnPropertyDescriptor","tagName","HTMLInputElement","prototype","HTMLTextAreaElement","set","call","dispatchEvent","Event","bubbles","ownerDocument","node","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","nextFocus","disabledFocus","disabled","getAttribute","focus","filterSelectOptionsByQuery","options","result","map","option","label","content","exports","defaultLoadOptions","useSelectField","args","readOnly","name","required","propsOptions","loadOptions","treatQueryAsValue","blurOnSelect","defaultValue","onChangeOption","onSelectOption","open","setOpen","useState","setQuery","setValue","selectedOptionsCache","useRef","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateOptions","useCallback","selectedOptions","updateQuery","inputProps","useMemo","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","currentTarget","blur","displayValue","find","rootProps","updateValue","pseudoInputProps","onChange","onClick","activeElement","onBlur","onKeyDown","preventDefault","nativeEvent","isComposing","listProps","role","listItems","selected","props","click","openList"],"sources":["../../../src/SelectField/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst useOnClickOutside = (\n ref: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n handler?: (event: MouseEvent | TouchEvent) => void,\n) => {\n useEffect(() => {\n if (!handler) {\n return undefined;\n }\n const listener = (event: MouseEvent | TouchEvent) => {\n if (Array.isArray(ref)) {\n for (let i = 0; i < ref.length; i++) {\n const element = ref[i].current;\n // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。\n if (element?.contains(event.composedPath()[0] as Node)) {\n return;\n }\n }\n } else {\n if (\n !ref.current ||\n ref.current.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nconst getSearch = <\n T extends {\n keys: string[];\n },\n>(\n items: T[],\n query: string,\n) => {\n const copy = items.slice();\n const len = items.length;\n const key = query.toLowerCase();\n let i = -1;\n let c = 0;\n let tmp: {\n keys: string[];\n };\n const res = new Array(len);\n while (++i !== len) {\n tmp = copy[i];\n /**\n * Caluculate Minimum Index\n */\n let j = -1;\n let index = -1;\n const keylen = tmp.keys.length;\n let current;\n while (++j !== keylen) {\n current = tmp.keys[j].toLowerCase().indexOf(key);\n if (index === -1 || (current !== -1 && current < index)) {\n index = current;\n }\n }\n /**\n * Caluculate Score\n */\n const score = index > -1 ? 1 / (index + 1) : 0;\n if (score > 0) {\n res[c++] = { ...tmp, score };\n }\n }\n\n res.length = c;\n res.sort((a, b) => {\n if (a.score <= b.score) {\n return 1;\n } else {\n return -1;\n }\n });\n\n return res;\n};\n\nconst dispatchChangeEvent = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value?: string | number,\n) => {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n element.tagName.toLowerCase() === \"input\"\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype,\n \"value\",\n )?.set;\n\n nativeInputValueSetter?.call(element, value);\n\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\n\nfunction ownerDocument(node: Node | null | undefined): Document {\n return node?.ownerDocument || document;\n}\n\ntype TraversalFunction = (\n list: HTMLUListElement,\n item?: Element | null,\n) => ChildNode | null;\n\nconst nextItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item?.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\n\nconst previousItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item?.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\n\nconst moveFocus = (\n list: HTMLUListElement,\n currentFocus: Element | null,\n traversalFunction: TraversalFunction,\n) => {\n let nextFocus = traversalFunction(list, currentFocus) as HTMLElement | null;\n while (nextFocus) {\n if (\n currentFocus === null\n ? nextFocus === list.lastChild\n : nextFocus === currentFocus\n ) {\n break;\n }\n const disabledFocus =\n (nextFocus as HTMLInputElement).disabled ||\n nextFocus.getAttribute(\"aria-disabled\") === \"true\";\n if (disabledFocus) {\n nextFocus = traversalFunction(list, nextFocus) as HTMLElement;\n } else {\n nextFocus.focus();\n break;\n }\n }\n};\n\nexport const filterSelectOptionsByQuery = <\n T extends SelectOptionValue = SelectOptionValue,\n>(\n options: T[],\n query: string,\n) => {\n const result = getSearch(\n options.map((option) => {\n return {\n ...option,\n\n keys: option.keys || [option.label],\n content: option.value,\n };\n }),\n query,\n );\n\n return result;\n};\n\nconst defaultLoadOptions = async <\n T extends SelectOptionValue = SelectOptionValue,\n>({\n query,\n options,\n}: {\n query: string;\n options?: T[];\n}): Promise<T[] | undefined> => {\n if (options === undefined) {\n return undefined;\n }\n if (query === undefined) {\n return options;\n }\n const result = filterSelectOptionsByQuery(options, query);\n\n return result.length ? result : options;\n};\n\nexport type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> =\n (args: {\n value: string | undefined;\n query: string;\n options?: T[];\n selectedOptions?: T[];\n }) => Promise<T[] | undefined>;\n\nexport interface SelectOptionValue {\n value: string | undefined;\n label: string;\n keys?: string[];\n [key: string]: unknown;\n}\n\nexport interface UseSelectFieldArgs<T extends SelectOptionValue> {\n /**\n * 選択肢の初期値を指定する。\n */\n defaultValue?: string;\n /**\n * 選択肢の選択が可能かどうか指定する。\n * @default false\n */\n readOnly?: boolean;\n /**\n * 選択肢の選択が必須かどうか指定する。\n * @default false\n */\n required?: boolean;\n /**\n * input要素に渡したいname属性を指定する。\n */\n name?: string;\n /**\n * queryに応じて選択肢をロードする関数を指定する。\n * この関数で返された選択肢が、選択肢として表示される。\n */\n loadOptions?: SelectLoadOptions<T>;\n /**\n * 選択肢を指定する。\n * 各選択肢は、valueとlabel及び任意のプロパティを持つオブジェクトである必要がある。\n */\n options?: T[];\n /**\n * このフラグがtrueの場合、queryもvalueとして扱えるようになる\n * @default false\n */\n treatQueryAsValue?: boolean;\n /**\n * 選択肢が変更された時に呼ばれるコールバック関数を指定する。\n */\n onChangeOption?: (option: T) => void;\n /**\n * 選択肢が選択された時に呼ばれるコールバック関数を指定する。\n * 選択肢が選択されず、選択肢が変更された場合は呼ばれない。\n */\n onSelectOption?: (option: T) => void;\n /**\n * 選択後にinput要素から離脱する\n * @default false\n */\n blurOnSelect?: boolean;\n}\n\ninterface UseSelectFieldResult<T extends SelectOptionValue> {\n /**\n * 表示用の文字列。\n */\n displayValue: string | undefined;\n /**\n * 検索用に入力された文字列。\n */\n query: string;\n /**\n * input要素に渡される値。\n */\n value: string | undefined;\n /**\n * 選択肢のリストを開くかどうか。\n */\n openList: boolean;\n /**\n * 実態となるinput要素に渡すprops\n */\n inputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素に渡すprops\n */\n pseudoInputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 選択肢のリストに渡すprops\n */\n listProps: React.ComponentPropsWithRef<\"ul\">;\n /**\n * 選択肢のリストの各要素に渡すpropsと、各選択肢、及びkeyを持つオブジェクトの配列。\n */\n listItems?: {\n key: string;\n option: T;\n props: React.ComponentPropsWithoutRef<\"li\">;\n }[];\n /**\n * 全ての要素の親となる要素に渡すprops\n */\n rootProps: React.ComponentPropsWithRef<\"div\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素にフォーカスしているかどうかを表すフラグ。\n */\n isFocused: boolean;\n}\n\nexport const useSelectField = <T extends SelectOptionValue>(\n args: UseSelectFieldArgs<T>,\n): UseSelectFieldResult<T> => {\n const {\n readOnly = false,\n name,\n required = false,\n options: propsOptions,\n loadOptions = defaultLoadOptions,\n treatQueryAsValue = false,\n blurOnSelect = false,\n defaultValue = undefined,\n onChangeOption,\n onSelectOption,\n } = args;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [value, setValue] = useState<string | undefined>(defaultValue);\n const selectedOptionsCache = useRef<T[] | undefined>(propsOptions);\n const [options, setOptions] = useState(propsOptions);\n const [isFocused, setIsFocused] = useState(false);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const originalInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const pseudoInputRef = useRef<HTMLInputElement>(null);\n\n const updateOptions = useCallback(\n async (query: string, value: string | undefined) => {\n const options = await loadOptions({\n value,\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions],\n );\n\n const updateQuery = useCallback(\n async (query: string, value: string | undefined) => {\n setQuery(query);\n await updateOptions(query, value);\n },\n [updateOptions],\n );\n\n const inputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: originalInputRef,\n required: required,\n name: name,\n defaultValue: value,\n key: value,\n tabIndex: -1,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n onFocus: (event) => {\n event.currentTarget.blur();\n pseudoInputRef.current?.focus();\n },\n };\n }, [name, required, value]);\n\n const displayValue = useMemo(() => {\n return (\n selectedOptionsCache.current?.find((option) => option.value === value) ||\n options?.find((option) => option.value === value)\n )?.label;\n }, [options, value]);\n\n const rootProps = useMemo(() => {\n return {\n ref: rootRef,\n };\n }, []);\n\n useOnClickOutside([rootRef, listRef], () => {\n setOpen(false);\n });\n\n const updateValue = useCallback(\n (option: T) => {\n const value = option.value;\n setValue(value);\n if (onChangeOption) {\n onChangeOption(option);\n }\n selectedOptionsCache.current = options;\n if (originalInputRef.current) {\n dispatchChangeEvent(originalInputRef.current, value);\n }\n },\n [onChangeOption, options],\n );\n\n const pseudoInputProps = useMemo(() => {\n return {\n ref: pseudoInputRef,\n value: query,\n autoComplete: \"off\" as const,\n autoCorrect: \"off\" as const,\n autoCapitalize: \"none\" as const,\n spellCheck: false,\n tabIndex: 0,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n const query = event.currentTarget.value;\n const value = treatQueryAsValue ? query : undefined;\n\n updateQuery(query, value);\n if (treatQueryAsValue) {\n updateValue({\n label: query,\n value: query,\n } as T);\n }\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n /**\n * ユーザーがフォーカスされている状態で入力要素をクリックするのは、\n * ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。\n */\n if (event.currentTarget === document.activeElement) {\n setOpen(true);\n }\n },\n onFocus: () => {\n if (readOnly !== true) {\n setOpen(true);\n }\n setIsFocused(true);\n },\n onBlur: () => {\n setIsFocused(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { key } = event;\n if (key === \"Delete\" || key === \"Backspace\") {\n if (query === \"\") {\n setValue(undefined);\n\n updateOptions(\"\", undefined);\n }\n } else if (key === \"ArrowDown\") {\n event.preventDefault();\n const list = listRef.current;\n if (list) {\n moveFocus(list, null, nextItem);\n }\n } else if (\n treatQueryAsValue &&\n event.nativeEvent.isComposing === false &&\n key === \"Enter\"\n ) {\n if (treatQueryAsValue) {\n selectedOptionsCache.current = [\n {\n value: query,\n label: query,\n } as T,\n ];\n }\n setOpen(false);\n } else if (event.key.length === 1) {\n setOpen(true);\n }\n },\n };\n }, [\n query,\n treatQueryAsValue,\n updateQuery,\n updateValue,\n readOnly,\n updateOptions,\n ]);\n\n const listProps = useMemo(() => {\n return {\n ref: listRef,\n role: \"listbox\",\n tabIndex: -1,\n onKeyDown: (event: React.KeyboardEvent<HTMLUListElement>) => {\n const key = event.key;\n const list = listRef.current;\n if (list === null) {\n return;\n }\n const currentFocus = ownerDocument(list).activeElement;\n if (key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n } else if (key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n }\n },\n };\n }, []);\n\n const listItems = useMemo(() => {\n return options?.map((option, index) => {\n const selected = option.value === value;\n return {\n key: `${option.value}-${index}`,\n option,\n props: {\n role: \"option\",\n \"aria-selected\": selected,\n /**\n * 何も選択されていないときは、先頭のオプションに飛べるようにする\n */\n tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,\n onClick: () => {\n updateValue(option);\n\n if (onSelectOption) {\n onSelectOption(option);\n }\n\n updateQuery(\"\", option.value);\n if (blurOnSelect === false) {\n pseudoInputRef?.current?.focus();\n }\n setOpen(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLLIElement>) => {\n const key = event.key;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n },\n };\n });\n }, [blurOnSelect, onSelectOption, options, updateQuery, updateValue, value]);\n\n const result = useMemo(() => {\n return {\n displayValue,\n query,\n value,\n openList: open,\n inputProps,\n pseudoInputProps,\n listProps,\n listItems,\n rootProps,\n isFocused: isFocused,\n };\n }, [\n displayValue,\n inputProps,\n listItems,\n listProps,\n open,\n pseudoInputProps,\n query,\n rootProps,\n value,\n isFocused,\n ]);\n return result;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_react","require","useOnClickOutside","ref","handler","useEffect","undefined","listener","event","Array","isArray","i","length","element","current","contains","composedPath","document","addEventListener","removeEventListener","getSearch","items","query","copy","slice","len","key","toLowerCase","c","tmp","res","j","index","keylen","keys","indexOf","score","sort","a","b","dispatchChangeEvent","value","nativeInputValueSetter","Object","getOwnPropertyDescriptor","tagName","HTMLInputElement","prototype","HTMLTextAreaElement","set","call","dispatchEvent","Event","bubbles","ownerDocument","node","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","nextFocus","disabledFocus","disabled","getAttribute","focus","filterSelectOptionsByQuery","options","result","map","option","label","content","exports","defaultLoadOptions","useSelectField","args","readOnly","name","required","propsOptions","loadOptions","treatQueryAsValue","blurOnSelect","defaultValue","onChangeOption","onSelectOption","open","setOpen","useState","setQuery","setValue","selectedOptionsCache","useRef","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateOptions","useCallback","selectedOptions","updateQuery","inputProps","useMemo","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","currentTarget","blur","displayValue","find","rootProps","updateValue","pseudoInputProps","onChange","onClick","activeElement","onBlur","onKeyDown","preventDefault","nativeEvent","isComposing","listProps","role","listItems","selected","props","click","openList"],"sources":["../../../src/SelectField/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst useOnClickOutside = (\n ref: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n handler?: (event: MouseEvent | TouchEvent) => void,\n) => {\n useEffect(() => {\n if (!handler) {\n return undefined;\n }\n const listener = (event: MouseEvent | TouchEvent) => {\n if (Array.isArray(ref)) {\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ref.length; i++) {\n const element = ref[i].current;\n // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。\n if (element?.contains(event.composedPath()[0] as Node)) {\n return;\n }\n }\n } else {\n if (\n !ref.current ||\n ref.current.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nconst getSearch = <\n T extends {\n keys: string[];\n },\n>(\n items: T[],\n query: string,\n) => {\n const copy = items.slice();\n const len = items.length;\n const key = query.toLowerCase();\n let i = -1;\n let c = 0;\n let tmp: {\n keys: string[];\n };\n const res = new Array(len);\n while (++i !== len) {\n tmp = copy[i];\n /**\n * Caluculate Minimum Index\n */\n let j = -1;\n let index = -1;\n const keylen = tmp.keys.length;\n let current;\n while (++j !== keylen) {\n current = tmp.keys[j].toLowerCase().indexOf(key);\n if (index === -1 || (current !== -1 && current < index)) {\n index = current;\n }\n }\n /**\n * Caluculate Score\n */\n const score = index > -1 ? 1 / (index + 1) : 0;\n if (score > 0) {\n res[c++] = { ...tmp, score };\n }\n }\n\n res.length = c;\n res.sort((a, b) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (a.score <= b.score) {\n return 1;\n } else {\n return -1;\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return res;\n};\n\nconst dispatchChangeEvent = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value?: string | number,\n) => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n element.tagName.toLowerCase() === \"input\"\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype,\n \"value\",\n )?.set;\n\n nativeInputValueSetter?.call(element, value);\n\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\n\nfunction ownerDocument(node: Node | null | undefined): Document {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n return node?.ownerDocument || document;\n}\n\ntype TraversalFunction = (\n list: HTMLUListElement,\n item?: Element | null,\n) => ChildNode | null;\n\nconst nextItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item?.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\n\nconst previousItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item?.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\n\nconst moveFocus = (\n list: HTMLUListElement,\n currentFocus: Element | null,\n traversalFunction: TraversalFunction,\n) => {\n let nextFocus = traversalFunction(list, currentFocus) as HTMLElement | null;\n while (nextFocus) {\n if (\n currentFocus === null\n ? nextFocus === list.lastChild\n : nextFocus === currentFocus\n ) {\n break;\n }\n const disabledFocus =\n (nextFocus as HTMLInputElement).disabled ||\n nextFocus.getAttribute(\"aria-disabled\") === \"true\";\n if (disabledFocus) {\n nextFocus = traversalFunction(list, nextFocus) as HTMLElement;\n } else {\n nextFocus.focus();\n break;\n }\n }\n};\n\nexport const filterSelectOptionsByQuery = <\n T extends SelectOptionValue = SelectOptionValue,\n>(\n options: T[],\n query: string,\n) => {\n const result = getSearch(\n options.map((option) => {\n return {\n ...option,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n keys: option.keys || [option.label],\n content: option.value,\n };\n }),\n query,\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n};\n\nconst defaultLoadOptions = async <\n T extends SelectOptionValue = SelectOptionValue,\n>({\n query,\n options,\n}: {\n query: string;\n options?: T[];\n // eslint-disable-next-line @typescript-eslint/require-await\n}): Promise<T[] | undefined> => {\n if (options === undefined) {\n return undefined;\n }\n if (query === undefined) {\n return options;\n }\n const result = filterSelectOptionsByQuery(options, query);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result.length ? result : options;\n};\n\nexport type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> =\n (args: {\n value: string | undefined;\n query: string;\n options?: T[];\n selectedOptions?: T[];\n }) => Promise<T[] | undefined>;\n\nexport interface SelectOptionValue {\n value: string | undefined;\n label: string;\n keys?: string[];\n [key: string]: unknown;\n}\n\nexport interface UseSelectFieldArgs<T extends SelectOptionValue> {\n /**\n * 選択肢の初期値を指定する。\n */\n defaultValue?: string;\n /**\n * 選択肢の選択が可能かどうか指定する。\n * @default false\n */\n readOnly?: boolean;\n /**\n * 選択肢の選択が必須かどうか指定する。\n * @default false\n */\n required?: boolean;\n /**\n * input要素に渡したいname属性を指定する。\n */\n name?: string;\n /**\n * queryに応じて選択肢をロードする関数を指定する。\n * この関数で返された選択肢が、選択肢として表示される。\n */\n loadOptions?: SelectLoadOptions<T>;\n /**\n * 選択肢を指定する。\n * 各選択肢は、valueとlabel及び任意のプロパティを持つオブジェクトである必要がある。\n */\n options?: T[];\n /**\n * このフラグがtrueの場合、queryもvalueとして扱えるようになる\n * @default false\n */\n treatQueryAsValue?: boolean;\n /**\n * 選択肢が変更された時に呼ばれるコールバック関数を指定する。\n */\n onChangeOption?: (option: T) => void;\n /**\n * 選択肢が選択された時に呼ばれるコールバック関数を指定する。\n * 選択肢が選択されず、選択肢が変更された場合は呼ばれない。\n */\n onSelectOption?: (option: T) => void;\n /**\n * 選択後にinput要素から離脱する\n * @default false\n */\n blurOnSelect?: boolean;\n}\n\ninterface UseSelectFieldResult<T extends SelectOptionValue> {\n /**\n * 表示用の文字列。\n */\n displayValue: string | undefined;\n /**\n * 検索用に入力された文字列。\n */\n query: string;\n /**\n * input要素に渡される値。\n */\n value: string | undefined;\n /**\n * 選択肢のリストを開くかどうか。\n */\n openList: boolean;\n /**\n * 実態となるinput要素に渡すprops\n */\n inputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素に渡すprops\n */\n pseudoInputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 選択肢のリストに渡すprops\n */\n listProps: React.ComponentPropsWithRef<\"ul\">;\n /**\n * 選択肢のリストの各要素に渡すpropsと、各選択肢、及びkeyを持つオブジェクトの配列。\n */\n listItems?: {\n key: string;\n option: T;\n props: React.ComponentPropsWithoutRef<\"li\">;\n }[];\n /**\n * 全ての要素の親となる要素に渡すprops\n */\n rootProps: React.ComponentPropsWithRef<\"div\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素にフォーカスしているかどうかを表すフラグ。\n */\n isFocused: boolean;\n}\n\nexport const useSelectField = <T extends SelectOptionValue>(\n args: UseSelectFieldArgs<T>,\n): UseSelectFieldResult<T> => {\n const {\n readOnly = false,\n name,\n required = false,\n options: propsOptions,\n loadOptions = defaultLoadOptions,\n treatQueryAsValue = false,\n blurOnSelect = false,\n defaultValue = undefined,\n onChangeOption,\n onSelectOption,\n } = args;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [value, setValue] = useState<string | undefined>(defaultValue);\n const selectedOptionsCache = useRef<T[] | undefined>(propsOptions);\n const [options, setOptions] = useState(propsOptions);\n const [isFocused, setIsFocused] = useState(false);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const originalInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const pseudoInputRef = useRef<HTMLInputElement>(null);\n\n const updateOptions = useCallback(\n async (query: string, value: string | undefined) => {\n const options = await loadOptions({\n value,\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions],\n );\n\n const updateQuery = useCallback(\n async (query: string, value: string | undefined) => {\n setQuery(query);\n await updateOptions(query, value);\n },\n [updateOptions],\n );\n\n const inputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: originalInputRef,\n required: required,\n name: name,\n defaultValue: value,\n key: value,\n tabIndex: -1,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n onFocus: (event) => {\n event.currentTarget.blur();\n pseudoInputRef.current?.focus();\n },\n };\n }, [name, required, value]);\n\n const displayValue = useMemo(() => {\n return (\n selectedOptionsCache.current?.find(\n (option) => option.value === value,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n ) || options?.find((option) => option.value === value)\n )?.label;\n }, [options, value]);\n\n const rootProps = useMemo(() => {\n return {\n ref: rootRef,\n };\n }, []);\n\n useOnClickOutside([rootRef, listRef], () => {\n setOpen(false);\n });\n\n const updateValue = useCallback(\n (option: T) => {\n const value = option.value;\n setValue(value);\n if (onChangeOption) {\n onChangeOption(option);\n }\n selectedOptionsCache.current = options;\n if (originalInputRef.current) {\n dispatchChangeEvent(originalInputRef.current, value);\n }\n },\n [onChangeOption, options],\n );\n\n const pseudoInputProps = useMemo(() => {\n return {\n ref: pseudoInputRef,\n value: query,\n autoComplete: \"off\" as const,\n autoCorrect: \"off\" as const,\n autoCapitalize: \"none\" as const,\n spellCheck: false,\n tabIndex: 0,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n const query = event.currentTarget.value;\n const value = treatQueryAsValue ? query : undefined;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(query, value);\n if (treatQueryAsValue) {\n updateValue({\n label: query,\n value: query,\n } as T);\n }\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n /**\n * ユーザーがフォーカスされている状態で入力要素をクリックするのは、\n * ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。\n */\n if (event.currentTarget === document.activeElement) {\n setOpen(true);\n }\n },\n onFocus: () => {\n if (readOnly !== true) {\n setOpen(true);\n }\n setIsFocused(true);\n },\n onBlur: () => {\n setIsFocused(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { key } = event;\n if (key === \"Delete\" || key === \"Backspace\") {\n if (query === \"\") {\n setValue(undefined);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateOptions(\"\", undefined);\n }\n } else if (key === \"ArrowDown\") {\n event.preventDefault();\n const list = listRef.current;\n if (list) {\n moveFocus(list, null, nextItem);\n }\n } else if (\n treatQueryAsValue &&\n event.nativeEvent.isComposing === false &&\n key === \"Enter\"\n ) {\n if (treatQueryAsValue) {\n selectedOptionsCache.current = [\n {\n value: query,\n label: query,\n } as T,\n ];\n }\n setOpen(false);\n } else if (event.key.length === 1) {\n setOpen(true);\n }\n },\n };\n }, [\n query,\n treatQueryAsValue,\n updateQuery,\n updateValue,\n readOnly,\n updateOptions,\n ]);\n\n const listProps = useMemo(() => {\n return {\n ref: listRef,\n role: \"listbox\",\n tabIndex: -1,\n onKeyDown: (event: React.KeyboardEvent<HTMLUListElement>) => {\n const key = event.key;\n const list = listRef.current;\n if (list === null) {\n return;\n }\n const currentFocus = ownerDocument(list).activeElement;\n if (key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n } else if (key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n }\n },\n };\n }, []);\n\n const listItems = useMemo(() => {\n return options?.map((option, index) => {\n const selected = option.value === value;\n return {\n key: `${option.value}-${index}`,\n option,\n props: {\n role: \"option\",\n \"aria-selected\": selected,\n /**\n * 何も選択されていないときは、先頭のオプションに飛べるようにする\n */\n tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,\n onClick: () => {\n updateValue(option);\n\n if (onSelectOption) {\n onSelectOption(option);\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(\"\", option.value);\n if (blurOnSelect === false) {\n pseudoInputRef?.current?.focus();\n }\n setOpen(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLLIElement>) => {\n const key = event.key;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n },\n };\n });\n }, [blurOnSelect, onSelectOption, options, updateQuery, updateValue, value]);\n\n const result = useMemo(() => {\n return {\n displayValue,\n query,\n value,\n openList: open,\n inputProps,\n pseudoInputProps,\n listProps,\n listItems,\n rootProps,\n isFocused: isFocused,\n };\n }, [\n displayValue,\n inputProps,\n listItems,\n listProps,\n open,\n pseudoInputProps,\n query,\n rootProps,\n value,\n isFocused,\n ]);\n return result;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -9,6 +9,7 @@ var useOnClickOutside = (ref, handler) => {
9
9
  }
10
10
  var listener = event => {
11
11
  if (Array.isArray(ref)) {
12
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
12
13
  for (var i = 0; i < ref.length; i++) {
13
14
  var element = ref[i].current;
14
15
  // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。
@@ -66,16 +67,19 @@ var getSearch = (items, query) => {
66
67
  }
67
68
  res.length = c;
68
69
  res.sort((a, b) => {
70
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
69
71
  if (a.score <= b.score) {
70
72
  return 1;
71
73
  } else {
72
74
  return -1;
73
75
  }
74
76
  });
77
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
75
78
  return res;
76
79
  };
77
80
  var dispatchChangeEvent = (element, value) => {
78
81
  var _Object$getOwnPropert;
82
+ // eslint-disable-next-line @typescript-eslint/unbound-method
79
83
  var nativeInputValueSetter = (_Object$getOwnPropert = Object.getOwnPropertyDescriptor(element.tagName.toLowerCase() === "input" ? HTMLInputElement.prototype : HTMLTextAreaElement.prototype, "value")) == null ? void 0 : _Object$getOwnPropert.set;
80
84
  nativeInputValueSetter == null || nativeInputValueSetter.call(element, value);
81
85
  element.dispatchEvent(new Event("change", {
@@ -83,6 +87,7 @@ var dispatchChangeEvent = (element, value) => {
83
87
  }));
84
88
  };
85
89
  function ownerDocument(node) {
90
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
86
91
  return (node == null ? void 0 : node.ownerDocument) || document;
87
92
  }
88
93
  var nextItem = (list, item) => {
@@ -121,10 +126,12 @@ var moveFocus = (list, currentFocus, traversalFunction) => {
121
126
  export var filterSelectOptionsByQuery = (options, query) => {
122
127
  var result = getSearch(options.map(option => {
123
128
  return _extends({}, option, {
129
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
124
130
  keys: option.keys || [option.label],
125
131
  content: option.value
126
132
  });
127
133
  }), query);
134
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
128
135
  return result;
129
136
  };
130
137
  var defaultLoadOptions = /*#__PURE__*/function () {
@@ -140,6 +147,7 @@ var defaultLoadOptions = /*#__PURE__*/function () {
140
147
  return options;
141
148
  }
142
149
  var result = filterSelectOptionsByQuery(options, query);
150
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
143
151
  return result.length ? result : options;
144
152
  });
145
153
  return function defaultLoadOptions(_x) {
@@ -213,7 +221,9 @@ export var useSelectField = args => {
213
221
  }, [name, required, value]);
214
222
  var displayValue = useMemo(() => {
215
223
  var _ref5, _selectedOptionsCache;
216
- return (_ref5 = ((_selectedOptionsCache = selectedOptionsCache.current) == null ? void 0 : _selectedOptionsCache.find(option => option.value === value)) || (options == null ? void 0 : options.find(option => option.value === value))) == null ? void 0 : _ref5.label;
224
+ return (_ref5 = ((_selectedOptionsCache = selectedOptionsCache.current) == null ? void 0 : _selectedOptionsCache.find(option => option.value === value
225
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
226
+ )) || (options == null ? void 0 : options.find(option => option.value === value))) == null ? void 0 : _ref5.label;
217
227
  }, [options, value]);
218
228
  var rootProps = useMemo(() => {
219
229
  return {
@@ -246,6 +256,7 @@ export var useSelectField = args => {
246
256
  onChange: event => {
247
257
  var query = event.currentTarget.value;
248
258
  var value = treatQueryAsValue ? query : undefined;
259
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
249
260
  updateQuery(query, value);
250
261
  if (treatQueryAsValue) {
251
262
  updateValue({
@@ -279,6 +290,7 @@ export var useSelectField = args => {
279
290
  if (key === "Delete" || key === "Backspace") {
280
291
  if (query === "") {
281
292
  setValue(undefined);
293
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
282
294
  updateOptions("", undefined);
283
295
  }
284
296
  } else if (key === "ArrowDown") {
@@ -341,6 +353,7 @@ export var useSelectField = args => {
341
353
  if (onSelectOption) {
342
354
  onSelectOption(option);
343
355
  }
356
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
344
357
  updateQuery("", option.value);
345
358
  if (blurOnSelect === false) {
346
359
  var _pseudoInputRef$curre2;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","useOnClickOutside","ref","handler","undefined","listener","event","Array","isArray","i","length","element","current","contains","composedPath","document","addEventListener","removeEventListener","getSearch","items","query","copy","slice","len","key","toLowerCase","c","tmp","res","j","index","keylen","keys","indexOf","score","_extends","sort","a","b","dispatchChangeEvent","value","_Object$getOwnPropert","nativeInputValueSetter","Object","getOwnPropertyDescriptor","tagName","HTMLInputElement","prototype","HTMLTextAreaElement","set","call","dispatchEvent","Event","bubbles","ownerDocument","node","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","nextFocus","disabledFocus","disabled","getAttribute","focus","filterSelectOptionsByQuery","options","result","map","option","label","content","defaultLoadOptions","_ref2","_asyncToGenerator","_ref","_x","apply","arguments","useSelectField","args","readOnly","name","required","propsOptions","loadOptions","treatQueryAsValue","blurOnSelect","defaultValue","onChangeOption","onSelectOption","open","setOpen","setQuery","setValue","selectedOptionsCache","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateOptions","_ref3","selectedOptions","_x2","_x3","updateQuery","_ref4","_x4","_x5","inputProps","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","_pseudoInputRef$curre","currentTarget","blur","displayValue","_ref5","_selectedOptionsCache","find","rootProps","updateValue","pseudoInputProps","onChange","onClick","activeElement","onBlur","onKeyDown","preventDefault","nativeEvent","isComposing","listProps","role","listItems","selected","props","_pseudoInputRef$curre2","click","openList"],"sources":["../../../src/SelectField/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst useOnClickOutside = (\n ref: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n handler?: (event: MouseEvent | TouchEvent) => void,\n) => {\n useEffect(() => {\n if (!handler) {\n return undefined;\n }\n const listener = (event: MouseEvent | TouchEvent) => {\n if (Array.isArray(ref)) {\n for (let i = 0; i < ref.length; i++) {\n const element = ref[i].current;\n // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。\n if (element?.contains(event.composedPath()[0] as Node)) {\n return;\n }\n }\n } else {\n if (\n !ref.current ||\n ref.current.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nconst getSearch = <\n T extends {\n keys: string[];\n },\n>(\n items: T[],\n query: string,\n) => {\n const copy = items.slice();\n const len = items.length;\n const key = query.toLowerCase();\n let i = -1;\n let c = 0;\n let tmp: {\n keys: string[];\n };\n const res = new Array(len);\n while (++i !== len) {\n tmp = copy[i];\n /**\n * Caluculate Minimum Index\n */\n let j = -1;\n let index = -1;\n const keylen = tmp.keys.length;\n let current;\n while (++j !== keylen) {\n current = tmp.keys[j].toLowerCase().indexOf(key);\n if (index === -1 || (current !== -1 && current < index)) {\n index = current;\n }\n }\n /**\n * Caluculate Score\n */\n const score = index > -1 ? 1 / (index + 1) : 0;\n if (score > 0) {\n res[c++] = { ...tmp, score };\n }\n }\n\n res.length = c;\n res.sort((a, b) => {\n if (a.score <= b.score) {\n return 1;\n } else {\n return -1;\n }\n });\n\n return res;\n};\n\nconst dispatchChangeEvent = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value?: string | number,\n) => {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n element.tagName.toLowerCase() === \"input\"\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype,\n \"value\",\n )?.set;\n\n nativeInputValueSetter?.call(element, value);\n\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\n\nfunction ownerDocument(node: Node | null | undefined): Document {\n return node?.ownerDocument || document;\n}\n\ntype TraversalFunction = (\n list: HTMLUListElement,\n item?: Element | null,\n) => ChildNode | null;\n\nconst nextItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item?.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\n\nconst previousItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item?.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\n\nconst moveFocus = (\n list: HTMLUListElement,\n currentFocus: Element | null,\n traversalFunction: TraversalFunction,\n) => {\n let nextFocus = traversalFunction(list, currentFocus) as HTMLElement | null;\n while (nextFocus) {\n if (\n currentFocus === null\n ? nextFocus === list.lastChild\n : nextFocus === currentFocus\n ) {\n break;\n }\n const disabledFocus =\n (nextFocus as HTMLInputElement).disabled ||\n nextFocus.getAttribute(\"aria-disabled\") === \"true\";\n if (disabledFocus) {\n nextFocus = traversalFunction(list, nextFocus) as HTMLElement;\n } else {\n nextFocus.focus();\n break;\n }\n }\n};\n\nexport const filterSelectOptionsByQuery = <\n T extends SelectOptionValue = SelectOptionValue,\n>(\n options: T[],\n query: string,\n) => {\n const result = getSearch(\n options.map((option) => {\n return {\n ...option,\n\n keys: option.keys || [option.label],\n content: option.value,\n };\n }),\n query,\n );\n\n return result;\n};\n\nconst defaultLoadOptions = async <\n T extends SelectOptionValue = SelectOptionValue,\n>({\n query,\n options,\n}: {\n query: string;\n options?: T[];\n}): Promise<T[] | undefined> => {\n if (options === undefined) {\n return undefined;\n }\n if (query === undefined) {\n return options;\n }\n const result = filterSelectOptionsByQuery(options, query);\n\n return result.length ? result : options;\n};\n\nexport type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> =\n (args: {\n value: string | undefined;\n query: string;\n options?: T[];\n selectedOptions?: T[];\n }) => Promise<T[] | undefined>;\n\nexport interface SelectOptionValue {\n value: string | undefined;\n label: string;\n keys?: string[];\n [key: string]: unknown;\n}\n\nexport interface UseSelectFieldArgs<T extends SelectOptionValue> {\n /**\n * 選択肢の初期値を指定する。\n */\n defaultValue?: string;\n /**\n * 選択肢の選択が可能かどうか指定する。\n * @default false\n */\n readOnly?: boolean;\n /**\n * 選択肢の選択が必須かどうか指定する。\n * @default false\n */\n required?: boolean;\n /**\n * input要素に渡したいname属性を指定する。\n */\n name?: string;\n /**\n * queryに応じて選択肢をロードする関数を指定する。\n * この関数で返された選択肢が、選択肢として表示される。\n */\n loadOptions?: SelectLoadOptions<T>;\n /**\n * 選択肢を指定する。\n * 各選択肢は、valueとlabel及び任意のプロパティを持つオブジェクトである必要がある。\n */\n options?: T[];\n /**\n * このフラグがtrueの場合、queryもvalueとして扱えるようになる\n * @default false\n */\n treatQueryAsValue?: boolean;\n /**\n * 選択肢が変更された時に呼ばれるコールバック関数を指定する。\n */\n onChangeOption?: (option: T) => void;\n /**\n * 選択肢が選択された時に呼ばれるコールバック関数を指定する。\n * 選択肢が選択されず、選択肢が変更された場合は呼ばれない。\n */\n onSelectOption?: (option: T) => void;\n /**\n * 選択後にinput要素から離脱する\n * @default false\n */\n blurOnSelect?: boolean;\n}\n\ninterface UseSelectFieldResult<T extends SelectOptionValue> {\n /**\n * 表示用の文字列。\n */\n displayValue: string | undefined;\n /**\n * 検索用に入力された文字列。\n */\n query: string;\n /**\n * input要素に渡される値。\n */\n value: string | undefined;\n /**\n * 選択肢のリストを開くかどうか。\n */\n openList: boolean;\n /**\n * 実態となるinput要素に渡すprops\n */\n inputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素に渡すprops\n */\n pseudoInputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 選択肢のリストに渡すprops\n */\n listProps: React.ComponentPropsWithRef<\"ul\">;\n /**\n * 選択肢のリストの各要素に渡すpropsと、各選択肢、及びkeyを持つオブジェクトの配列。\n */\n listItems?: {\n key: string;\n option: T;\n props: React.ComponentPropsWithoutRef<\"li\">;\n }[];\n /**\n * 全ての要素の親となる要素に渡すprops\n */\n rootProps: React.ComponentPropsWithRef<\"div\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素にフォーカスしているかどうかを表すフラグ。\n */\n isFocused: boolean;\n}\n\nexport const useSelectField = <T extends SelectOptionValue>(\n args: UseSelectFieldArgs<T>,\n): UseSelectFieldResult<T> => {\n const {\n readOnly = false,\n name,\n required = false,\n options: propsOptions,\n loadOptions = defaultLoadOptions,\n treatQueryAsValue = false,\n blurOnSelect = false,\n defaultValue = undefined,\n onChangeOption,\n onSelectOption,\n } = args;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [value, setValue] = useState<string | undefined>(defaultValue);\n const selectedOptionsCache = useRef<T[] | undefined>(propsOptions);\n const [options, setOptions] = useState(propsOptions);\n const [isFocused, setIsFocused] = useState(false);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const originalInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const pseudoInputRef = useRef<HTMLInputElement>(null);\n\n const updateOptions = useCallback(\n async (query: string, value: string | undefined) => {\n const options = await loadOptions({\n value,\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions],\n );\n\n const updateQuery = useCallback(\n async (query: string, value: string | undefined) => {\n setQuery(query);\n await updateOptions(query, value);\n },\n [updateOptions],\n );\n\n const inputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: originalInputRef,\n required: required,\n name: name,\n defaultValue: value,\n key: value,\n tabIndex: -1,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n onFocus: (event) => {\n event.currentTarget.blur();\n pseudoInputRef.current?.focus();\n },\n };\n }, [name, required, value]);\n\n const displayValue = useMemo(() => {\n return (\n selectedOptionsCache.current?.find((option) => option.value === value) ||\n options?.find((option) => option.value === value)\n )?.label;\n }, [options, value]);\n\n const rootProps = useMemo(() => {\n return {\n ref: rootRef,\n };\n }, []);\n\n useOnClickOutside([rootRef, listRef], () => {\n setOpen(false);\n });\n\n const updateValue = useCallback(\n (option: T) => {\n const value = option.value;\n setValue(value);\n if (onChangeOption) {\n onChangeOption(option);\n }\n selectedOptionsCache.current = options;\n if (originalInputRef.current) {\n dispatchChangeEvent(originalInputRef.current, value);\n }\n },\n [onChangeOption, options],\n );\n\n const pseudoInputProps = useMemo(() => {\n return {\n ref: pseudoInputRef,\n value: query,\n autoComplete: \"off\" as const,\n autoCorrect: \"off\" as const,\n autoCapitalize: \"none\" as const,\n spellCheck: false,\n tabIndex: 0,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n const query = event.currentTarget.value;\n const value = treatQueryAsValue ? query : undefined;\n\n updateQuery(query, value);\n if (treatQueryAsValue) {\n updateValue({\n label: query,\n value: query,\n } as T);\n }\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n /**\n * ユーザーがフォーカスされている状態で入力要素をクリックするのは、\n * ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。\n */\n if (event.currentTarget === document.activeElement) {\n setOpen(true);\n }\n },\n onFocus: () => {\n if (readOnly !== true) {\n setOpen(true);\n }\n setIsFocused(true);\n },\n onBlur: () => {\n setIsFocused(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { key } = event;\n if (key === \"Delete\" || key === \"Backspace\") {\n if (query === \"\") {\n setValue(undefined);\n\n updateOptions(\"\", undefined);\n }\n } else if (key === \"ArrowDown\") {\n event.preventDefault();\n const list = listRef.current;\n if (list) {\n moveFocus(list, null, nextItem);\n }\n } else if (\n treatQueryAsValue &&\n event.nativeEvent.isComposing === false &&\n key === \"Enter\"\n ) {\n if (treatQueryAsValue) {\n selectedOptionsCache.current = [\n {\n value: query,\n label: query,\n } as T,\n ];\n }\n setOpen(false);\n } else if (event.key.length === 1) {\n setOpen(true);\n }\n },\n };\n }, [\n query,\n treatQueryAsValue,\n updateQuery,\n updateValue,\n readOnly,\n updateOptions,\n ]);\n\n const listProps = useMemo(() => {\n return {\n ref: listRef,\n role: \"listbox\",\n tabIndex: -1,\n onKeyDown: (event: React.KeyboardEvent<HTMLUListElement>) => {\n const key = event.key;\n const list = listRef.current;\n if (list === null) {\n return;\n }\n const currentFocus = ownerDocument(list).activeElement;\n if (key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n } else if (key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n }\n },\n };\n }, []);\n\n const listItems = useMemo(() => {\n return options?.map((option, index) => {\n const selected = option.value === value;\n return {\n key: `${option.value}-${index}`,\n option,\n props: {\n role: \"option\",\n \"aria-selected\": selected,\n /**\n * 何も選択されていないときは、先頭のオプションに飛べるようにする\n */\n tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,\n onClick: () => {\n updateValue(option);\n\n if (onSelectOption) {\n onSelectOption(option);\n }\n\n updateQuery(\"\", option.value);\n if (blurOnSelect === false) {\n pseudoInputRef?.current?.focus();\n }\n setOpen(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLLIElement>) => {\n const key = event.key;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n },\n };\n });\n }, [blurOnSelect, onSelectOption, options, updateQuery, updateValue, value]);\n\n const result = useMemo(() => {\n return {\n displayValue,\n query,\n value,\n openList: open,\n inputProps,\n pseudoInputProps,\n listProps,\n listItems,\n rootProps,\n isFocused: isFocused,\n };\n }, [\n displayValue,\n inputProps,\n listItems,\n listProps,\n open,\n pseudoInputProps,\n query,\n rootProps,\n value,\n isFocused,\n ]);\n return result;\n};\n"],"mappings":";;;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAEzE,IAAMC,iBAAiB,GAAGA,CACxBC,GAAkE,EAClEC,OAAkD,KAC/C;EACHN,SAAS,CAAC,MAAM;IACd,IAAI,CAACM,OAAO,EAAE;MACZ,OAAOC,SAAS;IAClB;IACA,IAAMC,QAAQ,GAAIC,KAA8B,IAAK;MACnD,IAAIC,KAAK,CAACC,OAAO,CAACN,GAAG,CAAC,EAAE;QACtB,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,GAAG,CAACQ,MAAM,EAAED,CAAC,EAAE,EAAE;UACnC,IAAME,OAAO,GAAGT,GAAG,CAACO,CAAC,CAAC,CAACG,OAAO;UAC9B;UACA,IAAID,OAAO,YAAPA,OAAO,CAAEE,QAAQ,CAACP,KAAK,CAACQ,YAAY,CAAC,CAAC,CAAC,CAAC,CAAS,CAAC,EAAE;YACtD;UACF;QACF;MACF,CAAC,MAAM;QACL,IACE,CAACZ,GAAG,CAACU,OAAO,IACZV,GAAG,CAACU,OAAO,CAACC,QAAQ,CAACP,KAAK,CAACQ,YAAY,CAAC,CAAC,CAAC,CAAC,CAAS,CAAC,EACrD;UACA;QACF;MACF;MAEAX,OAAO,CAACG,KAAK,CAAC;IAChB,CAAC;IAEDS,QAAQ,CAACC,gBAAgB,CAAC,WAAW,EAAEX,QAAQ,CAAC;IAChDU,QAAQ,CAACC,gBAAgB,CAAC,YAAY,EAAEX,QAAQ,CAAC;IAEjD,OAAO,MAAM;MACXU,QAAQ,CAACE,mBAAmB,CAAC,WAAW,EAAEZ,QAAQ,CAAC;MACnDU,QAAQ,CAACE,mBAAmB,CAAC,YAAY,EAAEZ,QAAQ,CAAC;IACtD,CAAC;EACH,CAAC,EAAE,CAACH,GAAG,EAAEC,OAAO,CAAC,CAAC;AACpB,CAAC;AAED,IAAMe,SAAS,GAAGA,CAKhBC,KAAU,EACVC,KAAa,KACV;EACH,IAAMC,IAAI,GAAGF,KAAK,CAACG,KAAK,CAAC,CAAC;EAC1B,IAAMC,GAAG,GAAGJ,KAAK,CAACT,MAAM;EACxB,IAAMc,GAAG,GAAGJ,KAAK,CAACK,WAAW,CAAC,CAAC;EAC/B,IAAIhB,CAAC,GAAG,CAAC,CAAC;EACV,IAAIiB,CAAC,GAAG,CAAC;EACT,IAAIC,GAEH;EACD,IAAMC,GAAG,GAAG,IAAIrB,KAAK,CAACgB,GAAG,CAAC;EAC1B,OAAO,EAAEd,CAAC,KAAKc,GAAG,EAAE;IAClBI,GAAG,GAAGN,IAAI,CAACZ,CAAC,CAAC;IACb;AACJ;AACA;IACI,IAAIoB,CAAC,GAAG,CAAC,CAAC;IACV,IAAIC,KAAK,GAAG,CAAC,CAAC;IACd,IAAMC,MAAM,GAAGJ,GAAG,CAACK,IAAI,CAACtB,MAAM;IAC9B,IAAIE,OAAO;IACX,OAAO,EAAEiB,CAAC,KAAKE,MAAM,EAAE;MACrBnB,OAAO,GAAGe,GAAG,CAACK,IAAI,CAACH,CAAC,CAAC,CAACJ,WAAW,CAAC,CAAC,CAACQ,OAAO,CAACT,GAAG,CAAC;MAChD,IAAIM,KAAK,KAAK,CAAC,CAAC,IAAKlB,OAAO,KAAK,CAAC,CAAC,IAAIA,OAAO,GAAGkB,KAAM,EAAE;QACvDA,KAAK,GAAGlB,OAAO;MACjB;IACF;IACA;AACJ;AACA;IACI,IAAMsB,KAAK,GAAGJ,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,IAAIA,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;IAC9C,IAAII,KAAK,GAAG,CAAC,EAAE;MACbN,GAAG,CAACF,CAAC,EAAE,CAAC,GAAAS,QAAA,KAAQR,GAAG;QAAEO;MAAK,EAAE;IAC9B;EACF;EAEAN,GAAG,CAAClB,MAAM,GAAGgB,CAAC;EACdE,GAAG,CAACQ,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;IACjB,IAAID,CAAC,CAACH,KAAK,IAAII,CAAC,CAACJ,KAAK,EAAE;MACtB,OAAO,CAAC;IACV,CAAC,MAAM;MACL,OAAO,CAAC,CAAC;IACX;EACF,CAAC,CAAC;EAEF,OAAON,GAAG;AACZ,CAAC;AAED,IAAMW,mBAAmB,GAAGA,CAC1B5B,OAA+C,EAC/C6B,KAAuB,KACpB;EAAA,IAAAC,qBAAA;EACH,IAAMC,sBAAsB,IAAAD,qBAAA,GAAGE,MAAM,CAACC,wBAAwB,CAC5DjC,OAAO,CAACkC,OAAO,CAACpB,WAAW,CAAC,CAAC,KAAK,OAAO,GACrCqB,gBAAgB,CAACC,SAAS,GAC1BC,mBAAmB,CAACD,SAAS,EACjC,OACF,CAAC,qBAL8BN,qBAAA,CAK5BQ,GAAG;EAENP,sBAAsB,YAAtBA,sBAAsB,CAAEQ,IAAI,CAACvC,OAAO,EAAE6B,KAAK,CAAC;EAE5C7B,OAAO,CAACwC,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,EAAE;IAAEC,OAAO,EAAE;EAAK,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAASC,aAAaA,CAACC,IAA6B,EAAY;EAC9D,OAAO,CAAAA,IAAI,oBAAJA,IAAI,CAAED,aAAa,KAAIvC,QAAQ;AACxC;AAOA,IAAMyC,QAA2B,GAAGA,CAACC,IAAI,EAAEC,IAAI,KAAK;EAClD,IAAID,IAAI,KAAKC,IAAI,EAAE;IACjB,OAAOD,IAAI,CAACE,UAAU;EACxB;EACA,IAAID,IAAI,YAAJA,IAAI,CAAEE,kBAAkB,EAAE;IAC5B,OAAOF,IAAI,CAACE,kBAAkB;EAChC;EACA,OAAOH,IAAI,CAACE,UAAU;AACxB,CAAC;AAED,IAAME,YAA+B,GAAGA,CAACJ,IAAI,EAAEC,IAAI,KAAK;EACtD,IAAID,IAAI,KAAKC,IAAI,EAAE;IACjB,OAAOD,IAAI,CAACK,SAAS;EACvB;EACA,IAAIJ,IAAI,YAAJA,IAAI,CAAEK,sBAAsB,EAAE;IAChC,OAAOL,IAAI,CAACK,sBAAsB;EACpC;EACA,OAAON,IAAI,CAACK,SAAS;AACvB,CAAC;AAED,IAAME,SAAS,GAAGA,CAChBP,IAAsB,EACtBQ,YAA4B,EAC5BC,iBAAoC,KACjC;EACH,IAAIC,SAAS,GAAGD,iBAAiB,CAACT,IAAI,EAAEQ,YAAY,CAAuB;EAC3E,OAAOE,SAAS,EAAE;IAChB,IACEF,YAAY,KAAK,IAAI,GACjBE,SAAS,KAAKV,IAAI,CAACK,SAAS,GAC5BK,SAAS,KAAKF,YAAY,EAC9B;MACA;IACF;IACA,IAAMG,aAAa,GAChBD,SAAS,CAAsBE,QAAQ,IACxCF,SAAS,CAACG,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM;IACpD,IAAIF,aAAa,EAAE;MACjBD,SAAS,GAAGD,iBAAiB,CAACT,IAAI,EAAEU,SAAS,CAAgB;IAC/D,CAAC,MAAM;MACLA,SAAS,CAACI,KAAK,CAAC,CAAC;MACjB;IACF;EACF;AACF,CAAC;AAED,OAAO,IAAMC,0BAA0B,GAAGA,CAGxCC,OAAY,EACZrD,KAAa,KACV;EACH,IAAMsD,MAAM,GAAGxD,SAAS,CACtBuD,OAAO,CAACE,GAAG,CAAEC,MAAM,IAAK;IACtB,OAAAzC,QAAA,KACKyC,MAAM;MAET5C,IAAI,EAAE4C,MAAM,CAAC5C,IAAI,IAAI,CAAC4C,MAAM,CAACC,KAAK,CAAC;MACnCC,OAAO,EAAEF,MAAM,CAACpC;IAAK;EAEzB,CAAC,CAAC,EACFpB,KACF,CAAC;EAED,OAAOsD,MAAM;AACf,CAAC;AAED,IAAMK,kBAAkB;EAAA,IAAAC,KAAA,GAAAC,iBAAA,CAAG,WAAAC,IAAA,EAQK;IAAA,IAN9B;MACA9D,KAAK;MACLqD;IAIF,CAAC,GAAAS,IAAA;IACC,IAAIT,OAAO,KAAKrE,SAAS,EAAE;MACzB,OAAOA,SAAS;IAClB;IACA,IAAIgB,KAAK,KAAKhB,SAAS,EAAE;MACvB,OAAOqE,OAAO;IAChB;IACA,IAAMC,MAAM,GAAGF,0BAA0B,CAACC,OAAO,EAAErD,KAAK,CAAC;IAEzD,OAAOsD,MAAM,CAAChE,MAAM,GAAGgE,MAAM,GAAGD,OAAO;EACzC,CAAC;EAAA,gBAlBKM,kBAAkBA,CAAAI,EAAA;IAAA,OAAAH,KAAA,CAAAI,KAAA,OAAAC,SAAA;EAAA;AAAA,GAkBvB;AAkHD,OAAO,IAAMC,cAAc,GACzBC,IAA2B,IACC;EAC5B,IAAM;IACJC,QAAQ,GAAG,KAAK;IAChBC,IAAI;IACJC,QAAQ,GAAG,KAAK;IAChBjB,OAAO,EAAEkB,YAAY;IACrBC,WAAW,GAAGb,kBAAkB;IAChCc,iBAAiB,GAAG,KAAK;IACzBC,YAAY,GAAG,KAAK;IACpBC,YAAY,GAAG3F,SAAS;IACxB4F,cAAc;IACdC;EACF,CAAC,GAAGV,IAAI;EACR,IAAM,CAACW,IAAI,EAAEC,OAAO,CAAC,GAAGnG,QAAQ,CAAC,KAAK,CAAC;EACvC,IAAM,CAACoB,KAAK,EAAEgF,QAAQ,CAAC,GAAGpG,QAAQ,CAAC,EAAE,CAAC;EACtC,IAAM,CAACwC,KAAK,EAAE6D,QAAQ,CAAC,GAAGrG,QAAQ,CAAqB+F,YAAY,CAAC;EACpE,IAAMO,oBAAoB,GAAGvG,MAAM,CAAkB4F,YAAY,CAAC;EAClE,IAAM,CAAClB,OAAO,EAAE8B,UAAU,CAAC,GAAGvG,QAAQ,CAAC2F,YAAY,CAAC;EACpD,IAAM,CAACa,SAAS,EAAEC,YAAY,CAAC,GAAGzG,QAAQ,CAAC,KAAK,CAAC;EAEjD,IAAM0G,OAAO,GAAG3G,MAAM,CAAiB,IAAI,CAAC;EAC5C,IAAM4G,gBAAgB,GAAG5G,MAAM,CAAmB,IAAI,CAAC;EACvD,IAAM6G,OAAO,GAAG7G,MAAM,CAAmB,IAAI,CAAC;EAC9C,IAAM8G,cAAc,GAAG9G,MAAM,CAAmB,IAAI,CAAC;EAErD,IAAM+G,aAAa,GAAGlH,WAAW;IAAA,IAAAmH,KAAA,GAAA9B,iBAAA,CAC/B,WAAO7D,KAAa,EAAEoB,KAAyB,EAAK;MAClD,IAAMiC,OAAO,SAASmB,WAAW,CAAC;QAChCpD,KAAK;QACLpB,KAAK;QACLqD,OAAO,EAAEkB,YAAY;QACrBqB,eAAe,EAAEV,oBAAoB,CAAC1F;MACxC,CAAC,CAAC;MACF2F,UAAU,CAAC9B,OAAO,CAAC;IACrB,CAAC;IAAA,iBAAAwC,GAAA,EAAAC,GAAA;MAAA,OAAAH,KAAA,CAAA3B,KAAA,OAAAC,SAAA;IAAA;EAAA,KACD,CAACO,WAAW,EAAED,YAAY,CAC5B,CAAC;EAED,IAAMwB,WAAW,GAAGvH,WAAW;IAAA,IAAAwH,KAAA,GAAAnC,iBAAA,CAC7B,WAAO7D,KAAa,EAAEoB,KAAyB,EAAK;MAClD4D,QAAQ,CAAChF,KAAK,CAAC;MACf,MAAM0F,aAAa,CAAC1F,KAAK,EAAEoB,KAAK,CAAC;IACnC,CAAC;IAAA,iBAAA6E,GAAA,EAAAC,GAAA;MAAA,OAAAF,KAAA,CAAAhC,KAAA,OAAAC,SAAA;IAAA;EAAA,KACD,CAACyB,aAAa,CAChB,CAAC;EAED,IAAMS,UAAU,GAAGzH,OAAO,CAAC,MAA4C;IACrE,OAAO;MACLI,GAAG,EAAEyG,gBAAgB;MACrBjB,QAAQ,EAAEA,QAAQ;MAClBD,IAAI,EAAEA,IAAI;MACVM,YAAY,EAAEvD,KAAK;MACnBhB,GAAG,EAAEgB,KAAK;MACVgF,QAAQ,EAAE,CAAC,CAAC;MACZC,YAAY,EAAE,KAAK;MACnBC,WAAW,EAAE,KAAK;MAClBC,cAAc,EAAE,MAAM;MACtBC,UAAU,EAAE,KAAK;MACjBC,OAAO,EAAGvH,KAAK,IAAK;QAAA,IAAAwH,qBAAA;QAClBxH,KAAK,CAACyH,aAAa,CAACC,IAAI,CAAC,CAAC;QAC1B,CAAAF,qBAAA,GAAAjB,cAAc,CAACjG,OAAO,aAAtBkH,qBAAA,CAAwBvD,KAAK,CAAC,CAAC;MACjC;IACF,CAAC;EACH,CAAC,EAAE,CAACkB,IAAI,EAAEC,QAAQ,EAAElD,KAAK,CAAC,CAAC;EAE3B,IAAMyF,YAAY,GAAGnI,OAAO,CAAC,MAAM;IAAA,IAAAoI,KAAA,EAAAC,qBAAA;IACjC,QAAAD,KAAA,GACE,EAAAC,qBAAA,GAAA7B,oBAAoB,CAAC1F,OAAO,qBAA5BuH,qBAAA,CAA8BC,IAAI,CAAExD,MAAM,IAAKA,MAAM,CAACpC,KAAK,KAAKA,KAAK,CAAC,MACtEiC,OAAO,oBAAPA,OAAO,CAAE2D,IAAI,CAAExD,MAAM,IAAKA,MAAM,CAACpC,KAAK,KAAKA,KAAK,CAAC,sBAF5C0F,KAAA,CAGJrD,KAAK;EACV,CAAC,EAAE,CAACJ,OAAO,EAAEjC,KAAK,CAAC,CAAC;EAEpB,IAAM6F,SAAS,GAAGvI,OAAO,CAAC,MAAM;IAC9B,OAAO;MACLI,GAAG,EAAEwG;IACP,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAENzG,iBAAiB,CAAC,CAACyG,OAAO,EAAEE,OAAO,CAAC,EAAE,MAAM;IAC1CT,OAAO,CAAC,KAAK,CAAC;EAChB,CAAC,CAAC;EAEF,IAAMmC,WAAW,GAAG1I,WAAW,CAC5BgF,MAAS,IAAK;IACb,IAAMpC,KAAK,GAAGoC,MAAM,CAACpC,KAAK;IAC1B6D,QAAQ,CAAC7D,KAAK,CAAC;IACf,IAAIwD,cAAc,EAAE;MAClBA,cAAc,CAACpB,MAAM,CAAC;IACxB;IACA0B,oBAAoB,CAAC1F,OAAO,GAAG6D,OAAO;IACtC,IAAIkC,gBAAgB,CAAC/F,OAAO,EAAE;MAC5B2B,mBAAmB,CAACoE,gBAAgB,CAAC/F,OAAO,EAAE4B,KAAK,CAAC;IACtD;EACF,CAAC,EACD,CAACwD,cAAc,EAAEvB,OAAO,CAC1B,CAAC;EAED,IAAM8D,gBAAgB,GAAGzI,OAAO,CAAC,MAAM;IACrC,OAAO;MACLI,GAAG,EAAE2G,cAAc;MACnBrE,KAAK,EAAEpB,KAAK;MACZqG,YAAY,EAAE,KAAc;MAC5BC,WAAW,EAAE,KAAc;MAC3BC,cAAc,EAAE,MAAe;MAC/BC,UAAU,EAAE,KAAK;MACjBJ,QAAQ,EAAE,CAAC;MACXgB,QAAQ,EAAGlI,KAA0C,IAAK;QACxD,IAAMc,KAAK,GAAGd,KAAK,CAACyH,aAAa,CAACvF,KAAK;QACvC,IAAMA,KAAK,GAAGqD,iBAAiB,GAAGzE,KAAK,GAAGhB,SAAS;QAEnD+G,WAAW,CAAC/F,KAAK,EAAEoB,KAAK,CAAC;QACzB,IAAIqD,iBAAiB,EAAE;UACrByC,WAAW,CAAC;YACVzD,KAAK,EAAEzD,KAAK;YACZoB,KAAK,EAAEpB;UACT,CAAM,CAAC;QACT;MACF,CAAC;MACDqH,OAAO,EAAGnI,KAAyC,IAAK;QACtD;AACR;AACA;AACA;QACQ,IAAIA,KAAK,CAACyH,aAAa,KAAKhH,QAAQ,CAAC2H,aAAa,EAAE;UAClDvC,OAAO,CAAC,IAAI,CAAC;QACf;MACF,CAAC;MACD0B,OAAO,EAAEA,CAAA,KAAM;QACb,IAAIrC,QAAQ,KAAK,IAAI,EAAE;UACrBW,OAAO,CAAC,IAAI,CAAC;QACf;QACAM,YAAY,CAAC,IAAI,CAAC;MACpB,CAAC;MACDkC,MAAM,EAAEA,CAAA,KAAM;QACZlC,YAAY,CAAC,KAAK,CAAC;MACrB,CAAC;MACDmC,SAAS,EAAGtI,KAA4C,IAAK;QAC3D,IAAM;UAAEkB;QAAI,CAAC,GAAGlB,KAAK;QACrB,IAAIkB,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,WAAW,EAAE;UAC3C,IAAIJ,KAAK,KAAK,EAAE,EAAE;YAChBiF,QAAQ,CAACjG,SAAS,CAAC;YAEnB0G,aAAa,CAAC,EAAE,EAAE1G,SAAS,CAAC;UAC9B;QACF,CAAC,MAAM,IAAIoB,GAAG,KAAK,WAAW,EAAE;UAC9BlB,KAAK,CAACuI,cAAc,CAAC,CAAC;UACtB,IAAMpF,KAAI,GAAGmD,OAAO,CAAChG,OAAO;UAC5B,IAAI6C,KAAI,EAAE;YACRO,SAAS,CAACP,KAAI,EAAE,IAAI,EAAED,QAAQ,CAAC;UACjC;QACF,CAAC,MAAM,IACLqC,iBAAiB,IACjBvF,KAAK,CAACwI,WAAW,CAACC,WAAW,KAAK,KAAK,IACvCvH,GAAG,KAAK,OAAO,EACf;UACA,IAAIqE,iBAAiB,EAAE;YACrBS,oBAAoB,CAAC1F,OAAO,GAAG,CAC7B;cACE4B,KAAK,EAAEpB,KAAK;cACZyD,KAAK,EAAEzD;YACT,CAAC,CACF;UACH;UACA+E,OAAO,CAAC,KAAK,CAAC;QAChB,CAAC,MAAM,IAAI7F,KAAK,CAACkB,GAAG,CAACd,MAAM,KAAK,CAAC,EAAE;UACjCyF,OAAO,CAAC,IAAI,CAAC;QACf;MACF;IACF,CAAC;EACH,CAAC,EAAE,CACD/E,KAAK,EACLyE,iBAAiB,EACjBsB,WAAW,EACXmB,WAAW,EACX9C,QAAQ,EACRsB,aAAa,CACd,CAAC;EAEF,IAAMkC,SAAS,GAAGlJ,OAAO,CAAC,MAAM;IAC9B,OAAO;MACLI,GAAG,EAAE0G,OAAO;MACZqC,IAAI,EAAE,SAAS;MACfzB,QAAQ,EAAE,CAAC,CAAC;MACZoB,SAAS,EAAGtI,KAA4C,IAAK;QAC3D,IAAMkB,GAAG,GAAGlB,KAAK,CAACkB,GAAG;QACrB,IAAMiC,IAAI,GAAGmD,OAAO,CAAChG,OAAO;QAC5B,IAAI6C,IAAI,KAAK,IAAI,EAAE;UACjB;QACF;QACA,IAAMQ,YAAY,GAAGX,aAAa,CAACG,IAAI,CAAC,CAACiF,aAAa;QACtD,IAAIlH,GAAG,KAAK,WAAW,EAAE;UACvBlB,KAAK,CAACuI,cAAc,CAAC,CAAC;UACtB7E,SAAS,CAACP,IAAI,EAAEQ,YAAY,EAAET,QAAQ,CAAC;QACzC,CAAC,MAAM,IAAIhC,GAAG,KAAK,SAAS,EAAE;UAC5BlB,KAAK,CAACuI,cAAc,CAAC,CAAC;UACtB7E,SAAS,CAACP,IAAI,EAAEQ,YAAY,EAAEJ,YAAY,CAAC;QAC7C;MACF;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMqF,SAAS,GAAGpJ,OAAO,CAAC,MAAM;IAC9B,OAAO2E,OAAO,oBAAPA,OAAO,CAAEE,GAAG,CAAC,CAACC,MAAM,EAAE9C,KAAK,KAAK;MACrC,IAAMqH,QAAQ,GAAGvE,MAAM,CAACpC,KAAK,KAAKA,KAAK;MACvC,OAAO;QACLhB,GAAG,EAAKoD,MAAM,CAACpC,KAAK,SAAIV,KAAO;QAC/B8C,MAAM;QACNwE,KAAK,EAAE;UACLH,IAAI,EAAE,QAAQ;UACd,eAAe,EAAEE,QAAQ;UACzB;AACV;AACA;UACU3B,QAAQ,EAAE,CAAChF,KAAK,KAAKpC,SAAS,GAAG0B,KAAK,KAAK,CAAC,GAAGqH,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;UAClEV,OAAO,EAAEA,CAAA,KAAM;YACbH,WAAW,CAAC1D,MAAM,CAAC;YAEnB,IAAIqB,cAAc,EAAE;cAClBA,cAAc,CAACrB,MAAM,CAAC;YACxB;YAEAuC,WAAW,CAAC,EAAE,EAAEvC,MAAM,CAACpC,KAAK,CAAC;YAC7B,IAAIsD,YAAY,KAAK,KAAK,EAAE;cAAA,IAAAuD,sBAAA;cAC1BxC,cAAc,aAAAwC,sBAAA,GAAdxC,cAAc,CAAEjG,OAAO,aAAvByI,sBAAA,CAAyB9E,KAAK,CAAC,CAAC;YAClC;YACA4B,OAAO,CAAC,KAAK,CAAC;UAChB,CAAC;UACDyC,SAAS,EAAGtI,KAAyC,IAAK;YACxD,IAAMkB,GAAG,GAAGlB,KAAK,CAACkB,GAAG;YACrB,IAAIA,GAAG,KAAK,OAAO,IAAIA,GAAG,KAAK,GAAG,EAAE;cAClClB,KAAK,CAACuI,cAAc,CAAC,CAAC;cACtBvI,KAAK,CAACyH,aAAa,CAACuB,KAAK,CAAC,CAAC;YAC7B;UACF;QACF;MACF,CAAC;IACH,CAAC,CAAC;EACJ,CAAC,EAAE,CAACxD,YAAY,EAAEG,cAAc,EAAExB,OAAO,EAAE0C,WAAW,EAAEmB,WAAW,EAAE9F,KAAK,CAAC,CAAC;EAE5E,IAAMkC,MAAM,GAAG5E,OAAO,CAAC,MAAM;IAC3B,OAAO;MACLmI,YAAY;MACZ7G,KAAK;MACLoB,KAAK;MACL+G,QAAQ,EAAErD,IAAI;MACdqB,UAAU;MACVgB,gBAAgB;MAChBS,SAAS;MACTE,SAAS;MACTb,SAAS;MACT7B,SAAS,EAAEA;IACb,CAAC;EACH,CAAC,EAAE,CACDyB,YAAY,EACZV,UAAU,EACV2B,SAAS,EACTF,SAAS,EACT9C,IAAI,EACJqC,gBAAgB,EAChBnH,KAAK,EACLiH,SAAS,EACT7F,KAAK,EACLgE,SAAS,CACV,CAAC;EACF,OAAO9B,MAAM;AACf,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","useOnClickOutside","ref","handler","undefined","listener","event","Array","isArray","i","length","element","current","contains","composedPath","document","addEventListener","removeEventListener","getSearch","items","query","copy","slice","len","key","toLowerCase","c","tmp","res","j","index","keylen","keys","indexOf","score","_extends","sort","a","b","dispatchChangeEvent","value","_Object$getOwnPropert","nativeInputValueSetter","Object","getOwnPropertyDescriptor","tagName","HTMLInputElement","prototype","HTMLTextAreaElement","set","call","dispatchEvent","Event","bubbles","ownerDocument","node","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","nextFocus","disabledFocus","disabled","getAttribute","focus","filterSelectOptionsByQuery","options","result","map","option","label","content","defaultLoadOptions","_ref2","_asyncToGenerator","_ref","_x","apply","arguments","useSelectField","args","readOnly","name","required","propsOptions","loadOptions","treatQueryAsValue","blurOnSelect","defaultValue","onChangeOption","onSelectOption","open","setOpen","setQuery","setValue","selectedOptionsCache","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateOptions","_ref3","selectedOptions","_x2","_x3","updateQuery","_ref4","_x4","_x5","inputProps","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","_pseudoInputRef$curre","currentTarget","blur","displayValue","_ref5","_selectedOptionsCache","find","rootProps","updateValue","pseudoInputProps","onChange","onClick","activeElement","onBlur","onKeyDown","preventDefault","nativeEvent","isComposing","listProps","role","listItems","selected","props","_pseudoInputRef$curre2","click","openList"],"sources":["../../../src/SelectField/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst useOnClickOutside = (\n ref: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n handler?: (event: MouseEvent | TouchEvent) => void,\n) => {\n useEffect(() => {\n if (!handler) {\n return undefined;\n }\n const listener = (event: MouseEvent | TouchEvent) => {\n if (Array.isArray(ref)) {\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ref.length; i++) {\n const element = ref[i].current;\n // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。\n if (element?.contains(event.composedPath()[0] as Node)) {\n return;\n }\n }\n } else {\n if (\n !ref.current ||\n ref.current.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nconst getSearch = <\n T extends {\n keys: string[];\n },\n>(\n items: T[],\n query: string,\n) => {\n const copy = items.slice();\n const len = items.length;\n const key = query.toLowerCase();\n let i = -1;\n let c = 0;\n let tmp: {\n keys: string[];\n };\n const res = new Array(len);\n while (++i !== len) {\n tmp = copy[i];\n /**\n * Caluculate Minimum Index\n */\n let j = -1;\n let index = -1;\n const keylen = tmp.keys.length;\n let current;\n while (++j !== keylen) {\n current = tmp.keys[j].toLowerCase().indexOf(key);\n if (index === -1 || (current !== -1 && current < index)) {\n index = current;\n }\n }\n /**\n * Caluculate Score\n */\n const score = index > -1 ? 1 / (index + 1) : 0;\n if (score > 0) {\n res[c++] = { ...tmp, score };\n }\n }\n\n res.length = c;\n res.sort((a, b) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (a.score <= b.score) {\n return 1;\n } else {\n return -1;\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return res;\n};\n\nconst dispatchChangeEvent = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value?: string | number,\n) => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n element.tagName.toLowerCase() === \"input\"\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype,\n \"value\",\n )?.set;\n\n nativeInputValueSetter?.call(element, value);\n\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\n\nfunction ownerDocument(node: Node | null | undefined): Document {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n return node?.ownerDocument || document;\n}\n\ntype TraversalFunction = (\n list: HTMLUListElement,\n item?: Element | null,\n) => ChildNode | null;\n\nconst nextItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item?.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\n\nconst previousItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item?.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\n\nconst moveFocus = (\n list: HTMLUListElement,\n currentFocus: Element | null,\n traversalFunction: TraversalFunction,\n) => {\n let nextFocus = traversalFunction(list, currentFocus) as HTMLElement | null;\n while (nextFocus) {\n if (\n currentFocus === null\n ? nextFocus === list.lastChild\n : nextFocus === currentFocus\n ) {\n break;\n }\n const disabledFocus =\n (nextFocus as HTMLInputElement).disabled ||\n nextFocus.getAttribute(\"aria-disabled\") === \"true\";\n if (disabledFocus) {\n nextFocus = traversalFunction(list, nextFocus) as HTMLElement;\n } else {\n nextFocus.focus();\n break;\n }\n }\n};\n\nexport const filterSelectOptionsByQuery = <\n T extends SelectOptionValue = SelectOptionValue,\n>(\n options: T[],\n query: string,\n) => {\n const result = getSearch(\n options.map((option) => {\n return {\n ...option,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n keys: option.keys || [option.label],\n content: option.value,\n };\n }),\n query,\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n};\n\nconst defaultLoadOptions = async <\n T extends SelectOptionValue = SelectOptionValue,\n>({\n query,\n options,\n}: {\n query: string;\n options?: T[];\n // eslint-disable-next-line @typescript-eslint/require-await\n}): Promise<T[] | undefined> => {\n if (options === undefined) {\n return undefined;\n }\n if (query === undefined) {\n return options;\n }\n const result = filterSelectOptionsByQuery(options, query);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result.length ? result : options;\n};\n\nexport type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> =\n (args: {\n value: string | undefined;\n query: string;\n options?: T[];\n selectedOptions?: T[];\n }) => Promise<T[] | undefined>;\n\nexport interface SelectOptionValue {\n value: string | undefined;\n label: string;\n keys?: string[];\n [key: string]: unknown;\n}\n\nexport interface UseSelectFieldArgs<T extends SelectOptionValue> {\n /**\n * 選択肢の初期値を指定する。\n */\n defaultValue?: string;\n /**\n * 選択肢の選択が可能かどうか指定する。\n * @default false\n */\n readOnly?: boolean;\n /**\n * 選択肢の選択が必須かどうか指定する。\n * @default false\n */\n required?: boolean;\n /**\n * input要素に渡したいname属性を指定する。\n */\n name?: string;\n /**\n * queryに応じて選択肢をロードする関数を指定する。\n * この関数で返された選択肢が、選択肢として表示される。\n */\n loadOptions?: SelectLoadOptions<T>;\n /**\n * 選択肢を指定する。\n * 各選択肢は、valueとlabel及び任意のプロパティを持つオブジェクトである必要がある。\n */\n options?: T[];\n /**\n * このフラグがtrueの場合、queryもvalueとして扱えるようになる\n * @default false\n */\n treatQueryAsValue?: boolean;\n /**\n * 選択肢が変更された時に呼ばれるコールバック関数を指定する。\n */\n onChangeOption?: (option: T) => void;\n /**\n * 選択肢が選択された時に呼ばれるコールバック関数を指定する。\n * 選択肢が選択されず、選択肢が変更された場合は呼ばれない。\n */\n onSelectOption?: (option: T) => void;\n /**\n * 選択後にinput要素から離脱する\n * @default false\n */\n blurOnSelect?: boolean;\n}\n\ninterface UseSelectFieldResult<T extends SelectOptionValue> {\n /**\n * 表示用の文字列。\n */\n displayValue: string | undefined;\n /**\n * 検索用に入力された文字列。\n */\n query: string;\n /**\n * input要素に渡される値。\n */\n value: string | undefined;\n /**\n * 選択肢のリストを開くかどうか。\n */\n openList: boolean;\n /**\n * 実態となるinput要素に渡すprops\n */\n inputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素に渡すprops\n */\n pseudoInputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 選択肢のリストに渡すprops\n */\n listProps: React.ComponentPropsWithRef<\"ul\">;\n /**\n * 選択肢のリストの各要素に渡すpropsと、各選択肢、及びkeyを持つオブジェクトの配列。\n */\n listItems?: {\n key: string;\n option: T;\n props: React.ComponentPropsWithoutRef<\"li\">;\n }[];\n /**\n * 全ての要素の親となる要素に渡すprops\n */\n rootProps: React.ComponentPropsWithRef<\"div\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素にフォーカスしているかどうかを表すフラグ。\n */\n isFocused: boolean;\n}\n\nexport const useSelectField = <T extends SelectOptionValue>(\n args: UseSelectFieldArgs<T>,\n): UseSelectFieldResult<T> => {\n const {\n readOnly = false,\n name,\n required = false,\n options: propsOptions,\n loadOptions = defaultLoadOptions,\n treatQueryAsValue = false,\n blurOnSelect = false,\n defaultValue = undefined,\n onChangeOption,\n onSelectOption,\n } = args;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [value, setValue] = useState<string | undefined>(defaultValue);\n const selectedOptionsCache = useRef<T[] | undefined>(propsOptions);\n const [options, setOptions] = useState(propsOptions);\n const [isFocused, setIsFocused] = useState(false);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const originalInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const pseudoInputRef = useRef<HTMLInputElement>(null);\n\n const updateOptions = useCallback(\n async (query: string, value: string | undefined) => {\n const options = await loadOptions({\n value,\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions],\n );\n\n const updateQuery = useCallback(\n async (query: string, value: string | undefined) => {\n setQuery(query);\n await updateOptions(query, value);\n },\n [updateOptions],\n );\n\n const inputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: originalInputRef,\n required: required,\n name: name,\n defaultValue: value,\n key: value,\n tabIndex: -1,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n onFocus: (event) => {\n event.currentTarget.blur();\n pseudoInputRef.current?.focus();\n },\n };\n }, [name, required, value]);\n\n const displayValue = useMemo(() => {\n return (\n selectedOptionsCache.current?.find(\n (option) => option.value === value,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n ) || options?.find((option) => option.value === value)\n )?.label;\n }, [options, value]);\n\n const rootProps = useMemo(() => {\n return {\n ref: rootRef,\n };\n }, []);\n\n useOnClickOutside([rootRef, listRef], () => {\n setOpen(false);\n });\n\n const updateValue = useCallback(\n (option: T) => {\n const value = option.value;\n setValue(value);\n if (onChangeOption) {\n onChangeOption(option);\n }\n selectedOptionsCache.current = options;\n if (originalInputRef.current) {\n dispatchChangeEvent(originalInputRef.current, value);\n }\n },\n [onChangeOption, options],\n );\n\n const pseudoInputProps = useMemo(() => {\n return {\n ref: pseudoInputRef,\n value: query,\n autoComplete: \"off\" as const,\n autoCorrect: \"off\" as const,\n autoCapitalize: \"none\" as const,\n spellCheck: false,\n tabIndex: 0,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n const query = event.currentTarget.value;\n const value = treatQueryAsValue ? query : undefined;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(query, value);\n if (treatQueryAsValue) {\n updateValue({\n label: query,\n value: query,\n } as T);\n }\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n /**\n * ユーザーがフォーカスされている状態で入力要素をクリックするのは、\n * ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。\n */\n if (event.currentTarget === document.activeElement) {\n setOpen(true);\n }\n },\n onFocus: () => {\n if (readOnly !== true) {\n setOpen(true);\n }\n setIsFocused(true);\n },\n onBlur: () => {\n setIsFocused(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { key } = event;\n if (key === \"Delete\" || key === \"Backspace\") {\n if (query === \"\") {\n setValue(undefined);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateOptions(\"\", undefined);\n }\n } else if (key === \"ArrowDown\") {\n event.preventDefault();\n const list = listRef.current;\n if (list) {\n moveFocus(list, null, nextItem);\n }\n } else if (\n treatQueryAsValue &&\n event.nativeEvent.isComposing === false &&\n key === \"Enter\"\n ) {\n if (treatQueryAsValue) {\n selectedOptionsCache.current = [\n {\n value: query,\n label: query,\n } as T,\n ];\n }\n setOpen(false);\n } else if (event.key.length === 1) {\n setOpen(true);\n }\n },\n };\n }, [\n query,\n treatQueryAsValue,\n updateQuery,\n updateValue,\n readOnly,\n updateOptions,\n ]);\n\n const listProps = useMemo(() => {\n return {\n ref: listRef,\n role: \"listbox\",\n tabIndex: -1,\n onKeyDown: (event: React.KeyboardEvent<HTMLUListElement>) => {\n const key = event.key;\n const list = listRef.current;\n if (list === null) {\n return;\n }\n const currentFocus = ownerDocument(list).activeElement;\n if (key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n } else if (key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n }\n },\n };\n }, []);\n\n const listItems = useMemo(() => {\n return options?.map((option, index) => {\n const selected = option.value === value;\n return {\n key: `${option.value}-${index}`,\n option,\n props: {\n role: \"option\",\n \"aria-selected\": selected,\n /**\n * 何も選択されていないときは、先頭のオプションに飛べるようにする\n */\n tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,\n onClick: () => {\n updateValue(option);\n\n if (onSelectOption) {\n onSelectOption(option);\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(\"\", option.value);\n if (blurOnSelect === false) {\n pseudoInputRef?.current?.focus();\n }\n setOpen(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLLIElement>) => {\n const key = event.key;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n },\n };\n });\n }, [blurOnSelect, onSelectOption, options, updateQuery, updateValue, value]);\n\n const result = useMemo(() => {\n return {\n displayValue,\n query,\n value,\n openList: open,\n inputProps,\n pseudoInputProps,\n listProps,\n listItems,\n rootProps,\n isFocused: isFocused,\n };\n }, [\n displayValue,\n inputProps,\n listItems,\n listProps,\n open,\n pseudoInputProps,\n query,\n rootProps,\n value,\n isFocused,\n ]);\n return result;\n};\n"],"mappings":";;;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAEzE,IAAMC,iBAAiB,GAAGA,CACxBC,GAAkE,EAClEC,OAAkD,KAC/C;EACHN,SAAS,CAAC,MAAM;IACd,IAAI,CAACM,OAAO,EAAE;MACZ,OAAOC,SAAS;IAClB;IACA,IAAMC,QAAQ,GAAIC,KAA8B,IAAK;MACnD,IAAIC,KAAK,CAACC,OAAO,CAACN,GAAG,CAAC,EAAE;QACtB;QACA,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,GAAG,CAACQ,MAAM,EAAED,CAAC,EAAE,EAAE;UACnC,IAAME,OAAO,GAAGT,GAAG,CAACO,CAAC,CAAC,CAACG,OAAO;UAC9B;UACA,IAAID,OAAO,YAAPA,OAAO,CAAEE,QAAQ,CAACP,KAAK,CAACQ,YAAY,CAAC,CAAC,CAAC,CAAC,CAAS,CAAC,EAAE;YACtD;UACF;QACF;MACF,CAAC,MAAM;QACL,IACE,CAACZ,GAAG,CAACU,OAAO,IACZV,GAAG,CAACU,OAAO,CAACC,QAAQ,CAACP,KAAK,CAACQ,YAAY,CAAC,CAAC,CAAC,CAAC,CAAS,CAAC,EACrD;UACA;QACF;MACF;MAEAX,OAAO,CAACG,KAAK,CAAC;IAChB,CAAC;IAEDS,QAAQ,CAACC,gBAAgB,CAAC,WAAW,EAAEX,QAAQ,CAAC;IAChDU,QAAQ,CAACC,gBAAgB,CAAC,YAAY,EAAEX,QAAQ,CAAC;IAEjD,OAAO,MAAM;MACXU,QAAQ,CAACE,mBAAmB,CAAC,WAAW,EAAEZ,QAAQ,CAAC;MACnDU,QAAQ,CAACE,mBAAmB,CAAC,YAAY,EAAEZ,QAAQ,CAAC;IACtD,CAAC;EACH,CAAC,EAAE,CAACH,GAAG,EAAEC,OAAO,CAAC,CAAC;AACpB,CAAC;AAED,IAAMe,SAAS,GAAGA,CAKhBC,KAAU,EACVC,KAAa,KACV;EACH,IAAMC,IAAI,GAAGF,KAAK,CAACG,KAAK,CAAC,CAAC;EAC1B,IAAMC,GAAG,GAAGJ,KAAK,CAACT,MAAM;EACxB,IAAMc,GAAG,GAAGJ,KAAK,CAACK,WAAW,CAAC,CAAC;EAC/B,IAAIhB,CAAC,GAAG,CAAC,CAAC;EACV,IAAIiB,CAAC,GAAG,CAAC;EACT,IAAIC,GAEH;EACD,IAAMC,GAAG,GAAG,IAAIrB,KAAK,CAACgB,GAAG,CAAC;EAC1B,OAAO,EAAEd,CAAC,KAAKc,GAAG,EAAE;IAClBI,GAAG,GAAGN,IAAI,CAACZ,CAAC,CAAC;IACb;AACJ;AACA;IACI,IAAIoB,CAAC,GAAG,CAAC,CAAC;IACV,IAAIC,KAAK,GAAG,CAAC,CAAC;IACd,IAAMC,MAAM,GAAGJ,GAAG,CAACK,IAAI,CAACtB,MAAM;IAC9B,IAAIE,OAAO;IACX,OAAO,EAAEiB,CAAC,KAAKE,MAAM,EAAE;MACrBnB,OAAO,GAAGe,GAAG,CAACK,IAAI,CAACH,CAAC,CAAC,CAACJ,WAAW,CAAC,CAAC,CAACQ,OAAO,CAACT,GAAG,CAAC;MAChD,IAAIM,KAAK,KAAK,CAAC,CAAC,IAAKlB,OAAO,KAAK,CAAC,CAAC,IAAIA,OAAO,GAAGkB,KAAM,EAAE;QACvDA,KAAK,GAAGlB,OAAO;MACjB;IACF;IACA;AACJ;AACA;IACI,IAAMsB,KAAK,GAAGJ,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,IAAIA,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;IAC9C,IAAII,KAAK,GAAG,CAAC,EAAE;MACbN,GAAG,CAACF,CAAC,EAAE,CAAC,GAAAS,QAAA,KAAQR,GAAG;QAAEO;MAAK,EAAE;IAC9B;EACF;EAEAN,GAAG,CAAClB,MAAM,GAAGgB,CAAC;EACdE,GAAG,CAACQ,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;IACjB;IACA,IAAID,CAAC,CAACH,KAAK,IAAII,CAAC,CAACJ,KAAK,EAAE;MACtB,OAAO,CAAC;IACV,CAAC,MAAM;MACL,OAAO,CAAC,CAAC;IACX;EACF,CAAC,CAAC;EACF;EACA,OAAON,GAAG;AACZ,CAAC;AAED,IAAMW,mBAAmB,GAAGA,CAC1B5B,OAA+C,EAC/C6B,KAAuB,KACpB;EAAA,IAAAC,qBAAA;EACH;EACA,IAAMC,sBAAsB,IAAAD,qBAAA,GAAGE,MAAM,CAACC,wBAAwB,CAC5DjC,OAAO,CAACkC,OAAO,CAACpB,WAAW,CAAC,CAAC,KAAK,OAAO,GACrCqB,gBAAgB,CAACC,SAAS,GAC1BC,mBAAmB,CAACD,SAAS,EACjC,OACF,CAAC,qBAL8BN,qBAAA,CAK5BQ,GAAG;EAENP,sBAAsB,YAAtBA,sBAAsB,CAAEQ,IAAI,CAACvC,OAAO,EAAE6B,KAAK,CAAC;EAE5C7B,OAAO,CAACwC,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,EAAE;IAAEC,OAAO,EAAE;EAAK,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAASC,aAAaA,CAACC,IAA6B,EAAY;EAC9D;EACA,OAAO,CAAAA,IAAI,oBAAJA,IAAI,CAAED,aAAa,KAAIvC,QAAQ;AACxC;AAOA,IAAMyC,QAA2B,GAAGA,CAACC,IAAI,EAAEC,IAAI,KAAK;EAClD,IAAID,IAAI,KAAKC,IAAI,EAAE;IACjB,OAAOD,IAAI,CAACE,UAAU;EACxB;EACA,IAAID,IAAI,YAAJA,IAAI,CAAEE,kBAAkB,EAAE;IAC5B,OAAOF,IAAI,CAACE,kBAAkB;EAChC;EACA,OAAOH,IAAI,CAACE,UAAU;AACxB,CAAC;AAED,IAAME,YAA+B,GAAGA,CAACJ,IAAI,EAAEC,IAAI,KAAK;EACtD,IAAID,IAAI,KAAKC,IAAI,EAAE;IACjB,OAAOD,IAAI,CAACK,SAAS;EACvB;EACA,IAAIJ,IAAI,YAAJA,IAAI,CAAEK,sBAAsB,EAAE;IAChC,OAAOL,IAAI,CAACK,sBAAsB;EACpC;EACA,OAAON,IAAI,CAACK,SAAS;AACvB,CAAC;AAED,IAAME,SAAS,GAAGA,CAChBP,IAAsB,EACtBQ,YAA4B,EAC5BC,iBAAoC,KACjC;EACH,IAAIC,SAAS,GAAGD,iBAAiB,CAACT,IAAI,EAAEQ,YAAY,CAAuB;EAC3E,OAAOE,SAAS,EAAE;IAChB,IACEF,YAAY,KAAK,IAAI,GACjBE,SAAS,KAAKV,IAAI,CAACK,SAAS,GAC5BK,SAAS,KAAKF,YAAY,EAC9B;MACA;IACF;IACA,IAAMG,aAAa,GAChBD,SAAS,CAAsBE,QAAQ,IACxCF,SAAS,CAACG,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM;IACpD,IAAIF,aAAa,EAAE;MACjBD,SAAS,GAAGD,iBAAiB,CAACT,IAAI,EAAEU,SAAS,CAAgB;IAC/D,CAAC,MAAM;MACLA,SAAS,CAACI,KAAK,CAAC,CAAC;MACjB;IACF;EACF;AACF,CAAC;AAED,OAAO,IAAMC,0BAA0B,GAAGA,CAGxCC,OAAY,EACZrD,KAAa,KACV;EACH,IAAMsD,MAAM,GAAGxD,SAAS,CACtBuD,OAAO,CAACE,GAAG,CAAEC,MAAM,IAAK;IACtB,OAAAzC,QAAA,KACKyC,MAAM;MACT;MACA5C,IAAI,EAAE4C,MAAM,CAAC5C,IAAI,IAAI,CAAC4C,MAAM,CAACC,KAAK,CAAC;MACnCC,OAAO,EAAEF,MAAM,CAACpC;IAAK;EAEzB,CAAC,CAAC,EACFpB,KACF,CAAC;EACD;EACA,OAAOsD,MAAM;AACf,CAAC;AAED,IAAMK,kBAAkB;EAAA,IAAAC,KAAA,GAAAC,iBAAA,CAAG,WAAAC,IAAA,EASK;IAAA,IAP9B;MACA9D,KAAK;MACLqD;IAKF,CAAC,GAAAS,IAAA;IACC,IAAIT,OAAO,KAAKrE,SAAS,EAAE;MACzB,OAAOA,SAAS;IAClB;IACA,IAAIgB,KAAK,KAAKhB,SAAS,EAAE;MACvB,OAAOqE,OAAO;IAChB;IACA,IAAMC,MAAM,GAAGF,0BAA0B,CAACC,OAAO,EAAErD,KAAK,CAAC;IACzD;IACA,OAAOsD,MAAM,CAAChE,MAAM,GAAGgE,MAAM,GAAGD,OAAO;EACzC,CAAC;EAAA,gBAnBKM,kBAAkBA,CAAAI,EAAA;IAAA,OAAAH,KAAA,CAAAI,KAAA,OAAAC,SAAA;EAAA;AAAA,GAmBvB;AAkHD,OAAO,IAAMC,cAAc,GACzBC,IAA2B,IACC;EAC5B,IAAM;IACJC,QAAQ,GAAG,KAAK;IAChBC,IAAI;IACJC,QAAQ,GAAG,KAAK;IAChBjB,OAAO,EAAEkB,YAAY;IACrBC,WAAW,GAAGb,kBAAkB;IAChCc,iBAAiB,GAAG,KAAK;IACzBC,YAAY,GAAG,KAAK;IACpBC,YAAY,GAAG3F,SAAS;IACxB4F,cAAc;IACdC;EACF,CAAC,GAAGV,IAAI;EACR,IAAM,CAACW,IAAI,EAAEC,OAAO,CAAC,GAAGnG,QAAQ,CAAC,KAAK,CAAC;EACvC,IAAM,CAACoB,KAAK,EAAEgF,QAAQ,CAAC,GAAGpG,QAAQ,CAAC,EAAE,CAAC;EACtC,IAAM,CAACwC,KAAK,EAAE6D,QAAQ,CAAC,GAAGrG,QAAQ,CAAqB+F,YAAY,CAAC;EACpE,IAAMO,oBAAoB,GAAGvG,MAAM,CAAkB4F,YAAY,CAAC;EAClE,IAAM,CAAClB,OAAO,EAAE8B,UAAU,CAAC,GAAGvG,QAAQ,CAAC2F,YAAY,CAAC;EACpD,IAAM,CAACa,SAAS,EAAEC,YAAY,CAAC,GAAGzG,QAAQ,CAAC,KAAK,CAAC;EAEjD,IAAM0G,OAAO,GAAG3G,MAAM,CAAiB,IAAI,CAAC;EAC5C,IAAM4G,gBAAgB,GAAG5G,MAAM,CAAmB,IAAI,CAAC;EACvD,IAAM6G,OAAO,GAAG7G,MAAM,CAAmB,IAAI,CAAC;EAC9C,IAAM8G,cAAc,GAAG9G,MAAM,CAAmB,IAAI,CAAC;EAErD,IAAM+G,aAAa,GAAGlH,WAAW;IAAA,IAAAmH,KAAA,GAAA9B,iBAAA,CAC/B,WAAO7D,KAAa,EAAEoB,KAAyB,EAAK;MAClD,IAAMiC,OAAO,SAASmB,WAAW,CAAC;QAChCpD,KAAK;QACLpB,KAAK;QACLqD,OAAO,EAAEkB,YAAY;QACrBqB,eAAe,EAAEV,oBAAoB,CAAC1F;MACxC,CAAC,CAAC;MACF2F,UAAU,CAAC9B,OAAO,CAAC;IACrB,CAAC;IAAA,iBAAAwC,GAAA,EAAAC,GAAA;MAAA,OAAAH,KAAA,CAAA3B,KAAA,OAAAC,SAAA;IAAA;EAAA,KACD,CAACO,WAAW,EAAED,YAAY,CAC5B,CAAC;EAED,IAAMwB,WAAW,GAAGvH,WAAW;IAAA,IAAAwH,KAAA,GAAAnC,iBAAA,CAC7B,WAAO7D,KAAa,EAAEoB,KAAyB,EAAK;MAClD4D,QAAQ,CAAChF,KAAK,CAAC;MACf,MAAM0F,aAAa,CAAC1F,KAAK,EAAEoB,KAAK,CAAC;IACnC,CAAC;IAAA,iBAAA6E,GAAA,EAAAC,GAAA;MAAA,OAAAF,KAAA,CAAAhC,KAAA,OAAAC,SAAA;IAAA;EAAA,KACD,CAACyB,aAAa,CAChB,CAAC;EAED,IAAMS,UAAU,GAAGzH,OAAO,CAAC,MAA4C;IACrE,OAAO;MACLI,GAAG,EAAEyG,gBAAgB;MACrBjB,QAAQ,EAAEA,QAAQ;MAClBD,IAAI,EAAEA,IAAI;MACVM,YAAY,EAAEvD,KAAK;MACnBhB,GAAG,EAAEgB,KAAK;MACVgF,QAAQ,EAAE,CAAC,CAAC;MACZC,YAAY,EAAE,KAAK;MACnBC,WAAW,EAAE,KAAK;MAClBC,cAAc,EAAE,MAAM;MACtBC,UAAU,EAAE,KAAK;MACjBC,OAAO,EAAGvH,KAAK,IAAK;QAAA,IAAAwH,qBAAA;QAClBxH,KAAK,CAACyH,aAAa,CAACC,IAAI,CAAC,CAAC;QAC1B,CAAAF,qBAAA,GAAAjB,cAAc,CAACjG,OAAO,aAAtBkH,qBAAA,CAAwBvD,KAAK,CAAC,CAAC;MACjC;IACF,CAAC;EACH,CAAC,EAAE,CAACkB,IAAI,EAAEC,QAAQ,EAAElD,KAAK,CAAC,CAAC;EAE3B,IAAMyF,YAAY,GAAGnI,OAAO,CAAC,MAAM;IAAA,IAAAoI,KAAA,EAAAC,qBAAA;IACjC,QAAAD,KAAA,GACE,EAAAC,qBAAA,GAAA7B,oBAAoB,CAAC1F,OAAO,qBAA5BuH,qBAAA,CAA8BC,IAAI,CAC/BxD,MAAM,IAAKA,MAAM,CAACpC,KAAK,KAAKA;IAC7B;IACF,CAAC,MAAIiC,OAAO,oBAAPA,OAAO,CAAE2D,IAAI,CAAExD,MAAM,IAAKA,MAAM,CAACpC,KAAK,KAAKA,KAAK,CAAC,sBAJjD0F,KAAA,CAKJrD,KAAK;EACV,CAAC,EAAE,CAACJ,OAAO,EAAEjC,KAAK,CAAC,CAAC;EAEpB,IAAM6F,SAAS,GAAGvI,OAAO,CAAC,MAAM;IAC9B,OAAO;MACLI,GAAG,EAAEwG;IACP,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAENzG,iBAAiB,CAAC,CAACyG,OAAO,EAAEE,OAAO,CAAC,EAAE,MAAM;IAC1CT,OAAO,CAAC,KAAK,CAAC;EAChB,CAAC,CAAC;EAEF,IAAMmC,WAAW,GAAG1I,WAAW,CAC5BgF,MAAS,IAAK;IACb,IAAMpC,KAAK,GAAGoC,MAAM,CAACpC,KAAK;IAC1B6D,QAAQ,CAAC7D,KAAK,CAAC;IACf,IAAIwD,cAAc,EAAE;MAClBA,cAAc,CAACpB,MAAM,CAAC;IACxB;IACA0B,oBAAoB,CAAC1F,OAAO,GAAG6D,OAAO;IACtC,IAAIkC,gBAAgB,CAAC/F,OAAO,EAAE;MAC5B2B,mBAAmB,CAACoE,gBAAgB,CAAC/F,OAAO,EAAE4B,KAAK,CAAC;IACtD;EACF,CAAC,EACD,CAACwD,cAAc,EAAEvB,OAAO,CAC1B,CAAC;EAED,IAAM8D,gBAAgB,GAAGzI,OAAO,CAAC,MAAM;IACrC,OAAO;MACLI,GAAG,EAAE2G,cAAc;MACnBrE,KAAK,EAAEpB,KAAK;MACZqG,YAAY,EAAE,KAAc;MAC5BC,WAAW,EAAE,KAAc;MAC3BC,cAAc,EAAE,MAAe;MAC/BC,UAAU,EAAE,KAAK;MACjBJ,QAAQ,EAAE,CAAC;MACXgB,QAAQ,EAAGlI,KAA0C,IAAK;QACxD,IAAMc,KAAK,GAAGd,KAAK,CAACyH,aAAa,CAACvF,KAAK;QACvC,IAAMA,KAAK,GAAGqD,iBAAiB,GAAGzE,KAAK,GAAGhB,SAAS;QACnD;QACA+G,WAAW,CAAC/F,KAAK,EAAEoB,KAAK,CAAC;QACzB,IAAIqD,iBAAiB,EAAE;UACrByC,WAAW,CAAC;YACVzD,KAAK,EAAEzD,KAAK;YACZoB,KAAK,EAAEpB;UACT,CAAM,CAAC;QACT;MACF,CAAC;MACDqH,OAAO,EAAGnI,KAAyC,IAAK;QACtD;AACR;AACA;AACA;QACQ,IAAIA,KAAK,CAACyH,aAAa,KAAKhH,QAAQ,CAAC2H,aAAa,EAAE;UAClDvC,OAAO,CAAC,IAAI,CAAC;QACf;MACF,CAAC;MACD0B,OAAO,EAAEA,CAAA,KAAM;QACb,IAAIrC,QAAQ,KAAK,IAAI,EAAE;UACrBW,OAAO,CAAC,IAAI,CAAC;QACf;QACAM,YAAY,CAAC,IAAI,CAAC;MACpB,CAAC;MACDkC,MAAM,EAAEA,CAAA,KAAM;QACZlC,YAAY,CAAC,KAAK,CAAC;MACrB,CAAC;MACDmC,SAAS,EAAGtI,KAA4C,IAAK;QAC3D,IAAM;UAAEkB;QAAI,CAAC,GAAGlB,KAAK;QACrB,IAAIkB,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,WAAW,EAAE;UAC3C,IAAIJ,KAAK,KAAK,EAAE,EAAE;YAChBiF,QAAQ,CAACjG,SAAS,CAAC;YACnB;YACA0G,aAAa,CAAC,EAAE,EAAE1G,SAAS,CAAC;UAC9B;QACF,CAAC,MAAM,IAAIoB,GAAG,KAAK,WAAW,EAAE;UAC9BlB,KAAK,CAACuI,cAAc,CAAC,CAAC;UACtB,IAAMpF,KAAI,GAAGmD,OAAO,CAAChG,OAAO;UAC5B,IAAI6C,KAAI,EAAE;YACRO,SAAS,CAACP,KAAI,EAAE,IAAI,EAAED,QAAQ,CAAC;UACjC;QACF,CAAC,MAAM,IACLqC,iBAAiB,IACjBvF,KAAK,CAACwI,WAAW,CAACC,WAAW,KAAK,KAAK,IACvCvH,GAAG,KAAK,OAAO,EACf;UACA,IAAIqE,iBAAiB,EAAE;YACrBS,oBAAoB,CAAC1F,OAAO,GAAG,CAC7B;cACE4B,KAAK,EAAEpB,KAAK;cACZyD,KAAK,EAAEzD;YACT,CAAC,CACF;UACH;UACA+E,OAAO,CAAC,KAAK,CAAC;QAChB,CAAC,MAAM,IAAI7F,KAAK,CAACkB,GAAG,CAACd,MAAM,KAAK,CAAC,EAAE;UACjCyF,OAAO,CAAC,IAAI,CAAC;QACf;MACF;IACF,CAAC;EACH,CAAC,EAAE,CACD/E,KAAK,EACLyE,iBAAiB,EACjBsB,WAAW,EACXmB,WAAW,EACX9C,QAAQ,EACRsB,aAAa,CACd,CAAC;EAEF,IAAMkC,SAAS,GAAGlJ,OAAO,CAAC,MAAM;IAC9B,OAAO;MACLI,GAAG,EAAE0G,OAAO;MACZqC,IAAI,EAAE,SAAS;MACfzB,QAAQ,EAAE,CAAC,CAAC;MACZoB,SAAS,EAAGtI,KAA4C,IAAK;QAC3D,IAAMkB,GAAG,GAAGlB,KAAK,CAACkB,GAAG;QACrB,IAAMiC,IAAI,GAAGmD,OAAO,CAAChG,OAAO;QAC5B,IAAI6C,IAAI,KAAK,IAAI,EAAE;UACjB;QACF;QACA,IAAMQ,YAAY,GAAGX,aAAa,CAACG,IAAI,CAAC,CAACiF,aAAa;QACtD,IAAIlH,GAAG,KAAK,WAAW,EAAE;UACvBlB,KAAK,CAACuI,cAAc,CAAC,CAAC;UACtB7E,SAAS,CAACP,IAAI,EAAEQ,YAAY,EAAET,QAAQ,CAAC;QACzC,CAAC,MAAM,IAAIhC,GAAG,KAAK,SAAS,EAAE;UAC5BlB,KAAK,CAACuI,cAAc,CAAC,CAAC;UACtB7E,SAAS,CAACP,IAAI,EAAEQ,YAAY,EAAEJ,YAAY,CAAC;QAC7C;MACF;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMqF,SAAS,GAAGpJ,OAAO,CAAC,MAAM;IAC9B,OAAO2E,OAAO,oBAAPA,OAAO,CAAEE,GAAG,CAAC,CAACC,MAAM,EAAE9C,KAAK,KAAK;MACrC,IAAMqH,QAAQ,GAAGvE,MAAM,CAACpC,KAAK,KAAKA,KAAK;MACvC,OAAO;QACLhB,GAAG,EAAKoD,MAAM,CAACpC,KAAK,SAAIV,KAAO;QAC/B8C,MAAM;QACNwE,KAAK,EAAE;UACLH,IAAI,EAAE,QAAQ;UACd,eAAe,EAAEE,QAAQ;UACzB;AACV;AACA;UACU3B,QAAQ,EAAE,CAAChF,KAAK,KAAKpC,SAAS,GAAG0B,KAAK,KAAK,CAAC,GAAGqH,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;UAClEV,OAAO,EAAEA,CAAA,KAAM;YACbH,WAAW,CAAC1D,MAAM,CAAC;YAEnB,IAAIqB,cAAc,EAAE;cAClBA,cAAc,CAACrB,MAAM,CAAC;YACxB;YACA;YACAuC,WAAW,CAAC,EAAE,EAAEvC,MAAM,CAACpC,KAAK,CAAC;YAC7B,IAAIsD,YAAY,KAAK,KAAK,EAAE;cAAA,IAAAuD,sBAAA;cAC1BxC,cAAc,aAAAwC,sBAAA,GAAdxC,cAAc,CAAEjG,OAAO,aAAvByI,sBAAA,CAAyB9E,KAAK,CAAC,CAAC;YAClC;YACA4B,OAAO,CAAC,KAAK,CAAC;UAChB,CAAC;UACDyC,SAAS,EAAGtI,KAAyC,IAAK;YACxD,IAAMkB,GAAG,GAAGlB,KAAK,CAACkB,GAAG;YACrB,IAAIA,GAAG,KAAK,OAAO,IAAIA,GAAG,KAAK,GAAG,EAAE;cAClClB,KAAK,CAACuI,cAAc,CAAC,CAAC;cACtBvI,KAAK,CAACyH,aAAa,CAACuB,KAAK,CAAC,CAAC;YAC7B;UACF;QACF;MACF,CAAC;IACH,CAAC,CAAC;EACJ,CAAC,EAAE,CAACxD,YAAY,EAAEG,cAAc,EAAExB,OAAO,EAAE0C,WAAW,EAAEmB,WAAW,EAAE9F,KAAK,CAAC,CAAC;EAE5E,IAAMkC,MAAM,GAAG5E,OAAO,CAAC,MAAM;IAC3B,OAAO;MACLmI,YAAY;MACZ7G,KAAK;MACLoB,KAAK;MACL+G,QAAQ,EAAErD,IAAI;MACdqB,UAAU;MACVgB,gBAAgB;MAChBS,SAAS;MACTE,SAAS;MACTb,SAAS;MACT7B,SAAS,EAAEA;IACb,CAAC;EACH,CAAC,EAAE,CACDyB,YAAY,EACZV,UAAU,EACV2B,SAAS,EACTF,SAAS,EACT9C,IAAI,EACJqC,gBAAgB,EAChBnH,KAAK,EACLiH,SAAS,EACT7F,KAAK,EACLgE,SAAS,CACV,CAAC;EACF,OAAO9B,MAAM;AACf,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matsuri-ui-base",
3
- "version": "0.3.1-alpha-1725854469662-28b3fb8.0",
3
+ "version": "0.3.1-alpha-1727461845773-fe061b9.0",
4
4
  "sideEffects": false,
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -32,9 +32,9 @@
32
32
  "@babel/preset-env": "7.25.4",
33
33
  "@babel/preset-react": "7.24.7",
34
34
  "@babel/preset-typescript": "7.24.7",
35
- "@types/react": "18.3.5",
35
+ "@types/react": "18.3.9",
36
36
  "@types/react-dom": "18.3.0",
37
- "concurrently": "8.2.2",
37
+ "concurrently": "9.0.1",
38
38
  "react": "18.3.1",
39
39
  "react-dom": "18.3.1"
40
40
  }