@tamagui/select 3.0.0-beta.924.1 → 3.0.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.
- package/dist/cjs/Select.cjs +23 -25
- package/dist/cjs/Select.native.cjs +27 -26
- package/dist/cjs/Select.native.js +27 -26
- package/dist/cjs/Select.native.js.map +1 -1
- package/dist/cjs/SelectImpl.cjs +56 -50
- package/dist/cjs/SelectItem.cjs +49 -60
- package/dist/cjs/SelectItem.native.cjs +51 -79
- package/dist/cjs/SelectItem.native.js +51 -79
- package/dist/cjs/SelectItem.native.js.map +1 -1
- package/dist/cjs/SelectScrollButton.cjs +2 -2
- package/dist/cjs/SelectTrigger.cjs +22 -5
- package/dist/cjs/SelectTrigger.native.cjs +15 -5
- package/dist/cjs/SelectTrigger.native.js +15 -5
- package/dist/cjs/SelectTrigger.native.js.map +1 -1
- package/dist/cjs/SelectViewport.cjs +22 -30
- package/dist/cjs/SelectViewport.native.cjs +2 -2
- package/dist/cjs/SelectViewport.native.js +2 -2
- package/dist/cjs/SelectViewport.native.js.map +1 -1
- package/dist/cjs/selectionController.cjs +15 -5
- package/dist/cjs/selectionController.native.cjs +20 -15
- package/dist/cjs/selectionController.native.js +20 -15
- package/dist/cjs/selectionController.native.js.map +1 -1
- package/dist/esm/Select.mjs +27 -28
- package/dist/esm/Select.mjs.map +1 -1
- package/dist/esm/Select.native.js +31 -29
- package/dist/esm/Select.native.js.map +1 -1
- package/dist/esm/SelectImpl.mjs +56 -50
- package/dist/esm/SelectImpl.mjs.map +1 -1
- package/dist/esm/SelectItem.mjs +50 -61
- package/dist/esm/SelectItem.mjs.map +1 -1
- package/dist/esm/SelectItem.native.js +52 -80
- package/dist/esm/SelectItem.native.js.map +1 -1
- package/dist/esm/SelectScrollButton.mjs +2 -2
- package/dist/esm/SelectScrollButton.mjs.map +1 -1
- package/dist/esm/SelectTrigger.mjs +16 -5
- package/dist/esm/SelectTrigger.mjs.map +1 -1
- package/dist/esm/SelectTrigger.native.js +15 -4
- package/dist/esm/SelectTrigger.native.js.map +1 -1
- package/dist/esm/SelectViewport.mjs +22 -30
- package/dist/esm/SelectViewport.mjs.map +1 -1
- package/dist/esm/SelectViewport.native.js +3 -3
- package/dist/esm/SelectViewport.native.js.map +1 -1
- package/dist/esm/selectionController.mjs +15 -5
- package/dist/esm/selectionController.mjs.map +1 -1
- package/dist/esm/selectionController.native.js +20 -15
- package/dist/esm/selectionController.native.js.map +1 -1
- package/dist/jsx/Select.mjs +27 -28
- package/dist/jsx/Select.mjs.map +1 -1
- package/dist/jsx/Select.native.cjs +27 -26
- package/dist/jsx/Select.native.js +27 -26
- package/dist/jsx/Select.native.js.map +1 -1
- package/dist/jsx/SelectImpl.mjs +56 -50
- package/dist/jsx/SelectImpl.mjs.map +1 -1
- package/dist/jsx/SelectItem.mjs +50 -61
- package/dist/jsx/SelectItem.mjs.map +1 -1
- package/dist/jsx/SelectItem.native.cjs +51 -79
- package/dist/jsx/SelectItem.native.js +51 -79
- package/dist/jsx/SelectItem.native.js.map +1 -1
- package/dist/jsx/SelectScrollButton.mjs +2 -2
- package/dist/jsx/SelectScrollButton.mjs.map +1 -1
- package/dist/jsx/SelectTrigger.mjs +16 -5
- package/dist/jsx/SelectTrigger.mjs.map +1 -1
- package/dist/jsx/SelectTrigger.native.cjs +15 -5
- package/dist/jsx/SelectTrigger.native.js +15 -5
- package/dist/jsx/SelectTrigger.native.js.map +1 -1
- package/dist/jsx/SelectViewport.mjs +22 -30
- package/dist/jsx/SelectViewport.mjs.map +1 -1
- package/dist/jsx/SelectViewport.native.cjs +2 -2
- package/dist/jsx/SelectViewport.native.js +2 -2
- package/dist/jsx/SelectViewport.native.js.map +1 -1
- package/dist/jsx/selectionController.mjs +15 -5
- package/dist/jsx/selectionController.mjs.map +1 -1
- package/dist/jsx/selectionController.native.cjs +20 -15
- package/dist/jsx/selectionController.native.js +20 -15
- package/dist/jsx/selectionController.native.js.map +1 -1
- package/package.json +30 -29
- package/src/Select.tsx +41 -41
- package/src/SelectImpl.tsx +83 -81
- package/src/SelectItem.tsx +66 -91
- package/src/SelectScrollButton.tsx +2 -2
- package/src/SelectTrigger.tsx +19 -2
- package/src/SelectViewport.native.tsx +4 -4
- package/src/SelectViewport.tsx +21 -27
- package/src/selectionController.ts +20 -5
- package/src/types.tsx +26 -21
- package/types/Select.d.ts +42 -81
- package/types/Select.d.ts.map +1 -1
- package/types/SelectImpl.d.ts.map +1 -1
- package/types/SelectItem.d.ts +3 -5
- package/types/SelectItem.d.ts.map +1 -1
- package/types/SelectItemText.d.ts +3 -5
- package/types/SelectItemText.d.ts.map +1 -1
- package/types/SelectScrollButton.d.ts +5 -9
- package/types/SelectScrollButton.d.ts.map +1 -1
- package/types/SelectScrollButton.native.d.ts +5 -9
- package/types/SelectScrollButton.native.d.ts.map +1 -1
- package/types/SelectTrigger.d.ts +3 -5
- package/types/SelectTrigger.d.ts.map +1 -1
- package/types/SelectViewport.d.ts +4 -9
- package/types/SelectViewport.d.ts.map +1 -1
- package/types/SelectViewport.native.d.ts +4 -9
- package/types/SelectViewport.native.d.ts.map +1 -1
- package/types/selectionController.d.ts +2 -0
- package/types/selectionController.d.ts.map +1 -1
- package/types/types.d.ts +30 -21
- package/types/types.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectionController.native.js","names":[],"sources":["jsx/selectionController.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar selectionController_exports = {};\n__export(selectionController_exports, {\n createSelectItemRegistry: () => createSelectItemRegistry,\n createSelectSelectionController: () => createSelectSelectionController,\n getSelectLabelText: () => getSelectLabelText,\n getSelectListboxProps: () => getSelectListboxProps,\n getSelectOptionProps: () => getSelectOptionProps,\n normalizeSelectSelection: () => normalizeSelectSelection,\n selectedValuesFromSelection: () => selectedValuesFromSelection\n});\nmodule.exports = __toCommonJS(selectionController_exports);\nfunction _type_of(obj) {\n \"@swc/helpers - typeof\";\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nfunction getSelectLabelText(label) {\n if (typeof label === \"string\" || typeof label === \"number\") {\n return String(label);\n }\n if (Array.isArray(label)) {\n return label.map(getSelectLabelText).join(\"\");\n }\n if (label && (typeof label === \"undefined\" ? \"undefined\" : _type_of(label)) === \"object\" && \"props\" in label) {\n var _label_props;\n return getSelectLabelText((_label_props = label.props) === null || _label_props === void 0 ? void 0 : _label_props.children);\n }\n return \"\";\n}\nfunction createSelectItemRegistry(onChange) {\n var items = [];\n var labelRegistrations = /* @__PURE__ */ new Map();\n var explicitTextValues = /* @__PURE__ */ new Map();\n var itemNodes = /* @__PURE__ */ new Map();\n var listeners = /* @__PURE__ */ new Set();\n var notify = function() {\n onChange === null || onChange === void 0 ? void 0 : onChange();\n listeners.forEach(function(listener) {\n return listener();\n });\n };\n var getItems = function() {\n return items;\n };\n var getItem = function(value) {\n return items.find(function(item) {\n return item.value === value;\n });\n };\n var getIndex = function(value) {\n return items.findIndex(function(item) {\n return item.value === value;\n });\n };\n var getRegisteredLabel = function(value) {\n var registrations = labelRegistrations.get(value);\n if (!(registrations === null || registrations === void 0 ? void 0 : registrations.size)) return void 0;\n var values = Array.from(registrations.values());\n return values[values.length - 1];\n };\n var applyRegisteredLabel = function(value) {\n var registeredLabel = getRegisteredLabel(value);\n var changed = false;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = items[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var item = _step.value;\n if (item.value !== value) continue;\n var nextLabel = registeredLabel === null || registeredLabel === void 0 ? void 0 : registeredLabel.label;\n var nextTextValue = explicitTextValues.get(item.id) || (registeredLabel === null || registeredLabel === void 0 ? void 0 : registeredLabel.textValue);\n if (item.label !== nextLabel || item.textValue !== nextTextValue) {\n item.label = nextLabel;\n item.textValue = nextTextValue;\n changed = true;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n if (changed) notify();\n };\n var syncNodeOrder = function() {\n var previousOrder = items.map(function(item) {\n return item.id;\n });\n items.sort(function(a, b) {\n var aNode = itemNodes.get(a.id);\n var bNode = itemNodes.get(b.id);\n if (!aNode || !bNode || typeof aNode.compareDocumentPosition !== \"function\") {\n return 0;\n }\n var position = aNode.compareDocumentPosition(bNode);\n if (position & 4) return -1;\n if (position & 2) return 1;\n return 0;\n });\n if (items.some(function(item, index) {\n return item.id !== previousOrder[index];\n })) {\n notify();\n }\n };\n var registerItem = function(item) {\n var id = Symbol(item.value);\n var registeredLabel = getRegisteredLabel(item.value);\n var _item_textValue;\n var registeredItem = {\n ...item,\n ...registeredLabel,\n textValue: (_item_textValue = item.textValue) !== null && _item_textValue !== void 0 ? _item_textValue : registeredLabel === null || registeredLabel === void 0 ? void 0 : registeredLabel.textValue,\n id\n };\n explicitTextValues.set(id, item.textValue);\n items.push(registeredItem);\n notify();\n return {\n id,\n update(next) {\n var index = items.findIndex(function(current2) {\n return current2.id === id;\n });\n if (index < 0) return;\n var current = items[index];\n if (\"textValue\" in next) {\n explicitTextValues.set(id, next.textValue);\n }\n var nextItem = {\n ...current,\n ...next\n };\n if (next.value !== void 0 && next.value !== current.value) {\n var nextLabel = getRegisteredLabel(next.value);\n nextItem.label = nextLabel === null || nextLabel === void 0 ? void 0 : nextLabel.label;\n }\n var explicitTextValue = explicitTextValues.get(id);\n nextItem.textValue = explicitTextValue || getSelectLabelText(nextItem.label) || (nextItem.label ? nextItem.value : void 0);\n var changed = Object.entries(next).some(function(param) {\n var [key, value] = param;\n return current[key] !== value;\n });\n var textValueChanged = current.textValue !== nextItem.textValue;\n if (!changed && !textValueChanged) return;\n items[index] = nextItem;\n notify();\n },\n setNode(node) {\n if (node) {\n itemNodes.set(id, node);\n syncNodeOrder();\n } else {\n itemNodes.delete(id);\n }\n },\n unregister() {\n var index = items.findIndex(function(current) {\n return current.id === id;\n });\n if (index < 0) return;\n items.splice(index, 1);\n explicitTextValues.delete(id);\n itemNodes.delete(id);\n notify();\n }\n };\n };\n var registerLabel = function(value, label, textValue) {\n var id = Symbol(value);\n var normalizedTextValue = textValue || getSelectLabelText(label) || value;\n var _labelRegistrations_get;\n var registrations = (_labelRegistrations_get = labelRegistrations.get(value)) !== null && _labelRegistrations_get !== void 0 ? _labelRegistrations_get : (function() {\n var next = /* @__PURE__ */ new Map();\n labelRegistrations.set(value, next);\n return next;\n })();\n registrations.set(id, {\n label,\n textValue: normalizedTextValue\n });\n applyRegisteredLabel(value);\n return function() {\n registrations.delete(id);\n if (!registrations.size) {\n labelRegistrations.delete(value);\n }\n applyRegisteredLabel(value);\n };\n };\n var firstEnabledIndex = function() {\n return items.findIndex(function(item) {\n return !item.disabled;\n });\n };\n var nextEnabledIndex = function(fromIndex, direction) {\n if (!items.length) return -1;\n if (fromIndex == null || fromIndex < 0 || fromIndex >= items.length) {\n if (direction === 1) return firstEnabledIndex();\n for (var index = items.length - 1; index >= 0; index--) {\n if (!items[index].disabled) return index;\n }\n return -1;\n }\n for (var offset = 1; offset <= items.length; offset++) {\n var _items_index;\n var index1 = (fromIndex + direction * offset + items.length) % items.length;\n if (!((_items_index = items[index1]) === null || _items_index === void 0 ? void 0 : _items_index.disabled)) return index1;\n }\n return -1;\n };\n var findTypeaheadIndex = function(search, fromIndex) {\n var normalizedSearch = search.trim().toLocaleLowerCase();\n if (!normalizedSearch) return -1;\n var start = fromIndex == null || fromIndex < 0 ? -1 : fromIndex;\n for (var offset = 1; offset <= items.length; offset++) {\n var index = (start + offset) % items.length;\n var item = items[index];\n var label = item.textValue || getSelectLabelText(item.label) || item.value;\n if (!item.disabled && label.toLocaleLowerCase().startsWith(normalizedSearch)) {\n return index;\n }\n }\n return -1;\n };\n return {\n subscribe(listener) {\n listeners.add(listener);\n return function() {\n listeners.delete(listener);\n };\n },\n registerItem,\n registerLabel,\n getItems,\n getItem,\n getIndex,\n firstEnabledIndex,\n nextEnabledIndex,\n findTypeaheadIndex,\n getDisabledIndices: function() {\n return items.flatMap(function(item, index) {\n return item.disabled ? [\n index\n ] : [];\n });\n },\n getTypeaheadLabels: function() {\n return items.map(function(item) {\n return item.textValue || getSelectLabelText(item.label) || item.value;\n });\n }\n };\n}\nfunction normalizeSelectSelection(mode, value) {\n if (mode === \"single\") {\n return typeof value === \"string\" ? value : \"\";\n }\n var values = Array.isArray(value) ? value : [];\n return [\n ...new Set(values)\n ];\n}\nfunction selectedValuesFromSelection(mode, value) {\n var normalized = normalizeSelectSelection(mode, value);\n return mode === \"multiple\" ? normalized : normalized ? [\n normalized\n ] : [];\n}\nfunction createSelectSelectionController(param) {\n var { mode: initialMode, value: initialValue, registry } = param;\n var mode = initialMode;\n var value = normalizeSelectSelection(mode, initialValue);\n var activeIndex = null;\n var selectedValues = function() {\n return selectedValuesFromSelection(mode, value);\n };\n var setMode = function(nextMode) {\n if (mode === nextMode) return value;\n mode = nextMode;\n value = normalizeSelectSelection(mode, value);\n return value;\n };\n var setValue = function(nextValue) {\n value = normalizeSelectSelection(mode, nextValue);\n return value;\n };\n var isSelected = function(itemValue) {\n return selectedValues().includes(itemValue);\n };\n var toggle = function(itemValue) {\n var item = registry.getItem(itemValue);\n if (!item || item.disabled) return value;\n if (mode === \"single\") {\n value = itemValue;\n return value;\n }\n var current = selectedValues();\n value = current.includes(itemValue) ? current.filter(function(currentValue) {\n return currentValue !== itemValue;\n }) : [\n ...current,\n itemValue\n ];\n return value;\n };\n var selectionAnchor = function() {\n var values = selectedValues();\n for (var index = values.length - 1; index >= 0; index--) {\n var item = registry.getItem(values[index]);\n if (item) return item;\n }\n var firstEnabledIndex = registry.firstEnabledIndex();\n return firstEnabledIndex < 0 ? void 0 : registry.getItems()[firstEnabledIndex];\n };\n var selectionAnchorIndex = function() {\n var anchor = selectionAnchor();\n return anchor ? registry.getIndex(anchor.value) : -1;\n };\n var initialActiveIndex = function() {\n var anchorIndex = selectionAnchorIndex();\n var anchor = anchorIndex < 0 ? void 0 : registry.getItems()[anchorIndex];\n return anchor && !anchor.disabled ? anchorIndex : registry.firstEnabledIndex();\n };\n var moveActive = function(direction) {\n var nextIndex = registry.nextEnabledIndex(activeIndex, direction);\n activeIndex = nextIndex < 0 ? null : nextIndex;\n return activeIndex == null ? void 0 : registry.getItems()[activeIndex];\n };\n return {\n registry,\n get mode() {\n return mode;\n },\n get value() {\n return value;\n },\n get activeIndex() {\n return activeIndex;\n },\n get activeItem() {\n return activeIndex == null ? void 0 : registry.getItems()[activeIndex];\n },\n get shouldCloseOnSelect() {\n return mode === \"single\";\n },\n setMode,\n setValue,\n isSelected,\n toggle,\n selectionAnchor,\n selectionAnchorIndex,\n initialActiveIndex,\n setActiveIndex(index) {\n activeIndex = index;\n },\n moveActive\n };\n}\nfunction getSelectListboxProps(mode) {\n return {\n role: \"listbox\",\n \"aria-multiselectable\": mode === \"multiple\" ? true : void 0\n };\n}\nfunction getSelectOptionProps(mode, selected, disabled, platform) {\n if (platform === \"native\") {\n return {\n accessibilityRole: mode === \"multiple\" ? \"checkbox\" : \"button\",\n accessibilityState: {\n selected: mode === \"single\" ? selected : void 0,\n checked: mode === \"multiple\" ? selected : void 0,\n disabled\n }\n };\n }\n return {\n role: \"option\",\n \"aria-selected\": selected,\n \"aria-disabled\": disabled || void 0\n };\n}\n//# sourceMappingURL=selectionController.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"selectionController.native.js","names":[],"sources":["jsx/selectionController.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar selectionController_exports = {};\n__export(selectionController_exports, {\n createSelectItemRegistry: () => createSelectItemRegistry,\n createSelectSelectionController: () => createSelectSelectionController,\n getSelectLabelText: () => getSelectLabelText,\n getSelectListboxProps: () => getSelectListboxProps,\n getSelectOptionProps: () => getSelectOptionProps,\n normalizeSelectSelection: () => normalizeSelectSelection,\n selectedValuesFromSelection: () => selectedValuesFromSelection\n});\nmodule.exports = __toCommonJS(selectionController_exports);\nfunction getSelectLabelText(label) {\n if (typeof label === \"string\" || typeof label === \"number\") {\n return String(label);\n }\n if (Array.isArray(label)) {\n return label.map(getSelectLabelText).join(\"\");\n }\n if (label && typeof label === \"object\" && \"props\" in label) {\n var _label_props;\n return getSelectLabelText((_label_props = label.props) === null || _label_props === void 0 ? void 0 : _label_props.children);\n }\n return \"\";\n}\nfunction createSelectItemRegistry(onChange) {\n var items = [];\n var labelRegistrations = /* @__PURE__ */ new Map();\n var explicitTextValues = /* @__PURE__ */ new Map();\n var itemNodes = /* @__PURE__ */ new Map();\n var listeners = /* @__PURE__ */ new Set();\n var indexByValue = null;\n var notify = function() {\n indexByValue = null;\n onChange === null || onChange === void 0 ? void 0 : onChange();\n listeners.forEach(function(listener) {\n return listener();\n });\n };\n var getItems = function() {\n return items;\n };\n var getItem = function(value) {\n return items.find(function(item) {\n return item.value === value;\n });\n };\n var getIndex = function(value) {\n if (!indexByValue) {\n indexByValue = /* @__PURE__ */ new Map();\n items.forEach(function(item, index) {\n if (!indexByValue.has(item.value)) indexByValue.set(item.value, index);\n });\n }\n var _indexByValue_get;\n return (_indexByValue_get = indexByValue.get(value)) !== null && _indexByValue_get !== void 0 ? _indexByValue_get : -1;\n };\n var getNodes = function() {\n return items.map(function(item) {\n var _itemNodes_get;\n return (_itemNodes_get = itemNodes.get(item.id)) !== null && _itemNodes_get !== void 0 ? _itemNodes_get : null;\n });\n };\n var getRegisteredLabel = function(value) {\n var registrations = labelRegistrations.get(value);\n if (!(registrations === null || registrations === void 0 ? void 0 : registrations.size)) return void 0;\n var values = Array.from(registrations.values());\n return values[values.length - 1];\n };\n var applyRegisteredLabel = function(value) {\n var registeredLabel = getRegisteredLabel(value);\n var changed = false;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = items[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var item = _step.value;\n if (item.value !== value) continue;\n var nextLabel = registeredLabel === null || registeredLabel === void 0 ? void 0 : registeredLabel.label;\n var nextTextValue = explicitTextValues.get(item.id) || (registeredLabel === null || registeredLabel === void 0 ? void 0 : registeredLabel.textValue);\n if (item.label !== nextLabel || item.textValue !== nextTextValue) {\n item.label = nextLabel;\n item.textValue = nextTextValue;\n changed = true;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n if (changed) notify();\n };\n var syncNodeOrder = function() {\n items.sort(function(a, b) {\n var aNode = itemNodes.get(a.id);\n var bNode = itemNodes.get(b.id);\n if (!aNode || !bNode || typeof aNode.compareDocumentPosition !== \"function\") {\n return 0;\n }\n var position = aNode.compareDocumentPosition(bNode);\n if (position & 4) return -1;\n if (position & 2) return 1;\n return 0;\n });\n };\n var registerItem = function(item) {\n var id = Symbol(item.value);\n var registeredLabel = getRegisteredLabel(item.value);\n var _item_textValue;\n var registeredItem = {\n ...item,\n ...registeredLabel,\n textValue: (_item_textValue = item.textValue) !== null && _item_textValue !== void 0 ? _item_textValue : registeredLabel === null || registeredLabel === void 0 ? void 0 : registeredLabel.textValue,\n id\n };\n explicitTextValues.set(id, item.textValue);\n items.push(registeredItem);\n notify();\n return {\n id,\n update(next) {\n var index = items.findIndex(function(current2) {\n return current2.id === id;\n });\n if (index < 0) return;\n var current = items[index];\n if (\"textValue\" in next) {\n explicitTextValues.set(id, next.textValue);\n }\n var nextItem = {\n ...current,\n ...next\n };\n if (next.value !== void 0 && next.value !== current.value) {\n var nextLabel = getRegisteredLabel(next.value);\n nextItem.label = nextLabel === null || nextLabel === void 0 ? void 0 : nextLabel.label;\n }\n var explicitTextValue = explicitTextValues.get(id);\n nextItem.textValue = explicitTextValue || getSelectLabelText(nextItem.label) || (nextItem.label ? nextItem.value : void 0);\n var changed = Object.entries(next).some(function(param) {\n var [key, value] = param;\n return current[key] !== value;\n });\n var textValueChanged = current.textValue !== nextItem.textValue;\n if (!changed && !textValueChanged) return;\n items[index] = nextItem;\n notify();\n },\n setNode(node) {\n var _itemNodes_get;\n if (((_itemNodes_get = itemNodes.get(id)) !== null && _itemNodes_get !== void 0 ? _itemNodes_get : null) === (node !== null && node !== void 0 ? node : null)) return;\n if (node) {\n itemNodes.set(id, node);\n syncNodeOrder();\n } else {\n itemNodes.delete(id);\n }\n notify();\n },\n unregister() {\n var index = items.findIndex(function(current) {\n return current.id === id;\n });\n if (index < 0) return;\n items.splice(index, 1);\n explicitTextValues.delete(id);\n itemNodes.delete(id);\n notify();\n }\n };\n };\n var registerLabel = function(value, label, textValue) {\n var id = Symbol(value);\n var normalizedTextValue = textValue || getSelectLabelText(label) || value;\n var _labelRegistrations_get;\n var registrations = (_labelRegistrations_get = labelRegistrations.get(value)) !== null && _labelRegistrations_get !== void 0 ? _labelRegistrations_get : (function() {\n var next = /* @__PURE__ */ new Map();\n labelRegistrations.set(value, next);\n return next;\n })();\n registrations.set(id, {\n label,\n textValue: normalizedTextValue\n });\n applyRegisteredLabel(value);\n return function() {\n registrations.delete(id);\n if (!registrations.size) {\n labelRegistrations.delete(value);\n }\n applyRegisteredLabel(value);\n };\n };\n var firstEnabledIndex = function() {\n return items.findIndex(function(item) {\n return !item.disabled;\n });\n };\n var nextEnabledIndex = function(fromIndex, direction) {\n if (!items.length) return -1;\n if (fromIndex == null || fromIndex < 0 || fromIndex >= items.length) {\n if (direction === 1) return firstEnabledIndex();\n for (var index = items.length - 1; index >= 0; index--) {\n if (!items[index].disabled) return index;\n }\n return -1;\n }\n for (var offset = 1; offset <= items.length; offset++) {\n var _items_index;\n var index1 = (fromIndex + direction * offset + items.length) % items.length;\n if (!((_items_index = items[index1]) === null || _items_index === void 0 ? void 0 : _items_index.disabled)) return index1;\n }\n return -1;\n };\n var findTypeaheadIndex = function(search, fromIndex) {\n var normalizedSearch = search.trim().toLocaleLowerCase();\n if (!normalizedSearch) return -1;\n var start = fromIndex == null || fromIndex < 0 ? -1 : fromIndex;\n for (var offset = 1; offset <= items.length; offset++) {\n var index = (start + offset) % items.length;\n var item = items[index];\n var label = item.textValue || getSelectLabelText(item.label) || item.value;\n if (!item.disabled && label.toLocaleLowerCase().startsWith(normalizedSearch)) {\n return index;\n }\n }\n return -1;\n };\n return {\n subscribe(listener) {\n listeners.add(listener);\n return function() {\n listeners.delete(listener);\n };\n },\n registerItem,\n registerLabel,\n getItems,\n getItem,\n getIndex,\n getNodes,\n firstEnabledIndex,\n nextEnabledIndex,\n findTypeaheadIndex,\n getDisabledIndices: function() {\n return items.flatMap(function(item, index) {\n return item.disabled ? [\n index\n ] : [];\n });\n },\n getTypeaheadLabels: function() {\n return items.map(function(item) {\n return item.textValue || getSelectLabelText(item.label) || item.value;\n });\n }\n };\n}\nfunction normalizeSelectSelection(mode, value) {\n if (mode === \"single\") {\n return typeof value === \"string\" ? value : \"\";\n }\n var values = Array.isArray(value) ? value : [];\n return [\n ...new Set(values)\n ];\n}\nfunction selectedValuesFromSelection(mode, value) {\n var normalized = normalizeSelectSelection(mode, value);\n return mode === \"multiple\" ? normalized : normalized ? [\n normalized\n ] : [];\n}\nfunction createSelectSelectionController(param) {\n var { mode: initialMode, value: initialValue, registry } = param;\n var mode = initialMode;\n var value = normalizeSelectSelection(mode, initialValue);\n var activeIndex = null;\n var selectedValues = function() {\n return selectedValuesFromSelection(mode, value);\n };\n var setMode = function(nextMode) {\n if (mode === nextMode) return value;\n mode = nextMode;\n value = normalizeSelectSelection(mode, value);\n return value;\n };\n var setValue = function(nextValue) {\n value = normalizeSelectSelection(mode, nextValue);\n return value;\n };\n var isSelected = function(itemValue) {\n return selectedValues().includes(itemValue);\n };\n var toggle = function(itemValue) {\n var item = registry.getItem(itemValue);\n if (!item || item.disabled) return value;\n if (mode === \"single\") {\n value = itemValue;\n return value;\n }\n var current = selectedValues();\n value = current.includes(itemValue) ? current.filter(function(currentValue) {\n return currentValue !== itemValue;\n }) : [\n ...current,\n itemValue\n ];\n return value;\n };\n var selectionAnchor = function() {\n var values = selectedValues();\n for (var index = values.length - 1; index >= 0; index--) {\n var item = registry.getItem(values[index]);\n if (item) return item;\n }\n var firstEnabledIndex = registry.firstEnabledIndex();\n return firstEnabledIndex < 0 ? void 0 : registry.getItems()[firstEnabledIndex];\n };\n var selectionAnchorIndex = function() {\n var anchor = selectionAnchor();\n return anchor ? registry.getIndex(anchor.value) : -1;\n };\n var initialActiveIndex = function() {\n var anchorIndex = selectionAnchorIndex();\n var anchor = anchorIndex < 0 ? void 0 : registry.getItems()[anchorIndex];\n return anchor && !anchor.disabled ? anchorIndex : registry.firstEnabledIndex();\n };\n var moveActive = function(direction) {\n var nextIndex = registry.nextEnabledIndex(activeIndex, direction);\n activeIndex = nextIndex < 0 ? null : nextIndex;\n return activeIndex == null ? void 0 : registry.getItems()[activeIndex];\n };\n return {\n registry,\n get mode() {\n return mode;\n },\n get value() {\n return value;\n },\n get activeIndex() {\n return activeIndex;\n },\n get activeItem() {\n return activeIndex == null ? void 0 : registry.getItems()[activeIndex];\n },\n get shouldCloseOnSelect() {\n return mode === \"single\";\n },\n setMode,\n setValue,\n isSelected,\n toggle,\n selectionAnchor,\n selectionAnchorIndex,\n initialActiveIndex,\n setActiveIndex(index) {\n activeIndex = index;\n },\n moveActive\n };\n}\nfunction getSelectListboxProps(mode) {\n return {\n role: \"listbox\",\n \"aria-multiselectable\": mode === \"multiple\" ? true : void 0\n };\n}\nfunction getSelectOptionProps(mode, selected, disabled, platform) {\n if (platform === \"native\") {\n return {\n accessibilityRole: mode === \"multiple\" ? \"checkbox\" : \"button\",\n accessibilityState: {\n selected: mode === \"single\" ? selected : void 0,\n checked: mode === \"multiple\" ? selected : void 0,\n disabled\n }\n };\n }\n return {\n role: \"option\",\n \"aria-selected\": selected,\n \"aria-disabled\": disabled || void 0\n };\n}\n//# sourceMappingURL=selectionController.js.map\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/select",
|
|
3
|
-
"version": "3.0.0
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"license": "MIT",
|
|
4
5
|
"source": "src/index.tsx",
|
|
5
6
|
"files": [
|
|
6
7
|
"src",
|
|
@@ -34,37 +35,36 @@
|
|
|
34
35
|
"clean:build": "tamagui-build clean:build"
|
|
35
36
|
},
|
|
36
37
|
"dependencies": {
|
|
37
|
-
"@tamagui/adapt": "3.0.0
|
|
38
|
-
"@tamagui/animate-presence": "3.0.0
|
|
39
|
-
"@tamagui/compose-refs": "3.0.0
|
|
40
|
-
"@tamagui/constants": "3.0.0
|
|
41
|
-
"@tamagui/core": "3.0.0
|
|
42
|
-
"@tamagui/create-context": "3.0.0
|
|
43
|
-
"@tamagui/dismissable": "3.0.0
|
|
44
|
-
"@tamagui/floating": "3.0.0
|
|
45
|
-
"@tamagui/focus-scope": "3.0.0
|
|
46
|
-
"@tamagui/focusable": "3.0.0
|
|
47
|
-
"@tamagui/get-token": "3.0.0
|
|
48
|
-
"@tamagui/helpers": "3.0.0
|
|
49
|
-
"@tamagui/list-item": "3.0.0
|
|
50
|
-
"@tamagui/native": "3.0.0
|
|
51
|
-
"@tamagui/portal": "3.0.0
|
|
52
|
-
"@tamagui/remove-scroll": "3.0.0
|
|
53
|
-
"@tamagui/separator": "3.0.0
|
|
54
|
-
"@tamagui/sheet": "3.0.0
|
|
55
|
-
"@tamagui/stacks": "3.0.0
|
|
56
|
-
"@tamagui/
|
|
57
|
-
"@tamagui/
|
|
58
|
-
"@tamagui/use-
|
|
59
|
-
"@tamagui/use-
|
|
60
|
-
"@tamagui/
|
|
61
|
-
"@tamagui/z-index-stack": "3.0.0-beta.924.1"
|
|
38
|
+
"@tamagui/adapt": "3.0.0",
|
|
39
|
+
"@tamagui/animate-presence": "3.0.0",
|
|
40
|
+
"@tamagui/compose-refs": "3.0.0",
|
|
41
|
+
"@tamagui/constants": "3.0.0",
|
|
42
|
+
"@tamagui/core": "3.0.0",
|
|
43
|
+
"@tamagui/create-context": "3.0.0",
|
|
44
|
+
"@tamagui/dismissable": "3.0.0",
|
|
45
|
+
"@tamagui/floating": "3.0.0",
|
|
46
|
+
"@tamagui/focus-scope": "3.0.0",
|
|
47
|
+
"@tamagui/focusable": "3.0.0",
|
|
48
|
+
"@tamagui/get-token": "3.0.0",
|
|
49
|
+
"@tamagui/helpers": "3.0.0",
|
|
50
|
+
"@tamagui/list-item": "3.0.0",
|
|
51
|
+
"@tamagui/native": "3.0.0",
|
|
52
|
+
"@tamagui/portal": "3.0.0",
|
|
53
|
+
"@tamagui/remove-scroll": "3.0.0",
|
|
54
|
+
"@tamagui/separator": "3.0.0",
|
|
55
|
+
"@tamagui/sheet": "3.0.0",
|
|
56
|
+
"@tamagui/stacks": "3.0.0",
|
|
57
|
+
"@tamagui/text": "3.0.0",
|
|
58
|
+
"@tamagui/use-controllable-state": "3.0.0",
|
|
59
|
+
"@tamagui/use-debounce": "3.0.0",
|
|
60
|
+
"@tamagui/use-event": "3.0.0",
|
|
61
|
+
"@tamagui/z-index-stack": "3.0.0"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@tamagui/build": "3.0.0
|
|
64
|
+
"@tamagui/build": "3.0.0",
|
|
65
65
|
"react": "19.2.3",
|
|
66
66
|
"react-dom": "19.2.3",
|
|
67
|
-
"react-native": "0.
|
|
67
|
+
"react-native": "0.87.1"
|
|
68
68
|
},
|
|
69
69
|
"peerDependencies": {
|
|
70
70
|
"react": ">=19",
|
|
@@ -76,5 +76,6 @@
|
|
|
76
76
|
"type": "git",
|
|
77
77
|
"url": "git+https://github.com/tamagui/tamagui.git",
|
|
78
78
|
"directory": "code/ui/select"
|
|
79
|
-
}
|
|
79
|
+
},
|
|
80
|
+
"releaseSourceCommit": "15fbca480b143f876f6975601e23a17d3f90d2ee"
|
|
80
81
|
}
|
package/src/Select.tsx
CHANGED
|
@@ -86,6 +86,14 @@ export const SelectValue = createStyledHOC(
|
|
|
86
86
|
)
|
|
87
87
|
const isEmptyValue = context.selectedValues.length === 0
|
|
88
88
|
|
|
89
|
+
// the label comes from the registry, which items fill in after mount and
|
|
90
|
+
// outside any context value, so this is the one registry subscriber
|
|
91
|
+
const [, rerender] = React.useReducer((version: number) => version + 1, 0)
|
|
92
|
+
useIsomorphicLayoutEffect(
|
|
93
|
+
() => itemParentContext.registry.subscribe(rerender),
|
|
94
|
+
[itemParentContext.registry]
|
|
95
|
+
)
|
|
96
|
+
|
|
89
97
|
// renderValue is synchronous for ssr and lazy item mounting
|
|
90
98
|
const registeredValue =
|
|
91
99
|
context.mode === 'multiple'
|
|
@@ -184,7 +192,7 @@ export const SelectIndicator = createStyledHOC(
|
|
|
184
192
|
|
|
185
193
|
const rafRef = React.useRef<any>(0)
|
|
186
194
|
|
|
187
|
-
|
|
195
|
+
useIsomorphicLayoutEffect(() => {
|
|
188
196
|
const update = (index: number | null) => {
|
|
189
197
|
if (typeof index !== 'number') return
|
|
190
198
|
cancelAnimationFrame(rafRef.current)
|
|
@@ -393,7 +401,12 @@ export function SelectRoot<
|
|
|
393
401
|
)
|
|
394
402
|
|
|
395
403
|
return (
|
|
396
|
-
<AdaptParent
|
|
404
|
+
<AdaptParent
|
|
405
|
+
scope={adaptScope}
|
|
406
|
+
adaptChildren={props.children}
|
|
407
|
+
open={open}
|
|
408
|
+
onOpenChange={handleAdaptOpenChange}
|
|
409
|
+
>
|
|
397
410
|
<SelectInner
|
|
398
411
|
{...(props as SelectScopedProps<SelectProps<string, boolean>>)}
|
|
399
412
|
scope={props.scope}
|
|
@@ -536,23 +549,28 @@ function SelectInner(
|
|
|
536
549
|
})
|
|
537
550
|
}, [props.id, requestOpenChange])
|
|
538
551
|
|
|
539
|
-
//
|
|
540
|
-
//
|
|
541
|
-
//
|
|
542
|
-
//
|
|
543
|
-
// initialize to null so floating-ui starts from selectedIndex on first open
|
|
552
|
+
// the active index is a ref plus an emitter, never React state: hover and
|
|
553
|
+
// arrow keys must not re-render the list. an item that has to react (focus,
|
|
554
|
+
// the roving tabindex) subscribes and updates only itself.
|
|
555
|
+
// null until first open so floating-ui starts from selectedIndex
|
|
544
556
|
const activeIndexRef = React.useRef<number | null>(null)
|
|
545
|
-
const [activeIndex, setActiveIndexState] = React.useState<number | null>(null)
|
|
546
557
|
|
|
547
|
-
const [emitActiveIndex, activeIndexSubscribe] = useEmitter<number>()
|
|
558
|
+
const [emitActiveIndex, activeIndexSubscribe] = useEmitter<number | null>()
|
|
548
559
|
|
|
549
560
|
const selectedIndexRef = React.useRef<number | null>(null)
|
|
561
|
+
// a focus-driven scroll makes the browser re-dispatch mousemove under a
|
|
562
|
+
// pointer that never moved; items compare against this to ignore it
|
|
563
|
+
const lastPointerRef = React.useRef({ x: -1, y: -1 })
|
|
550
564
|
const listContentRef = React.useRef<string[]>([])
|
|
551
565
|
const listRef = React.useRef<Array<HTMLElement | null>>([])
|
|
552
566
|
const [valueNode, setValueNode] = React.useState<HTMLElement | null>(null)
|
|
553
567
|
const selectedIndex = Math.max(0, controller.selectionAnchorIndex())
|
|
554
568
|
listContentRef.current = registry.getTypeaheadLabels()
|
|
555
|
-
|
|
569
|
+
// the registry re-renders this on every registration and node change, so
|
|
570
|
+
// the list ref (floating-ui's focus target array) mirrors it here
|
|
571
|
+
const itemNodes = registry.getNodes()
|
|
572
|
+
listRef.current.length = itemNodes.length
|
|
573
|
+
for (let i = 0; i < itemNodes.length; i++) listRef.current[i] = itemNodes[i]
|
|
556
574
|
|
|
557
575
|
// Intentionally dependency-less: selectedIndexRef mirrors every render for non-reactive reads.
|
|
558
576
|
useIsomorphicLayoutEffect(() => {
|
|
@@ -565,35 +583,22 @@ function SelectInner(
|
|
|
565
583
|
native === 'web' ||
|
|
566
584
|
(Array.isArray(native) && native.includes('web')))
|
|
567
585
|
|
|
568
|
-
|
|
569
|
-
// use this for mouse hover / keyboard navigation where we don't need parent re-renders
|
|
570
|
-
const setActiveIndexFast = React.useCallback(
|
|
586
|
+
const setActiveIndex = React.useCallback(
|
|
571
587
|
(index: number | null, details?: SelectActiveChangeDetails) => {
|
|
572
|
-
if (activeIndexRef.current
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
}
|
|
588
|
+
if (activeIndexRef.current === index) return
|
|
589
|
+
activeIndexRef.current = index
|
|
590
|
+
controller.setActiveIndex(index)
|
|
591
|
+
emitActiveIndex(index)
|
|
592
|
+
if (typeof index === 'number') {
|
|
593
|
+
const item = registry.getItems()[index]
|
|
594
|
+
if (item && details) {
|
|
595
|
+
onActiveChange?.(item.value, details)
|
|
581
596
|
}
|
|
582
597
|
}
|
|
583
598
|
},
|
|
584
599
|
[controller, emitActiveIndex, onActiveChange, registry]
|
|
585
600
|
)
|
|
586
601
|
|
|
587
|
-
// slow setter: also triggers a re-render for components that need the state value
|
|
588
|
-
// use this sparingly, e.g., when controlled scrolling needs to scroll item into view
|
|
589
|
-
const setActiveIndex = React.useCallback(
|
|
590
|
-
(index: number | null, details?: SelectActiveChangeDetails) => {
|
|
591
|
-
setActiveIndexFast(index, details)
|
|
592
|
-
setActiveIndexState(index)
|
|
593
|
-
},
|
|
594
|
-
[setActiveIndexFast]
|
|
595
|
-
)
|
|
596
|
-
|
|
597
602
|
const activeDetails = React.useCallback(
|
|
598
603
|
(
|
|
599
604
|
reason: SelectActiveChangeDetails['reason'],
|
|
@@ -652,8 +657,7 @@ function SelectInner(
|
|
|
652
657
|
setActiveIndex(nextIndex, activeDetails('list-navigation', nextIndex))
|
|
653
658
|
}
|
|
654
659
|
} else {
|
|
655
|
-
|
|
656
|
-
setActiveIndexState(null)
|
|
660
|
+
setActiveIndex(null)
|
|
657
661
|
}
|
|
658
662
|
}, [open, selectedIndex, registry.getItems().length])
|
|
659
663
|
|
|
@@ -716,7 +720,9 @@ function SelectInner(
|
|
|
716
720
|
selectValue={selectValue}
|
|
717
721
|
changeNativeValue={changeNativeValue}
|
|
718
722
|
shouldRenderWebNative={shouldRenderWebNative}
|
|
719
|
-
|
|
723
|
+
setActiveIndex={setActiveIndex}
|
|
724
|
+
selectedIndex={selectedIndex}
|
|
725
|
+
lastPointerRef={lastPointerRef}
|
|
720
726
|
listRef={listRef}
|
|
721
727
|
moveActive={moveActive}
|
|
722
728
|
search={search}
|
|
@@ -731,17 +737,12 @@ function SelectInner(
|
|
|
731
737
|
fallback={false}
|
|
732
738
|
valueNode={valueNode}
|
|
733
739
|
onValueNodeChange={setValueNode}
|
|
734
|
-
activeIndex={activeIndex}
|
|
735
740
|
activeIndexRef={activeIndexRef}
|
|
736
741
|
selectedIndex={selectedIndex}
|
|
737
742
|
setActiveIndex={setActiveIndex}
|
|
738
743
|
value={value}
|
|
739
744
|
mode={mode}
|
|
740
745
|
selectedValues={selectedValues}
|
|
741
|
-
activeItem={
|
|
742
|
-
activeIndex == null ? undefined : registry.getItems()[activeIndex]?.value
|
|
743
|
-
}
|
|
744
|
-
selectionAnchor={controller.selectionAnchor()?.value}
|
|
745
746
|
open={open}
|
|
746
747
|
native={native}
|
|
747
748
|
renderValue={renderValue}
|
|
@@ -754,7 +755,6 @@ function SelectInner(
|
|
|
754
755
|
activeIndexRef={activeIndexRef}
|
|
755
756
|
listContentRef={listContentRef}
|
|
756
757
|
selectedIndexRef={selectedIndexRef}
|
|
757
|
-
setActiveIndexFast={setActiveIndexFast}
|
|
758
758
|
{...props}
|
|
759
759
|
open={open}
|
|
760
760
|
value={value}
|
package/src/SelectImpl.tsx
CHANGED
|
@@ -17,7 +17,6 @@ import { useIsomorphicLayoutEffect } from '@tamagui/constants'
|
|
|
17
17
|
import { createChangeEventDetails, useEvent, useIsTouchDevice } from '@tamagui/core'
|
|
18
18
|
import { composeEventHandlers } from '@tamagui/helpers'
|
|
19
19
|
import * as React from 'react'
|
|
20
|
-
import { flushSync } from 'react-dom'
|
|
21
20
|
import { SCROLL_ARROW_THRESHOLD } from './constants'
|
|
22
21
|
import {
|
|
23
22
|
SelectItemParentProvider,
|
|
@@ -40,7 +39,6 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
40
39
|
|
|
41
40
|
const { requestOpenChange, registry } = selectItemParentContext
|
|
42
41
|
|
|
43
|
-
const [scrollTop, setScrollTop] = React.useState(0)
|
|
44
42
|
const touch = useIsTouchDevice()
|
|
45
43
|
|
|
46
44
|
const listItemsRef = selectItemParentContext.listRef!
|
|
@@ -60,12 +58,11 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
60
58
|
const [fallback, setFallback] = React.useState(false)
|
|
61
59
|
const [innerOffset, setInnerOffset] = React.useState(0)
|
|
62
60
|
const [blockSelection, setBlockSelection] = React.useState(false)
|
|
63
|
-
const floatingStyle = React.useRef({})
|
|
64
61
|
|
|
65
|
-
// sync activeIndex on open/close
|
|
66
62
|
React.useEffect(() => {
|
|
67
63
|
if (!open) {
|
|
68
|
-
|
|
64
|
+
setCanScrollUp(false)
|
|
65
|
+
setCanScrollDown(false)
|
|
69
66
|
setFallback(false)
|
|
70
67
|
setControlledScrolling(false)
|
|
71
68
|
}
|
|
@@ -106,17 +103,9 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
106
103
|
// https://github.com/floating-ui/floating-ui/blob/master/packages/react/test/visual/components/MacSelect.tsx
|
|
107
104
|
middleware: [
|
|
108
105
|
size({
|
|
109
|
-
apply({
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
},
|
|
113
|
-
}) {
|
|
114
|
-
Object.assign(floatingStyle.current, {
|
|
115
|
-
minWidth: width + 8,
|
|
116
|
-
})
|
|
117
|
-
if (refs.floating.current) {
|
|
118
|
-
Object.assign(refs.floating.current.style, floatingStyle.current)
|
|
119
|
-
}
|
|
106
|
+
apply({ rects, elements }) {
|
|
107
|
+
// the list overhangs the trigger by 4px a side (with the -4 cross offset)
|
|
108
|
+
elements.floating.style.minWidth = `${rects.reference.width + 8}px`
|
|
120
109
|
},
|
|
121
110
|
}),
|
|
122
111
|
inner({
|
|
@@ -129,30 +118,30 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
129
118
|
minItemsVisible: touch ? 10 : 4,
|
|
130
119
|
referenceOverflowThreshold: 20,
|
|
131
120
|
}),
|
|
132
|
-
offset({ crossAxis: -
|
|
121
|
+
offset({ crossAxis: -4 }),
|
|
133
122
|
],
|
|
134
123
|
} as any)
|
|
135
124
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
const
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
125
|
+
// the arrows are booleans that flip at a threshold, never the scroll offset
|
|
126
|
+
// itself, so a scroll event costs no render unless an arrow appears or goes
|
|
127
|
+
const [canScrollUp, setCanScrollUp] = React.useState(false)
|
|
128
|
+
const [canScrollDown, setCanScrollDown] = React.useState(false)
|
|
129
|
+
const updateScrollArrows = React.useCallback(() => {
|
|
130
|
+
const el = refs.floating.current
|
|
131
|
+
if (!el) return
|
|
132
|
+
setCanScrollUp(el.scrollTop > SCROLL_ARROW_THRESHOLD)
|
|
133
|
+
setCanScrollDown(
|
|
134
|
+
el.scrollTop < el.scrollHeight - el.clientHeight - SCROLL_ARROW_THRESHOLD
|
|
135
|
+
)
|
|
136
|
+
}, [refs])
|
|
146
137
|
|
|
138
|
+
const showUpArrow = open && canScrollUp
|
|
139
|
+
const showDownArrow = open && canScrollDown
|
|
147
140
|
const isScrollable = showDownArrow || showUpArrow
|
|
148
141
|
|
|
142
|
+
// autoUpdate handles resize and scroll while mounted; this covers the open
|
|
149
143
|
useIsomorphicLayoutEffect(() => {
|
|
150
|
-
if (
|
|
151
|
-
window.addEventListener('resize', update)
|
|
152
|
-
if (open) {
|
|
153
|
-
update()
|
|
154
|
-
}
|
|
155
|
-
return () => window.removeEventListener('resize', update)
|
|
144
|
+
if (open) update()
|
|
156
145
|
}, [update, open])
|
|
157
146
|
|
|
158
147
|
const onMatch = useEvent((index: number) => {
|
|
@@ -165,33 +154,41 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
165
154
|
} as SelectActiveChangeDetails)
|
|
166
155
|
})
|
|
167
156
|
|
|
168
|
-
//
|
|
157
|
+
// the interaction context for the floating hooks. every hook memoizes its
|
|
158
|
+
// props on this object, and those props sit in the item context, so a new
|
|
159
|
+
// identity here re-renders every item
|
|
169
160
|
const dataRef = React.useRef<{ openEvent?: Event; placement?: string }>({})
|
|
170
161
|
dataRef.current.placement = computedPlacement
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
162
|
+
const onOpenChange = useEvent((nextOpen: boolean, event?: Event, reason?: string) => {
|
|
163
|
+
requestOpenChange(
|
|
164
|
+
nextOpen,
|
|
165
|
+
createChangeEventDetails(
|
|
166
|
+
reason === 'list-navigation' ? 'keyboard' : 'trigger-press',
|
|
167
|
+
event,
|
|
168
|
+
refs.reference.current
|
|
169
|
+
) as SelectOpenChangeDetails
|
|
170
|
+
)
|
|
171
|
+
})
|
|
172
|
+
const referenceElement = (refs.reference.current as Element | null) || null
|
|
173
|
+
const floatingElement = refs.floating.current || null
|
|
174
|
+
const interactionContext: FloatingInteractionContext = React.useMemo(
|
|
175
|
+
() => ({
|
|
176
|
+
open,
|
|
177
|
+
onOpenChange,
|
|
178
|
+
refs: {
|
|
179
|
+
reference: refs.reference as any,
|
|
180
|
+
floating: refs.floating,
|
|
181
|
+
domReference: refs.reference as any,
|
|
182
|
+
},
|
|
183
|
+
elements: {
|
|
184
|
+
reference: referenceElement,
|
|
185
|
+
floating: floatingElement,
|
|
186
|
+
domReference: referenceElement,
|
|
187
|
+
},
|
|
188
|
+
dataRef,
|
|
189
|
+
}),
|
|
190
|
+
[open, onOpenChange, refs, referenceElement, floatingElement]
|
|
191
|
+
)
|
|
195
192
|
|
|
196
193
|
const interactionsProps = [
|
|
197
194
|
useClick(interactionContext, { event: 'mousedown', keyboardHandlers: false }),
|
|
@@ -205,7 +202,9 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
205
202
|
}),
|
|
206
203
|
useListNavigation(interactionContext, {
|
|
207
204
|
listRef: listItemsRef,
|
|
208
|
-
|
|
205
|
+
// items focus themselves from the active-index emitter, and the hook's
|
|
206
|
+
// own index syncs from item focus, so it never needs the value
|
|
207
|
+
activeIndex: null,
|
|
209
208
|
selectedIndex,
|
|
210
209
|
onNavigate: (index) => {
|
|
211
210
|
if (index !== null) {
|
|
@@ -219,12 +218,15 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
219
218
|
},
|
|
220
219
|
disabledIndices: registry.getDisabledIndices(),
|
|
221
220
|
scrollItemIntoView: false,
|
|
221
|
+
// items own hover: the hook's leave handler would focus the viewport when
|
|
222
|
+
// a scroll moves the list under a still pointer, losing the keyboard position
|
|
223
|
+
focusItemOnHover: false,
|
|
222
224
|
}),
|
|
223
225
|
useTypeahead(interactionContext, {
|
|
224
226
|
listRef: listContentRef,
|
|
225
227
|
onMatch,
|
|
226
228
|
selectedIndex,
|
|
227
|
-
activeIndex:
|
|
229
|
+
activeIndex: null,
|
|
228
230
|
onTypingChange: (e) => {
|
|
229
231
|
state.current.isTyping = e
|
|
230
232
|
},
|
|
@@ -237,9 +239,11 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
237
239
|
}, interactionsProps)
|
|
238
240
|
)
|
|
239
241
|
|
|
242
|
+
// the trigger and viewport getters. items get getItemProps alone, which is
|
|
243
|
+
// stable once the list mounts, so the floating element mounting (a new
|
|
244
|
+
// identity here) never re-renders the list
|
|
240
245
|
const interactionsContext = React.useMemo(() => {
|
|
241
246
|
return {
|
|
242
|
-
...interactions,
|
|
243
247
|
getReferenceProps(props: Record<string, any> = {}) {
|
|
244
248
|
return interactions.getReferenceProps({
|
|
245
249
|
...props,
|
|
@@ -266,17 +270,7 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
266
270
|
getFloatingProps(props) {
|
|
267
271
|
return interactions.getFloatingProps({
|
|
268
272
|
ref: refs.floating,
|
|
269
|
-
className: 'Select',
|
|
270
273
|
...props,
|
|
271
|
-
style: {
|
|
272
|
-
position: strategy,
|
|
273
|
-
top: y ?? '',
|
|
274
|
-
left: x ?? '',
|
|
275
|
-
outline: 0,
|
|
276
|
-
scrollbarWidth: 'none',
|
|
277
|
-
...floatingStyle.current,
|
|
278
|
-
...props?.style,
|
|
279
|
-
},
|
|
280
274
|
onPointerEnter() {
|
|
281
275
|
setControlledScrolling(false)
|
|
282
276
|
state.current.isMouseOutside = false
|
|
@@ -295,15 +289,16 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
295
289
|
onContextMenu(e) {
|
|
296
290
|
e.preventDefault()
|
|
297
291
|
},
|
|
298
|
-
onScroll
|
|
299
|
-
flushSync(() => {
|
|
300
|
-
setScrollTop(event.currentTarget.scrollTop)
|
|
301
|
-
})
|
|
302
|
-
},
|
|
292
|
+
onScroll: updateScrollArrows,
|
|
303
293
|
})
|
|
304
294
|
},
|
|
305
295
|
}
|
|
306
|
-
}, [refs
|
|
296
|
+
}, [refs, interactions, requestOpenChange, updateScrollArrows])
|
|
297
|
+
|
|
298
|
+
const floatingPosition = React.useMemo(
|
|
299
|
+
() => ({ position: strategy, top: y ?? '', left: x ?? '' }),
|
|
300
|
+
[strategy, x, y]
|
|
301
|
+
)
|
|
307
302
|
|
|
308
303
|
// effects
|
|
309
304
|
|
|
@@ -341,13 +336,18 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
341
336
|
if (controlledScrolling && index != null) {
|
|
342
337
|
listItemsRef.current[index]?.scrollIntoView({ block: 'nearest' })
|
|
343
338
|
}
|
|
344
|
-
|
|
339
|
+
updateScrollArrows()
|
|
345
340
|
}
|
|
346
341
|
|
|
347
342
|
scrollActiveIntoView(activeIndexRef.current)
|
|
348
343
|
|
|
349
344
|
return selectItemParentContext.activeIndexSubscribe(scrollActiveIntoView)
|
|
350
|
-
}, [
|
|
345
|
+
}, [
|
|
346
|
+
open,
|
|
347
|
+
controlledScrolling,
|
|
348
|
+
selectItemParentContext.activeIndexSubscribe,
|
|
349
|
+
updateScrollArrows,
|
|
350
|
+
])
|
|
351
351
|
|
|
352
352
|
React.useEffect(() => {
|
|
353
353
|
if (open && fallback) {
|
|
@@ -376,10 +376,12 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
376
376
|
<SelectProvider
|
|
377
377
|
scope={scope}
|
|
378
378
|
{...(selectContext as Required<typeof selectContext>)}
|
|
379
|
-
|
|
379
|
+
updateScrollArrows={updateScrollArrows}
|
|
380
380
|
setInnerOffset={setInnerOffset}
|
|
381
381
|
fallback={fallback}
|
|
382
382
|
floatingContext={floatingContext as any}
|
|
383
|
+
interactions={interactionsContext}
|
|
384
|
+
floatingPosition={floatingPosition}
|
|
383
385
|
canScrollDown={!!showDownArrow}
|
|
384
386
|
canScrollUp={!!showUpArrow}
|
|
385
387
|
controlledScrolling={controlledScrolling}
|
|
@@ -394,7 +396,7 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
394
396
|
allowMouseUpRef={allowMouseUpRef}
|
|
395
397
|
allowSelectRef={allowSelectRef}
|
|
396
398
|
dataRef={dataRef as any}
|
|
397
|
-
|
|
399
|
+
getItemProps={interactions.getItemProps}
|
|
398
400
|
listRef={listItemsRef}
|
|
399
401
|
selectTimeoutRef={selectTimeoutRef}
|
|
400
402
|
>
|