@byline/ui 2.5.2 → 2.6.1

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 (218) hide show
  1. package/dist/components/shimmer/shimmer.d.ts +13 -1
  2. package/dist/components/shimmer/shimmer.js +29 -20
  3. package/dist/components/shimmer/shimmer_module.css +4 -4
  4. package/dist/dnd/draggable-sortable/demo/draggable-list-demo.js +1 -1
  5. package/dist/react.d.ts +18 -54
  6. package/dist/react.js +0 -35
  7. package/dist/styles/styles.css +3 -0
  8. package/dist/uikit.d.ts +1 -0
  9. package/dist/uikit.js +1 -0
  10. package/package.json +2 -8
  11. package/src/components/shimmer/shimmer.module.css +8 -4
  12. package/src/components/shimmer/shimmer.tsx +34 -9
  13. package/src/dnd/draggable-sortable/demo/draggable-list-demo.tsx +1 -1
  14. package/src/react.ts +20 -68
  15. package/src/styles/functional/surfaces.css +13 -1
  16. package/src/uikit.ts +1 -0
  17. package/dist/admin/group.d.ts +0 -27
  18. package/dist/admin/group.js +0 -14
  19. package/dist/admin/group.module.js +0 -6
  20. package/dist/admin/group_module.css +0 -19
  21. package/dist/admin/row.d.ts +0 -25
  22. package/dist/admin/row.js +0 -8
  23. package/dist/admin/row.module.js +0 -5
  24. package/dist/admin/row_module.css +0 -18
  25. package/dist/admin/tabs.d.ts +0 -25
  26. package/dist/admin/tabs.js +0 -35
  27. package/dist/admin/tabs.module.js +0 -10
  28. package/dist/admin/tabs_module.css +0 -68
  29. package/dist/fields/array/array-field.d.ts +0 -14
  30. package/dist/fields/array/array-field.js +0 -176
  31. package/dist/fields/array/array-field.module.js +0 -11
  32. package/dist/fields/array/array-field_module.css +0 -32
  33. package/dist/fields/blocks/blocks-field.d.ts +0 -13
  34. package/dist/fields/blocks/blocks-field.js +0 -244
  35. package/dist/fields/blocks/blocks-field.module.js +0 -26
  36. package/dist/fields/blocks/blocks-field_module.css +0 -107
  37. package/dist/fields/checkbox/checkbox-field.d.ts +0 -16
  38. package/dist/fields/checkbox/checkbox-field.js +0 -28
  39. package/dist/fields/checkbox/checkbox-field.module.js +0 -6
  40. package/dist/fields/checkbox/checkbox-field_module.css +0 -4
  41. package/dist/fields/column-formatter.d.ts +0 -20
  42. package/dist/fields/column-formatter.js +0 -15
  43. package/dist/fields/date-time-formatter.d.ts +0 -16
  44. package/dist/fields/date-time-formatter.js +0 -8
  45. package/dist/fields/datetime/datetime-field.d.ts +0 -16
  46. package/dist/fields/datetime/datetime-field.js +0 -37
  47. package/dist/fields/datetime/datetime-field.module.js +0 -5
  48. package/dist/fields/datetime/datetime-field_module.css +0 -4
  49. package/dist/fields/draggable-context-menu.d.ts +0 -6
  50. package/dist/fields/draggable-context-menu.js +0 -83
  51. package/dist/fields/draggable-context-menu.module.js +0 -15
  52. package/dist/fields/draggable-context-menu_module.css +0 -91
  53. package/dist/fields/field-helpers.d.ts +0 -26
  54. package/dist/fields/field-helpers.js +0 -50
  55. package/dist/fields/field-renderer.d.ts +0 -37
  56. package/dist/fields/field-renderer.js +0 -206
  57. package/dist/fields/field-renderer.module.js +0 -8
  58. package/dist/fields/field-renderer_module.css +0 -11
  59. package/dist/fields/file/file-field.d.ts +0 -19
  60. package/dist/fields/file/file-field.js +0 -226
  61. package/dist/fields/file/file-field.module.js +0 -18
  62. package/dist/fields/file/file-field_module.css +0 -131
  63. package/dist/fields/file/file-upload-field.d.ts +0 -21
  64. package/dist/fields/file/file-upload-field.js +0 -128
  65. package/dist/fields/file/file-upload-field.module.js +0 -15
  66. package/dist/fields/file/file-upload-field_module.css +0 -74
  67. package/dist/fields/group/group-field.d.ts +0 -15
  68. package/dist/fields/group/group-field.js +0 -59
  69. package/dist/fields/group/group-field.module.js +0 -9
  70. package/dist/fields/group/group-field_module.css +0 -27
  71. package/dist/fields/image/image-field.d.ts +0 -19
  72. package/dist/fields/image/image-field.js +0 -242
  73. package/dist/fields/image/image-field.module.js +0 -22
  74. package/dist/fields/image/image-field_module.css +0 -121
  75. package/dist/fields/image/image-upload-field.d.ts +0 -21
  76. package/dist/fields/image/image-upload-field.js +0 -187
  77. package/dist/fields/image/image-upload-field.module.js +0 -19
  78. package/dist/fields/image/image-upload-field_module.css +0 -92
  79. package/dist/fields/local-date-time.d.ts +0 -27
  80. package/dist/fields/local-date-time.js +0 -49
  81. package/dist/fields/locale-badge.d.ts +0 -18
  82. package/dist/fields/locale-badge.js +0 -10
  83. package/dist/fields/locale-badge.module.js +0 -5
  84. package/dist/fields/locale-badge_module.css +0 -27
  85. package/dist/fields/numerical/numerical-field.d.ts +0 -18
  86. package/dist/fields/numerical/numerical-field.js +0 -74
  87. package/dist/fields/relation/relation-display.d.ts +0 -40
  88. package/dist/fields/relation/relation-display.js +0 -58
  89. package/dist/fields/relation/relation-display.module.js +0 -9
  90. package/dist/fields/relation/relation-display_module.css +0 -21
  91. package/dist/fields/relation/relation-field.d.ts +0 -18
  92. package/dist/fields/relation/relation-field.js +0 -146
  93. package/dist/fields/relation/relation-field.module.js +0 -13
  94. package/dist/fields/relation/relation-field_module.css +0 -62
  95. package/dist/fields/relation/relation-picker.d.ts +0 -49
  96. package/dist/fields/relation/relation-picker.js +0 -233
  97. package/dist/fields/relation/relation-picker.module.js +0 -26
  98. package/dist/fields/relation/relation-picker_module.css +0 -124
  99. package/dist/fields/relation/relation-summary.d.ts +0 -31
  100. package/dist/fields/relation/relation-summary.js +0 -50
  101. package/dist/fields/relation/relation-summary.module.js +0 -11
  102. package/dist/fields/relation/relation-summary_module.css +0 -37
  103. package/dist/fields/select/select-field.d.ts +0 -16
  104. package/dist/fields/select/select-field.js +0 -50
  105. package/dist/fields/select/select-field.module.js +0 -5
  106. package/dist/fields/select/select-field_module.css +0 -4
  107. package/dist/fields/sortable-item.d.ts +0 -15
  108. package/dist/fields/sortable-item.js +0 -80
  109. package/dist/fields/sortable-item.module.js +0 -22
  110. package/dist/fields/sortable-item_module.css +0 -124
  111. package/dist/fields/text/text-field.d.ts +0 -20
  112. package/dist/fields/text/text-field.js +0 -104
  113. package/dist/fields/text/text-field.module.js +0 -6
  114. package/dist/fields/text/text-field_module.css +0 -5
  115. package/dist/fields/text-area/text-area-field.d.ts +0 -20
  116. package/dist/fields/text-area/text-area-field.js +0 -105
  117. package/dist/fields/text-area/text-area-field.module.js +0 -6
  118. package/dist/fields/text-area/text-area-field_module.css +0 -5
  119. package/dist/fields/use-field-change-handler.d.ts +0 -23
  120. package/dist/fields/use-field-change-handler.js +0 -52
  121. package/dist/forms/document-actions.d.ts +0 -48
  122. package/dist/forms/document-actions.js +0 -469
  123. package/dist/forms/document-actions.module.js +0 -34
  124. package/dist/forms/document-actions_module.css +0 -118
  125. package/dist/forms/form-context.d.ts +0 -89
  126. package/dist/forms/form-context.js +0 -466
  127. package/dist/forms/form-renderer.d.ts +0 -98
  128. package/dist/forms/form-renderer.js +0 -591
  129. package/dist/forms/form-renderer.module.js +0 -46
  130. package/dist/forms/form-renderer_module.css +0 -245
  131. package/dist/forms/navigation-guard.d.ts +0 -54
  132. package/dist/forms/navigation-guard.js +0 -22
  133. package/dist/forms/path-widget.d.ts +0 -36
  134. package/dist/forms/path-widget.js +0 -107
  135. package/dist/forms/path-widget.module.js +0 -8
  136. package/dist/forms/path-widget_module.css +0 -29
  137. package/dist/forms/upload-executor.d.ts +0 -57
  138. package/dist/forms/upload-executor.js +0 -92
  139. package/dist/services/field-services-context.d.ts +0 -16
  140. package/dist/services/field-services-context.js +0 -13
  141. package/dist/services/field-services-types.d.ts +0 -63
  142. package/dist/services/field-services-types.js +0 -1
  143. package/dist/widgets/diff-viewer/diff-modal.d.ts +0 -22
  144. package/dist/widgets/diff-viewer/diff-modal.js +0 -146
  145. package/dist/widgets/diff-viewer/diff-modal.module.js +0 -14
  146. package/dist/widgets/diff-viewer/diff-modal_module.css +0 -56
  147. package/dist/widgets/status-badge/status-badge.d.ts +0 -25
  148. package/dist/widgets/status-badge/status-badge.js +0 -35
  149. package/dist/widgets/status-badge/status-badge.module.js +0 -7
  150. package/dist/widgets/status-badge/status-badge_module.css +0 -20
  151. package/src/admin/group.module.css +0 -41
  152. package/src/admin/group.tsx +0 -40
  153. package/src/admin/row.module.css +0 -32
  154. package/src/admin/row.tsx +0 -33
  155. package/src/admin/tabs.module.css +0 -107
  156. package/src/admin/tabs.tsx +0 -82
  157. package/src/fields/array/array-field.module.css +0 -48
  158. package/src/fields/array/array-field.tsx +0 -266
  159. package/src/fields/blocks/blocks-field.module.css +0 -148
  160. package/src/fields/blocks/blocks-field.tsx +0 -312
  161. package/src/fields/checkbox/checkbox-field.module.css +0 -4
  162. package/src/fields/checkbox/checkbox-field.tsx +0 -54
  163. package/src/fields/column-formatter.tsx +0 -31
  164. package/src/fields/date-time-formatter.tsx +0 -22
  165. package/src/fields/datetime/datetime-field.module.css +0 -13
  166. package/src/fields/datetime/datetime-field.tsx +0 -54
  167. package/src/fields/draggable-context-menu.module.css +0 -127
  168. package/src/fields/draggable-context-menu.tsx +0 -85
  169. package/src/fields/field-helpers.ts +0 -69
  170. package/src/fields/field-renderer.module.css +0 -22
  171. package/src/fields/field-renderer.tsx +0 -288
  172. package/src/fields/file/file-field.module.css +0 -153
  173. package/src/fields/file/file-field.tsx +0 -271
  174. package/src/fields/file/file-upload-field.module.css +0 -101
  175. package/src/fields/file/file-upload-field.tsx +0 -183
  176. package/src/fields/group/group-field.module.css +0 -43
  177. package/src/fields/group/group-field.tsx +0 -84
  178. package/src/fields/image/image-field.module.css +0 -155
  179. package/src/fields/image/image-field.tsx +0 -291
  180. package/src/fields/image/image-upload-field.module.css +0 -123
  181. package/src/fields/image/image-upload-field.tsx +0 -270
  182. package/src/fields/local-date-time.tsx +0 -88
  183. package/src/fields/locale-badge.module.css +0 -37
  184. package/src/fields/locale-badge.tsx +0 -32
  185. package/src/fields/numerical/numerical-field.tsx +0 -114
  186. package/src/fields/relation/relation-display.module.css +0 -36
  187. package/src/fields/relation/relation-display.tsx +0 -130
  188. package/src/fields/relation/relation-field.module.css +0 -83
  189. package/src/fields/relation/relation-field.tsx +0 -206
  190. package/src/fields/relation/relation-picker.module.css +0 -168
  191. package/src/fields/relation/relation-picker.tsx +0 -325
  192. package/src/fields/relation/relation-summary.module.css +0 -55
  193. package/src/fields/relation/relation-summary.tsx +0 -123
  194. package/src/fields/select/select-field.module.css +0 -13
  195. package/src/fields/select/select-field.tsx +0 -61
  196. package/src/fields/sortable-item.module.css +0 -167
  197. package/src/fields/sortable-item.tsx +0 -101
  198. package/src/fields/text/text-field.module.css +0 -13
  199. package/src/fields/text/text-field.tsx +0 -146
  200. package/src/fields/text-area/text-area-field.module.css +0 -13
  201. package/src/fields/text-area/text-area-field.tsx +0 -147
  202. package/src/fields/use-field-change-handler.ts +0 -112
  203. package/src/forms/document-actions.module.css +0 -160
  204. package/src/forms/document-actions.tsx +0 -487
  205. package/src/forms/form-context.tsx +0 -704
  206. package/src/forms/form-renderer.module.css +0 -321
  207. package/src/forms/form-renderer.tsx +0 -888
  208. package/src/forms/navigation-guard.tsx +0 -98
  209. package/src/forms/path-widget.module.css +0 -41
  210. package/src/forms/path-widget.test.tsx +0 -217
  211. package/src/forms/path-widget.tsx +0 -181
  212. package/src/forms/upload-executor.ts +0 -190
  213. package/src/services/field-services-context.tsx +0 -35
  214. package/src/services/field-services-types.ts +0 -68
  215. package/src/widgets/diff-viewer/diff-modal.module.css +0 -79
  216. package/src/widgets/diff-viewer/diff-modal.tsx +0 -184
  217. package/src/widgets/status-badge/status-badge.module.css +0 -31
  218. package/src/widgets/status-badge/status-badge.tsx +0 -69
@@ -1,105 +0,0 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import { useCallback } from "react";
3
- import classnames from "classnames";
4
- import { useFieldError, useFieldValue } from "../../forms/form-context.js";
5
- import { Label, TextArea } from "../../uikit.js";
6
- import { LocaleBadge } from "../locale-badge.js";
7
- import text_area_field_module from "./text-area-field.module.js";
8
- const TextAreaField = ({ field, value, defaultValue, onChange, id, path, locale, components })=>{
9
- const fieldPath = path ?? field.name;
10
- const fieldError = useFieldError(fieldPath);
11
- const fieldValue = useFieldValue(fieldPath);
12
- const incomingValue = value ?? fieldValue ?? defaultValue ?? '';
13
- const htmlId = id ?? fieldPath;
14
- const handleChange = useCallback((value)=>{
15
- if (onChange) onChange(value);
16
- }, [
17
- onChange
18
- ]);
19
- const slots = components;
20
- const CustomLabel = slots?.Label;
21
- const CustomHelpText = slots?.HelpText;
22
- const CustomField = slots?.Field;
23
- const BeforeField = slots?.beforeField;
24
- const AfterField = slots?.afterField;
25
- const slotBaseProps = {
26
- field: field,
27
- path: fieldPath,
28
- value: incomingValue,
29
- error: fieldError,
30
- id: htmlId
31
- };
32
- const showBadge = !!locale && !!field.label;
33
- const hasCustomLabel = !!CustomLabel;
34
- const suppressInputLabel = showBadge || hasCustomLabel;
35
- const suppressInputHelpText = !!CustomHelpText;
36
- const labelRowClass = classnames('byline-field-text-area-label-row', text_area_field_module["label-row"]);
37
- const renderLabel = ()=>{
38
- if (hasCustomLabel) return /*#__PURE__*/ jsxs("div", {
39
- className: labelRowClass,
40
- children: [
41
- /*#__PURE__*/ jsx(CustomLabel, {
42
- ...slotBaseProps,
43
- label: field.label,
44
- required: !field.optional
45
- }),
46
- showBadge && /*#__PURE__*/ jsx(LocaleBadge, {
47
- locale: locale
48
- })
49
- ]
50
- });
51
- if (showBadge) return /*#__PURE__*/ jsxs("div", {
52
- className: labelRowClass,
53
- children: [
54
- /*#__PURE__*/ jsx(Label, {
55
- id: `${htmlId}-label`,
56
- htmlFor: htmlId,
57
- label: field.label,
58
- required: !field.optional
59
- }),
60
- /*#__PURE__*/ jsx(LocaleBadge, {
61
- locale: locale
62
- })
63
- ]
64
- });
65
- return null;
66
- };
67
- const renderInput = ()=>{
68
- if (CustomField) return /*#__PURE__*/ jsx(CustomField, {
69
- ...slotBaseProps,
70
- onChange: handleChange,
71
- defaultValue: defaultValue,
72
- placeholder: field.placeholder
73
- });
74
- return /*#__PURE__*/ jsx(TextArea, {
75
- id: htmlId,
76
- name: field.name,
77
- label: suppressInputLabel ? void 0 : field.label,
78
- required: !field.optional,
79
- helpText: suppressInputHelpText ? void 0 : field.helpText,
80
- value: incomingValue,
81
- onChange: (e)=>handleChange(e.target.value),
82
- error: null != fieldError,
83
- errorText: fieldError,
84
- rows: 4
85
- });
86
- };
87
- return /*#__PURE__*/ jsxs("div", {
88
- className: `byline-field-text-area ${field.name}`,
89
- children: [
90
- renderLabel(),
91
- BeforeField && /*#__PURE__*/ jsx(BeforeField, {
92
- ...slotBaseProps
93
- }),
94
- renderInput(),
95
- AfterField && /*#__PURE__*/ jsx(AfterField, {
96
- ...slotBaseProps
97
- }),
98
- CustomHelpText && /*#__PURE__*/ jsx(CustomHelpText, {
99
- ...slotBaseProps,
100
- helpText: field.helpText
101
- })
102
- ]
103
- });
104
- };
105
- export { TextAreaField };
@@ -1,6 +0,0 @@
1
- import "./text-area-field_module.css";
2
- const text_area_field_module = {
3
- "label-row": "label-row-HwX7C9",
4
- labelRow: "label-row-HwX7C9"
5
- };
6
- export default text_area_field_module;
@@ -1,5 +0,0 @@
1
- :is(.label-row-HwX7C9, .byline-field-text-area-label-row) {
2
- align-items: center;
3
- display: flex;
4
- }
5
-
@@ -1,23 +0,0 @@
1
- /**
2
- * This Source Code is subject to the terms of the Mozilla Public
3
- * License, v. 2.0. If a copy of the MPL was not distributed with this
4
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
- *
6
- * Copyright (c) Infonomic Company Limited
7
- */
8
- import type { Field } from '@byline/core';
9
- /**
10
- * Returns a change handler for the given field that runs through the
11
- * field-hook pipeline before committing the value:
12
- *
13
- * 1. `clearFieldError(path)`
14
- * 2. `field.hooks.beforeValidate(ctx)` — advisory: may set an error on
15
- * the field but the value is **always** committed (user can keep typing)
16
- * 3. `field.hooks.beforeChange(ctx)` — may return `{ value }` to replace
17
- * or `{ error }` to block the change entirely
18
- * 4. `setFieldValue(path, finalValue)`
19
- *
20
- * When the field has no hooks the function is a zero-overhead pass-through
21
- * to `setFieldValue` (no promises, no extra allocations).
22
- */
23
- export declare function useFieldChangeHandler(field: Field, path: string): (value: any) => void;
@@ -1,52 +0,0 @@
1
- import { useCallback } from "react";
2
- import { normalizeHooks } from "@byline/core";
3
- import { useFormContext } from "../forms/form-context.js";
4
- function useFieldChangeHandler(field, path) {
5
- const { setFieldValue, getFieldValue, getFieldValues, setFieldError, clearFieldError } = useFormContext();
6
- return useCallback((value)=>{
7
- const hooks = field.hooks;
8
- const validateFns = normalizeHooks(hooks?.beforeValidate);
9
- const changeFns = normalizeHooks(hooks?.beforeChange);
10
- if (0 === validateFns.length && 0 === changeFns.length) return void setFieldValue(path, value);
11
- const previousValue = getFieldValue(path);
12
- const ctx = {
13
- value,
14
- previousValue,
15
- data: getFieldValues(),
16
- path,
17
- field,
18
- operation: 'change'
19
- };
20
- clearFieldError(path);
21
- if (0 === changeFns.length) setFieldValue(path, value);
22
- (async ()=>{
23
- try {
24
- let advisoryError;
25
- for (const fn of validateFns){
26
- const result = await fn(ctx);
27
- if (result?.error) advisoryError = result.error;
28
- if (result?.value !== void 0) ctx.value = result.value;
29
- }
30
- for (const fn of changeFns){
31
- const result = await fn(ctx);
32
- if (result?.error) return void setFieldError(path, result.error);
33
- if (result?.value !== void 0) ctx.value = result.value;
34
- }
35
- setFieldValue(path, ctx.value);
36
- if (advisoryError) setFieldError(path, advisoryError);
37
- } catch (err) {
38
- const message = err instanceof Error ? err.message : 'Unexpected hook error';
39
- setFieldError(path, message);
40
- }
41
- })();
42
- }, [
43
- field,
44
- path,
45
- setFieldValue,
46
- getFieldValue,
47
- getFieldValues,
48
- setFieldError,
49
- clearFieldError
50
- ]);
51
- }
52
- export { useFieldChangeHandler };
@@ -1,48 +0,0 @@
1
- import type { PublishedVersionInfo } from './form-renderer';
2
- /**
3
- * Shape of a content-locale option as consumed by the Copy-to-Locale
4
- * modal. Matches the host adapter's `ContentLocaleOption`; declared
5
- * locally so this package does not take a dependency on host code.
6
- */
7
- export interface DocumentActionsLocaleOption {
8
- code: string;
9
- label: string;
10
- }
11
- export declare function DocumentActions({ publishedVersion, onUnpublish, onDelete, onDuplicate, sourceTitle, onCopyToLocale, sourceLocale, contentLocales, }: {
12
- publishedVersion?: PublishedVersionInfo | null;
13
- onUnpublish?: () => Promise<void>;
14
- onDelete?: () => Promise<void>;
15
- /**
16
- * Called when the editor confirms the duplicate modal. The parent runs
17
- * the server fn, surfaces a toast, and navigates to the new document.
18
- */
19
- onDuplicate?: () => Promise<void>;
20
- /**
21
- * The current (saved) value of the source document's `useAsTitle`
22
- * field, used to render the suffix preview inside the duplicate modal.
23
- * Sourced from the form's `initialData`, not live form state, so the
24
- * preview reflects what will actually be duplicated.
25
- */
26
- sourceTitle?: string | null;
27
- /**
28
- * Called when the editor confirms the Copy-to-Locale modal. The
29
- * parent runs the server fn, surfaces a toast, and navigates to the
30
- * target locale view. Menu item is hidden when omitted, or when fewer
31
- * than two content locales are configured.
32
- */
33
- onCopyToLocale?: (args: {
34
- targetLocale: string;
35
- overwrite: boolean;
36
- }) => Promise<void>;
37
- /**
38
- * The locale the form is currently displaying. Used as the read-only
39
- * "From" label in the Copy-to-Locale modal and excluded from the
40
- * target Select.
41
- */
42
- sourceLocale?: string;
43
- /**
44
- * All configured content locales (code + display label). The
45
- * Copy-to-Locale Select lists every locale except `sourceLocale`.
46
- */
47
- contentLocales?: ReadonlyArray<DocumentActionsLocaleOption>;
48
- }): import("react").JSX.Element;