diff --git a/src/uix/morfo/components/editable.ts b/src/uix/morfo/components/editable.ts index d9da904b2..4ff3f6189 100644 --- a/src/uix/morfo/components/editable.ts +++ b/src/uix/morfo/components/editable.ts @@ -14,10 +14,10 @@ export const editableMorfo = { defaultElement: 'div', optional: false, data: [ - { attr: 'data-editing', severity: 'optional' }, - { attr: 'data-empty', severity: 'optional' }, - { attr: 'data-disabled', severity: 'optional' }, - { attr: 'data-readonly', severity: 'optional' } + { attr: 'data-editing', value: v.propRef('editing'), severity: 'optional' }, + { attr: 'data-empty', value: v.propRef('empty'), severity: 'optional' }, + { attr: 'data-disabled', value: v.propRef('disabled'), severity: 'optional' }, + { attr: 'data-readonly', value: v.propRef('readonly'), severity: 'optional' } ], aria: [] }, @@ -27,7 +27,11 @@ export const editableMorfo = { kind: 'public', defaultElement: 'div', optional: true, - data: [], + data: [ + { attr: 'data-editing', value: v.propRef('editing'), severity: 'optional' }, + { attr: 'data-disabled', value: v.propRef('disabled'), severity: 'optional' }, + { attr: 'data-readonly', value: v.propRef('readonly'), severity: 'optional' } + ], aria: [] }, { diff --git a/src/uix/soma/components/editable/editable-provider.svelte.ts b/src/uix/soma/components/editable/editable-provider.svelte.ts index b72cfeb65..b444cc25d 100644 --- a/src/uix/soma/components/editable/editable-provider.svelte.ts +++ b/src/uix/soma/components/editable/editable-provider.svelte.ts @@ -62,12 +62,20 @@ export class EditableProvider { private constructor(opts: EditableOpts) { this.opts = opts; this.soma = Soma.require(); - this.runtime = this.soma.runtime(editableMorfo, {}); + this.runtime = this.soma.runtime(editableMorfo, { + props: { + editing: () => this.isEditing, + empty: () => this.isEmpty, + disabled: () => this.opts.disabled.current, + readonly: () => this.opts.readonly.current + } + }); this.runtimePart = this.runtime.part('provider', { id: opts.id, ref: opts.ref, owner: this, - context: EditableProvider.ctx + context: EditableProvider.ctx, + syncAttrs: true }); this.draft = opts.value.current; @@ -134,11 +142,7 @@ export class EditableProvider { readonly props = $derived.by(() => this.runtimePart.assert({ - ...this.runtimePart.props, - 'data-editing': boolToEmptyStrOrUndef(this.isEditing), - 'data-empty': boolToEmptyStrOrUndef(this.isEmpty), - 'data-disabled': boolToEmptyStrOrUndef(this.opts.disabled.current), - 'data-readonly': boolToEmptyStrOrUndef(this.opts.readonly.current) + ...this.runtimePart.props } as const) ); } @@ -162,16 +166,14 @@ export class EditableAreaProvider { this.runtimePart = this.provider.runtime.part('area', { id: opts.id, ref: opts.ref, - owner: this + owner: this, + syncAttrs: true }); } readonly props = $derived.by(() => this.runtimePart.assert({ - ...this.runtimePart.props, - 'data-editing': boolToEmptyStrOrUndef(this.provider.isEditing), - 'data-disabled': boolToEmptyStrOrUndef(this.provider.opts.disabled.current), - 'data-readonly': boolToEmptyStrOrUndef(this.provider.opts.readonly.current) + ...this.runtimePart.props } as const) ); }