matsuri-ui-base 0.3.1-alpha-1725670602121-fff07b3.0 → 0.3.1-alpha-1725854469662-28b3fb8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,7 +9,6 @@ var useOnClickOutside = (ref, handler) => {
9
9
  }
10
10
  var listener = event => {
11
11
  if (Array.isArray(ref)) {
12
- // eslint-disable-next-line @typescript-eslint/prefer-for-of
13
12
  for (var i = 0; i < ref.length; i++) {
14
13
  var element = ref[i].current;
15
14
  // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。
@@ -67,19 +66,16 @@ var getSearch = (items, query) => {
67
66
  }
68
67
  res.length = c;
69
68
  res.sort((a, b) => {
70
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
71
69
  if (a.score <= b.score) {
72
70
  return 1;
73
71
  } else {
74
72
  return -1;
75
73
  }
76
74
  });
77
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
78
75
  return res;
79
76
  };
80
77
  var dispatchChangeEvent = (element, value) => {
81
78
  var _Object$getOwnPropert;
82
- // eslint-disable-next-line @typescript-eslint/unbound-method
83
79
  var nativeInputValueSetter = (_Object$getOwnPropert = Object.getOwnPropertyDescriptor(element.tagName.toLowerCase() === "input" ? HTMLInputElement.prototype : HTMLTextAreaElement.prototype, "value")) == null ? void 0 : _Object$getOwnPropert.set;
84
80
  nativeInputValueSetter == null || nativeInputValueSetter.call(element, value);
85
81
  element.dispatchEvent(new Event("change", {
@@ -87,7 +83,6 @@ var dispatchChangeEvent = (element, value) => {
87
83
  }));
88
84
  };
89
85
  function ownerDocument(node) {
90
- // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
91
86
  return (node == null ? void 0 : node.ownerDocument) || document;
92
87
  }
93
88
  var nextItem = (list, item) => {
@@ -126,12 +121,10 @@ var moveFocus = (list, currentFocus, traversalFunction) => {
126
121
  export var filterSelectOptionsByQuery = (options, query) => {
127
122
  var result = getSearch(options.map(option => {
128
123
  return _extends({}, option, {
129
- // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
130
124
  keys: option.keys || [option.label],
131
125
  content: option.value
132
126
  });
133
127
  }), query);
134
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
135
128
  return result;
136
129
  };
137
130
  var defaultLoadOptions = /*#__PURE__*/function () {
@@ -147,7 +140,6 @@ var defaultLoadOptions = /*#__PURE__*/function () {
147
140
  return options;
148
141
  }
149
142
  var result = filterSelectOptionsByQuery(options, query);
150
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
151
143
  return result.length ? result : options;
152
144
  });
153
145
  return function defaultLoadOptions(_x) {
@@ -221,9 +213,7 @@ export var useSelectField = args => {
221
213
  }, [name, required, value]);
222
214
  var displayValue = useMemo(() => {
223
215
  var _ref5, _selectedOptionsCache;
224
- return (_ref5 = ((_selectedOptionsCache = selectedOptionsCache.current) == null ? void 0 : _selectedOptionsCache.find(option => option.value === value
225
- // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
226
- )) || (options == null ? void 0 : options.find(option => option.value === value))) == null ? void 0 : _ref5.label;
216
+ return (_ref5 = ((_selectedOptionsCache = selectedOptionsCache.current) == null ? void 0 : _selectedOptionsCache.find(option => option.value === value)) || (options == null ? void 0 : options.find(option => option.value === value))) == null ? void 0 : _ref5.label;
227
217
  }, [options, value]);
228
218
  var rootProps = useMemo(() => {
229
219
  return {
@@ -256,7 +246,6 @@ export var useSelectField = args => {
256
246
  onChange: event => {
257
247
  var query = event.currentTarget.value;
258
248
  var value = treatQueryAsValue ? query : undefined;
259
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
260
249
  updateQuery(query, value);
261
250
  if (treatQueryAsValue) {
262
251
  updateValue({
@@ -290,7 +279,6 @@ export var useSelectField = args => {
290
279
  if (key === "Delete" || key === "Backspace") {
291
280
  if (query === "") {
292
281
  setValue(undefined);
293
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
294
282
  updateOptions("", undefined);
295
283
  }
296
284
  } else if (key === "ArrowDown") {
@@ -353,7 +341,6 @@ export var useSelectField = args => {
353
341
  if (onSelectOption) {
354
342
  onSelectOption(option);
355
343
  }
356
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
357
344
  updateQuery("", option.value);
358
345
  if (blurOnSelect === false) {
359
346
  var _pseudoInputRef$curre2;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","useOnClickOutside","ref","handler","undefined","listener","event","Array","isArray","i","length","element","current","contains","composedPath","document","addEventListener","removeEventListener","getSearch","items","query","copy","slice","len","key","toLowerCase","c","tmp","res","j","index","keylen","keys","indexOf","score","_extends","sort","a","b","dispatchChangeEvent","value","_Object$getOwnPropert","nativeInputValueSetter","Object","getOwnPropertyDescriptor","tagName","HTMLInputElement","prototype","HTMLTextAreaElement","set","call","dispatchEvent","Event","bubbles","ownerDocument","node","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","nextFocus","disabledFocus","disabled","getAttribute","focus","filterSelectOptionsByQuery","options","result","map","option","label","content","defaultLoadOptions","_ref2","_asyncToGenerator","_ref","_x","apply","arguments","useSelectField","args","readOnly","name","required","propsOptions","loadOptions","treatQueryAsValue","blurOnSelect","defaultValue","onChangeOption","onSelectOption","open","setOpen","setQuery","setValue","selectedOptionsCache","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateOptions","_ref3","selectedOptions","_x2","_x3","updateQuery","_ref4","_x4","_x5","inputProps","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","_pseudoInputRef$curre","currentTarget","blur","displayValue","_ref5","_selectedOptionsCache","find","rootProps","updateValue","pseudoInputProps","onChange","onClick","activeElement","onBlur","onKeyDown","preventDefault","nativeEvent","isComposing","listProps","role","listItems","selected","props","_pseudoInputRef$curre2","click","openList"],"sources":["../../../src/SelectField/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst useOnClickOutside = (\n ref: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n handler?: (event: MouseEvent | TouchEvent) => void,\n) => {\n useEffect(() => {\n if (!handler) {\n return undefined;\n }\n const listener = (event: MouseEvent | TouchEvent) => {\n if (Array.isArray(ref)) {\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ref.length; i++) {\n const element = ref[i].current;\n // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。\n if (element?.contains(event.composedPath()[0] as Node)) {\n return;\n }\n }\n } else {\n if (\n !ref.current ||\n ref.current.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nconst getSearch = <\n T extends {\n keys: string[];\n },\n>(\n items: T[],\n query: string,\n) => {\n const copy = items.slice();\n const len = items.length;\n const key = query.toLowerCase();\n let i = -1;\n let c = 0;\n let tmp: {\n keys: string[];\n };\n const res = new Array(len);\n while (++i !== len) {\n tmp = copy[i];\n /**\n * Caluculate Minimum Index\n */\n let j = -1;\n let index = -1;\n const keylen = tmp.keys.length;\n let current;\n while (++j !== keylen) {\n current = tmp.keys[j].toLowerCase().indexOf(key);\n if (index === -1 || (current !== -1 && current < index)) {\n index = current;\n }\n }\n /**\n * Caluculate Score\n */\n const score = index > -1 ? 1 / (index + 1) : 0;\n if (score > 0) {\n res[c++] = { ...tmp, score };\n }\n }\n\n res.length = c;\n res.sort((a, b) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (a.score <= b.score) {\n return 1;\n } else {\n return -1;\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return res;\n};\n\nconst dispatchChangeEvent = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value?: string | number,\n) => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n element.tagName.toLowerCase() === \"input\"\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype,\n \"value\",\n )?.set;\n\n nativeInputValueSetter?.call(element, value);\n\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\n\nfunction ownerDocument(node: Node | null | undefined): Document {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n return node?.ownerDocument || document;\n}\n\ntype TraversalFunction = (\n list: HTMLUListElement,\n item?: Element | null,\n) => ChildNode | null;\n\nconst nextItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item?.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\n\nconst previousItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item?.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\n\nconst moveFocus = (\n list: HTMLUListElement,\n currentFocus: Element | null,\n traversalFunction: TraversalFunction,\n) => {\n let nextFocus = traversalFunction(list, currentFocus) as HTMLElement | null;\n while (nextFocus) {\n if (\n currentFocus === null\n ? nextFocus === list.lastChild\n : nextFocus === currentFocus\n ) {\n break;\n }\n const disabledFocus =\n (nextFocus as HTMLInputElement).disabled ||\n nextFocus.getAttribute(\"aria-disabled\") === \"true\";\n if (disabledFocus) {\n nextFocus = traversalFunction(list, nextFocus) as HTMLElement;\n } else {\n nextFocus.focus();\n break;\n }\n }\n};\n\nexport const filterSelectOptionsByQuery = <\n T extends SelectOptionValue = SelectOptionValue,\n>(\n options: T[],\n query: string,\n) => {\n const result = getSearch(\n options.map((option) => {\n return {\n ...option,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n keys: option.keys || [option.label],\n content: option.value,\n };\n }),\n query,\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n};\n\nconst defaultLoadOptions = async <\n T extends SelectOptionValue = SelectOptionValue,\n>({\n query,\n options,\n}: {\n query: string;\n options?: T[];\n // eslint-disable-next-line @typescript-eslint/require-await\n}): Promise<T[] | undefined> => {\n if (options === undefined) {\n return undefined;\n }\n if (query === undefined) {\n return options;\n }\n const result = filterSelectOptionsByQuery(options, query);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result.length ? result : options;\n};\n\nexport type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> =\n (args: {\n value: string | undefined;\n query: string;\n options?: T[];\n selectedOptions?: T[];\n }) => Promise<T[] | undefined>;\n\nexport interface SelectOptionValue {\n value: string | undefined;\n label: string;\n keys?: string[];\n [key: string]: unknown;\n}\n\nexport interface UseSelectFieldArgs<T extends SelectOptionValue> {\n /**\n * 選択肢の初期値を指定する。\n */\n defaultValue?: string;\n /**\n * 選択肢の選択が可能かどうか指定する。\n * @default false\n */\n readOnly?: boolean;\n /**\n * 選択肢の選択が必須かどうか指定する。\n * @default false\n */\n required?: boolean;\n /**\n * input要素に渡したいname属性を指定する。\n */\n name?: string;\n /**\n * queryに応じて選択肢をロードする関数を指定する。\n * この関数で返された選択肢が、選択肢として表示される。\n */\n loadOptions?: SelectLoadOptions<T>;\n /**\n * 選択肢を指定する。\n * 各選択肢は、valueとlabel及び任意のプロパティを持つオブジェクトである必要がある。\n */\n options?: T[];\n /**\n * このフラグがtrueの場合、queryもvalueとして扱えるようになる\n * @default false\n */\n treatQueryAsValue?: boolean;\n /**\n * 選択肢が変更された時に呼ばれるコールバック関数を指定する。\n */\n onChangeOption?: (option: T) => void;\n /**\n * 選択肢が選択された時に呼ばれるコールバック関数を指定する。\n * 選択肢が選択されず、選択肢が変更された場合は呼ばれない。\n */\n onSelectOption?: (option: T) => void;\n /**\n * 選択後にinput要素から離脱する\n * @default false\n */\n blurOnSelect?: boolean;\n}\n\ninterface UseSelectFieldResult<T extends SelectOptionValue> {\n /**\n * 表示用の文字列。\n */\n displayValue: string | undefined;\n /**\n * 検索用に入力された文字列。\n */\n query: string;\n /**\n * input要素に渡される値。\n */\n value: string | undefined;\n /**\n * 選択肢のリストを開くかどうか。\n */\n openList: boolean;\n /**\n * 実態となるinput要素に渡すprops\n */\n inputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素に渡すprops\n */\n pseudoInputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 選択肢のリストに渡すprops\n */\n listProps: React.ComponentPropsWithRef<\"ul\">;\n /**\n * 選択肢のリストの各要素に渡すpropsと、各選択肢、及びkeyを持つオブジェクトの配列。\n */\n listItems?: {\n key: string;\n option: T;\n props: React.ComponentPropsWithoutRef<\"li\">;\n }[];\n /**\n * 全ての要素の親となる要素に渡すprops\n */\n rootProps: React.ComponentPropsWithRef<\"div\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素にフォーカスしているかどうかを表すフラグ。\n */\n isFocused: boolean;\n}\n\nexport const useSelectField = <T extends SelectOptionValue>(\n args: UseSelectFieldArgs<T>,\n): UseSelectFieldResult<T> => {\n const {\n readOnly = false,\n name,\n required = false,\n options: propsOptions,\n loadOptions = defaultLoadOptions,\n treatQueryAsValue = false,\n blurOnSelect = false,\n defaultValue = undefined,\n onChangeOption,\n onSelectOption,\n } = args;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [value, setValue] = useState<string | undefined>(defaultValue);\n const selectedOptionsCache = useRef<T[] | undefined>(propsOptions);\n const [options, setOptions] = useState(propsOptions);\n const [isFocused, setIsFocused] = useState(false);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const originalInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const pseudoInputRef = useRef<HTMLInputElement>(null);\n\n const updateOptions = useCallback(\n async (query: string, value: string | undefined) => {\n const options = await loadOptions({\n value,\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions],\n );\n\n const updateQuery = useCallback(\n async (query: string, value: string | undefined) => {\n setQuery(query);\n await updateOptions(query, value);\n },\n [updateOptions],\n );\n\n const inputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: originalInputRef,\n required: required,\n name: name,\n defaultValue: value,\n key: value,\n tabIndex: -1,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n onFocus: (event) => {\n event.currentTarget.blur();\n pseudoInputRef.current?.focus();\n },\n };\n }, [name, required, value]);\n\n const displayValue = useMemo(() => {\n return (\n selectedOptionsCache.current?.find(\n (option) => option.value === value,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n ) || options?.find((option) => option.value === value)\n )?.label;\n }, [options, value]);\n\n const rootProps = useMemo(() => {\n return {\n ref: rootRef,\n };\n }, []);\n\n useOnClickOutside([rootRef, listRef], () => {\n setOpen(false);\n });\n\n const updateValue = useCallback(\n (option: T) => {\n const value = option.value;\n setValue(value);\n if (onChangeOption) {\n onChangeOption(option);\n }\n selectedOptionsCache.current = options;\n if (originalInputRef.current) {\n dispatchChangeEvent(originalInputRef.current, value);\n }\n },\n [onChangeOption, options],\n );\n\n const pseudoInputProps = useMemo(() => {\n return {\n ref: pseudoInputRef,\n value: query,\n autoComplete: \"off\" as const,\n autoCorrect: \"off\" as const,\n autoCapitalize: \"none\" as const,\n spellCheck: false,\n tabIndex: 0,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n const query = event.currentTarget.value;\n const value = treatQueryAsValue ? query : undefined;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(query, value);\n if (treatQueryAsValue) {\n updateValue({\n label: query,\n value: query,\n } as T);\n }\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n /**\n * ユーザーがフォーカスされている状態で入力要素をクリックするのは、\n * ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。\n */\n if (event.currentTarget === document.activeElement) {\n setOpen(true);\n }\n },\n onFocus: () => {\n if (readOnly !== true) {\n setOpen(true);\n }\n setIsFocused(true);\n },\n onBlur: () => {\n setIsFocused(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { key } = event;\n if (key === \"Delete\" || key === \"Backspace\") {\n if (query === \"\") {\n setValue(undefined);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateOptions(\"\", undefined);\n }\n } else if (key === \"ArrowDown\") {\n event.preventDefault();\n const list = listRef.current;\n if (list) {\n moveFocus(list, null, nextItem);\n }\n } else if (\n treatQueryAsValue &&\n event.nativeEvent.isComposing === false &&\n key === \"Enter\"\n ) {\n if (treatQueryAsValue) {\n selectedOptionsCache.current = [\n {\n value: query,\n label: query,\n } as T,\n ];\n }\n setOpen(false);\n } else if (event.key.length === 1) {\n setOpen(true);\n }\n },\n };\n }, [\n query,\n treatQueryAsValue,\n updateQuery,\n updateValue,\n readOnly,\n updateOptions,\n ]);\n\n const listProps = useMemo(() => {\n return {\n ref: listRef,\n role: \"listbox\",\n tabIndex: -1,\n onKeyDown: (event: React.KeyboardEvent<HTMLUListElement>) => {\n const key = event.key;\n const list = listRef.current;\n if (list === null) {\n return;\n }\n const currentFocus = ownerDocument(list).activeElement;\n if (key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n } else if (key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n }\n },\n };\n }, []);\n\n const listItems = useMemo(() => {\n return options?.map((option, index) => {\n const selected = option.value === value;\n return {\n key: `${option.value}-${index}`,\n option,\n props: {\n role: \"option\",\n \"aria-selected\": selected,\n /**\n * 何も選択されていないときは、先頭のオプションに飛べるようにする\n */\n tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,\n onClick: () => {\n updateValue(option);\n\n if (onSelectOption) {\n onSelectOption(option);\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(\"\", option.value);\n if (blurOnSelect === false) {\n pseudoInputRef?.current?.focus();\n }\n setOpen(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLLIElement>) => {\n const key = event.key;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n },\n };\n });\n }, [blurOnSelect, onSelectOption, options, updateQuery, updateValue, value]);\n\n const result = useMemo(() => {\n return {\n displayValue,\n query,\n value,\n openList: open,\n inputProps,\n pseudoInputProps,\n listProps,\n listItems,\n rootProps,\n isFocused: isFocused,\n };\n }, [\n displayValue,\n inputProps,\n listItems,\n listProps,\n open,\n pseudoInputProps,\n query,\n rootProps,\n value,\n isFocused,\n ]);\n return result;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","useOnClickOutside","ref","handler","undefined","listener","event","Array","isArray","i","length","element","current","contains","composedPath","document","addEventListener","removeEventListener","getSearch","items","query","copy","slice","len","key","toLowerCase","c","tmp","res","j","index","keylen","keys","indexOf","score","_extends","sort","a","b","dispatchChangeEvent","value","_Object$getOwnPropert","nativeInputValueSetter","Object","getOwnPropertyDescriptor","tagName","HTMLInputElement","prototype","HTMLTextAreaElement","set","call","dispatchEvent","Event","bubbles","ownerDocument","node","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","nextFocus","disabledFocus","disabled","getAttribute","focus","filterSelectOptionsByQuery","options","result","map","option","label","content","defaultLoadOptions","_ref2","_asyncToGenerator","_ref","_x","apply","arguments","useSelectField","args","readOnly","name","required","propsOptions","loadOptions","treatQueryAsValue","blurOnSelect","defaultValue","onChangeOption","onSelectOption","open","setOpen","setQuery","setValue","selectedOptionsCache","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateOptions","_ref3","selectedOptions","_x2","_x3","updateQuery","_ref4","_x4","_x5","inputProps","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","_pseudoInputRef$curre","currentTarget","blur","displayValue","_ref5","_selectedOptionsCache","find","rootProps","updateValue","pseudoInputProps","onChange","onClick","activeElement","onBlur","onKeyDown","preventDefault","nativeEvent","isComposing","listProps","role","listItems","selected","props","_pseudoInputRef$curre2","click","openList"],"sources":["../../../src/SelectField/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst useOnClickOutside = (\n ref: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n handler?: (event: MouseEvent | TouchEvent) => void,\n) => {\n useEffect(() => {\n if (!handler) {\n return undefined;\n }\n const listener = (event: MouseEvent | TouchEvent) => {\n if (Array.isArray(ref)) {\n for (let i = 0; i < ref.length; i++) {\n const element = ref[i].current;\n // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。\n if (element?.contains(event.composedPath()[0] as Node)) {\n return;\n }\n }\n } else {\n if (\n !ref.current ||\n ref.current.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nconst getSearch = <\n T extends {\n keys: string[];\n },\n>(\n items: T[],\n query: string,\n) => {\n const copy = items.slice();\n const len = items.length;\n const key = query.toLowerCase();\n let i = -1;\n let c = 0;\n let tmp: {\n keys: string[];\n };\n const res = new Array(len);\n while (++i !== len) {\n tmp = copy[i];\n /**\n * Caluculate Minimum Index\n */\n let j = -1;\n let index = -1;\n const keylen = tmp.keys.length;\n let current;\n while (++j !== keylen) {\n current = tmp.keys[j].toLowerCase().indexOf(key);\n if (index === -1 || (current !== -1 && current < index)) {\n index = current;\n }\n }\n /**\n * Caluculate Score\n */\n const score = index > -1 ? 1 / (index + 1) : 0;\n if (score > 0) {\n res[c++] = { ...tmp, score };\n }\n }\n\n res.length = c;\n res.sort((a, b) => {\n if (a.score <= b.score) {\n return 1;\n } else {\n return -1;\n }\n });\n\n return res;\n};\n\nconst dispatchChangeEvent = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value?: string | number,\n) => {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n element.tagName.toLowerCase() === \"input\"\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype,\n \"value\",\n )?.set;\n\n nativeInputValueSetter?.call(element, value);\n\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\n\nfunction ownerDocument(node: Node | null | undefined): Document {\n return node?.ownerDocument || document;\n}\n\ntype TraversalFunction = (\n list: HTMLUListElement,\n item?: Element | null,\n) => ChildNode | null;\n\nconst nextItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item?.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\n\nconst previousItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item?.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\n\nconst moveFocus = (\n list: HTMLUListElement,\n currentFocus: Element | null,\n traversalFunction: TraversalFunction,\n) => {\n let nextFocus = traversalFunction(list, currentFocus) as HTMLElement | null;\n while (nextFocus) {\n if (\n currentFocus === null\n ? nextFocus === list.lastChild\n : nextFocus === currentFocus\n ) {\n break;\n }\n const disabledFocus =\n (nextFocus as HTMLInputElement).disabled ||\n nextFocus.getAttribute(\"aria-disabled\") === \"true\";\n if (disabledFocus) {\n nextFocus = traversalFunction(list, nextFocus) as HTMLElement;\n } else {\n nextFocus.focus();\n break;\n }\n }\n};\n\nexport const filterSelectOptionsByQuery = <\n T extends SelectOptionValue = SelectOptionValue,\n>(\n options: T[],\n query: string,\n) => {\n const result = getSearch(\n options.map((option) => {\n return {\n ...option,\n\n keys: option.keys || [option.label],\n content: option.value,\n };\n }),\n query,\n );\n\n return result;\n};\n\nconst defaultLoadOptions = async <\n T extends SelectOptionValue = SelectOptionValue,\n>({\n query,\n options,\n}: {\n query: string;\n options?: T[];\n}): Promise<T[] | undefined> => {\n if (options === undefined) {\n return undefined;\n }\n if (query === undefined) {\n return options;\n }\n const result = filterSelectOptionsByQuery(options, query);\n\n return result.length ? result : options;\n};\n\nexport type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> =\n (args: {\n value: string | undefined;\n query: string;\n options?: T[];\n selectedOptions?: T[];\n }) => Promise<T[] | undefined>;\n\nexport interface SelectOptionValue {\n value: string | undefined;\n label: string;\n keys?: string[];\n [key: string]: unknown;\n}\n\nexport interface UseSelectFieldArgs<T extends SelectOptionValue> {\n /**\n * 選択肢の初期値を指定する。\n */\n defaultValue?: string;\n /**\n * 選択肢の選択が可能かどうか指定する。\n * @default false\n */\n readOnly?: boolean;\n /**\n * 選択肢の選択が必須かどうか指定する。\n * @default false\n */\n required?: boolean;\n /**\n * input要素に渡したいname属性を指定する。\n */\n name?: string;\n /**\n * queryに応じて選択肢をロードする関数を指定する。\n * この関数で返された選択肢が、選択肢として表示される。\n */\n loadOptions?: SelectLoadOptions<T>;\n /**\n * 選択肢を指定する。\n * 各選択肢は、valueとlabel及び任意のプロパティを持つオブジェクトである必要がある。\n */\n options?: T[];\n /**\n * このフラグがtrueの場合、queryもvalueとして扱えるようになる\n * @default false\n */\n treatQueryAsValue?: boolean;\n /**\n * 選択肢が変更された時に呼ばれるコールバック関数を指定する。\n */\n onChangeOption?: (option: T) => void;\n /**\n * 選択肢が選択された時に呼ばれるコールバック関数を指定する。\n * 選択肢が選択されず、選択肢が変更された場合は呼ばれない。\n */\n onSelectOption?: (option: T) => void;\n /**\n * 選択後にinput要素から離脱する\n * @default false\n */\n blurOnSelect?: boolean;\n}\n\ninterface UseSelectFieldResult<T extends SelectOptionValue> {\n /**\n * 表示用の文字列。\n */\n displayValue: string | undefined;\n /**\n * 検索用に入力された文字列。\n */\n query: string;\n /**\n * input要素に渡される値。\n */\n value: string | undefined;\n /**\n * 選択肢のリストを開くかどうか。\n */\n openList: boolean;\n /**\n * 実態となるinput要素に渡すprops\n */\n inputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素に渡すprops\n */\n pseudoInputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 選択肢のリストに渡すprops\n */\n listProps: React.ComponentPropsWithRef<\"ul\">;\n /**\n * 選択肢のリストの各要素に渡すpropsと、各選択肢、及びkeyを持つオブジェクトの配列。\n */\n listItems?: {\n key: string;\n option: T;\n props: React.ComponentPropsWithoutRef<\"li\">;\n }[];\n /**\n * 全ての要素の親となる要素に渡すprops\n */\n rootProps: React.ComponentPropsWithRef<\"div\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素にフォーカスしているかどうかを表すフラグ。\n */\n isFocused: boolean;\n}\n\nexport const useSelectField = <T extends SelectOptionValue>(\n args: UseSelectFieldArgs<T>,\n): UseSelectFieldResult<T> => {\n const {\n readOnly = false,\n name,\n required = false,\n options: propsOptions,\n loadOptions = defaultLoadOptions,\n treatQueryAsValue = false,\n blurOnSelect = false,\n defaultValue = undefined,\n onChangeOption,\n onSelectOption,\n } = args;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [value, setValue] = useState<string | undefined>(defaultValue);\n const selectedOptionsCache = useRef<T[] | undefined>(propsOptions);\n const [options, setOptions] = useState(propsOptions);\n const [isFocused, setIsFocused] = useState(false);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const originalInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const pseudoInputRef = useRef<HTMLInputElement>(null);\n\n const updateOptions = useCallback(\n async (query: string, value: string | undefined) => {\n const options = await loadOptions({\n value,\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions],\n );\n\n const updateQuery = useCallback(\n async (query: string, value: string | undefined) => {\n setQuery(query);\n await updateOptions(query, value);\n },\n [updateOptions],\n );\n\n const inputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: originalInputRef,\n required: required,\n name: name,\n defaultValue: value,\n key: value,\n tabIndex: -1,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n onFocus: (event) => {\n event.currentTarget.blur();\n pseudoInputRef.current?.focus();\n },\n };\n }, [name, required, value]);\n\n const displayValue = useMemo(() => {\n return (\n selectedOptionsCache.current?.find((option) => option.value === value) ||\n options?.find((option) => option.value === value)\n )?.label;\n }, [options, value]);\n\n const rootProps = useMemo(() => {\n return {\n ref: rootRef,\n };\n }, []);\n\n useOnClickOutside([rootRef, listRef], () => {\n setOpen(false);\n });\n\n const updateValue = useCallback(\n (option: T) => {\n const value = option.value;\n setValue(value);\n if (onChangeOption) {\n onChangeOption(option);\n }\n selectedOptionsCache.current = options;\n if (originalInputRef.current) {\n dispatchChangeEvent(originalInputRef.current, value);\n }\n },\n [onChangeOption, options],\n );\n\n const pseudoInputProps = useMemo(() => {\n return {\n ref: pseudoInputRef,\n value: query,\n autoComplete: \"off\" as const,\n autoCorrect: \"off\" as const,\n autoCapitalize: \"none\" as const,\n spellCheck: false,\n tabIndex: 0,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n const query = event.currentTarget.value;\n const value = treatQueryAsValue ? query : undefined;\n\n updateQuery(query, value);\n if (treatQueryAsValue) {\n updateValue({\n label: query,\n value: query,\n } as T);\n }\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n /**\n * ユーザーがフォーカスされている状態で入力要素をクリックするのは、\n * ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。\n */\n if (event.currentTarget === document.activeElement) {\n setOpen(true);\n }\n },\n onFocus: () => {\n if (readOnly !== true) {\n setOpen(true);\n }\n setIsFocused(true);\n },\n onBlur: () => {\n setIsFocused(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { key } = event;\n if (key === \"Delete\" || key === \"Backspace\") {\n if (query === \"\") {\n setValue(undefined);\n\n updateOptions(\"\", undefined);\n }\n } else if (key === \"ArrowDown\") {\n event.preventDefault();\n const list = listRef.current;\n if (list) {\n moveFocus(list, null, nextItem);\n }\n } else if (\n treatQueryAsValue &&\n event.nativeEvent.isComposing === false &&\n key === \"Enter\"\n ) {\n if (treatQueryAsValue) {\n selectedOptionsCache.current = [\n {\n value: query,\n label: query,\n } as T,\n ];\n }\n setOpen(false);\n } else if (event.key.length === 1) {\n setOpen(true);\n }\n },\n };\n }, [\n query,\n treatQueryAsValue,\n updateQuery,\n updateValue,\n readOnly,\n updateOptions,\n ]);\n\n const listProps = useMemo(() => {\n return {\n ref: listRef,\n role: \"listbox\",\n tabIndex: -1,\n onKeyDown: (event: React.KeyboardEvent<HTMLUListElement>) => {\n const key = event.key;\n const list = listRef.current;\n if (list === null) {\n return;\n }\n const currentFocus = ownerDocument(list).activeElement;\n if (key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n } else if (key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n }\n },\n };\n }, []);\n\n const listItems = useMemo(() => {\n return options?.map((option, index) => {\n const selected = option.value === value;\n return {\n key: `${option.value}-${index}`,\n option,\n props: {\n role: \"option\",\n \"aria-selected\": selected,\n /**\n * 何も選択されていないときは、先頭のオプションに飛べるようにする\n */\n tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,\n onClick: () => {\n updateValue(option);\n\n if (onSelectOption) {\n onSelectOption(option);\n }\n\n updateQuery(\"\", option.value);\n if (blurOnSelect === false) {\n pseudoInputRef?.current?.focus();\n }\n setOpen(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLLIElement>) => {\n const key = event.key;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n },\n };\n });\n }, [blurOnSelect, onSelectOption, options, updateQuery, updateValue, value]);\n\n const result = useMemo(() => {\n return {\n displayValue,\n query,\n value,\n openList: open,\n inputProps,\n pseudoInputProps,\n listProps,\n listItems,\n rootProps,\n isFocused: isFocused,\n };\n }, [\n displayValue,\n inputProps,\n listItems,\n listProps,\n open,\n pseudoInputProps,\n query,\n rootProps,\n value,\n isFocused,\n ]);\n return result;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -10,7 +10,6 @@ const useOnClickOutside = (ref, handler) => {
10
10
  }
11
11
  const listener = event => {
12
12
  if (Array.isArray(ref)) {
13
- // eslint-disable-next-line @typescript-eslint/prefer-for-of
14
13
  for (let i = 0; i < ref.length; i++) {
15
14
  const element = ref[i].current;
16
15
  // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。
@@ -69,18 +68,15 @@ const getSearch = (items, query) => {
69
68
  }
70
69
  res.length = c;
71
70
  res.sort((a, b) => {
72
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
73
71
  if (a.score <= b.score) {
74
72
  return 1;
75
73
  } else {
76
74
  return -1;
77
75
  }
78
76
  });
79
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
80
77
  return res;
81
78
  };
82
79
  const dispatchChangeEvent = (element, value) => {
83
- // eslint-disable-next-line @typescript-eslint/unbound-method
84
80
  const nativeInputValueSetter = Object.getOwnPropertyDescriptor(element.tagName.toLowerCase() === "input" ? HTMLInputElement.prototype : HTMLTextAreaElement.prototype, "value")?.set;
85
81
  nativeInputValueSetter?.call(element, value);
86
82
  element.dispatchEvent(new Event("change", {
@@ -88,7 +84,6 @@ const dispatchChangeEvent = (element, value) => {
88
84
  }));
89
85
  };
90
86
  function ownerDocument(node) {
91
- // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
92
87
  return node?.ownerDocument || document;
93
88
  }
94
89
  const nextItem = (list, item) => {
@@ -128,12 +123,10 @@ const filterSelectOptionsByQuery = (options, query) => {
128
123
  const result = getSearch(options.map(option => {
129
124
  return {
130
125
  ...option,
131
- // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
132
126
  keys: option.keys || [option.label],
133
127
  content: option.value
134
128
  };
135
129
  }), query);
136
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
137
130
  return result;
138
131
  };
139
132
  exports.filterSelectOptionsByQuery = filterSelectOptionsByQuery;
@@ -148,7 +141,6 @@ const defaultLoadOptions = async ({
148
141
  return options;
149
142
  }
150
143
  const result = filterSelectOptionsByQuery(options, query);
151
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
152
144
  return result.length ? result : options;
153
145
  };
154
146
  const useSelectField = args => {
@@ -206,9 +198,7 @@ const useSelectField = args => {
206
198
  };
207
199
  }, [name, required, value]);
208
200
  const displayValue = (0, _react.useMemo)(() => {
209
- return (selectedOptionsCache.current?.find(option => option.value === value
210
- // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
211
- ) || options?.find(option => option.value === value))?.label;
201
+ return (selectedOptionsCache.current?.find(option => option.value === value) || options?.find(option => option.value === value))?.label;
212
202
  }, [options, value]);
213
203
  const rootProps = (0, _react.useMemo)(() => {
214
204
  return {
@@ -241,7 +231,6 @@ const useSelectField = args => {
241
231
  onChange: event => {
242
232
  const query = event.currentTarget.value;
243
233
  const value = treatQueryAsValue ? query : undefined;
244
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
245
234
  updateQuery(query, value);
246
235
  if (treatQueryAsValue) {
247
236
  updateValue({
@@ -275,7 +264,6 @@ const useSelectField = args => {
275
264
  if (key === "Delete" || key === "Backspace") {
276
265
  if (query === "") {
277
266
  setValue(undefined);
278
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
279
267
  updateOptions("", undefined);
280
268
  }
281
269
  } else if (key === "ArrowDown") {
@@ -338,7 +326,6 @@ const useSelectField = args => {
338
326
  if (onSelectOption) {
339
327
  onSelectOption(option);
340
328
  }
341
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
342
329
  updateQuery("", option.value);
343
330
  if (blurOnSelect === false) {
344
331
  pseudoInputRef?.current?.focus();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_react","require","useOnClickOutside","ref","handler","useEffect","undefined","listener","event","Array","isArray","i","length","element","current","contains","composedPath","document","addEventListener","removeEventListener","getSearch","items","query","copy","slice","len","key","toLowerCase","c","tmp","res","j","index","keylen","keys","indexOf","score","sort","a","b","dispatchChangeEvent","value","nativeInputValueSetter","Object","getOwnPropertyDescriptor","tagName","HTMLInputElement","prototype","HTMLTextAreaElement","set","call","dispatchEvent","Event","bubbles","ownerDocument","node","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","nextFocus","disabledFocus","disabled","getAttribute","focus","filterSelectOptionsByQuery","options","result","map","option","label","content","exports","defaultLoadOptions","useSelectField","args","readOnly","name","required","propsOptions","loadOptions","treatQueryAsValue","blurOnSelect","defaultValue","onChangeOption","onSelectOption","open","setOpen","useState","setQuery","setValue","selectedOptionsCache","useRef","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateOptions","useCallback","selectedOptions","updateQuery","inputProps","useMemo","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","currentTarget","blur","displayValue","find","rootProps","updateValue","pseudoInputProps","onChange","onClick","activeElement","onBlur","onKeyDown","preventDefault","nativeEvent","isComposing","listProps","role","listItems","selected","props","click","openList"],"sources":["../../../src/SelectField/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst useOnClickOutside = (\n ref: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n handler?: (event: MouseEvent | TouchEvent) => void,\n) => {\n useEffect(() => {\n if (!handler) {\n return undefined;\n }\n const listener = (event: MouseEvent | TouchEvent) => {\n if (Array.isArray(ref)) {\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ref.length; i++) {\n const element = ref[i].current;\n // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。\n if (element?.contains(event.composedPath()[0] as Node)) {\n return;\n }\n }\n } else {\n if (\n !ref.current ||\n ref.current.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nconst getSearch = <\n T extends {\n keys: string[];\n },\n>(\n items: T[],\n query: string,\n) => {\n const copy = items.slice();\n const len = items.length;\n const key = query.toLowerCase();\n let i = -1;\n let c = 0;\n let tmp: {\n keys: string[];\n };\n const res = new Array(len);\n while (++i !== len) {\n tmp = copy[i];\n /**\n * Caluculate Minimum Index\n */\n let j = -1;\n let index = -1;\n const keylen = tmp.keys.length;\n let current;\n while (++j !== keylen) {\n current = tmp.keys[j].toLowerCase().indexOf(key);\n if (index === -1 || (current !== -1 && current < index)) {\n index = current;\n }\n }\n /**\n * Caluculate Score\n */\n const score = index > -1 ? 1 / (index + 1) : 0;\n if (score > 0) {\n res[c++] = { ...tmp, score };\n }\n }\n\n res.length = c;\n res.sort((a, b) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (a.score <= b.score) {\n return 1;\n } else {\n return -1;\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return res;\n};\n\nconst dispatchChangeEvent = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value?: string | number,\n) => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n element.tagName.toLowerCase() === \"input\"\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype,\n \"value\",\n )?.set;\n\n nativeInputValueSetter?.call(element, value);\n\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\n\nfunction ownerDocument(node: Node | null | undefined): Document {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n return node?.ownerDocument || document;\n}\n\ntype TraversalFunction = (\n list: HTMLUListElement,\n item?: Element | null,\n) => ChildNode | null;\n\nconst nextItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item?.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\n\nconst previousItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item?.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\n\nconst moveFocus = (\n list: HTMLUListElement,\n currentFocus: Element | null,\n traversalFunction: TraversalFunction,\n) => {\n let nextFocus = traversalFunction(list, currentFocus) as HTMLElement | null;\n while (nextFocus) {\n if (\n currentFocus === null\n ? nextFocus === list.lastChild\n : nextFocus === currentFocus\n ) {\n break;\n }\n const disabledFocus =\n (nextFocus as HTMLInputElement).disabled ||\n nextFocus.getAttribute(\"aria-disabled\") === \"true\";\n if (disabledFocus) {\n nextFocus = traversalFunction(list, nextFocus) as HTMLElement;\n } else {\n nextFocus.focus();\n break;\n }\n }\n};\n\nexport const filterSelectOptionsByQuery = <\n T extends SelectOptionValue = SelectOptionValue,\n>(\n options: T[],\n query: string,\n) => {\n const result = getSearch(\n options.map((option) => {\n return {\n ...option,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n keys: option.keys || [option.label],\n content: option.value,\n };\n }),\n query,\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n};\n\nconst defaultLoadOptions = async <\n T extends SelectOptionValue = SelectOptionValue,\n>({\n query,\n options,\n}: {\n query: string;\n options?: T[];\n // eslint-disable-next-line @typescript-eslint/require-await\n}): Promise<T[] | undefined> => {\n if (options === undefined) {\n return undefined;\n }\n if (query === undefined) {\n return options;\n }\n const result = filterSelectOptionsByQuery(options, query);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result.length ? result : options;\n};\n\nexport type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> =\n (args: {\n value: string | undefined;\n query: string;\n options?: T[];\n selectedOptions?: T[];\n }) => Promise<T[] | undefined>;\n\nexport interface SelectOptionValue {\n value: string | undefined;\n label: string;\n keys?: string[];\n [key: string]: unknown;\n}\n\nexport interface UseSelectFieldArgs<T extends SelectOptionValue> {\n /**\n * 選択肢の初期値を指定する。\n */\n defaultValue?: string;\n /**\n * 選択肢の選択が可能かどうか指定する。\n * @default false\n */\n readOnly?: boolean;\n /**\n * 選択肢の選択が必須かどうか指定する。\n * @default false\n */\n required?: boolean;\n /**\n * input要素に渡したいname属性を指定する。\n */\n name?: string;\n /**\n * queryに応じて選択肢をロードする関数を指定する。\n * この関数で返された選択肢が、選択肢として表示される。\n */\n loadOptions?: SelectLoadOptions<T>;\n /**\n * 選択肢を指定する。\n * 各選択肢は、valueとlabel及び任意のプロパティを持つオブジェクトである必要がある。\n */\n options?: T[];\n /**\n * このフラグがtrueの場合、queryもvalueとして扱えるようになる\n * @default false\n */\n treatQueryAsValue?: boolean;\n /**\n * 選択肢が変更された時に呼ばれるコールバック関数を指定する。\n */\n onChangeOption?: (option: T) => void;\n /**\n * 選択肢が選択された時に呼ばれるコールバック関数を指定する。\n * 選択肢が選択されず、選択肢が変更された場合は呼ばれない。\n */\n onSelectOption?: (option: T) => void;\n /**\n * 選択後にinput要素から離脱する\n * @default false\n */\n blurOnSelect?: boolean;\n}\n\ninterface UseSelectFieldResult<T extends SelectOptionValue> {\n /**\n * 表示用の文字列。\n */\n displayValue: string | undefined;\n /**\n * 検索用に入力された文字列。\n */\n query: string;\n /**\n * input要素に渡される値。\n */\n value: string | undefined;\n /**\n * 選択肢のリストを開くかどうか。\n */\n openList: boolean;\n /**\n * 実態となるinput要素に渡すprops\n */\n inputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素に渡すprops\n */\n pseudoInputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 選択肢のリストに渡すprops\n */\n listProps: React.ComponentPropsWithRef<\"ul\">;\n /**\n * 選択肢のリストの各要素に渡すpropsと、各選択肢、及びkeyを持つオブジェクトの配列。\n */\n listItems?: {\n key: string;\n option: T;\n props: React.ComponentPropsWithoutRef<\"li\">;\n }[];\n /**\n * 全ての要素の親となる要素に渡すprops\n */\n rootProps: React.ComponentPropsWithRef<\"div\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素にフォーカスしているかどうかを表すフラグ。\n */\n isFocused: boolean;\n}\n\nexport const useSelectField = <T extends SelectOptionValue>(\n args: UseSelectFieldArgs<T>,\n): UseSelectFieldResult<T> => {\n const {\n readOnly = false,\n name,\n required = false,\n options: propsOptions,\n loadOptions = defaultLoadOptions,\n treatQueryAsValue = false,\n blurOnSelect = false,\n defaultValue = undefined,\n onChangeOption,\n onSelectOption,\n } = args;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [value, setValue] = useState<string | undefined>(defaultValue);\n const selectedOptionsCache = useRef<T[] | undefined>(propsOptions);\n const [options, setOptions] = useState(propsOptions);\n const [isFocused, setIsFocused] = useState(false);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const originalInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const pseudoInputRef = useRef<HTMLInputElement>(null);\n\n const updateOptions = useCallback(\n async (query: string, value: string | undefined) => {\n const options = await loadOptions({\n value,\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions],\n );\n\n const updateQuery = useCallback(\n async (query: string, value: string | undefined) => {\n setQuery(query);\n await updateOptions(query, value);\n },\n [updateOptions],\n );\n\n const inputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: originalInputRef,\n required: required,\n name: name,\n defaultValue: value,\n key: value,\n tabIndex: -1,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n onFocus: (event) => {\n event.currentTarget.blur();\n pseudoInputRef.current?.focus();\n },\n };\n }, [name, required, value]);\n\n const displayValue = useMemo(() => {\n return (\n selectedOptionsCache.current?.find(\n (option) => option.value === value,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n ) || options?.find((option) => option.value === value)\n )?.label;\n }, [options, value]);\n\n const rootProps = useMemo(() => {\n return {\n ref: rootRef,\n };\n }, []);\n\n useOnClickOutside([rootRef, listRef], () => {\n setOpen(false);\n });\n\n const updateValue = useCallback(\n (option: T) => {\n const value = option.value;\n setValue(value);\n if (onChangeOption) {\n onChangeOption(option);\n }\n selectedOptionsCache.current = options;\n if (originalInputRef.current) {\n dispatchChangeEvent(originalInputRef.current, value);\n }\n },\n [onChangeOption, options],\n );\n\n const pseudoInputProps = useMemo(() => {\n return {\n ref: pseudoInputRef,\n value: query,\n autoComplete: \"off\" as const,\n autoCorrect: \"off\" as const,\n autoCapitalize: \"none\" as const,\n spellCheck: false,\n tabIndex: 0,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n const query = event.currentTarget.value;\n const value = treatQueryAsValue ? query : undefined;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(query, value);\n if (treatQueryAsValue) {\n updateValue({\n label: query,\n value: query,\n } as T);\n }\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n /**\n * ユーザーがフォーカスされている状態で入力要素をクリックするのは、\n * ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。\n */\n if (event.currentTarget === document.activeElement) {\n setOpen(true);\n }\n },\n onFocus: () => {\n if (readOnly !== true) {\n setOpen(true);\n }\n setIsFocused(true);\n },\n onBlur: () => {\n setIsFocused(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { key } = event;\n if (key === \"Delete\" || key === \"Backspace\") {\n if (query === \"\") {\n setValue(undefined);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateOptions(\"\", undefined);\n }\n } else if (key === \"ArrowDown\") {\n event.preventDefault();\n const list = listRef.current;\n if (list) {\n moveFocus(list, null, nextItem);\n }\n } else if (\n treatQueryAsValue &&\n event.nativeEvent.isComposing === false &&\n key === \"Enter\"\n ) {\n if (treatQueryAsValue) {\n selectedOptionsCache.current = [\n {\n value: query,\n label: query,\n } as T,\n ];\n }\n setOpen(false);\n } else if (event.key.length === 1) {\n setOpen(true);\n }\n },\n };\n }, [\n query,\n treatQueryAsValue,\n updateQuery,\n updateValue,\n readOnly,\n updateOptions,\n ]);\n\n const listProps = useMemo(() => {\n return {\n ref: listRef,\n role: \"listbox\",\n tabIndex: -1,\n onKeyDown: (event: React.KeyboardEvent<HTMLUListElement>) => {\n const key = event.key;\n const list = listRef.current;\n if (list === null) {\n return;\n }\n const currentFocus = ownerDocument(list).activeElement;\n if (key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n } else if (key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n }\n },\n };\n }, []);\n\n const listItems = useMemo(() => {\n return options?.map((option, index) => {\n const selected = option.value === value;\n return {\n key: `${option.value}-${index}`,\n option,\n props: {\n role: \"option\",\n \"aria-selected\": selected,\n /**\n * 何も選択されていないときは、先頭のオプションに飛べるようにする\n */\n tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,\n onClick: () => {\n updateValue(option);\n\n if (onSelectOption) {\n onSelectOption(option);\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(\"\", option.value);\n if (blurOnSelect === false) {\n pseudoInputRef?.current?.focus();\n }\n setOpen(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLLIElement>) => {\n const key = event.key;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n },\n };\n });\n }, [blurOnSelect, onSelectOption, options, updateQuery, updateValue, value]);\n\n const result = useMemo(() => {\n return {\n displayValue,\n query,\n value,\n openList: open,\n inputProps,\n pseudoInputProps,\n listProps,\n listItems,\n rootProps,\n isFocused: isFocused,\n };\n }, [\n displayValue,\n inputProps,\n listItems,\n listProps,\n open,\n pseudoInputProps,\n query,\n rootProps,\n value,\n isFocused,\n ]);\n return result;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_react","require","useOnClickOutside","ref","handler","useEffect","undefined","listener","event","Array","isArray","i","length","element","current","contains","composedPath","document","addEventListener","removeEventListener","getSearch","items","query","copy","slice","len","key","toLowerCase","c","tmp","res","j","index","keylen","keys","indexOf","score","sort","a","b","dispatchChangeEvent","value","nativeInputValueSetter","Object","getOwnPropertyDescriptor","tagName","HTMLInputElement","prototype","HTMLTextAreaElement","set","call","dispatchEvent","Event","bubbles","ownerDocument","node","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","nextFocus","disabledFocus","disabled","getAttribute","focus","filterSelectOptionsByQuery","options","result","map","option","label","content","exports","defaultLoadOptions","useSelectField","args","readOnly","name","required","propsOptions","loadOptions","treatQueryAsValue","blurOnSelect","defaultValue","onChangeOption","onSelectOption","open","setOpen","useState","setQuery","setValue","selectedOptionsCache","useRef","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateOptions","useCallback","selectedOptions","updateQuery","inputProps","useMemo","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","currentTarget","blur","displayValue","find","rootProps","updateValue","pseudoInputProps","onChange","onClick","activeElement","onBlur","onKeyDown","preventDefault","nativeEvent","isComposing","listProps","role","listItems","selected","props","click","openList"],"sources":["../../../src/SelectField/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst useOnClickOutside = (\n ref: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n handler?: (event: MouseEvent | TouchEvent) => void,\n) => {\n useEffect(() => {\n if (!handler) {\n return undefined;\n }\n const listener = (event: MouseEvent | TouchEvent) => {\n if (Array.isArray(ref)) {\n for (let i = 0; i < ref.length; i++) {\n const element = ref[i].current;\n // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。\n if (element?.contains(event.composedPath()[0] as Node)) {\n return;\n }\n }\n } else {\n if (\n !ref.current ||\n ref.current.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nconst getSearch = <\n T extends {\n keys: string[];\n },\n>(\n items: T[],\n query: string,\n) => {\n const copy = items.slice();\n const len = items.length;\n const key = query.toLowerCase();\n let i = -1;\n let c = 0;\n let tmp: {\n keys: string[];\n };\n const res = new Array(len);\n while (++i !== len) {\n tmp = copy[i];\n /**\n * Caluculate Minimum Index\n */\n let j = -1;\n let index = -1;\n const keylen = tmp.keys.length;\n let current;\n while (++j !== keylen) {\n current = tmp.keys[j].toLowerCase().indexOf(key);\n if (index === -1 || (current !== -1 && current < index)) {\n index = current;\n }\n }\n /**\n * Caluculate Score\n */\n const score = index > -1 ? 1 / (index + 1) : 0;\n if (score > 0) {\n res[c++] = { ...tmp, score };\n }\n }\n\n res.length = c;\n res.sort((a, b) => {\n if (a.score <= b.score) {\n return 1;\n } else {\n return -1;\n }\n });\n\n return res;\n};\n\nconst dispatchChangeEvent = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value?: string | number,\n) => {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n element.tagName.toLowerCase() === \"input\"\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype,\n \"value\",\n )?.set;\n\n nativeInputValueSetter?.call(element, value);\n\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\n\nfunction ownerDocument(node: Node | null | undefined): Document {\n return node?.ownerDocument || document;\n}\n\ntype TraversalFunction = (\n list: HTMLUListElement,\n item?: Element | null,\n) => ChildNode | null;\n\nconst nextItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item?.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\n\nconst previousItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item?.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\n\nconst moveFocus = (\n list: HTMLUListElement,\n currentFocus: Element | null,\n traversalFunction: TraversalFunction,\n) => {\n let nextFocus = traversalFunction(list, currentFocus) as HTMLElement | null;\n while (nextFocus) {\n if (\n currentFocus === null\n ? nextFocus === list.lastChild\n : nextFocus === currentFocus\n ) {\n break;\n }\n const disabledFocus =\n (nextFocus as HTMLInputElement).disabled ||\n nextFocus.getAttribute(\"aria-disabled\") === \"true\";\n if (disabledFocus) {\n nextFocus = traversalFunction(list, nextFocus) as HTMLElement;\n } else {\n nextFocus.focus();\n break;\n }\n }\n};\n\nexport const filterSelectOptionsByQuery = <\n T extends SelectOptionValue = SelectOptionValue,\n>(\n options: T[],\n query: string,\n) => {\n const result = getSearch(\n options.map((option) => {\n return {\n ...option,\n\n keys: option.keys || [option.label],\n content: option.value,\n };\n }),\n query,\n );\n\n return result;\n};\n\nconst defaultLoadOptions = async <\n T extends SelectOptionValue = SelectOptionValue,\n>({\n query,\n options,\n}: {\n query: string;\n options?: T[];\n}): Promise<T[] | undefined> => {\n if (options === undefined) {\n return undefined;\n }\n if (query === undefined) {\n return options;\n }\n const result = filterSelectOptionsByQuery(options, query);\n\n return result.length ? result : options;\n};\n\nexport type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> =\n (args: {\n value: string | undefined;\n query: string;\n options?: T[];\n selectedOptions?: T[];\n }) => Promise<T[] | undefined>;\n\nexport interface SelectOptionValue {\n value: string | undefined;\n label: string;\n keys?: string[];\n [key: string]: unknown;\n}\n\nexport interface UseSelectFieldArgs<T extends SelectOptionValue> {\n /**\n * 選択肢の初期値を指定する。\n */\n defaultValue?: string;\n /**\n * 選択肢の選択が可能かどうか指定する。\n * @default false\n */\n readOnly?: boolean;\n /**\n * 選択肢の選択が必須かどうか指定する。\n * @default false\n */\n required?: boolean;\n /**\n * input要素に渡したいname属性を指定する。\n */\n name?: string;\n /**\n * queryに応じて選択肢をロードする関数を指定する。\n * この関数で返された選択肢が、選択肢として表示される。\n */\n loadOptions?: SelectLoadOptions<T>;\n /**\n * 選択肢を指定する。\n * 各選択肢は、valueとlabel及び任意のプロパティを持つオブジェクトである必要がある。\n */\n options?: T[];\n /**\n * このフラグがtrueの場合、queryもvalueとして扱えるようになる\n * @default false\n */\n treatQueryAsValue?: boolean;\n /**\n * 選択肢が変更された時に呼ばれるコールバック関数を指定する。\n */\n onChangeOption?: (option: T) => void;\n /**\n * 選択肢が選択された時に呼ばれるコールバック関数を指定する。\n * 選択肢が選択されず、選択肢が変更された場合は呼ばれない。\n */\n onSelectOption?: (option: T) => void;\n /**\n * 選択後にinput要素から離脱する\n * @default false\n */\n blurOnSelect?: boolean;\n}\n\ninterface UseSelectFieldResult<T extends SelectOptionValue> {\n /**\n * 表示用の文字列。\n */\n displayValue: string | undefined;\n /**\n * 検索用に入力された文字列。\n */\n query: string;\n /**\n * input要素に渡される値。\n */\n value: string | undefined;\n /**\n * 選択肢のリストを開くかどうか。\n */\n openList: boolean;\n /**\n * 実態となるinput要素に渡すprops\n */\n inputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素に渡すprops\n */\n pseudoInputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 選択肢のリストに渡すprops\n */\n listProps: React.ComponentPropsWithRef<\"ul\">;\n /**\n * 選択肢のリストの各要素に渡すpropsと、各選択肢、及びkeyを持つオブジェクトの配列。\n */\n listItems?: {\n key: string;\n option: T;\n props: React.ComponentPropsWithoutRef<\"li\">;\n }[];\n /**\n * 全ての要素の親となる要素に渡すprops\n */\n rootProps: React.ComponentPropsWithRef<\"div\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素にフォーカスしているかどうかを表すフラグ。\n */\n isFocused: boolean;\n}\n\nexport const useSelectField = <T extends SelectOptionValue>(\n args: UseSelectFieldArgs<T>,\n): UseSelectFieldResult<T> => {\n const {\n readOnly = false,\n name,\n required = false,\n options: propsOptions,\n loadOptions = defaultLoadOptions,\n treatQueryAsValue = false,\n blurOnSelect = false,\n defaultValue = undefined,\n onChangeOption,\n onSelectOption,\n } = args;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [value, setValue] = useState<string | undefined>(defaultValue);\n const selectedOptionsCache = useRef<T[] | undefined>(propsOptions);\n const [options, setOptions] = useState(propsOptions);\n const [isFocused, setIsFocused] = useState(false);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const originalInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const pseudoInputRef = useRef<HTMLInputElement>(null);\n\n const updateOptions = useCallback(\n async (query: string, value: string | undefined) => {\n const options = await loadOptions({\n value,\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions],\n );\n\n const updateQuery = useCallback(\n async (query: string, value: string | undefined) => {\n setQuery(query);\n await updateOptions(query, value);\n },\n [updateOptions],\n );\n\n const inputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: originalInputRef,\n required: required,\n name: name,\n defaultValue: value,\n key: value,\n tabIndex: -1,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n onFocus: (event) => {\n event.currentTarget.blur();\n pseudoInputRef.current?.focus();\n },\n };\n }, [name, required, value]);\n\n const displayValue = useMemo(() => {\n return (\n selectedOptionsCache.current?.find((option) => option.value === value) ||\n options?.find((option) => option.value === value)\n )?.label;\n }, [options, value]);\n\n const rootProps = useMemo(() => {\n return {\n ref: rootRef,\n };\n }, []);\n\n useOnClickOutside([rootRef, listRef], () => {\n setOpen(false);\n });\n\n const updateValue = useCallback(\n (option: T) => {\n const value = option.value;\n setValue(value);\n if (onChangeOption) {\n onChangeOption(option);\n }\n selectedOptionsCache.current = options;\n if (originalInputRef.current) {\n dispatchChangeEvent(originalInputRef.current, value);\n }\n },\n [onChangeOption, options],\n );\n\n const pseudoInputProps = useMemo(() => {\n return {\n ref: pseudoInputRef,\n value: query,\n autoComplete: \"off\" as const,\n autoCorrect: \"off\" as const,\n autoCapitalize: \"none\" as const,\n spellCheck: false,\n tabIndex: 0,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n const query = event.currentTarget.value;\n const value = treatQueryAsValue ? query : undefined;\n\n updateQuery(query, value);\n if (treatQueryAsValue) {\n updateValue({\n label: query,\n value: query,\n } as T);\n }\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n /**\n * ユーザーがフォーカスされている状態で入力要素をクリックするのは、\n * ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。\n */\n if (event.currentTarget === document.activeElement) {\n setOpen(true);\n }\n },\n onFocus: () => {\n if (readOnly !== true) {\n setOpen(true);\n }\n setIsFocused(true);\n },\n onBlur: () => {\n setIsFocused(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { key } = event;\n if (key === \"Delete\" || key === \"Backspace\") {\n if (query === \"\") {\n setValue(undefined);\n\n updateOptions(\"\", undefined);\n }\n } else if (key === \"ArrowDown\") {\n event.preventDefault();\n const list = listRef.current;\n if (list) {\n moveFocus(list, null, nextItem);\n }\n } else if (\n treatQueryAsValue &&\n event.nativeEvent.isComposing === false &&\n key === \"Enter\"\n ) {\n if (treatQueryAsValue) {\n selectedOptionsCache.current = [\n {\n value: query,\n label: query,\n } as T,\n ];\n }\n setOpen(false);\n } else if (event.key.length === 1) {\n setOpen(true);\n }\n },\n };\n }, [\n query,\n treatQueryAsValue,\n updateQuery,\n updateValue,\n readOnly,\n updateOptions,\n ]);\n\n const listProps = useMemo(() => {\n return {\n ref: listRef,\n role: \"listbox\",\n tabIndex: -1,\n onKeyDown: (event: React.KeyboardEvent<HTMLUListElement>) => {\n const key = event.key;\n const list = listRef.current;\n if (list === null) {\n return;\n }\n const currentFocus = ownerDocument(list).activeElement;\n if (key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n } else if (key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n }\n },\n };\n }, []);\n\n const listItems = useMemo(() => {\n return options?.map((option, index) => {\n const selected = option.value === value;\n return {\n key: `${option.value}-${index}`,\n option,\n props: {\n role: \"option\",\n \"aria-selected\": selected,\n /**\n * 何も選択されていないときは、先頭のオプションに飛べるようにする\n */\n tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,\n onClick: () => {\n updateValue(option);\n\n if (onSelectOption) {\n onSelectOption(option);\n }\n\n updateQuery(\"\", option.value);\n if (blurOnSelect === false) {\n pseudoInputRef?.current?.focus();\n }\n setOpen(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLLIElement>) => {\n const key = event.key;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n },\n };\n });\n }, [blurOnSelect, onSelectOption, options, updateQuery, updateValue, value]);\n\n const result = useMemo(() => {\n return {\n displayValue,\n query,\n value,\n openList: open,\n inputProps,\n pseudoInputProps,\n listProps,\n listItems,\n rootProps,\n isFocused: isFocused,\n };\n }, [\n displayValue,\n inputProps,\n listItems,\n listProps,\n open,\n pseudoInputProps,\n query,\n rootProps,\n value,\n isFocused,\n ]);\n return result;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -9,7 +9,6 @@ var useOnClickOutside = (ref, handler) => {
9
9
  }
10
10
  var listener = event => {
11
11
  if (Array.isArray(ref)) {
12
- // eslint-disable-next-line @typescript-eslint/prefer-for-of
13
12
  for (var i = 0; i < ref.length; i++) {
14
13
  var element = ref[i].current;
15
14
  // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。
@@ -67,19 +66,16 @@ var getSearch = (items, query) => {
67
66
  }
68
67
  res.length = c;
69
68
  res.sort((a, b) => {
70
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
71
69
  if (a.score <= b.score) {
72
70
  return 1;
73
71
  } else {
74
72
  return -1;
75
73
  }
76
74
  });
77
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
78
75
  return res;
79
76
  };
80
77
  var dispatchChangeEvent = (element, value) => {
81
78
  var _Object$getOwnPropert;
82
- // eslint-disable-next-line @typescript-eslint/unbound-method
83
79
  var nativeInputValueSetter = (_Object$getOwnPropert = Object.getOwnPropertyDescriptor(element.tagName.toLowerCase() === "input" ? HTMLInputElement.prototype : HTMLTextAreaElement.prototype, "value")) == null ? void 0 : _Object$getOwnPropert.set;
84
80
  nativeInputValueSetter == null || nativeInputValueSetter.call(element, value);
85
81
  element.dispatchEvent(new Event("change", {
@@ -87,7 +83,6 @@ var dispatchChangeEvent = (element, value) => {
87
83
  }));
88
84
  };
89
85
  function ownerDocument(node) {
90
- // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
91
86
  return (node == null ? void 0 : node.ownerDocument) || document;
92
87
  }
93
88
  var nextItem = (list, item) => {
@@ -126,12 +121,10 @@ var moveFocus = (list, currentFocus, traversalFunction) => {
126
121
  export var filterSelectOptionsByQuery = (options, query) => {
127
122
  var result = getSearch(options.map(option => {
128
123
  return _extends({}, option, {
129
- // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
130
124
  keys: option.keys || [option.label],
131
125
  content: option.value
132
126
  });
133
127
  }), query);
134
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
135
128
  return result;
136
129
  };
137
130
  var defaultLoadOptions = /*#__PURE__*/function () {
@@ -147,7 +140,6 @@ var defaultLoadOptions = /*#__PURE__*/function () {
147
140
  return options;
148
141
  }
149
142
  var result = filterSelectOptionsByQuery(options, query);
150
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
151
143
  return result.length ? result : options;
152
144
  });
153
145
  return function defaultLoadOptions(_x) {
@@ -221,9 +213,7 @@ export var useSelectField = args => {
221
213
  }, [name, required, value]);
222
214
  var displayValue = useMemo(() => {
223
215
  var _ref5, _selectedOptionsCache;
224
- return (_ref5 = ((_selectedOptionsCache = selectedOptionsCache.current) == null ? void 0 : _selectedOptionsCache.find(option => option.value === value
225
- // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
226
- )) || (options == null ? void 0 : options.find(option => option.value === value))) == null ? void 0 : _ref5.label;
216
+ return (_ref5 = ((_selectedOptionsCache = selectedOptionsCache.current) == null ? void 0 : _selectedOptionsCache.find(option => option.value === value)) || (options == null ? void 0 : options.find(option => option.value === value))) == null ? void 0 : _ref5.label;
227
217
  }, [options, value]);
228
218
  var rootProps = useMemo(() => {
229
219
  return {
@@ -256,7 +246,6 @@ export var useSelectField = args => {
256
246
  onChange: event => {
257
247
  var query = event.currentTarget.value;
258
248
  var value = treatQueryAsValue ? query : undefined;
259
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
260
249
  updateQuery(query, value);
261
250
  if (treatQueryAsValue) {
262
251
  updateValue({
@@ -290,7 +279,6 @@ export var useSelectField = args => {
290
279
  if (key === "Delete" || key === "Backspace") {
291
280
  if (query === "") {
292
281
  setValue(undefined);
293
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
294
282
  updateOptions("", undefined);
295
283
  }
296
284
  } else if (key === "ArrowDown") {
@@ -353,7 +341,6 @@ export var useSelectField = args => {
353
341
  if (onSelectOption) {
354
342
  onSelectOption(option);
355
343
  }
356
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
357
344
  updateQuery("", option.value);
358
345
  if (blurOnSelect === false) {
359
346
  var _pseudoInputRef$curre2;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","useOnClickOutside","ref","handler","undefined","listener","event","Array","isArray","i","length","element","current","contains","composedPath","document","addEventListener","removeEventListener","getSearch","items","query","copy","slice","len","key","toLowerCase","c","tmp","res","j","index","keylen","keys","indexOf","score","_extends","sort","a","b","dispatchChangeEvent","value","_Object$getOwnPropert","nativeInputValueSetter","Object","getOwnPropertyDescriptor","tagName","HTMLInputElement","prototype","HTMLTextAreaElement","set","call","dispatchEvent","Event","bubbles","ownerDocument","node","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","nextFocus","disabledFocus","disabled","getAttribute","focus","filterSelectOptionsByQuery","options","result","map","option","label","content","defaultLoadOptions","_ref2","_asyncToGenerator","_ref","_x","apply","arguments","useSelectField","args","readOnly","name","required","propsOptions","loadOptions","treatQueryAsValue","blurOnSelect","defaultValue","onChangeOption","onSelectOption","open","setOpen","setQuery","setValue","selectedOptionsCache","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateOptions","_ref3","selectedOptions","_x2","_x3","updateQuery","_ref4","_x4","_x5","inputProps","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","_pseudoInputRef$curre","currentTarget","blur","displayValue","_ref5","_selectedOptionsCache","find","rootProps","updateValue","pseudoInputProps","onChange","onClick","activeElement","onBlur","onKeyDown","preventDefault","nativeEvent","isComposing","listProps","role","listItems","selected","props","_pseudoInputRef$curre2","click","openList"],"sources":["../../../src/SelectField/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst useOnClickOutside = (\n ref: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n handler?: (event: MouseEvent | TouchEvent) => void,\n) => {\n useEffect(() => {\n if (!handler) {\n return undefined;\n }\n const listener = (event: MouseEvent | TouchEvent) => {\n if (Array.isArray(ref)) {\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ref.length; i++) {\n const element = ref[i].current;\n // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。\n if (element?.contains(event.composedPath()[0] as Node)) {\n return;\n }\n }\n } else {\n if (\n !ref.current ||\n ref.current.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nconst getSearch = <\n T extends {\n keys: string[];\n },\n>(\n items: T[],\n query: string,\n) => {\n const copy = items.slice();\n const len = items.length;\n const key = query.toLowerCase();\n let i = -1;\n let c = 0;\n let tmp: {\n keys: string[];\n };\n const res = new Array(len);\n while (++i !== len) {\n tmp = copy[i];\n /**\n * Caluculate Minimum Index\n */\n let j = -1;\n let index = -1;\n const keylen = tmp.keys.length;\n let current;\n while (++j !== keylen) {\n current = tmp.keys[j].toLowerCase().indexOf(key);\n if (index === -1 || (current !== -1 && current < index)) {\n index = current;\n }\n }\n /**\n * Caluculate Score\n */\n const score = index > -1 ? 1 / (index + 1) : 0;\n if (score > 0) {\n res[c++] = { ...tmp, score };\n }\n }\n\n res.length = c;\n res.sort((a, b) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (a.score <= b.score) {\n return 1;\n } else {\n return -1;\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return res;\n};\n\nconst dispatchChangeEvent = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value?: string | number,\n) => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n element.tagName.toLowerCase() === \"input\"\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype,\n \"value\",\n )?.set;\n\n nativeInputValueSetter?.call(element, value);\n\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\n\nfunction ownerDocument(node: Node | null | undefined): Document {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n return node?.ownerDocument || document;\n}\n\ntype TraversalFunction = (\n list: HTMLUListElement,\n item?: Element | null,\n) => ChildNode | null;\n\nconst nextItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item?.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\n\nconst previousItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item?.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\n\nconst moveFocus = (\n list: HTMLUListElement,\n currentFocus: Element | null,\n traversalFunction: TraversalFunction,\n) => {\n let nextFocus = traversalFunction(list, currentFocus) as HTMLElement | null;\n while (nextFocus) {\n if (\n currentFocus === null\n ? nextFocus === list.lastChild\n : nextFocus === currentFocus\n ) {\n break;\n }\n const disabledFocus =\n (nextFocus as HTMLInputElement).disabled ||\n nextFocus.getAttribute(\"aria-disabled\") === \"true\";\n if (disabledFocus) {\n nextFocus = traversalFunction(list, nextFocus) as HTMLElement;\n } else {\n nextFocus.focus();\n break;\n }\n }\n};\n\nexport const filterSelectOptionsByQuery = <\n T extends SelectOptionValue = SelectOptionValue,\n>(\n options: T[],\n query: string,\n) => {\n const result = getSearch(\n options.map((option) => {\n return {\n ...option,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n keys: option.keys || [option.label],\n content: option.value,\n };\n }),\n query,\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n};\n\nconst defaultLoadOptions = async <\n T extends SelectOptionValue = SelectOptionValue,\n>({\n query,\n options,\n}: {\n query: string;\n options?: T[];\n // eslint-disable-next-line @typescript-eslint/require-await\n}): Promise<T[] | undefined> => {\n if (options === undefined) {\n return undefined;\n }\n if (query === undefined) {\n return options;\n }\n const result = filterSelectOptionsByQuery(options, query);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result.length ? result : options;\n};\n\nexport type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> =\n (args: {\n value: string | undefined;\n query: string;\n options?: T[];\n selectedOptions?: T[];\n }) => Promise<T[] | undefined>;\n\nexport interface SelectOptionValue {\n value: string | undefined;\n label: string;\n keys?: string[];\n [key: string]: unknown;\n}\n\nexport interface UseSelectFieldArgs<T extends SelectOptionValue> {\n /**\n * 選択肢の初期値を指定する。\n */\n defaultValue?: string;\n /**\n * 選択肢の選択が可能かどうか指定する。\n * @default false\n */\n readOnly?: boolean;\n /**\n * 選択肢の選択が必須かどうか指定する。\n * @default false\n */\n required?: boolean;\n /**\n * input要素に渡したいname属性を指定する。\n */\n name?: string;\n /**\n * queryに応じて選択肢をロードする関数を指定する。\n * この関数で返された選択肢が、選択肢として表示される。\n */\n loadOptions?: SelectLoadOptions<T>;\n /**\n * 選択肢を指定する。\n * 各選択肢は、valueとlabel及び任意のプロパティを持つオブジェクトである必要がある。\n */\n options?: T[];\n /**\n * このフラグがtrueの場合、queryもvalueとして扱えるようになる\n * @default false\n */\n treatQueryAsValue?: boolean;\n /**\n * 選択肢が変更された時に呼ばれるコールバック関数を指定する。\n */\n onChangeOption?: (option: T) => void;\n /**\n * 選択肢が選択された時に呼ばれるコールバック関数を指定する。\n * 選択肢が選択されず、選択肢が変更された場合は呼ばれない。\n */\n onSelectOption?: (option: T) => void;\n /**\n * 選択後にinput要素から離脱する\n * @default false\n */\n blurOnSelect?: boolean;\n}\n\ninterface UseSelectFieldResult<T extends SelectOptionValue> {\n /**\n * 表示用の文字列。\n */\n displayValue: string | undefined;\n /**\n * 検索用に入力された文字列。\n */\n query: string;\n /**\n * input要素に渡される値。\n */\n value: string | undefined;\n /**\n * 選択肢のリストを開くかどうか。\n */\n openList: boolean;\n /**\n * 実態となるinput要素に渡すprops\n */\n inputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素に渡すprops\n */\n pseudoInputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 選択肢のリストに渡すprops\n */\n listProps: React.ComponentPropsWithRef<\"ul\">;\n /**\n * 選択肢のリストの各要素に渡すpropsと、各選択肢、及びkeyを持つオブジェクトの配列。\n */\n listItems?: {\n key: string;\n option: T;\n props: React.ComponentPropsWithoutRef<\"li\">;\n }[];\n /**\n * 全ての要素の親となる要素に渡すprops\n */\n rootProps: React.ComponentPropsWithRef<\"div\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素にフォーカスしているかどうかを表すフラグ。\n */\n isFocused: boolean;\n}\n\nexport const useSelectField = <T extends SelectOptionValue>(\n args: UseSelectFieldArgs<T>,\n): UseSelectFieldResult<T> => {\n const {\n readOnly = false,\n name,\n required = false,\n options: propsOptions,\n loadOptions = defaultLoadOptions,\n treatQueryAsValue = false,\n blurOnSelect = false,\n defaultValue = undefined,\n onChangeOption,\n onSelectOption,\n } = args;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [value, setValue] = useState<string | undefined>(defaultValue);\n const selectedOptionsCache = useRef<T[] | undefined>(propsOptions);\n const [options, setOptions] = useState(propsOptions);\n const [isFocused, setIsFocused] = useState(false);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const originalInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const pseudoInputRef = useRef<HTMLInputElement>(null);\n\n const updateOptions = useCallback(\n async (query: string, value: string | undefined) => {\n const options = await loadOptions({\n value,\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions],\n );\n\n const updateQuery = useCallback(\n async (query: string, value: string | undefined) => {\n setQuery(query);\n await updateOptions(query, value);\n },\n [updateOptions],\n );\n\n const inputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: originalInputRef,\n required: required,\n name: name,\n defaultValue: value,\n key: value,\n tabIndex: -1,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n onFocus: (event) => {\n event.currentTarget.blur();\n pseudoInputRef.current?.focus();\n },\n };\n }, [name, required, value]);\n\n const displayValue = useMemo(() => {\n return (\n selectedOptionsCache.current?.find(\n (option) => option.value === value,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n ) || options?.find((option) => option.value === value)\n )?.label;\n }, [options, value]);\n\n const rootProps = useMemo(() => {\n return {\n ref: rootRef,\n };\n }, []);\n\n useOnClickOutside([rootRef, listRef], () => {\n setOpen(false);\n });\n\n const updateValue = useCallback(\n (option: T) => {\n const value = option.value;\n setValue(value);\n if (onChangeOption) {\n onChangeOption(option);\n }\n selectedOptionsCache.current = options;\n if (originalInputRef.current) {\n dispatchChangeEvent(originalInputRef.current, value);\n }\n },\n [onChangeOption, options],\n );\n\n const pseudoInputProps = useMemo(() => {\n return {\n ref: pseudoInputRef,\n value: query,\n autoComplete: \"off\" as const,\n autoCorrect: \"off\" as const,\n autoCapitalize: \"none\" as const,\n spellCheck: false,\n tabIndex: 0,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n const query = event.currentTarget.value;\n const value = treatQueryAsValue ? query : undefined;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(query, value);\n if (treatQueryAsValue) {\n updateValue({\n label: query,\n value: query,\n } as T);\n }\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n /**\n * ユーザーがフォーカスされている状態で入力要素をクリックするのは、\n * ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。\n */\n if (event.currentTarget === document.activeElement) {\n setOpen(true);\n }\n },\n onFocus: () => {\n if (readOnly !== true) {\n setOpen(true);\n }\n setIsFocused(true);\n },\n onBlur: () => {\n setIsFocused(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { key } = event;\n if (key === \"Delete\" || key === \"Backspace\") {\n if (query === \"\") {\n setValue(undefined);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateOptions(\"\", undefined);\n }\n } else if (key === \"ArrowDown\") {\n event.preventDefault();\n const list = listRef.current;\n if (list) {\n moveFocus(list, null, nextItem);\n }\n } else if (\n treatQueryAsValue &&\n event.nativeEvent.isComposing === false &&\n key === \"Enter\"\n ) {\n if (treatQueryAsValue) {\n selectedOptionsCache.current = [\n {\n value: query,\n label: query,\n } as T,\n ];\n }\n setOpen(false);\n } else if (event.key.length === 1) {\n setOpen(true);\n }\n },\n };\n }, [\n query,\n treatQueryAsValue,\n updateQuery,\n updateValue,\n readOnly,\n updateOptions,\n ]);\n\n const listProps = useMemo(() => {\n return {\n ref: listRef,\n role: \"listbox\",\n tabIndex: -1,\n onKeyDown: (event: React.KeyboardEvent<HTMLUListElement>) => {\n const key = event.key;\n const list = listRef.current;\n if (list === null) {\n return;\n }\n const currentFocus = ownerDocument(list).activeElement;\n if (key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n } else if (key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n }\n },\n };\n }, []);\n\n const listItems = useMemo(() => {\n return options?.map((option, index) => {\n const selected = option.value === value;\n return {\n key: `${option.value}-${index}`,\n option,\n props: {\n role: \"option\",\n \"aria-selected\": selected,\n /**\n * 何も選択されていないときは、先頭のオプションに飛べるようにする\n */\n tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,\n onClick: () => {\n updateValue(option);\n\n if (onSelectOption) {\n onSelectOption(option);\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n updateQuery(\"\", option.value);\n if (blurOnSelect === false) {\n pseudoInputRef?.current?.focus();\n }\n setOpen(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLLIElement>) => {\n const key = event.key;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n },\n };\n });\n }, [blurOnSelect, onSelectOption, options, updateQuery, updateValue, value]);\n\n const result = useMemo(() => {\n return {\n displayValue,\n query,\n value,\n openList: open,\n inputProps,\n pseudoInputProps,\n listProps,\n listItems,\n rootProps,\n isFocused: isFocused,\n };\n }, [\n displayValue,\n inputProps,\n listItems,\n listProps,\n open,\n pseudoInputProps,\n query,\n rootProps,\n value,\n isFocused,\n ]);\n return result;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","useOnClickOutside","ref","handler","undefined","listener","event","Array","isArray","i","length","element","current","contains","composedPath","document","addEventListener","removeEventListener","getSearch","items","query","copy","slice","len","key","toLowerCase","c","tmp","res","j","index","keylen","keys","indexOf","score","_extends","sort","a","b","dispatchChangeEvent","value","_Object$getOwnPropert","nativeInputValueSetter","Object","getOwnPropertyDescriptor","tagName","HTMLInputElement","prototype","HTMLTextAreaElement","set","call","dispatchEvent","Event","bubbles","ownerDocument","node","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","nextFocus","disabledFocus","disabled","getAttribute","focus","filterSelectOptionsByQuery","options","result","map","option","label","content","defaultLoadOptions","_ref2","_asyncToGenerator","_ref","_x","apply","arguments","useSelectField","args","readOnly","name","required","propsOptions","loadOptions","treatQueryAsValue","blurOnSelect","defaultValue","onChangeOption","onSelectOption","open","setOpen","setQuery","setValue","selectedOptionsCache","setOptions","isFocused","setIsFocused","rootRef","originalInputRef","listRef","pseudoInputRef","updateOptions","_ref3","selectedOptions","_x2","_x3","updateQuery","_ref4","_x4","_x5","inputProps","tabIndex","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","_pseudoInputRef$curre","currentTarget","blur","displayValue","_ref5","_selectedOptionsCache","find","rootProps","updateValue","pseudoInputProps","onChange","onClick","activeElement","onBlur","onKeyDown","preventDefault","nativeEvent","isComposing","listProps","role","listItems","selected","props","_pseudoInputRef$curre2","click","openList"],"sources":["../../../src/SelectField/index.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst useOnClickOutside = (\n ref: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n handler?: (event: MouseEvent | TouchEvent) => void,\n) => {\n useEffect(() => {\n if (!handler) {\n return undefined;\n }\n const listener = (event: MouseEvent | TouchEvent) => {\n if (Array.isArray(ref)) {\n for (let i = 0; i < ref.length; i++) {\n const element = ref[i].current;\n // 1つ目の要素がないからといって、2つ目の要素もなくクリック範囲に含まれていないとは言えない。\n if (element?.contains(event.composedPath()[0] as Node)) {\n return;\n }\n }\n } else {\n if (\n !ref.current ||\n ref.current.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n\nconst getSearch = <\n T extends {\n keys: string[];\n },\n>(\n items: T[],\n query: string,\n) => {\n const copy = items.slice();\n const len = items.length;\n const key = query.toLowerCase();\n let i = -1;\n let c = 0;\n let tmp: {\n keys: string[];\n };\n const res = new Array(len);\n while (++i !== len) {\n tmp = copy[i];\n /**\n * Caluculate Minimum Index\n */\n let j = -1;\n let index = -1;\n const keylen = tmp.keys.length;\n let current;\n while (++j !== keylen) {\n current = tmp.keys[j].toLowerCase().indexOf(key);\n if (index === -1 || (current !== -1 && current < index)) {\n index = current;\n }\n }\n /**\n * Caluculate Score\n */\n const score = index > -1 ? 1 / (index + 1) : 0;\n if (score > 0) {\n res[c++] = { ...tmp, score };\n }\n }\n\n res.length = c;\n res.sort((a, b) => {\n if (a.score <= b.score) {\n return 1;\n } else {\n return -1;\n }\n });\n\n return res;\n};\n\nconst dispatchChangeEvent = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value?: string | number,\n) => {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n element.tagName.toLowerCase() === \"input\"\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype,\n \"value\",\n )?.set;\n\n nativeInputValueSetter?.call(element, value);\n\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\n\nfunction ownerDocument(node: Node | null | undefined): Document {\n return node?.ownerDocument || document;\n}\n\ntype TraversalFunction = (\n list: HTMLUListElement,\n item?: Element | null,\n) => ChildNode | null;\n\nconst nextItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item?.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\n\nconst previousItem: TraversalFunction = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item?.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\n\nconst moveFocus = (\n list: HTMLUListElement,\n currentFocus: Element | null,\n traversalFunction: TraversalFunction,\n) => {\n let nextFocus = traversalFunction(list, currentFocus) as HTMLElement | null;\n while (nextFocus) {\n if (\n currentFocus === null\n ? nextFocus === list.lastChild\n : nextFocus === currentFocus\n ) {\n break;\n }\n const disabledFocus =\n (nextFocus as HTMLInputElement).disabled ||\n nextFocus.getAttribute(\"aria-disabled\") === \"true\";\n if (disabledFocus) {\n nextFocus = traversalFunction(list, nextFocus) as HTMLElement;\n } else {\n nextFocus.focus();\n break;\n }\n }\n};\n\nexport const filterSelectOptionsByQuery = <\n T extends SelectOptionValue = SelectOptionValue,\n>(\n options: T[],\n query: string,\n) => {\n const result = getSearch(\n options.map((option) => {\n return {\n ...option,\n\n keys: option.keys || [option.label],\n content: option.value,\n };\n }),\n query,\n );\n\n return result;\n};\n\nconst defaultLoadOptions = async <\n T extends SelectOptionValue = SelectOptionValue,\n>({\n query,\n options,\n}: {\n query: string;\n options?: T[];\n}): Promise<T[] | undefined> => {\n if (options === undefined) {\n return undefined;\n }\n if (query === undefined) {\n return options;\n }\n const result = filterSelectOptionsByQuery(options, query);\n\n return result.length ? result : options;\n};\n\nexport type SelectLoadOptions<T extends SelectOptionValue = SelectOptionValue> =\n (args: {\n value: string | undefined;\n query: string;\n options?: T[];\n selectedOptions?: T[];\n }) => Promise<T[] | undefined>;\n\nexport interface SelectOptionValue {\n value: string | undefined;\n label: string;\n keys?: string[];\n [key: string]: unknown;\n}\n\nexport interface UseSelectFieldArgs<T extends SelectOptionValue> {\n /**\n * 選択肢の初期値を指定する。\n */\n defaultValue?: string;\n /**\n * 選択肢の選択が可能かどうか指定する。\n * @default false\n */\n readOnly?: boolean;\n /**\n * 選択肢の選択が必須かどうか指定する。\n * @default false\n */\n required?: boolean;\n /**\n * input要素に渡したいname属性を指定する。\n */\n name?: string;\n /**\n * queryに応じて選択肢をロードする関数を指定する。\n * この関数で返された選択肢が、選択肢として表示される。\n */\n loadOptions?: SelectLoadOptions<T>;\n /**\n * 選択肢を指定する。\n * 各選択肢は、valueとlabel及び任意のプロパティを持つオブジェクトである必要がある。\n */\n options?: T[];\n /**\n * このフラグがtrueの場合、queryもvalueとして扱えるようになる\n * @default false\n */\n treatQueryAsValue?: boolean;\n /**\n * 選択肢が変更された時に呼ばれるコールバック関数を指定する。\n */\n onChangeOption?: (option: T) => void;\n /**\n * 選択肢が選択された時に呼ばれるコールバック関数を指定する。\n * 選択肢が選択されず、選択肢が変更された場合は呼ばれない。\n */\n onSelectOption?: (option: T) => void;\n /**\n * 選択後にinput要素から離脱する\n * @default false\n */\n blurOnSelect?: boolean;\n}\n\ninterface UseSelectFieldResult<T extends SelectOptionValue> {\n /**\n * 表示用の文字列。\n */\n displayValue: string | undefined;\n /**\n * 検索用に入力された文字列。\n */\n query: string;\n /**\n * input要素に渡される値。\n */\n value: string | undefined;\n /**\n * 選択肢のリストを開くかどうか。\n */\n openList: boolean;\n /**\n * 実態となるinput要素に渡すprops\n */\n inputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素に渡すprops\n */\n pseudoInputProps: React.ComponentPropsWithRef<\"input\">;\n /**\n * 選択肢のリストに渡すprops\n */\n listProps: React.ComponentPropsWithRef<\"ul\">;\n /**\n * 選択肢のリストの各要素に渡すpropsと、各選択肢、及びkeyを持つオブジェクトの配列。\n */\n listItems?: {\n key: string;\n option: T;\n props: React.ComponentPropsWithoutRef<\"li\">;\n }[];\n /**\n * 全ての要素の親となる要素に渡すprops\n */\n rootProps: React.ComponentPropsWithRef<\"div\">;\n /**\n * 擬似的なinput要素つまり検索用のinput要素にフォーカスしているかどうかを表すフラグ。\n */\n isFocused: boolean;\n}\n\nexport const useSelectField = <T extends SelectOptionValue>(\n args: UseSelectFieldArgs<T>,\n): UseSelectFieldResult<T> => {\n const {\n readOnly = false,\n name,\n required = false,\n options: propsOptions,\n loadOptions = defaultLoadOptions,\n treatQueryAsValue = false,\n blurOnSelect = false,\n defaultValue = undefined,\n onChangeOption,\n onSelectOption,\n } = args;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [value, setValue] = useState<string | undefined>(defaultValue);\n const selectedOptionsCache = useRef<T[] | undefined>(propsOptions);\n const [options, setOptions] = useState(propsOptions);\n const [isFocused, setIsFocused] = useState(false);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const originalInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const pseudoInputRef = useRef<HTMLInputElement>(null);\n\n const updateOptions = useCallback(\n async (query: string, value: string | undefined) => {\n const options = await loadOptions({\n value,\n query,\n options: propsOptions,\n selectedOptions: selectedOptionsCache.current,\n });\n setOptions(options);\n },\n [loadOptions, propsOptions],\n );\n\n const updateQuery = useCallback(\n async (query: string, value: string | undefined) => {\n setQuery(query);\n await updateOptions(query, value);\n },\n [updateOptions],\n );\n\n const inputProps = useMemo((): React.ComponentPropsWithRef<\"input\"> => {\n return {\n ref: originalInputRef,\n required: required,\n name: name,\n defaultValue: value,\n key: value,\n tabIndex: -1,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: false,\n onFocus: (event) => {\n event.currentTarget.blur();\n pseudoInputRef.current?.focus();\n },\n };\n }, [name, required, value]);\n\n const displayValue = useMemo(() => {\n return (\n selectedOptionsCache.current?.find((option) => option.value === value) ||\n options?.find((option) => option.value === value)\n )?.label;\n }, [options, value]);\n\n const rootProps = useMemo(() => {\n return {\n ref: rootRef,\n };\n }, []);\n\n useOnClickOutside([rootRef, listRef], () => {\n setOpen(false);\n });\n\n const updateValue = useCallback(\n (option: T) => {\n const value = option.value;\n setValue(value);\n if (onChangeOption) {\n onChangeOption(option);\n }\n selectedOptionsCache.current = options;\n if (originalInputRef.current) {\n dispatchChangeEvent(originalInputRef.current, value);\n }\n },\n [onChangeOption, options],\n );\n\n const pseudoInputProps = useMemo(() => {\n return {\n ref: pseudoInputRef,\n value: query,\n autoComplete: \"off\" as const,\n autoCorrect: \"off\" as const,\n autoCapitalize: \"none\" as const,\n spellCheck: false,\n tabIndex: 0,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n const query = event.currentTarget.value;\n const value = treatQueryAsValue ? query : undefined;\n\n updateQuery(query, value);\n if (treatQueryAsValue) {\n updateValue({\n label: query,\n value: query,\n } as T);\n }\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n /**\n * ユーザーがフォーカスされている状態で入力要素をクリックするのは、\n * ユーザーが選択肢を一度選択してから再度選択したいケースと想定されるため、リストを再度開く。\n */\n if (event.currentTarget === document.activeElement) {\n setOpen(true);\n }\n },\n onFocus: () => {\n if (readOnly !== true) {\n setOpen(true);\n }\n setIsFocused(true);\n },\n onBlur: () => {\n setIsFocused(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { key } = event;\n if (key === \"Delete\" || key === \"Backspace\") {\n if (query === \"\") {\n setValue(undefined);\n\n updateOptions(\"\", undefined);\n }\n } else if (key === \"ArrowDown\") {\n event.preventDefault();\n const list = listRef.current;\n if (list) {\n moveFocus(list, null, nextItem);\n }\n } else if (\n treatQueryAsValue &&\n event.nativeEvent.isComposing === false &&\n key === \"Enter\"\n ) {\n if (treatQueryAsValue) {\n selectedOptionsCache.current = [\n {\n value: query,\n label: query,\n } as T,\n ];\n }\n setOpen(false);\n } else if (event.key.length === 1) {\n setOpen(true);\n }\n },\n };\n }, [\n query,\n treatQueryAsValue,\n updateQuery,\n updateValue,\n readOnly,\n updateOptions,\n ]);\n\n const listProps = useMemo(() => {\n return {\n ref: listRef,\n role: \"listbox\",\n tabIndex: -1,\n onKeyDown: (event: React.KeyboardEvent<HTMLUListElement>) => {\n const key = event.key;\n const list = listRef.current;\n if (list === null) {\n return;\n }\n const currentFocus = ownerDocument(list).activeElement;\n if (key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n } else if (key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n }\n },\n };\n }, []);\n\n const listItems = useMemo(() => {\n return options?.map((option, index) => {\n const selected = option.value === value;\n return {\n key: `${option.value}-${index}`,\n option,\n props: {\n role: \"option\",\n \"aria-selected\": selected,\n /**\n * 何も選択されていないときは、先頭のオプションに飛べるようにする\n */\n tabIndex: (value === undefined ? index === 0 : selected) ? -1 : -1,\n onClick: () => {\n updateValue(option);\n\n if (onSelectOption) {\n onSelectOption(option);\n }\n\n updateQuery(\"\", option.value);\n if (blurOnSelect === false) {\n pseudoInputRef?.current?.focus();\n }\n setOpen(false);\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLLIElement>) => {\n const key = event.key;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n },\n },\n };\n });\n }, [blurOnSelect, onSelectOption, options, updateQuery, updateValue, value]);\n\n const result = useMemo(() => {\n return {\n displayValue,\n query,\n value,\n openList: open,\n inputProps,\n pseudoInputProps,\n listProps,\n listItems,\n rootProps,\n isFocused: isFocused,\n };\n }, [\n displayValue,\n inputProps,\n listItems,\n listProps,\n open,\n pseudoInputProps,\n query,\n rootProps,\n value,\n isFocused,\n ]);\n return result;\n};\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matsuri-ui-base",
3
- "version": "0.3.1-alpha-1725670602121-fff07b3.0",
3
+ "version": "0.3.1-alpha-1725854469662-28b3fb8.0",
4
4
  "sideEffects": false,
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",