@donotdev/ui 0.0.10 → 0.0.12
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/layout/GameContainer.d.ts +3 -1
- package/dist/components/layout/GameContainer.d.ts.map +1 -1
- package/dist/components/layout/GameContainer.js +3 -2
- package/dist/components/layout/PageContainer.d.ts +1 -1
- package/dist/components/layout/PageContainer.d.ts.map +1 -1
- package/dist/crud/components/EntityCardList.d.ts +16 -0
- package/dist/crud/components/EntityCardList.d.ts.map +1 -0
- package/dist/crud/components/EntityCardList.js +175 -0
- package/dist/crud/components/EntityDisplayRenderer.d.ts +13 -21
- package/dist/crud/components/EntityDisplayRenderer.d.ts.map +1 -1
- package/dist/crud/components/EntityDisplayRenderer.js +138 -23
- package/dist/crud/components/EntityFormRenderer.d.ts +18 -0
- package/dist/crud/components/EntityFormRenderer.d.ts.map +1 -0
- package/dist/crud/components/EntityFormRenderer.js +286 -0
- package/dist/crud/components/EntityList.d.ts +14 -0
- package/dist/crud/components/EntityList.d.ts.map +1 -0
- package/dist/crud/components/EntityList.js +203 -0
- package/dist/crud/components/index.d.ts +7 -5
- package/dist/crud/components/index.d.ts.map +1 -1
- package/dist/crud/components/index.js +6 -5
- package/dist/dndev.css +287 -123
- package/dist/index.js +4 -64
- package/dist/internal/layout/components/AutoMetaTags.d.ts.map +1 -1
- package/dist/internal/layout/components/AutoMetaTags.js +36 -6
- package/dist/internal/layout/components/NextJsAutoMetaTags.d.ts.map +1 -1
- package/dist/internal/layout/components/NextJsAutoMetaTags.js +38 -10
- package/dist/internal/layout/components/footer/FooterBranding.js +2 -2
- package/dist/internal/layout/config/presets/game.d.ts.map +1 -1
- package/dist/internal/layout/config/presets/game.js +10 -5
- package/dist/styles/index.css +287 -123
- package/package.json +13 -13
- package/dist/crud/components/DisplayFieldRenderer.d.ts +0 -26
- package/dist/crud/components/DisplayFieldRenderer.d.ts.map +0 -1
- package/dist/crud/components/DisplayFieldRenderer.js +0 -107
- package/dist/crud/components/fields/display/AvatarFieldDisplay.d.ts +0 -23
- package/dist/crud/components/fields/display/AvatarFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/AvatarFieldDisplay.js +0 -38
- package/dist/crud/components/fields/display/BadgeFieldDisplay.d.ts +0 -21
- package/dist/crud/components/fields/display/BadgeFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/BadgeFieldDisplay.js +0 -31
- package/dist/crud/components/fields/display/ButtonFieldDisplay.d.ts +0 -29
- package/dist/crud/components/fields/display/ButtonFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/ButtonFieldDisplay.js +0 -12
- package/dist/crud/components/fields/display/CheckboxFieldDisplay.d.ts +0 -21
- package/dist/crud/components/fields/display/CheckboxFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/CheckboxFieldDisplay.js +0 -27
- package/dist/crud/components/fields/display/DateFieldDisplay.d.ts +0 -24
- package/dist/crud/components/fields/display/DateFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/DateFieldDisplay.js +0 -41
- package/dist/crud/components/fields/display/DropdownDisplay.d.ts +0 -21
- package/dist/crud/components/fields/display/DropdownDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/DropdownDisplay.js +0 -25
- package/dist/crud/components/fields/display/FileFieldDisplay.d.ts +0 -21
- package/dist/crud/components/fields/display/FileFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/FileFieldDisplay.js +0 -25
- package/dist/crud/components/fields/display/GeoPointFieldDisplay.d.ts +0 -25
- package/dist/crud/components/fields/display/GeoPointFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/GeoPointFieldDisplay.js +0 -25
- package/dist/crud/components/fields/display/HiddenFieldDisplay.d.ts +0 -30
- package/dist/crud/components/fields/display/HiddenFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/HiddenFieldDisplay.js +0 -12
- package/dist/crud/components/fields/display/ImageFieldDisplay.d.ts +0 -24
- package/dist/crud/components/fields/display/ImageFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/ImageFieldDisplay.js +0 -38
- package/dist/crud/components/fields/display/LinkFieldDisplay.d.ts +0 -22
- package/dist/crud/components/fields/display/LinkFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/LinkFieldDisplay.js +0 -48
- package/dist/crud/components/fields/display/MapFieldDisplay.d.ts +0 -25
- package/dist/crud/components/fields/display/MapFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/MapFieldDisplay.js +0 -25
- package/dist/crud/components/fields/display/MultiDropdownDisplay.d.ts +0 -22
- package/dist/crud/components/fields/display/MultiDropdownDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/MultiDropdownDisplay.js +0 -25
- package/dist/crud/components/fields/display/MultiInputTextFieldDisplay.d.ts +0 -22
- package/dist/crud/components/fields/display/MultiInputTextFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/MultiInputTextFieldDisplay.js +0 -25
- package/dist/crud/components/fields/display/NumberFieldDisplay.d.ts +0 -24
- package/dist/crud/components/fields/display/NumberFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/NumberFieldDisplay.js +0 -28
- package/dist/crud/components/fields/display/PasswordFieldDisplay.d.ts +0 -24
- package/dist/crud/components/fields/display/PasswordFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/PasswordFieldDisplay.js +0 -31
- package/dist/crud/components/fields/display/PhoneNumberDisplay.d.ts +0 -22
- package/dist/crud/components/fields/display/PhoneNumberDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/PhoneNumberDisplay.js +0 -25
- package/dist/crud/components/fields/display/RadioFieldDisplay.d.ts +0 -22
- package/dist/crud/components/fields/display/RadioFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/RadioFieldDisplay.js +0 -25
- package/dist/crud/components/fields/display/RangeFieldDisplay.d.ts +0 -22
- package/dist/crud/components/fields/display/RangeFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/RangeFieldDisplay.js +0 -25
- package/dist/crud/components/fields/display/ReferenceFieldDisplay.d.ts +0 -22
- package/dist/crud/components/fields/display/ReferenceFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/ReferenceFieldDisplay.js +0 -26
- package/dist/crud/components/fields/display/RichTextDisplay.d.ts +0 -25
- package/dist/crud/components/fields/display/RichTextDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/RichTextDisplay.js +0 -104
- package/dist/crud/components/fields/display/TextAreaDisplay.d.ts +0 -22
- package/dist/crud/components/fields/display/TextAreaDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/TextAreaDisplay.js +0 -25
- package/dist/crud/components/fields/display/TextFieldDisplay.d.ts +0 -42
- package/dist/crud/components/fields/display/TextFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/TextFieldDisplay.js +0 -97
- package/dist/crud/components/fields/display/TimestampFieldDisplay.d.ts +0 -22
- package/dist/crud/components/fields/display/TimestampFieldDisplay.d.ts.map +0 -1
- package/dist/crud/components/fields/display/TimestampFieldDisplay.js +0 -33
- package/dist/crud/components/fields/display/index.d.ts +0 -32
- package/dist/crud/components/fields/display/index.d.ts.map +0 -1
- package/dist/crud/components/fields/display/index.js +0 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoMetaTags.d.ts","sourceRoot":"","sources":["../../../../src/internal/layout/components/AutoMetaTags.tsx"],"names":[],"mappings":"AA0DA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AutoMetaTags.d.ts","sourceRoot":"","sources":["../../../../src/internal/layout/components/AutoMetaTags.tsx"],"names":[],"mappings":"AA0DA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAyE3C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,EAAE,aAoN1B,CAAC;AAEF;;;GAGG;AAEH,eAAe,YAAY,CAAC"}
|
|
@@ -49,12 +49,34 @@ import { useMemo } from 'react';
|
|
|
49
49
|
import { Helmet } from 'react-helmet-async';
|
|
50
50
|
import { useTranslation, useIsClient } from '@donotdev/core';
|
|
51
51
|
import { getDndevConfig } from '@donotdev/core';
|
|
52
|
-
import { useSeoConfig, useAppConfig } from '@donotdev/core';
|
|
52
|
+
import { useSeoConfig, useAppConfig, getPlatformEnvVar } from '@donotdev/core';
|
|
53
53
|
import { AssetResolver } from '@donotdev/ui';
|
|
54
54
|
// Platform-specific hooks via conditional exports
|
|
55
55
|
import { useLocation } from '@donotdev/ui/routing/hooks';
|
|
56
56
|
/**
|
|
57
|
-
*
|
|
57
|
+
* Match pathname against route path pattern (e.g. /cars/:id or /blog/:slug/comments/:id).
|
|
58
|
+
* Supports arbitrary nesting: any depth, any mix of static and :param segments.
|
|
59
|
+
*/
|
|
60
|
+
function matchRoutePath(pattern, pathname) {
|
|
61
|
+
const patternSegments = pattern.split('/').filter(Boolean);
|
|
62
|
+
const pathnameSegments = pathname.split('/').filter(Boolean);
|
|
63
|
+
if (patternSegments.length !== pathnameSegments.length)
|
|
64
|
+
return false;
|
|
65
|
+
for (let i = 0; i < patternSegments.length; i++) {
|
|
66
|
+
const segment = patternSegments[i];
|
|
67
|
+
const pathSegment = pathnameSegments[i];
|
|
68
|
+
if (segment === undefined || pathSegment === undefined)
|
|
69
|
+
return false;
|
|
70
|
+
if (segment.startsWith(':'))
|
|
71
|
+
continue; // param matches any value
|
|
72
|
+
if (segment !== pathSegment)
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get route metadata from window object (injected by build system).
|
|
79
|
+
* Resolves dynamic routes by pattern (e.g. /cars/:id) so PageMeta (including namespace) is used for SEO.
|
|
58
80
|
*/
|
|
59
81
|
function getRouteMetadata(pathname, isClient) {
|
|
60
82
|
if (!isClient)
|
|
@@ -63,12 +85,20 @@ function getRouteMetadata(pathname, isClient) {
|
|
|
63
85
|
const config = getDndevConfig();
|
|
64
86
|
const routeData = config?.routes?.mapping;
|
|
65
87
|
if (routeData && Array.isArray(routeData)) {
|
|
66
|
-
|
|
67
|
-
|
|
88
|
+
// 1. Exact match (static routes)
|
|
89
|
+
let route = routeData.find((r) => r.path === pathname);
|
|
90
|
+
if (route)
|
|
91
|
+
return route.meta;
|
|
92
|
+
// 2. Pattern match (dynamic routes: /cars/:id, /blog/:slug/comments/:id, etc.)
|
|
93
|
+
const dynamicRoutes = routeData.filter((r) => typeof r.path === 'string' && r.path.includes(':'));
|
|
94
|
+
const matches = dynamicRoutes.filter((r) => matchRoutePath(r.path, pathname));
|
|
95
|
+
// Prefer most specific (longest path) so /blog/:slug/comments wins over /blog/:slug for /blog/a/comments
|
|
96
|
+
if (matches.length > 0) {
|
|
97
|
+
route = matches.reduce((best, r) => r.path.length > best.path.length ? r : best);
|
|
68
98
|
return route.meta;
|
|
69
99
|
}
|
|
70
100
|
}
|
|
71
|
-
//
|
|
101
|
+
// Fallback: first path segment as namespace (e.g. /cars/abc123 → ns: cars)
|
|
72
102
|
const segments = pathname.split('/').filter(Boolean);
|
|
73
103
|
if (segments.length > 0) {
|
|
74
104
|
return { ns: segments[0] };
|
|
@@ -97,7 +127,7 @@ export const AutoMetaTags = () => {
|
|
|
97
127
|
return null;
|
|
98
128
|
const { defaultNamespace = 'home', defaultImage, twitterHandle, staticTags = {}, } = seoConfig;
|
|
99
129
|
const siteName = useAppConfig('name');
|
|
100
|
-
const baseUrl =
|
|
130
|
+
const baseUrl = getPlatformEnvVar('APP_URL') || '';
|
|
101
131
|
// Get route metadata
|
|
102
132
|
const routeMeta = getRouteMetadata(location.pathname, isClient);
|
|
103
133
|
// Memoize computed values for performance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NextJsAutoMetaTags.d.ts","sourceRoot":"","sources":["../../../../src/internal/layout/components/NextJsAutoMetaTags.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,UAAU,cAAc;IACtB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,UAAU,aAAa;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,uBAAuB;IAC/B,kCAAkC;IAClC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AA+
|
|
1
|
+
{"version":3,"file":"NextJsAutoMetaTags.d.ts","sourceRoot":"","sources":["../../../../src/internal/layout/components/NextJsAutoMetaTags.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,UAAU,cAAc;IACtB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,UAAU,aAAa;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,uBAAuB;IAC/B,kCAAkC;IAClC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AA+DD;;;;;;;;GAQG;AACH,QAAA,MAAM,kBAAkB,EAAE,aAAa,CAAC,uBAAuB,CA8L9D,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -17,9 +17,31 @@ import { usePathname } from 'next/navigation';
|
|
|
17
17
|
import { useMemo } from 'react';
|
|
18
18
|
import { Helmet } from 'react-helmet-async';
|
|
19
19
|
import { useTranslation, getDndevConfig, useIsClient } from '@donotdev/core';
|
|
20
|
-
import { useAppConfig } from '@donotdev/core';
|
|
20
|
+
import { useAppConfig, getPlatformEnvVar } from '@donotdev/core';
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* Match pathname against route path pattern (e.g. /cars/:id or /blog/:slug/comments/:id).
|
|
23
|
+
* Supports arbitrary nesting: any depth, any mix of static and :param segments.
|
|
24
|
+
*/
|
|
25
|
+
function matchRoutePath(pattern, pathname) {
|
|
26
|
+
const patternSegments = pattern.split('/').filter(Boolean);
|
|
27
|
+
const pathnameSegments = pathname.split('/').filter(Boolean);
|
|
28
|
+
if (patternSegments.length !== pathnameSegments.length)
|
|
29
|
+
return false;
|
|
30
|
+
for (let i = 0; i < patternSegments.length; i++) {
|
|
31
|
+
const segment = patternSegments[i];
|
|
32
|
+
const pathSegment = pathnameSegments[i];
|
|
33
|
+
if (segment === undefined || pathSegment === undefined)
|
|
34
|
+
return false;
|
|
35
|
+
if (segment.startsWith(':'))
|
|
36
|
+
continue; // param matches any value
|
|
37
|
+
if (segment !== pathSegment)
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get route metadata from config (injected by build system).
|
|
44
|
+
* Resolves dynamic routes by pattern so PageMeta (including namespace) is used for SEO.
|
|
23
45
|
*/
|
|
24
46
|
function getRouteMetadata(pathname, isClient) {
|
|
25
47
|
if (!isClient)
|
|
@@ -28,16 +50,22 @@ function getRouteMetadata(pathname, isClient) {
|
|
|
28
50
|
const config = getDndevConfig();
|
|
29
51
|
const routeData = config?.routes?.mapping;
|
|
30
52
|
if (routeData && Array.isArray(routeData)) {
|
|
31
|
-
|
|
53
|
+
// 1. Exact match (static routes)
|
|
54
|
+
let route = routeData.find((r) => r.path === pathname);
|
|
32
55
|
if (route && route.meta) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
56
|
+
return { ...route.meta, ns: route.meta.namespace };
|
|
57
|
+
}
|
|
58
|
+
// 2. Pattern match (dynamic routes: /cars/:id, /blog/:slug/comments/:id, etc.)
|
|
59
|
+
const dynamicRoutes = routeData.filter((r) => typeof r.path === 'string' && r.path.includes(':'));
|
|
60
|
+
const matches = dynamicRoutes.filter((r) => matchRoutePath(r.path, pathname));
|
|
61
|
+
if (matches.length > 0) {
|
|
62
|
+
const best = matches.reduce((a, b) => b.path.length > a.path.length ? b : a);
|
|
63
|
+
if (best.meta) {
|
|
64
|
+
return { ...best.meta, ns: best.meta.namespace };
|
|
65
|
+
}
|
|
38
66
|
}
|
|
39
67
|
}
|
|
40
|
-
//
|
|
68
|
+
// Fallback: first path segment as namespace
|
|
41
69
|
const segments = pathname.split('/').filter(Boolean);
|
|
42
70
|
if (segments.length > 0) {
|
|
43
71
|
return { ns: segments[0] };
|
|
@@ -64,7 +92,7 @@ const NextJsAutoMetaTags = ({ config = {}, routeMeta: routeMetaOverride, title:
|
|
|
64
92
|
const { t } = useTranslation(namespaces);
|
|
65
93
|
const { defaultNamespace = 'home', defaultImage = '/og-image.png', twitterHandle, defaultAuthor, staticTags = {}, } = config;
|
|
66
94
|
const siteName = config.siteName || useAppConfig('name');
|
|
67
|
-
const baseUrl =
|
|
95
|
+
const baseUrl = getPlatformEnvVar('APP_URL') || '';
|
|
68
96
|
// Get route metadata
|
|
69
97
|
const routeMeta = getRouteMetadata(pathname || '/', isClient);
|
|
70
98
|
const finalRouteMeta = { ...routeMeta, ...routeMetaOverride };
|
|
@@ -9,7 +9,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
9
9
|
* @author AMBROISE PARK Consulting
|
|
10
10
|
*/
|
|
11
11
|
import { ExternalLink } from 'lucide-react';
|
|
12
|
-
import { useAppConfig } from '@donotdev/core';
|
|
12
|
+
import { useAppConfig, getPlatformEnvVar } from '@donotdev/core';
|
|
13
13
|
/**
|
|
14
14
|
* FooterBranding - Framework branding link (power move)
|
|
15
15
|
*
|
|
@@ -21,7 +21,7 @@ import { useAppConfig } from '@donotdev/core';
|
|
|
21
21
|
* @author AMBROISE PARK Consulting
|
|
22
22
|
*/
|
|
23
23
|
export const FooterBranding = ({ className, }) => {
|
|
24
|
-
const appUrl =
|
|
24
|
+
const appUrl = getPlatformEnvVar('APP_URL');
|
|
25
25
|
const isFrameworkSite = appUrl === 'https://donotdev.com';
|
|
26
26
|
return (_jsxs("a", { href: isFrameworkSite
|
|
27
27
|
? 'https://www.ambroise-park.com'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../../../../src/internal/layout/config/presets/game.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../../../../src/internal/layout/config/presets/game.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAYnD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,UAAU,EAAE,YAwCxB,CAAC"}
|
|
@@ -13,6 +13,9 @@ import { DISPLAY } from '@donotdev/components';
|
|
|
13
13
|
import { LanguageSelector } from '@donotdev/core';
|
|
14
14
|
import { AuthHeader } from '../../../../components/auth';
|
|
15
15
|
import { GameTitle, ThemeToggle, } from '../../../../components/layout/components';
|
|
16
|
+
import { FooterCopyright } from '../../components/footer/FooterCopyright';
|
|
17
|
+
import { FooterLegalLinks } from '../../components/footer/FooterLegalLinks';
|
|
18
|
+
import { DEFAULT_SLOTS } from '../defaults';
|
|
16
19
|
/**
|
|
17
20
|
* Game preset - mobile gaming layout
|
|
18
21
|
*
|
|
@@ -37,12 +40,14 @@ export const gamePreset = {
|
|
|
37
40
|
mergedBar: {
|
|
38
41
|
position: 'top',
|
|
39
42
|
// Desktop → Mobile mapping:
|
|
40
|
-
trigger: () => _jsx(GameTitle, {}), // header.center → trigger
|
|
41
|
-
top: () =>
|
|
42
|
-
|
|
43
|
-
bottom: () => (
|
|
44
|
-
// header.end → bottom (Auth, Language, Theme)
|
|
43
|
+
trigger: () => _jsx(GameTitle, {}), // header.center → trigger
|
|
44
|
+
top: () => (
|
|
45
|
+
// header.end → top (Auth, Language, Theme)
|
|
45
46
|
_jsxs(_Fragment, { children: [_jsx(AuthHeader, { display: DISPLAY.AUTO }), _jsx(LanguageSelector, { display: DISPLAY.AUTO }), _jsx(ThemeToggle, { display: DISPLAY.AUTO })] })),
|
|
47
|
+
content: DEFAULT_SLOTS.sidebar.content, // Navigation menu
|
|
48
|
+
bottom: () => (
|
|
49
|
+
// Footer content: copyright + legal links (includes branding)
|
|
50
|
+
_jsxs(_Fragment, { children: [_jsx(FooterCopyright, {}), _jsx(FooterLegalLinks, {})] })),
|
|
46
51
|
},
|
|
47
52
|
},
|
|
48
53
|
};
|