@tamagui/web 3.0.5 → 3.0.6
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/_withNativeStyle.cjs +37 -20
- package/dist/cjs/_withNativeStyle.native.cjs +37 -20
- package/dist/cjs/_withNativeStyle.native.js +37 -20
- package/dist/cjs/_withNativeStyle.native.js.map +1 -1
- package/dist/cjs/helpers/getSplitStyles.cjs +2 -1
- package/dist/cjs/helpers/getSplitStyles.native.cjs +2 -1
- package/dist/cjs/helpers/getSplitStyles.native.js +2 -1
- package/dist/cjs/helpers/getSplitStyles.native.js.map +1 -1
- package/dist/cjs/helpers/nativeStyleEngine.cjs +67 -121
- package/dist/cjs/helpers/nativeStyleEngine.native.cjs +66 -161
- package/dist/cjs/helpers/nativeStyleEngine.native.js +66 -161
- package/dist/cjs/helpers/nativeStyleEngine.native.js.map +1 -1
- package/dist/esm/_withNativeStyle.mjs +38 -21
- package/dist/esm/_withNativeStyle.mjs.map +1 -1
- package/dist/esm/_withNativeStyle.native.js +38 -21
- package/dist/esm/_withNativeStyle.native.js.map +1 -1
- package/dist/esm/helpers/getSplitStyles.mjs +2 -1
- package/dist/esm/helpers/getSplitStyles.mjs.map +1 -1
- package/dist/esm/helpers/getSplitStyles.native.js +2 -1
- package/dist/esm/helpers/getSplitStyles.native.js.map +1 -1
- package/dist/esm/helpers/nativeStyleEngine.mjs +66 -121
- package/dist/esm/helpers/nativeStyleEngine.mjs.map +1 -1
- package/dist/esm/helpers/nativeStyleEngine.native.js +65 -161
- package/dist/esm/helpers/nativeStyleEngine.native.js.map +1 -1
- package/package.json +17 -17
- package/src/_withNativeStyle.tsx +67 -31
- package/src/helpers/getSplitStyles.tsx +3 -0
- package/src/helpers/nativeStyleEngine.ts +95 -162
- package/types/_withNativeStyle.d.ts +4 -3
- package/types/_withNativeStyle.d.ts.map +1 -1
- package/types/helpers/getSplitStyles.d.ts.map +1 -1
- package/types/helpers/nativeStyleEngine.d.ts +19 -6
- package/types/helpers/nativeStyleEngine.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeStyleEngine.native.js","names":[],"sources":["esm/helpers/nativeStyleEngine.native.js"],"sourcesContent":["import { getVariableValue } from \"../createVariable\";\nvar nativeTextInputColorProps = {\n placeholderTextColor: \"placeholderTextColor\",\n selectionColor: \"selectionColor\",\n cursorColor: \"cursorColor\",\n selectionHandleColor: \"selectionHandleColor\"\n};\nvar nativeOutlineProps = [\n \"outlineStyle\",\n \"outlineWidth\",\n \"outlineColor\",\n \"outlineOffset\"\n];\nvar nativeIntrinsicSizeProps = [\n \"width\",\n \"height\",\n \"minWidth\",\n \"minHeight\",\n \"maxWidth\",\n \"maxHeight\"\n];\nfunction normalizeNativeStyle(style) {\n var reset = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n var next;\n if (style.outlineStyle === \"none\") {\n next = {\n ...style\n };\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = nativeOutlineProps[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var key = _step.value;\n if (reset) {\n next[key] = null;\n } else {\n delete next[key];\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 }\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = nativeIntrinsicSizeProps[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var key1 = _step1.value;\n var value = style[key1];\n if (value === \"max-content\" || value === \"min-content\" || value === \"fit-content\") {\n next || (next = {\n ...style\n });\n if (reset) {\n next[key1] = null;\n } else {\n delete next[key1];\n }\n }\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n return next !== null && next !== void 0 ? next : style;\n}\nvar engine = null;\nvar scopeStates = /* @__PURE__ */ new Map();\nvar mappingKeys = /* @__PURE__ */ new WeakMap();\nvar compiledMappings = /* @__PURE__ */ new Map();\nvar scopeMappings = /* @__PURE__ */ new Map();\nvar nextTableId = 1;\nfunction getCompiledMapping(mapping) {\n var key = mappingKeys.get(mapping);\n if (!key) {\n key = JSON.stringify(Object.keys(mapping).sort().map(function(styleKey) {\n return [\n styleKey,\n mapping[styleKey]\n ];\n }));\n mappingKeys.set(mapping, key);\n }\n var compiled = compiledMappings.get(key);\n if (!compiled) {\n compiled = {\n mapping,\n states: /* @__PURE__ */ new Map(),\n tableId: nextTableId++,\n sent: /* @__PURE__ */ new Map()\n };\n if (compiledMappings.size >= 1e4) {\n compiledMappings.clear();\n }\n compiledMappings.set(key, compiled);\n }\n return compiled;\n}\nfunction resolveCompiledMapping(compiled, stateName, theme) {\n var cached = compiled.states.get(stateName);\n if ((cached === null || cached === void 0 ? void 0 : cached.theme) === theme) return cached;\n var renderProps = {};\n for (var styleKey in compiled.mapping) {\n var value = theme[compiled.mapping[styleKey]];\n renderProps[styleKey] = value === void 0 ? null : getVariableValue(value);\n }\n renderProps = normalizeNativeStyle(renderProps, true);\n var _engine_processStyleColors;\n var nativeProps = (_engine_processStyleColors = engine === null || engine === void 0 ? void 0 : engine.processStyleColors(renderProps)) !== null && _engine_processStyleColors !== void 0 ? _engine_processStyleColors : renderProps;\n if (compiled.states.size >= 1e4) {\n compiled.states.clear();\n }\n var resolved = {\n theme,\n renderProps,\n nativeProps\n };\n compiled.states.set(stateName, resolved);\n return resolved;\n}\nfunction syncTableState(compiled, stateName, theme) {\n var resolved = resolveCompiledMapping(compiled, stateName, theme);\n if (compiled.sent.get(stateName) === resolved) return;\n compiled.sent.set(stateName, resolved);\n engine.setTableState(compiled.tableId, stateName, resolved.nativeProps);\n}\nfunction setNativeStyleEngine(next) {\n if (engine !== next) {\n settleReleases();\n compiledMappings.clear();\n scopeMappings.clear();\n pendingLinks = [];\n unlinkedPending = 0;\n }\n engine = next;\n if (next) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = scopeStates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var [scopeId, state] = _step.value;\n next.setStateName(state.name, scopeId);\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 }\n}\nfunction getNativeStyleEngine() {\n return engine;\n}\nfunction updateNativeStyleScope(scopeId, stateName, theme) {\n var previous = scopeStates.get(scopeId);\n if ((previous === null || previous === void 0 ? void 0 : previous.name) === stateName && previous.theme === theme) return;\n flushNativeStyleLinks();\n scopeStates.set(scopeId, {\n name: stateName,\n theme\n });\n if (engine) {\n var linked = scopeMappings.get(scopeId);\n if (linked) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = linked.keys()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var compiled = _step.value;\n syncTableState(compiled, stateName, theme);\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 }\n }\n engine === null || engine === void 0 ? void 0 : engine.setStateName(stateName, scopeId);\n}\nfunction removeNativeStyleScope(scopeId) {\n if (!scopeStates.delete(scopeId)) return;\n engine === null || engine === void 0 ? void 0 : engine.removeScope(scopeId);\n}\nfunction resolveNativeStyleMapping(mapping, stateName, theme) {\n return resolveCompiledMapping(getCompiledMapping(mapping), stateName, theme).renderProps;\n}\nvar pendingLinks = [];\nvar unlinkedPending = 0;\nfunction trackScopeMapping(link, delta) {\n var linked = scopeMappings.get(link.scopeId);\n if (!linked) scopeMappings.set(link.scopeId, linked = /* @__PURE__ */ new Map());\n var _linked_get;\n var count = ((_linked_get = linked.get(link.compiled)) !== null && _linked_get !== void 0 ? _linked_get : 0) + delta;\n if (count) {\n linked.set(link.compiled, count);\n } else {\n linked.delete(link.compiled);\n if (!linked.size) scopeMappings.delete(link.scopeId);\n }\n}\nfunction flushNativeStyleLinks() {\n settleReleases();\n if (!pendingLinks.length) return;\n var links = pendingLinks;\n pendingLinks = [];\n unlinkedPending = 0;\n if (!engine) return;\n var live = links.filter(function(link2) {\n return link2.id === 0;\n });\n if (!live.length) return;\n var refs = [];\n var tableIds = [];\n var scopeIndexes = [];\n var scopes = [];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = live[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var link = _step.value;\n var scopeIndex = scopes.indexOf(link.scopeId);\n if (scopeIndex === -1) scopeIndex = scopes.push(link.scopeId) - 1;\n refs.push(link.ref);\n tableIds.push(link.compiled.tableId);\n scopeIndexes.push(scopeIndex);\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 var firstId = engine.linkTables(refs, tableIds, scopeIndexes, scopes);\n for (var i = 0; i < live.length; i++) {\n var link1 = live[i];\n link1.id = firstId + i;\n link1.owner = engine;\n link1.ref = null;\n trackScopeMapping(link1, 1);\n }\n}\nvar releases = /* @__PURE__ */ new Map();\nvar settleQueued = false;\nfunction settleReleases() {\n settleQueued = false;\n if (!releases.size) return;\n var settling = [\n ...releases.values()\n ];\n releases.clear();\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = settling[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var release = _step.value;\n release.settle();\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}\nfunction releasable(ref, compiled, scopeId, id, settle) {\n var handle = {\n id,\n unlink: function() {\n var prior = releases.get(ref);\n if (prior && prior.handle !== handle) prior.settle();\n releases.set(ref, {\n compiled,\n scopeId,\n handle,\n settle\n });\n if (!settleQueued) {\n settleQueued = true;\n queueMicrotask(settleReleases);\n }\n }\n };\n return handle;\n}\nfunction linkNativeStyleMapping(ref, mapping, scopeId, stateName, theme) {\n if (!engine) return null;\n var compiled = getCompiledMapping(mapping);\n var scopeState = scopeStates.get(scopeId);\n var stale = scopeState && (scopeState.name !== stateName || scopeState.theme !== theme);\n var kept = releases.get(ref);\n if (kept) {\n releases.delete(ref);\n if (!stale && kept.compiled === compiled && kept.scopeId === scopeId) return kept.handle;\n kept.settle();\n }\n if (stale) {\n syncTableState(compiled, scopeState.name, scopeState.theme);\n var handle = engine.link(ref, compiled.tableId, scopeId, true);\n if (!handle) return null;\n var link = {\n ref: null,\n compiled,\n scopeId,\n id: handle.id,\n owner: engine\n };\n trackScopeMapping(link, 1);\n return releasable(ref, compiled, scopeId, handle.id, function() {\n if (link.id === -1) return;\n link.id = -1;\n if (link.owner === engine) trackScopeMapping(link, -1);\n handle.unlink();\n });\n }\n syncTableState(compiled, stateName, theme);\n var link1 = {\n ref,\n compiled,\n scopeId,\n id: 0,\n owner: null\n };\n pendingLinks.push(link1);\n return releasable(ref, compiled, scopeId, 0, function() {\n var id = link1.id;\n if (id === -1) return;\n link1.id = -1;\n link1.ref = null;\n if (id > 0) {\n if (link1.owner === engine) trackScopeMapping(link1, -1);\n link1.owner.unlink(id);\n } else if (++unlinkedPending > 512 && unlinkedPending * 2 > pendingLinks.length) {\n pendingLinks = pendingLinks.filter(function(pending2) {\n return pending2.id === 0;\n });\n unlinkedPending = 0;\n }\n });\n}\nvar getNativeStyleEngineCacheStats = function() {\n var active = new Set([\n ...scopeMappings.values()\n ].flatMap(function(linked) {\n return [\n ...linked.keys()\n ];\n }));\n return {\n mappings: compiledMappings.size,\n activeMappings: active.size,\n states: [\n .../* @__PURE__ */ new Set([\n ...compiledMappings.values(),\n ...active\n ])\n ].reduce(function(total, compiled) {\n return total + compiled.states.size;\n }, 0)\n };\n};\nvar pending = null;\nvar flushListener = null;\nfunction setNativeStyleEngineFlushListener(cb) {\n flushListener = cb;\n}\nfunction updateNativeStyleLink(ref, host) {\n if (ref.nativeLink) {\n ref.nativeLink.unlink();\n ref.nativeLink = null;\n }\n ref.nativePushedKeys = void 0;\n if (host && engine && ref.nativeStyleUpdate) {\n ref.nativeLink = engine.link(host, {});\n }\n}\nfunction queueNativeViewState(entry) {\n if (!engine) return;\n if (!pending) {\n pending = [];\n queueMicrotask(function() {\n var entries = pending;\n pending = null;\n engine === null || engine === void 0 ? void 0 : engine.applyViewStates(entries);\n flushListener === null || flushListener === void 0 ? void 0 : flushListener(entries);\n });\n }\n pending.push(entry);\n}\nexport {\n flushNativeStyleLinks,\n getNativeStyleEngine,\n getNativeStyleEngineCacheStats,\n linkNativeStyleMapping,\n nativeTextInputColorProps,\n normalizeNativeStyle,\n queueNativeViewState,\n removeNativeStyleScope,\n resolveNativeStyleMapping,\n setNativeStyleEngine,\n setNativeStyleEngineFlushListener,\n updateNativeStyleLink,\n updateNativeStyleScope\n};\n//# sourceMappingURL=nativeStyleEngine.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nativeStyleEngine.native.js","names":[],"sources":["esm/helpers/nativeStyleEngine.native.js"],"sourcesContent":["import { getVariableValue } from \"../createVariable\";\nvar nativeTextInputColorProps = {\n placeholderTextColor: \"placeholderTextColor\",\n selectionColor: \"selectionColor\",\n cursorColor: \"cursorColor\",\n selectionHandleColor: \"selectionHandleColor\"\n};\nvar nativeOutlineProps = [\n \"outlineStyle\",\n \"outlineWidth\",\n \"outlineColor\",\n \"outlineOffset\"\n];\nvar nativeIntrinsicSizeProps = [\n \"width\",\n \"height\",\n \"minWidth\",\n \"minHeight\",\n \"maxWidth\",\n \"maxHeight\"\n];\nfunction normalizeNativeStyle(style) {\n var reset = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n var next;\n if (style.outlineStyle === \"none\") {\n next = {\n ...style\n };\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = nativeOutlineProps[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var key = _step.value;\n if (reset) {\n next[key] = null;\n } else {\n delete next[key];\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 }\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = nativeIntrinsicSizeProps[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var key1 = _step1.value;\n var value = style[key1];\n if (value === \"max-content\" || value === \"min-content\" || value === \"fit-content\") {\n next || (next = {\n ...style\n });\n if (reset) {\n next[key1] = null;\n } else {\n delete next[key1];\n }\n }\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n return next !== null && next !== void 0 ? next : style;\n}\nvar engine = null;\nvar scopeStates = /* @__PURE__ */ new Map();\nvar mappingKeys = /* @__PURE__ */ new WeakMap();\nvar compiledMappings = /* @__PURE__ */ new Map();\nvar scopeMappings = /* @__PURE__ */ new Map();\nvar nextTableId = 1;\nfunction getCompiledMapping(mapping) {\n var key = mappingKeys.get(mapping);\n if (!key) {\n key = JSON.stringify(Object.keys(mapping).sort().map(function(styleKey) {\n return [\n styleKey,\n mapping[styleKey]\n ];\n }));\n mappingKeys.set(mapping, key);\n }\n var compiled = compiledMappings.get(key);\n if (!compiled) {\n compiled = {\n mapping,\n states: /* @__PURE__ */ new Map(),\n tableId: nextTableId++,\n sent: /* @__PURE__ */ new Map()\n };\n if (compiledMappings.size >= 1e4) {\n compiledMappings.clear();\n }\n compiledMappings.set(key, compiled);\n }\n return compiled;\n}\nfunction resolveCompiledMapping(compiled, stateName, theme) {\n var cached = compiled.states.get(stateName);\n if ((cached === null || cached === void 0 ? void 0 : cached.theme) === theme) return cached;\n var renderProps = {};\n for (var styleKey in compiled.mapping) {\n var value = theme[compiled.mapping[styleKey]];\n renderProps[styleKey] = value === void 0 ? null : getVariableValue(value);\n }\n renderProps = normalizeNativeStyle(renderProps, true);\n var _engine_processStyleColors;\n var nativeProps = (_engine_processStyleColors = engine === null || engine === void 0 ? void 0 : engine.processStyleColors(renderProps)) !== null && _engine_processStyleColors !== void 0 ? _engine_processStyleColors : renderProps;\n if (compiled.states.size >= 1e4) {\n compiled.states.clear();\n }\n var resolved = {\n theme,\n renderProps,\n nativeProps\n };\n compiled.states.set(stateName, resolved);\n return resolved;\n}\nfunction syncTableState(compiled, stateName, theme) {\n var resolved = resolveCompiledMapping(compiled, stateName, theme);\n if (compiled.sent.get(stateName) === resolved) return;\n compiled.sent.set(stateName, resolved);\n engine.setTableState(compiled.tableId, stateName, resolved.nativeProps);\n}\nfunction setNativeStyleEngine(next) {\n if (engine !== next) {\n compiledMappings.clear();\n scopeMappings.clear();\n pendingHosts = [];\n pendingStates = [];\n }\n engine = next;\n if (next) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = scopeStates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var [scopeId, state] = _step.value;\n next.setStateName(state.name, scopeId);\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 }\n}\nfunction getNativeStyleEngine() {\n return engine;\n}\nfunction updateNativeStyleScope(scopeId, stateName, theme) {\n var previous = scopeStates.get(scopeId);\n if ((previous === null || previous === void 0 ? void 0 : previous.name) === stateName && previous.theme === theme) return;\n flushNativeStyleLinks();\n scopeStates.set(scopeId, {\n name: stateName,\n theme\n });\n if (engine) {\n var linked = scopeMappings.get(scopeId);\n if (linked) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = linked[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var compiled = _step.value;\n syncTableState(compiled, stateName, theme);\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 }\n }\n engine === null || engine === void 0 ? void 0 : engine.setStateName(stateName, scopeId);\n}\nfunction removeNativeStyleScope(scopeId) {\n if (!scopeStates.delete(scopeId)) return;\n queueMicrotask(function() {\n if (!scopeStates.has(scopeId)) scopeMappings.delete(scopeId);\n });\n engine === null || engine === void 0 ? void 0 : engine.removeScope(scopeId);\n}\nfunction resolveNativeStyleMapping(mapping, stateName, theme) {\n return resolveCompiledMapping(getCompiledMapping(mapping), stateName, theme).renderProps;\n}\nfunction createNativeStyleLinkState(mapping, scopeId, stateName, theme) {\n return {\n mapping,\n scopeId,\n stateName,\n theme\n };\n}\nvar pendingHosts = [];\nvar pendingStates = [];\nvar maxPendingHosts = 4096;\nvar idleFlushQueued = false;\nfunction idleFlush() {\n idleFlushQueued = false;\n flushNativeStyleLinks();\n}\nfunction addScopeMapping(scopeId, compiled) {\n var linked = scopeMappings.get(scopeId);\n if (!linked) scopeMappings.set(scopeId, linked = /* @__PURE__ */ new Set());\n linked.add(compiled);\n}\nfunction flushNativeStyleLinks() {\n if (!pendingHosts.length) return;\n var hosts = pendingHosts;\n var states = pendingStates;\n pendingHosts = [];\n pendingStates = [];\n if (!engine) return;\n var tableIds = new Array(hosts.length);\n var scopeIndexes = new Array(hosts.length);\n var scopes = [];\n var last;\n var tableId = 0;\n var scopeIndex = 0;\n for (var i = 0; i < hosts.length; i++) {\n var state = states[i];\n if (state !== last) {\n last = state;\n var compiled = getCompiledMapping(state.mapping);\n syncTableState(compiled, state.stateName, state.theme);\n addScopeMapping(state.scopeId, compiled);\n tableId = compiled.tableId;\n scopeIndex = scopes.indexOf(state.scopeId);\n if (scopeIndex === -1) scopeIndex = scopes.push(state.scopeId) - 1;\n }\n tableIds[i] = tableId;\n scopeIndexes[i] = scopeIndex;\n }\n engine.linkTables(hosts, tableIds, scopeIndexes, scopes);\n}\nfunction linkNativeStyleHost(host, state) {\n if (!engine) return;\n var live = scopeStates.get(state.scopeId);\n if (live && (live.name !== state.stateName || live.theme !== state.theme)) {\n var compiled = getCompiledMapping(state.mapping);\n syncTableState(compiled, live.name, live.theme);\n addScopeMapping(state.scopeId, compiled);\n engine.link(host, compiled.tableId, state.scopeId, true);\n return;\n }\n pendingHosts.push(host);\n pendingStates.push(state);\n if (pendingHosts.length >= maxPendingHosts && !idleFlushQueued) {\n idleFlushQueued = true;\n requestIdleCallback(idleFlush);\n }\n}\nvar getNativeStyleEngineCacheStats = function() {\n var active = new Set([\n ...scopeMappings.values()\n ].flatMap(function(linked) {\n return [\n ...linked\n ];\n }));\n return {\n mappings: compiledMappings.size,\n activeMappings: active.size,\n states: [\n .../* @__PURE__ */ new Set([\n ...compiledMappings.values(),\n ...active\n ])\n ].reduce(function(total, compiled) {\n return total + compiled.states.size;\n }, 0)\n };\n};\nvar pending = null;\nvar flushListener = null;\nfunction setNativeStyleEngineFlushListener(cb) {\n flushListener = cb;\n}\nfunction updateNativeStyleLink(ref, host) {\n if (ref.nativeLink) {\n ref.nativeLink.unlink();\n ref.nativeLink = null;\n }\n ref.nativePushedKeys = void 0;\n if (host && engine && ref.nativeStyleUpdate) {\n ref.nativeLink = engine.link(host, {});\n }\n}\nfunction queueNativeViewState(entry) {\n if (!engine) return;\n if (!pending) {\n pending = [];\n queueMicrotask(function() {\n var entries = pending;\n pending = null;\n engine === null || engine === void 0 ? void 0 : engine.applyViewStates(entries);\n flushListener === null || flushListener === void 0 ? void 0 : flushListener(entries);\n });\n }\n pending.push(entry);\n}\nexport {\n createNativeStyleLinkState,\n flushNativeStyleLinks,\n getNativeStyleEngine,\n getNativeStyleEngineCacheStats,\n linkNativeStyleHost,\n nativeTextInputColorProps,\n normalizeNativeStyle,\n queueNativeViewState,\n removeNativeStyleScope,\n resolveNativeStyleMapping,\n setNativeStyleEngine,\n setNativeStyleEngineFlushListener,\n updateNativeStyleLink,\n updateNativeStyleScope\n};\n//# sourceMappingURL=nativeStyleEngine.js.map\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/web",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.6",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Nate Wienert"
|
|
@@ -100,23 +100,23 @@
|
|
|
100
100
|
"test:web": "vitest --typecheck --run"
|
|
101
101
|
},
|
|
102
102
|
"dependencies": {
|
|
103
|
-
"@tamagui/animation-helpers": "3.0.
|
|
104
|
-
"@tamagui/compose-refs": "3.0.
|
|
105
|
-
"@tamagui/constants": "3.0.
|
|
106
|
-
"@tamagui/dom": "3.0.
|
|
107
|
-
"@tamagui/helpers": "3.0.
|
|
108
|
-
"@tamagui/is-equal-shallow": "3.0.
|
|
109
|
-
"@tamagui/native": "3.0.
|
|
110
|
-
"@tamagui/normalize-css-color": "3.0.
|
|
111
|
-
"@tamagui/react-native-types": "3.0.
|
|
112
|
-
"@tamagui/style-grammar": "3.0.
|
|
113
|
-
"@tamagui/types": "3.0.
|
|
114
|
-
"@tamagui/use-did-finish-ssr": "3.0.
|
|
115
|
-
"@tamagui/use-event": "3.0.
|
|
116
|
-
"@tamagui/use-force-update": "3.0.
|
|
103
|
+
"@tamagui/animation-helpers": "3.0.6",
|
|
104
|
+
"@tamagui/compose-refs": "3.0.6",
|
|
105
|
+
"@tamagui/constants": "3.0.6",
|
|
106
|
+
"@tamagui/dom": "3.0.6",
|
|
107
|
+
"@tamagui/helpers": "3.0.6",
|
|
108
|
+
"@tamagui/is-equal-shallow": "3.0.6",
|
|
109
|
+
"@tamagui/native": "3.0.6",
|
|
110
|
+
"@tamagui/normalize-css-color": "3.0.6",
|
|
111
|
+
"@tamagui/react-native-types": "3.0.6",
|
|
112
|
+
"@tamagui/style-grammar": "3.0.6",
|
|
113
|
+
"@tamagui/types": "3.0.6",
|
|
114
|
+
"@tamagui/use-did-finish-ssr": "3.0.6",
|
|
115
|
+
"@tamagui/use-event": "3.0.6",
|
|
116
|
+
"@tamagui/use-force-update": "3.0.6"
|
|
117
117
|
},
|
|
118
118
|
"devDependencies": {
|
|
119
|
-
"@tamagui/build": "3.0.
|
|
119
|
+
"@tamagui/build": "3.0.6",
|
|
120
120
|
"@testing-library/react": "^16.1.0",
|
|
121
121
|
"csstype": "^3.0.10",
|
|
122
122
|
"react": "19.2.3",
|
|
@@ -133,5 +133,5 @@
|
|
|
133
133
|
"./dist/cjs": "./dist/esm/index.native.js",
|
|
134
134
|
"./theme-update": "./dist/esm/theme-update.native.js"
|
|
135
135
|
},
|
|
136
|
-
"releaseSourceCommit": "
|
|
136
|
+
"releaseSourceCommit": "ee01c1a5d113f9d0f4e9e26c35154165ce25add6"
|
|
137
137
|
}
|
package/src/_withNativeStyle.tsx
CHANGED
|
@@ -3,9 +3,11 @@ import { isAndroid, isIos } from '@tamagui/constants'
|
|
|
3
3
|
import React, { use } from 'react'
|
|
4
4
|
import { _withStableStyle } from './_withStableStyle'
|
|
5
5
|
import {
|
|
6
|
+
createNativeStyleLinkState,
|
|
6
7
|
getNativeStyleEngine,
|
|
7
|
-
|
|
8
|
+
linkNativeStyleHost,
|
|
8
9
|
resolveNativeStyleMapping,
|
|
10
|
+
type NativeStyleLinkState,
|
|
9
11
|
type NativeStyleThemeMapping,
|
|
10
12
|
} from './helpers/nativeStyleEngine'
|
|
11
13
|
import { getThemeState, ThemeStateContext } from './hooks/useThemeState'
|
|
@@ -22,9 +24,10 @@ const hostTextProps = {
|
|
|
22
24
|
/**
|
|
23
25
|
* internal: emitted by the native compiler when experimental.nativeFastPath is on.
|
|
24
26
|
*
|
|
25
|
-
* One component over the host: the theme scope is the only context read
|
|
26
|
-
* host ref
|
|
27
|
-
*
|
|
27
|
+
* One component over the host: the theme scope is the only context read and
|
|
28
|
+
* the host ref queues the host for the engine's next batched link. Links never
|
|
29
|
+
* detach (the engine prunes unmounted views), so a themed view costs one
|
|
30
|
+
* component and one array push to mount.
|
|
28
31
|
*
|
|
29
32
|
* `host: 'view'`: `Component` is RN's host view (`unstable_NativeView`).
|
|
30
33
|
* <View> resets TextAncestorContext for its children when it sits inside a
|
|
@@ -72,20 +75,36 @@ export const _withNativeStyle = (
|
|
|
72
75
|
}),
|
|
73
76
|
}
|
|
74
77
|
: baseStyle
|
|
75
|
-
// one
|
|
76
|
-
//
|
|
77
|
-
// values, so a re-render after a switch hands React
|
|
78
|
-
// skips the style, and the host is not re-committed
|
|
79
|
-
// already applied. a new host reads the array's
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
// one entry per scope. its style arrays (one per host mode) keep their
|
|
79
|
+
// identity while their theme slot follows the scope's state: the engine owns
|
|
80
|
+
// a linked view's theme values, so a re-render after a switch hands React
|
|
81
|
+
// the same array, its diff skips the style, and the host is not re-committed
|
|
82
|
+
// with values the engine already applied. a new host reads the array's
|
|
83
|
+
// current state at creation. the entry's ref is stable too, so a parent
|
|
84
|
+
// re-render never detaches and re-attaches its hosts, and attaching records
|
|
85
|
+
// the host against the state record every host of this scope shares
|
|
86
|
+
const entries = new Map<string, ScopeEntry>()
|
|
87
|
+
const createEntry = (): ScopeEntry => {
|
|
88
|
+
const entry: ScopeEntry = {
|
|
89
|
+
style: [baseStyle, null],
|
|
90
|
+
hostTextStyle: [hostTextBase, null],
|
|
91
|
+
stateName: '',
|
|
92
|
+
theme: null,
|
|
93
|
+
state: null!,
|
|
94
|
+
ref: (node: unknown) => {
|
|
95
|
+
if (node) linkHost(node, entry.state)
|
|
96
|
+
},
|
|
97
|
+
}
|
|
98
|
+
return entry
|
|
99
|
+
}
|
|
82
100
|
// bundlers inline imports as a module lookup at every use; bind them once
|
|
83
101
|
// here, outside the per-mount path
|
|
84
102
|
const ScopeContext = ThemeStateContext
|
|
85
103
|
const engineOf = getNativeStyleEngine
|
|
86
104
|
const scopeState = getThemeState
|
|
87
105
|
const resolve = resolveNativeStyleMapping
|
|
88
|
-
const
|
|
106
|
+
const linkState = createNativeStyleLinkState
|
|
107
|
+
const linkHost = linkNativeStyleHost
|
|
89
108
|
const assignRef = setRef
|
|
90
109
|
|
|
91
110
|
// `use` reads context from whichever render calls it, so the compiler can
|
|
@@ -117,32 +136,40 @@ export const _withNativeStyle = (
|
|
|
117
136
|
const { name, theme } = themeState
|
|
118
137
|
const asHostText = HostText && !inText
|
|
119
138
|
const Rendered = asHostText ? HostText : Component
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
cache.set(scopeId, style)
|
|
139
|
+
let entry = entries.get(scopeId)
|
|
140
|
+
if (!entry) {
|
|
141
|
+
entry = createEntry()
|
|
142
|
+
entries.set(scopeId, entry)
|
|
125
143
|
}
|
|
126
|
-
|
|
144
|
+
if (entry.stateName !== name || entry.theme !== theme) {
|
|
145
|
+
const themed = resolve(themeStyleKeys, name, theme)
|
|
146
|
+
entry.style[1] = themed
|
|
147
|
+
entry.hostTextStyle[1] = themed
|
|
148
|
+
entry.stateName = name
|
|
149
|
+
entry.theme = theme
|
|
150
|
+
entry.state = linkState(themeStyleKeys, scopeId, name, theme)
|
|
151
|
+
}
|
|
152
|
+
const style = asHostText ? entry.hostTextStyle : entry.style
|
|
127
153
|
const wrapped = resetsText || (asHostText && mayRenderText(rest.children))
|
|
154
|
+
const state = entry.state
|
|
155
|
+
// a user ref composes per render; without one the entry's stable ref links
|
|
156
|
+
const hostRef =
|
|
157
|
+
ref == null
|
|
158
|
+
? entry.ref
|
|
159
|
+
: (node: unknown) => {
|
|
160
|
+
if (!node) return assignRef(ref, null)
|
|
161
|
+
linkHost(node, state)
|
|
162
|
+
// a callback ref may return its own cleanup (React 19), which
|
|
163
|
+
// then replaces its null call
|
|
164
|
+
if (typeof ref === 'function') return ref(node)
|
|
165
|
+
assignRef(ref, node)
|
|
166
|
+
}
|
|
128
167
|
const element = (
|
|
129
168
|
<Rendered
|
|
130
169
|
key={wrapped ? undefined : key}
|
|
131
170
|
{...(asHostText && hostTextProps)}
|
|
132
171
|
{...rest}
|
|
133
|
-
ref={
|
|
134
|
-
// a callback ref may return its own cleanup (React 19), which then
|
|
135
|
-
// replaces the null call
|
|
136
|
-
let refCleanup: unknown
|
|
137
|
-
if (typeof ref === 'function') refCleanup = ref(node)
|
|
138
|
-
else assignRef(ref, node)
|
|
139
|
-
const link = linkMapping(node, themeStyleKeys, scopeId, name, theme)
|
|
140
|
-
return () => {
|
|
141
|
-
link?.unlink()
|
|
142
|
-
if (typeof refCleanup === 'function') refCleanup()
|
|
143
|
-
else assignRef(ref, null)
|
|
144
|
-
}
|
|
145
|
-
}}
|
|
172
|
+
ref={hostRef}
|
|
146
173
|
style={style}
|
|
147
174
|
/>
|
|
148
175
|
)
|
|
@@ -164,6 +191,15 @@ export const _withNativeStyle = (
|
|
|
164
191
|
return NativeStyleView
|
|
165
192
|
}
|
|
166
193
|
|
|
194
|
+
interface ScopeEntry {
|
|
195
|
+
style: (object | null)[]
|
|
196
|
+
hostTextStyle: (object | null)[]
|
|
197
|
+
stateName: string
|
|
198
|
+
theme: object | null
|
|
199
|
+
state: NativeStyleLinkState
|
|
200
|
+
ref: (node: unknown) => void
|
|
201
|
+
}
|
|
202
|
+
|
|
167
203
|
// <Text>'s own check for children that could render a nested <Text>: arrays
|
|
168
204
|
// longer than three are assumed to
|
|
169
205
|
function mayRenderText(children: unknown): boolean {
|
|
@@ -2781,6 +2781,8 @@ const cssWideColorKeywords = new Set([
|
|
|
2781
2781
|
])
|
|
2782
2782
|
|
|
2783
2783
|
const shadowRecipeProperties = new Set(['boxShadow', 'textShadow', 'filter'])
|
|
2784
|
+
// recipe keywords that are neither tokens nor colors
|
|
2785
|
+
const shadowRecipeKeywords = new Set(['inset', 'none'])
|
|
2784
2786
|
|
|
2785
2787
|
// `embedded` also runs the embedded-token pass when the direct lookup leaves the
|
|
2786
2788
|
// value alone, and memoizes that result. it is a regex replace over most string
|
|
@@ -3032,6 +3034,7 @@ function configuredValue(
|
|
|
3032
3034
|
if (
|
|
3033
3035
|
resolved !== word ||
|
|
3034
3036
|
!shadowRecipeProperties.has(property) ||
|
|
3037
|
+
shadowRecipeKeywords.has(word) ||
|
|
3035
3038
|
!/^[a-z][\w-]*$/i.test(word)
|
|
3036
3039
|
)
|
|
3037
3040
|
return resolved
|
|
@@ -107,17 +107,17 @@ export interface NativeStyleEngine {
|
|
|
107
107
|
): NativeStyleEngineLinkHandle | null
|
|
108
108
|
/**
|
|
109
109
|
* links many mounted hosts to shared tables in one call: entry i links
|
|
110
|
-
* refs[i] to tableIds[i] under scopes[scopeIndexes[i]].
|
|
111
|
-
*
|
|
112
|
-
*
|
|
110
|
+
* refs[i] to tableIds[i] under scopes[scopeIndexes[i]]. a host already
|
|
111
|
+
* linked moves to its new entry, and the engine drops linked views that
|
|
112
|
+
* have left the tree, so table links are never unlinked by id
|
|
113
113
|
*/
|
|
114
114
|
linkTables(
|
|
115
115
|
refs: unknown[],
|
|
116
116
|
tableIds: number[],
|
|
117
117
|
scopeIndexes: number[],
|
|
118
118
|
scopes: string[]
|
|
119
|
-
):
|
|
120
|
-
/** unlinks an id from
|
|
119
|
+
): void
|
|
120
|
+
/** unlinks an id from link with per-view slots */
|
|
121
121
|
unlink(id: number): void
|
|
122
122
|
/**
|
|
123
123
|
* fills one state of a shared table, read by every view linked to it;
|
|
@@ -155,7 +155,7 @@ const compiledMappings = new Map<string, CompiledMapping>()
|
|
|
155
155
|
// linked mappings per scope, with their live link counts. they remain update
|
|
156
156
|
// owners across memo-generation rollovers, and a scope change only syncs the
|
|
157
157
|
// mappings linked under that scope
|
|
158
|
-
const scopeMappings = new Map<string,
|
|
158
|
+
const scopeMappings = new Map<string, Set<CompiledMapping>>()
|
|
159
159
|
let nextTableId = 1
|
|
160
160
|
|
|
161
161
|
function getCompiledMapping(mapping: NativeStyleThemeMapping): CompiledMapping {
|
|
@@ -223,11 +223,10 @@ function syncTableState(
|
|
|
223
223
|
|
|
224
224
|
export function setNativeStyleEngine(next: NativeStyleEngine | null): void {
|
|
225
225
|
if (engine !== next) {
|
|
226
|
-
settleReleases()
|
|
227
226
|
compiledMappings.clear()
|
|
228
227
|
scopeMappings.clear()
|
|
229
|
-
|
|
230
|
-
|
|
228
|
+
pendingHosts = []
|
|
229
|
+
pendingStates = []
|
|
231
230
|
}
|
|
232
231
|
engine = next
|
|
233
232
|
if (next) {
|
|
@@ -257,7 +256,7 @@ export function updateNativeStyleScope(
|
|
|
257
256
|
// one theme, so every scope showing it reads the same table entry
|
|
258
257
|
const linked = scopeMappings.get(scopeId)
|
|
259
258
|
if (linked) {
|
|
260
|
-
for (const compiled of linked
|
|
259
|
+
for (const compiled of linked) {
|
|
261
260
|
syncTableState(compiled, stateName, theme as Record<string, unknown>)
|
|
262
261
|
}
|
|
263
262
|
}
|
|
@@ -267,6 +266,11 @@ export function updateNativeStyleScope(
|
|
|
267
266
|
|
|
268
267
|
export function removeNativeStyleScope(scopeId: string): void {
|
|
269
268
|
if (!scopeStates.delete(scopeId)) return
|
|
269
|
+
// a <Theme> removes and re-adds its scope in one commit whenever its state
|
|
270
|
+
// changes; only a scope still gone after that commit drops its mappings
|
|
271
|
+
queueMicrotask(() => {
|
|
272
|
+
if (!scopeStates.has(scopeId)) scopeMappings.delete(scopeId)
|
|
273
|
+
})
|
|
270
274
|
engine?.removeScope(scopeId)
|
|
271
275
|
}
|
|
272
276
|
|
|
@@ -278,179 +282,108 @@ export function resolveNativeStyleMapping(
|
|
|
278
282
|
return resolveCompiledMapping(getCompiledMapping(mapping), stateName, theme).renderProps
|
|
279
283
|
}
|
|
280
284
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
285
|
+
/**
|
|
286
|
+
* what a host rendered: one mapping under one scope state. every host of a
|
|
287
|
+
* compiled component that rendered that state shares one record, so a mount
|
|
288
|
+
* allocates nothing to link
|
|
289
|
+
*/
|
|
290
|
+
export interface NativeStyleLinkState {
|
|
291
|
+
mapping: NativeStyleThemeMapping
|
|
284
292
|
scopeId: string
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
/** the engine that assigned `id`: a later engine swap must not receive its unlink */
|
|
288
|
-
owner: NativeStyleEngine | null
|
|
293
|
+
stateName: string
|
|
294
|
+
theme: Record<string, unknown>
|
|
289
295
|
}
|
|
290
296
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
function trackScopeMapping(link: MappingLink, delta: 1 | -1) {
|
|
300
|
-
let linked = scopeMappings.get(link.scopeId)
|
|
301
|
-
if (!linked) scopeMappings.set(link.scopeId, (linked = new Map()))
|
|
302
|
-
const count = (linked.get(link.compiled) ?? 0) + delta
|
|
303
|
-
if (count) {
|
|
304
|
-
linked.set(link.compiled, count)
|
|
305
|
-
} else {
|
|
306
|
-
linked.delete(link.compiled)
|
|
307
|
-
if (!linked.size) scopeMappings.delete(link.scopeId)
|
|
308
|
-
}
|
|
297
|
+
export function createNativeStyleLinkState(
|
|
298
|
+
mapping: NativeStyleThemeMapping,
|
|
299
|
+
scopeId: string,
|
|
300
|
+
stateName: string,
|
|
301
|
+
theme: Record<string, unknown>
|
|
302
|
+
): NativeStyleLinkState {
|
|
303
|
+
return { mapping, scopeId, stateName, theme }
|
|
309
304
|
}
|
|
310
305
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
let scopeIndex = scopes.indexOf(link.scopeId)
|
|
327
|
-
if (scopeIndex === -1) scopeIndex = scopes.push(link.scopeId) - 1
|
|
328
|
-
refs.push(link.ref)
|
|
329
|
-
tableIds.push(link.compiled.tableId)
|
|
330
|
-
scopeIndexes.push(scopeIndex)
|
|
331
|
-
}
|
|
332
|
-
const firstId = engine.linkTables(refs, tableIds, scopeIndexes, scopes)
|
|
333
|
-
for (let i = 0; i < live.length; i++) {
|
|
334
|
-
const link = live[i]!
|
|
335
|
-
link.id = firstId + i
|
|
336
|
-
link.owner = engine
|
|
337
|
-
link.ref = null
|
|
338
|
-
trackScopeMapping(link, 1)
|
|
339
|
-
}
|
|
306
|
+
// views link lazily: a mount only records its host and the state it rendered,
|
|
307
|
+
// and the engine links every pending view in one call before a scope next
|
|
308
|
+
// changes. linking exists for theme switches, so a mount pays nothing native.
|
|
309
|
+
// nothing unlinks: the engine drops views that left the tree when it links, so
|
|
310
|
+
// an unmount costs nothing either
|
|
311
|
+
let pendingHosts: unknown[] = []
|
|
312
|
+
let pendingStates: NativeStyleLinkState[] = []
|
|
313
|
+
// past this many pending hosts, link them once the JS thread idles, so hosts
|
|
314
|
+
// that mount and unmount without a scope change never accumulate
|
|
315
|
+
const maxPendingHosts = 4096
|
|
316
|
+
let idleFlushQueued = false
|
|
317
|
+
|
|
318
|
+
function idleFlush() {
|
|
319
|
+
idleFlushQueued = false
|
|
320
|
+
flushNativeStyleLinks()
|
|
340
321
|
}
|
|
341
322
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
interface Release {
|
|
347
|
-
compiled: CompiledMapping
|
|
348
|
-
scopeId: string
|
|
349
|
-
handle: NativeStyleEngineLinkHandle
|
|
350
|
-
settle: () => void
|
|
351
|
-
}
|
|
352
|
-
const releases = new Map<unknown, Release>()
|
|
353
|
-
let settleQueued = false
|
|
354
|
-
|
|
355
|
-
function settleReleases() {
|
|
356
|
-
settleQueued = false
|
|
357
|
-
if (!releases.size) return
|
|
358
|
-
const settling = [...releases.values()]
|
|
359
|
-
releases.clear()
|
|
360
|
-
for (const release of settling) release.settle()
|
|
323
|
+
function addScopeMapping(scopeId: string, compiled: CompiledMapping) {
|
|
324
|
+
let linked = scopeMappings.get(scopeId)
|
|
325
|
+
if (!linked) scopeMappings.set(scopeId, (linked = new Set()))
|
|
326
|
+
linked.add(compiled)
|
|
361
327
|
}
|
|
362
328
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
329
|
+
/** links every pending view in one engine call */
|
|
330
|
+
export function flushNativeStyleLinks(): void {
|
|
331
|
+
if (!pendingHosts.length) return
|
|
332
|
+
const hosts = pendingHosts
|
|
333
|
+
const states = pendingStates
|
|
334
|
+
pendingHosts = []
|
|
335
|
+
pendingStates = []
|
|
336
|
+
if (!engine) return
|
|
337
|
+
const tableIds: number[] = new Array(hosts.length)
|
|
338
|
+
const scopeIndexes: number[] = new Array(hosts.length)
|
|
339
|
+
const scopes: string[] = []
|
|
340
|
+
let last: NativeStyleLinkState | undefined
|
|
341
|
+
let tableId = 0
|
|
342
|
+
let scopeIndex = 0
|
|
343
|
+
for (let i = 0; i < hosts.length; i++) {
|
|
344
|
+
const state = states[i]!
|
|
345
|
+
if (state !== last) {
|
|
346
|
+
last = state
|
|
347
|
+
const compiled = getCompiledMapping(state.mapping)
|
|
348
|
+
// the table must hold the state each view rendered before the switch
|
|
349
|
+
syncTableState(compiled, state.stateName, state.theme)
|
|
350
|
+
addScopeMapping(state.scopeId, compiled)
|
|
351
|
+
tableId = compiled.tableId
|
|
352
|
+
scopeIndex = scopes.indexOf(state.scopeId)
|
|
353
|
+
if (scopeIndex === -1) scopeIndex = scopes.push(state.scopeId) - 1
|
|
354
|
+
}
|
|
355
|
+
tableIds[i] = tableId
|
|
356
|
+
scopeIndexes[i] = scopeIndex
|
|
381
357
|
}
|
|
382
|
-
|
|
358
|
+
engine.linkTables(hosts, tableIds, scopeIndexes, scopes)
|
|
383
359
|
}
|
|
384
360
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
scopeId: string,
|
|
389
|
-
stateName: string,
|
|
390
|
-
theme: Record<string, unknown>
|
|
391
|
-
): NativeStyleEngineLinkHandle | null {
|
|
392
|
-
if (!engine) return null
|
|
393
|
-
|
|
394
|
-
const compiled = getCompiledMapping(mapping)
|
|
361
|
+
/** records a mounted host for linking. a host attaching twice links once */
|
|
362
|
+
export function linkNativeStyleHost(host: unknown, state: NativeStyleLinkState): void {
|
|
363
|
+
if (!engine) return
|
|
395
364
|
// a scope can advance (layout effect) after a concurrent render captured its
|
|
396
|
-
// theme but before that render's host
|
|
365
|
+
// theme but before that render's host attaches. link that host now against
|
|
397
366
|
// the live scope state and have the engine commit it once to correct the
|
|
398
367
|
// stale React commit.
|
|
399
|
-
const
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
return kept.handle
|
|
407
|
-
kept.settle()
|
|
368
|
+
const live = scopeStates.get(state.scopeId)
|
|
369
|
+
if (live && (live.name !== state.stateName || live.theme !== state.theme)) {
|
|
370
|
+
const compiled = getCompiledMapping(state.mapping)
|
|
371
|
+
syncTableState(compiled, live.name, live.theme as Record<string, unknown>)
|
|
372
|
+
addScopeMapping(state.scopeId, compiled)
|
|
373
|
+
engine.link(host, compiled.tableId, state.scopeId, true)
|
|
374
|
+
return
|
|
408
375
|
}
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
ref: null,
|
|
415
|
-
compiled,
|
|
416
|
-
scopeId,
|
|
417
|
-
id: handle.id,
|
|
418
|
-
owner: engine,
|
|
419
|
-
}
|
|
420
|
-
trackScopeMapping(link, 1)
|
|
421
|
-
return releasable(ref, compiled, scopeId, handle.id, () => {
|
|
422
|
-
if (link.id === -1) return
|
|
423
|
-
link.id = -1
|
|
424
|
-
if (link.owner === engine) trackScopeMapping(link, -1)
|
|
425
|
-
handle.unlink()
|
|
426
|
-
})
|
|
376
|
+
pendingHosts.push(host)
|
|
377
|
+
pendingStates.push(state)
|
|
378
|
+
if (pendingHosts.length >= maxPendingHosts && !idleFlushQueued) {
|
|
379
|
+
idleFlushQueued = true
|
|
380
|
+
requestIdleCallback(idleFlush)
|
|
427
381
|
}
|
|
428
|
-
|
|
429
|
-
// the table must hold the state this view rendered before a switch links it
|
|
430
|
-
syncTableState(compiled, stateName, theme)
|
|
431
|
-
const link: MappingLink = { ref, compiled, scopeId, id: 0, owner: null }
|
|
432
|
-
pendingLinks.push(link)
|
|
433
|
-
return releasable(ref, compiled, scopeId, 0, () => {
|
|
434
|
-
const id = link.id
|
|
435
|
-
if (id === -1) return
|
|
436
|
-
link.id = -1
|
|
437
|
-
link.ref = null
|
|
438
|
-
if (id > 0) {
|
|
439
|
-
// scope accounting was reset when the engine changed
|
|
440
|
-
if (link.owner === engine) trackScopeMapping(link, -1)
|
|
441
|
-
link.owner!.unlink(id)
|
|
442
|
-
} else if (++unlinkedPending > 512 && unlinkedPending * 2 > pendingLinks.length) {
|
|
443
|
-
pendingLinks = pendingLinks.filter((pending) => pending.id === 0)
|
|
444
|
-
unlinkedPending = 0
|
|
445
|
-
}
|
|
446
|
-
})
|
|
447
382
|
}
|
|
448
383
|
|
|
449
384
|
/** memo-generation and live-owner sizes for development diagnostics and probes */
|
|
450
385
|
export const getNativeStyleEngineCacheStats = () => {
|
|
451
|
-
const active = new Set(
|
|
452
|
-
[...scopeMappings.values()].flatMap((linked) => [...linked.keys()])
|
|
453
|
-
)
|
|
386
|
+
const active = new Set([...scopeMappings.values()].flatMap((linked) => [...linked]))
|
|
454
387
|
return {
|
|
455
388
|
mappings: compiledMappings.size,
|
|
456
389
|
activeMappings: active.size,
|