@memori.ai/memori-react 8.10.1 → 8.12.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/CHANGELOG.md +66 -0
- package/dist/components/AgeVerificationModal/AgeVerificationModal.css +41 -14
- package/dist/components/AgeVerificationModal/AgeVerificationModal.js +2 -2
- package/dist/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
- package/dist/components/Auth/Auth.js +36 -8
- package/dist/components/Auth/Auth.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/positionControls/positionControls.css +2 -2
- package/dist/components/Chat/Chat.js +2 -2
- package/dist/components/Chat/Chat.js.map +1 -1
- package/dist/components/ChatBubble/ChatBubble.css +81 -13
- package/dist/components/ChatBubble/ChatBubble.js +86 -19
- package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
- package/dist/components/ChatHistoryDrawer/ChatHistory.css +5 -1
- package/dist/components/ChatInputs/ChatInputs.d.ts +1 -0
- package/dist/components/ChatInputs/ChatInputs.js +8 -3
- package/dist/components/ChatInputs/ChatInputs.js.map +1 -1
- package/dist/components/DateSelector/DateSelector.css +125 -104
- package/dist/components/DateSelector/DateSelector.d.ts +1 -1
- package/dist/components/DateSelector/DateSelector.js +110 -52
- package/dist/components/DateSelector/DateSelector.js.map +1 -1
- package/dist/components/Header/Header.js +1 -1
- package/dist/components/Header/Header.js.map +1 -1
- package/dist/components/LoginDrawer/LoginDrawer.css +37 -5
- package/dist/components/LoginDrawer/LoginDrawer.d.ts +1 -2
- package/dist/components/LoginDrawer/LoginDrawer.js +2 -9
- package/dist/components/LoginDrawer/LoginDrawer.js.map +1 -1
- package/dist/components/MediaWidget/MediaItemWidget.js +40 -5
- package/dist/components/MediaWidget/MediaItemWidget.js.map +1 -1
- package/dist/components/MediaWidget/MediaWidget.css +4 -0
- package/dist/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.js +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.js +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyMenuItem.js +3 -0
- package/dist/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyMenuItem.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +2 -2
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.css +16 -7
- package/dist/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.js +6 -4
- package/dist/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.js.map +1 -1
- package/dist/components/MemoriWidget/MemoriWidget.js +69 -25
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/dist/components/UploadButton/UploadButton.js +2 -0
- package/dist/components/UploadButton/UploadButton.js.map +1 -1
- package/dist/components/UploadButton/UploadImages/UploadImages.js +2 -2
- package/dist/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
- package/dist/components/ui/Drawer.css +8 -0
- package/dist/components/ui/Drawer.d.ts +2 -0
- package/dist/components/ui/Drawer.js +2 -2
- package/dist/components/ui/Drawer.js.map +1 -1
- package/dist/components/ui/Tooltip.css +49 -1
- package/dist/components/ui/Tooltip.d.ts +1 -1
- package/dist/locales/de.json +6 -1
- package/dist/locales/en.json +9 -1
- package/dist/locales/es.json +6 -1
- package/dist/locales/fr.json +5 -1
- package/dist/locales/it.json +8 -1
- package/dist/styles.css +3 -2
- package/esm/components/AgeVerificationModal/AgeVerificationModal.css +41 -14
- package/esm/components/AgeVerificationModal/AgeVerificationModal.js +2 -2
- package/esm/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
- package/esm/components/Auth/Auth.js +36 -8
- package/esm/components/Auth/Auth.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/positionControls/positionControls.css +2 -2
- package/esm/components/Chat/Chat.js +2 -2
- package/esm/components/Chat/Chat.js.map +1 -1
- package/esm/components/ChatBubble/ChatBubble.css +81 -13
- package/esm/components/ChatBubble/ChatBubble.js +87 -20
- package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
- package/esm/components/ChatHistoryDrawer/ChatHistory.css +5 -1
- package/esm/components/ChatInputs/ChatInputs.d.ts +1 -0
- package/esm/components/ChatInputs/ChatInputs.js +8 -3
- package/esm/components/ChatInputs/ChatInputs.js.map +1 -1
- package/esm/components/DateSelector/DateSelector.css +125 -104
- package/esm/components/DateSelector/DateSelector.d.ts +1 -1
- package/esm/components/DateSelector/DateSelector.js +111 -52
- package/esm/components/DateSelector/DateSelector.js.map +1 -1
- package/esm/components/Header/Header.js +1 -1
- package/esm/components/Header/Header.js.map +1 -1
- package/esm/components/LoginDrawer/LoginDrawer.css +37 -5
- package/esm/components/LoginDrawer/LoginDrawer.d.ts +1 -2
- package/esm/components/LoginDrawer/LoginDrawer.js +2 -9
- package/esm/components/LoginDrawer/LoginDrawer.js.map +1 -1
- package/esm/components/MediaWidget/MediaItemWidget.js +40 -5
- package/esm/components/MediaWidget/MediaItemWidget.js.map +1 -1
- package/esm/components/MediaWidget/MediaWidget.css +4 -0
- package/esm/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.js +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.js +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyMenuItem.js +3 -0
- package/esm/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyMenuItem.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +2 -2
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.css +16 -7
- package/esm/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.js +6 -4
- package/esm/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.js.map +1 -1
- package/esm/components/MemoriWidget/MemoriWidget.js +69 -25
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/esm/components/UploadButton/UploadButton.js +2 -0
- package/esm/components/UploadButton/UploadButton.js.map +1 -1
- package/esm/components/UploadButton/UploadImages/UploadImages.js +2 -2
- package/esm/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
- package/esm/components/ui/Drawer.css +8 -0
- package/esm/components/ui/Drawer.d.ts +2 -0
- package/esm/components/ui/Drawer.js +2 -2
- package/esm/components/ui/Drawer.js.map +1 -1
- package/esm/components/ui/Tooltip.css +49 -1
- package/esm/components/ui/Tooltip.d.ts +1 -1
- package/esm/locales/de.json +6 -1
- package/esm/locales/en.json +9 -1
- package/esm/locales/es.json +6 -1
- package/esm/locales/fr.json +5 -1
- package/esm/locales/it.json +8 -1
- package/esm/styles.css +3 -2
- package/package.json +2 -2
- package/src/components/AgeVerificationModal/AgeVerificationModal.css +41 -14
- package/src/components/AgeVerificationModal/AgeVerificationModal.tsx +3 -1
- package/src/components/Auth/Auth.tsx +55 -11
- package/src/components/Avatar/Avatar.stories.tsx +3 -0
- package/src/components/Avatar/AvatarView/AvatarComponent/positionControls/positionControls.css +2 -2
- package/src/components/Chat/Chat.stories.tsx +16 -2
- package/src/components/Chat/Chat.tsx +2 -1
- package/src/components/Chat/__snapshots__/Chat.test.tsx.snap +1036 -36
- package/src/components/ChatBubble/ChatBubble.css +81 -13
- package/src/components/ChatBubble/ChatBubble.stories.tsx +16 -2
- package/src/components/ChatBubble/ChatBubble.test.tsx +17 -0
- package/src/components/ChatBubble/ChatBubble.tsx +144 -31
- package/src/components/ChatBubble/__snapshots__/ChatBubble.test.tsx.snap +304 -8
- package/src/components/ChatHistoryDrawer/ChatHistory.css +5 -1
- package/src/components/ChatInputs/ChatInputs.tsx +14 -1
- package/src/components/DateSelector/DateSelector.css +125 -104
- package/src/components/DateSelector/DateSelector.stories.tsx +1 -1
- package/src/components/DateSelector/DateSelector.test.tsx +137 -23
- package/src/components/DateSelector/DateSelector.tsx +203 -177
- package/src/components/Header/Header.stories.tsx +5 -1
- package/src/components/Header/Header.tsx +1 -1
- package/src/components/Header/__snapshots__/Header.test.tsx.snap +1 -1
- package/src/components/LoginDrawer/LoginDrawer.css +37 -5
- package/src/components/LoginDrawer/LoginDrawer.stories.tsx +0 -1
- package/src/components/LoginDrawer/LoginDrawer.test.tsx +0 -1
- package/src/components/LoginDrawer/LoginDrawer.tsx +0 -19
- package/src/components/MediaWidget/MediaItemWidget.stories.tsx +69 -0
- package/src/components/MediaWidget/MediaItemWidget.tsx +66 -18
- package/src/components/MediaWidget/MediaWidget.css +4 -0
- package/src/components/MediaWidget/__snapshots__/MediaItemWidget.test.tsx.snap +10 -10
- package/src/components/MediaWidget/__snapshots__/MediaWidget.test.tsx.snap +2 -2
- package/src/components/MemoriArtifactSystem/ArtifactDrawer.stories.tsx +996 -204
- package/src/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.tsx +2 -2
- package/src/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.tsx +1 -1
- package/src/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyMenuItem.tsx +3 -0
- package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +56 -54
- package/src/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.css +16 -7
- package/src/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.tsx +12 -3
- package/src/components/MemoriWidget/MemoriWidget.stories.tsx +6 -3
- package/src/components/MemoriWidget/MemoriWidget.tsx +123 -48
- package/src/components/UploadButton/UploadButton.tsx +2 -0
- package/src/components/UploadButton/UploadImages/UploadImages.tsx +3 -2
- package/src/components/layouts/FullBody/FullBody.stories.tsx +110 -0
- package/src/components/layouts/Totem/Totem.stories.tsx +131 -0
- package/src/components/layouts/ZoomedFullBody/ZoomedFullBody.stories.tsx +131 -0
- package/src/components/layouts/layouts.stories.tsx +55 -508
- package/src/components/ui/Drawer.css +8 -0
- package/src/components/ui/Drawer.tsx +16 -12
- package/src/components/ui/Tooltip.css +49 -1
- package/src/components/ui/Tooltip.tsx +1 -1
- package/src/index.stories.tsx +13 -320
- package/src/locales/de.json +6 -1
- package/src/locales/en.json +9 -1
- package/src/locales/es.json +6 -1
- package/src/locales/fr.json +5 -1
- package/src/locales/it.json +8 -1
- package/src/mocks/data.ts +4 -2
- package/src/styles.css +3 -2
- package/src/components/SignupForm/SignupForm.test.tsx +0 -40
- package/src/components/SignupForm/SignupForm.tsx +0 -457
- package/src/components/SignupForm/__snapshots__/SignupForm.test.tsx.snap +0 -247
|
@@ -1,200 +1,226 @@
|
|
|
1
|
-
import { useEffect, useState, memo,
|
|
2
|
-
import { Listbox, Transition } from '@headlessui/react';
|
|
1
|
+
import { useEffect, useState, memo, useMemo, useRef, ChangeEvent } from 'react';
|
|
3
2
|
import { DateTime } from 'luxon';
|
|
4
3
|
import { useTranslation } from 'react-i18next';
|
|
5
|
-
import SelectIcon from '../icons/SelectIcon';
|
|
6
4
|
|
|
7
5
|
export interface Props {
|
|
8
6
|
defaultDate?: string | Date;
|
|
9
7
|
disabled?: boolean;
|
|
10
|
-
onChange: (date: DateTime) => void;
|
|
8
|
+
onChange: (date: DateTime | undefined) => void;
|
|
11
9
|
}
|
|
12
10
|
|
|
13
|
-
const months = {
|
|
14
|
-
en: [
|
|
15
|
-
'January',
|
|
16
|
-
'February',
|
|
17
|
-
'March',
|
|
18
|
-
'April',
|
|
19
|
-
'May',
|
|
20
|
-
'June',
|
|
21
|
-
'July',
|
|
22
|
-
'August',
|
|
23
|
-
'September',
|
|
24
|
-
'October',
|
|
25
|
-
'November',
|
|
26
|
-
'December',
|
|
27
|
-
],
|
|
28
|
-
it: [
|
|
29
|
-
'Gennaio',
|
|
30
|
-
'Febbraio',
|
|
31
|
-
'Marzo',
|
|
32
|
-
'Aprile',
|
|
33
|
-
'Maggio',
|
|
34
|
-
'Giugno',
|
|
35
|
-
'Luglio',
|
|
36
|
-
'Agosto',
|
|
37
|
-
'Settembre',
|
|
38
|
-
'Ottobre',
|
|
39
|
-
'Novembre',
|
|
40
|
-
'Dicembre',
|
|
41
|
-
],
|
|
42
|
-
};
|
|
43
|
-
|
|
44
11
|
const DateSelector = memo(
|
|
45
12
|
({ defaultDate, onChange, disabled = false }: Props) => {
|
|
46
|
-
const { t
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
);
|
|
13
|
+
const { t } = useTranslation();
|
|
14
|
+
|
|
15
|
+
// Calculate constraints for birth date (18 years ago to 1900)
|
|
16
|
+
const maxDate = useMemo(() => DateTime.now().minus({ years: 18 }), []);
|
|
17
|
+
const minDate = useMemo(() => DateTime.fromObject({ year: 1900, month: 1, day: 1 }), []);
|
|
18
|
+
|
|
19
|
+
// State for individual fields as strings to allow empty values
|
|
20
|
+
const [day, setDay] = useState<string>('');
|
|
21
|
+
const [month, setMonth] = useState<string>('');
|
|
22
|
+
const [year, setYear] = useState<string>('');
|
|
23
|
+
|
|
24
|
+
// Initialize from defaultDate if provided
|
|
55
25
|
useEffect(() => {
|
|
56
|
-
|
|
57
|
-
|
|
26
|
+
if (defaultDate) {
|
|
27
|
+
const dt = typeof defaultDate === 'string'
|
|
28
|
+
? DateTime.fromISO(defaultDate)
|
|
29
|
+
: DateTime.fromJSDate(defaultDate);
|
|
30
|
+
|
|
31
|
+
if (dt.isValid) {
|
|
32
|
+
setDay(dt.day.toString());
|
|
33
|
+
setMonth(dt.month.toString());
|
|
34
|
+
setYear(dt.year.toString());
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}, [defaultDate]);
|
|
38
|
+
|
|
39
|
+
const [isMobile, setIsMobile] = useState(false);
|
|
40
|
+
|
|
41
|
+
// Refs for auto-focus
|
|
42
|
+
const dayRef = useRef<HTMLInputElement>(null);
|
|
43
|
+
const monthRef = useRef<HTMLInputElement>(null);
|
|
44
|
+
const yearRef = useRef<HTMLInputElement>(null);
|
|
45
|
+
|
|
46
|
+
// Detect mobile viewport
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
const checkMobile = () => {
|
|
49
|
+
setIsMobile(window.innerWidth < 768);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
checkMobile();
|
|
53
|
+
window.addEventListener('resize', checkMobile);
|
|
54
|
+
return () => window.removeEventListener('resize', checkMobile);
|
|
55
|
+
}, []);
|
|
56
|
+
|
|
57
|
+
// Validate and propagate changes
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
if (!day || !month || !year) {
|
|
60
|
+
onChange(undefined);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const d = parseInt(day);
|
|
65
|
+
const m = parseInt(month);
|
|
66
|
+
const y = parseInt(year);
|
|
67
|
+
|
|
68
|
+
if (isNaN(d) || isNaN(m) || isNaN(y)) {
|
|
69
|
+
onChange(undefined);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const newDate = DateTime.fromObject({ year: y, month: m, day: d });
|
|
74
|
+
|
|
75
|
+
// Basic validation: check if it's a valid date (e.g. not Feb 30)
|
|
76
|
+
// and within range.
|
|
77
|
+
if (newDate.isValid && newDate >= minDate && newDate <= maxDate) {
|
|
78
|
+
onChange(newDate);
|
|
79
|
+
} else {
|
|
80
|
+
onChange(undefined);
|
|
81
|
+
}
|
|
82
|
+
}, [day, month, year, onChange, minDate, maxDate]);
|
|
83
|
+
|
|
84
|
+
// Handle mobile native input change
|
|
85
|
+
const handleMobileChange = (e: ChangeEvent<HTMLInputElement>) => {
|
|
86
|
+
const value = e.target.value;
|
|
87
|
+
if (value) {
|
|
88
|
+
const newDate = DateTime.fromISO(value);
|
|
89
|
+
if (newDate.isValid) {
|
|
90
|
+
setDay(newDate.day.toString());
|
|
91
|
+
setMonth(newDate.month.toString());
|
|
92
|
+
setYear(newDate.year.toString());
|
|
93
|
+
// The useEffect will handle calling onChange
|
|
94
|
+
}
|
|
95
|
+
} else {
|
|
96
|
+
setDay('');
|
|
97
|
+
setMonth('');
|
|
98
|
+
setYear('');
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const handleDayChange = (e: ChangeEvent<HTMLInputElement>) => {
|
|
103
|
+
const val = e.target.value;
|
|
104
|
+
// Allow empty or numbers only
|
|
105
|
+
if (val === '' || /^\d+$/.test(val)) {
|
|
106
|
+
// Limit length to 2
|
|
107
|
+
if (val.length > 2) return;
|
|
108
|
+
|
|
109
|
+
// Limit value to 31
|
|
110
|
+
const numVal = parseInt(val);
|
|
111
|
+
if (numVal > 31) return;
|
|
112
|
+
|
|
113
|
+
setDay(val);
|
|
114
|
+
if (val.length >= 2) {
|
|
115
|
+
monthRef.current?.focus();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const handleMonthChange = (e: ChangeEvent<HTMLInputElement>) => {
|
|
121
|
+
const val = e.target.value;
|
|
122
|
+
if (val === '' || /^\d+$/.test(val)) {
|
|
123
|
+
// Limit length to 2
|
|
124
|
+
if (val.length > 2) return;
|
|
125
|
+
|
|
126
|
+
// Limit value to 12
|
|
127
|
+
const numVal = parseInt(val);
|
|
128
|
+
if (numVal > 12) return;
|
|
129
|
+
|
|
130
|
+
setMonth(val);
|
|
131
|
+
if (val.length >= 2) {
|
|
132
|
+
yearRef.current?.focus();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
const handleYearChange = (e: ChangeEvent<HTMLInputElement>) => {
|
|
138
|
+
const val = e.target.value;
|
|
139
|
+
if (val === '' || /^\d+$/.test(val)) {
|
|
140
|
+
// Limit length to 4
|
|
141
|
+
if (val.length > 4) return;
|
|
142
|
+
|
|
143
|
+
setYear(val);
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
// Mobile native input
|
|
148
|
+
if (isMobile) {
|
|
149
|
+
const currentDate = (day && month && year)
|
|
150
|
+
? DateTime.fromObject({ year: parseInt(year), month: parseInt(month), day: parseInt(day) })
|
|
151
|
+
: null;
|
|
152
|
+
|
|
153
|
+
return (
|
|
154
|
+
<div className="memori--date-selector memori--date-selector--mobile">
|
|
155
|
+
<label className="memori--date-selector__mobile-label">
|
|
156
|
+
{t('birthDate') || 'Birth Date'}:
|
|
157
|
+
</label>
|
|
158
|
+
<input
|
|
159
|
+
type="date"
|
|
160
|
+
className="memori--date-selector__mobile-input"
|
|
161
|
+
value={currentDate?.isValid ? currentDate.toISODate() || '' : ''}
|
|
162
|
+
onChange={handleMobileChange}
|
|
163
|
+
disabled={disabled}
|
|
164
|
+
min={minDate.toISODate() || '1900-01-01'}
|
|
165
|
+
max={maxDate.toISODate() || ''}
|
|
166
|
+
aria-label={String(t('dateOfBirth') || t('date'))}
|
|
167
|
+
/>
|
|
168
|
+
</div>
|
|
169
|
+
);
|
|
170
|
+
}
|
|
58
171
|
|
|
172
|
+
// Desktop simple inputs
|
|
59
173
|
return (
|
|
60
|
-
<div className="memori--date-selector">
|
|
61
|
-
<div className="memori--date-
|
|
62
|
-
<
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
174
|
+
<div className="memori--date-selector memori--date-selector--desktop">
|
|
175
|
+
<div className="memori--date-selector__input-group">
|
|
176
|
+
<label className="memori--date-selector__label">
|
|
177
|
+
{t('day') || 'Day'}
|
|
178
|
+
</label>
|
|
179
|
+
<input
|
|
180
|
+
ref={dayRef}
|
|
181
|
+
type="number"
|
|
182
|
+
className="memori--date-selector__input"
|
|
183
|
+
value={day}
|
|
184
|
+
onChange={handleDayChange}
|
|
185
|
+
placeholder={t('dayPlaceholder') || 'DD'}
|
|
186
|
+
min={1}
|
|
187
|
+
max={31}
|
|
67
188
|
disabled={disabled}
|
|
68
|
-
|
|
69
|
-
>
|
|
70
|
-
<Listbox.Label className="memori--date-selector__select-label">
|
|
71
|
-
{t('day')}:
|
|
72
|
-
</Listbox.Label>
|
|
73
|
-
<Listbox.Button
|
|
74
|
-
aria-label={t('day')}
|
|
75
|
-
className="memori--date-selector__select-button"
|
|
76
|
-
>
|
|
77
|
-
<span className="memori--date-selector__select--value">
|
|
78
|
-
{date.day}
|
|
79
|
-
</span>
|
|
80
|
-
<span className="memori--date-selector__select--icon">
|
|
81
|
-
<SelectIcon />
|
|
82
|
-
</span>
|
|
83
|
-
</Listbox.Button>
|
|
84
|
-
<Transition
|
|
85
|
-
as={Fragment}
|
|
86
|
-
leave="transition ease-in duration-100"
|
|
87
|
-
leaveFrom="opacity-100"
|
|
88
|
-
leaveTo="opacity-0"
|
|
89
|
-
>
|
|
90
|
-
<Listbox.Options className="memori--date-selector__select-options">
|
|
91
|
-
{[...Array(31).keys()].map(day => (
|
|
92
|
-
<Listbox.Option
|
|
93
|
-
key={day}
|
|
94
|
-
value={date.set({ day: day + 1 })}
|
|
95
|
-
className="memori--date-selector__select-option"
|
|
96
|
-
>
|
|
97
|
-
{day + 1}
|
|
98
|
-
</Listbox.Option>
|
|
99
|
-
))}
|
|
100
|
-
</Listbox.Options>
|
|
101
|
-
</Transition>
|
|
102
|
-
</Listbox>
|
|
189
|
+
/>
|
|
103
190
|
</div>
|
|
104
191
|
|
|
105
|
-
<div className="memori--date-
|
|
106
|
-
<
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
192
|
+
<div className="memori--date-selector__input-group">
|
|
193
|
+
<label className="memori--date-selector__label">
|
|
194
|
+
{t('month') || 'Month'}
|
|
195
|
+
</label>
|
|
196
|
+
<input
|
|
197
|
+
ref={monthRef}
|
|
198
|
+
type="number"
|
|
199
|
+
className="memori--date-selector__input"
|
|
200
|
+
value={month}
|
|
201
|
+
onChange={handleMonthChange}
|
|
202
|
+
placeholder={t('monthPlaceholder') || 'MM'}
|
|
203
|
+
min={1}
|
|
204
|
+
max={12}
|
|
111
205
|
disabled={disabled}
|
|
112
|
-
|
|
113
|
-
>
|
|
114
|
-
<Listbox.Label className="memori--date-selector__select-label">
|
|
115
|
-
{t('month')}:
|
|
116
|
-
</Listbox.Label>
|
|
117
|
-
<Listbox.Button
|
|
118
|
-
aria-label={t('month')}
|
|
119
|
-
className="memori--date-selector__select-button"
|
|
120
|
-
>
|
|
121
|
-
<span className="memori--date-selector__select--value">
|
|
122
|
-
{months[i18n.language === 'it' ? 'it' : 'en'][date.month - 1]}
|
|
123
|
-
</span>
|
|
124
|
-
<span className="memori--date-selector__select--icon">
|
|
125
|
-
<SelectIcon />
|
|
126
|
-
</span>
|
|
127
|
-
</Listbox.Button>
|
|
128
|
-
<Transition
|
|
129
|
-
as={Fragment}
|
|
130
|
-
leave="transition ease-in duration-100"
|
|
131
|
-
leaveFrom="opacity-100"
|
|
132
|
-
leaveTo="opacity-0"
|
|
133
|
-
>
|
|
134
|
-
<Listbox.Options className="memori--date-selector__select-options">
|
|
135
|
-
{months[i18n.language === 'it' ? 'it' : 'en'].map(month => (
|
|
136
|
-
<Listbox.Option
|
|
137
|
-
key={month}
|
|
138
|
-
className="memori--date-selector__select-option"
|
|
139
|
-
value={date.set({
|
|
140
|
-
month:
|
|
141
|
-
months[i18n.language === 'it' ? 'it' : 'en'].findIndex(
|
|
142
|
-
m => m === month
|
|
143
|
-
) + 1,
|
|
144
|
-
})}
|
|
145
|
-
>
|
|
146
|
-
{month}
|
|
147
|
-
</Listbox.Option>
|
|
148
|
-
))}
|
|
149
|
-
</Listbox.Options>
|
|
150
|
-
</Transition>
|
|
151
|
-
</Listbox>
|
|
206
|
+
/>
|
|
152
207
|
</div>
|
|
153
208
|
|
|
154
|
-
<div className="memori--date-
|
|
155
|
-
<
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}
|
|
209
|
+
<div className="memori--date-selector__input-group memori--date-selector__input-group--year">
|
|
210
|
+
<label className="memori--date-selector__label">
|
|
211
|
+
{t('year') || 'Year'}
|
|
212
|
+
</label>
|
|
213
|
+
<input
|
|
214
|
+
ref={yearRef}
|
|
215
|
+
type="number"
|
|
216
|
+
className="memori--date-selector__input"
|
|
217
|
+
value={year}
|
|
218
|
+
onChange={handleYearChange}
|
|
219
|
+
placeholder={t('yearPlaceholder') || 'YYYY'}
|
|
220
|
+
min={minDate.year}
|
|
221
|
+
max={maxDate.year}
|
|
160
222
|
disabled={disabled}
|
|
161
|
-
|
|
162
|
-
>
|
|
163
|
-
<Listbox.Label className="memori--date-selector__select-label">
|
|
164
|
-
{t('year')}:
|
|
165
|
-
</Listbox.Label>
|
|
166
|
-
<Listbox.Button
|
|
167
|
-
aria-label={t('year')}
|
|
168
|
-
className="memori--date-selector__select-button"
|
|
169
|
-
>
|
|
170
|
-
<span className="memori--date-selector__select--value">
|
|
171
|
-
{date.year}
|
|
172
|
-
</span>
|
|
173
|
-
<span className="memori--date-selector__select--icon">
|
|
174
|
-
<SelectIcon />
|
|
175
|
-
</span>
|
|
176
|
-
</Listbox.Button>
|
|
177
|
-
<Transition
|
|
178
|
-
as={Fragment}
|
|
179
|
-
leave="transition ease-in duration-100"
|
|
180
|
-
leaveFrom="opacity-100"
|
|
181
|
-
leaveTo="opacity-0"
|
|
182
|
-
>
|
|
183
|
-
<Listbox.Options className="memori--date-selector__select-options">
|
|
184
|
-
{[...Array(DateTime.now().year - 1899).keys()]
|
|
185
|
-
.sort((a, b) => b - a)
|
|
186
|
-
.map(year => (
|
|
187
|
-
<Listbox.Option
|
|
188
|
-
key={year}
|
|
189
|
-
value={date.set({ year: year + 1900 })}
|
|
190
|
-
className="memori--date-selector__select-option"
|
|
191
|
-
>
|
|
192
|
-
{year + 1900}
|
|
193
|
-
</Listbox.Option>
|
|
194
|
-
))}
|
|
195
|
-
</Listbox.Options>
|
|
196
|
-
</Transition>
|
|
197
|
-
</Listbox>
|
|
223
|
+
/>
|
|
198
224
|
</div>
|
|
199
225
|
</div>
|
|
200
226
|
);
|
|
@@ -4,7 +4,8 @@ import { memori, tenant, history } from '../../mocks/data';
|
|
|
4
4
|
import I18nWrapper from '../../I18nWrapper';
|
|
5
5
|
import Header, { Props } from './Header';
|
|
6
6
|
import SettingsDrawer from '../SettingsDrawer/SettingsDrawer';
|
|
7
|
-
import LoginDrawer from '../LoginDrawer/LoginDrawer';
|
|
7
|
+
import LoginDrawer from '../LoginDrawer/LoginDrawer';
|
|
8
|
+
import { ArtifactProvider } from '../MemoriArtifactSystem/context/ArtifactContext';
|
|
8
9
|
|
|
9
10
|
import './Header.css';
|
|
10
11
|
|
|
@@ -37,6 +38,7 @@ const Template: Story<Props> = args => {
|
|
|
37
38
|
|
|
38
39
|
return (
|
|
39
40
|
<I18nWrapper>
|
|
41
|
+
<ArtifactProvider>
|
|
40
42
|
<Header
|
|
41
43
|
{...args}
|
|
42
44
|
speakerMuted={speakerMuted}
|
|
@@ -62,6 +64,7 @@ const Template: Story<Props> = args => {
|
|
|
62
64
|
setEnablePositionControls={() => {}}
|
|
63
65
|
/>
|
|
64
66
|
<LoginDrawer
|
|
67
|
+
setUser={() => {}}
|
|
65
68
|
tenant={tenant}
|
|
66
69
|
open={!!showLoginDrawer}
|
|
67
70
|
onClose={() => setShowLoginDrawer(false)}
|
|
@@ -76,6 +79,7 @@ const Template: Story<Props> = args => {
|
|
|
76
79
|
} as any
|
|
77
80
|
}
|
|
78
81
|
/>
|
|
82
|
+
</ArtifactProvider>
|
|
79
83
|
</I18nWrapper>
|
|
80
84
|
);
|
|
81
85
|
};
|
|
@@ -290,7 +290,7 @@ const Header: React.FC<Props> = ({
|
|
|
290
290
|
<Button
|
|
291
291
|
primary
|
|
292
292
|
shape="circle"
|
|
293
|
-
className=
|
|
293
|
+
className={cx('memori-header--button memori-header--button--speaker', { 'memori-header--button--speaker-muted': speakerMuted })}
|
|
294
294
|
icon={speakerMuted ? <SoundDeactivated /> : <Sound />}
|
|
295
295
|
onClick={() => setSpeakerMuted(!speakerMuted)}
|
|
296
296
|
title={t('widget.sound') || 'Sound'}
|
|
@@ -869,7 +869,7 @@ exports[`renders Header with speaker muted unchanged 1`] = `
|
|
|
869
869
|
class="memori-header"
|
|
870
870
|
>
|
|
871
871
|
<button
|
|
872
|
-
class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button--speaker"
|
|
872
|
+
class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button--speaker memori-header--button--speaker-muted"
|
|
873
873
|
title="widget.sound"
|
|
874
874
|
>
|
|
875
875
|
<span
|
|
@@ -134,10 +134,12 @@ p.memori--login-drawer--inline-error {
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
@keyframes float {
|
|
137
|
+
|
|
137
138
|
0%,
|
|
138
139
|
100% {
|
|
139
140
|
transform: translateY(0px);
|
|
140
141
|
}
|
|
142
|
+
|
|
141
143
|
50% {
|
|
142
144
|
transform: translateY(-10px);
|
|
143
145
|
}
|
|
@@ -219,10 +221,12 @@ p.memori--login-drawer--inline-error {
|
|
|
219
221
|
}
|
|
220
222
|
|
|
221
223
|
@keyframes pulse {
|
|
224
|
+
|
|
222
225
|
0%,
|
|
223
226
|
100% {
|
|
224
227
|
transform: scale(1);
|
|
225
228
|
}
|
|
229
|
+
|
|
226
230
|
50% {
|
|
227
231
|
transform: scale(1.05);
|
|
228
232
|
}
|
|
@@ -336,10 +340,12 @@ p.memori--login-drawer--inline-error {
|
|
|
336
340
|
}
|
|
337
341
|
|
|
338
342
|
@keyframes rocket {
|
|
343
|
+
|
|
339
344
|
0%,
|
|
340
345
|
100% {
|
|
341
346
|
transform: translateY(0) rotate(0deg);
|
|
342
347
|
}
|
|
348
|
+
|
|
343
349
|
50% {
|
|
344
350
|
transform: translateY(-3px) rotate(5deg);
|
|
345
351
|
}
|
|
@@ -372,9 +378,11 @@ p.memori--login-drawer--inline-error {
|
|
|
372
378
|
0% {
|
|
373
379
|
background-position: 0% 50%;
|
|
374
380
|
}
|
|
381
|
+
|
|
375
382
|
50% {
|
|
376
383
|
background-position: 100% 50%;
|
|
377
384
|
}
|
|
385
|
+
|
|
378
386
|
100% {
|
|
379
387
|
background-position: 0% 50%;
|
|
380
388
|
}
|
|
@@ -393,6 +401,7 @@ p.memori--login-drawer--inline-error {
|
|
|
393
401
|
}
|
|
394
402
|
|
|
395
403
|
@keyframes bounce {
|
|
404
|
+
|
|
396
405
|
0%,
|
|
397
406
|
20%,
|
|
398
407
|
50%,
|
|
@@ -400,9 +409,11 @@ p.memori--login-drawer--inline-error {
|
|
|
400
409
|
100% {
|
|
401
410
|
transform: translateY(0);
|
|
402
411
|
}
|
|
412
|
+
|
|
403
413
|
40% {
|
|
404
414
|
transform: translateY(-10px);
|
|
405
415
|
}
|
|
416
|
+
|
|
406
417
|
60% {
|
|
407
418
|
transform: translateY(-5px);
|
|
408
419
|
}
|
|
@@ -479,7 +490,7 @@ p.memori--login-drawer--inline-error {
|
|
|
479
490
|
.memori--login-drawer--otp-input:focus {
|
|
480
491
|
border-color: var(--memori-primary);
|
|
481
492
|
background: white;
|
|
482
|
-
box-shadow: 0 0 0 4px rgba(
|
|
493
|
+
box-shadow: 0 0 0 4px rgba(var(--memori-primary-rgb), 0.1);
|
|
483
494
|
transform: scale(1.02);
|
|
484
495
|
}
|
|
485
496
|
|
|
@@ -512,7 +523,7 @@ p.memori--login-drawer--inline-error {
|
|
|
512
523
|
.memori--login-drawer--otp-email-input:focus {
|
|
513
524
|
border-color: var(--memori-primary);
|
|
514
525
|
background: white;
|
|
515
|
-
box-shadow: 0 0 0 4px rgba(
|
|
526
|
+
box-shadow: 0 0 0 4px rgba(var(--memori-primary-rgb), 0.1);
|
|
516
527
|
transform: translateY(-1px);
|
|
517
528
|
}
|
|
518
529
|
|
|
@@ -540,9 +551,11 @@ p.memori--login-drawer--inline-error {
|
|
|
540
551
|
0% {
|
|
541
552
|
transform: scale(0) rotate(0deg);
|
|
542
553
|
}
|
|
554
|
+
|
|
543
555
|
50% {
|
|
544
556
|
transform: scale(1.2) rotate(180deg);
|
|
545
557
|
}
|
|
558
|
+
|
|
546
559
|
100% {
|
|
547
560
|
transform: scale(1) rotate(360deg);
|
|
548
561
|
}
|
|
@@ -569,6 +582,7 @@ p.memori--login-drawer--inline-error {
|
|
|
569
582
|
0% {
|
|
570
583
|
transform: rotate(0deg);
|
|
571
584
|
}
|
|
585
|
+
|
|
572
586
|
100% {
|
|
573
587
|
transform: rotate(360deg);
|
|
574
588
|
}
|
|
@@ -597,6 +611,7 @@ p.memori--login-drawer--inline-error {
|
|
|
597
611
|
opacity: 0;
|
|
598
612
|
transform: translateY(20px);
|
|
599
613
|
}
|
|
614
|
+
|
|
600
615
|
to {
|
|
601
616
|
opacity: 1;
|
|
602
617
|
transform: translateY(0);
|
|
@@ -611,13 +626,16 @@ p.memori--login-drawer--inline-error {
|
|
|
611
626
|
}
|
|
612
627
|
|
|
613
628
|
@keyframes celebration {
|
|
629
|
+
|
|
614
630
|
0%,
|
|
615
631
|
100% {
|
|
616
632
|
transform: scale(1) rotate(0deg);
|
|
617
633
|
}
|
|
634
|
+
|
|
618
635
|
25% {
|
|
619
636
|
transform: scale(1.1) rotate(-5deg);
|
|
620
637
|
}
|
|
638
|
+
|
|
621
639
|
75% {
|
|
622
640
|
transform: scale(1.1) rotate(5deg);
|
|
623
641
|
}
|
|
@@ -648,10 +666,12 @@ p.memori--login-drawer--inline-error {
|
|
|
648
666
|
}
|
|
649
667
|
|
|
650
668
|
@keyframes timerPulse {
|
|
669
|
+
|
|
651
670
|
0%,
|
|
652
671
|
100% {
|
|
653
672
|
transform: scale(1);
|
|
654
673
|
}
|
|
674
|
+
|
|
655
675
|
50% {
|
|
656
676
|
transform: scale(1.02);
|
|
657
677
|
}
|
|
@@ -663,13 +683,16 @@ p.memori--login-drawer--inline-error {
|
|
|
663
683
|
}
|
|
664
684
|
|
|
665
685
|
@keyframes tick {
|
|
686
|
+
|
|
666
687
|
0%,
|
|
667
688
|
100% {
|
|
668
689
|
transform: rotate(0deg);
|
|
669
690
|
}
|
|
691
|
+
|
|
670
692
|
25% {
|
|
671
693
|
transform: rotate(-10deg);
|
|
672
694
|
}
|
|
695
|
+
|
|
673
696
|
75% {
|
|
674
697
|
transform: rotate(10deg);
|
|
675
698
|
}
|
|
@@ -721,6 +744,7 @@ p.memori--login-drawer--inline-error {
|
|
|
721
744
|
opacity: 0;
|
|
722
745
|
transform: translateY(-10px);
|
|
723
746
|
}
|
|
747
|
+
|
|
724
748
|
to {
|
|
725
749
|
opacity: 1;
|
|
726
750
|
transform: translateY(0);
|
|
@@ -733,10 +757,12 @@ p.memori--login-drawer--inline-error {
|
|
|
733
757
|
}
|
|
734
758
|
|
|
735
759
|
@keyframes warning {
|
|
760
|
+
|
|
736
761
|
0%,
|
|
737
762
|
100% {
|
|
738
763
|
transform: scale(1);
|
|
739
764
|
}
|
|
765
|
+
|
|
740
766
|
50% {
|
|
741
767
|
transform: scale(1.1);
|
|
742
768
|
}
|
|
@@ -768,22 +794,27 @@ p.memori--login-drawer--inline-error {
|
|
|
768
794
|
0% {
|
|
769
795
|
transform: scale(1);
|
|
770
796
|
}
|
|
797
|
+
|
|
771
798
|
50% {
|
|
772
799
|
transform: scale(1.05);
|
|
773
800
|
}
|
|
801
|
+
|
|
774
802
|
100% {
|
|
775
803
|
transform: scale(1);
|
|
776
804
|
}
|
|
777
805
|
}
|
|
778
806
|
|
|
779
807
|
@keyframes shake {
|
|
808
|
+
|
|
780
809
|
0%,
|
|
781
810
|
100% {
|
|
782
811
|
transform: translateX(0);
|
|
783
812
|
}
|
|
813
|
+
|
|
784
814
|
25% {
|
|
785
815
|
transform: translateX(-5px);
|
|
786
816
|
}
|
|
817
|
+
|
|
787
818
|
75% {
|
|
788
819
|
transform: translateX(5px);
|
|
789
820
|
}
|
|
@@ -844,7 +875,7 @@ p.memori--login-drawer--inline-error {
|
|
|
844
875
|
max-width: 200px;
|
|
845
876
|
}
|
|
846
877
|
|
|
847
|
-
.memori--login-drawer--otp-label{
|
|
878
|
+
.memori--login-drawer--otp-label {
|
|
848
879
|
min-width: auto;
|
|
849
880
|
}
|
|
850
881
|
}
|
|
@@ -1257,6 +1288,7 @@ p.memori--login-drawer--inline-error {
|
|
|
1257
1288
|
width: 1.5rem;
|
|
1258
1289
|
height: 1.5rem;
|
|
1259
1290
|
}
|
|
1291
|
+
|
|
1260
1292
|
/* .memori--login-drawer--stat-card:hover::before {
|
|
1261
1293
|
transform: scaleX(1);
|
|
1262
1294
|
} */
|
|
@@ -1372,7 +1404,7 @@ p.memori--login-drawer--inline-error {
|
|
|
1372
1404
|
transform: translateY(-50%) rotate(180deg);
|
|
1373
1405
|
}
|
|
1374
1406
|
|
|
1375
|
-
.memori--login-drawer--account-form .memori--details
|
|
1407
|
+
.memori--login-drawer--account-form .memori--details>*:not(summary) {
|
|
1376
1408
|
padding: 1.5rem;
|
|
1377
1409
|
}
|
|
1378
1410
|
|
|
@@ -1581,4 +1613,4 @@ p.memori--login-drawer--inline-error {
|
|
|
1581
1613
|
animation-iteration-count: 1 !important;
|
|
1582
1614
|
transition-duration: 0.01ms !important;
|
|
1583
1615
|
}
|
|
1584
|
-
}
|
|
1616
|
+
}
|