fictoan-react 2.0.0-beta.18 → 2.0.0-beta.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Badge/Badge.d.ts.map +1 -1
- package/dist/components/Badge/Badge.js +17 -18
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.js +37 -38
- package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/components/Callout/Callout.d.ts.map +1 -1
- package/dist/components/Callout/Callout.js +31 -25
- package/dist/components/Callout/Callout.js.map +1 -1
- package/dist/components/Divider/Divider.js +7 -7
- package/dist/components/Divider/Divider.js.map +1 -1
- package/dist/components/Element/Element.d.ts.map +1 -1
- package/dist/components/Element/Element.js +135 -133
- package/dist/components/Element/Element.js.map +1 -1
- package/dist/components/Element/constants.d.ts +21 -21
- package/dist/components/Element/constants.d.ts.map +1 -1
- package/dist/components/Element/constants.js.map +1 -1
- package/dist/components/Form/Checkbox/Switch.d.ts.map +1 -1
- package/dist/components/Form/Checkbox/Switch.js +11 -10
- package/dist/components/Form/Checkbox/Switch.js.map +1 -1
- package/dist/components/Form/FormItemGroup/FormItemGroup.d.ts.map +1 -1
- package/dist/components/Form/FormItemGroup/FormItemGroup.js +17 -17
- package/dist/components/Form/FormItemGroup/FormItemGroup.js.map +1 -1
- package/dist/components/Form/ListBox/ListBox.d.ts +1 -1
- package/dist/components/Form/ListBox/ListBox.d.ts.map +1 -1
- package/dist/components/Form/ListBox/ListBox.js +110 -107
- package/dist/components/Form/ListBox/ListBox.js.map +1 -1
- package/dist/components/Form/RadioButton/RadioTabGroup.d.ts +1 -1
- package/dist/components/Form/RadioButton/RadioTabGroup.js +46 -46
- package/dist/components/Form/RadioButton/RadioTabGroup.js.map +1 -1
- package/dist/components/Form/Select/Select.d.ts +1 -1
- package/dist/components/Form/Select/Select.d.ts.map +1 -1
- package/dist/components/Meter/Meter.d.ts.map +1 -1
- package/dist/components/Meter/Meter.js +54 -59
- package/dist/components/Meter/Meter.js.map +1 -1
- package/dist/components/Modal/Modal.d.ts.map +1 -1
- package/dist/components/Modal/Modal.js +20 -19
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/Notification/NotificationsProvider/NotificationsProvider.d.ts.map +1 -1
- package/dist/components/Notification/NotificationsProvider/NotificationsProvider.js +44 -44
- package/dist/components/Notification/NotificationsProvider/NotificationsProvider.js.map +1 -1
- package/dist/components/Pagination/Pagination.d.ts +1 -1
- package/dist/components/Pagination/Pagination.d.ts.map +1 -1
- package/dist/components/Pagination/Pagination.js +42 -41
- package/dist/components/Pagination/Pagination.js.map +1 -1
- package/dist/components/Portion/Portion.d.ts +1 -0
- package/dist/components/Portion/Portion.d.ts.map +1 -1
- package/dist/components/Portion/Portion.js +13 -12
- package/dist/components/Portion/Portion.js.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.js +23 -26
- package/dist/components/ProgressBar/ProgressBar.js.map +1 -1
- package/dist/components/Row/Row.d.ts +1 -0
- package/dist/components/Row/Row.d.ts.map +1 -1
- package/dist/components/Row/Row.js +22 -22
- package/dist/components/Row/Row.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/components/Skeleton/Skeleton.js +25 -27
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Table/Table.d.ts +0 -1
- package/dist/components/Table/Table.d.ts.map +1 -1
- package/dist/components/Table/Table.js +21 -34
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/components/Tabs/Tabs.js +49 -47
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/Toast/ToastsProvider/ToastsProvider.d.ts.map +1 -1
- package/dist/components/Toast/ToastsProvider/ToastsProvider.js +22 -22
- package/dist/components/Toast/ToastsProvider/ToastsProvider.js.map +1 -1
- package/dist/components/Typography/Heading.js +11 -11
- package/dist/components/Typography/Heading.js.map +1 -1
- package/dist/components/Typography/Text.js +7 -7
- package/dist/components/Typography/Text.js.map +1 -1
- package/dist/fictoan-schema.json +33 -37
- package/dist/index.css +3 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +129 -127
- package/dist/index.js.map +1 -1
- package/dist/utils/classNames.d.ts +1 -1
- package/dist/utils/classNames.d.ts.map +1 -1
- package/dist/utils/classNames.js.map +1 -1
- package/dist/utils/propSeparation.js +4 -4
- package/dist/utils/propSeparation.js.map +1 -1
- package/package.json +14 -3
|
@@ -1,57 +1,59 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsxs as
|
|
3
|
-
import
|
|
4
|
-
import { Nav as
|
|
2
|
+
import { jsxs as h, jsx as a } from "react/jsx-runtime";
|
|
3
|
+
import y, { useRef as g, useCallback as p, useEffect as x } from "react";
|
|
4
|
+
import { Nav as S, Div as v } from "../Element/Tags.js";
|
|
5
5
|
/* empty css */
|
|
6
|
-
import { Divider as
|
|
7
|
-
import { Text as
|
|
8
|
-
import { Element as
|
|
9
|
-
const
|
|
10
|
-
({ tabs:
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
), [
|
|
14
|
-
(t == null ? void 0 : t.key) !== e.key && (k(!0), setTimeout(() => {
|
|
15
|
-
|
|
6
|
+
import { Divider as B } from "../Divider/Divider.js";
|
|
7
|
+
import { Text as C } from "../Typography/Text.js";
|
|
8
|
+
import { Element as T } from "../Element/Element.js";
|
|
9
|
+
const j = y.forwardRef(
|
|
10
|
+
({ tabs: n, additionalNavContentWrapper: E, defaultActiveTab: $, align: w = "left", isFullWidth: N, ...R }, A) => {
|
|
11
|
+
const c = n.findIndex((e) => e.key === $), o = c > -1 ? c : 0, [t, s] = y.useState(
|
|
12
|
+
n.length > 0 ? n[o] : void 0
|
|
13
|
+
), [D, k] = y.useState(!1), u = g([]), i = g(null), d = p((e) => {
|
|
14
|
+
(t == null ? void 0 : t.key) !== e.key && (k(!0), i.current !== null && clearTimeout(i.current), i.current = setTimeout(() => {
|
|
15
|
+
s(e), k(!1), i.current = null;
|
|
16
16
|
}, 150));
|
|
17
17
|
}, [t == null ? void 0 : t.key]);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}, [
|
|
21
|
-
|
|
18
|
+
x(() => () => {
|
|
19
|
+
i.current !== null && clearTimeout(i.current);
|
|
20
|
+
}, []), x(() => {
|
|
21
|
+
n.length > 0 ? n.find((r) => r.key === (t == null ? void 0 : t.key)) || s(n[o]) : s(void 0);
|
|
22
|
+
}, [n, o, t == null ? void 0 : t.key]);
|
|
23
|
+
const I = p((e, r) => {
|
|
22
24
|
var m;
|
|
23
|
-
let
|
|
25
|
+
let l = r;
|
|
24
26
|
if (e.key === "ArrowRight")
|
|
25
|
-
|
|
27
|
+
l = (r + 1) % n.length;
|
|
26
28
|
else if (e.key === "ArrowLeft")
|
|
27
|
-
|
|
29
|
+
l = (r - 1 + n.length) % n.length;
|
|
28
30
|
else if (e.key === "Home")
|
|
29
|
-
|
|
31
|
+
l = 0;
|
|
30
32
|
else if (e.key === "End")
|
|
31
|
-
|
|
33
|
+
l = n.length - 1;
|
|
32
34
|
else
|
|
33
35
|
return;
|
|
34
36
|
e.preventDefault();
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
}, [
|
|
38
|
-
return t ? /* @__PURE__ */
|
|
39
|
-
|
|
37
|
+
const f = n[l];
|
|
38
|
+
f && (d(f), (m = u.current[l]) == null || m.focus());
|
|
39
|
+
}, [n, d]);
|
|
40
|
+
return t ? /* @__PURE__ */ h(
|
|
41
|
+
T,
|
|
40
42
|
{
|
|
41
43
|
as: "div",
|
|
42
44
|
"data-tabs": !0,
|
|
43
|
-
ref:
|
|
44
|
-
"data-align":
|
|
45
|
-
"data-full-width":
|
|
46
|
-
...
|
|
45
|
+
ref: A,
|
|
46
|
+
"data-align": w,
|
|
47
|
+
"data-full-width": N,
|
|
48
|
+
...R,
|
|
47
49
|
children: [
|
|
48
|
-
/* @__PURE__ */
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
/* @__PURE__ */ a(S, { "data-tabs-nav": !0, role: "tablist", "aria-label": "Tab Navigation", children: /* @__PURE__ */ h("ul", { className: "tab-labels-list", role: "none", children: [
|
|
51
|
+
n.map((e, r) => /* @__PURE__ */ a("li", { role: "none", children: /* @__PURE__ */ a(
|
|
52
|
+
T,
|
|
51
53
|
{
|
|
52
54
|
as: "button",
|
|
53
|
-
ref: (
|
|
54
|
-
|
|
55
|
+
ref: (l) => {
|
|
56
|
+
u.current[r] = l;
|
|
55
57
|
},
|
|
56
58
|
id: `tab-${e.key}`,
|
|
57
59
|
role: "tab",
|
|
@@ -61,12 +63,12 @@ const C = d.forwardRef(
|
|
|
61
63
|
"data-tab-label": !0,
|
|
62
64
|
"data-active": t.key === e.key,
|
|
63
65
|
"data-alert": e.hasAlert,
|
|
64
|
-
onClick: () =>
|
|
65
|
-
onKeyDown: (
|
|
66
|
+
onClick: () => d(e),
|
|
67
|
+
onKeyDown: (l) => I(l, r),
|
|
66
68
|
className: `tab-button ${t.key === e.key ? "is-active" : ""}`,
|
|
67
69
|
marginBottom: "nano",
|
|
68
|
-
children: /* @__PURE__ */
|
|
69
|
-
|
|
70
|
+
children: /* @__PURE__ */ a(
|
|
71
|
+
C,
|
|
70
72
|
{
|
|
71
73
|
className: `tab-label ${t.key === e.key ? "is-active" : ""} ${e.hasAlert ? "has-alert" : ""}`,
|
|
72
74
|
children: e.label
|
|
@@ -74,11 +76,11 @@ const C = d.forwardRef(
|
|
|
74
76
|
)
|
|
75
77
|
}
|
|
76
78
|
) }, e.key)),
|
|
77
|
-
|
|
79
|
+
E
|
|
78
80
|
] }) }),
|
|
79
|
-
/* @__PURE__ */
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
/* @__PURE__ */ a(B, { kind: "tertiary", marginTop: "none", marginBottom: "micro" }),
|
|
82
|
+
n.map((e) => /* @__PURE__ */ a(
|
|
83
|
+
v,
|
|
82
84
|
{
|
|
83
85
|
id: `tab-panel-${e.key}`,
|
|
84
86
|
role: "tabpanel",
|
|
@@ -86,7 +88,7 @@ const C = d.forwardRef(
|
|
|
86
88
|
tabIndex: t.key === e.key ? 0 : -1,
|
|
87
89
|
"data-tab-content": !0,
|
|
88
90
|
"data-active": t.key === e.key,
|
|
89
|
-
"data-exiting": t.key === e.key &&
|
|
91
|
+
"data-exiting": t.key === e.key && D,
|
|
90
92
|
hidden: t.key !== e.key,
|
|
91
93
|
children: e.content
|
|
92
94
|
},
|
|
@@ -97,8 +99,8 @@ const C = d.forwardRef(
|
|
|
97
99
|
) : null;
|
|
98
100
|
}
|
|
99
101
|
);
|
|
100
|
-
|
|
102
|
+
j.displayName = "Tabs";
|
|
101
103
|
export {
|
|
102
|
-
|
|
104
|
+
j as Tabs
|
|
103
105
|
};
|
|
104
106
|
//# sourceMappingURL=Tabs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","sources":["../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["// REACT CORE ==========================================================================================================\nimport React, { useEffect, useCallback, useRef } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\nimport { Div, Nav } from \"../Element/Tags\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./tabs.css\";\n\n// OTHER ===============================================================================================================\nimport { Divider } from \"../Divider/Divider\";\nimport { Text } from \"../Typography/Text\";\n\ninterface TabType {\n key : string;\n label : React.ReactNode;\n content : React.ReactNode;\n hasAlert ? : boolean;\n}\n\n// prettier-ignore\nexport interface TabsCustomProps {\n tabs : TabType[];\n additionalNavContentWrapper ? : React.ReactNode;\n defaultActiveTab ? : React.ReactNode;\n align ? : \"left\" | \"centre\" | \"center\" | \"right\";\n isFullWidth ? : boolean;\n}\n\nexport type TabsElementType = HTMLDivElement;\nexport type TabsProps = Omit<CommonAndHTMLProps<TabsElementType>, keyof TabsCustomProps> & TabsCustomProps;\n\nexport const Tabs = React.forwardRef(\n (\n {tabs, additionalNavContentWrapper, defaultActiveTab, align = \"left\", isFullWidth, ...props} : TabsProps,\n ref : React.Ref<TabsElementType>) => {\n const index = tabs.findIndex((tab) => tab.key === defaultActiveTab);\n const defaultTabIndex = index > -1 ? index : 0;\n const [ activeTab, setActiveTab ] = React.useState<TabType | undefined>(\n tabs.length > 0 ? tabs[defaultTabIndex] : undefined,\n );\n const [ isExiting, setIsExiting ] = React.useState<boolean>(false);\n\n // Refs for keyboard navigation to focus the tab buttons\n const tabButtonRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n // V2's performant animation logic\n const handleTabChange = useCallback((tab : TabType) => {\n if (activeTab?.key !== tab.key) {\n setIsExiting(true);\n setTimeout(() => {\n setActiveTab(tab);\n setIsExiting(false);\n }, 150); // Animation duration\n }\n }, [ activeTab?.key ]);\n\n useEffect(() => {\n if (tabs.length > 0) {\n // If the current active tab still exists in the new tabs array, keep it.\n // This preserves the active state if the content of a tab changes.\n const currentTabStillExists = tabs.find(tab => tab.key === activeTab?.key);\n if (!currentTabStillExists) {\n // Otherwise, default to the designated default tab or the first one.\n setActiveTab(tabs[defaultTabIndex]);\n }\n } else {\n setActiveTab(undefined);\n }\n }, [ tabs, defaultTabIndex, activeTab?.key ]);\n\n\n const handleKeyDown = useCallback((event : React.KeyboardEvent, currentIndex : number) => {\n let nextIndex = currentIndex;\n\n if (event.key === \"ArrowRight\") {\n nextIndex = (currentIndex + 1) % tabs.length;\n } else if (event.key === \"ArrowLeft\") {\n nextIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n } else if (event.key === \"Home\") {\n nextIndex = 0;\n } else if (event.key === \"End\") {\n nextIndex = tabs.length - 1;\n } else {\n // Exit if it's not a navigation key\n return;\n }\n\n event.preventDefault();\n const nextTab = tabs[nextIndex];\n if (nextTab) {\n handleTabChange(nextTab);\n tabButtonRefs.current[nextIndex]?.focus();\n }\n\n }, [ tabs, handleTabChange ]);\n\n if (!activeTab) {\n return null; // Render nothing if there are no tabs or no active tab\n }\n\n return (\n <Element<TabsElementType>\n as=\"div\"\n data-tabs\n ref={ref}\n data-align={align}\n data-full-width={isFullWidth}\n {...props}\n >\n <Nav data-tabs-nav role=\"tablist\" aria-label=\"Tab Navigation\">\n <ul className=\"tab-labels-list\">\n {tabs.map((tab, i) => (\n <li key={tab.key}>\n <Element<HTMLButtonElement>\n as=\"button\"\n ref={(el) => { tabButtonRefs.current[i] = el; }}\n id={`tab-${tab.key}`}\n role=\"tab\"\n aria-selected={activeTab.key === tab.key}\n aria-controls={`tab-panel-${tab.key}`}\n tabIndex={activeTab.key === tab.key ? 0 : -1} // Roaming tabindex\n data-tab-label\n data-active={activeTab.key === tab.key}\n data-alert={tab.hasAlert}\n onClick={() => handleTabChange(tab)}\n onKeyDown={(e) => handleKeyDown(e, i)}\n className={`tab-button ${activeTab.key === tab.key ? \"is-active\" : \"\"}`}\n marginBottom=\"nano\"\n >\n <Text\n className={`tab-label ${activeTab.key === tab.key ? \"is-active\" : \"\"} ${tab.hasAlert ? \"has-alert\" : \"\"}`}\n >\n {tab.label}\n </Text>\n </Element>\n </li>\n ))}\n {additionalNavContentWrapper}\n </ul>\n </Nav>\n\n <Divider kind=\"tertiary\" marginTop=\"none\" marginBottom=\"micro\" />\n\n {tabs.map((tab) => (\n <Div\n key={tab.key}\n id={`tab-panel-${tab.key}`}\n role=\"tabpanel\"\n aria-labelledby={`tab-${tab.key}`}\n tabIndex={activeTab.key === tab.key ? 0 : -1}\n data-tab-content\n data-active={activeTab.key === tab.key}\n data-exiting={activeTab.key === tab.key && isExiting}\n hidden={activeTab.key !== tab.key}\n >\n {tab.content}\n </Div>\n ))}\n </Element>\n );\n },\n);\nTabs.displayName = \"Tabs\";"],"names":["Tabs","React","tabs","additionalNavContentWrapper","defaultActiveTab","align","isFullWidth","props","ref","index","tab","defaultTabIndex","activeTab","setActiveTab","isExiting","setIsExiting","tabButtonRefs","useRef","handleTabChange","useCallback","useEffect","handleKeyDown","event","currentIndex","nextIndex","nextTab","_a","jsxs","Element","jsx","Nav","el","e","Text","Divider","Div"],"mappings":";;;;;;;AAkCO,MAAMA,IAAOC,EAAM;AAAA,EACtB,CACI,EAAC,MAAAC,GAAM,6BAAAC,GAA6B,kBAAAC,GAAkB,OAAAC,IAAQ,QAAQ,aAAAC,GAAa,GAAGC,EAAA,GACtFC,MAAqC;AACrC,UAAMC,IAAQP,EAAK,UAAU,CAACQ,MAAQA,EAAI,QAAQN,CAAgB,GAC5DO,IAAkBF,IAAQ,KAAKA,IAAQ,GACvC,CAAEG,GAAWC,CAAa,IAAIZ,EAAM;AAAA,MACtCC,EAAK,SAAS,IAAIA,EAAKS,CAAe,IAAI;AAAA,IAAA,GAExC,CAAEG,GAAWC,CAAa,IAAId,EAAM,SAAkB,EAAK,GAG3De,IAAgBC,EAAqC,EAAE,GAGvDC,IAAkBC,EAAY,CAACT,MAAkB;AACnD,OAAIE,KAAA,gBAAAA,EAAW,SAAQF,EAAI,QACvBK,EAAa,EAAI,GACjB,WAAW,MAAM;AACb,QAAAF,EAAaH,CAAG,GAChBK,EAAa,EAAK;AAAA,MACtB,GAAG,GAAG;AAAA,IAEd,GAAG,CAAEH,KAAA,gBAAAA,EAAW,GAAI,CAAC;AAErB,IAAAQ,EAAU,MAAM;AACZ,MAAIlB,EAAK,SAAS,IAGgBA,EAAK,KAAK,OAAOQ,EAAI,SAAQE,KAAA,gBAAAA,EAAW,IAAG,KAGrEC,EAAaX,EAAKS,CAAe,CAAC,IAGtCE,EAAa,MAAS;AAAA,IAE9B,GAAG,CAAEX,GAAMS,GAAiBC,KAAA,gBAAAA,EAAW,GAAI,CAAC;AAG5C,UAAMS,IAAgBF,EAAY,CAACG,GAA6BC,MAA0B;;AACtF,UAAIC,IAAYD;AAEhB,UAAID,EAAM,QAAQ;AACd,QAAAE,KAAaD,IAAe,KAAKrB,EAAK;AAAA,eAC/BoB,EAAM,QAAQ;AACrB,QAAAE,KAAaD,IAAe,IAAIrB,EAAK,UAAUA,EAAK;AAAA,eAC7CoB,EAAM,QAAQ;AACrB,QAAAE,IAAY;AAAA,eACLF,EAAM,QAAQ;AACrB,QAAAE,IAAYtB,EAAK,SAAS;AAAA;AAG1B;AAGJ,MAAAoB,EAAM,eAAA;AACN,YAAMG,IAAUvB,EAAKsB,CAAS;AAC9B,MAAIC,MACAP,EAAgBO,CAAO,IACvBC,IAAAV,EAAc,QAAQQ,CAAS,MAA/B,QAAAE,EAAkC;AAAA,IAG1C,GAAG,CAAExB,GAAMgB,CAAgB,CAAC;AAE5B,WAAKN,IAKD,gBAAAe;AAAA,MAACC;AAAA,MAAA;AAAA,QACG,IAAG;AAAA,QACH,aAAS;AAAA,QACT,KAAApB;AAAA,QACA,cAAYH;AAAA,QACZ,mBAAiBC;AAAA,QAChB,GAAGC;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAsB,EAACC,GAAA,EAAI,iBAAa,IAAC,MAAK,WAAU,cAAW,kBACzC,UAAA,gBAAAH,EAAC,MAAA,EAAG,WAAU,mBACT,UAAA;AAAA,YAAAzB,EAAK,IAAI,CAACQ,GAAK,wBACX,MAAA,EACG,UAAA,gBAAAmB;AAAA,cAACD;AAAA,cAAA;AAAA,gBACG,IAAG;AAAA,gBACH,KAAK,CAACG,MAAO;AAAE,kBAAAf,EAAc,QAAQ,CAAC,IAAIe;AAAA,gBAAI;AAAA,gBAC9C,IAAI,OAAOrB,EAAI,GAAG;AAAA,gBAClB,MAAK;AAAA,gBACL,iBAAeE,EAAU,QAAQF,EAAI;AAAA,gBACrC,iBAAe,aAAaA,EAAI,GAAG;AAAA,gBACnC,UAAUE,EAAU,QAAQF,EAAI,MAAM,IAAI;AAAA,gBAC1C,kBAAc;AAAA,gBACd,eAAaE,EAAU,QAAQF,EAAI;AAAA,gBACnC,cAAYA,EAAI;AAAA,gBAChB,SAAS,MAAMQ,EAAgBR,CAAG;AAAA,gBAClC,WAAW,CAACsB,MAAMX,EAAcW,GAAG,CAAC;AAAA,gBACpC,WAAW,cAAcpB,EAAU,QAAQF,EAAI,MAAM,cAAc,EAAE;AAAA,gBACrE,cAAa;AAAA,gBAEb,UAAA,gBAAAmB;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACG,WAAW,aAAarB,EAAU,QAAQF,EAAI,MAAM,cAAc,EAAE,IAAIA,EAAI,WAAW,cAAc,EAAE;AAAA,oBAEtG,UAAAA,EAAI;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACT;AAAA,YAAA,KArBCA,EAAI,GAuBb,CACH;AAAA,YACAP;AAAA,UAAA,EAAA,CACL,EAAA,CACJ;AAAA,4BAEC+B,GAAA,EAAQ,MAAK,YAAW,WAAU,QAAO,cAAa,SAAQ;AAAA,UAE9DhC,EAAK,IAAI,CAACQ,MACP,gBAAAmB;AAAA,YAACM;AAAA,YAAA;AAAA,cAEG,IAAI,aAAazB,EAAI,GAAG;AAAA,cACxB,MAAK;AAAA,cACL,mBAAiB,OAAOA,EAAI,GAAG;AAAA,cAC/B,UAAUE,EAAU,QAAQF,EAAI,MAAM,IAAI;AAAA,cAC1C,oBAAgB;AAAA,cAChB,eAAaE,EAAU,QAAQF,EAAI;AAAA,cACnC,gBAAcE,EAAU,QAAQF,EAAI,OAAOI;AAAA,cAC3C,QAAQF,EAAU,QAAQF,EAAI;AAAA,cAE7B,UAAAA,EAAI;AAAA,YAAA;AAAA,YAVAA,EAAI;AAAA,UAAA,CAYhB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,IA5DE;AAAA,EA+Df;AACJ;AACAV,EAAK,cAAc;"}
|
|
1
|
+
{"version":3,"file":"Tabs.js","sources":["../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["// REACT CORE ==========================================================================================================\nimport React, { useEffect, useCallback, useRef } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps } from \"../Element/constants\";\nimport { Div, Nav } from \"../Element/Tags\";\nimport { Element } from \"$element\";\n\n// STYLES ==============================================================================================================\nimport \"./tabs.css\";\n\n// OTHER ===============================================================================================================\nimport { Divider } from \"../Divider/Divider\";\nimport { Text } from \"../Typography/Text\";\n\ninterface TabType {\n key : string;\n label : React.ReactNode;\n content : React.ReactNode;\n hasAlert ? : boolean;\n}\n\n// prettier-ignore\nexport interface TabsCustomProps {\n tabs : TabType[];\n additionalNavContentWrapper ? : React.ReactNode;\n defaultActiveTab ? : React.ReactNode;\n align ? : \"left\" | \"centre\" | \"center\" | \"right\";\n isFullWidth ? : boolean;\n}\n\nexport type TabsElementType = HTMLDivElement;\nexport type TabsProps = Omit<CommonAndHTMLProps<TabsElementType>, keyof TabsCustomProps> & TabsCustomProps;\n\nexport const Tabs = React.forwardRef(\n (\n {tabs, additionalNavContentWrapper, defaultActiveTab, align = \"left\", isFullWidth, ...props} : TabsProps,\n ref : React.Ref<TabsElementType>) => {\n const index = tabs.findIndex((tab) => tab.key === defaultActiveTab);\n const defaultTabIndex = index > -1 ? index : 0;\n const [ activeTab, setActiveTab ] = React.useState<TabType | undefined>(\n tabs.length > 0 ? tabs[defaultTabIndex] : undefined,\n );\n const [ isExiting, setIsExiting ] = React.useState<boolean>(false);\n\n // Refs for keyboard navigation to focus the tab buttons\n const tabButtonRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n // Holds the pending exit-animation timer so rapid switching / unmount\n // mid-transition can clear it instead of committing a stale tab.\n const exitTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // V2's performant animation logic\n const handleTabChange = useCallback((tab : TabType) => {\n if (activeTab?.key !== tab.key) {\n setIsExiting(true);\n // Cancel any in-flight transition before queuing a new one.\n if (exitTimerRef.current !== null) {\n clearTimeout(exitTimerRef.current);\n }\n exitTimerRef.current = setTimeout(() => {\n setActiveTab(tab);\n setIsExiting(false);\n exitTimerRef.current = null;\n }, 150); // Animation duration\n }\n }, [ activeTab?.key ]);\n\n // Clear any pending exit-animation timer on unmount.\n useEffect(() => {\n return () => {\n if (exitTimerRef.current !== null) {\n clearTimeout(exitTimerRef.current);\n }\n };\n }, []);\n\n useEffect(() => {\n if (tabs.length > 0) {\n // If the current active tab still exists in the new tabs array, keep it.\n // This preserves the active state if the content of a tab changes.\n const currentTabStillExists = tabs.find(tab => tab.key === activeTab?.key);\n if (!currentTabStillExists) {\n // Otherwise, default to the designated default tab or the first one.\n setActiveTab(tabs[defaultTabIndex]);\n }\n } else {\n setActiveTab(undefined);\n }\n }, [ tabs, defaultTabIndex, activeTab?.key ]);\n\n\n const handleKeyDown = useCallback((event : React.KeyboardEvent, currentIndex : number) => {\n let nextIndex = currentIndex;\n\n if (event.key === \"ArrowRight\") {\n nextIndex = (currentIndex + 1) % tabs.length;\n } else if (event.key === \"ArrowLeft\") {\n nextIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n } else if (event.key === \"Home\") {\n nextIndex = 0;\n } else if (event.key === \"End\") {\n nextIndex = tabs.length - 1;\n } else {\n // Exit if it's not a navigation key\n return;\n }\n\n event.preventDefault();\n const nextTab = tabs[nextIndex];\n if (nextTab) {\n handleTabChange(nextTab);\n tabButtonRefs.current[nextIndex]?.focus();\n }\n\n }, [ tabs, handleTabChange ]);\n\n if (!activeTab) {\n return null; // Render nothing if there are no tabs or no active tab\n }\n\n return (\n <Element<TabsElementType>\n as=\"div\"\n data-tabs\n ref={ref}\n data-align={align}\n data-full-width={isFullWidth}\n {...props}\n >\n <Nav data-tabs-nav role=\"tablist\" aria-label=\"Tab Navigation\">\n {/* role=\"none\" on the list + items removes their list semantics from the\n a11y tree so the role=\"tab\" buttons become the tablist's owned children\n (otherwise axe flags aria-required-children / aria-required-parent). */}\n <ul className=\"tab-labels-list\" role=\"none\">\n {tabs.map((tab, i) => (\n <li key={tab.key} role=\"none\">\n <Element<HTMLButtonElement>\n as=\"button\"\n ref={(el) => { tabButtonRefs.current[i] = el; }}\n id={`tab-${tab.key}`}\n role=\"tab\"\n aria-selected={activeTab.key === tab.key}\n aria-controls={`tab-panel-${tab.key}`}\n tabIndex={activeTab.key === tab.key ? 0 : -1} // Roaming tabindex\n data-tab-label\n data-active={activeTab.key === tab.key}\n data-alert={tab.hasAlert}\n onClick={() => handleTabChange(tab)}\n onKeyDown={(e) => handleKeyDown(e, i)}\n className={`tab-button ${activeTab.key === tab.key ? \"is-active\" : \"\"}`}\n marginBottom=\"nano\"\n >\n <Text\n className={`tab-label ${activeTab.key === tab.key ? \"is-active\" : \"\"} ${tab.hasAlert ? \"has-alert\" : \"\"}`}\n >\n {tab.label}\n </Text>\n </Element>\n </li>\n ))}\n {additionalNavContentWrapper}\n </ul>\n </Nav>\n\n <Divider kind=\"tertiary\" marginTop=\"none\" marginBottom=\"micro\" />\n\n {tabs.map((tab) => (\n <Div\n key={tab.key}\n id={`tab-panel-${tab.key}`}\n role=\"tabpanel\"\n aria-labelledby={`tab-${tab.key}`}\n tabIndex={activeTab.key === tab.key ? 0 : -1}\n data-tab-content\n data-active={activeTab.key === tab.key}\n data-exiting={activeTab.key === tab.key && isExiting}\n hidden={activeTab.key !== tab.key}\n >\n {tab.content}\n </Div>\n ))}\n </Element>\n );\n },\n);\nTabs.displayName = \"Tabs\";"],"names":["Tabs","React","tabs","additionalNavContentWrapper","defaultActiveTab","align","isFullWidth","props","ref","index","tab","defaultTabIndex","activeTab","setActiveTab","isExiting","setIsExiting","tabButtonRefs","useRef","exitTimerRef","handleTabChange","useCallback","useEffect","handleKeyDown","event","currentIndex","nextIndex","nextTab","_a","jsxs","Element","jsx","Nav","i","el","e","Text","Divider","Div"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToastsProvider.d.ts","sourceRoot":"","sources":["../../../../src/components/Toast/ToastsProvider/ToastsProvider.tsx"],"names":[],"mappings":"AACA,OAAc,
|
|
1
|
+
{"version":3,"file":"ToastsProvider.d.ts","sourceRoot":"","sources":["../../../../src/components/Toast/ToastsProvider/ToastsProvider.tsx"],"names":[],"mappings":"AACA,OAAc,EAA6D,SAAS,EAAE,MAAM,OAAO,CAAC;AAcpG,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAK,SAAS,CAAC;IACvB,MAAS,CAAC,EAAG,KAAK,GAAG,QAAQ,CAAC;CACjC;AAGD,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAUzE,eAAO,MAAM,cAAc;4BAGxB,mBAAmB;;CAqCrB,CAAC;AAIF,eAAO,MAAM,SAAS,QAAO,aAQ5B,CAAC"}
|
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsxs as p, jsx as
|
|
3
|
-
import { useState as T, useCallback as
|
|
4
|
-
import { ToastsWrapper as
|
|
5
|
-
import { ToastItem as
|
|
6
|
-
const
|
|
7
|
-
children:
|
|
2
|
+
import { jsxs as p, jsx as n } from "react/jsx-runtime";
|
|
3
|
+
import { useState as T, useCallback as i, createContext as x, useMemo as f, useContext as h } from "react";
|
|
4
|
+
import { ToastsWrapper as v } from "../ToastsWrapper/ToastsWrapper.js";
|
|
5
|
+
import { ToastItem as C } from "../ToastItem/ToastItem.js";
|
|
6
|
+
const m = x(null), w = ({
|
|
7
|
+
children: e,
|
|
8
8
|
anchor: c = "top"
|
|
9
9
|
}) => {
|
|
10
|
-
const [
|
|
11
|
-
|
|
12
|
-
}, []),
|
|
10
|
+
const [u, r] = T([]), l = i((t) => {
|
|
11
|
+
r((o) => o.filter((s) => s.id !== t));
|
|
12
|
+
}, []), a = i((t, o = 4) => {
|
|
13
13
|
const s = `toast-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
|
|
14
|
-
|
|
14
|
+
r((d) => [...d, {
|
|
15
15
|
id: s,
|
|
16
16
|
message: t,
|
|
17
17
|
duration: o
|
|
18
18
|
}]);
|
|
19
19
|
}, []);
|
|
20
|
-
return /* @__PURE__ */ p(
|
|
21
|
-
|
|
22
|
-
/* @__PURE__ */
|
|
23
|
-
|
|
20
|
+
return /* @__PURE__ */ p(m.Provider, { value: f(() => ({ toast: a }), [a]), children: [
|
|
21
|
+
e,
|
|
22
|
+
/* @__PURE__ */ n(v, { anchor: c, children: u.map(({ id: t, message: o, duration: s }) => /* @__PURE__ */ n(
|
|
23
|
+
C,
|
|
24
24
|
{
|
|
25
25
|
id: t,
|
|
26
26
|
duration: s,
|
|
27
|
-
onClose: () =>
|
|
27
|
+
onClose: () => l(t),
|
|
28
28
|
children: o
|
|
29
29
|
},
|
|
30
30
|
t
|
|
31
31
|
)) })
|
|
32
32
|
] });
|
|
33
33
|
};
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
if (!
|
|
34
|
+
w.displayName = "ToastsProvider";
|
|
35
|
+
const M = () => {
|
|
36
|
+
const e = h(m);
|
|
37
|
+
if (!e)
|
|
38
38
|
throw new Error("useToasts must be used within a ToastsProvider");
|
|
39
|
-
return
|
|
39
|
+
return e.toast;
|
|
40
40
|
};
|
|
41
41
|
export {
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
w as ToastsProvider,
|
|
43
|
+
M as useToasts
|
|
44
44
|
};
|
|
45
45
|
//# sourceMappingURL=ToastsProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToastsProvider.js","sources":["../../../../src/components/Toast/ToastsProvider/ToastsProvider.tsx"],"sourcesContent":["// REACT CORE ==========================================================================================================\nimport React, { createContext, useContext, useState, useCallback, ReactNode } from \"react\";\n\n// INTERNAL ============================================================================================================\nimport { ToastsWrapper } from \"../ToastsWrapper/ToastsWrapper\";\nimport { ToastItem } from \"../ToastItem/ToastItem\";\n\n// TYPES ===============================================================================================================\ninterface InternalToast {\n id : string;\n message : string;\n duration : number;\n}\n\n// prettier-ignore\nexport interface ToastsProviderProps {\n children : ReactNode;\n anchor ? : \"top\" | \"bottom\";\n}\n\n// TOAST FUNCTION TYPE =================================================================================================\nexport type ToastFunction = (message: string, duration?: number) => void;\n\ninterface ToastsContextValue {\n toast: ToastFunction;\n}\n\n// CONTEXT =============================================================================================================\nconst ToastsContext = createContext<ToastsContextValue | null>(null);\n\n// PROVIDER ============================================================================================================\nexport const ToastsProvider = ({\n children,\n anchor = \"top\",\n}: ToastsProviderProps) => {\n const [toasts, setToasts] = useState<InternalToast[]>([]);\n\n // Remove a toast by ID\n const removeToast = useCallback((id: string) => {\n setToasts(prev => prev.filter(t => t.id !== id));\n }, []);\n\n // Main toast function\n const toast: ToastFunction = useCallback((message: string, duration: number = 4) => {\n const id = `toast-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n\n setToasts(prev => [...prev, {\n id,\n message,\n duration,\n }]);\n }, []);\n\n return (\n <ToastsContext.Provider value={{ toast }}>\n {children}\n\n <ToastsWrapper anchor={anchor}>\n {toasts.map(({ id, message, duration }) => (\n <ToastItem\n key={id}\n id={id}\n duration={duration}\n onClose={() => removeToast(id)}\n >\n {message}\n </ToastItem>\n ))}\n </ToastsWrapper>\n </ToastsContext.Provider>\n );\n};\nToastsProvider.displayName = \"ToastsProvider\";\n\n// HOOK ================================================================================================================\nexport const useToasts = (): ToastFunction => {\n const context = useContext(ToastsContext);\n\n if (!context) {\n throw new Error(\"useToasts must be used within a ToastsProvider\");\n }\n\n return context.toast;\n};\n"],"names":["ToastsContext","createContext","ToastsProvider","children","anchor","toasts","setToasts","useState","removeToast","useCallback","id","prev","t","toast","message","duration","jsx","ToastsWrapper","ToastItem","useToasts","context","useContext"],"mappings":";;;;AA4BA,MAAMA,IAAgBC,EAAyC,IAAI,GAGtDC,IAAiB,CAAC;AAAA,EAC3B,UAAAC;AAAA,EACA,QAAAC,IAAS;AACb,MAA2B;AACvB,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAA0B,CAAA,CAAE,GAGlDC,IAAcC,EAAY,CAACC,MAAe;AAC5C,IAAAJ,EAAU,OAAQK,EAAK,OAAO,OAAKC,EAAE,OAAOF,CAAE,CAAC;AAAA,EACnD,GAAG,CAAA,CAAE,GAGCG,IAAuBJ,EAAY,CAACK,GAAiBC,IAAmB,MAAM;AAChF,UAAML,IAAK,SAAS,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AAE5E,IAAAJ,EAAU,CAAAK,MAAQ,CAAC,GAAGA,GAAM;AAAA,MACxB,IAAAD;AAAA,MACA,SAAAI;AAAA,MACA,UAAAC;AAAA,IAAA,CACH,CAAC;AAAA,EACN,GAAG,CAAA,CAAE;AAEL,
|
|
1
|
+
{"version":3,"file":"ToastsProvider.js","sources":["../../../../src/components/Toast/ToastsProvider/ToastsProvider.tsx"],"sourcesContent":["// REACT CORE ==========================================================================================================\nimport React, { createContext, useContext, useState, useCallback, useMemo, ReactNode } from \"react\";\n\n// INTERNAL ============================================================================================================\nimport { ToastsWrapper } from \"../ToastsWrapper/ToastsWrapper\";\nimport { ToastItem } from \"../ToastItem/ToastItem\";\n\n// TYPES ===============================================================================================================\ninterface InternalToast {\n id : string;\n message : string;\n duration : number;\n}\n\n// prettier-ignore\nexport interface ToastsProviderProps {\n children : ReactNode;\n anchor ? : \"top\" | \"bottom\";\n}\n\n// TOAST FUNCTION TYPE =================================================================================================\nexport type ToastFunction = (message: string, duration?: number) => void;\n\ninterface ToastsContextValue {\n toast: ToastFunction;\n}\n\n// CONTEXT =============================================================================================================\nconst ToastsContext = createContext<ToastsContextValue | null>(null);\n\n// PROVIDER ============================================================================================================\nexport const ToastsProvider = ({\n children,\n anchor = \"top\",\n}: ToastsProviderProps) => {\n const [toasts, setToasts] = useState<InternalToast[]>([]);\n\n // Remove a toast by ID\n const removeToast = useCallback((id: string) => {\n setToasts(prev => prev.filter(t => t.id !== id));\n }, []);\n\n // Main toast function\n const toast: ToastFunction = useCallback((message: string, duration: number = 4) => {\n const id = `toast-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n\n setToasts(prev => [...prev, {\n id,\n message,\n duration,\n }]);\n }, []);\n\n return (\n <ToastsContext.Provider value={useMemo(() => ({ toast }), [toast])}>\n {children}\n\n <ToastsWrapper anchor={anchor}>\n {toasts.map(({ id, message, duration }) => (\n <ToastItem\n key={id}\n id={id}\n duration={duration}\n onClose={() => removeToast(id)}\n >\n {message}\n </ToastItem>\n ))}\n </ToastsWrapper>\n </ToastsContext.Provider>\n );\n};\nToastsProvider.displayName = \"ToastsProvider\";\n\n// HOOK ================================================================================================================\nexport const useToasts = (): ToastFunction => {\n const context = useContext(ToastsContext);\n\n if (!context) {\n throw new Error(\"useToasts must be used within a ToastsProvider\");\n }\n\n return context.toast;\n};\n"],"names":["ToastsContext","createContext","ToastsProvider","children","anchor","toasts","setToasts","useState","removeToast","useCallback","id","prev","t","toast","message","duration","jsxs","useMemo","jsx","ToastsWrapper","ToastItem","useToasts","context","useContext"],"mappings":";;;;AA4BA,MAAMA,IAAgBC,EAAyC,IAAI,GAGtDC,IAAiB,CAAC;AAAA,EAC3B,UAAAC;AAAA,EACA,QAAAC,IAAS;AACb,MAA2B;AACvB,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAA0B,CAAA,CAAE,GAGlDC,IAAcC,EAAY,CAACC,MAAe;AAC5C,IAAAJ,EAAU,OAAQK,EAAK,OAAO,OAAKC,EAAE,OAAOF,CAAE,CAAC;AAAA,EACnD,GAAG,CAAA,CAAE,GAGCG,IAAuBJ,EAAY,CAACK,GAAiBC,IAAmB,MAAM;AAChF,UAAML,IAAK,SAAS,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AAE5E,IAAAJ,EAAU,CAAAK,MAAQ,CAAC,GAAGA,GAAM;AAAA,MACxB,IAAAD;AAAA,MACA,SAAAI;AAAA,MACA,UAAAC;AAAA,IAAA,CACH,CAAC;AAAA,EACN,GAAG,CAAA,CAAE;AAEL,SACI,gBAAAC,EAAChB,EAAc,UAAd,EAAuB,OAAOiB,EAAQ,OAAO,EAAE,OAAAJ,EAAA,IAAU,CAACA,CAAK,CAAC,GAC5D,UAAA;AAAA,IAAAV;AAAA,IAED,gBAAAe,EAACC,GAAA,EAAc,QAAAf,GACV,UAAAC,EAAO,IAAI,CAAC,EAAE,IAAAK,GAAI,SAAAI,GAAS,UAAAC,EAAA,MACxB,gBAAAG;AAAA,MAACE;AAAA,MAAA;AAAA,QAEG,IAAAV;AAAA,QACA,UAAAK;AAAA,QACA,SAAS,MAAMP,EAAYE,CAAE;AAAA,QAE5B,UAAAI;AAAA,MAAA;AAAA,MALIJ;AAAA,IAAA,CAOZ,EAAA,CACL;AAAA,EAAA,GACJ;AAER;AACAR,EAAe,cAAc;AAGtB,MAAMmB,IAAY,MAAqB;AAC1C,QAAMC,IAAUC,EAAWvB,CAAa;AAExC,MAAI,CAACsB;AACD,UAAM,IAAI,MAAM,gDAAgD;AAGpE,SAAOA,EAAQ;AACnB;"}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as
|
|
3
|
-
import
|
|
2
|
+
import { jsx as d } from "react/jsx-runtime";
|
|
3
|
+
import s from "react";
|
|
4
4
|
import { Element as t } from "../Element/Element.js";
|
|
5
|
-
const i =
|
|
6
|
-
({ fontStyle: a
|
|
5
|
+
const i = s.forwardRef(
|
|
6
|
+
({ fontStyle: a, weight: e, align: n, ...o }, f) => {
|
|
7
7
|
let r = [];
|
|
8
|
-
return e && r.push(`weight-${e}`), a && r.push(`font-${a}`), n && r.push(`text-${n}`), /* @__PURE__ */
|
|
8
|
+
return e && r.push(`weight-${e}`), a && r.push(`font-${a}`), n && r.push(`text-${n}`), /* @__PURE__ */ d(t, { ref: f, classNames: r, ...o });
|
|
9
9
|
}
|
|
10
|
-
), m =
|
|
10
|
+
), m = s.forwardRef((a, e) => /* @__PURE__ */ d(i, { as: "h1", ref: e, ...a }));
|
|
11
11
|
m.displayName = "Heading1";
|
|
12
|
-
const p =
|
|
12
|
+
const p = s.forwardRef((a, e) => /* @__PURE__ */ d(i, { as: "h2", ref: e, ...a }));
|
|
13
13
|
p.displayName = "Heading2";
|
|
14
|
-
const H =
|
|
14
|
+
const H = s.forwardRef((a, e) => /* @__PURE__ */ d(i, { as: "h3", ref: e, ...a }));
|
|
15
15
|
H.displayName = "Heading3";
|
|
16
|
-
const g =
|
|
16
|
+
const g = s.forwardRef((a, e) => /* @__PURE__ */ d(i, { as: "h4", ref: e, ...a }));
|
|
17
17
|
g.displayName = "Heading4";
|
|
18
|
-
const c =
|
|
18
|
+
const c = s.forwardRef((a, e) => /* @__PURE__ */ d(i, { as: "h5", ref: e, ...a }));
|
|
19
19
|
c.displayName = "Heading5";
|
|
20
|
-
const h =
|
|
20
|
+
const h = s.forwardRef((a, e) => /* @__PURE__ */ d(i, { as: "h6", ref: e, ...a }));
|
|
21
21
|
h.displayName = "Heading6";
|
|
22
22
|
export {
|
|
23
23
|
m as Heading1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Heading.js","sources":["../../../src/components/Typography/Heading.tsx"],"sourcesContent":["// FRAMEWORK ===========================================================================================================\nimport React from \"react\";\n\n// FICTOAN =============================================================================================================\nimport { Element } from \"../Element\";\n\n// TYPES ===============================================================================================================\nimport { CommonAndHTMLProps, WeightTypes } from \"../Element/constants\";\n\n// prettier-ignore\ninterface HeadingBaseProps {\n as ? : \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n fontStyle ? : \"sans-serif\" | \"serif\" | \"monospace\";\n weight ? : WeightTypes;\n align ? : \"left\" | \"centre\" | \"center\" | \"right\";\n}\n\nexport type HeadingElementType = HTMLHeadingElement;\nexport type HeadingProps = Omit<CommonAndHTMLProps<HeadingElementType>, keyof HeadingBaseProps> & HeadingBaseProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nconst Heading = React.forwardRef(\n ({ fontStyle
|
|
1
|
+
{"version":3,"file":"Heading.js","sources":["../../../src/components/Typography/Heading.tsx"],"sourcesContent":["// FRAMEWORK ===========================================================================================================\nimport React from \"react\";\n\n// FICTOAN =============================================================================================================\nimport { Element } from \"../Element\";\n\n// TYPES ===============================================================================================================\nimport { CommonAndHTMLProps, WeightTypes } from \"../Element/constants\";\n\n// prettier-ignore\ninterface HeadingBaseProps {\n as ? : \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n fontStyle ? : \"sans-serif\" | \"serif\" | \"monospace\";\n weight ? : WeightTypes;\n align ? : \"left\" | \"centre\" | \"center\" | \"right\";\n}\n\nexport type HeadingElementType = HTMLHeadingElement;\nexport type HeadingProps = Omit<CommonAndHTMLProps<HeadingElementType>, keyof HeadingBaseProps> & HeadingBaseProps;\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nconst Heading = React.forwardRef(\n ({ fontStyle, weight, align, ...props }: HeadingProps, ref: React.Ref<HeadingElementType>) => {\n let classNames = [];\n\n if (weight) {\n classNames.push(`weight-${weight}`);\n }\n\n if (fontStyle) {\n classNames.push(`font-${fontStyle}`);\n }\n\n if (align) {\n classNames.push(`text-${align}`);\n }\n\n return <Element<HeadingElementType> ref={ref} classNames={classNames} {...props} />;\n }\n);\n\nexport const Heading1 = React.forwardRef((props: HeadingProps, ref: React.Ref<HeadingElementType>) => (\n <Heading as=\"h1\" ref={ref} {...props} />\n));\nHeading1.displayName = \"Heading1\";\n\nexport const Heading2 = React.forwardRef((props: HeadingProps, ref: React.Ref<HeadingElementType>) => (\n <Heading as=\"h2\" ref={ref} {...props} />\n));\nHeading2.displayName = \"Heading2\";\n\nexport const Heading3 = React.forwardRef((props: HeadingProps, ref: React.Ref<HeadingElementType>) => (\n <Heading as=\"h3\" ref={ref} {...props} />\n));\nHeading3.displayName = \"Heading3\";\n\nexport const Heading4 = React.forwardRef((props: HeadingProps, ref: React.Ref<HeadingElementType>) => (\n <Heading as=\"h4\" ref={ref} {...props} />\n));\nHeading4.displayName = \"Heading4\";\n\nexport const Heading5 = React.forwardRef((props: HeadingProps, ref: React.Ref<HeadingElementType>) => (\n <Heading as=\"h5\" ref={ref} {...props} />\n));\nHeading5.displayName = \"Heading5\";\n\nexport const Heading6 = React.forwardRef((props: HeadingProps, ref: React.Ref<HeadingElementType>) => (\n <Heading as=\"h6\" ref={ref} {...props} />\n));\nHeading6.displayName = \"Heading6\";\n"],"names":["Heading","React","fontStyle","weight","align","props","ref","classNames","jsx","Element","Heading1","Heading2","Heading3","Heading4","Heading5","Heading6"],"mappings":";;;AAqBA,MAAMA,IAAUC,EAAM;AAAA,EAClB,CAAC,EAAE,WAAAC,GAAW,QAAAC,GAAQ,OAAAC,GAAO,GAAGC,EAAA,GAAuBC,MAAuC;AAC1F,QAAIC,IAAa,CAAA;AAEjB,WAAIJ,KACAI,EAAW,KAAK,UAAUJ,CAAM,EAAE,GAGlCD,KACAK,EAAW,KAAK,QAAQL,CAAS,EAAE,GAGnCE,KACAG,EAAW,KAAK,QAAQH,CAAK,EAAE,GAG5B,gBAAAI,EAACC,GAAA,EAA4B,KAAAH,GAAU,YAAAC,GAAyB,GAAGF,GAAO;AAAA,EACrF;AACJ,GAEaK,IAAWT,EAAM,WAAW,CAACI,GAAqBC,MAC3D,gBAAAE,EAACR,GAAA,EAAQ,IAAG,MAAK,KAAAM,GAAW,GAAGD,GAAO,CACzC;AACDK,EAAS,cAAc;AAEhB,MAAMC,IAAWV,EAAM,WAAW,CAACI,GAAqBC,MAC3D,gBAAAE,EAACR,GAAA,EAAQ,IAAG,MAAK,KAAAM,GAAW,GAAGD,GAAO,CACzC;AACDM,EAAS,cAAc;AAEhB,MAAMC,IAAWX,EAAM,WAAW,CAACI,GAAqBC,MAC3D,gBAAAE,EAACR,GAAA,EAAQ,IAAG,MAAK,KAAAM,GAAW,GAAGD,GAAO,CACzC;AACDO,EAAS,cAAc;AAEhB,MAAMC,IAAWZ,EAAM,WAAW,CAACI,GAAqBC,MAC3D,gBAAAE,EAACR,GAAA,EAAQ,IAAG,MAAK,KAAAM,GAAW,GAAGD,GAAO,CACzC;AACDQ,EAAS,cAAc;AAEhB,MAAMC,IAAWb,EAAM,WAAW,CAACI,GAAqBC,MAC3D,gBAAAE,EAACR,GAAA,EAAQ,IAAG,MAAK,KAAAM,GAAW,GAAGD,GAAO,CACzC;AACDS,EAAS,cAAc;AAEhB,MAAMC,IAAWd,EAAM,WAAW,CAACI,GAAqBC,MAC3D,gBAAAE,EAACR,GAAA,EAAQ,IAAG,MAAK,KAAAM,GAAW,GAAGD,GAAO,CACzC;AACDU,EAAS,cAAc;"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as i } from "react/jsx-runtime";
|
|
3
|
-
import
|
|
4
|
-
import { Element as
|
|
5
|
-
const
|
|
6
|
-
({ weight:
|
|
3
|
+
import u from "react";
|
|
4
|
+
import { Element as x } from "../Element/Element.js";
|
|
5
|
+
const a = u.forwardRef(
|
|
6
|
+
({ weight: e, size: s, fontStyle: p, align: r, isSubtext: f, ...m }, o) => {
|
|
7
7
|
let t = [];
|
|
8
|
-
return
|
|
8
|
+
return e && t.push(`weight-${e}`), s && t.push(`text-${s}`), p && t.push(`font-${p}`), f && t.push("sub-text"), r && t.push(`text-${r}`), /* @__PURE__ */ i(x, { as: "p", ref: o, classNames: t, ...m });
|
|
9
9
|
}
|
|
10
10
|
);
|
|
11
|
-
|
|
11
|
+
a.displayName = "Text";
|
|
12
12
|
export {
|
|
13
|
-
|
|
13
|
+
a as Text
|
|
14
14
|
};
|
|
15
15
|
//# sourceMappingURL=Text.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Text.js","sources":["../../../src/components/Typography/Text.tsx"],"sourcesContent":["// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps, SpacingTypes, WeightTypes } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// prettier-ignore\nexport interface TextCustomProps {\n fontStyle ? : \"sans-serif\" | \"serif\" | \"monospace\";\n weight ? : WeightTypes;\n size ? : SpacingTypes;\n align ? : \"left\" | \"centre\" | \"center\" | \"right\";\n isSubtext ? : boolean;\n}\n\nexport type TextElementType = HTMLParagraphElement;\nexport type TextProps = Omit<CommonAndHTMLProps<TextElementType>, keyof TextCustomProps> & TextCustomProps;\n\nexport const Text = React.forwardRef(\n (\n {weight, size, fontStyle
|
|
1
|
+
{"version":3,"file":"Text.js","sources":["../../../src/components/Typography/Text.tsx"],"sourcesContent":["// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps, SpacingTypes, WeightTypes } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// prettier-ignore\nexport interface TextCustomProps {\n fontStyle ? : \"sans-serif\" | \"serif\" | \"monospace\";\n weight ? : WeightTypes;\n size ? : SpacingTypes;\n align ? : \"left\" | \"centre\" | \"center\" | \"right\";\n isSubtext ? : boolean;\n}\n\nexport type TextElementType = HTMLParagraphElement;\nexport type TextProps = Omit<CommonAndHTMLProps<TextElementType>, keyof TextCustomProps> & TextCustomProps;\n\nexport const Text = React.forwardRef(\n (\n {weight, size, fontStyle, align, isSubtext, ...props} : TextProps,\n ref : React.Ref<TextElementType>,\n ) => {\n let classNames = [];\n\n if (weight) {\n classNames.push(`weight-${weight}`);\n }\n\n if (size) {\n classNames.push(`text-${size}`);\n }\n\n if (fontStyle) {\n classNames.push(`font-${fontStyle}`);\n }\n\n if (isSubtext) {\n classNames.push(\"sub-text\");\n }\n\n if (align) {\n classNames.push(`text-${align}`);\n }\n\n return <Element<TextElementType> as=\"p\" ref={ref} classNames={classNames} {...props} />;\n },\n);\nText.displayName = \"Text\";\n"],"names":["Text","React","weight","size","fontStyle","align","isSubtext","props","ref","classNames","Element"],"mappings":";;;AAmBO,MAAMA,IAAOC,EAAM;AAAA,EACtB,CACI,EAAC,QAAAC,GAAQ,MAAAC,GAAM,WAAAC,GAAW,OAAAC,GAAO,WAAAC,GAAW,GAAGC,EAAA,GAC/CC,MACC;AACD,QAAIC,IAAa,CAAA;AAEjB,WAAIP,KACAO,EAAW,KAAK,UAAUP,CAAM,EAAE,GAGlCC,KACAM,EAAW,KAAK,QAAQN,CAAI,EAAE,GAG9BC,KACAK,EAAW,KAAK,QAAQL,CAAS,EAAE,GAGnCE,KACAG,EAAW,KAAK,UAAU,GAG1BJ,KACAI,EAAW,KAAK,QAAQJ,CAAK,EAAE,qBAG3BK,GAAA,EAAyB,IAAG,KAAI,KAAAF,GAAU,YAAAC,GAAyB,GAAGF,GAAO;AAAA,EACzF;AACJ;AACAP,EAAK,cAAc;"}
|
package/dist/fictoan-schema.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://fictoan.io/schema/v1.json",
|
|
3
3
|
"name": "fictoan-react",
|
|
4
|
-
"version": "2.0.0-beta.
|
|
4
|
+
"version": "2.0.0-beta.19",
|
|
5
5
|
"framework": "react",
|
|
6
6
|
"philosophy": "Plain-English props, pure CSS, zero runtime. A universal Element prop set (spacing, colour, layout, responsiveness) works across every component.",
|
|
7
7
|
"docs": "https://fictoan.io",
|
|
@@ -206,62 +206,62 @@
|
|
|
206
206
|
"layoutAsFlexbox": {
|
|
207
207
|
"type": "boolean"
|
|
208
208
|
},
|
|
209
|
-
"
|
|
209
|
+
"listVertically": {
|
|
210
210
|
"type": "boolean"
|
|
211
211
|
},
|
|
212
|
-
"
|
|
212
|
+
"listHorizontally": {
|
|
213
213
|
"type": "boolean"
|
|
214
214
|
},
|
|
215
215
|
"layoutAsGrid": {
|
|
216
216
|
"type": "boolean"
|
|
217
217
|
},
|
|
218
218
|
"columns": {
|
|
219
|
-
"type": "
|
|
219
|
+
"type": "number"
|
|
220
220
|
},
|
|
221
221
|
"gap": {
|
|
222
|
-
"type": "
|
|
222
|
+
"type": "SpacingOrLength"
|
|
223
223
|
},
|
|
224
224
|
"margin": {
|
|
225
|
-
"type": "
|
|
225
|
+
"type": "SpacingOrLength"
|
|
226
226
|
},
|
|
227
227
|
"horizontalMargin": {
|
|
228
|
-
"type": "
|
|
228
|
+
"type": "SpacingOrLength"
|
|
229
229
|
},
|
|
230
230
|
"verticalMargin": {
|
|
231
|
-
"type": "
|
|
231
|
+
"type": "SpacingOrLength"
|
|
232
232
|
},
|
|
233
233
|
"marginTop": {
|
|
234
|
-
"type": "
|
|
234
|
+
"type": "SpacingOrLength"
|
|
235
235
|
},
|
|
236
236
|
"marginRight": {
|
|
237
|
-
"type": "
|
|
237
|
+
"type": "SpacingOrLength"
|
|
238
238
|
},
|
|
239
239
|
"marginBottom": {
|
|
240
|
-
"type": "
|
|
240
|
+
"type": "SpacingOrLength"
|
|
241
241
|
},
|
|
242
242
|
"marginLeft": {
|
|
243
|
-
"type": "
|
|
243
|
+
"type": "SpacingOrLength"
|
|
244
244
|
},
|
|
245
245
|
"padding": {
|
|
246
|
-
"type": "
|
|
246
|
+
"type": "SpacingOrLength"
|
|
247
247
|
},
|
|
248
248
|
"horizontalPadding": {
|
|
249
|
-
"type": "
|
|
249
|
+
"type": "SpacingOrLength"
|
|
250
250
|
},
|
|
251
251
|
"verticalPadding": {
|
|
252
|
-
"type": "
|
|
252
|
+
"type": "SpacingOrLength"
|
|
253
253
|
},
|
|
254
254
|
"paddingTop": {
|
|
255
|
-
"type": "
|
|
255
|
+
"type": "SpacingOrLength"
|
|
256
256
|
},
|
|
257
257
|
"paddingRight": {
|
|
258
|
-
"type": "
|
|
258
|
+
"type": "SpacingOrLength"
|
|
259
259
|
},
|
|
260
260
|
"paddingBottom": {
|
|
261
|
-
"type": "
|
|
261
|
+
"type": "SpacingOrLength"
|
|
262
262
|
},
|
|
263
263
|
"paddingLeft": {
|
|
264
|
-
"type": "
|
|
264
|
+
"type": "SpacingOrLength"
|
|
265
265
|
},
|
|
266
266
|
"horizontallyCentreThis": {
|
|
267
267
|
"type": "boolean"
|
|
@@ -1588,7 +1588,7 @@
|
|
|
1588
1588
|
},
|
|
1589
1589
|
"renderItem": {
|
|
1590
1590
|
"type": "((props: RenderItemProps) => ReactNode)",
|
|
1591
|
-
"default": "(\n {\n type,\n page,\n selected,\n disabled,\n onClick,\n key,\n ...props\n }: RenderItemProps) => {\n if (type === \"ellipsis\") {\n return (\n <Text className=\"pagination-ellipsis\">...</Text>\n );\n }\n\n const iconButtonLabels: Record<string, string> = {\n first : \"Go to first page\",\n previous : \"Go to previous page\",\n next : \"Go to next page\",\n last : \"Go to last page\",\n };\n\n const paginationItemProps = {\n type : \"button\",\n className : `pagination-item ${selected ? \"selected\" : \"\"} ${disabled ? \"disabled\" : \"\"}`,\n onClick,\n disabled,\n ...(iconButtonLabels[type] ? { \"aria-label\" : iconButtonLabels[type] } : {}),\n ...props,\n };\n\n let content;\n switch (type) {\n case \"first\":\n content = content = (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <line x1=\"5\" y1=\"18\" x2=\"5\" y2=\"6\" />\n <polyline points=\"14 18 9 12 14 6\" />\n <line x1=\"10\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n break;\n case \"previous\":\n content = (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <polyline points=\"12 18 7 12 12 6\" />\n <line x1=\"8\" y1=\"12\" x2=\"17\" y2=\"12\" />\n </svg>\n );\n break;\n case \"next\":\n content = content = (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <polyline points=\"12 6 17 12 12 18\" />\n <line x1=\"16\" y1=\"12\" x2=\"7\" y2=\"12\" />\n </svg>\n );\n break;\n case \"last\":\n content = content = (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <polyline points=\"10 6 15 12 10 18\" />\n <line x1=\"19\" y1=\"6\" x2=\"19\" y2=\"18\" />\n <line x1=\"14\" y1=\"12\" x2=\"5\" y2=\"12\" />\n </svg>\n );\n break;\n default:\n content = page;\n }\n\n return (\n <Button\n kind=\"custom\"\n {...paginationItemProps}\n >\n {content}\n </Button>\n );\n}"
|
|
1591
|
+
"default": "(\n {\n type,\n page,\n selected,\n disabled,\n onClick,\n key,\n ...props\n }: RenderItemProps) => {\n if (type === \"ellipsis\") {\n return (\n <Text key={key} className=\"pagination-ellipsis\">...</Text>\n );\n }\n\n const iconButtonLabels: Record<string, string> = {\n first : \"Go to first page\",\n previous : \"Go to previous page\",\n next : \"Go to next page\",\n last : \"Go to last page\",\n };\n\n const paginationItemProps = {\n type : \"button\",\n className : `pagination-item ${selected ? \"selected\" : \"\"} ${disabled ? \"disabled\" : \"\"}`,\n onClick,\n disabled,\n ...(iconButtonLabels[type] ? { \"aria-label\" : iconButtonLabels[type] } : {}),\n ...props,\n };\n\n let content;\n switch (type) {\n case \"first\":\n content = content = (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <line x1=\"5\" y1=\"18\" x2=\"5\" y2=\"6\" />\n <polyline points=\"14 18 9 12 14 6\" />\n <line x1=\"10\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n break;\n case \"previous\":\n content = (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <polyline points=\"12 18 7 12 12 6\" />\n <line x1=\"8\" y1=\"12\" x2=\"17\" y2=\"12\" />\n </svg>\n );\n break;\n case \"next\":\n content = content = (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <polyline points=\"12 6 17 12 12 18\" />\n <line x1=\"16\" y1=\"12\" x2=\"7\" y2=\"12\" />\n </svg>\n );\n break;\n case \"last\":\n content = content = (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <polyline points=\"10 6 15 12 10 18\" />\n <line x1=\"19\" y1=\"6\" x2=\"19\" y2=\"18\" />\n <line x1=\"14\" y1=\"12\" x2=\"5\" y2=\"12\" />\n </svg>\n );\n break;\n default:\n content = page;\n }\n\n return (\n <Button\n key={key}\n kind=\"custom\"\n {...paginationItemProps}\n >\n {content}\n </Button>\n );\n}"
|
|
1592
1592
|
},
|
|
1593
1593
|
"isLoading": {
|
|
1594
1594
|
"type": "boolean",
|
|
@@ -1622,6 +1622,9 @@
|
|
|
1622
1622
|
"mobileSpan": {
|
|
1623
1623
|
"type": "SpanTypes"
|
|
1624
1624
|
},
|
|
1625
|
+
"fillLeftoverWidth": {
|
|
1626
|
+
"type": "boolean"
|
|
1627
|
+
},
|
|
1625
1628
|
"isHorizontal": {
|
|
1626
1629
|
"type": "boolean"
|
|
1627
1630
|
},
|
|
@@ -1689,6 +1692,9 @@
|
|
|
1689
1692
|
"allowUltraWide": {
|
|
1690
1693
|
"type": "boolean"
|
|
1691
1694
|
},
|
|
1695
|
+
"equalisePortions": {
|
|
1696
|
+
"type": "boolean"
|
|
1697
|
+
},
|
|
1692
1698
|
"groupLabel": {
|
|
1693
1699
|
"type": "string"
|
|
1694
1700
|
}
|
|
@@ -1859,9 +1865,6 @@
|
|
|
1859
1865
|
},
|
|
1860
1866
|
"summary": {
|
|
1861
1867
|
"type": "string"
|
|
1862
|
-
},
|
|
1863
|
-
"hasColSpan": {
|
|
1864
|
-
"type": "boolean"
|
|
1865
1868
|
}
|
|
1866
1869
|
}
|
|
1867
1870
|
},
|
|
@@ -1948,8 +1951,7 @@
|
|
|
1948
1951
|
"import": "import { Text } from \"fictoan-react\";",
|
|
1949
1952
|
"props": {
|
|
1950
1953
|
"fontStyle": {
|
|
1951
|
-
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
1952
|
-
"default": "sans-serif"
|
|
1954
|
+
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
1953
1955
|
},
|
|
1954
1956
|
"size": {
|
|
1955
1957
|
"type": "SpacingTypes"
|
|
@@ -1971,8 +1973,7 @@
|
|
|
1971
1973
|
"type": "\"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\""
|
|
1972
1974
|
},
|
|
1973
1975
|
"fontStyle": {
|
|
1974
|
-
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
1975
|
-
"default": "sans-serif"
|
|
1976
|
+
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
1976
1977
|
},
|
|
1977
1978
|
"align": {
|
|
1978
1979
|
"type": "\"left\" | \"centre\" | \"center\" | \"right\""
|
|
@@ -1988,8 +1989,7 @@
|
|
|
1988
1989
|
"type": "\"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\""
|
|
1989
1990
|
},
|
|
1990
1991
|
"fontStyle": {
|
|
1991
|
-
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
1992
|
-
"default": "sans-serif"
|
|
1992
|
+
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
1993
1993
|
},
|
|
1994
1994
|
"align": {
|
|
1995
1995
|
"type": "\"left\" | \"centre\" | \"center\" | \"right\""
|
|
@@ -2004,8 +2004,7 @@
|
|
|
2004
2004
|
"type": "\"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\""
|
|
2005
2005
|
},
|
|
2006
2006
|
"fontStyle": {
|
|
2007
|
-
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
2008
|
-
"default": "sans-serif"
|
|
2007
|
+
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
2009
2008
|
},
|
|
2010
2009
|
"align": {
|
|
2011
2010
|
"type": "\"left\" | \"centre\" | \"center\" | \"right\""
|
|
@@ -2020,8 +2019,7 @@
|
|
|
2020
2019
|
"type": "\"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\""
|
|
2021
2020
|
},
|
|
2022
2021
|
"fontStyle": {
|
|
2023
|
-
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
2024
|
-
"default": "sans-serif"
|
|
2022
|
+
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
2025
2023
|
},
|
|
2026
2024
|
"align": {
|
|
2027
2025
|
"type": "\"left\" | \"centre\" | \"center\" | \"right\""
|
|
@@ -2036,8 +2034,7 @@
|
|
|
2036
2034
|
"type": "\"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\""
|
|
2037
2035
|
},
|
|
2038
2036
|
"fontStyle": {
|
|
2039
|
-
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
2040
|
-
"default": "sans-serif"
|
|
2037
|
+
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
2041
2038
|
},
|
|
2042
2039
|
"align": {
|
|
2043
2040
|
"type": "\"left\" | \"centre\" | \"center\" | \"right\""
|
|
@@ -2052,8 +2049,7 @@
|
|
|
2052
2049
|
"type": "\"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\""
|
|
2053
2050
|
},
|
|
2054
2051
|
"fontStyle": {
|
|
2055
|
-
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
2056
|
-
"default": "sans-serif"
|
|
2052
|
+
"type": "\"sans-serif\" | \"serif\" | \"monospace\""
|
|
2057
2053
|
},
|
|
2058
2054
|
"align": {
|
|
2059
2055
|
"type": "\"left\" | \"centre\" | \"center\" | \"right\""
|