@react-x11/components 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -38
- package/dist/charts/node.d.ts +12 -2
- package/dist/charts/node.d.ts.map +1 -1
- package/dist/charts/node.js +50 -16
- package/dist/charts/node.js.map +1 -1
- package/dist/charts/render.d.ts +12 -3
- package/dist/charts/render.d.ts.map +1 -1
- package/dist/charts/render.js +94 -25
- package/dist/charts/render.js.map +1 -1
- package/dist/code/index.d.ts.map +1 -1
- package/dist/code/index.js +3 -1
- package/dist/code/index.js.map +1 -1
- package/dist/code-editor/completion.d.ts.map +1 -1
- package/dist/code-editor/completion.js +3 -2
- package/dist/code-editor/completion.js.map +1 -1
- package/dist/code-editor/index.d.ts.map +1 -1
- package/dist/code-editor/index.js +19 -0
- package/dist/code-editor/index.js.map +1 -1
- package/dist/code-editor/node.d.ts +177 -7
- package/dist/code-editor/node.d.ts.map +1 -1
- package/dist/code-editor/node.js +1329 -164
- package/dist/code-editor/node.js.map +1 -1
- package/dist/code-language/languages/glsl.d.ts.map +1 -1
- package/dist/code-language/languages/glsl.js +10 -2
- package/dist/code-language/languages/glsl.js.map +1 -1
- package/dist/code-language/languages/javascript.d.ts.map +1 -1
- package/dist/code-language/languages/javascript.js +18 -3
- package/dist/code-language/languages/javascript.js.map +1 -1
- package/dist/code-language/languages/json.d.ts.map +1 -1
- package/dist/code-language/languages/json.js +10 -2
- package/dist/code-language/languages/json.js.map +1 -1
- package/dist/code-language/languages/shell.d.ts.map +1 -1
- package/dist/code-language/languages/shell.js +10 -2
- package/dist/code-language/languages/shell.js.map +1 -1
- package/dist/code-language/languages/sql.d.ts.map +1 -1
- package/dist/code-language/languages/sql.js +20 -2
- package/dist/code-language/languages/sql.js.map +1 -1
- package/dist/code-language/stream.d.ts +22 -0
- package/dist/code-language/stream.d.ts.map +1 -1
- package/dist/code-language/stream.js +259 -9
- package/dist/code-language/stream.js.map +1 -1
- package/dist/code-language/types.d.ts +5 -4
- package/dist/code-language/types.d.ts.map +1 -1
- package/dist/codeblock/index.d.ts +13 -2
- package/dist/codeblock/index.d.ts.map +1 -1
- package/dist/codeblock/index.js +20 -3
- package/dist/codeblock/index.js.map +1 -1
- package/dist/embed/client.d.ts +48 -3
- package/dist/embed/client.d.ts.map +1 -1
- package/dist/embed/client.js +79 -5
- package/dist/embed/client.js.map +1 -1
- package/dist/embed/index.d.ts +1 -1
- package/dist/embed/index.d.ts.map +1 -1
- package/dist/embed/index.js +1 -1
- package/dist/embed/index.js.map +1 -1
- package/dist/flow/draw.d.ts +50 -0
- package/dist/flow/draw.d.ts.map +1 -1
- package/dist/flow/draw.js +132 -33
- package/dist/flow/draw.js.map +1 -1
- package/dist/flow/gl/color.d.ts +13 -0
- package/dist/flow/gl/color.d.ts.map +1 -0
- package/dist/flow/gl/color.js +82 -0
- package/dist/flow/gl/color.js.map +1 -0
- package/dist/flow/gl/index.d.ts +60 -0
- package/dist/flow/gl/index.d.ts.map +1 -0
- package/dist/flow/gl/index.js +283 -0
- package/dist/flow/gl/index.js.map +1 -0
- package/dist/flow/gl/pack.d.ts +133 -0
- package/dist/flow/gl/pack.d.ts.map +1 -0
- package/dist/flow/gl/pack.js +408 -0
- package/dist/flow/gl/pack.js.map +1 -0
- package/dist/flow/gl/renderer.d.ts +95 -0
- package/dist/flow/gl/renderer.d.ts.map +1 -0
- package/dist/flow/gl/renderer.js +459 -0
- package/dist/flow/gl/renderer.js.map +1 -0
- package/dist/flow/gl/shaders.d.ts +79 -0
- package/dist/flow/gl/shaders.d.ts.map +1 -0
- package/dist/flow/gl/shaders.js +346 -0
- package/dist/flow/gl/shaders.js.map +1 -0
- package/dist/flow/gl/text.d.ts +318 -0
- package/dist/flow/gl/text.d.ts.map +1 -0
- package/dist/flow/gl/text.js +1103 -0
- package/dist/flow/gl/text.js.map +1 -0
- package/dist/flow/index.d.ts +1 -1
- package/dist/flow/index.d.ts.map +1 -1
- package/dist/flow/index.js +619 -64
- package/dist/flow/index.js.map +1 -1
- package/dist/flow/node.d.ts +621 -72
- package/dist/flow/node.d.ts.map +1 -1
- package/dist/flow/node.js +2253 -1018
- package/dist/flow/node.js.map +1 -1
- package/dist/flow/paint.d.ts +35 -0
- package/dist/flow/paint.d.ts.map +1 -0
- package/dist/flow/paint.js +393 -0
- package/dist/flow/paint.js.map +1 -0
- package/dist/flow/paths.d.ts +14 -0
- package/dist/flow/paths.d.ts.map +1 -1
- package/dist/flow/paths.js +45 -19
- package/dist/flow/paths.js.map +1 -1
- package/dist/flow/scene.d.ts +584 -0
- package/dist/flow/scene.d.ts.map +1 -0
- package/dist/flow/scene.js +1453 -0
- package/dist/flow/scene.js.map +1 -0
- package/dist/flow/types.d.ts +111 -1
- package/dist/flow/types.d.ts.map +1 -1
- package/dist/html/controls.d.ts +28 -0
- package/dist/html/controls.d.ts.map +1 -1
- package/dist/html/controls.js +52 -2
- package/dist/html/controls.js.map +1 -1
- package/dist/html/css/calc.d.ts +14 -0
- package/dist/html/css/calc.d.ts.map +1 -0
- package/dist/html/css/calc.js +344 -0
- package/dist/html/css/calc.js.map +1 -0
- package/dist/html/css/cascade.d.ts +240 -6
- package/dist/html/css/cascade.d.ts.map +1 -1
- package/dist/html/css/cascade.js +1327 -66
- package/dist/html/css/cascade.js.map +1 -1
- package/dist/html/css/color.d.ts +23 -0
- package/dist/html/css/color.d.ts.map +1 -0
- package/dist/html/css/color.js +740 -0
- package/dist/html/css/color.js.map +1 -0
- package/dist/html/css/content.d.ts +92 -0
- package/dist/html/css/content.d.ts.map +1 -0
- package/dist/html/css/content.js +388 -0
- package/dist/html/css/content.js.map +1 -0
- package/dist/html/css/counter-styles.d.ts +76 -0
- package/dist/html/css/counter-styles.d.ts.map +1 -0
- package/dist/html/css/counter-styles.js +893 -0
- package/dist/html/css/counter-styles.js.map +1 -0
- package/dist/html/css/decode.d.ts +12 -0
- package/dist/html/css/decode.d.ts.map +1 -0
- package/dist/html/css/decode.js +116 -0
- package/dist/html/css/decode.js.map +1 -0
- package/dist/html/css/parse.d.ts +110 -10
- package/dist/html/css/parse.d.ts.map +1 -1
- package/dist/html/css/parse.js +1473 -180
- package/dist/html/css/parse.js.map +1 -1
- package/dist/html/css/style.d.ts +498 -15
- package/dist/html/css/style.d.ts.map +1 -1
- package/dist/html/css/style.js +3698 -206
- package/dist/html/css/style.js.map +1 -1
- package/dist/html/css/ua.d.ts.map +1 -1
- package/dist/html/css/ua.js +57 -11
- package/dist/html/css/ua.js.map +1 -1
- package/dist/html/css/values.d.ts +37 -3
- package/dist/html/css/values.d.ts.map +1 -1
- package/dist/html/css/values.js +122 -48
- package/dist/html/css/values.js.map +1 -1
- package/dist/html/css/vars.d.ts +52 -0
- package/dist/html/css/vars.d.ts.map +1 -0
- package/dist/html/css/vars.js +358 -0
- package/dist/html/css/vars.js.map +1 -0
- package/dist/html/dom.d.ts +30 -4
- package/dist/html/dom.d.ts.map +1 -1
- package/dist/html/dom.js +278 -17
- package/dist/html/dom.js.map +1 -1
- package/dist/html/fonts.d.ts +106 -0
- package/dist/html/fonts.d.ts.map +1 -0
- package/dist/html/fonts.js +565 -0
- package/dist/html/fonts.js.map +1 -0
- package/dist/html/gif.d.ts +15 -0
- package/dist/html/gif.d.ts.map +1 -0
- package/dist/html/gif.js +229 -0
- package/dist/html/gif.js.map +1 -0
- package/dist/html/index.d.ts +50 -11
- package/dist/html/index.d.ts.map +1 -1
- package/dist/html/index.js +115 -9
- package/dist/html/index.js.map +1 -1
- package/dist/html/layout/block.d.ts +226 -3
- package/dist/html/layout/block.d.ts.map +1 -1
- package/dist/html/layout/block.js +2937 -197
- package/dist/html/layout/block.js.map +1 -1
- package/dist/html/layout/boxes.d.ts +340 -17
- package/dist/html/layout/boxes.d.ts.map +1 -1
- package/dist/html/layout/boxes.js +1714 -182
- package/dist/html/layout/boxes.js.map +1 -1
- package/dist/html/layout/cache.d.ts +58 -0
- package/dist/html/layout/cache.d.ts.map +1 -0
- package/dist/html/layout/cache.js +224 -0
- package/dist/html/layout/cache.js.map +1 -0
- package/dist/html/layout/collapse.d.ts +45 -0
- package/dist/html/layout/collapse.d.ts.map +1 -0
- package/dist/html/layout/collapse.js +246 -0
- package/dist/html/layout/collapse.js.map +1 -0
- package/dist/html/layout/css-grid.d.ts +7 -0
- package/dist/html/layout/css-grid.d.ts.map +1 -0
- package/dist/html/layout/css-grid.js +900 -0
- package/dist/html/layout/css-grid.js.map +1 -0
- package/dist/html/layout/flex.d.ts.map +1 -1
- package/dist/html/layout/flex.js +1025 -89
- package/dist/html/layout/flex.js.map +1 -1
- package/dist/html/layout/floats.d.ts +45 -6
- package/dist/html/layout/floats.d.ts.map +1 -1
- package/dist/html/layout/floats.js +113 -14
- package/dist/html/layout/floats.js.map +1 -1
- package/dist/html/layout/grid-lines.d.ts +39 -0
- package/dist/html/layout/grid-lines.d.ts.map +1 -0
- package/dist/html/layout/grid-lines.js +119 -0
- package/dist/html/layout/grid-lines.js.map +1 -0
- package/dist/html/layout/grid.d.ts +53 -0
- package/dist/html/layout/grid.d.ts.map +1 -0
- package/dist/html/layout/grid.js +153 -0
- package/dist/html/layout/grid.js.map +1 -0
- package/dist/html/layout/inline.d.ts +151 -1
- package/dist/html/layout/inline.d.ts.map +1 -1
- package/dist/html/layout/inline.js +3375 -174
- package/dist/html/layout/inline.js.map +1 -1
- package/dist/html/layout/shaping.d.ts +6 -0
- package/dist/html/layout/shaping.d.ts.map +1 -0
- package/dist/html/layout/shaping.js +100 -0
- package/dist/html/layout/shaping.js.map +1 -0
- package/dist/html/layout/table.d.ts +3 -0
- package/dist/html/layout/table.d.ts.map +1 -1
- package/dist/html/layout/table.js +681 -175
- package/dist/html/layout/table.js.map +1 -1
- package/dist/html/layout/tracks.d.ts +44 -0
- package/dist/html/layout/tracks.d.ts.map +1 -0
- package/dist/html/layout/tracks.js +349 -0
- package/dist/html/layout/tracks.js.map +1 -0
- package/dist/html/node.d.ts +172 -5
- package/dist/html/node.d.ts.map +1 -1
- package/dist/html/node.js +1336 -103
- package/dist/html/node.js.map +1 -1
- package/dist/html/paint.d.ts +92 -3
- package/dist/html/paint.d.ts.map +1 -1
- package/dist/html/paint.js +3503 -141
- package/dist/html/paint.js.map +1 -1
- package/dist/html/resources.d.ts +60 -14
- package/dist/html/resources.d.ts.map +1 -1
- package/dist/html/resources.js +122 -36
- package/dist/html/resources.js.map +1 -1
- package/dist/html/surfaces.d.ts +23 -0
- package/dist/html/surfaces.d.ts.map +1 -0
- package/dist/html/surfaces.js +68 -0
- package/dist/html/surfaces.js.map +1 -0
- package/dist/html/svg.d.ts +80 -0
- package/dist/html/svg.d.ts.map +1 -0
- package/dist/html/svg.js +435 -0
- package/dist/html/svg.js.map +1 -0
- package/dist/html/url.d.ts +23 -0
- package/dist/html/url.d.ts.map +1 -0
- package/dist/html/url.js +80 -0
- package/dist/html/url.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/collate.d.ts +3 -0
- package/dist/internal/collate.d.ts.map +1 -0
- package/dist/internal/collate.js +11 -0
- package/dist/internal/collate.js.map +1 -0
- package/dist/{markdown → internal/markdown}/ast.d.ts +23 -0
- package/dist/internal/markdown/ast.d.ts.map +1 -0
- package/dist/internal/markdown/ast.js +22 -0
- package/dist/internal/markdown/ast.js.map +1 -0
- package/dist/internal/markdown/parse.d.ts.map +1 -0
- package/dist/{markdown → internal/markdown}/parse.js +221 -30
- package/dist/internal/markdown/parse.js.map +1 -0
- package/dist/internal/markdown/stringify.d.ts +4 -0
- package/dist/internal/markdown/stringify.d.ts.map +1 -0
- package/dist/internal/markdown/stringify.js +684 -0
- package/dist/internal/markdown/stringify.js.map +1 -0
- package/dist/internal/markdown/tags.d.ts.map +1 -0
- package/dist/internal/markdown/tags.js.map +1 -0
- package/dist/internal/prewarm.d.ts +18 -0
- package/dist/internal/prewarm.d.ts.map +1 -0
- package/dist/internal/prewarm.js +42 -0
- package/dist/internal/prewarm.js.map +1 -0
- package/dist/internal/scroll.d.ts +3 -2
- package/dist/internal/scroll.d.ts.map +1 -1
- package/dist/internal/scroll.js +1 -0
- package/dist/internal/scroll.js.map +1 -1
- package/dist/internal/sdf.d.ts +20 -0
- package/dist/internal/sdf.d.ts.map +1 -0
- package/dist/internal/sdf.js +216 -0
- package/dist/internal/sdf.js.map +1 -0
- package/dist/internal/splice.d.ts +12 -0
- package/dist/internal/splice.d.ts.map +1 -0
- package/dist/internal/splice.js +23 -0
- package/dist/internal/splice.js.map +1 -0
- package/dist/internal/window.d.ts +12 -0
- package/dist/internal/window.d.ts.map +1 -1
- package/dist/internal/window.js +23 -6
- package/dist/internal/window.js.map +1 -1
- package/dist/maps/anchors.d.ts +103 -0
- package/dist/maps/anchors.d.ts.map +1 -0
- package/dist/maps/anchors.js +790 -0
- package/dist/maps/anchors.js.map +1 -0
- package/dist/maps/controller.d.ts +340 -0
- package/dist/maps/controller.d.ts.map +1 -0
- package/dist/maps/controller.js +822 -0
- package/dist/maps/controller.js.map +1 -0
- package/dist/maps/gl/buckets.d.ts +99 -0
- package/dist/maps/gl/buckets.d.ts.map +1 -0
- package/dist/maps/gl/buckets.js +365 -0
- package/dist/maps/gl/buckets.js.map +1 -0
- package/dist/maps/gl/build-worker.d.ts +15 -0
- package/dist/maps/gl/build-worker.d.ts.map +1 -0
- package/dist/maps/gl/build-worker.js +44 -0
- package/dist/maps/gl/build-worker.js.map +1 -0
- package/dist/maps/gl/color.d.ts +8 -0
- package/dist/maps/gl/color.d.ts.map +1 -0
- package/dist/maps/gl/color.js +57 -0
- package/dist/maps/gl/color.js.map +1 -0
- package/dist/maps/gl/cover.d.ts +70 -0
- package/dist/maps/gl/cover.d.ts.map +1 -0
- package/dist/maps/gl/cover.js +137 -0
- package/dist/maps/gl/cover.js.map +1 -0
- package/dist/maps/gl/index.d.ts +3 -0
- package/dist/maps/gl/index.d.ts.map +1 -0
- package/dist/maps/gl/index.js +20 -0
- package/dist/maps/gl/index.js.map +1 -0
- package/dist/maps/gl/markers.d.ts +28 -0
- package/dist/maps/gl/markers.d.ts.map +1 -0
- package/dist/maps/gl/markers.js +60 -0
- package/dist/maps/gl/markers.js.map +1 -0
- package/dist/maps/gl/overlays.d.ts +68 -0
- package/dist/maps/gl/overlays.d.ts.map +1 -0
- package/dist/maps/gl/overlays.js +300 -0
- package/dist/maps/gl/overlays.js.map +1 -0
- package/dist/maps/gl/pane.d.ts +12 -0
- package/dist/maps/gl/pane.d.ts.map +1 -0
- package/dist/maps/gl/pane.js +37 -0
- package/dist/maps/gl/pane.js.map +1 -0
- package/dist/maps/gl/placement.d.ts +124 -0
- package/dist/maps/gl/placement.d.ts.map +1 -0
- package/dist/maps/gl/placement.js +642 -0
- package/dist/maps/gl/placement.js.map +1 -0
- package/dist/maps/gl/renderer.d.ts +384 -0
- package/dist/maps/gl/renderer.d.ts.map +1 -0
- package/dist/maps/gl/renderer.js +1184 -0
- package/dist/maps/gl/renderer.js.map +1 -0
- package/dist/maps/gl/shaders.d.ts +121 -0
- package/dist/maps/gl/shaders.d.ts.map +1 -0
- package/dist/maps/gl/shaders.js +453 -0
- package/dist/maps/gl/shaders.js.map +1 -0
- package/dist/maps/gl/store.d.ts +125 -0
- package/dist/maps/gl/store.d.ts.map +1 -0
- package/dist/maps/gl/store.js +512 -0
- package/dist/maps/gl/store.js.map +1 -0
- package/dist/maps/gl/text.d.ts +283 -0
- package/dist/maps/gl/text.d.ts.map +1 -0
- package/dist/maps/gl/text.js +698 -0
- package/dist/maps/gl/text.js.map +1 -0
- package/dist/maps/gl/view.d.ts +345 -0
- package/dist/maps/gl/view.d.ts.map +1 -0
- package/dist/maps/gl/view.js +1209 -0
- package/dist/maps/gl/view.js.map +1 -0
- package/dist/maps/icons.d.ts +32 -0
- package/dist/maps/icons.d.ts.map +1 -0
- package/dist/maps/icons.js +151 -0
- package/dist/maps/icons.js.map +1 -0
- package/dist/maps/index.d.ts +3 -1
- package/dist/maps/index.d.ts.map +1 -1
- package/dist/maps/index.js +218 -52
- package/dist/maps/index.js.map +1 -1
- package/dist/maps/labels.d.ts +91 -18
- package/dist/maps/labels.d.ts.map +1 -1
- package/dist/maps/labels.js +376 -140
- package/dist/maps/labels.js.map +1 -1
- package/dist/maps/node.d.ts +179 -56
- package/dist/maps/node.d.ts.map +1 -1
- package/dist/maps/node.js +663 -537
- package/dist/maps/node.js.map +1 -1
- package/dist/maps/overlay.d.ts +72 -9
- package/dist/maps/overlay.d.ts.map +1 -1
- package/dist/maps/overlay.js +108 -28
- package/dist/maps/overlay.js.map +1 -1
- package/dist/maps/paint.d.ts +3 -0
- package/dist/maps/paint.d.ts.map +1 -1
- package/dist/maps/paint.js.map +1 -1
- package/dist/maps/proj.d.ts +62 -0
- package/dist/maps/proj.d.ts.map +1 -1
- package/dist/maps/proj.js +101 -0
- package/dist/maps/proj.js.map +1 -1
- package/dist/maps/renderer.d.ts +69 -0
- package/dist/maps/renderer.d.ts.map +1 -0
- package/dist/maps/renderer.js +66 -0
- package/dist/maps/renderer.js.map +1 -0
- package/dist/maps/sources.d.ts +30 -6
- package/dist/maps/sources.d.ts.map +1 -1
- package/dist/maps/sources.js +22 -3
- package/dist/maps/sources.js.map +1 -1
- package/dist/maps/style.d.ts +35 -0
- package/dist/maps/style.d.ts.map +1 -1
- package/dist/maps/style.js.map +1 -1
- package/dist/maps/styles.d.ts +12 -0
- package/dist/maps/styles.d.ts.map +1 -1
- package/dist/maps/styles.js +120 -6
- package/dist/maps/styles.js.map +1 -1
- package/dist/maps/theme.d.ts +19 -0
- package/dist/maps/theme.d.ts.map +1 -0
- package/dist/maps/theme.js +44 -0
- package/dist/maps/theme.js.map +1 -0
- package/dist/maps/tiles.d.ts +147 -27
- package/dist/maps/tiles.d.ts.map +1 -1
- package/dist/maps/tiles.js +221 -54
- package/dist/maps/tiles.js.map +1 -1
- package/dist/maps/types.d.ts +213 -21
- package/dist/maps/types.d.ts.map +1 -1
- package/dist/markdown/expressions.d.ts +1 -1
- package/dist/markdown/expressions.d.ts.map +1 -1
- package/dist/markdown/expressions.js.map +1 -1
- package/dist/markdown/index.d.ts +7 -6
- package/dist/markdown/index.d.ts.map +1 -1
- package/dist/markdown/index.js +121 -50
- package/dist/markdown/index.js.map +1 -1
- package/dist/markdown/spans.d.ts +1 -1
- package/dist/markdown/spans.d.ts.map +1 -1
- package/dist/markdown/spans.js +6 -0
- package/dist/markdown/spans.js.map +1 -1
- package/dist/media-player/index.d.ts +11 -3
- package/dist/media-player/index.d.ts.map +1 -1
- package/dist/media-player/index.js +13 -2
- package/dist/media-player/index.js.map +1 -1
- package/dist/qml/containers.d.ts.map +1 -1
- package/dist/qml/containers.js +6 -1
- package/dist/qml/containers.js.map +1 -1
- package/dist/qml/interaction.d.ts.map +1 -1
- package/dist/qml/interaction.js +38 -5
- package/dist/qml/interaction.js.map +1 -1
- package/dist/qml/layouts.d.ts.map +1 -1
- package/dist/qml/layouts.js +21 -6
- package/dist/qml/layouts.js.map +1 -1
- package/dist/qml/qtquick.d.ts.map +1 -1
- package/dist/qml/qtquick.js +9 -2
- package/dist/qml/qtquick.js.map +1 -1
- package/dist/qml/react.d.ts.map +1 -1
- package/dist/qml/react.js +9 -7
- package/dist/qml/react.js.map +1 -1
- package/dist/reorder/clock.d.ts +7 -0
- package/dist/reorder/clock.d.ts.map +1 -0
- package/dist/reorder/clock.js +26 -0
- package/dist/reorder/clock.js.map +1 -0
- package/dist/reorder/index.d.ts +25 -3
- package/dist/reorder/index.d.ts.map +1 -1
- package/dist/reorder/index.js +64 -19
- package/dist/reorder/index.js.map +1 -1
- package/dist/rich-text-editor/clipboard.d.ts +23 -0
- package/dist/rich-text-editor/clipboard.d.ts.map +1 -0
- package/dist/rich-text-editor/clipboard.js +307 -0
- package/dist/rich-text-editor/clipboard.js.map +1 -0
- package/dist/rich-text-editor/collab.d.ts +32 -0
- package/dist/rich-text-editor/collab.d.ts.map +1 -0
- package/dist/rich-text-editor/collab.js +55 -0
- package/dist/rich-text-editor/collab.js.map +1 -0
- package/dist/rich-text-editor/commands.d.ts +50 -0
- package/dist/rich-text-editor/commands.d.ts.map +1 -0
- package/dist/rich-text-editor/commands.js +376 -0
- package/dist/rich-text-editor/commands.js.map +1 -0
- package/dist/rich-text-editor/drag.d.ts +68 -0
- package/dist/rich-text-editor/drag.d.ts.map +1 -0
- package/dist/rich-text-editor/drag.js +148 -0
- package/dist/rich-text-editor/drag.js.map +1 -0
- package/dist/rich-text-editor/html.d.ts +145 -0
- package/dist/rich-text-editor/html.d.ts.map +1 -0
- package/dist/rich-text-editor/html.js +516 -0
- package/dist/rich-text-editor/html.js.map +1 -0
- package/dist/rich-text-editor/index.d.ts +252 -0
- package/dist/rich-text-editor/index.d.ts.map +1 -0
- package/dist/rich-text-editor/index.js +856 -0
- package/dist/rich-text-editor/index.js.map +1 -0
- package/dist/rich-text-editor/inline.d.ts +94 -0
- package/dist/rich-text-editor/inline.d.ts.map +1 -0
- package/dist/rich-text-editor/inline.js +252 -0
- package/dist/rich-text-editor/inline.js.map +1 -0
- package/dist/rich-text-editor/keymap.d.ts +71 -0
- package/dist/rich-text-editor/keymap.d.ts.map +1 -0
- package/dist/rich-text-editor/keymap.js +394 -0
- package/dist/rich-text-editor/keymap.js.map +1 -0
- package/dist/rich-text-editor/keys.d.ts +40 -0
- package/dist/rich-text-editor/keys.d.ts.map +1 -0
- package/dist/rich-text-editor/keys.js +202 -0
- package/dist/rich-text-editor/keys.js.map +1 -0
- package/dist/rich-text-editor/look.d.ts +71 -0
- package/dist/rich-text-editor/look.d.ts.map +1 -0
- package/dist/rich-text-editor/look.js +342 -0
- package/dist/rich-text-editor/look.js.map +1 -0
- package/dist/rich-text-editor/markdown.d.ts +18 -0
- package/dist/rich-text-editor/markdown.d.ts.map +1 -0
- package/dist/rich-text-editor/markdown.js +496 -0
- package/dist/rich-text-editor/markdown.js.map +1 -0
- package/dist/rich-text-editor/marks.d.ts +9 -0
- package/dist/rich-text-editor/marks.d.ts.map +1 -0
- package/dist/rich-text-editor/marks.js +83 -0
- package/dist/rich-text-editor/marks.js.map +1 -0
- package/dist/rich-text-editor/nodes.d.ts +135 -0
- package/dist/rich-text-editor/nodes.d.ts.map +1 -0
- package/dist/rich-text-editor/nodes.js +397 -0
- package/dist/rich-text-editor/nodes.js.map +1 -0
- package/dist/rich-text-editor/render.d.ts +68 -0
- package/dist/rich-text-editor/render.d.ts.map +1 -0
- package/dist/rich-text-editor/render.js +518 -0
- package/dist/rich-text-editor/render.js.map +1 -0
- package/dist/rich-text-editor/schema.d.ts +16 -0
- package/dist/rich-text-editor/schema.d.ts.map +1 -0
- package/dist/rich-text-editor/schema.js +386 -0
- package/dist/rich-text-editor/schema.js.map +1 -0
- package/dist/rich-text-editor/store.d.ts +11 -0
- package/dist/rich-text-editor/store.d.ts.map +1 -0
- package/dist/rich-text-editor/store.js +43 -0
- package/dist/rich-text-editor/store.js.map +1 -0
- package/dist/rich-text-editor/suggest.d.ts +127 -0
- package/dist/rich-text-editor/suggest.d.ts.map +1 -0
- package/dist/rich-text-editor/suggest.js +0 -0
- package/dist/rich-text-editor/suggest.js.map +1 -0
- package/dist/rich-text-editor/tables.d.ts +41 -0
- package/dist/rich-text-editor/tables.d.ts.map +1 -0
- package/dist/rich-text-editor/tables.js +204 -0
- package/dist/rich-text-editor/tables.js.map +1 -0
- package/dist/rich-text-editor/toolbar.d.ts +58 -0
- package/dist/rich-text-editor/toolbar.d.ts.map +1 -0
- package/dist/rich-text-editor/toolbar.js +548 -0
- package/dist/rich-text-editor/toolbar.js.map +1 -0
- package/dist/rich-text-editor/view.d.ts +368 -0
- package/dist/rich-text-editor/view.d.ts.map +1 -0
- package/dist/rich-text-editor/view.js +1968 -0
- package/dist/rich-text-editor/view.js.map +1 -0
- package/dist/rich-text-editor/virtual.d.ts +54 -0
- package/dist/rich-text-editor/virtual.d.ts.map +1 -0
- package/dist/rich-text-editor/virtual.js +279 -0
- package/dist/rich-text-editor/virtual.js.map +1 -0
- package/dist/richtext/node.d.ts +71 -4
- package/dist/richtext/node.d.ts.map +1 -1
- package/dist/richtext/node.js +233 -28
- package/dist/richtext/node.js.map +1 -1
- package/dist/richtext/runs.d.ts +13 -8
- package/dist/richtext/runs.d.ts.map +1 -1
- package/dist/richtext/runs.js +18 -8
- package/dist/richtext/runs.js.map +1 -1
- package/dist/table/index.d.ts.map +1 -1
- package/dist/table/index.js +23 -0
- package/dist/table/index.js.map +1 -1
- package/dist/table/rows.d.ts +3 -2
- package/dist/table/rows.d.ts.map +1 -1
- package/dist/table/rows.js +20 -6
- package/dist/table/rows.js.map +1 -1
- package/dist/terminal/backends.d.ts +4 -1
- package/dist/terminal/backends.d.ts.map +1 -1
- package/dist/terminal/backends.js.map +1 -1
- package/dist/terminal/index.d.ts +18 -7
- package/dist/terminal/index.d.ts.map +1 -1
- package/dist/terminal/index.js +32 -11
- package/dist/terminal/index.js.map +1 -1
- package/dist/terminal/vt/pty.d.ts +13 -2
- package/dist/terminal/vt/pty.d.ts.map +1 -1
- package/dist/terminal/vt/pty.js +18 -3
- package/dist/terminal/vt/pty.js.map +1 -1
- package/dist/terminal-output/index.d.ts.map +1 -1
- package/dist/terminal-output/index.js +6 -1
- package/dist/terminal-output/index.js.map +1 -1
- package/dist/three/canvas.d.ts.map +1 -1
- package/dist/three/canvas.js +85 -7
- package/dist/three/canvas.js.map +1 -1
- package/dist/three/events.d.ts +22 -4
- package/dist/three/events.d.ts.map +1 -1
- package/dist/three/events.js +34 -4
- package/dist/three/events.js.map +1 -1
- package/dist/tree/index.d.ts.map +1 -1
- package/dist/tree/index.js +17 -0
- package/dist/tree/index.js.map +1 -1
- package/package.json +59 -31
- package/src/charts/node.ts +68 -28
- package/src/charts/render.ts +120 -30
- package/src/code/index.ts +3 -1
- package/src/code-editor/completion.ts +3 -2
- package/src/code-editor/index.ts +19 -0
- package/src/code-editor/node.ts +1574 -184
- package/src/code-language/languages/glsl.ts +12 -2
- package/src/code-language/languages/javascript.ts +21 -4
- package/src/code-language/languages/json.ts +12 -2
- package/src/code-language/languages/shell.ts +12 -2
- package/src/code-language/languages/sql.ts +22 -2
- package/src/code-language/stream.ts +257 -17
- package/src/code-language/types.ts +5 -4
- package/src/codeblock/index.ts +20 -3
- package/src/embed/client.ts +102 -8
- package/src/embed/index.ts +2 -0
- package/src/flow/draw.ts +167 -41
- package/src/flow/gl/color.ts +85 -0
- package/src/flow/gl/index.ts +342 -0
- package/src/flow/gl/pack.ts +585 -0
- package/src/flow/gl/renderer.ts +679 -0
- package/src/flow/gl/shaders.ts +371 -0
- package/src/flow/gl/text.ts +1295 -0
- package/src/flow/index.ts +794 -67
- package/src/flow/node.ts +2496 -1256
- package/src/flow/paint.ts +511 -0
- package/src/flow/paths.ts +80 -15
- package/src/flow/scene.ts +2199 -0
- package/src/flow/types.ts +113 -1
- package/src/html/controls.ts +73 -2
- package/src/html/css/calc.ts +385 -0
- package/src/html/css/cascade.ts +1403 -62
- package/src/html/css/color.ts +755 -0
- package/src/html/css/content.ts +417 -0
- package/src/html/css/counter-styles.ts +973 -0
- package/src/html/css/decode.ts +130 -0
- package/src/html/css/parse.ts +1514 -160
- package/src/html/css/style.ts +4102 -222
- package/src/html/css/ua.ts +58 -12
- package/src/html/css/values.ts +150 -50
- package/src/html/css/vars.ts +348 -0
- package/src/html/dom.ts +284 -17
- package/src/html/fonts.ts +641 -0
- package/src/html/gif.ts +233 -0
- package/src/html/index.ts +180 -20
- package/src/html/layout/block.ts +3456 -230
- package/src/html/layout/boxes.ts +2100 -190
- package/src/html/layout/cache.ts +289 -0
- package/src/html/layout/collapse.ts +317 -0
- package/src/html/layout/css-grid.ts +1063 -0
- package/src/html/layout/flex.ts +1115 -106
- package/src/html/layout/floats.ts +128 -14
- package/src/html/layout/grid-lines.ts +141 -0
- package/src/html/layout/grid.ts +181 -0
- package/src/html/layout/inline.ts +3943 -192
- package/src/html/layout/shaping.ts +140 -0
- package/src/html/layout/table.ts +696 -186
- package/src/html/layout/tracks.ts +437 -0
- package/src/html/node.ts +1486 -121
- package/src/html/paint.ts +4293 -169
- package/src/html/resources.ts +161 -50
- package/src/html/surfaces.ts +81 -0
- package/src/html/svg.ts +493 -0
- package/src/html/url.ts +86 -0
- package/src/index.ts +4 -0
- package/src/internal/collate.ts +12 -0
- package/src/{markdown → internal/markdown}/ast.ts +35 -7
- package/src/{markdown → internal/markdown}/parse.ts +288 -35
- package/src/internal/markdown/stringify.ts +772 -0
- package/src/internal/prewarm.ts +45 -0
- package/src/internal/scroll.ts +5 -3
- package/src/internal/sdf.ts +227 -0
- package/src/internal/splice.ts +25 -0
- package/src/internal/window.ts +36 -5
- package/src/maps/anchors.ts +913 -0
- package/src/maps/controller.ts +1084 -0
- package/src/maps/gl/buckets.ts +461 -0
- package/src/maps/gl/build-worker.ts +66 -0
- package/src/maps/gl/color.ts +62 -0
- package/src/maps/gl/cover.ts +205 -0
- package/src/maps/gl/index.ts +23 -0
- package/src/maps/gl/markers.ts +83 -0
- package/src/maps/gl/overlays.ts +379 -0
- package/src/maps/gl/pane.ts +42 -0
- package/src/maps/gl/placement.ts +968 -0
- package/src/maps/gl/renderer.ts +1660 -0
- package/src/maps/gl/shaders.ts +489 -0
- package/src/maps/gl/store.ts +615 -0
- package/src/maps/gl/text.ts +868 -0
- package/src/maps/gl/view.ts +1489 -0
- package/src/maps/icons.ts +183 -0
- package/src/maps/index.ts +274 -81
- package/src/maps/labels.ts +457 -144
- package/src/maps/node.ts +832 -665
- package/src/maps/overlay.ts +148 -43
- package/src/maps/paint.ts +3 -0
- package/src/maps/proj.ts +118 -0
- package/src/maps/renderer.ts +155 -0
- package/src/maps/sources.ts +43 -6
- package/src/maps/style.ts +32 -0
- package/src/maps/styles.ts +215 -4
- package/src/maps/theme.ts +51 -0
- package/src/maps/tiles.ts +253 -62
- package/src/maps/types.ts +213 -21
- package/src/markdown/expressions.ts +5 -1
- package/src/markdown/index.ts +163 -78
- package/src/markdown/spans.ts +6 -1
- package/src/media-player/index.ts +18 -4
- package/src/qml/containers.tsx +6 -1
- package/src/qml/interaction.tsx +42 -5
- package/src/qml/layouts.tsx +21 -6
- package/src/qml/qtquick.tsx +9 -2
- package/src/qml/react.tsx +7 -5
- package/src/reorder/clock.ts +27 -0
- package/src/reorder/index.ts +100 -27
- package/src/rich-text-editor/clipboard.ts +439 -0
- package/src/rich-text-editor/collab.ts +91 -0
- package/src/rich-text-editor/commands.ts +448 -0
- package/src/rich-text-editor/dom-globals.d.ts +23 -0
- package/src/rich-text-editor/drag.ts +211 -0
- package/src/rich-text-editor/html.ts +619 -0
- package/src/rich-text-editor/index.ts +1364 -0
- package/src/rich-text-editor/inline.ts +345 -0
- package/src/rich-text-editor/keymap.ts +510 -0
- package/src/rich-text-editor/keys.ts +228 -0
- package/src/rich-text-editor/look.ts +427 -0
- package/src/rich-text-editor/markdown.ts +653 -0
- package/src/rich-text-editor/marks.ts +101 -0
- package/src/rich-text-editor/nodes.ts +497 -0
- package/src/rich-text-editor/render.ts +837 -0
- package/src/rich-text-editor/schema.ts +431 -0
- package/src/rich-text-editor/store.ts +39 -0
- package/src/rich-text-editor/suggest.ts +597 -0
- package/src/rich-text-editor/tables.ts +272 -0
- package/src/rich-text-editor/toolbar.ts +724 -0
- package/src/rich-text-editor/view.ts +2287 -0
- package/src/rich-text-editor/virtual.ts +372 -0
- package/src/richtext/node.ts +294 -44
- package/src/richtext/runs.ts +23 -12
- package/src/table/index.ts +29 -0
- package/src/table/rows.ts +18 -8
- package/src/terminal/backends.ts +4 -1
- package/src/terminal/index.ts +47 -15
- package/src/terminal/vt/pty.ts +16 -2
- package/src/terminal-output/index.ts +6 -1
- package/src/three/canvas.ts +102 -8
- package/src/three/events.ts +49 -9
- package/src/tree/index.ts +19 -0
- package/dist/markdown/ast.d.ts.map +0 -1
- package/dist/markdown/ast.js +0 -17
- package/dist/markdown/ast.js.map +0 -1
- package/dist/markdown/parse.d.ts.map +0 -1
- package/dist/markdown/parse.js.map +0 -1
- package/dist/markdown/tags.d.ts.map +0 -1
- package/dist/markdown/tags.js.map +0 -1
- /package/dist/{markdown → internal/markdown}/parse.d.ts +0 -0
- /package/dist/{markdown → internal/markdown}/tags.d.ts +0 -0
- /package/dist/{markdown → internal/markdown}/tags.js +0 -0
- /package/src/{markdown → internal/markdown}/tags.ts +0 -0
|
@@ -0,0 +1,893 @@
|
|
|
1
|
+
// Counter styles (CSS Counter Styles 3): how a counter's value is written.
|
|
2
|
+
// The styles the specification predefines, those a document's
|
|
3
|
+
// `@counter-style` rules define — over the predefined ones, and extending
|
|
4
|
+
// them — and the anonymous ones `symbols()` makes: what `list-style-type`
|
|
5
|
+
// names, and `counter()` and `counters()` take. The cascade builds one
|
|
6
|
+
// `CounterStyles` from its sheets; the box builder asks it for text.
|
|
7
|
+
import { tokenize } from './content.js';
|
|
8
|
+
import { parseNumber } from './values.js';
|
|
9
|
+
/** The names no `@counter-style` may take (3). */
|
|
10
|
+
const FIXED_NAMES = new Set([
|
|
11
|
+
'decimal',
|
|
12
|
+
'disc',
|
|
13
|
+
'square',
|
|
14
|
+
'circle',
|
|
15
|
+
'disclosure-open',
|
|
16
|
+
'disclosure-closed',
|
|
17
|
+
]);
|
|
18
|
+
/** A representation longer than this is left to the fallback style (2). */
|
|
19
|
+
const LONGEST = 60;
|
|
20
|
+
/**
|
|
21
|
+
* A counter style's name as a style is looked up by: one the
|
|
22
|
+
* specification defines is lower-cased, and any other keeps its case (3).
|
|
23
|
+
*/
|
|
24
|
+
export function counterStyleName(name) {
|
|
25
|
+
const lower = name.toLowerCase();
|
|
26
|
+
return PREDEFINED.has(lower) ? lower : name;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The counter styles of a document: the predefined ones and its
|
|
30
|
+
* `@counter-style` rules', each rule whole over any before it of its name.
|
|
31
|
+
*/
|
|
32
|
+
export class CounterStyles {
|
|
33
|
+
_rules;
|
|
34
|
+
_resolved = new Map();
|
|
35
|
+
constructor(rules = new Map()) {
|
|
36
|
+
this._rules = rules;
|
|
37
|
+
}
|
|
38
|
+
/** Whether a name names a counter style. */
|
|
39
|
+
has(name) {
|
|
40
|
+
return this._rule(name) !== undefined;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* A counter's value written in a style (2), as `counter()` writes it:
|
|
44
|
+
* without the style's prefix and suffix. An unknown style is `decimal`,
|
|
45
|
+
* and a value the style cannot write is its fallback's.
|
|
46
|
+
*/
|
|
47
|
+
text(n, name, rtl = false) {
|
|
48
|
+
return this._represent(n, name, new Set(), rtl);
|
|
49
|
+
}
|
|
50
|
+
/** A list item's marker: its value written in the style, between the
|
|
51
|
+
* style's own prefix and suffix whichever style wrote it. */
|
|
52
|
+
marker(n, name, rtl = false) {
|
|
53
|
+
const style = this._resolve(name);
|
|
54
|
+
return {
|
|
55
|
+
prefix: style.prefix,
|
|
56
|
+
text: this._represent(n, name, new Set(), rtl),
|
|
57
|
+
suffix: style.suffix,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
_rule(name) {
|
|
61
|
+
if (name.startsWith('symbols('))
|
|
62
|
+
return anonymous(name);
|
|
63
|
+
return this._rules.get(name) ?? PREDEFINED.get(name);
|
|
64
|
+
}
|
|
65
|
+
_represent(n, name, tried, rtl) {
|
|
66
|
+
const style = this._resolve(name);
|
|
67
|
+
const out = written(n, style, rtl);
|
|
68
|
+
if (out !== null)
|
|
69
|
+
return out;
|
|
70
|
+
// a loop of fallbacks ends at `decimal` (3.7)
|
|
71
|
+
if (tried.has(name))
|
|
72
|
+
return String(n);
|
|
73
|
+
tried.add(name);
|
|
74
|
+
return this._represent(n, style.fallback, tried, rtl);
|
|
75
|
+
}
|
|
76
|
+
/** A style with every descriptor settled: what it extends followed to a
|
|
77
|
+
* style of its own, and one in a loop of them extending `decimal` (3.1.7). */
|
|
78
|
+
_resolve(name) {
|
|
79
|
+
const known = this._resolved.get(name);
|
|
80
|
+
if (known)
|
|
81
|
+
return known;
|
|
82
|
+
const rule = this._rule(name);
|
|
83
|
+
let style;
|
|
84
|
+
if (!rule)
|
|
85
|
+
style = this._resolve('decimal');
|
|
86
|
+
else if (rule.extends === undefined)
|
|
87
|
+
style = settle(rule);
|
|
88
|
+
else {
|
|
89
|
+
// the chain of styles it extends, to one that extends nothing or
|
|
90
|
+
// back into itself
|
|
91
|
+
const path = [name];
|
|
92
|
+
let next = counterStyleName(rule.extends);
|
|
93
|
+
let inLoop = false;
|
|
94
|
+
for (;;) {
|
|
95
|
+
const at = this._rule(next);
|
|
96
|
+
if (!at || at.extends === undefined)
|
|
97
|
+
break;
|
|
98
|
+
const seen = path.indexOf(next);
|
|
99
|
+
if (seen >= 0) {
|
|
100
|
+
inLoop = path.slice(seen).includes(name);
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
path.push(next);
|
|
104
|
+
next = counterStyleName(at.extends);
|
|
105
|
+
}
|
|
106
|
+
const base = inLoop || !this._rule(next) || next === name
|
|
107
|
+
? this._resolve('decimal')
|
|
108
|
+
: this._resolve(next);
|
|
109
|
+
style = {
|
|
110
|
+
...base,
|
|
111
|
+
negative: rule.negative ?? base.negative,
|
|
112
|
+
prefix: rule.prefix ?? base.prefix,
|
|
113
|
+
suffix: rule.suffix ?? base.suffix,
|
|
114
|
+
range: rule.range === undefined
|
|
115
|
+
? base.range
|
|
116
|
+
: rule.range === 'auto'
|
|
117
|
+
? base.system === 'algorithm'
|
|
118
|
+
? base.range
|
|
119
|
+
: autoRange(base.system)
|
|
120
|
+
: rule.range,
|
|
121
|
+
pad: rule.pad ?? base.pad,
|
|
122
|
+
fallback: rule.fallback ?? base.fallback,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
this._resolved.set(name, style);
|
|
126
|
+
return style;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/** A rule's descriptors with their initial values filled in. */
|
|
130
|
+
function settle(rule) {
|
|
131
|
+
const system = rule.algorithm ? 'algorithm' : (rule.system ?? 'symbolic');
|
|
132
|
+
return {
|
|
133
|
+
system,
|
|
134
|
+
first: rule.first ?? 1,
|
|
135
|
+
symbols: rule.symbols ?? [],
|
|
136
|
+
additive: rule.additive ?? [],
|
|
137
|
+
negative: rule.negative ?? ['-', ''],
|
|
138
|
+
prefix: rule.prefix ?? '',
|
|
139
|
+
suffix: rule.suffix ?? '. ',
|
|
140
|
+
range: rule.range === undefined || rule.range === 'auto'
|
|
141
|
+
? autoRange(system)
|
|
142
|
+
: rule.range,
|
|
143
|
+
pad: rule.pad ?? [0, ''],
|
|
144
|
+
fallback: rule.fallback ?? 'decimal',
|
|
145
|
+
algorithm: rule.algorithm,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/** `range: auto` (3.5): every value, the positive ones, or those from 0. */
|
|
149
|
+
function autoRange(system) {
|
|
150
|
+
if (system === 'alphabetic' || system === 'symbolic')
|
|
151
|
+
return [[1, Infinity]];
|
|
152
|
+
if (system === 'additive')
|
|
153
|
+
return [[0, Infinity]];
|
|
154
|
+
return [[-Infinity, Infinity]];
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* A value written in one style (2), or null where the style cannot write
|
|
158
|
+
* it: out of its range, a value its system has no representation for, or
|
|
159
|
+
* one longer than there is any use for.
|
|
160
|
+
*/
|
|
161
|
+
function written(n, style, rtl) {
|
|
162
|
+
if (!style.range.some(([lo, hi]) => n >= lo && n <= hi))
|
|
163
|
+
return null;
|
|
164
|
+
const signed = n < 0 && style.system !== 'cyclic' && style.system !== 'fixed';
|
|
165
|
+
let text = generate(signed ? -n : n, style, rtl);
|
|
166
|
+
if (text === null)
|
|
167
|
+
return null;
|
|
168
|
+
// the clusters are counted only where a style pads: a segmenter walk for
|
|
169
|
+
// every bullet of every list was a fifth of building a long document
|
|
170
|
+
const [width, symbol] = style.pad;
|
|
171
|
+
if (width > 0 && symbol) {
|
|
172
|
+
let short = width - graphemes(text);
|
|
173
|
+
if (signed)
|
|
174
|
+
short -= graphemes(style.negative[0] + style.negative[1]);
|
|
175
|
+
if (short > 0)
|
|
176
|
+
text = symbol.repeat(Math.min(short, LONGEST)) + text;
|
|
177
|
+
}
|
|
178
|
+
if (signed)
|
|
179
|
+
text = style.negative[0] + text + style.negative[1];
|
|
180
|
+
// no longer in code points than it is in code units
|
|
181
|
+
return text.length > LONGEST && [...text].length > LONGEST ? null : text;
|
|
182
|
+
}
|
|
183
|
+
let segmenter;
|
|
184
|
+
/** How many grapheme clusters a text is — `pad` counts them (3.6): `ā`
|
|
185
|
+
* written as an `a` and a combining macron is one. */
|
|
186
|
+
function graphemes(text) {
|
|
187
|
+
if (segmenter === undefined) {
|
|
188
|
+
segmenter =
|
|
189
|
+
typeof Intl.Segmenter === 'function'
|
|
190
|
+
? new Intl.Segmenter(undefined, { granularity: 'grapheme' })
|
|
191
|
+
: null;
|
|
192
|
+
}
|
|
193
|
+
if (!segmenter)
|
|
194
|
+
return [...text].length;
|
|
195
|
+
let count = 0;
|
|
196
|
+
for (const _ of segmenter.segment(text))
|
|
197
|
+
count += 1;
|
|
198
|
+
return count;
|
|
199
|
+
}
|
|
200
|
+
/** The counter algorithm of a style's system (3.1). */
|
|
201
|
+
function generate(n, style, rtl) {
|
|
202
|
+
const symbols = style.symbols;
|
|
203
|
+
const count = symbols.length;
|
|
204
|
+
switch (style.system) {
|
|
205
|
+
case 'algorithm':
|
|
206
|
+
return style.algorithm(n);
|
|
207
|
+
case 'cyclic': {
|
|
208
|
+
if (!count)
|
|
209
|
+
return null;
|
|
210
|
+
const symbol = symbols[(((n - 1) % count) + count) % count];
|
|
211
|
+
// a closed disclosure points the way its text runs (6.3)
|
|
212
|
+
return rtl && symbol === '▸' ? '◂' : symbol;
|
|
213
|
+
}
|
|
214
|
+
case 'fixed': {
|
|
215
|
+
const at = n - style.first;
|
|
216
|
+
return at >= 0 && at < count ? symbols[at] : null;
|
|
217
|
+
}
|
|
218
|
+
case 'symbolic': {
|
|
219
|
+
if (!count || n < 1)
|
|
220
|
+
return null;
|
|
221
|
+
const times = Math.ceil(n / count);
|
|
222
|
+
return times > LONGEST ? null : symbols[(n - 1) % count].repeat(times);
|
|
223
|
+
}
|
|
224
|
+
case 'alphabetic': {
|
|
225
|
+
if (count < 2 || n < 1)
|
|
226
|
+
return null;
|
|
227
|
+
let out = '';
|
|
228
|
+
for (let v = n; v > 0; v = Math.floor(v / count)) {
|
|
229
|
+
v -= 1;
|
|
230
|
+
out = symbols[v % count] + out;
|
|
231
|
+
}
|
|
232
|
+
return out;
|
|
233
|
+
}
|
|
234
|
+
case 'numeric': {
|
|
235
|
+
if (count < 2)
|
|
236
|
+
return null;
|
|
237
|
+
if (n === 0)
|
|
238
|
+
return symbols[0];
|
|
239
|
+
let out = '';
|
|
240
|
+
for (let v = n; v > 0; v = Math.floor(v / count)) {
|
|
241
|
+
out = symbols[v % count] + out;
|
|
242
|
+
}
|
|
243
|
+
return out;
|
|
244
|
+
}
|
|
245
|
+
case 'additive': {
|
|
246
|
+
const tuples = style.additive;
|
|
247
|
+
if (n === 0) {
|
|
248
|
+
const zero = tuples.find(([weight]) => weight === 0);
|
|
249
|
+
return zero ? zero[1] : null;
|
|
250
|
+
}
|
|
251
|
+
let out = '';
|
|
252
|
+
let v = n;
|
|
253
|
+
for (const [weight, symbol] of tuples) {
|
|
254
|
+
if (weight === 0 || weight > v)
|
|
255
|
+
continue;
|
|
256
|
+
const reps = Math.floor(v / weight);
|
|
257
|
+
if (reps > LONGEST)
|
|
258
|
+
return null;
|
|
259
|
+
out += symbol.repeat(reps);
|
|
260
|
+
v -= weight * reps;
|
|
261
|
+
if (v === 0)
|
|
262
|
+
return out;
|
|
263
|
+
}
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// --- the predefined styles (6, 7) --------------------------------------------------
|
|
269
|
+
const range = (lo, hi) => [[lo, hi]];
|
|
270
|
+
/** Ten digits from a zero's code point. */
|
|
271
|
+
function digitsFrom(zero) {
|
|
272
|
+
return Array.from({ length: 10 }, (_, i) => String.fromCodePoint(zero + i));
|
|
273
|
+
}
|
|
274
|
+
function numeric(zero) {
|
|
275
|
+
return { system: 'numeric', symbols: digitsFrom(zero) };
|
|
276
|
+
}
|
|
277
|
+
/** An additive style from the symbols and their weights, heaviest first. */
|
|
278
|
+
function additive(pairs) {
|
|
279
|
+
return pairs
|
|
280
|
+
.trim()
|
|
281
|
+
.split(/\s*,\s*/)
|
|
282
|
+
.map((pair) => {
|
|
283
|
+
const [weight, symbol] = pair.split(/\s+/);
|
|
284
|
+
return [Number(weight), symbol];
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* A Japanese or Korean longhand style over -9999 to 9999 as its
|
|
289
|
+
* `@counter-style` rule has it (7.1.1): each thousand, hundred and ten a
|
|
290
|
+
* digit and its marker — without the digit where it is one, in the
|
|
291
|
+
* informal styles — and each unit a digit. Past its range a Korean one is
|
|
292
|
+
* written in decimal, as browsers write it, where the rule says
|
|
293
|
+
* `cjk-decimal`.
|
|
294
|
+
*/
|
|
295
|
+
function longhand(digits, markers, dropOne, suffix, negative, fallback = 'cjk-decimal') {
|
|
296
|
+
const digit = [...digits];
|
|
297
|
+
const marker = [...markers];
|
|
298
|
+
const tuples = [];
|
|
299
|
+
for (let place = 3; place >= 1; place -= 1) {
|
|
300
|
+
for (let d = 9; d >= 1; d -= 1) {
|
|
301
|
+
const lead = d === 1 && dropOne ? '' : digit[d];
|
|
302
|
+
tuples.push([d * 10 ** place, lead + marker[place - 1]]);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
for (let d = 9; d >= 0; d -= 1)
|
|
306
|
+
tuples.push([d, digit[d]]);
|
|
307
|
+
return {
|
|
308
|
+
system: 'additive',
|
|
309
|
+
range: range(-9999, 9999),
|
|
310
|
+
additive: tuples,
|
|
311
|
+
suffix,
|
|
312
|
+
negative: [negative, ''],
|
|
313
|
+
fallback,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* A Chinese longhand style (7.1.2, the extended implementation browsers
|
|
318
|
+
* write): the number in groups of four digits from the right, each group
|
|
319
|
+
* that is not 0 with its group's marker, and in each group each digit that
|
|
320
|
+
* is not 0 with its place's marker. In the informal styles a group of ten
|
|
321
|
+
* to nineteen drops its tens digit; each group drops its zeros at its end,
|
|
322
|
+
* and a run of zeros anywhere else, across groups, is one zero.
|
|
323
|
+
*/
|
|
324
|
+
function chinese(digits, markers, groups, informal, negative) {
|
|
325
|
+
const digit = [...digits];
|
|
326
|
+
const marker = [...markers];
|
|
327
|
+
return {
|
|
328
|
+
algorithm: (n) => {
|
|
329
|
+
if (n === 0)
|
|
330
|
+
return digit[0];
|
|
331
|
+
const text = String(n);
|
|
332
|
+
// null for a zero
|
|
333
|
+
const parts = [];
|
|
334
|
+
const count = Math.ceil(text.length / 4);
|
|
335
|
+
if (count > 4)
|
|
336
|
+
return String(n);
|
|
337
|
+
for (let g = count - 1; g >= 0; g -= 1) {
|
|
338
|
+
const end = text.length - g * 4;
|
|
339
|
+
const group = text.slice(Math.max(0, end - 4), end).padStart(4, '0');
|
|
340
|
+
const value = Number(group);
|
|
341
|
+
if (value === 0) {
|
|
342
|
+
parts.push(null);
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
const own = [];
|
|
346
|
+
for (let i = 0; i < 4; i += 1) {
|
|
347
|
+
const d = Number(group[i]);
|
|
348
|
+
const place = 3 - i;
|
|
349
|
+
const mark = place ? marker[place - 1] : '';
|
|
350
|
+
if (d === 0)
|
|
351
|
+
own.push(null);
|
|
352
|
+
else if (informal && place === 1 && value >= 10 && value <= 19) {
|
|
353
|
+
own.push(mark);
|
|
354
|
+
}
|
|
355
|
+
else
|
|
356
|
+
own.push(digit[d] + mark);
|
|
357
|
+
}
|
|
358
|
+
while (own[own.length - 1] === null)
|
|
359
|
+
own.pop();
|
|
360
|
+
parts.push(...own);
|
|
361
|
+
if (g > 0)
|
|
362
|
+
parts[parts.length - 1] += groups[g - 1];
|
|
363
|
+
}
|
|
364
|
+
while (parts.length && parts[parts.length - 1] === null)
|
|
365
|
+
parts.pop();
|
|
366
|
+
let out = '';
|
|
367
|
+
let zero = false;
|
|
368
|
+
for (const part of parts) {
|
|
369
|
+
if (part === null)
|
|
370
|
+
zero = out !== '';
|
|
371
|
+
else {
|
|
372
|
+
if (zero)
|
|
373
|
+
out += digit[0];
|
|
374
|
+
zero = false;
|
|
375
|
+
out += part;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return out;
|
|
379
|
+
},
|
|
380
|
+
// below 10^16 — as near as a double comes to 10^16 - 1
|
|
381
|
+
range: range(-9999999999999998, 9999999999999998),
|
|
382
|
+
suffix: '、',
|
|
383
|
+
negative: [negative, ''],
|
|
384
|
+
fallback: 'cjk-decimal',
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
const SIMP_GROUPS = ['万', '亿', '万亿'];
|
|
388
|
+
const TRAD_GROUPS = ['萬', '億', '兆'];
|
|
389
|
+
const ETHIOPIC_TENS = ' ፲፳፴፵፶፷፸፹፺';
|
|
390
|
+
const ETHIOPIC_UNITS = ' ፩፪፫፬፭፮፯፰፱';
|
|
391
|
+
/** `ethiopic-numeric` (7.2): pairs of digits, each marked by its place. */
|
|
392
|
+
function ethiopic(n) {
|
|
393
|
+
if (n === 1)
|
|
394
|
+
return '፩';
|
|
395
|
+
const text = String(n);
|
|
396
|
+
const groups = [];
|
|
397
|
+
for (let end = text.length; end > 0; end -= 2) {
|
|
398
|
+
groups.push(Number(text.slice(Math.max(0, end - 2), end)));
|
|
399
|
+
}
|
|
400
|
+
let out = '';
|
|
401
|
+
for (let g = groups.length - 1; g >= 0; g -= 1) {
|
|
402
|
+
const value = groups[g];
|
|
403
|
+
const odd = g % 2 === 1;
|
|
404
|
+
const bare = value === 0 || (value === 1 && (g === groups.length - 1 || odd));
|
|
405
|
+
if (!bare) {
|
|
406
|
+
const tens = Math.floor(value / 10);
|
|
407
|
+
const units = value % 10;
|
|
408
|
+
if (tens)
|
|
409
|
+
out += ETHIOPIC_TENS[tens];
|
|
410
|
+
if (units)
|
|
411
|
+
out += ETHIOPIC_UNITS[units];
|
|
412
|
+
}
|
|
413
|
+
if (odd && value !== 0)
|
|
414
|
+
out += '፻';
|
|
415
|
+
if (!odd && g !== 0)
|
|
416
|
+
out += '፼';
|
|
417
|
+
}
|
|
418
|
+
return out;
|
|
419
|
+
}
|
|
420
|
+
const LATIN = 'abcdefghijklmnopqrstuvwxyz';
|
|
421
|
+
const HIRAGANA = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん';
|
|
422
|
+
const HIRAGANA_IROHA = 'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす';
|
|
423
|
+
const KATAKANA = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン';
|
|
424
|
+
const KATAKANA_IROHA = 'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス';
|
|
425
|
+
const ARMENIAN_UPPER = '9000 Ք, 8000 Փ, 7000 Ւ, 6000 Ց, 5000 Ր, 4000 Տ, 3000 Վ, 2000 Ս, 1000 Ռ, ' +
|
|
426
|
+
'900 Ջ, 800 Պ, 700 Չ, 600 Ո, 500 Շ, 400 Ն, 300 Յ, 200 Մ, 100 Ճ, 90 Ղ, ' +
|
|
427
|
+
'80 Ձ, 70 Հ, 60 Կ, 50 Ծ, 40 Խ, 30 Լ, 20 Ի, 10 Ժ, 9 Թ, 8 Ը, 7 Է, 6 Զ, ' +
|
|
428
|
+
'5 Ե, 4 Դ, 3 Գ, 2 Բ, 1 Ա';
|
|
429
|
+
const GEORGIAN = '10000 ჵ, 9000 ჰ, 8000 ჯ, 7000 ჴ, 6000 ხ, 5000 ჭ, 4000 წ, 3000 ძ, ' +
|
|
430
|
+
'2000 ც, 1000 ჩ, 900 შ, 800 ყ, 700 ღ, 600 ქ, 500 ფ, 400 ჳ, 300 ტ, ' +
|
|
431
|
+
'200 ს, 100 რ, 90 ჟ, 80 პ, 70 ო, 60 ჲ, 50 ნ, 40 მ, 30 ლ, 20 კ, 10 ი, ' +
|
|
432
|
+
'9 თ, 8 ჱ, 7 ზ, 6 ვ, 5 ე, 4 დ, 3 გ, 2 ბ, 1 ა';
|
|
433
|
+
const HEBREW = '10000 י׳, 9000 ט׳, 8000 ח׳, 7000 ז׳, 6000 ו׳, 5000 ה׳, 4000 ד׳, 3000 ג׳, ' +
|
|
434
|
+
'2000 ב׳, 1000 א׳, 400 ת, 300 ש, 200 ר, 100 ק, 90 צ, 80 פ, 70 ע, 60 ס, ' +
|
|
435
|
+
'50 נ, 40 מ, 30 ל, 20 כ, 19 יט, 18 יח, 17 יז, 16 טז, 15 טו, 10 י, 9 ט, ' +
|
|
436
|
+
'8 ח, 7 ז, 6 ו, 5 ה, 4 ד, 3 ג, 2 ב, 1 א';
|
|
437
|
+
const ROMAN = '1000 M, 900 CM, 500 D, 400 CD, 100 C, 90 XC, 50 L, 40 XL, 10 X, 9 IX, ' +
|
|
438
|
+
'5 V, 4 IV, 1 I';
|
|
439
|
+
/** The styles the specification defines, by name. */
|
|
440
|
+
const PREDEFINED = new Map([
|
|
441
|
+
['decimal', numeric(0x30)],
|
|
442
|
+
['decimal-leading-zero', { extends: 'decimal', pad: [2, '0'] }],
|
|
443
|
+
['arabic-indic', numeric(0x660)],
|
|
444
|
+
[
|
|
445
|
+
'armenian',
|
|
446
|
+
{
|
|
447
|
+
system: 'additive',
|
|
448
|
+
range: range(1, 9999),
|
|
449
|
+
additive: additive(ARMENIAN_UPPER),
|
|
450
|
+
},
|
|
451
|
+
],
|
|
452
|
+
['upper-armenian', { extends: 'armenian' }],
|
|
453
|
+
[
|
|
454
|
+
'lower-armenian',
|
|
455
|
+
{
|
|
456
|
+
system: 'additive',
|
|
457
|
+
range: range(1, 9999),
|
|
458
|
+
additive: additive(ARMENIAN_UPPER.toLowerCase()),
|
|
459
|
+
},
|
|
460
|
+
],
|
|
461
|
+
['bengali', numeric(0x9e6)],
|
|
462
|
+
['cambodian', numeric(0x17e0)],
|
|
463
|
+
['khmer', { extends: 'cambodian' }],
|
|
464
|
+
[
|
|
465
|
+
'cjk-decimal',
|
|
466
|
+
{
|
|
467
|
+
system: 'numeric',
|
|
468
|
+
range: range(0, Infinity),
|
|
469
|
+
symbols: [...'〇一二三四五六七八九'],
|
|
470
|
+
suffix: '、',
|
|
471
|
+
},
|
|
472
|
+
],
|
|
473
|
+
['devanagari', numeric(0x966)],
|
|
474
|
+
[
|
|
475
|
+
'georgian',
|
|
476
|
+
{
|
|
477
|
+
system: 'additive',
|
|
478
|
+
range: range(1, 19999),
|
|
479
|
+
additive: additive(GEORGIAN),
|
|
480
|
+
},
|
|
481
|
+
],
|
|
482
|
+
['gujarati', numeric(0xae6)],
|
|
483
|
+
['gurmukhi', numeric(0xa66)],
|
|
484
|
+
[
|
|
485
|
+
'hebrew',
|
|
486
|
+
{ system: 'additive', range: range(1, 10999), additive: additive(HEBREW) },
|
|
487
|
+
],
|
|
488
|
+
['kannada', numeric(0xce6)],
|
|
489
|
+
['lao', numeric(0xed0)],
|
|
490
|
+
['malayalam', numeric(0xd66)],
|
|
491
|
+
['mongolian', numeric(0x1810)],
|
|
492
|
+
['myanmar', numeric(0x1040)],
|
|
493
|
+
['oriya', numeric(0xb66)],
|
|
494
|
+
['persian', numeric(0x6f0)],
|
|
495
|
+
[
|
|
496
|
+
'lower-roman',
|
|
497
|
+
{
|
|
498
|
+
system: 'additive',
|
|
499
|
+
range: range(1, 3999),
|
|
500
|
+
additive: additive(ROMAN.toLowerCase()),
|
|
501
|
+
},
|
|
502
|
+
],
|
|
503
|
+
[
|
|
504
|
+
'upper-roman',
|
|
505
|
+
{ system: 'additive', range: range(1, 3999), additive: additive(ROMAN) },
|
|
506
|
+
],
|
|
507
|
+
['tamil', numeric(0xbe6)],
|
|
508
|
+
['telugu', numeric(0xc66)],
|
|
509
|
+
['thai', numeric(0xe50)],
|
|
510
|
+
['tibetan', numeric(0xf20)],
|
|
511
|
+
['lower-alpha', { system: 'alphabetic', symbols: [...LATIN] }],
|
|
512
|
+
['lower-latin', { extends: 'lower-alpha' }],
|
|
513
|
+
['upper-alpha', { system: 'alphabetic', symbols: [...LATIN.toUpperCase()] }],
|
|
514
|
+
['upper-latin', { extends: 'upper-alpha' }],
|
|
515
|
+
[
|
|
516
|
+
'lower-greek',
|
|
517
|
+
{ system: 'alphabetic', symbols: [...'αβγδεζηθικλμνξοπρστυφχψω'] },
|
|
518
|
+
],
|
|
519
|
+
['hiragana', { system: 'alphabetic', symbols: [...HIRAGANA], suffix: '、' }],
|
|
520
|
+
[
|
|
521
|
+
'hiragana-iroha',
|
|
522
|
+
{ system: 'alphabetic', symbols: [...HIRAGANA_IROHA], suffix: '、' },
|
|
523
|
+
],
|
|
524
|
+
['katakana', { system: 'alphabetic', symbols: [...KATAKANA], suffix: '、' }],
|
|
525
|
+
[
|
|
526
|
+
'katakana-iroha',
|
|
527
|
+
{ system: 'alphabetic', symbols: [...KATAKANA_IROHA], suffix: '、' },
|
|
528
|
+
],
|
|
529
|
+
['disc', { system: 'cyclic', symbols: ['•'], suffix: ' ' }],
|
|
530
|
+
['circle', { system: 'cyclic', symbols: ['◦'], suffix: ' ' }],
|
|
531
|
+
['square', { system: 'cyclic', symbols: ['▪'], suffix: ' ' }],
|
|
532
|
+
['disclosure-open', { system: 'cyclic', symbols: ['▾'], suffix: ' ' }],
|
|
533
|
+
['disclosure-closed', { system: 'cyclic', symbols: ['▸'], suffix: ' ' }],
|
|
534
|
+
[
|
|
535
|
+
'cjk-earthly-branch',
|
|
536
|
+
{
|
|
537
|
+
system: 'fixed',
|
|
538
|
+
symbols: [...'子丑寅卯辰巳午未申酉戌亥'],
|
|
539
|
+
suffix: '、',
|
|
540
|
+
fallback: 'cjk-decimal',
|
|
541
|
+
},
|
|
542
|
+
],
|
|
543
|
+
[
|
|
544
|
+
'cjk-heavenly-stem',
|
|
545
|
+
{
|
|
546
|
+
system: 'fixed',
|
|
547
|
+
symbols: [...'甲乙丙丁戊己庚辛壬癸'],
|
|
548
|
+
suffix: '、',
|
|
549
|
+
fallback: 'cjk-decimal',
|
|
550
|
+
},
|
|
551
|
+
],
|
|
552
|
+
[
|
|
553
|
+
'japanese-informal',
|
|
554
|
+
longhand('〇一二三四五六七八九', '十百千', true, '、', 'マイナス'),
|
|
555
|
+
],
|
|
556
|
+
[
|
|
557
|
+
'japanese-formal',
|
|
558
|
+
longhand('零壱弐参四伍六七八九', '拾百阡', false, '、', 'マイナス'),
|
|
559
|
+
],
|
|
560
|
+
[
|
|
561
|
+
'korean-hangul-formal',
|
|
562
|
+
longhand('영일이삼사오육칠팔구', '십백천', false, ', ', '마이너스 ', 'decimal'),
|
|
563
|
+
],
|
|
564
|
+
[
|
|
565
|
+
'korean-hanja-informal',
|
|
566
|
+
longhand('零一二三四五六七八九', '十百千', true, ', ', '마이너스 ', 'decimal'),
|
|
567
|
+
],
|
|
568
|
+
[
|
|
569
|
+
'korean-hanja-formal',
|
|
570
|
+
longhand('零壹貳參四五六七八九', '拾百仟', false, ', ', '마이너스 ', 'decimal'),
|
|
571
|
+
],
|
|
572
|
+
[
|
|
573
|
+
'simp-chinese-informal',
|
|
574
|
+
chinese('零一二三四五六七八九', '十百千', SIMP_GROUPS, true, '负'),
|
|
575
|
+
],
|
|
576
|
+
[
|
|
577
|
+
'simp-chinese-formal',
|
|
578
|
+
chinese('零壹贰叁肆伍陆柒捌玖', '拾佰仟', SIMP_GROUPS, false, '负'),
|
|
579
|
+
],
|
|
580
|
+
[
|
|
581
|
+
'trad-chinese-informal',
|
|
582
|
+
chinese('零一二三四五六七八九', '十百千', TRAD_GROUPS, true, '負'),
|
|
583
|
+
],
|
|
584
|
+
[
|
|
585
|
+
'trad-chinese-formal',
|
|
586
|
+
chinese('零壹貳參肆伍陸柒捌玖', '拾佰仟', TRAD_GROUPS, false, '負'),
|
|
587
|
+
],
|
|
588
|
+
[
|
|
589
|
+
'cjk-ideographic',
|
|
590
|
+
chinese('零一二三四五六七八九', '十百千', TRAD_GROUPS, true, '負'),
|
|
591
|
+
],
|
|
592
|
+
[
|
|
593
|
+
'ethiopic-numeric',
|
|
594
|
+
{ algorithm: ethiopic, range: range(1, Infinity), suffix: '/ ' },
|
|
595
|
+
],
|
|
596
|
+
]);
|
|
597
|
+
// --- `@counter-style` and `symbols()` ------------------------------------------------
|
|
598
|
+
/**
|
|
599
|
+
* An `@counter-style` rule's style (3), or null where the rule defines
|
|
600
|
+
* none: a name that cannot be one, no symbols for its system, too few, or
|
|
601
|
+
* symbols beside `extends`. A descriptor that cannot be read is left out,
|
|
602
|
+
* and the last one read of a name stands.
|
|
603
|
+
*/
|
|
604
|
+
export function counterStyleRule(prelude, declarations) {
|
|
605
|
+
const words = prelude.trim().split(/\s+/);
|
|
606
|
+
if (words.length !== 1 || !words[0])
|
|
607
|
+
return null;
|
|
608
|
+
const name = counterStyleName(words[0]);
|
|
609
|
+
if (FIXED_NAMES.has(name) ||
|
|
610
|
+
/^none$/i.test(name) ||
|
|
611
|
+
CSS_WIDE.test(name) ||
|
|
612
|
+
!/^-?[_a-zA-Z\u0080-][\w\u0080--]*$/.test(name)) {
|
|
613
|
+
return null;
|
|
614
|
+
}
|
|
615
|
+
const rule = {};
|
|
616
|
+
for (const { prop, value } of declarations) {
|
|
617
|
+
readDescriptor(rule, prop.toLowerCase(), value);
|
|
618
|
+
}
|
|
619
|
+
return valid(rule) ? { name, rule } : null;
|
|
620
|
+
}
|
|
621
|
+
/** Whether a rule's system has the symbols it needs (3.1, 3.8). */
|
|
622
|
+
function valid(rule) {
|
|
623
|
+
if (rule.extends !== undefined)
|
|
624
|
+
return !rule.symbols && !rule.additive;
|
|
625
|
+
const system = rule.system ?? 'symbolic';
|
|
626
|
+
if (system === 'additive')
|
|
627
|
+
return !!rule.additive?.length;
|
|
628
|
+
const least = system === 'alphabetic' || system === 'numeric' ? 2 : 1;
|
|
629
|
+
return (rule.symbols?.length ?? 0) >= least;
|
|
630
|
+
}
|
|
631
|
+
/** One descriptor into a rule, where its value is one. */
|
|
632
|
+
function readDescriptor(rule, prop, value) {
|
|
633
|
+
// the comma-separated ones, which are read a part at a time
|
|
634
|
+
if (prop === 'additive-symbols') {
|
|
635
|
+
const tuples = additiveTuples(integers(value, true));
|
|
636
|
+
if (tuples)
|
|
637
|
+
rule.additive = tuples;
|
|
638
|
+
return;
|
|
639
|
+
}
|
|
640
|
+
if (prop === 'range') {
|
|
641
|
+
const ranges = parseRanges(integers(value, false));
|
|
642
|
+
if (ranges !== undefined)
|
|
643
|
+
rule.range = ranges;
|
|
644
|
+
return;
|
|
645
|
+
}
|
|
646
|
+
const tokens = tokenize(prop === 'pad' ? integers(value, true) : integers(value, false));
|
|
647
|
+
if (!tokens?.length)
|
|
648
|
+
return;
|
|
649
|
+
switch (prop) {
|
|
650
|
+
case 'system': {
|
|
651
|
+
const first = tokens[0];
|
|
652
|
+
if (first.kind !== 'ident')
|
|
653
|
+
return;
|
|
654
|
+
const kind = first.name.toLowerCase();
|
|
655
|
+
if (kind === 'extends') {
|
|
656
|
+
if (tokens.length !== 2 || tokens[1].kind !== 'ident')
|
|
657
|
+
return;
|
|
658
|
+
rule.extends = tokens[1].name;
|
|
659
|
+
rule.system = undefined;
|
|
660
|
+
rule.first = undefined;
|
|
661
|
+
return;
|
|
662
|
+
}
|
|
663
|
+
if (kind === 'fixed') {
|
|
664
|
+
if (tokens.length > 2)
|
|
665
|
+
return;
|
|
666
|
+
const n = tokens[1];
|
|
667
|
+
if (n && (n.kind !== 'number' || !Number.isInteger(n.value)))
|
|
668
|
+
return;
|
|
669
|
+
rule.system = 'fixed';
|
|
670
|
+
rule.first = n?.kind === 'number' ? n.value : 1;
|
|
671
|
+
rule.extends = undefined;
|
|
672
|
+
return;
|
|
673
|
+
}
|
|
674
|
+
if (tokens.length === 1 &&
|
|
675
|
+
(kind === 'cyclic' ||
|
|
676
|
+
kind === 'numeric' ||
|
|
677
|
+
kind === 'alphabetic' ||
|
|
678
|
+
kind === 'symbolic' ||
|
|
679
|
+
kind === 'additive')) {
|
|
680
|
+
rule.system = kind;
|
|
681
|
+
rule.extends = undefined;
|
|
682
|
+
}
|
|
683
|
+
return;
|
|
684
|
+
}
|
|
685
|
+
case 'symbols': {
|
|
686
|
+
const symbols = tokens.map(symbolOf);
|
|
687
|
+
if (symbols.every((s) => s !== null))
|
|
688
|
+
rule.symbols = symbols;
|
|
689
|
+
return;
|
|
690
|
+
}
|
|
691
|
+
case 'negative': {
|
|
692
|
+
if (tokens.length > 2)
|
|
693
|
+
return;
|
|
694
|
+
const [a, b] = tokens.map(symbolOf);
|
|
695
|
+
if (a === null || b === null)
|
|
696
|
+
return;
|
|
697
|
+
rule.negative = [a, b ?? ''];
|
|
698
|
+
return;
|
|
699
|
+
}
|
|
700
|
+
case 'prefix':
|
|
701
|
+
case 'suffix': {
|
|
702
|
+
const symbol = tokens.length === 1 ? symbolOf(tokens[0]) : null;
|
|
703
|
+
if (symbol !== null)
|
|
704
|
+
rule[prop] = symbol;
|
|
705
|
+
return;
|
|
706
|
+
}
|
|
707
|
+
case 'pad': {
|
|
708
|
+
if (tokens.length !== 2)
|
|
709
|
+
return;
|
|
710
|
+
const [a, b] = tokens;
|
|
711
|
+
const [n, s] = a.kind === 'number' ? [a, b] : [b, a];
|
|
712
|
+
const symbol = symbolOf(s);
|
|
713
|
+
if (n.kind !== 'number' ||
|
|
714
|
+
!Number.isInteger(n.value) ||
|
|
715
|
+
n.value < 0 ||
|
|
716
|
+
symbol === null) {
|
|
717
|
+
return;
|
|
718
|
+
}
|
|
719
|
+
rule.pad = [n.value, symbol];
|
|
720
|
+
return;
|
|
721
|
+
}
|
|
722
|
+
case 'fallback': {
|
|
723
|
+
if (tokens.length === 1 && tokens[0].kind === 'ident') {
|
|
724
|
+
rule.fallback = counterStyleName(tokens[0].name);
|
|
725
|
+
}
|
|
726
|
+
return;
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
/**
|
|
731
|
+
* A value with each `calc()` in it that comes to a number written as the
|
|
732
|
+
* integer it rounds to — and, where the descriptor takes no negative one,
|
|
733
|
+
* as 0 where it is negative: a `calc()` is clamped to what it may be,
|
|
734
|
+
* where the number written as itself is refused.
|
|
735
|
+
*/
|
|
736
|
+
function integers(value, clamp) {
|
|
737
|
+
return value.replace(/calc\((?:[^()]|\([^()]*\))*\)/gi, (expr) => {
|
|
738
|
+
const n = parseNumber(expr);
|
|
739
|
+
if (n === null || !Number.isFinite(n))
|
|
740
|
+
return expr;
|
|
741
|
+
const whole = Math.round(n);
|
|
742
|
+
return String(clamp ? Math.max(0, whole) : whole);
|
|
743
|
+
});
|
|
744
|
+
}
|
|
745
|
+
/** A `<symbol>`: a string, or an identifier written as itself — which a
|
|
746
|
+
* CSS-wide keyword cannot be. Images are not drawn here, and make the
|
|
747
|
+
* descriptor none. */
|
|
748
|
+
function symbolOf(token) {
|
|
749
|
+
if (!token)
|
|
750
|
+
return null;
|
|
751
|
+
if (token.kind === 'string')
|
|
752
|
+
return token.text;
|
|
753
|
+
if (token.kind === 'ident' && !CSS_WIDE.test(token.name))
|
|
754
|
+
return token.name;
|
|
755
|
+
return null;
|
|
756
|
+
}
|
|
757
|
+
const CSS_WIDE = /^(inherit|initial|unset|default|revert|revert-layer)$/i;
|
|
758
|
+
/** `additive-symbols`: weights and symbols, in strictly falling weight. */
|
|
759
|
+
function additiveTuples(value) {
|
|
760
|
+
const out = [];
|
|
761
|
+
for (const part of splitTopLevelCommas(value)) {
|
|
762
|
+
const tokens = tokenize(part);
|
|
763
|
+
if (tokens?.length !== 2)
|
|
764
|
+
return null;
|
|
765
|
+
const [a, b] = tokens;
|
|
766
|
+
const [n, s] = a.kind === 'number' ? [a, b] : [b, a];
|
|
767
|
+
const symbol = symbolOf(s);
|
|
768
|
+
if (n.kind !== 'number' ||
|
|
769
|
+
!Number.isInteger(n.value) ||
|
|
770
|
+
n.value < 0 ||
|
|
771
|
+
symbol === null) {
|
|
772
|
+
return null;
|
|
773
|
+
}
|
|
774
|
+
if (out.length && n.value >= out[out.length - 1][0])
|
|
775
|
+
return null;
|
|
776
|
+
out.push([n.value, symbol]);
|
|
777
|
+
}
|
|
778
|
+
return out.length ? out : null;
|
|
779
|
+
}
|
|
780
|
+
/** `range`: `auto`, or bounds in pairs, `infinite` at either end;
|
|
781
|
+
* undefined where it is neither. */
|
|
782
|
+
function parseRanges(value) {
|
|
783
|
+
if (value.trim().toLowerCase() === 'auto')
|
|
784
|
+
return 'auto';
|
|
785
|
+
const out = [];
|
|
786
|
+
for (const part of splitTopLevelCommas(value)) {
|
|
787
|
+
const tokens = tokenize(part);
|
|
788
|
+
if (tokens?.length !== 2)
|
|
789
|
+
return undefined;
|
|
790
|
+
const bound = (token, low) => {
|
|
791
|
+
if (token.kind === 'ident' && token.name.toLowerCase() === 'infinite') {
|
|
792
|
+
return low ? -Infinity : Infinity;
|
|
793
|
+
}
|
|
794
|
+
return token.kind === 'number' && Number.isInteger(token.value)
|
|
795
|
+
? token.value
|
|
796
|
+
: null;
|
|
797
|
+
};
|
|
798
|
+
const lo = bound(tokens[0], true);
|
|
799
|
+
const hi = bound(tokens[1], false);
|
|
800
|
+
if (lo === null || hi === null || lo > hi)
|
|
801
|
+
return undefined;
|
|
802
|
+
out.push([lo, hi]);
|
|
803
|
+
}
|
|
804
|
+
return out.length ? out : undefined;
|
|
805
|
+
}
|
|
806
|
+
function splitTopLevelCommas(value) {
|
|
807
|
+
const out = [];
|
|
808
|
+
let depth = 0;
|
|
809
|
+
let quote = '';
|
|
810
|
+
let start = 0;
|
|
811
|
+
for (let i = 0; i < value.length; i += 1) {
|
|
812
|
+
const ch = value[i];
|
|
813
|
+
if (quote) {
|
|
814
|
+
if (ch === '\\')
|
|
815
|
+
i += 1;
|
|
816
|
+
else if (ch === quote)
|
|
817
|
+
quote = '';
|
|
818
|
+
}
|
|
819
|
+
else if (ch === '"' || ch === "'")
|
|
820
|
+
quote = ch;
|
|
821
|
+
else if (ch === '(')
|
|
822
|
+
depth += 1;
|
|
823
|
+
else if (ch === ')')
|
|
824
|
+
depth -= 1;
|
|
825
|
+
else if (ch === ',' && depth === 0) {
|
|
826
|
+
out.push(value.slice(start, i));
|
|
827
|
+
start = i + 1;
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
out.push(value.slice(start));
|
|
831
|
+
return out;
|
|
832
|
+
}
|
|
833
|
+
/**
|
|
834
|
+
* `symbols()` (4) as it is kept, which is a counter style's name: its type
|
|
835
|
+
* and its strings, written again the one way, so that the same function
|
|
836
|
+
* twice is the same style. Null where it is not one.
|
|
837
|
+
*/
|
|
838
|
+
export function symbolsFunction(token) {
|
|
839
|
+
if (token.kind !== 'function' || token.name.toLowerCase() !== 'symbols') {
|
|
840
|
+
return null;
|
|
841
|
+
}
|
|
842
|
+
if (token.args.length !== 1)
|
|
843
|
+
return null;
|
|
844
|
+
const parts = token.args[0];
|
|
845
|
+
let type = 'symbolic';
|
|
846
|
+
let i = 0;
|
|
847
|
+
if (parts[0]?.kind === 'ident') {
|
|
848
|
+
type = parts[0].name.toLowerCase();
|
|
849
|
+
if (!/^(cyclic|numeric|alphabetic|symbolic|fixed)$/.test(type))
|
|
850
|
+
return null;
|
|
851
|
+
i = 1;
|
|
852
|
+
}
|
|
853
|
+
const strings = [];
|
|
854
|
+
for (; i < parts.length; i += 1) {
|
|
855
|
+
const part = parts[i];
|
|
856
|
+
if (part.kind !== 'string')
|
|
857
|
+
return null;
|
|
858
|
+
strings.push(part.text);
|
|
859
|
+
}
|
|
860
|
+
if (!strings.length)
|
|
861
|
+
return null;
|
|
862
|
+
if ((type === 'alphabetic' || type === 'numeric') && strings.length < 2) {
|
|
863
|
+
return null;
|
|
864
|
+
}
|
|
865
|
+
return `symbols(${type} ${JSON.stringify(strings)})`;
|
|
866
|
+
}
|
|
867
|
+
const ANONYMOUS = new Map();
|
|
868
|
+
/** The style a `symbols()` names, from the form `symbolsFunction` keeps:
|
|
869
|
+
* its system and symbols, with nothing before it and a space after (4). */
|
|
870
|
+
function anonymous(name) {
|
|
871
|
+
const known = ANONYMOUS.get(name);
|
|
872
|
+
if (known)
|
|
873
|
+
return known;
|
|
874
|
+
const m = /^symbols\((\w+) (.*)\)$/.exec(name);
|
|
875
|
+
if (!m)
|
|
876
|
+
return undefined;
|
|
877
|
+
let symbols;
|
|
878
|
+
try {
|
|
879
|
+
symbols = JSON.parse(m[2]);
|
|
880
|
+
}
|
|
881
|
+
catch {
|
|
882
|
+
return undefined;
|
|
883
|
+
}
|
|
884
|
+
const rule = {
|
|
885
|
+
system: m[1],
|
|
886
|
+
symbols,
|
|
887
|
+
prefix: '',
|
|
888
|
+
suffix: ' ',
|
|
889
|
+
};
|
|
890
|
+
ANONYMOUS.set(name, rule);
|
|
891
|
+
return rule;
|
|
892
|
+
}
|
|
893
|
+
//# sourceMappingURL=counter-styles.js.map
|