@panneau/fields 5.0.0-alpha.0 → 5.0.0-alpha.10

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.
Files changed (248) hide show
  1. package/README.md +103 -20
  2. package/dist/boolean/BooleanField.d.ts +1 -1
  3. package/dist/boolean/BooleanField.js +78 -17
  4. package/dist/boolean/BooleanField.js.map +1 -1
  5. package/dist/boolean/index.d.ts +1 -1
  6. package/dist/color/ColorField.css +5 -5
  7. package/dist/color/ColorField.d.ts +2 -2
  8. package/dist/color/ColorField.js.map +1 -1
  9. package/dist/color/ColorField.module.js +3 -3
  10. package/dist/color/index.d.ts +1 -1
  11. package/dist/date/DateField.d.ts +1 -1
  12. package/dist/date/DateField.js.map +1 -1
  13. package/dist/date/index.d.ts +1 -1
  14. package/dist/datetime/DateTimeField.d.ts +1 -1
  15. package/dist/datetime/DateTimeField.js +107 -20
  16. package/dist/datetime/DateTimeField.js.map +1 -1
  17. package/dist/datetime/index.d.ts +1 -1
  18. package/dist/duration/DurationField.css +11 -0
  19. package/dist/duration/DurationField.d.ts +26 -0
  20. package/dist/duration/DurationField.d.ts.map +1 -0
  21. package/dist/duration/DurationField.js +214 -0
  22. package/dist/duration/DurationField.js.map +1 -0
  23. package/dist/duration/DurationField.module.js +12 -0
  24. package/dist/duration/DurationField.module.js.map +1 -0
  25. package/dist/duration/index.d.ts +2 -0
  26. package/dist/duration/index.d.ts.map +1 -0
  27. package/dist/duration/index.js +1 -0
  28. package/dist/email/EmailField.d.ts +2 -2
  29. package/dist/email/EmailField.js.map +1 -1
  30. package/dist/email/index.d.ts +1 -1
  31. package/dist/embed/EmbedField.css +60 -0
  32. package/dist/embed/EmbedField.d.ts +20 -0
  33. package/dist/embed/EmbedField.d.ts.map +1 -0
  34. package/dist/embed/EmbedField.js +246 -0
  35. package/dist/embed/EmbedField.js.map +1 -0
  36. package/dist/embed/EmbedField.module.js +22 -0
  37. package/dist/embed/EmbedField.module.js.map +1 -0
  38. package/dist/embed/index.d.ts +3 -0
  39. package/dist/embed/index.d.ts.map +1 -0
  40. package/dist/embed/index.js +3 -0
  41. package/dist/file/FileField.css +54 -0
  42. package/dist/file/FileField.d.ts +50 -0
  43. package/dist/file/FileField.d.ts.map +1 -0
  44. package/dist/file/FileField.js +288 -0
  45. package/dist/file/FileField.js.map +1 -0
  46. package/dist/file/FileField.module.js +22 -0
  47. package/dist/file/FileField.module.js.map +1 -0
  48. package/dist/file/index.d.ts +3 -0
  49. package/dist/file/index.d.ts.map +1 -0
  50. package/dist/file/index.js +1 -0
  51. package/dist/group/GroupField.css +2 -2
  52. package/dist/group/GroupField.d.ts +1 -1
  53. package/dist/group/GroupField.js.map +1 -1
  54. package/dist/group/GroupField.module.js +1 -1
  55. package/dist/group/index.d.ts +1 -1
  56. package/dist/index.d.ts +18 -7
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +12 -3
  59. package/dist/json/JsonField.css +7 -0
  60. package/dist/json/JsonField.d.ts +22 -0
  61. package/dist/json/JsonField.d.ts.map +1 -0
  62. package/dist/json/JsonField.js +207 -0
  63. package/dist/json/JsonField.js.map +1 -0
  64. package/dist/json/JsonField.module.js +8 -0
  65. package/dist/json/JsonField.module.js.map +1 -0
  66. package/dist/json/index.d.ts +2 -0
  67. package/dist/json/index.d.ts.map +1 -0
  68. package/dist/json/index.js +1 -0
  69. package/dist/locales/index.js.map +1 -1
  70. package/dist/localized/LocalizedField.css +2 -2
  71. package/dist/localized/LocalizedField.d.ts +1 -1
  72. package/dist/localized/LocalizedField.d.ts.map +1 -1
  73. package/dist/localized/LocalizedField.js +1 -0
  74. package/dist/localized/LocalizedField.js.map +1 -1
  75. package/dist/localized/LocalizedField.module.js +2 -2
  76. package/dist/localized/index.d.ts +1 -1
  77. package/dist/location/LocationField.css +54 -0
  78. package/dist/location/LocationField.d.ts +31 -0
  79. package/dist/location/LocationField.d.ts.map +1 -0
  80. package/dist/location/LocationField.js +563 -0
  81. package/dist/location/LocationField.js.map +1 -0
  82. package/dist/location/LocationField.module.js +22 -0
  83. package/dist/location/LocationField.module.js.map +1 -0
  84. package/dist/location/LocationMap.d.ts +25 -0
  85. package/dist/location/LocationMap.d.ts.map +1 -0
  86. package/dist/location/LocationMap.js +205 -0
  87. package/dist/location/LocationMap.js.map +1 -0
  88. package/dist/location/index.d.ts +5 -0
  89. package/dist/location/index.d.ts.map +1 -0
  90. package/dist/location/index.js +4 -0
  91. package/dist/location/leafletCss.d.ts +2 -0
  92. package/dist/location/leafletCss.d.ts.map +1 -0
  93. package/dist/location/leafletCss.js +6 -0
  94. package/dist/location/leafletCss.js.map +1 -0
  95. package/dist/location/nominatim.d.ts +17 -0
  96. package/dist/location/nominatim.d.ts.map +1 -0
  97. package/dist/location/nominatim.js +50 -0
  98. package/dist/location/nominatim.js.map +1 -0
  99. package/dist/location/types.d.ts +40 -0
  100. package/dist/location/types.d.ts.map +1 -0
  101. package/dist/missing/MissingField.css +4 -3
  102. package/dist/missing/MissingField.d.ts +4 -3
  103. package/dist/missing/MissingField.d.ts.map +1 -1
  104. package/dist/missing/MissingField.js +3 -2
  105. package/dist/missing/MissingField.js.map +1 -1
  106. package/dist/missing/MissingField.module.js +3 -3
  107. package/dist/missing/MissingField.module.js.map +1 -1
  108. package/dist/number/NumberField.d.ts +1 -1
  109. package/dist/number/NumberField.js.map +1 -1
  110. package/dist/number/index.d.ts +1 -1
  111. package/dist/range/RangeField.d.ts +22 -0
  112. package/dist/range/RangeField.d.ts.map +1 -0
  113. package/dist/range/RangeField.js +203 -0
  114. package/dist/range/RangeField.js.map +1 -0
  115. package/dist/range/index.d.ts +2 -0
  116. package/dist/range/index.d.ts.map +1 -0
  117. package/dist/range/index.js +1 -0
  118. package/dist/relation/RelationField.css +7 -7
  119. package/dist/relation/RelationField.d.ts +12 -4
  120. package/dist/relation/RelationField.d.ts.map +1 -1
  121. package/dist/relation/RelationField.js +535 -160
  122. package/dist/relation/RelationField.js.map +1 -1
  123. package/dist/relation/RelationField.module.js +6 -6
  124. package/dist/relation/index.d.ts +2 -2
  125. package/dist/relation/index.d.ts.map +1 -1
  126. package/dist/relation/index.js +2 -2
  127. package/dist/repeater/RepeaterField.css +12 -11
  128. package/dist/repeater/RepeaterField.d.ts +1 -1
  129. package/dist/repeater/RepeaterField.js +118 -34
  130. package/dist/repeater/RepeaterField.js.map +1 -1
  131. package/dist/repeater/RepeaterField.module.js +9 -9
  132. package/dist/repeater/RepeaterField.module.js.map +1 -1
  133. package/dist/repeater/index.d.ts +1 -1
  134. package/dist/select/SelectField.css +1 -1
  135. package/dist/select/SelectField.d.ts +1 -1
  136. package/dist/select/SelectField.js.map +1 -1
  137. package/dist/select/SelectField.module.js +1 -1
  138. package/dist/select/index.d.ts +1 -1
  139. package/dist/shared/DefinitionField.d.ts +5 -3
  140. package/dist/shared/DefinitionField.d.ts.map +1 -1
  141. package/dist/shared/DefinitionField.js +81 -73
  142. package/dist/shared/DefinitionField.js.map +1 -1
  143. package/dist/shared/builtIn.d.ts +5 -3
  144. package/dist/shared/builtIn.d.ts.map +1 -1
  145. package/dist/shared/builtIn.js +21 -3
  146. package/dist/shared/builtIn.js.map +1 -1
  147. package/dist/shared/check.d.ts +27 -0
  148. package/dist/shared/check.d.ts.map +1 -0
  149. package/dist/shared/check.js +18 -0
  150. package/dist/shared/check.js.map +1 -0
  151. package/dist/shared/context.d.ts +28 -5
  152. package/dist/shared/context.d.ts.map +1 -1
  153. package/dist/shared/context.js +35 -19
  154. package/dist/shared/context.js.map +1 -1
  155. package/dist/shared/cx.js.map +1 -1
  156. package/dist/shared/dates.js.map +1 -1
  157. package/dist/shared/embed.d.ts +19 -0
  158. package/dist/shared/embed.d.ts.map +1 -0
  159. package/dist/shared/embed.js +14 -0
  160. package/dist/shared/embed.js.map +1 -0
  161. package/dist/shared/entry.d.ts +11 -2
  162. package/dist/shared/entry.d.ts.map +1 -1
  163. package/dist/shared/entry.js +19 -3
  164. package/dist/shared/entry.js.map +1 -1
  165. package/dist/shared/relation.d.ts +41 -5
  166. package/dist/shared/relation.d.ts.map +1 -1
  167. package/dist/shared/relation.js +119 -12
  168. package/dist/shared/relation.js.map +1 -1
  169. package/dist/shared/types.d.ts +2 -0
  170. package/dist/shared/types.d.ts.map +1 -1
  171. package/dist/slug/SlugField.css +18 -0
  172. package/dist/slug/SlugField.d.ts +33 -5
  173. package/dist/slug/SlugField.d.ts.map +1 -1
  174. package/dist/slug/SlugField.js +346 -126
  175. package/dist/slug/SlugField.js.map +1 -1
  176. package/dist/slug/SlugField.module.js +14 -0
  177. package/dist/slug/SlugField.module.js.map +1 -0
  178. package/dist/slug/index.d.ts +1 -1
  179. package/dist/slug/index.d.ts.map +1 -1
  180. package/dist/slug/index.js +1 -1
  181. package/dist/tags/TagsField.d.ts +17 -0
  182. package/dist/tags/TagsField.d.ts.map +1 -0
  183. package/dist/tags/TagsField.js +120 -0
  184. package/dist/tags/TagsField.js.map +1 -0
  185. package/dist/tags/index.d.ts +2 -0
  186. package/dist/tags/index.d.ts.map +1 -0
  187. package/dist/tags/index.js +1 -0
  188. package/dist/tel/TelField.d.ts +11 -0
  189. package/dist/tel/TelField.d.ts.map +1 -0
  190. package/dist/tel/TelField.js +87 -0
  191. package/dist/tel/TelField.js.map +1 -0
  192. package/dist/tel/index.d.ts +2 -0
  193. package/dist/tel/index.d.ts.map +1 -0
  194. package/dist/tel/index.js +1 -0
  195. package/dist/text/TextField.d.ts +12 -4
  196. package/dist/text/TextField.d.ts.map +1 -1
  197. package/dist/text/TextField.js +104 -60
  198. package/dist/text/TextField.js.map +1 -1
  199. package/dist/text/index.d.ts +1 -1
  200. package/dist/textarea/TextAreaField.d.ts +1 -1
  201. package/dist/textarea/TextAreaField.js.map +1 -1
  202. package/dist/textarea/index.d.ts +1 -1
  203. package/dist/time/TimeField.d.ts +1 -1
  204. package/dist/time/TimeField.js +64 -10
  205. package/dist/time/TimeField.js.map +1 -1
  206. package/dist/time/index.d.ts +1 -1
  207. package/dist/upload/FilePicker.css +24 -0
  208. package/dist/upload/FilePicker.d.ts +14 -0
  209. package/dist/upload/FilePicker.d.ts.map +1 -0
  210. package/dist/upload/FilePicker.js +130 -0
  211. package/dist/upload/FilePicker.js.map +1 -0
  212. package/dist/upload/FilePicker.module.js +12 -0
  213. package/dist/upload/FilePicker.module.js.map +1 -0
  214. package/dist/upload/UploadList.css +93 -0
  215. package/dist/upload/UploadList.d.ts +18 -0
  216. package/dist/upload/UploadList.d.ts.map +1 -0
  217. package/dist/upload/UploadList.js +144 -0
  218. package/dist/upload/UploadList.js.map +1 -0
  219. package/dist/upload/UploadList.module.js +32 -0
  220. package/dist/upload/UploadList.module.js.map +1 -0
  221. package/dist/upload/files.d.ts +5 -0
  222. package/dist/upload/files.d.ts.map +1 -0
  223. package/dist/upload/files.js +26 -0
  224. package/dist/upload/files.js.map +1 -0
  225. package/dist/upload/types.d.ts +58 -0
  226. package/dist/upload/types.d.ts.map +1 -0
  227. package/dist/upload/useRejectionMessage.d.ts +4 -0
  228. package/dist/upload/useRejectionMessage.d.ts.map +1 -0
  229. package/dist/upload/useRejectionMessage.js +25 -0
  230. package/dist/upload/useRejectionMessage.js.map +1 -0
  231. package/dist/upload/useUploads.d.ts +30 -0
  232. package/dist/upload/useUploads.d.ts.map +1 -0
  233. package/dist/upload/useUploads.js +115 -0
  234. package/dist/upload/useUploads.js.map +1 -0
  235. package/dist/uppy/index.d.ts +3 -0
  236. package/dist/uppy/index.d.ts.map +1 -0
  237. package/dist/uppy/index.js +1 -0
  238. package/dist/uppy/uploader.d.ts +44 -0
  239. package/dist/uppy/uploader.d.ts.map +1 -0
  240. package/dist/uppy/uploader.js +139 -0
  241. package/dist/uppy/uploader.js.map +1 -0
  242. package/dist/url/UrlField.css +2 -2
  243. package/dist/url/UrlField.d.ts +2 -2
  244. package/dist/url/UrlField.js +69 -14
  245. package/dist/url/UrlField.js.map +1 -1
  246. package/dist/url/UrlField.module.js +1 -1
  247. package/dist/url/index.d.ts +1 -1
  248. package/package.json +69 -7
@@ -1 +1 @@
1
- {"version":3,"file":"RelationField.js","names":["X","reference","entry","item","onChange","itemId","references","_c","styles","_Fragment"],"sources":["../../src/relation/RelationField.tsx"],"sourcesContent":["import { X } from 'lucide-react';\nimport { useEffect, useState } from 'react';\n\nimport { ComboBox, Fieldset, IconButton, usePanneauIntl } from '@panneau/ui';\n\nimport { useFieldsContext } from '../shared/context';\nimport { cx } from '../shared/cx';\nimport { getFieldProps } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport { type RelationReference, type RelationSource, toReferences } from '../shared/relation';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\nimport styles from './RelationField.module.css';\n\n/** Results of a search in a relation source, as it types. */\nexport function useRelationSearch(\n source: RelationSource | null,\n resource: string,\n query: string,\n { enabled = true, delay = 250 }: { enabled?: boolean; delay?: number } = {},\n): { items: RelationReference[]; isLoading: boolean } {\n const [state, setState] = useState<{\n key: string;\n items: RelationReference[];\n isLoading: boolean;\n }>({ key: '', items: [], isLoading: false });\n const key = `${resource}\\u0000${query}`;\n\n useEffect(() => {\n if (source === null || !enabled) {\n return undefined;\n }\n const controller = new AbortController();\n const timer = setTimeout(() => {\n setState((current) => ({ ...current, key, isLoading: true }));\n source\n .search(resource, query, { signal: controller.signal })\n .then((items) => {\n if (!controller.signal.aborted) {\n setState({ key, items, isLoading: false });\n }\n })\n .catch(() => {\n if (!controller.signal.aborted) {\n setState({ key, items: [], isLoading: false });\n }\n });\n }, delay);\n return () => {\n clearTimeout(timer);\n controller.abort();\n };\n }, [source, resource, query, key, enabled, delay]);\n\n return { items: state.items, isLoading: state.isLoading || state.key !== key };\n}\n\n/** Props of both single and multiple relation fields. */\nexport interface RelationFieldBaseProps extends Omit<FieldProps<never>, 'value' | 'onChange'> {\n /** Id of the related resource, passed to the source. */\n resource: string;\n /** Where to search. Defaults to the fields context's. Without one, the field is read-only. */\n source?: RelationSource | null;\n placeholder?: string;\n controlClassName?: string;\n}\n\nexport interface SingleRelationFieldProps extends RelationFieldBaseProps {\n multiple?: false;\n value?: RelationReference | null;\n onChange?: (value: RelationReference | null) => void;\n}\n\nexport interface MultipleRelationFieldProps extends RelationFieldBaseProps {\n multiple: true;\n value?: readonly RelationReference[] | null;\n /** Called with the references. An empty list is `null`. */\n onChange?: (value: RelationReference[] | null) => void;\n}\n\nexport type RelationFieldProps = SingleRelationFieldProps | MultipleRelationFieldProps;\n\nfunction References({\n references,\n onRemove,\n removeLabel,\n}: {\n references: readonly RelationReference[];\n onRemove?: (reference: RelationReference) => void;\n removeLabel: (reference: RelationReference) => string;\n}) {\n return (\n <ul className={cx(styles.selected, onRemove === undefined && styles.readOnly)}>\n {references.map((reference) => (\n <li key={reference.id} className={styles.reference}>\n <span className={styles.referenceLabel}>{reference.label}</span>\n {onRemove !== undefined ? (\n <IconButton\n icon={X}\n size=\"sm\"\n label={removeLabel(reference)}\n showTooltip={false}\n onPress={() => onRemove(reference)}\n />\n ) : null}\n </li>\n ))}\n </ul>\n );\n}\n\n/**\n * A reference to an item of another resource, or several with `multiple`, picked by searching a\n * `RelationSource`. Values are references (`{ id, label }`), as items carry them. Without a\n * source, the field shows its references and can't change them.\n */\nexport function RelationField(props: RelationFieldProps) {\n const intl = usePanneauIntl();\n const context = useFieldsContext();\n const source = props.source === undefined ? context.relationSource : props.source;\n const {\n resource,\n label,\n description,\n errors,\n disabled,\n readOnly,\n required,\n placeholder = intl.formatMessage(messages.search),\n onBlur,\n name,\n id,\n className,\n labelClassName,\n descriptionClassName,\n errorsClassName,\n controlClassName,\n } = props;\n const selected = toReferences(props.value);\n const [query, setQuery] = useState<string | null>(null);\n const editable = source !== null && disabled !== true && readOnly !== true;\n const { items, isLoading } = useRelationSearch(source, resource, query ?? '', {\n enabled: editable,\n });\n const removeLabel = (reference: RelationReference) =>\n `${intl.formatMessage(messages.remove)} ${reference.label}`;\n const chrome = {\n legend: label,\n errors,\n isRequired: required,\n className,\n legendClassName: labelClassName,\n descriptionClassName,\n errorsClassName,\n };\n\n if (!editable) {\n return (\n <Fieldset\n {...chrome}\n description={\n source === null && disabled !== true && readOnly !== true ? (\n <>\n {description} {intl.formatMessage(messages.relationUnavailable)}\n </>\n ) : (\n description\n )\n }\n >\n {selected.length > 0 ? (\n <References references={selected} removeLabel={removeLabel} />\n ) : (\n <span className={styles.none}>{intl.formatMessage(messages.noRelation)}</span>\n )}\n </Fieldset>\n );\n }\n\n const comboLabel = typeof label === 'string' ? label : props['aria-label'];\n\n if (props.multiple === true) {\n const { onChange } = props;\n const set = (next: RelationReference[]) => onChange?.(next.length > 0 ? next : null);\n return (\n <Fieldset {...chrome} description={description}>\n <div className={styles.multiple}>\n {selected.length > 0 ? (\n <References\n references={selected}\n removeLabel={removeLabel}\n onRemove={(reference) =>\n set(selected.filter((entry) => entry.id !== reference.id))\n }\n />\n ) : null}\n <ComboBox\n aria-label={comboLabel}\n items={items\n .filter((item) => !selected.some((entry) => entry.id === item.id))\n .map((item) => ({ id: item.id, label: item.label }))}\n value={null}\n inputValue={query ?? ''}\n onInputChange={setQuery}\n onChange={(itemId) => {\n const reference = items.find((item) => item.id === itemId);\n if (reference !== undefined) {\n set([...selected, reference]);\n setQuery(null);\n }\n }}\n isLoading={isLoading}\n placeholder={placeholder}\n emptyMessage={intl.formatMessage(messages.noResults)}\n {...(onBlur !== undefined ? { onBlur: () => onBlur() } : {})}\n {...(name !== undefined ? { name } : {})}\n {...(id !== undefined ? { id } : {})}\n {...(controlClassName !== undefined ? { controlClassName } : {})}\n />\n </div>\n </Fieldset>\n );\n }\n\n const { onChange } = props;\n const current = selected[0] ?? null;\n // The selected reference is among the items, so that the combo box knows its label.\n const shown =\n current !== null && !items.some((item) => item.id === current.id)\n ? [current, ...items]\n : items;\n return (\n <ComboBox\n label={label}\n description={description}\n errors={errors}\n isRequired={required}\n className={className}\n labelClassName={labelClassName}\n descriptionClassName={descriptionClassName}\n errorsClassName={errorsClassName}\n {...(controlClassName !== undefined ? { controlClassName } : {})}\n {...(props['aria-label'] !== undefined ? { 'aria-label': props['aria-label'] } : {})}\n items={shown.map((item) => ({ id: item.id, label: item.label }))}\n value={current?.id ?? null}\n inputValue={query ?? current?.label ?? ''}\n onInputChange={(text) => {\n setQuery(text);\n if (text === '' && current !== null) {\n onChange?.(null);\n }\n }}\n onChange={(itemId) => {\n setQuery(null);\n if (itemId === null) {\n return;\n }\n const reference = shown.find((item) => item.id === itemId) ?? null;\n if (reference?.id !== current?.id) {\n onChange?.(reference);\n }\n }}\n isLoading={isLoading}\n placeholder={placeholder}\n emptyMessage={intl.formatMessage(messages.noResults)}\n {...(onBlur !== undefined\n ? {\n onBlur: () => {\n setQuery(null);\n onBlur();\n },\n }\n : { onBlur: () => setQuery(null) })}\n {...(name !== undefined ? { name } : {})}\n {...(id !== undefined ? { id } : {})}\n />\n );\n}\n\n/** The `relation` type: `resource` and `multiple`. Items search the fields context's source. */\nexport function RelationFieldEntry(props: FieldEntryProps) {\n const { field } = props;\n const references = toReferences(props.value);\n const shared = { ...getFieldProps(props), resource: field.resource ?? '' };\n if (field.multiple === true) {\n return <RelationField {...shared} multiple value={references} onChange={props.onChange} />;\n }\n return <RelationField {...shared} value={references[0] ?? null} onChange={props.onChange} />;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"RelationField.js","names":["X","useEffect","useState","ComboBox","Fieldset","IconButton","usePanneauIntl","useFieldsContext","cx","getFieldProps","messages","RelationReference","RelationSource","toReferences","useRelationReferences","FieldEntryProps","FieldProps","styles","CREATE_ID","useRelationSearch","source","resource","query","t0","$","_c","t1","undefined","enabled","t2","delay","t3","t4","Symbol","for","key","items","isLoading","state","setState","t5","t6","controller","AbortController","timer","setTimeout","current","search","signal","then","aborted","catch","clearTimeout","abort","t7","t8","RelationFieldBaseProps","Omit","onCreate","text","Promise","placeholder","controlClassName","SingleRelationFieldProps","multiple","value","onChange","MultipleRelationFieldProps","RelationFieldProps","References","references","onRemove","removeLabel","readOnly","selected","reference","id","referenceLabel","label","map","RelationField","props","intl","context","relationSource","description","errors","disabled","required","onBlur","name","className","labelClassName","descriptionClassName","errorsClassName","formatMessage","setQuery","creating","setCreating","createError","setCreateError","editable","found","searching","sourceCreate","create","canCreate","call","allErrors","createFrom","bb0","text_0","trim","offersCreate","some","item","toLocaleLowerCase","locale","createRelation","add","createRelationFailed","finally","reference_0","remove","legend","isRequired","legendClassName","chrome","t9","relationUnavailable","t10","length","none","noRelation","t11","comboLabel","next","set","reference_1","filter","entry","item_0","entry_0","t12","_temp","t13","noResults","t14","t15","t16","t17","t18","itemId","reference_2","reference_3","find","item_2","t19","t20","onChange_0","item_3","shown","_temp2","text_1","itemId_0","reference_4","reference_5","item_5","item_4","item_1","RelationFieldEntry","field","shared","_c","styles","_Fragment"],"sources":["../../src/relation/RelationField.tsx"],"sourcesContent":["import { X } from 'lucide-react';\nimport { useEffect, useState } from 'react';\n\nimport { ComboBox, Fieldset, IconButton, usePanneauIntl } from '@panneau/ui';\n\nimport { useFieldsContext } from '../shared/context';\nimport { cx } from '../shared/cx';\nimport { getFieldProps } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport {\n type RelationReference,\n type RelationSource,\n toReferences,\n useRelationReferences,\n} from '../shared/relation';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\nimport styles from './RelationField.module.css';\n\n/** The id of the \"Create “…”\" option of the picker. */\nconst CREATE_ID = '\\u0000create';\n\n/** Results of a search in a relation source, as it types. */\nexport function useRelationSearch(\n source: RelationSource | null,\n resource: string,\n query: string,\n { enabled = true, delay = 250 }: { enabled?: boolean; delay?: number } = {},\n): { items: RelationReference[]; isLoading: boolean } {\n const [state, setState] = useState<{\n key: string;\n items: RelationReference[];\n isLoading: boolean;\n }>({ key: '', items: [], isLoading: false });\n const key = `${resource}\\u0000${query}`;\n\n useEffect(() => {\n if (source === null || !enabled) {\n return undefined;\n }\n const controller = new AbortController();\n const timer = setTimeout(() => {\n setState((current) => ({ ...current, key, isLoading: true }));\n source\n .search(resource, query, { signal: controller.signal })\n .then((items) => {\n if (!controller.signal.aborted) {\n setState({ key, items, isLoading: false });\n }\n })\n .catch(() => {\n if (!controller.signal.aborted) {\n setState({ key, items: [], isLoading: false });\n }\n });\n }, delay);\n return () => {\n clearTimeout(timer);\n controller.abort();\n };\n }, [source, resource, query, key, enabled, delay]);\n\n return { items: state.items, isLoading: state.isLoading || state.key !== key };\n}\n\n/** Props of both single and multiple relation fields. */\nexport interface RelationFieldBaseProps extends Omit<FieldProps<never>, 'value' | 'onChange'> {\n /** Id of the related resource, passed to the source. */\n resource: string;\n /** Where to search. Defaults to the fields context's. Without one, the field is read-only. */\n source?: RelationSource | null;\n /**\n * Creates an item from the typed text, offered as \"Create “…”\" in the picker: it can open a\n * dialog, and resolves with the new reference, or `null` when nothing was created. Defaults to\n * the source's `create()`. `null` turns creating off.\n */\n onCreate?: ((text: string) => Promise<RelationReference | null>) | null;\n placeholder?: string;\n controlClassName?: string;\n}\n\nexport interface SingleRelationFieldProps extends RelationFieldBaseProps {\n multiple?: false;\n value?: RelationReference | null;\n onChange?: (value: RelationReference | null) => void;\n}\n\nexport interface MultipleRelationFieldProps extends RelationFieldBaseProps {\n multiple: true;\n value?: readonly RelationReference[] | null;\n /** Called with the references. An empty list is `null`. */\n onChange?: (value: RelationReference[] | null) => void;\n}\n\nexport type RelationFieldProps = SingleRelationFieldProps | MultipleRelationFieldProps;\n\nfunction References({\n references,\n onRemove,\n removeLabel,\n}: {\n references: readonly RelationReference[];\n onRemove?: (reference: RelationReference) => void;\n removeLabel: (reference: RelationReference) => string;\n}) {\n return (\n <ul className={cx(styles.selected, onRemove === undefined && styles.readOnly)}>\n {references.map((reference) => (\n <li key={reference.id} className={styles.reference}>\n <span className={styles.referenceLabel}>{reference.label}</span>\n {onRemove !== undefined ? (\n <IconButton\n icon={X}\n size=\"sm\"\n label={removeLabel(reference)}\n showTooltip={false}\n onPress={() => onRemove(reference)}\n />\n ) : null}\n </li>\n ))}\n </ul>\n );\n}\n\n/**\n * A reference to an item of another resource, or several with `multiple`, picked by searching a\n * `RelationSource`. Values are references (`{ id, label }`), as items carry them; plain ids get\n * their labels from the source's `resolve()`. When the source can `create()` (or with `onCreate`),\n * the picker offers to create an item from the typed text. Without a source, the field shows its\n * references and can't change them.\n */\nexport function RelationField(props: RelationFieldProps) {\n const intl = usePanneauIntl();\n const context = useFieldsContext();\n const source = props.source === undefined ? context.relationSource : props.source;\n const {\n resource,\n label,\n description,\n errors,\n disabled,\n readOnly,\n required,\n onBlur,\n name,\n id,\n className,\n labelClassName,\n descriptionClassName,\n errorsClassName,\n controlClassName,\n } = props;\n const placeholder = props.placeholder ?? intl.formatMessage(messages.search);\n const selected = useRelationReferences(source, resource, toReferences(props.value));\n const [query, setQuery] = useState<string | null>(null);\n const [creating, setCreating] = useState(false);\n const [createError, setCreateError] = useState<string | null>(null);\n const editable = source !== null && disabled !== true && readOnly !== true;\n const { items: found, isLoading: searching } = useRelationSearch(\n source,\n resource,\n query ?? '',\n { enabled: editable },\n );\n const sourceCreate = source?.create;\n const create =\n props.onCreate !== undefined\n ? props.onCreate\n : sourceCreate !== undefined && source?.canCreate?.(resource) !== false\n ? (text: string) => sourceCreate.call(source, resource, text)\n : null;\n const text = (query ?? '').trim();\n const offersCreate =\n create !== null &&\n text !== '' &&\n !searching &&\n ![...found, ...selected].some(\n (item) =>\n item.label.toLocaleLowerCase(intl.locale) === text.toLocaleLowerCase(intl.locale),\n );\n const items = offersCreate\n ? [\n ...found,\n { id: CREATE_ID, label: intl.formatMessage(messages.createRelation, { text }) },\n ]\n : found;\n const isLoading = searching || creating;\n const allErrors = createError !== null ? [...(errors ?? []), createError] : errors;\n /** Creates an item from the text, then adds its reference with `add`. */\n const createFrom = (add: (reference: RelationReference) => void) => {\n if (create === null) {\n return;\n }\n setCreating(true);\n setCreateError(null);\n create(text)\n .then((reference) => {\n if (reference !== null) {\n add(reference);\n setQuery(null);\n }\n })\n .catch(() =>\n setCreateError(intl.formatMessage(messages.createRelationFailed, { text })),\n )\n .finally(() => setCreating(false));\n };\n const removeLabel = (reference: RelationReference) =>\n `${intl.formatMessage(messages.remove)} ${reference.label}`;\n const chrome = {\n legend: label,\n errors: allErrors,\n isRequired: required,\n className,\n legendClassName: labelClassName,\n descriptionClassName,\n errorsClassName,\n };\n\n if (!editable) {\n return (\n <Fieldset\n {...chrome}\n description={\n source === null && disabled !== true && readOnly !== true ? (\n <>\n {description} {intl.formatMessage(messages.relationUnavailable)}\n </>\n ) : (\n description\n )\n }\n >\n {selected.length > 0 ? (\n <References references={selected} removeLabel={removeLabel} />\n ) : (\n <span className={styles.none}>{intl.formatMessage(messages.noRelation)}</span>\n )}\n </Fieldset>\n );\n }\n\n const comboLabel = typeof label === 'string' ? label : props['aria-label'];\n\n if (props.multiple === true) {\n const { onChange } = props;\n const set = (next: RelationReference[]) => onChange?.(next.length > 0 ? next : null);\n return (\n <Fieldset {...chrome} description={description}>\n <div className={styles.multiple}>\n {selected.length > 0 ? (\n <References\n references={selected}\n removeLabel={removeLabel}\n onRemove={(reference) =>\n set(selected.filter((entry) => entry.id !== reference.id))\n }\n />\n ) : null}\n <ComboBox\n aria-label={comboLabel}\n items={items\n .filter((item) => !selected.some((entry) => entry.id === item.id))\n .map((item) => ({ id: item.id, label: item.label }))}\n value={null}\n inputValue={query ?? ''}\n onInputChange={setQuery}\n onChange={(itemId) => {\n if (itemId === CREATE_ID) {\n createFrom((reference) => set([...selected, reference]));\n return;\n }\n const reference = found.find((item) => item.id === itemId);\n if (reference !== undefined) {\n set([...selected, reference]);\n setQuery(null);\n }\n }}\n isLoading={isLoading}\n placeholder={placeholder}\n emptyMessage={intl.formatMessage(messages.noResults)}\n {...(onBlur !== undefined ? { onBlur: () => onBlur() } : {})}\n {...(name !== undefined ? { name } : {})}\n {...(id !== undefined ? { id } : {})}\n {...(controlClassName !== undefined ? { controlClassName } : {})}\n />\n </div>\n </Fieldset>\n );\n }\n\n const { onChange } = props;\n const current = selected[0] ?? null;\n // The selected reference is among the items, so that the combo box knows its label.\n const shown =\n current !== null && !items.some((item) => item.id === current.id)\n ? [current, ...items]\n : items;\n return (\n <ComboBox\n label={label}\n description={description}\n errors={allErrors}\n isRequired={required}\n className={className}\n labelClassName={labelClassName}\n descriptionClassName={descriptionClassName}\n errorsClassName={errorsClassName}\n {...(controlClassName !== undefined ? { controlClassName } : {})}\n {...(props['aria-label'] !== undefined ? { 'aria-label': props['aria-label'] } : {})}\n items={shown.map((item) => ({ id: item.id, label: item.label }))}\n value={current?.id ?? null}\n inputValue={query ?? current?.label ?? ''}\n onInputChange={(text) => {\n setQuery(text);\n if (text === '' && current !== null) {\n onChange?.(null);\n }\n }}\n onChange={(itemId) => {\n if (itemId === CREATE_ID) {\n createFrom((reference) => onChange?.(reference));\n return;\n }\n setQuery(null);\n if (itemId === null) {\n return;\n }\n const reference = shown.find((item) => item.id === itemId) ?? null;\n if (reference?.id !== current?.id) {\n onChange?.(reference);\n }\n }}\n isLoading={isLoading}\n placeholder={placeholder}\n emptyMessage={intl.formatMessage(messages.noResults)}\n {...(onBlur !== undefined\n ? {\n onBlur: () => {\n setQuery(null);\n onBlur();\n },\n }\n : { onBlur: () => setQuery(null) })}\n {...(name !== undefined ? { name } : {})}\n {...(id !== undefined ? { id } : {})}\n />\n );\n}\n\n/** The `relation` type: `resource` and `multiple`. Items search the fields context's source. */\nexport function RelationFieldEntry(props: FieldEntryProps) {\n const { field } = props;\n const references = toReferences(props.value);\n // A relation names one resource: `lintDefinition()` reports a list (only `media` fields take one).\n const resource = typeof field.resource === 'string' ? field.resource : '';\n const shared = { ...getFieldProps(props), resource };\n if (field.multiple === true) {\n return <RelationField {...shared} multiple value={references} onChange={props.onChange} />;\n }\n return <RelationField {...shared} value={references[0] ?? null} onChange={props.onChange} />;\n}\n"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import "./RelationField.css";
2
2
  //#region src/relation/RelationField.module.css
3
- var multiple = "panneau-multiple-u9IXr-";
4
- var selected = "panneau-selected-PL7VcQ";
5
- var reference = "panneau-reference-J8YpaW";
6
- var readOnly = "panneau-readOnly-UunIK0";
7
- var referenceLabel = "panneau-referenceLabel-ydQ0bU";
8
- var none = "panneau-none-niMk7v";
3
+ var multiple = "panneau-relation-field-multiple";
4
+ var selected = "panneau-relation-field-selected";
5
+ var reference = "panneau-relation-field-reference";
6
+ var readOnly = "panneau-relation-field-read-only";
7
+ var referenceLabel = "panneau-relation-field-reference-label";
8
+ var none = "panneau-relation-field-none";
9
9
  var RelationField_module_default = {
10
10
  multiple,
11
11
  selected,
@@ -1,3 +1,3 @@
1
- export { type MultipleRelationFieldProps, type RelationFieldBaseProps, RelationField, RelationFieldEntry, type RelationFieldProps, type SingleRelationFieldProps, useRelationSearch, } from './RelationField';
2
- export { type RelationListAdapter, type RelationReference, type RelationSource, type RelationSourceOptions, createRelationSource, } from '../shared/relation';
1
+ export { type MultipleRelationFieldProps, type RelationFieldBaseProps, RelationField, RelationFieldEntry, type RelationFieldProps, type SingleRelationFieldProps, useRelationSearch, } from './RelationField.js';
2
+ export { type RelationListAdapter, type RelationReference, type RelationSource, type RelationSourceOptions, createRelationSource, useRelationReferences, } from '../shared/relation.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/relation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,aAAa,EACb,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,iBAAiB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,oBAAoB,GACvB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/relation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,aAAa,EACb,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,iBAAiB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,oBAAoB,EACpB,qBAAqB,GACxB,MAAM,oBAAoB,CAAC"}
@@ -1,3 +1,3 @@
1
- import { createRelationSource } from "../shared/relation.js";
1
+ import { createRelationSource, useRelationReferences } from "../shared/relation.js";
2
2
  import { RelationField, RelationFieldEntry, useRelationSearch } from "./RelationField.js";
3
- export { RelationField, RelationFieldEntry, createRelationSource, useRelationSearch };
3
+ export { RelationField, RelationFieldEntry, createRelationSource, useRelationReferences, useRelationSearch };
@@ -1,4 +1,4 @@
1
- .panneau-items-B5uTq4 {
1
+ .panneau-repeater-field-items {
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--panneau-space-3);
@@ -7,7 +7,7 @@
7
7
  list-style: none;
8
8
  }
9
9
 
10
- .panneau-item-cNAgol {
10
+ .panneau-repeater-field-item {
11
11
  display: flex;
12
12
  flex-direction: column;
13
13
  min-width: 0;
@@ -16,7 +16,7 @@
16
16
  border-radius: var(--panneau-radius-md);
17
17
  }
18
18
 
19
- .panneau-header-QLqgvh {
19
+ .panneau-repeater-field-header {
20
20
  display: flex;
21
21
  align-items: center;
22
22
  gap: var(--panneau-space-2);
@@ -29,7 +29,7 @@
29
29
  border-start-end-radius: inherit;
30
30
  }
31
31
 
32
- .panneau-title-0eDHTu {
32
+ .panneau-repeater-field-title {
33
33
  flex: 1 1 auto;
34
34
  min-width: 0;
35
35
  overflow: hidden;
@@ -39,42 +39,43 @@
39
39
  white-space: nowrap;
40
40
  }
41
41
 
42
- .panneau-index-IrOBUU {
42
+ .panneau-repeater-field-index {
43
43
  margin-inline-end: var(--panneau-space-2);
44
- font-variant-numeric: tabular-nums;
44
+ font-variant-numeric: var(--panneau-font-numeric);
45
45
  color: var(--panneau-color-text-muted);
46
46
  }
47
47
 
48
- .panneau-tools-zbGiq2 {
48
+ .panneau-repeater-field-tools {
49
49
  display: flex;
50
50
  flex: 0 0 auto;
51
51
  gap: var(--panneau-space-1);
52
52
  }
53
53
 
54
- .panneau-body-iQtLK9 {
54
+ .panneau-repeater-field-body {
55
55
  display: flex;
56
56
  flex-direction: column;
57
57
  gap: var(--panneau-space-4);
58
58
  padding: var(--panneau-space-4);
59
59
  }
60
60
 
61
- .panneau-empty-MST5Cj {
61
+ .panneau-repeater-field-empty {
62
62
  padding: var(--panneau-space-3);
63
63
  font-size: var(--panneau-font-size-sm);
64
64
  color: var(--panneau-color-text-muted);
65
65
  text-align: center;
66
66
  border: var(--panneau-border-width) dashed var(--panneau-color-border-control);
67
67
  border-radius: var(--panneau-radius-md);
68
+ margin: 0;
68
69
  }
69
70
 
70
- .panneau-footer-5jeHXH {
71
+ .panneau-repeater-field-footer {
71
72
  display: flex;
72
73
  flex-wrap: wrap;
73
74
  gap: var(--panneau-space-2);
74
75
  }
75
76
 
76
77
  @media (max-width: 30rem) {
77
- .panneau-body-iQtLK9 {
78
+ .panneau-repeater-field-body {
78
79
  padding: var(--panneau-space-3);
79
80
  }
80
81
  }
@@ -1,5 +1,5 @@
1
1
  import type { BlockType, Field } from '@panneau/protocol';
2
- import type { FieldEntryProps, FieldProps } from '../shared/types';
2
+ import type { FieldEntryProps, FieldProps } from '../shared/types.js';
3
3
  /** An item of a repeater. Typed blocks have their type in `type`. */
4
4
  export type RepeaterItem = Record<string, unknown>;
5
5
  export interface RepeaterFieldProps extends FieldProps<RepeaterItem[]> {
@@ -17,37 +17,67 @@ function defaults(fields) {
17
17
  * can be added, moved and removed. Each field renders at the path `<list>.<index>.<field>`. An
18
18
  * empty list is `null`.
19
19
  */
20
- function RepeaterField({ fields = [], types, path, name, value, onChange, onBlur, label, description, errors, disabled, readOnly, required, min = 0, max, className, labelClassName, descriptionClassName, errorsClassName, itemClassName }) {
20
+ function RepeaterField(t0) {
21
+ const $ = c(45);
22
+ const { fields: t1, types, path, name, value, onChange, onBlur, label, description, errors, disabled, readOnly, required, min: t2, max, className, labelClassName, descriptionClassName, errorsClassName, itemClassName } = t0;
23
+ let t3;
24
+ if ($[0] !== t1) {
25
+ t3 = t1 === void 0 ? [] : t1;
26
+ $[0] = t1;
27
+ $[1] = t3;
28
+ } else t3 = $[1];
29
+ const fields = t3;
30
+ const min = t2 === void 0 ? 0 : t2;
21
31
  const intl = usePanneauIntl();
22
32
  const id = useId();
23
33
  const base = path ?? name ?? "";
24
- const items = value ?? [];
34
+ let t4;
35
+ if ($[2] !== value) {
36
+ t4 = value ?? [];
37
+ $[2] = value;
38
+ $[3] = t4;
39
+ } else t4 = $[3];
40
+ const items = t4;
25
41
  const editable = disabled !== true && readOnly !== true;
26
42
  const canAdd = editable && (max === void 0 || items.length < max);
27
43
  const canRemove = editable && items.length > min;
28
- const set = (next) => onChange?.(next.length > 0 ? next : null);
29
- const move = (from, to) => {
30
- const next_0 = [...items];
31
- const [moved] = next_0.splice(from, 1);
32
- if (moved !== void 0) {
33
- next_0.splice(to, 0, moved);
34
- set(next_0);
35
- }
36
- };
37
- const add = (type) => set([...items, type !== void 0 ? {
38
- type: type.id,
39
- ...defaults(type.fields)
40
- } : defaults(fields)]);
41
- return /* @__PURE__ */ jsxs(Fieldset, {
42
- legend: label,
43
- description,
44
- errors,
45
- isRequired: required,
46
- className,
47
- legendClassName: labelClassName,
48
- descriptionClassName,
49
- errorsClassName,
50
- children: [items.length > 0 ? /* @__PURE__ */ jsx("ol", {
44
+ let t5;
45
+ if ($[4] !== onChange) {
46
+ t5 = (next) => onChange?.(next.length > 0 ? next : null);
47
+ $[4] = onChange;
48
+ $[5] = t5;
49
+ } else t5 = $[5];
50
+ const set = t5;
51
+ let t6;
52
+ if ($[6] !== items || $[7] !== set) {
53
+ t6 = (from, to) => {
54
+ const next_0 = [...items];
55
+ const [moved] = next_0.splice(from, 1);
56
+ if (moved !== void 0) {
57
+ next_0.splice(to, 0, moved);
58
+ set(next_0);
59
+ }
60
+ };
61
+ $[6] = items;
62
+ $[7] = set;
63
+ $[8] = t6;
64
+ } else t6 = $[8];
65
+ const move = t6;
66
+ let t7;
67
+ if ($[9] !== fields || $[10] !== items || $[11] !== set) {
68
+ t7 = (type) => set([...items, type !== void 0 ? {
69
+ type: type.id,
70
+ ...defaults(type.fields)
71
+ } : defaults(fields)]);
72
+ $[9] = fields;
73
+ $[10] = items;
74
+ $[11] = set;
75
+ $[12] = t7;
76
+ } else t7 = $[12];
77
+ const add = t7;
78
+ let t8;
79
+ if ($[13] !== base || $[14] !== canRemove || $[15] !== disabled || $[16] !== editable || $[17] !== fields || $[18] !== id || $[19] !== intl || $[20] !== itemClassName || $[21] !== items || $[22] !== move || $[23] !== onBlur || $[24] !== readOnly || $[25] !== set || $[26] !== types) {
80
+ t8 = items.length > 0 ? /* @__PURE__ */ jsx("ol", {
51
81
  className: RepeaterField_module_default.items,
52
82
  children: items.map((item, index) => {
53
83
  const type_0 = types !== void 0 ? types.find((candidate) => candidate.id === item.type) : void 0;
@@ -113,7 +143,26 @@ function RepeaterField({ fields = [], types, path, name, value, onChange, onBlur
113
143
  }) : /* @__PURE__ */ jsx("p", {
114
144
  className: RepeaterField_module_default.empty,
115
145
  children: intl.formatMessage(messages.noItems)
116
- }), editable ? /* @__PURE__ */ jsx("div", {
146
+ });
147
+ $[13] = base;
148
+ $[14] = canRemove;
149
+ $[15] = disabled;
150
+ $[16] = editable;
151
+ $[17] = fields;
152
+ $[18] = id;
153
+ $[19] = intl;
154
+ $[20] = itemClassName;
155
+ $[21] = items;
156
+ $[22] = move;
157
+ $[23] = onBlur;
158
+ $[24] = readOnly;
159
+ $[25] = set;
160
+ $[26] = types;
161
+ $[27] = t8;
162
+ } else t8 = $[27];
163
+ let t9;
164
+ if ($[28] !== add || $[29] !== canAdd || $[30] !== editable || $[31] !== intl || $[32] !== types) {
165
+ t9 = editable ? /* @__PURE__ */ jsx("div", {
117
166
  className: RepeaterField_module_default.footer,
118
167
  children: types !== void 0 ? /* @__PURE__ */ jsxs(MenuTrigger, { children: [/* @__PURE__ */ jsx(Button, {
119
168
  size: "sm",
@@ -123,10 +172,7 @@ function RepeaterField({ fields = [], types, path, name, value, onChange, onBlur
123
172
  }), /* @__PURE__ */ jsx(Menu, {
124
173
  "aria-label": intl.formatMessage(messages.add),
125
174
  onAction: (key) => add(types.find((type_1) => type_1.id === key)),
126
- children: types.map((type_2) => /* @__PURE__ */ jsx(MenuItem, {
127
- id: type_2.id,
128
- children: type_2.label
129
- }, type_2.id))
175
+ children: types.map(_temp)
130
176
  })] }) : /* @__PURE__ */ jsx(Button, {
131
177
  size: "sm",
132
178
  icon: Plus,
@@ -134,13 +180,51 @@ function RepeaterField({ fields = [], types, path, name, value, onChange, onBlur
134
180
  onPress: () => add(),
135
181
  children: intl.formatMessage(messages.add)
136
182
  })
137
- }) : null]
138
- });
183
+ }) : null;
184
+ $[28] = add;
185
+ $[29] = canAdd;
186
+ $[30] = editable;
187
+ $[31] = intl;
188
+ $[32] = types;
189
+ $[33] = t9;
190
+ } else t9 = $[33];
191
+ let t10;
192
+ if ($[34] !== className || $[35] !== description || $[36] !== descriptionClassName || $[37] !== errors || $[38] !== errorsClassName || $[39] !== label || $[40] !== labelClassName || $[41] !== required || $[42] !== t8 || $[43] !== t9) {
193
+ t10 = /* @__PURE__ */ jsxs(Fieldset, {
194
+ legend: label,
195
+ description,
196
+ errors,
197
+ isRequired: required,
198
+ className,
199
+ legendClassName: labelClassName,
200
+ descriptionClassName,
201
+ errorsClassName,
202
+ children: [t8, t9]
203
+ });
204
+ $[34] = className;
205
+ $[35] = description;
206
+ $[36] = descriptionClassName;
207
+ $[37] = errors;
208
+ $[38] = errorsClassName;
209
+ $[39] = label;
210
+ $[40] = labelClassName;
211
+ $[41] = required;
212
+ $[42] = t8;
213
+ $[43] = t9;
214
+ $[44] = t10;
215
+ } else t10 = $[44];
216
+ return t10;
139
217
  }
140
218
  /**
141
219
  * The `repeater` type: `fields`, or `types` for typed blocks, with `min` and `max` items from its
142
220
  * rules.
143
221
  */
222
+ function _temp(type_2) {
223
+ return /* @__PURE__ */ jsx(MenuItem, {
224
+ id: type_2.id,
225
+ children: type_2.label
226
+ }, type_2.id);
227
+ }
144
228
  function RepeaterFieldEntry(props) {
145
229
  const $ = c(23);
146
230
  const { field, value } = props;
@@ -173,7 +257,7 @@ function RepeaterFieldEntry(props) {
173
257
  } else t3 = $[8];
174
258
  let t4;
175
259
  if ($[9] !== value) {
176
- t4 = Array.isArray(value) ? value.filter(_temp) : null;
260
+ t4 = Array.isArray(value) ? value.filter(_temp2) : null;
177
261
  $[9] = value;
178
262
  $[10] = t4;
179
263
  } else t4 = $[10];
@@ -211,7 +295,7 @@ function RepeaterFieldEntry(props) {
211
295
  } else t7 = $[22];
212
296
  return t7;
213
297
  }
214
- function _temp(item) {
298
+ function _temp2(item) {
215
299
  return item !== null && typeof item === "object" && !Array.isArray(item);
216
300
  }
217
301
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"RepeaterField.js","names":["next","type","i","styles","_c"],"sources":["../../src/repeater/RepeaterField.tsx"],"sourcesContent":["import { ArrowDown, ArrowUp, Plus, Trash2 } from 'lucide-react';\nimport { useId } from 'react';\n\nimport type { BlockType, Field } from '@panneau/protocol';\nimport {\n Button,\n Fieldset,\n IconButton,\n Menu,\n MenuItem,\n MenuTrigger,\n usePanneauIntl,\n} from '@panneau/ui';\n\nimport { NestedField } from '../shared/DefinitionField';\nimport { cx } from '../shared/cx';\nimport { getFieldProps, getRuleNumber } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\nimport styles from './RepeaterField.module.css';\n\n/** An item of a repeater. Typed blocks have their type in `type`. */\nexport type RepeaterItem = Record<string, unknown>;\n\nexport interface RepeaterFieldProps extends FieldProps<RepeaterItem[]> {\n /** The fields of each item. */\n fields?: readonly Field[];\n /** Typed blocks: each item has a `type`, and the fields of that type. */\n types?: readonly BlockType[];\n /** Dot path of the list, the prefix of its fields' paths (`blocks.2.body`). Defaults to `name`. */\n path?: string;\n /** Fewest items: items can't be removed below it. */\n min?: number;\n /** Most items: no item can be added above it. */\n max?: number;\n itemClassName?: string;\n}\n\nfunction defaults(fields: readonly Field[]): RepeaterItem {\n return Object.fromEntries(\n fields.flatMap((field) =>\n field.default !== undefined ? [[field.name, field.default]] : [],\n ),\n );\n}\n\n/**\n * A list of items, each with the same fields, or typed blocks with the fields of their type. Items\n * can be added, moved and removed. Each field renders at the path `<list>.<index>.<field>`. An\n * empty list is `null`.\n */\nexport function RepeaterField({\n fields = [],\n types,\n path,\n name,\n value,\n onChange,\n onBlur,\n label,\n description,\n errors,\n disabled,\n readOnly,\n required,\n min = 0,\n max,\n className,\n labelClassName,\n descriptionClassName,\n errorsClassName,\n itemClassName,\n}: RepeaterFieldProps) {\n const intl = usePanneauIntl();\n const id = useId();\n const base = path ?? name ?? '';\n const items = value ?? [];\n const editable = disabled !== true && readOnly !== true;\n const canAdd = editable && (max === undefined || items.length < max);\n const canRemove = editable && items.length > min;\n const set = (next: RepeaterItem[]) => onChange?.(next.length > 0 ? next : null);\n const move = (from: number, to: number) => {\n const next = [...items];\n const [moved] = next.splice(from, 1);\n if (moved !== undefined) {\n next.splice(to, 0, moved);\n set(next);\n }\n };\n const add = (type?: BlockType) =>\n set([\n ...items,\n type !== undefined ? { type: type.id, ...defaults(type.fields) } : defaults(fields),\n ]);\n\n return (\n <Fieldset\n legend={label}\n description={description}\n errors={errors}\n isRequired={required}\n className={className}\n legendClassName={labelClassName}\n descriptionClassName={descriptionClassName}\n errorsClassName={errorsClassName}\n >\n {items.length > 0 ? (\n <ol className={styles.items}>\n {items.map((item, index) => {\n const type =\n types !== undefined\n ? types.find((candidate) => candidate.id === item.type)\n : undefined;\n const itemFields = types !== undefined ? (type?.fields ?? []) : fields;\n const number = index + 1;\n const titleId = `${id}-${index}`;\n return (\n <li\n key={index}\n className={cx(styles.item, itemClassName)}\n aria-labelledby={titleId}\n >\n <div className={styles.header}>\n <span id={titleId} className={styles.title}>\n <span className={styles.index}>{number}</span>\n {type?.label ??\n (typeof item.type === 'string'\n ? item.type\n : intl.formatMessage(messages.item, {\n index: number,\n }))}\n </span>\n {editable ? (\n <span className={styles.tools}>\n <IconButton\n icon={ArrowUp}\n size=\"sm\"\n label={intl.formatMessage(messages.moveUp, {\n index: number,\n })}\n isDisabled={index === 0}\n onPress={() => move(index, index - 1)}\n />\n <IconButton\n icon={ArrowDown}\n size=\"sm\"\n label={intl.formatMessage(messages.moveDown, {\n index: number,\n })}\n isDisabled={index === items.length - 1}\n onPress={() => move(index, index + 1)}\n />\n <IconButton\n icon={Trash2}\n size=\"sm\"\n label={intl.formatMessage(messages.removeItem, {\n index: number,\n })}\n isDisabled={!canRemove}\n onPress={() =>\n set(items.filter((_, i) => i !== index))\n }\n />\n </span>\n ) : null}\n </div>\n <div className={styles.body}>\n {itemFields.map((field) => (\n <NestedField\n key={field.name}\n field={field}\n path={`${base}.${index}.${field.name}`}\n value={item[field.name]}\n onChange={(next) =>\n set(\n items.map((current, i) =>\n i === index\n ? { ...current, [field.name]: next }\n : current,\n ),\n )\n }\n {...(onBlur !== undefined ? { onBlur } : {})}\n parentValue={item}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(readOnly !== undefined ? { readOnly } : {})}\n />\n ))}\n </div>\n </li>\n );\n })}\n </ol>\n ) : (\n <p className={styles.empty}>{intl.formatMessage(messages.noItems)}</p>\n )}\n {editable ? (\n <div className={styles.footer}>\n {types !== undefined ? (\n <MenuTrigger>\n <Button size=\"sm\" icon={Plus} isDisabled={!canAdd}>\n {intl.formatMessage(messages.add)}\n </Button>\n <Menu\n aria-label={intl.formatMessage(messages.add)}\n onAction={(key) => add(types.find((type) => type.id === key))}\n >\n {types.map((type) => (\n <MenuItem key={type.id} id={type.id}>\n {type.label}\n </MenuItem>\n ))}\n </Menu>\n </MenuTrigger>\n ) : (\n <Button size=\"sm\" icon={Plus} isDisabled={!canAdd} onPress={() => add()}>\n {intl.formatMessage(messages.add)}\n </Button>\n )}\n </div>\n ) : null}\n </Fieldset>\n );\n}\n\n/**\n * The `repeater` type: `fields`, or `types` for typed blocks, with `min` and `max` items from its\n * rules.\n */\nexport function RepeaterFieldEntry(props: FieldEntryProps) {\n const { field, value } = props;\n const min = getRuleNumber(field, 'min');\n const max = getRuleNumber(field, 'max');\n return (\n <RepeaterField\n {...getFieldProps(props)}\n path={props.path}\n {...(field.types !== undefined\n ? { types: field.types }\n : { fields: field.fields ?? [] })}\n value={\n Array.isArray(value)\n ? value.filter(\n (item): item is RepeaterItem =>\n item !== null && typeof item === 'object' && !Array.isArray(item),\n )\n : null\n }\n onChange={props.onChange}\n {...(min !== undefined ? { min } : {})}\n {...(max !== undefined ? { max } : {})}\n />\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"RepeaterField.js","names":["ArrowDown","ArrowUp","Plus","Trash2","useId","BlockType","Field","Button","Fieldset","IconButton","Menu","MenuItem","MenuTrigger","usePanneauIntl","NestedField","cx","getFieldProps","getRuleNumber","messages","FieldEntryProps","FieldProps","styles","RepeaterItem","Record","RepeaterFieldProps","fields","types","path","min","max","itemClassName","defaults","Object","fromEntries","flatMap","field","default","undefined","name","RepeaterField","t0","$","_c","t1","value","onChange","onBlur","label","description","errors","disabled","readOnly","required","t2","className","labelClassName","descriptionClassName","errorsClassName","t3","intl","id","base","t4","items","editable","canAdd","length","canRemove","t5","next","set","t6","from","to","next_0","moved","splice","move","t7","type","add","t8","map","item","index","type_0","find","candidate","itemFields","number","titleId","header","title","formatMessage","tools","moveUp","moveDown","removeItem","filter","_","i","body","next_1","current","i_0","empty","noItems","t9","footer","key","type_1","_temp","t10","type_2","RepeaterFieldEntry","props","Array","isArray","_temp2","_c","styles"],"sources":["../../src/repeater/RepeaterField.tsx"],"sourcesContent":["import { ArrowDown, ArrowUp, Plus, Trash2 } from 'lucide-react';\nimport { useId } from 'react';\n\nimport type { BlockType, Field } from '@panneau/protocol';\nimport {\n Button,\n Fieldset,\n IconButton,\n Menu,\n MenuItem,\n MenuTrigger,\n usePanneauIntl,\n} from '@panneau/ui';\n\nimport { NestedField } from '../shared/DefinitionField';\nimport { cx } from '../shared/cx';\nimport { getFieldProps, getRuleNumber } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\nimport styles from './RepeaterField.module.css';\n\n/** An item of a repeater. Typed blocks have their type in `type`. */\nexport type RepeaterItem = Record<string, unknown>;\n\nexport interface RepeaterFieldProps extends FieldProps<RepeaterItem[]> {\n /** The fields of each item. */\n fields?: readonly Field[];\n /** Typed blocks: each item has a `type`, and the fields of that type. */\n types?: readonly BlockType[];\n /** Dot path of the list, the prefix of its fields' paths (`blocks.2.body`). Defaults to `name`. */\n path?: string;\n /** Fewest items: items can't be removed below it. */\n min?: number;\n /** Most items: no item can be added above it. */\n max?: number;\n itemClassName?: string;\n}\n\nfunction defaults(fields: readonly Field[]): RepeaterItem {\n return Object.fromEntries(\n fields.flatMap((field) =>\n field.default !== undefined ? [[field.name, field.default]] : [],\n ),\n );\n}\n\n/**\n * A list of items, each with the same fields, or typed blocks with the fields of their type. Items\n * can be added, moved and removed. Each field renders at the path `<list>.<index>.<field>`. An\n * empty list is `null`.\n */\nexport function RepeaterField({\n fields = [],\n types,\n path,\n name,\n value,\n onChange,\n onBlur,\n label,\n description,\n errors,\n disabled,\n readOnly,\n required,\n min = 0,\n max,\n className,\n labelClassName,\n descriptionClassName,\n errorsClassName,\n itemClassName,\n}: RepeaterFieldProps) {\n const intl = usePanneauIntl();\n const id = useId();\n const base = path ?? name ?? '';\n const items = value ?? [];\n const editable = disabled !== true && readOnly !== true;\n const canAdd = editable && (max === undefined || items.length < max);\n const canRemove = editable && items.length > min;\n const set = (next: RepeaterItem[]) => onChange?.(next.length > 0 ? next : null);\n const move = (from: number, to: number) => {\n const next = [...items];\n const [moved] = next.splice(from, 1);\n if (moved !== undefined) {\n next.splice(to, 0, moved);\n set(next);\n }\n };\n const add = (type?: BlockType) =>\n set([\n ...items,\n type !== undefined ? { type: type.id, ...defaults(type.fields) } : defaults(fields),\n ]);\n\n return (\n <Fieldset\n legend={label}\n description={description}\n errors={errors}\n isRequired={required}\n className={className}\n legendClassName={labelClassName}\n descriptionClassName={descriptionClassName}\n errorsClassName={errorsClassName}\n >\n {items.length > 0 ? (\n <ol className={styles.items}>\n {items.map((item, index) => {\n const type =\n types !== undefined\n ? types.find((candidate) => candidate.id === item.type)\n : undefined;\n const itemFields = types !== undefined ? (type?.fields ?? []) : fields;\n const number = index + 1;\n const titleId = `${id}-${index}`;\n return (\n <li\n key={index}\n className={cx(styles.item, itemClassName)}\n aria-labelledby={titleId}\n >\n <div className={styles.header}>\n <span id={titleId} className={styles.title}>\n <span className={styles.index}>{number}</span>\n {type?.label ??\n (typeof item.type === 'string'\n ? item.type\n : intl.formatMessage(messages.item, {\n index: number,\n }))}\n </span>\n {editable ? (\n <span className={styles.tools}>\n <IconButton\n icon={ArrowUp}\n size=\"sm\"\n label={intl.formatMessage(messages.moveUp, {\n index: number,\n })}\n isDisabled={index === 0}\n onPress={() => move(index, index - 1)}\n />\n <IconButton\n icon={ArrowDown}\n size=\"sm\"\n label={intl.formatMessage(messages.moveDown, {\n index: number,\n })}\n isDisabled={index === items.length - 1}\n onPress={() => move(index, index + 1)}\n />\n <IconButton\n icon={Trash2}\n size=\"sm\"\n label={intl.formatMessage(messages.removeItem, {\n index: number,\n })}\n isDisabled={!canRemove}\n onPress={() =>\n set(items.filter((_, i) => i !== index))\n }\n />\n </span>\n ) : null}\n </div>\n <div className={styles.body}>\n {itemFields.map((field) => (\n <NestedField\n key={field.name}\n field={field}\n path={`${base}.${index}.${field.name}`}\n value={item[field.name]}\n onChange={(next) =>\n set(\n items.map((current, i) =>\n i === index\n ? { ...current, [field.name]: next }\n : current,\n ),\n )\n }\n {...(onBlur !== undefined ? { onBlur } : {})}\n parentValue={item}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(readOnly !== undefined ? { readOnly } : {})}\n />\n ))}\n </div>\n </li>\n );\n })}\n </ol>\n ) : (\n <p className={styles.empty}>{intl.formatMessage(messages.noItems)}</p>\n )}\n {editable ? (\n <div className={styles.footer}>\n {types !== undefined ? (\n <MenuTrigger>\n <Button size=\"sm\" icon={Plus} isDisabled={!canAdd}>\n {intl.formatMessage(messages.add)}\n </Button>\n <Menu\n aria-label={intl.formatMessage(messages.add)}\n onAction={(key) => add(types.find((type) => type.id === key))}\n >\n {types.map((type) => (\n <MenuItem key={type.id} id={type.id}>\n {type.label}\n </MenuItem>\n ))}\n </Menu>\n </MenuTrigger>\n ) : (\n <Button size=\"sm\" icon={Plus} isDisabled={!canAdd} onPress={() => add()}>\n {intl.formatMessage(messages.add)}\n </Button>\n )}\n </div>\n ) : null}\n </Fieldset>\n );\n}\n\n/**\n * The `repeater` type: `fields`, or `types` for typed blocks, with `min` and `max` items from its\n * rules.\n */\nexport function RepeaterFieldEntry(props: FieldEntryProps) {\n const { field, value } = props;\n const min = getRuleNumber(field, 'min');\n const max = getRuleNumber(field, 'max');\n return (\n <RepeaterField\n {...getFieldProps(props)}\n path={props.path}\n {...(field.types !== undefined\n ? { types: field.types }\n : { fields: field.fields ?? [] })}\n value={\n Array.isArray(value)\n ? value.filter(\n (item): item is RepeaterItem =>\n item !== null && typeof item === 'object' && !Array.isArray(item),\n )\n : null\n }\n onChange={props.onChange}\n {...(min !== undefined ? { min } : {})}\n {...(max !== undefined ? { max } : {})}\n />\n );\n}\n"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import "./RepeaterField.css";
2
2
  //#region src/repeater/RepeaterField.module.css
3
- var items = "panneau-items-B5uTq4";
4
- var item = "panneau-item-cNAgol";
5
- var header = "panneau-header-QLqgvh";
6
- var title = "panneau-title-0eDHTu";
7
- var index = "panneau-index-IrOBUU";
8
- var tools = "panneau-tools-zbGiq2";
9
- var body = "panneau-body-iQtLK9";
10
- var empty = "panneau-empty-MST5Cj";
11
- var footer = "panneau-footer-5jeHXH";
3
+ var items = "panneau-repeater-field-items";
4
+ var item = "panneau-repeater-field-item";
5
+ var header = "panneau-repeater-field-header";
6
+ var title = "panneau-repeater-field-title";
7
+ var index = "panneau-repeater-field-index";
8
+ var tools = "panneau-repeater-field-tools";
9
+ var body = "panneau-repeater-field-body";
10
+ var empty = "panneau-repeater-field-empty";
11
+ var footer = "panneau-repeater-field-footer";
12
12
  var RepeaterField_module_default = {
13
13
  items,
14
14
  item,
@@ -1 +1 @@
1
- {"version":3,"file":"RepeaterField.module.js","names":[],"sources":["../../src/repeater/RepeaterField.module.css"],"sourcesContent":[".items {\n display: flex;\n flex-direction: column;\n gap: var(--panneau-space-3);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.item {\n display: flex;\n flex-direction: column;\n min-width: 0;\n background-color: var(--panneau-color-surface);\n border: var(--panneau-border-width) solid var(--panneau-color-border);\n border-radius: var(--panneau-radius-md);\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: var(--panneau-space-2);\n min-height: var(--panneau-control-height);\n padding: var(--panneau-space-1) var(--panneau-space-1) var(--panneau-space-1)\n var(--panneau-space-3);\n background-color: var(--panneau-color-surface-sunken);\n border-bottom: var(--panneau-border-width) solid var(--panneau-color-border);\n border-start-start-radius: inherit;\n border-start-end-radius: inherit;\n}\n\n.title {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n font-size: var(--panneau-font-size-sm);\n font-weight: var(--panneau-font-weight-medium);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.index {\n margin-inline-end: var(--panneau-space-2);\n font-variant-numeric: tabular-nums;\n color: var(--panneau-color-text-muted);\n}\n\n.tools {\n display: flex;\n flex: 0 0 auto;\n gap: var(--panneau-space-1);\n}\n\n.body {\n display: flex;\n flex-direction: column;\n gap: var(--panneau-space-4);\n padding: var(--panneau-space-4);\n}\n\n.empty {\n padding: var(--panneau-space-3);\n font-size: var(--panneau-font-size-sm);\n color: var(--panneau-color-text-muted);\n text-align: center;\n border: var(--panneau-border-width) dashed var(--panneau-color-border-control);\n border-radius: var(--panneau-radius-md);\n}\n\n.footer {\n display: flex;\n flex-wrap: wrap;\n gap: var(--panneau-space-2);\n}\n\n@media (max-width: 30rem) {\n .body {\n padding: var(--panneau-space-3);\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"RepeaterField.module.js","names":[],"sources":["../../src/repeater/RepeaterField.module.css"],"sourcesContent":[".items {\n display: flex;\n flex-direction: column;\n gap: var(--panneau-space-3);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.item {\n display: flex;\n flex-direction: column;\n min-width: 0;\n background-color: var(--panneau-color-surface);\n border: var(--panneau-border-width) solid var(--panneau-color-border);\n border-radius: var(--panneau-radius-md);\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: var(--panneau-space-2);\n min-height: var(--panneau-control-height);\n padding: var(--panneau-space-1) var(--panneau-space-1) var(--panneau-space-1)\n var(--panneau-space-3);\n background-color: var(--panneau-color-surface-sunken);\n border-bottom: var(--panneau-border-width) solid var(--panneau-color-border);\n border-start-start-radius: inherit;\n border-start-end-radius: inherit;\n}\n\n.title {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n font-size: var(--panneau-font-size-sm);\n font-weight: var(--panneau-font-weight-medium);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.index {\n margin-inline-end: var(--panneau-space-2);\n font-variant-numeric: var(--panneau-font-numeric);\n color: var(--panneau-color-text-muted);\n}\n\n.tools {\n display: flex;\n flex: 0 0 auto;\n gap: var(--panneau-space-1);\n}\n\n.body {\n display: flex;\n flex-direction: column;\n gap: var(--panneau-space-4);\n padding: var(--panneau-space-4);\n}\n\n.empty {\n padding: var(--panneau-space-3);\n font-size: var(--panneau-font-size-sm);\n color: var(--panneau-color-text-muted);\n text-align: center;\n border: var(--panneau-border-width) dashed var(--panneau-color-border-control);\n border-radius: var(--panneau-radius-md);\n margin: 0;\n}\n\n.footer {\n display: flex;\n flex-wrap: wrap;\n gap: var(--panneau-space-2);\n}\n\n@media (max-width: 30rem) {\n .body {\n padding: var(--panneau-space-3);\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- export { RepeaterField, RepeaterFieldEntry, type RepeaterFieldProps, type RepeaterItem, } from './RepeaterField';
1
+ export { RepeaterField, RepeaterFieldEntry, type RepeaterFieldProps, type RepeaterItem, } from './RepeaterField.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,4 @@
1
- .panneau-checkboxes-To0J7N {
1
+ .panneau-select-field-checkboxes {
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--panneau-space-1);
@@ -1,6 +1,6 @@
1
1
  import type { Option } from '@panneau/protocol';
2
2
  import { type OptionValue } from '@panneau/ui';
3
- import type { FieldEntryProps, FieldProps } from '../shared/types';
3
+ import type { FieldEntryProps, FieldProps } from '../shared/types.js';
4
4
  export type { OptionValue };
5
5
  /** Props of both single and multiple select fields. */
6
6
  export interface SelectFieldBaseProps extends Omit<FieldProps<never>, 'value' | 'onChange'> {