@iit/precision-ui 0.8.14 → 0.8.16
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/GridIterator.d.ts.map +1 -1
- package/dist/components/SafeHtml.d.ts +2 -1
- package/dist/components/SafeHtml.d.ts.map +1 -1
- package/dist/components/cards/Doc.d.ts +2 -2
- package/dist/components/cards/Doc.d.ts.map +1 -1
- package/dist/components/cards/FeaturedCard.d.ts +1 -0
- package/dist/components/cards/FeaturedCard.d.ts.map +1 -1
- package/dist/index.es19.js +28 -27
- package/dist/index.es19.js.map +1 -1
- package/dist/index.es27.js +6 -6
- package/dist/index.es27.js.map +1 -1
- package/dist/index.es29.js +39 -39
- package/dist/index.es29.js.map +1 -1
- package/dist/index.es38.js +16 -12
- package/dist/index.es38.js.map +1 -1
- package/dist/styles.css +6 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridIterator.d.ts","sourceRoot":"","sources":["../../src/components/GridIterator.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,UAAU,iBAAiB,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;CAC9B;AAED,QAAA,MAAM,YAAY,kGAQf,kBAAkB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"GridIterator.d.ts","sourceRoot":"","sources":["../../src/components/GridIterator.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,UAAU,iBAAiB,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;CAC9B;AAED,QAAA,MAAM,YAAY,kGAQf,kBAAkB,CAAC,CAAC,gDAmDtB,CAAA;AAED,eAAe,YAAY,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
declare const SafeHtmlRenderer: ({ html, className, }: {
|
|
1
|
+
declare const SafeHtmlRenderer: ({ html, className, withoutContentClass, }: {
|
|
2
2
|
html: string;
|
|
3
3
|
className?: string;
|
|
4
|
+
withoutContentClass?: boolean;
|
|
4
5
|
}) => import("react/jsx-dev-runtime").JSX.Element;
|
|
5
6
|
export default SafeHtmlRenderer;
|
|
6
7
|
//# sourceMappingURL=SafeHtml.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SafeHtml.d.ts","sourceRoot":"","sources":["../../src/components/SafeHtml.tsx"],"names":[],"mappings":"AAkKA,QAAA,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"SafeHtml.d.ts","sourceRoot":"","sources":["../../src/components/SafeHtml.tsx"],"names":[],"mappings":"AAkKA,QAAA,MAAM,gBAAgB,8CAInB;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,gDAgBA,CAAA;AAED,eAAe,gBAAgB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Doc.d.ts","sourceRoot":"","sources":["../../../src/components/cards/Doc.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Doc.d.ts","sourceRoot":"","sources":["../../../src/components/cards/Doc.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAqBnC,CAAA;AAED,eAAe,OAAO,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeaturedCard.d.ts","sourceRoot":"","sources":["../../../src/components/cards/FeaturedCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AACvC,OAAO,EAAO,YAAY,EAAE,MAAM,WAAW,CAAA;AAS7C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnB,IAAI,EAAE,YAAY,EAAE,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,CAAC,EACf,MAAM,EACN,KAAK,GACN,EAAE;QACD,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,KAAK,IAAI,CAAA;CACX;AAED,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAgH7C,CAAA;AAED,eAAe,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"FeaturedCard.d.ts","sourceRoot":"","sources":["../../../src/components/cards/FeaturedCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AACvC,OAAO,EAAO,YAAY,EAAE,MAAM,WAAW,CAAA;AAS7C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnB,IAAI,EAAE,YAAY,EAAE,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,CAAC,EACf,MAAM,EACN,KAAK,GACN,EAAE;QACD,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,KAAK,IAAI,CAAA;CACX;AAED,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAgH7C,CAAA;AAED,eAAe,YAAY,CAAA"}
|
package/dist/index.es19.js
CHANGED
|
@@ -1,72 +1,73 @@
|
|
|
1
1
|
import u from "react";
|
|
2
2
|
const h = (t) => {
|
|
3
|
-
const a = /* @__PURE__ */ new Set(["br", "img", "input", "hr", "meta", "link"]),
|
|
3
|
+
const a = /* @__PURE__ */ new Set(["br", "img", "input", "hr", "meta", "link"]), c = /<\/?([a-z]+)(\s[^>]*)?>/gi, o = [];
|
|
4
4
|
let l;
|
|
5
|
-
for (; (l =
|
|
5
|
+
for (; (l = c.exec(t)) !== null; ) {
|
|
6
6
|
const s = l[0], e = l[1].toLowerCase();
|
|
7
7
|
if (s === "</br>")
|
|
8
8
|
return !1;
|
|
9
9
|
if (s.startsWith("</")) {
|
|
10
|
-
if (a.has(e) ||
|
|
10
|
+
if (a.has(e) || o.length === 0 || o.pop() !== e)
|
|
11
11
|
return !1;
|
|
12
12
|
} else
|
|
13
|
-
!a.has(e) && !s.endsWith("/>") &&
|
|
13
|
+
!a.has(e) && !s.endsWith("/>") && o.push(e);
|
|
14
14
|
}
|
|
15
|
-
return
|
|
15
|
+
return o.length === 0;
|
|
16
16
|
}, m = (t) => {
|
|
17
|
-
const a = /<[a-z]+\s+([^>]+)>/gi,
|
|
18
|
-
for (const [s, e] of
|
|
19
|
-
const
|
|
20
|
-
for (const n of
|
|
17
|
+
const a = /<[a-z]+\s+([^>]+)>/gi, c = t.matchAll(a);
|
|
18
|
+
for (const [s, e] of c) {
|
|
19
|
+
const r = e.match(/\w+\s*=\s*(['"])(.*?)\1|\w+(?!=)/g) || [];
|
|
20
|
+
for (const n of r)
|
|
21
21
|
if (n.includes("=")) {
|
|
22
|
-
const [g, ...f] = n.split("="),
|
|
23
|
-
if (!(
|
|
22
|
+
const [g, ...f] = n.split("="), i = f.join("=");
|
|
23
|
+
if (!(i.startsWith('"') && i.endsWith('"') || i.startsWith("'") && i.endsWith("'")))
|
|
24
24
|
return !1;
|
|
25
|
-
const d =
|
|
26
|
-
if (
|
|
25
|
+
const d = i[0];
|
|
26
|
+
if (i.slice(1, -1).includes(d))
|
|
27
27
|
return !1;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
const
|
|
30
|
+
const o = /<[^>]*?['"][^'"]*>/g, l = t.match(o) || [];
|
|
31
31
|
for (const s of l) {
|
|
32
|
-
let e = !1,
|
|
32
|
+
let e = !1, r = "";
|
|
33
33
|
for (let n = 0; n < s.length; n++)
|
|
34
|
-
(s[n] === "'" || s[n] === '"') && (e ? s[n] ===
|
|
34
|
+
(s[n] === "'" || s[n] === '"') && (e ? s[n] === r && (e = !1) : (e = !0, r = s[n]));
|
|
35
35
|
if (e)
|
|
36
36
|
return !1;
|
|
37
37
|
}
|
|
38
38
|
return !0;
|
|
39
39
|
}, v = (t) => {
|
|
40
40
|
const a = [...t.matchAll(/<([a-z]+)(\s[^>]*)\/>/gi)];
|
|
41
|
-
for (const [
|
|
41
|
+
for (const [c, o, l] of a) {
|
|
42
42
|
const s = /(\w+)=["']([^"']*)["']/g, e = [...l.matchAll(s)];
|
|
43
|
-
for (const [g, f,
|
|
44
|
-
if (!f || !
|
|
43
|
+
for (const [g, f, i] of e)
|
|
44
|
+
if (!f || !i)
|
|
45
45
|
return !1;
|
|
46
|
-
const
|
|
47
|
-
if ([...l.matchAll(
|
|
46
|
+
const r = /(\w+)=["'][^"']*$/g;
|
|
47
|
+
if ([...l.matchAll(r)].length > 0)
|
|
48
48
|
return !1;
|
|
49
49
|
}
|
|
50
50
|
return !0;
|
|
51
51
|
}, p = (t) => {
|
|
52
|
-
const a = /style=["']([^"']*)["']/gi,
|
|
53
|
-
for (const [
|
|
52
|
+
const a = /style=["']([^"']*)["']/gi, c = [...t.matchAll(a)];
|
|
53
|
+
for (const [o, l] of c) {
|
|
54
54
|
const s = l.split(";");
|
|
55
55
|
for (const e of s)
|
|
56
56
|
if (e.trim()) {
|
|
57
|
-
const [
|
|
58
|
-
if (!
|
|
57
|
+
const [r, n] = e.split(":");
|
|
58
|
+
if (!r || !n)
|
|
59
59
|
return !1;
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
return !0;
|
|
63
63
|
}, T = (t) => h(t) && m(t) && v(t) && p(t), y = ({
|
|
64
64
|
html: t,
|
|
65
|
-
className: a
|
|
65
|
+
className: a,
|
|
66
|
+
withoutContentClass: c
|
|
66
67
|
}) => T(t) ? /* @__PURE__ */ u.createElement(
|
|
67
68
|
"div",
|
|
68
69
|
{
|
|
69
|
-
className: ["content", a].filter(Boolean).join(" "),
|
|
70
|
+
className: [!c && "content", a].filter(Boolean).join(" "),
|
|
70
71
|
dangerouslySetInnerHTML: { __html: t }
|
|
71
72
|
}
|
|
72
73
|
) : (console.error("Invalid HTML content:", t), /* @__PURE__ */ u.createElement("div", { style: { color: "red" } }, "Invalid HTML content")), R = y;
|
package/dist/index.es19.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es19.js","sources":["../src/components/SafeHtml.tsx"],"sourcesContent":["import React from 'react'\r\n\r\n// Check if tags are correctly opened and closed\r\nconst validateTags = (htmlString: string) => {\r\n // List of known self-closing tags\r\n const selfClosingTags = new Set(['br', 'img', 'input', 'hr', 'meta', 'link'])\r\n\r\n const tagPattern = /<\\/?([a-z]+)(\\s[^>]*)?>/gi\r\n const tagStack: string[] = []\r\n let match\r\n\r\n while ((match = tagPattern.exec(htmlString)) !== null) {\r\n const fullTag = match[0]\r\n const tagName = match[1].toLowerCase()\r\n\r\n // Check for incorrect </br> usage\r\n if (fullTag === '</br>') {\r\n return false // </br> is invalid HTML\r\n }\r\n\r\n if (fullTag.startsWith('</')) {\r\n // Closing tag\r\n if (selfClosingTags.has(tagName)) {\r\n return false // Self-closing tags shouldn't have closing tags\r\n }\r\n if (tagStack.length === 0) return false\r\n const lastTag = tagStack.pop()\r\n if (lastTag !== tagName) return false\r\n } else {\r\n // Opening tag\r\n if (!selfClosingTags.has(tagName) && !fullTag.endsWith('/>')) {\r\n tagStack.push(tagName)\r\n }\r\n }\r\n }\r\n\r\n return tagStack.length === 0\r\n}\r\n\r\nconst validateAttributes = (htmlString: string) => {\r\n const attributeRegex = /<[a-z]+\\s+([^>]+)>/gi\r\n const matches = htmlString.matchAll(attributeRegex)\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n for (const [fullMatch, attributes] of matches) {\r\n // Split attributes by space, but keep quoted values together\r\n const attrs = attributes.match(/\\w+\\s*=\\s*(['\"])(.*?)\\1|\\w+(?!=)/g) || []\r\n\r\n for (const attr of attrs) {\r\n // Check if attribute has quotes\r\n if (attr.includes('=')) {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const [name, ...rest] = attr.split('=')\r\n const value = rest.join('=') // Rejoin in case value contains =\r\n\r\n // Check for proper quote matching\r\n if (\r\n !(\r\n (value.startsWith('\"') && value.endsWith('\"')) ||\r\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\r\n )\r\n ) {\r\n return false\r\n }\r\n\r\n // Extract the quote character used\r\n const quoteChar = value[0]\r\n // Check if there are any unescaped quotes of the same type inside the value\r\n const valueContent = value.slice(1, -1)\r\n if (valueContent.includes(quoteChar)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Additional check for unclosed quotes before >\r\n const unclosedQuoteCheck = /<[^>]*?['\"][^'\"]*>/g\r\n const potentiallyUnclosedTags = htmlString.match(unclosedQuoteCheck) || []\r\n for (const tag of potentiallyUnclosedTags) {\r\n let inQuote = false\r\n let quoteChar = ''\r\n for (let i = 0; i < tag.length; i++) {\r\n if (tag[i] === \"'\" || tag[i] === '\"') {\r\n if (!inQuote) {\r\n inQuote = true\r\n quoteChar = tag[i]\r\n } else if (tag[i] === quoteChar) {\r\n inQuote = false\r\n }\r\n }\r\n }\r\n if (inQuote) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n}\r\n\r\n// Check if self-closing tags are valid\r\nconst validateSelfClosingTags = (htmlString: string) => {\r\n const selfClosingTags = [...htmlString.matchAll(/<([a-z]+)(\\s[^>]*)\\/>/gi)]\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n for (const [_, tag, attributes] of selfClosingTags) {\r\n const attrRegex = /(\\w+)=[\"']([^\"']*)[\"']/g\r\n const attrs = [...attributes.matchAll(attrRegex)]\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n for (const [_, attrName, attrValue] of attrs) {\r\n if (!attrName || !attrValue) {\r\n return false // Invalid attribute format\r\n }\r\n }\r\n\r\n // Check for unclosed attributes\r\n const unclosedAttrRegex = /(\\w+)=[\"'][^\"']*$/g\r\n const unclosedAttrs = [...attributes.matchAll(unclosedAttrRegex)]\r\n\r\n if (unclosedAttrs.length > 0) {\r\n return false // Unclosed attribute in self-closing tag\r\n }\r\n }\r\n\r\n return true // Self-closing tags are valid\r\n}\r\n\r\n// Check for inline styles and ensure they follow a valid format\r\nconst validateInlineStyles = (htmlString: string) => {\r\n const styleRegex = /style=[\"']([^\"']*)[\"']/gi\r\n const styles = [...htmlString.matchAll(styleRegex)]\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n for (const [_, styleContent] of styles) {\r\n // A basic check for properly formatted style declarations (e.g., \"property: value;\")\r\n const styleRules = styleContent.split(';')\r\n for (const rule of styleRules) {\r\n if (rule.trim()) {\r\n const [property, value] = rule.split(':')\r\n if (!property || !value) {\r\n return false // Invalid style declaration\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true // Inline styles are valid\r\n}\r\n\r\n// Main function that calls the smaller subfunctions\r\nconst validateHtmlBasic = (htmlString: string) => {\r\n return (\r\n validateTags(htmlString) &&\r\n validateAttributes(htmlString) &&\r\n validateSelfClosingTags(htmlString) &&\r\n validateInlineStyles(htmlString)\r\n )\r\n}\r\n\r\n////\r\n\r\nconst SafeHtmlRenderer = ({\r\n html,\r\n className,\r\n}: {\r\n html: string\r\n className?: string\r\n}) => {\r\n const isValid = validateHtmlBasic(html)\r\n // console.log(\"isValidHTML\", isValid);\r\n // TODO: add send error to TG\r\n\r\n if (!isValid) {\r\n console.error('Invalid HTML content:', html)\r\n return <div style={{ color: 'red' }}>Invalid HTML content</div>\r\n }\r\n\r\n return (\r\n <div\r\n className={['content', className].filter(Boolean).join(' ')}\r\n dangerouslySetInnerHTML={{ __html: html }}\r\n />\r\n )\r\n}\r\n\r\nexport default SafeHtmlRenderer\r\n"],"names":["validateTags","htmlString","selfClosingTags","tagPattern","tagStack","match","fullTag","tagName","validateAttributes","attributeRegex","matches","fullMatch","attributes","attrs","attr","name","rest","value","quoteChar","unclosedQuoteCheck","potentiallyUnclosedTags","tag","inQuote","i","validateSelfClosingTags","_","attrRegex","attrName","attrValue","unclosedAttrRegex","validateInlineStyles","styleRegex","styles","styleContent","styleRules","rule","property","validateHtmlBasic","SafeHtmlRenderer","html","className","React","SafeHtmlRenderer$1"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.es19.js","sources":["../src/components/SafeHtml.tsx"],"sourcesContent":["import React from 'react'\r\n\r\n// Check if tags are correctly opened and closed\r\nconst validateTags = (htmlString: string) => {\r\n // List of known self-closing tags\r\n const selfClosingTags = new Set(['br', 'img', 'input', 'hr', 'meta', 'link'])\r\n\r\n const tagPattern = /<\\/?([a-z]+)(\\s[^>]*)?>/gi\r\n const tagStack: string[] = []\r\n let match\r\n\r\n while ((match = tagPattern.exec(htmlString)) !== null) {\r\n const fullTag = match[0]\r\n const tagName = match[1].toLowerCase()\r\n\r\n // Check for incorrect </br> usage\r\n if (fullTag === '</br>') {\r\n return false // </br> is invalid HTML\r\n }\r\n\r\n if (fullTag.startsWith('</')) {\r\n // Closing tag\r\n if (selfClosingTags.has(tagName)) {\r\n return false // Self-closing tags shouldn't have closing tags\r\n }\r\n if (tagStack.length === 0) return false\r\n const lastTag = tagStack.pop()\r\n if (lastTag !== tagName) return false\r\n } else {\r\n // Opening tag\r\n if (!selfClosingTags.has(tagName) && !fullTag.endsWith('/>')) {\r\n tagStack.push(tagName)\r\n }\r\n }\r\n }\r\n\r\n return tagStack.length === 0\r\n}\r\n\r\nconst validateAttributes = (htmlString: string) => {\r\n const attributeRegex = /<[a-z]+\\s+([^>]+)>/gi\r\n const matches = htmlString.matchAll(attributeRegex)\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n for (const [fullMatch, attributes] of matches) {\r\n // Split attributes by space, but keep quoted values together\r\n const attrs = attributes.match(/\\w+\\s*=\\s*(['\"])(.*?)\\1|\\w+(?!=)/g) || []\r\n\r\n for (const attr of attrs) {\r\n // Check if attribute has quotes\r\n if (attr.includes('=')) {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const [name, ...rest] = attr.split('=')\r\n const value = rest.join('=') // Rejoin in case value contains =\r\n\r\n // Check for proper quote matching\r\n if (\r\n !(\r\n (value.startsWith('\"') && value.endsWith('\"')) ||\r\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\r\n )\r\n ) {\r\n return false\r\n }\r\n\r\n // Extract the quote character used\r\n const quoteChar = value[0]\r\n // Check if there are any unescaped quotes of the same type inside the value\r\n const valueContent = value.slice(1, -1)\r\n if (valueContent.includes(quoteChar)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Additional check for unclosed quotes before >\r\n const unclosedQuoteCheck = /<[^>]*?['\"][^'\"]*>/g\r\n const potentiallyUnclosedTags = htmlString.match(unclosedQuoteCheck) || []\r\n for (const tag of potentiallyUnclosedTags) {\r\n let inQuote = false\r\n let quoteChar = ''\r\n for (let i = 0; i < tag.length; i++) {\r\n if (tag[i] === \"'\" || tag[i] === '\"') {\r\n if (!inQuote) {\r\n inQuote = true\r\n quoteChar = tag[i]\r\n } else if (tag[i] === quoteChar) {\r\n inQuote = false\r\n }\r\n }\r\n }\r\n if (inQuote) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n}\r\n\r\n// Check if self-closing tags are valid\r\nconst validateSelfClosingTags = (htmlString: string) => {\r\n const selfClosingTags = [...htmlString.matchAll(/<([a-z]+)(\\s[^>]*)\\/>/gi)]\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n for (const [_, tag, attributes] of selfClosingTags) {\r\n const attrRegex = /(\\w+)=[\"']([^\"']*)[\"']/g\r\n const attrs = [...attributes.matchAll(attrRegex)]\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n for (const [_, attrName, attrValue] of attrs) {\r\n if (!attrName || !attrValue) {\r\n return false // Invalid attribute format\r\n }\r\n }\r\n\r\n // Check for unclosed attributes\r\n const unclosedAttrRegex = /(\\w+)=[\"'][^\"']*$/g\r\n const unclosedAttrs = [...attributes.matchAll(unclosedAttrRegex)]\r\n\r\n if (unclosedAttrs.length > 0) {\r\n return false // Unclosed attribute in self-closing tag\r\n }\r\n }\r\n\r\n return true // Self-closing tags are valid\r\n}\r\n\r\n// Check for inline styles and ensure they follow a valid format\r\nconst validateInlineStyles = (htmlString: string) => {\r\n const styleRegex = /style=[\"']([^\"']*)[\"']/gi\r\n const styles = [...htmlString.matchAll(styleRegex)]\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n for (const [_, styleContent] of styles) {\r\n // A basic check for properly formatted style declarations (e.g., \"property: value;\")\r\n const styleRules = styleContent.split(';')\r\n for (const rule of styleRules) {\r\n if (rule.trim()) {\r\n const [property, value] = rule.split(':')\r\n if (!property || !value) {\r\n return false // Invalid style declaration\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true // Inline styles are valid\r\n}\r\n\r\n// Main function that calls the smaller subfunctions\r\nconst validateHtmlBasic = (htmlString: string) => {\r\n return (\r\n validateTags(htmlString) &&\r\n validateAttributes(htmlString) &&\r\n validateSelfClosingTags(htmlString) &&\r\n validateInlineStyles(htmlString)\r\n )\r\n}\r\n\r\n////\r\n\r\nconst SafeHtmlRenderer = ({\r\n html,\r\n className,\r\n withoutContentClass,\r\n}: {\r\n html: string\r\n className?: string\r\n withoutContentClass?: boolean\r\n}) => {\r\n const isValid = validateHtmlBasic(html)\r\n // console.log(\"isValidHTML\", isValid);\r\n // TODO: add send error to TG\r\n\r\n if (!isValid) {\r\n console.error('Invalid HTML content:', html)\r\n return <div style={{ color: 'red' }}>Invalid HTML content</div>\r\n }\r\n\r\n return (\r\n <div\r\n className={[!withoutContentClass && 'content', className].filter(Boolean).join(' ')}\r\n dangerouslySetInnerHTML={{ __html: html }}\r\n />\r\n )\r\n}\r\n\r\nexport default SafeHtmlRenderer\r\n"],"names":["validateTags","htmlString","selfClosingTags","tagPattern","tagStack","match","fullTag","tagName","validateAttributes","attributeRegex","matches","fullMatch","attributes","attrs","attr","name","rest","value","quoteChar","unclosedQuoteCheck","potentiallyUnclosedTags","tag","inQuote","i","validateSelfClosingTags","_","attrRegex","attrName","attrValue","unclosedAttrRegex","validateInlineStyles","styleRegex","styles","styleContent","styleRules","rule","property","validateHtmlBasic","SafeHtmlRenderer","html","className","withoutContentClass","React","SafeHtmlRenderer$1"],"mappings":"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"}
|
package/dist/index.es27.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { FileDownIcon as c } from "lucide-react";
|
|
2
2
|
import e from "react";
|
|
3
|
-
import
|
|
4
|
-
const s = ({ title:
|
|
3
|
+
import t from "./index.es47.js";
|
|
4
|
+
const s = ({ title: o, format: a, link: n, date: r }) => /* @__PURE__ */ e.createElement(
|
|
5
5
|
"a",
|
|
6
6
|
{
|
|
7
|
-
href:
|
|
7
|
+
href: n,
|
|
8
8
|
download: !0,
|
|
9
9
|
className: "flex bg-whitish p-4 pr-8 rounded-lg space-x-2 transition-colors border border-transparent hover:bg-navy-opacity-41 hover:border-navy-opacity-16"
|
|
10
10
|
},
|
|
11
11
|
/* @__PURE__ */ e.createElement(c, { className: "w-8 h-8 shrink-0" }),
|
|
12
|
-
/* @__PURE__ */ e.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ e.createElement(
|
|
13
|
-
),
|
|
12
|
+
/* @__PURE__ */ e.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ e.createElement(t, { variant: "body", as: "div" }, o), (a || r) && /* @__PURE__ */ e.createElement(t, { variant: "caption", className: "text-navy-opacity-40" }, a && r ? `${a} · ${r}` : a || r))
|
|
13
|
+
), m = s;
|
|
14
14
|
export {
|
|
15
|
-
|
|
15
|
+
m as default
|
|
16
16
|
};
|
|
17
17
|
//# sourceMappingURL=index.es27.js.map
|
package/dist/index.es27.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es27.js","sources":["../src/components/cards/Doc.tsx"],"sourcesContent":["import { FileDownIcon } from 'lucide-react'\r\nimport React from 'react'\r\nimport Text from '../core/typography/Text'\r\n\r\nexport interface DocCardProps {\r\n title: string\r\n format
|
|
1
|
+
{"version":3,"file":"index.es27.js","sources":["../src/components/cards/Doc.tsx"],"sourcesContent":["import { FileDownIcon } from 'lucide-react'\r\nimport React from 'react'\r\nimport Text from '../core/typography/Text'\r\n\r\nexport interface DocCardProps {\r\n title: string\r\n format?: string\r\n link: string\r\n date?: string\r\n}\r\n\r\nconst DocCard: React.FC<DocCardProps> = ({ title, format, link, date }) => {\r\n return (\r\n <a\r\n href={link}\r\n download\r\n className=\"flex bg-whitish p-4 pr-8 rounded-lg space-x-2 transition-colors border border-transparent hover:bg-navy-opacity-41 hover:border-navy-opacity-16\"\r\n >\r\n {/* TODO: Add correct icon from ui kit */}\r\n <FileDownIcon className=\"w-8 h-8 shrink-0\" />\r\n <div className=\"space-y-1\">\r\n <Text variant=\"body\" as=\"div\">\r\n {title}\r\n </Text>\r\n {(format || date) && (\r\n <Text variant=\"caption\" className=\"text-navy-opacity-40\">\r\n {format && date ? `${format} · ${date}` : format || date}\r\n </Text>\r\n )}\r\n </div>\r\n </a>\r\n )\r\n}\r\n\r\nexport default DocCard\r\n"],"names":["DocCard","title","format","link","date","React","FileDownIcon","Text","DocCard$1"],"mappings":";;;AAWA,MAAMA,IAAkC,CAAC,EAAE,OAAAC,GAAO,QAAAC,GAAQ,MAAAC,GAAM,MAAAC,QAE5DC,gBAAAA,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAMF;AAAA,IACN,UAAQ;AAAA,IACR,WAAU;AAAA,EAAA;AAAA,EAGVE,gBAAAA,EAAA,cAACC,GAAa,EAAA,WAAU,mBAAmB,CAAA;AAAA,EAC1CD,gBAAAA,EAAA,cAAA,OAAA,EAAI,WAAU,YAAA,GACZA,gBAAAA,EAAA,cAAAE,GAAA,EAAK,SAAQ,QAAO,IAAG,MAAA,GACrBN,CACH,IACEC,KAAUE,MACTC,gBAAAA,EAAA,cAAAE,GAAA,EAAK,SAAQ,WAAU,WAAU,0BAC/BL,KAAUE,IAAO,GAAGF,CAAM,MAAME,CAAI,KAAKF,KAAUE,CACtD,CAEJ;AAAA,GAKNI,IAAeR;"}
|
package/dist/index.es29.js
CHANGED
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
import e, { Fragment as
|
|
2
|
-
import { Tag as
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
1
|
+
import e, { Fragment as w } from "react";
|
|
2
|
+
import { Tag as C } from "./index.es22.js";
|
|
3
|
+
import F from "./index.es6.js";
|
|
4
|
+
import v from "./index.es46.js";
|
|
5
|
+
import f from "./index.es47.js";
|
|
6
6
|
import { cn as t } from "./index.es55.js";
|
|
7
|
-
import { cva as
|
|
8
|
-
import { getAdapter as
|
|
9
|
-
const
|
|
7
|
+
import { cva as T } from "class-variance-authority";
|
|
8
|
+
import { getAdapter as k } from "./index.es9.js";
|
|
9
|
+
const R = ({
|
|
10
10
|
size: r,
|
|
11
|
-
tags:
|
|
11
|
+
tags: u,
|
|
12
12
|
link: a,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
13
|
+
withButton: m,
|
|
14
|
+
title: n,
|
|
15
|
+
desc: o,
|
|
16
|
+
className: s,
|
|
17
|
+
showDivider: E,
|
|
18
|
+
price: x,
|
|
19
|
+
oldPrice: l,
|
|
20
|
+
detailsText: b,
|
|
21
|
+
withWidthLimit: c,
|
|
22
|
+
uniqId: y,
|
|
23
|
+
onButtonClick: g
|
|
23
24
|
}) => {
|
|
24
|
-
const
|
|
25
|
+
const i = T(
|
|
25
26
|
"p-6 pb-4 bg-whitish rounded-lg transition-all bottom-0 transform duration-300 hover:scale1-[1.015] border border-transparent hover:border-sapphire1 relative col-span-1 !flex flex-col justify-between items-start sm:min-h-[264px] h-full",
|
|
26
27
|
{
|
|
27
28
|
variants: {
|
|
@@ -36,52 +37,51 @@ const k = ({
|
|
|
36
37
|
size: 1
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
|
-
), h =
|
|
40
|
-
|
|
40
|
+
), h = k("LinkWrapper"), p = /* @__PURE__ */ e.createElement(w, null, /* @__PURE__ */ e.createElement("div", { "data-test-id": "content-container" }, /* @__PURE__ */ e.createElement("div", { className: "flex space-x-2" }, u.map((d, N) => /* @__PURE__ */ e.createElement(C, { key: N, variant: d.color }, d.title))), /* @__PURE__ */ e.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ e.createElement(
|
|
41
|
+
v,
|
|
41
42
|
{
|
|
42
43
|
level: 5,
|
|
43
|
-
className: t("mt-6",
|
|
44
|
+
className: t("mt-6", c && "lg:max-w-sm"),
|
|
44
45
|
as: "div"
|
|
45
46
|
},
|
|
46
|
-
|
|
47
|
-
),
|
|
48
|
-
|
|
47
|
+
n
|
|
48
|
+
), o && /* @__PURE__ */ e.createElement(
|
|
49
|
+
f,
|
|
49
50
|
{
|
|
50
51
|
variant: "small-body",
|
|
51
52
|
className: t(
|
|
52
53
|
"text-navy-opacity-60",
|
|
53
|
-
|
|
54
|
+
c && " lg:max-w-sm"
|
|
54
55
|
)
|
|
55
56
|
},
|
|
56
|
-
|
|
57
|
-
))), /* @__PURE__ */ e.createElement("div", { className: "mt-2 sm:mt-6 space-y-6 w-full" },
|
|
58
|
-
|
|
57
|
+
o
|
|
58
|
+
))), /* @__PURE__ */ e.createElement("div", { className: "mt-2 sm:mt-6 space-y-6 w-full" }, E && /* @__PURE__ */ e.createElement("div", { className: "border-t border-navy-opacity-16" }), /* @__PURE__ */ e.createElement("div", { className: "flex space-x-4 items-baseline" }, l && /* @__PURE__ */ e.createElement(
|
|
59
|
+
f,
|
|
59
60
|
{
|
|
60
61
|
variant: "caption",
|
|
61
62
|
className: "text-navy-opacity-40 line-through"
|
|
62
63
|
},
|
|
63
|
-
|
|
64
|
-
), /* @__PURE__ */ e.createElement(
|
|
64
|
+
l
|
|
65
|
+
), /* @__PURE__ */ e.createElement(v, { level: 4, as: "div" }, x)), (m || a) && /* @__PURE__ */ e.createElement(F, { icon: "arrowRight", onClick: () => m && g?.({ uniqId: y, title: n }) }, b || "Подробнее")));
|
|
65
66
|
return a ? /* @__PURE__ */ e.createElement(
|
|
66
67
|
h,
|
|
67
68
|
{
|
|
68
69
|
href: a,
|
|
69
70
|
className: t(
|
|
70
|
-
|
|
71
|
+
i({ size: r, className: s }),
|
|
71
72
|
"cursor-pointer hover:bottom-1"
|
|
72
73
|
)
|
|
73
74
|
},
|
|
74
|
-
|
|
75
|
+
p
|
|
75
76
|
) : /* @__PURE__ */ e.createElement(
|
|
76
77
|
"div",
|
|
77
78
|
{
|
|
78
|
-
className: t(
|
|
79
|
-
onClick: () => y?.({ uniqId: b, title: m })
|
|
79
|
+
className: t(i({ size: r, className: s }))
|
|
80
80
|
},
|
|
81
|
-
|
|
81
|
+
p
|
|
82
82
|
);
|
|
83
|
-
},
|
|
83
|
+
}, W = R;
|
|
84
84
|
export {
|
|
85
|
-
|
|
85
|
+
W as default
|
|
86
86
|
};
|
|
87
87
|
//# sourceMappingURL=index.es29.js.map
|
package/dist/index.es29.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es29.js","sources":["../src/components/cards/FeaturedCard.tsx"],"sourcesContent":["import React, { Fragment } from 'react'\r\nimport { Tag, TagItemProps } from '../ui/Tag'\r\n\r\nimport { ButtonText } from '../ui/button'\r\nimport Heading from '../core/typography/Heading'\r\nimport Text from '../core/typography/Text'\r\nimport { cn } from '@/lib/utils/cn'\r\nimport { cva } from 'class-variance-authority'\r\nimport { getAdapter } from '@/Adapters'\r\n\r\nexport interface FeaturedCardProps {\r\n size: 1 | 2 | 3 | 4\r\n tags: TagItemProps[]\r\n link?: string\r\n title: string\r\n desc?: string\r\n className?: string\r\n showDivider?: boolean\r\n price?: string\r\n oldPrice?: string\r\n detailsText?: string\r\n withWidthLimit?: boolean\r\n uniqId?: string\r\n onButtonClick?: ({\r\n uniqId,\r\n title,\r\n }: {\r\n uniqId?: string\r\n title?: string\r\n }) => void\r\n}\r\n\r\nconst FeaturedCard: React.FC<FeaturedCardProps> = ({\r\n size,\r\n tags,\r\n link,\r\n title,\r\n desc,\r\n className,\r\n showDivider,\r\n price,\r\n oldPrice,\r\n detailsText,\r\n withWidthLimit,\r\n uniqId,\r\n onButtonClick,\r\n}) => {\r\n const cardStyles = cva(\r\n 'p-6 pb-4 bg-whitish rounded-lg transition-all bottom-0 transform duration-300 hover:scale1-[1.015] border border-transparent hover:border-sapphire1 relative col-span-1 !flex flex-col justify-between items-start sm:min-h-[264px] h-full',\r\n {\r\n variants: {\r\n size: {\r\n 1: 'sm:col-span-1',\r\n 2: 'sm:col-span-2',\r\n 3: 'sm:col-span-3',\r\n 4: 'sm:col-span-4',\r\n },\r\n },\r\n defaultVariants: {\r\n size: 1,\r\n },\r\n }\r\n )\r\n\r\n const LinkWrapper = getAdapter('LinkWrapper')\r\n\r\n const component = (\r\n <Fragment>\r\n <div data-test-id=\"content-container\">\r\n <div className=\"flex space-x-2\">\r\n {tags.map((tag, index) => (\r\n <Tag key={index} variant={tag.color}>\r\n {tag.title}\r\n </Tag>\r\n ))}\r\n </div>\r\n <div className=\"space-y-2\">\r\n <Heading\r\n level={5}\r\n className={cn('mt-6', withWidthLimit && 'lg:max-w-sm')}\r\n as={'div'}\r\n >\r\n {title}\r\n </Heading>\r\n {desc && (\r\n <Text\r\n variant=\"small-body\"\r\n className={cn(\r\n 'text-navy-opacity-60',\r\n withWidthLimit && ' lg:max-w-sm'\r\n )}\r\n >\r\n {desc}\r\n </Text>\r\n )}\r\n </div>\r\n </div>\r\n {/* TODO: here is the button, should be a link */}\r\n <div className=\"mt-2 sm:mt-6 space-y-6 w-full\">\r\n {showDivider && <div className=\"border-t border-navy-opacity-16\"></div>}\r\n <div className=\"flex space-x-4 items-baseline\">\r\n {oldPrice && (\r\n <Text\r\n variant=\"caption\"\r\n className=\"text-navy-opacity-40 line-through\"\r\n >\r\n {oldPrice}\r\n </Text>\r\n )}\r\n <Heading level={4} as={'div'}>\r\n {price}\r\n </Heading>\r\n </div>\r\n {link && (\r\n <ButtonText icon=\"arrowRight\">\r\n {detailsText || 'Подробнее'}\r\n </ButtonText>\r\n )}\r\n </div>\r\n </Fragment>\r\n )\r\n\r\n if (link) {\r\n return (\r\n <LinkWrapper\r\n href={link}\r\n className={cn(\r\n cardStyles({ size, className }),\r\n 'cursor-pointer hover:bottom-1'\r\n )}\r\n >\r\n {component}\r\n </LinkWrapper>\r\n )\r\n }\r\n\r\n return (\r\n <div\r\n className={cn(cardStyles({ size, className }))}\r\n
|
|
1
|
+
{"version":3,"file":"index.es29.js","sources":["../src/components/cards/FeaturedCard.tsx"],"sourcesContent":["import React, { Fragment } from 'react'\r\nimport { Tag, TagItemProps } from '../ui/Tag'\r\n\r\nimport { ButtonText } from '../ui/button'\r\nimport Heading from '../core/typography/Heading'\r\nimport Text from '../core/typography/Text'\r\nimport { cn } from '@/lib/utils/cn'\r\nimport { cva } from 'class-variance-authority'\r\nimport { getAdapter } from '@/Adapters'\r\n\r\nexport interface FeaturedCardProps {\r\n size: 1 | 2 | 3 | 4\r\n tags: TagItemProps[]\r\n link?: string\r\n withButton?: boolean\r\n title: string\r\n desc?: string\r\n className?: string\r\n showDivider?: boolean\r\n price?: string\r\n oldPrice?: string\r\n detailsText?: string\r\n withWidthLimit?: boolean\r\n uniqId?: string\r\n onButtonClick?: ({\r\n uniqId,\r\n title,\r\n }: {\r\n uniqId?: string\r\n title?: string\r\n }) => void\r\n}\r\n\r\nconst FeaturedCard: React.FC<FeaturedCardProps> = ({\r\n size,\r\n tags,\r\n link,\r\n withButton,\r\n title,\r\n desc,\r\n className,\r\n showDivider,\r\n price,\r\n oldPrice,\r\n detailsText,\r\n withWidthLimit,\r\n uniqId,\r\n onButtonClick,\r\n}) => {\r\n const cardStyles = cva(\r\n 'p-6 pb-4 bg-whitish rounded-lg transition-all bottom-0 transform duration-300 hover:scale1-[1.015] border border-transparent hover:border-sapphire1 relative col-span-1 !flex flex-col justify-between items-start sm:min-h-[264px] h-full',\r\n {\r\n variants: {\r\n size: {\r\n 1: 'sm:col-span-1',\r\n 2: 'sm:col-span-2',\r\n 3: 'sm:col-span-3',\r\n 4: 'sm:col-span-4',\r\n },\r\n },\r\n defaultVariants: {\r\n size: 1,\r\n },\r\n }\r\n )\r\n\r\n const LinkWrapper = getAdapter('LinkWrapper')\r\n\r\n const component = (\r\n <Fragment>\r\n <div data-test-id=\"content-container\">\r\n <div className=\"flex space-x-2\">\r\n {tags.map((tag, index) => (\r\n <Tag key={index} variant={tag.color}>\r\n {tag.title}\r\n </Tag>\r\n ))}\r\n </div>\r\n <div className=\"space-y-2\">\r\n <Heading\r\n level={5}\r\n className={cn('mt-6', withWidthLimit && 'lg:max-w-sm')}\r\n as={'div'}\r\n >\r\n {title}\r\n </Heading>\r\n {desc && (\r\n <Text\r\n variant=\"small-body\"\r\n className={cn(\r\n 'text-navy-opacity-60',\r\n withWidthLimit && ' lg:max-w-sm'\r\n )}\r\n >\r\n {desc}\r\n </Text>\r\n )}\r\n </div>\r\n </div>\r\n {/* TODO: here is the button, should be a link */}\r\n <div className=\"mt-2 sm:mt-6 space-y-6 w-full\">\r\n {showDivider && <div className=\"border-t border-navy-opacity-16\"></div>}\r\n <div className=\"flex space-x-4 items-baseline\">\r\n {oldPrice && (\r\n <Text\r\n variant=\"caption\"\r\n className=\"text-navy-opacity-40 line-through\"\r\n >\r\n {oldPrice}\r\n </Text>\r\n )}\r\n <Heading level={4} as={'div'}>\r\n {price}\r\n </Heading>\r\n </div>\r\n {(withButton || link) && (\r\n <ButtonText icon=\"arrowRight\" onClick={() => withButton && onButtonClick?.({ uniqId, title })}>\r\n {detailsText || 'Подробнее'}\r\n </ButtonText>\r\n )}\r\n </div>\r\n </Fragment>\r\n )\r\n\r\n if (link) {\r\n return (\r\n <LinkWrapper\r\n href={link}\r\n className={cn(\r\n cardStyles({ size, className }),\r\n 'cursor-pointer hover:bottom-1'\r\n )}\r\n >\r\n {component}\r\n </LinkWrapper>\r\n )\r\n }\r\n\r\n return (\r\n <div\r\n className={cn(cardStyles({ size, className }))}\r\n >\r\n {component}\r\n </div>\r\n )\r\n}\r\n\r\nexport default FeaturedCard\r\n"],"names":["FeaturedCard","size","tags","link","withButton","title","desc","className","showDivider","price","oldPrice","detailsText","withWidthLimit","uniqId","onButtonClick","cardStyles","cva","LinkWrapper","getAdapter","component","React","Fragment","tag","index","Tag","Heading","cn","Text","ButtonText","FeaturedCard$1"],"mappings":";;;;;;;;AAiCA,MAAMA,IAA4C,CAAC;AAAA,EACjD,MAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAC;AAAA,EACA,YAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,eAAAC;AACF,MAAM;AACJ,QAAMC,IAAaC;AAAA,IACjB;AAAA,IACA;AAAA,MACE,UAAU;AAAA,QACR,MAAM;AAAA,UACJ,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,MACA,iBAAiB;AAAA,QACf,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EAAA,GAGIC,IAAcC,EAAW,aAAa,GAEtCC,IACJC,gBAAAA,EAAA,cAACC,GACC,MAAAD,gBAAAA,EAAA,cAAC,OAAI,EAAA,gBAAa,uBAChBA,gBAAAA,EAAA,cAAC,OAAI,EAAA,WAAU,iBACZ,GAAAlB,EAAK,IAAI,CAACoB,GAAKC,MACdH,gBAAAA,EAAA,cAACI,GAAI,EAAA,KAAKD,GAAO,SAASD,EAAI,SAC3BA,EAAI,KACP,CACD,CACH,GACCF,gBAAAA,EAAA,cAAA,OAAA,EAAI,WAAU,eACbA,gBAAAA,EAAA;AAAA,IAACK;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,MACP,WAAWC,EAAG,QAAQd,KAAkB,aAAa;AAAA,MACrD,IAAI;AAAA,IAAA;AAAA,IAEHP;AAAA,EAAA,GAEFC,KACCc,gBAAAA,EAAA;AAAA,IAACO;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,WAAWD;AAAA,QACT;AAAA,QACAd,KAAkB;AAAA,MACpB;AAAA,IAAA;AAAA,IAECN;AAAA,EAGP,CAAA,CACF,GAECc,gBAAAA,EAAA,cAAA,OAAA,EAAI,WAAU,mCACZZ,KAAgBY,gBAAAA,EAAA,cAAA,OAAA,EAAI,WAAU,kCAAkC,CAAA,mCAChE,OAAI,EAAA,WAAU,mCACZV,KACCU,gBAAAA,EAAA;AAAA,IAACO;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,WAAU;AAAA,IAAA;AAAA,IAETjB;AAAA,EAGL,GAAAU,gBAAAA,EAAA,cAACK,GAAQ,EAAA,OAAO,GAAG,IAAI,MACpB,GAAAhB,CACH,CACF,IACEL,KAAcD,MACbiB,gBAAAA,EAAA,cAAAQ,GAAA,EAAW,MAAK,cAAa,SAAS,MAAMxB,KAAcU,IAAgB,EAAE,QAAAD,GAAQ,OAAAR,EAAO,CAAA,EACzF,GAAAM,KAAe,WAClB,CAEJ,CACF;AAGF,SAAIR,IAEAiB,gBAAAA,EAAA;AAAA,IAACH;AAAA,IAAA;AAAA,MACC,MAAMd;AAAA,MACN,WAAWuB;AAAA,QACTX,EAAW,EAAE,MAAAd,GAAM,WAAAM,GAAW;AAAA,QAC9B;AAAA,MACF;AAAA,IAAA;AAAA,IAECY;AAAA,EAAA,IAMLC,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWM,EAAGX,EAAW,EAAE,MAAAd,GAAM,WAAAM,EAAW,CAAA,CAAC;AAAA,IAAA;AAAA,IAE5CY;AAAA,EAAA;AAGP,GAEAU,IAAe7B;"}
|
package/dist/index.es38.js
CHANGED
|
@@ -2,14 +2,14 @@ import { CarouselWrapper as m } from "./index.es44.js";
|
|
|
2
2
|
import r from "react";
|
|
3
3
|
import n from "./index.es47.js";
|
|
4
4
|
const p = ({
|
|
5
|
-
items:
|
|
6
|
-
renderItem:
|
|
7
|
-
columns:
|
|
8
|
-
hideControlsOnDesktop:
|
|
9
|
-
withoutCarousel:
|
|
5
|
+
items: s,
|
|
6
|
+
renderItem: l,
|
|
7
|
+
columns: t = 4,
|
|
8
|
+
hideControlsOnDesktop: g = !1,
|
|
9
|
+
withoutCarousel: d = !1,
|
|
10
10
|
// TODO: add to props chain
|
|
11
11
|
footnote: c,
|
|
12
|
-
variant:
|
|
12
|
+
variant: i
|
|
13
13
|
}) => {
|
|
14
14
|
const o = (e) => {
|
|
15
15
|
switch (e) {
|
|
@@ -21,18 +21,22 @@ const p = ({
|
|
|
21
21
|
return "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3";
|
|
22
22
|
case 4:
|
|
23
23
|
return "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-3";
|
|
24
|
+
case 5:
|
|
25
|
+
return "grid grid-cols-1 xl:grid-cols-5 gap-3";
|
|
26
|
+
case 6:
|
|
27
|
+
return "grid grid-cols-1 xl:grid-cols-6 gap-3";
|
|
24
28
|
default:
|
|
25
29
|
return "grid grid-cols-1 gap-3";
|
|
26
30
|
}
|
|
27
31
|
};
|
|
28
|
-
return /* @__PURE__ */ r.createElement("div", null,
|
|
32
|
+
return /* @__PURE__ */ r.createElement("div", null, d ? /* @__PURE__ */ r.createElement("div", { className: o(t) }, s.map((e, a) => /* @__PURE__ */ r.createElement(r.Fragment, { key: a }, l(e, a)))) : /* @__PURE__ */ r.createElement(
|
|
29
33
|
m,
|
|
30
34
|
{
|
|
31
|
-
items:
|
|
32
|
-
renderItem: (e, a) =>
|
|
33
|
-
columns:
|
|
34
|
-
hideControlsOnDesktop:
|
|
35
|
-
variant:
|
|
35
|
+
items: s,
|
|
36
|
+
renderItem: (e, a) => l(e, a),
|
|
37
|
+
columns: t,
|
|
38
|
+
hideControlsOnDesktop: g,
|
|
39
|
+
variant: i
|
|
36
40
|
}
|
|
37
41
|
), c && /* @__PURE__ */ r.createElement("div", { className: "mt-6" }, /* @__PURE__ */ r.createElement(n, { variant: "small-body", as: "div" }, c)));
|
|
38
42
|
}, v = p;
|
package/dist/index.es38.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es38.js","sources":["../src/components/GridIterator.tsx"],"sourcesContent":["import { CarouselWrapper } from '@/decorators/CarouselWrapper'\r\nimport React from 'react'\r\nimport Text from './core/typography/Text'\r\n\r\n// import { getAdapter } from '@/Adapters'\r\n\r\ninterface GridIteratorProps<T> {\r\n items: T[]\r\n renderItem: (item: T, index: number) => React.ReactNode\r\n columns?: number\r\n hideControlsOnDesktop?: boolean\r\n withoutCarousel?: boolean\r\n footnote?: string\r\n variant?: 'default' | 'white'\r\n}\r\n\r\nconst GridIterator = <T,>({\r\n items,\r\n renderItem,\r\n columns = 4,\r\n hideControlsOnDesktop = false,\r\n withoutCarousel = false, // TODO: add to props chain\r\n footnote,\r\n variant,\r\n}: GridIteratorProps<T>) => {\r\n const getGridClasses = (columns: number) => {\r\n switch (columns) {\r\n case 1:\r\n return 'grid grid-cols-1 gap-3'\r\n case 2:\r\n return 'grid grid-cols-1 sm:grid-cols-2 gap-3'\r\n case 3:\r\n return 'grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3'\r\n case 4:\r\n return 'grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-3'\r\n default:\r\n return 'grid grid-cols-1 gap-3'\r\n }\r\n }\r\n // const CarouselWrapper = getAdapter('CarouselWrapper')\r\n\r\n return (\r\n <div>\r\n {withoutCarousel ? (\r\n <div className={getGridClasses(columns)}>\r\n {items.map((item, index) => (\r\n <React.Fragment key={index}>\r\n {renderItem(item, index)}\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n ) : (\r\n <CarouselWrapper\r\n items={items}\r\n // renderItem={renderItem}\r\n renderItem={(item, index) => renderItem(item as T, index)}\r\n columns={columns}\r\n hideControlsOnDesktop={hideControlsOnDesktop}\r\n variant={variant}\r\n />\r\n )}\r\n\r\n {footnote && (\r\n <div className=\"mt-6\">\r\n <Text variant=\"small-body\" as=\"div\">\r\n {footnote}\r\n </Text>\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport default GridIterator\r\n"],"names":["GridIterator","items","renderItem","columns","hideControlsOnDesktop","withoutCarousel","footnote","variant","getGridClasses","React","item","index","CarouselWrapper","Text","GridIterator$1"],"mappings":";;;AAgBA,MAAMA,IAAe,CAAK;AAAA,EACxB,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,uBAAAC,IAAwB;AAAA,EACxB,iBAAAC,IAAkB;AAAA;AAAA,EAClB,UAAAC;AAAA,EACA,SAAAC;AACF,MAA4B;AACpB,QAAAC,IAAiB,CAACL,MAAoB;AAC1C,YAAQA,GAAS;AAAA,MACf,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT;AACS,eAAA;AAAA,IACX;AAAA,EAAA;AAKA,SAAAM,gBAAAA,EAAA,cAAC,OACE,MAAAJ,IACEI,gBAAAA,EAAA,cAAA,OAAA,EAAI,WAAWD,EAAeL,CAAO,EAAA,GACnCF,EAAM,IAAI,CAACS,GAAMC,MACfF,gBAAAA,EAAA,cAAAA,EAAM,UAAN,EAAe,KAAKE,EAAA,GAClBT,EAAWQ,GAAMC,CAAK,CACzB,CACD,CACH,IAEAF,gBAAAA,EAAA;AAAA,IAACG;AAAA,IAAA;AAAA,MACC,OAAAX;AAAA,MAEA,YAAY,CAACS,GAAMC,MAAUT,EAAWQ,GAAWC,CAAK;AAAA,MACxD,SAAAR;AAAA,MACA,uBAAAC;AAAA,MACA,SAAAG;AAAA,IAAA;AAAA,EAAA,GAIHD,KACEG,gBAAAA,EAAA,cAAA,OAAA,EAAI,WAAU,OACb,GAAAA,gBAAAA,EAAA,cAACI,GAAK,EAAA,SAAQ,cAAa,IAAG,SAC3BP,CACH,CACF,CAEJ;AAEJ,GAEAQ,IAAed;"}
|
|
1
|
+
{"version":3,"file":"index.es38.js","sources":["../src/components/GridIterator.tsx"],"sourcesContent":["import { CarouselWrapper } from '@/decorators/CarouselWrapper'\r\nimport React from 'react'\r\nimport Text from './core/typography/Text'\r\n\r\n// import { getAdapter } from '@/Adapters'\r\n\r\ninterface GridIteratorProps<T> {\r\n items: T[]\r\n renderItem: (item: T, index: number) => React.ReactNode\r\n columns?: number\r\n hideControlsOnDesktop?: boolean\r\n withoutCarousel?: boolean\r\n footnote?: string\r\n variant?: 'default' | 'white'\r\n}\r\n\r\nconst GridIterator = <T,>({\r\n items,\r\n renderItem,\r\n columns = 4,\r\n hideControlsOnDesktop = false,\r\n withoutCarousel = false, // TODO: add to props chain\r\n footnote,\r\n variant,\r\n}: GridIteratorProps<T>) => {\r\n const getGridClasses = (columns: number) => {\r\n switch (columns) {\r\n case 1:\r\n return 'grid grid-cols-1 gap-3'\r\n case 2:\r\n return 'grid grid-cols-1 sm:grid-cols-2 gap-3'\r\n case 3:\r\n return 'grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3'\r\n case 4:\r\n return 'grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-3'\r\n case 5:\r\n return 'grid grid-cols-1 xl:grid-cols-5 gap-3'\r\n case 6:\r\n return 'grid grid-cols-1 xl:grid-cols-6 gap-3'\r\n default:\r\n return 'grid grid-cols-1 gap-3'\r\n }\r\n }\r\n // const CarouselWrapper = getAdapter('CarouselWrapper')\r\n\r\n return (\r\n <div>\r\n {withoutCarousel ? (\r\n <div className={getGridClasses(columns)}>\r\n {items.map((item, index) => (\r\n <React.Fragment key={index}>\r\n {renderItem(item, index)}\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n ) : (\r\n <CarouselWrapper\r\n items={items}\r\n // renderItem={renderItem}\r\n renderItem={(item, index) => renderItem(item as T, index)}\r\n columns={columns}\r\n hideControlsOnDesktop={hideControlsOnDesktop}\r\n variant={variant}\r\n />\r\n )}\r\n\r\n {footnote && (\r\n <div className=\"mt-6\">\r\n <Text variant=\"small-body\" as=\"div\">\r\n {footnote}\r\n </Text>\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport default GridIterator\r\n"],"names":["GridIterator","items","renderItem","columns","hideControlsOnDesktop","withoutCarousel","footnote","variant","getGridClasses","React","item","index","CarouselWrapper","Text","GridIterator$1"],"mappings":";;;AAgBA,MAAMA,IAAe,CAAK;AAAA,EACxB,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,uBAAAC,IAAwB;AAAA,EACxB,iBAAAC,IAAkB;AAAA;AAAA,EAClB,UAAAC;AAAA,EACA,SAAAC;AACF,MAA4B;AACpB,QAAAC,IAAiB,CAACL,MAAoB;AAC1C,YAAQA,GAAS;AAAA,MACf,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT;AACS,eAAA;AAAA,IACX;AAAA,EAAA;AAKA,SAAAM,gBAAAA,EAAA,cAAC,OACE,MAAAJ,IACEI,gBAAAA,EAAA,cAAA,OAAA,EAAI,WAAWD,EAAeL,CAAO,EAAA,GACnCF,EAAM,IAAI,CAACS,GAAMC,MACfF,gBAAAA,EAAA,cAAAA,EAAM,UAAN,EAAe,KAAKE,EAAA,GAClBT,EAAWQ,GAAMC,CAAK,CACzB,CACD,CACH,IAEAF,gBAAAA,EAAA;AAAA,IAACG;AAAA,IAAA;AAAA,MACC,OAAAX;AAAA,MAEA,YAAY,CAACS,GAAMC,MAAUT,EAAWQ,GAAWC,CAAK;AAAA,MACxD,SAAAR;AAAA,MACA,uBAAAC;AAAA,MACA,SAAAG;AAAA,IAAA;AAAA,EAAA,GAIHD,KACEG,gBAAAA,EAAA,cAAA,OAAA,EAAI,WAAU,OACb,GAAAA,gBAAAA,EAAA,cAACI,GAAK,EAAA,SAAQ,cAAa,IAAG,SAC3BP,CACH,CACF,CAEJ;AAEJ,GAEAQ,IAAed;"}
|
package/dist/styles.css
CHANGED
|
@@ -2849,6 +2849,12 @@ html {
|
|
|
2849
2849
|
.xl\:grid-cols-4{
|
|
2850
2850
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
2851
2851
|
}
|
|
2852
|
+
.xl\:grid-cols-5{
|
|
2853
|
+
grid-template-columns: repeat(5, minmax(0, 1fr));
|
|
2854
|
+
}
|
|
2855
|
+
.xl\:grid-cols-6{
|
|
2856
|
+
grid-template-columns: repeat(6, minmax(0, 1fr));
|
|
2857
|
+
}
|
|
2852
2858
|
.xl\:pr-28{
|
|
2853
2859
|
padding-right: 7rem;
|
|
2854
2860
|
}
|