@donotdev/ui 0.0.12 → 0.0.13
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/common/FeatureCard.js +1 -1
- package/dist/components/common/RedirectOverlay.js +1 -1
- package/dist/components/cookie-consent/CookieConsent.js +3 -3
- package/dist/components/layout/GameContainer.d.ts +24 -8
- package/dist/components/layout/GameContainer.d.ts.map +1 -1
- package/dist/components/layout/GameContainer.js +21 -3
- package/dist/components/layout/GameFlow.d.ts.map +1 -1
- package/dist/components/layout/GameFlow.js +27 -11
- package/dist/components/layout/components/header/CacheSettings.js +1 -1
- package/dist/crud/components/EntityCardList.d.ts.map +1 -1
- package/dist/crud/components/EntityCardList.js +16 -10
- package/dist/crud/components/EntityDisplayRenderer.js +2 -2
- package/dist/crud/components/EntityFormRenderer.d.ts.map +1 -1
- package/dist/crud/components/EntityList.d.ts.map +1 -1
- package/dist/crud/components/EntityList.js +7 -9
- package/dist/crud/components/Form.js +1 -1
- package/dist/dndev.css +99 -39
- package/dist/index.js +4 -4
- package/dist/internal/common/RouteErrorFallback.js +3 -3
- package/dist/internal/devtools/components/ConfigTab.js +1 -1
- package/dist/internal/devtools/components/CookieTab.js +1 -1
- package/dist/internal/devtools/components/DesignTab.js +2 -2
- package/dist/internal/devtools/components/StoresTab.js +2 -2
- package/dist/internal/layout/zones/DnDevFooter.js +1 -1
- package/dist/internal/layout/zones/DnDevMergedBar.js +1 -1
- package/dist/routing/404.js +3 -3
- package/dist/routing/AuthGuardFallback.js +2 -2
- package/dist/styles/index.css +99 -39
- package/package.json +1 -1
|
@@ -104,7 +104,7 @@ export const RouteErrorFallback = ({ error, resetError, componentStack, eventId,
|
|
|
104
104
|
width: '2.5rem',
|
|
105
105
|
height: '2.5rem',
|
|
106
106
|
color: 'var(--destructive)',
|
|
107
|
-
}, "aria-hidden": "true" }) }), _jsxs(Stack, {
|
|
107
|
+
}, "aria-hidden": "true" }) }), _jsxs(Stack, { children: [_jsx("h1", { className: "dndev-text-base", "data-level": "h1", style: {
|
|
108
108
|
fontSize: 'var(--font-size-2xl)',
|
|
109
109
|
fontWeight: 'var(--font-weight-bold)',
|
|
110
110
|
margin: 0,
|
|
@@ -119,7 +119,7 @@ export const RouteErrorFallback = ({ error, resetError, componentStack, eventId,
|
|
|
119
119
|
fontSize: 'var(--font-size-xs)',
|
|
120
120
|
fontFamily: 'var(--font-mono)',
|
|
121
121
|
color: 'var(--foreground)',
|
|
122
|
-
}, children: [t('routeError.errorId', 'Error ID'), ": ", eventId] })), isDevelopment && errorMessage && (_jsxs(Card, { variant: CARD_VARIANT.MUTED, className: "dndev-w-full", children: [_jsxs(Stack, { direction: "row", align: "center", justify: "between",
|
|
122
|
+
}, children: [t('routeError.errorId', 'Error ID'), ": ", eventId] })), isDevelopment && errorMessage && (_jsxs(Card, { variant: CARD_VARIANT.MUTED, className: "dndev-w-full", children: [_jsxs(Stack, { direction: "row", align: "center", justify: "between", children: [_jsx("span", { className: "dndev-text-base", style: {
|
|
123
123
|
fontSize: 'var(--font-size-sm)',
|
|
124
124
|
fontWeight: 'var(--font-weight-semibold)',
|
|
125
125
|
color: 'var(--destructive)',
|
|
@@ -133,7 +133,7 @@ export const RouteErrorFallback = ({ error, resetError, componentStack, eventId,
|
|
|
133
133
|
color: 'var(--foreground)',
|
|
134
134
|
margin: 0,
|
|
135
135
|
marginTop: 'var(--gap-sm)',
|
|
136
|
-
}, children: errorMessage })] })), _jsxs(Stack, {
|
|
136
|
+
}, children: errorMessage })] })), _jsxs(Stack, { className: "dndev-w-full", children: [_jsx(Button, { variant: BUTTON_VARIANT.DESTRUCTIVE, icon: RotateCw, onClick: handleRetry, fullWidth: true, children: t('routeError.tryAgain', 'Try Again') }), _jsxs(Stack, { direction: "row", justify: "center", children: [_jsx(Link, { path: "/", children: _jsx(Button, { variant: BUTTON_VARIANT.DEFAULT, icon: Home, fullWidth: true, children: t('routeError.goHome', 'Go Home') }) }), _jsx(Button, { variant: BUTTON_VARIANT.OUTLINE, icon: ArrowLeft, onClick: handleGoBack, fullWidth: true, children: t('routeError.goBack', 'Go Back') })] })] }), _jsx("p", { className: "dndev-text-base", style: {
|
|
137
137
|
fontSize: 'var(--font-size-sm)',
|
|
138
138
|
color: 'var(--muted-foreground)',
|
|
139
139
|
margin: 0,
|
|
@@ -57,5 +57,5 @@ export const ConfigTab = () => {
|
|
|
57
57
|
label: _jsx(Text, { className: "dndev-font-mono dndev-text-xs", children: key }),
|
|
58
58
|
value: _jsx(MaskedValue, { keyName: key, value: String(value) }),
|
|
59
59
|
}));
|
|
60
|
-
return (_jsxs(Stack, {
|
|
60
|
+
return (_jsxs(Stack, { style: { padding: 'var(--gap-md)' }, children: [_jsx(Card, { title: "Framework", subtitle: source.source, children: _jsx(DescriptionList, { items: frameworkItems }) }), summaryItems.length > 0 && (_jsx(Card, { title: "Discovery", children: _jsx(DescriptionList, { items: summaryItems }) })), envItems.length > 0 && (_jsx(Card, { title: "Environment", subtitle: `${envItems.length} variables`, children: _jsx(DescriptionList, { items: envItems }) }))] }));
|
|
61
61
|
};
|
|
@@ -144,7 +144,7 @@ export const CookieTab = () => {
|
|
|
144
144
|
categories,
|
|
145
145
|
timestamp,
|
|
146
146
|
version,
|
|
147
|
-
}), variant: BUTTON_VARIANT.GHOST, onCopy: () => toast('success', 'Consent state copied') })] }), children: _jsx(DescriptionList, { items: consentStateItems }) }), _jsx(Card, { title: _jsxs(Stack, { direction: "row", align: "center", justify: "between", className: "dndev-w-full", children: [_jsx("span", { children: "Categories" }), _jsx(CopyToClipboard, { text: formatJSON(categories), variant: BUTTON_VARIANT.GHOST, onCopy: () => toast('success', 'Categories copied') })] }), children: _jsx(DescriptionList, { items: categoryItems }) }), _jsx(Card, { title: _jsxs(Stack, { direction: "row", align: "center", justify: "between", className: "dndev-w-full", children: [_jsx("span", { children: "Cookie Value" }), _jsxs(Stack, { direction: "row", gap: "tight", children: [_jsx(CopyToClipboard, { text: cookieValue || 'null', variant: BUTTON_VARIANT.GHOST, onCopy: () => toast('success', 'Cookie value copied') }), _jsx(Button, { onClick: handleClearCookie, icon: Trash2, variant: BUTTON_VARIANT.GHOST, title: "Clear Cookie", children: "Clear" })] })] }), children: _jsx("pre", { className: "dndev-overflow-y-auto dndev-font-mono dndev-text-xs dndev-max-h-60", children: cookieValue || 'No cookie found' }) }), _jsx(Card, { title: _jsxs(Stack, { direction: "row", align: "center", justify: "between", className: "dndev-w-full", children: [_jsx("span", { children: "DOM Elements" }), _jsx(CopyToClipboard, { text: formatJSON(domInfo), variant: BUTTON_VARIANT.GHOST, onCopy: () => toast('success', 'DOM info copied') })] }), children: _jsxs(Stack, {
|
|
147
|
+
}), variant: BUTTON_VARIANT.GHOST, onCopy: () => toast('success', 'Consent state copied') })] }), children: _jsx(DescriptionList, { items: consentStateItems }) }), _jsx(Card, { title: _jsxs(Stack, { direction: "row", align: "center", justify: "between", className: "dndev-w-full", children: [_jsx("span", { children: "Categories" }), _jsx(CopyToClipboard, { text: formatJSON(categories), variant: BUTTON_VARIANT.GHOST, onCopy: () => toast('success', 'Categories copied') })] }), children: _jsx(DescriptionList, { items: categoryItems }) }), _jsx(Card, { title: _jsxs(Stack, { direction: "row", align: "center", justify: "between", className: "dndev-w-full", children: [_jsx("span", { children: "Cookie Value" }), _jsxs(Stack, { direction: "row", gap: "tight", children: [_jsx(CopyToClipboard, { text: cookieValue || 'null', variant: BUTTON_VARIANT.GHOST, onCopy: () => toast('success', 'Cookie value copied') }), _jsx(Button, { onClick: handleClearCookie, icon: Trash2, variant: BUTTON_VARIANT.GHOST, title: "Clear Cookie", children: "Clear" })] })] }), children: _jsx("pre", { className: "dndev-overflow-y-auto dndev-font-mono dndev-text-xs dndev-max-h-60", children: cookieValue || 'No cookie found' }) }), _jsx(Card, { title: _jsxs(Stack, { direction: "row", align: "center", justify: "between", className: "dndev-w-full", children: [_jsx("span", { children: "DOM Elements" }), _jsx(CopyToClipboard, { text: formatJSON(domInfo), variant: BUTTON_VARIANT.GHOST, onCopy: () => toast('success', 'DOM info copied') })] }), children: _jsxs(Stack, { children: [_jsxs("div", { children: [_jsx(Label, { className: "dndev-font-semibold", children: "Cookie Banner:" }), _jsxs(Stack, { gap: "tight", className: "dndev-ml-md", children: [_jsxs(Text, { children: ["Exists: ", domInfo.cookieBanner?.exists ? '✅' : '❌'] }), _jsxs(Text, { children: ["Visible: ", domInfo.cookieBanner?.visible ? '✅' : '❌'] }), _jsxs(Text, { children: ["z-index: ", domInfo.cookieBanner?.zIndex || 'N/A'] }), _jsxs(Text, { children: ["Position: ", domInfo.cookieBanner?.position || 'N/A'] })] })] }), _jsxs("div", { children: [_jsx(Label, { className: "dndev-font-semibold", children: "Dialogs:" }), _jsxs(Stack, { gap: "tight", className: "dndev-ml-md", children: [_jsxs(Text, { children: ["Count: ", domInfo.dialogs?.count || 0] }), _jsxs(Text, { children: ["Open: ", domInfo.dialogs?.open || 0] })] })] }), _jsxs("div", { children: [_jsx(Label, { className: "dndev-font-semibold", children: "Overlays:" }), _jsxs(Stack, { gap: "tight", className: "dndev-ml-md", children: [_jsxs(Text, { children: ["Count: ", domInfo.overlays?.count || 0] }), _jsxs(Text, { children: ["Visible: ", domInfo.overlays?.visible || 0] })] })] }), _jsxs("div", { children: [_jsx(Label, { className: "dndev-font-semibold", children: "Portals:" }), _jsx(Stack, { gap: "tight", className: "dndev-ml-md", children: _jsxs(Text, { children: ["Count: ", domInfo.portals?.count || 0] }) })] })] }) }), _jsx(Card, { title: _jsxs(Stack, { direction: "row", align: "center", justify: "between", className: "dndev-w-full", children: [_jsx("span", { children: "Z-Index Stacking" }), _jsx(CopyToClipboard, { text: formatJSON(zIndexInfo), variant: BUTTON_VARIANT.GHOST, onCopy: () => toast('success', 'Z-index info copied') })] }), children: _jsxs(Stack, { children: [_jsxs("div", { children: [_jsx(Label, { className: "dndev-font-semibold", children: "CSS Variables:" }), _jsx(Stack, { gap: "tight", className: "dndev-ml-md dndev-font-mono dndev-text-sm", children: Object.entries(zIndexInfo.cssVariables || {}).map(([key, value]) => (_jsxs(Text, { children: [key, ": ", String(value) || 'not set'] }, key))) })] }), _jsxs("div", { children: [_jsx(Label, { className: "dndev-font-semibold", children: "Computed Values:" }), _jsx(Stack, { gap: "tight", className: "dndev-ml-md dndev-font-mono dndev-text-sm", children: Object.entries(zIndexInfo.computed || {}).map(([key, value]) => (_jsxs(Text, { children: [key, ": ", String(value)] }, key))) })] })] }) }), _jsx(Card, { title: _jsxs(Stack, { direction: "row", align: "center", justify: "between", className: "dndev-w-full", children: [_jsx("span", { children: "Full Store State" }), _jsx(CopyToClipboard, { text: formatJSON({
|
|
148
148
|
hasConsented,
|
|
149
149
|
categories,
|
|
150
150
|
timestamp,
|
|
@@ -359,11 +359,11 @@ export const DesignTab = () => {
|
|
|
359
359
|
colorRatio.secondary <= 40 &&
|
|
360
360
|
colorRatio.accent >= 5 &&
|
|
361
361
|
colorRatio.accent <= 20;
|
|
362
|
-
return (_jsxs(Stack, {
|
|
362
|
+
return (_jsxs(Stack, { style: { padding: 'var(--gap-md)' }, children: [_jsx(Accordion, { type: "single", collapsible: true, items: [
|
|
363
363
|
{
|
|
364
364
|
value: 'theme',
|
|
365
365
|
trigger: _jsx("span", { children: "Theme Info" }),
|
|
366
|
-
content: (_jsxs(Stack, {
|
|
366
|
+
content: (_jsxs(Stack, { children: [_jsx(Card, { title: "Theme", subtitle: currentTheme, children: _jsx(DescriptionList, { items: themeItems }) }), _jsx(Card, { title: "CSS Variables", subtitle: `${Object.keys(cssVars).length} variables`, children: _jsx(ScrollArea, { className: "dndev-max-h-48", children: _jsx(Stack, { gap: "tight", children: Object.entries(cssVars).map(([name, value]) => (_jsxs(Stack, { direction: "row", align: "center", justify: "between", gap: "tight", children: [_jsx(Text, { className: "dndev-font-mono dndev-text-xs", children: name }), _jsxs(Stack, { direction: "row", align: "center", gap: "tight", children: [_jsx("div", { style: {
|
|
367
367
|
width: '1rem',
|
|
368
368
|
height: '1rem',
|
|
369
369
|
backgroundColor: `var(${name})`,
|
|
@@ -59,9 +59,9 @@ export const StoresTab = () => {
|
|
|
59
59
|
}, [refreshStores]);
|
|
60
60
|
const getDisplayName = (name) => STORE_NAMES[name] || name.replace(/-store$/, '').replace(/-/g, ' ');
|
|
61
61
|
if (storeNames.length === 0) {
|
|
62
|
-
return (_jsx(Stack, {
|
|
62
|
+
return (_jsx(Stack, { style: { padding: 'var(--gap-md)' }, children: _jsx(Card, { title: "Stores", subtitle: "No stores registered", children: _jsx(Text, { className: "dndev-text-muted-foreground", children: "globalThis._DNDEV_STORES_ is empty or not initialized." }) }) }));
|
|
63
63
|
}
|
|
64
|
-
return (_jsx(Stack, {
|
|
64
|
+
return (_jsx(Stack, { style: { padding: 'var(--gap-md)' }, children: _jsx(Card, { title: _jsxs(Stack, { direction: "row", align: "center", justify: "between", className: "dndev-w-full", children: [_jsx("span", { children: "Stores" }), _jsxs(Stack, { direction: "row", align: "center", gap: "tight", children: [_jsx(Badge, { variant: BADGE_VARIANT.SECONDARY, children: storeNames.length }), _jsx(Button, { variant: BUTTON_VARIANT.GHOST, icon: RefreshCw, onClick: refreshStores, title: "Refresh stores" })] })] }), children: _jsx(Accordion, { type: "single", collapsible: true, items: storeNames.map((name) => {
|
|
65
65
|
const state = storeStates[name];
|
|
66
66
|
const hasError = state?._error;
|
|
67
67
|
return {
|
|
@@ -49,7 +49,7 @@ function DnDevFooterComponent({ app = {} }) {
|
|
|
49
49
|
: copyrightConfig;
|
|
50
50
|
// Desktop/Wide: 2-zone layout [Copyright] | [Links + DoNotDev]
|
|
51
51
|
if (isLaptopOrDesktop) {
|
|
52
|
-
return (_jsx("footer", { role: "contentinfo", className: "footer", children: _jsxs(Stack, { direction: "row", align: "center", justify: "between", gap: "none", children: [showCopyright && (_jsx("div", { className: "dndev-flex dndev-justify-start", children: _jsx("span", { className: "footer-copyright", children: copyrightText }) })), _jsx("div", { className: "dndev-flex dndev-justify-end", children: _jsxs(Stack, { direction: "row",
|
|
52
|
+
return (_jsx("footer", { role: "contentinfo", className: "footer", children: _jsxs(Stack, { direction: "row", align: "center", justify: "between", gap: "none", children: [showCopyright && (_jsx("div", { className: "dndev-flex dndev-justify-start", children: _jsx("span", { className: "footer-copyright", children: copyrightText }) })), _jsx("div", { className: "dndev-flex dndev-justify-end", children: _jsxs(Stack, { direction: "row", align: "center", children: [links.map((link) => (_jsx(Link, { path: link.path, style: { fontSize: 'var(--font-size-xs)' }, children: maybeTranslate(t, link.label) }, link.path))), _jsx(FooterBranding, {})] }) })] }) }));
|
|
53
53
|
}
|
|
54
54
|
// Mobile/Tablet: stacked layout
|
|
55
55
|
return (_jsx("footer", { role: "contentinfo", className: "footer", children: _jsxs(Stack, { align: "center", gap: "tight", children: [showCopyright && (_jsx("span", { className: "footer-copyright", children: copyrightText })), _jsxs(Stack, { direction: "row", wrap: "wrap", gap: "tight", justify: "center", align: "center", children: [links.map((link) => (_jsx(Link, { path: link.path, style: { fontSize: 'var(--font-size-xs)' }, children: maybeTranslate(t, link.label) }, link.path))), _jsx(FooterBranding, {})] })] }) }));
|
|
@@ -36,7 +36,7 @@ function DnDevMergedBarComponent({ position, height, trigger, top, content, bott
|
|
|
36
36
|
setOpen(false);
|
|
37
37
|
}, [location.pathname]);
|
|
38
38
|
// Build sheet content
|
|
39
|
-
const sheetNode = (_jsxs(Stack, { direction: "column",
|
|
39
|
+
const sheetNode = (_jsxs(Stack, { direction: "column", className: "merged-bar-sheet-content", children: [top && (_jsxs(_Fragment, { children: [top, _jsx(Separator, { variant: SEPARATOR_VARIANT.MUTED })] })), content && _jsx("div", { className: "merged-bar-sheet-scroll", children: content }), bottom && (_jsxs(_Fragment, { children: [_jsx(Separator, { variant: SEPARATOR_VARIANT.MUTED }), bottom] }))] }));
|
|
40
40
|
const triggerButton = (_jsx(Button, { variant: BUTTON_VARIANT.GHOST, icon: Icon, "aria-label": "Open navigation" }));
|
|
41
41
|
return (_jsx("div", { className: "merged-bar", "data-position": position, children: _jsxs(Stack, { direction: "row", align: "center", justify: "between", className: "merged-bar-trigger", children: [trigger, _jsx(Sheet, { trigger: triggerButton, side: sheetSide, open: open, onOpenChange: setOpen, title: t('sheet.navigation', { defaultValue: 'Navigation' }), children: sheetNode })] }) }));
|
|
42
42
|
}
|
package/dist/routing/404.js
CHANGED
|
@@ -64,7 +64,7 @@ export default function NotFoundPage() {
|
|
|
64
64
|
const handleBack = () => {
|
|
65
65
|
navigate('back');
|
|
66
66
|
};
|
|
67
|
-
return (_jsx(PageContainer, { variant: "docs", centered: true, children: _jsxs(Stack, { gap: "large", align: "center", justify: "center", children: [_jsxs(Stack, {
|
|
67
|
+
return (_jsx(PageContainer, { variant: "docs", centered: true, children: _jsxs(Stack, { gap: "large", align: "center", justify: "center", children: [_jsxs(Stack, { align: "center", children: [_jsx(Text, { level: "h1", style: {
|
|
68
68
|
fontSize: 'clamp(4rem, 12vw, 8rem)',
|
|
69
69
|
fontWeight: 'var(--font-weight-bold)',
|
|
70
70
|
lineHeight: 1,
|
|
@@ -95,10 +95,10 @@ export default function NotFoundPage() {
|
|
|
95
95
|
overflow: 'hidden',
|
|
96
96
|
textOverflow: 'ellipsis',
|
|
97
97
|
border: '1px solid var(--border-hairline)',
|
|
98
|
-
}, children: location.pathname }))] }), suggestedRoutes.length > 0 && (_jsxs(Stack, {
|
|
98
|
+
}, children: location.pathname }))] }), suggestedRoutes.length > 0 && (_jsxs(Stack, { align: "center", children: [_jsx("p", { className: "dndev-text-base", style: {
|
|
99
99
|
fontSize: 'var(--font-size-md)',
|
|
100
100
|
fontWeight: 'var(--font-weight-semibold)',
|
|
101
101
|
margin: 0,
|
|
102
102
|
color: 'var(--muted-foreground)',
|
|
103
|
-
}, children: t('errors.notFound.suggestions', 'You might be looking for:') }), _jsx(Stack, { direction: "row", wrap: "wrap", justify: "center", gap: "tight", children: suggestedRoutes.map((route) => (_jsx(Link, { path: route.path, replace: true, children: _jsx(Button, { variant: BUTTON_VARIANT.OUTLINE, icon: _jsx(Icon, { icon: route.icon, fallback: LinkIcon }), "aria-label": t('errors.notFound.navigateTo', `Navigate to ${route.label}`, { label: route.label }), children: route.label }) }, route.path))) })] })), _jsxs(Stack, { direction: "row", wrap: "wrap", justify: "center",
|
|
103
|
+
}, children: t('errors.notFound.suggestions', 'You might be looking for:') }), _jsx(Stack, { direction: "row", wrap: "wrap", justify: "center", gap: "tight", children: suggestedRoutes.map((route) => (_jsx(Link, { path: route.path, replace: true, children: _jsx(Button, { variant: BUTTON_VARIANT.OUTLINE, icon: _jsx(Icon, { icon: route.icon, fallback: LinkIcon }), "aria-label": t('errors.notFound.navigateTo', `Navigate to ${route.label}`, { label: route.label }), children: route.label }) }, route.path))) })] })), _jsxs(Stack, { direction: "row", wrap: "wrap", justify: "center", children: [_jsx(Link, { path: "/", replace: true, children: _jsx(Button, { variant: BUTTON_VARIANT.DEFAULT, icon: Home, "aria-label": t('errors.notFound.goHome', 'Go to home page'), children: t('errors.notFound.goHome', 'Go Home') }) }), _jsx(Button, { variant: BUTTON_VARIANT.OUTLINE, icon: ArrowLeft, onClick: handleBack, "aria-label": t('errors.notFound.goBack', 'Go back to previous page'), children: t('errors.notFound.goBack', 'Go Back') })] })] }) }));
|
|
104
104
|
}
|
|
@@ -50,14 +50,14 @@ export function AuthGuardFallback({ title, description, showBackButton = true, o
|
|
|
50
50
|
maxWidth: '28rem',
|
|
51
51
|
border: 'none',
|
|
52
52
|
boxShadow: 'var(--shadow-xl)',
|
|
53
|
-
}, title: _jsxs(Stack, {
|
|
53
|
+
}, title: _jsxs(Stack, { children: [_jsx(Stack, { justify: "center", children: _jsx("div", { style: {
|
|
54
54
|
borderRadius: '9999px',
|
|
55
55
|
backgroundColor: 'color-mix(in oklab, var(--primary) 10%, transparent)',
|
|
56
56
|
padding: 'var(--gap-md)',
|
|
57
57
|
}, children: _jsx(Lock, { className: "dndev-size-touch", style: { color: 'var(--primary)' } }) }) }), _jsx("div", { style: {
|
|
58
58
|
fontSize: 'var(--font-size-2xl)',
|
|
59
59
|
fontWeight: 700,
|
|
60
|
-
}, children: t('auth.fallback.title', 'Authentication Required') }), _jsx("p", { style: { color: 'var(--muted-foreground)' }, children: t('auth.fallback.description', 'Please sign in to access this page') })] }), children: _jsxs(Stack, {
|
|
60
|
+
}, children: t('auth.fallback.title', 'Authentication Required') }), _jsx("p", { style: { color: 'var(--muted-foreground)' }, children: t('auth.fallback.description', 'Please sign in to access this page') })] }), children: _jsxs(Stack, { children: [_jsxs(Stack, { gap: "large", children: [_jsx("div", { children: _jsx("p", { style: {
|
|
61
61
|
fontSize: 'var(--font-size-sm)',
|
|
62
62
|
color: 'var(--muted-foreground)',
|
|
63
63
|
}, children: t('auth.fallback.chooseProvider') }) }), _jsx(Suspense, { fallback: _jsx("div", { children: "Loading providers..." }), children: _jsx(MultipleAuthProviders, { layout: "vertical", spacing: "tight", fullWidth: true, ariaLabel: t('auth.fallback.authOptions') }) })] }), showBackButton && (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsx("div", { children: _jsx(Button, { onClick: handleBack, className: "dndev-gap-sm", icon: ArrowLeft, children: t('common.back') }) })] })), _jsxs(Stack, { gap: "tight", style: {
|
package/dist/styles/index.css
CHANGED
|
@@ -3143,7 +3143,6 @@ em {
|
|
|
3143
3143
|
flex-direction: row;
|
|
3144
3144
|
gap: var(--gap-md);
|
|
3145
3145
|
justify-content: center;
|
|
3146
|
-
|
|
3147
3146
|
}
|
|
3148
3147
|
|
|
3149
3148
|
.dndev-cta-actions .dndev-interactive {
|
|
@@ -7531,6 +7530,10 @@ input[type='number'] {
|
|
|
7531
7530
|
font-weight: var(--font-weight-bold);
|
|
7532
7531
|
}
|
|
7533
7532
|
|
|
7533
|
+
.dndev-text-base[data-italic] {
|
|
7534
|
+
font-style: italic;
|
|
7535
|
+
}
|
|
7536
|
+
|
|
7534
7537
|
/* packages/components/src/atomic/Toaster/Toaster.css */
|
|
7535
7538
|
|
|
7536
7539
|
.dndev-toast-viewport {
|
|
@@ -7730,8 +7733,9 @@ input[type='number'] {
|
|
|
7730
7733
|
|
|
7731
7734
|
.dndev-toggle-group {
|
|
7732
7735
|
display: inline-flex;
|
|
7736
|
+
flex-wrap: wrap;
|
|
7733
7737
|
align-items: center;
|
|
7734
|
-
gap:
|
|
7738
|
+
gap: var(--gap-sm);
|
|
7735
7739
|
padding: 0.125rem;
|
|
7736
7740
|
border-radius: var(--radius-interactive);
|
|
7737
7741
|
background-color: var(--muted);
|
|
@@ -7927,12 +7931,16 @@ input[type='number'] {
|
|
|
7927
7931
|
|
|
7928
7932
|
.dndev-video-dialog {
|
|
7929
7933
|
max-width: 90vw;
|
|
7930
|
-
max-height: 90vh;
|
|
7931
7934
|
}
|
|
7932
7935
|
|
|
7933
7936
|
.dndev-video-dialog .dndev-modal-body {
|
|
7934
7937
|
padding: 0;
|
|
7938
|
+
overflow: hidden;
|
|
7939
|
+
}
|
|
7940
|
+
|
|
7941
|
+
.dndev-video-dialog .dndev-video-frame {
|
|
7935
7942
|
aspect-ratio: 16/9;
|
|
7943
|
+
max-height: calc(90vh - 5rem);
|
|
7936
7944
|
}
|
|
7937
7945
|
|
|
7938
7946
|
/* 6. Animation keyframes */
|
|
@@ -9076,6 +9084,8 @@ h4[data-variant='code'] {
|
|
|
9076
9084
|
/* Narrow content (mobile-first PWA, app-like single column) - single source of truth */
|
|
9077
9085
|
--narrow-content-max: 37.5rem;
|
|
9078
9086
|
/* 600px */
|
|
9087
|
+
--narrow-form-max: 30rem;
|
|
9088
|
+
/* 480px - inner form/input width within narrow layout */
|
|
9079
9089
|
|
|
9080
9090
|
/* Content Area Calculations */
|
|
9081
9091
|
/* Header content area (excludes sidebar on some presets) */
|
|
@@ -9186,7 +9196,8 @@ main[role='main'][data-routing-animation='fade'] {
|
|
|
9186
9196
|
/* Slide animation - keyframes handle opacity 0→1 */
|
|
9187
9197
|
|
|
9188
9198
|
main[role='main'][data-routing-animation='slide'] {
|
|
9189
|
-
animation: routeSlideIn var(--routing-default-duration, 300ms) ease-in
|
|
9199
|
+
animation: routeSlideIn var(--routing-default-duration, 300ms) ease-in
|
|
9200
|
+
forwards;
|
|
9190
9201
|
}
|
|
9191
9202
|
|
|
9192
9203
|
/* No animation - already visible by default, explicit for clarity */
|
|
@@ -9200,11 +9211,15 @@ main[role='main'][data-routing-animation='none'] {
|
|
|
9200
9211
|
|
|
9201
9212
|
@media (width < 768px) {
|
|
9202
9213
|
main[role='main'][data-routing-animation='fade'] {
|
|
9203
|
-
animation: routeFadeIn
|
|
9214
|
+
animation: routeFadeIn
|
|
9215
|
+
var(--routing-mobile-duration, var(--routing-default-duration, 300ms))
|
|
9216
|
+
ease-in forwards;
|
|
9204
9217
|
}
|
|
9205
9218
|
|
|
9206
9219
|
main[role='main'][data-routing-animation='slide'] {
|
|
9207
|
-
animation: routeSlideIn
|
|
9220
|
+
animation: routeSlideIn
|
|
9221
|
+
var(--routing-mobile-duration, var(--routing-default-duration, 300ms))
|
|
9222
|
+
ease-in forwards;
|
|
9208
9223
|
}
|
|
9209
9224
|
}
|
|
9210
9225
|
|
|
@@ -9212,11 +9227,15 @@ main[role='main'][data-routing-animation='none'] {
|
|
|
9212
9227
|
|
|
9213
9228
|
@media (width >=768px) and (width <=1023px) {
|
|
9214
9229
|
main[role='main'][data-routing-animation='fade'] {
|
|
9215
|
-
animation: routeFadeIn
|
|
9230
|
+
animation: routeFadeIn
|
|
9231
|
+
var(--routing-tablet-duration, var(--routing-default-duration, 300ms))
|
|
9232
|
+
ease-in forwards;
|
|
9216
9233
|
}
|
|
9217
9234
|
|
|
9218
9235
|
main[role='main'][data-routing-animation='slide'] {
|
|
9219
|
-
animation: routeSlideIn
|
|
9236
|
+
animation: routeSlideIn
|
|
9237
|
+
var(--routing-tablet-duration, var(--routing-default-duration, 300ms))
|
|
9238
|
+
ease-in forwards;
|
|
9220
9239
|
}
|
|
9221
9240
|
}
|
|
9222
9241
|
|
|
@@ -9224,11 +9243,15 @@ main[role='main'][data-routing-animation='none'] {
|
|
|
9224
9243
|
|
|
9225
9244
|
@media (width >=1024px) and (width <=1439px) {
|
|
9226
9245
|
main[role='main'][data-routing-animation='fade'] {
|
|
9227
|
-
animation: routeFadeIn
|
|
9246
|
+
animation: routeFadeIn
|
|
9247
|
+
var(--routing-desktop-duration, var(--routing-default-duration, 300ms))
|
|
9248
|
+
ease-in forwards;
|
|
9228
9249
|
}
|
|
9229
9250
|
|
|
9230
9251
|
main[role='main'][data-routing-animation='slide'] {
|
|
9231
|
-
animation: routeSlideIn
|
|
9252
|
+
animation: routeSlideIn
|
|
9253
|
+
var(--routing-desktop-duration, var(--routing-default-duration, 300ms))
|
|
9254
|
+
ease-in forwards;
|
|
9232
9255
|
}
|
|
9233
9256
|
}
|
|
9234
9257
|
|
|
@@ -9236,11 +9259,15 @@ main[role='main'][data-routing-animation='none'] {
|
|
|
9236
9259
|
|
|
9237
9260
|
@media (width >=1440px) {
|
|
9238
9261
|
main[role='main'][data-routing-animation='fade'] {
|
|
9239
|
-
animation: routeFadeIn
|
|
9262
|
+
animation: routeFadeIn
|
|
9263
|
+
var(--routing-wide-duration, var(--routing-default-duration, 300ms))
|
|
9264
|
+
ease-in forwards;
|
|
9240
9265
|
}
|
|
9241
9266
|
|
|
9242
9267
|
main[role='main'][data-routing-animation='slide'] {
|
|
9243
|
-
animation: routeSlideIn
|
|
9268
|
+
animation: routeSlideIn
|
|
9269
|
+
var(--routing-wide-duration, var(--routing-default-duration, 300ms))
|
|
9270
|
+
ease-in forwards;
|
|
9244
9271
|
}
|
|
9245
9272
|
}
|
|
9246
9273
|
|
|
@@ -9264,7 +9291,6 @@ main[role='main'][data-routing-animation='none'] {
|
|
|
9264
9291
|
/* Mobile/Tablet: Hide sidebars - WCAG & Lighthouse best practices */
|
|
9265
9292
|
|
|
9266
9293
|
@media (width <=1023px) {
|
|
9267
|
-
|
|
9268
9294
|
.dndev-layout aside[role='navigation'].sidebar,
|
|
9269
9295
|
aside[role='navigation'].sidebar {
|
|
9270
9296
|
display: none !important;
|
|
@@ -9288,8 +9314,10 @@ main[role='main'][data-routing-animation='none'] {
|
|
|
9288
9314
|
'header header'
|
|
9289
9315
|
'sidebar main'
|
|
9290
9316
|
'footer footer';
|
|
9291
|
-
grid-template-rows: var(--header-height) 1fr minmax(
|
|
9292
|
-
|
|
9317
|
+
grid-template-rows: var(--header-height) 1fr minmax(
|
|
9318
|
+
var(--footer-height),
|
|
9319
|
+
auto
|
|
9320
|
+
);
|
|
9293
9321
|
grid-template-columns: var(--sidebar-width) 1fr;
|
|
9294
9322
|
}
|
|
9295
9323
|
|
|
@@ -9303,7 +9331,10 @@ main[role='main'][data-routing-animation='none'] {
|
|
|
9303
9331
|
grid-template-rows: var(--header-height) 1fr auto;
|
|
9304
9332
|
}
|
|
9305
9333
|
|
|
9306
|
-
.dndev-layout[data-footer-mode='scroll'] header[role='banner'] {
|
|
9334
|
+
.dndev-layout[data-footer-mode='scroll'] header[role='banner'] {
|
|
9335
|
+
position: sticky;
|
|
9336
|
+
top: 0;
|
|
9337
|
+
}
|
|
9307
9338
|
|
|
9308
9339
|
.dndev-layout[data-footer-mode='scroll'] aside.sidebar[role='navigation'] {
|
|
9309
9340
|
position: sticky;
|
|
@@ -9312,14 +9343,20 @@ main[role='main'][data-routing-animation='none'] {
|
|
|
9312
9343
|
align-self: start;
|
|
9313
9344
|
}
|
|
9314
9345
|
|
|
9315
|
-
.dndev-layout[data-footer-mode='scroll'] main[role='main'] {
|
|
9346
|
+
.dndev-layout[data-footer-mode='scroll'] main[role='main'] {
|
|
9347
|
+
overflow-y: visible;
|
|
9348
|
+
overflow-x: hidden;
|
|
9349
|
+
}
|
|
9316
9350
|
|
|
9317
9351
|
.dndev-layout[data-footer-mode='scroll'] footer[role='contentinfo'] {
|
|
9318
9352
|
grid-column: 2 / -1;
|
|
9319
9353
|
height: auto;
|
|
9320
9354
|
}
|
|
9321
9355
|
|
|
9322
|
-
:is(.dndev-layout[data-footer-mode='scroll'] footer[role='contentinfo']) > * {
|
|
9356
|
+
:is(.dndev-layout[data-footer-mode='scroll'] footer[role='contentinfo']) > * {
|
|
9357
|
+
height: auto;
|
|
9358
|
+
min-height: var(--footer-height);
|
|
9359
|
+
}
|
|
9323
9360
|
|
|
9324
9361
|
/* Mobile: footer scroll mode ON by default (same rules) */
|
|
9325
9362
|
|
|
@@ -9330,15 +9367,24 @@ main[role='main'][data-routing-animation='none'] {
|
|
|
9330
9367
|
grid-template-rows: var(--header-height) 1fr auto;
|
|
9331
9368
|
}
|
|
9332
9369
|
|
|
9333
|
-
.dndev-layout header[role='banner'] {
|
|
9370
|
+
.dndev-layout header[role='banner'] {
|
|
9371
|
+
position: sticky;
|
|
9372
|
+
top: 0;
|
|
9373
|
+
}
|
|
9334
9374
|
|
|
9335
|
-
.dndev-layout main[role='main'] {
|
|
9375
|
+
.dndev-layout main[role='main'] {
|
|
9376
|
+
overflow-y: visible;
|
|
9377
|
+
overflow-x: hidden;
|
|
9378
|
+
}
|
|
9336
9379
|
|
|
9337
9380
|
.dndev-layout footer[role='contentinfo'] {
|
|
9338
9381
|
height: auto;
|
|
9339
9382
|
}
|
|
9340
9383
|
|
|
9341
|
-
:is(.dndev-layout footer[role='contentinfo']) > * {
|
|
9384
|
+
:is(.dndev-layout footer[role='contentinfo']) > * {
|
|
9385
|
+
height: auto;
|
|
9386
|
+
min-height: var(--footer-height);
|
|
9387
|
+
}
|
|
9342
9388
|
}
|
|
9343
9389
|
|
|
9344
9390
|
/* Presets with no footer at all */
|
|
@@ -9506,7 +9552,8 @@ aside[role='navigation'].sidebar .dndev-sidebar-resize-handle:focus-visible {
|
|
|
9506
9552
|
|
|
9507
9553
|
/* Active drag state */
|
|
9508
9554
|
|
|
9509
|
-
aside[role='navigation'].sidebar[data-dragging='true']
|
|
9555
|
+
aside[role='navigation'].sidebar[data-dragging='true']
|
|
9556
|
+
.dndev-sidebar-resize-handle {
|
|
9510
9557
|
background: var(--primary);
|
|
9511
9558
|
}
|
|
9512
9559
|
|
|
@@ -9522,7 +9569,10 @@ aside[role='navigation'].sidebar[data-dragging='true'] .dndev-sidebar-resize-han
|
|
|
9522
9569
|
/* Landing: AUTO display mode - compact below wide breakpoint (< 1440px) */
|
|
9523
9570
|
|
|
9524
9571
|
@media (width < 1440px) {
|
|
9525
|
-
[data-layout='landing']
|
|
9572
|
+
[data-layout='landing']
|
|
9573
|
+
header[role='banner']
|
|
9574
|
+
[data-display='auto']
|
|
9575
|
+
.dndev-interactive-label {
|
|
9526
9576
|
display: none;
|
|
9527
9577
|
}
|
|
9528
9578
|
}
|
|
@@ -9695,7 +9745,6 @@ main[role='main'] {
|
|
|
9695
9745
|
contain: layout style;
|
|
9696
9746
|
|
|
9697
9747
|
/* First child after breadcrumbs grows to fill space */
|
|
9698
|
-
|
|
9699
9748
|
}
|
|
9700
9749
|
|
|
9701
9750
|
main[role='main'] > *:not(.breadcrumbs-container):first-of-type,main[role='main'] > .breadcrumbs-container + * {
|
|
@@ -9823,7 +9872,6 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
|
|
|
9823
9872
|
/* Mobile (<1024px): Show merged-bar, hide zones */
|
|
9824
9873
|
|
|
9825
9874
|
@media (width <=1023px) {
|
|
9826
|
-
|
|
9827
9875
|
/* Presets with mergedBar: top (admin, moolti, game, docs) */
|
|
9828
9876
|
[data-layout='admin'] .merged-bar[data-position='top'],
|
|
9829
9877
|
[data-layout='moolti'] .merged-bar[data-position='top'],
|
|
@@ -10246,10 +10294,10 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
|
|
|
10246
10294
|
|
|
10247
10295
|
/* Breakthrough pattern: only applies inside PageContainer */
|
|
10248
10296
|
|
|
10249
|
-
.dndev-container
|
|
10250
|
-
.dndev-container
|
|
10251
|
-
.dndev-container
|
|
10252
|
-
.dndev-container
|
|
10297
|
+
.dndev-container > .dndev-section-full-width,
|
|
10298
|
+
.dndev-container > .dndev-cta,
|
|
10299
|
+
.dndev-container > .dndev-hero-section,
|
|
10300
|
+
.dndev-container > .dndev-tech-bento {
|
|
10253
10301
|
/* Break out of PageContainer padding and max-width constraint */
|
|
10254
10302
|
/* Account for sidebar: --sidebar-width is 0px for presets without sidebar */
|
|
10255
10303
|
width: calc(100dvw - var(--sidebar-width));
|
|
@@ -10290,7 +10338,16 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
|
|
|
10290
10338
|
width: 100%;
|
|
10291
10339
|
}
|
|
10292
10340
|
|
|
10293
|
-
/*
|
|
10341
|
+
/* Scroll wrapper - stretches to full width so scrollbar is at viewport edge */
|
|
10342
|
+
|
|
10343
|
+
.dndev-game-container__scroll-wrapper {
|
|
10344
|
+
flex: 1 1 0;
|
|
10345
|
+
min-height: 0;
|
|
10346
|
+
width: 100%;
|
|
10347
|
+
align-self: stretch;
|
|
10348
|
+
}
|
|
10349
|
+
|
|
10350
|
+
/* ScrollArea - fills wrapper */
|
|
10294
10351
|
|
|
10295
10352
|
.dndev-game-container__scroll {
|
|
10296
10353
|
width: 100%;
|
|
@@ -10329,20 +10386,16 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
|
|
|
10329
10386
|
justify-content: space-between;
|
|
10330
10387
|
}
|
|
10331
10388
|
|
|
10332
|
-
/* Narrow content wrapper - constrained by --narrow-content-max
|
|
10389
|
+
/* Narrow content wrapper - constrained by --narrow-content-max, centered inside scroll */
|
|
10390
|
+
|
|
10391
|
+
/* height: 100% fills the scroll viewport so children can use percentage heights.
|
|
10392
|
+
Content taller than viewport still scrolls — overflow propagates to the scroll container. */
|
|
10333
10393
|
|
|
10334
10394
|
.dndev-game-container__content-narrow {
|
|
10335
10395
|
width: 100%;
|
|
10336
10396
|
max-width: var(--narrow-content-max);
|
|
10337
10397
|
margin-inline: auto;
|
|
10338
|
-
|
|
10339
|
-
flex: 1 1 auto;
|
|
10340
|
-
display: flex;
|
|
10341
|
-
flex-direction: column;
|
|
10342
|
-
}
|
|
10343
|
-
|
|
10344
|
-
.dndev-game-container__content-narrow .dndev-game-container__scroll {
|
|
10345
|
-
width: 100%;
|
|
10398
|
+
height: 100%;
|
|
10346
10399
|
}
|
|
10347
10400
|
|
|
10348
10401
|
/* CTA Zone - Fixed at bottom; safe area for notched devices */
|
|
@@ -10357,6 +10410,13 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
|
|
|
10357
10410
|
|
|
10358
10411
|
/* CTA Button */
|
|
10359
10412
|
|
|
10413
|
+
.dndev-game-container__cta-buttons {
|
|
10414
|
+
display: grid;
|
|
10415
|
+
grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
|
|
10416
|
+
gap: var(--gap-sm);
|
|
10417
|
+
width: 100%;
|
|
10418
|
+
}
|
|
10419
|
+
|
|
10360
10420
|
.dndev-game-container__cta-button {
|
|
10361
10421
|
height: var(--touch-target);
|
|
10362
10422
|
width: 100%;
|