wimui 0.57.2 → 0.58.1
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/data-display/Carousel/Carousel.cjs +1 -1
- package/dist/components/data-display/Carousel/Carousel.js +125 -122
- package/dist/components/data-display/Timeline/Timeline.cjs +1 -1
- package/dist/components/data-display/Timeline/Timeline.js +45 -39
- package/dist/components/form/CheckboxGroup/CheckboxGroup.cjs +1 -1
- package/dist/components/form/CheckboxGroup/CheckboxGroup.js +2 -2
- package/dist/components/form/DatePicker/DatePicker.cjs +1 -1
- package/dist/components/form/DatePicker/DatePicker.js +82 -78
- package/dist/components/form/FieldTemplate/FieldTemplate.cjs +1 -1
- package/dist/components/form/FieldTemplate/FieldTemplate.js +29 -23
- package/dist/components/form/InlineEdit/InlineEdit.cjs +1 -1
- package/dist/components/form/InlineEdit/InlineEdit.js +62 -60
- package/dist/components/form/Mentions/Mentions.cjs +1 -1
- package/dist/components/form/Mentions/Mentions.js +71 -70
- package/dist/components/form/OtpInput/OtpInput.cjs +1 -1
- package/dist/components/form/OtpInput/OtpInput.js +2 -2
- package/dist/components/form/RadioGroup/RadioGroup.cjs +1 -1
- package/dist/components/form/RadioGroup/RadioGroup.js +2 -2
- package/dist/components/form/Select/Select.cjs +1 -1
- package/dist/components/form/Select/Select.js +71 -67
- package/dist/components/form/Slider/Slider.cjs +1 -1
- package/dist/components/form/Slider/Slider.js +35 -31
- package/dist/components/form/SwitchGroup/SwitchGroup.cjs +1 -1
- package/dist/components/form/SwitchGroup/SwitchGroup.js +2 -2
- package/dist/components/navigation/Breadcrumb/Breadcrumb.cjs +1 -1
- package/dist/components/navigation/Breadcrumb/Breadcrumb.d.ts +5 -0
- package/dist/components/navigation/Breadcrumb/Breadcrumb.js +44 -44
- package/dist/components/navigation/Stepper/Stepper.cjs +1 -1
- package/dist/components/navigation/Stepper/Stepper.d.ts +5 -0
- package/dist/components/navigation/Stepper/Stepper.js +51 -51
- package/dist/llms-full.txt +5 -1
- package/dist/llms.txt +1 -1
- package/dist/wimui.umd.js +1 -1
- package/package.json +1 -1
|
@@ -1,67 +1,67 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { Root as e } from "../../../node_modules/@radix-ui/react-slot/dist/index.js";
|
|
3
|
-
import { useWimTranslation as
|
|
4
|
-
import { commonNs as
|
|
5
|
-
import
|
|
6
|
-
import { Icon as
|
|
7
|
-
import
|
|
8
|
-
import { Link as
|
|
9
|
-
import { forwardRef as
|
|
10
|
-
import
|
|
11
|
-
import { jsx as
|
|
2
|
+
import { Root as e, Slottable as t } from "../../../node_modules/@radix-ui/react-slot/dist/index.js";
|
|
3
|
+
import { useWimTranslation as n } from "../../../i18n/useWimTranslation.js";
|
|
4
|
+
import { commonNs as r } from "../../../i18n/generated/common.js";
|
|
5
|
+
import i from "../../../icon/chevron-right.js";
|
|
6
|
+
import { Icon as a } from "../../media/Icon/Icon.js";
|
|
7
|
+
import o from "./breadcrumb.module.js";
|
|
8
|
+
import { Link as s } from "../Link/Link.js";
|
|
9
|
+
import { forwardRef as c } from "react";
|
|
10
|
+
import l from "classnames";
|
|
11
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
12
12
|
//#region src/components/navigation/Breadcrumb/Breadcrumb.tsx
|
|
13
|
-
var
|
|
14
|
-
let { t:
|
|
15
|
-
component:
|
|
16
|
-
size:
|
|
17
|
-
className:
|
|
13
|
+
var f = c(({ items: c, separator: f, size: p = "md", className: m, ariaLabel: h, asChild: g, children: _, ...v }, y) => {
|
|
14
|
+
let { t: b } = n(r), x = h ?? b("a11y.breadcrumb"), S = g ? e : "nav", C = /* @__PURE__ */ u(a, {
|
|
15
|
+
component: i,
|
|
16
|
+
size: p,
|
|
17
|
+
className: o.separatorIcon
|
|
18
18
|
});
|
|
19
|
-
return /* @__PURE__ */
|
|
20
|
-
ref:
|
|
21
|
-
"aria-label":
|
|
22
|
-
className:
|
|
19
|
+
return /* @__PURE__ */ d(S, {
|
|
20
|
+
ref: y,
|
|
21
|
+
"aria-label": x,
|
|
22
|
+
className: l("wim-breadcrumb", o.root, o[p], m),
|
|
23
23
|
onKeyDown: (e) => {
|
|
24
|
-
let t = e.currentTarget, n = Array.from(t.querySelectorAll(`.${
|
|
24
|
+
let t = e.currentTarget, n = Array.from(t.querySelectorAll(`.${o.link}, .${o.label}.${o.current}`)), r = n.indexOf(document.activeElement);
|
|
25
25
|
r !== -1 && (e.key === "ArrowRight" ? (e.preventDefault(), n[(r + 1) % n.length].focus()) : e.key === "ArrowLeft" && (e.preventDefault(), n[(r - 1 + n.length) % n.length].focus()));
|
|
26
26
|
},
|
|
27
|
-
...
|
|
28
|
-
children: /* @__PURE__ */
|
|
29
|
-
className:
|
|
30
|
-
children:
|
|
31
|
-
let n = t ===
|
|
32
|
-
return /* @__PURE__ */
|
|
33
|
-
className:
|
|
34
|
-
children: [/* @__PURE__ */
|
|
35
|
-
className:
|
|
36
|
-
children: e.href && !n ? /* @__PURE__ */
|
|
27
|
+
...v,
|
|
28
|
+
children: [/* @__PURE__ */ u("ol", {
|
|
29
|
+
className: o.list,
|
|
30
|
+
children: c.map((e, t) => {
|
|
31
|
+
let n = t === c.length - 1;
|
|
32
|
+
return /* @__PURE__ */ d("li", {
|
|
33
|
+
className: o.item,
|
|
34
|
+
children: [/* @__PURE__ */ u("div", {
|
|
35
|
+
className: o.content,
|
|
36
|
+
children: e.href && !n ? /* @__PURE__ */ u(s, {
|
|
37
37
|
href: e.href,
|
|
38
|
-
size:
|
|
38
|
+
size: p,
|
|
39
39
|
priority: "secondary",
|
|
40
40
|
iconName: e.iconName,
|
|
41
|
-
className:
|
|
42
|
-
styles: { label:
|
|
41
|
+
className: o.link,
|
|
42
|
+
styles: { label: o.linkLabel },
|
|
43
43
|
children: e.label
|
|
44
|
-
}) : /* @__PURE__ */
|
|
45
|
-
className:
|
|
44
|
+
}) : /* @__PURE__ */ d("span", {
|
|
45
|
+
className: l(o.label, n && o.current),
|
|
46
46
|
"aria-current": n ? "page" : void 0,
|
|
47
47
|
tabIndex: n ? 0 : void 0,
|
|
48
48
|
role: n ? "link" : void 0,
|
|
49
|
-
children: [e.iconName && /* @__PURE__ */
|
|
49
|
+
children: [e.iconName && /* @__PURE__ */ u(a, {
|
|
50
50
|
name: e.iconName,
|
|
51
|
-
size:
|
|
52
|
-
className:
|
|
51
|
+
size: p,
|
|
52
|
+
className: o.labelIcon
|
|
53
53
|
}), e.label]
|
|
54
54
|
})
|
|
55
|
-
}), !n && /* @__PURE__ */
|
|
56
|
-
className:
|
|
55
|
+
}), !n && /* @__PURE__ */ u("span", {
|
|
56
|
+
className: o.separator,
|
|
57
57
|
"aria-hidden": "true",
|
|
58
|
-
children:
|
|
58
|
+
children: f || C
|
|
59
59
|
})]
|
|
60
60
|
}, t);
|
|
61
61
|
})
|
|
62
|
-
})
|
|
62
|
+
}), g ? /* @__PURE__ */ u(t, { children: _ }) : null]
|
|
63
63
|
});
|
|
64
64
|
});
|
|
65
|
-
|
|
65
|
+
f.displayName = "Breadcrumb";
|
|
66
66
|
//#endregion
|
|
67
|
-
export {
|
|
67
|
+
export { f as Breadcrumb };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../node_modules/@radix-ui/react-slot/dist/index.cjs"),n=require("../../../icon/check.cjs"),r=require("../../../icon/close.cjs"),i=require("../../media/Icon/Icon.cjs"),a=require("./stepper.module.cjs");let o=require("react");o=e.__toESM(o,1);let s=require("classnames");s=e.__toESM(s,1);let c=require("react/jsx-runtime");var l=(0,o.forwardRef)(({steps:e=[],current:o=0,direction:l=`horizontal`,labelPlacement:u=`horizontal`,intent:d=`process`,className:f,ariaLabel:p,onChange:m,asChild:h,...
|
|
2
|
+
const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../node_modules/@radix-ui/react-slot/dist/index.cjs"),n=require("../../../icon/check.cjs"),r=require("../../../icon/close.cjs"),i=require("../../media/Icon/Icon.cjs"),a=require("./stepper.module.cjs");let o=require("react");o=e.__toESM(o,1);let s=require("classnames");s=e.__toESM(s,1);let c=require("react/jsx-runtime");var l=(0,o.forwardRef)(({steps:e=[],current:o=0,direction:l=`horizontal`,labelPlacement:u=`horizontal`,intent:d=`process`,className:f,ariaLabel:p,onChange:m,asChild:h,children:g,..._},v)=>{let y=h?t.Root:`div`,b=(e,t)=>t||(e<o?`finish`:e===o?d:`wait`),x=(e,t,a)=>a||(t===`finish`?(0,c.jsx)(i.Icon,{component:n.default,size:`sm`}):t===`error`?(0,c.jsx)(i.Icon,{component:r.default,size:`sm`}):(0,c.jsx)(`span`,{children:e+1}));return(0,c.jsx)(`div`,{className:a.default.container,children:(0,c.jsxs)(y,{ref:v,className:(0,s.default)(`wim-stepper`,a.default.root,a.default[l],u===`vertical`&&a.default.labelVertical,f),role:m?`tablist`:p?`group`:void 0,"aria-label":p,"aria-orientation":m?l:void 0,onKeyDown:t=>{if(!m)return;let n=Array.from(t.currentTarget.querySelectorAll(`[role="tab"]`)),r=document.activeElement;if(n.indexOf(r)===-1||![`ArrowRight`,`ArrowLeft`,`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(t.key))return;t.preventDefault();let i=n.filter((t,n)=>!e[n]?.disabled),a=i.indexOf(r);if(a===-1)return;let o;o=t.key===`ArrowRight`||t.key===`ArrowDown`?(a+1)%i.length:t.key===`ArrowLeft`||t.key===`ArrowUp`?(a-1+i.length)%i.length:t.key===`Home`?0:i.length-1;let s=i[o];s.focus(),m(n.indexOf(s))},..._,children:[e.map((e,t)=>{let n=b(t,e.intent),r=!!m&&!e.disabled;return(0,c.jsxs)(`div`,{className:(0,s.default)(a.default.item,a.default[n],u===`vertical`&&a.default.labelVertical),onClick:()=>r&&m(t),style:{cursor:r?`pointer`:`default`},role:m?`tab`:void 0,"aria-selected":m?t===o:void 0,"aria-disabled":e.disabled?`true`:void 0,"data-testid":`stepper-item`,"data-status":n,tabIndex:m?!e.disabled&&t===o?0:-1:r?0:-1,onKeyDown:e=>{r&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),m(t))},children:[(0,c.jsx)(`div`,{className:a.default.line}),(0,c.jsx)(`div`,{className:a.default.iconContainer,children:x(t,n,e.icon)}),(0,c.jsxs)(`div`,{className:a.default.content,children:[(0,c.jsx)(`span`,{className:a.default.title,"data-testid":`stepper-title`,children:e.title}),e.description&&(0,c.jsx)(`span`,{className:a.default.description,children:e.description})]})]},t)}),h?(0,c.jsx)(t.Slottable,{children:g}):null]})})});l.displayName=`Stepper`,exports.Stepper=l,exports.default=l;
|
|
@@ -31,6 +31,11 @@ export interface StepperProps {
|
|
|
31
31
|
onChange?: (current: number) => void;
|
|
32
32
|
/** Whether to use the Radix Slot pattern */
|
|
33
33
|
asChild?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* The element that becomes the stepper's root when `asChild` is set
|
|
36
|
+
* (the steps are rendered inside it). Ignored without `asChild`.
|
|
37
|
+
*/
|
|
38
|
+
children?: React.ReactNode;
|
|
34
39
|
}
|
|
35
40
|
export declare const Stepper: React.ForwardRefExoticComponent<StepperProps & React.RefAttributes<HTMLDivElement>>;
|
|
36
41
|
export default Stepper;
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { Root as e } from "../../../node_modules/@radix-ui/react-slot/dist/index.js";
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import { Icon as
|
|
6
|
-
import
|
|
7
|
-
import { forwardRef as
|
|
8
|
-
import
|
|
9
|
-
import { jsx as
|
|
2
|
+
import { Root as e, Slottable as t } from "../../../node_modules/@radix-ui/react-slot/dist/index.js";
|
|
3
|
+
import n from "../../../icon/check.js";
|
|
4
|
+
import r from "../../../icon/close.js";
|
|
5
|
+
import { Icon as i } from "../../media/Icon/Icon.js";
|
|
6
|
+
import a from "./stepper.module.js";
|
|
7
|
+
import { forwardRef as o } from "react";
|
|
8
|
+
import s from "classnames";
|
|
9
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
10
10
|
//#region src/components/navigation/Stepper/Stepper.tsx
|
|
11
|
-
var
|
|
12
|
-
let
|
|
13
|
-
component: t,
|
|
14
|
-
size: "sm"
|
|
15
|
-
}) : i === "error" ? /* @__PURE__ */ s(r, {
|
|
11
|
+
var u = o(({ steps: o = [], current: u = 0, direction: d = "horizontal", labelPlacement: f = "horizontal", intent: p = "process", className: m, ariaLabel: h, onChange: g, asChild: _, children: v, ...y }, b) => {
|
|
12
|
+
let x = _ ? e : "div", S = (e, t) => t || (e < u ? "finish" : e === u ? p : "wait"), C = (e, t, a) => a || (t === "finish" ? /* @__PURE__ */ c(i, {
|
|
16
13
|
component: n,
|
|
17
14
|
size: "sm"
|
|
18
|
-
}) : /* @__PURE__ */
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
15
|
+
}) : t === "error" ? /* @__PURE__ */ c(i, {
|
|
16
|
+
component: r,
|
|
17
|
+
size: "sm"
|
|
18
|
+
}) : /* @__PURE__ */ c("span", { children: e + 1 }));
|
|
19
|
+
return /* @__PURE__ */ c("div", {
|
|
20
|
+
className: a.container,
|
|
21
|
+
children: /* @__PURE__ */ l(x, {
|
|
22
|
+
ref: b,
|
|
23
|
+
className: s("wim-stepper", a.root, a[d], f === "vertical" && a.labelVertical, m),
|
|
24
|
+
role: g ? "tablist" : h ? "group" : void 0,
|
|
25
|
+
"aria-label": h,
|
|
26
|
+
"aria-orientation": g ? d : void 0,
|
|
27
27
|
onKeyDown: (e) => {
|
|
28
|
-
if (!
|
|
28
|
+
if (!g) return;
|
|
29
29
|
let t = Array.from(e.currentTarget.querySelectorAll("[role=\"tab\"]")), n = document.activeElement;
|
|
30
30
|
if (t.indexOf(n) === -1 || ![
|
|
31
31
|
"ArrowRight",
|
|
@@ -36,52 +36,52 @@ var l = a(({ steps: a = [], current: l = 0, direction: u = "horizontal", labelPl
|
|
|
36
36
|
"End"
|
|
37
37
|
].includes(e.key)) return;
|
|
38
38
|
e.preventDefault();
|
|
39
|
-
let r = t.filter((e, t) => !
|
|
39
|
+
let r = t.filter((e, t) => !o[t]?.disabled), i = r.indexOf(n);
|
|
40
40
|
if (i === -1) return;
|
|
41
|
-
let
|
|
42
|
-
|
|
43
|
-
let s = r[
|
|
44
|
-
s.focus(),
|
|
41
|
+
let a;
|
|
42
|
+
a = e.key === "ArrowRight" || e.key === "ArrowDown" ? (i + 1) % r.length : e.key === "ArrowLeft" || e.key === "ArrowUp" ? (i - 1 + r.length) % r.length : e.key === "Home" ? 0 : r.length - 1;
|
|
43
|
+
let s = r[a];
|
|
44
|
+
s.focus(), g(t.indexOf(s));
|
|
45
45
|
},
|
|
46
|
-
...
|
|
47
|
-
children:
|
|
48
|
-
let n =
|
|
49
|
-
return /* @__PURE__ */
|
|
50
|
-
className:
|
|
51
|
-
onClick: () => r &&
|
|
46
|
+
...y,
|
|
47
|
+
children: [o.map((e, t) => {
|
|
48
|
+
let n = S(t, e.intent), r = !!g && !e.disabled;
|
|
49
|
+
return /* @__PURE__ */ l("div", {
|
|
50
|
+
className: s(a.item, a[n], f === "vertical" && a.labelVertical),
|
|
51
|
+
onClick: () => r && g(t),
|
|
52
52
|
style: { cursor: r ? "pointer" : "default" },
|
|
53
|
-
role:
|
|
54
|
-
"aria-selected":
|
|
53
|
+
role: g ? "tab" : void 0,
|
|
54
|
+
"aria-selected": g ? t === u : void 0,
|
|
55
55
|
"aria-disabled": e.disabled ? "true" : void 0,
|
|
56
56
|
"data-testid": "stepper-item",
|
|
57
57
|
"data-status": n,
|
|
58
|
-
tabIndex:
|
|
58
|
+
tabIndex: g ? !e.disabled && t === u ? 0 : -1 : r ? 0 : -1,
|
|
59
59
|
onKeyDown: (e) => {
|
|
60
|
-
r && (e.key === "Enter" || e.key === " ") && (e.preventDefault(),
|
|
60
|
+
r && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), g(t));
|
|
61
61
|
},
|
|
62
62
|
children: [
|
|
63
|
-
/* @__PURE__ */
|
|
64
|
-
/* @__PURE__ */ s("div", {
|
|
65
|
-
className: i.iconContainer,
|
|
66
|
-
children: x(t, n, e.icon)
|
|
67
|
-
}),
|
|
63
|
+
/* @__PURE__ */ c("div", { className: a.line }),
|
|
68
64
|
/* @__PURE__ */ c("div", {
|
|
69
|
-
className:
|
|
70
|
-
children:
|
|
71
|
-
|
|
65
|
+
className: a.iconContainer,
|
|
66
|
+
children: C(t, n, e.icon)
|
|
67
|
+
}),
|
|
68
|
+
/* @__PURE__ */ l("div", {
|
|
69
|
+
className: a.content,
|
|
70
|
+
children: [/* @__PURE__ */ c("span", {
|
|
71
|
+
className: a.title,
|
|
72
72
|
"data-testid": "stepper-title",
|
|
73
73
|
children: e.title
|
|
74
|
-
}), e.description && /* @__PURE__ */
|
|
75
|
-
className:
|
|
74
|
+
}), e.description && /* @__PURE__ */ c("span", {
|
|
75
|
+
className: a.description,
|
|
76
76
|
children: e.description
|
|
77
77
|
})]
|
|
78
78
|
})
|
|
79
79
|
]
|
|
80
80
|
}, t);
|
|
81
|
-
})
|
|
81
|
+
}), _ ? /* @__PURE__ */ c(t, { children: v }) : null]
|
|
82
82
|
})
|
|
83
83
|
});
|
|
84
84
|
});
|
|
85
|
-
|
|
85
|
+
u.displayName = "Stepper";
|
|
86
86
|
//#endregion
|
|
87
|
-
export {
|
|
87
|
+
export { u as Stepper, u as default };
|
package/dist/llms-full.txt
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## What this is
|
|
6
6
|
|
|
7
|
-
**wimui** v0.
|
|
7
|
+
**wimui** v0.58.1 — a React 19 component library: 228 documented components across 10 categories, with design tokens, dark mode, i18n (en/ja/pt-BR) and WAI-ARIA compliant a11y. Peer deps: react ^19, react-dom ^19 (plus optional peers for specific components — see package.json).
|
|
8
8
|
|
|
9
9
|
## Install & required setup
|
|
10
10
|
|
|
@@ -2143,6 +2143,8 @@ follows the theme and never needs a hand-mixed colour.
|
|
|
2143
2143
|
- `className: string` — Additional CSS class name for the container.
|
|
2144
2144
|
- `ariaLabel: string` — Accessible label of the navigation landmark. Defaults to a localized "breadcrumb" label.
|
|
2145
2145
|
- `asChild: boolean` — If true, the breadcrumb will be rendered as its child, merging its props onto that child.
|
|
2146
|
+
- `children: React.ReactNode` — The element that becomes the breadcrumb's root (in place of `nav`) when
|
|
2147
|
+
`asChild` is set. The list of items is rendered inside it. Ignored without `asChild`.
|
|
2146
2148
|
- **CommandPalette** — Cmd+K search overlay (aka Command Bar, Quick Open)
|
|
2147
2149
|
- `children: ReactNode` (required) — Palette parts (CommandPaletteTrigger, CommandPaletteContent, etc.).
|
|
2148
2150
|
- `open: boolean` — Controlled open state. Use together with onOpenChange.
|
|
@@ -2238,6 +2240,8 @@ Defaults to a translated "Open menu" / "Close menu" (en / ja / pt), following th
|
|
|
2238
2240
|
- `ariaLabel: string` — Accessibility label for the navigation
|
|
2239
2241
|
- `onChange: (current: number) => void` — Callback function when a step is clicked (if applicable)
|
|
2240
2242
|
- `asChild: boolean` — Whether to use the Radix Slot pattern
|
|
2243
|
+
- `children: React.ReactNode` — The element that becomes the stepper's root when `asChild` is set
|
|
2244
|
+
(the steps are rendered inside it). Ignored without `asChild`.
|
|
2241
2245
|
- **TabBar** — Mobile bottom navigation (aka Bottom Navigation, Bottom Tab Bar)
|
|
2242
2246
|
- `fixed: boolean` = true — Pins the bar to the bottom of the **viewport**. Defaults to `true`.
|
|
2243
2247
|
|
package/dist/llms.txt
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## What this is
|
|
6
6
|
|
|
7
|
-
**wimui** v0.
|
|
7
|
+
**wimui** v0.58.1 — a React 19 component library: 228 documented components across 10 categories, with design tokens, dark mode, i18n (en/ja/pt-BR) and WAI-ARIA compliant a11y. Peer deps: react ^19, react-dom ^19 (plus optional peers for specific components — see package.json).
|
|
8
8
|
|
|
9
9
|
## Install & required setup
|
|
10
10
|
|