From da28ddc0b995d0d3712a07487314d97fe98baf8b Mon Sep 17 00:00:00 2001 From: kiwigitops Date: Sat, 23 May 2026 01:23:31 -0400 Subject: [PATCH 1/2] fix: align v0.9 slider schema with spec --- .../src/v0_9/catalog/basic/slider.component.ts | 2 -- .../components/basic_components.test.ts | 14 +++++++++++++- .../basic_catalog/components/basic_components.ts | 1 - 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/renderers/angular/src/v0_9/catalog/basic/slider.component.ts b/renderers/angular/src/v0_9/catalog/basic/slider.component.ts index 2b7a44d1e9..9622e2388e 100644 --- a/renderers/angular/src/v0_9/catalog/basic/slider.component.ts +++ b/renderers/angular/src/v0_9/catalog/basic/slider.component.ts @@ -44,7 +44,6 @@ import {SliderApi} from '@a2ui/web_core/v0_9/basic_catalog'; type="range" [min]="min()" [max]="max()" - [step]="step()" [value]="value()" (input)="handleInput($event)" class="a2ui-slider" @@ -85,7 +84,6 @@ export class SliderComponent extends BasicCatalogComponent { readonly value = computed(() => this.props()['value']?.value()); readonly min = computed(() => this.props()['min']?.value() ?? 0); readonly max = computed(() => this.props()['max']?.value() ?? 100); - readonly step = computed(() => this.props()['step']?.value() ?? 1); handleInput(event: Event) { const val = Number((event.target as HTMLInputElement).value); diff --git a/renderers/web_core/src/v0_9/basic_catalog/components/basic_components.test.ts b/renderers/web_core/src/v0_9/basic_catalog/components/basic_components.test.ts index 875e6e8215..e5aff5ad81 100644 --- a/renderers/web_core/src/v0_9/basic_catalog/components/basic_components.test.ts +++ b/renderers/web_core/src/v0_9/basic_catalog/components/basic_components.test.ts @@ -16,7 +16,7 @@ import {describe, it} from 'node:test'; import * as assert from 'node:assert'; -import {ImageApi} from './basic_components.js'; +import {ImageApi, SliderApi} from './basic_components.js'; describe('Basic Components Schema', () => { describe('ImageApi', () => { @@ -46,4 +46,16 @@ describe('Basic Components Schema', () => { assert.throws(() => ImageApi.schema.parse(invalidImage)); }); }); + + describe('SliderApi', () => { + it('should reject non-spec step property', () => { + const slider = { + max: 100, + step: 5, + value: {literalNumber: 50}, + }; + + assert.throws(() => SliderApi.schema.parse(slider)); + }); + }); }); diff --git a/renderers/web_core/src/v0_9/basic_catalog/components/basic_components.ts b/renderers/web_core/src/v0_9/basic_catalog/components/basic_components.ts index b704b00f9a..7d669127d2 100644 --- a/renderers/web_core/src/v0_9/basic_catalog/components/basic_components.ts +++ b/renderers/web_core/src/v0_9/basic_catalog/components/basic_components.ts @@ -442,7 +442,6 @@ export const SliderApi = { label: DynamicStringSchema.describe('The label for the slider.').optional(), min: z.number().default(0).describe('The minimum value of the slider.').optional(), max: z.number().describe('The maximum value of the slider.'), - step: z.number().describe('The granularity or step size of the slider.').optional(), value: DynamicNumberSchema.describe('The current value of the slider.'), checks: CheckableSchema.shape.checks, }) From 192683b8b4ea7b3d018bb5b42fed41422fa0fb41 Mon Sep 17 00:00:00 2001 From: kiwigitops Date: Sat, 23 May 2026 08:22:02 -0400 Subject: [PATCH 2/2] test: assert slider step schema error --- .../components/basic_components.test.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/renderers/web_core/src/v0_9/basic_catalog/components/basic_components.test.ts b/renderers/web_core/src/v0_9/basic_catalog/components/basic_components.test.ts index e5aff5ad81..a95947480f 100644 --- a/renderers/web_core/src/v0_9/basic_catalog/components/basic_components.test.ts +++ b/renderers/web_core/src/v0_9/basic_catalog/components/basic_components.test.ts @@ -49,13 +49,23 @@ describe('Basic Components Schema', () => { describe('SliderApi', () => { it('should reject non-spec step property', () => { - const slider = { + const validSlider = { max: 100, - step: 5, - value: {literalNumber: 50}, + value: 50, }; + SliderApi.schema.parse(validSlider); + + const result = SliderApi.schema.safeParse({ + ...validSlider, + step: 5, + }); - assert.throws(() => SliderApi.schema.parse(slider)); + assert.strictEqual(result.success, false); + assert.ok( + result.error.issues.some( + issue => issue.code === 'unrecognized_keys' && issue.keys.includes('step'), + ), + ); }); }); });