@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.
Files changed (125) hide show
  1. package/dist/components/QwickApp.d.ts.map +1 -1
  2. package/dist/components/ResponsiveMenu.d.ts.map +1 -1
  3. package/dist/components/Scaffold.d.ts.map +1 -1
  4. package/dist/components/index.d.ts +1 -0
  5. package/dist/components/index.d.ts.map +1 -1
  6. package/dist/contexts/NavigationContext.d.ts +64 -0
  7. package/dist/contexts/NavigationContext.d.ts.map +1 -0
  8. package/dist/contexts/index.d.ts +2 -0
  9. package/dist/contexts/index.d.ts.map +1 -1
  10. package/dist/hooks/useBaseProps.d.ts +12 -1161
  11. package/dist/hooks/useBaseProps.d.ts.map +1 -1
  12. package/dist/index.esm.js +514 -272
  13. package/dist/index.js +514 -272
  14. package/dist/palettes/manifest.json +19 -19
  15. package/dist/palettes/palette-autumn.1.4.9.css +172 -0
  16. package/dist/palettes/palette-autumn.1.4.9.min.css +1 -0
  17. package/dist/palettes/palette-autumn.1.5.0.css +172 -0
  18. package/dist/palettes/palette-autumn.1.5.0.min.css +1 -0
  19. package/dist/palettes/palette-autumn.1.5.1.css +172 -0
  20. package/dist/palettes/palette-autumn.1.5.1.min.css +1 -0
  21. package/dist/palettes/palette-autumn.1.5.2.css +172 -0
  22. package/dist/palettes/palette-autumn.1.5.2.min.css +1 -0
  23. package/dist/palettes/palette-autumn.1.5.3.css +172 -0
  24. package/dist/palettes/palette-autumn.1.5.3.min.css +1 -0
  25. package/dist/palettes/palette-autumn.1.5.4.css +172 -0
  26. package/dist/palettes/palette-autumn.1.5.4.min.css +1 -0
  27. package/dist/palettes/palette-autumn.1.5.6.css +172 -0
  28. package/dist/palettes/palette-autumn.1.5.6.min.css +1 -0
  29. package/dist/palettes/palette-autumn.1.5.7.css +172 -0
  30. package/dist/palettes/palette-autumn.1.5.7.min.css +1 -0
  31. package/dist/palettes/palette-cosmic.1.4.9.css +172 -0
  32. package/dist/palettes/palette-cosmic.1.4.9.min.css +1 -0
  33. package/dist/palettes/palette-cosmic.1.5.0.css +172 -0
  34. package/dist/palettes/palette-cosmic.1.5.0.min.css +1 -0
  35. package/dist/palettes/palette-cosmic.1.5.1.css +172 -0
  36. package/dist/palettes/palette-cosmic.1.5.1.min.css +1 -0
  37. package/dist/palettes/palette-cosmic.1.5.2.css +172 -0
  38. package/dist/palettes/palette-cosmic.1.5.2.min.css +1 -0
  39. package/dist/palettes/palette-cosmic.1.5.3.css +172 -0
  40. package/dist/palettes/palette-cosmic.1.5.3.min.css +1 -0
  41. package/dist/palettes/palette-cosmic.1.5.4.css +172 -0
  42. package/dist/palettes/palette-cosmic.1.5.4.min.css +1 -0
  43. package/dist/palettes/palette-cosmic.1.5.6.css +172 -0
  44. package/dist/palettes/palette-cosmic.1.5.6.min.css +1 -0
  45. package/dist/palettes/palette-cosmic.1.5.7.css +172 -0
  46. package/dist/palettes/palette-cosmic.1.5.7.min.css +1 -0
  47. package/dist/palettes/palette-default.1.4.9.css +178 -0
  48. package/dist/palettes/palette-default.1.4.9.min.css +1 -0
  49. package/dist/palettes/palette-default.1.5.0.css +178 -0
  50. package/dist/palettes/palette-default.1.5.0.min.css +1 -0
  51. package/dist/palettes/palette-default.1.5.1.css +178 -0
  52. package/dist/palettes/palette-default.1.5.1.min.css +1 -0
  53. package/dist/palettes/palette-default.1.5.2.css +178 -0
  54. package/dist/palettes/palette-default.1.5.2.min.css +1 -0
  55. package/dist/palettes/palette-default.1.5.3.css +178 -0
  56. package/dist/palettes/palette-default.1.5.3.min.css +1 -0
  57. package/dist/palettes/palette-default.1.5.4.css +178 -0
  58. package/dist/palettes/palette-default.1.5.4.min.css +1 -0
  59. package/dist/palettes/palette-default.1.5.6.css +178 -0
  60. package/dist/palettes/palette-default.1.5.6.min.css +1 -0
  61. package/dist/palettes/palette-default.1.5.7.css +178 -0
  62. package/dist/palettes/palette-default.1.5.7.min.css +1 -0
  63. package/dist/palettes/palette-ocean.1.4.9.css +172 -0
  64. package/dist/palettes/palette-ocean.1.4.9.min.css +1 -0
  65. package/dist/palettes/palette-ocean.1.5.0.css +172 -0
  66. package/dist/palettes/palette-ocean.1.5.0.min.css +1 -0
  67. package/dist/palettes/palette-ocean.1.5.1.css +172 -0
  68. package/dist/palettes/palette-ocean.1.5.1.min.css +1 -0
  69. package/dist/palettes/palette-ocean.1.5.2.css +172 -0
  70. package/dist/palettes/palette-ocean.1.5.2.min.css +1 -0
  71. package/dist/palettes/palette-ocean.1.5.3.css +172 -0
  72. package/dist/palettes/palette-ocean.1.5.3.min.css +1 -0
  73. package/dist/palettes/palette-ocean.1.5.4.css +172 -0
  74. package/dist/palettes/palette-ocean.1.5.4.min.css +1 -0
  75. package/dist/palettes/palette-ocean.1.5.6.css +172 -0
  76. package/dist/palettes/palette-ocean.1.5.6.min.css +1 -0
  77. package/dist/palettes/palette-ocean.1.5.7.css +172 -0
  78. package/dist/palettes/palette-ocean.1.5.7.min.css +1 -0
  79. package/dist/palettes/palette-spring.1.4.9.css +160 -0
  80. package/dist/palettes/palette-spring.1.4.9.min.css +1 -0
  81. package/dist/palettes/palette-spring.1.5.0.css +160 -0
  82. package/dist/palettes/palette-spring.1.5.0.min.css +1 -0
  83. package/dist/palettes/palette-spring.1.5.1.css +160 -0
  84. package/dist/palettes/palette-spring.1.5.1.min.css +1 -0
  85. package/dist/palettes/palette-spring.1.5.2.css +160 -0
  86. package/dist/palettes/palette-spring.1.5.2.min.css +1 -0
  87. package/dist/palettes/palette-spring.1.5.3.css +166 -0
  88. package/dist/palettes/palette-spring.1.5.3.min.css +1 -0
  89. package/dist/palettes/palette-spring.1.5.4.css +166 -0
  90. package/dist/palettes/palette-spring.1.5.4.min.css +1 -0
  91. package/dist/palettes/palette-spring.1.5.6.css +166 -0
  92. package/dist/palettes/palette-spring.1.5.6.min.css +1 -0
  93. package/dist/palettes/palette-spring.1.5.7.css +166 -0
  94. package/dist/palettes/palette-spring.1.5.7.min.css +1 -0
  95. package/dist/palettes/palette-winter.1.4.9.css +172 -0
  96. package/dist/palettes/palette-winter.1.4.9.min.css +1 -0
  97. package/dist/palettes/palette-winter.1.5.0.css +172 -0
  98. package/dist/palettes/palette-winter.1.5.0.min.css +1 -0
  99. package/dist/palettes/palette-winter.1.5.1.css +172 -0
  100. package/dist/palettes/palette-winter.1.5.1.min.css +1 -0
  101. package/dist/palettes/palette-winter.1.5.2.css +172 -0
  102. package/dist/palettes/palette-winter.1.5.2.min.css +1 -0
  103. package/dist/palettes/palette-winter.1.5.3.css +172 -0
  104. package/dist/palettes/palette-winter.1.5.3.min.css +1 -0
  105. package/dist/palettes/palette-winter.1.5.4.css +172 -0
  106. package/dist/palettes/palette-winter.1.5.4.min.css +1 -0
  107. package/dist/palettes/palette-winter.1.5.6.css +172 -0
  108. package/dist/palettes/palette-winter.1.5.6.min.css +1 -0
  109. package/dist/palettes/palette-winter.1.5.7.css +172 -0
  110. package/dist/palettes/palette-winter.1.5.7.min.css +1 -0
  111. package/dist/utils/iconMap.d.ts +21 -8
  112. package/dist/utils/iconMap.d.ts.map +1 -1
  113. package/dist/utils/reactUtils.d.ts +0 -23
  114. package/dist/utils/reactUtils.d.ts.map +1 -1
  115. package/package.json +1 -1
  116. package/src/__tests__/utils/iconMap.test.tsx +197 -0
  117. package/src/components/QwickApp.tsx +24 -15
  118. package/src/components/ResponsiveMenu.tsx +3 -4
  119. package/src/components/Scaffold.tsx +3 -4
  120. package/src/components/index.ts +1 -0
  121. package/src/components/pages/Page.tsx +2 -2
  122. package/src/contexts/NavigationContext.tsx +168 -0
  123. package/src/contexts/index.ts +2 -0
  124. package/src/utils/iconMap.tsx +209 -151
  125. 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, Home, Menu, Dashboard, Info, Help, Book, Email, Phone, Send, Add, Edit, Delete, Save, Close, ArrowForward, ArrowBack, Search, Share, Download, CloudDownload, CloudUpload, Person, Group, Favorite, Star, VerifiedUser, Business, ShoppingCart, AttachMoney, Lock, LockOpen, Visibility, VisibilityOff, Settings, Computer, Article as Article$1, Inventory, Inventory2, Speed, SupportAgent, Tune, Code as Code$1, Psychology, Autorenew, IntegrationInstructions, Construction, Work, Layers, TrendingUp, Route, Sync, Architecture, Security, Key, VpnKey, PersonSearch, ManageAccounts, Storage, Refresh, Block, CheckCircle, RotateRight, Memory, BrokenImage, MoreVert, FormatBold, FormatItalic, FormatUnderlined, ExpandMore, ExpandLess, Schedule, Launch, LightMode, DarkMode, SettingsSystemDaydream, Palette, Circle, RadioButtonUnchecked } from '@mui/icons-material';
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
- * Supports both Material-UI components and emoji for different contexts
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
- // Navigation & Layout
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
- // Navigation
3152
- arrowforward: {
3153
- emoji: '→',
3154
- component: ArrowForward
3100
+ delete: {
3101
+ emoji: '🗑️',
3102
+ component: Delete
3155
3103
  },
3156
- arrowback: {
3157
- emoji: '',
3158
- component: ArrowBack
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
- download: {
3170
- emoji: '⬇️',
3171
- component: Download
3132
+ sync: {
3133
+ emoji: '🔄',
3134
+ component: Sync
3172
3135
  },
3173
- clouddownload: {
3174
- emoji: '☁️⬇️',
3175
- component: CloudDownload
3136
+ // === Authentication & Security ===
3137
+ block: {
3138
+ emoji: '🚫',
3139
+ component: Block
3176
3140
  },
3177
- cloudupload: {
3178
- emoji: '☁️⬆️',
3179
- component: CloudUpload
3141
+ key: {
3142
+ emoji: '🔑',
3143
+ component: Key
3180
3144
  },
3181
- // User & Social
3182
- person: {
3183
- emoji: '👤',
3184
- component: Person
3145
+ lock: {
3146
+ emoji: '🔒',
3147
+ component: Lock
3185
3148
  },
3186
- user: {
3187
- emoji: '👤',
3188
- component: Person
3149
+ lock_open: {
3150
+ emoji: '🔓',
3151
+ component: LockOpen
3189
3152
  },
3190
- group: {
3191
- emoji: '👥',
3192
- component: Group
3153
+ lockopen: {
3154
+ emoji: '🔓',
3155
+ component: LockOpen
3193
3156
  },
3194
- favorite: {
3195
- emoji: '❤️',
3196
- component: Favorite
3157
+ // alias
3158
+ login: {
3159
+ emoji: '🔑',
3160
+ component: Login
3197
3161
  },
3198
- star: {
3199
- emoji: '',
3200
- component: Star
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
- // Business
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
- shoppingcart: {
3209
+ cart: {
3212
3210
  emoji: '🛒',
3213
3211
  component: ShoppingCart
3214
3212
  },
3215
- cart: {
3213
+ // alias
3214
+ shopping_cart: {
3216
3215
  emoji: '🛒',
3217
3216
  component: ShoppingCart
3218
3217
  },
3219
- attachmoney: {
3220
- emoji: '💰',
3221
- component: AttachMoney
3218
+ shoppingcart: {
3219
+ emoji: '🛒',
3220
+ component: ShoppingCart
3222
3221
  },
3223
- // Security
3224
- lock: {
3225
- emoji: '🔒',
3226
- component: Lock
3222
+ // alias
3223
+ work: {
3224
+ emoji: '💼',
3225
+ component: Work
3227
3226
  },
3228
- lockopen: {
3229
- emoji: '🔓',
3230
- component: LockOpen
3227
+ workspace_premium: {
3228
+ emoji: '',
3229
+ component: WorkspacePremium
3231
3230
  },
3232
- visibility: {
3233
- emoji: '👁️',
3234
- component: Visibility
3231
+ // === Communication ===
3232
+ contact: {
3233
+ emoji: '📧',
3234
+ component: Email
3235
3235
  },
3236
- visibilityoff: {
3237
- emoji: '🙈',
3238
- component: VisibilityOff
3236
+ // alias
3237
+ email: {
3238
+ emoji: '📧',
3239
+ component: Email
3239
3240
  },
3240
- // System
3241
- settings: {
3242
- emoji: '⚙️',
3243
- component: Settings
3241
+ mail: {
3242
+ emoji: '📧',
3243
+ component: Email
3244
3244
  },
3245
- computer: {
3246
- emoji: '💻',
3247
- component: Computer
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 Types
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: Book
3291
+ component: Article$1
3261
3292
  },
3262
- products: {
3263
- emoji: '🛍️',
3264
- component: ShoppingCart
3293
+ // alias
3294
+ photo_library: {
3295
+ emoji: '📸',
3296
+ component: PhotoLibrary
3265
3297
  },
3266
- services: {
3267
- emoji: '⚙️',
3268
- component: Settings
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
- gallery: {
3275
- emoji: '🖼️',
3276
- component: Business
3311
+ // alias
3312
+ // === Development & Technology ===
3313
+ architecture: {
3314
+ emoji: '🏛️',
3315
+ component: Architecture
3277
3316
  },
3278
- inventory: {
3279
- emoji: '📦',
3280
- component: Inventory
3317
+ autorenew: {
3318
+ emoji: '🔄',
3319
+ component: Autorenew
3281
3320
  },
3282
- inventory_2: {
3283
- emoji: '📦',
3284
- component: Inventory2
3321
+ cloud: {
3322
+ emoji: '☁️',
3323
+ component: Cloud
3285
3324
  },
3286
- speed: {
3287
- emoji: '',
3288
- component: Speed
3325
+ cloud_download: {
3326
+ emoji: '☁️⬇️',
3327
+ component: CloudDownload
3289
3328
  },
3290
- support_agent: {
3291
- emoji: '🛎️',
3292
- component: SupportAgent
3329
+ cloud_upload: {
3330
+ emoji: '☁️⬆️',
3331
+ component: CloudUpload
3293
3332
  },
3294
- tune: {
3295
- emoji: '🎛️',
3296
- component: Tune
3333
+ clouddownload: {
3334
+ emoji: '☁️⬇️',
3335
+ component: CloudDownload
3336
+ },
3337
+ // alias
3338
+ cloudupload: {
3339
+ emoji: '☁️⬆️',
3340
+ component: CloudUpload
3297
3341
  },
3298
- // Development & Technology
3342
+ // alias
3299
3343
  code: {
3300
3344
  emoji: '💻',
3301
3345
  component: Code$1
3302
3346
  },
3303
- psychology: {
3304
- emoji: '🧠',
3305
- component: Psychology
3347
+ computer: {
3348
+ emoji: '💻',
3349
+ component: Computer
3306
3350
  },
3307
- autorenew: {
3308
- emoji: '🔄',
3309
- component: Autorenew
3351
+ construction: {
3352
+ emoji: '🚧',
3353
+ component: Construction
3310
3354
  },
3311
3355
  integration_instructions: {
3312
3356
  emoji: '🔌',
3313
3357
  component: IntegrationInstructions
3314
3358
  },
3315
- construction: {
3316
- emoji: '🚧',
3317
- component: Construction
3359
+ memory: {
3360
+ emoji: '🧠',
3361
+ component: Memory
3318
3362
  },
3319
- work: {
3320
- emoji: '💼',
3321
- component: Work
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
- trending_up: {
3328
- emoji: '📈',
3329
- component: TrendingUp
3414
+ menu: {
3415
+ emoji: '',
3416
+ component: Menu
3330
3417
  },
3331
3418
  route: {
3332
3419
  emoji: '🗺️',
3333
3420
  component: Route
3334
3421
  },
3335
- sync: {
3336
- emoji: '🔄',
3337
- component: Sync
3422
+ settings: {
3423
+ emoji: '⚙️',
3424
+ component: Settings
3338
3425
  },
3339
- architecture: {
3340
- emoji: '🏛️',
3341
- component: Architecture
3426
+ trending_up: {
3427
+ emoji: '📈',
3428
+ component: TrendingUp
3342
3429
  },
3343
- security: {
3344
- emoji: '🔐',
3345
- component: Security
3430
+ tune: {
3431
+ emoji: '🎛️',
3432
+ component: Tune
3346
3433
  },
3347
- // Control Panel & Admin UI Icons
3348
- key: {
3349
- emoji: '🔑',
3350
- component: Key
3434
+ // === Products & Inventory ===
3435
+ inventory: {
3436
+ emoji: '📦',
3437
+ component: Inventory
3351
3438
  },
3352
- vpn_key: {
3353
- emoji: '🔐',
3354
- component: VpnKey
3439
+ inventory_2: {
3440
+ emoji: '📦',
3441
+ component: Inventory2
3355
3442
  },
3356
- person_search: {
3357
- emoji: '🔍',
3358
- component: PersonSearch
3443
+ local_offer: {
3444
+ emoji: '🏷️',
3445
+ component: LocalOffer
3359
3446
  },
3360
- manage_accounts: {
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: ManageAccounts
3495
+ component: Group
3363
3496
  },
3364
- storage: {
3365
- emoji: '💾',
3366
- component: Storage
3497
+ manage_accounts: {
3498
+ emoji: '👤',
3499
+ component: ManageAccounts
3367
3500
  },
3368
- refresh: {
3369
- emoji: '🔄',
3370
- component: Refresh
3501
+ people: {
3502
+ emoji: '👥',
3503
+ component: People
3371
3504
  },
3372
- block: {
3373
- emoji: '🚫',
3374
- component: Block
3505
+ person: {
3506
+ emoji: '👤',
3507
+ component: Person
3375
3508
  },
3376
- check_circle: {
3377
- emoji: '',
3378
- component: CheckCircle
3509
+ person_search: {
3510
+ emoji: '🔍',
3511
+ component: PersonSearch
3379
3512
  },
3380
- rotate_right: {
3381
- emoji: '🔄',
3382
- component: RotateRight
3513
+ user: {
3514
+ emoji: '👤',
3515
+ component: Person
3383
3516
  },
3384
- memory: {
3385
- emoji: '🧠',
3386
- component: Memory
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 mapping = iconMap[iconName.toLowerCase()];
3398
- return mapping?.emoji || iconName;
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
- * @param iconName - Icon name (case-insensitive)
3403
- * @returns React element or null if not found
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 mapping = iconMap[iconName.toLowerCase()];
3408
- if (!mapping?.component) {
3409
- console.warn(`[IconMap] Icon "${iconName}" not found in registry`);
3410
- return null;
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
- const IconComponent = mapping.component;
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 location = useSafeLocation();
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 hooks (if available)
24652
- const location = useSafeLocation();
24653
- const navigate = useSafeNavigate();
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 hooks (if available)
25023
- const navigate = useSafeNavigate();
25024
- const location = useSafeLocation();
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("div", {
25927
- className: `qwick-app ${className || ''}`,
25928
- style: style,
25929
- children: jsx(ThemeProvider, {
25930
- appId: resolvedConfig.appId,
25931
- defaultTheme: resolvedConfig.defaultTheme,
25932
- defaultPalette: resolvedConfig.defaultPalette,
25933
- children: jsx(QwickAppContext.Provider, {
25934
- value: contextValue,
25935
- children: jsx(PrintModeProvider, {
25936
- children: wrappedContent
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, useSafeLocation, useSafeNavigate, useTemplate, useTheme, withAccessibility, withErrorBoundary };
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 };