@a2ui/web_core 0.8.0 → 0.9.1-alpha.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/.tsbuildinfo +1 -0
- package/LICENSE +203 -0
- package/README.md +50 -4
- package/package.json +42 -72
- package/{dist/src → src}/v0_8/data/guards.js +13 -13
- package/src/v0_8/data/guards.test.d.ts +2 -0
- package/src/v0_8/data/guards.test.d.ts.map +1 -0
- package/src/v0_8/data/guards.test.js +174 -0
- package/src/v0_8/data/guards.test.js.map +1 -0
- package/{dist/src → src}/v0_8/data/model-processor.d.ts +1 -1
- package/{dist/src → src}/v0_8/data/model-processor.d.ts.map +1 -1
- package/{dist/src → src}/v0_8/data/model-processor.js +51 -40
- package/src/v0_8/data/model-processor.js.map +1 -0
- package/src/v0_8/data/model-processor.test.d.ts +2 -0
- package/src/v0_8/data/model-processor.test.d.ts.map +1 -0
- package/src/v0_8/data/model-processor.test.js +712 -0
- package/src/v0_8/data/model-processor.test.js.map +1 -0
- package/src/v0_8/errors.d.ts +35 -0
- package/src/v0_8/errors.d.ts.map +1 -0
- package/src/v0_8/errors.js +65 -0
- package/src/v0_8/errors.js.map +1 -0
- package/src/v0_8/events/validation-event.d.ts.map +1 -0
- package/{dist/src → src}/v0_8/events/validation-event.js.map +1 -1
- package/{dist/src → src}/v0_8/index.d.ts +35 -4
- package/{dist/src → src}/v0_8/index.d.ts.map +1 -1
- package/src/v0_8/index.js +28 -0
- package/src/v0_8/index.js.map +1 -0
- package/src/v0_8/schema/common-types.d.ts +1189 -0
- package/src/v0_8/schema/common-types.d.ts.map +1 -0
- package/src/v0_8/schema/common-types.js +381 -0
- package/src/v0_8/schema/common-types.js.map +1 -0
- package/src/v0_8/schema/server-to-client.d.ts +17949 -0
- package/src/v0_8/schema/server-to-client.d.ts.map +1 -0
- package/src/v0_8/schema/server-to-client.js +228 -0
- package/src/v0_8/schema/server-to-client.js.map +1 -0
- package/src/v0_8/schema/verify-schema.test.d.ts +17 -0
- package/src/v0_8/schema/verify-schema.test.d.ts.map +1 -0
- package/src/v0_8/schema/verify-schema.test.js +167 -0
- package/src/v0_8/schema/verify-schema.test.js.map +1 -0
- package/{dist/src → src}/v0_8/schemas/server_to_client.json +1 -1
- package/src/v0_8/schemas/server_to_client_with_standard_catalog.json +817 -787
- package/{dist/src → src}/v0_8/schemas/standard_catalog_definition.json +26 -0
- package/{dist/src → src}/v0_8/styles/behavior.js +13 -13
- package/{dist/src → src}/v0_8/styles/border.js +13 -13
- package/{dist/src → src}/v0_8/styles/colors.js +13 -13
- package/{dist/src → src}/v0_8/styles/colors.js.map +1 -1
- package/src/v0_8/styles/icons.d.ts +11 -0
- package/{dist/src → src}/v0_8/styles/icons.d.ts.map +1 -1
- package/{dist/src → src}/v0_8/styles/icons.js +17 -14
- package/{dist/src → src}/v0_8/styles/icons.js.map +1 -1
- package/src/v0_8/styles/index.js +35 -0
- package/{dist/src → src}/v0_8/styles/layout.js +13 -13
- package/{dist/src → src}/v0_8/styles/layout.js.map +1 -1
- package/src/v0_8/styles/opacity.js +24 -0
- package/src/v0_8/{events/index.ts → styles/shared.js} +3 -4
- package/src/v0_8/styles/styles.test.d.ts +2 -0
- package/src/v0_8/styles/styles.test.d.ts.map +1 -0
- package/src/v0_8/styles/styles.test.js +86 -0
- package/src/v0_8/styles/styles.test.js.map +1 -0
- package/{dist/src → src}/v0_8/styles/type.js +13 -13
- package/{dist/src → src}/v0_8/styles/utils.js +13 -13
- package/{dist/src → src}/v0_8/types/client-event.d.ts +10 -8
- package/src/v0_8/types/client-event.d.ts.map +1 -0
- package/src/v0_8/types/client-event.js +17 -0
- package/src/v0_8/types/colors.js +19 -0
- package/src/v0_8/types/components.d.ts +41 -0
- package/src/v0_8/types/components.d.ts.map +1 -0
- package/src/v0_8/types/components.js +17 -0
- package/src/v0_8/types/primitives.d.ts +9 -0
- package/src/v0_8/types/primitives.d.ts.map +1 -0
- package/src/v0_8/types/primitives.js +17 -0
- package/{dist/src → src}/v0_8/types/types.d.ts +44 -22
- package/src/v0_8/types/types.d.ts.map +1 -0
- package/src/v0_8/types/types.js +17 -0
- package/src/v0_9/basic_catalog/components/basic_components.d.ts +3359 -0
- package/src/v0_9/basic_catalog/components/basic_components.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/components/basic_components.js +448 -0
- package/src/v0_9/basic_catalog/components/basic_components.js.map +1 -0
- package/src/v0_9/basic_catalog/components/basic_components.test.d.ts +2 -0
- package/src/v0_9/basic_catalog/components/basic_components.test.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/components/basic_components.test.js +46 -0
- package/src/v0_9/basic_catalog/components/basic_components.test.js.map +1 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.d.ts +38 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.js +294 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.js.map +1 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.test.d.ts +2 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.test.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.test.js +126 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.test.js.map +1 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.d.ts +136 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.js +316 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.js.map +1 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.test.d.ts +2 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.test.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.test.js +301 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.test.js.map +1 -0
- package/src/v0_9/basic_catalog/functions/basic_functions_api.d.ts +930 -0
- package/src/v0_9/basic_catalog/functions/basic_functions_api.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/functions/basic_functions_api.js +466 -0
- package/src/v0_9/basic_catalog/functions/basic_functions_api.js.map +1 -0
- package/src/v0_9/basic_catalog/index.d.ts +5 -0
- package/src/v0_9/basic_catalog/index.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/index.js +20 -0
- package/src/v0_9/basic_catalog/index.js.map +1 -0
- package/src/v0_9/catalog/function_invoker.d.ts +12 -0
- package/src/v0_9/catalog/function_invoker.d.ts.map +1 -0
- package/src/v0_9/catalog/function_invoker.js +17 -0
- package/src/v0_9/catalog/function_invoker.js.map +1 -0
- package/src/v0_9/catalog/types.d.ts +80 -0
- package/src/v0_9/catalog/types.d.ts.map +1 -0
- package/src/v0_9/catalog/types.js +68 -0
- package/src/v0_9/catalog/types.js.map +1 -0
- package/src/v0_9/catalog/types.test.d.ts +2 -0
- package/src/v0_9/catalog/types.test.d.ts.map +1 -0
- package/src/v0_9/catalog/types.test.js +89 -0
- package/src/v0_9/catalog/types.test.js.map +1 -0
- package/src/v0_9/common/events.d.ts +45 -0
- package/src/v0_9/common/events.d.ts.map +1 -0
- package/src/v0_9/common/events.js +58 -0
- package/src/v0_9/common/events.js.map +1 -0
- package/src/v0_9/common/events.test.d.ts +2 -0
- package/src/v0_9/common/events.test.d.ts.map +1 -0
- package/src/v0_9/common/events.test.js +58 -0
- package/src/v0_9/common/events.test.js.map +1 -0
- package/src/v0_9/errors.d.ts +40 -0
- package/src/v0_9/errors.d.ts.map +1 -0
- package/src/v0_9/errors.js +69 -0
- package/src/v0_9/errors.js.map +1 -0
- package/src/v0_9/index.d.ts +152 -0
- package/src/v0_9/index.d.ts.map +1 -0
- package/src/v0_9/index.js +41 -0
- package/src/v0_9/index.js.map +1 -0
- package/src/v0_9/processing/message-processor.d.ts +70 -0
- package/src/v0_9/processing/message-processor.d.ts.map +1 -0
- package/src/v0_9/processing/message-processor.js +289 -0
- package/src/v0_9/processing/message-processor.js.map +1 -0
- package/src/v0_9/processing/message-processor.test.js +547 -0
- package/src/v0_9/processing/message-processor.test.js.map +1 -0
- package/src/v0_9/reactivity/signals.d.ts +51 -0
- package/src/v0_9/reactivity/signals.d.ts.map +1 -0
- package/src/v0_9/reactivity/signals.js +17 -0
- package/src/v0_9/reactivity/signals.js.map +1 -0
- package/src/{v0_8/events/base.ts → v0_9/reactivity/signals.test.d.ts} +14 -10
- package/src/v0_9/reactivity/signals.test.d.ts.map +1 -0
- package/src/v0_9/reactivity/signals.test.js +108 -0
- package/src/v0_9/reactivity/signals.test.js.map +1 -0
- package/src/v0_9/rendering/component-context.d.ts +37 -0
- package/src/v0_9/rendering/component-context.d.ts.map +1 -0
- package/src/v0_9/rendering/component-context.js +50 -0
- package/src/v0_9/rendering/component-context.js.map +1 -0
- package/src/v0_9/rendering/component-context.test.d.ts +2 -0
- package/src/v0_9/rendering/component-context.test.d.ts.map +1 -0
- package/src/v0_9/rendering/component-context.test.js +68 -0
- package/src/v0_9/rendering/component-context.test.js.map +1 -0
- package/src/v0_9/rendering/data-context.d.ts +99 -0
- package/src/v0_9/rendering/data-context.d.ts.map +1 -0
- package/src/v0_9/rendering/data-context.js +311 -0
- package/src/v0_9/rendering/data-context.js.map +1 -0
- package/src/v0_9/rendering/data-context.test.js +379 -0
- package/src/v0_9/rendering/data-context.test.js.map +1 -0
- package/src/v0_9/rendering/generic-binder.d.ts +122 -0
- package/src/v0_9/rendering/generic-binder.d.ts.map +1 -0
- package/src/v0_9/rendering/generic-binder.js +315 -0
- package/src/v0_9/rendering/generic-binder.js.map +1 -0
- package/src/v0_9/rendering/generic-binder.test.d.ts +2 -0
- package/src/v0_9/rendering/generic-binder.test.d.ts.map +1 -0
- package/src/v0_9/rendering/generic-binder.test.js +166 -0
- package/src/v0_9/rendering/generic-binder.test.js.map +1 -0
- package/src/v0_9/schema/client-capabilities.d.ts +34 -0
- package/src/v0_9/schema/client-capabilities.d.ts.map +1 -0
- package/src/v0_9/schema/client-capabilities.js +17 -0
- package/src/v0_9/schema/client-capabilities.js.map +1 -0
- package/src/v0_9/schema/client-to-server.d.ts +208 -0
- package/src/v0_9/schema/client-to-server.d.ts.map +1 -0
- package/src/v0_9/schema/client-to-server.js +104 -0
- package/src/v0_9/schema/client-to-server.js.map +1 -0
- package/src/v0_9/schema/client-to-server.test.d.ts +2 -0
- package/src/v0_9/schema/client-to-server.test.d.ts.map +1 -0
- package/src/v0_9/schema/client-to-server.test.js +85 -0
- package/src/v0_9/schema/client-to-server.test.js.map +1 -0
- package/{dist/src → src}/v0_9/schema/common-types.d.ts +318 -88
- package/src/v0_9/schema/common-types.d.ts.map +1 -0
- package/src/v0_9/schema/common-types.js +141 -0
- package/src/v0_9/schema/common-types.js.map +1 -0
- package/src/v0_9/schema/index.d.ts +5 -0
- package/src/v0_9/schema/index.d.ts.map +1 -0
- package/src/v0_9/schema/index.js +20 -0
- package/src/v0_9/schema/index.js.map +1 -0
- package/src/v0_9/schema/server-to-client.d.ts +307 -0
- package/src/v0_9/schema/server-to-client.d.ts.map +1 -0
- package/src/v0_9/schema/server-to-client.js +92 -0
- package/src/v0_9/schema/server-to-client.js.map +1 -0
- package/src/v0_9/schema/verify-schema.test.d.ts +17 -0
- package/src/v0_9/schema/verify-schema.test.d.ts.map +1 -0
- package/src/v0_9/schema/verify-schema.test.js +174 -0
- package/src/v0_9/schema/verify-schema.test.js.map +1 -0
- package/src/v0_9/schemas/basic_catalog.json +1387 -0
- package/src/v0_9/schemas/client_capabilities.json +97 -0
- package/src/v0_9/schemas/client_data_model.json +22 -0
- package/src/v0_9/schemas/client_to_server.json +104 -0
- package/src/v0_9/schemas/client_to_server_list.json +19 -0
- package/src/v0_9/schemas/common_types.json +315 -0
- package/src/v0_9/schemas/sample.json +22 -0
- package/src/v0_9/schemas/server_capabilities.json +26 -0
- package/src/v0_9/schemas/server_to_client.json +131 -0
- package/src/v0_9/schemas/server_to_client_list.json +19 -0
- package/src/v0_9/state/component-model.d.ts +36 -0
- package/src/v0_9/state/component-model.d.ts.map +1 -0
- package/src/v0_9/state/component-model.js +65 -0
- package/src/v0_9/state/component-model.js.map +1 -0
- package/{dist/src → src}/v0_9/state/component-model.test.js +23 -0
- package/src/v0_9/state/component-model.test.js.map +1 -0
- package/src/v0_9/state/data-model.d.ts +75 -0
- package/src/v0_9/state/data-model.d.ts.map +1 -0
- package/src/v0_9/state/data-model.js +235 -0
- package/src/v0_9/state/data-model.js.map +1 -0
- package/{dist/src → src}/v0_9/state/data-model.test.js +77 -17
- package/src/v0_9/state/data-model.test.js.map +1 -0
- package/src/v0_9/state/surface-components-model.d.ts +45 -0
- package/src/v0_9/state/surface-components-model.d.ts.map +1 -0
- package/src/v0_9/state/surface-components-model.js +86 -0
- package/src/v0_9/state/surface-components-model.js.map +1 -0
- package/{dist/src → src}/v0_9/state/surface-components-model.test.js +44 -2
- package/src/v0_9/state/surface-components-model.test.js.map +1 -0
- package/{dist/src → src}/v0_9/state/surface-group-model.d.ts +28 -1
- package/src/v0_9/state/surface-group-model.d.ts.map +1 -0
- package/{dist/src → src}/v0_9/state/surface-group-model.js +44 -1
- package/src/v0_9/state/surface-group-model.js.map +1 -0
- package/{dist/src → src}/v0_9/state/surface-group-model.test.js +47 -6
- package/src/v0_9/state/surface-group-model.test.js.map +1 -0
- package/src/v0_9/state/surface-model.d.ts +62 -0
- package/src/v0_9/state/surface-model.d.ts.map +1 -0
- package/src/v0_9/state/surface-model.js +101 -0
- package/src/v0_9/state/surface-model.js.map +1 -0
- package/src/v0_9/state/surface-model.test.js +93 -0
- package/src/v0_9/state/surface-model.test.js.map +1 -0
- package/src/v0_9/test/function_execution.spec.d.ts +17 -0
- package/src/v0_9/test/function_execution.spec.d.ts.map +1 -0
- package/src/v0_9/test/function_execution.spec.js +127 -0
- package/src/v0_9/test/function_execution.spec.js.map +1 -0
- package/src/v0_9/test/test-utils.d.ts.map +1 -0
- package/{dist/src → src}/v0_9/test/test-utils.js +15 -0
- package/src/v0_9/test/test-utils.js.map +1 -0
- package/dist/.tsbuildinfo +0 -1
- package/dist/src/v0_8/data/model-processor.js.map +0 -1
- package/dist/src/v0_8/events/validation-event.d.ts.map +0 -1
- package/dist/src/v0_8/index.js +0 -12
- package/dist/src/v0_8/index.js.map +0 -1
- package/dist/src/v0_8/schemas/server_to_client_with_standard_catalog.json +0 -823
- package/dist/src/v0_8/styles/icons.d.ts +0 -11
- package/dist/src/v0_8/styles/index.js +0 -35
- package/dist/src/v0_8/styles/opacity.js +0 -24
- package/dist/src/v0_8/styles/shared.js +0 -17
- package/dist/src/v0_8/types/client-event.d.ts.map +0 -1
- package/dist/src/v0_8/types/client-event.js +0 -17
- package/dist/src/v0_8/types/colors.js +0 -19
- package/dist/src/v0_8/types/components.d.ts +0 -176
- package/dist/src/v0_8/types/components.d.ts.map +0 -1
- package/dist/src/v0_8/types/components.js +0 -17
- package/dist/src/v0_8/types/primitives.d.ts +0 -43
- package/dist/src/v0_8/types/primitives.d.ts.map +0 -1
- package/dist/src/v0_8/types/primitives.js +0 -17
- package/dist/src/v0_8/types/types.d.ts.map +0 -1
- package/dist/src/v0_8/types/types.js +0 -17
- package/dist/src/v0_9/catalog/types.d.ts +0 -27
- package/dist/src/v0_9/catalog/types.d.ts.map +0 -1
- package/dist/src/v0_9/catalog/types.js +0 -11
- package/dist/src/v0_9/catalog/types.js.map +0 -1
- package/dist/src/v0_9/common/events.d.ts +0 -24
- package/dist/src/v0_9/common/events.d.ts.map +0 -1
- package/dist/src/v0_9/common/events.js +0 -29
- package/dist/src/v0_9/common/events.js.map +0 -1
- package/dist/src/v0_9/index.d.ts +0 -11
- package/dist/src/v0_9/index.d.ts.map +0 -1
- package/dist/src/v0_9/index.js +0 -11
- package/dist/src/v0_9/index.js.map +0 -1
- package/dist/src/v0_9/processing/message-processor.d.ts +0 -34
- package/dist/src/v0_9/processing/message-processor.d.ts.map +0 -1
- package/dist/src/v0_9/processing/message-processor.js +0 -128
- package/dist/src/v0_9/processing/message-processor.js.map +0 -1
- package/dist/src/v0_9/processing/message-processor.test.js +0 -112
- package/dist/src/v0_9/processing/message-processor.test.js.map +0 -1
- package/dist/src/v0_9/rendering/component-context.d.ts +0 -17
- package/dist/src/v0_9/rendering/component-context.d.ts.map +0 -1
- package/dist/src/v0_9/rendering/component-context.js +0 -21
- package/dist/src/v0_9/rendering/component-context.js.map +0 -1
- package/dist/src/v0_9/rendering/data-context.d.ts +0 -37
- package/dist/src/v0_9/rendering/data-context.d.ts.map +0 -1
- package/dist/src/v0_9/rendering/data-context.js +0 -97
- package/dist/src/v0_9/rendering/data-context.js.map +0 -1
- package/dist/src/v0_9/rendering/data-context.test.js +0 -71
- package/dist/src/v0_9/rendering/data-context.test.js.map +0 -1
- package/dist/src/v0_9/schema/common-types.d.ts.map +0 -1
- package/dist/src/v0_9/schema/common-types.js +0 -92
- package/dist/src/v0_9/schema/common-types.js.map +0 -1
- package/dist/src/v0_9/schema/index.d.ts +0 -3
- package/dist/src/v0_9/schema/index.d.ts.map +0 -1
- package/dist/src/v0_9/schema/index.js +0 -3
- package/dist/src/v0_9/schema/index.js.map +0 -1
- package/dist/src/v0_9/schema/server-to-client.d.ts +0 -84
- package/dist/src/v0_9/schema/server-to-client.d.ts.map +0 -1
- package/dist/src/v0_9/schema/server-to-client.js +0 -21
- package/dist/src/v0_9/schema/server-to-client.js.map +0 -1
- package/dist/src/v0_9/state/component-model.d.ts +0 -16
- package/dist/src/v0_9/state/component-model.d.ts.map +0 -1
- package/dist/src/v0_9/state/component-model.js +0 -24
- package/dist/src/v0_9/state/component-model.js.map +0 -1
- package/dist/src/v0_9/state/component-model.test.js.map +0 -1
- package/dist/src/v0_9/state/data-model.d.ts +0 -47
- package/dist/src/v0_9/state/data-model.d.ts.map +0 -1
- package/dist/src/v0_9/state/data-model.js +0 -191
- package/dist/src/v0_9/state/data-model.js.map +0 -1
- package/dist/src/v0_9/state/data-model.test.js.map +0 -1
- package/dist/src/v0_9/state/surface-components-model.d.ts +0 -19
- package/dist/src/v0_9/state/surface-components-model.d.ts.map +0 -1
- package/dist/src/v0_9/state/surface-components-model.js +0 -42
- package/dist/src/v0_9/state/surface-components-model.js.map +0 -1
- package/dist/src/v0_9/state/surface-components-model.test.js.map +0 -1
- package/dist/src/v0_9/state/surface-group-model.d.ts.map +0 -1
- package/dist/src/v0_9/state/surface-group-model.js.map +0 -1
- package/dist/src/v0_9/state/surface-group-model.test.js.map +0 -1
- package/dist/src/v0_9/state/surface-model.d.ts +0 -23
- package/dist/src/v0_9/state/surface-model.d.ts.map +0 -1
- package/dist/src/v0_9/state/surface-model.js +0 -28
- package/dist/src/v0_9/state/surface-model.js.map +0 -1
- package/dist/src/v0_9/state/surface-model.test.js +0 -39
- package/dist/src/v0_9/state/surface-model.test.js.map +0 -1
- package/dist/src/v0_9/test/test-utils.d.ts.map +0 -1
- package/dist/src/v0_9/test/test-utils.js.map +0 -1
- package/src/v0_8/data/guards.ts +0 -236
- package/src/v0_8/data/model-processor.ts +0 -855
- package/src/v0_8/events/validation-event.ts +0 -66
- package/src/v0_8/index.ts +0 -12
- package/src/v0_8/styles/behavior.ts +0 -55
- package/src/v0_8/styles/border.ts +0 -42
- package/src/v0_8/styles/colors.ts +0 -100
- package/src/v0_8/styles/icons.ts +0 -60
- package/src/v0_8/styles/index.ts +0 -37
- package/src/v0_8/styles/layout.ts +0 -235
- package/src/v0_8/styles/opacity.ts +0 -24
- package/src/v0_8/styles/shared.ts +0 -17
- package/src/v0_8/styles/type.ts +0 -156
- package/src/v0_8/styles/utils.ts +0 -104
- package/src/v0_8/types/client-event.ts +0 -80
- package/src/v0_8/types/colors.ts +0 -66
- package/src/v0_8/types/components.ts +0 -213
- package/src/v0_8/types/primitives.ts +0 -60
- package/src/v0_8/types/types.ts +0 -557
- package/src/v0_9/catalog/types.ts +0 -38
- package/src/v0_9/common/events.ts +0 -44
- package/src/v0_9/index.ts +0 -12
- package/src/v0_9/processing/message-processor.test.ts +0 -133
- package/src/v0_9/processing/message-processor.ts +0 -150
- package/src/v0_9/rendering/component-context.ts +0 -36
- package/src/v0_9/rendering/data-context.test.ts +0 -85
- package/src/v0_9/rendering/data-context.ts +0 -110
- package/src/v0_9/schema/common-types.ts +0 -125
- package/src/v0_9/schema/index.ts +0 -2
- package/src/v0_9/schema/server-to-client.ts +0 -23
- package/src/v0_9/state/component-model.test.ts +0 -50
- package/src/v0_9/state/component-model.ts +0 -32
- package/src/v0_9/state/data-model.test.ts +0 -257
- package/src/v0_9/state/data-model.ts +0 -239
- package/src/v0_9/state/surface-components-model.test.ts +0 -59
- package/src/v0_9/state/surface-components-model.ts +0 -48
- package/src/v0_9/state/surface-group-model.test.ts +0 -82
- package/src/v0_9/state/surface-group-model.ts +0 -66
- package/src/v0_9/state/surface-model.test.ts +0 -44
- package/src/v0_9/state/surface-model.ts +0 -39
- package/src/v0_9/test/test-utils.ts +0 -22
- /package/{dist/src → src}/v0_8/data/guards.d.ts +0 -0
- /package/{dist/src → src}/v0_8/data/guards.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/data/guards.js.map +0 -0
- /package/{dist/src → src}/v0_8/events/base.d.ts +0 -0
- /package/{dist/src → src}/v0_8/events/base.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/events/base.js +0 -0
- /package/{dist/src → src}/v0_8/events/base.js.map +0 -0
- /package/{dist/src → src}/v0_8/events/index.d.ts +0 -0
- /package/{dist/src → src}/v0_8/events/index.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/events/index.js +0 -0
- /package/{dist/src → src}/v0_8/events/index.js.map +0 -0
- /package/{dist/src → src}/v0_8/events/validation-event.d.ts +0 -0
- /package/{dist/src → src}/v0_8/events/validation-event.js +0 -0
- /package/{dist/src → src}/v0_8/schemas/a2ui_client_capabilities_schema.json +0 -0
- /package/{dist/src → src}/v0_8/schemas/catalog_description_schema.json +0 -0
- /package/{dist/src → src}/v0_8/schemas/client_to_server.json +0 -0
- /package/{dist/src → src}/v0_8/styles/behavior.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/behavior.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/behavior.js.map +0 -0
- /package/{dist/src → src}/v0_8/styles/border.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/border.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/border.js.map +0 -0
- /package/{dist/src → src}/v0_8/styles/colors.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/colors.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/index.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/index.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/index.js.map +0 -0
- /package/{dist/src → src}/v0_8/styles/layout.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/layout.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/opacity.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/opacity.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/opacity.js.map +0 -0
- /package/{dist/src → src}/v0_8/styles/shared.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/shared.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/shared.js.map +0 -0
- /package/{dist/src → src}/v0_8/styles/type.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/type.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/type.js.map +0 -0
- /package/{dist/src → src}/v0_8/styles/utils.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/utils.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/utils.js.map +0 -0
- /package/{dist/src → src}/v0_8/types/client-event.js.map +0 -0
- /package/{dist/src → src}/v0_8/types/colors.d.ts +0 -0
- /package/{dist/src → src}/v0_8/types/colors.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/types/colors.js.map +0 -0
- /package/{dist/src → src}/v0_8/types/components.js.map +0 -0
- /package/{dist/src → src}/v0_8/types/primitives.js.map +0 -0
- /package/{dist/src → src}/v0_8/types/types.js.map +0 -0
- /package/{dist/src → src}/v0_9/processing/message-processor.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/processing/message-processor.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/rendering/data-context.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/rendering/data-context.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/state/component-model.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/state/component-model.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/state/data-model.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/state/data-model.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/state/surface-components-model.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/state/surface-components-model.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/state/surface-group-model.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/state/surface-group-model.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/state/surface-model.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/state/surface-model.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/test/test-utils.d.ts +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://a2ui.org/specification/v0_9/server_to_client.json",
|
|
4
|
+
"title": "A2UI Message Schema",
|
|
5
|
+
"description": "Describes a JSON payload for an A2UI (Agent to UI) message, which is used to dynamically construct and update user interfaces.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"oneOf": [
|
|
8
|
+
{ "$ref": "#/$defs/CreateSurfaceMessage" },
|
|
9
|
+
{ "$ref": "#/$defs/UpdateComponentsMessage" },
|
|
10
|
+
{ "$ref": "#/$defs/UpdateDataModelMessage" },
|
|
11
|
+
{ "$ref": "#/$defs/DeleteSurfaceMessage" }
|
|
12
|
+
],
|
|
13
|
+
"$defs": {
|
|
14
|
+
"CreateSurfaceMessage": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"properties": {
|
|
17
|
+
"version": {
|
|
18
|
+
"const": "v0.9"
|
|
19
|
+
},
|
|
20
|
+
"createSurface": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"description": "Signals the client to create a new surface and begin rendering it. When this message is sent, the client will expect 'updateComponents' and/or 'updateDataModel' messages for the same surfaceId that define the component tree.",
|
|
23
|
+
"properties": {
|
|
24
|
+
"surfaceId": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"description": "The unique identifier for the UI surface to be rendered."
|
|
27
|
+
},
|
|
28
|
+
"catalogId": {
|
|
29
|
+
"description": "A string that uniquely identifies this catalog. It is recommended to prefix this with an internet domain that you own, to avoid conflicts e.g. mycompany.com:somecatalog'.",
|
|
30
|
+
"type": "string"
|
|
31
|
+
},
|
|
32
|
+
"theme": {
|
|
33
|
+
"$ref": "catalog.json#/$defs/theme",
|
|
34
|
+
"description": "Theme parameters for the surface (e.g., {'primaryColor': '#FF0000'}). These must validate against the 'theme' schema defined in the catalog."
|
|
35
|
+
},
|
|
36
|
+
"sendDataModel": {
|
|
37
|
+
"type": "boolean",
|
|
38
|
+
"description": "If true, the client will send the full data model of this surface in the metadata of every A2A message sent to the server that created the surface. Defaults to false."
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"required": ["surfaceId", "catalogId"],
|
|
42
|
+
"additionalProperties": false
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"required": ["createSurface", "version"],
|
|
46
|
+
"additionalProperties": false
|
|
47
|
+
},
|
|
48
|
+
"UpdateComponentsMessage": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"properties": {
|
|
51
|
+
"version": {
|
|
52
|
+
"const": "v0.9"
|
|
53
|
+
},
|
|
54
|
+
"updateComponents": {
|
|
55
|
+
"type": "object",
|
|
56
|
+
"description": "Updates a surface with a new set of components. This message can be sent multiple times to update the component tree of an existing surface. One of the components in one of the components lists MUST have an 'id' of 'root' to serve as the root of the component tree. The createSurface message MUST have been previously sent with the 'catalogId' that is in this message.",
|
|
57
|
+
"properties": {
|
|
58
|
+
"surfaceId": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"description": "The unique identifier for the UI surface to be updated."
|
|
61
|
+
},
|
|
62
|
+
"components": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"description": "A list containing all UI components for the surface.",
|
|
65
|
+
"minItems": 1,
|
|
66
|
+
"items": {
|
|
67
|
+
"$ref": "catalog.json#/$defs/anyComponent"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"required": ["surfaceId", "components"],
|
|
72
|
+
"additionalProperties": false
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"required": ["updateComponents", "version"],
|
|
76
|
+
"additionalProperties": false
|
|
77
|
+
},
|
|
78
|
+
"UpdateDataModelMessage": {
|
|
79
|
+
"type": "object",
|
|
80
|
+
"properties": {
|
|
81
|
+
"version": {
|
|
82
|
+
"const": "v0.9"
|
|
83
|
+
},
|
|
84
|
+
"updateDataModel": {
|
|
85
|
+
"type": "object",
|
|
86
|
+
"description": "Updates the data model for an existing surface. This message can be sent multiple times to update the data model. The createSurface message MUST have been previously sent with the 'catalogId' that is in this message.",
|
|
87
|
+
"properties": {
|
|
88
|
+
"surfaceId": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"description": "The unique identifier for the UI surface this data model update applies to."
|
|
91
|
+
},
|
|
92
|
+
"path": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"description": "An optional path to a location within the data model (e.g., '/user/name'). If omitted, or set to '/', refers to the entire data model."
|
|
95
|
+
},
|
|
96
|
+
"value": {
|
|
97
|
+
"description": "The data to be updated in the data model. If present, the value at 'path' is replaced (or created). If omitted, the key at 'path' is removed.",
|
|
98
|
+
"additionalProperties": true
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"required": ["surfaceId"],
|
|
102
|
+
"additionalProperties": false
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"required": ["updateDataModel", "version"],
|
|
106
|
+
"additionalProperties": false
|
|
107
|
+
},
|
|
108
|
+
"DeleteSurfaceMessage": {
|
|
109
|
+
"type": "object",
|
|
110
|
+
"properties": {
|
|
111
|
+
"version": {
|
|
112
|
+
"const": "v0.9"
|
|
113
|
+
},
|
|
114
|
+
"deleteSurface": {
|
|
115
|
+
"type": "object",
|
|
116
|
+
"description": "Signals the client to delete the surface identified by 'surfaceId'. The createSurface message MUST have been previously sent with the 'catalogId' that is in this message.",
|
|
117
|
+
"properties": {
|
|
118
|
+
"surfaceId": {
|
|
119
|
+
"type": "string",
|
|
120
|
+
"description": "The unique identifier for the UI surface to be deleted."
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"required": ["surfaceId"],
|
|
124
|
+
"additionalProperties": false
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"required": ["deleteSurface", "version"],
|
|
128
|
+
"additionalProperties": false
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://a2ui.org/specification/v0_9/server_to_client_list.json",
|
|
4
|
+
"title": "A2UI Server-to-Client Message List",
|
|
5
|
+
"description": "A list of A2UI Server-to-Client messages.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"messages": {
|
|
9
|
+
"type": "array",
|
|
10
|
+
"items": {
|
|
11
|
+
"$ref": "server_to_client.json"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"additionalProperties": false,
|
|
16
|
+
"required": [
|
|
17
|
+
"messages"
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { EventSource } from '../common/events.js';
|
|
2
|
+
/**
|
|
3
|
+
* Represents the state model for an individual UI component.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ComponentModel {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly type: string;
|
|
8
|
+
private _properties;
|
|
9
|
+
private readonly _onUpdated;
|
|
10
|
+
/**
|
|
11
|
+
* Fires whenever the component's properties are updated.
|
|
12
|
+
*/
|
|
13
|
+
readonly onUpdated: EventSource<ComponentModel>;
|
|
14
|
+
/**
|
|
15
|
+
* Creates a new component model.
|
|
16
|
+
*
|
|
17
|
+
* @param id The unique identifier for this component.
|
|
18
|
+
* @param type The component type name.
|
|
19
|
+
* @param initialProperties The initial properties for the component.
|
|
20
|
+
*/
|
|
21
|
+
constructor(id: string, type: string, initialProperties: Record<string, any>);
|
|
22
|
+
/**
|
|
23
|
+
* The current properties of the component.
|
|
24
|
+
*/
|
|
25
|
+
get properties(): Record<string, any>;
|
|
26
|
+
set properties(newProperties: Record<string, any>);
|
|
27
|
+
/**
|
|
28
|
+
* Disposes of the component and its resources.
|
|
29
|
+
*/
|
|
30
|
+
dispose(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Returns a JSON representation of the component tree.
|
|
33
|
+
*/
|
|
34
|
+
get componentTree(): any;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=component-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-model.d.ts","sourceRoot":"","sources":["../../../../src/v0_9/state/component-model.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAe,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAE9D;;GAEG;AACH,qBAAa,cAAc;IAiBvB,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAjBvB,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IAEjE;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,CAAmB;IAElE;;;;;;OAMG;gBAEQ,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACrB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAKxC;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAEpC;IAED,IAAI,UAAU,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAGhD;IAED;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;OAEG;IACH,IAAI,aAAa,IAAI,GAAG,CAMvB;CACF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Google LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { EventEmitter } from '../common/events.js';
|
|
17
|
+
/**
|
|
18
|
+
* Represents the state model for an individual UI component.
|
|
19
|
+
*/
|
|
20
|
+
export class ComponentModel {
|
|
21
|
+
/**
|
|
22
|
+
* Creates a new component model.
|
|
23
|
+
*
|
|
24
|
+
* @param id The unique identifier for this component.
|
|
25
|
+
* @param type The component type name.
|
|
26
|
+
* @param initialProperties The initial properties for the component.
|
|
27
|
+
*/
|
|
28
|
+
constructor(id, type, initialProperties) {
|
|
29
|
+
this.id = id;
|
|
30
|
+
this.type = type;
|
|
31
|
+
this._onUpdated = new EventEmitter();
|
|
32
|
+
/**
|
|
33
|
+
* Fires whenever the component's properties are updated.
|
|
34
|
+
*/
|
|
35
|
+
this.onUpdated = this._onUpdated;
|
|
36
|
+
this._properties = initialProperties;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The current properties of the component.
|
|
40
|
+
*/
|
|
41
|
+
get properties() {
|
|
42
|
+
return this._properties;
|
|
43
|
+
}
|
|
44
|
+
set properties(newProperties) {
|
|
45
|
+
this._properties = newProperties;
|
|
46
|
+
this._onUpdated.emit(this);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Disposes of the component and its resources.
|
|
50
|
+
*/
|
|
51
|
+
dispose() {
|
|
52
|
+
this._onUpdated.dispose();
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Returns a JSON representation of the component tree.
|
|
56
|
+
*/
|
|
57
|
+
get componentTree() {
|
|
58
|
+
return {
|
|
59
|
+
id: this.id,
|
|
60
|
+
type: this.type,
|
|
61
|
+
...this._properties,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=component-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-model.js","sourceRoot":"","sources":["../../../../src/v0_9/state/component-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAC,YAAY,EAAc,MAAM,qBAAqB,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,cAAc;IASzB;;;;;;OAMG;IACH,YACW,EAAU,EACV,IAAY,EACrB,iBAAsC;QAF7B,OAAE,GAAF,EAAE,CAAQ;QACV,SAAI,GAAJ,IAAI,CAAQ;QAhBN,eAAU,GAAG,IAAI,YAAY,EAAkB,CAAC;QAEjE;;WAEG;QACM,cAAS,GAAgC,IAAI,CAAC,UAAU,CAAC;QAchE,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,UAAU,CAAC,aAAkC;QAC/C,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,IAAI,CAAC,WAAW;SACpB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Google LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
1
16
|
import assert from 'node:assert';
|
|
2
17
|
import { describe, it, beforeEach } from 'node:test';
|
|
3
18
|
import { ComponentModel } from './component-model.js';
|
|
@@ -35,5 +50,13 @@ describe('ComponentModel', () => {
|
|
|
35
50
|
component.properties = { label: '2' };
|
|
36
51
|
assert.strictEqual(callCount, 1);
|
|
37
52
|
});
|
|
53
|
+
it('returns component tree representation', () => {
|
|
54
|
+
const tree = component.componentTree;
|
|
55
|
+
assert.deepStrictEqual(tree, {
|
|
56
|
+
id: 'c1',
|
|
57
|
+
type: 'Button',
|
|
58
|
+
label: 'Click Me',
|
|
59
|
+
});
|
|
60
|
+
});
|
|
38
61
|
});
|
|
39
62
|
//# sourceMappingURL=component-model.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-model.test.js","sourceRoot":"","sources":["../../../../src/v0_9/state/component-model.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAC,MAAM,WAAW,CAAC;AACnD,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAEpD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,SAAyB,CAAC;IAE9B,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,SAAS,CAAC,UAAU,GAAG,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,IAAI,gBAA4C,CAAC;QAEjD,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAiB,EAAE,EAAE;YAClD,gBAAgB,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,UAAU,GAAG,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC;QAEtC,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE;YAC7C,SAAS,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,UAAU,GAAG,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEjC,GAAG,CAAC,WAAW,EAAE,CAAC;QAClB,SAAS,CAAC,UAAU,GAAG,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,CAAC;QACrC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE;YAC3B,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,UAAU;SAClB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Subscription as BaseSubscription } from '../common/events.js';
|
|
2
|
+
import { Signal } from '@preact/signals-core';
|
|
3
|
+
/**
|
|
4
|
+
* Represents a reactive connection to a specific path in the data model.
|
|
5
|
+
*/
|
|
6
|
+
export interface DataSubscription<T> extends BaseSubscription {
|
|
7
|
+
/**
|
|
8
|
+
* The current value at the subscribed path.
|
|
9
|
+
*/
|
|
10
|
+
readonly value: T | undefined;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* A standalone, observable data store representing the client-side state.
|
|
14
|
+
* It handles JSON Pointer path resolution and subscription management.
|
|
15
|
+
*/
|
|
16
|
+
export declare class DataModel {
|
|
17
|
+
private data;
|
|
18
|
+
private readonly signals;
|
|
19
|
+
private readonly subscriptions;
|
|
20
|
+
/**
|
|
21
|
+
* Creates a new data model.
|
|
22
|
+
*
|
|
23
|
+
* @param initialData The initial data for the model. Defaults to an empty object.
|
|
24
|
+
*/
|
|
25
|
+
constructor(initialData?: Record<string, unknown>);
|
|
26
|
+
/**
|
|
27
|
+
* Retrieves a Preact Signal for a specific data path.
|
|
28
|
+
*
|
|
29
|
+
* This provides a reactive way to access a value. If the value at the path changes via `set()`,
|
|
30
|
+
* the signal will automatically be updated.
|
|
31
|
+
*
|
|
32
|
+
* @param path The JSON pointer path to create or retrieve a signal for.
|
|
33
|
+
* @returns A Preact Signal representing the value at the specified path.
|
|
34
|
+
*/
|
|
35
|
+
getSignal<T>(path: string): Signal<T | undefined>;
|
|
36
|
+
/**
|
|
37
|
+
* Updates the model at the specific path and notifies all relevant signals.
|
|
38
|
+
* If path is '/' or empty, replaces the entire root.
|
|
39
|
+
*
|
|
40
|
+
* Note on `undefined` values:
|
|
41
|
+
* - For objects: Setting a property to `undefined` removes the key from the object.
|
|
42
|
+
* - For arrays: Setting an index to `undefined` sets that index to `undefined` but preserves the array length (sparse array).
|
|
43
|
+
*/
|
|
44
|
+
set(path: string, value: any): this;
|
|
45
|
+
/**
|
|
46
|
+
* Retrieves data at a specific JSON pointer path.
|
|
47
|
+
*
|
|
48
|
+
* @param path The JSON pointer path to read from.
|
|
49
|
+
* @returns The value at the specified path, or undefined if not found.
|
|
50
|
+
*/
|
|
51
|
+
get(path: string): any;
|
|
52
|
+
/**
|
|
53
|
+
* Subscribes to changes at the specified data path.
|
|
54
|
+
*
|
|
55
|
+
* This is a backwards-compatible layer using Preact Signals internally. It allows
|
|
56
|
+
* listeners to be notified whenever the value at the specified path (or any of its
|
|
57
|
+
* ancestors/descendants) changes.
|
|
58
|
+
*
|
|
59
|
+
* @param path The JSON pointer path to observe.
|
|
60
|
+
* @param onChange A callback fired whenever the value changes.
|
|
61
|
+
* @returns A `DataSubscription` containing the initial value and an `unsubscribe` method.
|
|
62
|
+
*/
|
|
63
|
+
subscribe<T>(path: string, onChange: (value: T | undefined) => void): DataSubscription<T>;
|
|
64
|
+
/**
|
|
65
|
+
* Clears all internal subscriptions.
|
|
66
|
+
*/
|
|
67
|
+
dispose(): void;
|
|
68
|
+
private normalizePath;
|
|
69
|
+
private parsePath;
|
|
70
|
+
private notifySignals;
|
|
71
|
+
private updateSignal;
|
|
72
|
+
private notifyAllSignals;
|
|
73
|
+
private isDescendant;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=data-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-model.d.ts","sourceRoot":"","sources":["../../../../src/v0_9/state/data-model.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,YAAY,IAAI,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAErE,OAAO,EAAS,MAAM,EAAgB,MAAM,sBAAsB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC,CAAE,SAAQ,gBAAgB;IAC3D;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;CAC/B;AAMD;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAE5D;;;;OAIG;gBACS,WAAW,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIrD;;;;;;;;OAQG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAQjD;;;;;;;OAOG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAsEnC;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAmBtB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,CAAC,EACT,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,GACvC,gBAAgB,CAAC,CAAC,CAAC;IA2BtB;;OAEG;IACH,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,YAAY;CAMrB"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Google LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { A2uiDataError } from '../errors.js';
|
|
17
|
+
import { signal, batch, effect } from '@preact/signals-core';
|
|
18
|
+
function isNumeric(value) {
|
|
19
|
+
return /^\d+$/.test(value);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A standalone, observable data store representing the client-side state.
|
|
23
|
+
* It handles JSON Pointer path resolution and subscription management.
|
|
24
|
+
*/
|
|
25
|
+
export class DataModel {
|
|
26
|
+
/**
|
|
27
|
+
* Creates a new data model.
|
|
28
|
+
*
|
|
29
|
+
* @param initialData The initial data for the model. Defaults to an empty object.
|
|
30
|
+
*/
|
|
31
|
+
constructor(initialData = {}) {
|
|
32
|
+
this.data = {};
|
|
33
|
+
this.signals = new Map();
|
|
34
|
+
this.subscriptions = new Set(); // To track direct subscriptions for dispose
|
|
35
|
+
this.data = initialData;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Retrieves a Preact Signal for a specific data path.
|
|
39
|
+
*
|
|
40
|
+
* This provides a reactive way to access a value. If the value at the path changes via `set()`,
|
|
41
|
+
* the signal will automatically be updated.
|
|
42
|
+
*
|
|
43
|
+
* @param path The JSON pointer path to create or retrieve a signal for.
|
|
44
|
+
* @returns A Preact Signal representing the value at the specified path.
|
|
45
|
+
*/
|
|
46
|
+
getSignal(path) {
|
|
47
|
+
const normalizedPath = this.normalizePath(path);
|
|
48
|
+
if (!this.signals.has(normalizedPath)) {
|
|
49
|
+
this.signals.set(normalizedPath, signal(this.get(normalizedPath)));
|
|
50
|
+
}
|
|
51
|
+
return this.signals.get(normalizedPath);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Updates the model at the specific path and notifies all relevant signals.
|
|
55
|
+
* If path is '/' or empty, replaces the entire root.
|
|
56
|
+
*
|
|
57
|
+
* Note on `undefined` values:
|
|
58
|
+
* - For objects: Setting a property to `undefined` removes the key from the object.
|
|
59
|
+
* - For arrays: Setting an index to `undefined` sets that index to `undefined` but preserves the array length (sparse array).
|
|
60
|
+
*/
|
|
61
|
+
set(path, value) {
|
|
62
|
+
if (path === null || path === undefined) {
|
|
63
|
+
throw new A2uiDataError('Path cannot be null or undefined.');
|
|
64
|
+
}
|
|
65
|
+
if (path === '/' || path === '') {
|
|
66
|
+
this.data = value;
|
|
67
|
+
this.notifyAllSignals();
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
const segments = this.parsePath(path);
|
|
71
|
+
const lastSegment = segments.pop();
|
|
72
|
+
if (!this.data) {
|
|
73
|
+
this.data = {};
|
|
74
|
+
}
|
|
75
|
+
let current = this.data;
|
|
76
|
+
for (let i = 0; i < segments.length; i++) {
|
|
77
|
+
const segment = segments[i];
|
|
78
|
+
if (Array.isArray(current) && !isNumeric(segment)) {
|
|
79
|
+
throw new A2uiDataError(`Cannot use non-numeric segment '${segment}' on an array in path '${path}'.`, path);
|
|
80
|
+
}
|
|
81
|
+
// If we encounter a primitive where a container is expected, we cannot proceed.
|
|
82
|
+
// We allow undefined/null to be overwritten by a new container.
|
|
83
|
+
if (current[segment] !== undefined &&
|
|
84
|
+
current[segment] !== null &&
|
|
85
|
+
typeof current[segment] !== 'object') {
|
|
86
|
+
throw new A2uiDataError(`Cannot set path '${path}': segment '${segment}' is a primitive value.`, path);
|
|
87
|
+
}
|
|
88
|
+
if (current[segment] === undefined || current[segment] === null) {
|
|
89
|
+
const nextSegment = i < segments.length - 1 ? segments[i + 1] : lastSegment;
|
|
90
|
+
current[segment] = isNumeric(nextSegment) ? [] : {};
|
|
91
|
+
}
|
|
92
|
+
current = current[segment];
|
|
93
|
+
}
|
|
94
|
+
if (Array.isArray(current) && !isNumeric(lastSegment)) {
|
|
95
|
+
throw new A2uiDataError(`Cannot use non-numeric segment '${lastSegment}' on an array in path '${path}'.`, path);
|
|
96
|
+
}
|
|
97
|
+
if (value === undefined) {
|
|
98
|
+
if (Array.isArray(current)) {
|
|
99
|
+
current[parseInt(lastSegment, 10)] = undefined;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
delete current[lastSegment];
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
current[lastSegment] = value;
|
|
107
|
+
}
|
|
108
|
+
this.notifySignals(path);
|
|
109
|
+
return this;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Retrieves data at a specific JSON pointer path.
|
|
113
|
+
*
|
|
114
|
+
* @param path The JSON pointer path to read from.
|
|
115
|
+
* @returns The value at the specified path, or undefined if not found.
|
|
116
|
+
*/
|
|
117
|
+
get(path) {
|
|
118
|
+
if (path === null || path === undefined) {
|
|
119
|
+
throw new A2uiDataError('Path cannot be null or undefined.');
|
|
120
|
+
}
|
|
121
|
+
if (path === '/' || path === '') {
|
|
122
|
+
return this.data;
|
|
123
|
+
}
|
|
124
|
+
const segments = this.parsePath(path);
|
|
125
|
+
let current = this.data;
|
|
126
|
+
for (const segment of segments) {
|
|
127
|
+
if (current === undefined || current === null) {
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
current = current[segment];
|
|
131
|
+
}
|
|
132
|
+
return current;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Subscribes to changes at the specified data path.
|
|
136
|
+
*
|
|
137
|
+
* This is a backwards-compatible layer using Preact Signals internally. It allows
|
|
138
|
+
* listeners to be notified whenever the value at the specified path (or any of its
|
|
139
|
+
* ancestors/descendants) changes.
|
|
140
|
+
*
|
|
141
|
+
* @param path The JSON pointer path to observe.
|
|
142
|
+
* @param onChange A callback fired whenever the value changes.
|
|
143
|
+
* @returns A `DataSubscription` containing the initial value and an `unsubscribe` method.
|
|
144
|
+
*/
|
|
145
|
+
subscribe(path, onChange) {
|
|
146
|
+
const sig = this.getSignal(path);
|
|
147
|
+
let isSync = true;
|
|
148
|
+
let currentValue = sig.peek();
|
|
149
|
+
const dispose = effect(() => {
|
|
150
|
+
const val = sig.value;
|
|
151
|
+
currentValue = val;
|
|
152
|
+
if (!isSync) {
|
|
153
|
+
onChange(val);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
isSync = false;
|
|
157
|
+
this.subscriptions.add(dispose);
|
|
158
|
+
return {
|
|
159
|
+
get value() {
|
|
160
|
+
return currentValue;
|
|
161
|
+
},
|
|
162
|
+
unsubscribe: () => {
|
|
163
|
+
dispose();
|
|
164
|
+
this.subscriptions.delete(dispose);
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Clears all internal subscriptions.
|
|
170
|
+
*/
|
|
171
|
+
dispose() {
|
|
172
|
+
for (const dispose of this.subscriptions) {
|
|
173
|
+
dispose();
|
|
174
|
+
}
|
|
175
|
+
this.subscriptions.clear();
|
|
176
|
+
this.signals.clear();
|
|
177
|
+
}
|
|
178
|
+
normalizePath(path) {
|
|
179
|
+
if (path.length > 1 && path.endsWith('/')) {
|
|
180
|
+
return path.slice(0, -1);
|
|
181
|
+
}
|
|
182
|
+
return path || '/';
|
|
183
|
+
}
|
|
184
|
+
parsePath(path) {
|
|
185
|
+
return path.split('/').filter(p => p.length > 0);
|
|
186
|
+
}
|
|
187
|
+
notifySignals(path) {
|
|
188
|
+
const normalizedPath = this.normalizePath(path);
|
|
189
|
+
batch(() => {
|
|
190
|
+
this.updateSignal(normalizedPath);
|
|
191
|
+
// Notify Ancestors
|
|
192
|
+
let parentPath = normalizedPath;
|
|
193
|
+
while (parentPath !== '/' && parentPath !== '') {
|
|
194
|
+
parentPath =
|
|
195
|
+
parentPath.substring(0, parentPath.lastIndexOf('/')) || '/';
|
|
196
|
+
this.updateSignal(parentPath);
|
|
197
|
+
}
|
|
198
|
+
// Notify Descendants
|
|
199
|
+
for (const subPath of this.signals.keys()) {
|
|
200
|
+
if (this.isDescendant(subPath, normalizedPath)) {
|
|
201
|
+
this.updateSignal(subPath);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
updateSignal(path) {
|
|
207
|
+
const sig = this.signals.get(path);
|
|
208
|
+
if (sig) {
|
|
209
|
+
const val = this.get(path);
|
|
210
|
+
if (Array.isArray(val)) {
|
|
211
|
+
sig.value = [...val];
|
|
212
|
+
}
|
|
213
|
+
else if (typeof val === 'object' && val !== null) {
|
|
214
|
+
sig.value = { ...val };
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
sig.value = val;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
notifyAllSignals() {
|
|
222
|
+
batch(() => {
|
|
223
|
+
for (const path of this.signals.keys()) {
|
|
224
|
+
this.updateSignal(path);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
isDescendant(childPath, parentPath) {
|
|
229
|
+
if (parentPath === '/' || parentPath === '') {
|
|
230
|
+
return childPath !== '/';
|
|
231
|
+
}
|
|
232
|
+
return childPath.startsWith(parentPath + '/');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=data-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-model.js","sourceRoot":"","sources":["../../../../src/v0_9/state/data-model.ts"],"names":[],"mappings":"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"}
|