@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.
Files changed (109) hide show
  1. package/dist/components/layout/GameContainer.d.ts +3 -1
  2. package/dist/components/layout/GameContainer.d.ts.map +1 -1
  3. package/dist/components/layout/GameContainer.js +3 -2
  4. package/dist/components/layout/PageContainer.d.ts +1 -1
  5. package/dist/components/layout/PageContainer.d.ts.map +1 -1
  6. package/dist/crud/components/EntityCardList.d.ts +16 -0
  7. package/dist/crud/components/EntityCardList.d.ts.map +1 -0
  8. package/dist/crud/components/EntityCardList.js +175 -0
  9. package/dist/crud/components/EntityDisplayRenderer.d.ts +13 -21
  10. package/dist/crud/components/EntityDisplayRenderer.d.ts.map +1 -1
  11. package/dist/crud/components/EntityDisplayRenderer.js +138 -23
  12. package/dist/crud/components/EntityFormRenderer.d.ts +18 -0
  13. package/dist/crud/components/EntityFormRenderer.d.ts.map +1 -0
  14. package/dist/crud/components/EntityFormRenderer.js +286 -0
  15. package/dist/crud/components/EntityList.d.ts +14 -0
  16. package/dist/crud/components/EntityList.d.ts.map +1 -0
  17. package/dist/crud/components/EntityList.js +203 -0
  18. package/dist/crud/components/index.d.ts +7 -5
  19. package/dist/crud/components/index.d.ts.map +1 -1
  20. package/dist/crud/components/index.js +6 -5
  21. package/dist/dndev.css +287 -123
  22. package/dist/index.js +4 -64
  23. package/dist/internal/layout/components/AutoMetaTags.d.ts.map +1 -1
  24. package/dist/internal/layout/components/AutoMetaTags.js +36 -6
  25. package/dist/internal/layout/components/NextJsAutoMetaTags.d.ts.map +1 -1
  26. package/dist/internal/layout/components/NextJsAutoMetaTags.js +38 -10
  27. package/dist/internal/layout/components/footer/FooterBranding.js +2 -2
  28. package/dist/internal/layout/config/presets/game.d.ts.map +1 -1
  29. package/dist/internal/layout/config/presets/game.js +10 -5
  30. package/dist/styles/index.css +287 -123
  31. package/package.json +13 -13
  32. package/dist/crud/components/DisplayFieldRenderer.d.ts +0 -26
  33. package/dist/crud/components/DisplayFieldRenderer.d.ts.map +0 -1
  34. package/dist/crud/components/DisplayFieldRenderer.js +0 -107
  35. package/dist/crud/components/fields/display/AvatarFieldDisplay.d.ts +0 -23
  36. package/dist/crud/components/fields/display/AvatarFieldDisplay.d.ts.map +0 -1
  37. package/dist/crud/components/fields/display/AvatarFieldDisplay.js +0 -38
  38. package/dist/crud/components/fields/display/BadgeFieldDisplay.d.ts +0 -21
  39. package/dist/crud/components/fields/display/BadgeFieldDisplay.d.ts.map +0 -1
  40. package/dist/crud/components/fields/display/BadgeFieldDisplay.js +0 -31
  41. package/dist/crud/components/fields/display/ButtonFieldDisplay.d.ts +0 -29
  42. package/dist/crud/components/fields/display/ButtonFieldDisplay.d.ts.map +0 -1
  43. package/dist/crud/components/fields/display/ButtonFieldDisplay.js +0 -12
  44. package/dist/crud/components/fields/display/CheckboxFieldDisplay.d.ts +0 -21
  45. package/dist/crud/components/fields/display/CheckboxFieldDisplay.d.ts.map +0 -1
  46. package/dist/crud/components/fields/display/CheckboxFieldDisplay.js +0 -27
  47. package/dist/crud/components/fields/display/DateFieldDisplay.d.ts +0 -24
  48. package/dist/crud/components/fields/display/DateFieldDisplay.d.ts.map +0 -1
  49. package/dist/crud/components/fields/display/DateFieldDisplay.js +0 -41
  50. package/dist/crud/components/fields/display/DropdownDisplay.d.ts +0 -21
  51. package/dist/crud/components/fields/display/DropdownDisplay.d.ts.map +0 -1
  52. package/dist/crud/components/fields/display/DropdownDisplay.js +0 -25
  53. package/dist/crud/components/fields/display/FileFieldDisplay.d.ts +0 -21
  54. package/dist/crud/components/fields/display/FileFieldDisplay.d.ts.map +0 -1
  55. package/dist/crud/components/fields/display/FileFieldDisplay.js +0 -25
  56. package/dist/crud/components/fields/display/GeoPointFieldDisplay.d.ts +0 -25
  57. package/dist/crud/components/fields/display/GeoPointFieldDisplay.d.ts.map +0 -1
  58. package/dist/crud/components/fields/display/GeoPointFieldDisplay.js +0 -25
  59. package/dist/crud/components/fields/display/HiddenFieldDisplay.d.ts +0 -30
  60. package/dist/crud/components/fields/display/HiddenFieldDisplay.d.ts.map +0 -1
  61. package/dist/crud/components/fields/display/HiddenFieldDisplay.js +0 -12
  62. package/dist/crud/components/fields/display/ImageFieldDisplay.d.ts +0 -24
  63. package/dist/crud/components/fields/display/ImageFieldDisplay.d.ts.map +0 -1
  64. package/dist/crud/components/fields/display/ImageFieldDisplay.js +0 -38
  65. package/dist/crud/components/fields/display/LinkFieldDisplay.d.ts +0 -22
  66. package/dist/crud/components/fields/display/LinkFieldDisplay.d.ts.map +0 -1
  67. package/dist/crud/components/fields/display/LinkFieldDisplay.js +0 -48
  68. package/dist/crud/components/fields/display/MapFieldDisplay.d.ts +0 -25
  69. package/dist/crud/components/fields/display/MapFieldDisplay.d.ts.map +0 -1
  70. package/dist/crud/components/fields/display/MapFieldDisplay.js +0 -25
  71. package/dist/crud/components/fields/display/MultiDropdownDisplay.d.ts +0 -22
  72. package/dist/crud/components/fields/display/MultiDropdownDisplay.d.ts.map +0 -1
  73. package/dist/crud/components/fields/display/MultiDropdownDisplay.js +0 -25
  74. package/dist/crud/components/fields/display/MultiInputTextFieldDisplay.d.ts +0 -22
  75. package/dist/crud/components/fields/display/MultiInputTextFieldDisplay.d.ts.map +0 -1
  76. package/dist/crud/components/fields/display/MultiInputTextFieldDisplay.js +0 -25
  77. package/dist/crud/components/fields/display/NumberFieldDisplay.d.ts +0 -24
  78. package/dist/crud/components/fields/display/NumberFieldDisplay.d.ts.map +0 -1
  79. package/dist/crud/components/fields/display/NumberFieldDisplay.js +0 -28
  80. package/dist/crud/components/fields/display/PasswordFieldDisplay.d.ts +0 -24
  81. package/dist/crud/components/fields/display/PasswordFieldDisplay.d.ts.map +0 -1
  82. package/dist/crud/components/fields/display/PasswordFieldDisplay.js +0 -31
  83. package/dist/crud/components/fields/display/PhoneNumberDisplay.d.ts +0 -22
  84. package/dist/crud/components/fields/display/PhoneNumberDisplay.d.ts.map +0 -1
  85. package/dist/crud/components/fields/display/PhoneNumberDisplay.js +0 -25
  86. package/dist/crud/components/fields/display/RadioFieldDisplay.d.ts +0 -22
  87. package/dist/crud/components/fields/display/RadioFieldDisplay.d.ts.map +0 -1
  88. package/dist/crud/components/fields/display/RadioFieldDisplay.js +0 -25
  89. package/dist/crud/components/fields/display/RangeFieldDisplay.d.ts +0 -22
  90. package/dist/crud/components/fields/display/RangeFieldDisplay.d.ts.map +0 -1
  91. package/dist/crud/components/fields/display/RangeFieldDisplay.js +0 -25
  92. package/dist/crud/components/fields/display/ReferenceFieldDisplay.d.ts +0 -22
  93. package/dist/crud/components/fields/display/ReferenceFieldDisplay.d.ts.map +0 -1
  94. package/dist/crud/components/fields/display/ReferenceFieldDisplay.js +0 -26
  95. package/dist/crud/components/fields/display/RichTextDisplay.d.ts +0 -25
  96. package/dist/crud/components/fields/display/RichTextDisplay.d.ts.map +0 -1
  97. package/dist/crud/components/fields/display/RichTextDisplay.js +0 -104
  98. package/dist/crud/components/fields/display/TextAreaDisplay.d.ts +0 -22
  99. package/dist/crud/components/fields/display/TextAreaDisplay.d.ts.map +0 -1
  100. package/dist/crud/components/fields/display/TextAreaDisplay.js +0 -25
  101. package/dist/crud/components/fields/display/TextFieldDisplay.d.ts +0 -42
  102. package/dist/crud/components/fields/display/TextFieldDisplay.d.ts.map +0 -1
  103. package/dist/crud/components/fields/display/TextFieldDisplay.js +0 -97
  104. package/dist/crud/components/fields/display/TimestampFieldDisplay.d.ts +0 -22
  105. package/dist/crud/components/fields/display/TimestampFieldDisplay.d.ts.map +0 -1
  106. package/dist/crud/components/fields/display/TimestampFieldDisplay.js +0 -33
  107. package/dist/crud/components/fields/display/index.d.ts +0 -32
  108. package/dist/crud/components/fields/display/index.d.ts.map +0 -1
  109. 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;AAwC3C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,EAAE,aAoN1B,CAAC;AAEF;;;GAGG;AAEH,eAAe,YAAY,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
- * Get route metadata from window object (injected by build system)
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
- const route = routeData.find((r) => r.path === pathname);
67
- if (route) {
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
- // Extract potential namespace from path
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 = useAppConfig('url');
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+BD;;;;;;;;GAQG;AACH,QAAA,MAAM,kBAAkB,EAAE,aAAa,CAAC,uBAAuB,CA8L9D,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
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
- * Get route metadata from config (injected by build system)
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
- const route = routeData.find((r) => r.path === pathname);
53
+ // 1. Exact match (static routes)
54
+ let route = routeData.find((r) => r.path === pathname);
32
55
  if (route && route.meta) {
33
- // Map route.meta.namespace to routeMeta.ns
34
- return {
35
- ...route.meta,
36
- ns: route.meta.namespace, // Map namespace -> ns for compatibility
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
- // Extract potential namespace from path
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 = useAppConfig('url');
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 = useAppConfig('url');
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;AASnD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,UAAU,EAAE,YAkCxB,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 (GameTitle, since header.start is null)
41
- top: () => _jsx(GameTitle, {}), // header.center → top (GameTitle)
42
- content: () => null, // No sidebar content is null
43
- bottom: () => (
44
- // header.end → bottom (Auth, Language, Theme)
43
+ trigger: () => _jsx(GameTitle, {}), // header.center → trigger
44
+ top: () => (
45
+ // header.endtop (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
  };