// src/form.js (function(global) { const { Component, NewState, Util, $, State } = global; const AutoForm = { customTypes: [], register: (name, typeName) => { const type = typeName || name if (!AutoForm.customTypes.includes(type)) AutoForm.customTypes.push(type) } }; Component.register('AutoForm', container => { if (!container.state.schema) container.state.schema = [] const ensureProxy = v => (v && typeof v === 'object' && !v.__isProxy) ? NewState(v) : v; container.state.__watch('data', v => container.data = ensureProxy(v)); container.data = ensureProxy(container.state.data || {}); container.addEventListener('submit', async (event) => { event.preventDefault() if (!container.form.reportValidity()) return global.UI?.toast?.('{#verify failed#}', { type: 'danger' }) container.state.formState = 'submitting' const detail = JSON.parse(JSON.stringify(container.data)) const customEvent = new CustomEvent('submit', { bubbles: false, cancelable: true, detail }) container.dispatchEvent(customEvent) if (customEvent.defaultPrevented) return try { if (container.state.action) { const resp = await global.HTTP.request({ url: container.state.action, method: 'POST', data: detail }) if (!resp.ok) throw new Error(resp.error) } container.state.formState = 'success' if (global.UI?.toast) global.UI.toast('{#submit success#}', { type: 'success' }) } catch (err) { container.state.formState = 'error' if (global.UI?.toast) global.UI.toast(err.message, { type: 'danger' }) } }) }, Util.makeDom(/*html*/`
`)) Component.register('TagsInput', container => { container._thisObj = container; if (!container.state) container.state = NewState({ tags: [] }) container.addEventListener('bind', e => { container.state.tags = Array.isArray(e.detail) ? e.detail : [] }) }, Util.makeDom(/*html*/`
`), Util.makeDom(/*html*/``)) AutoForm.register('TagsInput'); global.AutoForm = AutoForm; })(globalThis);