@panneau/fields 5.0.0-alpha.5 → 5.0.0-alpha.7
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.
- package/README.md +34 -0
- package/dist/boolean/BooleanField.js +78 -17
- package/dist/boolean/BooleanField.js.map +1 -1
- package/dist/color/ColorField.js.map +1 -1
- package/dist/date/DateField.js.map +1 -1
- package/dist/datetime/DateTimeField.js +107 -20
- package/dist/datetime/DateTimeField.js.map +1 -1
- package/dist/duration/DurationField.css +11 -0
- package/dist/duration/DurationField.d.ts +26 -0
- package/dist/duration/DurationField.d.ts.map +1 -0
- package/dist/duration/DurationField.js +214 -0
- package/dist/duration/DurationField.js.map +1 -0
- package/dist/duration/DurationField.module.js +12 -0
- package/dist/duration/DurationField.module.js.map +1 -0
- package/dist/duration/index.d.ts +2 -0
- package/dist/duration/index.d.ts.map +1 -0
- package/dist/duration/index.js +1 -0
- package/dist/email/EmailField.js.map +1 -1
- package/dist/embed/EmbedField.css +60 -0
- package/dist/embed/EmbedField.d.ts +20 -0
- package/dist/embed/EmbedField.d.ts.map +1 -0
- package/dist/embed/EmbedField.js +246 -0
- package/dist/embed/EmbedField.js.map +1 -0
- package/dist/embed/EmbedField.module.js +22 -0
- package/dist/embed/EmbedField.module.js.map +1 -0
- package/dist/embed/index.d.ts +3 -0
- package/dist/embed/index.d.ts.map +1 -0
- package/dist/embed/index.js +3 -0
- package/dist/file/FileField.d.ts.map +1 -1
- package/dist/file/FileField.js +167 -77
- package/dist/file/FileField.js.map +1 -1
- package/dist/group/GroupField.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/json/JsonField.css +7 -0
- package/dist/json/JsonField.d.ts +22 -0
- package/dist/json/JsonField.d.ts.map +1 -0
- package/dist/json/JsonField.js +207 -0
- package/dist/json/JsonField.js.map +1 -0
- package/dist/json/JsonField.module.js +8 -0
- package/dist/json/JsonField.module.js.map +1 -0
- package/dist/json/index.d.ts +2 -0
- package/dist/json/index.d.ts.map +1 -0
- package/dist/json/index.js +1 -0
- package/dist/locales/index.js.map +1 -1
- package/dist/localized/LocalizedField.js.map +1 -1
- package/dist/location/LocationField.css +54 -0
- package/dist/location/LocationField.d.ts +31 -0
- package/dist/location/LocationField.d.ts.map +1 -0
- package/dist/location/LocationField.js +563 -0
- package/dist/location/LocationField.js.map +1 -0
- package/dist/location/LocationField.module.js +22 -0
- package/dist/location/LocationField.module.js.map +1 -0
- package/dist/location/LocationMap.d.ts +25 -0
- package/dist/location/LocationMap.d.ts.map +1 -0
- package/dist/location/LocationMap.js +205 -0
- package/dist/location/LocationMap.js.map +1 -0
- package/dist/location/index.d.ts +5 -0
- package/dist/location/index.d.ts.map +1 -0
- package/dist/location/index.js +4 -0
- package/dist/location/leafletCss.d.ts +2 -0
- package/dist/location/leafletCss.d.ts.map +1 -0
- package/dist/location/leafletCss.js +6 -0
- package/dist/location/leafletCss.js.map +1 -0
- package/dist/location/nominatim.d.ts +17 -0
- package/dist/location/nominatim.d.ts.map +1 -0
- package/dist/location/nominatim.js +50 -0
- package/dist/location/nominatim.js.map +1 -0
- package/dist/location/types.d.ts +40 -0
- package/dist/location/types.d.ts.map +1 -0
- package/dist/missing/MissingField.d.ts +3 -2
- package/dist/missing/MissingField.d.ts.map +1 -1
- package/dist/missing/MissingField.js +3 -2
- package/dist/missing/MissingField.js.map +1 -1
- package/dist/number/NumberField.js.map +1 -1
- package/dist/range/RangeField.d.ts +22 -0
- package/dist/range/RangeField.d.ts.map +1 -0
- package/dist/range/RangeField.js +203 -0
- package/dist/range/RangeField.js.map +1 -0
- package/dist/range/index.d.ts +2 -0
- package/dist/range/index.d.ts.map +1 -0
- package/dist/range/index.js +1 -0
- package/dist/relation/RelationField.js +485 -145
- package/dist/relation/RelationField.js.map +1 -1
- package/dist/repeater/RepeaterField.js +118 -34
- package/dist/repeater/RepeaterField.js.map +1 -1
- package/dist/select/SelectField.js.map +1 -1
- package/dist/shared/DefinitionField.js.map +1 -1
- package/dist/shared/builtIn.d.ts +1 -0
- package/dist/shared/builtIn.d.ts.map +1 -1
- package/dist/shared/builtIn.js +16 -1
- package/dist/shared/builtIn.js.map +1 -1
- package/dist/shared/check.js.map +1 -1
- package/dist/shared/context.d.ts +13 -3
- package/dist/shared/context.d.ts.map +1 -1
- package/dist/shared/context.js +27 -19
- package/dist/shared/context.js.map +1 -1
- package/dist/shared/cx.js.map +1 -1
- package/dist/shared/dates.js.map +1 -1
- package/dist/shared/embed.d.ts +19 -0
- package/dist/shared/embed.d.ts.map +1 -0
- package/dist/shared/embed.js +14 -0
- package/dist/shared/embed.js.map +1 -0
- package/dist/shared/entry.js.map +1 -1
- package/dist/shared/relation.js.map +1 -1
- package/dist/slug/SlugField.d.ts.map +1 -1
- package/dist/slug/SlugField.js +184 -36
- package/dist/slug/SlugField.js.map +1 -1
- package/dist/tags/TagsField.d.ts +17 -0
- package/dist/tags/TagsField.d.ts.map +1 -0
- package/dist/tags/TagsField.js +120 -0
- package/dist/tags/TagsField.js.map +1 -0
- package/dist/tags/index.d.ts +2 -0
- package/dist/tags/index.d.ts.map +1 -0
- package/dist/tags/index.js +1 -0
- package/dist/tel/TelField.d.ts +11 -0
- package/dist/tel/TelField.d.ts.map +1 -0
- package/dist/tel/TelField.js +87 -0
- package/dist/tel/TelField.js.map +1 -0
- package/dist/tel/index.d.ts +2 -0
- package/dist/tel/index.d.ts.map +1 -0
- package/dist/tel/index.js +1 -0
- package/dist/text/TextField.js.map +1 -1
- package/dist/textarea/TextAreaField.js.map +1 -1
- package/dist/time/TimeField.js +64 -10
- package/dist/time/TimeField.js.map +1 -1
- package/dist/upload/FilePicker.js +107 -24
- package/dist/upload/FilePicker.js.map +1 -1
- package/dist/upload/UploadList.js.map +1 -1
- package/dist/upload/files.js.map +1 -1
- package/dist/upload/useRejectionMessage.js.map +1 -1
- package/dist/upload/useUploads.js.map +1 -1
- package/dist/uppy/uploader.js.map +1 -1
- package/dist/url/UrlField.js +69 -14
- package/dist/url/UrlField.js.map +1 -1
- package/package.json +41 -4
package/README.md
CHANGED
|
@@ -34,6 +34,13 @@ Every field takes `value`, `onChange`, `onBlur`, `errors`, `disabled`, `readOnly
|
|
|
34
34
|
| `@panneau/fields/url` | `UrlField` | `string`, with `https://` added on blur |
|
|
35
35
|
| `@panneau/fields/color` | `ColorField` | `'#1d4ed8'` |
|
|
36
36
|
| `@panneau/fields/slug` | `SlugField`, `slugify()`, `sourceText()` | `string`, following a `source` until edited, checked with `onCheck` |
|
|
37
|
+
| `@panneau/fields/tel` | `TelField` | `string`, as typed |
|
|
38
|
+
| `@panneau/fields/range` | `RangeField` (a slider) | `number`, `null` until moved |
|
|
39
|
+
| `@panneau/fields/duration` | `DurationField`, `formatDuration()` | seconds, typed in hours, minutes and seconds |
|
|
40
|
+
| `@panneau/fields/json` | `JsonField`, `parseJson()` | an object or an array; the text while it doesn't parse |
|
|
41
|
+
| `@panneau/fields/tags` | `TagsField` | a list of strings, free or among suggestions |
|
|
42
|
+
| `@panneau/fields/embed` | `EmbedField` | `{ url, title, thumbnailUrl, … }`, from the backend (below) |
|
|
43
|
+
| `@panneau/fields/location` | `LocationField`, `createNominatimSource()` | `{ lat, lng, address }`, on a map (below) |
|
|
37
44
|
| `@panneau/fields/localized` | `LocalizedField` | `{ fr: …, en: … }` |
|
|
38
45
|
| `@panneau/fields/group` | `GroupField` | an object |
|
|
39
46
|
| `@panneau/fields/repeater` | `RepeaterField` (items or typed blocks) | a list of objects; blocks have a `type` |
|
|
@@ -119,3 +126,30 @@ import { createFieldCheckSource } from '@panneau/fields';
|
|
|
119
126
|
```
|
|
120
127
|
|
|
121
128
|
Without one, fields don't check, and the slug shows its fixed `settings.prefix`.
|
|
129
|
+
|
|
130
|
+
## Embeds and places
|
|
131
|
+
|
|
132
|
+
An `embed` field shows the title and the thumbnail of a URL's video, sound or post. It gets them from the backend (`GET /embeds`), through the embed source of the provider; without one, it keeps the URL alone:
|
|
133
|
+
|
|
134
|
+
```tsx
|
|
135
|
+
import { createEmbedSource } from '@panneau/fields';
|
|
136
|
+
|
|
137
|
+
<FieldsProvider embedSource={createEmbedSource(adapter)}>…</FieldsProvider>;
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
A `location` field places a point on a Leaflet map, loaded when the field is first shown. The tiles are OpenStreetMap's by default. `maps` sets other tiles and an address search, a `GeocodingSource`: `createNominatimSource()` searches OpenStreetMap's Nominatim, whose [usage policy](https://operations.osmfoundation.org/policies/nominatim/) suits small volumes; a product with more uses its own service. Without a geocoding source, the field has no address search, and the latitude and longitude are typed or picked on the map.
|
|
141
|
+
|
|
142
|
+
```tsx
|
|
143
|
+
import { createNominatimSource } from '@panneau/fields';
|
|
144
|
+
|
|
145
|
+
<FieldsProvider
|
|
146
|
+
maps={{
|
|
147
|
+
tiles: { url: 'https://tiles.example.com/{z}/{x}/{y}.png', attribution: '© Example' },
|
|
148
|
+
geocoding: createNominatimSource({ email: 'dev@example.com', countryCodes: ['ca'] }),
|
|
149
|
+
}}
|
|
150
|
+
>
|
|
151
|
+
…
|
|
152
|
+
</FieldsProvider>;
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
`<Panneau>` and `createPanneauApp()` give the embed source of their adapter, and take `maps`.
|
|
@@ -4,23 +4,84 @@ import { Checkbox, Switch } from "@panneau/ui";
|
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
5
|
//#region src/boolean/BooleanField.tsx
|
|
6
6
|
/** A yes or no value, as a checkbox or a switch with its label. An empty value is `false`. */
|
|
7
|
-
function BooleanField(
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
7
|
+
function BooleanField(t0) {
|
|
8
|
+
const $ = c(24);
|
|
9
|
+
let controlClassName;
|
|
10
|
+
let disabled;
|
|
11
|
+
let label;
|
|
12
|
+
let onChange;
|
|
13
|
+
let props;
|
|
14
|
+
let readOnly;
|
|
15
|
+
let required;
|
|
16
|
+
let t1;
|
|
17
|
+
let value;
|
|
18
|
+
if ($[0] !== t0) {
|
|
19
|
+
({value, onChange, label, widget: t1, disabled, readOnly, required, controlClassName, ...props} = t0);
|
|
20
|
+
$[0] = t0;
|
|
21
|
+
$[1] = controlClassName;
|
|
22
|
+
$[2] = disabled;
|
|
23
|
+
$[3] = label;
|
|
24
|
+
$[4] = onChange;
|
|
25
|
+
$[5] = props;
|
|
26
|
+
$[6] = readOnly;
|
|
27
|
+
$[7] = required;
|
|
28
|
+
$[8] = t1;
|
|
29
|
+
$[9] = value;
|
|
30
|
+
} else {
|
|
31
|
+
controlClassName = $[1];
|
|
32
|
+
disabled = $[2];
|
|
33
|
+
label = $[3];
|
|
34
|
+
onChange = $[4];
|
|
35
|
+
props = $[5];
|
|
36
|
+
readOnly = $[6];
|
|
37
|
+
required = $[7];
|
|
38
|
+
t1 = $[8];
|
|
39
|
+
value = $[9];
|
|
40
|
+
}
|
|
41
|
+
const widget = t1 === void 0 ? "checkbox" : t1;
|
|
42
|
+
const t2 = value === true;
|
|
43
|
+
let t3;
|
|
44
|
+
if ($[10] !== onChange) {
|
|
45
|
+
t3 = (next) => onChange?.(next);
|
|
46
|
+
$[10] = onChange;
|
|
47
|
+
$[11] = t3;
|
|
48
|
+
} else t3 = $[11];
|
|
49
|
+
let t4;
|
|
50
|
+
if ($[12] !== disabled || $[13] !== label || $[14] !== props || $[15] !== readOnly || $[16] !== required || $[17] !== t2 || $[18] !== t3) {
|
|
51
|
+
t4 = {
|
|
52
|
+
...props,
|
|
53
|
+
isSelected: t2,
|
|
54
|
+
onChange: t3,
|
|
55
|
+
isDisabled: disabled,
|
|
56
|
+
isReadOnly: readOnly,
|
|
57
|
+
isRequired: required,
|
|
58
|
+
children: label
|
|
59
|
+
};
|
|
60
|
+
$[12] = disabled;
|
|
61
|
+
$[13] = label;
|
|
62
|
+
$[14] = props;
|
|
63
|
+
$[15] = readOnly;
|
|
64
|
+
$[16] = required;
|
|
65
|
+
$[17] = t2;
|
|
66
|
+
$[18] = t3;
|
|
67
|
+
$[19] = t4;
|
|
68
|
+
} else t4 = $[19];
|
|
69
|
+
const shared = t4;
|
|
70
|
+
let t5;
|
|
71
|
+
if ($[20] !== controlClassName || $[21] !== shared || $[22] !== widget) {
|
|
72
|
+
t5 = widget === "switch" ? /* @__PURE__ */ jsx(Switch, {
|
|
73
|
+
...shared,
|
|
74
|
+
switchClassName: controlClassName
|
|
75
|
+
}) : /* @__PURE__ */ jsx(Checkbox, {
|
|
76
|
+
...shared,
|
|
77
|
+
checkboxClassName: controlClassName
|
|
78
|
+
});
|
|
79
|
+
$[20] = controlClassName;
|
|
80
|
+
$[21] = shared;
|
|
81
|
+
$[22] = widget;
|
|
82
|
+
$[23] = t5;
|
|
83
|
+
} else t5 = $[23];
|
|
84
|
+
return t5;
|
|
24
85
|
}
|
|
25
86
|
/** The `boolean` type: setting `widget` (`checkbox` or `switch`). */
|
|
26
87
|
function BooleanFieldEntry(props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BooleanField.js","names":["_c"],"sources":["../../src/boolean/BooleanField.tsx"],"sourcesContent":["import { Checkbox, Switch } from '@panneau/ui';\n\nimport { getFieldProps, getSetting, isString } from '../shared/entry';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\n\nexport interface BooleanFieldProps extends Omit<FieldProps<boolean>, 'labelClassName'> {\n /** `checkbox` (default) for a choice saved with the form, `switch` for an on and off setting. */\n widget?: 'checkbox' | 'switch';\n controlClassName?: string;\n}\n\n/** A yes or no value, as a checkbox or a switch with its label. An empty value is `false`. */\nexport function BooleanField({\n value,\n onChange,\n label,\n widget = 'checkbox',\n disabled,\n readOnly,\n required,\n controlClassName,\n ...props\n}: BooleanFieldProps) {\n const shared = {\n ...props,\n isSelected: value === true,\n onChange: (next: boolean) => onChange?.(next),\n isDisabled: disabled,\n isReadOnly: readOnly,\n isRequired: required,\n children: label,\n };\n return widget === 'switch' ? (\n <Switch {...shared} switchClassName={controlClassName} />\n ) : (\n <Checkbox {...shared} checkboxClassName={controlClassName} />\n );\n}\n\n/** The `boolean` type: setting `widget` (`checkbox` or `switch`). */\nexport function BooleanFieldEntry(props: FieldEntryProps) {\n const widget = getSetting(props.field, 'widget', isString);\n return (\n <BooleanField\n {...getFieldProps(props)}\n value={props.value === true}\n onChange={props.onChange}\n {...(widget === 'switch' || widget === 'checkbox' ? { widget } : {})}\n />\n );\n}\n"],"mappings":";;;;;;AAYA,
|
|
1
|
+
{"version":3,"file":"BooleanField.js","names":["Checkbox","Switch","getFieldProps","getSetting","isString","FieldEntryProps","FieldProps","BooleanFieldProps","Omit","widget","controlClassName","BooleanField","t0","$","_c","disabled","label","onChange","props","readOnly","required","t1","value","undefined","t2","t3","next","t4","isSelected","isDisabled","isReadOnly","isRequired","children","shared","t5","BooleanFieldEntry","field","_c"],"sources":["../../src/boolean/BooleanField.tsx"],"sourcesContent":["import { Checkbox, Switch } from '@panneau/ui';\n\nimport { getFieldProps, getSetting, isString } from '../shared/entry';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\n\nexport interface BooleanFieldProps extends Omit<FieldProps<boolean>, 'labelClassName'> {\n /** `checkbox` (default) for a choice saved with the form, `switch` for an on and off setting. */\n widget?: 'checkbox' | 'switch';\n controlClassName?: string;\n}\n\n/** A yes or no value, as a checkbox or a switch with its label. An empty value is `false`. */\nexport function BooleanField({\n value,\n onChange,\n label,\n widget = 'checkbox',\n disabled,\n readOnly,\n required,\n controlClassName,\n ...props\n}: BooleanFieldProps) {\n const shared = {\n ...props,\n isSelected: value === true,\n onChange: (next: boolean) => onChange?.(next),\n isDisabled: disabled,\n isReadOnly: readOnly,\n isRequired: required,\n children: label,\n };\n return widget === 'switch' ? (\n <Switch {...shared} switchClassName={controlClassName} />\n ) : (\n <Checkbox {...shared} checkboxClassName={controlClassName} />\n );\n}\n\n/** The `boolean` type: setting `widget` (`checkbox` or `switch`). */\nexport function BooleanFieldEntry(props: FieldEntryProps) {\n const widget = getSetting(props.field, 'widget', isString);\n return (\n <BooleanField\n {...getFieldProps(props)}\n value={props.value === true}\n onChange={props.onChange}\n {...(widget === 'switch' || widget === 'checkbox' ? { widget } : {})}\n />\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorField.js","names":["value","
|
|
1
|
+
{"version":3,"file":"ColorField.js","names":["usePanneauIntl","cx","getFieldProps","isString","messages","FieldEntryProps","TextField","TextFieldProps","styles","ColorFieldProps","Omit","normalizeColor","value","trimmed","trim","toLowerCase","digits","replace","test","map","digit","join","ColorField","t0","$","_c","disabled","inputClassName","onBlur","onChange","props","readOnly","intl","t1","undefined","valid","t2","input","t3","next","t4","t5","backgroundColor","t6","t7","event","target","t8","t9","formatMessage","pickColor","t10","picker","t11","swatch","t12","ColorFieldEntry","_c","styles"],"sources":["../../src/color/ColorField.tsx"],"sourcesContent":["import { usePanneauIntl } from '@panneau/ui';\n\nimport { cx } from '../shared/cx';\nimport { getFieldProps, isString } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps } from '../shared/types';\nimport { TextField, type TextFieldProps } from '../text/TextField';\nimport styles from './ColorField.module.css';\n\nexport type ColorFieldProps = Omit<TextFieldProps, 'type' | 'prefix' | 'maxLength'>;\n\n/**\n * Normalizes a hexadecimal color: `#` prefix, lowercase, and 3 digits expanded to 6. Returns the\n * text as is when it isn't a hexadecimal color.\n */\nexport function normalizeColor(value: string): string {\n const trimmed = value.trim().toLowerCase();\n const digits = trimmed.replace(/^#/, '');\n if (/^[0-9a-f]{3}$/.test(digits)) {\n return `#${[...digits].map((digit) => digit + digit).join('')}`;\n }\n if (/^[0-9a-f]{6}$/.test(digits) || /^[0-9a-f]{8}$/.test(digits)) {\n return `#${digits}`;\n }\n return trimmed;\n}\n\n/**\n * A color as a hexadecimal value (`#1d4ed8`): typed, or picked with the browser's color picker.\n * The value is normalized on blur.\n */\nexport function ColorField({\n value,\n onChange,\n onBlur,\n disabled,\n readOnly,\n inputClassName,\n ...props\n}: ColorFieldProps) {\n const intl = usePanneauIntl();\n const valid = value !== null && value !== undefined && /^#[0-9a-f]{6}$/i.test(value);\n return (\n <TextField\n autoComplete=\"off\"\n {...props}\n value={value}\n onChange={onChange}\n disabled={disabled}\n readOnly={readOnly}\n inputClassName={cx(styles.input, inputClassName)}\n onBlur={() => {\n if (value !== null && value !== undefined) {\n const next = normalizeColor(value);\n if (next !== value) {\n onChange?.(next === '' ? null : next);\n }\n }\n onBlur?.();\n }}\n prefix={\n <span\n className={styles.swatch}\n style={{ backgroundColor: valid ? value : 'transparent' }}\n >\n <input\n type=\"color\"\n className={styles.picker}\n value={valid ? value.toLowerCase() : '#000000'}\n onChange={(event) => onChange?.(event.target.value)}\n disabled={disabled === true || readOnly === true}\n aria-label={intl.formatMessage(messages.pickColor)}\n />\n </span>\n }\n />\n );\n}\n\n/** The `color` type. */\nexport function ColorFieldEntry(props: FieldEntryProps) {\n return (\n <ColorField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n />\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateField.js","names":["disabled","readOnly","required","_c"],"sources":["../../src/date/DateField.tsx"],"sourcesContent":["import { DatePicker } from '@panneau/ui';\n\nimport { toCalendarDate } from '../shared/dates';\nimport { getFieldProps, isString } from '../shared/entry';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\n\nexport interface DateFieldProps extends FieldProps<string> {\n /** Earliest date (`2026-01-01`). */\n min?: string;\n /** Latest date. */\n max?: string;\n controlClassName?: string;\n}\n\n/**\n * A date as an ISO string (`2026-10-15`), typed in the order of the locale or picked in a\n * calendar.\n */\nexport function DateField({\n value,\n onChange,\n min,\n max,\n disabled,\n readOnly,\n required,\n ...props\n}: DateFieldProps) {\n const minValue = toCalendarDate(min);\n const maxValue = toCalendarDate(max);\n return (\n <DatePicker\n {...props}\n granularity=\"day\"\n value={toCalendarDate(value)}\n onChange={(date) => onChange?.(date === null ? null : date.toString().slice(0, 10))}\n {...(minValue !== null ? { minValue } : {})}\n {...(maxValue !== null ? { maxValue } : {})}\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n />\n );\n}\n\n/** The `date` type. */\nexport function DateFieldEntry(props: FieldEntryProps) {\n return (\n <DateField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n />\n );\n}\n"],"mappings":";;;;;;;;;;AAkBA,
|
|
1
|
+
{"version":3,"file":"DateField.js","names":["DatePicker","toCalendarDate","getFieldProps","isString","FieldEntryProps","FieldProps","DateFieldProps","min","max","controlClassName","DateField","t0","$","_c","disabled","onChange","props","readOnly","required","value","t1","minValue","t2","maxValue","t3","t4","date","toString","slice","t5","t6","t7","DateFieldEntry","_c"],"sources":["../../src/date/DateField.tsx"],"sourcesContent":["import { DatePicker } from '@panneau/ui';\n\nimport { toCalendarDate } from '../shared/dates';\nimport { getFieldProps, isString } from '../shared/entry';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\n\nexport interface DateFieldProps extends FieldProps<string> {\n /** Earliest date (`2026-01-01`). */\n min?: string;\n /** Latest date. */\n max?: string;\n controlClassName?: string;\n}\n\n/**\n * A date as an ISO string (`2026-10-15`), typed in the order of the locale or picked in a\n * calendar.\n */\nexport function DateField({\n value,\n onChange,\n min,\n max,\n disabled,\n readOnly,\n required,\n ...props\n}: DateFieldProps) {\n const minValue = toCalendarDate(min);\n const maxValue = toCalendarDate(max);\n return (\n <DatePicker\n {...props}\n granularity=\"day\"\n value={toCalendarDate(value)}\n onChange={(date) => onChange?.(date === null ? null : date.toString().slice(0, 10))}\n {...(minValue !== null ? { minValue } : {})}\n {...(maxValue !== null ? { maxValue } : {})}\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n />\n );\n}\n\n/** The `date` type. */\nexport function DateFieldEntry(props: FieldEntryProps) {\n return (\n <DateField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n />\n );\n}\n"],"mappings":"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"}
|
|
@@ -10,28 +10,115 @@ import { getLocalTimeZone, now } from "@internationalized/date";
|
|
|
10
10
|
* the time zone of the browser and written back in UTC. Values without one
|
|
11
11
|
* (`2026-10-15T09:30:00`) are kept without one.
|
|
12
12
|
*/
|
|
13
|
-
function DateTimeField(
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
13
|
+
function DateTimeField(t0) {
|
|
14
|
+
const $ = c(34);
|
|
15
|
+
let disabled;
|
|
16
|
+
let onChange;
|
|
17
|
+
let props;
|
|
18
|
+
let readOnly;
|
|
19
|
+
let required;
|
|
20
|
+
let t1;
|
|
21
|
+
let t2;
|
|
22
|
+
let value;
|
|
23
|
+
if ($[0] !== t0) {
|
|
24
|
+
({value, onChange, timeZone: t1, withSeconds: t2, disabled, readOnly, required, ...props} = t0);
|
|
25
|
+
$[0] = t0;
|
|
26
|
+
$[1] = disabled;
|
|
27
|
+
$[2] = onChange;
|
|
28
|
+
$[3] = props;
|
|
29
|
+
$[4] = readOnly;
|
|
30
|
+
$[5] = required;
|
|
31
|
+
$[6] = t1;
|
|
32
|
+
$[7] = t2;
|
|
33
|
+
$[8] = value;
|
|
34
|
+
} else {
|
|
35
|
+
disabled = $[1];
|
|
36
|
+
onChange = $[2];
|
|
37
|
+
props = $[3];
|
|
38
|
+
readOnly = $[4];
|
|
39
|
+
required = $[5];
|
|
40
|
+
t1 = $[6];
|
|
41
|
+
t2 = $[7];
|
|
42
|
+
value = $[8];
|
|
43
|
+
}
|
|
44
|
+
let T0;
|
|
45
|
+
let t3;
|
|
46
|
+
let t4;
|
|
47
|
+
let t5;
|
|
48
|
+
let t6;
|
|
49
|
+
let t7;
|
|
50
|
+
let t8;
|
|
51
|
+
if ($[9] !== onChange || $[10] !== props || $[11] !== t1 || $[12] !== t2 || $[13] !== value) {
|
|
52
|
+
const timeZone = t1 === void 0 ? getLocalTimeZone() : t1;
|
|
53
|
+
const withSeconds = t2 === void 0 ? false : t2;
|
|
54
|
+
const current = toDateTime(value, timeZone);
|
|
55
|
+
T0 = DatePicker;
|
|
56
|
+
t3 = props;
|
|
57
|
+
t4 = withSeconds ? "second" : "minute";
|
|
58
|
+
t5 = true;
|
|
59
|
+
t6 = current;
|
|
60
|
+
if ($[21] !== onChange) {
|
|
61
|
+
t7 = (next) => {
|
|
62
|
+
if (next === null) {
|
|
63
|
+
onChange?.(null);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if ("hour" in next) onChange?.(fromDateTime(next));
|
|
67
|
+
};
|
|
68
|
+
$[21] = onChange;
|
|
69
|
+
$[22] = t7;
|
|
70
|
+
} else t7 = $[22];
|
|
71
|
+
t8 = current ?? now(timeZone).set({
|
|
28
72
|
second: 0,
|
|
29
73
|
millisecond: 0
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
74
|
+
});
|
|
75
|
+
$[9] = onChange;
|
|
76
|
+
$[10] = props;
|
|
77
|
+
$[11] = t1;
|
|
78
|
+
$[12] = t2;
|
|
79
|
+
$[13] = value;
|
|
80
|
+
$[14] = T0;
|
|
81
|
+
$[15] = t3;
|
|
82
|
+
$[16] = t4;
|
|
83
|
+
$[17] = t5;
|
|
84
|
+
$[18] = t6;
|
|
85
|
+
$[19] = t7;
|
|
86
|
+
$[20] = t8;
|
|
87
|
+
} else {
|
|
88
|
+
T0 = $[14];
|
|
89
|
+
t3 = $[15];
|
|
90
|
+
t4 = $[16];
|
|
91
|
+
t5 = $[17];
|
|
92
|
+
t6 = $[18];
|
|
93
|
+
t7 = $[19];
|
|
94
|
+
t8 = $[20];
|
|
95
|
+
}
|
|
96
|
+
let t9;
|
|
97
|
+
if ($[23] !== T0 || $[24] !== disabled || $[25] !== readOnly || $[26] !== required || $[27] !== t3 || $[28] !== t4 || $[29] !== t5 || $[30] !== t6 || $[31] !== t7 || $[32] !== t8) {
|
|
98
|
+
t9 = /* @__PURE__ */ jsx(T0, {
|
|
99
|
+
...t3,
|
|
100
|
+
granularity: t4,
|
|
101
|
+
hideTimeZone: t5,
|
|
102
|
+
value: t6,
|
|
103
|
+
onChange: t7,
|
|
104
|
+
placeholderValue: t8,
|
|
105
|
+
isDisabled: disabled,
|
|
106
|
+
isReadOnly: readOnly,
|
|
107
|
+
isRequired: required
|
|
108
|
+
});
|
|
109
|
+
$[23] = T0;
|
|
110
|
+
$[24] = disabled;
|
|
111
|
+
$[25] = readOnly;
|
|
112
|
+
$[26] = required;
|
|
113
|
+
$[27] = t3;
|
|
114
|
+
$[28] = t4;
|
|
115
|
+
$[29] = t5;
|
|
116
|
+
$[30] = t6;
|
|
117
|
+
$[31] = t7;
|
|
118
|
+
$[32] = t8;
|
|
119
|
+
$[33] = t9;
|
|
120
|
+
} else t9 = $[33];
|
|
121
|
+
return t9;
|
|
35
122
|
}
|
|
36
123
|
/** The `datetime` type: setting `timeZone`. */
|
|
37
124
|
function DateTimeFieldEntry(props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeField.js","names":["_c"],"sources":["../../src/datetime/DateTimeField.tsx"],"sourcesContent":["import { getLocalTimeZone, now } from '@internationalized/date';\n\nimport { DatePicker } from '@panneau/ui';\n\nimport { fromDateTime, toDateTime } from '../shared/dates';\nimport { getFieldProps, getSetting, isString } from '../shared/entry';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\n\nexport interface DateTimeFieldProps extends FieldProps<string> {\n /**\n * Time zone the date and time are shown and typed in, for values with an offset. Defaults to\n * the browser's.\n */\n timeZone?: string;\n /** Shows seconds. */\n withSeconds?: boolean;\n /** Defaults to the locale's. */\n hourCycle?: 12 | 24;\n controlClassName?: string;\n}\n\n/**\n * A date and a time as an ISO string. Values with an offset (`2026-10-15T13:30:00Z`) are shown in\n * the time zone of the browser and written back in UTC. Values without one\n * (`2026-10-15T09:30:00`) are kept without one.\n */\nexport function DateTimeField({\n value,\n onChange,\n timeZone = getLocalTimeZone(),\n withSeconds = false,\n disabled,\n readOnly,\n required,\n ...props\n}: DateTimeFieldProps) {\n const current = toDateTime(value, timeZone);\n return (\n <DatePicker\n {...props}\n granularity={withSeconds ? 'second' : 'minute'}\n hideTimeZone\n value={current}\n onChange={(next) => {\n if (next === null) {\n onChange?.(null);\n return;\n }\n if ('hour' in next) {\n onChange?.(fromDateTime(next));\n }\n }}\n // Typed from empty, a value is in the field's time zone, and written in UTC.\n placeholderValue={current ?? now(timeZone).set({ second: 0, millisecond: 0 })}\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n />\n );\n}\n\n/** The `datetime` type: setting `timeZone`. */\nexport function DateTimeFieldEntry(props: FieldEntryProps) {\n const timeZone = getSetting(props.field, 'timeZone', isString);\n return (\n <DateTimeField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n {...(timeZone !== undefined ? { timeZone } : {})}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;AA0BA,
|
|
1
|
+
{"version":3,"file":"DateTimeField.js","names":["getLocalTimeZone","now","DatePicker","fromDateTime","toDateTime","getFieldProps","getSetting","isString","FieldEntryProps","FieldProps","DateTimeFieldProps","timeZone","withSeconds","hourCycle","controlClassName","DateTimeField","t0","$","_c","disabled","onChange","props","readOnly","required","t1","t2","value","T0","t3","t4","t5","t6","t7","t8","undefined","current","next","set","second","millisecond","t9","DateTimeFieldEntry","field","_c"],"sources":["../../src/datetime/DateTimeField.tsx"],"sourcesContent":["import { getLocalTimeZone, now } from '@internationalized/date';\n\nimport { DatePicker } from '@panneau/ui';\n\nimport { fromDateTime, toDateTime } from '../shared/dates';\nimport { getFieldProps, getSetting, isString } from '../shared/entry';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\n\nexport interface DateTimeFieldProps extends FieldProps<string> {\n /**\n * Time zone the date and time are shown and typed in, for values with an offset. Defaults to\n * the browser's.\n */\n timeZone?: string;\n /** Shows seconds. */\n withSeconds?: boolean;\n /** Defaults to the locale's. */\n hourCycle?: 12 | 24;\n controlClassName?: string;\n}\n\n/**\n * A date and a time as an ISO string. Values with an offset (`2026-10-15T13:30:00Z`) are shown in\n * the time zone of the browser and written back in UTC. Values without one\n * (`2026-10-15T09:30:00`) are kept without one.\n */\nexport function DateTimeField({\n value,\n onChange,\n timeZone = getLocalTimeZone(),\n withSeconds = false,\n disabled,\n readOnly,\n required,\n ...props\n}: DateTimeFieldProps) {\n const current = toDateTime(value, timeZone);\n return (\n <DatePicker\n {...props}\n granularity={withSeconds ? 'second' : 'minute'}\n hideTimeZone\n value={current}\n onChange={(next) => {\n if (next === null) {\n onChange?.(null);\n return;\n }\n if ('hour' in next) {\n onChange?.(fromDateTime(next));\n }\n }}\n // Typed from empty, a value is in the field's time zone, and written in UTC.\n placeholderValue={current ?? now(timeZone).set({ second: 0, millisecond: 0 })}\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n />\n );\n}\n\n/** The `datetime` type: setting `timeZone`. */\nexport function DateTimeFieldEntry(props: FieldEntryProps) {\n const timeZone = getSetting(props.field, 'timeZone', isString);\n return (\n <DateTimeField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n {...(timeZone !== undefined ? { timeZone } : {})}\n />\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { FieldEntryProps, FieldProps } from '../shared/types';
|
|
2
|
+
export interface DurationFieldProps extends FieldProps<number> {
|
|
3
|
+
/** `seconds` (the default) shows hours, minutes and seconds; `minutes` hides the seconds. */
|
|
4
|
+
precision?: 'seconds' | 'minutes';
|
|
5
|
+
}
|
|
6
|
+
/** Hours, minutes and seconds of a number of seconds. */
|
|
7
|
+
export declare function splitDuration(seconds: number): {
|
|
8
|
+
hours: number;
|
|
9
|
+
minutes: number;
|
|
10
|
+
seconds: number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* A duration with its units, without the empty ones: `1 h 5 min 30 s`, `3 min`. With a precision
|
|
14
|
+
* of minutes, the seconds are rounded away.
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatDuration(seconds: number, { precision }?: {
|
|
17
|
+
precision?: 'seconds' | 'minutes';
|
|
18
|
+
}): string;
|
|
19
|
+
/**
|
|
20
|
+
* A duration, in seconds, typed in hours, minutes and seconds. It is `null` while every part is
|
|
21
|
+
* empty.
|
|
22
|
+
*/
|
|
23
|
+
export declare function DurationField({ value, onChange, onBlur, precision, label, description, errors, disabled, readOnly, required, name, className, }: DurationFieldProps): import("react").JSX.Element;
|
|
24
|
+
/** The `duration` type: a number of seconds, with setting `precision` (`seconds` or `minutes`). */
|
|
25
|
+
export declare function DurationFieldEntry(props: FieldEntryProps): import("react").JSX.Element;
|
|
26
|
+
//# sourceMappingURL=DurationField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DurationField.d.ts","sourceRoot":"","sources":["../../src/duration/DurationField.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGnE,MAAM,WAAW,kBAAmB,SAAQ,UAAU,CAAC,MAAM,CAAC;IAC1D,6FAA6F;IAC7F,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACrC;AAED,yDAAyD;AACzD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB,CAOA;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,MAAM,EACf,EAAE,SAAqB,EAAE,GAAE;IAAE,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;CAAO,GACtE,MAAM,CAQR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAqB,EACrB,KAAK,EACL,WAAW,EACX,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,SAAS,GACZ,EAAE,kBAAkB,+BAyCpB;AAED,mGAAmG;AACnG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,+BAWxD"}
|