@byline/admin 2.5.2 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fields/array/array-field.d.ts +14 -0
- package/dist/fields/array/array-field.js +177 -0
- package/dist/fields/array/array-field.module.js +11 -0
- package/dist/fields/array/array-field_module.css +32 -0
- package/dist/fields/blocks/blocks-field.d.ts +13 -0
- package/dist/fields/blocks/blocks-field.js +245 -0
- package/dist/fields/blocks/blocks-field.module.js +26 -0
- package/dist/fields/blocks/blocks-field_module.css +107 -0
- package/dist/fields/checkbox/checkbox-field.d.ts +16 -0
- package/dist/fields/checkbox/checkbox-field.js +28 -0
- package/dist/fields/checkbox/checkbox-field.module.js +6 -0
- package/dist/fields/checkbox/checkbox-field_module.css +4 -0
- package/dist/fields/column-formatter.d.ts +20 -0
- package/dist/fields/column-formatter.js +15 -0
- package/dist/fields/date-time-formatter.d.ts +16 -0
- package/dist/fields/date-time-formatter.js +8 -0
- package/dist/fields/datetime/datetime-field.d.ts +16 -0
- package/dist/fields/datetime/datetime-field.js +37 -0
- package/dist/fields/datetime/datetime-field.module.js +5 -0
- package/dist/fields/datetime/datetime-field_module.css +4 -0
- package/dist/fields/draggable-context-menu.d.ts +6 -0
- package/dist/fields/draggable-context-menu.js +85 -0
- package/dist/fields/draggable-context-menu.module.js +15 -0
- package/dist/fields/draggable-context-menu_module.css +91 -0
- package/dist/fields/field-helpers.d.ts +26 -0
- package/dist/fields/field-helpers.js +50 -0
- package/dist/fields/field-renderer.d.ts +37 -0
- package/dist/fields/field-renderer.js +206 -0
- package/dist/fields/field-renderer.module.js +8 -0
- package/dist/fields/field-renderer_module.css +11 -0
- package/dist/fields/field-services-context.d.ts +16 -0
- package/dist/fields/field-services-context.js +13 -0
- package/dist/fields/field-services-types.d.ts +63 -0
- package/dist/fields/field-services-types.js +1 -0
- package/dist/fields/file/file-field.d.ts +19 -0
- package/dist/fields/file/file-field.js +225 -0
- package/dist/fields/file/file-field.module.js +18 -0
- package/dist/fields/file/file-field_module.css +131 -0
- package/dist/fields/file/file-upload-field.d.ts +21 -0
- package/dist/fields/file/file-upload-field.js +130 -0
- package/dist/fields/file/file-upload-field.module.js +15 -0
- package/dist/fields/file/file-upload-field_module.css +74 -0
- package/dist/fields/group/group-field.d.ts +15 -0
- package/dist/fields/group/group-field.js +59 -0
- package/dist/fields/group/group-field.module.js +9 -0
- package/dist/fields/group/group-field_module.css +27 -0
- package/dist/fields/image/image-field.d.ts +19 -0
- package/dist/fields/image/image-field.js +241 -0
- package/dist/fields/image/image-field.module.js +22 -0
- package/dist/fields/image/image-field_module.css +121 -0
- package/dist/fields/image/image-upload-field.d.ts +21 -0
- package/dist/fields/image/image-upload-field.js +190 -0
- package/dist/fields/image/image-upload-field.module.js +19 -0
- package/dist/fields/image/image-upload-field_module.css +92 -0
- package/dist/fields/local-date-time.d.ts +27 -0
- package/dist/fields/local-date-time.js +49 -0
- package/dist/fields/locale-badge.d.ts +18 -0
- package/dist/fields/locale-badge.js +10 -0
- package/dist/fields/locale-badge.module.js +5 -0
- package/dist/fields/locale-badge_module.css +27 -0
- package/dist/fields/numerical/numerical-field.d.ts +18 -0
- package/dist/fields/numerical/numerical-field.js +74 -0
- package/dist/fields/relation/relation-display.d.ts +40 -0
- package/dist/fields/relation/relation-display.js +58 -0
- package/dist/fields/relation/relation-display.module.js +9 -0
- package/dist/fields/relation/relation-display_module.css +21 -0
- package/dist/fields/relation/relation-field.d.ts +18 -0
- package/dist/fields/relation/relation-field.js +138 -0
- package/dist/fields/relation/relation-field.module.js +13 -0
- package/dist/fields/relation/relation-field_module.css +62 -0
- package/dist/fields/relation/relation-picker.d.ts +49 -0
- package/dist/fields/relation/relation-picker.js +236 -0
- package/dist/fields/relation/relation-picker.module.js +26 -0
- package/dist/fields/relation/relation-picker_module.css +124 -0
- package/dist/fields/relation/relation-summary.d.ts +31 -0
- package/dist/fields/relation/relation-summary.js +50 -0
- package/dist/fields/relation/relation-summary.module.js +11 -0
- package/dist/fields/relation/relation-summary_module.css +37 -0
- package/dist/fields/select/select-field.d.ts +16 -0
- package/dist/fields/select/select-field.js +50 -0
- package/dist/fields/select/select-field.module.js +5 -0
- package/dist/fields/select/select-field_module.css +4 -0
- package/dist/fields/sortable-item.d.ts +15 -0
- package/dist/fields/sortable-item.js +81 -0
- package/dist/fields/sortable-item.module.js +22 -0
- package/dist/fields/sortable-item_module.css +124 -0
- package/dist/fields/text/text-field.d.ts +20 -0
- package/dist/fields/text/text-field.js +104 -0
- package/dist/fields/text/text-field.module.js +6 -0
- package/dist/fields/text/text-field_module.css +5 -0
- package/dist/fields/text-area/text-area-field.d.ts +20 -0
- package/dist/fields/text-area/text-area-field.js +105 -0
- package/dist/fields/text-area/text-area-field.module.js +6 -0
- package/dist/fields/text-area/text-area-field_module.css +5 -0
- package/dist/fields/use-field-change-handler.d.ts +23 -0
- package/dist/fields/use-field-change-handler.js +52 -0
- package/dist/forms/document-actions.d.ts +48 -0
- package/dist/forms/document-actions.js +475 -0
- package/dist/forms/document-actions.module.js +34 -0
- package/dist/forms/document-actions_module.css +118 -0
- package/dist/forms/form-context.d.ts +89 -0
- package/dist/forms/form-context.js +466 -0
- package/dist/forms/form-renderer.d.ts +98 -0
- package/dist/forms/form-renderer.js +597 -0
- package/dist/forms/form-renderer.module.js +46 -0
- package/dist/forms/form-renderer_module.css +245 -0
- package/dist/forms/navigation-guard.d.ts +54 -0
- package/dist/forms/navigation-guard.js +22 -0
- package/dist/forms/path-widget.d.ts +36 -0
- package/dist/forms/path-widget.js +116 -0
- package/dist/forms/path-widget.module.js +8 -0
- package/dist/forms/path-widget_module.css +29 -0
- package/dist/forms/upload-executor.d.ts +57 -0
- package/dist/forms/upload-executor.js +94 -0
- package/dist/lib/translate-validation-error.d.ts +36 -0
- package/dist/lib/translate-validation-error.js +11 -0
- package/dist/modules/admin-account/commands.d.ts +2 -1
- package/dist/modules/admin-account/commands.js +13 -2
- package/dist/modules/admin-account/components/change-password.js +45 -36
- package/dist/modules/admin-account/components/container.js +185 -134
- package/dist/modules/admin-account/components/preferences.d.ts +8 -0
- package/dist/modules/admin-account/components/preferences.js +152 -0
- package/dist/modules/admin-account/components/preferences.module.js +11 -0
- package/dist/modules/admin-account/components/preferences_module.css +41 -0
- package/dist/modules/admin-account/components/update.js +50 -31
- package/dist/modules/admin-account/index.d.ts +3 -3
- package/dist/modules/admin-account/index.js +2 -2
- package/dist/modules/admin-account/schemas.d.ts +4 -0
- package/dist/modules/admin-account/schemas.js +4 -1
- package/dist/modules/admin-account/service.d.ts +1 -0
- package/dist/modules/admin-account/service.js +8 -0
- package/dist/modules/admin-permissions/components/inspector.js +31 -41
- package/dist/modules/admin-roles/components/create.js +43 -26
- package/dist/modules/admin-roles/components/permissions.js +26 -35
- package/dist/modules/admin-roles/components/update.js +26 -16
- package/dist/modules/admin-users/components/create.js +60 -40
- package/dist/modules/admin-users/components/roles.js +9 -15
- package/dist/modules/admin-users/components/set-password.js +30 -31
- package/dist/modules/admin-users/components/update.js +58 -39
- package/dist/modules/admin-users/dto.js +1 -0
- package/dist/modules/admin-users/repository.d.ts +17 -0
- package/dist/modules/admin-users/schemas.d.ts +4 -0
- package/dist/modules/admin-users/schemas.js +6 -2
- package/dist/modules/auth/components/sign-in-form.js +10 -8
- package/dist/presentation/group.d.ts +27 -0
- package/dist/presentation/group.js +14 -0
- package/dist/presentation/group.module.js +6 -0
- package/dist/presentation/group_module.css +19 -0
- package/dist/presentation/row.d.ts +25 -0
- package/dist/presentation/row.js +8 -0
- package/dist/presentation/row.module.js +5 -0
- package/dist/presentation/row_module.css +18 -0
- package/dist/presentation/tabs.d.ts +25 -0
- package/dist/presentation/tabs.js +39 -0
- package/dist/presentation/tabs.module.js +10 -0
- package/dist/presentation/tabs_module.css +68 -0
- package/dist/react.d.ts +66 -0
- package/dist/react.js +36 -0
- package/dist/services/admin-services-types.d.ts +16 -0
- package/dist/widgets/diff-viewer/diff-modal.d.ts +22 -0
- package/dist/widgets/diff-viewer/diff-modal.js +149 -0
- package/dist/widgets/diff-viewer/diff-modal.module.js +14 -0
- package/dist/widgets/diff-viewer/diff-modal_module.css +56 -0
- package/dist/widgets/status-badge/status-badge.d.ts +25 -0
- package/dist/widgets/status-badge/status-badge.js +37 -0
- package/dist/widgets/status-badge/status-badge.module.js +7 -0
- package/dist/widgets/status-badge/status-badge_module.css +20 -0
- package/package.json +14 -4
- package/src/fields/array/array-field.module.css +48 -0
- package/src/fields/array/array-field.tsx +267 -0
- package/src/fields/blocks/blocks-field.module.css +148 -0
- package/src/fields/blocks/blocks-field.tsx +323 -0
- package/src/fields/checkbox/checkbox-field.module.css +4 -0
- package/src/fields/checkbox/checkbox-field.tsx +54 -0
- package/src/fields/column-formatter.tsx +31 -0
- package/src/fields/date-time-formatter.tsx +22 -0
- package/src/fields/datetime/datetime-field.module.css +13 -0
- package/src/fields/datetime/datetime-field.tsx +54 -0
- package/src/fields/draggable-context-menu.module.css +127 -0
- package/src/fields/draggable-context-menu.tsx +87 -0
- package/src/fields/field-helpers.ts +69 -0
- package/src/fields/field-renderer.module.css +22 -0
- package/src/fields/field-renderer.tsx +288 -0
- package/src/fields/field-services-context.tsx +35 -0
- package/src/fields/field-services-types.ts +68 -0
- package/src/fields/file/file-field.module.css +153 -0
- package/src/fields/file/file-field.tsx +286 -0
- package/src/fields/file/file-upload-field.module.css +101 -0
- package/src/fields/file/file-upload-field.tsx +187 -0
- package/src/fields/group/group-field.module.css +43 -0
- package/src/fields/group/group-field.tsx +84 -0
- package/src/fields/image/image-field.module.css +155 -0
- package/src/fields/image/image-field.tsx +306 -0
- package/src/fields/image/image-upload-field.module.css +123 -0
- package/src/fields/image/image-upload-field.tsx +276 -0
- package/src/fields/local-date-time.tsx +88 -0
- package/src/fields/locale-badge.module.css +37 -0
- package/src/fields/locale-badge.tsx +32 -0
- package/src/fields/numerical/numerical-field.tsx +114 -0
- package/src/fields/relation/relation-display.module.css +36 -0
- package/src/fields/relation/relation-display.tsx +130 -0
- package/src/fields/relation/relation-field.module.css +83 -0
- package/src/fields/relation/relation-field.tsx +211 -0
- package/src/fields/relation/relation-picker.module.css +168 -0
- package/src/fields/relation/relation-picker.tsx +326 -0
- package/src/fields/relation/relation-summary.module.css +55 -0
- package/src/fields/relation/relation-summary.tsx +123 -0
- package/src/fields/select/select-field.module.css +13 -0
- package/src/fields/select/select-field.tsx +61 -0
- package/src/fields/sortable-item.module.css +167 -0
- package/src/fields/sortable-item.tsx +106 -0
- package/src/fields/text/text-field.module.css +13 -0
- package/src/fields/text/text-field.tsx +146 -0
- package/src/fields/text-area/text-area-field.module.css +13 -0
- package/src/fields/text-area/text-area-field.tsx +147 -0
- package/src/fields/use-field-change-handler.ts +112 -0
- package/src/forms/document-actions.module.css +160 -0
- package/src/forms/document-actions.tsx +482 -0
- package/src/forms/form-context.tsx +704 -0
- package/src/forms/form-renderer.module.css +321 -0
- package/src/forms/form-renderer.tsx +891 -0
- package/src/forms/navigation-guard.tsx +98 -0
- package/src/forms/path-widget.module.css +41 -0
- package/src/forms/path-widget.test.tsx +217 -0
- package/src/forms/path-widget.tsx +183 -0
- package/src/forms/upload-executor.ts +192 -0
- package/src/lib/translate-validation-error.ts +56 -0
- package/src/modules/admin-account/commands.ts +13 -0
- package/src/modules/admin-account/components/change-password.tsx +46 -31
- package/src/modules/admin-account/components/container.tsx +83 -38
- package/src/modules/admin-account/components/preferences.module.css +60 -0
- package/src/modules/admin-account/components/preferences.tsx +203 -0
- package/src/modules/admin-account/components/update.tsx +53 -27
- package/src/modules/admin-account/index.ts +3 -0
- package/src/modules/admin-account/schemas.ts +13 -0
- package/src/modules/admin-account/service.ts +12 -0
- package/src/modules/admin-permissions/components/inspector.tsx +22 -14
- package/src/modules/admin-roles/components/create.tsx +51 -23
- package/src/modules/admin-roles/components/permissions.tsx +25 -21
- package/src/modules/admin-roles/components/update.tsx +37 -19
- package/src/modules/admin-users/components/create.tsx +63 -34
- package/src/modules/admin-users/components/roles.tsx +9 -8
- package/src/modules/admin-users/components/set-password.tsx +34 -28
- package/src/modules/admin-users/components/update.tsx +58 -36
- package/src/modules/admin-users/dto.ts +1 -0
- package/src/modules/admin-users/repository.ts +17 -0
- package/src/modules/admin-users/schemas.ts +12 -0
- package/src/modules/auth/components/sign-in-form.tsx +14 -8
- package/src/presentation/group.module.css +41 -0
- package/src/presentation/group.tsx +40 -0
- package/src/presentation/row.module.css +32 -0
- package/src/presentation/row.tsx +33 -0
- package/src/presentation/tabs.module.css +107 -0
- package/src/presentation/tabs.tsx +84 -0
- package/src/react.ts +84 -0
- package/src/services/admin-services-types.ts +18 -0
- package/src/widgets/diff-viewer/diff-modal.module.css +79 -0
- package/src/widgets/diff-viewer/diff-modal.tsx +186 -0
- package/src/widgets/status-badge/status-badge.module.css +31 -0
- package/src/widgets/status-badge/status-badge.tsx +71 -0
|
@@ -0,0 +1,18 @@
|
|
|
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 { RelationField as FieldType, RelatedDocumentValue } from '@byline/core';
|
|
9
|
+
interface RelationFieldProps {
|
|
10
|
+
field: FieldType;
|
|
11
|
+
value?: RelatedDocumentValue | null;
|
|
12
|
+
defaultValue?: RelatedDocumentValue | null;
|
|
13
|
+
onChange?: (value: RelatedDocumentValue | null) => void;
|
|
14
|
+
id?: string;
|
|
15
|
+
path?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare const RelationField: ({ field, value, defaultValue, onChange, id, path, }: RelationFieldProps) => import("react").JSX.Element;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { getCollectionAdminConfig, getCollectionDefinition } from "@byline/core";
|
|
4
|
+
import { useTranslation } from "@byline/i18n/react";
|
|
5
|
+
import { Button, CloseIcon, EditIcon, ErrorText, IconButton, Label } from "@byline/ui/react";
|
|
6
|
+
import classnames from "classnames";
|
|
7
|
+
import { useFieldError, useFieldValue } from "../../forms/form-context.js";
|
|
8
|
+
import relation_field_module from "./relation-field.module.js";
|
|
9
|
+
import { RelationPicker } from "./relation-picker.js";
|
|
10
|
+
import { RelationSummary } from "./relation-summary.js";
|
|
11
|
+
const RelationField = ({ field, value, defaultValue, onChange, id, path })=>{
|
|
12
|
+
const fieldPath = path ?? field.name;
|
|
13
|
+
const htmlId = id ?? fieldPath;
|
|
14
|
+
const fieldError = useFieldError(fieldPath);
|
|
15
|
+
const fieldValue = useFieldValue(fieldPath);
|
|
16
|
+
const incomingValue = void 0 !== fieldValue ? fieldValue ?? null : value ?? defaultValue ?? null;
|
|
17
|
+
const targetDef = getCollectionDefinition(field.targetCollection);
|
|
18
|
+
const targetAdminConfig = getCollectionAdminConfig(field.targetCollection);
|
|
19
|
+
const { t } = useTranslation('byline-admin');
|
|
20
|
+
const [pickerOpen, setPickerOpen] = useState(false);
|
|
21
|
+
const [pickedRecord, setPickedRecord] = useState(null);
|
|
22
|
+
const handleSelect = (selection)=>{
|
|
23
|
+
setPickerOpen(false);
|
|
24
|
+
selection.record ? setPickedRecord({
|
|
25
|
+
id: selection.targetDocumentId,
|
|
26
|
+
record: selection.record
|
|
27
|
+
}) : setPickedRecord(null);
|
|
28
|
+
onChange?.({
|
|
29
|
+
targetDocumentId: selection.targetDocumentId,
|
|
30
|
+
targetCollectionId: selection.targetCollectionId
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
const handleRemove = ()=>{
|
|
34
|
+
setPickedRecord(null);
|
|
35
|
+
onChange?.(null);
|
|
36
|
+
};
|
|
37
|
+
const cachedRecord = pickedRecord && incomingValue && pickedRecord.id === incomingValue.targetDocumentId ? pickedRecord.record : null;
|
|
38
|
+
const isUnknown = null == targetDef;
|
|
39
|
+
return /*#__PURE__*/ jsxs("div", {
|
|
40
|
+
className: `byline-field-relation ${field.name}`,
|
|
41
|
+
children: [
|
|
42
|
+
/*#__PURE__*/ jsx("div", {
|
|
43
|
+
className: classnames('byline-field-relation-header', relation_field_module.header),
|
|
44
|
+
children: /*#__PURE__*/ jsx(Label, {
|
|
45
|
+
id: `${htmlId}-label`,
|
|
46
|
+
htmlFor: htmlId,
|
|
47
|
+
label: field.label ?? field.name,
|
|
48
|
+
required: !field.optional
|
|
49
|
+
})
|
|
50
|
+
}),
|
|
51
|
+
field.helpText && /*#__PURE__*/ jsx("div", {
|
|
52
|
+
className: classnames('byline-field-relation-help', relation_field_module.help),
|
|
53
|
+
children: field.helpText
|
|
54
|
+
}),
|
|
55
|
+
isUnknown ? /*#__PURE__*/ jsxs("div", {
|
|
56
|
+
className: classnames('byline-field-relation-error-tile', relation_field_module["error-tile"]),
|
|
57
|
+
children: [
|
|
58
|
+
/*#__PURE__*/ jsx("span", {
|
|
59
|
+
children: t('fields.relation.unknownError', {
|
|
60
|
+
name: field.name,
|
|
61
|
+
target: field.targetCollection
|
|
62
|
+
})
|
|
63
|
+
}),
|
|
64
|
+
/*#__PURE__*/ jsx("span", {
|
|
65
|
+
className: classnames('byline-field-relation-error-text', relation_field_module["error-text"]),
|
|
66
|
+
children: t('fields.relation.unknownHint')
|
|
67
|
+
})
|
|
68
|
+
]
|
|
69
|
+
}) : incomingValue ? /*#__PURE__*/ jsxs("div", {
|
|
70
|
+
className: classnames('byline-field-relation-tile', relation_field_module.tile),
|
|
71
|
+
children: [
|
|
72
|
+
/*#__PURE__*/ jsx(RelationSummary, {
|
|
73
|
+
targetDefinition: targetDef,
|
|
74
|
+
targetAdminConfig: targetAdminConfig,
|
|
75
|
+
displayField: field.displayField,
|
|
76
|
+
value: incomingValue,
|
|
77
|
+
cachedRecord: cachedRecord
|
|
78
|
+
}),
|
|
79
|
+
/*#__PURE__*/ jsxs("div", {
|
|
80
|
+
className: classnames('byline-field-relation-actions', relation_field_module.actions),
|
|
81
|
+
children: [
|
|
82
|
+
/*#__PURE__*/ jsx(IconButton, {
|
|
83
|
+
id: htmlId,
|
|
84
|
+
type: "button",
|
|
85
|
+
intent: "noeffect",
|
|
86
|
+
size: "xs",
|
|
87
|
+
"aria-label": t('fields.relation.changeAriaLabel', {
|
|
88
|
+
label: targetDef.labels.singular
|
|
89
|
+
}),
|
|
90
|
+
onClick: ()=>setPickerOpen(true),
|
|
91
|
+
children: /*#__PURE__*/ jsx(EditIcon, {
|
|
92
|
+
width: "15px",
|
|
93
|
+
height: "15px"
|
|
94
|
+
})
|
|
95
|
+
}),
|
|
96
|
+
/*#__PURE__*/ jsx(IconButton, {
|
|
97
|
+
type: "button",
|
|
98
|
+
intent: "noeffect",
|
|
99
|
+
size: "xs",
|
|
100
|
+
"aria-label": t('fields.relation.removeAriaLabel', {
|
|
101
|
+
label: targetDef.labels.singular
|
|
102
|
+
}),
|
|
103
|
+
onClick: handleRemove,
|
|
104
|
+
children: /*#__PURE__*/ jsx(CloseIcon, {
|
|
105
|
+
width: "15px",
|
|
106
|
+
height: "15px"
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
]
|
|
110
|
+
})
|
|
111
|
+
]
|
|
112
|
+
}) : /*#__PURE__*/ jsx(Button, {
|
|
113
|
+
id: htmlId,
|
|
114
|
+
size: "xs",
|
|
115
|
+
variant: "outlined",
|
|
116
|
+
intent: "noeffect",
|
|
117
|
+
type: "button",
|
|
118
|
+
onClick: ()=>setPickerOpen(true),
|
|
119
|
+
children: t('fields.relation.selectButton', {
|
|
120
|
+
label: targetDef.labels.singular
|
|
121
|
+
})
|
|
122
|
+
}),
|
|
123
|
+
fieldError && /*#__PURE__*/ jsx(ErrorText, {
|
|
124
|
+
id: `${field.name}-error`,
|
|
125
|
+
text: fieldError
|
|
126
|
+
}),
|
|
127
|
+
!isUnknown && /*#__PURE__*/ jsx(RelationPicker, {
|
|
128
|
+
targetCollectionPath: field.targetCollection,
|
|
129
|
+
targetDefinition: targetDef,
|
|
130
|
+
displayField: field.displayField,
|
|
131
|
+
isOpen: pickerOpen,
|
|
132
|
+
onSelect: handleSelect,
|
|
133
|
+
onDismiss: ()=>setPickerOpen(false)
|
|
134
|
+
})
|
|
135
|
+
]
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
export { RelationField };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "./relation-field_module.css";
|
|
2
|
+
const relation_field_module = {
|
|
3
|
+
header: "header-y7lSnb",
|
|
4
|
+
help: "help-DEGVPH",
|
|
5
|
+
"error-tile": "error-tile-y2kiiq",
|
|
6
|
+
errorTile: "error-tile-y2kiiq",
|
|
7
|
+
"error-text": "error-text-jHQh34",
|
|
8
|
+
errorText: "error-text-jHQh34",
|
|
9
|
+
tile: "tile-Y3_yre",
|
|
10
|
+
actions: "actions-Nov8hS",
|
|
11
|
+
mono: "mono-y8Xo6b"
|
|
12
|
+
};
|
|
13
|
+
export default relation_field_module;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
:is(.header-y7lSnb, .byline-field-relation-header) {
|
|
2
|
+
align-items: baseline;
|
|
3
|
+
gap: var(--spacing-8);
|
|
4
|
+
margin-bottom: .25rem;
|
|
5
|
+
display: flex;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
:is(.help-DEGVPH, .byline-field-relation-help) {
|
|
9
|
+
color: var(--gray-400);
|
|
10
|
+
font-size: var(--font-size-xs);
|
|
11
|
+
margin-bottom: .25rem;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
:is(.error-tile-y2kiiq, .byline-field-relation-error-tile) {
|
|
15
|
+
padding: var(--spacing-8);
|
|
16
|
+
border: var(--border-width-thin) var(--border-style-solid) var(--red-700);
|
|
17
|
+
background-color: oklch(from var(--red-900) l c h / .2);
|
|
18
|
+
border-radius: var(--border-radius-md);
|
|
19
|
+
color: var(--red-200);
|
|
20
|
+
font-size: var(--font-size-xs);
|
|
21
|
+
flex-direction: column;
|
|
22
|
+
gap: .25rem;
|
|
23
|
+
margin-top: .25rem;
|
|
24
|
+
display: flex;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
:is(.error-text-jHQh34, .byline-field-relation-error-text) {
|
|
28
|
+
color: oklch(from var(--red-400) l c h / .8);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
:is(.tile-Y3_yre, .byline-field-relation-tile) {
|
|
32
|
+
justify-content: space-between;
|
|
33
|
+
align-items: flex-start;
|
|
34
|
+
gap: var(--spacing-8);
|
|
35
|
+
padding: var(--spacing-8);
|
|
36
|
+
border: var(--border-width-thin) var(--border-style-solid) var(--primary-500);
|
|
37
|
+
border-radius: var(--border-radius-md);
|
|
38
|
+
color: var(--gray-200);
|
|
39
|
+
font-size: var(--font-size-xs);
|
|
40
|
+
margin-top: .25rem;
|
|
41
|
+
display: flex;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
:is(.actions-Nov8hS, .byline-field-relation-actions) {
|
|
45
|
+
align-items: center;
|
|
46
|
+
gap: var(--spacing-4);
|
|
47
|
+
flex-shrink: 0;
|
|
48
|
+
display: flex;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.byline-field-relation-actions .byline-button {
|
|
52
|
+
color: var(--gray-900);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
:is(.dark .byline-field-relation-actions .byline-button, [data-theme="dark"] .byline-field-relation-actions .byline-button) {
|
|
56
|
+
color: var(--gray-200);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
:is(.mono-y8Xo6b, .byline-field-relation-mono) {
|
|
60
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
61
|
+
}
|
|
62
|
+
|
|
@@ -0,0 +1,49 @@
|
|
|
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 { CollectionDefinition } from '@byline/core';
|
|
9
|
+
/**
|
|
10
|
+
* Row rendering strategy, in priority order:
|
|
11
|
+
* 1. `CollectionAdminConfig.picker` — a ColumnDefinition[] from the target
|
|
12
|
+
* admin config. Each row renders the declared columns side-by-side,
|
|
13
|
+
* reusing any column formatters (thumbnail, date, etc).
|
|
14
|
+
* 2. Explicit `displayField` prop on this component (forwarded from
|
|
15
|
+
* `RelationField.displayField`).
|
|
16
|
+
* 3. `CollectionDefinition.useAsTitle` on the target.
|
|
17
|
+
* 4. First top-level `text` field on the target.
|
|
18
|
+
*
|
|
19
|
+
* Paths 2–4 render a single-line label (primary) + `path` (secondary).
|
|
20
|
+
*/
|
|
21
|
+
interface RelationPickerProps {
|
|
22
|
+
/** The target collection path (e.g. `'media'`). */
|
|
23
|
+
targetCollectionPath: string;
|
|
24
|
+
/** The target collection definition (used for labels + displayField fallback). */
|
|
25
|
+
targetDefinition?: CollectionDefinition | null;
|
|
26
|
+
/** Explicit display field to render as row label. */
|
|
27
|
+
displayField?: string;
|
|
28
|
+
/** Modal open/close state. */
|
|
29
|
+
isOpen: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Called with the picked selection when the user confirms.
|
|
32
|
+
*
|
|
33
|
+
* `record` is the raw document the picker row rendered — the caller can
|
|
34
|
+
* use it to show the selected value in its own tile without a refetch.
|
|
35
|
+
* The fields available on `record` are whatever `resolveSelectFields`
|
|
36
|
+
* asked the listing endpoint for (picker columns + `useAsTitle` +
|
|
37
|
+
* `displayField`), so any display surface downstream of the picker that
|
|
38
|
+
* also renders from those same columns will find the data it needs.
|
|
39
|
+
*/
|
|
40
|
+
onSelect: (selection: {
|
|
41
|
+
targetDocumentId: string;
|
|
42
|
+
targetCollectionId: string;
|
|
43
|
+
record?: Record<string, any>;
|
|
44
|
+
}) => void;
|
|
45
|
+
/** Called when the user dismisses the modal. */
|
|
46
|
+
onDismiss: () => void;
|
|
47
|
+
}
|
|
48
|
+
export declare const RelationPicker: ({ targetCollectionPath, targetDefinition, displayField, isOpen, onSelect, onDismiss, }: RelationPickerProps) => import("react").JSX.Element;
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from "react";
|
|
3
|
+
import { getCollectionAdminConfig } from "@byline/core";
|
|
4
|
+
import { useTranslation } from "@byline/i18n/react";
|
|
5
|
+
import { Button, LoaderRing, Modal, Search } from "@byline/ui/react";
|
|
6
|
+
import classnames from "classnames";
|
|
7
|
+
import { useBylineFieldServices } from "../field-services-context.js";
|
|
8
|
+
import { PickerCell, resolveFallbackDisplayField, resolveRowLabel, resolveSelectFields } from "./relation-display.js";
|
|
9
|
+
import relation_picker_module from "./relation-picker.module.js";
|
|
10
|
+
const PAGE_SIZE = 15;
|
|
11
|
+
const RelationPicker = ({ targetCollectionPath, targetDefinition, displayField, isOpen, onSelect, onDismiss })=>{
|
|
12
|
+
const [query, setQuery] = useState('');
|
|
13
|
+
const [page, setPage] = useState(1);
|
|
14
|
+
const { t } = useTranslation('byline-admin');
|
|
15
|
+
const [selectedDocumentId, setSelectedDocumentId] = useState(null);
|
|
16
|
+
const [loading, setLoading] = useState(false);
|
|
17
|
+
const [error, setError] = useState(null);
|
|
18
|
+
const [documents, setDocuments] = useState([]);
|
|
19
|
+
const [totalPages, setTotalPages] = useState(1);
|
|
20
|
+
const [collectionId, setCollectionId] = useState(null);
|
|
21
|
+
const { getCollectionDocuments } = useBylineFieldServices();
|
|
22
|
+
const targetAdminConfig = getCollectionAdminConfig(targetCollectionPath);
|
|
23
|
+
const pickerColumns = targetAdminConfig?.picker;
|
|
24
|
+
useEffect(()=>{
|
|
25
|
+
if (isOpen) {
|
|
26
|
+
setQuery('');
|
|
27
|
+
setPage(1);
|
|
28
|
+
setSelectedDocumentId(null);
|
|
29
|
+
setError(null);
|
|
30
|
+
}
|
|
31
|
+
}, [
|
|
32
|
+
isOpen
|
|
33
|
+
]);
|
|
34
|
+
useEffect(()=>{
|
|
35
|
+
if (!isOpen) return;
|
|
36
|
+
let cancelled = false;
|
|
37
|
+
const selectFields = resolveSelectFields(targetDefinition, displayField, pickerColumns);
|
|
38
|
+
setLoading(true);
|
|
39
|
+
setError(null);
|
|
40
|
+
getCollectionDocuments({
|
|
41
|
+
collection: targetCollectionPath,
|
|
42
|
+
params: {
|
|
43
|
+
page,
|
|
44
|
+
page_size: PAGE_SIZE,
|
|
45
|
+
query: query.length > 0 ? query : void 0,
|
|
46
|
+
fields: selectFields
|
|
47
|
+
}
|
|
48
|
+
}).then((response)=>{
|
|
49
|
+
if (cancelled) return;
|
|
50
|
+
setDocuments(response.docs);
|
|
51
|
+
setTotalPages(response.meta.totalPages ?? 1);
|
|
52
|
+
setCollectionId(response.included.collection.id);
|
|
53
|
+
}).catch((err)=>{
|
|
54
|
+
if (cancelled) return;
|
|
55
|
+
setError(err instanceof Error ? err.message : t('fields.relation.picker.loadFailed'));
|
|
56
|
+
}).finally(()=>{
|
|
57
|
+
if (!cancelled) setLoading(false);
|
|
58
|
+
});
|
|
59
|
+
return ()=>{
|
|
60
|
+
cancelled = true;
|
|
61
|
+
};
|
|
62
|
+
}, [
|
|
63
|
+
isOpen,
|
|
64
|
+
targetCollectionPath,
|
|
65
|
+
query,
|
|
66
|
+
page,
|
|
67
|
+
displayField,
|
|
68
|
+
targetDefinition,
|
|
69
|
+
pickerColumns,
|
|
70
|
+
getCollectionDocuments,
|
|
71
|
+
t
|
|
72
|
+
]);
|
|
73
|
+
const resolvedDisplayField = displayField ?? targetDefinition?.useAsTitle ?? resolveFallbackDisplayField(targetDefinition) ?? null;
|
|
74
|
+
const handleSelect = useCallback(()=>{
|
|
75
|
+
if (!selectedDocumentId || !collectionId) return;
|
|
76
|
+
const record = documents.find((d)=>d?.id === selectedDocumentId);
|
|
77
|
+
onSelect({
|
|
78
|
+
targetDocumentId: selectedDocumentId,
|
|
79
|
+
targetCollectionId: collectionId,
|
|
80
|
+
record
|
|
81
|
+
});
|
|
82
|
+
}, [
|
|
83
|
+
selectedDocumentId,
|
|
84
|
+
collectionId,
|
|
85
|
+
documents,
|
|
86
|
+
onSelect
|
|
87
|
+
]);
|
|
88
|
+
const title = t('fields.relation.selectPickerTitle', {
|
|
89
|
+
label: targetDefinition?.labels.singular ?? targetCollectionPath
|
|
90
|
+
});
|
|
91
|
+
return /*#__PURE__*/ jsx(Modal, {
|
|
92
|
+
isOpen: isOpen,
|
|
93
|
+
onDismiss: onDismiss,
|
|
94
|
+
children: /*#__PURE__*/ jsxs(Modal.Container, {
|
|
95
|
+
style: {
|
|
96
|
+
maxWidth: '600px',
|
|
97
|
+
width: '100%'
|
|
98
|
+
},
|
|
99
|
+
children: [
|
|
100
|
+
/*#__PURE__*/ jsx(Modal.Header, {
|
|
101
|
+
className: classnames('byline-field-relation-picker-header', relation_picker_module.header),
|
|
102
|
+
children: /*#__PURE__*/ jsx("h3", {
|
|
103
|
+
className: classnames('byline-field-relation-picker-title', relation_picker_module.title),
|
|
104
|
+
children: title
|
|
105
|
+
})
|
|
106
|
+
}),
|
|
107
|
+
/*#__PURE__*/ jsx(Modal.Content, {
|
|
108
|
+
children: /*#__PURE__*/ jsxs("div", {
|
|
109
|
+
className: classnames('byline-field-relation-picker-body', relation_picker_module.body),
|
|
110
|
+
children: [
|
|
111
|
+
/*#__PURE__*/ jsx(Search, {
|
|
112
|
+
onSearch: (q)=>{
|
|
113
|
+
setPage(1);
|
|
114
|
+
setQuery(q ?? '');
|
|
115
|
+
},
|
|
116
|
+
onClear: ()=>{
|
|
117
|
+
setPage(1);
|
|
118
|
+
setQuery('');
|
|
119
|
+
},
|
|
120
|
+
inputSize: "sm",
|
|
121
|
+
placeholder: t('fields.relation.picker.searchPlaceholder')
|
|
122
|
+
}),
|
|
123
|
+
/*#__PURE__*/ jsxs("div", {
|
|
124
|
+
className: classnames('byline-field-relation-picker-list', relation_picker_module.list),
|
|
125
|
+
children: [
|
|
126
|
+
loading && 0 === documents.length && /*#__PURE__*/ jsx("div", {
|
|
127
|
+
className: classnames('byline-field-relation-picker-loading', relation_picker_module.loading),
|
|
128
|
+
children: /*#__PURE__*/ jsx(LoaderRing, {
|
|
129
|
+
size: 24,
|
|
130
|
+
color: "#888888"
|
|
131
|
+
})
|
|
132
|
+
}),
|
|
133
|
+
!loading && error && /*#__PURE__*/ jsx("div", {
|
|
134
|
+
className: classnames('byline-field-relation-picker-error', relation_picker_module.error),
|
|
135
|
+
children: error
|
|
136
|
+
}),
|
|
137
|
+
!loading && !error && 0 === documents.length && /*#__PURE__*/ jsx("div", {
|
|
138
|
+
className: classnames('byline-field-relation-picker-empty', relation_picker_module.empty),
|
|
139
|
+
children: t('fields.relation.picker.empty')
|
|
140
|
+
}),
|
|
141
|
+
documents.length > 0 && /*#__PURE__*/ jsx("ul", {
|
|
142
|
+
className: classnames('byline-field-relation-picker-rows', relation_picker_module.rows),
|
|
143
|
+
children: documents.map((doc)=>{
|
|
144
|
+
const id = doc.id;
|
|
145
|
+
const selected = selectedDocumentId === id;
|
|
146
|
+
return /*#__PURE__*/ jsx("li", {
|
|
147
|
+
children: /*#__PURE__*/ jsx("button", {
|
|
148
|
+
type: "button",
|
|
149
|
+
className: classnames('byline-field-relation-picker-row-button', relation_picker_module["row-button"], selected && [
|
|
150
|
+
'byline-field-relation-picker-row-selected',
|
|
151
|
+
relation_picker_module["row-selected"]
|
|
152
|
+
]),
|
|
153
|
+
onClick: ()=>setSelectedDocumentId(id),
|
|
154
|
+
children: pickerColumns && pickerColumns.length > 0 ? /*#__PURE__*/ jsx("div", {
|
|
155
|
+
className: classnames('byline-field-relation-picker-row-cells', relation_picker_module["row-cells"]),
|
|
156
|
+
children: pickerColumns.map((col)=>/*#__PURE__*/ jsx(PickerCell, {
|
|
157
|
+
column: col,
|
|
158
|
+
record: doc
|
|
159
|
+
}, String(col.fieldName)))
|
|
160
|
+
}) : /*#__PURE__*/ jsxs("div", {
|
|
161
|
+
className: classnames('byline-field-relation-picker-row-stack', relation_picker_module["row-stack"]),
|
|
162
|
+
children: [
|
|
163
|
+
/*#__PURE__*/ jsx("span", {
|
|
164
|
+
className: classnames('byline-field-relation-picker-row-label', relation_picker_module["row-label"]),
|
|
165
|
+
children: resolveRowLabel(doc, resolvedDisplayField) || id
|
|
166
|
+
}),
|
|
167
|
+
'string' == typeof doc.path && doc.path.length > 0 && /*#__PURE__*/ jsx("span", {
|
|
168
|
+
className: classnames('byline-field-relation-picker-row-path', relation_picker_module["row-path"]),
|
|
169
|
+
children: doc.path
|
|
170
|
+
})
|
|
171
|
+
]
|
|
172
|
+
})
|
|
173
|
+
})
|
|
174
|
+
}, id);
|
|
175
|
+
})
|
|
176
|
+
})
|
|
177
|
+
]
|
|
178
|
+
}),
|
|
179
|
+
totalPages > 1 && /*#__PURE__*/ jsxs("div", {
|
|
180
|
+
className: classnames('byline-field-relation-picker-pager', relation_picker_module.pager),
|
|
181
|
+
children: [
|
|
182
|
+
/*#__PURE__*/ jsx(Button, {
|
|
183
|
+
size: "xs",
|
|
184
|
+
variant: "outlined",
|
|
185
|
+
intent: "noeffect",
|
|
186
|
+
type: "button",
|
|
187
|
+
disabled: page <= 1 || loading,
|
|
188
|
+
onClick: ()=>setPage((p)=>Math.max(1, p - 1)),
|
|
189
|
+
children: t('common.pager.previous')
|
|
190
|
+
}),
|
|
191
|
+
/*#__PURE__*/ jsx("span", {
|
|
192
|
+
children: t('common.pager.pageOf', {
|
|
193
|
+
page,
|
|
194
|
+
total: totalPages
|
|
195
|
+
})
|
|
196
|
+
}),
|
|
197
|
+
/*#__PURE__*/ jsx(Button, {
|
|
198
|
+
size: "xs",
|
|
199
|
+
variant: "outlined",
|
|
200
|
+
intent: "noeffect",
|
|
201
|
+
type: "button",
|
|
202
|
+
disabled: page >= totalPages || loading,
|
|
203
|
+
onClick: ()=>setPage((p)=>Math.min(totalPages, p + 1)),
|
|
204
|
+
children: t('common.pager.next')
|
|
205
|
+
})
|
|
206
|
+
]
|
|
207
|
+
})
|
|
208
|
+
]
|
|
209
|
+
})
|
|
210
|
+
}),
|
|
211
|
+
/*#__PURE__*/ jsxs(Modal.Actions, {
|
|
212
|
+
children: [
|
|
213
|
+
/*#__PURE__*/ jsx(Button, {
|
|
214
|
+
size: "sm",
|
|
215
|
+
intent: "noeffect",
|
|
216
|
+
type: "button",
|
|
217
|
+
onClick: onDismiss,
|
|
218
|
+
className: classnames('byline-field-relation-picker-action', relation_picker_module.action),
|
|
219
|
+
children: t('common.actions.cancel')
|
|
220
|
+
}),
|
|
221
|
+
/*#__PURE__*/ jsx(Button, {
|
|
222
|
+
size: "sm",
|
|
223
|
+
className: classnames('byline-field-relation-picker-action', relation_picker_module.action),
|
|
224
|
+
intent: "primary",
|
|
225
|
+
type: "button",
|
|
226
|
+
disabled: !selectedDocumentId,
|
|
227
|
+
onClick: handleSelect,
|
|
228
|
+
children: t('common.actions.select')
|
|
229
|
+
})
|
|
230
|
+
]
|
|
231
|
+
})
|
|
232
|
+
]
|
|
233
|
+
})
|
|
234
|
+
});
|
|
235
|
+
};
|
|
236
|
+
export { RelationPicker };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import "./relation-picker_module.css";
|
|
2
|
+
const relation_picker_module = {
|
|
3
|
+
header: "header-quQOWP",
|
|
4
|
+
title: "title-nX1CSv",
|
|
5
|
+
body: "body-S2EcHm",
|
|
6
|
+
list: "list-UFzd89",
|
|
7
|
+
loading: "loading-LZVbkl",
|
|
8
|
+
error: "error-ZtOVuJ",
|
|
9
|
+
empty: "empty-ks6ZeP",
|
|
10
|
+
rows: "rows-QZrdT9",
|
|
11
|
+
"row-button": "row-button-ZHfXmj",
|
|
12
|
+
rowButton: "row-button-ZHfXmj",
|
|
13
|
+
"row-selected": "row-selected-VlrgyO",
|
|
14
|
+
rowSelected: "row-selected-VlrgyO",
|
|
15
|
+
"row-cells": "row-cells-aSIcf5",
|
|
16
|
+
rowCells: "row-cells-aSIcf5",
|
|
17
|
+
"row-stack": "row-stack-BOPzzj",
|
|
18
|
+
rowStack: "row-stack-BOPzzj",
|
|
19
|
+
"row-label": "row-label-gEaOEB",
|
|
20
|
+
rowLabel: "row-label-gEaOEB",
|
|
21
|
+
"row-path": "row-path-v1lJwb",
|
|
22
|
+
rowPath: "row-path-v1lJwb",
|
|
23
|
+
pager: "pager-EWOfET",
|
|
24
|
+
action: "action-STxQVM"
|
|
25
|
+
};
|
|
26
|
+
export default relation_picker_module;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
:is(.header-quQOWP, .byline-field-relation-picker-header) {
|
|
2
|
+
margin-bottom: var(--spacing-8);
|
|
3
|
+
padding-top: 1rem;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
:is(.title-nX1CSv, .byline-field-relation-picker-title) {
|
|
7
|
+
margin: 0 0 var(--spacing-8) 0;
|
|
8
|
+
font-size: var(--font-size-xl);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
:is(.body-S2EcHm, .byline-field-relation-picker-body) {
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
gap: .75rem;
|
|
14
|
+
display: flex;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
:is(.list-UFzd89, .byline-field-relation-picker-list) {
|
|
18
|
+
border: var(--border-width-thin) var(--border-style-solid) var(--gray-700);
|
|
19
|
+
border-radius: var(--border-radius-md);
|
|
20
|
+
min-height: 320px;
|
|
21
|
+
max-height: 420px;
|
|
22
|
+
overflow-y: auto;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
:is(.loading-LZVbkl, .byline-field-relation-picker-loading) {
|
|
26
|
+
justify-content: center;
|
|
27
|
+
align-items: center;
|
|
28
|
+
padding: 2.5rem 0;
|
|
29
|
+
display: flex;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
:is(.error-ZtOVuJ, .byline-field-relation-picker-error) {
|
|
33
|
+
color: var(--red-500);
|
|
34
|
+
font-size: var(--font-size-sm);
|
|
35
|
+
text-align: center;
|
|
36
|
+
padding: 2.5rem 1rem;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
:is(.empty-ks6ZeP, .byline-field-relation-picker-empty) {
|
|
40
|
+
color: var(--gray-400);
|
|
41
|
+
font-size: var(--font-size-sm);
|
|
42
|
+
text-align: center;
|
|
43
|
+
padding: 2.5rem 1rem;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
:is(.rows-QZrdT9, .byline-field-relation-picker-rows) {
|
|
47
|
+
margin: 0;
|
|
48
|
+
padding: 0;
|
|
49
|
+
list-style: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:is(.rows-QZrdT9 > li + li, .byline-field-relation-picker-rows > li + li) {
|
|
53
|
+
border-top: var(--border-width-thin) var(--border-style-solid) var(--gray-700);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
:is(.row-button-ZHfXmj, .byline-field-relation-picker-row-button) {
|
|
57
|
+
width: 100%;
|
|
58
|
+
padding: var(--spacing-8) .75rem;
|
|
59
|
+
text-align: left;
|
|
60
|
+
color: inherit;
|
|
61
|
+
cursor: pointer;
|
|
62
|
+
background: none;
|
|
63
|
+
border: none;
|
|
64
|
+
transition: background-color .15s;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
:is(.row-button-ZHfXmj:hover, .byline-field-relation-picker-row-button:hover) {
|
|
68
|
+
background-color: var(--gray-25);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
:is(.row-selected-VlrgyO, .byline-field-relation-picker-row-selected) {
|
|
72
|
+
background-color: oklch(from var(--primary-200) l c h / .3);
|
|
73
|
+
border-left: 2px solid var(--primary-200);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
:is(.row-cells-aSIcf5, .byline-field-relation-picker-row-cells) {
|
|
77
|
+
align-items: center;
|
|
78
|
+
gap: .75rem;
|
|
79
|
+
display: flex;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
:is(.row-stack-BOPzzj, .byline-field-relation-picker-row-stack) {
|
|
83
|
+
flex-direction: column;
|
|
84
|
+
gap: .125rem;
|
|
85
|
+
display: flex;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
:is(.row-label-gEaOEB, .byline-field-relation-picker-row-label) {
|
|
89
|
+
color: var(--gray-100);
|
|
90
|
+
font-size: var(--font-size-sm);
|
|
91
|
+
text-overflow: ellipsis;
|
|
92
|
+
white-space: nowrap;
|
|
93
|
+
overflow: hidden;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
:is(.row-path-v1lJwb, .byline-field-relation-picker-row-path) {
|
|
97
|
+
color: var(--gray-500);
|
|
98
|
+
font-size: var(--font-size-xs);
|
|
99
|
+
text-overflow: ellipsis;
|
|
100
|
+
white-space: nowrap;
|
|
101
|
+
overflow: hidden;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
:is(.pager-EWOfET, .byline-field-relation-picker-pager) {
|
|
105
|
+
color: var(--gray-400);
|
|
106
|
+
font-size: var(--font-size-xs);
|
|
107
|
+
justify-content: space-between;
|
|
108
|
+
align-items: center;
|
|
109
|
+
display: flex;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
:is(.action-STxQVM, .byline-field-relation-picker-action) {
|
|
113
|
+
min-width: 70px;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
:is(:is([data-theme="dark"], .dark) .row-button-ZHfXmj:hover, :is([data-theme="dark"], .dark) .byline-field-relation-picker-row-button:hover) {
|
|
117
|
+
background-color: var(--gray-900);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
:is(:is([data-theme="dark"], .dark) .row-selected-VlrgyO, :is([data-theme="dark"], .dark) .byline-field-relation-picker-row-selected) {
|
|
121
|
+
background-color: oklch(from var(--primary-900) l c h / .3);
|
|
122
|
+
border-left: 2px solid var(--primary-400);
|
|
123
|
+
}
|
|
124
|
+
|