@petrarca/sonnet-forms 0.5.0 → 0.6.0

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.
@@ -56,6 +56,12 @@ var checkboxOptions = [
56
56
  var selectOptions = [
57
57
  { key: "clearable", label: "Clearable", type: "boolean", default: true },
58
58
  { key: "compact", label: "Compact", type: "boolean" },
59
+ {
60
+ key: "creatable",
61
+ label: "Allow custom value",
62
+ type: "boolean",
63
+ help: "Let the user type and submit a value not in the predefined list (combobox mode)."
64
+ },
59
65
  {
60
66
  key: "badgeColor",
61
67
  label: "Badge color",
@@ -91,6 +97,52 @@ var quantityOptions = [
91
97
  { key: "precision", label: "Precision", type: "number" },
92
98
  { key: "step", label: "Step", type: "number" }
93
99
  ];
100
+ var dateOptions = [
101
+ {
102
+ key: "precision",
103
+ label: "Precision",
104
+ type: "enum",
105
+ enumValues: ["year", "month", "day"],
106
+ default: "day",
107
+ help: "Selection depth: year (YYYY), month (YYYY-MM), or day (YYYY-MM-DD)."
108
+ },
109
+ {
110
+ key: "locale",
111
+ label: "Locale",
112
+ type: "string",
113
+ help: "BCP-47 override (e.g. de-DE). Defaults to the app locale."
114
+ }
115
+ ];
116
+ var timeOptions = [
117
+ {
118
+ key: "granularity",
119
+ label: "Granularity",
120
+ type: "enum",
121
+ enumValues: ["minute", "second"],
122
+ default: "minute"
123
+ }
124
+ ];
125
+ var dateTimeOptions = [
126
+ {
127
+ key: "granularity",
128
+ label: "Granularity",
129
+ type: "enum",
130
+ enumValues: ["minute", "second"],
131
+ default: "minute"
132
+ },
133
+ {
134
+ key: "timeZone",
135
+ label: "Timezone hint",
136
+ type: "string",
137
+ help: "IANA id (e.g. Europe/Berlin) shown as a hint; never applied to the value."
138
+ },
139
+ {
140
+ key: "locale",
141
+ label: "Locale",
142
+ type: "string",
143
+ help: "BCP-47 override for the date part. Defaults to the app locale."
144
+ }
145
+ ];
94
146
  var objectOptions = [
95
147
  {
96
148
  key: "variant",
@@ -101,6 +153,15 @@ var objectOptions = [
101
153
  },
102
154
  { key: "defaultOpen", label: "Default open", type: "boolean", default: true }
103
155
  ];
156
+ var oneOfOptions = [
157
+ {
158
+ key: "variant",
159
+ label: "Container variant",
160
+ type: "enum",
161
+ enumValues: ["section", "card", "collapsible", "inline", "borderless"],
162
+ default: "section"
163
+ }
164
+ ];
104
165
  var arrayOptions = [
105
166
  {
106
167
  key: "addLabel",
@@ -146,6 +207,11 @@ var WIDGET_OPTION_DEFS = {
146
207
  ObjectWidget: objectOptions,
147
208
  ArrayWidget: arrayOptions,
148
209
  QuantityWidget: quantityOptions,
210
+ DateWidget: dateOptions,
211
+ TimeWidget: timeOptions,
212
+ DateTimeWidget: dateTimeOptions,
213
+ DisplayWidget: [],
214
+ OneOfWidget: oneOfOptions,
149
215
  // Lowercase aliases
150
216
  text: textInputOptions,
151
217
  textarea: textareaOptions,
@@ -157,7 +223,12 @@ var WIDGET_OPTION_DEFS = {
157
223
  "entity-select": entitySelectOptions,
158
224
  object: objectOptions,
159
225
  array: arrayOptions,
160
- quantity: quantityOptions
226
+ quantity: quantityOptions,
227
+ date: dateOptions,
228
+ time: timeOptions,
229
+ "date-time": dateTimeOptions,
230
+ display: [],
231
+ "one-of": oneOfOptions
161
232
  };
162
233
  export {
163
234
  WIDGET_OPTION_DEFS,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/widgets/widgetOptions.ts"],"sourcesContent":["/**\n * Widget option metadata -- design-time descriptors for each widget's\n * `x-ui-options`.\n *\n * This module is authoring metadata for a schema designer, NOT runtime code.\n * It is intentionally kept out of the widget component files and the main\n * package entry so that form-rendering consumers never pull it into their\n * bundle. It is exported only from the `@petrarca/sonnet-forms/widget-options`\n * subpath.\n *\n * A `WidgetOptionDef` is our ergonomic, widget-specific descriptor; a designer\n * translates a list of them into a plain `JsonSchema` (via `optionDefsToSchema`)\n * and renders that with `JsonSchemaFormRenderer` to produce the options editor.\n *\n * Options that are *derived* rather than chosen are deliberately omitted:\n * - `multiple` (SelectWidget) is inferred from `type: \"array\"`.\n * - `enumNames` is owned by a dedicated enum editor (seeded from `enum`).\n *\n * The declared keys are kept in sync with what each widget actually reads via a\n * drift-guard test (widgetOptions.test.ts).\n */\n\nimport type {\n JsonSchema,\n JsonSchemaProperty,\n} from \"@petrarca/sonnet-core/schema\";\n\n/** Value kinds a widget option can take. */\nexport type WidgetOptionType =\n | \"string\"\n | \"number\"\n | \"boolean\"\n | \"enum\"\n | \"string[]\"\n | \"json\";\n\n/**\n * A single widget option descriptor.\n *\n * `type: \"json\"` is the escape hatch for irregular options that do not fit the\n * simple set (e.g. a `string | string[]` union); a designer renders it as a raw\n * JSON editor for that one option.\n */\nexport interface WidgetOptionDef {\n /** The x-ui-options key. */\n key: string;\n /** Human label for the designer's options editor. */\n label: string;\n /** Value kind. */\n type: WidgetOptionType;\n /** Default value (advisory; shown in the generated editor). */\n default?: unknown;\n /** Allowed values when `type` is \"enum\". */\n enumValues?: string[];\n /** Optional help text shown under the field. */\n help?: string;\n}\n\n/** Map a WidgetOptionDef to its JsonSchemaProperty. */\nfunction defToProperty(def: WidgetOptionDef): JsonSchemaProperty {\n const base: JsonSchemaProperty = {\n title: def.label,\n description: def.help,\n default: def.default,\n };\n switch (def.type) {\n case \"string\":\n return { ...base, type: \"string\" };\n case \"number\":\n return { ...base, type: \"number\" };\n case \"boolean\":\n return { ...base, type: \"boolean\" };\n case \"enum\":\n return { ...base, type: \"string\", enum: def.enumValues ?? [] };\n case \"string[]\":\n return {\n ...base,\n type: \"array\",\n items: { type: \"string\" },\n \"x-ui-widget\": \"tags\",\n };\n case \"json\":\n // Render as a raw JSON editor; the value shape is open.\n return { ...base, type: \"object\", \"x-ui-widget\": \"json-editor\" };\n }\n}\n\n/**\n * Translate a list of widget option descriptors into a plain JsonSchema that a\n * designer can render with JsonSchemaFormRenderer. The result is an object\n * schema whose properties are the options.\n */\nexport function optionDefsToSchema(defs: WidgetOptionDef[]): JsonSchema {\n const properties: Record<string, JsonSchemaProperty> = {};\n for (const def of defs) {\n properties[def.key] = defToProperty(def);\n }\n return { title: \"\", type: \"object\", properties };\n}\n\n// Per-widget descriptors. Keys mirror what each widget reads from x-ui-options.\n\nconst textInputOptions: WidgetOptionDef[] = [\n {\n key: \"inputType\",\n label: \"Input type\",\n type: \"string\",\n help: \"HTML input type override (e.g. email, url, tel).\",\n },\n { key: \"compact\", label: \"Compact\", type: \"boolean\" },\n];\n\nconst textareaOptions: WidgetOptionDef[] = [\n { key: \"rows\", label: \"Rows\", type: \"number\", default: 3 },\n { key: \"minRows\", label: \"Min rows\", type: \"number\" },\n { key: \"autosize\", label: \"Autosize\", type: \"boolean\", default: true },\n];\n\nconst numberOptions: WidgetOptionDef[] = [\n { key: \"step\", label: \"Step\", type: \"number\" },\n { key: \"allowDecimal\", label: \"Allow decimal\", type: \"boolean\" },\n];\n\nconst checkboxOptions: WidgetOptionDef[] = [\n { key: \"compact\", label: \"Compact\", type: \"boolean\" },\n];\n\nconst selectOptions: WidgetOptionDef[] = [\n { key: \"clearable\", label: \"Clearable\", type: \"boolean\", default: true },\n { key: \"compact\", label: \"Compact\", type: \"boolean\" },\n {\n key: \"badgeColor\",\n label: \"Badge color\",\n type: \"string\",\n help: \"Badge color for multi-select values.\",\n },\n];\n\nconst tagsOptions: WidgetOptionDef[] = [\n { key: \"maxTags\", label: \"Max tags\", type: \"number\" },\n {\n key: \"splitKeys\",\n label: \"Split keys\",\n type: \"string[]\",\n help: \"Characters that commit a tag (e.g. comma, Enter).\",\n },\n];\n\nconst jsonEditorOptions: WidgetOptionDef[] = [\n { key: \"height\", label: \"Height\", type: \"string\", default: \"240px\" },\n];\n\nconst quantityOptions: WidgetOptionDef[] = [\n {\n key: \"units\",\n label: \"Units\",\n type: \"json\",\n help: \"Array of unit options ({ value, label }).\",\n },\n {\n key: \"unitPosition\",\n label: \"Unit position\",\n type: \"enum\",\n enumValues: [\"prefix\", \"suffix\"],\n },\n { key: \"precision\", label: \"Precision\", type: \"number\" },\n { key: \"step\", label: \"Step\", type: \"number\" },\n];\n\nconst objectOptions: WidgetOptionDef[] = [\n {\n key: \"variant\",\n label: \"Variant\",\n type: \"enum\",\n enumValues: [\"section\", \"card\", \"collapsible\", \"inline\", \"borderless\"],\n default: \"section\",\n },\n { key: \"defaultOpen\", label: \"Default open\", type: \"boolean\", default: true },\n];\n\nconst arrayOptions: WidgetOptionDef[] = [\n {\n key: \"addLabel\",\n label: \"Add button label\",\n type: \"string\",\n default: \"Add item\",\n },\n {\n key: \"itemTitle\",\n label: \"Item title\",\n type: \"string\",\n help: \"Supports {index} placeholder.\",\n },\n { key: \"orderable\", label: \"Orderable\", type: \"boolean\" },\n { key: \"emptyMessage\", label: \"Empty message\", type: \"string\" },\n];\n\nconst entitySelectOptions: WidgetOptionDef[] = [\n {\n key: \"mode\",\n label: \"Mode\",\n type: \"enum\",\n enumValues: [\"eager\", \"typeahead\", \"explicit\"],\n },\n { key: \"minChars\", label: \"Min chars\", type: \"number\" },\n { key: \"endpoint\", label: \"REST endpoint\", type: \"string\" },\n { key: \"valueKey\", label: \"Value key\", type: \"string\", default: \"id\" },\n { key: \"labelKey\", label: \"Label key\", type: \"string\", default: \"name\" },\n { key: \"searchKey\", label: \"Search key\", type: \"string\" },\n { key: \"extraParams\", label: \"Extra params\", type: \"json\" },\n { key: \"query\", label: \"GraphQL query\", type: \"string\" },\n { key: \"dataPath\", label: \"GraphQL data path\", type: \"string\" },\n];\n\n/**\n * Built-in widget option descriptors, keyed by widget name (both canonical and\n * lowercase-alias names, matching DEFAULT_WIDGETS). A designer merges consumer\n * overrides for custom widgets over this map.\n */\nexport const WIDGET_OPTION_DEFS: Record<string, WidgetOptionDef[]> = {\n // Canonical names\n TextInputWidget: textInputOptions,\n TextareaWidget: textareaOptions,\n NumberWidget: numberOptions,\n CheckboxWidget: checkboxOptions,\n SelectWidget: selectOptions,\n TagsInputWidget: tagsOptions,\n JsonEditorWidget: jsonEditorOptions,\n EntitySelectWidget: entitySelectOptions,\n ObjectWidget: objectOptions,\n ArrayWidget: arrayOptions,\n QuantityWidget: quantityOptions,\n\n // Lowercase aliases\n text: textInputOptions,\n textarea: textareaOptions,\n number: numberOptions,\n checkbox: checkboxOptions,\n select: selectOptions,\n tags: tagsOptions,\n \"json-editor\": jsonEditorOptions,\n \"entity-select\": entitySelectOptions,\n object: objectOptions,\n array: arrayOptions,\n quantity: quantityOptions,\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/widgets/widgetOptions.ts"],"sourcesContent":["/**\n * Widget option metadata -- design-time descriptors for each widget's\n * `x-ui-options`.\n *\n * This module is authoring metadata for a schema designer, NOT runtime code.\n * It is intentionally kept out of the widget component files and the main\n * package entry so that form-rendering consumers never pull it into their\n * bundle. It is exported only from the `@petrarca/sonnet-forms/widget-options`\n * subpath.\n *\n * A `WidgetOptionDef` is our ergonomic, widget-specific descriptor; a designer\n * translates a list of them into a plain `JsonSchema` (via `optionDefsToSchema`)\n * and renders that with `JsonSchemaFormRenderer` to produce the options editor.\n *\n * Options that are *derived* rather than chosen are deliberately omitted:\n * - `multiple` (SelectWidget) is inferred from `type: \"array\"`.\n * - `enumNames` is owned by a dedicated enum editor (seeded from `enum`).\n *\n * The declared keys are kept in sync with what each widget actually reads via a\n * drift-guard test (widgetOptions.test.ts).\n */\n\nimport type {\n JsonSchema,\n JsonSchemaProperty,\n} from \"@petrarca/sonnet-core/schema\";\n\n/** Value kinds a widget option can take. */\nexport type WidgetOptionType =\n | \"string\"\n | \"number\"\n | \"boolean\"\n | \"enum\"\n | \"string[]\"\n | \"json\";\n\n/**\n * A single widget option descriptor.\n *\n * `type: \"json\"` is the escape hatch for irregular options that do not fit the\n * simple set (e.g. a `string | string[]` union); a designer renders it as a raw\n * JSON editor for that one option.\n */\nexport interface WidgetOptionDef {\n /** The x-ui-options key. */\n key: string;\n /** Human label for the designer's options editor. */\n label: string;\n /** Value kind. */\n type: WidgetOptionType;\n /** Default value (advisory; shown in the generated editor). */\n default?: unknown;\n /** Allowed values when `type` is \"enum\". */\n enumValues?: string[];\n /** Optional help text shown under the field. */\n help?: string;\n}\n\n/** Map a WidgetOptionDef to its JsonSchemaProperty. */\nfunction defToProperty(def: WidgetOptionDef): JsonSchemaProperty {\n const base: JsonSchemaProperty = {\n title: def.label,\n description: def.help,\n default: def.default,\n };\n switch (def.type) {\n case \"string\":\n return { ...base, type: \"string\" };\n case \"number\":\n return { ...base, type: \"number\" };\n case \"boolean\":\n return { ...base, type: \"boolean\" };\n case \"enum\":\n return { ...base, type: \"string\", enum: def.enumValues ?? [] };\n case \"string[]\":\n return {\n ...base,\n type: \"array\",\n items: { type: \"string\" },\n \"x-ui-widget\": \"tags\",\n };\n case \"json\":\n // Render as a raw JSON editor; the value shape is open.\n return { ...base, type: \"object\", \"x-ui-widget\": \"json-editor\" };\n }\n}\n\n/**\n * Translate a list of widget option descriptors into a plain JsonSchema that a\n * designer can render with JsonSchemaFormRenderer. The result is an object\n * schema whose properties are the options.\n */\nexport function optionDefsToSchema(defs: WidgetOptionDef[]): JsonSchema {\n const properties: Record<string, JsonSchemaProperty> = {};\n for (const def of defs) {\n properties[def.key] = defToProperty(def);\n }\n return { title: \"\", type: \"object\", properties };\n}\n\n// Per-widget descriptors. Keys mirror what each widget reads from x-ui-options.\n\nconst textInputOptions: WidgetOptionDef[] = [\n {\n key: \"inputType\",\n label: \"Input type\",\n type: \"string\",\n help: \"HTML input type override (e.g. email, url, tel).\",\n },\n { key: \"compact\", label: \"Compact\", type: \"boolean\" },\n];\n\nconst textareaOptions: WidgetOptionDef[] = [\n { key: \"rows\", label: \"Rows\", type: \"number\", default: 3 },\n { key: \"minRows\", label: \"Min rows\", type: \"number\" },\n { key: \"autosize\", label: \"Autosize\", type: \"boolean\", default: true },\n];\n\nconst numberOptions: WidgetOptionDef[] = [\n { key: \"step\", label: \"Step\", type: \"number\" },\n { key: \"allowDecimal\", label: \"Allow decimal\", type: \"boolean\" },\n];\n\nconst checkboxOptions: WidgetOptionDef[] = [\n { key: \"compact\", label: \"Compact\", type: \"boolean\" },\n];\n\nconst selectOptions: WidgetOptionDef[] = [\n { key: \"clearable\", label: \"Clearable\", type: \"boolean\", default: true },\n { key: \"compact\", label: \"Compact\", type: \"boolean\" },\n {\n key: \"creatable\",\n label: \"Allow custom value\",\n type: \"boolean\",\n help: \"Let the user type and submit a value not in the predefined list (combobox mode).\",\n },\n {\n key: \"badgeColor\",\n label: \"Badge color\",\n type: \"string\",\n help: \"Badge color for multi-select values.\",\n },\n];\n\nconst tagsOptions: WidgetOptionDef[] = [\n { key: \"maxTags\", label: \"Max tags\", type: \"number\" },\n {\n key: \"splitKeys\",\n label: \"Split keys\",\n type: \"string[]\",\n help: \"Characters that commit a tag (e.g. comma, Enter).\",\n },\n];\n\nconst jsonEditorOptions: WidgetOptionDef[] = [\n { key: \"height\", label: \"Height\", type: \"string\", default: \"240px\" },\n];\n\nconst quantityOptions: WidgetOptionDef[] = [\n {\n key: \"units\",\n label: \"Units\",\n type: \"json\",\n help: \"Array of unit options ({ value, label }).\",\n },\n {\n key: \"unitPosition\",\n label: \"Unit position\",\n type: \"enum\",\n enumValues: [\"prefix\", \"suffix\"],\n },\n { key: \"precision\", label: \"Precision\", type: \"number\" },\n { key: \"step\", label: \"Step\", type: \"number\" },\n];\n\nconst dateOptions: WidgetOptionDef[] = [\n {\n key: \"precision\",\n label: \"Precision\",\n type: \"enum\",\n enumValues: [\"year\", \"month\", \"day\"],\n default: \"day\",\n help: \"Selection depth: year (YYYY), month (YYYY-MM), or day (YYYY-MM-DD).\",\n },\n {\n key: \"locale\",\n label: \"Locale\",\n type: \"string\",\n help: \"BCP-47 override (e.g. de-DE). Defaults to the app locale.\",\n },\n];\n\nconst timeOptions: WidgetOptionDef[] = [\n {\n key: \"granularity\",\n label: \"Granularity\",\n type: \"enum\",\n enumValues: [\"minute\", \"second\"],\n default: \"minute\",\n },\n];\n\nconst dateTimeOptions: WidgetOptionDef[] = [\n {\n key: \"granularity\",\n label: \"Granularity\",\n type: \"enum\",\n enumValues: [\"minute\", \"second\"],\n default: \"minute\",\n },\n {\n key: \"timeZone\",\n label: \"Timezone hint\",\n type: \"string\",\n help: \"IANA id (e.g. Europe/Berlin) shown as a hint; never applied to the value.\",\n },\n {\n key: \"locale\",\n label: \"Locale\",\n type: \"string\",\n help: \"BCP-47 override for the date part. Defaults to the app locale.\",\n },\n];\n\nconst objectOptions: WidgetOptionDef[] = [\n {\n key: \"variant\",\n label: \"Variant\",\n type: \"enum\",\n enumValues: [\"section\", \"card\", \"collapsible\", \"inline\", \"borderless\"],\n default: \"section\",\n },\n { key: \"defaultOpen\", label: \"Default open\", type: \"boolean\", default: true },\n];\n\nconst oneOfOptions: WidgetOptionDef[] = [\n {\n key: \"variant\",\n label: \"Container variant\",\n type: \"enum\",\n enumValues: [\"section\", \"card\", \"collapsible\", \"inline\", \"borderless\"],\n default: \"section\",\n },\n];\n\nconst arrayOptions: WidgetOptionDef[] = [\n {\n key: \"addLabel\",\n label: \"Add button label\",\n type: \"string\",\n default: \"Add item\",\n },\n {\n key: \"itemTitle\",\n label: \"Item title\",\n type: \"string\",\n help: \"Supports {index} placeholder.\",\n },\n { key: \"orderable\", label: \"Orderable\", type: \"boolean\" },\n { key: \"emptyMessage\", label: \"Empty message\", type: \"string\" },\n];\n\nconst entitySelectOptions: WidgetOptionDef[] = [\n {\n key: \"mode\",\n label: \"Mode\",\n type: \"enum\",\n enumValues: [\"eager\", \"typeahead\", \"explicit\"],\n },\n { key: \"minChars\", label: \"Min chars\", type: \"number\" },\n { key: \"endpoint\", label: \"REST endpoint\", type: \"string\" },\n { key: \"valueKey\", label: \"Value key\", type: \"string\", default: \"id\" },\n { key: \"labelKey\", label: \"Label key\", type: \"string\", default: \"name\" },\n { key: \"searchKey\", label: \"Search key\", type: \"string\" },\n { key: \"extraParams\", label: \"Extra params\", type: \"json\" },\n { key: \"query\", label: \"GraphQL query\", type: \"string\" },\n { key: \"dataPath\", label: \"GraphQL data path\", type: \"string\" },\n];\n\n/**\n * Built-in widget option descriptors, keyed by widget name (both canonical and\n * lowercase-alias names, matching DEFAULT_WIDGETS). A designer merges consumer\n * overrides for custom widgets over this map.\n */\nexport const WIDGET_OPTION_DEFS: Record<string, WidgetOptionDef[]> = {\n // Canonical names\n TextInputWidget: textInputOptions,\n TextareaWidget: textareaOptions,\n NumberWidget: numberOptions,\n CheckboxWidget: checkboxOptions,\n SelectWidget: selectOptions,\n TagsInputWidget: tagsOptions,\n JsonEditorWidget: jsonEditorOptions,\n EntitySelectWidget: entitySelectOptions,\n ObjectWidget: objectOptions,\n ArrayWidget: arrayOptions,\n QuantityWidget: quantityOptions,\n DateWidget: dateOptions,\n TimeWidget: timeOptions,\n DateTimeWidget: dateTimeOptions,\n DisplayWidget: [],\n OneOfWidget: oneOfOptions,\n\n // Lowercase aliases\n text: textInputOptions,\n textarea: textareaOptions,\n number: numberOptions,\n checkbox: checkboxOptions,\n select: selectOptions,\n tags: tagsOptions,\n \"json-editor\": jsonEditorOptions,\n \"entity-select\": entitySelectOptions,\n object: objectOptions,\n array: arrayOptions,\n quantity: quantityOptions,\n date: dateOptions,\n time: timeOptions,\n \"date-time\": dateTimeOptions,\n display: [],\n \"one-of\": oneOfOptions,\n};\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@petrarca/sonnet-forms",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Schema-driven form renderer, field components, and widgets for the Petrarca Sonnet component library",
5
5
  "license": "Apache-2.0",
6
6
  "publishConfig": {
@@ -25,8 +25,8 @@
25
25
  "dependencies": {
26
26
  "class-variance-authority": "^0.7.1",
27
27
  "lucide-react": "^0.553.0",
28
- "@petrarca/sonnet-core": "0.5.0",
29
- "@petrarca/sonnet-ui": "0.5.0"
28
+ "@petrarca/sonnet-core": "0.6.0",
29
+ "@petrarca/sonnet-ui": "0.6.0"
30
30
  },
31
31
  "peerDependencies": {
32
32
  "react": ">=19",