@qwickapps/react-framework 1.5.6 → 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/contexts/NavigationContext.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 +387 -232
- package/dist/index.js +385 -230
- 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.5.css +172 -0
- package/dist/palettes/palette-autumn.1.5.5.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.5.css +172 -0
- package/dist/palettes/palette-cosmic.1.5.5.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.5.css +178 -0
- package/dist/palettes/palette-default.1.5.5.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.5.css +172 -0
- package/dist/palettes/palette-ocean.1.5.5.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.5.css +166 -0
- package/dist/palettes/palette-spring.1.5.5.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.5.css +172 -0
- package/dist/palettes/palette-winter.1.5.5.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/package.json +1 -1
- package/src/__tests__/utils/iconMap.test.tsx +197 -0
- package/src/components/QwickApp.tsx +8 -1
- package/src/contexts/NavigationContext.tsx +21 -15
- package/src/utils/iconMap.tsx +209 -153
package/dist/index.esm.js
CHANGED
|
@@ -4,11 +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 {
|
|
11
|
+
import { useInRouterContext, useNavigate, useLocation } from 'react-router-dom';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Breakpoint utilities for QwickApps React Framework
|
|
@@ -3073,181 +3073,189 @@ Code.transformCodeHighlight = element => {
|
|
|
3073
3073
|
};
|
|
3074
3074
|
|
|
3075
3075
|
/**
|
|
3076
|
-
* Centralized icon registry mapping icon names to their representations
|
|
3077
|
-
*
|
|
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.
|
|
3078
3081
|
*/
|
|
3079
3082
|
const iconMap = {
|
|
3080
|
-
//
|
|
3081
|
-
home: {
|
|
3082
|
-
emoji: '🏠',
|
|
3083
|
-
component: Home
|
|
3084
|
-
},
|
|
3085
|
-
menu: {
|
|
3086
|
-
emoji: '☰',
|
|
3087
|
-
component: Menu
|
|
3088
|
-
},
|
|
3089
|
-
dashboard: {
|
|
3090
|
-
emoji: '📊',
|
|
3091
|
-
component: Dashboard
|
|
3092
|
-
},
|
|
3093
|
-
// Information & Help
|
|
3094
|
-
info: {
|
|
3095
|
-
emoji: 'ℹ️',
|
|
3096
|
-
component: Info
|
|
3097
|
-
},
|
|
3098
|
-
about: {
|
|
3099
|
-
emoji: 'ℹ️',
|
|
3100
|
-
component: Info
|
|
3101
|
-
},
|
|
3102
|
-
help: {
|
|
3103
|
-
emoji: '❓',
|
|
3104
|
-
component: Help
|
|
3105
|
-
},
|
|
3106
|
-
book: {
|
|
3107
|
-
emoji: '📖',
|
|
3108
|
-
component: Book
|
|
3109
|
-
},
|
|
3110
|
-
// Communication
|
|
3111
|
-
email: {
|
|
3112
|
-
emoji: '📧',
|
|
3113
|
-
component: Email
|
|
3114
|
-
},
|
|
3115
|
-
contact: {
|
|
3116
|
-
emoji: '📧',
|
|
3117
|
-
component: Email
|
|
3118
|
-
},
|
|
3119
|
-
phone: {
|
|
3120
|
-
emoji: '📱',
|
|
3121
|
-
component: Phone
|
|
3122
|
-
},
|
|
3123
|
-
send: {
|
|
3124
|
-
emoji: '📤',
|
|
3125
|
-
component: Send
|
|
3126
|
-
},
|
|
3127
|
-
// Actions
|
|
3083
|
+
// === Actions ===
|
|
3128
3084
|
add: {
|
|
3129
3085
|
emoji: '➕',
|
|
3130
3086
|
component: Add
|
|
3131
3087
|
},
|
|
3132
|
-
edit: {
|
|
3133
|
-
emoji: '✏️',
|
|
3134
|
-
component: Edit
|
|
3135
|
-
},
|
|
3136
|
-
delete: {
|
|
3137
|
-
emoji: '🗑️',
|
|
3138
|
-
component: Delete
|
|
3139
|
-
},
|
|
3140
|
-
save: {
|
|
3141
|
-
emoji: '💾',
|
|
3142
|
-
component: Save
|
|
3143
|
-
},
|
|
3144
3088
|
check: {
|
|
3145
3089
|
emoji: '✓',
|
|
3146
3090
|
component: Check
|
|
3147
3091
|
},
|
|
3092
|
+
check_circle: {
|
|
3093
|
+
emoji: '✅',
|
|
3094
|
+
component: CheckCircle
|
|
3095
|
+
},
|
|
3148
3096
|
close: {
|
|
3149
3097
|
emoji: '✕',
|
|
3150
3098
|
component: Close
|
|
3151
3099
|
},
|
|
3152
|
-
|
|
3153
|
-
|
|
3154
|
-
|
|
3155
|
-
component: ArrowForward
|
|
3100
|
+
delete: {
|
|
3101
|
+
emoji: '🗑️',
|
|
3102
|
+
component: Delete
|
|
3156
3103
|
},
|
|
3157
|
-
|
|
3158
|
-
emoji: '
|
|
3159
|
-
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
|
|
3160
3119
|
},
|
|
3161
|
-
// Content
|
|
3162
3120
|
search: {
|
|
3163
3121
|
emoji: '🔍',
|
|
3164
3122
|
component: Search
|
|
3165
3123
|
},
|
|
3124
|
+
send: {
|
|
3125
|
+
emoji: '📤',
|
|
3126
|
+
component: Send
|
|
3127
|
+
},
|
|
3166
3128
|
share: {
|
|
3167
3129
|
emoji: '🔗',
|
|
3168
3130
|
component: Share
|
|
3169
3131
|
},
|
|
3170
|
-
|
|
3171
|
-
emoji: '
|
|
3172
|
-
component:
|
|
3132
|
+
sync: {
|
|
3133
|
+
emoji: '🔄',
|
|
3134
|
+
component: Sync
|
|
3173
3135
|
},
|
|
3174
|
-
|
|
3175
|
-
|
|
3176
|
-
|
|
3136
|
+
// === Authentication & Security ===
|
|
3137
|
+
block: {
|
|
3138
|
+
emoji: '🚫',
|
|
3139
|
+
component: Block
|
|
3177
3140
|
},
|
|
3178
|
-
|
|
3179
|
-
emoji: '
|
|
3180
|
-
component:
|
|
3141
|
+
key: {
|
|
3142
|
+
emoji: '🔑',
|
|
3143
|
+
component: Key
|
|
3181
3144
|
},
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
|
|
3185
|
-
component: Person
|
|
3145
|
+
lock: {
|
|
3146
|
+
emoji: '🔒',
|
|
3147
|
+
component: Lock
|
|
3186
3148
|
},
|
|
3187
|
-
|
|
3188
|
-
emoji: '
|
|
3189
|
-
component:
|
|
3149
|
+
lock_open: {
|
|
3150
|
+
emoji: '🔓',
|
|
3151
|
+
component: LockOpen
|
|
3190
3152
|
},
|
|
3191
|
-
|
|
3192
|
-
emoji: '
|
|
3193
|
-
component:
|
|
3153
|
+
lockopen: {
|
|
3154
|
+
emoji: '🔓',
|
|
3155
|
+
component: LockOpen
|
|
3194
3156
|
},
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3157
|
+
// alias
|
|
3158
|
+
login: {
|
|
3159
|
+
emoji: '🔑',
|
|
3160
|
+
component: Login
|
|
3198
3161
|
},
|
|
3199
|
-
|
|
3200
|
-
emoji: '
|
|
3201
|
-
component:
|
|
3162
|
+
logout: {
|
|
3163
|
+
emoji: '🚪',
|
|
3164
|
+
component: Logout
|
|
3165
|
+
},
|
|
3166
|
+
security: {
|
|
3167
|
+
emoji: '🔐',
|
|
3168
|
+
component: Security
|
|
3169
|
+
},
|
|
3170
|
+
shield: {
|
|
3171
|
+
emoji: '🛡️',
|
|
3172
|
+
component: Shield
|
|
3202
3173
|
},
|
|
3203
3174
|
verified_user: {
|
|
3204
3175
|
emoji: '✅',
|
|
3205
3176
|
component: VerifiedUser
|
|
3206
3177
|
},
|
|
3207
|
-
|
|
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
|
|
3208
3205
|
business: {
|
|
3209
3206
|
emoji: '🏢',
|
|
3210
3207
|
component: Business
|
|
3211
3208
|
},
|
|
3212
|
-
|
|
3209
|
+
cart: {
|
|
3213
3210
|
emoji: '🛒',
|
|
3214
3211
|
component: ShoppingCart
|
|
3215
3212
|
},
|
|
3216
|
-
|
|
3213
|
+
// alias
|
|
3214
|
+
shopping_cart: {
|
|
3217
3215
|
emoji: '🛒',
|
|
3218
3216
|
component: ShoppingCart
|
|
3219
3217
|
},
|
|
3220
|
-
|
|
3221
|
-
emoji: '
|
|
3222
|
-
component:
|
|
3218
|
+
shoppingcart: {
|
|
3219
|
+
emoji: '🛒',
|
|
3220
|
+
component: ShoppingCart
|
|
3223
3221
|
},
|
|
3224
|
-
//
|
|
3225
|
-
|
|
3226
|
-
emoji: '
|
|
3227
|
-
component:
|
|
3222
|
+
// alias
|
|
3223
|
+
work: {
|
|
3224
|
+
emoji: '💼',
|
|
3225
|
+
component: Work
|
|
3228
3226
|
},
|
|
3229
|
-
|
|
3230
|
-
emoji: '
|
|
3231
|
-
component:
|
|
3227
|
+
workspace_premium: {
|
|
3228
|
+
emoji: '⭐',
|
|
3229
|
+
component: WorkspacePremium
|
|
3232
3230
|
},
|
|
3233
|
-
|
|
3234
|
-
|
|
3235
|
-
|
|
3231
|
+
// === Communication ===
|
|
3232
|
+
contact: {
|
|
3233
|
+
emoji: '📧',
|
|
3234
|
+
component: Email
|
|
3236
3235
|
},
|
|
3237
|
-
|
|
3238
|
-
|
|
3239
|
-
|
|
3236
|
+
// alias
|
|
3237
|
+
email: {
|
|
3238
|
+
emoji: '📧',
|
|
3239
|
+
component: Email
|
|
3240
3240
|
},
|
|
3241
|
-
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
component: Settings
|
|
3241
|
+
mail: {
|
|
3242
|
+
emoji: '📧',
|
|
3243
|
+
component: Email
|
|
3245
3244
|
},
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3245
|
+
// alias
|
|
3246
|
+
notifications: {
|
|
3247
|
+
emoji: '🔔',
|
|
3248
|
+
component: Notifications
|
|
3249
3249
|
},
|
|
3250
|
-
|
|
3250
|
+
phone: {
|
|
3251
|
+
emoji: '📱',
|
|
3252
|
+
component: Phone
|
|
3253
|
+
},
|
|
3254
|
+
support_agent: {
|
|
3255
|
+
emoji: '🛎️',
|
|
3256
|
+
component: SupportAgent
|
|
3257
|
+
},
|
|
3258
|
+
// === Content & Media ===
|
|
3251
3259
|
article: {
|
|
3252
3260
|
emoji: '📰',
|
|
3253
3261
|
component: Article$1
|
|
@@ -3256,166 +3264,297 @@ const iconMap = {
|
|
|
3256
3264
|
emoji: '📝',
|
|
3257
3265
|
component: Book
|
|
3258
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
|
+
},
|
|
3259
3289
|
news: {
|
|
3260
3290
|
emoji: '📰',
|
|
3261
|
-
component:
|
|
3291
|
+
component: Article$1
|
|
3262
3292
|
},
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3293
|
+
// alias
|
|
3294
|
+
photo_library: {
|
|
3295
|
+
emoji: '📸',
|
|
3296
|
+
component: PhotoLibrary
|
|
3266
3297
|
},
|
|
3267
|
-
|
|
3268
|
-
emoji: '
|
|
3269
|
-
component:
|
|
3298
|
+
play: {
|
|
3299
|
+
emoji: '▶️',
|
|
3300
|
+
component: PlayArrow
|
|
3301
|
+
},
|
|
3302
|
+
// alias
|
|
3303
|
+
play_arrow: {
|
|
3304
|
+
emoji: '▶️',
|
|
3305
|
+
component: PlayArrow
|
|
3270
3306
|
},
|
|
3271
3307
|
portfolio: {
|
|
3272
3308
|
emoji: '💼',
|
|
3273
3309
|
component: Business
|
|
3274
3310
|
},
|
|
3275
|
-
|
|
3276
|
-
|
|
3277
|
-
|
|
3311
|
+
// alias
|
|
3312
|
+
// === Development & Technology ===
|
|
3313
|
+
architecture: {
|
|
3314
|
+
emoji: '🏛️',
|
|
3315
|
+
component: Architecture
|
|
3278
3316
|
},
|
|
3279
|
-
|
|
3280
|
-
emoji: '
|
|
3281
|
-
component:
|
|
3317
|
+
autorenew: {
|
|
3318
|
+
emoji: '🔄',
|
|
3319
|
+
component: Autorenew
|
|
3282
3320
|
},
|
|
3283
|
-
|
|
3284
|
-
emoji: '
|
|
3285
|
-
component:
|
|
3321
|
+
cloud: {
|
|
3322
|
+
emoji: '☁️',
|
|
3323
|
+
component: Cloud
|
|
3286
3324
|
},
|
|
3287
|
-
|
|
3288
|
-
emoji: '
|
|
3289
|
-
component:
|
|
3325
|
+
cloud_download: {
|
|
3326
|
+
emoji: '☁️⬇️',
|
|
3327
|
+
component: CloudDownload
|
|
3290
3328
|
},
|
|
3291
|
-
|
|
3292
|
-
emoji: '
|
|
3293
|
-
component:
|
|
3329
|
+
cloud_upload: {
|
|
3330
|
+
emoji: '☁️⬆️',
|
|
3331
|
+
component: CloudUpload
|
|
3294
3332
|
},
|
|
3295
|
-
|
|
3296
|
-
emoji: '
|
|
3297
|
-
component:
|
|
3333
|
+
clouddownload: {
|
|
3334
|
+
emoji: '☁️⬇️',
|
|
3335
|
+
component: CloudDownload
|
|
3336
|
+
},
|
|
3337
|
+
// alias
|
|
3338
|
+
cloudupload: {
|
|
3339
|
+
emoji: '☁️⬆️',
|
|
3340
|
+
component: CloudUpload
|
|
3298
3341
|
},
|
|
3299
|
-
//
|
|
3342
|
+
// alias
|
|
3300
3343
|
code: {
|
|
3301
3344
|
emoji: '💻',
|
|
3302
3345
|
component: Code$1
|
|
3303
3346
|
},
|
|
3304
|
-
|
|
3305
|
-
emoji: '
|
|
3306
|
-
component:
|
|
3347
|
+
computer: {
|
|
3348
|
+
emoji: '💻',
|
|
3349
|
+
component: Computer
|
|
3307
3350
|
},
|
|
3308
|
-
|
|
3309
|
-
emoji: '
|
|
3310
|
-
component:
|
|
3351
|
+
construction: {
|
|
3352
|
+
emoji: '🚧',
|
|
3353
|
+
component: Construction
|
|
3311
3354
|
},
|
|
3312
3355
|
integration_instructions: {
|
|
3313
3356
|
emoji: '🔌',
|
|
3314
3357
|
component: IntegrationInstructions
|
|
3315
3358
|
},
|
|
3316
|
-
|
|
3317
|
-
emoji: '
|
|
3318
|
-
component:
|
|
3359
|
+
memory: {
|
|
3360
|
+
emoji: '🧠',
|
|
3361
|
+
component: Memory
|
|
3319
3362
|
},
|
|
3320
|
-
|
|
3321
|
-
emoji: '
|
|
3322
|
-
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
|
|
3323
3409
|
},
|
|
3324
3410
|
layers: {
|
|
3325
3411
|
emoji: '📚',
|
|
3326
3412
|
component: Layers
|
|
3327
3413
|
},
|
|
3328
|
-
|
|
3329
|
-
emoji: '
|
|
3330
|
-
component:
|
|
3414
|
+
menu: {
|
|
3415
|
+
emoji: '☰',
|
|
3416
|
+
component: Menu
|
|
3331
3417
|
},
|
|
3332
3418
|
route: {
|
|
3333
3419
|
emoji: '🗺️',
|
|
3334
3420
|
component: Route
|
|
3335
3421
|
},
|
|
3336
|
-
|
|
3337
|
-
emoji: '
|
|
3338
|
-
component:
|
|
3422
|
+
settings: {
|
|
3423
|
+
emoji: '⚙️',
|
|
3424
|
+
component: Settings
|
|
3339
3425
|
},
|
|
3340
|
-
|
|
3341
|
-
emoji: '
|
|
3342
|
-
component:
|
|
3426
|
+
trending_up: {
|
|
3427
|
+
emoji: '📈',
|
|
3428
|
+
component: TrendingUp
|
|
3343
3429
|
},
|
|
3344
|
-
|
|
3345
|
-
emoji: '
|
|
3346
|
-
component:
|
|
3430
|
+
tune: {
|
|
3431
|
+
emoji: '🎛️',
|
|
3432
|
+
component: Tune
|
|
3347
3433
|
},
|
|
3348
|
-
//
|
|
3349
|
-
|
|
3350
|
-
emoji: '
|
|
3351
|
-
component:
|
|
3434
|
+
// === Products & Inventory ===
|
|
3435
|
+
inventory: {
|
|
3436
|
+
emoji: '📦',
|
|
3437
|
+
component: Inventory
|
|
3352
3438
|
},
|
|
3353
|
-
|
|
3354
|
-
emoji: '
|
|
3355
|
-
component:
|
|
3439
|
+
inventory_2: {
|
|
3440
|
+
emoji: '📦',
|
|
3441
|
+
component: Inventory2
|
|
3356
3442
|
},
|
|
3357
|
-
|
|
3358
|
-
emoji: '
|
|
3359
|
-
component:
|
|
3443
|
+
local_offer: {
|
|
3444
|
+
emoji: '🏷️',
|
|
3445
|
+
component: LocalOffer
|
|
3360
3446
|
},
|
|
3361
|
-
|
|
3362
|
-
emoji: '
|
|
3363
|
-
component:
|
|
3447
|
+
products: {
|
|
3448
|
+
emoji: '🛍️',
|
|
3449
|
+
component: ShoppingCart
|
|
3364
3450
|
},
|
|
3365
|
-
|
|
3366
|
-
|
|
3367
|
-
|
|
3451
|
+
// alias
|
|
3452
|
+
services: {
|
|
3453
|
+
emoji: '⚙️',
|
|
3454
|
+
component: Settings
|
|
3368
3455
|
},
|
|
3369
|
-
|
|
3370
|
-
|
|
3371
|
-
|
|
3456
|
+
// alias
|
|
3457
|
+
speed: {
|
|
3458
|
+
emoji: '⚡',
|
|
3459
|
+
component: Speed
|
|
3372
3460
|
},
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
|
|
3461
|
+
// === Status & Feedback ===
|
|
3462
|
+
about: {
|
|
3463
|
+
emoji: 'ℹ️',
|
|
3464
|
+
component: Info
|
|
3376
3465
|
},
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
|
|
3466
|
+
// alias
|
|
3467
|
+
favorite: {
|
|
3468
|
+
emoji: '❤️',
|
|
3469
|
+
component: Favorite
|
|
3380
3470
|
},
|
|
3381
|
-
|
|
3382
|
-
emoji: '
|
|
3383
|
-
component:
|
|
3471
|
+
heart: {
|
|
3472
|
+
emoji: '❤️',
|
|
3473
|
+
component: Favorite
|
|
3384
3474
|
},
|
|
3385
|
-
|
|
3386
|
-
|
|
3387
|
-
|
|
3475
|
+
// alias
|
|
3476
|
+
help: {
|
|
3477
|
+
emoji: '❓',
|
|
3478
|
+
component: Help
|
|
3388
3479
|
},
|
|
3389
|
-
|
|
3390
|
-
emoji: '
|
|
3391
|
-
component:
|
|
3392
|
-
}
|
|
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: {
|
|
3494
|
+
emoji: '👥',
|
|
3495
|
+
component: Group
|
|
3496
|
+
},
|
|
3497
|
+
manage_accounts: {
|
|
3498
|
+
emoji: '👤',
|
|
3499
|
+
component: ManageAccounts
|
|
3500
|
+
},
|
|
3501
|
+
people: {
|
|
3502
|
+
emoji: '👥',
|
|
3503
|
+
component: People
|
|
3504
|
+
},
|
|
3505
|
+
person: {
|
|
3506
|
+
emoji: '👤',
|
|
3507
|
+
component: Person
|
|
3508
|
+
},
|
|
3509
|
+
person_search: {
|
|
3510
|
+
emoji: '🔍',
|
|
3511
|
+
component: PersonSearch
|
|
3512
|
+
},
|
|
3513
|
+
user: {
|
|
3514
|
+
emoji: '👤',
|
|
3515
|
+
component: Person
|
|
3516
|
+
},
|
|
3517
|
+
// alias
|
|
3518
|
+
users: {
|
|
3519
|
+
emoji: '👥',
|
|
3520
|
+
component: People
|
|
3521
|
+
} // alias
|
|
3393
3522
|
};
|
|
3394
3523
|
/**
|
|
3395
3524
|
* Get emoji representation of an icon
|
|
3396
|
-
* @param iconName - Icon name (case-insensitive)
|
|
3525
|
+
* @param iconName - Icon name (case-insensitive, supports snake_case)
|
|
3397
3526
|
* @param fallback - Fallback emoji if icon not found (default: 🔗)
|
|
3398
3527
|
* @returns Emoji string
|
|
3399
3528
|
*/
|
|
3400
3529
|
function getIconEmoji(iconName, fallback = '🔗') {
|
|
3401
3530
|
if (!iconName) return fallback;
|
|
3402
|
-
const
|
|
3403
|
-
|
|
3531
|
+
const normalized = iconName.toLowerCase();
|
|
3532
|
+
const mapping = iconMap[normalized];
|
|
3533
|
+
return mapping?.emoji || fallback;
|
|
3404
3534
|
}
|
|
3405
3535
|
/**
|
|
3406
|
-
* Get Material-UI component representation of an icon
|
|
3407
|
-
*
|
|
3408
|
-
*
|
|
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
|
|
3409
3543
|
*/
|
|
3410
3544
|
function getIconComponent(iconName) {
|
|
3411
3545
|
if (!iconName) return null;
|
|
3412
|
-
const
|
|
3413
|
-
|
|
3414
|
-
|
|
3415
|
-
|
|
3546
|
+
const normalized = iconName.toLowerCase();
|
|
3547
|
+
const mapping = iconMap[normalized];
|
|
3548
|
+
if (mapping?.component) {
|
|
3549
|
+
const IconComponent = mapping.component;
|
|
3550
|
+
return jsx(IconComponent, {});
|
|
3416
3551
|
}
|
|
3417
|
-
|
|
3418
|
-
|
|
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().`);
|
|
3556
|
+
}
|
|
3557
|
+
return jsx(HelpOutline, {});
|
|
3419
3558
|
}
|
|
3420
3559
|
/**
|
|
3421
3560
|
* Register a new icon or override an existing one
|
|
@@ -3425,13 +3564,14 @@ function registerIcon(name, mapping) {
|
|
|
3425
3564
|
iconMap[name.toLowerCase()] = mapping;
|
|
3426
3565
|
}
|
|
3427
3566
|
/**
|
|
3428
|
-
* 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
|
|
3429
3569
|
*/
|
|
3430
3570
|
function hasIcon(iconName) {
|
|
3431
3571
|
return iconName.toLowerCase() in iconMap;
|
|
3432
3572
|
}
|
|
3433
3573
|
/**
|
|
3434
|
-
* Get all registered icon names
|
|
3574
|
+
* Get all registered icon names from the static map
|
|
3435
3575
|
*/
|
|
3436
3576
|
function getRegisteredIcons() {
|
|
3437
3577
|
return Object.keys(iconMap);
|
|
@@ -23373,14 +23513,20 @@ function ReactRouterNavigationProvider({
|
|
|
23373
23513
|
reactRouterNavigate(to);
|
|
23374
23514
|
}
|
|
23375
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;
|
|
23376
23526
|
return jsx(NavigationContext.Provider, {
|
|
23377
23527
|
value: {
|
|
23378
23528
|
navigate,
|
|
23379
|
-
location
|
|
23380
|
-
pathname: reactRouterLocation.pathname,
|
|
23381
|
-
search: reactRouterLocation.search,
|
|
23382
|
-
hash: reactRouterLocation.hash
|
|
23383
|
-
}
|
|
23529
|
+
location
|
|
23384
23530
|
},
|
|
23385
23531
|
children: children
|
|
23386
23532
|
});
|
|
@@ -23425,10 +23571,10 @@ function FallbackNavigationProvider({
|
|
|
23425
23571
|
function NavigationProvider({
|
|
23426
23572
|
children
|
|
23427
23573
|
}) {
|
|
23428
|
-
// Check if we're inside a React Router
|
|
23429
|
-
//
|
|
23430
|
-
const
|
|
23431
|
-
if (
|
|
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) {
|
|
23432
23578
|
// We're inside a Router, use React Router's navigation
|
|
23433
23579
|
return jsx(ReactRouterNavigationProvider, {
|
|
23434
23580
|
children: children
|
|
@@ -25981,6 +26127,15 @@ const QwickApp = ({
|
|
|
25981
26127
|
...updates
|
|
25982
26128
|
}));
|
|
25983
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]);
|
|
25984
26139
|
const contextValue = {
|
|
25985
26140
|
appName: resolvedConfig.appName,
|
|
25986
26141
|
// Safe to use ! since we validated above
|