diff --git a/package-lock.json b/package-lock.json index 4080477..eb91b5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,8 @@ "packages/common" ], "dependencies": { - "prettier-plugin-astro": "^0.7.0" + "prettier-plugin-astro": "^0.7.0", + "short-unique-id": "^4.4.4" } }, "apps/demo": { @@ -7578,6 +7579,15 @@ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" }, + "node_modules/short-unique-id": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-4.4.4.tgz", + "integrity": "sha512-oLF1NCmtbiTWl2SqdXZQbo5KM1b7axdp0RgQLq8qCBBLoq+o3A5wmLrNM6bZIh54/a8BJ3l69kTXuxwZ+XCYuw==", + "bin": { + "short-unique-id": "bin/short-unique-id", + "suid": "bin/short-unique-id" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -14421,6 +14431,11 @@ } } }, + "short-unique-id": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-4.4.4.tgz", + "integrity": "sha512-oLF1NCmtbiTWl2SqdXZQbo5KM1b7axdp0RgQLq8qCBBLoq+o3A5wmLrNM6bZIh54/a8BJ3l69kTXuxwZ+XCYuw==" + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", diff --git a/package.json b/package.json index 903c644..8cb1380 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "packages/common" ], "dependencies": { - "prettier-plugin-astro": "^0.7.0" + "prettier-plugin-astro": "^0.7.0", + "short-unique-id": "^4.4.4" } } diff --git a/packages/form/components/FieldSet.astro b/packages/form/components/FieldSet.astro index 5c3759d..d8918cd 100644 --- a/packages/form/components/FieldSet.astro +++ b/packages/form/components/FieldSet.astro @@ -11,7 +11,7 @@ export interface Props { const { group, showValidationHints, readOnly = false } = Astro.props; --- -
+
{group.name && {group.name}} { group?.controls?.map((control) => ( diff --git a/packages/form/components/Form.astro b/packages/form/components/Form.astro index 8042e9f..38bdfc7 100644 --- a/packages/form/components/Form.astro +++ b/packages/form/components/Form.astro @@ -3,6 +3,7 @@ import type { Submit } from '@astro-reactive/common'; import { FormGroup, FormControl } from '../core'; import FieldSet from './FieldSet.astro'; import Field from './Field.astro'; +import ShortUniqueId from 'short-unique-id'; export interface Props { formGroups: FormGroup | FormGroup[]; @@ -20,14 +21,16 @@ const { readOnly = false, } = Astro.props; +const uid = new ShortUniqueId({ length: 9 }); const formTheme = theme ?? 'light'; const formName = Array.isArray(formGroups) ? null : formGroups?.name || null; +const formId = Array.isArray(formGroups) ? uid() : formGroups?.id || null; ---
{ diff --git a/packages/form/components/Label.astro b/packages/form/components/Label.astro index 0780471..caa8d12 100644 --- a/packages/form/components/Label.astro +++ b/packages/form/components/Label.astro @@ -16,7 +16,7 @@ const isRequired: boolean = showValidationHints && validators.includes('validato { control.label && control.type !== "checkbox" && ( -