acrylblends 0.6.2 → 0.6.3

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.
Files changed (181) hide show
  1. package/README.md +4 -1
  2. package/docs/framework/README.md +3 -2
  3. package/docs/framework/UPSTREAM.md +1 -1
  4. package/docs/framework/cordis/acryl-in-a-cordis-app.md +6 -0
  5. package/docs/framework/getting-started/basic.md +1 -0
  6. package/docs/framework/getting-started/desktop.md +41 -0
  7. package/docs/framework/guides/jsx-dom.md +0 -3
  8. package/docs/framework/guides/jsx.md +0 -3
  9. package/docs/framework/helpers/css.md +0 -3
  10. package/docs/framework/upstream.json +3 -3
  11. package/lib/accepts.d.ts +1 -1
  12. package/lib/acryl-base.d.ts +1 -1
  13. package/lib/adapter.d.ts +1 -1
  14. package/lib/{app-BdrVHBlJ.d.ts → app-wFwpg-bt.d.ts} +1 -1
  15. package/lib/base-BpQy2Rk7.d.ts +783 -0
  16. package/lib/base-ddiVmiE7.js +721 -0
  17. package/lib/basic-auth.d.ts +1 -1
  18. package/lib/bearer-auth.d.ts +1 -1
  19. package/lib/body-limit.d.ts +1 -1
  20. package/lib/cache.d.ts +1 -1
  21. package/lib/client.d.ts +2 -2
  22. package/lib/combine.d.ts +1 -1
  23. package/lib/common-D8Z4JRCw.d.ts +46 -0
  24. package/lib/components-Ce5FRyHU.js +268 -0
  25. package/lib/components-DYZdxJIJ.js +24 -0
  26. package/lib/compress.d.ts +1 -1
  27. package/lib/conninfo.d.ts +2 -2
  28. package/lib/constants-BR9jM9BC.js +9 -0
  29. package/lib/{context-B5Y1lLha.d.ts → context-DVQBjuns.d.ts} +1 -1
  30. package/lib/context-DxFdY_un.d.ts +250 -0
  31. package/lib/context-storage.d.ts +1 -1
  32. package/lib/{cookie-D9_nQbsM.d.ts → cookie-CCelEqky.d.ts} +1 -1
  33. package/lib/cookie.d.ts +3 -3
  34. package/lib/cors.d.ts +1 -1
  35. package/lib/csrf.d.ts +1 -1
  36. package/lib/css-D2jb7X8b.js +320 -0
  37. package/lib/css.d.ts +82 -0
  38. package/lib/css.js +134 -0
  39. package/lib/dev.d.ts +2 -2
  40. package/lib/etag.d.ts +1 -1
  41. package/lib/factory.d.ts +2 -2
  42. package/lib/hooks-Bq5q9IMl.js +762 -0
  43. package/lib/html-SllAe0YT.d.ts +46 -0
  44. package/lib/html.d.ts +1 -1
  45. package/lib/index-C850MeBA.d.ts +94 -0
  46. package/lib/{index-m12zcmph.d.ts → index-CUTfU69R.d.ts} +3 -3
  47. package/lib/{index-DtEoak1i.d.ts → index-Cqcdluyn.d.ts} +2 -2
  48. package/lib/{index-Kqou8Fjh.d.ts → index-CsvB-F9j.d.ts} +2 -2
  49. package/lib/index.d.ts +4 -4
  50. package/lib/ip-restriction.d.ts +2 -2
  51. package/lib/jsx/dom/client.d.ts +30 -0
  52. package/lib/jsx/dom/client.js +49 -0
  53. package/lib/jsx/dom/css.d.ts +84 -0
  54. package/lib/jsx/dom/css.js +2 -0
  55. package/lib/jsx/dom/jsx-dev-runtime.d.ts +3 -0
  56. package/lib/jsx/dom/jsx-dev-runtime.js +2 -0
  57. package/lib/jsx/dom/jsx-runtime.d.ts +3 -0
  58. package/lib/jsx/dom/jsx-runtime.js +2 -0
  59. package/lib/jsx/dom/server.d.ts +105 -0
  60. package/lib/jsx/dom/server.js +37 -0
  61. package/lib/jsx/dom.d.ts +5 -0
  62. package/lib/jsx/dom.js +74 -0
  63. package/lib/jsx/jsx-dev-runtime.d.ts +6 -0
  64. package/lib/jsx/jsx-dev-runtime.js +14 -0
  65. package/lib/jsx/jsx-runtime.d.ts +10 -0
  66. package/lib/jsx/jsx-runtime.js +30 -0
  67. package/lib/jsx/streaming.d.ts +2 -0
  68. package/lib/jsx/streaming.js +2 -0
  69. package/lib/jsx-dev-runtime-B22O-Npk.d.ts +7 -0
  70. package/lib/jsx-dev-runtime-kAhR_4C7.js +354 -0
  71. package/lib/jsx-runtime-BVVgDSdq.d.ts +1 -0
  72. package/lib/jsx.d.ts +3 -0
  73. package/lib/jsx.js +47 -0
  74. package/lib/jwk.d.ts +4 -4
  75. package/lib/{jwt-BA65QhnJ.d.ts → jwt-BARhotDz.d.ts} +1 -1
  76. package/lib/jwt.d.ts +4 -4
  77. package/lib/language.d.ts +1 -1
  78. package/lib/logger.d.ts +1 -1
  79. package/lib/loopback-only.d.ts +1 -1
  80. package/lib/method-not-allowed.d.ts +2 -2
  81. package/lib/method-override.d.ts +2 -2
  82. package/lib/mount.d.ts +1 -1
  83. package/lib/node-server/conninfo.d.ts +1 -1
  84. package/lib/node-server/serve-static.d.ts +1 -1
  85. package/lib/node-server/serve-static.js +1 -1
  86. package/lib/node-server.d.ts +1 -1
  87. package/lib/node-server.js +1 -1
  88. package/lib/powered-by.d.ts +1 -1
  89. package/lib/pretty-json.d.ts +1 -1
  90. package/lib/proxy.d.ts +1 -1
  91. package/lib/quick.d.ts +1 -1
  92. package/lib/request-id.d.ts +1 -1
  93. package/lib/request.d.ts +1 -1
  94. package/lib/route.d.ts +1 -1
  95. package/lib/schema-validator.d.ts +1 -1
  96. package/lib/secure-headers.d.ts +1 -1
  97. package/lib/{serve-static-Dw_m6KxR.js → serve-static-Cw23shXv.js} +1 -0
  98. package/lib/serve-static.d.ts +1 -1
  99. package/lib/streaming.d.ts +1 -1
  100. package/lib/testing.d.ts +4 -4
  101. package/lib/timeout.d.ts +1 -1
  102. package/lib/timing.d.ts +1 -1
  103. package/lib/tiny.d.ts +1 -1
  104. package/lib/trailing-slash.d.ts +1 -1
  105. package/lib/{types-Bd29gh2o.d.ts → types-CQiGmsWW.d.ts} +3 -3
  106. package/lib/{types-D9DEXMjE.d.ts → types-Lqx5BxQF.d.ts} +8 -1
  107. package/lib/{types-ZM9gIiKh.d.ts → types-nEL8VPDC.d.ts} +1 -1
  108. package/lib/types.d.ts +1 -1
  109. package/lib/utils/body.d.ts +1 -1
  110. package/lib/utils/cookie.d.ts +1 -1
  111. package/lib/utils/crypto.d.ts +1 -1
  112. package/lib/utils/html.d.ts +1 -45
  113. package/lib/utils/ipaddr.d.ts +1 -1
  114. package/lib/utils/jwt.d.ts +1 -1
  115. package/lib/utils/types.d.ts +2 -2
  116. package/lib/validator.d.ts +2 -2
  117. package/lib/ws.d.ts +1 -1
  118. package/package.json +45 -1
  119. package/plugins/acryl-inspect/upstream.json +1 -1
  120. package/plugins/acryl-node-server/upstream.json +1 -1
  121. package/plugins/acryl-router/src/core/helper/css/common.case.test.tsx +506 -0
  122. package/plugins/acryl-router/src/core/helper/css/common.ts +337 -0
  123. package/plugins/acryl-router/src/core/helper/css/index.test.tsx +678 -0
  124. package/plugins/acryl-router/src/core/helper/css/index.ts +262 -0
  125. package/plugins/acryl-router/src/core/helper/streaming/sse.test.tsx +557 -0
  126. package/plugins/acryl-router/src/core/jsx/base.test.tsx +97 -0
  127. package/plugins/acryl-router/src/core/jsx/base.ts +490 -0
  128. package/plugins/acryl-router/src/core/jsx/children.test.ts +52 -0
  129. package/plugins/acryl-router/src/core/jsx/children.ts +20 -0
  130. package/plugins/acryl-router/src/core/jsx/components.test.tsx +936 -0
  131. package/plugins/acryl-router/src/core/jsx/components.ts +257 -0
  132. package/plugins/acryl-router/src/core/jsx/constants.ts +6 -0
  133. package/plugins/acryl-router/src/core/jsx/context-isolation.test.ts +655 -0
  134. package/plugins/acryl-router/src/core/jsx/context.ts +266 -0
  135. package/plugins/acryl-router/src/core/jsx/dom/client.test.tsx +128 -0
  136. package/plugins/acryl-router/src/core/jsx/dom/client.ts +89 -0
  137. package/plugins/acryl-router/src/core/jsx/dom/components.test.tsx +330 -0
  138. package/plugins/acryl-router/src/core/jsx/dom/components.ts +39 -0
  139. package/plugins/acryl-router/src/core/jsx/dom/context.test.tsx +184 -0
  140. package/plugins/acryl-router/src/core/jsx/dom/context.ts +52 -0
  141. package/plugins/acryl-router/src/core/jsx/dom/css.test.tsx +149 -0
  142. package/plugins/acryl-router/src/core/jsx/dom/css.ts +263 -0
  143. package/plugins/acryl-router/src/core/jsx/dom/hooks/index.test.tsx +172 -0
  144. package/plugins/acryl-router/src/core/jsx/dom/hooks/index.ts +91 -0
  145. package/plugins/acryl-router/src/core/jsx/dom/index.test.tsx +3681 -0
  146. package/plugins/acryl-router/src/core/jsx/dom/index.ts +170 -0
  147. package/plugins/acryl-router/src/core/jsx/dom/intrinsic-element/components.test.tsx +1344 -0
  148. package/plugins/acryl-router/src/core/jsx/dom/intrinsic-element/components.ts +438 -0
  149. package/plugins/acryl-router/src/core/jsx/dom/jsx-dev-runtime.ts +23 -0
  150. package/plugins/acryl-router/src/core/jsx/dom/jsx-runtime.ts +8 -0
  151. package/plugins/acryl-router/src/core/jsx/dom/render.ts +879 -0
  152. package/plugins/acryl-router/src/core/jsx/dom/server.test.tsx +199 -0
  153. package/plugins/acryl-router/src/core/jsx/dom/server.ts +76 -0
  154. package/plugins/acryl-router/src/core/jsx/dom/utils.ts +7 -0
  155. package/plugins/acryl-router/src/core/jsx/hooks/dom.test.tsx +859 -0
  156. package/plugins/acryl-router/src/core/jsx/hooks/index.ts +437 -0
  157. package/plugins/acryl-router/src/core/jsx/hooks/string.test.tsx +40 -0
  158. package/plugins/acryl-router/src/core/jsx/index.test.tsx +1744 -0
  159. package/plugins/acryl-router/src/core/jsx/index.ts +115 -0
  160. package/plugins/acryl-router/src/core/jsx/intrinsic-element/common.ts +23 -0
  161. package/plugins/acryl-router/src/core/jsx/intrinsic-element/components.test.tsx +666 -0
  162. package/plugins/acryl-router/src/core/jsx/intrinsic-element/components.ts +210 -0
  163. package/plugins/acryl-router/src/core/jsx/intrinsic-elements.ts +938 -0
  164. package/plugins/acryl-router/src/core/jsx/jsx-dev-runtime.ts +26 -0
  165. package/plugins/acryl-router/src/core/jsx/jsx-runtime.test.tsx +85 -0
  166. package/plugins/acryl-router/src/core/jsx/jsx-runtime.ts +51 -0
  167. package/plugins/acryl-router/src/core/jsx/streaming.test.tsx +1281 -0
  168. package/plugins/acryl-router/src/core/jsx/streaming.ts +231 -0
  169. package/plugins/acryl-router/src/core/jsx/types.ts +41 -0
  170. package/plugins/acryl-router/src/core/jsx/utils.test.ts +366 -0
  171. package/plugins/acryl-router/src/core/jsx/utils.ts +202 -0
  172. package/plugins/acryl-router/src/core/utils/types.ts +6 -0
  173. package/plugins/acryl-router/src/helpers/index.ts +1 -0
  174. package/plugins/acryl-router/tests/jsx.spec.tsx +63 -0
  175. package/plugins/acryl-router/upstream.json +3 -3
  176. package/plugins/acryl-router-http/upstream.json +1 -1
  177. package/plugins/acryl-state/upstream.json +1 -1
  178. package/plugins/desktop/upstream.json +1 -1
  179. package/plugins/desktop-web/upstream.json +1 -1
  180. package/plugins/save/plugin.json +1 -1
  181. package/templates/todo/upstream.json +1 -1
@@ -0,0 +1,262 @@
1
+ /**
2
+ * @module
3
+ * css Helper for Acryl.
4
+ */
5
+
6
+ import { raw } from '../html/index.ts'
7
+ import { DOM_RENDERER } from '../../jsx/constants.ts'
8
+ import { createCssJsxDomObjects } from '../../jsx/dom/css.ts'
9
+ import { escapeToBuffer } from '../../utils/html.ts'
10
+ import type { HtmlEscapedCallback, HtmlEscapedString } from '../../utils/html.ts'
11
+ import type {
12
+ ClassNameSlug,
13
+ CssClassName as CssClassNameCommon,
14
+ CssVariableType,
15
+ OnInvalidSlug,
16
+ } from './common.ts'
17
+ import {
18
+ CLASS_NAME,
19
+ DEFAULT_STYLE_ID,
20
+ PSEUDO_GLOBAL_SELECTOR,
21
+ SELECTOR,
22
+ SELECTORS,
23
+ STYLE_STRING,
24
+ cssCommon,
25
+ cxCommon,
26
+ keyframesCommon,
27
+ viewTransitionCommon,
28
+ } from './common.ts'
29
+ export { rawCssString } from './common.ts'
30
+ export type { ClassNameSlug, OnInvalidSlug } from './common.ts'
31
+
32
+ type CssClassName = HtmlEscapedString & CssClassNameCommon
33
+
34
+ type usedClassNameData = [
35
+ Record<string, string>, // class name to add
36
+ Record<string, true>, // class name already added
37
+ ]
38
+
39
+ interface CssType {
40
+ (strings: TemplateStringsArray, ...values: CssVariableType[]): Promise<string>
41
+ }
42
+
43
+ interface CxType {
44
+ (
45
+ ...args: (CssClassName | Promise<string> | string | boolean | null | undefined)[]
46
+ ): Promise<string>
47
+ }
48
+
49
+ interface KeyframesType {
50
+ (strings: TemplateStringsArray, ...values: CssVariableType[]): CssClassNameCommon
51
+ }
52
+
53
+ interface ViewTransitionType {
54
+ (strings: TemplateStringsArray, ...values: CssVariableType[]): Promise<string>
55
+ (content: Promise<string>): Promise<string>
56
+ (): Promise<string>
57
+ }
58
+
59
+ interface StyleType {
60
+ (args?: { children?: Promise<string>; nonce?: string }): HtmlEscapedString
61
+ }
62
+
63
+ /**
64
+ * @experimental
65
+ * `createCssContext` is an experimental feature.
66
+ * The API might be changed.
67
+ *
68
+ * @param options.id - The ID for the style element
69
+ * @param options.classNameSlug - Optional function to customize generated CSS class names
70
+ * @param options.onInvalidSlug - Optional callback function called when an invalid slug is returned from ClassNameSlug
71
+ */
72
+ export const createCssContext = ({
73
+ id,
74
+ classNameSlug,
75
+ onInvalidSlug,
76
+ }: {
77
+ id: Readonly<string>
78
+ classNameSlug?: ClassNameSlug
79
+ onInvalidSlug?: OnInvalidSlug
80
+ }): DefaultContextType => {
81
+ const [cssJsxDomObject, StyleRenderToDom] = createCssJsxDomObjects({ id })
82
+
83
+ const contextMap: WeakMap<object, usedClassNameData> = new WeakMap()
84
+ const nonceMap: WeakMap<object, string | undefined> = new WeakMap()
85
+
86
+ const replaceStyleRe = new RegExp(`(<style id="${id}"(?: nonce="[^"]*")?>.*?)(</style>)`, 's')
87
+
88
+ const newCssClassNameObject = (cssClassName: CssClassNameCommon): Promise<string> => {
89
+ const appendStyle: HtmlEscapedCallback = ({ buffer, context }): Promise<string> | undefined => {
90
+ const [toAdd, added] = contextMap.get(context) as usedClassNameData
91
+ const names = Object.keys(toAdd)
92
+
93
+ if (!names.length) {
94
+ return
95
+ }
96
+
97
+ let stylesStr = ''
98
+ names.forEach((className) => {
99
+ added[className] = true
100
+ stylesStr += className.startsWith(PSEUDO_GLOBAL_SELECTOR)
101
+ ? toAdd[className]
102
+ : `${className[0] === '@' ? '' : '.'}${className}{${toAdd[className]}}`
103
+ })
104
+ contextMap.set(context, [{}, added])
105
+
106
+ if (buffer && replaceStyleRe.test(buffer[0])) {
107
+ buffer[0] = buffer[0].replace(replaceStyleRe, (_, pre, post) => `${pre}${stylesStr}${post}`)
108
+ return
109
+ }
110
+
111
+ const nonce = nonceMap.get(context)
112
+ const appendStyleScript = `<script${
113
+ nonce ? ` nonce="${nonce}"` : ''
114
+ }>document.querySelector('#${id}').textContent+=${JSON.stringify(stylesStr)}</script>`
115
+
116
+ if (buffer) {
117
+ buffer[0] = `${appendStyleScript}${buffer[0]}`
118
+ return
119
+ }
120
+
121
+ return Promise.resolve(appendStyleScript)
122
+ }
123
+
124
+ const addClassNameToContext: HtmlEscapedCallback = ({ context }) => {
125
+ if (!contextMap.has(context)) {
126
+ contextMap.set(context, [{}, {}])
127
+ }
128
+ const [toAdd, added] = contextMap.get(context) as usedClassNameData
129
+ let allAdded = true
130
+ if (!added[cssClassName[SELECTOR]]) {
131
+ allAdded = false
132
+ toAdd[cssClassName[SELECTOR]] = cssClassName[STYLE_STRING]
133
+ }
134
+ cssClassName[SELECTORS].forEach(
135
+ ({ [CLASS_NAME]: className, [STYLE_STRING]: styleString }) => {
136
+ if (!added[className]) {
137
+ allAdded = false
138
+ toAdd[className] = styleString
139
+ }
140
+ }
141
+ )
142
+ if (allAdded) {
143
+ return
144
+ }
145
+
146
+ return Promise.resolve(raw('', [appendStyle]))
147
+ }
148
+
149
+ // external class names from cx() are untrusted but the result is marked isEscaped,
150
+ // so escape it here. skip the buffer when there is nothing to escape.
151
+ const rawClassName = cssClassName[CLASS_NAME]
152
+ let escapedClassName = rawClassName
153
+ if (/[&<>'"]/.test(rawClassName)) {
154
+ const escapedBuffer: [string] = ['']
155
+ escapeToBuffer(rawClassName, escapedBuffer)
156
+ escapedClassName = escapedBuffer[0]
157
+ }
158
+ const className = new String(escapedClassName) as CssClassName
159
+ Object.assign(className, cssClassName)
160
+ ;(className as HtmlEscapedString).isEscaped = true
161
+ ;(className as HtmlEscapedString).callbacks = [addClassNameToContext]
162
+ const promise = Promise.resolve(className)
163
+ Object.assign(promise, cssClassName)
164
+
165
+ promise.toString = cssJsxDomObject.toString
166
+ return promise
167
+ }
168
+
169
+ const css: CssType = (strings, ...values) => {
170
+ return newCssClassNameObject(cssCommon(strings, values, classNameSlug, onInvalidSlug))
171
+ }
172
+
173
+ const cx: CxType = (...args) => {
174
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
175
+ args = cxCommon(args as any) as any
176
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
177
+ return css(Array(args.length).fill('') as any, ...args)
178
+ }
179
+
180
+ const keyframes: KeyframesType = (strings, ...values) =>
181
+ keyframesCommon(strings, values, classNameSlug, onInvalidSlug)
182
+
183
+ const viewTransition: ViewTransitionType = ((
184
+ strings: TemplateStringsArray | Promise<string> | undefined,
185
+ ...values: CssVariableType[]
186
+ ) => {
187
+ return newCssClassNameObject(
188
+ viewTransitionCommon(strings as any, values, classNameSlug, onInvalidSlug) // eslint-disable-line @typescript-eslint/no-explicit-any
189
+ )
190
+ }) as ViewTransitionType
191
+
192
+ const Style: StyleType = ({ children, nonce } = {}) =>
193
+ raw(
194
+ `<style id="${id}"${nonce ? ` nonce="${nonce}"` : ''}>${
195
+ children ? (children as unknown as CssClassName)[STYLE_STRING] : ''
196
+ }</style>`,
197
+ [
198
+ ({ context }) => {
199
+ nonceMap.set(context, nonce)
200
+ return undefined
201
+ },
202
+ ]
203
+ )
204
+
205
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
206
+ ;(Style as any)[DOM_RENDERER] = StyleRenderToDom
207
+
208
+ return {
209
+ css,
210
+ cx,
211
+ keyframes,
212
+ viewTransition: viewTransition as ViewTransitionType,
213
+ Style,
214
+ }
215
+ }
216
+
217
+ interface DefaultContextType {
218
+ css: CssType
219
+ cx: CxType
220
+ keyframes: KeyframesType
221
+ viewTransition: ViewTransitionType
222
+ Style: StyleType
223
+ }
224
+
225
+ const defaultContext: DefaultContextType = createCssContext({
226
+ id: DEFAULT_STYLE_ID,
227
+ })
228
+
229
+ /**
230
+ * @experimental
231
+ * `css` is an experimental feature.
232
+ * The API might be changed.
233
+ */
234
+ export const css = defaultContext.css
235
+
236
+ /**
237
+ * @experimental
238
+ * `cx` is an experimental feature.
239
+ * The API might be changed.
240
+ */
241
+ export const cx = defaultContext.cx
242
+
243
+ /**
244
+ * @experimental
245
+ * `keyframes` is an experimental feature.
246
+ * The API might be changed.
247
+ */
248
+ export const keyframes = defaultContext.keyframes
249
+
250
+ /**
251
+ * @experimental
252
+ * `viewTransition` is an experimental feature.
253
+ * The API might be changed.
254
+ */
255
+ export const viewTransition = defaultContext.viewTransition
256
+
257
+ /**
258
+ * @experimental
259
+ * `Style` is an experimental feature.
260
+ * The API might be changed.
261
+ */
262
+ export const Style = defaultContext.Style