@regardio/react 0.4.7 → 0.5.5
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/LICENSE +1 -1
- package/README.md +6 -8
- package/dist/{components/background-slideshow.js → background-slideshow/index.js} +2 -11
- package/dist/{components/blurry-gradient.js → blurry-gradient/index.js} +15 -9
- package/dist/{components/carousel.d.ts → carousel/index.d.ts} +17 -9
- package/dist/{components/carousel.js → carousel/index.js} +34 -30
- package/dist/{components/countdown.js → countdown/index.js} +2 -11
- package/dist/{components/generic-error.js → generic-error/index.js} +1 -1
- package/dist/grid/index.d.ts +1196 -0
- package/dist/grid/index.js +239 -0
- package/dist/heading/index.d.ts +24 -0
- package/dist/{components/heading.js → heading/index.js} +15 -34
- package/dist/highlight/index.d.ts +13 -0
- package/dist/{components/highlight.js → highlight/index.js} +9 -17
- package/dist/hooks/use-nonce.d.ts +1 -6
- package/dist/hooks/use-nonce.js +1 -6
- package/dist/{components/icon-button.js → icon-button/index.js} +1 -1
- package/dist/{components/if.js → if/index.js} +1 -1
- package/dist/{components/iframe.js → iframe/index.js} +2 -11
- package/dist/{components/link.d.ts → link/index.d.ts} +19 -13
- package/dist/{components/link.js → link/index.js} +31 -36
- package/dist/list/index.d.ts +69 -0
- package/dist/list/index.js +65 -0
- package/dist/{components/markdown-container.js → markdown-container/index.js} +3 -67
- package/dist/{components/password-input.js → password-input/index.js} +2 -11
- package/dist/{components/picture.js → picture/index.js} +2 -11
- package/dist/{components/protected-email.d.ts → protected-email/index.d.ts} +1 -1
- package/dist/{components/protected-email.js → protected-email/index.js} +1 -1
- package/dist/text/index.d.ts +20 -0
- package/dist/text/index.js +38 -0
- package/dist/utils/author/index.d.ts +3 -0
- package/dist/utils/author/index.js +33 -0
- package/dist/utils/text/index.d.ts +15 -0
- package/dist/utils/text/index.js +73 -0
- package/package.json +170 -187
- package/src/background-slideshow/background-slideshow.stories.tsx +137 -0
- package/src/{components → background-slideshow}/background-slideshow.tsx +3 -1
- package/src/background-slideshow/index.ts +2 -0
- package/src/{stories/BlurryGradient.stories.tsx → blurry-gradient/blurry-gradient.stories.tsx} +1 -1
- package/src/{components → blurry-gradient}/blurry-gradient.tsx +14 -8
- package/src/blurry-gradient/index.ts +2 -0
- package/src/carousel/carousel-content.tsx +16 -0
- package/src/carousel/carousel-item.tsx +23 -0
- package/src/carousel/carousel-next.tsx +22 -0
- package/src/carousel/carousel-previous.tsx +22 -0
- package/src/{components/carousel.tsx → carousel/carousel-root.tsx} +8 -78
- package/src/carousel/carousel.stories.tsx +135 -0
- package/src/carousel/index.parts.ts +5 -0
- package/src/carousel/index.ts +4 -0
- package/src/{stories/Countdown.stories.tsx → countdown/countdown.stories.tsx} +1 -1
- package/src/{components → countdown}/countdown.tsx +3 -7
- package/src/countdown/index.ts +1 -0
- package/src/{stories/GenericError.stories.tsx → generic-error/generic-error.stories.tsx} +1 -1
- package/src/{components → generic-error}/generic-error.tsx +2 -0
- package/src/generic-error/index.ts +2 -0
- package/src/grid/grid-item.tsx +188 -0
- package/src/grid/grid-root.tsx +72 -0
- package/src/grid/grid.stories.tsx +236 -0
- package/src/grid/index.parts.ts +2 -0
- package/src/grid/index.ts +5 -0
- package/src/{stories/Heading.stories.tsx → heading/heading.stories.tsx} +1 -1
- package/src/{components → heading}/heading.tsx +17 -25
- package/src/heading/index.ts +2 -0
- package/src/{stories/Highlight.stories.tsx → highlight/highlight.stories.tsx} +1 -1
- package/src/{components → highlight}/highlight.tsx +13 -9
- package/src/highlight/index.ts +2 -0
- package/src/hooks/use-nonce.ts +0 -10
- package/src/{stories/IconButton.stories.tsx → icon-button/icon-button.stories.tsx} +1 -1
- package/src/icon-button/index.ts +2 -0
- package/src/{stories/If.stories.tsx → if/if.stories.tsx} +1 -1
- package/src/if/index.ts +1 -0
- package/src/{stories/Iframe.stories.tsx → iframe/iframe.stories.tsx} +1 -1
- package/src/{components → iframe}/iframe.tsx +1 -1
- package/src/iframe/index.ts +2 -0
- package/src/link/index.ts +2 -0
- package/src/{stories/Link.stories.tsx → link/link.stories.tsx} +52 -1
- package/src/{components → link}/link.tsx +39 -28
- package/src/list/index.parts.ts +2 -0
- package/src/list/index.ts +4 -0
- package/src/list/list-item.tsx +63 -0
- package/src/list/list-root-context.ts +21 -0
- package/src/list/list-root.tsx +81 -0
- package/src/list/list.css +32 -0
- package/src/list/list.stories.tsx +119 -0
- package/src/list/list.test.tsx +168 -0
- package/src/markdown-container/index.ts +2 -0
- package/src/{stories/MarkdownContainer.stories.tsx → markdown-container/markdown-container.stories.tsx} +56 -1
- package/src/{components → markdown-container}/markdown-container.tsx +3 -1
- package/src/password-input/index.ts +2 -0
- package/src/{stories/PasswordInput.stories.tsx → password-input/password-input.stories.tsx} +1 -1
- package/src/{components → password-input}/password-input.tsx +4 -4
- package/src/picture/index.ts +2 -0
- package/src/{stories/Picture.stories.tsx → picture/picture.stories.tsx} +1 -1
- package/src/{components → picture}/picture.tsx +2 -4
- package/src/protected-email/index.ts +2 -0
- package/src/{stories/ProtectedEmail.stories.tsx → protected-email/protected-email.stories.tsx} +1 -1
- package/src/{components → protected-email}/protected-email.tsx +3 -1
- package/src/tailwind.css +10 -0
- package/src/text/index.ts +2 -0
- package/src/{stories/Text.stories.tsx → text/text.stories.tsx} +1 -1
- package/src/text/text.tsx +46 -0
- package/src/utils/author/author.tsx +36 -0
- package/src/utils/author/index.ts +1 -0
- package/src/utils/text/index.ts +1 -0
- package/src/utils/text/text.tsx +103 -0
- package/dist/components/box.d.ts +0 -20
- package/dist/components/box.js +0 -50
- package/dist/components/definition-list.d.ts +0 -43
- package/dist/components/definition-list.js +0 -89
- package/dist/components/heading.d.ts +0 -27
- package/dist/components/highlight.d.ts +0 -19
- package/dist/components/item.d.ts +0 -70
- package/dist/components/item.js +0 -512
- package/dist/components/leaflet-map.d.ts +0 -34
- package/dist/components/leaflet-map.js +0 -201
- package/dist/components/list-item.d.ts +0 -19
- package/dist/components/list-item.js +0 -37
- package/dist/components/maptiler-map.d.ts +0 -27
- package/dist/components/maptiler-map.js +0 -129
- package/dist/components/text.d.ts +0 -20
- package/dist/components/text.js +0 -45
- package/dist/components/unordered-list.d.ts +0 -19
- package/dist/components/unordered-list.js +0 -39
- package/dist/utils/author.d.ts +0 -9
- package/dist/utils/author.js +0 -55
- package/dist/utils/cn.d.ts +0 -9
- package/dist/utils/cn.js +0 -14
- package/dist/utils/is-route-active.d.ts +0 -19
- package/dist/utils/is-route-active.js +0 -56
- package/dist/utils/text.d.ts +0 -24
- package/dist/utils/text.js +0 -127
- package/src/components/box.tsx +0 -45
- package/src/components/definition-list.tsx +0 -90
- package/src/components/item.tsx +0 -340
- package/src/components/leaflet-map.tsx +0 -294
- package/src/components/link.test.tsx +0 -387
- package/src/components/list-item.tsx +0 -30
- package/src/components/maptiler-map.tsx +0 -181
- package/src/components/text.tsx +0 -38
- package/src/components/unordered-list.tsx +0 -32
- package/src/hooks/use-nonce.test.ts +0 -35
- package/src/stories/BackgroundSlideshow.stories.tsx +0 -68
- package/src/stories/Box.stories.tsx +0 -83
- package/src/stories/Carousel.stories.tsx +0 -95
- package/src/stories/DefinitionList.stories.tsx +0 -51
- package/src/stories/Item.stories.tsx +0 -79
- package/src/stories/ListItem.stories.tsx +0 -38
- package/src/stories/UnorderedList.stories.tsx +0 -73
- package/src/styles/tailwind.css +0 -7
- package/src/test-setup.ts +0 -1
- package/src/utils/author.test.ts +0 -54
- package/src/utils/author.tsx +0 -73
- package/src/utils/cn.test.ts +0 -48
- package/src/utils/cn.ts +0 -14
- package/src/utils/is-route-active.test.ts +0 -80
- package/src/utils/is-route-active.ts +0 -100
- package/src/utils/text.test.ts +0 -152
- package/src/utils/text.tsx +0 -209
- package/src/vite-env.d.ts +0 -1
- /package/dist/{components/background-slideshow.d.ts → background-slideshow/index.d.ts} +0 -0
- /package/dist/{components/blurry-gradient.d.ts → blurry-gradient/index.d.ts} +0 -0
- /package/dist/{components/countdown.d.ts → countdown/index.d.ts} +0 -0
- /package/dist/{components/generic-error.d.ts → generic-error/index.d.ts} +0 -0
- /package/dist/{components/icon-button.d.ts → icon-button/index.d.ts} +0 -0
- /package/dist/{components/if.d.ts → if/index.d.ts} +0 -0
- /package/dist/{components/iframe.d.ts → iframe/index.d.ts} +0 -0
- /package/dist/{components/markdown-container.d.ts → markdown-container/index.d.ts} +0 -0
- /package/dist/{components/password-input.d.ts → password-input/index.d.ts} +0 -0
- /package/dist/{components/picture.d.ts → picture/index.d.ts} +0 -0
- /package/src/{components → icon-button}/icon-button.tsx +0 -0
- /package/src/{components → if}/if.tsx +0 -0
- /package/src/{styles/storybook.css → storybook.css} +0 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { createContext, forwardRef, useMemo, useContext } from 'react';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
// src/list/index.parts.ts
|
|
11
|
+
var index_parts_exports = {};
|
|
12
|
+
__export(index_parts_exports, {
|
|
13
|
+
Item: () => ListItem,
|
|
14
|
+
Root: () => ListRoot
|
|
15
|
+
});
|
|
16
|
+
var ListRootContext = createContext(void 0);
|
|
17
|
+
function useListRootContext() {
|
|
18
|
+
return useContext(ListRootContext);
|
|
19
|
+
}
|
|
20
|
+
function ListItemImpl(props, ref) {
|
|
21
|
+
const context = useListRootContext();
|
|
22
|
+
const { render, children, className, ...elementProps } = props;
|
|
23
|
+
const resolvedElement = render ?? context?.defaultItemElement ?? "li";
|
|
24
|
+
const resolvedClassName = context?.defaultItemClassName ? className ? `${context.defaultItemClassName} ${className}` : context.defaultItemClassName : className;
|
|
25
|
+
const Component = resolvedElement;
|
|
26
|
+
return /* @__PURE__ */ jsx(
|
|
27
|
+
Component,
|
|
28
|
+
{
|
|
29
|
+
className: resolvedClassName,
|
|
30
|
+
ref,
|
|
31
|
+
...elementProps,
|
|
32
|
+
children
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
var ListItem = forwardRef(ListItemImpl);
|
|
37
|
+
function ListRootImpl(props, ref) {
|
|
38
|
+
const {
|
|
39
|
+
render = "ul",
|
|
40
|
+
children,
|
|
41
|
+
defaultItemElement,
|
|
42
|
+
defaultItemClassName,
|
|
43
|
+
...elementProps
|
|
44
|
+
} = props;
|
|
45
|
+
const resolvedDefaultItemElement = defaultItemElement ?? (render === "dl" ? "dd" : "li");
|
|
46
|
+
const contextValue = useMemo(
|
|
47
|
+
() => ({
|
|
48
|
+
defaultItemClassName,
|
|
49
|
+
defaultItemElement: resolvedDefaultItemElement
|
|
50
|
+
}),
|
|
51
|
+
[resolvedDefaultItemElement, defaultItemClassName]
|
|
52
|
+
);
|
|
53
|
+
const Component = render;
|
|
54
|
+
return /* @__PURE__ */ jsx(ListRootContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
|
|
55
|
+
Component,
|
|
56
|
+
{
|
|
57
|
+
ref,
|
|
58
|
+
...elementProps,
|
|
59
|
+
children
|
|
60
|
+
}
|
|
61
|
+
) });
|
|
62
|
+
}
|
|
63
|
+
var ListRoot = forwardRef(ListRootImpl);
|
|
64
|
+
|
|
65
|
+
export { index_parts_exports as List };
|
|
@@ -1,22 +1,11 @@
|
|
|
1
1
|
import { MDXProvider } from '@mdx-js/react';
|
|
2
|
+
import { cn } from '@regardio/tailwind/utils';
|
|
2
3
|
import Markdown from 'markdown-to-jsx';
|
|
3
|
-
import {
|
|
4
|
-
import { twMerge } from 'fluid-tailwindcss/tailwind-merge';
|
|
4
|
+
import { typographicQuotes, replaceShyInString } from '@regardio/js/text';
|
|
5
5
|
import React, { isValidElement, cloneElement } from 'react';
|
|
6
6
|
import { jsx } from 'react/jsx-runtime';
|
|
7
7
|
|
|
8
|
-
// src/
|
|
9
|
-
var { cva, compose } = defineConfig({
|
|
10
|
-
hooks: {
|
|
11
|
-
onComplete: (className) => {
|
|
12
|
-
return twMerge(className);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
var cn = (...inputs) => twMerge(cx(inputs));
|
|
17
|
-
function replaceShyInString(input) {
|
|
18
|
-
return input.replace(/­/g, "\xAD");
|
|
19
|
-
}
|
|
8
|
+
// src/markdown-container/markdown-container.tsx
|
|
20
9
|
function replaceShyInReactNode(node) {
|
|
21
10
|
if (typeof node === "string") {
|
|
22
11
|
return node.replace(/\u00AD/g, "");
|
|
@@ -43,59 +32,6 @@ function shy(input) {
|
|
|
43
32
|
}
|
|
44
33
|
return replaceShyInReactNode(input);
|
|
45
34
|
}
|
|
46
|
-
var quoteStyles = {
|
|
47
|
-
cs: { close: "\u201D", closeSingle: "\u2019", open: "\u201E", openSingle: "\u201A" },
|
|
48
|
-
// Danish, Norwegian - » « › ‹
|
|
49
|
-
da: { close: "\xAB", closeSingle: "\u203A", open: "\xBB", openSingle: "\u2039" },
|
|
50
|
-
// German (Germany, Austria) - „ " ‚ '
|
|
51
|
-
de: { close: "\u201D", closeSingle: "\u2019", open: "\u201E", openSingle: "\u201A" },
|
|
52
|
-
// German (Switzerland) - « » ‹ ›
|
|
53
|
-
"de-ch": { close: "\xBB", closeSingle: "\u203A", open: "\xAB", openSingle: "\u2039" },
|
|
54
|
-
// English (US, UK, etc.) - " " ' '
|
|
55
|
-
en: { close: "\u201D", closeSingle: "\u2019", open: "\u201C", openSingle: "\u2018" },
|
|
56
|
-
// Spanish, Italian, Portuguese - « » " "
|
|
57
|
-
es: { close: "\xBB", closeSingle: "\u201D", open: "\xAB", openSingle: "\u201C" },
|
|
58
|
-
fi: { close: "\u201D", closeSingle: "\u2019", open: "\u201D", openSingle: "\u2019" },
|
|
59
|
-
// French - « » ‹ › (with spaces)
|
|
60
|
-
fr: { close: " \xBB", closeSingle: " \u203A", open: "\xAB ", openSingle: "\u2039 " },
|
|
61
|
-
hu: { close: "\u201D", closeSingle: "\u2019", open: "\u201E", openSingle: "\u201A" },
|
|
62
|
-
it: { close: "\xBB", closeSingle: "\u201D", open: "\xAB", openSingle: "\u201C" },
|
|
63
|
-
// Japanese - 「 」 『 』
|
|
64
|
-
ja: { close: "\u300D", closeSingle: "\u300F", open: "\u300C", openSingle: "\u300E" },
|
|
65
|
-
// Dutch - ' ' ' '
|
|
66
|
-
nl: { close: "\u2019", closeSingle: "\u2019", open: "\u2018", openSingle: "\u2018" },
|
|
67
|
-
no: { close: "\xAB", closeSingle: "\u203A", open: "\xBB", openSingle: "\u2039" },
|
|
68
|
-
// Polish, Czech, Hungarian - „ " ‚ '
|
|
69
|
-
pl: { close: "\u201D", closeSingle: "\u2019", open: "\u201E", openSingle: "\u201A" },
|
|
70
|
-
pt: { close: "\xBB", closeSingle: "\u201D", open: "\xAB", openSingle: "\u201C" },
|
|
71
|
-
// Russian - « » ‚ '
|
|
72
|
-
ru: { close: "\xBB", closeSingle: "\u2019", open: "\xAB", openSingle: "\u201A" },
|
|
73
|
-
// Swedish, Finnish - " " ' '
|
|
74
|
-
sv: { close: "\u201D", closeSingle: "\u2019", open: "\u201D", openSingle: "\u2019" },
|
|
75
|
-
// Chinese - 「 」 『 』
|
|
76
|
-
zh: { close: "\u300D", closeSingle: "\u300F", open: "\u300C", openSingle: "\u300E" }
|
|
77
|
-
};
|
|
78
|
-
function getQuoteStyle(locale) {
|
|
79
|
-
const normalized = locale.toLowerCase();
|
|
80
|
-
const exactMatch = quoteStyles[normalized];
|
|
81
|
-
if (exactMatch) {
|
|
82
|
-
return exactMatch;
|
|
83
|
-
}
|
|
84
|
-
const baseLanguage = normalized.split("-")[0];
|
|
85
|
-
if (baseLanguage) {
|
|
86
|
-
const baseMatch = quoteStyles[baseLanguage];
|
|
87
|
-
if (baseMatch) {
|
|
88
|
-
return baseMatch;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return quoteStyles.en;
|
|
92
|
-
}
|
|
93
|
-
function typographicQuotes(text, locale) {
|
|
94
|
-
const style = getQuoteStyle(locale);
|
|
95
|
-
let result = text.replace(/"([^"]*)"/g, `${style.open}$1${style.close}`);
|
|
96
|
-
result = result.replace(/'([^']*)'/g, `${style.openSingle}$1${style.closeSingle}`);
|
|
97
|
-
return result;
|
|
98
|
-
}
|
|
99
35
|
function replaceSpecialChars(text, locale) {
|
|
100
36
|
return shy(typographicQuotes(text, locale));
|
|
101
37
|
}
|
|
@@ -1,19 +1,10 @@
|
|
|
1
1
|
import { Button } from '@base-ui/react/button';
|
|
2
2
|
import { Input } from '@base-ui/react/input';
|
|
3
|
+
import { cn } from '@regardio/tailwind/utils';
|
|
3
4
|
import { useState } from 'react';
|
|
4
|
-
import { defineConfig, cx } from 'cva';
|
|
5
|
-
import { twMerge } from 'fluid-tailwindcss/tailwind-merge';
|
|
6
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
6
|
|
|
8
|
-
// src/
|
|
9
|
-
var { cva, compose } = defineConfig({
|
|
10
|
-
hooks: {
|
|
11
|
-
onComplete: (className) => {
|
|
12
|
-
return twMerge(className);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
var cn = (...inputs) => twMerge(cx(inputs));
|
|
7
|
+
// src/password-input/password-input.tsx
|
|
17
8
|
var PasswordInput = ({ className, ...props }) => {
|
|
18
9
|
const [showPassword, setShowPassword] = useState(false);
|
|
19
10
|
const togglePasswordVisibility = () => {
|
|
@@ -1,16 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { twMerge } from 'fluid-tailwindcss/tailwind-merge';
|
|
1
|
+
import { cn } from '@regardio/tailwind/utils';
|
|
3
2
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
3
|
|
|
5
|
-
// src/
|
|
6
|
-
var { cva, compose } = defineConfig({
|
|
7
|
-
hooks: {
|
|
8
|
-
onComplete: (className) => {
|
|
9
|
-
return twMerge(className);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
var cn = (...inputs) => twMerge(cx(inputs));
|
|
4
|
+
// src/picture/picture.tsx
|
|
14
5
|
var screenSizeVariants = {
|
|
15
6
|
lg: 1280,
|
|
16
7
|
max: 1920,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useState, useEffect } from 'react';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
|
|
4
|
-
// src/
|
|
4
|
+
// src/protected-email/protected-email.tsx
|
|
5
5
|
function ProtectedEmail({ username, domain, text, className }) {
|
|
6
6
|
const [mounted, setMounted] = useState(false);
|
|
7
7
|
useEffect(() => {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ComponentProps } from 'react';
|
|
3
|
+
|
|
4
|
+
declare const themeColorVariants: {
|
|
5
|
+
readonly primary: readonly [];
|
|
6
|
+
};
|
|
7
|
+
declare const textVariants: {
|
|
8
|
+
readonly code: readonly ["font-light", "font-monospace"];
|
|
9
|
+
readonly primary: readonly [];
|
|
10
|
+
readonly subtitle: readonly ["text-lg"];
|
|
11
|
+
};
|
|
12
|
+
type TextThemeColor = keyof typeof themeColorVariants;
|
|
13
|
+
type TextVariant = keyof typeof textVariants;
|
|
14
|
+
interface TextProps extends ComponentProps<'p'> {
|
|
15
|
+
themeColor?: TextThemeColor;
|
|
16
|
+
variant?: TextVariant;
|
|
17
|
+
}
|
|
18
|
+
declare const Text: ({ children, className, variant, themeColor }: TextProps) => react_jsx_runtime.JSX.Element;
|
|
19
|
+
|
|
20
|
+
export { Text, type TextProps };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { tv } from '@regardio/tailwind/utils';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
// src/text/text.tsx
|
|
5
|
+
var themeColorVariants = {
|
|
6
|
+
primary: []
|
|
7
|
+
};
|
|
8
|
+
var textVariants = {
|
|
9
|
+
code: ["font-light", "font-monospace"],
|
|
10
|
+
primary: [],
|
|
11
|
+
subtitle: ["text-lg"]
|
|
12
|
+
};
|
|
13
|
+
var text = tv({
|
|
14
|
+
base: ["relative", "block"],
|
|
15
|
+
defaultVariants: {
|
|
16
|
+
themeColor: "primary",
|
|
17
|
+
variant: "primary"
|
|
18
|
+
},
|
|
19
|
+
variants: {
|
|
20
|
+
themeColor: themeColorVariants,
|
|
21
|
+
variant: textVariants
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
var Text = ({ children, className, variant, themeColor }) => {
|
|
25
|
+
return /* @__PURE__ */ jsx(
|
|
26
|
+
"div",
|
|
27
|
+
{
|
|
28
|
+
className: text({
|
|
29
|
+
className,
|
|
30
|
+
themeColor,
|
|
31
|
+
variant
|
|
32
|
+
}),
|
|
33
|
+
children
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export { Text };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { parseAuthorString } from '@regardio/js/text';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
// src/utils/author/author.tsx
|
|
5
|
+
function generateLinkFromAuthorString(input) {
|
|
6
|
+
const match = parseAuthorString(input);
|
|
7
|
+
if (match.name) {
|
|
8
|
+
if (match.email) {
|
|
9
|
+
return /* @__PURE__ */ jsx(
|
|
10
|
+
"a",
|
|
11
|
+
{
|
|
12
|
+
className: "u-email p-name",
|
|
13
|
+
href: `mailto:${match.email}`,
|
|
14
|
+
children: match.name
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
if (match.url && (match.url.startsWith("/") || match.url.startsWith("http"))) {
|
|
19
|
+
return /* @__PURE__ */ jsx(
|
|
20
|
+
"a",
|
|
21
|
+
{
|
|
22
|
+
className: "u-url p-name",
|
|
23
|
+
href: match.url,
|
|
24
|
+
children: match.name
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
return /* @__PURE__ */ jsx("span", { className: "p-name", children: match.name });
|
|
29
|
+
}
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { generateLinkFromAuthorString };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
declare const lowerCaseSzett: (text: ReactNode | string, _returnType?: "string") => ReactNode;
|
|
4
|
+
declare function shy(input: string | ReactNode | null): string | ReactNode | null;
|
|
5
|
+
/**
|
|
6
|
+
* Replace special characters in text: typographic quotes and soft hyphens.
|
|
7
|
+
* This is a React-aware version that handles ReactNode trees.
|
|
8
|
+
*/
|
|
9
|
+
declare function replaceSpecialChars(text: string, locale: string): string | ReactNode | null;
|
|
10
|
+
/**
|
|
11
|
+
* Wrap sentences in span elements
|
|
12
|
+
*/
|
|
13
|
+
declare function wrapSentences(text: string): ReactNode;
|
|
14
|
+
|
|
15
|
+
export { lowerCaseSzett, replaceSpecialChars, shy, wrapSentences };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { replaceShyInString, typographicQuotes, splitIntoSentences } from '@regardio/js/text';
|
|
2
|
+
import React, { isValidElement, cloneElement } from 'react';
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
// src/utils/text/text.tsx
|
|
6
|
+
var lowerCaseSzett = (text, _returnType) => {
|
|
7
|
+
const processString = (str) => {
|
|
8
|
+
const parts = str.split(/(ß)/g);
|
|
9
|
+
return parts.map(
|
|
10
|
+
(part, index) => part === "\xDF" ? /* @__PURE__ */ jsx(
|
|
11
|
+
"span",
|
|
12
|
+
{
|
|
13
|
+
className: "lowercase",
|
|
14
|
+
children: part
|
|
15
|
+
},
|
|
16
|
+
index.toString()
|
|
17
|
+
) : part
|
|
18
|
+
);
|
|
19
|
+
};
|
|
20
|
+
if (typeof text === "string") {
|
|
21
|
+
return processString(text);
|
|
22
|
+
}
|
|
23
|
+
if (isValidElement(text)) {
|
|
24
|
+
const element = text;
|
|
25
|
+
const { children, ...props } = element.props;
|
|
26
|
+
return cloneElement(element, {
|
|
27
|
+
...props,
|
|
28
|
+
children: lowerCaseSzett(children)
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
if (Array.isArray(text)) {
|
|
32
|
+
return text.map((child, index) => /* @__PURE__ */ jsx(React.Fragment, { children: lowerCaseSzett(child) }, index.toString()));
|
|
33
|
+
}
|
|
34
|
+
return text;
|
|
35
|
+
};
|
|
36
|
+
function replaceShyInReactNode(node) {
|
|
37
|
+
if (typeof node === "string") {
|
|
38
|
+
return node.replace(/\u00AD/g, "");
|
|
39
|
+
}
|
|
40
|
+
if (isValidElement(node)) {
|
|
41
|
+
const element = node;
|
|
42
|
+
const { children, ...props } = element.props;
|
|
43
|
+
return cloneElement(element, {
|
|
44
|
+
...props,
|
|
45
|
+
children: replaceShyInReactNode(children)
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
if (Array.isArray(node)) {
|
|
49
|
+
return node.map((child, index) => /* @__PURE__ */ jsx(React.Fragment, { children: replaceShyInReactNode(child) }, index.toString()));
|
|
50
|
+
}
|
|
51
|
+
return node;
|
|
52
|
+
}
|
|
53
|
+
function shy(input) {
|
|
54
|
+
if (input === null) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
if (typeof input === "string") {
|
|
58
|
+
return replaceShyInString(input);
|
|
59
|
+
}
|
|
60
|
+
return replaceShyInReactNode(input);
|
|
61
|
+
}
|
|
62
|
+
function replaceSpecialChars(text, locale) {
|
|
63
|
+
return shy(typographicQuotes(text, locale));
|
|
64
|
+
}
|
|
65
|
+
function wrapSentences(text) {
|
|
66
|
+
const sentences = splitIntoSentences(text);
|
|
67
|
+
return sentences.map((sentence, index) => /* @__PURE__ */ jsxs("span", { children: [
|
|
68
|
+
sentence,
|
|
69
|
+
" "
|
|
70
|
+
] }, index.toString()));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export { lowerCaseSzett, replaceSpecialChars, shy, wrapSentences };
|