@a2ui/web_core 0.8.0 → 0.9.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 +32 -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 +212 -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 +88 -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 +43 -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_9/reactivity/signals.test.d.ts +17 -0
- package/src/v0_9/reactivity/signals.test.d.ts.map +1 -0
- package/src/v0_9/reactivity/signals.test.js +100 -0
- package/src/v0_9/reactivity/signals.test.js.map +1 -0
- package/src/v0_9/rendering/component-context.d.ts +35 -0
- package/src/v0_9/rendering/component-context.d.ts.map +1 -0
- package/src/v0_9/rendering/component-context.js +49 -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 +55 -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 +310 -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 +10 -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 +10 -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/base.ts +0 -24
- 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
|
@@ -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 { DataModel } from './data-model.js';
|
|
@@ -8,15 +23,23 @@ describe('DataModel', () => {
|
|
|
8
23
|
user: {
|
|
9
24
|
name: 'Alice',
|
|
10
25
|
settings: {
|
|
11
|
-
theme: 'dark'
|
|
12
|
-
}
|
|
26
|
+
theme: 'dark',
|
|
27
|
+
},
|
|
13
28
|
},
|
|
14
|
-
items: ['a', 'b', 'c']
|
|
29
|
+
items: ['a', 'b', 'c'],
|
|
15
30
|
});
|
|
16
31
|
});
|
|
32
|
+
// --- Initialization ---
|
|
33
|
+
it('initializes with empty data if not provided', () => {
|
|
34
|
+
const emptyModel = new DataModel();
|
|
35
|
+
assert.deepStrictEqual(emptyModel.get('/'), {});
|
|
36
|
+
});
|
|
17
37
|
// --- Basic Retrieval ---
|
|
18
38
|
it('retrieves root data', () => {
|
|
19
|
-
assert.deepStrictEqual(model.get('/'), {
|
|
39
|
+
assert.deepStrictEqual(model.get('/'), {
|
|
40
|
+
user: { name: 'Alice', settings: { theme: 'dark' } },
|
|
41
|
+
items: ['a', 'b', 'c'],
|
|
42
|
+
});
|
|
20
43
|
});
|
|
21
44
|
it('retrieves nested path', () => {
|
|
22
45
|
assert.strictEqual(model.get('/user/name'), 'Alice');
|
|
@@ -30,6 +53,10 @@ describe('DataModel', () => {
|
|
|
30
53
|
assert.strictEqual(model.get('/user/age'), undefined);
|
|
31
54
|
assert.strictEqual(model.get('/unknown/path'), undefined);
|
|
32
55
|
});
|
|
56
|
+
it('returns undefined when traversing through undefined/null segments', () => {
|
|
57
|
+
model.set('/nullable', null);
|
|
58
|
+
assert.strictEqual(model.get('/nullable/deep/path'), undefined);
|
|
59
|
+
});
|
|
33
60
|
// --- Updates ---
|
|
34
61
|
it('sets value at existing path', () => {
|
|
35
62
|
model.set('/user/name', 'Bob');
|
|
@@ -49,10 +76,6 @@ describe('DataModel', () => {
|
|
|
49
76
|
assert.strictEqual(model.get('/user/name'), undefined);
|
|
50
77
|
assert.strictEqual(Object.keys(model.get('/user')).includes('name'), false);
|
|
51
78
|
});
|
|
52
|
-
it('replaces root object on root update', () => {
|
|
53
|
-
model.set('/', { newRoot: true });
|
|
54
|
-
assert.deepStrictEqual(model.get('/'), { newRoot: true });
|
|
55
|
-
});
|
|
56
79
|
// --- Array / List Handling (Flutter Parity) ---
|
|
57
80
|
it('List: set and get', () => {
|
|
58
81
|
model.set('/list/0', 'hello');
|
|
@@ -88,7 +111,7 @@ describe('DataModel', () => {
|
|
|
88
111
|
// --- Subscriptions ---
|
|
89
112
|
it('returns a subscription object', () => {
|
|
90
113
|
model.set('/a', 1);
|
|
91
|
-
const sub = model.subscribe('/a',
|
|
114
|
+
const sub = model.subscribe('/a', val => (updatedValue = val));
|
|
92
115
|
assert.strictEqual(sub.value, 1);
|
|
93
116
|
let updatedValue;
|
|
94
117
|
model.set('/a', 2);
|
|
@@ -101,7 +124,7 @@ describe('DataModel', () => {
|
|
|
101
124
|
});
|
|
102
125
|
it('notifies subscribers on exact match', () => {
|
|
103
126
|
let called = false;
|
|
104
|
-
|
|
127
|
+
model.subscribe('/user/name', val => {
|
|
105
128
|
assert.strictEqual(val, 'Charlie');
|
|
106
129
|
called = true;
|
|
107
130
|
});
|
|
@@ -110,7 +133,7 @@ describe('DataModel', () => {
|
|
|
110
133
|
});
|
|
111
134
|
it('notifies ancestor subscribers (Container Semantics)', () => {
|
|
112
135
|
let called = false;
|
|
113
|
-
|
|
136
|
+
model.subscribe('/user', (val) => {
|
|
114
137
|
assert.strictEqual(val.name, 'Dave');
|
|
115
138
|
called = true;
|
|
116
139
|
});
|
|
@@ -119,7 +142,7 @@ describe('DataModel', () => {
|
|
|
119
142
|
});
|
|
120
143
|
it('notifies descendant subscribers', () => {
|
|
121
144
|
let called = false;
|
|
122
|
-
|
|
145
|
+
model.subscribe('/user/settings/theme', val => {
|
|
123
146
|
assert.strictEqual(val, 'light');
|
|
124
147
|
called = true;
|
|
125
148
|
});
|
|
@@ -129,7 +152,7 @@ describe('DataModel', () => {
|
|
|
129
152
|
});
|
|
130
153
|
it('notifies root subscriber', () => {
|
|
131
154
|
let called = false;
|
|
132
|
-
|
|
155
|
+
model.subscribe('/', (val) => {
|
|
133
156
|
assert.strictEqual(val.newProp, 'test');
|
|
134
157
|
called = true;
|
|
135
158
|
});
|
|
@@ -139,13 +162,13 @@ describe('DataModel', () => {
|
|
|
139
162
|
it('notifies parent when child updates', () => {
|
|
140
163
|
model.set('/parent', { child: 'initial' });
|
|
141
164
|
let parentValue;
|
|
142
|
-
|
|
165
|
+
model.subscribe('/parent', val => (parentValue = val));
|
|
143
166
|
model.set('/parent/child', 'updated');
|
|
144
167
|
assert.deepStrictEqual(parentValue, { child: 'updated' });
|
|
145
168
|
});
|
|
146
169
|
it('stops notifying after dispose', () => {
|
|
147
170
|
let count = 0;
|
|
148
|
-
|
|
171
|
+
model.subscribe('/', () => count++);
|
|
149
172
|
model.dispose();
|
|
150
173
|
model.set('/foo', 'bar');
|
|
151
174
|
assert.strictEqual(count, 0);
|
|
@@ -171,10 +194,13 @@ describe('DataModel', () => {
|
|
|
171
194
|
assert.strictEqual(callCount1, 0); // sub1 was unsubscribed
|
|
172
195
|
assert.strictEqual(callCount2, 1); // sub2 still active
|
|
173
196
|
assert.strictEqual(sub2.value, 'Frank');
|
|
197
|
+
sub2.unsubscribe(); // Should clear the internal map set
|
|
198
|
+
model.set('/user/name', 'Grace');
|
|
199
|
+
assert.strictEqual(callCount2, 1); // still 1
|
|
174
200
|
});
|
|
175
201
|
it('handles subscription to non-existent path', () => {
|
|
176
202
|
let val;
|
|
177
|
-
const sub = model.subscribe('/non/existent',
|
|
203
|
+
const sub = model.subscribe('/non/existent', v => (val = v));
|
|
178
204
|
assert.strictEqual(sub.value, undefined);
|
|
179
205
|
model.set('/non/existent', 'exists now');
|
|
180
206
|
assert.strictEqual(sub.value, 'exists now');
|
|
@@ -183,7 +209,7 @@ describe('DataModel', () => {
|
|
|
183
209
|
it('handles updates to undefined', () => {
|
|
184
210
|
model.set('/foo', 'bar');
|
|
185
211
|
let val = 'initial';
|
|
186
|
-
const sub = model.subscribe('/foo',
|
|
212
|
+
const sub = model.subscribe('/foo', v => (val = v));
|
|
187
213
|
model.set('/foo', undefined);
|
|
188
214
|
assert.strictEqual(sub.value, undefined);
|
|
189
215
|
assert.strictEqual(val, undefined);
|
|
@@ -200,5 +226,39 @@ describe('DataModel', () => {
|
|
|
200
226
|
model.set('/items/foo', 'bar');
|
|
201
227
|
}, /Cannot use non-numeric segment/);
|
|
202
228
|
});
|
|
229
|
+
it('throws when using non-numeric segment on an array (intermediate)', () => {
|
|
230
|
+
model.set('/', { items: [1, 2, 3] });
|
|
231
|
+
assert.throws(() => {
|
|
232
|
+
model.set('/items/foo/bar', 'value');
|
|
233
|
+
}, /Cannot use non-numeric segment 'foo' on an array/);
|
|
234
|
+
});
|
|
235
|
+
it('normalizes trailing slashes', () => {
|
|
236
|
+
let callCount = 0;
|
|
237
|
+
model.subscribe('/foo', () => callCount++);
|
|
238
|
+
model.set('/foo/', 'bar'); // Trailing slash
|
|
239
|
+
assert.strictEqual(model.get('/foo/'), 'bar');
|
|
240
|
+
assert.strictEqual(callCount, 1);
|
|
241
|
+
});
|
|
242
|
+
it('replaces root object on root update', () => {
|
|
243
|
+
let callCount = 0;
|
|
244
|
+
model.subscribe('/', () => callCount++);
|
|
245
|
+
// Just add another sub on a generic path to ensure notifyAllSubscribers loop hits multiple items
|
|
246
|
+
model.subscribe('/unrelated', () => { });
|
|
247
|
+
model.set('/', { newRoot: 'foo' });
|
|
248
|
+
assert.deepStrictEqual(model.get(''), { newRoot: 'foo' });
|
|
249
|
+
assert.strictEqual(callCount, 1);
|
|
250
|
+
});
|
|
251
|
+
it('throws when path is null or undefined', () => {
|
|
252
|
+
assert.throws(() => model.get(null), /Path cannot be null or undefined/);
|
|
253
|
+
assert.throws(() => model.get(undefined), /Path cannot be null or undefined/);
|
|
254
|
+
assert.throws(() => model.set(null, 'value'), /Path cannot be null or undefined/);
|
|
255
|
+
assert.throws(() => model.set(undefined, 'value'), /Path cannot be null or undefined/);
|
|
256
|
+
});
|
|
257
|
+
it('calculates descendants against root path', () => {
|
|
258
|
+
// This explicitly hits an internal method branch where parentPath === "/"
|
|
259
|
+
const isDescendant = model.isDescendant.bind(model);
|
|
260
|
+
assert.strictEqual(isDescendant('/user', '/'), true);
|
|
261
|
+
assert.strictEqual(isDescendant('/', '/'), false);
|
|
262
|
+
});
|
|
203
263
|
});
|
|
204
264
|
//# sourceMappingURL=data-model.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-model.test.js","sourceRoot":"","sources":["../../../../src/v0_9/state/data-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,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE1C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAI,KAAgB,CAAC;IAErB,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,GAAG,IAAI,SAAS,CAAC;YACpB,IAAI,EAAE;gBACJ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE;oBACR,KAAK,EAAE,MAAM;iBACd;aACF;YACD,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,yBAAyB;IAEzB,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,UAAU,GAAG,IAAI,SAAS,EAAE,CAAC;QACnC,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAE1B,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACrC,IAAI,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAC,KAAK,EAAE,MAAM,EAAC,EAAC;YAChD,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;QACtD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAElB,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC/B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,iDAAiD;IAEjD,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9B,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACjC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,kEAAkE;QAClE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE/C,4BAA4B;QAC5B,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAEjD,6BAA6B;QAC7B,KAAK,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,wBAAwB;IAExB,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnB,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAS,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEjC,IAAI,YAAgC,CAAC;QAErC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEpC,GAAG,CAAC,WAAW,EAAE,CAAC;QAClB,0BAA0B;QAC1B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnB,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE;YAClC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACnC,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,2BAA2B,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;YACpC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACrC,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAChC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,2BAA2B,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,KAAK,CAAC,SAAS,CAAC,sBAAsB,EAAE,GAAG,CAAC,EAAE;YAC5C,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACjC,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,8BAA8B;QAC9B,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAC,KAAK,EAAE,OAAO,EAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,2BAA2B,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,GAAQ,EAAE,EAAE;YAChC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACxC,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,2BAA2B,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC,CAAC;QAEzC,IAAI,WAAgB,CAAC;QACrB,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC;QAEvD,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QAEpC,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzB,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;QAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;QAE/D,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAE/B,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;QAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;QAE/D,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAEjC,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,wBAAwB;QAC3D,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QACvD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAExC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,oCAAoC;QACxD,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,IAAI,GAAQ,CAAC;QACb,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAEzC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzB,IAAI,GAAG,GAAQ,SAAS,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAEpD,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC7B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC,CAAC;QAE7D,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;YACjB,KAAK,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;YACjB,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC,EAAE,gCAAgC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;YACjB,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC,EAAE,kDAAkD,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,iBAAiB;QAC5C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QACxC,iGAAiG;QACjG,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAExC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;QACjC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAW,CAAC,EAC5B,kCAAkC,CACnC,CAAC;QACF,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAgB,CAAC,EACjC,kCAAkC,CACnC,CAAC;QACF,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAW,EAAE,OAAO,CAAC,EACrC,kCAAkC,CACnC,CAAC;QACF,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAgB,EAAE,OAAO,CAAC,EAC1C,kCAAkC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,0EAA0E;QAC1E,MAAM,YAAY,GAAI,KAAa,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ComponentModel } from './component-model.js';
|
|
2
|
+
import { EventSource } from '../common/events.js';
|
|
3
|
+
/**
|
|
4
|
+
* Manages the collection of components for a specific surface.
|
|
5
|
+
*/
|
|
6
|
+
export declare class SurfaceComponentsModel {
|
|
7
|
+
private components;
|
|
8
|
+
private readonly _onCreated;
|
|
9
|
+
private readonly _onDeleted;
|
|
10
|
+
/** Fires when a new component is added to the model. */
|
|
11
|
+
readonly onCreated: EventSource<ComponentModel>;
|
|
12
|
+
/** Fires when a component is removed, providing the ID of the deleted component. */
|
|
13
|
+
readonly onDeleted: EventSource<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Retrieves a component by its ID.
|
|
16
|
+
*
|
|
17
|
+
*
|
|
18
|
+
* @param id The ID of the component to retrieve.
|
|
19
|
+
* @returns The component model, or undefined if not found.
|
|
20
|
+
*/
|
|
21
|
+
get(id: string): ComponentModel | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Returns an iterator over the components in the model.
|
|
24
|
+
*/
|
|
25
|
+
get entries(): IterableIterator<[string, ComponentModel]>;
|
|
26
|
+
/**
|
|
27
|
+
* Adds a component to the model.
|
|
28
|
+
* Throws an error if a component with the same ID already exists.
|
|
29
|
+
*
|
|
30
|
+
* @param component The component to add.
|
|
31
|
+
*/
|
|
32
|
+
addComponent(component: ComponentModel): void;
|
|
33
|
+
/**
|
|
34
|
+
* Removes a component from the model by its ID.
|
|
35
|
+
* Disposes of the component upon removal.
|
|
36
|
+
*
|
|
37
|
+
* @param id The ID of the component to remove.
|
|
38
|
+
*/
|
|
39
|
+
removeComponent(id: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Disposes of the model and all its components.
|
|
42
|
+
*/
|
|
43
|
+
dispose(): void;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=surface-components-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-components-model.d.ts","sourceRoot":"","sources":["../../../../src/v0_9/state/surface-components-model.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAe,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAG9D;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,UAAU,CAA0C;IAE5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IAEzD,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,CAAmB;IAClE,oFAAoF;IACpF,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAmB;IAE1D;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI3C;;OAEG;IACH,IAAI,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAExD;IAED;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAW7C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IASjC;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
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
|
+
import { A2uiStateError } from '../errors.js';
|
|
18
|
+
/**
|
|
19
|
+
* Manages the collection of components for a specific surface.
|
|
20
|
+
*/
|
|
21
|
+
export class SurfaceComponentsModel {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.components = new Map();
|
|
24
|
+
this._onCreated = new EventEmitter();
|
|
25
|
+
this._onDeleted = new EventEmitter();
|
|
26
|
+
/** Fires when a new component is added to the model. */
|
|
27
|
+
this.onCreated = this._onCreated;
|
|
28
|
+
/** Fires when a component is removed, providing the ID of the deleted component. */
|
|
29
|
+
this.onDeleted = this._onDeleted;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Retrieves a component by its ID.
|
|
33
|
+
*
|
|
34
|
+
*
|
|
35
|
+
* @param id The ID of the component to retrieve.
|
|
36
|
+
* @returns The component model, or undefined if not found.
|
|
37
|
+
*/
|
|
38
|
+
get(id) {
|
|
39
|
+
return this.components.get(id);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Returns an iterator over the components in the model.
|
|
43
|
+
*/
|
|
44
|
+
get entries() {
|
|
45
|
+
return this.components.entries();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Adds a component to the model.
|
|
49
|
+
* Throws an error if a component with the same ID already exists.
|
|
50
|
+
*
|
|
51
|
+
* @param component The component to add.
|
|
52
|
+
*/
|
|
53
|
+
addComponent(component) {
|
|
54
|
+
if (this.components.has(component.id)) {
|
|
55
|
+
throw new A2uiStateError(`Component with id '${component.id}' already exists.`);
|
|
56
|
+
}
|
|
57
|
+
this.components.set(component.id, component);
|
|
58
|
+
this._onCreated.emit(component);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Removes a component from the model by its ID.
|
|
62
|
+
* Disposes of the component upon removal.
|
|
63
|
+
*
|
|
64
|
+
* @param id The ID of the component to remove.
|
|
65
|
+
*/
|
|
66
|
+
removeComponent(id) {
|
|
67
|
+
const component = this.components.get(id);
|
|
68
|
+
if (component) {
|
|
69
|
+
this.components.delete(id);
|
|
70
|
+
component.dispose();
|
|
71
|
+
this._onDeleted.emit(id);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Disposes of the model and all its components.
|
|
76
|
+
*/
|
|
77
|
+
dispose() {
|
|
78
|
+
for (const component of this.components.values()) {
|
|
79
|
+
component.dispose();
|
|
80
|
+
}
|
|
81
|
+
this.components.clear();
|
|
82
|
+
this._onCreated.dispose();
|
|
83
|
+
this._onDeleted.dispose();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=surface-components-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-components-model.js","sourceRoot":"","sources":["../../../../src/v0_9/state/surface-components-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAC,YAAY,EAAc,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAE5C;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAAnC;QACU,eAAU,GAAgC,IAAI,GAAG,EAAE,CAAC;QAE3C,eAAU,GAAG,IAAI,YAAY,EAAkB,CAAC;QAChD,eAAU,GAAG,IAAI,YAAY,EAAU,CAAC;QAEzD,wDAAwD;QAC/C,cAAS,GAAgC,IAAI,CAAC,UAAU,CAAC;QAClE,oFAAoF;QAC3E,cAAS,GAAwB,IAAI,CAAC,UAAU,CAAC;IA+D5D,CAAC;IA7DC;;;;;;OAMG;IACH,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,SAAyB;QACpC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,cAAc,CACtB,sBAAsB,SAAS,CAAC,EAAE,mBAAmB,CACtD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,EAAU;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,SAAS,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IAC5B,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 { SurfaceComponentsModel } from './surface-components-model.js';
|
|
@@ -24,14 +39,16 @@ describe('SurfaceComponentsModel', () => {
|
|
|
24
39
|
model.addComponent(c1);
|
|
25
40
|
// Track update on component itself
|
|
26
41
|
let updateCount = 0;
|
|
27
|
-
c1.onUpdated.subscribe(() => {
|
|
42
|
+
c1.onUpdated.subscribe(() => {
|
|
43
|
+
updateCount++;
|
|
44
|
+
});
|
|
28
45
|
c1.properties = { label: 'Updated' };
|
|
29
46
|
assert.strictEqual(c1.properties.label, 'Updated');
|
|
30
47
|
assert.strictEqual(updateCount, 1);
|
|
31
48
|
});
|
|
32
49
|
it('notifies on component creation', () => {
|
|
33
50
|
let createdComponent;
|
|
34
|
-
model.onCreated.subscribe(
|
|
51
|
+
model.onCreated.subscribe(c => {
|
|
35
52
|
createdComponent = c;
|
|
36
53
|
});
|
|
37
54
|
model.addComponent(new ComponentModel('c1', 'Button', {}));
|
|
@@ -45,5 +62,30 @@ describe('SurfaceComponentsModel', () => {
|
|
|
45
62
|
model.addComponent(new ComponentModel('c1', 'Button', {}));
|
|
46
63
|
}, /already exists/);
|
|
47
64
|
});
|
|
65
|
+
it('returns entries iterator', () => {
|
|
66
|
+
const c1 = new ComponentModel('c1', 'Button', {});
|
|
67
|
+
const c2 = new ComponentModel('c2', 'Text', {});
|
|
68
|
+
model.addComponent(c1);
|
|
69
|
+
model.addComponent(c2);
|
|
70
|
+
const entries = Array.from(model.entries);
|
|
71
|
+
assert.strictEqual(entries.length, 2);
|
|
72
|
+
assert.deepStrictEqual(entries[0], ['c1', c1]);
|
|
73
|
+
assert.deepStrictEqual(entries[1], ['c2', c2]);
|
|
74
|
+
});
|
|
75
|
+
it('disposes components during model dispose', () => {
|
|
76
|
+
const c1 = new ComponentModel('c1', 'Button', {});
|
|
77
|
+
model.addComponent(c1);
|
|
78
|
+
let childDisposed = false;
|
|
79
|
+
c1.dispose = () => {
|
|
80
|
+
childDisposed = true;
|
|
81
|
+
};
|
|
82
|
+
model.dispose();
|
|
83
|
+
assert.strictEqual(childDisposed, true);
|
|
84
|
+
assert.strictEqual(model.components.size, 0);
|
|
85
|
+
});
|
|
86
|
+
it('safely attempts to remove non-existent component', () => {
|
|
87
|
+
// Should not throw
|
|
88
|
+
model.removeComponent('does-not-exist');
|
|
89
|
+
});
|
|
48
90
|
});
|
|
49
91
|
//# sourceMappingURL=surface-components-model.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-components-model.test.js","sourceRoot":"","sources":["../../../../src/v0_9/state/surface-components-model.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SurfaceModel } from './surface-model.js';
|
|
2
2
|
import { ComponentApi } from '../catalog/types.js';
|
|
3
3
|
import { EventSource } from '../common/events.js';
|
|
4
|
+
import { A2uiClientAction } from '../schema/client-to-server.js';
|
|
4
5
|
/**
|
|
5
6
|
* The root state model for the A2UI system.
|
|
6
7
|
* Manages the collection of active surfaces.
|
|
@@ -16,10 +17,36 @@ export declare class SurfaceGroupModel<T extends ComponentApi> {
|
|
|
16
17
|
/** Fires when a surface is removed. */
|
|
17
18
|
readonly onSurfaceDeleted: EventSource<string>;
|
|
18
19
|
/** Fires when an action is dispatched from ANY surface in the group. */
|
|
19
|
-
readonly onAction: EventSource<
|
|
20
|
+
readonly onAction: EventSource<A2uiClientAction>;
|
|
21
|
+
/**
|
|
22
|
+
* Adds a surface to the group.
|
|
23
|
+
* Ignores if a surface with the same ID already exists.
|
|
24
|
+
*
|
|
25
|
+
* @param surface The surface model to add.
|
|
26
|
+
*/
|
|
20
27
|
addSurface(surface: SurfaceModel<T>): void;
|
|
28
|
+
/**
|
|
29
|
+
* Removes a surface from the group by its ID.
|
|
30
|
+
* Disposes of the surface upon removal.
|
|
31
|
+
*
|
|
32
|
+
* @param id The ID of the surface to remove.
|
|
33
|
+
*/
|
|
21
34
|
deleteSurface(id: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Retrieves a surface by its ID.
|
|
37
|
+
*
|
|
38
|
+
*
|
|
39
|
+
* @param id The ID of the surface to retrieve.
|
|
40
|
+
* @returns The surface model, or undefined if not found.
|
|
41
|
+
*/
|
|
22
42
|
getSurface(id: string): SurfaceModel<T> | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Returns a readonly map of all active surfaces.
|
|
45
|
+
*/
|
|
46
|
+
get surfacesMap(): ReadonlyMap<string, SurfaceModel<T>>;
|
|
47
|
+
/**
|
|
48
|
+
* Disposes of the group and all its surfaces.
|
|
49
|
+
*/
|
|
23
50
|
dispose(): void;
|
|
24
51
|
}
|
|
25
52
|
//# sourceMappingURL=surface-group-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-group-model.d.ts","sourceRoot":"","sources":["../../../../src/v0_9/state/surface-group-model.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAe,WAAW,EAAe,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAE/D;;;GAGG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,YAAY;IACnD,OAAO,CAAC,QAAQ,CAA2C;IAC3D,OAAO,CAAC,oBAAoB,CAAwC;IAEpE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuC;IACzE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA8B;IAChE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAElE,yCAAyC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAC9B;IACzB,uCAAuC;IACvC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAA0B;IACxE,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAkB;IAElE;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAiB1C;;;;;OAKG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAe/B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS;IAInD;;OAEG;IACH,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAEtD;IAED;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB"}
|
|
@@ -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 { EventEmitter } from '../common/events.js';
|
|
2
17
|
/**
|
|
3
18
|
* The root state model for the A2UI system.
|
|
@@ -17,6 +32,12 @@ export class SurfaceGroupModel {
|
|
|
17
32
|
/** Fires when an action is dispatched from ANY surface in the group. */
|
|
18
33
|
this.onAction = this._onAction;
|
|
19
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Adds a surface to the group.
|
|
37
|
+
* Ignores if a surface with the same ID already exists.
|
|
38
|
+
*
|
|
39
|
+
* @param surface The surface model to add.
|
|
40
|
+
*/
|
|
20
41
|
addSurface(surface) {
|
|
21
42
|
if (this.surfaces.has(surface.id)) {
|
|
22
43
|
console.warn(`Surface ${surface.id} already exists. Ignoring.`);
|
|
@@ -24,10 +45,16 @@ export class SurfaceGroupModel {
|
|
|
24
45
|
}
|
|
25
46
|
this.surfaces.set(surface.id, surface);
|
|
26
47
|
// Subscribe to surface actions and propagate
|
|
27
|
-
const sub = surface.onAction.subscribe(
|
|
48
|
+
const sub = surface.onAction.subscribe(action => this._onAction.emit(action));
|
|
28
49
|
this.surfaceUnsubscribers.set(surface.id, sub);
|
|
29
50
|
this._onSurfaceCreated.emit(surface);
|
|
30
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Removes a surface from the group by its ID.
|
|
54
|
+
* Disposes of the surface upon removal.
|
|
55
|
+
*
|
|
56
|
+
* @param id The ID of the surface to remove.
|
|
57
|
+
*/
|
|
31
58
|
deleteSurface(id) {
|
|
32
59
|
const surface = this.surfaces.get(id);
|
|
33
60
|
if (surface) {
|
|
@@ -41,9 +68,25 @@ export class SurfaceGroupModel {
|
|
|
41
68
|
this._onSurfaceDeleted.emit(id);
|
|
42
69
|
}
|
|
43
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Retrieves a surface by its ID.
|
|
73
|
+
*
|
|
74
|
+
*
|
|
75
|
+
* @param id The ID of the surface to retrieve.
|
|
76
|
+
* @returns The surface model, or undefined if not found.
|
|
77
|
+
*/
|
|
44
78
|
getSurface(id) {
|
|
45
79
|
return this.surfaces.get(id);
|
|
46
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Returns a readonly map of all active surfaces.
|
|
83
|
+
*/
|
|
84
|
+
get surfacesMap() {
|
|
85
|
+
return this.surfaces;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Disposes of the group and all its surfaces.
|
|
89
|
+
*/
|
|
47
90
|
dispose() {
|
|
48
91
|
for (const id of Array.from(this.surfaces.keys())) {
|
|
49
92
|
this.deleteSurface(id);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-group-model.js","sourceRoot":"","sources":["../../../../src/v0_9/state/surface-group-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAC,YAAY,EAA4B,MAAM,qBAAqB,CAAC;AAG5E;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAA9B;QACU,aAAQ,GAAiC,IAAI,GAAG,EAAE,CAAC;QACnD,yBAAoB,GAA8B,IAAI,GAAG,EAAE,CAAC;QAEnD,sBAAiB,GAAG,IAAI,YAAY,EAAmB,CAAC;QACxD,sBAAiB,GAAG,IAAI,YAAY,EAAU,CAAC;QAC/C,cAAS,GAAG,IAAI,YAAY,EAAoB,CAAC;QAElE,yCAAyC;QAChC,qBAAgB,GACvB,IAAI,CAAC,iBAAiB,CAAC;QACzB,uCAAuC;QAC9B,qBAAgB,GAAwB,IAAI,CAAC,iBAAiB,CAAC;QACxE,wEAAwE;QAC/D,aAAQ,GAAkC,IAAI,CAAC,SAAS,CAAC;IA2EpE,CAAC;IAzEC;;;;;OAKG;IACH,UAAU,CAAC,OAAwB;QACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,EAAE,4BAA4B,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAEvC,6CAA6C;QAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAC9C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAC5B,CAAC;QACF,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAE/C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,EAAU;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,CAAC,WAAW,EAAE,CAAC;gBAClB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvC,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,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 { SurfaceGroupModel } from './surface-group-model.js';
|
|
@@ -33,8 +48,12 @@ describe('SurfaceGroupModel', () => {
|
|
|
33
48
|
it('notifies lifecycle listeners', () => {
|
|
34
49
|
let created;
|
|
35
50
|
let deletedId;
|
|
36
|
-
model.onSurfaceCreated.subscribe(
|
|
37
|
-
|
|
51
|
+
model.onSurfaceCreated.subscribe(s => {
|
|
52
|
+
created = s;
|
|
53
|
+
});
|
|
54
|
+
model.onSurfaceDeleted.subscribe(id => {
|
|
55
|
+
deletedId = id;
|
|
56
|
+
});
|
|
38
57
|
const surface = new SurfaceModel('s1', catalog, {});
|
|
39
58
|
model.addSurface(surface);
|
|
40
59
|
assert.ok(created);
|
|
@@ -44,13 +63,15 @@ describe('SurfaceGroupModel', () => {
|
|
|
44
63
|
});
|
|
45
64
|
it('propagates actions from surfaces', async () => {
|
|
46
65
|
let receivedAction;
|
|
47
|
-
model.onAction.subscribe(
|
|
66
|
+
model.onAction.subscribe(action => {
|
|
48
67
|
receivedAction = action;
|
|
49
68
|
});
|
|
50
69
|
const surface = new SurfaceModel('s1', catalog, {});
|
|
51
70
|
model.addSurface(surface);
|
|
52
|
-
await surface.dispatchAction({
|
|
53
|
-
assert.
|
|
71
|
+
await surface.dispatchAction({ event: { name: 'test' } }, 'c1');
|
|
72
|
+
assert.strictEqual(receivedAction.name, 'test');
|
|
73
|
+
assert.strictEqual(receivedAction.surfaceId, 's1');
|
|
74
|
+
assert.strictEqual(receivedAction.sourceComponentId, 'c1');
|
|
54
75
|
});
|
|
55
76
|
it('stops propagating actions after deletion', async () => {
|
|
56
77
|
let callCount = 0;
|
|
@@ -60,8 +81,28 @@ describe('SurfaceGroupModel', () => {
|
|
|
60
81
|
const surface = new SurfaceModel('s1', catalog, {});
|
|
61
82
|
model.addSurface(surface);
|
|
62
83
|
model.deleteSurface('s1');
|
|
63
|
-
await surface.dispatchAction({
|
|
84
|
+
await surface.dispatchAction({ event: { name: 'test' } }, 'c1');
|
|
64
85
|
assert.strictEqual(callCount, 0);
|
|
65
86
|
});
|
|
87
|
+
it('exposes surfacesMap', () => {
|
|
88
|
+
const surface = new SurfaceModel('s1', catalog, {});
|
|
89
|
+
model.addSurface(surface);
|
|
90
|
+
const map = model.surfacesMap;
|
|
91
|
+
assert.strictEqual(map.size, 1);
|
|
92
|
+
assert.strictEqual(map.get('s1'), surface);
|
|
93
|
+
});
|
|
94
|
+
it('disposes correctly', () => {
|
|
95
|
+
const s1 = new SurfaceModel('s1', catalog, {});
|
|
96
|
+
const s2 = new SurfaceModel('s2', catalog, {});
|
|
97
|
+
model.addSurface(s1);
|
|
98
|
+
model.addSurface(s2);
|
|
99
|
+
let deletedCount = 0;
|
|
100
|
+
model.onSurfaceDeleted.subscribe(() => {
|
|
101
|
+
deletedCount++;
|
|
102
|
+
});
|
|
103
|
+
model.dispose();
|
|
104
|
+
assert.strictEqual(deletedCount, 2);
|
|
105
|
+
assert.strictEqual(model.surfacesMap.size, 0);
|
|
106
|
+
});
|
|
66
107
|
});
|
|
67
108
|
//# sourceMappingURL=surface-group-model.test.js.map
|