@elastic/isomer-sdk 0.0.0 → 0.2.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/LICENSE.txt +93 -0
- package/NOTICE.txt +1861 -0
- package/README.md +69 -0
- package/THIRD_PARTY_LICENSES.md +957 -0
- package/dist/author/authored_fields.d.ts +153 -0
- package/dist/author/authored_fields.d.ts.map +1 -0
- package/dist/author/authored_fields.js +227 -0
- package/dist/author/authored_fields.js.map +1 -0
- package/dist/author/authoring_input.d.ts +7 -0
- package/dist/author/authoring_input.d.ts.map +1 -0
- package/dist/author/authoring_input.js +60 -0
- package/dist/author/authoring_input.js.map +1 -0
- package/dist/author/authoring_model.d.ts +27 -0
- package/dist/author/authoring_model.d.ts.map +1 -0
- package/dist/author/authoring_model.js +98 -0
- package/dist/author/authoring_model.js.map +1 -0
- package/dist/author/declarations.d.ts +13 -0
- package/dist/author/declarations.d.ts.map +1 -0
- package/dist/author/declarations.js +277 -0
- package/dist/author/declarations.js.map +1 -0
- package/dist/author/index.d.ts +7 -0
- package/dist/author/index.d.ts.map +1 -0
- package/dist/author/index.js +12 -0
- package/dist/author/index.js.map +1 -0
- package/dist/author/jsx.d.ts +21 -0
- package/dist/author/jsx.d.ts.map +1 -0
- package/dist/author/jsx.js +20 -0
- package/dist/author/jsx.js.map +1 -0
- package/dist/author/jsx_shim.d.ts +117 -0
- package/dist/author/jsx_shim.d.ts.map +1 -0
- package/dist/author/jsx_shim.js +270 -0
- package/dist/author/jsx_shim.js.map +1 -0
- package/dist/author/prompt.d.ts +58 -0
- package/dist/author/prompt.d.ts.map +1 -0
- package/dist/author/prompt.js +148 -0
- package/dist/author/prompt.js.map +1 -0
- package/dist/author/schema_to_typescript.d.ts +37 -0
- package/dist/author/schema_to_typescript.d.ts.map +1 -0
- package/dist/author/schema_to_typescript.js +286 -0
- package/dist/author/schema_to_typescript.js.map +1 -0
- package/dist/cjs/author/authored_fields.js +233 -0
- package/dist/cjs/author/authored_fields.js.map +1 -0
- package/dist/cjs/author/authoring_input.js +64 -0
- package/dist/cjs/author/authoring_input.js.map +1 -0
- package/dist/cjs/author/authoring_model.js +104 -0
- package/dist/cjs/author/authoring_model.js.map +1 -0
- package/dist/cjs/author/declarations.js +281 -0
- package/dist/cjs/author/declarations.js.map +1 -0
- package/dist/cjs/author/index.js +25 -0
- package/dist/cjs/author/index.js.map +1 -0
- package/dist/cjs/author/jsx.js +24 -0
- package/dist/cjs/author/jsx.js.map +1 -0
- package/dist/cjs/author/jsx_shim.js +276 -0
- package/dist/cjs/author/jsx_shim.js.map +1 -0
- package/dist/cjs/author/prompt.js +153 -0
- package/dist/cjs/author/prompt.js.map +1 -0
- package/dist/cjs/author/schema_to_typescript.js +295 -0
- package/dist/cjs/author/schema_to_typescript.js.map +1 -0
- package/dist/cjs/composition/action_event.js +9 -0
- package/dist/cjs/composition/action_event.js.map +1 -0
- package/dist/cjs/composition/body_node_base.js +112 -0
- package/dist/cjs/composition/body_node_base.js.map +1 -0
- package/dist/cjs/composition/composition.js +9 -0
- package/dist/cjs/composition/composition.js.map +1 -0
- package/dist/cjs/composition/error.js +73 -0
- package/dist/cjs/composition/error.js.map +1 -0
- package/dist/cjs/composition/index.js +32 -0
- package/dist/cjs/composition/index.js.map +1 -0
- package/dist/cjs/composition/map_nodes.js +85 -0
- package/dist/cjs/composition/map_nodes.js.map +1 -0
- package/dist/cjs/composition/named_color.js +20 -0
- package/dist/cjs/composition/named_color.js.map +1 -0
- package/dist/cjs/composition/node.js +9 -0
- package/dist/cjs/composition/node.js.map +1 -0
- package/dist/cjs/composition/one_line.js +23 -0
- package/dist/cjs/composition/one_line.js.map +1 -0
- package/dist/cjs/composition/structured_value.js +21 -0
- package/dist/cjs/composition/structured_value.js.map +1 -0
- package/dist/cjs/composition/validation_error.js +40 -0
- package/dist/cjs/composition/validation_error.js.map +1 -0
- package/dist/cjs/define/frame.js +31 -0
- package/dist/cjs/define/frame.js.map +1 -0
- package/dist/cjs/define/index.js +31 -0
- package/dist/cjs/define/index.js.map +1 -0
- package/dist/cjs/define/markdown_content.js +12 -0
- package/dist/cjs/define/markdown_content.js.map +1 -0
- package/dist/cjs/define/primitive_example.js +26 -0
- package/dist/cjs/define/primitive_example.js.map +1 -0
- package/dist/cjs/define/primitive_icon.js +17 -0
- package/dist/cjs/define/primitive_icon.js.map +1 -0
- package/dist/cjs/define/primitive_module.js +118 -0
- package/dist/cjs/define/primitive_module.js.map +1 -0
- package/dist/cjs/define/slack_assets.js +9 -0
- package/dist/cjs/define/slack_assets.js.map +1 -0
- package/dist/cjs/define/slack_blocks.js +9 -0
- package/dist/cjs/define/slack_blocks.js.map +1 -0
- package/dist/cjs/define/zod_format.js +122 -0
- package/dist/cjs/define/zod_format.js.map +1 -0
- package/dist/cjs/define/zod_helpers.js +26 -0
- package/dist/cjs/define/zod_helpers.js.map +1 -0
- package/dist/cjs/entries/html.js +12 -0
- package/dist/cjs/entries/html.js.map +1 -0
- package/dist/cjs/entries/index.js +80 -0
- package/dist/cjs/entries/index.js.map +1 -0
- package/dist/cjs/entries/markdown.js +14 -0
- package/dist/cjs/entries/markdown.js.map +1 -0
- package/dist/cjs/entries/react.js +20 -0
- package/dist/cjs/entries/react.js.map +1 -0
- package/dist/cjs/entries/slack.js +25 -0
- package/dist/cjs/entries/slack.js.map +1 -0
- package/dist/cjs/entries/text.js +12 -0
- package/dist/cjs/entries/text.js.map +1 -0
- package/dist/cjs/pack/capabilities.js +40 -0
- package/dist/cjs/pack/capabilities.js.map +1 -0
- package/dist/cjs/pack/compose.js +59 -0
- package/dist/cjs/pack/compose.js.map +1 -0
- package/dist/cjs/pack/enhancements.js +65 -0
- package/dist/cjs/pack/enhancements.js.map +1 -0
- package/dist/cjs/pack/index.js +18 -0
- package/dist/cjs/pack/index.js.map +1 -0
- package/dist/cjs/pack/primitive_pack.js +97 -0
- package/dist/cjs/pack/primitive_pack.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/render/anchors.js +167 -0
- package/dist/cjs/render/anchors.js.map +1 -0
- package/dist/cjs/render/context_view.js +54 -0
- package/dist/cjs/render/context_view.js.map +1 -0
- package/dist/cjs/render/format_display_value.js +143 -0
- package/dist/cjs/render/format_display_value.js.map +1 -0
- package/dist/cjs/render/format_number.js +46 -0
- package/dist/cjs/render/format_number.js.map +1 -0
- package/dist/cjs/render/html/enhancements.js +30 -0
- package/dist/cjs/render/html/enhancements.js.map +1 -0
- package/dist/cjs/render/html/envelope.js +218 -0
- package/dist/cjs/render/html/envelope.js.map +1 -0
- package/dist/cjs/render/html/index.js +12 -0
- package/dist/cjs/render/html/index.js.map +1 -0
- package/dist/cjs/render/index.js +25 -0
- package/dist/cjs/render/index.js.map +1 -0
- package/dist/cjs/render/layout_check.js +133 -0
- package/dist/cjs/render/layout_check.js.map +1 -0
- package/dist/cjs/render/markdown/builder.js +195 -0
- package/dist/cjs/render/markdown/builder.js.map +1 -0
- package/dist/cjs/render/markdown/envelope.js +33 -0
- package/dist/cjs/render/markdown/envelope.js.map +1 -0
- package/dist/cjs/render/markdown/format.js +208 -0
- package/dist/cjs/render/markdown/format.js.map +1 -0
- package/dist/cjs/render/markdown/index.js +15 -0
- package/dist/cjs/render/markdown/index.js.map +1 -0
- package/dist/cjs/render/measure_dom.js +61 -0
- package/dist/cjs/render/measure_dom.js.map +1 -0
- package/dist/cjs/render/payload.js +13 -0
- package/dist/cjs/render/payload.js.map +1 -0
- package/dist/cjs/render/primitive_dispatch.js +173 -0
- package/dist/cjs/render/primitive_dispatch.js.map +1 -0
- package/dist/cjs/render/react/content.js +44 -0
- package/dist/cjs/render/react/content.js.map +1 -0
- package/dist/cjs/render/react/enhancements.js +32 -0
- package/dist/cjs/render/react/enhancements.js.map +1 -0
- package/dist/cjs/render/react/index.js +15 -0
- package/dist/cjs/render/react/index.js.map +1 -0
- package/dist/cjs/render/slack/assets.js +45 -0
- package/dist/cjs/render/slack/assets.js.map +1 -0
- package/dist/cjs/render/slack/blocks.js +80 -0
- package/dist/cjs/render/slack/blocks.js.map +1 -0
- package/dist/cjs/render/slack/envelope.js +551 -0
- package/dist/cjs/render/slack/envelope.js.map +1 -0
- package/dist/cjs/render/slack/format.js +225 -0
- package/dist/cjs/render/slack/format.js.map +1 -0
- package/dist/cjs/render/slack/index.js +30 -0
- package/dist/cjs/render/slack/index.js.map +1 -0
- package/dist/cjs/render/slack/markdown_content.js +409 -0
- package/dist/cjs/render/slack/markdown_content.js.map +1 -0
- package/dist/cjs/render/text/envelope.js +21 -0
- package/dist/cjs/render/text/envelope.js.map +1 -0
- package/dist/cjs/render/text/index.js +12 -0
- package/dist/cjs/render/text/index.js.map +1 -0
- package/dist/cjs/testing/conformance.js +312 -0
- package/dist/cjs/testing/conformance.js.map +1 -0
- package/dist/cjs/testing/icon.js +248 -0
- package/dist/cjs/testing/icon.js.map +1 -0
- package/dist/cjs/testing/index.js +18 -0
- package/dist/cjs/testing/index.js.map +1 -0
- package/dist/cjs/testing/registration.js +142 -0
- package/dist/cjs/testing/registration.js.map +1 -0
- package/dist/cjs/validate/authoring_schema.js +312 -0
- package/dist/cjs/validate/authoring_schema.js.map +1 -0
- package/dist/cjs/validate/composition_schema.js +135 -0
- package/dist/cjs/validate/composition_schema.js.map +1 -0
- package/dist/cjs/validate/index.js +53 -0
- package/dist/cjs/validate/index.js.map +1 -0
- package/dist/cjs/validate/input_budget.js +156 -0
- package/dist/cjs/validate/input_budget.js.map +1 -0
- package/dist/cjs/validate/json_schema.js +72 -0
- package/dist/cjs/validate/json_schema.js.map +1 -0
- package/dist/cjs/validate/node_issues.js +65 -0
- package/dist/cjs/validate/node_issues.js.map +1 -0
- package/dist/cjs/validate/url.js +116 -0
- package/dist/cjs/validate/url.js.map +1 -0
- package/dist/cjs/validate/validation.js +165 -0
- package/dist/cjs/validate/validation.js.map +1 -0
- package/dist/cjs/validate/value_schemas.js +53 -0
- package/dist/cjs/validate/value_schemas.js.map +1 -0
- package/dist/composition/action_event.d.ts +13 -0
- package/dist/composition/action_event.d.ts.map +1 -0
- package/dist/composition/action_event.js +8 -0
- package/dist/composition/action_event.js.map +1 -0
- package/dist/composition/body_node_base.d.ts +72 -0
- package/dist/composition/body_node_base.d.ts.map +1 -0
- package/dist/composition/body_node_base.js +104 -0
- package/dist/composition/body_node_base.js.map +1 -0
- package/dist/composition/composition.d.ts +71 -0
- package/dist/composition/composition.d.ts.map +1 -0
- package/dist/composition/composition.js +8 -0
- package/dist/composition/composition.js.map +1 -0
- package/dist/composition/error.d.ts +61 -0
- package/dist/composition/error.d.ts.map +1 -0
- package/dist/composition/error.js +69 -0
- package/dist/composition/error.js.map +1 -0
- package/dist/composition/index.d.ts +11 -0
- package/dist/composition/index.d.ts.map +1 -0
- package/dist/composition/index.js +14 -0
- package/dist/composition/index.js.map +1 -0
- package/dist/composition/map_nodes.d.ts +16 -0
- package/dist/composition/map_nodes.d.ts.map +1 -0
- package/dist/composition/map_nodes.js +81 -0
- package/dist/composition/map_nodes.js.map +1 -0
- package/dist/composition/named_color.d.ts +9 -0
- package/dist/composition/named_color.d.ts.map +1 -0
- package/dist/composition/named_color.js +17 -0
- package/dist/composition/named_color.js.map +1 -0
- package/dist/composition/node.d.ts +11 -0
- package/dist/composition/node.d.ts.map +1 -0
- package/dist/composition/node.js +8 -0
- package/dist/composition/node.js.map +1 -0
- package/dist/composition/one_line.d.ts +7 -0
- package/dist/composition/one_line.d.ts.map +1 -0
- package/dist/composition/one_line.js +17 -0
- package/dist/composition/one_line.js.map +1 -0
- package/dist/composition/structured_value.d.ts +27 -0
- package/dist/composition/structured_value.d.ts.map +1 -0
- package/dist/composition/structured_value.js +18 -0
- package/dist/composition/structured_value.js.map +1 -0
- package/dist/composition/validation_error.d.ts +33 -0
- package/dist/composition/validation_error.d.ts.map +1 -0
- package/dist/composition/validation_error.js +35 -0
- package/dist/composition/validation_error.js.map +1 -0
- package/dist/define/frame.d.ts +155 -0
- package/dist/define/frame.d.ts.map +1 -0
- package/dist/define/frame.js +27 -0
- package/dist/define/frame.js.map +1 -0
- package/dist/define/index.d.ts +10 -0
- package/dist/define/index.d.ts.map +1 -0
- package/dist/define/index.js +13 -0
- package/dist/define/index.js.map +1 -0
- package/dist/define/markdown_content.d.ts +15 -0
- package/dist/define/markdown_content.d.ts.map +1 -0
- package/dist/define/markdown_content.js +9 -0
- package/dist/define/markdown_content.js.map +1 -0
- package/dist/define/primitive_example.d.ts +30 -0
- package/dist/define/primitive_example.d.ts.map +1 -0
- package/dist/define/primitive_example.js +21 -0
- package/dist/define/primitive_example.js.map +1 -0
- package/dist/define/primitive_icon.d.ts +11 -0
- package/dist/define/primitive_icon.d.ts.map +1 -0
- package/dist/define/primitive_icon.js +14 -0
- package/dist/define/primitive_icon.js.map +1 -0
- package/dist/define/primitive_module.d.ts +435 -0
- package/dist/define/primitive_module.d.ts.map +1 -0
- package/dist/define/primitive_module.js +112 -0
- package/dist/define/primitive_module.js.map +1 -0
- package/dist/define/slack_assets.d.ts +28 -0
- package/dist/define/slack_assets.d.ts.map +1 -0
- package/dist/define/slack_assets.js +8 -0
- package/dist/define/slack_assets.js.map +1 -0
- package/dist/define/slack_blocks.d.ts +234 -0
- package/dist/define/slack_blocks.d.ts.map +1 -0
- package/dist/define/slack_blocks.js +8 -0
- package/dist/define/slack_blocks.js.map +1 -0
- package/dist/define/zod_format.d.ts +33 -0
- package/dist/define/zod_format.d.ts.map +1 -0
- package/dist/define/zod_format.js +114 -0
- package/dist/define/zod_format.js.map +1 -0
- package/dist/define/zod_helpers.d.ts +10 -0
- package/dist/define/zod_helpers.d.ts.map +1 -0
- package/dist/define/zod_helpers.js +22 -0
- package/dist/define/zod_helpers.js.map +1 -0
- package/dist/entries/html.d.ts +3 -0
- package/dist/entries/html.d.ts.map +1 -0
- package/dist/entries/html.js +8 -0
- package/dist/entries/html.js.map +1 -0
- package/dist/entries/index.d.ts +6 -0
- package/dist/entries/index.d.ts.map +1 -0
- package/dist/entries/index.js +12 -0
- package/dist/entries/index.js.map +1 -0
- package/dist/entries/markdown.d.ts +3 -0
- package/dist/entries/markdown.d.ts.map +1 -0
- package/dist/entries/markdown.js +8 -0
- package/dist/entries/markdown.js.map +1 -0
- package/dist/entries/react.d.ts +5 -0
- package/dist/entries/react.d.ts.map +1 -0
- package/dist/entries/react.js +11 -0
- package/dist/entries/react.js.map +1 -0
- package/dist/entries/slack.d.ts +2 -0
- package/dist/entries/slack.d.ts.map +1 -0
- package/dist/entries/slack.js +8 -0
- package/dist/entries/slack.js.map +1 -0
- package/dist/entries/text.d.ts +2 -0
- package/dist/entries/text.d.ts.map +1 -0
- package/dist/entries/text.js +8 -0
- package/dist/entries/text.js.map +1 -0
- package/dist/pack/capabilities.d.ts +41 -0
- package/dist/pack/capabilities.d.ts.map +1 -0
- package/dist/pack/capabilities.js +36 -0
- package/dist/pack/capabilities.js.map +1 -0
- package/dist/pack/compose.d.ts +24 -0
- package/dist/pack/compose.d.ts.map +1 -0
- package/dist/pack/compose.js +55 -0
- package/dist/pack/compose.js.map +1 -0
- package/dist/pack/enhancements.d.ts +65 -0
- package/dist/pack/enhancements.d.ts.map +1 -0
- package/dist/pack/enhancements.js +59 -0
- package/dist/pack/enhancements.js.map +1 -0
- package/dist/pack/index.d.ts +5 -0
- package/dist/pack/index.d.ts.map +1 -0
- package/dist/pack/index.js +11 -0
- package/dist/pack/index.js.map +1 -0
- package/dist/pack/primitive_pack.d.ts +164 -0
- package/dist/pack/primitive_pack.d.ts.map +1 -0
- package/dist/pack/primitive_pack.js +92 -0
- package/dist/pack/primitive_pack.js.map +1 -0
- package/dist/render/anchors.d.ts +82 -0
- package/dist/render/anchors.d.ts.map +1 -0
- package/dist/render/anchors.js +153 -0
- package/dist/render/anchors.js.map +1 -0
- package/dist/render/context_view.d.ts +10 -0
- package/dist/render/context_view.d.ts.map +1 -0
- package/dist/render/context_view.js +49 -0
- package/dist/render/context_view.js.map +1 -0
- package/dist/render/format_display_value.d.ts +20 -0
- package/dist/render/format_display_value.d.ts.map +1 -0
- package/dist/render/format_display_value.js +137 -0
- package/dist/render/format_display_value.js.map +1 -0
- package/dist/render/format_number.d.ts +9 -0
- package/dist/render/format_number.d.ts.map +1 -0
- package/dist/render/format_number.js +42 -0
- package/dist/render/format_number.js.map +1 -0
- package/dist/render/html/enhancements.d.ts +10 -0
- package/dist/render/html/enhancements.d.ts.map +1 -0
- package/dist/render/html/enhancements.js +25 -0
- package/dist/render/html/enhancements.js.map +1 -0
- package/dist/render/html/envelope.d.ts +182 -0
- package/dist/render/html/envelope.d.ts.map +1 -0
- package/dist/render/html/envelope.js +214 -0
- package/dist/render/html/envelope.js.map +1 -0
- package/dist/render/html/index.d.ts +3 -0
- package/dist/render/html/index.d.ts.map +1 -0
- package/dist/render/html/index.js +8 -0
- package/dist/render/html/index.js.map +1 -0
- package/dist/render/index.d.ts +6 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +11 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/layout_check.d.ts +43 -0
- package/dist/render/layout_check.d.ts.map +1 -0
- package/dist/render/layout_check.js +129 -0
- package/dist/render/layout_check.js.map +1 -0
- package/dist/render/markdown/builder.d.ts +46 -0
- package/dist/render/markdown/builder.d.ts.map +1 -0
- package/dist/render/markdown/builder.js +190 -0
- package/dist/render/markdown/builder.js.map +1 -0
- package/dist/render/markdown/envelope.d.ts +20 -0
- package/dist/render/markdown/envelope.d.ts.map +1 -0
- package/dist/render/markdown/envelope.js +29 -0
- package/dist/render/markdown/envelope.js.map +1 -0
- package/dist/render/markdown/format.d.ts +10 -0
- package/dist/render/markdown/format.d.ts.map +1 -0
- package/dist/render/markdown/format.js +202 -0
- package/dist/render/markdown/format.js.map +1 -0
- package/dist/render/markdown/index.d.ts +3 -0
- package/dist/render/markdown/index.d.ts.map +1 -0
- package/dist/render/markdown/index.js +9 -0
- package/dist/render/markdown/index.js.map +1 -0
- package/dist/render/measure_dom.d.ts +10 -0
- package/dist/render/measure_dom.d.ts.map +1 -0
- package/dist/render/measure_dom.js +57 -0
- package/dist/render/measure_dom.js.map +1 -0
- package/dist/render/payload.d.ts +16 -0
- package/dist/render/payload.d.ts.map +1 -0
- package/dist/render/payload.js +9 -0
- package/dist/render/payload.js.map +1 -0
- package/dist/render/primitive_dispatch.d.ts +72 -0
- package/dist/render/primitive_dispatch.d.ts.map +1 -0
- package/dist/render/primitive_dispatch.js +169 -0
- package/dist/render/primitive_dispatch.js.map +1 -0
- package/dist/render/react/content.d.ts +40 -0
- package/dist/render/react/content.d.ts.map +1 -0
- package/dist/render/react/content.js +39 -0
- package/dist/render/react/content.js.map +1 -0
- package/dist/render/react/enhancements.d.ts +15 -0
- package/dist/render/react/enhancements.d.ts.map +1 -0
- package/dist/render/react/enhancements.js +28 -0
- package/dist/render/react/enhancements.js.map +1 -0
- package/dist/render/react/index.d.ts +3 -0
- package/dist/render/react/index.d.ts.map +1 -0
- package/dist/render/react/index.js +9 -0
- package/dist/render/react/index.js.map +1 -0
- package/dist/render/slack/assets.d.ts +16 -0
- package/dist/render/slack/assets.d.ts.map +1 -0
- package/dist/render/slack/assets.js +40 -0
- package/dist/render/slack/assets.js.map +1 -0
- package/dist/render/slack/blocks.d.ts +72 -0
- package/dist/render/slack/blocks.d.ts.map +1 -0
- package/dist/render/slack/blocks.js +77 -0
- package/dist/render/slack/blocks.js.map +1 -0
- package/dist/render/slack/envelope.d.ts +52 -0
- package/dist/render/slack/envelope.d.ts.map +1 -0
- package/dist/render/slack/envelope.js +547 -0
- package/dist/render/slack/envelope.js.map +1 -0
- package/dist/render/slack/format.d.ts +70 -0
- package/dist/render/slack/format.d.ts.map +1 -0
- package/dist/render/slack/format.js +209 -0
- package/dist/render/slack/format.js.map +1 -0
- package/dist/render/slack/index.d.ts +6 -0
- package/dist/render/slack/index.d.ts.map +1 -0
- package/dist/render/slack/index.js +12 -0
- package/dist/render/slack/index.js.map +1 -0
- package/dist/render/slack/markdown_content.d.ts +17 -0
- package/dist/render/slack/markdown_content.d.ts.map +1 -0
- package/dist/render/slack/markdown_content.js +404 -0
- package/dist/render/slack/markdown_content.js.map +1 -0
- package/dist/render/text/envelope.d.ts +15 -0
- package/dist/render/text/envelope.d.ts.map +1 -0
- package/dist/render/text/envelope.js +17 -0
- package/dist/render/text/envelope.js.map +1 -0
- package/dist/render/text/index.d.ts +2 -0
- package/dist/render/text/index.d.ts.map +1 -0
- package/dist/render/text/index.js +8 -0
- package/dist/render/text/index.js.map +1 -0
- package/dist/testing/conformance.d.ts +145 -0
- package/dist/testing/conformance.d.ts.map +1 -0
- package/dist/testing/conformance.js +303 -0
- package/dist/testing/conformance.js.map +1 -0
- package/dist/testing/icon.d.ts +11 -0
- package/dist/testing/icon.d.ts.map +1 -0
- package/dist/testing/icon.js +244 -0
- package/dist/testing/icon.js.map +1 -0
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +10 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/registration.d.ts +32 -0
- package/dist/testing/registration.d.ts.map +1 -0
- package/dist/testing/registration.js +105 -0
- package/dist/testing/registration.js.map +1 -0
- package/dist/validate/authoring_schema.d.ts +33 -0
- package/dist/validate/authoring_schema.d.ts.map +1 -0
- package/dist/validate/authoring_schema.js +306 -0
- package/dist/validate/authoring_schema.js.map +1 -0
- package/dist/validate/composition_schema.d.ts +80 -0
- package/dist/validate/composition_schema.d.ts.map +1 -0
- package/dist/validate/composition_schema.js +127 -0
- package/dist/validate/composition_schema.js.map +1 -0
- package/dist/validate/index.d.ts +9 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +15 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate/input_budget.d.ts +35 -0
- package/dist/validate/input_budget.d.ts.map +1 -0
- package/dist/validate/input_budget.js +151 -0
- package/dist/validate/input_budget.js.map +1 -0
- package/dist/validate/json_schema.d.ts +32 -0
- package/dist/validate/json_schema.d.ts.map +1 -0
- package/dist/validate/json_schema.js +68 -0
- package/dist/validate/json_schema.js.map +1 -0
- package/dist/validate/node_issues.d.ts +12 -0
- package/dist/validate/node_issues.d.ts.map +1 -0
- package/dist/validate/node_issues.js +61 -0
- package/dist/validate/node_issues.js.map +1 -0
- package/dist/validate/url.d.ts +50 -0
- package/dist/validate/url.d.ts.map +1 -0
- package/dist/validate/url.js +107 -0
- package/dist/validate/url.js.map +1 -0
- package/dist/validate/validation.d.ts +95 -0
- package/dist/validate/validation.d.ts.map +1 -0
- package/dist/validate/validation.js +157 -0
- package/dist/validate/validation.js.map +1 -0
- package/dist/validate/value_schemas.d.ts +53 -0
- package/dist/validate/value_schemas.d.ts.map +1 -0
- package/dist/validate/value_schemas.js +50 -0
- package/dist/validate/value_schemas.js.map +1 -0
- package/package.json +119 -5
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
4
|
+
* or more contributor license agreements. Licensed under the Elastic License
|
|
5
|
+
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
6
|
+
* 2.0.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.formatDisplayValue = exports.rawDisplayValue = exports.isStructuredValue = void 0;
|
|
10
|
+
const format_number_1 = require("./format_number");
|
|
11
|
+
/** Narrows a {@link DisplayValue} to the object form. */
|
|
12
|
+
const isStructuredValue = (value) => typeof value === 'object' && value !== null && 'raw' in value;
|
|
13
|
+
exports.isStructuredValue = isStructuredValue;
|
|
14
|
+
/** The unformatted value behind a {@link DisplayValue}. */
|
|
15
|
+
const rawDisplayValue = (value) => (0, exports.isStructuredValue)(value) ? value.raw : value;
|
|
16
|
+
exports.rawDisplayValue = rawDisplayValue;
|
|
17
|
+
/**
|
|
18
|
+
* Renders a {@link DisplayValue} for display. A bare string passes through; a
|
|
19
|
+
* {@link StructuredValue} is formatted per its `format`.
|
|
20
|
+
*
|
|
21
|
+
* Numeric formats fall back to `String(raw)` for a string `raw` rather than
|
|
22
|
+
* erroring. Locale is fixed to `en-US` and dates render in UTC so the same
|
|
23
|
+
* composition formats identically on every host.
|
|
24
|
+
*/
|
|
25
|
+
const formatDisplayValue = (value, options = {}) => {
|
|
26
|
+
if (!(0, exports.isStructuredValue)(value)) {
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
const { raw, format, precision, currency } = value;
|
|
30
|
+
switch (format) {
|
|
31
|
+
case 'compact':
|
|
32
|
+
return typeof raw === 'number'
|
|
33
|
+
? (0, format_number_1.formatCompactNumber)(raw, '', precision)
|
|
34
|
+
: String(raw);
|
|
35
|
+
case 'percent':
|
|
36
|
+
return typeof raw === 'number'
|
|
37
|
+
? intlNumber(raw, precision, { style: 'percent' })
|
|
38
|
+
: String(raw);
|
|
39
|
+
case 'currency':
|
|
40
|
+
return typeof raw === 'number'
|
|
41
|
+
? intlNumber(raw, precision ?? 2, {
|
|
42
|
+
style: 'currency',
|
|
43
|
+
currency: currency ?? 'USD',
|
|
44
|
+
})
|
|
45
|
+
: String(raw);
|
|
46
|
+
case 'bytes':
|
|
47
|
+
return typeof raw === 'number'
|
|
48
|
+
? formatBytes(raw, precision)
|
|
49
|
+
: String(raw);
|
|
50
|
+
case 'duration':
|
|
51
|
+
return typeof raw === 'number' ? formatDuration(raw) : String(raw);
|
|
52
|
+
case 'date':
|
|
53
|
+
return formatDate(raw);
|
|
54
|
+
case 'relativeTime':
|
|
55
|
+
return formatRelativeTime(raw, options.now ?? new Date());
|
|
56
|
+
case 'number':
|
|
57
|
+
default:
|
|
58
|
+
return typeof raw === 'number'
|
|
59
|
+
? intlNumber(raw, precision, {})
|
|
60
|
+
: String(raw);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
exports.formatDisplayValue = formatDisplayValue;
|
|
64
|
+
const intlNumber = (value, precision, options) => new Intl.NumberFormat('en-US', {
|
|
65
|
+
...options,
|
|
66
|
+
...(precision === undefined
|
|
67
|
+
? { maximumFractionDigits: 2 }
|
|
68
|
+
: {
|
|
69
|
+
minimumFractionDigits: precision,
|
|
70
|
+
maximumFractionDigits: precision,
|
|
71
|
+
}),
|
|
72
|
+
}).format(value);
|
|
73
|
+
const BYTE_UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
|
|
74
|
+
const formatBytes = (bytes, precision) => {
|
|
75
|
+
let scaled = Math.abs(bytes);
|
|
76
|
+
let unit = 0;
|
|
77
|
+
while (scaled >= 1024 && unit < BYTE_UNITS.length - 1) {
|
|
78
|
+
scaled /= 1024;
|
|
79
|
+
unit += 1;
|
|
80
|
+
}
|
|
81
|
+
const sign = bytes < 0 ? '-' : '';
|
|
82
|
+
const digits = unit === 0 ? 0 : (precision ?? 1);
|
|
83
|
+
return `${sign}${trimFixed(scaled, digits)} ${BYTE_UNITS[unit]}`;
|
|
84
|
+
};
|
|
85
|
+
const formatDuration = (seconds) => {
|
|
86
|
+
const abs = Math.abs(seconds);
|
|
87
|
+
const sign = seconds < 0 ? '-' : '';
|
|
88
|
+
if (abs < 1) {
|
|
89
|
+
return `${sign}${trimFixed(abs * 1000, 1)}ms`;
|
|
90
|
+
}
|
|
91
|
+
if (abs < 60) {
|
|
92
|
+
return `${sign}${trimFixed(abs, 1)}s`;
|
|
93
|
+
}
|
|
94
|
+
const pairs = [
|
|
95
|
+
[86400, 'd', 3600, 'h'],
|
|
96
|
+
[3600, 'h', 60, 'm'],
|
|
97
|
+
[60, 'm', 1, 's'],
|
|
98
|
+
];
|
|
99
|
+
for (const [major, majorUnit, minor, minorUnit] of pairs) {
|
|
100
|
+
if (abs >= major) {
|
|
101
|
+
const majorCount = Math.floor(abs / major);
|
|
102
|
+
const minorCount = Math.floor((abs % major) / minor);
|
|
103
|
+
return minorCount > 0
|
|
104
|
+
? `${sign}${majorCount}${majorUnit} ${minorCount}${minorUnit}`
|
|
105
|
+
: `${sign}${majorCount}${majorUnit}`;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return `${sign}${trimFixed(abs, 1)}s`;
|
|
109
|
+
};
|
|
110
|
+
const formatDate = (raw) => {
|
|
111
|
+
const date = new Date(raw);
|
|
112
|
+
if (Number.isNaN(date.getTime())) {
|
|
113
|
+
return String(raw);
|
|
114
|
+
}
|
|
115
|
+
return new Intl.DateTimeFormat('en-US', {
|
|
116
|
+
dateStyle: 'medium',
|
|
117
|
+
timeStyle: 'short',
|
|
118
|
+
timeZone: 'UTC',
|
|
119
|
+
}).format(date);
|
|
120
|
+
};
|
|
121
|
+
const formatRelativeTime = (raw, now) => {
|
|
122
|
+
const date = new Date(raw);
|
|
123
|
+
if (Number.isNaN(date.getTime())) {
|
|
124
|
+
return String(raw);
|
|
125
|
+
}
|
|
126
|
+
const deltaSeconds = Math.round((date.getTime() - now.getTime()) / 1000);
|
|
127
|
+
const abs = Math.abs(deltaSeconds);
|
|
128
|
+
if (abs < 45) {
|
|
129
|
+
return 'just now';
|
|
130
|
+
}
|
|
131
|
+
const unit = abs < 60 * 45
|
|
132
|
+
? [Math.max(1, Math.round(abs / 60)), 'm']
|
|
133
|
+
: abs < 3600 * 22
|
|
134
|
+
? [Math.max(1, Math.round(abs / 3600)), 'h']
|
|
135
|
+
: [Math.max(1, Math.round(abs / 86400)), 'd'];
|
|
136
|
+
const phrase = `${unit[0]}${unit[1]}`;
|
|
137
|
+
return deltaSeconds < 0 ? `${phrase} ago` : `in ${phrase}`;
|
|
138
|
+
};
|
|
139
|
+
const trimFixed = (value, digits) => {
|
|
140
|
+
const fixed = value.toFixed(digits);
|
|
141
|
+
return fixed.includes('.') ? fixed.replace(/\.?0+$/, '') : fixed;
|
|
142
|
+
};
|
|
143
|
+
//# sourceMappingURL=format_display_value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format_display_value.js","sourceRoot":"","sources":["../../../src/render/format_display_value.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport type {\n DisplayValue,\n StructuredValue,\n} from '../composition/structured_value';\n\nimport { formatCompactNumber } from './format_number';\n\n/** Options for {@link formatDisplayValue}. */\nexport interface FormatDisplayValueOptions {\n /** Reference instant for `relativeTime`; defaults to the render time. */\n now?: Date;\n}\n\n/** Narrows a {@link DisplayValue} to the object form. */\nexport const isStructuredValue = (\n value: DisplayValue\n): value is StructuredValue =>\n typeof value === 'object' && value !== null && 'raw' in value;\n\n/** The unformatted value behind a {@link DisplayValue}. */\nexport const rawDisplayValue = (value: DisplayValue): number | string =>\n isStructuredValue(value) ? value.raw : value;\n\n/**\n * Renders a {@link DisplayValue} for display. A bare string passes through; a\n * {@link StructuredValue} is formatted per its `format`.\n *\n * Numeric formats fall back to `String(raw)` for a string `raw` rather than\n * erroring. Locale is fixed to `en-US` and dates render in UTC so the same\n * composition formats identically on every host.\n */\nexport const formatDisplayValue = (\n value: DisplayValue,\n options: FormatDisplayValueOptions = {}\n): string => {\n if (!isStructuredValue(value)) {\n return value;\n }\n const { raw, format, precision, currency } = value;\n switch (format) {\n case 'compact':\n return typeof raw === 'number'\n ? formatCompactNumber(raw, '', precision)\n : String(raw);\n case 'percent':\n return typeof raw === 'number'\n ? intlNumber(raw, precision, { style: 'percent' })\n : String(raw);\n case 'currency':\n return typeof raw === 'number'\n ? intlNumber(raw, precision ?? 2, {\n style: 'currency',\n currency: currency ?? 'USD',\n })\n : String(raw);\n case 'bytes':\n return typeof raw === 'number'\n ? formatBytes(raw, precision)\n : String(raw);\n case 'duration':\n return typeof raw === 'number' ? formatDuration(raw) : String(raw);\n case 'date':\n return formatDate(raw);\n case 'relativeTime':\n return formatRelativeTime(raw, options.now ?? new Date());\n case 'number':\n default:\n return typeof raw === 'number'\n ? intlNumber(raw, precision, {})\n : String(raw);\n }\n};\n\nconst intlNumber = (\n value: number,\n precision: number | undefined,\n options: Intl.NumberFormatOptions\n): string =>\n new Intl.NumberFormat('en-US', {\n ...options,\n ...(precision === undefined\n ? { maximumFractionDigits: 2 }\n : {\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n }),\n }).format(value);\n\nconst BYTE_UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'] as const;\n\nconst formatBytes = (bytes: number, precision?: number): string => {\n let scaled = Math.abs(bytes);\n let unit = 0;\n while (scaled >= 1024 && unit < BYTE_UNITS.length - 1) {\n scaled /= 1024;\n unit += 1;\n }\n const sign = bytes < 0 ? '-' : '';\n const digits = unit === 0 ? 0 : (precision ?? 1);\n return `${sign}${trimFixed(scaled, digits)} ${BYTE_UNITS[unit]}`;\n};\n\nconst formatDuration = (seconds: number): string => {\n const abs = Math.abs(seconds);\n const sign = seconds < 0 ? '-' : '';\n if (abs < 1) {\n return `${sign}${trimFixed(abs * 1000, 1)}ms`;\n }\n if (abs < 60) {\n return `${sign}${trimFixed(abs, 1)}s`;\n }\n const pairs: Array<[number, string, number, string]> = [\n [86400, 'd', 3600, 'h'],\n [3600, 'h', 60, 'm'],\n [60, 'm', 1, 's'],\n ];\n for (const [major, majorUnit, minor, minorUnit] of pairs) {\n if (abs >= major) {\n const majorCount = Math.floor(abs / major);\n const minorCount = Math.floor((abs % major) / minor);\n return minorCount > 0\n ? `${sign}${majorCount}${majorUnit} ${minorCount}${minorUnit}`\n : `${sign}${majorCount}${majorUnit}`;\n }\n }\n return `${sign}${trimFixed(abs, 1)}s`;\n};\n\nconst formatDate = (raw: number | string): string => {\n const date = new Date(raw);\n if (Number.isNaN(date.getTime())) {\n return String(raw);\n }\n return new Intl.DateTimeFormat('en-US', {\n dateStyle: 'medium',\n timeStyle: 'short',\n timeZone: 'UTC',\n }).format(date);\n};\n\nconst formatRelativeTime = (raw: number | string, now: Date): string => {\n const date = new Date(raw);\n if (Number.isNaN(date.getTime())) {\n return String(raw);\n }\n const deltaSeconds = Math.round((date.getTime() - now.getTime()) / 1000);\n const abs = Math.abs(deltaSeconds);\n if (abs < 45) {\n return 'just now';\n }\n const unit =\n abs < 60 * 45\n ? ([Math.max(1, Math.round(abs / 60)), 'm'] as const)\n : abs < 3600 * 22\n ? ([Math.max(1, Math.round(abs / 3600)), 'h'] as const)\n : ([Math.max(1, Math.round(abs / 86400)), 'd'] as const);\n const phrase = `${unit[0]}${unit[1]}`;\n return deltaSeconds < 0 ? `${phrase} ago` : `in ${phrase}`;\n};\n\nconst trimFixed = (value: number, digits: number): string => {\n const fixed = value.toFixed(digits);\n return fixed.includes('.') ? fixed.replace(/\\.?0+$/, '') : fixed;\n};\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
4
|
+
* or more contributor license agreements. Licensed under the Elastic License
|
|
5
|
+
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
6
|
+
* 2.0.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.formatCompactNumber = void 0;
|
|
10
|
+
// Compact numeric formatting, shared by anything that has to fit a number into
|
|
11
|
+
// a small space — chart axis labels, a `compact` structured display value, a
|
|
12
|
+
// text-surface trend line.
|
|
13
|
+
const TIERS = [
|
|
14
|
+
{ size: 1_000_000_000_000, suffix: 't' },
|
|
15
|
+
{ size: 1_000_000_000, suffix: 'b' },
|
|
16
|
+
{ size: 1_000_000, suffix: 'm' },
|
|
17
|
+
{ size: 1_000, suffix: 'k' },
|
|
18
|
+
{ size: 1, suffix: '' },
|
|
19
|
+
];
|
|
20
|
+
// Rounded to `precision` decimals, trailing zeros dropped.
|
|
21
|
+
const trimDecimal = (value, precision) => Number.isInteger(value)
|
|
22
|
+
? String(value)
|
|
23
|
+
: String(Number(value.toFixed(precision)));
|
|
24
|
+
/**
|
|
25
|
+
* `1_284` to `1.3k`, `18_200_000` to `18.2m`, through `b` and `t`, with an
|
|
26
|
+
* optional unit appended. `precision` is the decimals kept, `1` by default.
|
|
27
|
+
*
|
|
28
|
+
* `%` joins without a space because "99.2 %" reads wrong; every other unit gets
|
|
29
|
+
* one.
|
|
30
|
+
*/
|
|
31
|
+
const formatCompactNumber = (value, unit = '', precision = 1) => {
|
|
32
|
+
const abs = Math.abs(value);
|
|
33
|
+
let index = TIERS.findIndex(({ size }) => abs >= size);
|
|
34
|
+
if (index === -1)
|
|
35
|
+
index = TIERS.length - 1;
|
|
36
|
+
// A value that rounds up to the tier's next power, `999.96k`, reads as `1m`.
|
|
37
|
+
if (index > 0 &&
|
|
38
|
+
Math.abs(Number((value / TIERS[index].size).toFixed(precision))) >= 1_000) {
|
|
39
|
+
index -= 1;
|
|
40
|
+
}
|
|
41
|
+
const { size, suffix } = TIERS[index];
|
|
42
|
+
const scaled = `${trimDecimal(value / size, precision)}${suffix}`;
|
|
43
|
+
return unit === '' ? scaled : `${scaled}${unit === '%' ? '' : ' '}${unit}`;
|
|
44
|
+
};
|
|
45
|
+
exports.formatCompactNumber = formatCompactNumber;
|
|
46
|
+
//# sourceMappingURL=format_number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format_number.js","sourceRoot":"","sources":["../../../src/render/format_number.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,+EAA+E;AAC/E,6EAA6E;AAC7E,2BAA2B;AAE3B,MAAM,KAAK,GAAG;IACZ,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,EAAE;IACxC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE;IACpC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE;IAChC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;CACf,CAAC;AAEX,2DAA2D;AAC3D,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,SAAiB,EAAU,EAAE,CAC/D,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACf,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAE/C;;;;;;GAMG;AACI,MAAM,mBAAmB,GAAG,CACjC,KAAa,EACb,IAAI,GAAG,EAAE,EACT,SAAS,GAAG,CAAC,EACL,EAAE;IACV,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IACvD,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,6EAA6E;IAC7E,IACE,KAAK,GAAG,CAAC;QACT,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,EAC1E,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,GAAG,IAAI,EAAE,SAAS,CAAC,GAAG,MAAM,EAAE,CAAC;IAElE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;AAC7E,CAAC,CAAC;AAnBW,QAAA,mBAAmB,uBAmB9B","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\n// Compact numeric formatting, shared by anything that has to fit a number into\n// a small space — chart axis labels, a `compact` structured display value, a\n// text-surface trend line.\n\nconst TIERS = [\n { size: 1_000_000_000_000, suffix: 't' },\n { size: 1_000_000_000, suffix: 'b' },\n { size: 1_000_000, suffix: 'm' },\n { size: 1_000, suffix: 'k' },\n { size: 1, suffix: '' },\n] as const;\n\n// Rounded to `precision` decimals, trailing zeros dropped.\nconst trimDecimal = (value: number, precision: number): string =>\n Number.isInteger(value)\n ? String(value)\n : String(Number(value.toFixed(precision)));\n\n/**\n * `1_284` to `1.3k`, `18_200_000` to `18.2m`, through `b` and `t`, with an\n * optional unit appended. `precision` is the decimals kept, `1` by default.\n *\n * `%` joins without a space because \"99.2 %\" reads wrong; every other unit gets\n * one.\n */\nexport const formatCompactNumber = (\n value: number,\n unit = '',\n precision = 1\n): string => {\n const abs = Math.abs(value);\n let index = TIERS.findIndex(({ size }) => abs >= size);\n if (index === -1) index = TIERS.length - 1;\n // A value that rounds up to the tier's next power, `999.96k`, reads as `1m`.\n if (\n index > 0 &&\n Math.abs(Number((value / TIERS[index]!.size).toFixed(precision))) >= 1_000\n ) {\n index -= 1;\n }\n const { size, suffix } = TIERS[index]!;\n const scaled = `${trimDecimal(value / size, precision)}${suffix}`;\n\n return unit === '' ? scaled : `${scaled}${unit === '%' ? '' : ' '}${unit}`;\n};\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
4
|
+
* or more contributor license agreements. Licensed under the Elastic License
|
|
5
|
+
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
6
|
+
* 2.0.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.embedScript = exports.enhancementScript = void 0;
|
|
10
|
+
const enhancements_1 = require("../../pack/enhancements");
|
|
11
|
+
/** The scripts of `applied`, in order, each in its own function scope. */
|
|
12
|
+
const enhancementScript = (applied) => applied
|
|
13
|
+
.flatMap(({ script }) => (script ? [(0, enhancements_1.scopeScript)(script)] : []))
|
|
14
|
+
.join('\n');
|
|
15
|
+
exports.enhancementScript = enhancementScript;
|
|
16
|
+
/**
|
|
17
|
+
* Binds `root` to the section that contains the emitted `<script>`. Inside a
|
|
18
|
+
* shadow root `document.currentScript` is `null`, so there it warns instead.
|
|
19
|
+
*/
|
|
20
|
+
const embedScript = (body) => [
|
|
21
|
+
'(function (root) {',
|
|
22
|
+
'if (!root) {',
|
|
23
|
+
`console.warn("isomer: enhancement script has no root; render with scripts: 'host' and call runEnhancementScript");`,
|
|
24
|
+
'return;',
|
|
25
|
+
'}',
|
|
26
|
+
body,
|
|
27
|
+
'})(document.currentScript && document.currentScript.parentElement);',
|
|
28
|
+
].join('\n');
|
|
29
|
+
exports.embedScript = embedScript;
|
|
30
|
+
//# sourceMappingURL=enhancements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhancements.js","sourceRoot":"","sources":["../../../../src/render/html/enhancements.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,0DAGiC;AAIjC,0EAA0E;AACnE,MAAM,iBAAiB,GAAG,CAC/B,OAAyC,EACjC,EAAE,CACV,OAAO;KACJ,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAA,0BAAW,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAC9D,IAAI,CAAC,IAAI,CAAC,CAAC;AALH,QAAA,iBAAiB,qBAKd;AAEhB;;;GAGG;AACI,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE,CAClD;IACE,oBAAoB;IACpB,cAAc;IACd,oHAAoH;IACpH,SAAS;IACT,GAAG;IACH,IAAI;IACJ,qEAAqE;CACtE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AATF,QAAA,WAAW,eAST","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport {\n type EnhancementDefinition,\n scopeScript,\n} from '../../pack/enhancements';\n\nexport type { EnhancementDefinition };\n\n/** The scripts of `applied`, in order, each in its own function scope. */\nexport const enhancementScript = (\n applied: readonly EnhancementDefinition[]\n): string =>\n applied\n .flatMap(({ script }) => (script ? [scopeScript(script)] : []))\n .join('\\n');\n\n/**\n * Binds `root` to the section that contains the emitted `<script>`. Inside a\n * shadow root `document.currentScript` is `null`, so there it warns instead.\n */\nexport const embedScript = (body: string): string =>\n [\n '(function (root) {',\n 'if (!root) {',\n `console.warn(\"isomer: enhancement script has no root; render with scripts: 'host' and call runEnhancementScript\");`,\n 'return;',\n '}',\n body,\n '})(document.currentScript && document.currentScript.parentElement);',\n ].join('\\n');\n"]}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
4
|
+
* or more contributor license agreements. Licensed under the Elastic License
|
|
5
|
+
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
6
|
+
* 2.0.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.renderHTMLWithDispatcher = void 0;
|
|
10
|
+
const react_1 = require("react");
|
|
11
|
+
const server_1 = require("react-dom/server");
|
|
12
|
+
const acorn_1 = require("acorn");
|
|
13
|
+
const body_node_base_1 = require("../../composition/body_node_base");
|
|
14
|
+
const enhancements_1 = require("../../pack/enhancements");
|
|
15
|
+
const validation_1 = require("../../validate/validation");
|
|
16
|
+
const anchors_1 = require("../anchors");
|
|
17
|
+
const context_view_1 = require("../context_view");
|
|
18
|
+
const payload_1 = require("../payload");
|
|
19
|
+
const content_1 = require("../react/content");
|
|
20
|
+
const enhancements_2 = require("./enhancements");
|
|
21
|
+
/**
|
|
22
|
+
* Renders a composition to standalone HTML: the wrapper element, the pack's
|
|
23
|
+
* markup, and its CSS either inlined or returned separately.
|
|
24
|
+
*
|
|
25
|
+
* Runs the pack twice when a style adapter is present — once to collect
|
|
26
|
+
* styles, once with the render context those styles produced — so a
|
|
27
|
+
* `renderReact` implementation must be free of side effects.
|
|
28
|
+
*/
|
|
29
|
+
const renderHTMLWithDispatcher = (input, { dispatcher, validate = (0, validation_1.createCompositionValidator)(dispatcher.definitions), options: rawOptions = {}, defaultAriaLabel = 'View', styleAdapter, scriptText = '', enhancementDefinitions = [], }) => {
|
|
30
|
+
const validation = validate(input);
|
|
31
|
+
const composition = (0, validation_1.compositionToRender)(validation);
|
|
32
|
+
// Resolved before the validation mode is read, so an adapter can derive
|
|
33
|
+
// `onValidationError`.
|
|
34
|
+
const options = styleAdapter?.resolveOptions?.(composition, rawOptions) ?? rawOptions;
|
|
35
|
+
(0, validation_1.enforceValidationMode)(validation, options.onValidationError);
|
|
36
|
+
const framed = options.framed ?? true;
|
|
37
|
+
const heading = options.heading ?? true;
|
|
38
|
+
const theme = options.theme ?? composition.theme ?? 'auto';
|
|
39
|
+
const cssMode = options.css ?? 'inline';
|
|
40
|
+
const scriptsMode = options.scripts ?? 'embedded';
|
|
41
|
+
const styleState = styleAdapter?.createCollector(options);
|
|
42
|
+
const enhancementScope = {
|
|
43
|
+
walk: (0, body_node_base_1.createChildNodeWalker)(dispatcher.definitions),
|
|
44
|
+
definitions: enhancementDefinitions,
|
|
45
|
+
};
|
|
46
|
+
const applied = (0, enhancements_1.resolveEnhancements)(composition.body, enhancementScope.walk, enhancementDefinitions, options.enhancements ?? []);
|
|
47
|
+
const enhancements = new Set(applied.map(({ id }) => id));
|
|
48
|
+
const anchors = options.anchors === true || applied.some(({ anchors }) => anchors);
|
|
49
|
+
const enhanced = (context) => (0, context_view_1.contextWith)(context, 'enhancements', enhancements);
|
|
50
|
+
if (styleState) {
|
|
51
|
+
styleAdapter?.collectWrapperStyles?.(styleState, options);
|
|
52
|
+
styleAdapter?.collectViewStyles?.(composition, dispatcher, styleState, { fluid: Boolean(options.fluid) }, options, enhancementScope);
|
|
53
|
+
const collectionContext = enhanced(styleAdapter?.createRenderContext(styleState, options));
|
|
54
|
+
(0, anchors_1.withAnchors)(anchors, () => (0, server_1.renderToStaticMarkup)((0, react_1.createElement)(() => (0, content_1.renderCompositionContent)(composition, dispatcher, collectionContext, {
|
|
55
|
+
heading,
|
|
56
|
+
}))));
|
|
57
|
+
styleAdapter?.collectAfterRender?.(composition, styleState, options);
|
|
58
|
+
}
|
|
59
|
+
const renderContext = enhanced(styleState && styleAdapter
|
|
60
|
+
? styleAdapter.createRenderContext(styleState, options)
|
|
61
|
+
: // No adapter means no class names and no css vars to resolve.
|
|
62
|
+
{});
|
|
63
|
+
const cssText = styleState && styleAdapter
|
|
64
|
+
? styleAdapter.renderStyles(styleState, options)
|
|
65
|
+
: '';
|
|
66
|
+
const adapterScriptText = styleAdapter?.getScriptText?.(composition, options, enhancementScope) ?? '';
|
|
67
|
+
const js = [
|
|
68
|
+
...[scriptText, adapterScriptText].filter(Boolean).map(enhancements_1.scopeScript),
|
|
69
|
+
(0, enhancements_2.enhancementScript)(applied),
|
|
70
|
+
]
|
|
71
|
+
.filter(Boolean)
|
|
72
|
+
.join('\n');
|
|
73
|
+
const embeddedScript = js && scriptsMode === 'embedded' ? (0, enhancements_2.embedScript)(js) : '';
|
|
74
|
+
const body = (0, anchors_1.withAnchors)(anchors, () => (0, server_1.renderToStaticMarkup)((0, react_1.createElement)(() => (0, content_1.renderCompositionContent)(composition, dispatcher, renderContext, {
|
|
75
|
+
heading,
|
|
76
|
+
}))));
|
|
77
|
+
const inlineCss = cssMode === 'inline' ? embedCss(cssText) : '';
|
|
78
|
+
const inlineJs = embeddedScript ? embedJs(embeddedScript) : '';
|
|
79
|
+
const raw = (0, server_1.renderToStaticMarkup)((0, react_1.createElement)((RenderedHtmlView), {
|
|
80
|
+
composition,
|
|
81
|
+
theme,
|
|
82
|
+
fluid: Boolean(options.fluid),
|
|
83
|
+
framed,
|
|
84
|
+
styleText: inlineCss || undefined,
|
|
85
|
+
scriptText: inlineJs || undefined,
|
|
86
|
+
defaultAriaLabel,
|
|
87
|
+
body,
|
|
88
|
+
}));
|
|
89
|
+
const html = options.minify === false ? raw : minifyHtml(raw);
|
|
90
|
+
// Inline payloads are measured as emitted, escapes included.
|
|
91
|
+
const inlineCssBytes = (0, payload_1.byteLength)(inlineCss);
|
|
92
|
+
const inlineJsBytes = (0, payload_1.byteLength)(inlineJs);
|
|
93
|
+
const separateCssBytes = cssMode === 'inline' ? 0 : (0, payload_1.byteLength)(cssText);
|
|
94
|
+
const separateJsBytes = embeddedScript ? 0 : (0, payload_1.byteLength)(js);
|
|
95
|
+
return {
|
|
96
|
+
html,
|
|
97
|
+
css: cssText,
|
|
98
|
+
js,
|
|
99
|
+
body,
|
|
100
|
+
measurement: {
|
|
101
|
+
html: (0, payload_1.byteLength)(html) - inlineCssBytes - inlineJsBytes,
|
|
102
|
+
css: inlineCssBytes + separateCssBytes,
|
|
103
|
+
js: inlineJsBytes + separateJsBytes,
|
|
104
|
+
total: (0, payload_1.byteLength)(html) + separateCssBytes + separateJsBytes,
|
|
105
|
+
},
|
|
106
|
+
validationErrors: validation.errors,
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
exports.renderHTMLWithDispatcher = renderHTMLWithDispatcher;
|
|
110
|
+
// Only `</style` ends a `<style>`. `\/` is a CSS escape for `/`, so a string
|
|
111
|
+
// holding it keeps its value.
|
|
112
|
+
const embedCss = (css) => css.replace(/<\/(?=style)/gi, '<\\/');
|
|
113
|
+
// Tagged templates observe raw spelling and reuse the same frozen object per site.
|
|
114
|
+
const embedJs = (js) => {
|
|
115
|
+
if (!/<\/script|<!--/i.test(js))
|
|
116
|
+
return js;
|
|
117
|
+
const comments = [];
|
|
118
|
+
const tree = (0, acorn_1.parse)(js, { ecmaVersion: 'latest', onComment: comments });
|
|
119
|
+
const sites = [];
|
|
120
|
+
const identifiers = new Set();
|
|
121
|
+
const pending = [tree];
|
|
122
|
+
while (pending.length) {
|
|
123
|
+
const node = pending.pop();
|
|
124
|
+
if (node.type === 'Identifier' && node.name)
|
|
125
|
+
identifiers.add(node.name);
|
|
126
|
+
if (node.type === 'TaggedTemplateExpression' &&
|
|
127
|
+
node.quasi.quasis.some(({ value: { raw } }) => /<\/script|<!--/i.test(raw)))
|
|
128
|
+
sites.push(node);
|
|
129
|
+
for (const value of Object.values(node)) {
|
|
130
|
+
for (const child of Array.isArray(value) ? value : [value]) {
|
|
131
|
+
if (child &&
|
|
132
|
+
typeof child === 'object' &&
|
|
133
|
+
'type' in child &&
|
|
134
|
+
'start' in child) {
|
|
135
|
+
pending.push(child);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
sites.sort((a, b) => a.start - b.start);
|
|
141
|
+
let prefix = '__isomerTemplate';
|
|
142
|
+
while ([...identifiers].some((name) => name.startsWith(prefix)))
|
|
143
|
+
prefix += '_';
|
|
144
|
+
const literal = (value) => value === null ? 'void 0' : JSON.stringify(value).replace(/</g, '\\u003c');
|
|
145
|
+
const rewrite = (start, end) => {
|
|
146
|
+
let cursor = start;
|
|
147
|
+
let result = '';
|
|
148
|
+
const edits = [
|
|
149
|
+
...sites.map((site, index) => ({
|
|
150
|
+
...site,
|
|
151
|
+
index,
|
|
152
|
+
comment: undefined,
|
|
153
|
+
})),
|
|
154
|
+
...comments
|
|
155
|
+
.filter(({ start }) => /^(?:<!--|-->)/.test(js.slice(start, start + 4)))
|
|
156
|
+
.map((comment) => ({ ...comment, index: -1, comment: comment.value })),
|
|
157
|
+
].sort((a, b) => a.start - b.start);
|
|
158
|
+
for (const edit of edits) {
|
|
159
|
+
if (edit.start < cursor || edit.end > end)
|
|
160
|
+
continue;
|
|
161
|
+
result += js.slice(cursor, edit.start);
|
|
162
|
+
if (edit.comment !== undefined) {
|
|
163
|
+
result += `//${edit.comment}`;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
const site = sites[edit.index];
|
|
167
|
+
const { tag, quasi: { quasis, expressions }, } = site;
|
|
168
|
+
const cooked = quasis
|
|
169
|
+
.map(({ value }) => literal(value.cooked))
|
|
170
|
+
.join(',');
|
|
171
|
+
const raw = quasis.map(({ value }) => literal(value.raw)).join(',');
|
|
172
|
+
const cache = `${prefix}${edit.index}`;
|
|
173
|
+
const template = `${cache} ??= ${prefix}Freeze(${prefix}Define([${cooked}], 'raw', {value:${prefix}Freeze([${raw}])}))`;
|
|
174
|
+
const args = expressions.map((expression) => rewrite(expression.start, expression.end));
|
|
175
|
+
result += `(${rewrite(tag.start, tag.end)})(${template}${args.map((arg) => `,(${arg})`).join('')})`;
|
|
176
|
+
}
|
|
177
|
+
cursor = edit.end;
|
|
178
|
+
}
|
|
179
|
+
return result + js.slice(cursor, end);
|
|
180
|
+
};
|
|
181
|
+
const rewritten = rewrite(0, js.length);
|
|
182
|
+
const scoped = sites.length
|
|
183
|
+
? `(function(){const ${prefix}Freeze=Object.freeze,${prefix}Define=Object.defineProperty;let ${sites.map((_site, index) => `${prefix}${index}`).join(',')};\n${rewritten}\n})();`
|
|
184
|
+
: rewritten;
|
|
185
|
+
return scoped
|
|
186
|
+
.replace(/<\/(?=script)/gi, '<\\/')
|
|
187
|
+
.replace(/<!--/g, (_match, at, source) => escapedBy(source, at) ? 'x3C!--' : '\\x3C!--');
|
|
188
|
+
};
|
|
189
|
+
const escapedBy = (source, at) => {
|
|
190
|
+
let slashes = 0;
|
|
191
|
+
while (source[at - slashes - 1] === '\\')
|
|
192
|
+
slashes += 1;
|
|
193
|
+
return slashes % 2 === 1;
|
|
194
|
+
};
|
|
195
|
+
const RenderedHtmlView = ({ composition, theme, fluid, framed, styleText, scriptText, defaultAriaLabel, body, }) => (0, content_1.wrapCompositionContent)((0, react_1.createElement)(react_1.Fragment, null, styleText
|
|
196
|
+
? (0, react_1.createElement)('style', {
|
|
197
|
+
key: 'style',
|
|
198
|
+
dangerouslySetInnerHTML: { __html: styleText },
|
|
199
|
+
})
|
|
200
|
+
: null, (0, react_1.createElement)('div', {
|
|
201
|
+
key: 'body',
|
|
202
|
+
dangerouslySetInnerHTML: { __html: body },
|
|
203
|
+
}), scriptText
|
|
204
|
+
? (0, react_1.createElement)('script', {
|
|
205
|
+
key: 'script',
|
|
206
|
+
[enhancements_1.EMBEDDED_SCRIPT_ATTRIBUTE]: '',
|
|
207
|
+
dangerouslySetInnerHTML: { __html: scriptText },
|
|
208
|
+
})
|
|
209
|
+
: null), composition, { framed, fluid, theme, defaultAriaLabel });
|
|
210
|
+
// Whitespace inside `pre`, `script`, `style`, and `textarea` is content, so
|
|
211
|
+
// those elements match whole and pass through. Elsewhere only whitespace
|
|
212
|
+
// spanning a line break is collapsed: a single space between inline elements
|
|
213
|
+
// (`<b>a</b> <i>b</i>`) is authored content.
|
|
214
|
+
const MINIFY_RE = /<(pre|script|style|textarea)[\s>][\s\S]*?(?:<\/\1\s*>|$)|(?<=>)\s+(?=<)/gi;
|
|
215
|
+
const minifyHtml = (value) => value
|
|
216
|
+
.replace(MINIFY_RE, (match, element) => element || !match.includes('\n') ? match : '')
|
|
217
|
+
.trim();
|
|
218
|
+
//# sourceMappingURL=envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../../../src/render/html/envelope.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport { createElement, Fragment, type ReactNode } from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport {\n type Comment as JavaScriptComment,\n type Node as JavaScriptNode,\n parse,\n} from 'acorn';\n\nimport {\n type ChildNodeWalker,\n createChildNodeWalker,\n} from '../../composition/body_node_base';\nimport type { Composition } from '../../composition/composition';\nimport type { RenderTheme } from '../../composition/named_color';\nimport type { ValidationError } from '../../composition/validation_error';\nimport type {\n AnyPrimitiveDefinition,\n PrimitiveNode,\n PrimitiveStyleCollectionContext,\n PrimitiveStyleCollector,\n StyledRenderContext,\n StyleHandle,\n} from '../../define/primitive_module';\nimport {\n EMBEDDED_SCRIPT_ATTRIBUTE,\n resolveEnhancements,\n scopeScript,\n} from '../../pack/enhancements';\nimport {\n type CheckedValidationResult,\n compositionToRender,\n createCompositionValidator,\n enforceValidationMode,\n type ValidationErrorMode,\n} from '../../validate/validation';\nimport { withAnchors } from '../anchors';\nimport { contextWith } from '../context_view';\nimport { byteLength, type PayloadMeasurement } from '../payload';\nimport {\n type ReactContentDispatcher,\n renderCompositionContent,\n wrapCompositionContent,\n} from '../react/content';\n\nimport {\n embedScript,\n type EnhancementDefinition,\n enhancementScript,\n} from './enhancements';\n\n/** Knobs for the HTML surface. Every field defaults, so `{}` is valid. */\nexport interface HTMLRenderOptions {\n /** Overrides {@link Composition.theme}; `auto` when neither is set. */\n theme?: RenderTheme;\n /** Drops whitespace between tags that spans a line break, leaving `<pre>`, `<script>`, `<style>`, and `<textarea>` content intact. Defaults to `true`. */\n minify?: boolean;\n /** Adds the `fluid` wrapper class and reaches the pack as {@link PrimitiveStyleCollectionContext.fluid}; the adapter decides what it changes. */\n fluid?: boolean;\n /** Adds the `framed` wrapper class the adapter styles as a frame. Defaults to `true`. */\n framed?: boolean;\n /**\n * Renders the composition's title and subtitle. Defaults to `true`. Set\n * `false` when the embedding host already shows the title itself — the title\n * still backs the wrapper's `aria-label`.\n */\n heading?: boolean;\n /** Whether the collected CSS is inlined as a `<style>` element. Defaults to `'inline'`. */\n css?: 'inline' | 'separate';\n /**\n * Who runs the enhancement script. Defaults to `'embedded'`: `html` carries\n * a `<script>` that finds its own `.isomer` section when the page parses it.\n *\n * `'embedded'` never runs inside a shadow root, or anywhere the host inserts\n * `html` itself (`innerHTML`, a React tree). Use `'host'` there: `html`\n * carries no `<script>`, and the host calls `runEnhancementScript(js,\n * section)` after inserting it.\n */\n scripts?: 'embedded' | 'host';\n /** Defaults to collecting into {@link HTMLRenderResult.validationErrors}; `'throw'` raises instead. Input the budget refused raises in either mode. */\n onValidationError?: ValidationErrorMode;\n /** Opt-in by {@link EnhancementDefinition.id}. One whose content gate does not match the body is dropped. */\n enhancements?: readonly string[];\n /** `true` renders node anchors whether or not an enhancement asks for them, e.g. for tests. `false` cannot turn off anchors an enhancement needs. */\n anchors?: boolean;\n /**\n * Resolves `light-dark(…)` in the stylesheet to one scheme's value. A browser\n * resolves it itself; an image is one static frame, so the `snapshot` surface sets\n * it.\n */\n scheme?: 'light' | 'dark';\n}\n\n/**\n * One rendered HTML payload.\n *\n * `body` is the primitive markup alone; `html` adds the wrapper element, on\n * the default `css: 'inline'` a `<style>`, and on the default\n * `scripts: 'embedded'` a `<script>`. `css` and `js` are populated either way.\n * `validationErrors` are the messages that survived\n * {@link HTMLRenderOptions.onValidationError}.\n */\nexport interface HTMLRenderResult {\n html: string;\n css: string;\n /**\n * The enhancement script as a function body over `root`, or `''`. Under\n * `scripts: 'embedded'` the `<script>` in `html` wraps the same body; under\n * `'host'` the host runs it with `runEnhancementScript`. It is never a\n * complete script on its own.\n */\n js: string;\n body: string;\n measurement: PayloadMeasurement;\n validationErrors: ValidationError[];\n}\n\n/**\n * A pack's HTML entry point: the React renderer plus the style pass that runs\n * ahead of it.\n */\nexport interface HTMLRenderDispatcher<\n TNode extends PrimitiveNode,\n TCollector extends PrimitiveStyleCollector = PrimitiveStyleCollector,\n TContext = StyledRenderContext,\n> extends ReactContentDispatcher<TNode, TContext> {\n /** The whole composition's inventory: a child walker built from one pack's definitions cannot descend into another pack's container. */\n readonly definitions: readonly AnyPrimitiveDefinition[];\n /** One node's style pass, driven by {@link HTMLStyleAdapter.collectViewStyles} rather than called by the sdk. */\n collectStyles(\n node: TNode,\n collector: TCollector,\n context: PrimitiveStyleCollectionContext\n ): void;\n}\n\n/**\n * The composition's child walker and the enhancements every loaded pack\n * declared. Threaded into the style adapter so content-gating can see a\n * table nested inside a container from another package.\n */\nexport interface HTMLEnhancementScope {\n walk: ChildNodeWalker;\n definitions: readonly EnhancementDefinition[];\n}\n\n/**\n * How a pack turns its nodes into CSS. Optional overall — without an adapter\n * the render still produces markup, just with no class names and an empty\n * `TContext`.\n */\nexport interface HTMLStyleAdapter<\n TNode extends PrimitiveNode = PrimitiveNode,\n TCollector extends PrimitiveStyleCollector = PrimitiveStyleCollector,\n TContext = StyledRenderContext,\n> {\n /**\n * Names the collector shape {@link HTMLStyleAdapter.createCollector} returns, so a runtime can\n * reject a pack whose `collectStyles` hooks were written against a different one.\n */\n styleCollector?: string;\n /** One collector per render, shared by every other hook here and by both render passes. */\n createCollector(options: HTMLRenderOptions): TCollector;\n /**\n * Settles options that depend on the composition, before anything reads them.\n *\n * Needed by an adapter whose look is chosen per render: deciding `framed`\n * from the body has to happen before the wrapper class is written, not while\n * CSS is collected.\n */\n resolveOptions?(\n composition: Composition<TNode>,\n options: HTMLRenderOptions\n ): HTMLRenderOptions;\n /**\n * The `.isomer` / `.isomer.framed` / `.isomer.fluid` rules around a rendered composition.\n * Named for the wrapper rather than the frame, which the sdk reserves for the\n * document a snapshot is drawn inside.\n */\n collectWrapperStyles?(\n collector: TCollector,\n options: HTMLRenderOptions\n ): void;\n /** Walks the body into the collector, usually through {@link HTMLRenderDispatcher.collectStyles}. Runs before any markup exists. */\n collectViewStyles?(\n composition: Composition<TNode>,\n dispatcher: HTMLRenderDispatcher<TNode, TCollector, TContext>,\n collector: TCollector,\n context: PrimitiveStyleCollectionContext,\n options: HTMLRenderOptions,\n scope: HTMLEnhancementScope\n ): void;\n /** Runs once the collection pass has rendered the body, for styles only a renderer can discover. That markup is discarded. */\n collectAfterRender?(\n composition: Composition<TNode>,\n collector: TCollector,\n options: HTMLRenderOptions\n ): void;\n /**\n * Builds the render context handed to every `react` renderer. Called once\n * per pass, so an adapter that behaves differently while collecting returns\n * a different context then. Must be complete, because `TContext` is the\n * pack's own type. The sdk never writes to it: whether renderers anchor\n * is the surface's decision, whatever the context's `anchors` says.\n */\n createRenderContext(\n collector: TCollector,\n options: HTMLRenderOptions\n ): TContext;\n /** The collected CSS as text, with no `<style>` wrapper; the sdk adds one when `css` is `'inline'`. */\n renderStyles(collector: TCollector, options: HTMLRenderOptions): string;\n /**\n * Whether `handle` belongs to this adapter's stylesheet.\n *\n * Unused on a lone adapter. A runtime composing several packs' adapters\n * routes each handle to its owner, so CSS is neither duplicated nor\n * rendered against the wrong theme. An adapter that cannot answer this\n * cannot be combined with another.\n */\n ownsHandle?(handle: StyleHandle): boolean;\n /**\n * Appended after {@link HTMLDispatcherRenderOptions.scriptText} into the\n * render's one script. A function body with `root` in scope, under the same\n * rules as {@link EnhancementDefinition.script}.\n */\n getScriptText?(\n composition: Composition<TNode>,\n options: HTMLRenderOptions,\n scope: HTMLEnhancementScope\n ): string;\n}\n\n/** What {@link renderHTMLWithDispatcher} needs beyond the composition. */\nexport interface HTMLDispatcherRenderOptions<\n TNode extends PrimitiveNode,\n TCollector extends PrimitiveStyleCollector = PrimitiveStyleCollector,\n TContext = StyledRenderContext,\n> {\n dispatcher: HTMLRenderDispatcher<TNode, TCollector, TContext>;\n /** Runs once before rendering, which draws the composition it returns; {@link HTMLRenderOptions.onValidationError} decides what becomes of its errors. Defaults to `createCompositionValidator(dispatcher.definitions)`. */\n validate?: (\n composition: Composition<TNode>\n ) => CheckedValidationResult<TNode>;\n options?: HTMLRenderOptions;\n /** Used only when the composition has neither `meta.ariaLabel` nor a `title`. Defaults to `'View'`. */\n defaultAriaLabel?: string;\n styleAdapter?: HTMLStyleAdapter<TNode, TCollector, TContext>;\n /**\n * Emitted unescaped ahead of {@link HTMLStyleAdapter.getScriptText}. A\n * function body with `root` in scope, under the same rules as\n * {@link EnhancementDefinition.script}.\n */\n scriptText?: string;\n /**\n * Progressive enhancements declared by the packs this render was composed\n * from. The render resolves {@link HTMLRenderOptions.enhancements} against\n * them once, hands every renderer the set as `context.enhancements`, and\n * emits each resolved one's script.\n */\n enhancementDefinitions?: readonly EnhancementDefinition[];\n}\n\n/**\n * Renders a composition to standalone HTML: the wrapper element, the pack's\n * markup, and its CSS either inlined or returned separately.\n *\n * Runs the pack twice when a style adapter is present — once to collect\n * styles, once with the render context those styles produced — so a\n * `renderReact` implementation must be free of side effects.\n */\nexport const renderHTMLWithDispatcher = <\n TNode extends PrimitiveNode,\n TCollector extends PrimitiveStyleCollector = PrimitiveStyleCollector,\n TContext = StyledRenderContext,\n>(\n input: Composition<TNode>,\n {\n dispatcher,\n validate = createCompositionValidator<TNode>(dispatcher.definitions),\n options: rawOptions = {},\n defaultAriaLabel = 'View',\n styleAdapter,\n scriptText = '',\n enhancementDefinitions = [],\n }: HTMLDispatcherRenderOptions<TNode, TCollector, TContext>\n): HTMLRenderResult => {\n const validation = validate(input);\n const composition = compositionToRender(validation);\n // Resolved before the validation mode is read, so an adapter can derive\n // `onValidationError`.\n const options =\n styleAdapter?.resolveOptions?.(composition, rawOptions) ?? rawOptions;\n enforceValidationMode(validation, options.onValidationError);\n const framed = options.framed ?? true;\n const heading = options.heading ?? true;\n const theme = options.theme ?? composition.theme ?? 'auto';\n const cssMode = options.css ?? 'inline';\n const scriptsMode = options.scripts ?? 'embedded';\n const styleState = styleAdapter?.createCollector(options);\n const enhancementScope: HTMLEnhancementScope = {\n walk: createChildNodeWalker(dispatcher.definitions),\n definitions: enhancementDefinitions,\n };\n const applied = resolveEnhancements(\n composition.body,\n enhancementScope.walk,\n enhancementDefinitions,\n options.enhancements ?? []\n );\n const enhancements: ReadonlySet<string> = new Set(\n applied.map(({ id }) => id)\n );\n const anchors =\n options.anchors === true || applied.some(({ anchors }) => anchors);\n const enhanced = (context: TContext): TContext =>\n contextWith(context, 'enhancements', enhancements);\n\n if (styleState) {\n styleAdapter?.collectWrapperStyles?.(styleState, options);\n styleAdapter?.collectViewStyles?.(\n composition,\n dispatcher,\n styleState,\n { fluid: Boolean(options.fluid) },\n options,\n enhancementScope\n );\n const collectionContext = enhanced(\n styleAdapter?.createRenderContext(styleState, options) as TContext\n );\n withAnchors(anchors, () =>\n renderToStaticMarkup(\n createElement(() =>\n renderCompositionContent(composition, dispatcher, collectionContext, {\n heading,\n })\n )\n )\n );\n styleAdapter?.collectAfterRender?.(composition, styleState, options);\n }\n\n const renderContext = enhanced(\n styleState && styleAdapter\n ? styleAdapter.createRenderContext(styleState, options)\n : // No adapter means no class names and no css vars to resolve.\n ({} as TContext)\n );\n const cssText =\n styleState && styleAdapter\n ? styleAdapter.renderStyles(styleState, options)\n : '';\n const adapterScriptText =\n styleAdapter?.getScriptText?.(composition, options, enhancementScope) ?? '';\n const js = [\n ...[scriptText, adapterScriptText].filter(Boolean).map(scopeScript),\n enhancementScript(applied),\n ]\n .filter(Boolean)\n .join('\\n');\n const embeddedScript =\n js && scriptsMode === 'embedded' ? embedScript(js) : '';\n const body = withAnchors(anchors, () =>\n renderToStaticMarkup(\n createElement(() =>\n renderCompositionContent(composition, dispatcher, renderContext, {\n heading,\n })\n )\n )\n );\n const inlineCss = cssMode === 'inline' ? embedCss(cssText) : '';\n const inlineJs = embeddedScript ? embedJs(embeddedScript) : '';\n const raw = renderToStaticMarkup(\n createElement(RenderedHtmlView<TNode>, {\n composition,\n theme,\n fluid: Boolean(options.fluid),\n framed,\n styleText: inlineCss || undefined,\n scriptText: inlineJs || undefined,\n defaultAriaLabel,\n body,\n })\n );\n const html = options.minify === false ? raw : minifyHtml(raw);\n\n // Inline payloads are measured as emitted, escapes included.\n const inlineCssBytes = byteLength(inlineCss);\n const inlineJsBytes = byteLength(inlineJs);\n const separateCssBytes = cssMode === 'inline' ? 0 : byteLength(cssText);\n const separateJsBytes = embeddedScript ? 0 : byteLength(js);\n\n return {\n html,\n css: cssText,\n js,\n body,\n measurement: {\n html: byteLength(html) - inlineCssBytes - inlineJsBytes,\n css: inlineCssBytes + separateCssBytes,\n js: inlineJsBytes + separateJsBytes,\n total: byteLength(html) + separateCssBytes + separateJsBytes,\n },\n validationErrors: validation.errors,\n };\n};\n\ninterface RenderedHtmlViewProps<TNode extends PrimitiveNode> {\n composition: Composition<TNode>;\n theme: RenderTheme;\n fluid: boolean;\n framed: boolean;\n styleText?: string | undefined;\n scriptText?: string | undefined;\n defaultAriaLabel: string;\n body: string;\n}\n\n// Only `</style` ends a `<style>`. `\\/` is a CSS escape for `/`, so a string\n// holding it keeps its value.\nconst embedCss = (css: string): string => css.replace(/<\\/(?=style)/gi, '<\\\\/');\n\ninterface ScriptNode extends JavaScriptNode {\n tag: ScriptNode;\n quasi: ScriptNode;\n quasis: ScriptNode[];\n expressions: ScriptNode[];\n value: { raw: string; cooked: string | null };\n name?: string;\n}\n\n// Tagged templates observe raw spelling and reuse the same frozen object per site.\nconst embedJs = (js: string): string => {\n if (!/<\\/script|<!--/i.test(js)) return js;\n const comments: JavaScriptComment[] = [];\n const tree = parse(js, { ecmaVersion: 'latest', onComment: comments });\n const sites: ScriptNode[] = [];\n const identifiers = new Set<string>();\n const pending: JavaScriptNode[] = [tree];\n while (pending.length) {\n const node = pending.pop()! as ScriptNode;\n if (node.type === 'Identifier' && node.name) identifiers.add(node.name);\n if (\n node.type === 'TaggedTemplateExpression' &&\n node.quasi.quasis.some(({ value: { raw } }) =>\n /<\\/script|<!--/i.test(raw)\n )\n )\n sites.push(node);\n for (const value of Object.values(node)) {\n for (const child of Array.isArray(value) ? value : [value]) {\n if (\n child &&\n typeof child === 'object' &&\n 'type' in child &&\n 'start' in child\n ) {\n pending.push(child as JavaScriptNode);\n }\n }\n }\n }\n sites.sort((a, b) => a.start - b.start);\n let prefix = '__isomerTemplate';\n while ([...identifiers].some((name) => name.startsWith(prefix)))\n prefix += '_';\n const literal = (value: string | null): string =>\n value === null ? 'void 0' : JSON.stringify(value).replace(/</g, '\\\\u003c');\n const rewrite = (start: number, end: number): string => {\n let cursor = start;\n let result = '';\n const edits = [\n ...sites.map((site, index) => ({\n ...site,\n index,\n comment: undefined as string | undefined,\n })),\n ...comments\n .filter(({ start }) => /^(?:<!--|-->)/.test(js.slice(start, start + 4)))\n .map((comment) => ({ ...comment, index: -1, comment: comment.value })),\n ].sort((a, b) => a.start - b.start);\n for (const edit of edits) {\n if (edit.start < cursor || edit.end > end) continue;\n result += js.slice(cursor, edit.start);\n if (edit.comment !== undefined) {\n result += `//${edit.comment}`;\n } else {\n const site = sites[edit.index]!;\n const {\n tag,\n quasi: { quasis, expressions },\n } = site;\n const cooked = quasis\n .map(({ value }) => literal(value.cooked))\n .join(',');\n const raw = quasis.map(({ value }) => literal(value.raw)).join(',');\n const cache = `${prefix}${edit.index}`;\n const template = `${cache} ??= ${prefix}Freeze(${prefix}Define([${cooked}], 'raw', {value:${prefix}Freeze([${raw}])}))`;\n const args = expressions.map((expression) =>\n rewrite(expression.start, expression.end)\n );\n result += `(${rewrite(tag.start, tag.end)})(${template}${args.map((arg) => `,(${arg})`).join('')})`;\n }\n cursor = edit.end;\n }\n return result + js.slice(cursor, end);\n };\n const rewritten = rewrite(0, js.length);\n const scoped = sites.length\n ? `(function(){const ${prefix}Freeze=Object.freeze,${prefix}Define=Object.defineProperty;let ${sites.map((_site, index) => `${prefix}${index}`).join(',')};\\n${rewritten}\\n})();`\n : rewritten;\n return scoped\n .replace(/<\\/(?=script)/gi, '<\\\\/')\n .replace(/<!--/g, (_match, at: number, source: string) =>\n escapedBy(source, at) ? 'x3C!--' : '\\\\x3C!--'\n );\n};\n\nconst escapedBy = (source: string, at: number): boolean => {\n let slashes = 0;\n while (source[at - slashes - 1] === '\\\\') slashes += 1;\n return slashes % 2 === 1;\n};\n\nconst RenderedHtmlView = <TNode extends PrimitiveNode>({\n composition,\n theme,\n fluid,\n framed,\n styleText,\n scriptText,\n defaultAriaLabel,\n body,\n}: RenderedHtmlViewProps<TNode>): ReactNode =>\n wrapCompositionContent(\n createElement(\n Fragment,\n null,\n styleText\n ? createElement('style', {\n key: 'style',\n dangerouslySetInnerHTML: { __html: styleText },\n })\n : null,\n createElement('div', {\n key: 'body',\n dangerouslySetInnerHTML: { __html: body },\n }),\n scriptText\n ? createElement('script', {\n key: 'script',\n [EMBEDDED_SCRIPT_ATTRIBUTE]: '',\n dangerouslySetInnerHTML: { __html: scriptText },\n })\n : null\n ),\n composition,\n { framed, fluid, theme, defaultAriaLabel }\n );\n\n// Whitespace inside `pre`, `script`, `style`, and `textarea` is content, so\n// those elements match whole and pass through. Elsewhere only whitespace\n// spanning a line break is collapsed: a single space between inline elements\n// (`<b>a</b> <i>b</i>`) is authored content.\nconst MINIFY_RE =\n /<(pre|script|style|textarea)[\\s>][\\s\\S]*?(?:<\\/\\1\\s*>|$)|(?<=>)\\s+(?=<)/gi;\n\nconst minifyHtml = (value: string): string =>\n value\n .replace(MINIFY_RE, (match, element: string | undefined) =>\n element || !match.includes('\\n') ? match : ''\n )\n .trim();\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
4
|
+
* or more contributor license agreements. Licensed under the Elastic License
|
|
5
|
+
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
6
|
+
* 2.0.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.renderHTMLWithDispatcher = void 0;
|
|
10
|
+
var envelope_1 = require("./envelope");
|
|
11
|
+
Object.defineProperty(exports, "renderHTMLWithDispatcher", { enumerable: true, get: function () { return envelope_1.renderHTMLWithDispatcher; } });
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/render/html/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAGH,uCAQoB;AADlB,oHAAA,wBAAwB,OAAA","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nexport { type EnhancementDefinition } from './enhancements';\nexport {\n type HTMLDispatcherRenderOptions,\n type HTMLEnhancementScope,\n type HTMLRenderDispatcher,\n type HTMLRenderOptions,\n type HTMLRenderResult,\n type HTMLStyleAdapter,\n renderHTMLWithDispatcher,\n} from './envelope';\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
4
|
+
* or more contributor license agreements. Licensed under the Elastic License
|
|
5
|
+
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
6
|
+
* 2.0.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.createPrimitiveDispatcher = exports.checkLayout = exports.rawDisplayValue = exports.isStructuredValue = exports.formatDisplayValue = exports.withoutAnchors = exports.withNodeAnchors = exports.nodeAnchor = exports.layoutRoom = exports.NODE_ANCHOR_ATTRIBUTE = exports.LAYOUT_ROOM_ATTRIBUTE = void 0;
|
|
10
|
+
var anchors_1 = require("./anchors");
|
|
11
|
+
Object.defineProperty(exports, "LAYOUT_ROOM_ATTRIBUTE", { enumerable: true, get: function () { return anchors_1.LAYOUT_ROOM_ATTRIBUTE; } });
|
|
12
|
+
Object.defineProperty(exports, "NODE_ANCHOR_ATTRIBUTE", { enumerable: true, get: function () { return anchors_1.NODE_ANCHOR_ATTRIBUTE; } });
|
|
13
|
+
Object.defineProperty(exports, "layoutRoom", { enumerable: true, get: function () { return anchors_1.layoutRoom; } });
|
|
14
|
+
Object.defineProperty(exports, "nodeAnchor", { enumerable: true, get: function () { return anchors_1.nodeAnchor; } });
|
|
15
|
+
Object.defineProperty(exports, "withNodeAnchors", { enumerable: true, get: function () { return anchors_1.withNodeAnchors; } });
|
|
16
|
+
Object.defineProperty(exports, "withoutAnchors", { enumerable: true, get: function () { return anchors_1.withoutAnchors; } });
|
|
17
|
+
var format_display_value_1 = require("./format_display_value");
|
|
18
|
+
Object.defineProperty(exports, "formatDisplayValue", { enumerable: true, get: function () { return format_display_value_1.formatDisplayValue; } });
|
|
19
|
+
Object.defineProperty(exports, "isStructuredValue", { enumerable: true, get: function () { return format_display_value_1.isStructuredValue; } });
|
|
20
|
+
Object.defineProperty(exports, "rawDisplayValue", { enumerable: true, get: function () { return format_display_value_1.rawDisplayValue; } });
|
|
21
|
+
var layout_check_1 = require("./layout_check");
|
|
22
|
+
Object.defineProperty(exports, "checkLayout", { enumerable: true, get: function () { return layout_check_1.checkLayout; } });
|
|
23
|
+
var primitive_dispatch_1 = require("./primitive_dispatch");
|
|
24
|
+
Object.defineProperty(exports, "createPrimitiveDispatcher", { enumerable: true, get: function () { return primitive_dispatch_1.createPrimitiveDispatcher; } });
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/render/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,qCAOmB;AANjB,gHAAA,qBAAqB,OAAA;AACrB,gHAAA,qBAAqB,OAAA;AACrB,qGAAA,UAAU,OAAA;AACV,qGAAA,UAAU,OAAA;AACV,0GAAA,eAAe,OAAA;AACf,yGAAA,cAAc,OAAA;AAEhB,+DAKgC;AAH9B,0HAAA,kBAAkB,OAAA;AAClB,yHAAA,iBAAiB,OAAA;AACjB,uHAAA,eAAe,OAAA;AAEjB,+CAKwB;AADtB,2GAAA,WAAW,OAAA;AAGb,2DAI8B;AAD5B,+HAAA,yBAAyB,OAAA","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nexport {\n LAYOUT_ROOM_ATTRIBUTE,\n NODE_ANCHOR_ATTRIBUTE,\n layoutRoom,\n nodeAnchor,\n withNodeAnchors,\n withoutAnchors,\n} from './anchors';\nexport {\n type FormatDisplayValueOptions,\n formatDisplayValue,\n isStructuredValue,\n rawDisplayValue,\n} from './format_display_value';\nexport {\n type LayoutBox,\n type LayoutFinding,\n type LayoutRect,\n checkLayout,\n} from './layout_check';\nexport { type PayloadMeasurement } from './payload';\nexport {\n type PrimitiveDispatcher,\n type PrimitiveDispatcherOptions,\n createPrimitiveDispatcher,\n} from './primitive_dispatch';\n"]}
|