@qwickapps/react-framework 1.5.5 → 1.5.7
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/QwickApp.d.ts.map +1 -1
- package/dist/components/ResponsiveMenu.d.ts.map +1 -1
- package/dist/components/Scaffold.d.ts.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/contexts/NavigationContext.d.ts +64 -0
- package/dist/contexts/NavigationContext.d.ts.map +1 -0
- package/dist/contexts/index.d.ts +2 -0
- package/dist/contexts/index.d.ts.map +1 -1
- package/dist/hooks/useBaseProps.d.ts +12 -1161
- package/dist/hooks/useBaseProps.d.ts.map +1 -1
- package/dist/index.esm.js +514 -272
- package/dist/index.js +514 -272
- package/dist/palettes/manifest.json +19 -19
- package/dist/palettes/palette-autumn.1.4.9.css +172 -0
- package/dist/palettes/palette-autumn.1.4.9.min.css +1 -0
- package/dist/palettes/palette-autumn.1.5.0.css +172 -0
- package/dist/palettes/palette-autumn.1.5.0.min.css +1 -0
- package/dist/palettes/palette-autumn.1.5.1.css +172 -0
- package/dist/palettes/palette-autumn.1.5.1.min.css +1 -0
- package/dist/palettes/palette-autumn.1.5.2.css +172 -0
- package/dist/palettes/palette-autumn.1.5.2.min.css +1 -0
- package/dist/palettes/palette-autumn.1.5.3.css +172 -0
- package/dist/palettes/palette-autumn.1.5.3.min.css +1 -0
- package/dist/palettes/palette-autumn.1.5.4.css +172 -0
- package/dist/palettes/palette-autumn.1.5.4.min.css +1 -0
- package/dist/palettes/palette-autumn.1.5.6.css +172 -0
- package/dist/palettes/palette-autumn.1.5.6.min.css +1 -0
- package/dist/palettes/palette-autumn.1.5.7.css +172 -0
- package/dist/palettes/palette-autumn.1.5.7.min.css +1 -0
- package/dist/palettes/palette-cosmic.1.4.9.css +172 -0
- package/dist/palettes/palette-cosmic.1.4.9.min.css +1 -0
- package/dist/palettes/palette-cosmic.1.5.0.css +172 -0
- package/dist/palettes/palette-cosmic.1.5.0.min.css +1 -0
- package/dist/palettes/palette-cosmic.1.5.1.css +172 -0
- package/dist/palettes/palette-cosmic.1.5.1.min.css +1 -0
- package/dist/palettes/palette-cosmic.1.5.2.css +172 -0
- package/dist/palettes/palette-cosmic.1.5.2.min.css +1 -0
- package/dist/palettes/palette-cosmic.1.5.3.css +172 -0
- package/dist/palettes/palette-cosmic.1.5.3.min.css +1 -0
- package/dist/palettes/palette-cosmic.1.5.4.css +172 -0
- package/dist/palettes/palette-cosmic.1.5.4.min.css +1 -0
- package/dist/palettes/palette-cosmic.1.5.6.css +172 -0
- package/dist/palettes/palette-cosmic.1.5.6.min.css +1 -0
- package/dist/palettes/palette-cosmic.1.5.7.css +172 -0
- package/dist/palettes/palette-cosmic.1.5.7.min.css +1 -0
- package/dist/palettes/palette-default.1.4.9.css +178 -0
- package/dist/palettes/palette-default.1.4.9.min.css +1 -0
- package/dist/palettes/palette-default.1.5.0.css +178 -0
- package/dist/palettes/palette-default.1.5.0.min.css +1 -0
- package/dist/palettes/palette-default.1.5.1.css +178 -0
- package/dist/palettes/palette-default.1.5.1.min.css +1 -0
- package/dist/palettes/palette-default.1.5.2.css +178 -0
- package/dist/palettes/palette-default.1.5.2.min.css +1 -0
- package/dist/palettes/palette-default.1.5.3.css +178 -0
- package/dist/palettes/palette-default.1.5.3.min.css +1 -0
- package/dist/palettes/palette-default.1.5.4.css +178 -0
- package/dist/palettes/palette-default.1.5.4.min.css +1 -0
- package/dist/palettes/palette-default.1.5.6.css +178 -0
- package/dist/palettes/palette-default.1.5.6.min.css +1 -0
- package/dist/palettes/palette-default.1.5.7.css +178 -0
- package/dist/palettes/palette-default.1.5.7.min.css +1 -0
- package/dist/palettes/palette-ocean.1.4.9.css +172 -0
- package/dist/palettes/palette-ocean.1.4.9.min.css +1 -0
- package/dist/palettes/palette-ocean.1.5.0.css +172 -0
- package/dist/palettes/palette-ocean.1.5.0.min.css +1 -0
- package/dist/palettes/palette-ocean.1.5.1.css +172 -0
- package/dist/palettes/palette-ocean.1.5.1.min.css +1 -0
- package/dist/palettes/palette-ocean.1.5.2.css +172 -0
- package/dist/palettes/palette-ocean.1.5.2.min.css +1 -0
- package/dist/palettes/palette-ocean.1.5.3.css +172 -0
- package/dist/palettes/palette-ocean.1.5.3.min.css +1 -0
- package/dist/palettes/palette-ocean.1.5.4.css +172 -0
- package/dist/palettes/palette-ocean.1.5.4.min.css +1 -0
- package/dist/palettes/palette-ocean.1.5.6.css +172 -0
- package/dist/palettes/palette-ocean.1.5.6.min.css +1 -0
- package/dist/palettes/palette-ocean.1.5.7.css +172 -0
- package/dist/palettes/palette-ocean.1.5.7.min.css +1 -0
- package/dist/palettes/palette-spring.1.4.9.css +160 -0
- package/dist/palettes/palette-spring.1.4.9.min.css +1 -0
- package/dist/palettes/palette-spring.1.5.0.css +160 -0
- package/dist/palettes/palette-spring.1.5.0.min.css +1 -0
- package/dist/palettes/palette-spring.1.5.1.css +160 -0
- package/dist/palettes/palette-spring.1.5.1.min.css +1 -0
- package/dist/palettes/palette-spring.1.5.2.css +160 -0
- package/dist/palettes/palette-spring.1.5.2.min.css +1 -0
- package/dist/palettes/palette-spring.1.5.3.css +166 -0
- package/dist/palettes/palette-spring.1.5.3.min.css +1 -0
- package/dist/palettes/palette-spring.1.5.4.css +166 -0
- package/dist/palettes/palette-spring.1.5.4.min.css +1 -0
- package/dist/palettes/palette-spring.1.5.6.css +166 -0
- package/dist/palettes/palette-spring.1.5.6.min.css +1 -0
- package/dist/palettes/palette-spring.1.5.7.css +166 -0
- package/dist/palettes/palette-spring.1.5.7.min.css +1 -0
- package/dist/palettes/palette-winter.1.4.9.css +172 -0
- package/dist/palettes/palette-winter.1.4.9.min.css +1 -0
- package/dist/palettes/palette-winter.1.5.0.css +172 -0
- package/dist/palettes/palette-winter.1.5.0.min.css +1 -0
- package/dist/palettes/palette-winter.1.5.1.css +172 -0
- package/dist/palettes/palette-winter.1.5.1.min.css +1 -0
- package/dist/palettes/palette-winter.1.5.2.css +172 -0
- package/dist/palettes/palette-winter.1.5.2.min.css +1 -0
- package/dist/palettes/palette-winter.1.5.3.css +172 -0
- package/dist/palettes/palette-winter.1.5.3.min.css +1 -0
- package/dist/palettes/palette-winter.1.5.4.css +172 -0
- package/dist/palettes/palette-winter.1.5.4.min.css +1 -0
- package/dist/palettes/palette-winter.1.5.6.css +172 -0
- package/dist/palettes/palette-winter.1.5.6.min.css +1 -0
- package/dist/palettes/palette-winter.1.5.7.css +172 -0
- package/dist/palettes/palette-winter.1.5.7.min.css +1 -0
- package/dist/utils/iconMap.d.ts +21 -8
- package/dist/utils/iconMap.d.ts.map +1 -1
- package/dist/utils/reactUtils.d.ts +0 -23
- package/dist/utils/reactUtils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/utils/iconMap.test.tsx +197 -0
- package/src/components/QwickApp.tsx +24 -15
- package/src/components/ResponsiveMenu.tsx +3 -4
- package/src/components/Scaffold.tsx +3 -4
- package/src/components/index.ts +1 -0
- package/src/components/pages/Page.tsx +2 -2
- package/src/contexts/NavigationContext.tsx +168 -0
- package/src/contexts/index.ts +2 -0
- package/src/utils/iconMap.tsx +209 -151
- package/src/utils/reactUtils.tsx +2 -47
package/dist/index.esm.js
CHANGED
|
@@ -4,10 +4,11 @@ import { useMediaQuery, Box, useTheme as useTheme$1, Paper, Typography, Tooltip,
|
|
|
4
4
|
import React, { useMemo, useContext, useState, useCallback, useEffect, createContext, useReducer, useRef, isValidElement, createElement, useId, useLayoutEffect, Component, cloneElement } from 'react';
|
|
5
5
|
import { MustacheTemplateProvider, MemoryCacheProvider, CachedDataProvider, Field, Editor, FieldType, Schema, Model, DataType } from '@qwickapps/schema';
|
|
6
6
|
import { createTheme, ThemeProvider as ThemeProvider$1 } from '@mui/material/styles';
|
|
7
|
-
import { Check, ContentCopy,
|
|
7
|
+
import { Check, ContentCopy, Add, CheckCircle, Close, Delete, Edit, Refresh, RotateRight, Save, Search, Send, Share, Sync, Block, Key, Lock, LockOpen, Login, Logout, Security, Shield, VerifiedUser, Visibility, VisibilityOff, VpnKey, AttachMoney, Business, ShoppingCart, Work, WorkspacePremium, Email, Notifications, Phone, SupportAgent, Article as Article$1, Book, InsertPhoto, LibraryBooks, PhotoLibrary, PlayArrow, Architecture, Autorenew, Cloud, CloudDownload, CloudUpload, Code as Code$1, Computer, Construction, IntegrationInstructions, Memory, Psychology, Rocket, Storage, ArrowBack, ArrowForward, Dashboard, Download, Explore, Home, Layers, Menu, Route, Settings, TrendingUp, Tune, Inventory, Inventory2, LocalOffer, Speed, Info, Favorite, Help, Star, AccountCircle, Group, ManageAccounts, People, Person, PersonSearch, HelpOutline, BrokenImage, MoreVert, FormatBold, FormatItalic, FormatUnderlined, ExpandMore, ExpandLess, Schedule, Launch, LightMode, DarkMode, SettingsSystemDaydream, Palette, Circle, RadioButtonUnchecked } from '@mui/icons-material';
|
|
8
8
|
import { IsOptional, ValidateIf, IsIn, IsInt, Min, IsString, IsNotEmpty, IsBoolean, IsNumber, Max, IsArray, ValidateNested, IsUrl, IsObject } from 'class-validator';
|
|
9
9
|
import 'reflect-metadata';
|
|
10
10
|
import { Type } from 'class-transformer';
|
|
11
|
+
import { useInRouterContext, useNavigate, useLocation } from 'react-router-dom';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Breakpoint utilities for QwickApps React Framework
|
|
@@ -3072,181 +3073,189 @@ Code.transformCodeHighlight = element => {
|
|
|
3072
3073
|
};
|
|
3073
3074
|
|
|
3074
3075
|
/**
|
|
3075
|
-
* Centralized icon registry mapping icon names to their representations
|
|
3076
|
-
*
|
|
3076
|
+
* Centralized icon registry mapping icon names to their representations.
|
|
3077
|
+
* Sorted alphabetically by category, then by key within each category.
|
|
3078
|
+
*
|
|
3079
|
+
* For icons not in this map, getIconComponent() will return a HelpOutline fallback
|
|
3080
|
+
* and log a warning. Use registerIcon() to add app-specific icons at runtime.
|
|
3077
3081
|
*/
|
|
3078
3082
|
const iconMap = {
|
|
3079
|
-
//
|
|
3080
|
-
home: {
|
|
3081
|
-
emoji: '🏠',
|
|
3082
|
-
component: Home
|
|
3083
|
-
},
|
|
3084
|
-
menu: {
|
|
3085
|
-
emoji: '☰',
|
|
3086
|
-
component: Menu
|
|
3087
|
-
},
|
|
3088
|
-
dashboard: {
|
|
3089
|
-
emoji: '📊',
|
|
3090
|
-
component: Dashboard
|
|
3091
|
-
},
|
|
3092
|
-
// Information & Help
|
|
3093
|
-
info: {
|
|
3094
|
-
emoji: 'ℹ️',
|
|
3095
|
-
component: Info
|
|
3096
|
-
},
|
|
3097
|
-
about: {
|
|
3098
|
-
emoji: 'ℹ️',
|
|
3099
|
-
component: Info
|
|
3100
|
-
},
|
|
3101
|
-
help: {
|
|
3102
|
-
emoji: '❓',
|
|
3103
|
-
component: Help
|
|
3104
|
-
},
|
|
3105
|
-
book: {
|
|
3106
|
-
emoji: '📖',
|
|
3107
|
-
component: Book
|
|
3108
|
-
},
|
|
3109
|
-
// Communication
|
|
3110
|
-
email: {
|
|
3111
|
-
emoji: '📧',
|
|
3112
|
-
component: Email
|
|
3113
|
-
},
|
|
3114
|
-
contact: {
|
|
3115
|
-
emoji: '📧',
|
|
3116
|
-
component: Email
|
|
3117
|
-
},
|
|
3118
|
-
phone: {
|
|
3119
|
-
emoji: '📱',
|
|
3120
|
-
component: Phone
|
|
3121
|
-
},
|
|
3122
|
-
send: {
|
|
3123
|
-
emoji: '📤',
|
|
3124
|
-
component: Send
|
|
3125
|
-
},
|
|
3126
|
-
// Actions
|
|
3083
|
+
// === Actions ===
|
|
3127
3084
|
add: {
|
|
3128
3085
|
emoji: '➕',
|
|
3129
3086
|
component: Add
|
|
3130
3087
|
},
|
|
3131
|
-
edit: {
|
|
3132
|
-
emoji: '✏️',
|
|
3133
|
-
component: Edit
|
|
3134
|
-
},
|
|
3135
|
-
delete: {
|
|
3136
|
-
emoji: '🗑️',
|
|
3137
|
-
component: Delete
|
|
3138
|
-
},
|
|
3139
|
-
save: {
|
|
3140
|
-
emoji: '💾',
|
|
3141
|
-
component: Save
|
|
3142
|
-
},
|
|
3143
3088
|
check: {
|
|
3144
3089
|
emoji: '✓',
|
|
3145
3090
|
component: Check
|
|
3146
3091
|
},
|
|
3092
|
+
check_circle: {
|
|
3093
|
+
emoji: '✅',
|
|
3094
|
+
component: CheckCircle
|
|
3095
|
+
},
|
|
3147
3096
|
close: {
|
|
3148
3097
|
emoji: '✕',
|
|
3149
3098
|
component: Close
|
|
3150
3099
|
},
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3154
|
-
component: ArrowForward
|
|
3100
|
+
delete: {
|
|
3101
|
+
emoji: '🗑️',
|
|
3102
|
+
component: Delete
|
|
3155
3103
|
},
|
|
3156
|
-
|
|
3157
|
-
emoji: '
|
|
3158
|
-
component:
|
|
3104
|
+
edit: {
|
|
3105
|
+
emoji: '✏️',
|
|
3106
|
+
component: Edit
|
|
3107
|
+
},
|
|
3108
|
+
refresh: {
|
|
3109
|
+
emoji: '🔄',
|
|
3110
|
+
component: Refresh
|
|
3111
|
+
},
|
|
3112
|
+
rotate_right: {
|
|
3113
|
+
emoji: '🔄',
|
|
3114
|
+
component: RotateRight
|
|
3115
|
+
},
|
|
3116
|
+
save: {
|
|
3117
|
+
emoji: '💾',
|
|
3118
|
+
component: Save
|
|
3159
3119
|
},
|
|
3160
|
-
// Content
|
|
3161
3120
|
search: {
|
|
3162
3121
|
emoji: '🔍',
|
|
3163
3122
|
component: Search
|
|
3164
3123
|
},
|
|
3124
|
+
send: {
|
|
3125
|
+
emoji: '📤',
|
|
3126
|
+
component: Send
|
|
3127
|
+
},
|
|
3165
3128
|
share: {
|
|
3166
3129
|
emoji: '🔗',
|
|
3167
3130
|
component: Share
|
|
3168
3131
|
},
|
|
3169
|
-
|
|
3170
|
-
emoji: '
|
|
3171
|
-
component:
|
|
3132
|
+
sync: {
|
|
3133
|
+
emoji: '🔄',
|
|
3134
|
+
component: Sync
|
|
3172
3135
|
},
|
|
3173
|
-
|
|
3174
|
-
|
|
3175
|
-
|
|
3136
|
+
// === Authentication & Security ===
|
|
3137
|
+
block: {
|
|
3138
|
+
emoji: '🚫',
|
|
3139
|
+
component: Block
|
|
3176
3140
|
},
|
|
3177
|
-
|
|
3178
|
-
emoji: '
|
|
3179
|
-
component:
|
|
3141
|
+
key: {
|
|
3142
|
+
emoji: '🔑',
|
|
3143
|
+
component: Key
|
|
3180
3144
|
},
|
|
3181
|
-
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
component: Person
|
|
3145
|
+
lock: {
|
|
3146
|
+
emoji: '🔒',
|
|
3147
|
+
component: Lock
|
|
3185
3148
|
},
|
|
3186
|
-
|
|
3187
|
-
emoji: '
|
|
3188
|
-
component:
|
|
3149
|
+
lock_open: {
|
|
3150
|
+
emoji: '🔓',
|
|
3151
|
+
component: LockOpen
|
|
3189
3152
|
},
|
|
3190
|
-
|
|
3191
|
-
emoji: '
|
|
3192
|
-
component:
|
|
3153
|
+
lockopen: {
|
|
3154
|
+
emoji: '🔓',
|
|
3155
|
+
component: LockOpen
|
|
3193
3156
|
},
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3157
|
+
// alias
|
|
3158
|
+
login: {
|
|
3159
|
+
emoji: '🔑',
|
|
3160
|
+
component: Login
|
|
3197
3161
|
},
|
|
3198
|
-
|
|
3199
|
-
emoji: '
|
|
3200
|
-
component:
|
|
3162
|
+
logout: {
|
|
3163
|
+
emoji: '🚪',
|
|
3164
|
+
component: Logout
|
|
3165
|
+
},
|
|
3166
|
+
security: {
|
|
3167
|
+
emoji: '🔐',
|
|
3168
|
+
component: Security
|
|
3169
|
+
},
|
|
3170
|
+
shield: {
|
|
3171
|
+
emoji: '🛡️',
|
|
3172
|
+
component: Shield
|
|
3201
3173
|
},
|
|
3202
3174
|
verified_user: {
|
|
3203
3175
|
emoji: '✅',
|
|
3204
3176
|
component: VerifiedUser
|
|
3205
3177
|
},
|
|
3206
|
-
|
|
3178
|
+
visibility: {
|
|
3179
|
+
emoji: '👁️',
|
|
3180
|
+
component: Visibility
|
|
3181
|
+
},
|
|
3182
|
+
visibility_off: {
|
|
3183
|
+
emoji: '🙈',
|
|
3184
|
+
component: VisibilityOff
|
|
3185
|
+
},
|
|
3186
|
+
visibilityoff: {
|
|
3187
|
+
emoji: '🙈',
|
|
3188
|
+
component: VisibilityOff
|
|
3189
|
+
},
|
|
3190
|
+
// alias
|
|
3191
|
+
vpn_key: {
|
|
3192
|
+
emoji: '🔐',
|
|
3193
|
+
component: VpnKey
|
|
3194
|
+
},
|
|
3195
|
+
// === Business & Commerce ===
|
|
3196
|
+
attach_money: {
|
|
3197
|
+
emoji: '💰',
|
|
3198
|
+
component: AttachMoney
|
|
3199
|
+
},
|
|
3200
|
+
attachmoney: {
|
|
3201
|
+
emoji: '💰',
|
|
3202
|
+
component: AttachMoney
|
|
3203
|
+
},
|
|
3204
|
+
// alias
|
|
3207
3205
|
business: {
|
|
3208
3206
|
emoji: '🏢',
|
|
3209
3207
|
component: Business
|
|
3210
3208
|
},
|
|
3211
|
-
|
|
3209
|
+
cart: {
|
|
3212
3210
|
emoji: '🛒',
|
|
3213
3211
|
component: ShoppingCart
|
|
3214
3212
|
},
|
|
3215
|
-
|
|
3213
|
+
// alias
|
|
3214
|
+
shopping_cart: {
|
|
3216
3215
|
emoji: '🛒',
|
|
3217
3216
|
component: ShoppingCart
|
|
3218
3217
|
},
|
|
3219
|
-
|
|
3220
|
-
emoji: '
|
|
3221
|
-
component:
|
|
3218
|
+
shoppingcart: {
|
|
3219
|
+
emoji: '🛒',
|
|
3220
|
+
component: ShoppingCart
|
|
3222
3221
|
},
|
|
3223
|
-
//
|
|
3224
|
-
|
|
3225
|
-
emoji: '
|
|
3226
|
-
component:
|
|
3222
|
+
// alias
|
|
3223
|
+
work: {
|
|
3224
|
+
emoji: '💼',
|
|
3225
|
+
component: Work
|
|
3227
3226
|
},
|
|
3228
|
-
|
|
3229
|
-
emoji: '
|
|
3230
|
-
component:
|
|
3227
|
+
workspace_premium: {
|
|
3228
|
+
emoji: '⭐',
|
|
3229
|
+
component: WorkspacePremium
|
|
3231
3230
|
},
|
|
3232
|
-
|
|
3233
|
-
|
|
3234
|
-
|
|
3231
|
+
// === Communication ===
|
|
3232
|
+
contact: {
|
|
3233
|
+
emoji: '📧',
|
|
3234
|
+
component: Email
|
|
3235
3235
|
},
|
|
3236
|
-
|
|
3237
|
-
|
|
3238
|
-
|
|
3236
|
+
// alias
|
|
3237
|
+
email: {
|
|
3238
|
+
emoji: '📧',
|
|
3239
|
+
component: Email
|
|
3239
3240
|
},
|
|
3240
|
-
|
|
3241
|
-
|
|
3242
|
-
|
|
3243
|
-
component: Settings
|
|
3241
|
+
mail: {
|
|
3242
|
+
emoji: '📧',
|
|
3243
|
+
component: Email
|
|
3244
3244
|
},
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3245
|
+
// alias
|
|
3246
|
+
notifications: {
|
|
3247
|
+
emoji: '🔔',
|
|
3248
|
+
component: Notifications
|
|
3249
|
+
},
|
|
3250
|
+
phone: {
|
|
3251
|
+
emoji: '📱',
|
|
3252
|
+
component: Phone
|
|
3253
|
+
},
|
|
3254
|
+
support_agent: {
|
|
3255
|
+
emoji: '🛎️',
|
|
3256
|
+
component: SupportAgent
|
|
3248
3257
|
},
|
|
3249
|
-
// Content
|
|
3258
|
+
// === Content & Media ===
|
|
3250
3259
|
article: {
|
|
3251
3260
|
emoji: '📰',
|
|
3252
3261
|
component: Article$1
|
|
@@ -3255,162 +3264,297 @@ const iconMap = {
|
|
|
3255
3264
|
emoji: '📝',
|
|
3256
3265
|
component: Book
|
|
3257
3266
|
},
|
|
3267
|
+
// alias
|
|
3268
|
+
book: {
|
|
3269
|
+
emoji: '📖',
|
|
3270
|
+
component: Book
|
|
3271
|
+
},
|
|
3272
|
+
gallery: {
|
|
3273
|
+
emoji: '🖼️',
|
|
3274
|
+
component: InsertPhoto
|
|
3275
|
+
},
|
|
3276
|
+
// alias
|
|
3277
|
+
image: {
|
|
3278
|
+
emoji: '🖼️',
|
|
3279
|
+
component: InsertPhoto
|
|
3280
|
+
},
|
|
3281
|
+
insert_photo: {
|
|
3282
|
+
emoji: '🖼️',
|
|
3283
|
+
component: InsertPhoto
|
|
3284
|
+
},
|
|
3285
|
+
library_books: {
|
|
3286
|
+
emoji: '📚',
|
|
3287
|
+
component: LibraryBooks
|
|
3288
|
+
},
|
|
3258
3289
|
news: {
|
|
3259
3290
|
emoji: '📰',
|
|
3260
|
-
component:
|
|
3291
|
+
component: Article$1
|
|
3261
3292
|
},
|
|
3262
|
-
|
|
3263
|
-
|
|
3264
|
-
|
|
3293
|
+
// alias
|
|
3294
|
+
photo_library: {
|
|
3295
|
+
emoji: '📸',
|
|
3296
|
+
component: PhotoLibrary
|
|
3265
3297
|
},
|
|
3266
|
-
|
|
3267
|
-
emoji: '
|
|
3268
|
-
component:
|
|
3298
|
+
play: {
|
|
3299
|
+
emoji: '▶️',
|
|
3300
|
+
component: PlayArrow
|
|
3301
|
+
},
|
|
3302
|
+
// alias
|
|
3303
|
+
play_arrow: {
|
|
3304
|
+
emoji: '▶️',
|
|
3305
|
+
component: PlayArrow
|
|
3269
3306
|
},
|
|
3270
3307
|
portfolio: {
|
|
3271
3308
|
emoji: '💼',
|
|
3272
3309
|
component: Business
|
|
3273
3310
|
},
|
|
3274
|
-
|
|
3275
|
-
|
|
3276
|
-
|
|
3311
|
+
// alias
|
|
3312
|
+
// === Development & Technology ===
|
|
3313
|
+
architecture: {
|
|
3314
|
+
emoji: '🏛️',
|
|
3315
|
+
component: Architecture
|
|
3277
3316
|
},
|
|
3278
|
-
|
|
3279
|
-
emoji: '
|
|
3280
|
-
component:
|
|
3317
|
+
autorenew: {
|
|
3318
|
+
emoji: '🔄',
|
|
3319
|
+
component: Autorenew
|
|
3281
3320
|
},
|
|
3282
|
-
|
|
3283
|
-
emoji: '
|
|
3284
|
-
component:
|
|
3321
|
+
cloud: {
|
|
3322
|
+
emoji: '☁️',
|
|
3323
|
+
component: Cloud
|
|
3285
3324
|
},
|
|
3286
|
-
|
|
3287
|
-
emoji: '
|
|
3288
|
-
component:
|
|
3325
|
+
cloud_download: {
|
|
3326
|
+
emoji: '☁️⬇️',
|
|
3327
|
+
component: CloudDownload
|
|
3289
3328
|
},
|
|
3290
|
-
|
|
3291
|
-
emoji: '
|
|
3292
|
-
component:
|
|
3329
|
+
cloud_upload: {
|
|
3330
|
+
emoji: '☁️⬆️',
|
|
3331
|
+
component: CloudUpload
|
|
3293
3332
|
},
|
|
3294
|
-
|
|
3295
|
-
emoji: '
|
|
3296
|
-
component:
|
|
3333
|
+
clouddownload: {
|
|
3334
|
+
emoji: '☁️⬇️',
|
|
3335
|
+
component: CloudDownload
|
|
3336
|
+
},
|
|
3337
|
+
// alias
|
|
3338
|
+
cloudupload: {
|
|
3339
|
+
emoji: '☁️⬆️',
|
|
3340
|
+
component: CloudUpload
|
|
3297
3341
|
},
|
|
3298
|
-
//
|
|
3342
|
+
// alias
|
|
3299
3343
|
code: {
|
|
3300
3344
|
emoji: '💻',
|
|
3301
3345
|
component: Code$1
|
|
3302
3346
|
},
|
|
3303
|
-
|
|
3304
|
-
emoji: '
|
|
3305
|
-
component:
|
|
3347
|
+
computer: {
|
|
3348
|
+
emoji: '💻',
|
|
3349
|
+
component: Computer
|
|
3306
3350
|
},
|
|
3307
|
-
|
|
3308
|
-
emoji: '
|
|
3309
|
-
component:
|
|
3351
|
+
construction: {
|
|
3352
|
+
emoji: '🚧',
|
|
3353
|
+
component: Construction
|
|
3310
3354
|
},
|
|
3311
3355
|
integration_instructions: {
|
|
3312
3356
|
emoji: '🔌',
|
|
3313
3357
|
component: IntegrationInstructions
|
|
3314
3358
|
},
|
|
3315
|
-
|
|
3316
|
-
emoji: '
|
|
3317
|
-
component:
|
|
3359
|
+
memory: {
|
|
3360
|
+
emoji: '🧠',
|
|
3361
|
+
component: Memory
|
|
3318
3362
|
},
|
|
3319
|
-
|
|
3320
|
-
emoji: '
|
|
3321
|
-
component:
|
|
3363
|
+
psychology: {
|
|
3364
|
+
emoji: '🧠',
|
|
3365
|
+
component: Psychology
|
|
3366
|
+
},
|
|
3367
|
+
rocket: {
|
|
3368
|
+
emoji: '🚀',
|
|
3369
|
+
component: Rocket
|
|
3370
|
+
},
|
|
3371
|
+
storage: {
|
|
3372
|
+
emoji: '💾',
|
|
3373
|
+
component: Storage
|
|
3374
|
+
},
|
|
3375
|
+
// === Navigation & Layout ===
|
|
3376
|
+
arrow_back: {
|
|
3377
|
+
emoji: '←',
|
|
3378
|
+
component: ArrowBack
|
|
3379
|
+
},
|
|
3380
|
+
arrow_forward: {
|
|
3381
|
+
emoji: '→',
|
|
3382
|
+
component: ArrowForward
|
|
3383
|
+
},
|
|
3384
|
+
arrowback: {
|
|
3385
|
+
emoji: '←',
|
|
3386
|
+
component: ArrowBack
|
|
3387
|
+
},
|
|
3388
|
+
// alias
|
|
3389
|
+
arrowforward: {
|
|
3390
|
+
emoji: '→',
|
|
3391
|
+
component: ArrowForward
|
|
3392
|
+
},
|
|
3393
|
+
// alias
|
|
3394
|
+
dashboard: {
|
|
3395
|
+
emoji: '📊',
|
|
3396
|
+
component: Dashboard
|
|
3397
|
+
},
|
|
3398
|
+
download: {
|
|
3399
|
+
emoji: '⬇️',
|
|
3400
|
+
component: Download
|
|
3401
|
+
},
|
|
3402
|
+
explore: {
|
|
3403
|
+
emoji: '🧭',
|
|
3404
|
+
component: Explore
|
|
3405
|
+
},
|
|
3406
|
+
home: {
|
|
3407
|
+
emoji: '🏠',
|
|
3408
|
+
component: Home
|
|
3322
3409
|
},
|
|
3323
3410
|
layers: {
|
|
3324
3411
|
emoji: '📚',
|
|
3325
3412
|
component: Layers
|
|
3326
3413
|
},
|
|
3327
|
-
|
|
3328
|
-
emoji: '
|
|
3329
|
-
component:
|
|
3414
|
+
menu: {
|
|
3415
|
+
emoji: '☰',
|
|
3416
|
+
component: Menu
|
|
3330
3417
|
},
|
|
3331
3418
|
route: {
|
|
3332
3419
|
emoji: '🗺️',
|
|
3333
3420
|
component: Route
|
|
3334
3421
|
},
|
|
3335
|
-
|
|
3336
|
-
emoji: '
|
|
3337
|
-
component:
|
|
3422
|
+
settings: {
|
|
3423
|
+
emoji: '⚙️',
|
|
3424
|
+
component: Settings
|
|
3338
3425
|
},
|
|
3339
|
-
|
|
3340
|
-
emoji: '
|
|
3341
|
-
component:
|
|
3426
|
+
trending_up: {
|
|
3427
|
+
emoji: '📈',
|
|
3428
|
+
component: TrendingUp
|
|
3342
3429
|
},
|
|
3343
|
-
|
|
3344
|
-
emoji: '
|
|
3345
|
-
component:
|
|
3430
|
+
tune: {
|
|
3431
|
+
emoji: '🎛️',
|
|
3432
|
+
component: Tune
|
|
3346
3433
|
},
|
|
3347
|
-
//
|
|
3348
|
-
|
|
3349
|
-
emoji: '
|
|
3350
|
-
component:
|
|
3434
|
+
// === Products & Inventory ===
|
|
3435
|
+
inventory: {
|
|
3436
|
+
emoji: '📦',
|
|
3437
|
+
component: Inventory
|
|
3351
3438
|
},
|
|
3352
|
-
|
|
3353
|
-
emoji: '
|
|
3354
|
-
component:
|
|
3439
|
+
inventory_2: {
|
|
3440
|
+
emoji: '📦',
|
|
3441
|
+
component: Inventory2
|
|
3355
3442
|
},
|
|
3356
|
-
|
|
3357
|
-
emoji: '
|
|
3358
|
-
component:
|
|
3443
|
+
local_offer: {
|
|
3444
|
+
emoji: '🏷️',
|
|
3445
|
+
component: LocalOffer
|
|
3359
3446
|
},
|
|
3360
|
-
|
|
3447
|
+
products: {
|
|
3448
|
+
emoji: '🛍️',
|
|
3449
|
+
component: ShoppingCart
|
|
3450
|
+
},
|
|
3451
|
+
// alias
|
|
3452
|
+
services: {
|
|
3453
|
+
emoji: '⚙️',
|
|
3454
|
+
component: Settings
|
|
3455
|
+
},
|
|
3456
|
+
// alias
|
|
3457
|
+
speed: {
|
|
3458
|
+
emoji: '⚡',
|
|
3459
|
+
component: Speed
|
|
3460
|
+
},
|
|
3461
|
+
// === Status & Feedback ===
|
|
3462
|
+
about: {
|
|
3463
|
+
emoji: 'ℹ️',
|
|
3464
|
+
component: Info
|
|
3465
|
+
},
|
|
3466
|
+
// alias
|
|
3467
|
+
favorite: {
|
|
3468
|
+
emoji: '❤️',
|
|
3469
|
+
component: Favorite
|
|
3470
|
+
},
|
|
3471
|
+
heart: {
|
|
3472
|
+
emoji: '❤️',
|
|
3473
|
+
component: Favorite
|
|
3474
|
+
},
|
|
3475
|
+
// alias
|
|
3476
|
+
help: {
|
|
3477
|
+
emoji: '❓',
|
|
3478
|
+
component: Help
|
|
3479
|
+
},
|
|
3480
|
+
info: {
|
|
3481
|
+
emoji: 'ℹ️',
|
|
3482
|
+
component: Info
|
|
3483
|
+
},
|
|
3484
|
+
star: {
|
|
3485
|
+
emoji: '⭐',
|
|
3486
|
+
component: Star
|
|
3487
|
+
},
|
|
3488
|
+
// === Users & People ===
|
|
3489
|
+
account_circle: {
|
|
3490
|
+
emoji: '👤',
|
|
3491
|
+
component: AccountCircle
|
|
3492
|
+
},
|
|
3493
|
+
group: {
|
|
3361
3494
|
emoji: '👥',
|
|
3362
|
-
component:
|
|
3495
|
+
component: Group
|
|
3363
3496
|
},
|
|
3364
|
-
|
|
3365
|
-
emoji: '
|
|
3366
|
-
component:
|
|
3497
|
+
manage_accounts: {
|
|
3498
|
+
emoji: '👤',
|
|
3499
|
+
component: ManageAccounts
|
|
3367
3500
|
},
|
|
3368
|
-
|
|
3369
|
-
emoji: '
|
|
3370
|
-
component:
|
|
3501
|
+
people: {
|
|
3502
|
+
emoji: '👥',
|
|
3503
|
+
component: People
|
|
3371
3504
|
},
|
|
3372
|
-
|
|
3373
|
-
emoji: '
|
|
3374
|
-
component:
|
|
3505
|
+
person: {
|
|
3506
|
+
emoji: '👤',
|
|
3507
|
+
component: Person
|
|
3375
3508
|
},
|
|
3376
|
-
|
|
3377
|
-
emoji: '
|
|
3378
|
-
component:
|
|
3509
|
+
person_search: {
|
|
3510
|
+
emoji: '🔍',
|
|
3511
|
+
component: PersonSearch
|
|
3379
3512
|
},
|
|
3380
|
-
|
|
3381
|
-
emoji: '
|
|
3382
|
-
component:
|
|
3513
|
+
user: {
|
|
3514
|
+
emoji: '👤',
|
|
3515
|
+
component: Person
|
|
3383
3516
|
},
|
|
3384
|
-
|
|
3385
|
-
|
|
3386
|
-
|
|
3387
|
-
|
|
3517
|
+
// alias
|
|
3518
|
+
users: {
|
|
3519
|
+
emoji: '👥',
|
|
3520
|
+
component: People
|
|
3521
|
+
} // alias
|
|
3388
3522
|
};
|
|
3389
3523
|
/**
|
|
3390
3524
|
* Get emoji representation of an icon
|
|
3391
|
-
* @param iconName - Icon name (case-insensitive)
|
|
3525
|
+
* @param iconName - Icon name (case-insensitive, supports snake_case)
|
|
3392
3526
|
* @param fallback - Fallback emoji if icon not found (default: 🔗)
|
|
3393
3527
|
* @returns Emoji string
|
|
3394
3528
|
*/
|
|
3395
3529
|
function getIconEmoji(iconName, fallback = '🔗') {
|
|
3396
3530
|
if (!iconName) return fallback;
|
|
3397
|
-
const
|
|
3398
|
-
|
|
3531
|
+
const normalized = iconName.toLowerCase();
|
|
3532
|
+
const mapping = iconMap[normalized];
|
|
3533
|
+
return mapping?.emoji || fallback;
|
|
3399
3534
|
}
|
|
3400
3535
|
/**
|
|
3401
|
-
* Get Material-UI component representation of an icon
|
|
3402
|
-
*
|
|
3403
|
-
*
|
|
3536
|
+
* Get Material-UI component representation of an icon.
|
|
3537
|
+
*
|
|
3538
|
+
* Uses the static iconMap for known icons. For unmapped icons,
|
|
3539
|
+
* returns a HelpOutline fallback and logs a warning.
|
|
3540
|
+
*
|
|
3541
|
+
* @param iconName - Icon name (case-insensitive, supports snake_case)
|
|
3542
|
+
* @returns React element (mapped icon or HelpOutline fallback), or null if no name provided
|
|
3404
3543
|
*/
|
|
3405
3544
|
function getIconComponent(iconName) {
|
|
3406
3545
|
if (!iconName) return null;
|
|
3407
|
-
const
|
|
3408
|
-
|
|
3409
|
-
|
|
3410
|
-
|
|
3546
|
+
const normalized = iconName.toLowerCase();
|
|
3547
|
+
const mapping = iconMap[normalized];
|
|
3548
|
+
if (mapping?.component) {
|
|
3549
|
+
const IconComponent = mapping.component;
|
|
3550
|
+
return jsx(IconComponent, {});
|
|
3551
|
+
}
|
|
3552
|
+
// Fallback: Return HelpOutline icon and warn about unmapped icon
|
|
3553
|
+
// Use registerIcon() to add app-specific icons at runtime
|
|
3554
|
+
{
|
|
3555
|
+
console.warn(`[IconMap] Icon "${iconName}" not found. Add it to iconMap or use registerIcon().`);
|
|
3411
3556
|
}
|
|
3412
|
-
|
|
3413
|
-
return jsx(IconComponent, {});
|
|
3557
|
+
return jsx(HelpOutline, {});
|
|
3414
3558
|
}
|
|
3415
3559
|
/**
|
|
3416
3560
|
* Register a new icon or override an existing one
|
|
@@ -3420,13 +3564,14 @@ function registerIcon(name, mapping) {
|
|
|
3420
3564
|
iconMap[name.toLowerCase()] = mapping;
|
|
3421
3565
|
}
|
|
3422
3566
|
/**
|
|
3423
|
-
* Check if an icon is registered
|
|
3567
|
+
* Check if an icon is registered in the static map
|
|
3568
|
+
* If false, getIconComponent will return HelpOutline fallback
|
|
3424
3569
|
*/
|
|
3425
3570
|
function hasIcon(iconName) {
|
|
3426
3571
|
return iconName.toLowerCase() in iconMap;
|
|
3427
3572
|
}
|
|
3428
3573
|
/**
|
|
3429
|
-
* Get all registered icon names
|
|
3574
|
+
* Get all registered icon names from the static map
|
|
3430
3575
|
*/
|
|
3431
3576
|
function getRegisteredIcons() {
|
|
3432
3577
|
return Object.keys(iconMap);
|
|
@@ -4815,41 +4960,6 @@ var FormBlockModel$1 = FormBlockModel;
|
|
|
4815
4960
|
*
|
|
4816
4961
|
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
4817
4962
|
*/
|
|
4818
|
-
/**
|
|
4819
|
-
* Get the current location from browser or undefined in SSR
|
|
4820
|
-
* Works without relying on routing libraries
|
|
4821
|
-
* @returns {object | undefined} - The location object if in browser, otherwise undefined
|
|
4822
|
-
*/
|
|
4823
|
-
const useSafeLocation = () => {
|
|
4824
|
-
// Use browser location if available (works in any React app)
|
|
4825
|
-
if (typeof window !== 'undefined') {
|
|
4826
|
-
return {
|
|
4827
|
-
pathname: window.location.pathname,
|
|
4828
|
-
search: window.location.search,
|
|
4829
|
-
hash: window.location.hash
|
|
4830
|
-
};
|
|
4831
|
-
}
|
|
4832
|
-
return undefined;
|
|
4833
|
-
};
|
|
4834
|
-
/**
|
|
4835
|
-
* Get a navigation function with fallback to window.location
|
|
4836
|
-
* Works without relying on routing libraries
|
|
4837
|
-
* @returns {NavigateFunction} - The navigate function
|
|
4838
|
-
*/
|
|
4839
|
-
const useSafeNavigate = () => {
|
|
4840
|
-
// Return function that uses window.location
|
|
4841
|
-
return to => {
|
|
4842
|
-
if (typeof to === 'string') {
|
|
4843
|
-
if (typeof window !== 'undefined') {
|
|
4844
|
-
window.location.href = to;
|
|
4845
|
-
}
|
|
4846
|
-
} else if (typeof to === 'number') {
|
|
4847
|
-
if (typeof window !== 'undefined' && window.history) {
|
|
4848
|
-
window.history.go(to);
|
|
4849
|
-
}
|
|
4850
|
-
}
|
|
4851
|
-
};
|
|
4852
|
-
};
|
|
4853
4963
|
/**
|
|
4854
4964
|
* Extract text content from ReactNode for code processing
|
|
4855
4965
|
* Handles natural React usage like <Code>const x = 1;</Code>
|
|
@@ -23386,6 +23496,121 @@ const useDimensions = () => {
|
|
|
23386
23496
|
return context;
|
|
23387
23497
|
};
|
|
23388
23498
|
|
|
23499
|
+
const NavigationContext = /*#__PURE__*/createContext(null);
|
|
23500
|
+
/**
|
|
23501
|
+
* Internal provider that uses React Router hooks
|
|
23502
|
+
* Only rendered when we're inside a Router context
|
|
23503
|
+
*/
|
|
23504
|
+
function ReactRouterNavigationProvider({
|
|
23505
|
+
children
|
|
23506
|
+
}) {
|
|
23507
|
+
const reactRouterNavigate = useNavigate();
|
|
23508
|
+
const reactRouterLocation = useLocation();
|
|
23509
|
+
const navigate = to => {
|
|
23510
|
+
if (typeof to === 'string') {
|
|
23511
|
+
reactRouterNavigate(to);
|
|
23512
|
+
} else if (typeof to === 'number') {
|
|
23513
|
+
reactRouterNavigate(to);
|
|
23514
|
+
}
|
|
23515
|
+
};
|
|
23516
|
+
// Defensive check for location - fall back to window.location if React Router's location is undefined
|
|
23517
|
+
const location = reactRouterLocation ? {
|
|
23518
|
+
pathname: reactRouterLocation.pathname,
|
|
23519
|
+
search: reactRouterLocation.search,
|
|
23520
|
+
hash: reactRouterLocation.hash
|
|
23521
|
+
} : typeof window !== 'undefined' ? {
|
|
23522
|
+
pathname: window.location.pathname,
|
|
23523
|
+
search: window.location.search,
|
|
23524
|
+
hash: window.location.hash
|
|
23525
|
+
} : undefined;
|
|
23526
|
+
return jsx(NavigationContext.Provider, {
|
|
23527
|
+
value: {
|
|
23528
|
+
navigate,
|
|
23529
|
+
location
|
|
23530
|
+
},
|
|
23531
|
+
children: children
|
|
23532
|
+
});
|
|
23533
|
+
}
|
|
23534
|
+
/**
|
|
23535
|
+
* Internal provider that uses window.location fallback
|
|
23536
|
+
* Used when not inside a React Router context
|
|
23537
|
+
*/
|
|
23538
|
+
function FallbackNavigationProvider({
|
|
23539
|
+
children
|
|
23540
|
+
}) {
|
|
23541
|
+
const navigate = to => {
|
|
23542
|
+
if (typeof window === 'undefined') return;
|
|
23543
|
+
if (typeof to === 'string') {
|
|
23544
|
+
window.location.href = to;
|
|
23545
|
+
} else if (typeof to === 'number') {
|
|
23546
|
+
window.history.go(to);
|
|
23547
|
+
}
|
|
23548
|
+
};
|
|
23549
|
+
const location = typeof window !== 'undefined' ? {
|
|
23550
|
+
pathname: window.location.pathname,
|
|
23551
|
+
search: window.location.search,
|
|
23552
|
+
hash: window.location.hash
|
|
23553
|
+
} : undefined;
|
|
23554
|
+
return jsx(NavigationContext.Provider, {
|
|
23555
|
+
value: {
|
|
23556
|
+
navigate,
|
|
23557
|
+
location
|
|
23558
|
+
},
|
|
23559
|
+
children: children
|
|
23560
|
+
});
|
|
23561
|
+
}
|
|
23562
|
+
/**
|
|
23563
|
+
* Smart Navigation Provider
|
|
23564
|
+
*
|
|
23565
|
+
* Automatically detects if the app is inside a React Router context:
|
|
23566
|
+
* - If inside Router: uses React Router's useNavigate/useLocation (respects basename)
|
|
23567
|
+
* - If outside Router: falls back to window.location
|
|
23568
|
+
*
|
|
23569
|
+
* This is included automatically by QwickApp - you don't need to add it manually.
|
|
23570
|
+
*/
|
|
23571
|
+
function NavigationProvider({
|
|
23572
|
+
children
|
|
23573
|
+
}) {
|
|
23574
|
+
// Check if we're inside a React Router using the official hook
|
|
23575
|
+
// This is more reliable than checking internal UNSAFE contexts
|
|
23576
|
+
const isInRouter = useInRouterContext();
|
|
23577
|
+
if (isInRouter) {
|
|
23578
|
+
// We're inside a Router, use React Router's navigation
|
|
23579
|
+
return jsx(ReactRouterNavigationProvider, {
|
|
23580
|
+
children: children
|
|
23581
|
+
});
|
|
23582
|
+
}
|
|
23583
|
+
// Not inside a Router, use window.location fallback
|
|
23584
|
+
return jsx(FallbackNavigationProvider, {
|
|
23585
|
+
children: children
|
|
23586
|
+
});
|
|
23587
|
+
}
|
|
23588
|
+
/**
|
|
23589
|
+
* Hook to access navigation functions
|
|
23590
|
+
*
|
|
23591
|
+
* @returns Object containing navigate function and current location
|
|
23592
|
+
*
|
|
23593
|
+
* @example
|
|
23594
|
+
* ```tsx
|
|
23595
|
+
* function MyComponent() {
|
|
23596
|
+
* const { navigate, location } = useNavigation();
|
|
23597
|
+
*
|
|
23598
|
+
* const handleClick = () => {
|
|
23599
|
+
* navigate('/dashboard');
|
|
23600
|
+
* };
|
|
23601
|
+
*
|
|
23602
|
+
* return <button onClick={handleClick}>Go to Dashboard</button>;
|
|
23603
|
+
* }
|
|
23604
|
+
* ```
|
|
23605
|
+
*/
|
|
23606
|
+
function useNavigation() {
|
|
23607
|
+
const context = useContext(NavigationContext);
|
|
23608
|
+
if (!context) {
|
|
23609
|
+
throw new Error('useNavigation must be used within a NavigationProvider. ' + 'Make sure your component is wrapped in QwickApp or NavigationProvider.');
|
|
23610
|
+
}
|
|
23611
|
+
return context;
|
|
23612
|
+
}
|
|
23613
|
+
|
|
23389
23614
|
/**
|
|
23390
23615
|
* Schema for PaletteSwitcher component - Color palette switching control
|
|
23391
23616
|
*
|
|
@@ -24533,7 +24758,9 @@ const PageView = ({
|
|
|
24533
24758
|
};
|
|
24534
24759
|
}, [isPrintMode, printConfig]);
|
|
24535
24760
|
// Route (fallback to current location)
|
|
24536
|
-
const
|
|
24761
|
+
const {
|
|
24762
|
+
location
|
|
24763
|
+
} = useNavigation();
|
|
24537
24764
|
const actualRoute = resolved.route || location?.pathname || '';
|
|
24538
24765
|
// Context value
|
|
24539
24766
|
const contextValue = useMemo(() => ({
|
|
@@ -24648,9 +24875,11 @@ const Scaffold = ({
|
|
|
24648
24875
|
const [isDrawerOpen, setIsDrawerOpen] = useState(false);
|
|
24649
24876
|
const [isRailExpanded, setIsRailExpanded] = useState(false);
|
|
24650
24877
|
const [isMounted, setIsMounted] = useState(false);
|
|
24651
|
-
// React Router
|
|
24652
|
-
const
|
|
24653
|
-
|
|
24878
|
+
// Navigation (uses React Router if available, falls back to window.location)
|
|
24879
|
+
const {
|
|
24880
|
+
navigate,
|
|
24881
|
+
location
|
|
24882
|
+
} = useNavigation();
|
|
24654
24883
|
const currentPath = isMounted ? location?.pathname : undefined;
|
|
24655
24884
|
// Debug logging for navigation
|
|
24656
24885
|
React.useEffect(() => {
|
|
@@ -25019,9 +25248,11 @@ const ResponsiveMenu = props => {
|
|
|
25019
25248
|
appName,
|
|
25020
25249
|
logo: contextLogo
|
|
25021
25250
|
} = useQwickApp$1();
|
|
25022
|
-
// React Router
|
|
25023
|
-
const
|
|
25024
|
-
|
|
25251
|
+
// Navigation (uses React Router if available, falls back to window.location)
|
|
25252
|
+
const {
|
|
25253
|
+
navigate,
|
|
25254
|
+
location
|
|
25255
|
+
} = useNavigation();
|
|
25025
25256
|
const currentPath = location?.pathname;
|
|
25026
25257
|
// Debug logging
|
|
25027
25258
|
React.useEffect(() => {
|
|
@@ -25896,6 +26127,15 @@ const QwickApp = ({
|
|
|
25896
26127
|
...updates
|
|
25897
26128
|
}));
|
|
25898
26129
|
};
|
|
26130
|
+
// Sync logo prop changes with internal state (for dynamic logo updates)
|
|
26131
|
+
useEffect(() => {
|
|
26132
|
+
if (resolvedConfig.logo !== appConfig.logo) {
|
|
26133
|
+
setAppConfig(prev => ({
|
|
26134
|
+
...prev,
|
|
26135
|
+
logo: resolvedConfig.logo
|
|
26136
|
+
}));
|
|
26137
|
+
}
|
|
26138
|
+
}, [resolvedConfig.logo]);
|
|
25899
26139
|
const contextValue = {
|
|
25900
26140
|
appName: resolvedConfig.appName,
|
|
25901
26141
|
// Safe to use ! since we validated above
|
|
@@ -25923,17 +26163,19 @@ const QwickApp = ({
|
|
|
25923
26163
|
}) : content;
|
|
25924
26164
|
const appContent = jsx(ErrorBoundary, {
|
|
25925
26165
|
children: jsx(AccessibilityProvider, {
|
|
25926
|
-
children: jsx(
|
|
25927
|
-
|
|
25928
|
-
|
|
25929
|
-
|
|
25930
|
-
|
|
25931
|
-
|
|
25932
|
-
|
|
25933
|
-
|
|
25934
|
-
|
|
25935
|
-
|
|
25936
|
-
children:
|
|
26166
|
+
children: jsx(NavigationProvider, {
|
|
26167
|
+
children: jsx("div", {
|
|
26168
|
+
className: `qwick-app ${className || ''}`,
|
|
26169
|
+
style: style,
|
|
26170
|
+
children: jsx(ThemeProvider, {
|
|
26171
|
+
appId: resolvedConfig.appId,
|
|
26172
|
+
defaultTheme: resolvedConfig.defaultTheme,
|
|
26173
|
+
defaultPalette: resolvedConfig.defaultPalette,
|
|
26174
|
+
children: jsx(QwickAppContext.Provider, {
|
|
26175
|
+
value: contextValue,
|
|
26176
|
+
children: jsx(PrintModeProvider, {
|
|
26177
|
+
children: wrappedContent
|
|
26178
|
+
})
|
|
25937
26179
|
})
|
|
25938
26180
|
})
|
|
25939
26181
|
})
|
|
@@ -31808,4 +32050,4 @@ __decorate([Field({
|
|
|
31808
32050
|
}), IsOptional(), __metadata("design:type", Boolean)], PageTemplateSchema.prototype, "indexable", void 0);
|
|
31809
32051
|
PageTemplateSchema = __decorate([Schema('PageTemplate', '1.0.0')], PageTemplateSchema);
|
|
31810
32052
|
|
|
31811
|
-
export { AVAILABLE_PALETTES, AccessibilityProvider, ActionModel, ActionType, AllPalettes, AppConfig, AppConfigBuilder, Article, ArticleModel, Breadcrumbs, Button, Captcha, CardListGrid, CardListGridModel, ChoiceInputField, ChoiceInputFieldModel, Code, CodeModel, CollapsibleLayout, CollapsibleLayoutView, ComponentTransformer$1 as ComponentTransformer, Container$8 as Container, Content, ContentModel, CoverImageHeader, CoverImageHeaderModel, DataProvider, DataProxy, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, DimensionsProvider, ErrorBoundary, FeatureCard, FeatureCardActionModel, FeatureCardModel, FeatureGrid, FeatureGridModel, FeatureItemModel, Footer, FooterItemModel, FooterModel, FooterSectionModel, FormBlock, FormBlockModel, FormCheckbox, FormField, FormMethod, FormPage, FormSelect, GridCell, GridCellModel, GridLayout, GridLayoutModel, HeaderActionModel, HeroBlock, HeroBlockModel, Html, HtmlInputField, HtmlModel, Image, ImageModel, Logo, Markdown, MarkdownModel, MetadataItemModel, ModelView, Page, PageBannerHeader, PageBannerHeaderModel, PageTemplateSchema, PaletteAutumn, PaletteCosmic, PaletteDefault, PaletteOcean, PaletteProvider, PaletteSpring, PaletteSwitcher, PaletteSwitcherModel, PaletteWinter, PrintConfigSchema, PrintModeProvider, ProductCard, ProductCardActionModel, ProductCardModel, ProductLogo, ProductModel, QWICKAPP_COMPONENT, QwickApp, QwickAppsLogo, QwickIcon, ResponsiveMenu, SafeSpan, SafeSpanModel, Scaffold, Section, SectionModel, SelectInputField, SwitchInputField, T, Text$1 as Text, TextField, TextInputField, TextInputFieldModel, TextModel, ThemeProvider, ThemeSwitcher, ThemeSwitcherModel, ViewSchema, animationConfigs, applyCustomPalette, clearManifestCache, clearPaletteCache, clearUserPalettePreference, clearUserThemePreference, configurePaletteLoader, createAppConfig, createModelViewClass, createPaletteFromCurrentTheme, createSerializableView, defaultCollapsibleLayoutProps, deleteCustomPalette, exportPalette, extractTextFromReactNode, getAvailablePalettes, getCSSVariable, getComputedTheme, getCurrentPalette, getCurrentTheme, getCustomPalettes, getIconComponent, getIconEmoji, getLogger, getPaletteConfig, getPaletteFromManifest, getPaletteName, getRegisteredIcons, getSystemTheme, getThemePerformanceStats, hasIcon, iconMap, importPalette, initializePalette, initializeTheme, isCollapsibleLayoutProps, isPaletteLoaded, loadPalette, loadPaletteManifest, loadUserPalettePreference, loadUserThemePreference, logThemePerformanceStats, loggers, preloadPalettes, registerCustomPalette, registerIcon, resetThemePerformanceStats, resolveDimension, resolveDimensions, resolveSpacing, resolveSpacingProps, saveCustomPalette, savePalettePreference, saveThemePreference, saveUserPalettePreference, saveUserThemePreference, setCSSVariable, setPalette, setTheme, spacingConfigs, t, toCssLength, useAccessibility, useBaseProps, useBreadcrumbs, useCollapsibleState, useData, useDataBinding, useDataContext, useDataProvider, useDimensions, usePageContext, usePalette, usePrintMode$1 as usePrintMode, usePrintMode as usePrintModeHook, useQwickApp, useResolveTemplate,
|
|
32053
|
+
export { AVAILABLE_PALETTES, AccessibilityProvider, ActionModel, ActionType, AllPalettes, AppConfig, AppConfigBuilder, Article, ArticleModel, Breadcrumbs, Button, Captcha, CardListGrid, CardListGridModel, ChoiceInputField, ChoiceInputFieldModel, Code, CodeModel, CollapsibleLayout, CollapsibleLayoutView, ComponentTransformer$1 as ComponentTransformer, Container$8 as Container, Content, ContentModel, CoverImageHeader, CoverImageHeaderModel, DataProvider, DataProxy, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, DimensionsProvider, ErrorBoundary, FeatureCard, FeatureCardActionModel, FeatureCardModel, FeatureGrid, FeatureGridModel, FeatureItemModel, Footer, FooterItemModel, FooterModel, FooterSectionModel, FormBlock, FormBlockModel, FormCheckbox, FormField, FormMethod, FormPage, FormSelect, GridCell, GridCellModel, GridLayout, GridLayoutModel, HeaderActionModel, HeroBlock, HeroBlockModel, Html, HtmlInputField, HtmlModel, Image, ImageModel, Logo, Markdown, MarkdownModel, MetadataItemModel, ModelView, NavigationProvider, Page, PageBannerHeader, PageBannerHeaderModel, PageTemplateSchema, PaletteAutumn, PaletteCosmic, PaletteDefault, PaletteOcean, PaletteProvider, PaletteSpring, PaletteSwitcher, PaletteSwitcherModel, PaletteWinter, PrintConfigSchema, PrintModeProvider, ProductCard, ProductCardActionModel, ProductCardModel, ProductLogo, ProductModel, QWICKAPP_COMPONENT, QwickApp, QwickAppsLogo, QwickIcon, ResponsiveMenu, SafeSpan, SafeSpanModel, Scaffold, Section, SectionModel, SelectInputField, SwitchInputField, T, Text$1 as Text, TextField, TextInputField, TextInputFieldModel, TextModel, ThemeProvider, ThemeSwitcher, ThemeSwitcherModel, ViewSchema, animationConfigs, applyCustomPalette, clearManifestCache, clearPaletteCache, clearUserPalettePreference, clearUserThemePreference, configurePaletteLoader, createAppConfig, createModelViewClass, createPaletteFromCurrentTheme, createSerializableView, defaultCollapsibleLayoutProps, deleteCustomPalette, exportPalette, extractTextFromReactNode, getAvailablePalettes, getCSSVariable, getComputedTheme, getCurrentPalette, getCurrentTheme, getCustomPalettes, getIconComponent, getIconEmoji, getLogger, getPaletteConfig, getPaletteFromManifest, getPaletteName, getRegisteredIcons, getSystemTheme, getThemePerformanceStats, hasIcon, iconMap, importPalette, initializePalette, initializeTheme, isCollapsibleLayoutProps, isPaletteLoaded, loadPalette, loadPaletteManifest, loadUserPalettePreference, loadUserThemePreference, logThemePerformanceStats, loggers, preloadPalettes, registerCustomPalette, registerIcon, resetThemePerformanceStats, resolveDimension, resolveDimensions, resolveSpacing, resolveSpacingProps, saveCustomPalette, savePalettePreference, saveThemePreference, saveUserPalettePreference, saveUserThemePreference, setCSSVariable, setPalette, setTheme, spacingConfigs, t, toCssLength, useAccessibility, useBaseProps, useBreadcrumbs, useCollapsibleState, useData, useDataBinding, useDataContext, useDataProvider, useDimensions, useNavigation, usePageContext, usePalette, usePrintMode$1 as usePrintMode, usePrintMode as usePrintModeHook, useQwickApp, useResolveTemplate, useTemplate, useTheme, withAccessibility, withErrorBoundary };
|