matsuri-ui-base 0.1.1-alpha-49cc10b.0 → 0.1.1-alpha-db886a8.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.
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  export declare const filterSelectOptionsByQuery: <T extends SelectOptionValue = SelectOptionValue>(options: T[], query: string) => any[];
3
3
  export type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> = (args: {
4
+ value: string | undefined;
4
5
  query: string;
5
6
  options?: T[];
6
7
  selectedOptions?: T[];
@@ -176,20 +176,29 @@ export var useSelectField = args => {
176
176
  var originalInputRef = useRef(null);
177
177
  var listRef = useRef(null);
178
178
  var pseudoInputRef = useRef(null);
179
- var updateQuery = useCallback( /*#__PURE__*/function () {
180
- var _ref3 = _asyncToGenerator(function* (query) {
181
- setQuery(query);
179
+ var updateOptions = useCallback( /*#__PURE__*/function () {
180
+ var _ref3 = _asyncToGenerator(function* (query, value) {
182
181
  var options = yield loadOptions({
182
+ value,
183
183
  query,
184
184
  options: propsOptions,
185
185
  selectedOptions: selectedOptionsCache.current
186
186
  });
187
187
  setOptions(options);
188
188
  });
189
- return function (_x2) {
189
+ return function (_x2, _x3) {
190
190
  return _ref3.apply(this, arguments);
191
191
  };
192
192
  }(), [loadOptions, propsOptions]);
193
+ var updateQuery = useCallback( /*#__PURE__*/function () {
194
+ var _ref4 = _asyncToGenerator(function* (query, value) {
195
+ setQuery(query);
196
+ yield updateOptions(query, value);
197
+ });
198
+ return function (_x4, _x5) {
199
+ return _ref4.apply(this, arguments);
200
+ };
201
+ }(), [updateOptions]);
193
202
  var inputProps = useMemo(() => {
194
203
  return {
195
204
  ref: originalInputRef,
@@ -210,10 +219,10 @@ export var useSelectField = args => {
210
219
  };
211
220
  }, [name, required, value]);
212
221
  var displayValue = useMemo(() => {
213
- var _ref4, _selectedOptionsCache;
214
- return (_ref4 = ((_selectedOptionsCache = selectedOptionsCache.current) == null ? void 0 : _selectedOptionsCache.find(option => option.value === value
222
+ var _ref5, _selectedOptionsCache;
223
+ return (_ref5 = ((_selectedOptionsCache = selectedOptionsCache.current) == null ? void 0 : _selectedOptionsCache.find(option => option.value === value
215
224
  // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
216
- )) || (options == null ? void 0 : options.find(option => option.value === value))) == null ? void 0 : _ref4.label;
225
+ )) || (options == null ? void 0 : options.find(option => option.value === value))) == null ? void 0 : _ref5.label;
217
226
  }, [options, value]);
218
227
  var rootProps = useMemo(() => {
219
228
  return {
@@ -245,8 +254,9 @@ export var useSelectField = args => {
245
254
  tabIndex: 0,
246
255
  onChange: event => {
247
256
  var query = event.currentTarget.value;
257
+ var value = treatQueryAsValue ? query : undefined;
248
258
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
249
- updateQuery(query);
259
+ updateQuery(query, value);
250
260
  if (treatQueryAsValue) {
251
261
  updateValue({
252
262
  label: query,
@@ -279,6 +289,8 @@ export var useSelectField = args => {
279
289
  if (key === "Delete" || key === "Backspace") {
280
290
  if (query === "") {
281
291
  setValue(undefined);
292
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
293
+ updateOptions("", undefined);
282
294
  }
283
295
  } else if (key === "ArrowDown") {
284
296
  event.preventDefault();
@@ -299,7 +311,7 @@ export var useSelectField = args => {
299
311
  }
300
312
  }
301
313
  };
302
- }, [query, updateQuery, treatQueryAsValue, updateValue, readOnly]);
314
+ }, [query, treatQueryAsValue, updateQuery, updateValue, readOnly, updateOptions]);
303
315
  var listProps = useMemo(() => {
304
316
  return {
305
317
  ref: listRef,
@@ -338,7 +350,7 @@ export var useSelectField = args => {
338
350
  onClick: () => {
339
351
  updateValue(option);
340
352
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
341
- updateQuery("");
353
+ updateQuery("", option.value);
342
354
  if (blurOnSelect === false) {
343
355
  var _pseudoInputRef$curre2;
344
356
  pseudoInputRef == null ? void 0 : (_pseudoInputRef$curre2 = pseudoInputRef.current) == null ? void 0 : _pseudoInputRef$curre2.focus();
@@ -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","open","setOpen","setQuery","setValue","selectedOptionsCache","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateQuery","_ref3","selectedOptions","_x2","inputProps","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","_pseudoInputRef$curre","currentTarget","blur","displayValue","_ref4","_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 && 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 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 * 選択後に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 } = 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 updateQuery = useCallback(\n async (query: string) => {\n setQuery(query);\n const options = await loadOptions({\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions]\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 // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(query);\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 } 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 }, [query, updateQuery, treatQueryAsValue, updateValue, readOnly]);\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 // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(\"\");\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, 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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"}
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","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 && 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 * 選択後に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 } = 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 // 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, 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,IAAIA,OAAO,CAACE,QAAQ,CAACP,KAAK,CAACQ,YAAY,EAAE,CAAC,CAAC,CAAC,CAAS,EAAE;YAChE;UACF;QACF;MACF,CAAC,MAAM;QACL,IACE,CAACZ,GAAG,CAACU,OAAO,IACZV,GAAG,CAACU,OAAO,CAACC,QAAQ,CAACP,KAAK,CAACQ,YAAY,EAAE,CAAC,CAAC,CAAC,CAAS,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,EAAE;EAC1B,IAAMC,GAAG,GAAGJ,KAAK,CAACT,MAAM;EACxB,IAAMc,GAAG,GAAGJ,KAAK,CAACK,WAAW,EAAE;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,EAAE,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,EAAE,KAAK,OAAO,GACrCqB,gBAAgB,CAACC,SAAS,GAC1BC,mBAAmB,CAACD,SAAS,EACjC,OAAO,CACR,qBAL8BN,qBAAA,CAK5BQ,GAAG;EAENP,sBAAsB,oBAAtBA,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,EAAE;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,KAAK,CACN;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;AA6GD,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;EACF,CAAC,GAAGT,IAAI;EACR,IAAM,CAACU,IAAI,EAAEC,OAAO,CAAC,GAAGlG,QAAQ,CAAC,KAAK,CAAC;EACvC,IAAM,CAACoB,KAAK,EAAE+E,QAAQ,CAAC,GAAGnG,QAAQ,CAAC,EAAE,CAAC;EACtC,IAAM,CAACwC,KAAK,EAAE4D,QAAQ,CAAC,GAAGpG,QAAQ,CAAqB+F,YAAY,CAAC;EACpE,IAAMM,oBAAoB,GAAGtG,MAAM,CAAkB4F,YAAY,CAAC;EAClE,IAAM,CAAClB,OAAO,EAAE6B,UAAU,CAAC,GAAGtG,QAAQ,CAAC2F,YAAY,CAAC;EACpD,IAAM,CAACY,SAAS,EAAEC,YAAY,CAAC,GAAGxG,QAAQ,CAAC,KAAK,CAAC;EAEjD,IAAMyG,OAAO,GAAG1G,MAAM,CAAiB,IAAI,CAAC;EAC5C,IAAM2G,gBAAgB,GAAG3G,MAAM,CAAmB,IAAI,CAAC;EACvD,IAAM4G,OAAO,GAAG5G,MAAM,CAAmB,IAAI,CAAC;EAC9C,IAAM6G,cAAc,GAAG7G,MAAM,CAAmB,IAAI,CAAC;EAErD,IAAM8G,aAAa,GAAGjH,WAAW;IAAA,IAAAkH,KAAA,GAAA7B,iBAAA,CAC/B,WAAO7D,KAAa,EAAEoB,KAAyB,EAAK;MAClD,IAAMiC,OAAO,SAASmB,WAAW,CAAC;QAChCpD,KAAK;QACLpB,KAAK;QACLqD,OAAO,EAAEkB,YAAY;QACrBoB,eAAe,EAAEV,oBAAoB,CAACzF;MACxC,CAAC,CAAC;MACF0F,UAAU,CAAC7B,OAAO,CAAC;IACrB,CAAC;IAAA,iBAAAuC,GAAA,EAAAC,GAAA;MAAA,OAAAH,KAAA,CAAA1B,KAAA,OAAAC,SAAA;IAAA;EAAA,KACD,CAACO,WAAW,EAAED,YAAY,CAAC,CAC5B;EAED,IAAMuB,WAAW,GAAGtH,WAAW;IAAA,IAAAuH,KAAA,GAAAlC,iBAAA,CAC7B,WAAO7D,KAAa,EAAEoB,KAAyB,EAAK;MAClD2D,QAAQ,CAAC/E,KAAK,CAAC;MACf,MAAMyF,aAAa,CAACzF,KAAK,EAAEoB,KAAK,CAAC;IACnC,CAAC;IAAA,iBAAA4E,GAAA,EAAAC,GAAA;MAAA,OAAAF,KAAA,CAAA/B,KAAA,OAAAC,SAAA;IAAA;EAAA,KACD,CAACwB,aAAa,CAAC,CAChB;EAED,IAAMS,UAAU,GAAGxH,OAAO,CAAC,MAA4C;IACrE,OAAO;MACLI,GAAG,EAAEwG,gBAAgB;MACrBhB,QAAQ,EAAEA,QAAQ;MAClBD,IAAI,EAAEA,IAAI;MACVM,YAAY,EAAEvD,KAAK;MACnBhB,GAAG,EAAEgB,KAAK;MACV+E,QAAQ,EAAE,CAAC,CAAC;MACZC,YAAY,EAAE,KAAK;MACnBC,WAAW,EAAE,KAAK;MAClBC,cAAc,EAAE,MAAM;MACtBC,UAAU,EAAE,KAAK;MACjBC,OAAO,EAAGtH,KAAK,IAAK;QAAA,IAAAuH,qBAAA;QAClBvH,KAAK,CAACwH,aAAa,CAACC,IAAI,EAAE;QAC1B,CAAAF,qBAAA,GAAAjB,cAAc,CAAChG,OAAO,qBAAtBiH,qBAAA,CAAwBtD,KAAK,EAAE;MACjC;IACF,CAAC;EACH,CAAC,EAAE,CAACkB,IAAI,EAAEC,QAAQ,EAAElD,KAAK,CAAC,CAAC;EAE3B,IAAMwF,YAAY,GAAGlI,OAAO,CAAC,MAAM;IAAA,IAAAmI,KAAA,EAAAC,qBAAA;IACjC,QAAAD,KAAA,GACE,EAAAC,qBAAA,GAAA7B,oBAAoB,CAACzF,OAAO,qBAA5BsH,qBAAA,CAA8BC,IAAI,CAC/BvD,MAAM,IAAKA,MAAM,CAACpC,KAAK,KAAKA;IAC7B;IAAA,CACD,MAAIiC,OAAO,oBAAPA,OAAO,CAAE0D,IAAI,CAAEvD,MAAM,IAAKA,MAAM,CAACpC,KAAK,KAAKA,KAAK,CAAC,sBAJjDyF,KAAA,CAKJpD,KAAK;EACV,CAAC,EAAE,CAACJ,OAAO,EAAEjC,KAAK,CAAC,CAAC;EAEpB,IAAM4F,SAAS,GAAGtI,OAAO,CAAC,MAAM;IAC9B,OAAO;MACLI,GAAG,EAAEuG;IACP,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAENxG,iBAAiB,CAAC,CAACwG,OAAO,EAAEE,OAAO,CAAC,EAAE,MAAM;IAC1CT,OAAO,CAAC,KAAK,CAAC;EAChB,CAAC,CAAC;EAEF,IAAMmC,WAAW,GAAGzI,WAAW,CAC5BgF,MAAS,IAAK;IACb,IAAMpC,KAAK,GAAGoC,MAAM,CAACpC,KAAK;IAC1B4D,QAAQ,CAAC5D,KAAK,CAAC;IACf,IAAIwD,cAAc,EAAE;MAClBA,cAAc,CAACpB,MAAM,CAAC;IACxB;IACAyB,oBAAoB,CAACzF,OAAO,GAAG6D,OAAO;IACtC,IAAIiC,gBAAgB,CAAC9F,OAAO,EAAE;MAC5B2B,mBAAmB,CAACmE,gBAAgB,CAAC9F,OAAO,EAAE4B,KAAK,CAAC;IACtD;EACF,CAAC,EACD,CAACwD,cAAc,EAAEvB,OAAO,CAAC,CAC1B;EAED,IAAM6D,gBAAgB,GAAGxI,OAAO,CAAC,MAAM;IACrC,OAAO;MACLI,GAAG,EAAE0G,cAAc;MACnBpE,KAAK,EAAEpB,KAAK;MACZoG,YAAY,EAAE,KAAc;MAC5BC,WAAW,EAAE,KAAc;MAC3BC,cAAc,EAAE,MAAe;MAC/BC,UAAU,EAAE,KAAK;MACjBJ,QAAQ,EAAE,CAAC;MACXgB,QAAQ,EAAGjI,KAA0C,IAAK;QACxD,IAAMc,KAAK,GAAGd,KAAK,CAACwH,aAAa,CAACtF,KAAK;QACvC,IAAMA,KAAK,GAAGqD,iBAAiB,GAAGzE,KAAK,GAAGhB,SAAS;QACnD;QACA8G,WAAW,CAAC9F,KAAK,EAAEoB,KAAK,CAAC;QACzB,IAAIqD,iBAAiB,EAAE;UACrBwC,WAAW,CAAC;YACVxD,KAAK,EAAEzD,KAAK;YACZoB,KAAK,EAAEpB;UACT,CAAC,CAAM;QACT;MACF,CAAC;MACDoH,OAAO,EAAGlI,KAAyC,IAAK;QACtD;AACR;AACA;AACA;QACQ,IAAIA,KAAK,CAACwH,aAAa,KAAK/G,QAAQ,CAAC0H,aAAa,EAAE;UAClDvC,OAAO,CAAC,IAAI,CAAC;QACf;MACF,CAAC;MACD0B,OAAO,EAAEA,CAAA,KAAM;QACb,IAAIpC,QAAQ,KAAK,IAAI,EAAE;UACrBU,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,EAAGrI,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;YAChBgF,QAAQ,CAAChG,SAAS,CAAC;YACnB;YACAyG,aAAa,CAAC,EAAE,EAAEzG,SAAS,CAAC;UAC9B;QACF,CAAC,MAAM,IAAIoB,GAAG,KAAK,WAAW,EAAE;UAC9BlB,KAAK,CAACsI,cAAc,EAAE;UACtB,IAAMnF,KAAI,GAAGkD,OAAO,CAAC/F,OAAO;UAC5B,IAAI6C,KAAI,EAAE;YACRO,SAAS,CAACP,KAAI,EAAE,IAAI,EAAED,QAAQ,CAAC;UACjC;QACF,CAAC,MAAM,IACLqC,iBAAiB,IACjBvF,KAAK,CAACuI,WAAW,CAACC,WAAW,KAAK,KAAK,IACvCtH,GAAG,KAAK,OAAO,EACf;UACA,IAAIqE,iBAAiB,EAAE;YACrBQ,oBAAoB,CAACzF,OAAO,GAAG,CAC7B;cACE4B,KAAK,EAAEpB,KAAK;cACZyD,KAAK,EAAEzD;YACT,CAAC,CACF;UACH;UACA8E,OAAO,CAAC,KAAK,CAAC;QAChB,CAAC,MAAM,IAAI5F,KAAK,CAACkB,GAAG,CAACd,MAAM,KAAK,CAAC,EAAE;UACjCwF,OAAO,CAAC,IAAI,CAAC;QACf;MACF;IACF,CAAC;EACH,CAAC,EAAE,CACD9E,KAAK,EACLyE,iBAAiB,EACjBqB,WAAW,EACXmB,WAAW,EACX7C,QAAQ,EACRqB,aAAa,CACd,CAAC;EAEF,IAAMkC,SAAS,GAAGjJ,OAAO,CAAC,MAAM;IAC9B,OAAO;MACLI,GAAG,EAAEyG,OAAO;MACZqC,IAAI,EAAE,SAAS;MACfzB,QAAQ,EAAE,CAAC,CAAC;MACZoB,SAAS,EAAGrI,KAA4C,IAAK;QAC3D,IAAMkB,GAAG,GAAGlB,KAAK,CAACkB,GAAG;QACrB,IAAMiC,IAAI,GAAGkD,OAAO,CAAC/F,OAAO;QAC5B,IAAI6C,IAAI,KAAK,IAAI,EAAE;UACjB;QACF;QACA,IAAMQ,YAAY,GAAGX,aAAa,CAACG,IAAI,CAAC,CAACgF,aAAa;QACtD,IAAIjH,GAAG,KAAK,WAAW,EAAE;UACvBlB,KAAK,CAACsI,cAAc,EAAE;UACtB5E,SAAS,CAACP,IAAI,EAAEQ,YAAY,EAAET,QAAQ,CAAC;QACzC,CAAC,MAAM,IAAIhC,GAAG,KAAK,SAAS,EAAE;UAC5BlB,KAAK,CAACsI,cAAc,EAAE;UACtB5E,SAAS,CAACP,IAAI,EAAEQ,YAAY,EAAEJ,YAAY,CAAC;QAC7C;MACF;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMoF,SAAS,GAAGnJ,OAAO,CAAC,MAAM;IAC9B,OAAO2E,OAAO,oBAAPA,OAAO,CAAEE,GAAG,CAAC,CAACC,MAAM,EAAE9C,KAAK,KAAK;MACrC,IAAMoH,QAAQ,GAAGtE,MAAM,CAACpC,KAAK,KAAKA,KAAK;MACvC,OAAO;QACLhB,GAAG,EAAKoD,MAAM,CAACpC,KAAK,SAAIV,KAAO;QAC/B8C,MAAM;QACNuE,KAAK,EAAE;UACLH,IAAI,EAAE,QAAQ;UACd,eAAe,EAAEE,QAAQ;UACzB;AACV;AACA;UACU3B,QAAQ,EAAE,CAAC/E,KAAK,KAAKpC,SAAS,GAAG0B,KAAK,KAAK,CAAC,GAAGoH,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;UAClEV,OAAO,EAAEA,CAAA,KAAM;YACbH,WAAW,CAACzD,MAAM,CAAC;YACnB;YACAsC,WAAW,CAAC,EAAE,EAAEtC,MAAM,CAACpC,KAAK,CAAC;YAC7B,IAAIsD,YAAY,KAAK,KAAK,EAAE;cAAA,IAAAsD,sBAAA;cAC1BxC,cAAc,qBAAAwC,sBAAA,GAAdxC,cAAc,CAAEhG,OAAO,qBAAvBwI,sBAAA,CAAyB7E,KAAK,EAAE;YAClC;YACA2B,OAAO,CAAC,KAAK,CAAC;UAChB,CAAC;UACDyC,SAAS,EAAGrI,KAAyC,IAAK;YACxD,IAAMkB,GAAG,GAAGlB,KAAK,CAACkB,GAAG;YACrB,IAAIA,GAAG,KAAK,OAAO,IAAIA,GAAG,KAAK,GAAG,EAAE;cAClClB,KAAK,CAACsI,cAAc,EAAE;cACtBtI,KAAK,CAACwH,aAAa,CAACuB,KAAK,EAAE;YAC7B;UACF;QACF;MACF,CAAC;IACH,CAAC,CAAC;EACJ,CAAC,EAAE,CAACvD,YAAY,EAAErB,OAAO,EAAEyC,WAAW,EAAEmB,WAAW,EAAE7F,KAAK,CAAC,CAAC;EAE5D,IAAMkC,MAAM,GAAG5E,OAAO,CAAC,MAAM;IAC3B,OAAO;MACLkI,YAAY;MACZ5G,KAAK;MACLoB,KAAK;MACL8G,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,EAChBlH,KAAK,EACLgH,SAAS,EACT5F,KAAK,EACL+D,SAAS,CACV,CAAC;EACF,OAAO7B,MAAM;AACf,CAAC"}
@@ -173,15 +173,19 @@ const useSelectField = args => {
173
173
  const originalInputRef = (0, _react.useRef)(null);
174
174
  const listRef = (0, _react.useRef)(null);
175
175
  const pseudoInputRef = (0, _react.useRef)(null);
176
- const updateQuery = (0, _react.useCallback)(async query => {
177
- setQuery(query);
176
+ const updateOptions = (0, _react.useCallback)(async (query, value) => {
178
177
  const options = await loadOptions({
178
+ value,
179
179
  query,
180
180
  options: propsOptions,
181
181
  selectedOptions: selectedOptionsCache.current
182
182
  });
183
183
  setOptions(options);
184
184
  }, [loadOptions, propsOptions]);
185
+ const updateQuery = (0, _react.useCallback)(async (query, value) => {
186
+ setQuery(query);
187
+ await updateOptions(query, value);
188
+ }, [updateOptions]);
185
189
  const inputProps = (0, _react.useMemo)(() => {
186
190
  return {
187
191
  ref: originalInputRef,
@@ -235,8 +239,9 @@ const useSelectField = args => {
235
239
  tabIndex: 0,
236
240
  onChange: event => {
237
241
  const query = event.currentTarget.value;
242
+ const value = treatQueryAsValue ? query : undefined;
238
243
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
239
- updateQuery(query);
244
+ updateQuery(query, value);
240
245
  if (treatQueryAsValue) {
241
246
  updateValue({
242
247
  label: query,
@@ -269,6 +274,8 @@ const useSelectField = args => {
269
274
  if (key === "Delete" || key === "Backspace") {
270
275
  if (query === "") {
271
276
  setValue(undefined);
277
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
278
+ updateOptions("", undefined);
272
279
  }
273
280
  } else if (key === "ArrowDown") {
274
281
  event.preventDefault();
@@ -289,7 +296,7 @@ const useSelectField = args => {
289
296
  }
290
297
  }
291
298
  };
292
- }, [query, updateQuery, treatQueryAsValue, updateValue, readOnly]);
299
+ }, [query, treatQueryAsValue, updateQuery, updateValue, readOnly, updateOptions]);
293
300
  const listProps = (0, _react.useMemo)(() => {
294
301
  return {
295
302
  ref: listRef,
@@ -328,7 +335,7 @@ const useSelectField = args => {
328
335
  onClick: () => {
329
336
  updateValue(option);
330
337
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
331
- updateQuery("");
338
+ updateQuery("", option.value);
332
339
  if (blurOnSelect === false) {
333
340
  pseudoInputRef?.current?.focus();
334
341
  }
@@ -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","open","setOpen","useState","setQuery","setValue","selectedOptionsCache","useRef","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateQuery","useCallback","selectedOptions","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 && 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 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 * 選択後に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 } = 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 updateQuery = useCallback(\n async (query: string) => {\n setQuery(query);\n const options = await loadOptions({\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions]\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 // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(query);\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 } 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 }, [query, updateQuery, treatQueryAsValue, updateValue, readOnly]);\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 // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(\"\");\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, 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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"}
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","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 && 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 * 選択後に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 } = 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 // 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, 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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"}
@@ -176,20 +176,29 @@ export var useSelectField = args => {
176
176
  var originalInputRef = useRef(null);
177
177
  var listRef = useRef(null);
178
178
  var pseudoInputRef = useRef(null);
179
- var updateQuery = useCallback( /*#__PURE__*/function () {
180
- var _ref3 = _asyncToGenerator(function* (query) {
181
- setQuery(query);
179
+ var updateOptions = useCallback( /*#__PURE__*/function () {
180
+ var _ref3 = _asyncToGenerator(function* (query, value) {
182
181
  var options = yield loadOptions({
182
+ value,
183
183
  query,
184
184
  options: propsOptions,
185
185
  selectedOptions: selectedOptionsCache.current
186
186
  });
187
187
  setOptions(options);
188
188
  });
189
- return function (_x2) {
189
+ return function (_x2, _x3) {
190
190
  return _ref3.apply(this, arguments);
191
191
  };
192
192
  }(), [loadOptions, propsOptions]);
193
+ var updateQuery = useCallback( /*#__PURE__*/function () {
194
+ var _ref4 = _asyncToGenerator(function* (query, value) {
195
+ setQuery(query);
196
+ yield updateOptions(query, value);
197
+ });
198
+ return function (_x4, _x5) {
199
+ return _ref4.apply(this, arguments);
200
+ };
201
+ }(), [updateOptions]);
193
202
  var inputProps = useMemo(() => {
194
203
  return {
195
204
  ref: originalInputRef,
@@ -210,10 +219,10 @@ export var useSelectField = args => {
210
219
  };
211
220
  }, [name, required, value]);
212
221
  var displayValue = useMemo(() => {
213
- var _ref4, _selectedOptionsCache;
214
- return (_ref4 = ((_selectedOptionsCache = selectedOptionsCache.current) == null ? void 0 : _selectedOptionsCache.find(option => option.value === value
222
+ var _ref5, _selectedOptionsCache;
223
+ return (_ref5 = ((_selectedOptionsCache = selectedOptionsCache.current) == null ? void 0 : _selectedOptionsCache.find(option => option.value === value
215
224
  // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
216
- )) || (options == null ? void 0 : options.find(option => option.value === value))) == null ? void 0 : _ref4.label;
225
+ )) || (options == null ? void 0 : options.find(option => option.value === value))) == null ? void 0 : _ref5.label;
217
226
  }, [options, value]);
218
227
  var rootProps = useMemo(() => {
219
228
  return {
@@ -245,8 +254,9 @@ export var useSelectField = args => {
245
254
  tabIndex: 0,
246
255
  onChange: event => {
247
256
  var query = event.currentTarget.value;
257
+ var value = treatQueryAsValue ? query : undefined;
248
258
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
249
- updateQuery(query);
259
+ updateQuery(query, value);
250
260
  if (treatQueryAsValue) {
251
261
  updateValue({
252
262
  label: query,
@@ -279,6 +289,8 @@ export var useSelectField = args => {
279
289
  if (key === "Delete" || key === "Backspace") {
280
290
  if (query === "") {
281
291
  setValue(undefined);
292
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
293
+ updateOptions("", undefined);
282
294
  }
283
295
  } else if (key === "ArrowDown") {
284
296
  event.preventDefault();
@@ -299,7 +311,7 @@ export var useSelectField = args => {
299
311
  }
300
312
  }
301
313
  };
302
- }, [query, updateQuery, treatQueryAsValue, updateValue, readOnly]);
314
+ }, [query, treatQueryAsValue, updateQuery, updateValue, readOnly, updateOptions]);
303
315
  var listProps = useMemo(() => {
304
316
  return {
305
317
  ref: listRef,
@@ -338,7 +350,7 @@ export var useSelectField = args => {
338
350
  onClick: () => {
339
351
  updateValue(option);
340
352
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
341
- updateQuery("");
353
+ updateQuery("", option.value);
342
354
  if (blurOnSelect === false) {
343
355
  var _pseudoInputRef$curre2;
344
356
  pseudoInputRef == null ? void 0 : (_pseudoInputRef$curre2 = pseudoInputRef.current) == null ? void 0 : _pseudoInputRef$curre2.focus();
@@ -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","open","setOpen","setQuery","setValue","selectedOptionsCache","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateQuery","_ref3","selectedOptions","_x2","inputProps","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","_pseudoInputRef$curre","currentTarget","blur","displayValue","_ref4","_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 && 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 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 * 選択後に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 } = 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 updateQuery = useCallback(\n async (query: string) => {\n setQuery(query);\n const options = await loadOptions({\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions]\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 // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(query);\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 } 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 }, [query, updateQuery, treatQueryAsValue, updateValue, readOnly]);\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 // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(\"\");\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, 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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"}
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","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 && 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 * 選択後に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 } = 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 // 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, 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matsuri-ui-base",
3
- "version": "0.1.1-alpha-49cc10b.0",
3
+ "version": "0.1.1-alpha-db886a8.0",
4
4
  "sideEffects": false,
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  export declare const filterSelectOptionsByQuery: <T extends SelectOptionValue = SelectOptionValue>(options: T[], query: string) => any[];
3
3
  export type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> = (args: {
4
+ value: string | undefined;
4
5
  query: string;
5
6
  options?: T[];
6
7
  selectedOptions?: T[];