@geektech/one 0.0.1

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.
@@ -0,0 +1,23 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../lib/button/OneButton.ts", "../lib/styles/shared.ts", "../lib/input/OneInput.ts", "../lib/form/context.ts", "../lib/form/model.ts", "../lib/form/OneForm.ts", "../lib/form/OneFormItem.ts", "../lib/checkbox/OneCheckbox.ts", "../lib/checkbox/OneCheckboxGroup.ts", "../lib/switch/OneSwitch.ts", "../lib/select/OneSelect.ts", "../lib/categories.ts", "../lib/card/OneCard.ts", "../lib/index.ts"],
4
+ "sourcesContent": [
5
+ "import { Component, type VNode } from '@geektech/tsone';\nimport {\n normalizeOneSize,\n ONE_THEME_DEFAULTS,\n type OneNamedStyle,\n} from '../styles/shared';\nimport type { OneComponentSize } from '../types';\n\nexport type OneButtonVariant = 'primary' | 'secondary' | 'danger';\n\nexport interface OneButtonProps {\n variant?: OneButtonVariant;\n size?: OneComponentSize;\n type?: 'button' | 'submit' | 'reset';\n disabled?: boolean;\n loading?: boolean;\n children?: Array<VNode | string>;\n}\n\nconst ONE_BUTTON_VARIANTS: readonly OneButtonVariant[] = [\n 'primary',\n 'secondary',\n 'danger',\n];\n\nconst ONE_BUTTON_TYPES: readonly NonNullable<OneButtonProps['type']>[] = [\n 'button',\n 'submit',\n 'reset',\n];\n\nexport const ONE_BUTTON_STYLES: OneNamedStyle[] = [\n {\n name: 'one-button-base',\n selector: '.one-button',\n properties: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: `var(--one-button-gap, var(--one-space-sm, ${ONE_THEME_DEFAULTS.spaceSm}))`,\n border: '1px solid transparent',\n borderRadius: `var(--one-radius-md, ${ONE_THEME_DEFAULTS.radiusMd})`,\n fontFamily: `var(--one-font-family, ${ONE_THEME_DEFAULTS.fontFamily})`,\n fontWeight: '500',\n lineHeight: '1.5',\n cursor: 'pointer',\n transition: '150ms ease',\n },\n },\n {\n name: 'one-button-primary',\n selector: '.one-button--primary',\n properties: {\n color: `var(--one-color-primary-contrast, ${ONE_THEME_DEFAULTS.colorText})`,\n backgroundColor: `var(--one-color-primary, ${ONE_THEME_DEFAULTS.colorPrimary})`,\n },\n hover: {\n backgroundColor: `var(--one-color-primary-hover, ${ONE_THEME_DEFAULTS.colorPrimaryHover})`,\n },\n },\n {\n name: 'one-button-secondary',\n selector: '.one-button--secondary',\n properties: {\n color: `var(--one-color-secondary-contrast, ${ONE_THEME_DEFAULTS.colorText})`,\n backgroundColor: `var(--one-color-secondary, ${ONE_THEME_DEFAULTS.colorSurface})`,\n },\n hover: {\n backgroundColor: `var(--one-color-secondary-hover, ${ONE_THEME_DEFAULTS.colorBorder})`,\n },\n },\n {\n name: 'one-button-danger',\n selector: '.one-button--danger',\n properties: {\n color: `var(--one-color-danger-contrast, ${ONE_THEME_DEFAULTS.colorSurface})`,\n backgroundColor: `var(--one-color-danger, ${ONE_THEME_DEFAULTS.colorDanger})`,\n },\n hover: {\n backgroundColor: `var(--one-color-danger-hover, ${ONE_THEME_DEFAULTS.colorDangerHover})`,\n },\n },\n {\n name: 'one-button-sm',\n selector: '.one-button--sm',\n properties: {\n minHeight: '32px',\n padding: `var(--one-button-padding-sm, ${ONE_THEME_DEFAULTS.spaceXs} ${ONE_THEME_DEFAULTS.spaceMd})`,\n fontSize: `var(--one-font-size-sm, ${ONE_THEME_DEFAULTS.fontSizeSm})`,\n },\n },\n {\n name: 'one-button-md',\n selector: '.one-button--md',\n properties: {\n minHeight: '40px',\n padding: `var(--one-button-padding-md, ${ONE_THEME_DEFAULTS.spaceSm} ${ONE_THEME_DEFAULTS.spaceLg})`,\n fontSize: `var(--one-font-size-md, ${ONE_THEME_DEFAULTS.fontSizeMd})`,\n },\n },\n {\n name: 'one-button-lg',\n selector: '.one-button--lg',\n properties: {\n minHeight: '48px',\n padding: `var(--one-button-padding-lg, ${ONE_THEME_DEFAULTS.spaceMd} ${ONE_THEME_DEFAULTS.spaceLg})`,\n fontSize: `var(--one-font-size-lg, ${ONE_THEME_DEFAULTS.fontSizeLg})`,\n },\n },\n {\n name: 'one-button-disabled',\n selector: '.one-button:disabled',\n properties: {\n opacity: '0.5',\n cursor: 'not-allowed',\n },\n },\n {\n name: 'one-button-focus-visible',\n selector: '.one-button:focus-visible',\n properties: {\n outline: `2px solid var(--one-color-focus, ${ONE_THEME_DEFAULTS.colorFocus})`,\n outlineOffset: '2px',\n },\n },\n {\n name: 'one-button-spinner',\n selector: '.one-button__spinner',\n properties: {\n width: '1em',\n height: '1em',\n border: '2px solid currentColor',\n borderRightColor: 'transparent',\n borderRadius: '50%',\n },\n },\n];\n\nexport function normalizeButtonVariant(value: unknown): OneButtonVariant {\n return ONE_BUTTON_VARIANTS.includes(value as OneButtonVariant)\n ? (value as OneButtonVariant)\n : 'primary';\n}\n\nfunction normalizeButtonType(\n value: unknown\n): NonNullable<OneButtonProps['type']> {\n return ONE_BUTTON_TYPES.includes(value as NonNullable<OneButtonProps['type']>)\n ? (value as NonNullable<OneButtonProps['type']>)\n : 'button';\n}\n\nexport class OneButton extends Component<OneButtonProps> {\n protected initState(): object {\n return {};\n }\n\n protected initStyles(): void {\n ONE_BUTTON_STYLES.forEach(({ name, ...style }) => {\n this.styleManager.addStyle(name, style);\n });\n }\n\n protected render(): VNode {\n const variant = normalizeButtonVariant(this.props.variant);\n const size = normalizeOneSize(this.props.size);\n const disabled =\n this.props.disabled === true || this.props.loading === true;\n\n return {\n tag: 'button',\n props: {\n className: `one-button one-button--${variant} one-button--${size}`,\n type: normalizeButtonType(this.props.type),\n disabled,\n 'aria-busy': this.props.loading === true ? 'true' : undefined,\n },\n listeners: {\n click: (event) => {\n if (!disabled && event instanceof MouseEvent) {\n this.emit('click', event);\n }\n },\n },\n children: [\n ...(this.props.loading\n ? [\n {\n tag: 'span',\n props: {\n className: 'one-button__spinner',\n 'aria-hidden': 'true',\n },\n } as VNode,\n ]\n : []),\n ...(this.props.children ?? []),\n ],\n };\n }\n}\n",
6
+ "import type { StyleSheet } from '@geektech/tsone';\nimport type { StyleOptions } from '@geektech/tsone/style';\nimport type { OneComponentSize } from '../types';\n\nexport type OneNamedStyle = StyleOptions & { name: string };\n\nexport const ONE_THEME_DEFAULTS = {\n colorPrimary: '#5fd956',\n colorPrimaryHover: '#4bc944',\n colorDanger: '#b83232',\n colorDangerHover: '#9f2d2d',\n colorSurface: '#ffffff',\n colorText: '#162018',\n colorMuted: '#647268',\n colorBorder: '#d9e8d6',\n colorFocus: '#2f7c39',\n radiusSm: '4px',\n radiusMd: '8px',\n spaceXs: '4px',\n spaceSm: '8px',\n spaceMd: '12px',\n spaceLg: '16px',\n fontSizeSm: '12px',\n fontSizeMd: '14px',\n fontSizeLg: '16px',\n shadowCard: '0 12px 30px rgba(32, 74, 38, 0.1)',\n fontFamily:\n \"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n} as const;\n\nconst ONE_SIZES: readonly OneComponentSize[] = ['sm', 'md', 'lg'];\n\nexport function normalizeOneSize(value: unknown): OneComponentSize {\n return ONE_SIZES.includes(value as OneComponentSize)\n ? (value as OneComponentSize)\n : 'md';\n}\n\nexport function oneStylesToSheet(styles: readonly OneNamedStyle[]): StyleSheet {\n const sheet: StyleSheet = [];\n\n styles.forEach((style) => {\n sheet.push({ selector: style.selector, properties: style.properties });\n if (style.hover) {\n sheet.push({\n selector: `${style.selector}:hover`,\n properties: style.hover,\n });\n }\n Object.entries(style.media ?? {}).forEach(([query, properties]) => {\n sheet.push({\n atRule: `@media ${query}`,\n rules: [{ selector: style.selector, properties }],\n });\n });\n });\n\n return sheet;\n}\n",
7
+ "import { Component, type VNode } from '@geektech/tsone';\nimport {\n normalizeOneSize,\n ONE_THEME_DEFAULTS,\n type OneNamedStyle,\n} from '../styles/shared';\nimport type { OneComponentSize } from '../types';\nimport { ONE_FORM_FIELD_KEY } from '../form/context';\nimport type { OneFormFieldContext } from '../form/context';\n\nexport interface OneInputValueEvent {\n value: string;\n originalEvent: Event;\n}\n\nexport interface OneInputProps {\n value?: string;\n defaultValue?: string;\n type?: string;\n name?: string;\n placeholder?: string;\n size?: OneComponentSize;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n invalid?: boolean;\n ariaLabel?: string;\n}\n\ninterface OneInputState {\n internalValue: string;\n revision: number;\n}\n\nexport const ONE_INPUT_STYLES: OneNamedStyle[] = [\n {\n name: 'one-input-base',\n selector: '.one-input',\n properties: {\n boxSizing: 'border-box',\n width: '100%',\n border: `1px solid var(--one-input-border-color, var(--one-color-border, ${ONE_THEME_DEFAULTS.colorBorder}))`,\n borderRadius: `var(--one-radius-md, ${ONE_THEME_DEFAULTS.radiusMd})`,\n color: `var(--one-input-color, var(--one-color-text, ${ONE_THEME_DEFAULTS.colorText}))`,\n backgroundColor: `var(--one-input-background, var(--one-color-surface, ${ONE_THEME_DEFAULTS.colorSurface}))`,\n fontFamily: `var(--one-font-family, ${ONE_THEME_DEFAULTS.fontFamily})`,\n lineHeight: '1.5',\n transition: '150ms ease',\n },\n },\n {\n name: 'one-input-sm',\n selector: '.one-input--sm',\n properties: {\n minHeight: '32px',\n padding: `var(--one-input-padding-sm, ${ONE_THEME_DEFAULTS.spaceXs} ${ONE_THEME_DEFAULTS.spaceSm})`,\n fontSize: `var(--one-font-size-sm, ${ONE_THEME_DEFAULTS.fontSizeSm})`,\n },\n },\n {\n name: 'one-input-md',\n selector: '.one-input--md',\n properties: {\n minHeight: '40px',\n padding: `var(--one-input-padding-md, ${ONE_THEME_DEFAULTS.spaceSm} ${ONE_THEME_DEFAULTS.spaceMd})`,\n fontSize: `var(--one-font-size-md, ${ONE_THEME_DEFAULTS.fontSizeMd})`,\n },\n },\n {\n name: 'one-input-lg',\n selector: '.one-input--lg',\n properties: {\n minHeight: '48px',\n padding: `var(--one-input-padding-lg, ${ONE_THEME_DEFAULTS.spaceMd} ${ONE_THEME_DEFAULTS.spaceLg})`,\n fontSize: `var(--one-font-size-lg, ${ONE_THEME_DEFAULTS.fontSizeLg})`,\n },\n },\n {\n name: 'one-input-invalid',\n selector: '.one-input--invalid',\n properties: {\n borderColor: `var(--one-color-danger, ${ONE_THEME_DEFAULTS.colorDanger})`,\n },\n },\n {\n name: 'one-input-disabled',\n selector: '.one-input:disabled',\n properties: {\n opacity: '0.5',\n cursor: 'not-allowed',\n backgroundColor: `var(--one-input-disabled-background, var(--one-color-surface, ${ONE_THEME_DEFAULTS.colorSurface}))`,\n },\n },\n {\n name: 'one-input-focus-visible',\n selector: '.one-input:focus-visible',\n properties: {\n outline: `2px solid var(--one-color-focus, ${ONE_THEME_DEFAULTS.colorFocus})`,\n outlineOffset: '2px',\n borderColor: `var(--one-input-focus-border-color, var(--one-color-focus, ${ONE_THEME_DEFAULTS.colorFocus}))`,\n },\n },\n];\n\nexport class OneInput extends Component<OneInputProps, OneInputState> {\n private fieldContext: OneFormFieldContext | undefined;\n private unsubscribe: (() => void) | undefined;\n\n protected initState(): OneInputState {\n return { internalValue: this.props.defaultValue ?? '', revision: 0 };\n }\n\n protected initStyles(): void {\n ONE_INPUT_STYLES.forEach(({ name, ...style }) => {\n this.styleManager.addStyle(name, style);\n });\n }\n\n protected render(): VNode {\n void this.state.revision;\n const size = normalizeOneSize(this.props.size);\n const fieldContext = this.fieldContext;\n const fieldErrors = fieldContext?.model.getErrors(fieldContext.name) ?? [];\n const value = fieldContext\n ? fieldContext.model.getValue(fieldContext.name)\n : this.props.value ?? this.state.internalValue;\n const classNames = [\n 'one-input',\n ...(this.props.invalid || fieldErrors.length > 0 ? ['one-input--invalid'] : []),\n `one-input--${size}`,\n ];\n\n return {\n tag: 'input',\n props: {\n className: classNames.join(' '),\n value: typeof value === 'string' ? value : '',\n type: this.props.type,\n name: fieldContext?.name ?? this.props.name,\n id: fieldContext?.controlId,\n placeholder: this.props.placeholder,\n disabled: this.props.disabled === true,\n readonly: this.props.readonly === true,\n required: this.props.required === true,\n 'aria-invalid': this.props.invalid || fieldErrors.length > 0 ? 'true' : undefined,\n 'aria-describedby': fieldContext?.describedBy,\n 'aria-label': this.props.ariaLabel,\n },\n listeners: {\n input: (event) => this.emitValue('input', event),\n change: (event) => this.emitValue('change', event),\n },\n };\n }\n\n protected onUpdated(): void {\n const input = this.getElement();\n if (!this.fieldContext && this.props.value !== undefined && input instanceof HTMLInputElement) {\n input.value = this.props.value;\n }\n }\n\n protected beforeMount(): void {\n this.fieldContext = this.inject(ONE_FORM_FIELD_KEY);\n if (this.fieldContext) {\n this.fieldContext.model.ensureValue(\n this.fieldContext.name,\n this.props.value ?? this.props.defaultValue ?? ''\n );\n }\n }\n\n protected onMounted(): void {\n this.unsubscribe = this.fieldContext?.model.subscribe(() => {\n this.state.revision += 1;\n });\n }\n\n protected onUnmounted(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n this.fieldContext = undefined;\n }\n\n private emitValue(eventName: 'input' | 'change', event: Event): void {\n const input = event.currentTarget;\n if (!(input instanceof HTMLInputElement)) {\n return;\n }\n\n const nextValue = input.value;\n if (this.fieldContext) {\n this.fieldContext.model.setValue(this.fieldContext.name, nextValue);\n } else if (this.props.value === undefined) {\n this.state.internalValue = nextValue;\n }\n\n this.emit(eventName, { value: nextValue, originalEvent: event });\n\n if (!this.fieldContext && this.props.value !== undefined) {\n input.value = this.props.value;\n }\n }\n}\n",
8
+ "import type { InjectionKey } from '@geektech/tsone';\nimport type { OneFormModel } from './model';\n\nexport type OneFieldValue = string | boolean | string[];\n\nexport type OneFormValues = Readonly<\n Record<string, OneFieldValue | undefined>\n>;\n\nexport type OneFormInitialValues = Readonly<\n Record<string, OneFieldValue | undefined>\n>;\n\nexport interface OneFieldValueEvent<TValue extends OneFieldValue> {\n value: TValue;\n originalEvent: Event;\n}\n\nexport interface OneValidationRule {\n required?: boolean;\n minLength?: number;\n maxLength?: number;\n pattern?: RegExp;\n message?: string;\n validator?: (\n value: OneFieldValue | undefined,\n values: OneFormValues\n ) => string | undefined;\n}\n\nexport type OneFormRules = Readonly<\n Record<string, readonly OneValidationRule[] | undefined>\n>;\n\nexport interface OneFormValidationResult {\n valid: boolean;\n errors: Readonly<Record<string, readonly string[]>>;\n}\n\nexport interface OneFormFieldContext {\n name: string;\n controlId: string;\n describedBy: string | undefined;\n model: OneFormModel;\n}\n\nexport const ONE_FORM_MODEL_KEY = Symbol(\n 'one-form-model'\n) as InjectionKey<OneFormModel>;\n\nexport const ONE_FORM_FIELD_KEY = Symbol(\n 'one-form-field'\n) as InjectionKey<OneFormFieldContext>;\n",
9
+ "import type {\n OneFieldValue,\n OneFormInitialValues,\n OneFormRules,\n OneFormValidationResult,\n OneFormValues,\n OneValidationRule,\n} from './context';\n\ntype OneFormSubscriber = () => void;\n\nfunction hasOwn(object: object, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction cloneFieldValue(\n value: OneFieldValue | undefined\n): OneFieldValue | undefined {\n return Array.isArray(value) ? [...value] : value;\n}\n\nfunction cloneValues(values: OneFormValues): Record<string, OneFieldValue | undefined> {\n return Object.fromEntries(\n Object.entries(values).map(([name, value]) => [name, cloneFieldValue(value)])\n );\n}\n\nfunction isRequiredValue(value: OneFieldValue | undefined): boolean {\n return value !== undefined && value !== '' && value !== false &&\n (!Array.isArray(value) || value.length > 0);\n}\n\nfunction getLength(value: OneFieldValue | undefined): number | undefined {\n return typeof value === 'string' || Array.isArray(value)\n ? value.length\n : undefined;\n}\n\nfunction defaultRuleMessage(rule: OneValidationRule): string {\n if (rule.required) {\n return '此字段为必填项';\n }\n if (rule.minLength !== undefined) {\n return `长度不能少于 ${rule.minLength}`;\n }\n if (rule.maxLength !== undefined) {\n return `长度不能超过 ${rule.maxLength}`;\n }\n if (rule.pattern) {\n return '格式不正确';\n }\n return '校验失败';\n}\n\nexport class OneFormModel {\n private readonly initialValues: Record<string, OneFieldValue | undefined>;\n private readonly rules: Record<string, readonly OneValidationRule[]>;\n private readonly values: Record<string, OneFieldValue | undefined> = {};\n private readonly errors = new Map<string, string[]>();\n private readonly fields = new Map<string, () => void>();\n private readonly subscribers = new Set<OneFormSubscriber>();\n\n public constructor(\n initialValues: OneFormInitialValues = {},\n rules: OneFormRules = {}\n ) {\n this.initialValues = cloneValues(initialValues);\n this.rules = Object.fromEntries(\n Object.entries(rules).map(([name, fieldRules]) => [\n name,\n fieldRules ? fieldRules.map((rule) => ({ ...rule })) : [],\n ])\n );\n }\n\n public ensureValue(name: string, fallback: OneFieldValue): void {\n if (hasOwn(this.values, name)) {\n return;\n }\n\n this.values[name] = cloneFieldValue(\n hasOwn(this.initialValues, name)\n ? this.initialValues[name]\n : fallback\n );\n this.notify();\n }\n\n public setValue(name: string, value: OneFieldValue): void {\n this.values[name] = cloneFieldValue(value);\n this.notify();\n }\n\n public getValue(name: string): OneFieldValue | undefined {\n return cloneFieldValue(this.values[name]);\n }\n\n public getValues(): OneFormValues {\n return cloneValues(\n Object.fromEntries(\n [...this.fields.keys()].map((name) => [name, this.values[name]])\n )\n );\n }\n\n public getErrors(name: string): readonly string[] {\n return [...(this.errors.get(name) ?? [])];\n }\n\n public validate(): OneFormValidationResult {\n this.errors.clear();\n const values = this.getValues();\n\n this.fields.forEach((_, name) => {\n const messages = this.validateField(name, values);\n if (messages.length > 0) {\n this.errors.set(name, messages);\n }\n });\n\n this.notify();\n return this.getValidationResult();\n }\n\n public reset(): void {\n this.errors.clear();\n this.fields.forEach((_, name) => {\n if (hasOwn(this.initialValues, name)) {\n this.values[name] = cloneFieldValue(this.initialValues[name]);\n } else {\n delete this.values[name];\n }\n });\n this.notify();\n }\n\n public subscribe(listener: OneFormSubscriber): () => void {\n this.subscribers.add(listener);\n return () => this.subscribers.delete(listener);\n }\n\n public registerField(name: string, focus: () => void): () => void {\n if (!hasOwn(this.values, name) && hasOwn(this.initialValues, name)) {\n this.values[name] = cloneFieldValue(this.initialValues[name]);\n }\n this.fields.set(name, focus);\n return () => {\n this.fields.delete(name);\n this.errors.delete(name);\n delete this.values[name];\n this.notify();\n };\n }\n\n public focusFirstInvalidField(): boolean {\n for (const [name, focus] of this.fields) {\n if (this.errors.has(name)) {\n focus();\n return true;\n }\n }\n return false;\n }\n\n private validateField(name: string, values: OneFormValues): string[] {\n const value = this.values[name];\n const messages: string[] = [];\n\n this.rules[name]?.forEach((rule) => {\n if (rule.required && !isRequiredValue(value)) {\n messages.push(rule.message ?? defaultRuleMessage(rule));\n }\n\n const length = getLength(value);\n if (rule.minLength !== undefined && length !== undefined && length < rule.minLength) {\n messages.push(rule.message ?? defaultRuleMessage(rule));\n }\n if (rule.maxLength !== undefined && length !== undefined && length > rule.maxLength) {\n messages.push(rule.message ?? defaultRuleMessage(rule));\n }\n if (rule.pattern && typeof value === 'string' && !rule.pattern.test(value)) {\n messages.push(rule.message ?? defaultRuleMessage(rule));\n }\n if (rule.validator) {\n try {\n const message = rule.validator(cloneFieldValue(value), values);\n if (message) {\n messages.push(message);\n }\n } catch {\n messages.push('校验器执行失败');\n }\n }\n });\n\n return messages;\n }\n\n private getValidationResult(): OneFormValidationResult {\n const errors = Object.fromEntries(\n [...this.errors.entries()].map(([name, messages]) => [name, [...messages]])\n );\n return { valid: this.errors.size === 0, errors };\n }\n\n private notify(): void {\n [...this.subscribers].forEach((listener) => listener());\n }\n}\n",
10
+ "import { Component, slot, type VNode } from '@geektech/tsone';\nimport type { OneNamedStyle } from '../styles/shared';\nimport type {\n OneFormInitialValues,\n OneFormRules,\n OneFormValidationResult,\n OneFormValues,\n} from './context';\nimport { ONE_FORM_MODEL_KEY } from './context';\nimport { OneFormModel } from './model';\n\nexport interface OneFormProps {\n initialValues?: OneFormInitialValues;\n rules?: OneFormRules;\n children?: Array<VNode | string>;\n}\n\nexport interface OneFormSubmitEvent {\n values: OneFormValues;\n}\n\ninterface OneFormState {\n revision: number;\n}\n\nexport const ONE_FORM_STYLES: OneNamedStyle[] = [\n {\n name: 'one-form-base',\n selector: '.one-form',\n properties: {\n display: 'grid',\n gap: '16px',\n },\n },\n];\n\nexport class OneForm extends Component<OneFormProps, OneFormState> {\n public readonly model: OneFormModel;\n\n public constructor(props: OneFormProps = {}) {\n super(props);\n this.model = new OneFormModel(props.initialValues, props.rules);\n this.provide(ONE_FORM_MODEL_KEY, this.model);\n }\n\n public validate(): OneFormValidationResult {\n return this.model.validate();\n }\n\n public reset(): void {\n this.model.reset();\n }\n\n public getValues(): OneFormValues {\n return this.model.getValues();\n }\n\n protected initState(): OneFormState {\n return { revision: 0 };\n }\n\n protected initStyles(): void {\n ONE_FORM_STYLES.forEach(({ name, ...style }) => {\n this.styleManager.addStyle(name, style);\n });\n }\n\n protected render(): VNode {\n return {\n tag: 'form',\n props: { className: 'one-form', novalidate: true },\n children: [slot('default')],\n listeners: {\n submit: (event) => this.handleSubmit(event),\n reset: (event) => this.handleReset(event),\n },\n };\n }\n\n private handleSubmit(event: Event): void {\n event.preventDefault();\n const result = this.model.validate();\n if (!result.valid) {\n this.model.focusFirstInvalidField();\n return;\n }\n\n this.emit('submit', { values: this.model.getValues() });\n }\n\n private handleReset(event: Event): void {\n event.preventDefault();\n this.model.reset();\n }\n}\n",
11
+ "import { Component, slot, type VNode } from '@geektech/tsone';\nimport type { OneNamedStyle } from '../styles/shared';\nimport { ONE_FORM_FIELD_KEY, ONE_FORM_MODEL_KEY } from './context';\nimport type { OneFormFieldContext } from './context';\nimport type { OneFormModel } from './model';\n\nexport interface OneFormItemProps {\n name: string;\n label?: string;\n description?: string;\n children?: Array<VNode | string>;\n}\n\ninterface OneFormItemState {\n revision: number;\n}\n\nexport const ONE_FORM_ITEM_STYLES: OneNamedStyle[] = [\n {\n name: 'one-form-item-base',\n selector: '.one-form-item',\n properties: {\n display: 'grid',\n gap: '6px',\n },\n },\n {\n name: 'one-form-item-label',\n selector: '.one-form-item__label',\n properties: { fontWeight: '500' },\n },\n {\n name: 'one-form-item-description',\n selector: '.one-form-item__description',\n properties: { color: 'var(--one-color-muted, #647268)', fontSize: '12px' },\n },\n {\n name: 'one-form-item-error',\n selector: '.one-form-item__error',\n properties: { color: 'var(--one-color-danger, #b83232)', fontSize: '12px' },\n },\n];\n\nfunction normalizeName(name: string): string {\n return (\n name\n .trim()\n .replace(/[^a-zA-Z0-9_-]+/g, '-')\n .replace(/^-+|-+$/g, '') || 'field'\n );\n}\n\nexport class OneFormItem extends Component<OneFormItemProps, OneFormItemState> {\n private model: OneFormModel | undefined;\n private unsubscribe: (() => void) | undefined;\n private unregister: (() => void) | undefined;\n private fieldSignature = '';\n\n protected initState(): OneFormItemState {\n return { revision: 0 };\n }\n\n protected initStyles(): void {\n ONE_FORM_ITEM_STYLES.forEach(({ name, ...style }) => {\n this.styleManager.addStyle(name, style);\n });\n }\n\n protected beforeMount(): void {\n const model = this.inject(ONE_FORM_MODEL_KEY);\n if (!model) {\n throw new Error('OneFormItem requires OneForm');\n }\n\n this.model = model;\n this.fieldSignature = this.getFieldSignature(model);\n this.provide(ONE_FORM_FIELD_KEY, this.getFieldContext(model));\n this.unregister = model.registerField(this.props.name, () => {\n const element = this.getElement();\n if (!(element instanceof HTMLElement)) {\n return;\n }\n element.querySelector<HTMLElement>('input, button')?.focus();\n });\n }\n\n protected onMounted(): void {\n this.unsubscribe = this.model?.subscribe(() => {\n if (!this.model) {\n return;\n }\n const fieldSignature = this.getFieldSignature(this.model);\n if (fieldSignature === this.fieldSignature) {\n return;\n }\n this.fieldSignature = fieldSignature;\n this.state.revision += 1;\n });\n }\n\n protected onUnmounted(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n this.unregister?.();\n this.unregister = undefined;\n this.model = undefined;\n }\n\n protected render(): VNode {\n void this.state.revision;\n const model = this.model;\n const ids = this.getIds();\n const errors = model?.getErrors(this.props.name) ?? [];\n\n return {\n tag: 'div',\n props: { className: 'one-form-item' },\n children: [\n ...(this.props.label\n ? [\n {\n tag: 'label',\n props: { className: 'one-form-item__label', for: ids.control },\n children: [this.props.label],\n } as VNode,\n ]\n : []),\n slot('default'),\n ...(this.props.description\n ? [\n {\n tag: 'div',\n props: {\n id: ids.description,\n className: 'one-form-item__description',\n },\n children: [this.props.description],\n } as VNode,\n ]\n : []),\n ...(errors.length > 0\n ? [\n {\n tag: 'div',\n props: {\n id: ids.error,\n className: 'one-form-item__error',\n role: 'alert',\n },\n children: [errors.join(' ')],\n } as VNode,\n ]\n : []),\n ],\n };\n }\n\n private getFieldContext(model: OneFormModel): OneFormFieldContext {\n const ids = this.getIds();\n return {\n name: this.props.name,\n controlId: ids.control,\n describedBy: this.props.description\n ? `${ids.description} ${ids.error}`\n : ids.error,\n model,\n };\n }\n\n private getIds(): { control: string; description: string; error: string } {\n const name = normalizeName(this.props.name);\n return {\n control: `one-form-${name}-control`,\n description: `one-form-${name}-description`,\n error: `one-form-${name}-error`,\n };\n }\n\n private getFieldSignature(model: OneFormModel): string {\n return JSON.stringify([\n model.getValue(this.props.name),\n model.getErrors(this.props.name),\n ]);\n }\n}\n",
12
+ "import { Component, slot, type VNode } from '@geektech/tsone';\nimport type { OneFieldValueEvent, OneFormFieldContext } from '../form/context';\nimport { ONE_FORM_FIELD_KEY } from '../form/context';\nimport { ONE_THEME_DEFAULTS, type OneNamedStyle } from '../styles/shared';\n\nexport interface OneCheckboxProps {\n checked?: boolean;\n defaultChecked?: boolean;\n name?: string;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n ariaLabel?: string;\n children?: Array<VNode | string>;\n}\n\ninterface OneCheckboxState {\n internalChecked: boolean;\n revision: number;\n}\n\nexport const ONE_CHECKBOX_STYLES: OneNamedStyle[] = [\n {\n name: 'one-checkbox-base',\n selector: '.one-checkbox',\n properties: {\n display: 'inline-flex',\n gap: '8px',\n alignItems: 'center',\n color: `var(--one-color-text, ${ONE_THEME_DEFAULTS.colorText})`,\n },\n },\n {\n name: 'one-checkbox-input',\n selector: '.one-checkbox__input',\n properties: {\n accentColor: `var(--one-color-primary, ${ONE_THEME_DEFAULTS.colorPrimary})`,\n },\n },\n {\n name: 'one-checkbox-invalid',\n selector: '.one-checkbox--invalid',\n properties: {\n color: `var(--one-color-danger, ${ONE_THEME_DEFAULTS.colorDanger})`,\n },\n },\n {\n name: 'one-checkbox-disabled',\n selector: '.one-checkbox--disabled',\n properties: { opacity: '0.5', cursor: 'not-allowed' },\n },\n];\n\nexport class OneCheckbox extends Component<OneCheckboxProps, OneCheckboxState> {\n private fieldContext: OneFormFieldContext | undefined;\n private unsubscribe: (() => void) | undefined;\n\n protected initState(): OneCheckboxState {\n return { internalChecked: this.props.defaultChecked ?? false, revision: 0 };\n }\n\n protected initStyles(): void {\n ONE_CHECKBOX_STYLES.forEach(({ name, ...style }) =>\n this.styleManager.addStyle(name, style)\n );\n }\n\n protected beforeMount(): void {\n this.fieldContext = this.inject(ONE_FORM_FIELD_KEY);\n this.fieldContext?.model.ensureValue(\n this.fieldContext.name,\n this.props.checked ?? this.props.defaultChecked ?? false\n );\n }\n\n protected onMounted(): void {\n this.unsubscribe = this.fieldContext?.model.subscribe(() => {\n this.state.revision += 1;\n });\n }\n\n protected onUnmounted(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n this.fieldContext = undefined;\n }\n\n protected onUpdated(): void {\n const element = this.getElement();\n const input =\n element instanceof HTMLElement ? element.querySelector('input') : null;\n if (input instanceof HTMLInputElement) input.checked = this.getChecked();\n }\n\n protected render(): VNode {\n void this.state.revision;\n const checked = this.getChecked();\n const invalid =\n this.props.invalid ||\n (this.fieldContext?.model.getErrors(this.fieldContext.name).length ?? 0) >\n 0;\n return {\n tag: 'label',\n props: {\n className: [\n 'one-checkbox',\n ...(invalid ? ['one-checkbox--invalid'] : []),\n ...(this.props.disabled ? ['one-checkbox--disabled'] : []),\n ].join(' '),\n },\n children: [\n {\n tag: 'input',\n props: {\n className: 'one-checkbox__input',\n type: 'checkbox',\n checked,\n name: this.fieldContext?.name ?? this.props.name,\n disabled: this.props.disabled === true,\n required: this.props.required === true,\n id: this.fieldContext?.controlId,\n 'aria-label': this.props.ariaLabel,\n 'aria-invalid': invalid ? 'true' : undefined,\n 'aria-describedby': this.fieldContext?.describedBy,\n },\n listeners: {\n input: (event) => this.emitChecked('input', event),\n change: (event) => this.emitChecked('change', event),\n },\n },\n slot('default'),\n ],\n };\n }\n\n private getChecked(): boolean {\n const value = this.fieldContext?.model.getValue(this.fieldContext.name);\n return typeof value === 'boolean'\n ? value\n : (this.props.checked ?? this.state.internalChecked);\n }\n\n private emitChecked(eventName: 'input' | 'change', event: Event): void {\n const input = event.currentTarget;\n if (!(input instanceof HTMLInputElement) || this.props.disabled) return;\n const value = input.checked;\n if (this.fieldContext)\n this.fieldContext.model.setValue(this.fieldContext.name, value);\n else if (this.props.checked === undefined)\n this.state.internalChecked = value;\n this.emit(eventName, {\n value,\n originalEvent: event,\n } satisfies OneFieldValueEvent<boolean>);\n if (!this.fieldContext && this.props.checked !== undefined)\n input.checked = this.props.checked;\n }\n}\n",
13
+ "import { Component, type VNode } from '@geektech/tsone';\nimport type { OneFieldValueEvent, OneFormFieldContext } from '../form/context';\nimport { ONE_FORM_FIELD_KEY } from '../form/context';\nimport type { OneSelectOption } from '../select';\n\nexport interface OneCheckboxGroupProps {\n options: readonly OneSelectOption[];\n value?: string[];\n defaultValue?: string[];\n name?: string;\n disabled?: boolean;\n invalid?: boolean;\n ariaLabel?: string;\n}\n\ninterface OneCheckboxGroupState {\n internalValue: string[];\n revision: number;\n}\n\nexport class OneCheckboxGroup extends Component<\n OneCheckboxGroupProps,\n OneCheckboxGroupState\n> {\n private fieldContext: OneFormFieldContext | undefined;\n private unsubscribe: (() => void) | undefined;\n protected initState(): OneCheckboxGroupState {\n return { internalValue: [...(this.props.defaultValue ?? [])], revision: 0 };\n }\n protected initStyles(): void {}\n protected beforeMount(): void {\n this.fieldContext = this.inject(ONE_FORM_FIELD_KEY);\n this.fieldContext?.model.ensureValue(\n this.fieldContext.name,\n this.props.value ?? this.props.defaultValue ?? []\n );\n }\n protected onMounted(): void {\n this.unsubscribe = this.fieldContext?.model.subscribe(() => {\n this.state.revision += 1;\n });\n }\n protected onUnmounted(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n this.fieldContext = undefined;\n }\n protected render(): VNode {\n void this.state.revision;\n const values = this.getValue();\n const invalid =\n this.props.invalid ||\n (this.fieldContext?.model.getErrors(this.fieldContext.name).length ?? 0) >\n 0;\n return {\n tag: 'div',\n props: {\n className: 'one-checkbox-group',\n role: 'group',\n 'aria-label': this.props.ariaLabel,\n 'aria-invalid': invalid ? 'true' : undefined,\n 'aria-describedby': this.fieldContext?.describedBy,\n },\n children: this.props.options.map((option) => ({\n tag: 'label',\n props: { className: 'one-checkbox-group__option' },\n children: [\n {\n tag: 'input',\n props: {\n type: 'checkbox',\n checked: values.includes(option.value),\n disabled: this.props.disabled || option.disabled,\n name: this.fieldContext?.name ?? this.props.name,\n },\n listeners: { change: (event) => this.toggle(option, event) },\n },\n option.label,\n ],\n })),\n };\n }\n private getValue(): string[] {\n const value = this.fieldContext?.model.getValue(this.fieldContext.name);\n return Array.isArray(value)\n ? [...value]\n : this.props.value\n ? [...this.props.value]\n : [...this.state.internalValue];\n }\n private toggle(option: OneSelectOption, event: Event): void {\n const input = event.currentTarget;\n if (\n !(input instanceof HTMLInputElement) ||\n this.props.disabled ||\n option.disabled\n )\n return;\n const current = this.getValue();\n const next = input.checked\n ? [...current, option.value]\n : current.filter((value) => value !== option.value);\n const ordered = this.props.options\n .filter((item) => new Set(next).has(item.value))\n .map((item) => item.value);\n if (this.fieldContext)\n this.fieldContext.model.setValue(this.fieldContext.name, ordered);\n else if (this.props.value === undefined) this.state.internalValue = ordered;\n this.emit('input', {\n value: ordered,\n originalEvent: event,\n } satisfies OneFieldValueEvent<string[]>);\n this.emit('change', {\n value: ordered,\n originalEvent: event,\n } satisfies OneFieldValueEvent<string[]>);\n }\n}\n",
14
+ "import { Component, type VNode } from '@geektech/tsone';\nimport type { OneFieldValueEvent, OneFormFieldContext } from '../form/context';\nimport { ONE_FORM_FIELD_KEY } from '../form/context';\nimport { ONE_THEME_DEFAULTS, type OneNamedStyle } from '../styles/shared';\n\nexport interface OneSwitchProps {\n checked?: boolean;\n defaultChecked?: boolean;\n name?: string;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n ariaLabel?: string;\n}\ninterface OneSwitchState {\n internalChecked: boolean;\n revision: number;\n}\nexport const ONE_SWITCH_STYLES: OneNamedStyle[] = [\n {\n name: 'one-switch-base',\n selector: '.one-switch',\n properties: {\n display: 'inline-flex',\n alignItems: 'center',\n position: 'relative',\n width: '44px',\n height: '24px',\n borderRadius: '999px',\n backgroundColor: `var(--one-color-border, ${ONE_THEME_DEFAULTS.colorBorder})`,\n cursor: 'pointer',\n transition: '150ms ease',\n },\n },\n {\n name: 'one-switch-input',\n selector: '.one-switch__input',\n properties: {\n position: 'absolute',\n inset: '0',\n width: '100%',\n height: '100%',\n margin: '0',\n opacity: '0',\n cursor: 'inherit',\n },\n },\n {\n name: 'one-switch-thumb',\n selector: '.one-switch__thumb',\n properties: {\n width: '18px',\n height: '18px',\n marginLeft: '3px',\n borderRadius: '50%',\n backgroundColor: `var(--one-color-surface, ${ONE_THEME_DEFAULTS.colorSurface})`,\n boxShadow: '0 1px 3px rgba(22, 32, 24, 0.28)',\n pointerEvents: 'none',\n transition: '150ms ease',\n },\n },\n {\n name: 'one-switch-thumb-checked',\n selector: '.one-switch--checked .one-switch__thumb',\n properties: { transform: 'translateX(20px)' },\n },\n {\n name: 'one-switch-checked',\n selector: '.one-switch--checked',\n properties: {\n backgroundColor: `var(--one-color-primary, ${ONE_THEME_DEFAULTS.colorPrimary})`,\n },\n },\n {\n name: 'one-switch-invalid',\n selector: '.one-switch--invalid',\n properties: {\n outline: `2px solid var(--one-color-danger, ${ONE_THEME_DEFAULTS.colorDanger})`,\n },\n },\n {\n name: 'one-switch-disabled',\n selector: '.one-switch--disabled',\n properties: { opacity: '0.5', cursor: 'not-allowed' },\n },\n {\n name: 'one-switch-focus-visible',\n selector: '.one-switch:has(.one-switch__input:focus-visible)',\n properties: {\n outline: `2px solid var(--one-color-focus, ${ONE_THEME_DEFAULTS.colorFocus})`,\n outlineOffset: '2px',\n },\n },\n];\nexport class OneSwitch extends Component<OneSwitchProps, OneSwitchState> {\n private fieldContext: OneFormFieldContext | undefined;\n private unsubscribe: (() => void) | undefined;\n protected initState(): OneSwitchState {\n return { internalChecked: this.props.defaultChecked ?? false, revision: 0 };\n }\n protected initStyles(): void {\n ONE_SWITCH_STYLES.forEach(({ name, ...style }) =>\n this.styleManager.addStyle(name, style)\n );\n }\n protected beforeMount(): void {\n this.fieldContext = this.inject(ONE_FORM_FIELD_KEY);\n this.fieldContext?.model.ensureValue(\n this.fieldContext.name,\n this.props.checked ?? this.props.defaultChecked ?? false\n );\n }\n protected onMounted(): void {\n this.unsubscribe = this.fieldContext?.model.subscribe(() => {\n this.state.revision += 1;\n });\n }\n protected onUnmounted(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n this.fieldContext = undefined;\n }\n protected onUpdated(): void {\n const element = this.getElement();\n const input =\n element instanceof HTMLElement ? element.querySelector('input') : null;\n if (input instanceof HTMLInputElement) input.checked = this.getChecked();\n }\n protected render(): VNode {\n void this.state.revision;\n const checked = this.getChecked();\n const invalid =\n this.props.invalid ||\n (this.fieldContext?.model.getErrors(this.fieldContext.name).length ?? 0) >\n 0;\n return {\n tag: 'label',\n props: {\n className: [\n 'one-switch',\n ...(checked ? ['one-switch--checked'] : []),\n ...(invalid ? ['one-switch--invalid'] : []),\n ...(this.props.disabled ? ['one-switch--disabled'] : []),\n ].join(' '),\n role: 'switch',\n 'aria-checked': checked ? 'true' : 'false',\n },\n children: [\n {\n tag: 'input',\n props: {\n className: 'one-switch__input',\n type: 'checkbox',\n checked,\n name: this.fieldContext?.name ?? this.props.name,\n disabled: this.props.disabled === true,\n required: this.props.required === true,\n id: this.fieldContext?.controlId,\n 'aria-label': this.props.ariaLabel,\n 'aria-invalid': invalid ? 'true' : undefined,\n 'aria-describedby': this.fieldContext?.describedBy,\n },\n listeners: {\n input: (event) => this.emitChecked('input', event),\n change: (event) => this.emitChecked('change', event),\n },\n },\n {\n tag: 'span',\n props: { className: 'one-switch__thumb', 'aria-hidden': 'true' },\n },\n ],\n };\n }\n private getChecked(): boolean {\n const value = this.fieldContext?.model.getValue(this.fieldContext.name);\n return typeof value === 'boolean'\n ? value\n : (this.props.checked ?? this.state.internalChecked);\n }\n private emitChecked(eventName: 'input' | 'change', event: Event): void {\n const input = event.currentTarget;\n if (!(input instanceof HTMLInputElement) || this.props.disabled) return;\n const value = input.checked;\n if (this.fieldContext)\n this.fieldContext.model.setValue(this.fieldContext.name, value);\n else if (this.props.checked === undefined)\n this.state.internalChecked = value;\n this.emit(eventName, {\n value,\n originalEvent: event,\n } satisfies OneFieldValueEvent<boolean>);\n if (!this.fieldContext && this.props.checked !== undefined)\n input.checked = this.props.checked;\n }\n}\n",
15
+ "import { Component, type VNode } from '@geektech/tsone';\nimport type { OneFieldValueEvent, OneFormFieldContext } from '../form/context';\nimport { ONE_FORM_FIELD_KEY } from '../form/context';\nimport { ONE_THEME_DEFAULTS, type OneNamedStyle } from '../styles/shared';\n\nexport interface OneSelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\nexport interface OneSelectOptionGroup {\n label: string;\n options: readonly OneSelectOption[];\n}\nexport interface OneSelectProps {\n options: readonly (OneSelectOption | OneSelectOptionGroup)[];\n value?: string | string[];\n defaultValue?: string | string[];\n multiple?: boolean;\n searchable?: boolean;\n name?: string;\n placeholder?: string;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n ariaLabel?: string;\n}\ninterface FlatOption extends OneSelectOption {\n group?: string;\n}\ninterface OneSelectState {\n open: boolean;\n query: string;\n activeIndex: number;\n internalValue: string | string[];\n revision: number;\n}\nexport const ONE_SELECT_STYLES: OneNamedStyle[] = [\n {\n name: 'one-select-base',\n selector: '.one-select',\n properties: { position: 'relative', width: '100%' },\n },\n {\n name: 'one-select-trigger',\n selector: '.one-select__trigger',\n properties: {\n width: '100%',\n minHeight: '40px',\n textAlign: 'left',\n border: `1px solid var(--one-color-border, ${ONE_THEME_DEFAULTS.colorBorder})`,\n borderRadius: `var(--one-radius-md, ${ONE_THEME_DEFAULTS.radiusMd})`,\n backgroundColor: `var(--one-color-surface, ${ONE_THEME_DEFAULTS.colorSurface})`,\n },\n },\n {\n name: 'one-select-menu',\n selector: '.one-select__menu',\n properties: {\n position: 'absolute',\n zIndex: '1',\n width: '100%',\n marginTop: '4px',\n padding: '4px',\n border: `1px solid var(--one-color-border, ${ONE_THEME_DEFAULTS.colorBorder})`,\n borderRadius: `var(--one-radius-md, ${ONE_THEME_DEFAULTS.radiusMd})`,\n backgroundColor: `var(--one-color-surface, ${ONE_THEME_DEFAULTS.colorSurface})`,\n },\n },\n {\n name: 'one-select-option',\n selector: '.one-select__option',\n properties: {\n display: 'block',\n width: '100%',\n padding: '8px',\n textAlign: 'left',\n backgroundColor: 'transparent',\n border: '0',\n },\n },\n {\n name: 'one-select-option-selected',\n selector: '.one-select__option--selected',\n properties: {\n color: `var(--one-color-primary, ${ONE_THEME_DEFAULTS.colorPrimary})`,\n },\n },\n {\n name: 'one-select-option-disabled',\n selector: '.one-select__option--disabled',\n properties: { opacity: '0.5', cursor: 'not-allowed' },\n },\n];\nfunction isGroup(\n option: OneSelectOption | OneSelectOptionGroup\n): option is OneSelectOptionGroup {\n return 'options' in option;\n}\nfunction flattenOptions(\n options: readonly (OneSelectOption | OneSelectOptionGroup)[]\n): FlatOption[] {\n return options.flatMap((option) =>\n isGroup(option)\n ? option.options.map((item) => ({ ...item, group: option.label }))\n : [option]\n );\n}\nfunction normalizeSelectValue(\n value: unknown,\n multiple: boolean\n): string | string[] {\n if (multiple)\n return Array.isArray(value) &&\n value.every((item) => typeof item === 'string')\n ? [...value]\n : [];\n return typeof value === 'string' ? value : '';\n}\nfunction matchesSearch(option: FlatOption, query: string): boolean {\n return option.label.toLowerCase().includes(query.trim().toLowerCase());\n}\nexport class OneSelect extends Component<OneSelectProps, OneSelectState> {\n private fieldContext: OneFormFieldContext | undefined;\n private unsubscribe: (() => void) | undefined;\n protected initState(): OneSelectState {\n return {\n open: false,\n query: '',\n activeIndex: 0,\n internalValue: normalizeSelectValue(\n this.props.defaultValue,\n this.props.multiple === true\n ),\n revision: 0,\n };\n }\n protected initStyles(): void {\n ONE_SELECT_STYLES.forEach(({ name, ...style }) =>\n this.styleManager.addStyle(name, style)\n );\n }\n protected beforeMount(): void {\n this.fieldContext = this.inject(ONE_FORM_FIELD_KEY);\n this.fieldContext?.model.ensureValue(\n this.fieldContext.name,\n normalizeSelectValue(\n this.props.value ?? this.props.defaultValue,\n this.props.multiple === true\n )\n );\n }\n protected onMounted(): void {\n this.unsubscribe = this.fieldContext?.model.subscribe(() => {\n this.state.revision += 1;\n });\n }\n protected onUnmounted(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n this.fieldContext = undefined;\n }\n protected render(): VNode {\n void this.state.revision;\n const multiple = this.props.multiple === true;\n const values = this.getValue();\n const selected = new Set(\n Array.isArray(values) ? values : values ? [values] : []\n );\n const all = flattenOptions(this.props.options);\n const visible = all.filter((option) =>\n matchesSearch(option, this.state.query)\n );\n const invalid =\n this.props.invalid ||\n (this.fieldContext?.model.getErrors(this.fieldContext.name).length ?? 0) >\n 0;\n const labels = all\n .filter((option) => selected.has(option.value))\n .map((option) => option.label);\n return {\n tag: 'div',\n props: { className: 'one-select' },\n children: [\n {\n tag: 'button',\n props: {\n type: 'button',\n className: 'one-select__trigger',\n role: 'combobox',\n disabled: this.props.disabled === true,\n id: this.fieldContext?.controlId,\n name: this.fieldContext?.name ?? this.props.name,\n 'aria-label': this.props.ariaLabel,\n 'aria-expanded': this.state.open ? 'true' : 'false',\n 'aria-controls': 'one-select-listbox',\n 'aria-invalid': invalid ? 'true' : undefined,\n 'aria-describedby': this.fieldContext?.describedBy,\n },\n children: [labels.join(', ') || this.props.placeholder || '请选择'],\n listeners: {\n click: () => {\n if (!this.props.disabled) this.state.open = !this.state.open;\n },\n keydown: (event) => this.handleKeydown(event, visible),\n },\n },\n ...(this.state.open\n ? [\n {\n tag: 'div',\n props: {\n className: 'one-select__menu',\n id: 'one-select-listbox',\n role: 'listbox',\n 'aria-multiselectable': multiple ? 'true' : undefined,\n },\n children: [\n ...(this.props.searchable\n ? [\n {\n tag: 'input',\n props: {\n type: 'search',\n value: this.state.query,\n 'aria-label': '搜索选项',\n },\n listeners: {\n input: (event) => {\n const input = event.currentTarget;\n if (input instanceof HTMLInputElement)\n this.state.query = input.value;\n },\n },\n } as VNode,\n ]\n : []),\n ...visible.flatMap((option, index) => [\n ...(option.group &&\n (index === 0 || visible[index - 1].group !== option.group)\n ? [\n {\n tag: 'div',\n props: { className: 'one-select__group' },\n children: [option.group],\n } as VNode,\n ]\n : []),\n {\n tag: 'button',\n props: {\n type: 'button',\n className: [\n 'one-select__option',\n ...(selected.has(option.value)\n ? ['one-select__option--selected']\n : []),\n ...(option.disabled\n ? ['one-select__option--disabled']\n : []),\n ].join(' '),\n role: 'option',\n disabled: option.disabled === true,\n 'aria-selected': selected.has(option.value)\n ? 'true'\n : 'false',\n },\n children: [option.label],\n listeners: {\n click: (event) => this.selectOption(option, event),\n },\n } as VNode,\n ]),\n ],\n } as VNode,\n ]\n : []),\n ],\n };\n }\n private getValue(): string | string[] {\n const value = this.fieldContext?.model.getValue(this.fieldContext.name);\n return value !== undefined\n ? normalizeSelectValue(value, this.props.multiple === true)\n : normalizeSelectValue(\n this.props.value ?? this.state.internalValue,\n this.props.multiple === true\n );\n }\n private selectOption(option: FlatOption, event: Event): void {\n if (option.disabled) return;\n const multiple = this.props.multiple === true;\n const current = this.getValue();\n const next = multiple\n ? this.normalizeMultiple(\n [\n ...(current as string[]),\n ...(current.includes(option.value) ? [] : [option.value]),\n ],\n option.value\n )\n : option.value;\n if (multiple && (current as string[]).includes(option.value)) {\n const values = (current as string[]).filter(\n (value) => value !== option.value\n );\n this.commit(values, event);\n return;\n }\n this.commit(next, event);\n if (!multiple) this.state.open = false;\n }\n private normalizeMultiple(values: string[], _changed: string): string[] {\n const selected = new Set(values);\n return flattenOptions(this.props.options)\n .filter((option) => selected.has(option.value))\n .map((option) => option.value);\n }\n private commit(value: string | string[], event: Event): void {\n if (this.fieldContext)\n this.fieldContext.model.setValue(this.fieldContext.name, value);\n else if (this.props.value === undefined) this.state.internalValue = value;\n this.emit('input', {\n value,\n originalEvent: event,\n } satisfies OneFieldValueEvent<string | string[]>);\n this.emit('change', {\n value,\n originalEvent: event,\n } satisfies OneFieldValueEvent<string | string[]>);\n }\n private handleKeydown(event: Event, options: FlatOption[]): void {\n if (!(event instanceof KeyboardEvent)) return;\n if (event.key === 'Escape') {\n this.state.open = false;\n return;\n }\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.state.open = true;\n const direction = event.key === 'ArrowDown' ? 1 : -1;\n this.state.activeIndex =\n (this.state.activeIndex + direction + options.length) % options.length;\n return;\n }\n if (\n event.key === 'Enter' &&\n this.state.open &&\n options[this.state.activeIndex]\n ) {\n event.preventDefault();\n this.selectOption(options[this.state.activeIndex], event);\n }\n }\n}\n",
16
+ "export type OneComponentCategory =\n | 'basic'\n | 'form'\n | 'data-display'\n | 'feedback';\n\nexport const ONE_COMPONENT_CATEGORIES = [\n { id: 'basic', label: '基础', components: ['OneButton', 'OneInput'] },\n {\n id: 'form',\n label: '表单',\n components: [\n 'OneForm',\n 'OneFormItem',\n 'OneSelect',\n 'OneCheckbox',\n 'OneCheckboxGroup',\n 'OneSwitch',\n ],\n },\n { id: 'data-display', label: '数据展示', components: ['OneCard'] },\n { id: 'feedback', label: '反馈与浮层', components: [] },\n] as const;\n",
17
+ "import { Component, slot, type VNode } from '@geektech/tsone';\nimport { ONE_THEME_DEFAULTS, type OneNamedStyle } from '../styles/shared';\n\nexport interface OneCardProps {\n title?: string;\n children?: Array<VNode | string>;\n}\n\nexport const ONE_CARD_STYLES: OneNamedStyle[] = [\n {\n name: 'one-card-base',\n selector: '.one-card',\n properties: {\n overflow: 'hidden',\n color: `var(--one-card-color, var(--one-color-text, ${ONE_THEME_DEFAULTS.colorText}))`,\n backgroundColor: `var(--one-card-background, var(--one-color-surface, ${ONE_THEME_DEFAULTS.colorSurface}))`,\n border: `1px solid var(--one-card-border-color, var(--one-color-border, ${ONE_THEME_DEFAULTS.colorBorder}))`,\n borderRadius: `var(--one-card-radius, var(--one-radius-md, ${ONE_THEME_DEFAULTS.radiusMd}))`,\n boxShadow: `var(--one-card-shadow, var(--one-shadow-card, ${ONE_THEME_DEFAULTS.shadowCard}))`,\n },\n },\n {\n name: 'one-card-header',\n selector: '.one-card__header',\n properties: {\n padding: `var(--one-card-header-padding, var(--one-space-lg, ${ONE_THEME_DEFAULTS.spaceLg}))`,\n borderBottom: `1px solid var(--one-card-border-color, var(--one-color-border, ${ONE_THEME_DEFAULTS.colorBorder}))`,\n fontWeight: '500',\n },\n },\n {\n name: 'one-card-body',\n selector: '.one-card__body',\n properties: {\n padding: `var(--one-card-body-padding, var(--one-space-lg, ${ONE_THEME_DEFAULTS.spaceLg}))`,\n },\n },\n {\n name: 'one-card-footer',\n selector: '.one-card__footer',\n properties: {\n padding: `var(--one-card-footer-padding, var(--one-space-lg, ${ONE_THEME_DEFAULTS.spaceLg}))`,\n borderTop: `1px solid var(--one-card-border-color, var(--one-color-border, ${ONE_THEME_DEFAULTS.colorBorder}))`,\n },\n },\n];\n\nfunction hasNamedSlot(\n children: Array<VNode | string>,\n name: 'header' | 'footer'\n): boolean {\n return children.some(\n (child) => typeof child !== 'string' && child.slot === name\n );\n}\n\nexport class OneCard extends Component<OneCardProps> {\n protected initState(): object {\n return {};\n }\n\n protected initStyles(): void {\n ONE_CARD_STYLES.forEach(({ name, ...style }) => {\n this.styleManager.addStyle(name, style);\n });\n }\n\n protected render(): VNode {\n const children = this.props.children ?? [];\n const hasHeaderSlot = hasNamedSlot(children, 'header');\n const hasFooterSlot = hasNamedSlot(children, 'footer');\n const headerChildren = hasHeaderSlot\n ? [slot('header')]\n : this.props.title\n ? [this.props.title]\n : [];\n\n return {\n tag: 'section',\n props: { className: 'one-card' },\n children: [\n ...(headerChildren.length > 0\n ? [\n {\n tag: 'header',\n props: { className: 'one-card__header' },\n children: headerChildren,\n } as VNode,\n ]\n : []),\n {\n tag: 'div',\n props: { className: 'one-card__body' },\n children: [slot('default')],\n },\n ...(hasFooterSlot\n ? [\n {\n tag: 'footer',\n props: { className: 'one-card__footer' },\n children: [slot('footer')],\n } as VNode,\n ]\n : []),\n ],\n };\n }\n}\n",
18
+ "export type { OneComponentSize } from './types';\nexport { OneButton } from './button';\nexport type { OneButtonProps, OneButtonVariant } from './button';\nexport { OneInput } from './input';\nexport type { OneInputProps, OneInputValueEvent } from './input';\nexport { OneForm, OneFormItem, OneFormModel } from './form';\nexport type {\n OneFieldValue,\n OneFieldValueEvent,\n OneFormInitialValues,\n OneFormItemProps,\n OneFormProps,\n OneFormRules,\n OneFormSubmitEvent,\n OneFormValidationResult,\n OneFormValues,\n OneValidationRule,\n} from './form';\nexport { OneCheckbox } from './checkbox';\nexport type { OneCheckboxGroupProps, OneCheckboxProps } from './checkbox';\nexport { OneCheckboxGroup } from './checkbox';\nexport { OneSwitch } from './switch';\nexport type { OneSwitchProps } from './switch';\nexport { OneSelect } from './select';\nexport type { OneSelectOption, OneSelectOptionGroup, OneSelectProps } from './select';\nexport { ONE_COMPONENT_CATEGORIES } from './categories';\nexport type { OneComponentCategory } from './categories';\nexport { OneCard } from './card';\nexport type { OneCardProps } from './card';\nexport { ONE_THEME_DEFAULTS } from './styles/shared';\n\nexport const ONE_NAME = '@geektech/one';\nexport const ONE_VERSION = '0.0.1';\n"
19
+ ],
20
+ "mappings": "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",
21
+ "debugId": "789C7C07D840D57764756E2164756E21",
22
+ "names": []
23
+ }
@@ -0,0 +1,38 @@
1
+ import { Component, type VNode } from '@geektech/tsone';
2
+ import { type OneNamedStyle } from '../styles/shared';
3
+ import type { OneComponentSize } from '../types';
4
+ export interface OneInputValueEvent {
5
+ value: string;
6
+ originalEvent: Event;
7
+ }
8
+ export interface OneInputProps {
9
+ value?: string;
10
+ defaultValue?: string;
11
+ type?: string;
12
+ name?: string;
13
+ placeholder?: string;
14
+ size?: OneComponentSize;
15
+ disabled?: boolean;
16
+ readonly?: boolean;
17
+ required?: boolean;
18
+ invalid?: boolean;
19
+ ariaLabel?: string;
20
+ }
21
+ interface OneInputState {
22
+ internalValue: string;
23
+ revision: number;
24
+ }
25
+ export declare const ONE_INPUT_STYLES: OneNamedStyle[];
26
+ export declare class OneInput extends Component<OneInputProps, OneInputState> {
27
+ private fieldContext;
28
+ private unsubscribe;
29
+ protected initState(): OneInputState;
30
+ protected initStyles(): void;
31
+ protected render(): VNode;
32
+ protected onUpdated(): void;
33
+ protected beforeMount(): void;
34
+ protected onMounted(): void;
35
+ protected onUnmounted(): void;
36
+ private emitValue;
37
+ }
38
+ export {};
@@ -0,0 +1,2 @@
1
+ export { OneInput } from './OneInput';
2
+ export type { OneInputProps, OneInputValueEvent } from './OneInput';
@@ -0,0 +1,48 @@
1
+ import { Component, type VNode } from '@geektech/tsone';
2
+ import { type OneNamedStyle } from '../styles/shared';
3
+ export interface OneSelectOption {
4
+ value: string;
5
+ label: string;
6
+ disabled?: boolean;
7
+ }
8
+ export interface OneSelectOptionGroup {
9
+ label: string;
10
+ options: readonly OneSelectOption[];
11
+ }
12
+ export interface OneSelectProps {
13
+ options: readonly (OneSelectOption | OneSelectOptionGroup)[];
14
+ value?: string | string[];
15
+ defaultValue?: string | string[];
16
+ multiple?: boolean;
17
+ searchable?: boolean;
18
+ name?: string;
19
+ placeholder?: string;
20
+ disabled?: boolean;
21
+ required?: boolean;
22
+ invalid?: boolean;
23
+ ariaLabel?: string;
24
+ }
25
+ interface OneSelectState {
26
+ open: boolean;
27
+ query: string;
28
+ activeIndex: number;
29
+ internalValue: string | string[];
30
+ revision: number;
31
+ }
32
+ export declare const ONE_SELECT_STYLES: OneNamedStyle[];
33
+ export declare class OneSelect extends Component<OneSelectProps, OneSelectState> {
34
+ private fieldContext;
35
+ private unsubscribe;
36
+ protected initState(): OneSelectState;
37
+ protected initStyles(): void;
38
+ protected beforeMount(): void;
39
+ protected onMounted(): void;
40
+ protected onUnmounted(): void;
41
+ protected render(): VNode;
42
+ private getValue;
43
+ private selectOption;
44
+ private normalizeMultiple;
45
+ private commit;
46
+ private handleKeydown;
47
+ }
48
+ export {};
@@ -0,0 +1,2 @@
1
+ export { OneSelect } from './OneSelect';
2
+ export type { OneSelectOption, OneSelectOptionGroup, OneSelectProps, } from './OneSelect';
@@ -0,0 +1,30 @@
1
+ import type { StyleSheet } from '@geektech/tsone';
2
+ import type { StyleOptions } from '@geektech/tsone/style';
3
+ import type { OneComponentSize } from '../types';
4
+ export type OneNamedStyle = StyleOptions & {
5
+ name: string;
6
+ };
7
+ export declare const ONE_THEME_DEFAULTS: {
8
+ readonly colorPrimary: "#5fd956";
9
+ readonly colorPrimaryHover: "#4bc944";
10
+ readonly colorDanger: "#b83232";
11
+ readonly colorDangerHover: "#9f2d2d";
12
+ readonly colorSurface: "#ffffff";
13
+ readonly colorText: "#162018";
14
+ readonly colorMuted: "#647268";
15
+ readonly colorBorder: "#d9e8d6";
16
+ readonly colorFocus: "#2f7c39";
17
+ readonly radiusSm: "4px";
18
+ readonly radiusMd: "8px";
19
+ readonly spaceXs: "4px";
20
+ readonly spaceSm: "8px";
21
+ readonly spaceMd: "12px";
22
+ readonly spaceLg: "16px";
23
+ readonly fontSizeSm: "12px";
24
+ readonly fontSizeMd: "14px";
25
+ readonly fontSizeLg: "16px";
26
+ readonly shadowCard: "0 12px 30px rgba(32, 74, 38, 0.1)";
27
+ readonly fontFamily: "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif";
28
+ };
29
+ export declare function normalizeOneSize(value: unknown): OneComponentSize;
30
+ export declare function oneStylesToSheet(styles: readonly OneNamedStyle[]): StyleSheet;
@@ -0,0 +1,30 @@
1
+ import { Component, type VNode } from '@geektech/tsone';
2
+ import { type OneNamedStyle } from '../styles/shared';
3
+ export interface OneSwitchProps {
4
+ checked?: boolean;
5
+ defaultChecked?: boolean;
6
+ name?: string;
7
+ disabled?: boolean;
8
+ required?: boolean;
9
+ invalid?: boolean;
10
+ ariaLabel?: string;
11
+ }
12
+ interface OneSwitchState {
13
+ internalChecked: boolean;
14
+ revision: number;
15
+ }
16
+ export declare const ONE_SWITCH_STYLES: OneNamedStyle[];
17
+ export declare class OneSwitch extends Component<OneSwitchProps, OneSwitchState> {
18
+ private fieldContext;
19
+ private unsubscribe;
20
+ protected initState(): OneSwitchState;
21
+ protected initStyles(): void;
22
+ protected beforeMount(): void;
23
+ protected onMounted(): void;
24
+ protected onUnmounted(): void;
25
+ protected onUpdated(): void;
26
+ protected render(): VNode;
27
+ private getChecked;
28
+ private emitChecked;
29
+ }
30
+ export {};
@@ -0,0 +1,2 @@
1
+ export { OneSwitch } from './OneSwitch';
2
+ export type { OneSwitchProps } from './OneSwitch';
@@ -0,0 +1 @@
1
+ export type OneComponentSize = 'sm' | 'md' | 'lg';
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@geektech/one",
3
+ "version": "0.0.1",
4
+ "description": "One UI 是基于 TSone 的轻量级纯 TypeScript UI 组件库",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "scripts": {
16
+ "build": "bun scripts/build.ts",
17
+ "build:types": "bunx tsc --project tsconfig.build.json",
18
+ "test": "bun test",
19
+ "docs": "bun scripts/docs.ts",
20
+ "docs:build": "bun scripts/docs.ts --build"
21
+ },
22
+ "peerDependencies": {
23
+ "@geektech/tsone": ">=0.1.0 <0.2.0"
24
+ },
25
+ "devDependencies": {
26
+ "@geektech/tsone": "workspace:*"
27
+ },
28
+ "files": [
29
+ "dist",
30
+ "README.md",
31
+ "README-zh.md",
32
+ "LICENSE"
33
+ ],
34
+ "publishConfig": {
35
+ "access": "public",
36
+ "registry": "https://registry.npmjs.org/"
37
+ },
38
+ "license": "MIT",
39
+ "engines": {
40
+ "bun": ">=1.3.0"
41
+ }
42
+ }