@digigov/ui 2.0.0-a402a664 → 2.0.0-abd768eb
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/app/Loader/Loader.stories.d.ts +1 -0
- package/app/Loader/__stories__/AccessibilityLoader.d.ts +3 -0
- package/app/Loader/index.native.d.ts +2 -2
- package/app/Loader/index.native.js.map +2 -2
- package/app/Loader/index.web/index.js +17 -1
- package/app/Loader/index.web.d.ts +19 -1
- package/app/Loader/index.web.js.map +3 -3
- package/app/hooks/useNotificationArea/index.js +76 -0
- package/app/hooks/useNotificationArea/package.json +6 -0
- package/app/hooks/useNotificationArea.d.ts +1 -0
- package/app/hooks/useNotificationArea.js.map +7 -0
- package/cjs/app/Loader/index.native.js.map +2 -2
- package/cjs/app/Loader/index.web/index.js +33 -2
- package/cjs/app/Loader/index.web.js.map +3 -3
- package/cjs/app/hooks/useNotificationArea/index.js +99 -0
- package/cjs/app/hooks/useNotificationArea.js.map +7 -0
- package/cjs/i18n/locales/el/index.js +41 -14
- package/cjs/i18n/locales/el.js.map +2 -2
- package/cjs/i18n/locales/en/index.js +33 -6
- package/cjs/i18n/locales/en.js.map +2 -2
- package/cjs/lazy.js +1 -0
- package/cjs/lazy.js.map +2 -2
- package/cjs/registry.js +10 -8
- package/cjs/registry.js.map +2 -2
- package/content/Accordion/Accordion.stories.d.ts +27 -16
- package/feedback/NotificationBanner/NotificationBanner.stories.d.ts +1 -0
- package/feedback/NotificationBanner/__stories__/Expanded.d.ts +3 -0
- package/i18n/locales/el/index.js +41 -14
- package/i18n/locales/el.d.ts +31 -4
- package/i18n/locales/el.js.map +2 -2
- package/i18n/locales/en/index.js +33 -6
- package/i18n/locales/en.d.ts +31 -4
- package/i18n/locales/en.js.map +2 -2
- package/index.js +1 -1
- package/lazy/index.js +1 -0
- package/package.json +5 -5
- package/registry/index.js +10 -8
- package/src/app/Loader/Loader.stories.js +1 -0
- package/src/app/Loader/__stories__/AccessibilityLoader.tsx +27 -0
- package/src/app/Loader/index.native.tsx +2 -2
- package/src/app/Loader/index.test.tsx +4 -0
- package/src/app/Loader/index.web.tsx +39 -1
- package/src/app/hooks/useNotificationArea.tsx +105 -0
- package/src/content/Accordion/Accordion.stories.jsx +9 -1
- package/src/feedback/NotificationBanner/NotificationBanner.stories.js +1 -0
- package/src/feedback/NotificationBanner/__stories__/Expanded.tsx +27 -0
- package/src/feedback/NotificationBanner/doc.mdx +15 -3
- package/src/feedback/NotificationBanner/index.test.tsx +4 -0
- package/src/i18n/locales/el.ts +63 -13
- package/src/i18n/locales/en.ts +40 -5
- package/src/lazy.js +1 -0
- package/src/registry.js +10 -8
- package/stories-registry/index.js +61 -57
|
@@ -6,4 +6,5 @@ declare namespace _default {
|
|
|
6
6
|
export default _default;
|
|
7
7
|
export { Default } from "@digigov/ui/app/Loader/__stories__/Default";
|
|
8
8
|
export { FullPageLoader } from "@digigov/ui/app/Loader/__stories__/FullPageLoader";
|
|
9
|
+
export { AccessibilityLoader } from "@digigov/ui/app/Loader/__stories__/AccessibilityLoader";
|
|
9
10
|
import CircularProgress from '@digigov/ui/app/Loader';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
export declare const CircularProgress: React.FC<
|
|
2
|
+
import { CircularProgressBaseProps } from '@digigov/react-core/CircularProgressBase';
|
|
3
|
+
export declare const CircularProgress: React.FC<CircularProgressBaseProps>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/app/Loader/index.native.tsx"],
|
|
4
|
-
"sourcesContent": ["import React, { useRef, useEffect } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport Svg, { Circle } from 'react-native-svg';\nimport {
|
|
5
|
-
"mappings": "AAAA,OAAO,SAAS,QAAQ,iBAAiB;AACzC,SAAS,UAAU,cAAc;AACjC,OAAO,OAAO,cAAc;AAGrB,MAAM,
|
|
4
|
+
"sourcesContent": ["import React, { useRef, useEffect } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport Svg, { Circle } from 'react-native-svg';\nimport { CircularProgressBaseProps } from '@digigov/react-core/CircularProgressBase';\n\nexport const CircularProgress: React.FC<CircularProgressBaseProps> = ({\n size = 'md',\n color = 'primary',\n}) => {\n const sizes = {\n sm: 20,\n md: 40,\n lg: 50,\n };\n const strokeWidth = sizes[size] / 4;\n const radius = (sizes[size] - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const rotateAnim = useRef(new Animated.Value(0)).current;\n const dashAnim = useRef(new Animated.Value(circumference)).current;\n\n const progressColor = color === 'primary' ? '#003375' : '#fff';\n const backgroundColor = '#01b0f0';\n const duration = 4000;\n\n useEffect(() => {\n Animated.loop(\n Animated.timing(rotateAnim, {\n toValue: 1,\n duration: 10000,\n easing: Easing.linear,\n useNativeDriver: true,\n })\n ).start();\n }, [rotateAnim]);\n\n useEffect(() => {\n Animated.loop(\n Animated.sequence([\n Animated.timing(dashAnim, {\n toValue: 0,\n duration: duration * 0.4,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n Animated.timing(dashAnim, {\n toValue: circumference,\n duration: duration * 0.6,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n ])\n ).start();\n }, [dashAnim, duration, circumference]);\n\n const rotateInterpolate = rotateAnim.interpolate({\n inputRange: [0, 1],\n outputRange: ['0deg', '360deg'],\n });\n\n return (\n <Animated.View\n style={[\n {\n width: sizes[size],\n height: sizes[size],\n transform: [{ rotate: rotateInterpolate }],\n },\n ]}\n >\n <Svg\n width={sizes[size]}\n height={sizes[size]}\n viewBox={`0 0 ${sizes[size]} ${sizes[size]}`}\n >\n <Circle\n cx={sizes[size] / 2}\n cy={sizes[size] / 2}\n r={radius}\n stroke={backgroundColor}\n strokeWidth={strokeWidth}\n fill=\"none\"\n />\n <AnimatedCircle\n cx={sizes[size] / 2}\n cy={sizes[size] / 2}\n r={radius}\n stroke={progressColor}\n strokeWidth={strokeWidth}\n strokeDasharray={`${circumference}`}\n strokeDashoffset={dashAnim}\n fill=\"none\"\n />\n </Svg>\n </Animated.View>\n );\n};\n\nconst AnimatedCircle = Animated.createAnimatedComponent(Circle);\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,SAAS,QAAQ,iBAAiB;AACzC,SAAS,UAAU,cAAc;AACjC,OAAO,OAAO,cAAc;AAGrB,MAAM,mBAAwD,CAAC;AAAA,EACpE,OAAO;AAAA,EACP,QAAQ;AACV,MAAM;AACJ,QAAM,QAAQ;AAAA,IACZ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AACA,QAAM,cAAc,MAAM,IAAI,IAAI;AAClC,QAAM,UAAU,MAAM,IAAI,IAAI,eAAe;AAC7C,QAAM,gBAAgB,IAAI,KAAK,KAAK;AACpC,QAAM,aAAa,OAAO,IAAI,SAAS,MAAM,CAAC,CAAC,EAAE;AACjD,QAAM,WAAW,OAAO,IAAI,SAAS,MAAM,aAAa,CAAC,EAAE;AAE3D,QAAM,gBAAgB,UAAU,YAAY,YAAY;AACxD,QAAM,kBAAkB;AACxB,QAAM,WAAW;AAEjB,YAAU,MAAM;AACd,aAAS;AAAA,MACP,SAAS,OAAO,YAAY;AAAA,QAC1B,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ,OAAO;AAAA,QACf,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH,EAAE,MAAM;AAAA,EACV,GAAG,CAAC,UAAU,CAAC;AAEf,YAAU,MAAM;AACd,aAAS;AAAA,MACP,SAAS,SAAS;AAAA,QAChB,SAAS,OAAO,UAAU;AAAA,UACxB,SAAS;AAAA,UACT,UAAU,WAAW;AAAA,UACrB,QAAQ,OAAO,MAAM,OAAO,IAAI;AAAA,UAChC,iBAAiB;AAAA,QACnB,CAAC;AAAA,QACD,SAAS,OAAO,UAAU;AAAA,UACxB,SAAS;AAAA,UACT,UAAU,WAAW;AAAA,UACrB,QAAQ,OAAO,MAAM,OAAO,IAAI;AAAA,UAChC,iBAAiB;AAAA,QACnB,CAAC;AAAA,MACH,CAAC;AAAA,IACH,EAAE,MAAM;AAAA,EACV,GAAG,CAAC,UAAU,UAAU,aAAa,CAAC;AAEtC,QAAM,oBAAoB,WAAW,YAAY;AAAA,IAC/C,YAAY,CAAC,GAAG,CAAC;AAAA,IACjB,aAAa,CAAC,QAAQ,QAAQ;AAAA,EAChC,CAAC;AAED,SACE;AAAA,IAAC,SAAS;AAAA,IAAT;AAAA,MACC,OAAO;AAAA,QACL;AAAA,UACE,OAAO,MAAM,IAAI;AAAA,UACjB,QAAQ,MAAM,IAAI;AAAA,UAClB,WAAW,CAAC,EAAE,QAAQ,kBAAkB,CAAC;AAAA,QAC3C;AAAA,MACF;AAAA;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,MAAM,IAAI;AAAA,QACjB,QAAQ,MAAM,IAAI;AAAA,QAClB,SAAS,OAAO,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;AAAA;AAAA,MAE1C;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM,IAAI,IAAI;AAAA,UAClB,IAAI,MAAM,IAAI,IAAI;AAAA,UAClB,GAAG;AAAA,UACH,QAAQ;AAAA,UACR;AAAA,UACA,MAAK;AAAA;AAAA,MACP;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM,IAAI,IAAI;AAAA,UAClB,IAAI,MAAM,IAAI,IAAI;AAAA,UAClB,GAAG;AAAA,UACH,QAAQ;AAAA,UACR;AAAA,UACA,iBAAiB,GAAG,aAAa;AAAA,UACjC,kBAAkB;AAAA,UAClB,MAAK;AAAA;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAEJ;AAEA,MAAM,iBAAiB,SAAS,wBAAwB,MAAM;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,2 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
export * from "@digigov/react-core/CircularProgressBase";
|
|
3
|
+
import CircularProgressBase from "@digigov/react-core/CircularProgressBase";
|
|
4
|
+
import { useNotificationArea } from "@digigov/ui/app/hooks/useNotificationArea";
|
|
5
|
+
const CircularProgress = React.forwardRef(function CircularProgress2({
|
|
6
|
+
loadingText = "\u0393\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7...",
|
|
7
|
+
loadingFinishedText = "\u0397 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7 \u03BF\u03BB\u03BF\u03BA\u03BB\u03B7\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.",
|
|
8
|
+
...props
|
|
9
|
+
}, ref) {
|
|
10
|
+
useNotificationArea(loadingText, loadingFinishedText);
|
|
11
|
+
return /* @__PURE__ */ React.createElement(CircularProgressBase, { ref, ...props });
|
|
12
|
+
});
|
|
13
|
+
var index_web_default = CircularProgress;
|
|
14
|
+
export {
|
|
15
|
+
CircularProgress,
|
|
16
|
+
index_web_default as default
|
|
17
|
+
};
|
|
2
18
|
//# sourceMappingURL=index.web.js.map
|
|
@@ -1 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export * from '@digigov/react-core/CircularProgressBase';
|
|
3
|
+
import { CircularProgressBaseProps } from '@digigov/react-core/CircularProgressBase';
|
|
4
|
+
export interface CircularProgressProps extends CircularProgressBaseProps {
|
|
5
|
+
/**
|
|
6
|
+
* loadingText prop is optional
|
|
7
|
+
* Text for screen readers when loading starts
|
|
8
|
+
* @default "Γίνεται φόρτωση..."
|
|
9
|
+
*/
|
|
10
|
+
loadingText?: string;
|
|
11
|
+
/**
|
|
12
|
+
* loadingFinishedText prop is optional
|
|
13
|
+
* Text for screen readers when loading finishes
|
|
14
|
+
* @default "Η φόρτωση ολοκληρώθηκε."
|
|
15
|
+
*/
|
|
16
|
+
loadingFinishedText?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare const CircularProgress: React.ForwardRefExoticComponent<Omit<CircularProgressProps, "ref"> & React.RefAttributes<SVGElement>>;
|
|
19
|
+
export default CircularProgress;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/app/Loader/index.web.tsx"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "AAAA,cAAc;",
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nexport * from '@digigov/react-core/CircularProgressBase';\nimport CircularProgressBase, {\n CircularProgressBaseProps,\n} from '@digigov/react-core/CircularProgressBase';\nimport { useNotificationArea } from '@digigov/ui/app/hooks/useNotificationArea';\n\nexport interface CircularProgressProps extends CircularProgressBaseProps {\n /**\n * loadingText prop is optional\n * Text for screen readers when loading starts\n * @default \"\u0393\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7...\"\n */\n loadingText?: string;\n /**\n * loadingFinishedText prop is optional\n * Text for screen readers when loading finishes\n * @default \"\u0397 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7 \u03BF\u03BB\u03BF\u03BA\u03BB\u03B7\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.\"\n */\n loadingFinishedText?: string;\n}\n\nexport const CircularProgress = React.forwardRef<\n SVGElement,\n CircularProgressProps\n>(function CircularProgress(\n {\n loadingText = '\u0393\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7...',\n loadingFinishedText = '\u0397 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7 \u03BF\u03BB\u03BF\u03BA\u03BB\u03B7\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.',\n ...props\n },\n ref\n) {\n useNotificationArea(loadingText, loadingFinishedText);\n\n return <CircularProgressBase ref={ref} {...props} />;\n});\n\nexport default CircularProgress;\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,WAAW;AAClB,cAAc;AACd,OAAO,0BAEA;AACP,SAAS,2BAA2B;AAiB7B,MAAM,mBAAmB,MAAM,WAGpC,SAASA,kBACT;AAAA,EACE,cAAc;AAAA,EACd,sBAAsB;AAAA,EACtB,GAAG;AACL,GACA,KACA;AACA,sBAAoB,aAAa,mBAAmB;AAEpD,SAAO,oCAAC,wBAAqB,KAAW,GAAG,OAAO;AACpD,CAAC;AAED,IAAO,oBAAQ;",
|
|
6
|
+
"names": ["CircularProgress"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
2
|
+
const notificationAreaId = "loader-notification-area";
|
|
3
|
+
const activeSpinnersAttr = "data-active-spinners";
|
|
4
|
+
function generateUniqueId() {
|
|
5
|
+
return `spinner-${Math.random().toString(36).substring(2, 9)}`;
|
|
6
|
+
}
|
|
7
|
+
const getOrCreateNotificationArea = () => {
|
|
8
|
+
let element = document.getElementById(notificationAreaId);
|
|
9
|
+
if (!element) {
|
|
10
|
+
element = document.createElement("div");
|
|
11
|
+
element.id = notificationAreaId;
|
|
12
|
+
element.setAttribute("role", "status");
|
|
13
|
+
element.setAttribute("aria-live", "polite");
|
|
14
|
+
element.className = "ds-visually-hidden";
|
|
15
|
+
document.body.appendChild(element);
|
|
16
|
+
}
|
|
17
|
+
return element;
|
|
18
|
+
};
|
|
19
|
+
const useNotificationArea = (loadingText = "\u0393\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7...", finishedText = "\u0397 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7 \u03BF\u03BB\u03BF\u03BA\u03BB\u03B7\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.") => {
|
|
20
|
+
const spinnerId = useRef(generateUniqueId());
|
|
21
|
+
const notificationRef = useRef(null);
|
|
22
|
+
const getActiveIds = useCallback(() => {
|
|
23
|
+
const current = notificationRef.current;
|
|
24
|
+
const value = current?.getAttribute(activeSpinnersAttr) || "";
|
|
25
|
+
return value.split(",").filter(Boolean);
|
|
26
|
+
}, [notificationRef]);
|
|
27
|
+
const setActiveSpinnerId = useCallback(() => {
|
|
28
|
+
const current = notificationRef.current;
|
|
29
|
+
if (current) {
|
|
30
|
+
const ids = new Set(getActiveIds());
|
|
31
|
+
ids.add(spinnerId.current);
|
|
32
|
+
current.setAttribute(activeSpinnersAttr, Array.from(ids).join(","));
|
|
33
|
+
}
|
|
34
|
+
}, [notificationRef, getActiveIds, spinnerId]);
|
|
35
|
+
const unsetActiveSpinnerId = useCallback(() => {
|
|
36
|
+
const current = notificationRef.current;
|
|
37
|
+
if (current) {
|
|
38
|
+
const ids = getActiveIds().filter((id) => id !== spinnerId.current);
|
|
39
|
+
current.setAttribute(activeSpinnersAttr, ids.join(","));
|
|
40
|
+
}
|
|
41
|
+
}, [notificationRef, getActiveIds, spinnerId]);
|
|
42
|
+
const setTextContent = (text) => {
|
|
43
|
+
if (notificationRef.current) {
|
|
44
|
+
notificationRef.current.textContent = text;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (typeof document === "undefined") return;
|
|
49
|
+
notificationRef.current = getOrCreateNotificationArea();
|
|
50
|
+
setActiveSpinnerId();
|
|
51
|
+
setTextContent(loadingText);
|
|
52
|
+
return () => {
|
|
53
|
+
unsetActiveSpinnerId();
|
|
54
|
+
if (getActiveIds().length === 0) {
|
|
55
|
+
setTextContent(finishedText);
|
|
56
|
+
setTimeout(() => {
|
|
57
|
+
const el = notificationRef.current;
|
|
58
|
+
if (el && getActiveIds().length === 0) {
|
|
59
|
+
el.removeAttribute(activeSpinnersAttr);
|
|
60
|
+
el.textContent = "";
|
|
61
|
+
}
|
|
62
|
+
}, 1e3);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}, [
|
|
66
|
+
loadingText,
|
|
67
|
+
finishedText,
|
|
68
|
+
setActiveSpinnerId,
|
|
69
|
+
unsetActiveSpinnerId,
|
|
70
|
+
getActiveIds
|
|
71
|
+
]);
|
|
72
|
+
};
|
|
73
|
+
export {
|
|
74
|
+
useNotificationArea
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=useNotificationArea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useNotificationArea: (loadingText?: string, finishedText?: string) => void;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/app/hooks/useNotificationArea.tsx"],
|
|
4
|
+
"sourcesContent": ["import { useCallback, useEffect, useRef } from 'react';\n\n// Unique ID for the aria-live notification area element.\nconst notificationAreaId = 'loader-notification-area';\n// Custom attribute to track active spinners\nconst activeSpinnersAttr = 'data-active-spinners';\n\n// Generates a random unique ID for each spinner instance.\nfunction generateUniqueId() {\n return `spinner-${Math.random().toString(36).substring(2, 9)}`;\n}\n\n// Finds or creates the notification area element in the DOM.\nconst getOrCreateNotificationArea = (): HTMLElement => {\n let element = document.getElementById(notificationAreaId);\n\n // Create and append it to the DOM.\n if (!element) {\n element = document.createElement('div');\n element.id = notificationAreaId;\n element.setAttribute('role', 'status');\n element.setAttribute('aria-live', 'polite');\n element.className = 'ds-visually-hidden';\n document.body.appendChild(element);\n }\n\n return element;\n};\n\nexport const useNotificationArea = (\n loadingText = '\u0393\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7...',\n finishedText = '\u0397 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7 \u03BF\u03BB\u03BF\u03BA\u03BB\u03B7\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.'\n) => {\n // Unique ID for this spinner.\n const spinnerId = useRef(generateUniqueId());\n // Reference to the notification area DOM element.\n const notificationRef = useRef<HTMLElement | null>(null);\n\n // Returns an array of active spinner IDs.\n const getActiveIds = useCallback(() => {\n const current = notificationRef.current;\n const value = current?.getAttribute(activeSpinnersAttr) || '';\n return value.split(',').filter(Boolean);\n }, [notificationRef]);\n\n // Adds this spinner's ID to the active list.\n const setActiveSpinnerId = useCallback(() => {\n const current = notificationRef.current;\n if (current) {\n const ids = new Set(getActiveIds());\n ids.add(spinnerId.current);\n current.setAttribute(activeSpinnersAttr, Array.from(ids).join(','));\n }\n }, [notificationRef, getActiveIds, spinnerId]);\n\n // Removes this spinner's ID from the active list.\n const unsetActiveSpinnerId = useCallback(() => {\n const current = notificationRef.current;\n if (current) {\n const ids = getActiveIds().filter((id) => id !== spinnerId.current);\n current.setAttribute(activeSpinnersAttr, ids.join(','));\n }\n }, [notificationRef, getActiveIds, spinnerId]);\n\n // Updates the text content of the aria-live region.\n const setTextContent = (text: string) => {\n if (notificationRef.current) {\n notificationRef.current.textContent = text;\n }\n };\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n\n // Set up notification area and mark this spinner as active.\n notificationRef.current = getOrCreateNotificationArea();\n setActiveSpinnerId();\n setTextContent(loadingText);\n\n // Cleanup when component unmounts.\n return () => {\n unsetActiveSpinnerId();\n\n // If no active spinners remain, announce \"finished\" and clear the text.\n if (getActiveIds().length === 0) {\n setTextContent(finishedText);\n\n // Give screen readers a chance to announce \"finished\" before clearing.\n setTimeout(() => {\n const el = notificationRef.current;\n if (el && getActiveIds().length === 0) {\n el.removeAttribute(activeSpinnersAttr);\n el.textContent = '';\n }\n }, 1000);\n }\n };\n }, [\n loadingText,\n finishedText,\n setActiveSpinnerId,\n unsetActiveSpinnerId,\n getActiveIds,\n ]);\n};\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,aAAa,WAAW,cAAc;AAG/C,MAAM,qBAAqB;AAE3B,MAAM,qBAAqB;AAG3B,SAAS,mBAAmB;AAC1B,SAAO,WAAW,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AAC9D;AAGA,MAAM,8BAA8B,MAAmB;AACrD,MAAI,UAAU,SAAS,eAAe,kBAAkB;AAGxD,MAAI,CAAC,SAAS;AACZ,cAAU,SAAS,cAAc,KAAK;AACtC,YAAQ,KAAK;AACb,YAAQ,aAAa,QAAQ,QAAQ;AACrC,YAAQ,aAAa,aAAa,QAAQ;AAC1C,YAAQ,YAAY;AACpB,aAAS,KAAK,YAAY,OAAO;AAAA,EACnC;AAEA,SAAO;AACT;AAEO,MAAM,sBAAsB,CACjC,cAAc,4FACd,eAAe,kIACZ;AAEH,QAAM,YAAY,OAAO,iBAAiB,CAAC;AAE3C,QAAM,kBAAkB,OAA2B,IAAI;AAGvD,QAAM,eAAe,YAAY,MAAM;AACrC,UAAM,UAAU,gBAAgB;AAChC,UAAM,QAAQ,SAAS,aAAa,kBAAkB,KAAK;AAC3D,WAAO,MAAM,MAAM,GAAG,EAAE,OAAO,OAAO;AAAA,EACxC,GAAG,CAAC,eAAe,CAAC;AAGpB,QAAM,qBAAqB,YAAY,MAAM;AAC3C,UAAM,UAAU,gBAAgB;AAChC,QAAI,SAAS;AACX,YAAM,MAAM,IAAI,IAAI,aAAa,CAAC;AAClC,UAAI,IAAI,UAAU,OAAO;AACzB,cAAQ,aAAa,oBAAoB,MAAM,KAAK,GAAG,EAAE,KAAK,GAAG,CAAC;AAAA,IACpE;AAAA,EACF,GAAG,CAAC,iBAAiB,cAAc,SAAS,CAAC;AAG7C,QAAM,uBAAuB,YAAY,MAAM;AAC7C,UAAM,UAAU,gBAAgB;AAChC,QAAI,SAAS;AACX,YAAM,MAAM,aAAa,EAAE,OAAO,CAAC,OAAO,OAAO,UAAU,OAAO;AAClE,cAAQ,aAAa,oBAAoB,IAAI,KAAK,GAAG,CAAC;AAAA,IACxD;AAAA,EACF,GAAG,CAAC,iBAAiB,cAAc,SAAS,CAAC;AAG7C,QAAM,iBAAiB,CAAC,SAAiB;AACvC,QAAI,gBAAgB,SAAS;AAC3B,sBAAgB,QAAQ,cAAc;AAAA,IACxC;AAAA,EACF;AAEA,YAAU,MAAM;AACd,QAAI,OAAO,aAAa,YAAa;AAGrC,oBAAgB,UAAU,4BAA4B;AACtD,uBAAmB;AACnB,mBAAe,WAAW;AAG1B,WAAO,MAAM;AACX,2BAAqB;AAGrB,UAAI,aAAa,EAAE,WAAW,GAAG;AAC/B,uBAAe,YAAY;AAG3B,mBAAW,MAAM;AACf,gBAAM,KAAK,gBAAgB;AAC3B,cAAI,MAAM,aAAa,EAAE,WAAW,GAAG;AACrC,eAAG,gBAAgB,kBAAkB;AACrC,eAAG,cAAc;AAAA,UACnB;AAAA,QACF,GAAG,GAAI;AAAA,MACT;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/app/Loader/index.native.tsx"],
|
|
4
|
-
"sourcesContent": ["import React, { useRef, useEffect } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport Svg, { Circle } from 'react-native-svg';\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAyC;AACzC,0BAAiC;AACjC,8BAA4B;AAGrB,MAAM,
|
|
4
|
+
"sourcesContent": ["import React, { useRef, useEffect } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport Svg, { Circle } from 'react-native-svg';\nimport { CircularProgressBaseProps } from '@digigov/react-core/CircularProgressBase';\n\nexport const CircularProgress: React.FC<CircularProgressBaseProps> = ({\n size = 'md',\n color = 'primary',\n}) => {\n const sizes = {\n sm: 20,\n md: 40,\n lg: 50,\n };\n const strokeWidth = sizes[size] / 4;\n const radius = (sizes[size] - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const rotateAnim = useRef(new Animated.Value(0)).current;\n const dashAnim = useRef(new Animated.Value(circumference)).current;\n\n const progressColor = color === 'primary' ? '#003375' : '#fff';\n const backgroundColor = '#01b0f0';\n const duration = 4000;\n\n useEffect(() => {\n Animated.loop(\n Animated.timing(rotateAnim, {\n toValue: 1,\n duration: 10000,\n easing: Easing.linear,\n useNativeDriver: true,\n })\n ).start();\n }, [rotateAnim]);\n\n useEffect(() => {\n Animated.loop(\n Animated.sequence([\n Animated.timing(dashAnim, {\n toValue: 0,\n duration: duration * 0.4,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n Animated.timing(dashAnim, {\n toValue: circumference,\n duration: duration * 0.6,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n ])\n ).start();\n }, [dashAnim, duration, circumference]);\n\n const rotateInterpolate = rotateAnim.interpolate({\n inputRange: [0, 1],\n outputRange: ['0deg', '360deg'],\n });\n\n return (\n <Animated.View\n style={[\n {\n width: sizes[size],\n height: sizes[size],\n transform: [{ rotate: rotateInterpolate }],\n },\n ]}\n >\n <Svg\n width={sizes[size]}\n height={sizes[size]}\n viewBox={`0 0 ${sizes[size]} ${sizes[size]}`}\n >\n <Circle\n cx={sizes[size] / 2}\n cy={sizes[size] / 2}\n r={radius}\n stroke={backgroundColor}\n strokeWidth={strokeWidth}\n fill=\"none\"\n />\n <AnimatedCircle\n cx={sizes[size] / 2}\n cy={sizes[size] / 2}\n r={radius}\n stroke={progressColor}\n strokeWidth={strokeWidth}\n strokeDasharray={`${circumference}`}\n strokeDashoffset={dashAnim}\n fill=\"none\"\n />\n </Svg>\n </Animated.View>\n );\n};\n\nconst AnimatedCircle = Animated.createAnimatedComponent(Circle);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAyC;AACzC,0BAAiC;AACjC,8BAA4B;AAGrB,MAAM,mBAAwD,CAAC;AAAA,EACpE,OAAO;AAAA,EACP,QAAQ;AACV,MAAM;AACJ,QAAM,QAAQ;AAAA,IACZ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AACA,QAAM,cAAc,MAAM,IAAI,IAAI;AAClC,QAAM,UAAU,MAAM,IAAI,IAAI,eAAe;AAC7C,QAAM,gBAAgB,IAAI,KAAK,KAAK;AACpC,QAAM,iBAAa,qBAAO,IAAI,6BAAS,MAAM,CAAC,CAAC,EAAE;AACjD,QAAM,eAAW,qBAAO,IAAI,6BAAS,MAAM,aAAa,CAAC,EAAE;AAE3D,QAAM,gBAAgB,UAAU,YAAY,YAAY;AACxD,QAAM,kBAAkB;AACxB,QAAM,WAAW;AAEjB,8BAAU,MAAM;AACd,iCAAS;AAAA,MACP,6BAAS,OAAO,YAAY;AAAA,QAC1B,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ,2BAAO;AAAA,QACf,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH,EAAE,MAAM;AAAA,EACV,GAAG,CAAC,UAAU,CAAC;AAEf,8BAAU,MAAM;AACd,iCAAS;AAAA,MACP,6BAAS,SAAS;AAAA,QAChB,6BAAS,OAAO,UAAU;AAAA,UACxB,SAAS;AAAA,UACT,UAAU,WAAW;AAAA,UACrB,QAAQ,2BAAO,MAAM,2BAAO,IAAI;AAAA,UAChC,iBAAiB;AAAA,QACnB,CAAC;AAAA,QACD,6BAAS,OAAO,UAAU;AAAA,UACxB,SAAS;AAAA,UACT,UAAU,WAAW;AAAA,UACrB,QAAQ,2BAAO,MAAM,2BAAO,IAAI;AAAA,UAChC,iBAAiB;AAAA,QACnB,CAAC;AAAA,MACH,CAAC;AAAA,IACH,EAAE,MAAM;AAAA,EACV,GAAG,CAAC,UAAU,UAAU,aAAa,CAAC;AAEtC,QAAM,oBAAoB,WAAW,YAAY;AAAA,IAC/C,YAAY,CAAC,GAAG,CAAC;AAAA,IACjB,aAAa,CAAC,QAAQ,QAAQ;AAAA,EAChC,CAAC;AAED,SACE,6BAAAA,QAAA;AAAA,IAAC,6BAAS;AAAA,IAAT;AAAA,MACC,OAAO;AAAA,QACL;AAAA,UACE,OAAO,MAAM,IAAI;AAAA,UACjB,QAAQ,MAAM,IAAI;AAAA,UAClB,WAAW,CAAC,EAAE,QAAQ,kBAAkB,CAAC;AAAA,QAC3C;AAAA,MACF;AAAA;AAAA,IAEA,6BAAAA,QAAA;AAAA,MAAC,wBAAAC;AAAA,MAAA;AAAA,QACC,OAAO,MAAM,IAAI;AAAA,QACjB,QAAQ,MAAM,IAAI;AAAA,QAClB,SAAS,OAAO,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;AAAA;AAAA,MAE1C,6BAAAD,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM,IAAI,IAAI;AAAA,UAClB,IAAI,MAAM,IAAI,IAAI;AAAA,UAClB,GAAG;AAAA,UACH,QAAQ;AAAA,UACR;AAAA,UACA,MAAK;AAAA;AAAA,MACP;AAAA,MACA,6BAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM,IAAI,IAAI;AAAA,UAClB,IAAI,MAAM,IAAI,IAAI;AAAA,UAClB,GAAG;AAAA,UACH,QAAQ;AAAA,UACR;AAAA,UACA,iBAAiB,GAAG,aAAa;AAAA,UACjC,kBAAkB;AAAA,UAClB,MAAK;AAAA;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAEJ;AAEA,MAAM,iBAAiB,6BAAS,wBAAwB,8BAAM;",
|
|
6
6
|
"names": ["React", "Svg"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
1
2
|
var __defProp = Object.defineProperty;
|
|
2
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
5
11
|
var __copyProps = (to, from, except, desc) => {
|
|
6
12
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
13
|
for (let key of __getOwnPropNames(from))
|
|
@@ -11,12 +17,37 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
11
17
|
return to;
|
|
12
18
|
};
|
|
13
19
|
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
14
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
29
|
var index_web_exports = {};
|
|
30
|
+
__export(index_web_exports, {
|
|
31
|
+
CircularProgress: () => CircularProgress,
|
|
32
|
+
default: () => index_web_default
|
|
33
|
+
});
|
|
16
34
|
module.exports = __toCommonJS(index_web_exports);
|
|
17
|
-
|
|
35
|
+
var import_react = __toESM(require("react"));
|
|
36
|
+
__reExport(index_web_exports, require("@digigov/react-core/CircularProgressBase"), module.exports);
|
|
37
|
+
var import_CircularProgressBase = __toESM(require("@digigov/react-core/CircularProgressBase"));
|
|
38
|
+
var import_useNotificationArea = require("@digigov/ui/app/hooks/useNotificationArea");
|
|
39
|
+
const CircularProgress = import_react.default.forwardRef(function CircularProgress2({
|
|
40
|
+
loadingText = "\u0393\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7...",
|
|
41
|
+
loadingFinishedText = "\u0397 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7 \u03BF\u03BB\u03BF\u03BA\u03BB\u03B7\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.",
|
|
42
|
+
...props
|
|
43
|
+
}, ref) {
|
|
44
|
+
(0, import_useNotificationArea.useNotificationArea)(loadingText, loadingFinishedText);
|
|
45
|
+
return /* @__PURE__ */ import_react.default.createElement(import_CircularProgressBase.default, { ref, ...props });
|
|
46
|
+
});
|
|
47
|
+
var index_web_default = CircularProgress;
|
|
18
48
|
// Annotate the CommonJS export names for ESM import in node:
|
|
19
49
|
0 && (module.exports = {
|
|
20
|
-
|
|
50
|
+
CircularProgress,
|
|
51
|
+
...require("@digigov/react-core/CircularProgressBase")
|
|
21
52
|
});
|
|
22
53
|
//# sourceMappingURL=index.web.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/app/Loader/index.web.tsx"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nexport * from '@digigov/react-core/CircularProgressBase';\nimport CircularProgressBase, {\n CircularProgressBaseProps,\n} from '@digigov/react-core/CircularProgressBase';\nimport { useNotificationArea } from '@digigov/ui/app/hooks/useNotificationArea';\n\nexport interface CircularProgressProps extends CircularProgressBaseProps {\n /**\n * loadingText prop is optional\n * Text for screen readers when loading starts\n * @default \"\u0393\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7...\"\n */\n loadingText?: string;\n /**\n * loadingFinishedText prop is optional\n * Text for screen readers when loading finishes\n * @default \"\u0397 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7 \u03BF\u03BB\u03BF\u03BA\u03BB\u03B7\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.\"\n */\n loadingFinishedText?: string;\n}\n\nexport const CircularProgress = React.forwardRef<\n SVGElement,\n CircularProgressProps\n>(function CircularProgress(\n {\n loadingText = '\u0393\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7...',\n loadingFinishedText = '\u0397 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7 \u03BF\u03BB\u03BF\u03BA\u03BB\u03B7\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.',\n ...props\n },\n ref\n) {\n useNotificationArea(loadingText, loadingFinishedText);\n\n return <CircularProgressBase ref={ref} {...props} />;\n});\n\nexport default CircularProgress;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,8BAAc,qDADd;AAEA,kCAEO;AACP,iCAAoC;AAiB7B,MAAM,mBAAmB,aAAAA,QAAM,WAGpC,SAASC,kBACT;AAAA,EACE,cAAc;AAAA,EACd,sBAAsB;AAAA,EACtB,GAAG;AACL,GACA,KACA;AACA,sDAAoB,aAAa,mBAAmB;AAEpD,SAAO,6BAAAD,QAAA,cAAC,4BAAAE,SAAA,EAAqB,KAAW,GAAG,OAAO;AACpD,CAAC;AAED,IAAO,oBAAQ;",
|
|
6
|
+
"names": ["React", "CircularProgress", "CircularProgressBase"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var useNotificationArea_exports = {};
|
|
19
|
+
__export(useNotificationArea_exports, {
|
|
20
|
+
useNotificationArea: () => useNotificationArea
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(useNotificationArea_exports);
|
|
23
|
+
var import_react = require("react");
|
|
24
|
+
const notificationAreaId = "loader-notification-area";
|
|
25
|
+
const activeSpinnersAttr = "data-active-spinners";
|
|
26
|
+
function generateUniqueId() {
|
|
27
|
+
return `spinner-${Math.random().toString(36).substring(2, 9)}`;
|
|
28
|
+
}
|
|
29
|
+
const getOrCreateNotificationArea = () => {
|
|
30
|
+
let element = document.getElementById(notificationAreaId);
|
|
31
|
+
if (!element) {
|
|
32
|
+
element = document.createElement("div");
|
|
33
|
+
element.id = notificationAreaId;
|
|
34
|
+
element.setAttribute("role", "status");
|
|
35
|
+
element.setAttribute("aria-live", "polite");
|
|
36
|
+
element.className = "ds-visually-hidden";
|
|
37
|
+
document.body.appendChild(element);
|
|
38
|
+
}
|
|
39
|
+
return element;
|
|
40
|
+
};
|
|
41
|
+
const useNotificationArea = (loadingText = "\u0393\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7...", finishedText = "\u0397 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7 \u03BF\u03BB\u03BF\u03BA\u03BB\u03B7\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.") => {
|
|
42
|
+
const spinnerId = (0, import_react.useRef)(generateUniqueId());
|
|
43
|
+
const notificationRef = (0, import_react.useRef)(null);
|
|
44
|
+
const getActiveIds = (0, import_react.useCallback)(() => {
|
|
45
|
+
const current = notificationRef.current;
|
|
46
|
+
const value = current?.getAttribute(activeSpinnersAttr) || "";
|
|
47
|
+
return value.split(",").filter(Boolean);
|
|
48
|
+
}, [notificationRef]);
|
|
49
|
+
const setActiveSpinnerId = (0, import_react.useCallback)(() => {
|
|
50
|
+
const current = notificationRef.current;
|
|
51
|
+
if (current) {
|
|
52
|
+
const ids = new Set(getActiveIds());
|
|
53
|
+
ids.add(spinnerId.current);
|
|
54
|
+
current.setAttribute(activeSpinnersAttr, Array.from(ids).join(","));
|
|
55
|
+
}
|
|
56
|
+
}, [notificationRef, getActiveIds, spinnerId]);
|
|
57
|
+
const unsetActiveSpinnerId = (0, import_react.useCallback)(() => {
|
|
58
|
+
const current = notificationRef.current;
|
|
59
|
+
if (current) {
|
|
60
|
+
const ids = getActiveIds().filter((id) => id !== spinnerId.current);
|
|
61
|
+
current.setAttribute(activeSpinnersAttr, ids.join(","));
|
|
62
|
+
}
|
|
63
|
+
}, [notificationRef, getActiveIds, spinnerId]);
|
|
64
|
+
const setTextContent = (text) => {
|
|
65
|
+
if (notificationRef.current) {
|
|
66
|
+
notificationRef.current.textContent = text;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
(0, import_react.useEffect)(() => {
|
|
70
|
+
if (typeof document === "undefined") return;
|
|
71
|
+
notificationRef.current = getOrCreateNotificationArea();
|
|
72
|
+
setActiveSpinnerId();
|
|
73
|
+
setTextContent(loadingText);
|
|
74
|
+
return () => {
|
|
75
|
+
unsetActiveSpinnerId();
|
|
76
|
+
if (getActiveIds().length === 0) {
|
|
77
|
+
setTextContent(finishedText);
|
|
78
|
+
setTimeout(() => {
|
|
79
|
+
const el = notificationRef.current;
|
|
80
|
+
if (el && getActiveIds().length === 0) {
|
|
81
|
+
el.removeAttribute(activeSpinnersAttr);
|
|
82
|
+
el.textContent = "";
|
|
83
|
+
}
|
|
84
|
+
}, 1e3);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}, [
|
|
88
|
+
loadingText,
|
|
89
|
+
finishedText,
|
|
90
|
+
setActiveSpinnerId,
|
|
91
|
+
unsetActiveSpinnerId,
|
|
92
|
+
getActiveIds
|
|
93
|
+
]);
|
|
94
|
+
};
|
|
95
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
96
|
+
0 && (module.exports = {
|
|
97
|
+
useNotificationArea
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=useNotificationArea.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/app/hooks/useNotificationArea.tsx"],
|
|
4
|
+
"sourcesContent": ["import { useCallback, useEffect, useRef } from 'react';\n\n// Unique ID for the aria-live notification area element.\nconst notificationAreaId = 'loader-notification-area';\n// Custom attribute to track active spinners\nconst activeSpinnersAttr = 'data-active-spinners';\n\n// Generates a random unique ID for each spinner instance.\nfunction generateUniqueId() {\n return `spinner-${Math.random().toString(36).substring(2, 9)}`;\n}\n\n// Finds or creates the notification area element in the DOM.\nconst getOrCreateNotificationArea = (): HTMLElement => {\n let element = document.getElementById(notificationAreaId);\n\n // Create and append it to the DOM.\n if (!element) {\n element = document.createElement('div');\n element.id = notificationAreaId;\n element.setAttribute('role', 'status');\n element.setAttribute('aria-live', 'polite');\n element.className = 'ds-visually-hidden';\n document.body.appendChild(element);\n }\n\n return element;\n};\n\nexport const useNotificationArea = (\n loadingText = '\u0393\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7...',\n finishedText = '\u0397 \u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7 \u03BF\u03BB\u03BF\u03BA\u03BB\u03B7\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.'\n) => {\n // Unique ID for this spinner.\n const spinnerId = useRef(generateUniqueId());\n // Reference to the notification area DOM element.\n const notificationRef = useRef<HTMLElement | null>(null);\n\n // Returns an array of active spinner IDs.\n const getActiveIds = useCallback(() => {\n const current = notificationRef.current;\n const value = current?.getAttribute(activeSpinnersAttr) || '';\n return value.split(',').filter(Boolean);\n }, [notificationRef]);\n\n // Adds this spinner's ID to the active list.\n const setActiveSpinnerId = useCallback(() => {\n const current = notificationRef.current;\n if (current) {\n const ids = new Set(getActiveIds());\n ids.add(spinnerId.current);\n current.setAttribute(activeSpinnersAttr, Array.from(ids).join(','));\n }\n }, [notificationRef, getActiveIds, spinnerId]);\n\n // Removes this spinner's ID from the active list.\n const unsetActiveSpinnerId = useCallback(() => {\n const current = notificationRef.current;\n if (current) {\n const ids = getActiveIds().filter((id) => id !== spinnerId.current);\n current.setAttribute(activeSpinnersAttr, ids.join(','));\n }\n }, [notificationRef, getActiveIds, spinnerId]);\n\n // Updates the text content of the aria-live region.\n const setTextContent = (text: string) => {\n if (notificationRef.current) {\n notificationRef.current.textContent = text;\n }\n };\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n\n // Set up notification area and mark this spinner as active.\n notificationRef.current = getOrCreateNotificationArea();\n setActiveSpinnerId();\n setTextContent(loadingText);\n\n // Cleanup when component unmounts.\n return () => {\n unsetActiveSpinnerId();\n\n // If no active spinners remain, announce \"finished\" and clear the text.\n if (getActiveIds().length === 0) {\n setTextContent(finishedText);\n\n // Give screen readers a chance to announce \"finished\" before clearing.\n setTimeout(() => {\n const el = notificationRef.current;\n if (el && getActiveIds().length === 0) {\n el.removeAttribute(activeSpinnersAttr);\n el.textContent = '';\n }\n }, 1000);\n }\n };\n }, [\n loadingText,\n finishedText,\n setActiveSpinnerId,\n unsetActiveSpinnerId,\n getActiveIds,\n ]);\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA+C;AAG/C,MAAM,qBAAqB;AAE3B,MAAM,qBAAqB;AAG3B,SAAS,mBAAmB;AAC1B,SAAO,WAAW,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AAC9D;AAGA,MAAM,8BAA8B,MAAmB;AACrD,MAAI,UAAU,SAAS,eAAe,kBAAkB;AAGxD,MAAI,CAAC,SAAS;AACZ,cAAU,SAAS,cAAc,KAAK;AACtC,YAAQ,KAAK;AACb,YAAQ,aAAa,QAAQ,QAAQ;AACrC,YAAQ,aAAa,aAAa,QAAQ;AAC1C,YAAQ,YAAY;AACpB,aAAS,KAAK,YAAY,OAAO;AAAA,EACnC;AAEA,SAAO;AACT;AAEO,MAAM,sBAAsB,CACjC,cAAc,4FACd,eAAe,kIACZ;AAEH,QAAM,gBAAY,qBAAO,iBAAiB,CAAC;AAE3C,QAAM,sBAAkB,qBAA2B,IAAI;AAGvD,QAAM,mBAAe,0BAAY,MAAM;AACrC,UAAM,UAAU,gBAAgB;AAChC,UAAM,QAAQ,SAAS,aAAa,kBAAkB,KAAK;AAC3D,WAAO,MAAM,MAAM,GAAG,EAAE,OAAO,OAAO;AAAA,EACxC,GAAG,CAAC,eAAe,CAAC;AAGpB,QAAM,yBAAqB,0BAAY,MAAM;AAC3C,UAAM,UAAU,gBAAgB;AAChC,QAAI,SAAS;AACX,YAAM,MAAM,IAAI,IAAI,aAAa,CAAC;AAClC,UAAI,IAAI,UAAU,OAAO;AACzB,cAAQ,aAAa,oBAAoB,MAAM,KAAK,GAAG,EAAE,KAAK,GAAG,CAAC;AAAA,IACpE;AAAA,EACF,GAAG,CAAC,iBAAiB,cAAc,SAAS,CAAC;AAG7C,QAAM,2BAAuB,0BAAY,MAAM;AAC7C,UAAM,UAAU,gBAAgB;AAChC,QAAI,SAAS;AACX,YAAM,MAAM,aAAa,EAAE,OAAO,CAAC,OAAO,OAAO,UAAU,OAAO;AAClE,cAAQ,aAAa,oBAAoB,IAAI,KAAK,GAAG,CAAC;AAAA,IACxD;AAAA,EACF,GAAG,CAAC,iBAAiB,cAAc,SAAS,CAAC;AAG7C,QAAM,iBAAiB,CAAC,SAAiB;AACvC,QAAI,gBAAgB,SAAS;AAC3B,sBAAgB,QAAQ,cAAc;AAAA,IACxC;AAAA,EACF;AAEA,8BAAU,MAAM;AACd,QAAI,OAAO,aAAa,YAAa;AAGrC,oBAAgB,UAAU,4BAA4B;AACtD,uBAAmB;AACnB,mBAAe,WAAW;AAG1B,WAAO,MAAM;AACX,2BAAqB;AAGrB,UAAI,aAAa,EAAE,WAAW,GAAG;AAC/B,uBAAe,YAAY;AAG3B,mBAAW,MAAM;AACf,gBAAM,KAAK,gBAAgB;AAC3B,cAAI,MAAM,aAAa,EAAE,WAAW,GAAG;AACrC,eAAG,gBAAgB,kBAAkB;AACrC,eAAG,cAAc;AAAA,UACnB;AAAA,QACF,GAAG,GAAI;AAAA,MACT;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -54,28 +54,55 @@ var el_default = {
|
|
|
54
54
|
date: {
|
|
55
55
|
invalid: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7.",
|
|
56
56
|
invalid_month_year: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2.",
|
|
57
|
-
invalid_day_year: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7 \u03BC\u03AD\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2.",
|
|
58
|
-
invalid_day_month: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7 \u03BC\u03AD\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1.",
|
|
59
|
-
invalid_day: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7 \u03BC\u03AD\u03C1\u03B1",
|
|
57
|
+
invalid_day_year: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2.",
|
|
58
|
+
invalid_day_month: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1.",
|
|
59
|
+
invalid_day: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1.",
|
|
60
60
|
invalid_month: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1.",
|
|
61
61
|
invalid_year: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF \u03B5\u03C4\u03BF\u03C2.",
|
|
62
62
|
earlier_than: "\u03A3\u03C5\u03BC\u03C0\u03BB\u03B7\u03C1\u03CE\u03C3\u03C4\u03B5 \u03BC\u03B9\u03B1 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03BF\u03B3\u03B5\u03BD\u03AD\u03C3\u03C4\u03B5\u03C1\u03B7 \u03C4\u03B7\u03C2 {{maxDate}}",
|
|
63
|
-
later_than: "\u03A3\u03C5\u03BC\u03C0\u03BB\u03B7\u03C1\u03CE\u03C3\u03C4\u03B5 \u03BC\u03B9\u03B1 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03BC\u03B5\u03C4\u03B1\u03B3\u03B5\u03BD\u03AD\u03C3\u03C4\u03B5\u03C1\u03B7 \u03C4\u03B7\u03C2 {{minDate}}"
|
|
63
|
+
later_than: "\u03A3\u03C5\u03BC\u03C0\u03BB\u03B7\u03C1\u03CE\u03C3\u03C4\u03B5 \u03BC\u03B9\u03B1 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03BC\u03B5\u03C4\u03B1\u03B3\u03B5\u03BD\u03AD\u03C3\u03C4\u03B5\u03C1\u03B7 \u03C4\u03B7\u03C2 {{minDate}}",
|
|
64
|
+
invalid_day_range: "\u0397 \u03B7\u03BC\u03AD\u03C1\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B5\u03C4\u03B1\u03BE\u03CD 1 \u03BA\u03B1\u03B9 {{maxDay}}.",
|
|
65
|
+
invalid_month_range: "\u039F \u03BC\u03AE\u03BD\u03B1\u03C2 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B5\u03C4\u03B1\u03BE\u03CD 1 \u03BA\u03B1\u03B9 12."
|
|
64
66
|
},
|
|
65
67
|
datetime: {
|
|
66
68
|
invalid: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03BA\u03B1\u03B9 \u03CE\u03C1\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7.",
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
invalid_minutes: "\
|
|
69
|
+
invalid_month_year_hours_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1, \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2, \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
70
|
+
invalid_day_year_hours_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1, \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2, \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
71
|
+
invalid_day_month_hours_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1, \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1, \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
72
|
+
invalid_year_hours_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2, \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
73
|
+
invalid_month_hours_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1, \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
74
|
+
invalid_day_hours_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1, \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
75
|
+
invalid__hours_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
76
|
+
invalid_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
77
|
+
invalid_hours: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1.",
|
|
78
|
+
invalid_month_year_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1, \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
79
|
+
invalid_month_year_hours: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1, \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1.",
|
|
80
|
+
invalid_month_year: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2.",
|
|
81
|
+
invalid_day_year_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1, \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
82
|
+
invalid_day_year_hours: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1, \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1.",
|
|
83
|
+
invalid_day_month_year: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1, \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2.",
|
|
84
|
+
invalid_day_month_year_hours: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1, \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1, \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1.",
|
|
85
|
+
invalid_day_year: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2.",
|
|
86
|
+
invalid_day_month_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1, \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
87
|
+
invalid_day_month_hours: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1, \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1.",
|
|
88
|
+
invalid_day_month: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1.",
|
|
89
|
+
invalid_year_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
90
|
+
invalid_year_hours: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1.",
|
|
91
|
+
invalid_year: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2.",
|
|
92
|
+
invalid_month_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
93
|
+
invalid_month_hours: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1.",
|
|
94
|
+
invalid_month: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1.",
|
|
95
|
+
invalid_day_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
96
|
+
invalid_day_hours: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1.",
|
|
97
|
+
invalid_day: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1.",
|
|
75
98
|
invalid_hours_range: "\u0397 \u03CE\u03C1\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B5\u03C4\u03B1\u03BE\u03CD 0 \u03BA\u03B1\u03B9 23.",
|
|
76
99
|
invalid_minutes_range: "\u03A4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B5\u03C4\u03B1\u03BE\u03CD 0 \u03BA\u03B1\u03B9 59.",
|
|
77
|
-
|
|
78
|
-
|
|
100
|
+
invalid_day_range: "\u0397 \u03B7\u03BC\u03AD\u03C1\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B5\u03C4\u03B1\u03BE\u03CD 1 \u03BA\u03B1\u03B9 {{maxDay}}.",
|
|
101
|
+
invalid_month_range: "\u039F \u03BC\u03AE\u03BD\u03B1\u03C2 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B5\u03C4\u03B1\u03BE\u03CD 1 \u03BA\u03B1\u03B9 12.",
|
|
102
|
+
invalid_day_month_year_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B7\u03BC\u03AD\u03C1\u03B1, \u03C4\u03BF\u03BD \u03BC\u03AE\u03BD\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03BF \u03AD\u03C4\u03BF\u03C2 \u03BA \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
103
|
+
invalid_hours_minutes: "\u0397 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03CE\u03C1\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03BB\u03B5\u03C0\u03C4\u03AC.",
|
|
104
|
+
earlier_than: "\u03A3\u03C5\u03BC\u03C0\u03BB\u03B7\u03C1\u03CE\u03C3\u03C4\u03B5 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03BA\u03B1\u03B9 \u03CE\u03C1\u03B1 \u03C0\u03C1\u03BF\u03B3\u03B5\u03BD\u03AD\u03C3\u03C4\u03B5\u03C1\u03B7 \u03C4\u03B7\u03C2 {{maxDateTime}}.",
|
|
105
|
+
later_than: "\u03A3\u03C5\u03BC\u03C0\u03BB\u03B7\u03C1\u03CE\u03C3\u03C4\u03B5 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03BA\u03B1\u03B9 \u03CE\u03C1\u03B1 \u03BC\u03B5\u03C4\u03B1\u03B3\u03B5\u03BD\u03AD\u03C3\u03C4\u03B5\u03C1\u03B7 \u03C4\u03B7\u03C2 {{minDateTime}}."
|
|
79
106
|
},
|
|
80
107
|
otp: {
|
|
81
108
|
invalid: "\u039F \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03C0\u03BF\u03C5 \u03AD\u03C7\u03B5\u03C4\u03B5 \u03B5\u03B9\u03C3\u03AC\u03B3\u03B5\u03B9 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BB\u03AC\u03B8\u03BF\u03C2.",
|