@burdenoff/fe-libs 2026.819.4 → 2026.823.1
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/README.md +66 -0
- package/dist/button/Button.d.ts +1 -1
- package/dist/chrome/AppShellLayout.d.ts +14 -0
- package/dist/chrome/AppShellLayout.d.ts.map +1 -1
- package/dist/chrome/AppShellLayout.js +13 -10
- package/dist/chrome/DynamicFooter.d.ts +6 -1
- package/dist/chrome/DynamicFooter.d.ts.map +1 -1
- package/dist/chrome/DynamicFooter.js +21 -20
- package/dist/chrome/Footer.d.ts +6 -0
- package/dist/chrome/Footer.d.ts.map +1 -1
- package/dist/chrome/Footer.js +46 -45
- package/dist/chrome/FooterBar.d.ts +6 -1
- package/dist/chrome/FooterBar.d.ts.map +1 -1
- package/dist/chrome/FooterBar.js +28 -26
- package/dist/chrome/HeaderBar.d.ts.map +1 -1
- package/dist/chrome/HeaderBar.js +3 -0
- package/dist/chrome/MobileTabBar.d.ts +26 -0
- package/dist/chrome/MobileTabBar.d.ts.map +1 -0
- package/dist/chrome/MobileTabBar.js +194 -0
- package/dist/chrome/NativePageTransition.d.ts +10 -0
- package/dist/chrome/NativePageTransition.d.ts.map +1 -0
- package/dist/chrome/NativePageTransition.js +19 -0
- package/dist/chrome/NativeTopBar.d.ts +21 -0
- package/dist/chrome/NativeTopBar.d.ts.map +1 -0
- package/dist/chrome/NativeTopBar.js +72 -0
- package/dist/chrome/NotificationCenter.d.ts.map +1 -1
- package/dist/chrome/NotificationCenter.js +70 -65
- package/dist/chrome/ProductSideNav.d.ts.map +1 -1
- package/dist/chrome/ProductSideNav.js +44 -74
- package/dist/chrome/SwipeNavigation.d.ts +36 -0
- package/dist/chrome/SwipeNavigation.d.ts.map +1 -0
- package/dist/chrome/SwipeNavigation.js +111 -0
- package/dist/chrome/index.d.ts +13 -7
- package/dist/chrome/index.d.ts.map +1 -1
- package/dist/chrome/mobileTabBar/selectTabs.d.ts +45 -0
- package/dist/chrome/mobileTabBar/selectTabs.d.ts.map +1 -0
- package/dist/chrome/mobileTabBar/selectTabs.js +28 -0
- package/dist/chrome/mobileTabBar/useMobileTabBarVisible.d.ts +18 -0
- package/dist/chrome/mobileTabBar/useMobileTabBarVisible.d.ts.map +1 -0
- package/dist/chrome/mobileTabBar/useMobileTabBarVisible.js +16 -0
- package/dist/chrome/mobileTabBar/useVisibleNavItems.d.ts +18 -0
- package/dist/chrome/mobileTabBar/useVisibleNavItems.d.ts.map +1 -0
- package/dist/chrome/mobileTabBar/useVisibleNavItems.js +41 -0
- package/dist/chrome/swipe/swipeMath.d.ts +25 -0
- package/dist/chrome/swipe/swipeMath.d.ts.map +1 -0
- package/dist/chrome/swipe/swipeMath.js +14 -0
- package/dist/chrome/swipe/swipeState.d.ts +10 -0
- package/dist/chrome/swipe/swipeState.d.ts.map +1 -0
- package/dist/chrome/swipe/swipeState.js +11 -0
- package/dist/chrome.js +7 -1
- package/dist/shared/components/DesktopUpdateToast.d.ts +9 -0
- package/dist/shared/components/DesktopUpdateToast.d.ts.map +1 -0
- package/dist/shared/components/DesktopUpdateToast.js +39 -0
- package/dist/shared/components/PWAInstallBanner.js +1 -1
- package/dist/shared/components/SSORedirectGuard.d.ts.map +1 -1
- package/dist/shared/components/SSORedirectGuard.js +41 -45
- package/dist/shared/components/index.d.ts +2 -0
- package/dist/shared/components/index.d.ts.map +1 -1
- package/dist/shared/config/authBridgeUrls.d.ts +10 -0
- package/dist/shared/config/authBridgeUrls.d.ts.map +1 -1
- package/dist/shared/config/authBridgeUrls.js +16 -12
- package/dist/shared/config/gatewayUrls.d.ts.map +1 -1
- package/dist/shared/config/gatewayUrls.js +22 -19
- package/dist/shared/config/index.d.ts +1 -1
- package/dist/shared/config/index.d.ts.map +1 -1
- package/dist/shared/events/index.d.ts +13 -1
- package/dist/shared/events/index.d.ts.map +1 -1
- package/dist/shared/hooks/shell/useNavRegistry.d.ts +7 -0
- package/dist/shared/hooks/shell/useNavRegistry.d.ts.map +1 -1
- package/dist/shared/hooks/usePWA.d.ts.map +1 -1
- package/dist/shared/hooks/usePWA.js +34 -30
- package/dist/shared/native/consumers.d.ts +15 -1
- package/dist/shared/native/consumers.d.ts.map +1 -1
- package/dist/shared/native/consumers.js +26 -7
- package/dist/shared/native/desktop.d.ts +123 -0
- package/dist/shared/native/desktop.d.ts.map +1 -0
- package/dist/shared/native/desktop.js +280 -0
- package/dist/shared/native/entry.d.ts +39 -0
- package/dist/shared/native/entry.d.ts.map +1 -0
- package/dist/shared/native/entry.js +13 -0
- package/dist/shared/native/hooks/index.d.ts +10 -0
- package/dist/shared/native/hooks/index.d.ts.map +1 -1
- package/dist/shared/native/hooks/index.js +6 -0
- package/dist/shared/native/hooks/useActionSheet.d.ts +63 -0
- package/dist/shared/native/hooks/useActionSheet.d.ts.map +1 -0
- package/dist/shared/native/hooks/useActionSheet.js +45 -0
- package/dist/shared/native/hooks/useDesktop.d.ts +15 -0
- package/dist/shared/native/hooks/useDesktop.d.ts.map +1 -0
- package/dist/shared/native/hooks/useDesktop.js +18 -0
- package/dist/shared/native/hooks/useDesktopUpdateState.d.ts +7 -0
- package/dist/shared/native/hooks/useDesktopUpdateState.d.ts.map +1 -0
- package/dist/shared/native/hooks/useDesktopUpdateState.js +20 -0
- package/dist/shared/native/hooks/useDesktopWindowState.d.ts +7 -0
- package/dist/shared/native/hooks/useDesktopWindowState.d.ts.map +1 -0
- package/dist/shared/native/hooks/useDesktopWindowState.js +9 -0
- package/dist/shared/native/hooks/useHaptics.d.ts +1 -0
- package/dist/shared/native/hooks/useHaptics.d.ts.map +1 -1
- package/dist/shared/native/hooks/useHaptics.js +6 -6
- package/dist/shared/native/hooks/useNetworkStatus.d.ts +23 -0
- package/dist/shared/native/hooks/useNetworkStatus.d.ts.map +1 -0
- package/dist/shared/native/hooks/useNetworkStatus.js +29 -0
- package/dist/shared/native/hooks/usePullToRefresh.d.ts +62 -0
- package/dist/shared/native/hooks/usePullToRefresh.d.ts.map +1 -0
- package/dist/shared/native/hooks/usePullToRefresh.js +84 -0
- package/dist/shared/native/index.d.ts +6 -1
- package/dist/shared/native/index.d.ts.map +1 -1
- package/dist/shared/native/platform.d.ts.map +1 -1
- package/dist/shared/native/platform.js +2 -1
- package/dist/shared/native/purchases.d.ts +7 -1
- package/dist/shared/native/purchases.d.ts.map +1 -1
- package/dist/shared/native/purchases.js +3 -3
- package/dist/shared/native/types.d.ts +136 -0
- package/dist/shared/native/types.d.ts.map +1 -1
- package/dist/shared/providers/AppShellProvider.d.ts.map +1 -1
- package/dist/shared/providers/AppShellProvider.js +117 -115
- package/dist/shared/providers/shell/ThemeProvider.d.ts.map +1 -1
- package/dist/shared/providers/shell/ThemeProvider.js +64 -51
- package/dist/shared/providers/shell/authProvider/useSsoDepositBootGuard.d.ts.map +1 -1
- package/dist/shared/providers/shell/authProvider/useSsoDepositBootGuard.js +25 -29
- package/dist/shared/utils/gatewayFetchRewrite.d.ts.map +1 -1
- package/dist/shared/utils/gatewayFetchRewrite.js +87 -84
- package/dist/shared-components.js +2 -1
- package/dist/shared-config.js +10 -10
- package/dist/shared-native.js +21 -13
- package/dist/shared.js +120 -111
- package/dist/shell-native/actionSheet.d.ts +7 -0
- package/dist/shell-native/actionSheet.d.ts.map +1 -0
- package/dist/shell-native/actionSheet.js +26 -0
- package/dist/shell-native/app-lifecycle.d.ts +4 -0
- package/dist/shell-native/app-lifecycle.d.ts.map +1 -0
- package/dist/shell-native/app-lifecycle.js +12 -0
- package/dist/shell-native/auth-navigation.d.ts +4 -0
- package/dist/shell-native/auth-navigation.d.ts.map +1 -0
- package/dist/shell-native/auth-navigation.js +95 -0
- package/dist/shell-native/back-button.d.ts +8 -0
- package/dist/shell-native/back-button.d.ts.map +1 -0
- package/dist/shell-native/back-button.js +49 -0
- package/dist/shell-native/boot.d.ts +10 -0
- package/dist/shell-native/boot.d.ts.map +1 -0
- package/dist/shell-native/boot.js +65 -0
- package/dist/shell-native/bridge.d.ts +7 -0
- package/dist/shell-native/bridge.d.ts.map +1 -0
- package/dist/shell-native/bridge.js +30 -0
- package/dist/shell-native/browser.d.ts +12 -0
- package/dist/shell-native/browser.d.ts.map +1 -0
- package/dist/shell-native/browser.js +45 -0
- package/dist/shell-native/capacitor-config.d.ts +21 -0
- package/dist/shell-native/capacitor-config.d.ts.map +1 -0
- package/dist/shell-native/capacitor-config.js +103 -0
- package/dist/shell-native/clipboard.d.ts +3 -0
- package/dist/shell-native/clipboard.d.ts.map +1 -0
- package/dist/shell-native/clipboard.js +26 -0
- package/dist/shell-native/deep-link.d.ts +19 -0
- package/dist/shell-native/deep-link.d.ts.map +1 -0
- package/dist/shell-native/deep-link.js +53 -0
- package/dist/shell-native/desktop-bridge.d.ts +14 -0
- package/dist/shell-native/desktop-bridge.d.ts.map +1 -0
- package/dist/shell-native/desktop-bridge.js +17 -0
- package/dist/shell-native/device.d.ts +4 -0
- package/dist/shell-native/device.d.ts.map +1 -0
- package/dist/shell-native/device.js +27 -0
- package/dist/shell-native/dialog.d.ts +4 -0
- package/dist/shell-native/dialog.d.ts.map +1 -0
- package/dist/shell-native/dialog.js +13 -0
- package/dist/shell-native/feedback.d.ts +6 -0
- package/dist/shell-native/feedback.d.ts.map +1 -0
- package/dist/shell-native/feedback.js +29 -0
- package/dist/shell-native/index.d.ts +54 -0
- package/dist/shell-native/index.d.ts.map +1 -0
- package/dist/shell-native/keyboard.d.ts +15 -0
- package/dist/shell-native/keyboard.d.ts.map +1 -0
- package/dist/shell-native/keyboard.js +42 -0
- package/dist/shell-native/network.d.ts +9 -0
- package/dist/shell-native/network.d.ts.map +1 -0
- package/dist/shell-native/network.js +40 -0
- package/dist/shell-native/ota.d.ts +3 -0
- package/dist/shell-native/ota.d.ts.map +1 -0
- package/dist/shell-native/ota.js +21 -0
- package/dist/shell-native/platform.d.ts +21 -0
- package/dist/shell-native/platform.d.ts.map +1 -0
- package/dist/shell-native/platform.js +51 -0
- package/dist/shell-native/preview.d.ts +18 -0
- package/dist/shell-native/preview.d.ts.map +1 -0
- package/dist/shell-native/preview.js +124 -0
- package/dist/shell-native/push.d.ts +14 -0
- package/dist/shell-native/push.d.ts.map +1 -0
- package/dist/shell-native/push.js +62 -0
- package/dist/shell-native/pwa.d.ts +14 -0
- package/dist/shell-native/pwa.d.ts.map +1 -0
- package/dist/shell-native/pwa.js +49 -0
- package/dist/shell-native/service-worker.d.ts +5 -0
- package/dist/shell-native/service-worker.d.ts.map +1 -0
- package/dist/shell-native/service-worker.js +144 -0
- package/dist/shell-native/share.d.ts +4 -0
- package/dist/shell-native/share.d.ts.map +1 -0
- package/dist/shell-native/share.js +19 -0
- package/dist/shell-native/splash.d.ts +16 -0
- package/dist/shell-native/splash.d.ts.map +1 -0
- package/dist/shell-native/splash.js +25 -0
- package/dist/shell-native/system-bars.d.ts +24 -0
- package/dist/shell-native/system-bars.d.ts.map +1 -0
- package/dist/shell-native/system-bars.js +49 -0
- package/dist/shell-native/toast.d.ts +4 -0
- package/dist/shell-native/toast.d.ts.map +1 -0
- package/dist/shell-native/toast.js +16 -0
- package/dist/shell-native/types.d.ts +292 -0
- package/dist/shell-native/types.d.ts.map +1 -0
- package/dist/shell-native/web-manifest.d.ts +36 -0
- package/dist/shell-native/web-manifest.d.ts.map +1 -0
- package/dist/shell-native/web-manifest.js +55 -0
- package/dist/shell-native.d.ts +2 -0
- package/dist/shell-native.js +29 -0
- package/dist/ui/action-sheet.d.ts +29 -0
- package/dist/ui/action-sheet.d.ts.map +1 -0
- package/dist/ui/action-sheet.js +53 -0
- package/dist/ui/badge.d.ts +1 -1
- package/dist/ui/button.d.ts +1 -1
- package/dist/ui/index.d.ts +6 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/native-welcome.d.ts +61 -0
- package/dist/ui/native-welcome.d.ts.map +1 -0
- package/dist/ui/native-welcome.js +152 -0
- package/dist/ui/offline-banner.d.ts +22 -0
- package/dist/ui/offline-banner.d.ts.map +1 -0
- package/dist/ui/offline-banner.js +34 -0
- package/dist/ui/pull-to-refresh.d.ts +29 -0
- package/dist/ui/pull-to-refresh.d.ts.map +1 -0
- package/dist/ui/pull-to-refresh.js +44 -0
- package/dist/ui/pwa-update-toast.d.ts +34 -0
- package/dist/ui/pwa-update-toast.d.ts.map +1 -0
- package/dist/ui/pwa-update-toast.js +43 -0
- package/dist/ui/select.d.ts +38 -0
- package/dist/ui/select.d.ts.map +1 -1
- package/dist/ui/select.js +162 -61
- package/dist/ui.js +40 -35
- package/package.json +93 -4
- package/src/shared/styles/app-shell.css +3 -0
- package/src/shared/styles/native.css +577 -0
- package/dist/node_modules/@capacitor/core/dist/index.js +0 -268
package/README.md
CHANGED
|
@@ -56,6 +56,72 @@ bun run sanity
|
|
|
56
56
|
|
|
57
57
|
- **cn** - Utility for merging Tailwind classes
|
|
58
58
|
|
|
59
|
+
## shell-native (app shells only)
|
|
60
|
+
|
|
61
|
+
`@burdenoff/fe-libs/shell-native` is the shell-side native runtime: Capacitor
|
|
62
|
+
(iOS/Android), Electron desktop and PWA wiring in one entry point. **App shells
|
|
63
|
+
import it; microfrontends never do** — MFEs talk to the shell through
|
|
64
|
+
`window.__burdenoffNativeBridge` (`@burdenoff/fe-libs/shared/native`).
|
|
65
|
+
|
|
66
|
+
Boot it once in `main.tsx`, before React mounts:
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import { bootNativeShell, registerDeepLinkNavigator } from '@burdenoff/fe-libs/shell-native';
|
|
70
|
+
|
|
71
|
+
const shell = bootNativeShell({
|
|
72
|
+
product: 'vibecontrols',
|
|
73
|
+
appName: 'VibeControls',
|
|
74
|
+
// Optional plugins are loaded ONLY through these loaders, so web-only shells
|
|
75
|
+
// never bundle them.
|
|
76
|
+
plugins: {
|
|
77
|
+
updater: () => import('@capgo/capacitor-updater'),
|
|
78
|
+
pushNotifications: () => import('@capacitor/push-notifications'),
|
|
79
|
+
},
|
|
80
|
+
push: { enabled: true, onToken: (token) => void registerDevice(token) },
|
|
81
|
+
runtimeHooks: { syncPendingOperations: refetchAll, saveState: flushDrafts },
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// Inside the router:
|
|
85
|
+
registerDeepLinkNavigator((path) => navigate(path));
|
|
86
|
+
// After the first meaningful paint:
|
|
87
|
+
void shell.markAppReady();
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Boot order (each step is individually try/caught — boot never throws): preview →
|
|
91
|
+
OTA `notifyAppReady` → auth-redirect intercept → external URL opener → native
|
|
92
|
+
bridge + platform classes → device info → status-bar theme listener → keyboard →
|
|
93
|
+
Android back button → deep links → network → app-state hooks → push listeners →
|
|
94
|
+
splash safety timer (native) → PWA service worker (web) → desktop shell boot.
|
|
95
|
+
|
|
96
|
+
Contracts the shells and MFEs can rely on:
|
|
97
|
+
|
|
98
|
+
- **Window globals** — `__burdenoffNativeBridge`, `__burdenoffDeviceInfo`,
|
|
99
|
+
`__burdenoffOpenExternal(url)`, `__burdenoffPushToken`,
|
|
100
|
+
`__burdenoffPwaInstallPrompt`.
|
|
101
|
+
- **Body classes** — `platform-ios | platform-android | platform-web`,
|
|
102
|
+
`platform-native`, `platform-preview`, `keyboard-open`.
|
|
103
|
+
`<html>` carries `data-platform` and (in preview) `data-native-preview`.
|
|
104
|
+
- **CSS var** — `--keyboard-height` (0px when closed).
|
|
105
|
+
- **Window events** — `burdenoff:appReady`, `burdenoff:appStateChange`,
|
|
106
|
+
`burdenoff:networkStatusChange`, `burdenoff:keyboardWillShow|DidShow|WillHide|DidHide`,
|
|
107
|
+
`burdenoff:pushToken`, `burdenoff:pwaUpdateReady`, `burdenoff:pwaInstalled`,
|
|
108
|
+
`burdenoff:pwaInstallAvailable`. The shell listens for `burdenoff:statusBarTheme`.
|
|
109
|
+
|
|
110
|
+
### Native preview flag
|
|
111
|
+
|
|
112
|
+
`?__nativePreview=ios|android|pwa|desktop` renders the installed-app chrome in a
|
|
113
|
+
plain browser (persisted in `sessionStorage`, cleared with `off`). It is
|
|
114
|
+
**presentation only** — real plugin calls stay gated on
|
|
115
|
+
`Capacitor.isPluginAvailable`, and the flag is ignored inside a real native app.
|
|
116
|
+
|
|
117
|
+
### Build-time config generators
|
|
118
|
+
|
|
119
|
+
`defineCapacitorConfig(nativeConfig)`, `defineWebManifest(nativeConfig)` and
|
|
120
|
+
`renderServiceWorker(nativeConfig, version)` are pure functions (no
|
|
121
|
+
`@capacitor/*` imports) that emit each product's `capacitor.config.ts`,
|
|
122
|
+
`public/manifest.json` and `public/sw.js` from its `native.config.json`
|
|
123
|
+
(`NativeConfig`).
|
|
124
|
+
|
|
59
125
|
## Tech Stack
|
|
60
126
|
|
|
61
127
|
- React 19
|
package/dist/button/Button.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
declare const buttonVariants: (props?: ({
|
|
4
|
-
variant?: "link" | "default" | "
|
|
4
|
+
variant?: "link" | "default" | "destructive" | "secondary" | "outline" | "ghost" | null | undefined;
|
|
5
5
|
size?: "default" | "icon" | "sm" | "lg" | null | undefined;
|
|
6
6
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
7
7
|
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
@@ -38,6 +38,20 @@ export interface AppShellLayoutProps {
|
|
|
38
38
|
* CSS `env(safe-area-inset-*)`, picking the larger. Default `true`.
|
|
39
39
|
*/
|
|
40
40
|
safeArea?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Bottom bar slot (e.g. `MobileTabBar`), rendered after the content row.
|
|
43
|
+
* The bar positions itself (fixed bottom); the layout only pads the main
|
|
44
|
+
* scroll area by `var(--mobile-tabbar-height)` so content never hides
|
|
45
|
+
* behind it.
|
|
46
|
+
*/
|
|
47
|
+
bottomBar?: ReactNode;
|
|
48
|
+
/**
|
|
49
|
+
* Native-compact mode for installed-app phone layouts: marks the shell with
|
|
50
|
+
* `data-native-shell` (native.css takes over safe-areas / paddings) and
|
|
51
|
+
* makes the content area full-bleed (no desktop page gutters). Combine with
|
|
52
|
+
* `bottomBar` + `NativeTopBar`.
|
|
53
|
+
*/
|
|
54
|
+
nativeCompact?: boolean;
|
|
41
55
|
}
|
|
42
56
|
/**
|
|
43
57
|
* AppShellLayout Component
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShellLayout.d.ts","sourceRoot":"","sources":["../../src/chrome/AppShellLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uBAAuB;IACvB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,wBAAwB;IACxB,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB,uBAAuB;IACvB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,uDAAuD;IACvD,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB,sDAAsD;IACtD,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,mBAAmB;IACnB,QAAQ,EAAE,SAAS,CAAC;IAEpB,gCAAgC;IAChC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,gCAAgC;IAChC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,iCAAiC;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,oGAAoG;IACpG,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AppShellLayout.d.ts","sourceRoot":"","sources":["../../src/chrome/AppShellLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uBAAuB;IACvB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,wBAAwB;IACxB,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB,uBAAuB;IACvB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,uDAAuD;IACvD,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB,sDAAsD;IACtD,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,mBAAmB;IACnB,QAAQ,EAAE,SAAS,CAAC;IAEpB,gCAAgC;IAChC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,gCAAgC;IAChC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,iCAAiC;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,oGAAoG;IACpG,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CA0GlD,CAAC"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { Fragment as e, jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
2
2
|
//#region src/chrome/AppShellLayout.tsx
|
|
3
|
-
var r = ({ header: r, sidebar: i, footer: a, bottomPanel: o, rightPanel: s, statusBar: c, children: l, headerVisible: u = !0, footerVisible: d = !0, sidebarVisible: f = !0, contentClassName: p, contentPadding: m = "px-6 lg:px-8 py-6", footerInContent: h = !1, safeArea: g = !0 }) => {
|
|
4
|
-
let
|
|
3
|
+
var r = ({ header: r, sidebar: i, footer: a, bottomPanel: o, rightPanel: s, statusBar: c, children: l, headerVisible: u = !0, footerVisible: d = !0, sidebarVisible: f = !0, contentClassName: p, contentPadding: m = "px-6 lg:px-8 py-6", footerInContent: h = !1, safeArea: g = !0, bottomBar: _, nativeCompact: v = !1 }) => {
|
|
4
|
+
let y = v ? "p-0" : m, b = h ? `flex-1 overflow-auto bg-bg-canvas flex flex-col ${y}` : `flex-1 overflow-auto bg-bg-canvas ${y}`, x = p || b, S = g ? {
|
|
5
|
+
paddingTop: "max(var(--safe-top, 0px), env(safe-area-inset-top, 0px))",
|
|
6
|
+
paddingBottom: "max(var(--safe-bottom, 0px), env(safe-area-inset-bottom, 0px))",
|
|
7
|
+
paddingLeft: "max(var(--safe-left, 0px), env(safe-area-inset-left, 0px))",
|
|
8
|
+
paddingRight: "max(var(--safe-right, 0px), env(safe-area-inset-right, 0px))"
|
|
9
|
+
} : {}, C = _ ? { paddingBottom: "var(--mobile-tabbar-height, 0px)" } : void 0;
|
|
5
10
|
return /* @__PURE__ */ n("div", {
|
|
6
11
|
className: "flex flex-col h-screen bg-bg-canvas",
|
|
7
|
-
style:
|
|
8
|
-
|
|
9
|
-
paddingBottom: "max(var(--safe-bottom, 0px), env(safe-area-inset-bottom, 0px))",
|
|
10
|
-
paddingLeft: "max(var(--safe-left, 0px), env(safe-area-inset-left, 0px))",
|
|
11
|
-
paddingRight: "max(var(--safe-right, 0px), env(safe-area-inset-right, 0px))"
|
|
12
|
-
} : {},
|
|
12
|
+
style: S,
|
|
13
|
+
"data-native-shell": v ? "" : void 0,
|
|
13
14
|
children: [
|
|
14
15
|
u && r,
|
|
15
16
|
/* @__PURE__ */ n("div", {
|
|
@@ -19,7 +20,8 @@ var r = ({ header: r, sidebar: i, footer: a, bottomPanel: o, rightPanel: s, stat
|
|
|
19
20
|
children: [/* @__PURE__ */ n("div", {
|
|
20
21
|
className: "flex flex-col flex-1 overflow-hidden",
|
|
21
22
|
children: [/* @__PURE__ */ t("main", {
|
|
22
|
-
className: `scrollbar-slim ${
|
|
23
|
+
className: `scrollbar-slim ${x}`,
|
|
24
|
+
style: C,
|
|
23
25
|
"data-shell-scroll-container": !0,
|
|
24
26
|
children: h ? /* @__PURE__ */ n(e, { children: [/* @__PURE__ */ t("div", {
|
|
25
27
|
className: d ? "flex-1" : "flex-1 min-h-0",
|
|
@@ -30,7 +32,8 @@ var r = ({ header: r, sidebar: i, footer: a, bottomPanel: o, rightPanel: s, stat
|
|
|
30
32
|
})]
|
|
31
33
|
}),
|
|
32
34
|
!h && d && a,
|
|
33
|
-
c
|
|
35
|
+
c,
|
|
36
|
+
_
|
|
34
37
|
]
|
|
35
38
|
});
|
|
36
39
|
};
|
|
@@ -16,6 +16,11 @@ export interface DynamicFooterProps {
|
|
|
16
16
|
legalPageOrder?: string[];
|
|
17
17
|
/** Skip API fetches and rely on built-in footer defaults */
|
|
18
18
|
deferRemoteData?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Hide the footer entirely inside installed apps (Capacitor native,
|
|
21
|
+
* Electron, standalone PWA). Forwarded to `Footer`. Default `true`.
|
|
22
|
+
*/
|
|
23
|
+
hideOnInstalledApp?: boolean;
|
|
19
24
|
}
|
|
20
|
-
export declare function DynamicFooter({ productSlug, productName, tagline, version, columns: customColumns, socialLinks: customSocialLinks, legalPageOrder, deferRemoteData, }: DynamicFooterProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
export declare function DynamicFooter({ productSlug, productName, tagline, version, columns: customColumns, socialLinks: customSocialLinks, legalPageOrder, deferRemoteData, hideOnInstalledApp, }: DynamicFooterProps): import("react/jsx-runtime").JSX.Element;
|
|
21
26
|
//# sourceMappingURL=DynamicFooter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicFooter.d.ts","sourceRoot":"","sources":["../../src/chrome/DynamicFooter.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"DynamicFooter.d.ts","sourceRoot":"","sources":["../../src/chrome/DynamicFooter.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAqFzD,MAAM,WAAW,kBAAkB;IACjC,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,kDAAkD;IAClD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,4DAA4D;IAC5D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,EAC5B,WAAW,EACX,WAAW,EACX,OAAO,EACP,OAAkB,EAClB,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,iBAAiB,EAC9B,cAAiC,EACjC,eAAuB,EACvB,kBAAyB,GAC1B,EAAE,kBAAkB,2CAmLpB"}
|
|
@@ -60,12 +60,12 @@ var y = _`
|
|
|
60
60
|
function w(e) {
|
|
61
61
|
return e.trim().replace(/[^A-Za-z0-9 ]/g, "").split(/\s+/).map((e, t) => t === 0 ? e.toLowerCase() : e.charAt(0).toUpperCase() + e.slice(1).toLowerCase()).join("");
|
|
62
62
|
}
|
|
63
|
-
function T({ productSlug: u, productName: f, tagline: p, version: m = "v1.0.0", columns: h, socialLinks: _, legalPageOrder: T = C, deferRemoteData: E = !1 }) {
|
|
64
|
-
let { workspaceId:
|
|
63
|
+
function T({ productSlug: u, productName: f, tagline: p, version: m = "v1.0.0", columns: h, socialLinks: _, legalPageOrder: T = C, deferRemoteData: E = !1, hideOnInstalledApp: D = !0 }) {
|
|
64
|
+
let { workspaceId: O, projectId: k } = t(), A = e("global"), { t: j } = n(), [M, N] = l(null), [P, F] = l(null);
|
|
65
65
|
s(() => {
|
|
66
|
-
if (!
|
|
66
|
+
if (!A || E) return;
|
|
67
67
|
let e = !1;
|
|
68
|
-
return
|
|
68
|
+
return A.query({
|
|
69
69
|
query: y,
|
|
70
70
|
variables: {
|
|
71
71
|
filter: { isPublished: !0 },
|
|
@@ -80,18 +80,18 @@ function T({ productSlug: u, productName: f, tagline: p, version: m = "v1.0.0",
|
|
|
80
80
|
label: e.title,
|
|
81
81
|
href: `/legal/${x[e.slug] || e.slug}`
|
|
82
82
|
}));
|
|
83
|
-
i.length > 0 &&
|
|
83
|
+
i.length > 0 && N(i);
|
|
84
84
|
}).catch(() => {}), () => {
|
|
85
85
|
e = !0;
|
|
86
86
|
};
|
|
87
87
|
}, [
|
|
88
88
|
E,
|
|
89
|
-
|
|
89
|
+
A,
|
|
90
90
|
T
|
|
91
91
|
]), s(() => {
|
|
92
|
-
if (!
|
|
92
|
+
if (!A || _ || E) return;
|
|
93
93
|
let e = !1;
|
|
94
|
-
return
|
|
94
|
+
return A.query({
|
|
95
95
|
query: b,
|
|
96
96
|
variables: { slug: u },
|
|
97
97
|
fetchPolicy: "cache-first"
|
|
@@ -105,22 +105,22 @@ function T({ productSlug: u, productName: f, tagline: p, version: m = "v1.0.0",
|
|
|
105
105
|
href: t,
|
|
106
106
|
icon: S[e.toLowerCase()] || /* @__PURE__ */ g(d, { className: "size-5" })
|
|
107
107
|
}));
|
|
108
|
-
r.length > 0 &&
|
|
108
|
+
r.length > 0 && F(r);
|
|
109
109
|
}).catch(() => {}), () => {
|
|
110
110
|
e = !0;
|
|
111
111
|
};
|
|
112
112
|
}, [
|
|
113
113
|
_,
|
|
114
114
|
E,
|
|
115
|
-
|
|
115
|
+
A,
|
|
116
116
|
u
|
|
117
117
|
]);
|
|
118
|
-
let
|
|
119
|
-
let e = h ?? r, t =
|
|
118
|
+
let I = c(() => {
|
|
119
|
+
let e = h ?? r, t = M ? e.map((e) => e.title === "Legal" ? {
|
|
120
120
|
...e,
|
|
121
|
-
links:
|
|
121
|
+
links: M
|
|
122
122
|
} : e) : e, n = (e, t) => {
|
|
123
|
-
let n =
|
|
123
|
+
let n = j(e);
|
|
124
124
|
return n === e ? t : n;
|
|
125
125
|
};
|
|
126
126
|
return t.map((e) => ({
|
|
@@ -132,20 +132,21 @@ function T({ productSlug: u, productName: f, tagline: p, version: m = "v1.0.0",
|
|
|
132
132
|
})
|
|
133
133
|
}));
|
|
134
134
|
}, [
|
|
135
|
-
|
|
135
|
+
M,
|
|
136
136
|
h,
|
|
137
|
-
|
|
137
|
+
j
|
|
138
138
|
]);
|
|
139
139
|
return /* @__PURE__ */ g(a, {
|
|
140
140
|
logo: /* @__PURE__ */ g(o, { size: "sidenav" }),
|
|
141
141
|
productName: f,
|
|
142
142
|
tagline: p,
|
|
143
|
-
columns:
|
|
144
|
-
socialLinks: _ ??
|
|
143
|
+
columns: I,
|
|
144
|
+
socialLinks: _ ?? P ?? i,
|
|
145
145
|
version: m,
|
|
146
|
+
hideOnInstalledApp: D,
|
|
146
147
|
context: {
|
|
147
|
-
workspace:
|
|
148
|
-
project:
|
|
148
|
+
workspace: O ?? void 0,
|
|
149
|
+
project: k ?? void 0
|
|
149
150
|
},
|
|
150
151
|
renderLink: ({ href: e, external: t, children: n, className: r }) => t ? /* @__PURE__ */ g("a", {
|
|
151
152
|
href: e,
|
package/dist/chrome/Footer.d.ts
CHANGED
|
@@ -89,6 +89,12 @@ export interface FooterProps {
|
|
|
89
89
|
children: ReactNode;
|
|
90
90
|
className?: string;
|
|
91
91
|
}) => ReactNode;
|
|
92
|
+
/**
|
|
93
|
+
* Hide the footer entirely inside installed apps (Capacitor native,
|
|
94
|
+
* Electron, standalone PWA) — footers are web chrome, replaced by the
|
|
95
|
+
* native tab bar. Default `true`.
|
|
96
|
+
*/
|
|
97
|
+
hideOnInstalledApp?: boolean;
|
|
92
98
|
}
|
|
93
99
|
/**
|
|
94
100
|
* Default footer columns for Burdenoff products
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../src/chrome/Footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../src/chrome/Footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAM3C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAYjE;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU;IACV,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2BAA2B;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,yBAAyB;IACzB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IACF,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,SAAS,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,KAAK,SAAS,CAAC;IAChB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,YAAY,EAwDhD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAAU,EAmB5C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,MAAM,EAAE,EAAE,CAAC,WAAW,CAwKlC,CAAC"}
|
package/dist/chrome/Footer.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { isInstalledApp as e } from "../shared/native/platform.js";
|
|
2
|
+
import { useShellLabel as t } from "../shared/providers/shell/useShellLabel.js";
|
|
3
|
+
import { PluginFooterStrip as n } from "./PluginFooterStrip.js";
|
|
4
|
+
import { ExternalLink as r, Github as i, MessageCircle as a, Twitter as o } from "lucide-react";
|
|
5
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
5
6
|
//#region src/chrome/Footer.tsx
|
|
6
|
-
function
|
|
7
|
+
function l(e) {
|
|
7
8
|
return {
|
|
8
9
|
0: "lg:grid-cols-2",
|
|
9
10
|
1: "lg:grid-cols-3",
|
|
@@ -14,7 +15,7 @@ function c(e) {
|
|
|
14
15
|
6: "lg:grid-cols-8"
|
|
15
16
|
}[e] ?? "lg:grid-cols-6";
|
|
16
17
|
}
|
|
17
|
-
var
|
|
18
|
+
var u = [
|
|
18
19
|
{
|
|
19
20
|
title: "Products",
|
|
20
21
|
links: [
|
|
@@ -98,60 +99,60 @@ var l = [
|
|
|
98
99
|
}
|
|
99
100
|
]
|
|
100
101
|
}
|
|
101
|
-
],
|
|
102
|
+
], d = [
|
|
102
103
|
{
|
|
103
104
|
id: "twitter",
|
|
104
105
|
label: "Twitter",
|
|
105
106
|
href: "https://twitter.com/burdenoff",
|
|
106
|
-
icon: /* @__PURE__ */ o
|
|
107
|
+
icon: /* @__PURE__ */ s(o, { className: "size-5" })
|
|
107
108
|
},
|
|
108
109
|
{
|
|
109
110
|
id: "github",
|
|
110
111
|
label: "GitHub",
|
|
111
112
|
href: "https://github.com/algoshred",
|
|
112
|
-
icon: /* @__PURE__ */
|
|
113
|
+
icon: /* @__PURE__ */ s(i, { className: "size-5" })
|
|
113
114
|
},
|
|
114
115
|
{
|
|
115
116
|
id: "discord",
|
|
116
117
|
label: "Discord",
|
|
117
118
|
href: "https://discord.gg/burdenoff",
|
|
118
|
-
icon: /* @__PURE__ */
|
|
119
|
+
icon: /* @__PURE__ */ s(a, { className: "size-5" })
|
|
119
120
|
}
|
|
120
|
-
],
|
|
121
|
-
let
|
|
121
|
+
], f = ({ logo: i, productName: a = "Burdenoff Workspaces", tagline: o = "Enterprise collaboration made simple", columns: f = u, socialLinks: p = d, copyright: m, version: h, buildInfo: g, context: _, children: v, renderLink: y, hideOnInstalledApp: b = !0 }) => {
|
|
122
|
+
let x = t(), S = (/* @__PURE__ */ new Date()).getFullYear(), C = m ?? x("footer.copyright", `${S} Burdenoff. All rights reserved.`).replace("{year}", String(S)), w = y ?? (({ href: e, external: t, children: n, className: r }) => /* @__PURE__ */ s("a", {
|
|
122
123
|
href: e,
|
|
123
124
|
target: t ? "_blank" : void 0,
|
|
124
125
|
rel: t ? "noopener noreferrer" : void 0,
|
|
125
126
|
className: r,
|
|
126
127
|
children: n
|
|
127
128
|
}));
|
|
128
|
-
return /* @__PURE__ */
|
|
129
|
+
return b && e() ? null : /* @__PURE__ */ c("footer", {
|
|
129
130
|
className: "bg-bg-elevated border-t border-border-subtle",
|
|
130
131
|
children: [
|
|
131
|
-
/* @__PURE__ */
|
|
132
|
+
/* @__PURE__ */ s("div", {
|
|
132
133
|
className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12",
|
|
133
|
-
children: /* @__PURE__ */
|
|
134
|
-
className: `grid grid-cols-2 ${
|
|
135
|
-
children: [/* @__PURE__ */
|
|
134
|
+
children: /* @__PURE__ */ c("div", {
|
|
135
|
+
className: `grid grid-cols-2 ${l(f.length)} gap-8`,
|
|
136
|
+
children: [/* @__PURE__ */ c("div", {
|
|
136
137
|
className: "col-span-2",
|
|
137
138
|
children: [
|
|
138
|
-
/* @__PURE__ */
|
|
139
|
+
/* @__PURE__ */ c("div", {
|
|
139
140
|
className: "flex items-center gap-3 mb-4",
|
|
140
|
-
children: [
|
|
141
|
+
children: [i ?? /* @__PURE__ */ s("div", {
|
|
141
142
|
className: "size-8 rounded-md bg-action-primary-bg flex items-center justify-center text-action-primary-text font-bold text-sm",
|
|
142
143
|
children: "B"
|
|
143
|
-
}), /* @__PURE__ */
|
|
144
|
+
}), /* @__PURE__ */ s("span", {
|
|
144
145
|
className: "text-lg font-semibold text-text-primary",
|
|
145
|
-
children:
|
|
146
|
+
children: a
|
|
146
147
|
})]
|
|
147
148
|
}),
|
|
148
|
-
/* @__PURE__ */
|
|
149
|
+
/* @__PURE__ */ s("p", {
|
|
149
150
|
className: "text-text-secondary text-sm mb-6 max-w-xs",
|
|
150
|
-
children:
|
|
151
|
+
children: o
|
|
151
152
|
}),
|
|
152
|
-
|
|
153
|
+
p.length > 0 && /* @__PURE__ */ s("div", {
|
|
153
154
|
className: "flex items-center gap-4",
|
|
154
|
-
children:
|
|
155
|
+
children: p.map((e) => /* @__PURE__ */ s("a", {
|
|
155
156
|
href: e.href,
|
|
156
157
|
target: "_blank",
|
|
157
158
|
rel: "noopener noreferrer",
|
|
@@ -161,67 +162,67 @@ var l = [
|
|
|
161
162
|
}, e.id))
|
|
162
163
|
})
|
|
163
164
|
]
|
|
164
|
-
}),
|
|
165
|
+
}), f.map((e) => /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h3", {
|
|
165
166
|
className: "text-sm font-semibold text-text-primary mb-4",
|
|
166
167
|
children: e.title
|
|
167
|
-
}), /* @__PURE__ */
|
|
168
|
+
}), /* @__PURE__ */ s("ul", {
|
|
168
169
|
className: "space-y-3",
|
|
169
|
-
children: e.links.map((e) => /* @__PURE__ */
|
|
170
|
+
children: e.links.map((e) => /* @__PURE__ */ s("li", { children: /* @__PURE__ */ c(w, {
|
|
170
171
|
href: e.href,
|
|
171
172
|
external: e.external,
|
|
172
173
|
className: "text-sm text-text-secondary hover:text-text-primary transition-colors inline-flex items-center gap-1",
|
|
173
174
|
children: [
|
|
174
175
|
e.icon,
|
|
175
176
|
e.label,
|
|
176
|
-
e.external && /* @__PURE__ */
|
|
177
|
+
e.external && /* @__PURE__ */ s(r, { className: "size-3" })
|
|
177
178
|
]
|
|
178
179
|
}) }, e.id))
|
|
179
180
|
})] }, e.title))]
|
|
180
181
|
})
|
|
181
182
|
}),
|
|
182
|
-
/* @__PURE__ */
|
|
183
|
-
/* @__PURE__ */
|
|
183
|
+
/* @__PURE__ */ s(n, {}),
|
|
184
|
+
/* @__PURE__ */ s("div", {
|
|
184
185
|
className: "border-t border-border-subtle",
|
|
185
|
-
children: /* @__PURE__ */
|
|
186
|
+
children: /* @__PURE__ */ s("div", {
|
|
186
187
|
className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4",
|
|
187
|
-
children: /* @__PURE__ */
|
|
188
|
+
children: /* @__PURE__ */ c("div", {
|
|
188
189
|
className: "flex flex-col sm:flex-row justify-between items-center gap-4 text-xs text-text-muted",
|
|
189
190
|
children: [
|
|
190
|
-
/* @__PURE__ */
|
|
191
|
+
/* @__PURE__ */ s("div", {
|
|
191
192
|
className: "flex items-center gap-2",
|
|
192
|
-
children: /* @__PURE__ */
|
|
193
|
+
children: /* @__PURE__ */ c("span", { children: ["© ", C] })
|
|
193
194
|
}),
|
|
194
|
-
|
|
195
|
+
_ && Object.values(_).some(Boolean) && /* @__PURE__ */ s("div", {
|
|
195
196
|
className: "flex items-center gap-3",
|
|
196
|
-
children: Object.entries(
|
|
197
|
+
children: Object.entries(_).map(([e, t]) => t && /* @__PURE__ */ c("div", {
|
|
197
198
|
className: "flex items-center gap-1",
|
|
198
|
-
children: [/* @__PURE__ */
|
|
199
|
+
children: [/* @__PURE__ */ c("span", {
|
|
199
200
|
className: "capitalize",
|
|
200
201
|
children: [e, ":"]
|
|
201
|
-
}), /* @__PURE__ */
|
|
202
|
+
}), /* @__PURE__ */ s("span", {
|
|
202
203
|
className: "text-text-secondary font-medium",
|
|
203
204
|
children: t
|
|
204
205
|
})]
|
|
205
206
|
}, e))
|
|
206
207
|
}),
|
|
207
|
-
/* @__PURE__ */
|
|
208
|
+
/* @__PURE__ */ c("div", {
|
|
208
209
|
className: "flex items-center gap-3",
|
|
209
210
|
children: [
|
|
210
|
-
|
|
211
|
-
|
|
211
|
+
h && /* @__PURE__ */ s("span", { children: h }),
|
|
212
|
+
h && g && /* @__PURE__ */ s("span", {
|
|
212
213
|
className: "text-border-subtle",
|
|
213
214
|
children: "|"
|
|
214
215
|
}),
|
|
215
|
-
|
|
216
|
+
g && /* @__PURE__ */ c("span", { children: ["Build ", g] })
|
|
216
217
|
]
|
|
217
218
|
})
|
|
218
219
|
]
|
|
219
220
|
})
|
|
220
221
|
})
|
|
221
222
|
}),
|
|
222
|
-
|
|
223
|
+
v
|
|
223
224
|
]
|
|
224
225
|
});
|
|
225
226
|
};
|
|
226
227
|
//#endregion
|
|
227
|
-
export {
|
|
228
|
+
export { u as DEFAULT_FOOTER_COLUMNS, d as DEFAULT_SOCIAL_LINKS, f as Footer };
|
|
@@ -12,7 +12,7 @@ export interface FooterItem {
|
|
|
12
12
|
/** Click handler */
|
|
13
13
|
onClick?: () => void;
|
|
14
14
|
/** Item type */
|
|
15
|
-
type?:
|
|
15
|
+
type?: "status" | "action" | "info";
|
|
16
16
|
/** Badge or indicator text */
|
|
17
17
|
badge?: string;
|
|
18
18
|
}
|
|
@@ -45,6 +45,11 @@ export interface FooterBarProps {
|
|
|
45
45
|
version?: string;
|
|
46
46
|
/** Additional content to render in footer */
|
|
47
47
|
children?: ReactNode;
|
|
48
|
+
/**
|
|
49
|
+
* Hide the footer entirely inside installed apps (Capacitor native,
|
|
50
|
+
* Electron, standalone PWA) — footers are web chrome. Default `true`.
|
|
51
|
+
*/
|
|
52
|
+
hideOnInstalledApp?: boolean;
|
|
48
53
|
}
|
|
49
54
|
/**
|
|
50
55
|
* FooterBar Component
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FooterBar.d.ts","sourceRoot":"","sources":["../../src/chrome/FooterBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"FooterBar.d.ts","sourceRoot":"","sources":["../../src/chrome/FooterBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG3C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IAEX,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IAEd,mCAAmC;IACnC,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB,gBAAgB;IAChB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IAEpC,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,QAAQ,EAAE,cAAc,CAAC;IAEzB,qDAAqD;IACrD,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IAEF,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAiGxC,CAAC"}
|
package/dist/chrome/FooterBar.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isInstalledApp as e } from "../shared/native/platform.js";
|
|
2
|
+
import { Fragment as t, jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
2
3
|
//#region src/chrome/FooterBar.tsx
|
|
3
|
-
var
|
|
4
|
-
|
|
4
|
+
var i = ({ sections: i, context: a, version: o, children: s, hideOnInstalledApp: c = !0 }) => {
|
|
5
|
+
if (c && e()) return null;
|
|
6
|
+
let l = (e) => /* @__PURE__ */ r("button", {
|
|
5
7
|
onClick: e.onClick,
|
|
6
8
|
className: `
|
|
7
9
|
flex items-center gap-icon-gap px-2 py-1 rounded-button
|
|
@@ -10,14 +12,14 @@ var r = ({ sections: r, context: i, version: a, children: o }) => {
|
|
|
10
12
|
`,
|
|
11
13
|
disabled: !e.onClick,
|
|
12
14
|
children: [
|
|
13
|
-
e.icon && /* @__PURE__ */
|
|
15
|
+
e.icon && /* @__PURE__ */ n("div", {
|
|
14
16
|
className: "w-icon-sm h-icon-sm",
|
|
15
|
-
children: typeof e.icon == "string" ? /* @__PURE__ */
|
|
17
|
+
children: typeof e.icon == "string" ? /* @__PURE__ */ n("svg", {
|
|
16
18
|
className: "w-full h-full",
|
|
17
19
|
fill: "none",
|
|
18
20
|
stroke: "currentColor",
|
|
19
21
|
viewBox: "0 0 24 24",
|
|
20
|
-
children: /* @__PURE__ */
|
|
22
|
+
children: /* @__PURE__ */ n("path", {
|
|
21
23
|
strokeLinecap: "round",
|
|
22
24
|
strokeLinejoin: "round",
|
|
23
25
|
strokeWidth: 2,
|
|
@@ -25,60 +27,60 @@ var r = ({ sections: r, context: i, version: a, children: o }) => {
|
|
|
25
27
|
})
|
|
26
28
|
}) : e.icon
|
|
27
29
|
}),
|
|
28
|
-
/* @__PURE__ */
|
|
29
|
-
e.badge && /* @__PURE__ */
|
|
30
|
+
/* @__PURE__ */ n("span", { children: e.label }),
|
|
31
|
+
e.badge && /* @__PURE__ */ n("span", {
|
|
30
32
|
className: "text-xs bg-status-success-bg-subtle text-status-success-text px-1.5 py-0.5 rounded",
|
|
31
33
|
children: e.badge
|
|
32
34
|
})
|
|
33
35
|
]
|
|
34
36
|
}, e.id);
|
|
35
|
-
return /* @__PURE__ */
|
|
37
|
+
return /* @__PURE__ */ r("footer", {
|
|
36
38
|
className: "h-8 bg-[var(--color-surface-glass)] backdrop-blur-[var(--blur-glass)] border-t border-[var(--color-border-glass)] flex items-center px-card-padding text-body-sm text-text-secondary",
|
|
37
39
|
children: [
|
|
38
|
-
/* @__PURE__ */
|
|
40
|
+
/* @__PURE__ */ r("div", {
|
|
39
41
|
className: "flex items-center gap-form-gap",
|
|
40
|
-
children: [
|
|
42
|
+
children: [a && Object.entries(a).map(([e, t]) => t && /* @__PURE__ */ r("div", {
|
|
41
43
|
className: "flex items-center gap-icon-gap",
|
|
42
44
|
children: [
|
|
43
|
-
e !== Object.keys(
|
|
45
|
+
e !== Object.keys(a)[0] && /* @__PURE__ */ n("span", {
|
|
44
46
|
className: "text-border-subtle",
|
|
45
47
|
children: "|"
|
|
46
48
|
}),
|
|
47
|
-
/* @__PURE__ */
|
|
49
|
+
/* @__PURE__ */ r("span", {
|
|
48
50
|
className: "text-text-muted capitalize",
|
|
49
51
|
children: [e, ":"]
|
|
50
52
|
}),
|
|
51
|
-
/* @__PURE__ */
|
|
53
|
+
/* @__PURE__ */ n("span", {
|
|
52
54
|
className: "text-text-primary font-medium",
|
|
53
|
-
children:
|
|
55
|
+
children: t
|
|
54
56
|
})
|
|
55
57
|
]
|
|
56
|
-
}, e)),
|
|
58
|
+
}, e)), i.left.length > 0 && /* @__PURE__ */ r(t, { children: [/* @__PURE__ */ n("span", {
|
|
57
59
|
className: "text-border-subtle",
|
|
58
60
|
children: "|"
|
|
59
|
-
}),
|
|
61
|
+
}), i.left.map(l)] })]
|
|
60
62
|
}),
|
|
61
|
-
/* @__PURE__ */
|
|
63
|
+
/* @__PURE__ */ n("div", {
|
|
62
64
|
className: "flex-1 flex items-center justify-center gap-form-gap",
|
|
63
|
-
children:
|
|
65
|
+
children: i.center.map(l)
|
|
64
66
|
}),
|
|
65
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ r("div", {
|
|
66
68
|
className: "flex items-center gap-form-gap",
|
|
67
69
|
children: [
|
|
68
|
-
|
|
69
|
-
|
|
70
|
+
i.right.map(l),
|
|
71
|
+
i.right.length > 0 && o && /* @__PURE__ */ n("span", {
|
|
70
72
|
className: "text-border-subtle",
|
|
71
73
|
children: "|"
|
|
72
74
|
}),
|
|
73
|
-
|
|
75
|
+
o && /* @__PURE__ */ n("span", {
|
|
74
76
|
className: "text-text-muted text-xs",
|
|
75
|
-
children:
|
|
77
|
+
children: o
|
|
76
78
|
})
|
|
77
79
|
]
|
|
78
80
|
}),
|
|
79
|
-
|
|
81
|
+
s
|
|
80
82
|
]
|
|
81
83
|
});
|
|
82
84
|
};
|
|
83
85
|
//#endregion
|
|
84
|
-
export {
|
|
86
|
+
export { i as FooterBar };
|