acrylblends 0.6.2 → 0.6.4
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/README.md +5 -1
- package/docs/framework/README.md +3 -2
- package/docs/framework/UPSTREAM.md +1 -1
- package/docs/framework/cordis/acryl-in-a-cordis-app.md +6 -0
- package/docs/framework/getting-started/basic.md +1 -0
- package/docs/framework/getting-started/desktop.md +41 -0
- package/docs/framework/guides/jsx-dom.md +0 -3
- package/docs/framework/guides/jsx.md +24 -3
- package/docs/framework/helpers/css.md +0 -3
- package/docs/framework/helpers/ssg.md +3 -6
- package/docs/framework/middleware/builtin/jsx-renderer.md +0 -3
- package/docs/framework/upstream.json +3 -3
- package/lib/accepts.d.ts +1 -1
- package/lib/acryl-base.d.ts +1 -1
- package/lib/adapter.d.ts +1 -1
- package/lib/{app-BdrVHBlJ.d.ts → app-D8riatvv.d.ts} +1 -1
- package/lib/base-BpQy2Rk7.d.ts +783 -0
- package/lib/base-ddiVmiE7.js +721 -0
- package/lib/basic-auth.d.ts +1 -1
- package/lib/bearer-auth.d.ts +1 -1
- package/lib/body-limit.d.ts +1 -1
- package/lib/cache.d.ts +1 -1
- package/lib/cache.js +4 -4
- package/lib/{client-BHTr318g.js → client-DDLXwhBo.js} +2 -125
- package/lib/client.d.ts +2 -2
- package/lib/client.js +2 -1
- package/lib/combine.d.ts +1 -1
- package/lib/common-D8Z4JRCw.d.ts +46 -0
- package/lib/components-0o0CBYNv.js +268 -0
- package/lib/components-DdI7-ns7.js +24 -0
- package/lib/compress.d.ts +1 -1
- package/lib/conninfo.d.ts +2 -2
- package/lib/constants-BR9jM9BC.js +9 -0
- package/lib/{context-B5Y1lLha.d.ts → context-DS3fYyG-.d.ts} +2 -2
- package/lib/context-DxFdY_un.d.ts +250 -0
- package/lib/context-storage.d.ts +1 -1
- package/lib/{cookie-D9_nQbsM.d.ts → cookie-CCelEqky.d.ts} +1 -1
- package/lib/cookie.d.ts +3 -3
- package/lib/cors.d.ts +1 -1
- package/lib/csrf.d.ts +1 -1
- package/lib/css-D2jb7X8b.js +320 -0
- package/lib/css.d.ts +82 -0
- package/lib/css.js +134 -0
- package/lib/dev.d.ts +2 -2
- package/lib/etag.d.ts +1 -1
- package/lib/factory.d.ts +2 -2
- package/lib/hooks-BMw6BAyP.js +762 -0
- package/lib/html-SllAe0YT.d.ts +46 -0
- package/lib/html.d.ts +1 -1
- package/lib/{index-m12zcmph.d.ts → index-Bb7YJKCq.d.ts} +3 -3
- package/lib/{index-Kqou8Fjh.d.ts → index-BvFh1Gfx.d.ts} +2 -2
- package/lib/index-C850MeBA.d.ts +94 -0
- package/lib/{index-DtEoak1i.d.ts → index-CTy4N7ng.d.ts} +2 -2
- package/lib/index.d.ts +4 -4
- package/lib/ip-restriction.d.ts +2 -2
- package/lib/jsx/dom/client.d.ts +30 -0
- package/lib/jsx/dom/client.js +49 -0
- package/lib/jsx/dom/css.d.ts +84 -0
- package/lib/jsx/dom/css.js +2 -0
- package/lib/jsx/dom/jsx-dev-runtime.d.ts +3 -0
- package/lib/jsx/dom/jsx-dev-runtime.js +2 -0
- package/lib/jsx/dom/jsx-runtime.d.ts +3 -0
- package/lib/jsx/dom/jsx-runtime.js +2 -0
- package/lib/jsx/dom/server.d.ts +105 -0
- package/lib/jsx/dom/server.js +37 -0
- package/lib/jsx/dom.d.ts +5 -0
- package/lib/jsx/dom.js +74 -0
- package/lib/jsx/jsx-dev-runtime.d.ts +6 -0
- package/lib/jsx/jsx-dev-runtime.js +14 -0
- package/lib/jsx/jsx-runtime.d.ts +10 -0
- package/lib/jsx/jsx-runtime.js +30 -0
- package/lib/jsx/streaming.d.ts +2 -0
- package/lib/jsx/streaming.js +2 -0
- package/lib/jsx-dev-runtime-B22O-Npk.d.ts +7 -0
- package/lib/jsx-dev-runtime-D18Y35TI.js +354 -0
- package/lib/jsx-renderer.d.ts +75 -0
- package/lib/jsx-renderer.js +99 -0
- package/lib/jsx-runtime-BVVgDSdq.d.ts +1 -0
- package/lib/jsx.d.ts +3 -0
- package/lib/jsx.js +47 -0
- package/lib/jwk.d.ts +4 -4
- package/lib/{jwt-BA65QhnJ.d.ts → jwt-BARhotDz.d.ts} +1 -1
- package/lib/jwt.d.ts +4 -4
- package/lib/language.d.ts +1 -1
- package/lib/logger.d.ts +1 -1
- package/lib/loopback-only.d.ts +1 -1
- package/lib/method-not-allowed.d.ts +2 -2
- package/lib/method-override.d.ts +2 -2
- package/lib/mount.d.ts +1 -1
- package/lib/node-server/conninfo.d.ts +1 -1
- package/lib/node-server/serve-static.d.ts +1 -1
- package/lib/node-server/serve-static.js +1 -1
- package/lib/node-server.d.ts +1 -1
- package/lib/node-server.js +1 -1
- package/lib/powered-by.d.ts +1 -1
- package/lib/pretty-json.d.ts +1 -1
- package/lib/proxy.d.ts +1 -1
- package/lib/quick.d.ts +1 -1
- package/lib/request-id.d.ts +1 -1
- package/lib/request.d.ts +1 -1
- package/lib/route.d.ts +1 -1
- package/lib/schema-validator.d.ts +1 -1
- package/lib/secure-headers.d.ts +1 -1
- package/lib/{serve-static-Dw_m6KxR.js → serve-static-B14MF1Va.js} +2 -0
- package/lib/serve-static.d.ts +1 -1
- package/lib/ssg-BwjcA-Ge.js +389 -0
- package/lib/ssg.d.ts +156 -0
- package/lib/ssg.js +2 -0
- package/lib/streaming.d.ts +1 -1
- package/lib/testing.d.ts +4 -4
- package/lib/testing.js +1 -1
- package/lib/timeout.d.ts +1 -1
- package/lib/timing.d.ts +1 -1
- package/lib/tiny.d.ts +1 -1
- package/lib/trailing-slash.d.ts +1 -1
- package/lib/{types-ZM9gIiKh.d.ts → types-Dv_nV2cv.d.ts} +1 -1
- package/lib/{types-D9DEXMjE.d.ts → types-Lqx5BxQF.d.ts} +8 -1
- package/lib/{types-Bd29gh2o.d.ts → types-zNxyEpG2.d.ts} +3 -3
- package/lib/types.d.ts +1 -1
- package/lib/utils/body.d.ts +1 -1
- package/lib/utils/cookie.d.ts +1 -1
- package/lib/utils/crypto.d.ts +1 -1
- package/lib/utils/html.d.ts +1 -45
- package/lib/utils/ipaddr.d.ts +1 -1
- package/lib/utils/jwt.d.ts +1 -1
- package/lib/utils/types.d.ts +2 -2
- package/lib/utils-Cx61GFMC.js +125 -0
- package/lib/validator.d.ts +2 -2
- package/lib/ws.d.ts +1 -1
- package/package.json +53 -1
- package/plugins/acryl-inspect/upstream.json +1 -1
- package/plugins/acryl-node-server/upstream.json +1 -1
- package/plugins/acryl-router/src/core/helper/css/common.ts +337 -0
- package/plugins/acryl-router/src/core/helper/css/index.ts +262 -0
- package/plugins/acryl-router/src/core/helper/ssg/index.ts +14 -0
- package/plugins/acryl-router/src/core/helper/ssg/middleware.ts +83 -0
- package/plugins/acryl-router/src/core/helper/ssg/plugins.ts +72 -0
- package/plugins/acryl-router/src/core/helper/ssg/ssg.ts +471 -0
- package/plugins/acryl-router/src/core/helper/ssg/utils.ts +118 -0
- package/plugins/acryl-router/src/core/jsx/base.ts +490 -0
- package/plugins/acryl-router/src/core/jsx/children.ts +20 -0
- package/plugins/acryl-router/src/core/jsx/components.ts +257 -0
- package/plugins/acryl-router/src/core/jsx/constants.ts +6 -0
- package/plugins/acryl-router/src/core/jsx/context.ts +266 -0
- package/plugins/acryl-router/src/core/jsx/dom/client.ts +89 -0
- package/plugins/acryl-router/src/core/jsx/dom/components.ts +39 -0
- package/plugins/acryl-router/src/core/jsx/dom/context.ts +52 -0
- package/plugins/acryl-router/src/core/jsx/dom/css.ts +263 -0
- package/plugins/acryl-router/src/core/jsx/dom/hooks/index.ts +91 -0
- package/plugins/acryl-router/src/core/jsx/dom/index.ts +170 -0
- package/plugins/acryl-router/src/core/jsx/dom/intrinsic-element/components.ts +438 -0
- package/plugins/acryl-router/src/core/jsx/dom/jsx-dev-runtime.ts +23 -0
- package/plugins/acryl-router/src/core/jsx/dom/jsx-runtime.ts +8 -0
- package/plugins/acryl-router/src/core/jsx/dom/render.ts +879 -0
- package/plugins/acryl-router/src/core/jsx/dom/server.ts +76 -0
- package/plugins/acryl-router/src/core/jsx/dom/utils.ts +7 -0
- package/plugins/acryl-router/src/core/jsx/hooks/index.ts +437 -0
- package/plugins/acryl-router/src/core/jsx/index.ts +115 -0
- package/plugins/acryl-router/src/core/jsx/intrinsic-element/common.ts +23 -0
- package/plugins/acryl-router/src/core/jsx/intrinsic-element/components.ts +210 -0
- package/plugins/acryl-router/src/core/jsx/intrinsic-elements.ts +938 -0
- package/plugins/acryl-router/src/core/jsx/jsx-dev-runtime.ts +26 -0
- package/plugins/acryl-router/src/core/jsx/jsx-runtime.ts +51 -0
- package/plugins/acryl-router/src/core/jsx/streaming.ts +231 -0
- package/plugins/acryl-router/src/core/jsx/types.ts +41 -0
- package/plugins/acryl-router/src/core/jsx/utils.ts +202 -0
- package/plugins/acryl-router/src/core/middleware/cache/index.ts +4 -4
- package/plugins/acryl-router/src/core/middleware/jsx-renderer/index.ts +162 -0
- package/plugins/acryl-router/src/core/utils/types.ts +6 -0
- package/plugins/acryl-router/src/helpers/index.ts +2 -0
- package/plugins/acryl-router/src/middleware/index.ts +1 -0
- package/plugins/acryl-router/upstream.json +3 -3
- package/plugins/acryl-router-http/upstream.json +1 -1
- package/plugins/acryl-state/upstream.json +1 -1
- package/plugins/desktop/upstream.json +1 -1
- package/plugins/desktop-web/upstream.json +1 -1
- package/plugins/extensions/resolve.ts +4 -0
- package/plugins/save/plugin.json +1 -1
- package/shared/AGENTS.core.md +4 -0
- package/templates/agent/tsconfig.json +7 -1
- package/templates/todo/upstream.json +1 -1
- package/plugins/acryl-inspect/tests/report.spec.ts +0 -69
- package/plugins/acryl-inspect/tests/service.spec.ts +0 -121
- package/plugins/acryl-node-server/tests/adapter/app.ts +0 -76
- package/plugins/acryl-node-server/tests/adapter/assets/.static/plain.txt +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/favicon.ico +0 -0
- package/plugins/acryl-node-server/tests/adapter/assets/secret.txt +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static/acryl.html +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static/admin/secret.txt +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static/data.json +0 -5
- package/plugins/acryl-node-server/tests/adapter/assets/static/extensionless +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static/foo..bar.txt +0 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static/index.html +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static/plain.txt +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-context-path/plain.txt +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.bin +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.bin.br +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt.br +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt.zst +0 -1
- package/plugins/acryl-node-server/tests/adapter/conninfo.test.ts +0 -34
- package/plugins/acryl-node-server/tests/adapter/content-length.test.ts +0 -248
- package/plugins/acryl-node-server/tests/adapter/early-hints.test.ts +0 -457
- package/plugins/acryl-node-server/tests/adapter/fixtures/keys/agent1-cert.pem +0 -23
- package/plugins/acryl-node-server/tests/adapter/fixtures/keys/agent1-key.pem +0 -27
- package/plugins/acryl-node-server/tests/adapter/headers.test.ts +0 -252
- package/plugins/acryl-node-server/tests/adapter/helpers/request.ts +0 -190
- package/plugins/acryl-node-server/tests/adapter/listener.test.ts +0 -727
- package/plugins/acryl-node-server/tests/adapter/request-client-disconnect.test.ts +0 -189
- package/plugins/acryl-node-server/tests/adapter/request.test.ts +0 -1230
- package/plugins/acryl-node-server/tests/adapter/response.test.ts +0 -285
- package/plugins/acryl-node-server/tests/adapter/serve-static.test.ts +0 -849
- package/plugins/acryl-node-server/tests/adapter/server-socket.test.ts +0 -790
- package/plugins/acryl-node-server/tests/adapter/server.test.ts +0 -1312
- package/plugins/acryl-node-server/tests/adapter/setup.ts +0 -16
- package/plugins/acryl-node-server/tests/adapter/url.test.ts +0 -76
- package/plugins/acryl-node-server/tests/adapter/utils/response.test.ts +0 -23
- package/plugins/acryl-node-server/tests/adapter/utils/stream.test.ts +0 -75
- package/plugins/acryl-node-server/tests/adapter/utils.test.ts +0 -235
- package/plugins/acryl-node-server/tests/adapter/websocket.test.ts +0 -260
- package/plugins/acryl-node-server/tests/server.spec.ts +0 -141
- package/plugins/acryl-router/src/core/app.test.ts +0 -3833
- package/plugins/acryl-router/src/core/client/client.test.ts +0 -2313
- package/plugins/acryl-router/src/core/client/types.test.ts +0 -149
- package/plugins/acryl-router/src/core/client/utils.test.ts +0 -405
- package/plugins/acryl-router/src/core/compose.test.ts +0 -751
- package/plugins/acryl-router/src/core/context.test.ts +0 -629
- package/plugins/acryl-router/src/core/helper/accepts/accepts.test.ts +0 -344
- package/plugins/acryl-router/src/core/helper/adapter/index.test.ts +0 -55
- package/plugins/acryl-router/src/core/helper/cookie/index.test.ts +0 -510
- package/plugins/acryl-router/src/core/helper/dev/index.test.ts +0 -181
- package/plugins/acryl-router/src/core/helper/factory/index.test.ts +0 -434
- package/plugins/acryl-router/src/core/helper/html/index.test.ts +0 -78
- package/plugins/acryl-router/src/core/helper/proxy/index.test.ts +0 -356
- package/plugins/acryl-router/src/core/helper/route/index.test.ts +0 -259
- package/plugins/acryl-router/src/core/helper/streaming/stream.test.ts +0 -128
- package/plugins/acryl-router/src/core/helper/streaming/text.test.ts +0 -34
- package/plugins/acryl-router/src/core/helper/testing/index.test.ts +0 -42
- package/plugins/acryl-router/src/core/helper/websocket/index.test.ts +0 -124
- package/plugins/acryl-router/src/core/http-exception.test.ts +0 -45
- package/plugins/acryl-router/src/core/middleware/basic-auth/index.test.ts +0 -434
- package/plugins/acryl-router/src/core/middleware/bearer-auth/index.test.ts +0 -1018
- package/plugins/acryl-router/src/core/middleware/body-limit/index.test.ts +0 -273
- package/plugins/acryl-router/src/core/middleware/cache/index.test.ts +0 -1211
- package/plugins/acryl-router/src/core/middleware/combine/index.test.ts +0 -355
- package/plugins/acryl-router/src/core/middleware/compress/index.test.ts +0 -535
- package/plugins/acryl-router/src/core/middleware/context-storage/index.test.ts +0 -43
- package/plugins/acryl-router/src/core/middleware/cors/index.test.ts +0 -532
- package/plugins/acryl-router/src/core/middleware/csrf/index.test.ts +0 -534
- package/plugins/acryl-router/src/core/middleware/etag/digest.test.ts +0 -21
- package/plugins/acryl-router/src/core/middleware/etag/index.test.ts +0 -503
- package/plugins/acryl-router/src/core/middleware/ip-restriction/index.test.ts +0 -217
- package/plugins/acryl-router/src/core/middleware/jwk/index.test.ts +0 -1135
- package/plugins/acryl-router/src/core/middleware/jwk/keys.test.json +0 -48
- package/plugins/acryl-router/src/core/middleware/jwt/index.test.ts +0 -802
- package/plugins/acryl-router/src/core/middleware/language/index.test.ts +0 -552
- package/plugins/acryl-router/src/core/middleware/logger/index.test.ts +0 -204
- package/plugins/acryl-router/src/core/middleware/method-not-allowed/index.test.ts +0 -292
- package/plugins/acryl-router/src/core/middleware/method-override/index.test.ts +0 -221
- package/plugins/acryl-router/src/core/middleware/mount/index.test.ts +0 -334
- package/plugins/acryl-router/src/core/middleware/powered-by/index.test.ts +0 -37
- package/plugins/acryl-router/src/core/middleware/pretty-json/index.test.ts +0 -218
- package/plugins/acryl-router/src/core/middleware/request-id/index.test.ts +0 -168
- package/plugins/acryl-router/src/core/middleware/secure-headers/index.test.ts +0 -671
- package/plugins/acryl-router/src/core/middleware/serve-static/index.test.ts +0 -450
- package/plugins/acryl-router/src/core/middleware/serve-static/path.test.ts +0 -50
- package/plugins/acryl-router/src/core/middleware/timeout/index.test.ts +0 -70
- package/plugins/acryl-router/src/core/middleware/timing/index.test.ts +0 -310
- package/plugins/acryl-router/src/core/middleware/trailing-slash/index.test.ts +0 -381
- package/plugins/acryl-router/src/core/preset/quick.test.ts +0 -42
- package/plugins/acryl-router/src/core/preset/tiny.test.ts +0 -42
- package/plugins/acryl-router/src/core/request.test.ts +0 -751
- package/plugins/acryl-router/src/core/router/common.case.test.ts +0 -1132
- package/plugins/acryl-router/src/core/router/linear-router/router.test.ts +0 -80
- package/plugins/acryl-router/src/core/router/pattern-router/router.test.ts +0 -46
- package/plugins/acryl-router/src/core/router/reg-exp-router/prepared-router.test.ts +0 -154
- package/plugins/acryl-router/src/core/router/reg-exp-router/router.test.ts +0 -265
- package/plugins/acryl-router/src/core/router/smart-router/router.test.ts +0 -13
- package/plugins/acryl-router/src/core/router/trie-router/node.test.ts +0 -896
- package/plugins/acryl-router/src/core/router/trie-router/router.test.ts +0 -8
- package/plugins/acryl-router/src/core/types.test.ts +0 -4134
- package/plugins/acryl-router/src/core/utils/accept.test.ts +0 -299
- package/plugins/acryl-router/src/core/utils/basic-auth.test.ts +0 -56
- package/plugins/acryl-router/src/core/utils/body.test.ts +0 -496
- package/plugins/acryl-router/src/core/utils/buffer.test.ts +0 -147
- package/plugins/acryl-router/src/core/utils/color.test.ts +0 -23
- package/plugins/acryl-router/src/core/utils/concurrent.test.ts +0 -69
- package/plugins/acryl-router/src/core/utils/cookie.test.ts +0 -460
- package/plugins/acryl-router/src/core/utils/crypto.test.ts +0 -43
- package/plugins/acryl-router/src/core/utils/encode.test.ts +0 -61
- package/plugins/acryl-router/src/core/utils/filepath.test.ts +0 -78
- package/plugins/acryl-router/src/core/utils/html.test.ts +0 -16
- package/plugins/acryl-router/src/core/utils/ipaddr.test.ts +0 -149
- package/plugins/acryl-router/src/core/utils/jwt/jwa.test.ts +0 -86
- package/plugins/acryl-router/src/core/utils/jwt/jwt.test.ts +0 -1788
- package/plugins/acryl-router/src/core/utils/mime.test.ts +0 -64
- package/plugins/acryl-router/src/core/utils/stream.test.ts +0 -212
- package/plugins/acryl-router/src/core/utils/types.test.ts +0 -295
- package/plugins/acryl-router/src/core/utils/url.test.ts +0 -384
- package/plugins/acryl-router/src/core/validator/utils.test.ts +0 -82
- package/plugins/acryl-router/src/core/validator/validator.test.ts +0 -1488
- package/plugins/acryl-router/tests/docs-examples.spec.ts +0 -152
- package/plugins/acryl-router/tests/live-install.spec.ts +0 -64
- package/plugins/acryl-router/tests/loader.spec.ts +0 -72
- package/plugins/acryl-router/tests/loopback-only.spec.ts +0 -80
- package/plugins/acryl-router/tests/no-dom/consumer.ts +0 -11
- package/plugins/acryl-router/tests/no-dom/tsconfig.json +0 -13
- package/plugins/acryl-router/tests/service.spec.ts +0 -426
- package/plugins/acryl-router/tests/shadow-state.spec.ts +0 -79
- package/plugins/acryl-router-http/tests/adapter.spec.ts +0 -174
- package/plugins/acryl-router-http/tests/stream.spec.ts +0 -133
- package/plugins/acryl-router-http/tests/surfaces.spec.ts +0 -101
- package/plugins/acryl-state/src/react.ts +0 -11
- package/plugins/acryl-state/tests/cell.spec.ts +0 -71
- package/plugins/acryl-state/tests/react.spec.ts +0 -39
- package/plugins/acryl-state/tests/service.spec.ts +0 -132
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Child } from '../base.ts'
|
|
2
|
+
import { DOM_ERROR_HANDLER } from '../constants.ts'
|
|
3
|
+
import type { Context } from '../context.ts'
|
|
4
|
+
import { globalContexts } from '../context.ts'
|
|
5
|
+
import { setInternalTagFlag } from './utils.ts'
|
|
6
|
+
|
|
7
|
+
export const createContextProviderFunction =
|
|
8
|
+
<T>(values: T[]): Function =>
|
|
9
|
+
({ value, children }: { value: T; children: Child[] }) => {
|
|
10
|
+
if (!children) {
|
|
11
|
+
return undefined
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
|
+
const props: { children: any } = {
|
|
16
|
+
children: [
|
|
17
|
+
{
|
|
18
|
+
tag: setInternalTagFlag(() => {
|
|
19
|
+
values.push(value)
|
|
20
|
+
}),
|
|
21
|
+
props: {},
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
}
|
|
25
|
+
if (Array.isArray(children)) {
|
|
26
|
+
props.children.push(...children.flat())
|
|
27
|
+
} else {
|
|
28
|
+
props.children.push(children)
|
|
29
|
+
}
|
|
30
|
+
props.children.push({
|
|
31
|
+
tag: setInternalTagFlag(() => {
|
|
32
|
+
values.pop()
|
|
33
|
+
}),
|
|
34
|
+
props: {},
|
|
35
|
+
})
|
|
36
|
+
const res = { tag: '', props, type: '' }
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
|
+
;(res as any)[DOM_ERROR_HANDLER] = (err: unknown) => {
|
|
39
|
+
values.pop()
|
|
40
|
+
throw err
|
|
41
|
+
}
|
|
42
|
+
return res
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const createContext = <T>(defaultValue: T): Context<T> => {
|
|
46
|
+
const values = [defaultValue]
|
|
47
|
+
const context: Context<T> = createContextProviderFunction(values) as Context<T>
|
|
48
|
+
context.values = values
|
|
49
|
+
context.Provider = context
|
|
50
|
+
globalContexts.push(context as Context<unknown>)
|
|
51
|
+
return context
|
|
52
|
+
}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module
|
|
3
|
+
* This module provides APIs that enable `acryl-router/jsx/dom` to support.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { FC, PropsWithChildren } from '../index.ts'
|
|
7
|
+
import type {
|
|
8
|
+
ClassNameSlug,
|
|
9
|
+
CssClassName,
|
|
10
|
+
CssVariableType,
|
|
11
|
+
OnInvalidSlug,
|
|
12
|
+
} from '../../helper/css/common.ts'
|
|
13
|
+
import {
|
|
14
|
+
CLASS_NAME,
|
|
15
|
+
DEFAULT_STYLE_ID,
|
|
16
|
+
PSEUDO_GLOBAL_SELECTOR,
|
|
17
|
+
SELECTOR,
|
|
18
|
+
SELECTORS,
|
|
19
|
+
STYLE_STRING,
|
|
20
|
+
cssCommon,
|
|
21
|
+
cxCommon,
|
|
22
|
+
keyframesCommon,
|
|
23
|
+
viewTransitionCommon,
|
|
24
|
+
} from '../../helper/css/common.ts'
|
|
25
|
+
export { rawCssString } from '../../helper/css/common.ts'
|
|
26
|
+
|
|
27
|
+
const splitRule = (rule: string): string[] => {
|
|
28
|
+
const result: string[] = []
|
|
29
|
+
let startPos = 0
|
|
30
|
+
let depth = 0
|
|
31
|
+
for (let i = 0, len = rule.length; i < len; i++) {
|
|
32
|
+
const char = rule[i]
|
|
33
|
+
|
|
34
|
+
// consume quote
|
|
35
|
+
|
|
36
|
+
if (char === "'" || char === '"') {
|
|
37
|
+
const quote = char
|
|
38
|
+
i++
|
|
39
|
+
for (; i < len; i++) {
|
|
40
|
+
if (rule[i] === '\\') {
|
|
41
|
+
i++
|
|
42
|
+
continue
|
|
43
|
+
}
|
|
44
|
+
if (rule[i] === quote) {
|
|
45
|
+
break
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
continue
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// comments are removed from the rule in advance
|
|
52
|
+
if (char === '{') {
|
|
53
|
+
depth++
|
|
54
|
+
continue
|
|
55
|
+
}
|
|
56
|
+
if (char === '}') {
|
|
57
|
+
depth--
|
|
58
|
+
if (depth === 0) {
|
|
59
|
+
result.push(rule.slice(startPos, i + 1))
|
|
60
|
+
startPos = i + 1
|
|
61
|
+
}
|
|
62
|
+
continue
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return result
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
interface CreateCssJsxDomObjectsType {
|
|
69
|
+
(args: { id: Readonly<string> }): readonly [
|
|
70
|
+
{
|
|
71
|
+
toString(this: CssClassName): string
|
|
72
|
+
},
|
|
73
|
+
FC<PropsWithChildren<void>>,
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export const createCssJsxDomObjects: CreateCssJsxDomObjectsType = ({ id }) => {
|
|
78
|
+
let styleSheet: CSSStyleSheet | null | undefined = undefined
|
|
79
|
+
const findStyleSheet = (): [CSSStyleSheet, Set<string>] | [] => {
|
|
80
|
+
if (!styleSheet) {
|
|
81
|
+
styleSheet = document.querySelector<HTMLStyleElement>(`style#${id}`)
|
|
82
|
+
?.sheet as CSSStyleSheet | null
|
|
83
|
+
if (styleSheet) {
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
85
|
+
;(styleSheet as any).addedStyles = new Set<string>()
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
89
|
+
return styleSheet ? [styleSheet, (styleSheet as any).addedStyles] : []
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const insertRule = (className: string, styleString: string) => {
|
|
93
|
+
const [sheet, addedStyles] = findStyleSheet()
|
|
94
|
+
if (!sheet || !addedStyles) {
|
|
95
|
+
Promise.resolve().then(() => {
|
|
96
|
+
if (!findStyleSheet()[0]) {
|
|
97
|
+
throw new Error('style sheet not found')
|
|
98
|
+
}
|
|
99
|
+
insertRule(className, styleString)
|
|
100
|
+
})
|
|
101
|
+
return
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (!addedStyles.has(className)) {
|
|
105
|
+
addedStyles.add(className)
|
|
106
|
+
;(className.startsWith(PSEUDO_GLOBAL_SELECTOR)
|
|
107
|
+
? splitRule(styleString)
|
|
108
|
+
: [`${className[0] === '@' ? '' : '.'}${className}{${styleString}}`]
|
|
109
|
+
).forEach((rule) => {
|
|
110
|
+
sheet.insertRule(rule, sheet.cssRules.length)
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const cssObject = {
|
|
116
|
+
toString(this: CssClassName): string {
|
|
117
|
+
const selector = this[SELECTOR]
|
|
118
|
+
insertRule(selector, this[STYLE_STRING])
|
|
119
|
+
this[SELECTORS].forEach(({ [CLASS_NAME]: className, [STYLE_STRING]: styleString }) => {
|
|
120
|
+
insertRule(className, styleString)
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
return this[CLASS_NAME]
|
|
124
|
+
},
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const Style: FC<PropsWithChildren<{ nonce?: string }>> = ({ children, nonce }) =>
|
|
128
|
+
({
|
|
129
|
+
tag: 'style',
|
|
130
|
+
props: {
|
|
131
|
+
id,
|
|
132
|
+
nonce,
|
|
133
|
+
children:
|
|
134
|
+
children &&
|
|
135
|
+
(Array.isArray(children) ? children : [children]).map(
|
|
136
|
+
(c) => (c as unknown as CssClassName)[STYLE_STRING]
|
|
137
|
+
),
|
|
138
|
+
},
|
|
139
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
140
|
+
}) as any
|
|
141
|
+
|
|
142
|
+
return [cssObject, Style] as const
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
interface CssType {
|
|
146
|
+
(strings: TemplateStringsArray, ...values: CssVariableType[]): string
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
interface CxType {
|
|
150
|
+
(...args: (string | boolean | null | undefined)[]): string
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
interface KeyframesType {
|
|
154
|
+
(strings: TemplateStringsArray, ...values: CssVariableType[]): CssClassName
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
interface ViewTransitionType {
|
|
158
|
+
(strings: TemplateStringsArray, ...values: CssVariableType[]): string
|
|
159
|
+
(content: string): string
|
|
160
|
+
(): string
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
interface DefaultContextType {
|
|
164
|
+
css: CssType
|
|
165
|
+
cx: CxType
|
|
166
|
+
keyframes: KeyframesType
|
|
167
|
+
viewTransition: ViewTransitionType
|
|
168
|
+
Style: FC<PropsWithChildren<void>>
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* @experimental
|
|
173
|
+
* `createCssContext` is an experimental feature.
|
|
174
|
+
* The API might be changed.
|
|
175
|
+
*
|
|
176
|
+
* @param options.id - The ID for the style element
|
|
177
|
+
* @param options.classNameSlug - Optional function to customize generated CSS class names
|
|
178
|
+
* @param options.onInvalidSlug - Optional callback function called when an invalid slug is returned from ClassNameSlug
|
|
179
|
+
*/
|
|
180
|
+
export const createCssContext = ({
|
|
181
|
+
id,
|
|
182
|
+
classNameSlug,
|
|
183
|
+
onInvalidSlug,
|
|
184
|
+
}: {
|
|
185
|
+
id: Readonly<string>
|
|
186
|
+
classNameSlug?: ClassNameSlug
|
|
187
|
+
onInvalidSlug?: OnInvalidSlug
|
|
188
|
+
}): DefaultContextType => {
|
|
189
|
+
const [cssObject, Style] = createCssJsxDomObjects({ id })
|
|
190
|
+
|
|
191
|
+
const newCssClassNameObject = (cssClassName: CssClassName): string => {
|
|
192
|
+
cssClassName.toString = cssObject.toString
|
|
193
|
+
return cssClassName as unknown as string
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const css: CssType = (strings, ...values) => {
|
|
197
|
+
return newCssClassNameObject(cssCommon(strings, values, classNameSlug, onInvalidSlug))
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const cx: CxType = (...args) => {
|
|
201
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
202
|
+
args = cxCommon(args as any) as any
|
|
203
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
204
|
+
return css(Array(args.length).fill('') as any, ...args)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const keyframes: KeyframesType = (strings, ...values) =>
|
|
208
|
+
keyframesCommon(strings, values, classNameSlug, onInvalidSlug)
|
|
209
|
+
|
|
210
|
+
const viewTransition: ViewTransitionType = ((
|
|
211
|
+
strings: TemplateStringsArray | string | undefined,
|
|
212
|
+
...values: CssVariableType[]
|
|
213
|
+
) => {
|
|
214
|
+
return newCssClassNameObject(
|
|
215
|
+
viewTransitionCommon(strings as any, values, classNameSlug, onInvalidSlug) // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
216
|
+
)
|
|
217
|
+
}) as ViewTransitionType
|
|
218
|
+
|
|
219
|
+
return {
|
|
220
|
+
css,
|
|
221
|
+
cx,
|
|
222
|
+
keyframes,
|
|
223
|
+
viewTransition,
|
|
224
|
+
Style,
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
const defaultContext: DefaultContextType = createCssContext({ id: DEFAULT_STYLE_ID })
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* @experimental
|
|
232
|
+
* `css` is an experimental feature.
|
|
233
|
+
* The API might be changed.
|
|
234
|
+
*/
|
|
235
|
+
export const css = defaultContext.css
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* @experimental
|
|
239
|
+
* `cx` is an experimental feature.
|
|
240
|
+
* The API might be changed.
|
|
241
|
+
*/
|
|
242
|
+
export const cx = defaultContext.cx
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* @experimental
|
|
246
|
+
* `keyframes` is an experimental feature.
|
|
247
|
+
* The API might be changed.
|
|
248
|
+
*/
|
|
249
|
+
export const keyframes = defaultContext.keyframes
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* @experimental
|
|
253
|
+
* `viewTransition` is an experimental feature.
|
|
254
|
+
* The API might be changed.
|
|
255
|
+
*/
|
|
256
|
+
export const viewTransition = defaultContext.viewTransition
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* @experimental
|
|
260
|
+
* `Style` is an experimental feature.
|
|
261
|
+
* The API might be changed.
|
|
262
|
+
*/
|
|
263
|
+
export const Style = defaultContext.Style
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provide hooks used only in jsx/dom
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { PERMALINK } from '../../constants.ts'
|
|
6
|
+
import type { Context } from '../../context.ts'
|
|
7
|
+
import { useContext } from '../../context.ts'
|
|
8
|
+
import { useCallback, useState } from '../../hooks/index.ts'
|
|
9
|
+
import { createContext } from '../context.ts'
|
|
10
|
+
|
|
11
|
+
type FormStatus =
|
|
12
|
+
| {
|
|
13
|
+
pending: false
|
|
14
|
+
data: null
|
|
15
|
+
method: null
|
|
16
|
+
action: null
|
|
17
|
+
}
|
|
18
|
+
| {
|
|
19
|
+
pending: true
|
|
20
|
+
data: FormData
|
|
21
|
+
method: 'get' | 'post'
|
|
22
|
+
action: string | ((formData: FormData) => void | Promise<void>)
|
|
23
|
+
}
|
|
24
|
+
export const FormContext: Context<FormStatus> = createContext<FormStatus>({
|
|
25
|
+
pending: false,
|
|
26
|
+
data: null,
|
|
27
|
+
method: null,
|
|
28
|
+
action: null,
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
const actions: Set<Promise<unknown>> = new Set()
|
|
32
|
+
export const registerAction = (action: Promise<unknown>) => {
|
|
33
|
+
actions.add(action)
|
|
34
|
+
action.finally(() => actions.delete(action))
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* This hook returns the current form status
|
|
39
|
+
* @returns FormStatus
|
|
40
|
+
*/
|
|
41
|
+
export const useFormStatus = (): FormStatus => {
|
|
42
|
+
return useContext(FormContext)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* This hook returns the current state and a function to update the state optimistically
|
|
47
|
+
* The current state is updated optimistically and then reverted to the original state when all actions are resolved
|
|
48
|
+
* @param state
|
|
49
|
+
* @param updateState
|
|
50
|
+
* @returns [T, (action: N) => void]
|
|
51
|
+
*/
|
|
52
|
+
export const useOptimistic = <T, N>(
|
|
53
|
+
state: T,
|
|
54
|
+
updateState: (currentState: T, action: N) => T
|
|
55
|
+
): [T, (action: N) => void] => {
|
|
56
|
+
const [optimisticState, setOptimisticState] = useState(state)
|
|
57
|
+
if (actions.size > 0) {
|
|
58
|
+
Promise.all(actions).finally(() => {
|
|
59
|
+
setOptimisticState(state)
|
|
60
|
+
})
|
|
61
|
+
} else {
|
|
62
|
+
setOptimisticState(state)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const cb = useCallback((newData: N) => {
|
|
66
|
+
setOptimisticState((currentState) => updateState(currentState, newData))
|
|
67
|
+
}, [])
|
|
68
|
+
|
|
69
|
+
return [optimisticState, cb]
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* This hook returns the current state and a function to update the state by form action
|
|
74
|
+
* @param fn
|
|
75
|
+
* @param initialState
|
|
76
|
+
* @param permalink
|
|
77
|
+
* @returns [T, (data: FormData) => void]
|
|
78
|
+
*/
|
|
79
|
+
export const useActionState = <T>(
|
|
80
|
+
fn: Function,
|
|
81
|
+
initialState: T,
|
|
82
|
+
permalink?: string
|
|
83
|
+
): [T, Function] => {
|
|
84
|
+
const [state, setState] = useState(initialState)
|
|
85
|
+
const actionState = async (data: FormData) => {
|
|
86
|
+
setState(await fn(state, data))
|
|
87
|
+
}
|
|
88
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
89
|
+
;(actionState as any)[PERMALINK] = permalink
|
|
90
|
+
return [state, actionState]
|
|
91
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module
|
|
3
|
+
* This module provides APIs for `acryl-router/jsx/dom`.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { isValidElement, reactAPICompatVersion, shallowEqual } from '../base.ts'
|
|
7
|
+
import type { Child, DOMAttributes, JSX, JSXNode, Props, FC, MemorableFC } from '../base.ts'
|
|
8
|
+
import { Children } from '../children.ts'
|
|
9
|
+
import { DOM_MEMO } from '../constants.ts'
|
|
10
|
+
import { useContext } from '../context.ts'
|
|
11
|
+
import {
|
|
12
|
+
createRef,
|
|
13
|
+
forwardRef,
|
|
14
|
+
startTransition,
|
|
15
|
+
startViewTransition,
|
|
16
|
+
use,
|
|
17
|
+
useCallback,
|
|
18
|
+
useDebugValue,
|
|
19
|
+
useDeferredValue,
|
|
20
|
+
useEffect,
|
|
21
|
+
useId,
|
|
22
|
+
useImperativeHandle,
|
|
23
|
+
useInsertionEffect,
|
|
24
|
+
useLayoutEffect,
|
|
25
|
+
useMemo,
|
|
26
|
+
useReducer,
|
|
27
|
+
useRef,
|
|
28
|
+
useState,
|
|
29
|
+
useSyncExternalStore,
|
|
30
|
+
useTransition,
|
|
31
|
+
useViewTransition,
|
|
32
|
+
} from '../hooks/index.ts'
|
|
33
|
+
import { ErrorBoundary, Suspense } from './components.ts'
|
|
34
|
+
import { createContext } from './context.ts'
|
|
35
|
+
import { useActionState, useFormStatus, useOptimistic } from './hooks/index.ts'
|
|
36
|
+
import { Fragment, jsx } from './jsx-runtime.ts'
|
|
37
|
+
import { createPortal, flushSync } from './render.ts'
|
|
38
|
+
|
|
39
|
+
export { render } from './render.ts'
|
|
40
|
+
|
|
41
|
+
const createElement = (
|
|
42
|
+
tag: string | ((props: Props) => JSXNode),
|
|
43
|
+
props: Props | null,
|
|
44
|
+
...children: Child[]
|
|
45
|
+
): JSXNode => {
|
|
46
|
+
const jsxProps: Props = props ? { ...props } : {}
|
|
47
|
+
if (children.length) {
|
|
48
|
+
jsxProps.children = children.length === 1 ? children[0] : children
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
let key = undefined
|
|
52
|
+
if ('key' in jsxProps) {
|
|
53
|
+
key = jsxProps.key
|
|
54
|
+
delete jsxProps.key
|
|
55
|
+
}
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
57
|
+
return jsx(tag, jsxProps, key) as any
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const cloneElement = <T extends JSXNode | JSX.Element>(
|
|
61
|
+
element: T,
|
|
62
|
+
props: Props,
|
|
63
|
+
...children: Child[]
|
|
64
|
+
): T => {
|
|
65
|
+
return jsx(
|
|
66
|
+
(element as JSXNode).tag,
|
|
67
|
+
{
|
|
68
|
+
...(element as JSXNode).props,
|
|
69
|
+
...props,
|
|
70
|
+
children: children.length ? children : (element as JSXNode).props.children,
|
|
71
|
+
},
|
|
72
|
+
(element as JSXNode).key
|
|
73
|
+
) as T
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const memo = <T>(
|
|
77
|
+
component: FC<T>,
|
|
78
|
+
propsAreEqual: (prevProps: Readonly<T>, nextProps: Readonly<T>) => boolean = shallowEqual
|
|
79
|
+
): FC<T> => {
|
|
80
|
+
const wrapper = ((props: T) => component(props)) as MemorableFC<T>
|
|
81
|
+
wrapper[DOM_MEMO] = propsAreEqual
|
|
82
|
+
return wrapper as FC<T>
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export {
|
|
86
|
+
reactAPICompatVersion as version,
|
|
87
|
+
createElement as jsx,
|
|
88
|
+
useState,
|
|
89
|
+
useEffect,
|
|
90
|
+
useRef,
|
|
91
|
+
useCallback,
|
|
92
|
+
use,
|
|
93
|
+
startTransition,
|
|
94
|
+
useTransition,
|
|
95
|
+
useDeferredValue,
|
|
96
|
+
startViewTransition,
|
|
97
|
+
useViewTransition,
|
|
98
|
+
useMemo,
|
|
99
|
+
useLayoutEffect,
|
|
100
|
+
useInsertionEffect,
|
|
101
|
+
useReducer,
|
|
102
|
+
useId,
|
|
103
|
+
useDebugValue,
|
|
104
|
+
createRef,
|
|
105
|
+
forwardRef,
|
|
106
|
+
useImperativeHandle,
|
|
107
|
+
useSyncExternalStore,
|
|
108
|
+
useFormStatus,
|
|
109
|
+
useActionState,
|
|
110
|
+
useOptimistic,
|
|
111
|
+
Suspense,
|
|
112
|
+
ErrorBoundary,
|
|
113
|
+
createContext,
|
|
114
|
+
useContext,
|
|
115
|
+
memo,
|
|
116
|
+
isValidElement,
|
|
117
|
+
createElement,
|
|
118
|
+
cloneElement,
|
|
119
|
+
Children,
|
|
120
|
+
Fragment,
|
|
121
|
+
Fragment as StrictMode,
|
|
122
|
+
flushSync,
|
|
123
|
+
createPortal,
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export type { DOMAttributes }
|
|
127
|
+
|
|
128
|
+
export default {
|
|
129
|
+
version: reactAPICompatVersion,
|
|
130
|
+
useState,
|
|
131
|
+
useEffect,
|
|
132
|
+
useRef,
|
|
133
|
+
useCallback,
|
|
134
|
+
use,
|
|
135
|
+
startTransition,
|
|
136
|
+
useTransition,
|
|
137
|
+
useDeferredValue,
|
|
138
|
+
startViewTransition,
|
|
139
|
+
useViewTransition,
|
|
140
|
+
useMemo,
|
|
141
|
+
useLayoutEffect,
|
|
142
|
+
useInsertionEffect,
|
|
143
|
+
useReducer,
|
|
144
|
+
useId,
|
|
145
|
+
useDebugValue,
|
|
146
|
+
createRef,
|
|
147
|
+
forwardRef,
|
|
148
|
+
useImperativeHandle,
|
|
149
|
+
useSyncExternalStore,
|
|
150
|
+
useFormStatus,
|
|
151
|
+
useActionState,
|
|
152
|
+
useOptimistic,
|
|
153
|
+
Suspense,
|
|
154
|
+
ErrorBoundary,
|
|
155
|
+
createContext,
|
|
156
|
+
useContext,
|
|
157
|
+
memo,
|
|
158
|
+
isValidElement,
|
|
159
|
+
createElement,
|
|
160
|
+
cloneElement,
|
|
161
|
+
Children,
|
|
162
|
+
Fragment,
|
|
163
|
+
StrictMode: Fragment,
|
|
164
|
+
flushSync,
|
|
165
|
+
createPortal,
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export type { Context } from '../context.ts'
|
|
169
|
+
|
|
170
|
+
export type * from '../types.ts'
|