@panneau/fields 5.0.0-alpha.6 → 5.0.0-alpha.8

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 (127) hide show
  1. package/dist/boolean/BooleanField.d.ts +1 -1
  2. package/dist/boolean/BooleanField.js +78 -17
  3. package/dist/boolean/BooleanField.js.map +1 -1
  4. package/dist/boolean/index.d.ts +1 -1
  5. package/dist/color/ColorField.d.ts +2 -2
  6. package/dist/color/ColorField.js.map +1 -1
  7. package/dist/color/index.d.ts +1 -1
  8. package/dist/date/DateField.d.ts +1 -1
  9. package/dist/date/DateField.js.map +1 -1
  10. package/dist/date/index.d.ts +1 -1
  11. package/dist/datetime/DateTimeField.d.ts +1 -1
  12. package/dist/datetime/DateTimeField.js +107 -20
  13. package/dist/datetime/DateTimeField.js.map +1 -1
  14. package/dist/datetime/index.d.ts +1 -1
  15. package/dist/duration/DurationField.d.ts +1 -1
  16. package/dist/duration/DurationField.js +126 -41
  17. package/dist/duration/DurationField.js.map +1 -1
  18. package/dist/duration/index.d.ts +1 -1
  19. package/dist/email/EmailField.d.ts +2 -2
  20. package/dist/email/EmailField.js.map +1 -1
  21. package/dist/email/index.d.ts +1 -1
  22. package/dist/embed/EmbedField.d.ts +2 -2
  23. package/dist/embed/EmbedField.js +185 -69
  24. package/dist/embed/EmbedField.js.map +1 -1
  25. package/dist/embed/index.d.ts +2 -2
  26. package/dist/file/FileField.d.ts +2 -2
  27. package/dist/file/FileField.d.ts.map +1 -1
  28. package/dist/file/FileField.js +167 -77
  29. package/dist/file/FileField.js.map +1 -1
  30. package/dist/file/index.d.ts +2 -2
  31. package/dist/group/GroupField.d.ts +1 -1
  32. package/dist/group/GroupField.js.map +1 -1
  33. package/dist/group/index.d.ts +1 -1
  34. package/dist/index.d.ts +18 -18
  35. package/dist/json/JsonField.d.ts +1 -1
  36. package/dist/json/JsonField.js +104 -22
  37. package/dist/json/JsonField.js.map +1 -1
  38. package/dist/json/index.d.ts +1 -1
  39. package/dist/locales/index.js.map +1 -1
  40. package/dist/localized/LocalizedField.d.ts +1 -1
  41. package/dist/localized/LocalizedField.js.map +1 -1
  42. package/dist/localized/index.d.ts +1 -1
  43. package/dist/location/LocationField.d.ts +3 -3
  44. package/dist/location/LocationField.d.ts.map +1 -1
  45. package/dist/location/LocationField.js +351 -138
  46. package/dist/location/LocationField.js.map +1 -1
  47. package/dist/location/LocationMap.d.ts +1 -1
  48. package/dist/location/LocationMap.d.ts.map +1 -1
  49. package/dist/location/LocationMap.js +155 -65
  50. package/dist/location/LocationMap.js.map +1 -1
  51. package/dist/location/index.d.ts +4 -4
  52. package/dist/location/leafletCss.js.map +1 -1
  53. package/dist/location/nominatim.d.ts +1 -1
  54. package/dist/location/nominatim.js.map +1 -1
  55. package/dist/missing/MissingField.d.ts +4 -3
  56. package/dist/missing/MissingField.d.ts.map +1 -1
  57. package/dist/missing/MissingField.js +3 -2
  58. package/dist/missing/MissingField.js.map +1 -1
  59. package/dist/number/NumberField.d.ts +1 -1
  60. package/dist/number/NumberField.js.map +1 -1
  61. package/dist/number/index.d.ts +1 -1
  62. package/dist/range/RangeField.d.ts +1 -1
  63. package/dist/range/RangeField.js +82 -11
  64. package/dist/range/RangeField.js.map +1 -1
  65. package/dist/range/index.d.ts +1 -1
  66. package/dist/relation/RelationField.d.ts +2 -2
  67. package/dist/relation/RelationField.js +485 -145
  68. package/dist/relation/RelationField.js.map +1 -1
  69. package/dist/relation/index.d.ts +2 -2
  70. package/dist/repeater/RepeaterField.d.ts +1 -1
  71. package/dist/repeater/RepeaterField.js +118 -34
  72. package/dist/repeater/RepeaterField.js.map +1 -1
  73. package/dist/repeater/index.d.ts +1 -1
  74. package/dist/select/SelectField.d.ts +1 -1
  75. package/dist/select/SelectField.js.map +1 -1
  76. package/dist/select/index.d.ts +1 -1
  77. package/dist/shared/DefinitionField.d.ts +1 -1
  78. package/dist/shared/DefinitionField.js.map +1 -1
  79. package/dist/shared/builtIn.d.ts +1 -1
  80. package/dist/shared/builtIn.js.map +1 -1
  81. package/dist/shared/check.js.map +1 -1
  82. package/dist/shared/context.d.ts +6 -6
  83. package/dist/shared/context.js.map +1 -1
  84. package/dist/shared/cx.js.map +1 -1
  85. package/dist/shared/dates.js.map +1 -1
  86. package/dist/shared/embed.js.map +1 -1
  87. package/dist/shared/entry.d.ts +1 -1
  88. package/dist/shared/entry.js.map +1 -1
  89. package/dist/shared/relation.js.map +1 -1
  90. package/dist/slug/SlugField.d.ts +2 -2
  91. package/dist/slug/SlugField.d.ts.map +1 -1
  92. package/dist/slug/SlugField.js +184 -36
  93. package/dist/slug/SlugField.js.map +1 -1
  94. package/dist/slug/index.d.ts +1 -1
  95. package/dist/tags/TagsField.d.ts +1 -1
  96. package/dist/tags/TagsField.js.map +1 -1
  97. package/dist/tags/index.d.ts +1 -1
  98. package/dist/tel/TelField.d.ts +2 -2
  99. package/dist/tel/TelField.js.map +1 -1
  100. package/dist/tel/index.d.ts +1 -1
  101. package/dist/text/TextField.d.ts +1 -1
  102. package/dist/text/TextField.js.map +1 -1
  103. package/dist/text/index.d.ts +1 -1
  104. package/dist/textarea/TextAreaField.d.ts +1 -1
  105. package/dist/textarea/TextAreaField.js.map +1 -1
  106. package/dist/textarea/index.d.ts +1 -1
  107. package/dist/time/TimeField.d.ts +1 -1
  108. package/dist/time/TimeField.js +64 -10
  109. package/dist/time/TimeField.js.map +1 -1
  110. package/dist/time/index.d.ts +1 -1
  111. package/dist/upload/FilePicker.js +107 -24
  112. package/dist/upload/FilePicker.js.map +1 -1
  113. package/dist/upload/UploadList.d.ts +1 -1
  114. package/dist/upload/UploadList.js.map +1 -1
  115. package/dist/upload/files.js.map +1 -1
  116. package/dist/upload/useRejectionMessage.d.ts +1 -1
  117. package/dist/upload/useRejectionMessage.js.map +1 -1
  118. package/dist/upload/useUploads.d.ts +1 -1
  119. package/dist/upload/useUploads.js.map +1 -1
  120. package/dist/uppy/index.d.ts +2 -2
  121. package/dist/uppy/uploader.d.ts +1 -1
  122. package/dist/uppy/uploader.js.map +1 -1
  123. package/dist/url/UrlField.d.ts +2 -2
  124. package/dist/url/UrlField.js +69 -14
  125. package/dist/url/UrlField.js.map +1 -1
  126. package/dist/url/index.d.ts +1 -1
  127. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"DurationField.js","names":["part","next","styles","_c"],"sources":["../../src/duration/DurationField.tsx"],"sourcesContent":["import { Fieldset, NumberInput, usePanneauIntl } from '@panneau/ui';\n\nimport { getFieldProps, getSetting, isNumber, isString } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\nimport styles from './DurationField.module.css';\n\nexport interface DurationFieldProps extends FieldProps<number> {\n /** `seconds` (the default) shows hours, minutes and seconds; `minutes` hides the seconds. */\n precision?: 'seconds' | 'minutes';\n}\n\n/** Hours, minutes and seconds of a number of seconds. */\nexport function splitDuration(seconds: number): {\n hours: number;\n minutes: number;\n seconds: number;\n} {\n const total = Math.max(0, Math.round(seconds));\n return {\n hours: Math.floor(total / 3600),\n minutes: Math.floor((total % 3600) / 60),\n seconds: total % 60,\n };\n}\n\n/**\n * A duration with its units, without the empty ones: `1 h 5 min 30 s`, `3 min`. With a precision\n * of minutes, the seconds are rounded away.\n */\nexport function formatDuration(\n seconds: number,\n { precision = 'seconds' }: { precision?: 'seconds' | 'minutes' } = {},\n): string {\n const parts = splitDuration(precision === 'minutes' ? Math.round(seconds / 60) * 60 : seconds);\n const shown = [\n parts.hours > 0 ? `${parts.hours} h` : null,\n parts.minutes > 0 ? `${parts.minutes} min` : null,\n precision === 'seconds' && parts.seconds > 0 ? `${parts.seconds} s` : null,\n ].filter((part) => part !== null);\n return shown.length > 0 ? shown.join(' ') : precision === 'minutes' ? '0 min' : '0 s';\n}\n\n/**\n * A duration, in seconds, typed in hours, minutes and seconds. It is `null` while every part is\n * empty.\n */\nexport function DurationField({\n value,\n onChange,\n onBlur,\n precision = 'seconds',\n label,\n description,\n errors,\n disabled,\n readOnly,\n required,\n name,\n className,\n}: DurationFieldProps) {\n const intl = usePanneauIntl();\n const parts = value !== null && value !== undefined ? splitDuration(value) : null;\n const change = (part: 'hours' | 'minutes' | 'seconds', next: number | null) => {\n const updated = { ...(parts ?? { hours: 0, minutes: 0, seconds: 0 }), [part]: next ?? 0 };\n const total = updated.hours * 3600 + updated.minutes * 60 + updated.seconds;\n // Clearing the last part that had a value empties the field\n onChange?.(total === 0 && next === null ? null : total);\n };\n const input = (part: 'hours' | 'minutes' | 'seconds') => (\n <NumberInput\n aria-label={intl.formatMessage(messages[part])}\n value={parts?.[part] ?? null}\n onChange={(next) => change(part, next)}\n onBlur={() => onBlur?.()}\n minValue={0}\n {...(part !== 'hours' ? { maxValue: 59 } : {})}\n formatOptions={{ maximumFractionDigits: 0 }}\n suffix={intl.formatMessage(messages[`${part}Unit`])}\n isDisabled={disabled}\n isReadOnly={readOnly}\n {...(name !== undefined ? { name: `${name}[${part}]` } : {})}\n className={styles.part}\n />\n );\n return (\n <Fieldset\n legend={label}\n description={description}\n errors={errors}\n isRequired={required}\n isDisabled={disabled}\n className={className}\n >\n <div className={styles.parts}>\n {input('hours')}\n {input('minutes')}\n {precision === 'seconds' ? input('seconds') : null}\n </div>\n </Fieldset>\n );\n}\n\n/** The `duration` type: a number of seconds, with setting `precision` (`seconds` or `minutes`). */\nexport function DurationFieldEntry(props: FieldEntryProps) {\n const precision = getSetting(props.field, 'precision', isString);\n const { placeholder: _placeholder, ...fieldProps } = getFieldProps(props);\n return (\n <DurationField\n {...fieldProps}\n value={isNumber(props.value) ? props.value : null}\n onChange={props.onChange}\n {...(precision === 'minutes' || precision === 'seconds' ? { precision } : {})}\n />\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DurationField.js","names":["Fieldset","NumberInput","usePanneauIntl","getFieldProps","getSetting","isNumber","isString","messages","FieldEntryProps","FieldProps","styles","DurationFieldProps","precision","splitDuration","seconds","hours","minutes","total","Math","max","round","floor","formatDuration","parts","shown","filter","part","length","join","DurationField","t0","$","_c","value","onChange","onBlur","t1","label","description","errors","disabled","readOnly","required","name","className","undefined","intl","T0","t10","t11","t2","t3","t4","t5","t6","t7","t8","t9","change","next","updated","input","part_0","formatMessage","next_0","maxValue","maximumFractionDigits","t12","t13","DurationFieldEntry","props","field","fieldProps","placeholder","_placeholder","_c","styles"],"sources":["../../src/duration/DurationField.tsx"],"sourcesContent":["import { Fieldset, NumberInput, usePanneauIntl } from '@panneau/ui';\n\nimport { getFieldProps, getSetting, isNumber, isString } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\nimport styles from './DurationField.module.css';\n\nexport interface DurationFieldProps extends FieldProps<number> {\n /** `seconds` (the default) shows hours, minutes and seconds; `minutes` hides the seconds. */\n precision?: 'seconds' | 'minutes';\n}\n\n/** Hours, minutes and seconds of a number of seconds. */\nexport function splitDuration(seconds: number): {\n hours: number;\n minutes: number;\n seconds: number;\n} {\n const total = Math.max(0, Math.round(seconds));\n return {\n hours: Math.floor(total / 3600),\n minutes: Math.floor((total % 3600) / 60),\n seconds: total % 60,\n };\n}\n\n/**\n * A duration with its units, without the empty ones: `1 h 5 min 30 s`, `3 min`. With a precision\n * of minutes, the seconds are rounded away.\n */\nexport function formatDuration(\n seconds: number,\n { precision = 'seconds' }: { precision?: 'seconds' | 'minutes' } = {},\n): string {\n const parts = splitDuration(precision === 'minutes' ? Math.round(seconds / 60) * 60 : seconds);\n const shown = [\n parts.hours > 0 ? `${parts.hours} h` : null,\n parts.minutes > 0 ? `${parts.minutes} min` : null,\n precision === 'seconds' && parts.seconds > 0 ? `${parts.seconds} s` : null,\n ].filter((part) => part !== null);\n return shown.length > 0 ? shown.join(' ') : precision === 'minutes' ? '0 min' : '0 s';\n}\n\n/**\n * A duration, in seconds, typed in hours, minutes and seconds. It is `null` while every part is\n * empty.\n */\nexport function DurationField({\n value,\n onChange,\n onBlur,\n precision = 'seconds',\n label,\n description,\n errors,\n disabled,\n readOnly,\n required,\n name,\n className,\n}: DurationFieldProps) {\n const intl = usePanneauIntl();\n const parts = value !== null && value !== undefined ? splitDuration(value) : null;\n const change = (part: 'hours' | 'minutes' | 'seconds', next: number | null) => {\n const updated = { ...(parts ?? { hours: 0, minutes: 0, seconds: 0 }), [part]: next ?? 0 };\n const total = updated.hours * 3600 + updated.minutes * 60 + updated.seconds;\n // Clearing the last part that had a value empties the field\n onChange?.(total === 0 && next === null ? null : total);\n };\n const input = (part: 'hours' | 'minutes' | 'seconds') => (\n <NumberInput\n aria-label={intl.formatMessage(messages[part])}\n value={parts?.[part] ?? null}\n onChange={(next) => change(part, next)}\n onBlur={() => onBlur?.()}\n minValue={0}\n {...(part !== 'hours' ? { maxValue: 59 } : {})}\n formatOptions={{ maximumFractionDigits: 0 }}\n suffix={intl.formatMessage(messages[`${part}Unit`])}\n isDisabled={disabled}\n isReadOnly={readOnly}\n {...(name !== undefined ? { name: `${name}[${part}]` } : {})}\n className={styles.part}\n />\n );\n return (\n <Fieldset\n legend={label}\n description={description}\n errors={errors}\n isRequired={required}\n isDisabled={disabled}\n className={className}\n >\n <div className={styles.parts}>\n {input('hours')}\n {input('minutes')}\n {precision === 'seconds' ? input('seconds') : null}\n </div>\n </Fieldset>\n );\n}\n\n/** The `duration` type: a number of seconds, with setting `precision` (`seconds` or `minutes`). */\nexport function DurationFieldEntry(props: FieldEntryProps) {\n const precision = getSetting(props.field, 'precision', isString);\n const { placeholder: _placeholder, ...fieldProps } = getFieldProps(props);\n return (\n <DurationField\n {...fieldProps}\n value={isNumber(props.value) ? props.value : null}\n onChange={props.onChange}\n {...(precision === 'minutes' || precision === 'seconds' ? { precision } : {})}\n />\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { DurationField, DurationFieldEntry, type DurationFieldProps, formatDuration, splitDuration, } from './DurationField';
1
+ export { DurationField, DurationFieldEntry, type DurationFieldProps, formatDuration, splitDuration, } from './DurationField.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
- import type { FieldEntryProps } from '../shared/types';
2
- import { type TextFieldProps } from '../text/TextField';
1
+ import type { FieldEntryProps } from '../shared/types.js';
2
+ import { type TextFieldProps } from '../text/TextField.js';
3
3
  export type EmailFieldProps = Omit<TextFieldProps, 'type' | 'inputMode'>;
4
4
  /** An email address, with the email keyboard on phones. Spaces around it are removed on blur. */
5
5
  export declare function EmailField({ value, onChange, onBlur, ...props }: EmailFieldProps): import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"EmailField.js","names":["value","onChange","_c"],"sources":["../../src/email/EmailField.tsx"],"sourcesContent":["import { getFieldProps, isString } from '../shared/entry';\nimport type { FieldEntryProps } from '../shared/types';\nimport { TextField, type TextFieldProps } from '../text/TextField';\n\nexport type EmailFieldProps = Omit<TextFieldProps, 'type' | 'inputMode'>;\n\n/** An email address, with the email keyboard on phones. Spaces around it are removed on blur. */\nexport function EmailField({ value, onChange, onBlur, ...props }: EmailFieldProps) {\n return (\n <TextField\n autoComplete=\"off\"\n {...props}\n type=\"email\"\n inputMode=\"email\"\n value={value}\n onChange={onChange}\n onBlur={() => {\n const trimmed = value?.trim() ?? null;\n if (trimmed !== value) {\n onChange?.(trimmed === '' ? null : trimmed);\n }\n onBlur?.();\n }}\n />\n );\n}\n\n/** The `email` type. */\nexport function EmailFieldEntry(props: FieldEntryProps) {\n return (\n <EmailField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n />\n );\n}\n"],"mappings":";;;;;;AAOA,SAAO,WAAA,IAAA;CAAA,MAAA,IAAAE,EAAA,EAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,IAAA;EAAoB,CAAA,CAAA,OAAA,UAAA,QAAA,GAAA,SAAA;EAAsD,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA;EAAA,SAAA,EAAA;EAAA,WAAA,EAAA;EAAA,QAAA,EAAA;EAAA,QAAA,EAAA;CAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,UAAA,EAAA,OAAA,YAAA,EAAA,OAAA,OAAA;EAS7D,WAAA;GACJ,MAAA,UAAgB,OAAK,KAAe,KAApB;GAChB,IAAI,YAAY,OACZ,WAAW,YAAY,KAAZ,OAAA,OAA+B;GAE9C,SAAS;EAAC;EACb,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,YAAA,EAAA,QAAA,SAAA,EAAA,QAAA,MAAA,EAAA,QAAA,OAAA;EAbL,KAAA,oBAAC,WAAD;GACiB,cAAA;GAAK,GACd;GACC,MAAA;GACK,WAAA;GACH;GACG;GACF,QAAA;EAMP,CAAA;EACH,EAAA,KAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAdF;AAcE;;AAKV,SAAO,gBAAA,OAAA;CAAA,MAAA,IAAAA,EAAA,CAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA;EAGS,KAAA,cAAc,KAAK;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CACjB,MAAA,KAAA,SAAS,MAAK,KAA2B,IAAjB,MAAK,QAA7B;CAA0C,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA,YAAA,EAAA,OAAA,MAAA,EAAA,OAAA,IAAA;EAFrD,KAAA,oBAAC,YAAD;GAAW,GACH;GACG,OAAA;GACG,UAAA,MAAK;EAAS,CAAA;EAC1B,EAAA,KAAA,MAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAJF;AAIE"}
1
+ {"version":3,"file":"EmailField.js","names":["getFieldProps","isString","FieldEntryProps","TextField","TextFieldProps","EmailFieldProps","Omit","EmailField","t0","$","_c","onBlur","onChange","props","value","t1","trimmed","trim","t2","EmailFieldEntry","_c"],"sources":["../../src/email/EmailField.tsx"],"sourcesContent":["import { getFieldProps, isString } from '../shared/entry';\nimport type { FieldEntryProps } from '../shared/types';\nimport { TextField, type TextFieldProps } from '../text/TextField';\n\nexport type EmailFieldProps = Omit<TextFieldProps, 'type' | 'inputMode'>;\n\n/** An email address, with the email keyboard on phones. Spaces around it are removed on blur. */\nexport function EmailField({ value, onChange, onBlur, ...props }: EmailFieldProps) {\n return (\n <TextField\n autoComplete=\"off\"\n {...props}\n type=\"email\"\n inputMode=\"email\"\n value={value}\n onChange={onChange}\n onBlur={() => {\n const trimmed = value?.trim() ?? null;\n if (trimmed !== value) {\n onChange?.(trimmed === '' ? null : trimmed);\n }\n onBlur?.();\n }}\n />\n );\n}\n\n/** The `email` type. */\nexport function EmailFieldEntry(props: FieldEntryProps) {\n return (\n <EmailField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n />\n );\n}\n"],"mappings":";;;;;;AAOA,SAAOO,WAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAL,EAAA,OAAAD,IAAA;EAAoB,CAAA,CAAAM,OAAAF,UAAAD,QAAA,GAAAE,SAAAL;EAAsDC,EAAA,KAAAD;EAAAC,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;CAAA,OAAA;EAAAH,SAAAF,EAAA;EAAAG,WAAAH,EAAA;EAAAI,QAAAJ,EAAA;EAAAK,QAAAL,EAAA;CAAA;CAAA,IAAAM;CAAA,IAAAN,EAAA,OAAAE,UAAAF,EAAA,OAAAG,YAAAH,EAAA,OAAAK,OAAA;EAS7DC,WAAA;GACJ,MAAAC,UAAgBF,OAAKG,KAAe,KAApB;GAChB,IAAID,YAAYF,OACZF,WAAWI,YAAY,KAAZ,OAAAA,OAA+B;GAE9CL,SAAS;EAAC;EACbF,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAK;EAAAL,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,IAAAS;CAAA,IAAAT,EAAA,OAAAG,YAAAH,EAAA,QAAAI,SAAAJ,EAAA,QAAAM,MAAAN,EAAA,QAAAK,OAAA;EAbLI,KAAA,oBAAC,WAAD;GACiB,cAAA;GAAK,GACdL;GACC,MAAA;GACK,WAAA;GACHC;GACGF;GACF,QAAAG;EAMP,CAAA;EACHN,EAAA,KAAAG;EAAAH,EAAA,MAAAI;EAAAJ,EAAA,MAAAM;EAAAN,EAAA,MAAAK;EAAAL,EAAA,MAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,OAdFS;AAcE;;AAKV,SAAOC,gBAAAN,OAAA;CAAA,MAAAJ,IAAAC,EAAA,CAAA;CAAA,IAAAF;CAAA,IAAAC,EAAA,OAAAI,OAAA;EAGSL,KAAAR,cAAca,KAAK;EAACJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAD;CAAA,OAAAA,KAAAC,EAAA;CACjB,MAAAM,KAAAd,SAASY,MAAKC,KAA2B,IAAjBD,MAAKC,QAA7B;CAA0C,IAAAI;CAAA,IAAAT,EAAA,OAAAI,MAAAD,YAAAH,EAAA,OAAAD,MAAAC,EAAA,OAAAM,IAAA;EAFrDG,KAAA,oBAAC,YAAD;GAAW,GACHV;GACG,OAAAO;GACG,UAAAF,MAAKD;EAAS,CAAA;EAC1BH,EAAA,KAAAI,MAAAD;EAAAH,EAAA,KAAAD;EAAAC,EAAA,KAAAM;EAAAN,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,OAJFS;AAIE"}
@@ -1,2 +1,2 @@
1
- export { EmailField, EmailFieldEntry, type EmailFieldProps } from './EmailField';
1
+ export { EmailField, EmailFieldEntry, type EmailFieldProps } from './EmailField.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import type { EmbedValue } from '@panneau/protocol';
2
- import type { EmbedSource } from '../shared/embed';
3
- import type { FieldEntryProps, FieldProps } from '../shared/types';
2
+ import type { EmbedSource } from '../shared/embed.js';
3
+ import type { FieldEntryProps, FieldProps } from '../shared/types.js';
4
4
  export type { EmbedValue };
5
5
  export interface EmbedFieldProps extends FieldProps<EmbedValue> {
6
6
  placeholder?: string;
@@ -4,7 +4,7 @@ import { messages } from "../shared/messages.js";
4
4
  import EmbedField_module_default from "./EmbedField.module.js";
5
5
  import { c } from "react/compiler-runtime";
6
6
  import { Spinner, TextInput, usePanneauIntl } from "@panneau/ui";
7
- import { useEffect, useState } from "react";
7
+ import { useEffect, useEffectEvent, useState } from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  //#region src/embed/EmbedField.tsx
10
10
  var RESOLVE_DELAY = 500;
@@ -21,84 +21,200 @@ function isResolved(value) {
21
21
  * oEmbed: its thumbnail, title and provider. The URL is kept as soon as it is typed, and its
22
22
  * preview follows. Without an embed source, the value is the URL alone.
23
23
  */
24
- function EmbedField({ value, onChange, onBlur, embedSource: embedSourceProp, errors = [], disabled, readOnly, required, ...props }) {
24
+ function EmbedField(t0) {
25
+ const $ = c(47);
26
+ let disabled;
27
+ let embedSourceProp;
28
+ let onBlur;
29
+ let onChange;
30
+ let props;
31
+ let readOnly;
32
+ let required;
33
+ let t1;
34
+ let value;
35
+ if ($[0] !== t0) {
36
+ ({value, onChange, onBlur, embedSource: embedSourceProp, errors: t1, disabled, readOnly, required, ...props} = t0);
37
+ $[0] = t0;
38
+ $[1] = disabled;
39
+ $[2] = embedSourceProp;
40
+ $[3] = onBlur;
41
+ $[4] = onChange;
42
+ $[5] = props;
43
+ $[6] = readOnly;
44
+ $[7] = required;
45
+ $[8] = t1;
46
+ $[9] = value;
47
+ } else {
48
+ disabled = $[1];
49
+ embedSourceProp = $[2];
50
+ onBlur = $[3];
51
+ onChange = $[4];
52
+ props = $[5];
53
+ readOnly = $[6];
54
+ required = $[7];
55
+ t1 = $[8];
56
+ value = $[9];
57
+ }
58
+ let t2;
59
+ if ($[10] !== t1) {
60
+ t2 = t1 === void 0 ? [] : t1;
61
+ $[10] = t1;
62
+ $[11] = t2;
63
+ } else t2 = $[11];
64
+ const errors = t2;
25
65
  const intl = usePanneauIntl();
26
66
  const context = useFieldsContext();
27
67
  const embedSource = embedSourceProp === void 0 ? context.embedSource : embedSourceProp;
28
68
  const url = value?.url ?? "";
29
69
  const [status, setStatus] = useState(null);
30
70
  const pending = value !== null && value !== void 0 && !isResolved(value) ? value.url : null;
31
- useEffect(() => {
32
- if (embedSource === null || pending === null || !URL.canParse(pending)) return;
33
- const controller = new AbortController();
34
- const timeout = window.setTimeout(() => {
35
- setStatus({
36
- url: pending,
37
- state: "loading"
38
- });
39
- embedSource.resolve(pending, { signal: controller.signal }).then((embed) => {
40
- setStatus(null);
41
- onChange?.({
42
- ...embed,
43
- url: pending
44
- });
45
- }).catch(() => {
46
- if (!controller.signal.aborted) setStatus({
71
+ let t3;
72
+ if ($[12] !== onChange) {
73
+ t3 = (embed) => onChange?.(embed);
74
+ $[12] = onChange;
75
+ $[13] = t3;
76
+ } else t3 = $[13];
77
+ const resolved = useEffectEvent(t3);
78
+ let t4;
79
+ if ($[14] !== embedSource || $[15] !== pending || $[16] !== resolved) {
80
+ t4 = () => {
81
+ if (embedSource === null || pending === null || !URL.canParse(pending)) return;
82
+ const controller = new AbortController();
83
+ const timeout = window.setTimeout(() => {
84
+ setStatus({
47
85
  url: pending,
48
- state: "failed"
86
+ state: "loading"
87
+ });
88
+ embedSource.resolve(pending, { signal: controller.signal }).then((embed_0) => {
89
+ setStatus(null);
90
+ resolved({
91
+ ...embed_0,
92
+ url: pending
93
+ });
94
+ }).catch(() => {
95
+ if (!controller.signal.aborted) setStatus({
96
+ url: pending,
97
+ state: "failed"
98
+ });
49
99
  });
50
- });
51
- }, RESOLVE_DELAY);
52
- return () => {
53
- window.clearTimeout(timeout);
54
- controller.abort();
100
+ }, RESOLVE_DELAY);
101
+ return () => {
102
+ window.clearTimeout(timeout);
103
+ controller.abort();
104
+ };
55
105
  };
56
- }, [embedSource, pending]);
106
+ $[14] = embedSource;
107
+ $[15] = pending;
108
+ $[16] = resolved;
109
+ $[17] = t4;
110
+ } else t4 = $[17];
111
+ let t5;
112
+ if ($[18] !== embedSource || $[19] !== pending) {
113
+ t5 = [embedSource, pending];
114
+ $[18] = embedSource;
115
+ $[19] = pending;
116
+ $[20] = t5;
117
+ } else t5 = $[20];
118
+ useEffect(t4, t5);
57
119
  const current = status !== null && status.url === url ? status.state : null;
58
- const shownErrors = current === "failed" && errors.length === 0 ? [intl.formatMessage(messages.embedFailed)] : errors;
59
- return /* @__PURE__ */ jsxs("div", {
60
- className: EmbedField_module_default.embed,
61
- children: [
62
- /* @__PURE__ */ jsx(TextInput, {
63
- ...props,
64
- type: "url",
65
- inputMode: "url",
66
- autoComplete: "off",
67
- value: url,
68
- onChange: (next) => onChange?.(next.trim() === "" ? null : { url: next.trim() }),
69
- onBlur: () => onBlur?.(),
70
- errors: shownErrors,
71
- isDisabled: disabled,
72
- isReadOnly: readOnly,
73
- isRequired: required
74
- }),
75
- current === "loading" ? /* @__PURE__ */ jsxs("div", {
76
- className: EmbedField_module_default.status,
77
- role: "status",
78
- children: [/* @__PURE__ */ jsx(Spinner, { size: "sm" }), intl.formatMessage(messages.embedLoading)]
79
- }) : null,
80
- value !== null && value !== void 0 && isResolved(value) ? /* @__PURE__ */ jsxs("a", {
81
- className: EmbedField_module_default.preview,
82
- href: value.url,
83
- target: "_blank",
84
- rel: "noreferrer",
85
- children: [value.thumbnailUrl !== void 0 ? /* @__PURE__ */ jsx("img", {
86
- className: EmbedField_module_default.thumbnail,
87
- src: value.thumbnailUrl,
88
- alt: ""
89
- }) : null, /* @__PURE__ */ jsxs("span", {
90
- className: EmbedField_module_default.text,
91
- children: [/* @__PURE__ */ jsx("span", {
92
- className: EmbedField_module_default.title,
93
- children: value.title ?? value.url
94
- }), value.provider !== void 0 ? /* @__PURE__ */ jsx("span", {
95
- className: EmbedField_module_default.provider,
96
- children: value.provider
97
- }) : null]
98
- })]
99
- }) : null
100
- ]
101
- });
120
+ let t6;
121
+ if ($[21] !== current || $[22] !== errors || $[23] !== intl) {
122
+ t6 = current === "failed" && errors.length === 0 ? [intl.formatMessage(messages.embedFailed)] : errors;
123
+ $[21] = current;
124
+ $[22] = errors;
125
+ $[23] = intl;
126
+ $[24] = t6;
127
+ } else t6 = $[24];
128
+ const shownErrors = t6;
129
+ let t7;
130
+ if ($[25] !== onChange) {
131
+ t7 = (next) => onChange?.(next.trim() === "" ? null : { url: next.trim() });
132
+ $[25] = onChange;
133
+ $[26] = t7;
134
+ } else t7 = $[26];
135
+ let t8;
136
+ if ($[27] !== onBlur) {
137
+ t8 = () => onBlur?.();
138
+ $[27] = onBlur;
139
+ $[28] = t8;
140
+ } else t8 = $[28];
141
+ let t9;
142
+ if ($[29] !== disabled || $[30] !== props || $[31] !== readOnly || $[32] !== required || $[33] !== shownErrors || $[34] !== t7 || $[35] !== t8 || $[36] !== url) {
143
+ t9 = /* @__PURE__ */ jsx(TextInput, {
144
+ ...props,
145
+ type: "url",
146
+ inputMode: "url",
147
+ autoComplete: "off",
148
+ value: url,
149
+ onChange: t7,
150
+ onBlur: t8,
151
+ errors: shownErrors,
152
+ isDisabled: disabled,
153
+ isReadOnly: readOnly,
154
+ isRequired: required
155
+ });
156
+ $[29] = disabled;
157
+ $[30] = props;
158
+ $[31] = readOnly;
159
+ $[32] = required;
160
+ $[33] = shownErrors;
161
+ $[34] = t7;
162
+ $[35] = t8;
163
+ $[36] = url;
164
+ $[37] = t9;
165
+ } else t9 = $[37];
166
+ let t10;
167
+ if ($[38] !== current || $[39] !== intl) {
168
+ t10 = current === "loading" ? /* @__PURE__ */ jsxs("div", {
169
+ className: EmbedField_module_default.status,
170
+ role: "status",
171
+ children: [/* @__PURE__ */ jsx(Spinner, { size: "sm" }), intl.formatMessage(messages.embedLoading)]
172
+ }) : null;
173
+ $[38] = current;
174
+ $[39] = intl;
175
+ $[40] = t10;
176
+ } else t10 = $[40];
177
+ let t11;
178
+ if ($[41] !== value) {
179
+ t11 = value !== null && value !== void 0 && isResolved(value) ? /* @__PURE__ */ jsxs("a", {
180
+ className: EmbedField_module_default.preview,
181
+ href: value.url,
182
+ target: "_blank",
183
+ rel: "noreferrer",
184
+ children: [value.thumbnailUrl !== void 0 ? /* @__PURE__ */ jsx("img", {
185
+ className: EmbedField_module_default.thumbnail,
186
+ src: value.thumbnailUrl,
187
+ alt: ""
188
+ }) : null, /* @__PURE__ */ jsxs("span", {
189
+ className: EmbedField_module_default.text,
190
+ children: [/* @__PURE__ */ jsx("span", {
191
+ className: EmbedField_module_default.title,
192
+ children: value.title ?? value.url
193
+ }), value.provider !== void 0 ? /* @__PURE__ */ jsx("span", {
194
+ className: EmbedField_module_default.provider,
195
+ children: value.provider
196
+ }) : null]
197
+ })]
198
+ }) : null;
199
+ $[41] = value;
200
+ $[42] = t11;
201
+ } else t11 = $[42];
202
+ let t12;
203
+ if ($[43] !== t10 || $[44] !== t11 || $[45] !== t9) {
204
+ t12 = /* @__PURE__ */ jsxs("div", {
205
+ className: EmbedField_module_default.embed,
206
+ children: [
207
+ t9,
208
+ t10,
209
+ t11
210
+ ]
211
+ });
212
+ $[43] = t10;
213
+ $[44] = t11;
214
+ $[45] = t9;
215
+ $[46] = t12;
216
+ } else t12 = $[46];
217
+ return t12;
102
218
  }
103
219
  /** The `embed` type: its preview comes from the embed source of the `FieldsProvider`. */
104
220
  function EmbedFieldEntry(props) {
@@ -1 +1 @@
1
- {"version":3,"file":"EmbedField.js","names":["styles","_c"],"sources":["../../src/embed/EmbedField.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { EmbedValue } from '@panneau/protocol';\nimport { Spinner, TextInput, usePanneauIntl } from '@panneau/ui';\n\nimport { useFieldsContext } from '../shared/context';\nimport type { EmbedSource } from '../shared/embed';\nimport { getFieldProps, isString } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\nimport styles from './EmbedField.module.css';\n\nexport type { EmbedValue };\n\nconst RESOLVE_DELAY = 500;\n\nexport interface EmbedFieldProps extends FieldProps<EmbedValue> {\n placeholder?: string;\n /** Where the preview comes from. Defaults to that of the `FieldsProvider`. */\n embedSource?: EmbedSource | null;\n}\n\n/** Whether a value is an embed: an object with a `url`. */\nexport function isEmbed(value: unknown): value is EmbedValue {\n return (\n value !== null &&\n typeof value === 'object' &&\n isString((value as Record<string, unknown>).url)\n );\n}\n\n/** Whether a value has been resolved: it has more than its URL. */\nfunction isResolved(value: EmbedValue): boolean {\n return Object.keys(value).some((key) => key !== 'url');\n}\n\n/**\n * A URL of a video, a sound or a post, with the preview the backend gets from its provider's\n * oEmbed: its thumbnail, title and provider. The URL is kept as soon as it is typed, and its\n * preview follows. Without an embed source, the value is the URL alone.\n */\nexport function EmbedField({\n value,\n onChange,\n onBlur,\n embedSource: embedSourceProp,\n errors = [],\n disabled,\n readOnly,\n required,\n ...props\n}: EmbedFieldProps) {\n const intl = usePanneauIntl();\n const context = useFieldsContext();\n const embedSource = embedSourceProp === undefined ? context.embedSource : embedSourceProp;\n const url = value?.url ?? '';\n const [status, setStatus] = useState<{ url: string; state: 'loading' | 'failed' } | null>(null);\n\n // Resolves a URL that hasn't been, after a pause in typing\n const pending = value !== null && value !== undefined && !isResolved(value) ? value.url : null;\n useEffect(() => {\n if (embedSource === null || pending === null || !URL.canParse(pending)) {\n return undefined;\n }\n const controller = new AbortController();\n const timeout = window.setTimeout(() => {\n setStatus({ url: pending, state: 'loading' });\n embedSource\n .resolve(pending, { signal: controller.signal })\n .then((embed) => {\n setStatus(null);\n onChange?.({ ...embed, url: pending });\n })\n .catch(() => {\n if (!controller.signal.aborted) {\n setStatus({ url: pending, state: 'failed' });\n }\n });\n }, RESOLVE_DELAY);\n return () => {\n window.clearTimeout(timeout);\n controller.abort();\n };\n // `onChange` changes on every render of a form\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [embedSource, pending]);\n\n const current = status !== null && status.url === url ? status.state : null;\n const shownErrors =\n current === 'failed' && errors.length === 0\n ? [intl.formatMessage(messages.embedFailed)]\n : errors;\n return (\n <div className={styles.embed}>\n <TextInput\n {...props}\n type=\"url\"\n inputMode=\"url\"\n autoComplete=\"off\"\n value={url}\n onChange={(next) => onChange?.(next.trim() === '' ? null : { url: next.trim() })}\n onBlur={() => onBlur?.()}\n errors={shownErrors}\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n />\n {current === 'loading' ? (\n <div className={styles.status} role=\"status\">\n <Spinner size=\"sm\" />\n {intl.formatMessage(messages.embedLoading)}\n </div>\n ) : null}\n {value !== null && value !== undefined && isResolved(value) ? (\n <a className={styles.preview} href={value.url} target=\"_blank\" rel=\"noreferrer\">\n {value.thumbnailUrl !== undefined ? (\n <img className={styles.thumbnail} src={value.thumbnailUrl} alt=\"\" />\n ) : null}\n <span className={styles.text}>\n <span className={styles.title}>{value.title ?? value.url}</span>\n {value.provider !== undefined ? (\n <span className={styles.provider}>{value.provider}</span>\n ) : null}\n </span>\n </a>\n ) : null}\n </div>\n );\n}\n\n/** The `embed` type: its preview comes from the embed source of the `FieldsProvider`. */\nexport function EmbedFieldEntry(props: FieldEntryProps) {\n return (\n <EmbedField\n {...getFieldProps(props)}\n value={isEmbed(props.value) ? props.value : null}\n onChange={props.onChange}\n />\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"EmbedField.js","names":["useEffect","useEffectEvent","useState","EmbedValue","Spinner","TextInput","usePanneauIntl","useFieldsContext","EmbedSource","getFieldProps","isString","messages","FieldEntryProps","FieldProps","styles","RESOLVE_DELAY","EmbedFieldProps","placeholder","embedSource","isEmbed","value","Record","url","isResolved","Object","keys","some","key","EmbedField","t0","$","_c","disabled","embedSourceProp","onBlur","onChange","props","readOnly","required","t1","errors","t2","undefined","intl","context","status","setStatus","pending","t3","embed","resolved","t4","URL","canParse","controller","AbortController","timeout","window","setTimeout","state","resolve","signal","then","embed_0","catch","aborted","clearTimeout","abort","t5","current","t6","length","formatMessage","embedFailed","shownErrors","t7","next","trim","t8","t9","t10","embedLoading","t11","preview","thumbnailUrl","thumbnail","text","title","provider","t12","EmbedFieldEntry","_c","styles"],"sources":["../../src/embed/EmbedField.tsx"],"sourcesContent":["import { useEffect, useEffectEvent, useState } from 'react';\n\nimport type { EmbedValue } from '@panneau/protocol';\nimport { Spinner, TextInput, usePanneauIntl } from '@panneau/ui';\n\nimport { useFieldsContext } from '../shared/context';\nimport type { EmbedSource } from '../shared/embed';\nimport { getFieldProps, isString } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\nimport styles from './EmbedField.module.css';\n\nexport type { EmbedValue };\n\nconst RESOLVE_DELAY = 500;\n\nexport interface EmbedFieldProps extends FieldProps<EmbedValue> {\n placeholder?: string;\n /** Where the preview comes from. Defaults to that of the `FieldsProvider`. */\n embedSource?: EmbedSource | null;\n}\n\n/** Whether a value is an embed: an object with a `url`. */\nexport function isEmbed(value: unknown): value is EmbedValue {\n return (\n value !== null &&\n typeof value === 'object' &&\n isString((value as Record<string, unknown>).url)\n );\n}\n\n/** Whether a value has been resolved: it has more than its URL. */\nfunction isResolved(value: EmbedValue): boolean {\n return Object.keys(value).some((key) => key !== 'url');\n}\n\n/**\n * A URL of a video, a sound or a post, with the preview the backend gets from its provider's\n * oEmbed: its thumbnail, title and provider. The URL is kept as soon as it is typed, and its\n * preview follows. Without an embed source, the value is the URL alone.\n */\nexport function EmbedField({\n value,\n onChange,\n onBlur,\n embedSource: embedSourceProp,\n errors = [],\n disabled,\n readOnly,\n required,\n ...props\n}: EmbedFieldProps) {\n const intl = usePanneauIntl();\n const context = useFieldsContext();\n const embedSource = embedSourceProp === undefined ? context.embedSource : embedSourceProp;\n const url = value?.url ?? '';\n const [status, setStatus] = useState<{ url: string; state: 'loading' | 'failed' } | null>(null);\n\n // Resolves a URL that hasn't been, after a pause in typing\n const pending = value !== null && value !== undefined && !isResolved(value) ? value.url : null;\n // `onChange` changes on every render of a form: the latest one gets the preview\n const resolved = useEffectEvent((embed: EmbedValue) => onChange?.(embed));\n useEffect(() => {\n if (embedSource === null || pending === null || !URL.canParse(pending)) {\n return undefined;\n }\n const controller = new AbortController();\n const timeout = window.setTimeout(() => {\n setStatus({ url: pending, state: 'loading' });\n embedSource\n .resolve(pending, { signal: controller.signal })\n .then((embed) => {\n setStatus(null);\n resolved({ ...embed, url: pending });\n })\n .catch(() => {\n if (!controller.signal.aborted) {\n setStatus({ url: pending, state: 'failed' });\n }\n });\n }, RESOLVE_DELAY);\n return () => {\n window.clearTimeout(timeout);\n controller.abort();\n };\n }, [embedSource, pending]);\n\n const current = status !== null && status.url === url ? status.state : null;\n const shownErrors =\n current === 'failed' && errors.length === 0\n ? [intl.formatMessage(messages.embedFailed)]\n : errors;\n return (\n <div className={styles.embed}>\n <TextInput\n {...props}\n type=\"url\"\n inputMode=\"url\"\n autoComplete=\"off\"\n value={url}\n onChange={(next) => onChange?.(next.trim() === '' ? null : { url: next.trim() })}\n onBlur={() => onBlur?.()}\n errors={shownErrors}\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n />\n {current === 'loading' ? (\n <div className={styles.status} role=\"status\">\n <Spinner size=\"sm\" />\n {intl.formatMessage(messages.embedLoading)}\n </div>\n ) : null}\n {value !== null && value !== undefined && isResolved(value) ? (\n <a className={styles.preview} href={value.url} target=\"_blank\" rel=\"noreferrer\">\n {value.thumbnailUrl !== undefined ? (\n <img className={styles.thumbnail} src={value.thumbnailUrl} alt=\"\" />\n ) : null}\n <span className={styles.text}>\n <span className={styles.title}>{value.title ?? value.url}</span>\n {value.provider !== undefined ? (\n <span className={styles.provider}>{value.provider}</span>\n ) : null}\n </span>\n </a>\n ) : null}\n </div>\n );\n}\n\n/** The `embed` type: its preview comes from the embed source of the `FieldsProvider`. */\nexport function EmbedFieldEntry(props: FieldEntryProps) {\n return (\n <EmbedField\n {...getFieldProps(props)}\n value={isEmbed(props.value) ? props.value : null}\n onChange={props.onChange}\n />\n );\n}\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export { EmbedField, EmbedFieldEntry, type EmbedFieldProps, type EmbedValue, isEmbed, } from './EmbedField';
2
- export { type EmbedAdapter, type EmbedSource, createEmbedSource } from '../shared/embed';
1
+ export { EmbedField, EmbedFieldEntry, type EmbedFieldProps, type EmbedValue, isEmbed, } from './EmbedField.js';
2
+ export { type EmbedAdapter, type EmbedSource, createEmbedSource } from '../shared/embed.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import type { StoredFile } from '@panneau/protocol';
2
- import type { FieldEntryProps, FieldProps } from '../shared/types';
3
- import type { UploadSource, UploadedFile } from '../upload/types';
2
+ import type { FieldEntryProps, FieldProps } from '../shared/types.js';
3
+ import type { UploadSource, UploadedFile } from '../upload/types.js';
4
4
  /**
5
5
  * A file of a `file` value: a stored file, as items give it; an upload, once the browser sent the
6
6
  * file to storage; or the file itself, sent in a multipart request without direct uploads.
@@ -1 +1 @@
1
- {"version":3,"file":"FileField.d.ts","sourceRoot":"","sources":["../../src/file/FileField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAInE,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAKlE;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,IAAI,CAAC;AAEzD,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACrF,mGAAmG;IACnG,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAClC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC5D,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,sBAAuB,SAAQ,kBAAkB;IAC9D,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAAC;IACpC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;CAClD;AAED,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,sBAAsB,CAAC;AAY3E,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAS9D;AAED,gDAAgD;AAChD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,CAKnD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BAgI9C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,+BAYpD"}
1
+ {"version":3,"file":"FileField.d.ts","sourceRoot":"","sources":["../../src/file/FileField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAInE,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAKlE;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,IAAI,CAAC;AAEzD,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACrF,mGAAmG;IACnG,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAClC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC5D,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,sBAAuB,SAAQ,kBAAkB;IAC9D,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAAC;IACpC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;CAClD;AAED,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,sBAAsB,CAAC;AAY3E,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAS9D;AAED,gDAAgD;AAChD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,CAKnD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BAiI9C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,+BAYpD"}