payload-intl 1.2.2 → 1.2.3
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/components/MessageFormField.d.ts +15 -0
- package/dist/components/MessageFormField.d.ts.map +1 -0
- package/dist/components/{MessageController.js → MessageFormField.js} +5 -3
- package/dist/components/MessageFormField.js.map +1 -0
- package/dist/components/MessagesForm.d.ts +3 -1
- package/dist/components/MessagesForm.d.ts.map +1 -1
- package/dist/components/MessagesForm.js +25 -36
- package/dist/components/MessagesForm.js.map +1 -1
- package/dist/components/{MessageFormContext.d.ts → MessagesFormProvider.d.ts} +6 -2
- package/dist/components/MessagesFormProvider.d.ts.map +1 -0
- package/dist/components/{MessageFormContext.js → MessagesFormProvider.js} +8 -4
- package/dist/components/MessagesFormProvider.js.map +1 -0
- package/dist/components/MessagesLink.js +5 -2
- package/dist/components/MessagesLink.js.map +1 -1
- package/dist/components/MessagesView.d.ts +1 -1
- package/dist/components/MessagesView.d.ts.map +1 -1
- package/dist/components/MessagesView.js +13 -4
- package/dist/components/MessagesView.js.map +1 -1
- package/dist/components/actions/CopyMessages.d.ts +2 -0
- package/dist/components/actions/CopyMessages.d.ts.map +1 -0
- package/dist/components/actions/{Move.js → CopyMessages.js} +6 -6
- package/dist/components/actions/CopyMessages.js.map +1 -0
- package/dist/components/actions/JsonImport.d.ts +4 -1
- package/dist/components/actions/JsonImport.d.ts.map +1 -1
- package/dist/components/actions/JsonImport.js +7 -25
- package/dist/components/actions/JsonImport.js.map +1 -1
- package/dist/components/hooks/useHtmlLexicalAdapter.d.ts +12 -0
- package/dist/components/hooks/useHtmlLexicalAdapter.d.ts.map +1 -0
- package/dist/components/hooks/useHtmlLexicalAdapter.js +63 -0
- package/dist/components/hooks/useHtmlLexicalAdapter.js.map +1 -0
- package/dist/components/hooks/useMessagesFormSubmit.d.ts +11 -0
- package/dist/components/hooks/useMessagesFormSubmit.d.ts.map +1 -0
- package/dist/components/hooks/useMessagesFormSubmit.js +44 -0
- package/dist/components/hooks/useMessagesFormSubmit.js.map +1 -0
- package/dist/components/inputs/FieldWrapper.d.ts +9 -0
- package/dist/components/inputs/FieldWrapper.d.ts.map +1 -0
- package/dist/components/inputs/FieldWrapper.js +24 -0
- package/dist/components/inputs/FieldWrapper.js.map +1 -0
- package/dist/components/inputs/{InputWrapper.module.css → FieldWrapper.module.css} +2 -12
- package/dist/components/inputs/LexicalInput.d.ts +2 -13
- package/dist/components/inputs/LexicalInput.d.ts.map +1 -1
- package/dist/components/inputs/LexicalInput.js +4 -63
- package/dist/components/inputs/LexicalInput.js.map +1 -1
- package/dist/components/inputs/MessageInput.d.ts +6 -3
- package/dist/components/inputs/MessageInput.d.ts.map +1 -1
- package/dist/components/inputs/MessageInput.js +47 -43
- package/dist/components/inputs/MessageInput.js.map +1 -1
- package/dist/components/inputs/MessageInput.module.css +23 -4
- package/dist/components/inputs/ReferencePopover.d.ts +7 -0
- package/dist/components/inputs/ReferencePopover.d.ts.map +1 -0
- package/dist/components/inputs/ReferencePopover.js +42 -0
- package/dist/components/inputs/ReferencePopover.js.map +1 -0
- package/dist/components/inputs/ReferencePopover.module.css +70 -0
- package/dist/components/inputs/SingleLinePlugin.d.ts +2 -0
- package/dist/components/inputs/SingleLinePlugin.d.ts.map +1 -0
- package/dist/components/inputs/SingleLinePlugin.js +24 -0
- package/dist/components/inputs/SingleLinePlugin.js.map +1 -0
- package/dist/components/inputs/variables/VariableChip.d.ts.map +1 -1
- package/dist/components/inputs/variables/VariableChip.js +31 -32
- package/dist/components/inputs/variables/VariableChip.js.map +1 -1
- package/dist/components/inputs/variables/VariableChip.module.css +3 -3
- package/dist/components/inputs/variables/VariableSuggestion.d.ts +4 -0
- package/dist/components/inputs/variables/VariableSuggestion.d.ts.map +1 -0
- package/dist/components/inputs/variables/VariableSuggestion.js +24 -0
- package/dist/components/inputs/variables/VariableSuggestion.js.map +1 -0
- package/dist/components/inputs/variables/editors/PluralVariableEditor.d.ts.map +1 -1
- package/dist/components/inputs/variables/editors/PluralVariableEditor.js +62 -60
- package/dist/components/inputs/variables/editors/PluralVariableEditor.js.map +1 -1
- package/dist/components/inputs/variables/editors/PluralVariableEditor.module.css +4 -4
- package/dist/components/inputs/variables/editors/TemporalVariableEditor.d.ts +11 -0
- package/dist/components/inputs/variables/editors/TemporalVariableEditor.d.ts.map +1 -0
- package/dist/components/inputs/variables/editors/{DateVariableEditor.js → TemporalVariableEditor.js} +3 -3
- package/dist/components/inputs/variables/editors/TemporalVariableEditor.js.map +1 -0
- package/dist/components/inputs/variables/pickers/NumericVariableEditor.d.ts +7 -0
- package/dist/components/inputs/variables/pickers/{NumericVariablePicker.d.ts.map → NumericVariableEditor.d.ts.map} +1 -1
- package/dist/components/inputs/variables/pickers/{NumericVariablePicker.js → NumericVariableEditor.js} +15 -9
- package/dist/components/inputs/variables/pickers/NumericVariableEditor.js.map +1 -0
- package/dist/components/inputs/variables/pickers/{NumericVariablePicker.module.css → NumericVariableEditor.module.css} +3 -3
- package/dist/components/inputs/variables/pickers/TemporalVariablePicker.d.ts +7 -0
- package/dist/components/inputs/variables/pickers/TemporalVariablePicker.d.ts.map +1 -0
- package/dist/components/inputs/variables/pickers/TemporalVariablePicker.js +57 -0
- package/dist/components/inputs/variables/pickers/TemporalVariablePicker.js.map +1 -0
- package/dist/components/inputs/variables/pickers/{TemporalElementEditor.module.css → TemporalVariablePicker.module.css} +3 -3
- package/dist/components/layout/GroupStatusDot.d.ts +6 -0
- package/dist/components/layout/GroupStatusDot.d.ts.map +1 -0
- package/dist/components/layout/GroupStatusDot.js +24 -0
- package/dist/components/layout/GroupStatusDot.js.map +1 -0
- package/dist/components/layout/MessageField.d.ts +2 -1
- package/dist/components/layout/MessageField.d.ts.map +1 -1
- package/dist/components/layout/MessageField.js +52 -33
- package/dist/components/layout/MessageField.js.map +1 -1
- package/dist/components/layout/MessageField.module.css +21 -10
- package/dist/components/layout/MessagesTabs.d.ts.map +1 -1
- package/dist/components/layout/MessagesTabs.js +3 -5
- package/dist/components/layout/MessagesTabs.js.map +1 -1
- package/dist/components/layout/MessagesTree.d.ts +1 -1
- package/dist/components/layout/MessagesTree.d.ts.map +1 -1
- package/dist/components/layout/MessagesTree.js +33 -43
- package/dist/components/layout/MessagesTree.js.map +1 -1
- package/dist/components/layout/MessagesTree.module.css +10 -5
- package/dist/components/layout/StatusDot.d.ts +7 -0
- package/dist/components/layout/StatusDot.d.ts.map +1 -0
- package/dist/components/layout/StatusDot.js +12 -0
- package/dist/components/layout/StatusDot.js.map +1 -0
- package/dist/components/layout/StatusDot.module.css +16 -0
- package/dist/const.d.ts +2 -2
- package/dist/const.js +1 -1
- package/dist/entities.js +1 -1
- package/dist/internals/index.d.ts.map +1 -0
- package/dist/internals/index.js.map +1 -0
- package/dist/internals/procedure.d.ts.map +1 -0
- package/dist/internals/procedure.js.map +1 -0
- package/dist/internals/urls.d.ts.map +1 -0
- package/dist/internals/urls.js.map +1 -0
- package/dist/internals/utils.d.ts.map +1 -0
- package/dist/internals/utils.js.map +1 -0
- package/dist/utils/sanitize.d.ts +7 -6
- package/dist/utils/sanitize.d.ts.map +1 -1
- package/dist/utils/sanitize.js +11 -8
- package/dist/utils/sanitize.js.map +1 -1
- package/package.json +4 -3
- package/dist/_common/index.d.ts.map +0 -1
- package/dist/_common/index.js.map +0 -1
- package/dist/_common/procedure.d.ts.map +0 -1
- package/dist/_common/procedure.js.map +0 -1
- package/dist/_common/urls.d.ts.map +0 -1
- package/dist/_common/urls.js.map +0 -1
- package/dist/_common/utils.d.ts.map +0 -1
- package/dist/_common/utils.js.map +0 -1
- package/dist/components/MessageController.d.ts +0 -13
- package/dist/components/MessageController.d.ts.map +0 -1
- package/dist/components/MessageController.js.map +0 -1
- package/dist/components/MessageFormContext.d.ts.map +0 -1
- package/dist/components/MessageFormContext.js.map +0 -1
- package/dist/components/actions/Move.d.ts +0 -2
- package/dist/components/actions/Move.d.ts.map +0 -1
- package/dist/components/actions/Move.js.map +0 -1
- package/dist/components/inputs/InputWrapper.d.ts +0 -8
- package/dist/components/inputs/InputWrapper.d.ts.map +0 -1
- package/dist/components/inputs/InputWrapper.js +0 -34
- package/dist/components/inputs/InputWrapper.js.map +0 -1
- package/dist/components/inputs/variables/editors/DateVariableEditor.d.ts +0 -10
- package/dist/components/inputs/variables/editors/DateVariableEditor.d.ts.map +0 -1
- package/dist/components/inputs/variables/editors/DateVariableEditor.js.map +0 -1
- package/dist/components/inputs/variables/editors/TimeVariableEditor.d.ts +0 -10
- package/dist/components/inputs/variables/editors/TimeVariableEditor.d.ts.map +0 -1
- package/dist/components/inputs/variables/editors/TimeVariableEditor.js +0 -15
- package/dist/components/inputs/variables/editors/TimeVariableEditor.js.map +0 -1
- package/dist/components/inputs/variables/pickers/NumericVariablePicker.d.ts +0 -7
- package/dist/components/inputs/variables/pickers/NumericVariablePicker.js.map +0 -1
- package/dist/components/inputs/variables/pickers/TemporalElementEditor.d.ts +0 -7
- package/dist/components/inputs/variables/pickers/TemporalElementEditor.d.ts.map +0 -1
- package/dist/components/inputs/variables/pickers/TemporalElementEditor.js +0 -58
- package/dist/components/inputs/variables/pickers/TemporalElementEditor.js.map +0 -1
- /package/dist/components/actions/{Move.module.css → CopyMessages.module.css} +0 -0
- /package/dist/{_common → internals}/index.d.ts +0 -0
- /package/dist/{_common → internals}/index.js +0 -0
- /package/dist/{_common → internals}/procedure.d.ts +0 -0
- /package/dist/{_common → internals}/procedure.js +0 -0
- /package/dist/{_common → internals}/urls.d.ts +0 -0
- /package/dist/{_common → internals}/urls.js +0 -0
- /package/dist/{_common → internals}/utils.d.ts +0 -0
- /package/dist/{_common → internals}/utils.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"NumericVariableEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/inputs/variables/pickers/NumericVariableEditor.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAe5D,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,aAAa,GAAG,aAAa,CAAC;IACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,QAAQ,GACT,EAAE,0BAA0B,2CA6C5B"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { Toggle } from '@base-ui/react/toggle';
|
|
3
|
+
import { ToggleGroup } from '@base-ui/react/toggle-group';
|
|
3
4
|
import { useEffect, useRef, useState } from 'react';
|
|
4
5
|
import { isNumberElement, isPluralElement } from '../../../../utils/guards';
|
|
5
6
|
import { PluralVariableEditor } from '../editors/PluralVariableEditor';
|
|
6
|
-
import styles from './
|
|
7
|
+
import styles from './NumericVariableEditor.module.css';
|
|
7
8
|
const NUMERIC_TYPES = [
|
|
8
9
|
'number',
|
|
9
10
|
'plural'
|
|
10
11
|
];
|
|
11
|
-
export function
|
|
12
|
+
export function NumericVariableEditor({ element, onUpdate }) {
|
|
12
13
|
const [type, setType] = useState(()=>{
|
|
13
14
|
if (isNumberElement(element)) return 'number';
|
|
14
15
|
if (isPluralElement(element)) return 'plural';
|
|
@@ -24,12 +25,17 @@ export function NumericVariablePicker({ element, onUpdate }) {
|
|
|
24
25
|
}, []);
|
|
25
26
|
return /*#__PURE__*/ _jsxs("div", {
|
|
26
27
|
children: [
|
|
27
|
-
/*#__PURE__*/ _jsx(ToggleGroup
|
|
28
|
+
/*#__PURE__*/ _jsx(ToggleGroup, {
|
|
28
29
|
className: styles.toggleGroup,
|
|
29
|
-
onValueChange: (
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
onValueChange: (newValue)=>{
|
|
31
|
+
if (newValue.length === 0) return;
|
|
32
|
+
const next = newValue.find((v)=>v !== type);
|
|
33
|
+
if (next) setType(next);
|
|
34
|
+
},
|
|
35
|
+
value: type ? [
|
|
36
|
+
type
|
|
37
|
+
] : [],
|
|
38
|
+
children: NUMERIC_TYPES.map((type)=>/*#__PURE__*/ _jsx(Toggle, {
|
|
33
39
|
className: styles.toggleItem,
|
|
34
40
|
value: type,
|
|
35
41
|
children: type
|
|
@@ -47,4 +53,4 @@ export function NumericVariablePicker({ element, onUpdate }) {
|
|
|
47
53
|
});
|
|
48
54
|
}
|
|
49
55
|
|
|
50
|
-
//# sourceMappingURL=
|
|
56
|
+
//# sourceMappingURL=NumericVariableEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/inputs/variables/pickers/NumericVariableEditor.tsx"],"sourcesContent":["import { Toggle } from '@base-ui/react/toggle';\nimport { ToggleGroup } from '@base-ui/react/toggle-group';\nimport { useEffect, useRef, useState } from 'react';\nimport type { NumberElement, PluralElement } from '@/types';\n\nimport { isNumberElement, isPluralElement } from '@/utils/guards';\n\nimport { PluralVariableEditor } from '../editors/PluralVariableEditor';\nimport styles from './NumericVariableEditor.module.css';\n\nconst NUMERIC_TYPES = [\n 'number',\n 'plural',\n // \"selectordinal\"\n] as const;\n\ntype NumericType = (typeof NUMERIC_TYPES)[number];\n\nexport interface NumericVariableEditorProps {\n element: NumberElement | PluralElement;\n onUpdate: (value: string) => void;\n}\n\nexport function NumericVariableEditor({\n element,\n onUpdate,\n}: NumericVariableEditorProps) {\n const [type, setType] = useState<NumericType | undefined>(() => {\n if (isNumberElement(element)) return 'number';\n if (isPluralElement(element)) return 'plural';\n return undefined;\n });\n const getValueRef = useRef<{ getValue: () => string }>(null);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: useEffectEvent\n useEffect(() => {\n return () => {\n if (!getValueRef.current) return;\n onUpdate(getValueRef.current.getValue());\n };\n }, []);\n\n return (\n <div>\n <ToggleGroup\n className={styles.toggleGroup}\n onValueChange={(newValue) => {\n if (newValue.length === 0) return;\n const next = newValue.find((v) => v !== type);\n if (next) setType(next as NumericType);\n }}\n value={type ? [type] : []}\n >\n {NUMERIC_TYPES.map((type) => (\n <Toggle className={styles.toggleItem} key={type} value={type}>\n {type}\n </Toggle>\n ))}\n </ToggleGroup>\n\n <div className={styles.content}>\n {type === 'plural' && (\n <PluralVariableEditor\n element={isPluralElement(element) ? element : undefined}\n ref={getValueRef}\n variableName={element.value}\n />\n )}\n </div>\n </div>\n );\n}\n"],"names":["Toggle","ToggleGroup","useEffect","useRef","useState","isNumberElement","isPluralElement","PluralVariableEditor","styles","NUMERIC_TYPES","NumericVariableEditor","element","onUpdate","type","setType","undefined","getValueRef","current","getValue","div","className","toggleGroup","onValueChange","newValue","length","next","find","v","value","map","toggleItem","content","ref","variableName"],"mappings":";AAAA,SAASA,MAAM,QAAQ,wBAAwB;AAC/C,SAASC,WAAW,QAAQ,8BAA8B;AAC1D,SAASC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAGpD,SAASC,eAAe,EAAEC,eAAe,QAAQ,iBAAiB;AAElE,SAASC,oBAAoB,QAAQ,kCAAkC;AACvE,OAAOC,YAAY,qCAAqC;AAExD,MAAMC,gBAAgB;IACpB;IACA;CAED;AASD,OAAO,SAASC,sBAAsB,EACpCC,OAAO,EACPC,QAAQ,EACmB;IAC3B,MAAM,CAACC,MAAMC,QAAQ,GAAGV,SAAkC;QACxD,IAAIC,gBAAgBM,UAAU,OAAO;QACrC,IAAIL,gBAAgBK,UAAU,OAAO;QACrC,OAAOI;IACT;IACA,MAAMC,cAAcb,OAAmC;IAEvD,0EAA0E;IAC1ED,UAAU;QACR,OAAO;YACL,IAAI,CAACc,YAAYC,OAAO,EAAE;YAC1BL,SAASI,YAAYC,OAAO,CAACC,QAAQ;QACvC;IACF,GAAG,EAAE;IAEL,qBACE,MAACC;;0BACC,KAAClB;gBACCmB,WAAWZ,OAAOa,WAAW;gBAC7BC,eAAe,CAACC;oBACd,IAAIA,SAASC,MAAM,KAAK,GAAG;oBAC3B,MAAMC,OAAOF,SAASG,IAAI,CAAC,CAACC,IAAMA,MAAMd;oBACxC,IAAIY,MAAMX,QAAQW;gBACpB;gBACAG,OAAOf,OAAO;oBAACA;iBAAK,GAAG,EAAE;0BAExBJ,cAAcoB,GAAG,CAAC,CAAChB,qBAClB,KAACb;wBAAOoB,WAAWZ,OAAOsB,UAAU;wBAAaF,OAAOf;kCACrDA;uBADwCA;;0BAM/C,KAACM;gBAAIC,WAAWZ,OAAOuB,OAAO;0BAC3BlB,SAAS,0BACR,KAACN;oBACCI,SAASL,gBAAgBK,WAAWA,UAAUI;oBAC9CiB,KAAKhB;oBACLiB,cAActB,QAAQiB,KAAK;;;;;AAMvC"}
|
|
@@ -8,16 +8,16 @@
|
|
|
8
8
|
border: none;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
.toggleItem[data-
|
|
11
|
+
.toggleItem:not([data-pressed]) {
|
|
12
12
|
cursor: pointer;
|
|
13
13
|
opacity: 0.5;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
.toggleItem[data-
|
|
16
|
+
.toggleItem:not([data-pressed]):hover {
|
|
17
17
|
opacity: 1;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
.toggleItem[data-
|
|
20
|
+
.toggleItem[data-pressed] {
|
|
21
21
|
background-color: var(--theme-elevation-800);
|
|
22
22
|
color: var(--theme-elevation-0);
|
|
23
23
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DateElement, TimeElement } from '../../../../types';
|
|
2
|
+
export interface TemporalVariablePickerProps {
|
|
3
|
+
element: DateElement | TimeElement;
|
|
4
|
+
onUpdate: (value: string) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function TemporalVariablePicker({ element, onUpdate, }: TemporalVariablePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=TemporalVariablePicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemporalVariablePicker.d.ts","sourceRoot":"","sources":["../../../../../src/components/inputs/variables/pickers/TemporalVariablePicker.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAWxD,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,WAAW,GAAG,WAAW,CAAC;IACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,QAAQ,GACT,EAAE,2BAA2B,2CAsD7B"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Toggle } from '@base-ui/react/toggle';
|
|
3
|
+
import { ToggleGroup } from '@base-ui/react/toggle-group';
|
|
4
|
+
import { useEffect, useRef, useState } from 'react';
|
|
5
|
+
import { isDateElement, isTimeElement } from '../../../../utils/guards';
|
|
6
|
+
import { TemporalVariableEditor } from '../editors/TemporalVariableEditor';
|
|
7
|
+
import styles from './TemporalVariablePicker.module.css';
|
|
8
|
+
const TEMPORAL_TYPES = [
|
|
9
|
+
'date',
|
|
10
|
+
'time'
|
|
11
|
+
];
|
|
12
|
+
export function TemporalVariablePicker({ element, onUpdate }) {
|
|
13
|
+
const [type, setType] = useState(()=>{
|
|
14
|
+
if (isDateElement(element)) return 'date';
|
|
15
|
+
if (isTimeElement(element)) return 'time';
|
|
16
|
+
return undefined;
|
|
17
|
+
});
|
|
18
|
+
const getValueRef = useRef(null);
|
|
19
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: useEffectEvent
|
|
20
|
+
useEffect(()=>{
|
|
21
|
+
return ()=>{
|
|
22
|
+
if (!getValueRef.current) return;
|
|
23
|
+
onUpdate(getValueRef.current.getValue());
|
|
24
|
+
};
|
|
25
|
+
}, []);
|
|
26
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
27
|
+
children: [
|
|
28
|
+
/*#__PURE__*/ _jsx(ToggleGroup, {
|
|
29
|
+
className: styles.toggleGroup,
|
|
30
|
+
onValueChange: (newValue)=>{
|
|
31
|
+
if (newValue.length === 0) return;
|
|
32
|
+
const next = newValue.find((v)=>v !== type);
|
|
33
|
+
if (next) setType(next);
|
|
34
|
+
},
|
|
35
|
+
value: type ? [
|
|
36
|
+
type
|
|
37
|
+
] : [],
|
|
38
|
+
children: TEMPORAL_TYPES.map((type)=>/*#__PURE__*/ _jsx(Toggle, {
|
|
39
|
+
className: styles.toggleItem,
|
|
40
|
+
value: type,
|
|
41
|
+
children: type
|
|
42
|
+
}, type))
|
|
43
|
+
}),
|
|
44
|
+
/*#__PURE__*/ _jsx("div", {
|
|
45
|
+
className: styles.content,
|
|
46
|
+
children: type && /*#__PURE__*/ _jsx(TemporalVariableEditor, {
|
|
47
|
+
element: type === 'date' ? isDateElement(element) ? element : undefined : isTimeElement(element) ? element : undefined,
|
|
48
|
+
name: element.value,
|
|
49
|
+
ref: getValueRef,
|
|
50
|
+
type: type
|
|
51
|
+
})
|
|
52
|
+
})
|
|
53
|
+
]
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=TemporalVariablePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/inputs/variables/pickers/TemporalVariablePicker.tsx"],"sourcesContent":["import { Toggle } from '@base-ui/react/toggle';\nimport { ToggleGroup } from '@base-ui/react/toggle-group';\nimport { useEffect, useRef, useState } from 'react';\nimport type { DateElement, TimeElement } from '@/types';\n\nimport { isDateElement, isTimeElement } from '@/utils/guards';\n\nimport { TemporalVariableEditor } from '../editors/TemporalVariableEditor';\nimport styles from './TemporalVariablePicker.module.css';\n\nconst TEMPORAL_TYPES = ['date', 'time'] as const;\n\ntype TemporalType = (typeof TEMPORAL_TYPES)[number];\n\nexport interface TemporalVariablePickerProps {\n element: DateElement | TimeElement;\n onUpdate: (value: string) => void;\n}\n\nexport function TemporalVariablePicker({\n element,\n onUpdate,\n}: TemporalVariablePickerProps) {\n const [type, setType] = useState<TemporalType | undefined>(() => {\n if (isDateElement(element)) return 'date';\n if (isTimeElement(element)) return 'time';\n return undefined;\n });\n const getValueRef = useRef<{ getValue: () => string }>(null);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: useEffectEvent\n useEffect(() => {\n return () => {\n if (!getValueRef.current) return;\n onUpdate(getValueRef.current.getValue());\n };\n }, []);\n\n return (\n <div>\n <ToggleGroup\n className={styles.toggleGroup}\n onValueChange={(newValue) => {\n if (newValue.length === 0) return;\n const next = newValue.find((v) => v !== type);\n if (next) setType(next as TemporalType);\n }}\n value={type ? [type] : []}\n >\n {TEMPORAL_TYPES.map((type) => (\n <Toggle className={styles.toggleItem} key={type} value={type}>\n {type}\n </Toggle>\n ))}\n </ToggleGroup>\n\n <div className={styles.content}>\n {type && (\n <TemporalVariableEditor\n element={\n type === 'date'\n ? isDateElement(element)\n ? element\n : undefined\n : isTimeElement(element)\n ? element\n : undefined\n }\n name={element.value}\n ref={getValueRef}\n type={type}\n />\n )}\n </div>\n </div>\n );\n}\n"],"names":["Toggle","ToggleGroup","useEffect","useRef","useState","isDateElement","isTimeElement","TemporalVariableEditor","styles","TEMPORAL_TYPES","TemporalVariablePicker","element","onUpdate","type","setType","undefined","getValueRef","current","getValue","div","className","toggleGroup","onValueChange","newValue","length","next","find","v","value","map","toggleItem","content","name","ref"],"mappings":";AAAA,SAASA,MAAM,QAAQ,wBAAwB;AAC/C,SAASC,WAAW,QAAQ,8BAA8B;AAC1D,SAASC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAGpD,SAASC,aAAa,EAAEC,aAAa,QAAQ,iBAAiB;AAE9D,SAASC,sBAAsB,QAAQ,oCAAoC;AAC3E,OAAOC,YAAY,sCAAsC;AAEzD,MAAMC,iBAAiB;IAAC;IAAQ;CAAO;AASvC,OAAO,SAASC,uBAAuB,EACrCC,OAAO,EACPC,QAAQ,EACoB;IAC5B,MAAM,CAACC,MAAMC,QAAQ,GAAGV,SAAmC;QACzD,IAAIC,cAAcM,UAAU,OAAO;QACnC,IAAIL,cAAcK,UAAU,OAAO;QACnC,OAAOI;IACT;IACA,MAAMC,cAAcb,OAAmC;IAEvD,0EAA0E;IAC1ED,UAAU;QACR,OAAO;YACL,IAAI,CAACc,YAAYC,OAAO,EAAE;YAC1BL,SAASI,YAAYC,OAAO,CAACC,QAAQ;QACvC;IACF,GAAG,EAAE;IAEL,qBACE,MAACC;;0BACC,KAAClB;gBACCmB,WAAWZ,OAAOa,WAAW;gBAC7BC,eAAe,CAACC;oBACd,IAAIA,SAASC,MAAM,KAAK,GAAG;oBAC3B,MAAMC,OAAOF,SAASG,IAAI,CAAC,CAACC,IAAMA,MAAMd;oBACxC,IAAIY,MAAMX,QAAQW;gBACpB;gBACAG,OAAOf,OAAO;oBAACA;iBAAK,GAAG,EAAE;0BAExBJ,eAAeoB,GAAG,CAAC,CAAChB,qBACnB,KAACb;wBAAOoB,WAAWZ,OAAOsB,UAAU;wBAAaF,OAAOf;kCACrDA;uBADwCA;;0BAM/C,KAACM;gBAAIC,WAAWZ,OAAOuB,OAAO;0BAC3BlB,sBACC,KAACN;oBACCI,SACEE,SAAS,SACLR,cAAcM,WACZA,UACAI,YACFT,cAAcK,WACZA,UACAI;oBAERiB,MAAMrB,QAAQiB,KAAK;oBACnBK,KAAKjB;oBACLH,MAAMA;;;;;AAMlB"}
|
|
@@ -8,16 +8,16 @@
|
|
|
8
8
|
border: none;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
.toggleItem[data-
|
|
11
|
+
.toggleItem:not([data-pressed]) {
|
|
12
12
|
cursor: pointer;
|
|
13
13
|
opacity: 0.5;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
.toggleItem[data-
|
|
16
|
+
.toggleItem:not([data-pressed]):hover {
|
|
17
17
|
opacity: 1;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
.toggleItem[data-
|
|
20
|
+
.toggleItem[data-pressed] {
|
|
21
21
|
background-color: var(--theme-elevation-800);
|
|
22
22
|
color: var(--theme-elevation-0);
|
|
23
23
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupStatusDot.d.ts","sourceRoot":"","sources":["../../../src/components/layout/GroupStatusDot.tsx"],"names":[],"mappings":"AAaA,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE,mBAAmB,2CAK3D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useWatch } from 'react-hook-form';
|
|
3
|
+
import { useMessagesForm } from '../../components/MessagesFormProvider';
|
|
4
|
+
import { StatusDot } from './StatusDot';
|
|
5
|
+
function isFullyTranslated(values) {
|
|
6
|
+
if (typeof values === 'string') return values.length > 0;
|
|
7
|
+
if (values && typeof values === 'object') {
|
|
8
|
+
return Object.values(values).every(isFullyTranslated);
|
|
9
|
+
}
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
export function GroupStatusDot({ path }) {
|
|
13
|
+
const { control, activeLocale } = useMessagesForm();
|
|
14
|
+
const value = useWatch({
|
|
15
|
+
control,
|
|
16
|
+
name: `${activeLocale}.${path}`
|
|
17
|
+
});
|
|
18
|
+
const status = isFullyTranslated(value) ? 'translated' : 'missing';
|
|
19
|
+
return /*#__PURE__*/ _jsx(StatusDot, {
|
|
20
|
+
status: status
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=GroupStatusDot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/layout/GroupStatusDot.tsx"],"sourcesContent":["import { useWatch } from 'react-hook-form';\nimport { useMessagesForm } from '@/components/MessagesFormProvider';\n\nimport { StatusDot } from './StatusDot';\n\nfunction isFullyTranslated(values: unknown): boolean {\n if (typeof values === 'string') return values.length > 0;\n if (values && typeof values === 'object') {\n return Object.values(values).every(isFullyTranslated);\n }\n return false;\n}\n\ninterface GroupStatusDotProps {\n path: string;\n}\n\nexport function GroupStatusDot({ path }: GroupStatusDotProps) {\n const { control, activeLocale } = useMessagesForm();\n const value = useWatch({ control, name: `${activeLocale}.${path}` as never });\n const status = isFullyTranslated(value) ? 'translated' : 'missing';\n return <StatusDot status={status} />;\n}\n"],"names":["useWatch","useMessagesForm","StatusDot","isFullyTranslated","values","length","Object","every","GroupStatusDot","path","control","activeLocale","value","name","status"],"mappings":";AAAA,SAASA,QAAQ,QAAQ,kBAAkB;AAC3C,SAASC,eAAe,QAAQ,oCAAoC;AAEpE,SAASC,SAAS,QAAQ,cAAc;AAExC,SAASC,kBAAkBC,MAAe;IACxC,IAAI,OAAOA,WAAW,UAAU,OAAOA,OAAOC,MAAM,GAAG;IACvD,IAAID,UAAU,OAAOA,WAAW,UAAU;QACxC,OAAOE,OAAOF,MAAM,CAACA,QAAQG,KAAK,CAACJ;IACrC;IACA,OAAO;AACT;AAMA,OAAO,SAASK,eAAe,EAAEC,IAAI,EAAuB;IAC1D,MAAM,EAAEC,OAAO,EAAEC,YAAY,EAAE,GAAGV;IAClC,MAAMW,QAAQZ,SAAS;QAAEU;QAASG,MAAM,GAAGF,aAAa,CAAC,EAAEF,MAAM;IAAU;IAC3E,MAAMK,SAASX,kBAAkBS,SAAS,eAAe;IACzD,qBAAO,KAACV;QAAUY,QAAQA;;AAC5B"}
|
|
@@ -4,7 +4,8 @@ interface MessageFieldProps {
|
|
|
4
4
|
messageKey: string;
|
|
5
5
|
path: string;
|
|
6
6
|
hidden?: boolean;
|
|
7
|
+
showStatus?: boolean;
|
|
7
8
|
}
|
|
8
|
-
export declare
|
|
9
|
+
export declare const MessageField: import("react").NamedExoticComponent<MessageFieldProps>;
|
|
9
10
|
export {};
|
|
10
11
|
//# sourceMappingURL=MessageField.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageField.d.ts","sourceRoot":"","sources":["../../../src/components/layout/MessageField.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MessageField.d.ts","sourceRoot":"","sources":["../../../src/components/layout/MessageField.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAS7C,UAAU,iBAAiB;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,YAAY,yDAwDvB,CAAC"}
|
|
@@ -1,21 +1,38 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { get } from 'lodash-es';
|
|
4
|
+
import { memo, useMemo } from 'react';
|
|
5
|
+
import { useFormState, useWatch } from 'react-hook-form';
|
|
6
|
+
import { useMessagesForm } from '../../components/MessagesFormProvider';
|
|
7
|
+
import { toWords } from '../../utils/format';
|
|
4
8
|
import { parseMessageSchema } from '../../utils/schema';
|
|
5
9
|
import { createValidator } from '../../utils/validate';
|
|
6
|
-
import {
|
|
10
|
+
import { MessageFormField } from '../MessageFormField';
|
|
11
|
+
import { GroupStatusDot } from './GroupStatusDot';
|
|
7
12
|
import styles from './MessageField.module.css';
|
|
8
|
-
export function MessageField({ schema, messageKey, path, hidden }) {
|
|
9
|
-
const {
|
|
13
|
+
export const MessageField = /*#__PURE__*/ memo(function MessageField({ schema, messageKey, path, hidden, showStatus }) {
|
|
14
|
+
const { defaultLocale, activeLocale, control } = useMessagesForm();
|
|
10
15
|
const config = useMemo(()=>parseMessageSchema(schema), [
|
|
11
16
|
schema
|
|
12
17
|
]);
|
|
13
18
|
const validator = useMemo(()=>createValidator(config.variables), [
|
|
14
19
|
config.variables
|
|
15
20
|
]);
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
const multiline = schema.includes('\n');
|
|
22
|
+
const isDefaultLocale = activeLocale === defaultLocale;
|
|
23
|
+
const fieldPath = [
|
|
24
|
+
path,
|
|
25
|
+
messageKey
|
|
26
|
+
].filter(Boolean).join('.');
|
|
27
|
+
const fullName = `${activeLocale}.${fieldPath}`;
|
|
28
|
+
const defaultValue = useWatch({
|
|
29
|
+
name: `${defaultLocale}.${fieldPath}`
|
|
30
|
+
});
|
|
31
|
+
const { errors } = useFormState({
|
|
32
|
+
control
|
|
33
|
+
});
|
|
34
|
+
const hasError = get(errors, fullName) !== undefined;
|
|
35
|
+
const content = /*#__PURE__*/ _jsxs("div", {
|
|
19
36
|
style: {
|
|
20
37
|
display: hidden ? 'none' : undefined
|
|
21
38
|
},
|
|
@@ -23,35 +40,37 @@ export function MessageField({ schema, messageKey, path, hidden }) {
|
|
|
23
40
|
config.description && /*#__PURE__*/ _jsx("p", {
|
|
24
41
|
children: config.description
|
|
25
42
|
}),
|
|
26
|
-
|
|
27
|
-
locale:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
messageKey
|
|
32
|
-
].join('.'),
|
|
43
|
+
/*#__PURE__*/ _jsx(MessageFormField, {
|
|
44
|
+
locale: activeLocale,
|
|
45
|
+
multiline: multiline,
|
|
46
|
+
name: fullName,
|
|
47
|
+
reference: !isDefaultLocale ? defaultValue : undefined,
|
|
33
48
|
validate: validator,
|
|
34
49
|
variables: config.variables
|
|
35
|
-
}) : /*#__PURE__*/ _jsx("div", {
|
|
36
|
-
className: [
|
|
37
|
-
styles.localeRow,
|
|
38
|
-
styles.localeRowScrollable
|
|
39
|
-
].filter(Boolean).join(' '),
|
|
40
|
-
children: locales.map((locale)=>/*#__PURE__*/ _jsx(MessageController, {
|
|
41
|
-
className: styles.localeItem,
|
|
42
|
-
label: locale.toUpperCase(),
|
|
43
|
-
locale: locale,
|
|
44
|
-
name: [
|
|
45
|
-
locale,
|
|
46
|
-
path,
|
|
47
|
-
messageKey
|
|
48
|
-
].join('.'),
|
|
49
|
-
validate: validator,
|
|
50
|
-
variables: config.variables
|
|
51
|
-
}, locale))
|
|
52
50
|
})
|
|
53
51
|
]
|
|
54
52
|
});
|
|
55
|
-
|
|
53
|
+
if (showStatus !== undefined) {
|
|
54
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
55
|
+
className: clsx(styles.row, hasError && styles.rowError),
|
|
56
|
+
children: [
|
|
57
|
+
/*#__PURE__*/ _jsxs("span", {
|
|
58
|
+
className: styles.label,
|
|
59
|
+
children: [
|
|
60
|
+
toWords(messageKey),
|
|
61
|
+
showStatus && /*#__PURE__*/ _jsx(GroupStatusDot, {
|
|
62
|
+
path: fieldPath
|
|
63
|
+
})
|
|
64
|
+
]
|
|
65
|
+
}),
|
|
66
|
+
/*#__PURE__*/ _jsx("div", {
|
|
67
|
+
className: styles.input,
|
|
68
|
+
children: content
|
|
69
|
+
})
|
|
70
|
+
]
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return content;
|
|
74
|
+
});
|
|
56
75
|
|
|
57
76
|
//# sourceMappingURL=MessageField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/layout/MessageField.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useMessagesForm } from '@/components/
|
|
1
|
+
{"version":3,"sources":["../../../src/components/layout/MessageField.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport { get } from 'lodash-es';\nimport { memo, useMemo } from 'react';\nimport { useFormState, useWatch } from 'react-hook-form';\nimport { useMessagesForm } from '@/components/MessagesFormProvider';\nimport type { MessageSchema } from '@/types';\nimport { toWords } from '@/utils/format';\nimport { parseMessageSchema } from '@/utils/schema';\nimport { createValidator } from '@/utils/validate';\n\nimport { MessageFormField } from '../MessageFormField';\nimport { GroupStatusDot } from './GroupStatusDot';\nimport styles from './MessageField.module.css';\n\ninterface MessageFieldProps {\n schema: MessageSchema;\n messageKey: string;\n path: string;\n hidden?: boolean;\n showStatus?: boolean;\n}\n\nexport const MessageField = memo(function MessageField({\n schema,\n messageKey,\n path,\n hidden,\n showStatus,\n}: MessageFieldProps): React.ReactNode {\n const { defaultLocale, activeLocale, control } = useMessagesForm();\n\n const config = useMemo(() => parseMessageSchema(schema), [schema]);\n\n const validator = useMemo(\n () => createValidator(config.variables),\n [config.variables],\n );\n\n const multiline = schema.includes('\\n');\n const isDefaultLocale = activeLocale === defaultLocale;\n const fieldPath = [path, messageKey].filter(Boolean).join('.');\n const fullName = `${activeLocale}.${fieldPath}`;\n\n const defaultValue = useWatch({ name: `${defaultLocale}.${fieldPath}` }) as\n | string\n | undefined;\n\n const { errors } = useFormState({ control });\n const hasError = get(errors, fullName) !== undefined;\n\n const content = (\n <div style={{ display: hidden ? 'none' : undefined }}>\n {config.description && <p>{config.description}</p>}\n\n <MessageFormField\n locale={activeLocale}\n multiline={multiline}\n name={fullName}\n reference={!isDefaultLocale ? defaultValue : undefined}\n validate={validator}\n variables={config.variables}\n />\n </div>\n );\n\n if (showStatus !== undefined) {\n return (\n <div className={clsx(styles.row, hasError && styles.rowError)}>\n <span className={styles.label}>\n {toWords(messageKey)}\n {showStatus && <GroupStatusDot path={fieldPath} />}\n </span>\n <div className={styles.input}>{content}</div>\n </div>\n );\n }\n\n return content;\n});\n"],"names":["clsx","get","memo","useMemo","useFormState","useWatch","useMessagesForm","toWords","parseMessageSchema","createValidator","MessageFormField","GroupStatusDot","styles","MessageField","schema","messageKey","path","hidden","showStatus","defaultLocale","activeLocale","control","config","validator","variables","multiline","includes","isDefaultLocale","fieldPath","filter","Boolean","join","fullName","defaultValue","name","errors","hasError","undefined","content","div","style","display","description","p","locale","reference","validate","className","row","rowError","span","label","input"],"mappings":";AAAA,OAAOA,UAAU,OAAO;AACxB,SAASC,GAAG,QAAQ,YAAY;AAChC,SAASC,IAAI,EAAEC,OAAO,QAAQ,QAAQ;AACtC,SAASC,YAAY,EAAEC,QAAQ,QAAQ,kBAAkB;AACzD,SAASC,eAAe,QAAQ,oCAAoC;AAEpE,SAASC,OAAO,QAAQ,iBAAiB;AACzC,SAASC,kBAAkB,QAAQ,iBAAiB;AACpD,SAASC,eAAe,QAAQ,mBAAmB;AAEnD,SAASC,gBAAgB,QAAQ,sBAAsB;AACvD,SAASC,cAAc,QAAQ,mBAAmB;AAClD,OAAOC,YAAY,4BAA4B;AAU/C,OAAO,MAAMC,6BAAeX,KAAK,SAASW,aAAa,EACrDC,MAAM,EACNC,UAAU,EACVC,IAAI,EACJC,MAAM,EACNC,UAAU,EACQ;IAClB,MAAM,EAAEC,aAAa,EAAEC,YAAY,EAAEC,OAAO,EAAE,GAAGf;IAEjD,MAAMgB,SAASnB,QAAQ,IAAMK,mBAAmBM,SAAS;QAACA;KAAO;IAEjE,MAAMS,YAAYpB,QAChB,IAAMM,gBAAgBa,OAAOE,SAAS,GACtC;QAACF,OAAOE,SAAS;KAAC;IAGpB,MAAMC,YAAYX,OAAOY,QAAQ,CAAC;IAClC,MAAMC,kBAAkBP,iBAAiBD;IACzC,MAAMS,YAAY;QAACZ;QAAMD;KAAW,CAACc,MAAM,CAACC,SAASC,IAAI,CAAC;IAC1D,MAAMC,WAAW,GAAGZ,aAAa,CAAC,EAAEQ,WAAW;IAE/C,MAAMK,eAAe5B,SAAS;QAAE6B,MAAM,GAAGf,cAAc,CAAC,EAAES,WAAW;IAAC;IAItE,MAAM,EAAEO,MAAM,EAAE,GAAG/B,aAAa;QAAEiB;IAAQ;IAC1C,MAAMe,WAAWnC,IAAIkC,QAAQH,cAAcK;IAE3C,MAAMC,wBACJ,MAACC;QAAIC,OAAO;YAAEC,SAASxB,SAAS,SAASoB;QAAU;;YAChDf,OAAOoB,WAAW,kBAAI,KAACC;0BAAGrB,OAAOoB,WAAW;;0BAE7C,KAAChC;gBACCkC,QAAQxB;gBACRK,WAAWA;gBACXS,MAAMF;gBACNa,WAAW,CAAClB,kBAAkBM,eAAeI;gBAC7CS,UAAUvB;gBACVC,WAAWF,OAAOE,SAAS;;;;IAKjC,IAAIN,eAAemB,WAAW;QAC5B,qBACE,MAACE;YAAIQ,WAAW/C,KAAKY,OAAOoC,GAAG,EAAEZ,YAAYxB,OAAOqC,QAAQ;;8BAC1D,MAACC;oBAAKH,WAAWnC,OAAOuC,KAAK;;wBAC1B5C,QAAQQ;wBACRG,4BAAc,KAACP;4BAAeK,MAAMY;;;;8BAEvC,KAACW;oBAAIQ,WAAWnC,OAAOwC,KAAK;8BAAGd;;;;IAGrC;IAEA,OAAOA;AACT,GAAG"}
|
|
@@ -1,19 +1,30 @@
|
|
|
1
|
-
.
|
|
2
|
-
margin-inline: -0.75rem;
|
|
1
|
+
.row {
|
|
3
2
|
display: flex;
|
|
4
|
-
|
|
3
|
+
align-items: flex-start;
|
|
5
4
|
gap: 1rem;
|
|
6
|
-
padding-
|
|
5
|
+
padding-left: 0.75rem;
|
|
6
|
+
background-color: var(--theme-elevation-50);
|
|
7
|
+
border: 1px solid var(--theme-border-color);
|
|
8
|
+
border-radius: var(--style-radius-m);
|
|
7
9
|
}
|
|
8
10
|
|
|
9
|
-
.
|
|
10
|
-
|
|
11
|
+
.rowError {
|
|
12
|
+
border-color: var(--theme-error-400);
|
|
11
13
|
}
|
|
12
14
|
|
|
13
|
-
.
|
|
14
|
-
|
|
15
|
+
.label {
|
|
16
|
+
display: inline-flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
flex-shrink: 0;
|
|
19
|
+
min-width: 10ch;
|
|
20
|
+
padding-top: 0.35rem;
|
|
21
|
+
font-size: var(--font-size-large);
|
|
22
|
+
font-weight: 500;
|
|
15
23
|
}
|
|
16
24
|
|
|
17
|
-
.
|
|
18
|
-
|
|
25
|
+
.input {
|
|
26
|
+
flex: 1;
|
|
27
|
+
min-width: 0;
|
|
28
|
+
margin-block: -1px;
|
|
29
|
+
margin-right: -1px;
|
|
19
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessagesTabs.d.ts","sourceRoot":"","sources":["../../../src/components/layout/MessagesTabs.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MessagesTabs.d.ts","sourceRoot":"","sources":["../../../src/components/layout/MessagesTabs.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C,UAAU,iBAAiB;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAGD,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,SAAS,EACT,YAAY,GACb,EAAE,iBAAiB,GAAG,KAAK,CAAC,SAAS,CA+BrC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Button } from '@payloadcms/ui';
|
|
3
|
+
import clsx from 'clsx';
|
|
3
4
|
import { get } from 'lodash-es';
|
|
4
5
|
import { useCallback } from 'react';
|
|
5
6
|
import { useFormState } from 'react-hook-form';
|
|
6
|
-
import { useMessagesForm } from '../../components/
|
|
7
|
+
import { useMessagesForm } from '../../components/MessagesFormProvider';
|
|
7
8
|
import { toWords } from '../../utils/format';
|
|
8
9
|
import styles from './MessagesTabs.module.css';
|
|
9
10
|
// TODO add hash for current tab to url
|
|
@@ -26,10 +27,7 @@ export function MessagesTabs({ schema, activeTab, setActiveTab }) {
|
|
|
26
27
|
role: "tablist",
|
|
27
28
|
children: Object.keys(schema).map((key)=>/*#__PURE__*/ _jsx(Button, {
|
|
28
29
|
buttonStyle: activeTab === key ? 'pill' : 'tab',
|
|
29
|
-
className:
|
|
30
|
-
styles.tab,
|
|
31
|
-
hasErrors(key) ? activeTab === key ? styles.tabError : styles.tabErrorInactive : undefined
|
|
32
|
-
].filter(Boolean).join(' '),
|
|
30
|
+
className: clsx(styles.tab, hasErrors(key) && activeTab === key && styles.tabError, hasErrors(key) && activeTab !== key && styles.tabErrorInactive),
|
|
33
31
|
onClick: ()=>setActiveTab(key),
|
|
34
32
|
size: "large",
|
|
35
33
|
type: "button",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/layout/MessagesTabs.tsx"],"sourcesContent":["import { Button } from '@payloadcms/ui';\nimport { get } from 'lodash-es';\nimport { useCallback } from 'react';\nimport { useFormState } from 'react-hook-form';\nimport { useMessagesForm } from '@/components/
|
|
1
|
+
{"version":3,"sources":["../../../src/components/layout/MessagesTabs.tsx"],"sourcesContent":["import { Button } from '@payloadcms/ui';\nimport clsx from 'clsx';\nimport { get } from 'lodash-es';\nimport { useCallback } from 'react';\nimport { useFormState } from 'react-hook-form';\nimport { useMessagesForm } from '@/components/MessagesFormProvider';\nimport type { MessagesSchema } from '@/types';\nimport { toWords } from '@/utils/format';\nimport styles from './MessagesTabs.module.css';\n\ninterface MessagesTabsProps {\n schema: MessagesSchema;\n activeTab: string | undefined;\n setActiveTab: (tab: string) => void;\n}\n\n// TODO add hash for current tab to url\nexport function MessagesTabs({\n schema,\n activeTab,\n setActiveTab,\n}: MessagesTabsProps): React.ReactNode {\n const { locales, control } = useMessagesForm();\n const { errors } = useFormState({ control });\n\n const hasErrors = useCallback(\n (key: string) => {\n return locales.some((locale) => get(errors, [locale, key]) !== undefined);\n },\n [errors, locales],\n );\n\n return (\n <div className={styles.tabs} role=\"tablist\">\n {Object.keys(schema).map((key) => (\n <Button\n buttonStyle={activeTab === key ? 'pill' : 'tab'}\n className={clsx(\n styles.tab,\n hasErrors(key) && activeTab === key && styles.tabError,\n hasErrors(key) && activeTab !== key && styles.tabErrorInactive,\n )}\n key={key}\n onClick={() => setActiveTab(key)}\n size=\"large\"\n type=\"button\"\n >\n {toWords(key)}\n </Button>\n ))}\n </div>\n );\n}\n"],"names":["Button","clsx","get","useCallback","useFormState","useMessagesForm","toWords","styles","MessagesTabs","schema","activeTab","setActiveTab","locales","control","errors","hasErrors","key","some","locale","undefined","div","className","tabs","role","Object","keys","map","buttonStyle","tab","tabError","tabErrorInactive","onClick","size","type"],"mappings":";AAAA,SAASA,MAAM,QAAQ,iBAAiB;AACxC,OAAOC,UAAU,OAAO;AACxB,SAASC,GAAG,QAAQ,YAAY;AAChC,SAASC,WAAW,QAAQ,QAAQ;AACpC,SAASC,YAAY,QAAQ,kBAAkB;AAC/C,SAASC,eAAe,QAAQ,oCAAoC;AAEpE,SAASC,OAAO,QAAQ,iBAAiB;AACzC,OAAOC,YAAY,4BAA4B;AAQ/C,uCAAuC;AACvC,OAAO,SAASC,aAAa,EAC3BC,MAAM,EACNC,SAAS,EACTC,YAAY,EACM;IAClB,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAE,GAAGR;IAC7B,MAAM,EAAES,MAAM,EAAE,GAAGV,aAAa;QAAES;IAAQ;IAE1C,MAAME,YAAYZ,YAChB,CAACa;QACC,OAAOJ,QAAQK,IAAI,CAAC,CAACC,SAAWhB,IAAIY,QAAQ;gBAACI;gBAAQF;aAAI,MAAMG;IACjE,GACA;QAACL;QAAQF;KAAQ;IAGnB,qBACE,KAACQ;QAAIC,WAAWd,OAAOe,IAAI;QAAEC,MAAK;kBAC/BC,OAAOC,IAAI,CAAChB,QAAQiB,GAAG,CAAC,CAACV,oBACxB,KAAChB;gBACC2B,aAAajB,cAAcM,MAAM,SAAS;gBAC1CK,WAAWpB,KACTM,OAAOqB,GAAG,EACVb,UAAUC,QAAQN,cAAcM,OAAOT,OAAOsB,QAAQ,EACtDd,UAAUC,QAAQN,cAAcM,OAAOT,OAAOuB,gBAAgB;gBAGhEC,SAAS,IAAMpB,aAAaK;gBAC5BgB,MAAK;gBACLC,MAAK;0BAEJ3B,QAAQU;eALJA;;AAUf"}
|
|
@@ -6,6 +6,6 @@ interface MessagesTreeProps {
|
|
|
6
6
|
className?: string;
|
|
7
7
|
hidden?: boolean;
|
|
8
8
|
}
|
|
9
|
-
export declare
|
|
9
|
+
export declare const MessagesTree: import("react").NamedExoticComponent<MessagesTreeProps>;
|
|
10
10
|
export {};
|
|
11
11
|
//# sourceMappingURL=MessagesTree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessagesTree.d.ts","sourceRoot":"","sources":["../../../src/components/layout/MessagesTree.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MessagesTree.d.ts","sourceRoot":"","sources":["../../../src/components/layout/MessagesTree.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOxC,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAID,eAAO,MAAM,YAAY,yDAwDvB,CAAC"}
|
|
@@ -1,66 +1,56 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Collapsible } from '@payloadcms/ui';
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { useMessagesForm } from '../../components/MessageFormContext';
|
|
3
|
+
import clsx from 'clsx';
|
|
4
|
+
import { memo } from 'react';
|
|
5
|
+
import { useMessagesForm } from '../../components/MessagesFormProvider';
|
|
7
6
|
import { toWords } from '../../utils/format';
|
|
7
|
+
import { GroupStatusDot } from './GroupStatusDot';
|
|
8
8
|
import { MessageField } from './MessageField';
|
|
9
9
|
import styles from './MessagesTree.module.css';
|
|
10
10
|
// TODO fix sticky position on single locale form
|
|
11
|
-
export function MessagesTree({ path, schema, nestingLevel = 0, className, hidden }) {
|
|
12
|
-
const {
|
|
13
|
-
const
|
|
14
|
-
control
|
|
15
|
-
});
|
|
16
|
-
const hasErrors = useCallback((key)=>{
|
|
17
|
-
return locales.some((locale)=>get(errors, [
|
|
18
|
-
locale,
|
|
19
|
-
path,
|
|
20
|
-
key
|
|
21
|
-
].join('.')) !== undefined);
|
|
22
|
-
}, [
|
|
23
|
-
errors,
|
|
24
|
-
locales,
|
|
25
|
-
path
|
|
26
|
-
]);
|
|
11
|
+
export const MessagesTree = /*#__PURE__*/ memo(function MessagesTree({ path, schema, nestingLevel = 0, className, hidden }) {
|
|
12
|
+
const { activeLocale, defaultLocale } = useMessagesForm();
|
|
13
|
+
const showStatus = activeLocale !== defaultLocale;
|
|
27
14
|
return /*#__PURE__*/ _jsx("div", {
|
|
28
|
-
className:
|
|
29
|
-
styles.grid,
|
|
30
|
-
className
|
|
31
|
-
].filter(Boolean).join(' '),
|
|
15
|
+
className: clsx(styles.grid, className),
|
|
32
16
|
style: {
|
|
33
17
|
display: hidden ? 'none' : undefined
|
|
34
18
|
},
|
|
35
|
-
children: Object.entries(schema).map(([key, value])
|
|
19
|
+
children: Object.entries(schema).map(([key, value])=>{
|
|
20
|
+
const fullPath = path ? [
|
|
21
|
+
path,
|
|
22
|
+
key
|
|
23
|
+
].join('.') : key;
|
|
24
|
+
return typeof value === 'string' ? /*#__PURE__*/ _jsx(MessageField, {
|
|
25
|
+
messageKey: key,
|
|
26
|
+
path: path,
|
|
27
|
+
schema: value,
|
|
28
|
+
showStatus: showStatus
|
|
29
|
+
}, key) : /*#__PURE__*/ _jsx("div", {
|
|
36
30
|
className: styles.item,
|
|
37
31
|
style: {
|
|
38
32
|
'--nesting-level': nestingLevel
|
|
39
33
|
},
|
|
40
34
|
children: /*#__PURE__*/ _jsx(Collapsible, {
|
|
41
35
|
className: styles.collapsible,
|
|
42
|
-
header: /*#__PURE__*/
|
|
43
|
-
className:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
36
|
+
header: /*#__PURE__*/ _jsxs("span", {
|
|
37
|
+
className: styles.header,
|
|
38
|
+
children: [
|
|
39
|
+
toWords(key),
|
|
40
|
+
showStatus && /*#__PURE__*/ _jsx(GroupStatusDot, {
|
|
41
|
+
path: fullPath
|
|
42
|
+
})
|
|
43
|
+
]
|
|
48
44
|
}),
|
|
49
|
-
children:
|
|
50
|
-
messageKey: key,
|
|
51
|
-
path: path,
|
|
52
|
-
schema: value
|
|
53
|
-
}, key) : /*#__PURE__*/ _jsx(MessagesTree, {
|
|
45
|
+
children: /*#__PURE__*/ _jsx(MessagesTree, {
|
|
54
46
|
nestingLevel: nestingLevel + 1,
|
|
55
|
-
path:
|
|
56
|
-
path,
|
|
57
|
-
key
|
|
58
|
-
].join('.'),
|
|
47
|
+
path: fullPath,
|
|
59
48
|
schema: value
|
|
60
49
|
})
|
|
61
50
|
})
|
|
62
|
-
}, key)
|
|
51
|
+
}, key);
|
|
52
|
+
})
|
|
63
53
|
});
|
|
64
|
-
}
|
|
54
|
+
});
|
|
65
55
|
|
|
66
56
|
//# sourceMappingURL=MessagesTree.js.map
|