injast-core 1.0.81 → 1.0.83

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 (36) hide show
  1. package/README.md +87 -1
  2. package/dist/components/index.js +1143 -1
  3. package/dist/constants/index.js +4 -0
  4. package/dist/headphone-FHILIBNI.svg +7 -0
  5. package/dist/index.js +1160 -17
  6. package/dist/types/components/index.d.ts +19 -0
  7. package/dist/types/constants/index.d.ts +1 -0
  8. package/dist/types/mobile-app-template/components/mobile-app-footer-nav.d.ts +16 -0
  9. package/dist/types/mobile-app-template/components/mobile-app-layout.d.ts +19 -0
  10. package/dist/types/mobile-app-template/index.d.ts +2 -0
  11. package/dist/types/shared/components/Badge.d.ts +7 -0
  12. package/dist/types/shared/components/SidebarRow.d.ts +40 -0
  13. package/dist/types/shared/components/TemplateDashboardSidebar.d.ts +24 -0
  14. package/dist/types/shared/components/app-page-footer.d.ts +14 -0
  15. package/dist/types/shared/components/app-page-header.d.ts +28 -0
  16. package/dist/types/shared/components/template-dashboard/TemplateDashboard.d.ts +2 -0
  17. package/dist/types/shared/components/template-dashboard/TemplateDashboard.types.d.ts +18 -0
  18. package/dist/types/shared/components/template-dashboard/index.d.ts +3 -0
  19. package/dist/types/shared/components/template-dashboard-header/TemplateDashboardHeader.d.ts +3 -0
  20. package/dist/types/shared/components/template-dashboard-header/TemplateDashboardHeader.styles.d.ts +99 -0
  21. package/dist/types/shared/components/template-dashboard-header/TemplateDashboardHeader.types.d.ts +8 -0
  22. package/dist/types/shared/components/template-dashboard-header/index.d.ts +3 -0
  23. package/dist/types/theme/colors.d.ts +36 -0
  24. package/guidelines/Guidelines.md +46 -14
  25. package/guidelines/ai-index.md +111 -0
  26. package/guidelines/components/app-templates.md +103 -0
  27. package/guidelines/components/data-display.md +1 -1
  28. package/guidelines/components/date-inputs.md +2 -2
  29. package/guidelines/components/feedback.md +9 -3
  30. package/guidelines/components/forms.md +3 -1
  31. package/guidelines/components/layout.md +7 -5
  32. package/guidelines/foundations/spacing.md +3 -3
  33. package/guidelines/setup.md +14 -3
  34. package/package.json +6 -3
  35. package/skills/injast-app-builder/SKILL.md +54 -0
  36. package/skills/injast-app-builder/agents/openai.yaml +4 -0
@@ -1436,6 +1436,9 @@ var Tab_default = Tab;
1436
1436
  // src/constants/stepConnectorClasses.ts
1437
1437
  import { stepConnectorClasses as MuiStepConnectorClasses } from "@mui/material";
1438
1438
 
1439
+ // src/constants/index.ts
1440
+ var APP_LAYOUT_MAX_WIDTH = 550;
1441
+
1439
1442
  // src/components/CounterBoxInput.tsx
1440
1443
  import { useEffect as useEffect3, useMemo, useState as useState3 } from "react";
1441
1444
  import { Add, Minus } from "iconsax-react";
@@ -3130,11 +3133,1140 @@ var MultiSelect = ({
3130
3133
  ] });
3131
3134
  };
3132
3135
  var MultiSelect_default = MultiSelect;
3136
+
3137
+ // src/shared/components/Badge.tsx
3138
+ import { jsx as jsx54 } from "react/jsx-runtime";
3139
+ var Badge = ({ content, color = "#FACC15", textColor = "#1F2937" }) => {
3140
+ if (content == null) return null;
3141
+ const displayText = typeof content === "number" && content > 99 ? "+99" : String(content);
3142
+ return /* @__PURE__ */ jsx54(
3143
+ Box_default,
3144
+ {
3145
+ sx: {
3146
+ minWidth: 20,
3147
+ height: 20,
3148
+ px: "6px",
3149
+ borderRadius: "999px",
3150
+ bgcolor: color,
3151
+ color: textColor,
3152
+ display: "inline-flex",
3153
+ alignItems: "center",
3154
+ justifyContent: "center",
3155
+ fontFamily: '"IRANYekanXFaNum", "IRANYekanX", sans-serif',
3156
+ fontSize: 12,
3157
+ fontWeight: 700,
3158
+ lineHeight: 1,
3159
+ flexShrink: 0
3160
+ },
3161
+ children: displayText
3162
+ }
3163
+ );
3164
+ };
3165
+ var Badge_default = Badge;
3166
+
3167
+ // src/shared/components/SidebarRow.tsx
3168
+ import { ArrowDown2 as ArrowDown22, Notification, Setting2 } from "iconsax-reactjs";
3169
+ import { Fragment as Fragment5, jsx as jsx55, jsxs as jsxs10 } from "react/jsx-runtime";
3170
+ var SidebarDot = ({
3171
+ collapsed,
3172
+ disabled = false
3173
+ }) => /* @__PURE__ */ jsx55(
3174
+ Box_default,
3175
+ {
3176
+ sx: {
3177
+ width: collapsed ? 10 : 4,
3178
+ height: collapsed ? 10 : 4,
3179
+ borderRadius: "50%",
3180
+ bgcolor: disabled ? "rgba(255,255,255,0.30)" : "#FFFFFFE6",
3181
+ flexShrink: 0
3182
+ }
3183
+ }
3184
+ );
3185
+ var SidebarItemIcon = ({
3186
+ icon,
3187
+ color = "white"
3188
+ }) => {
3189
+ const IconComponent = icon === "notification" ? Notification : Setting2;
3190
+ return /* @__PURE__ */ jsx55(IconComponent, { size: 20, color, variant: "Linear" });
3191
+ };
3192
+ var SidebarRow = ({
3193
+ active = false,
3194
+ badgeColor = "#FACC15",
3195
+ badgeTextColor,
3196
+ badgeContent,
3197
+ child = false,
3198
+ collapsed,
3199
+ disabled = false,
3200
+ expanded = false,
3201
+ hasChildren = false,
3202
+ icon,
3203
+ onClick,
3204
+ title
3205
+ }) => {
3206
+ const resolvedIcon = icon;
3207
+ const disabledColor = "rgba(255,255,255,0.38)";
3208
+ const itemColor = disabled ? disabledColor : "white";
3209
+ const rowHeight = child ? "40px" : "48px";
3210
+ return /* @__PURE__ */ jsx55(
3211
+ Box_default,
3212
+ {
3213
+ component: "button",
3214
+ onClick: disabled ? void 0 : onClick,
3215
+ sx: {
3216
+ width: "100%",
3217
+ height: rowHeight,
3218
+ minHeight: rowHeight,
3219
+ boxSizing: "border-box",
3220
+ border: 0,
3221
+ outline: "none",
3222
+ appearance: "none",
3223
+ WebkitTapHighlightColor: "transparent",
3224
+ borderRadius: "8px",
3225
+ bgcolor: active && !disabled ? "rgba(255,255,255,0.10)" : "transparent",
3226
+ color: itemColor,
3227
+ display: "flex",
3228
+ alignItems: "center",
3229
+ justifyContent: collapsed ? "center" : "space-between",
3230
+ p: 0,
3231
+ cursor: disabled ? "not-allowed" : "pointer",
3232
+ transition: "background-color 0.2s ease",
3233
+ fontWeight: 400,
3234
+ "&:hover": {
3235
+ bgcolor: disabled ? "transparent" : active ? "rgba(255,255,255,0.10)" : "rgba(255,255,255,0.06)",
3236
+ fontWeight: 400
3237
+ },
3238
+ "&:disabled": {
3239
+ color: disabledColor
3240
+ },
3241
+ "&:focus": {
3242
+ outline: "none"
3243
+ },
3244
+ "&:focus-visible": {
3245
+ outline: "none"
3246
+ }
3247
+ },
3248
+ children: collapsed ? /* @__PURE__ */ jsxs10(
3249
+ Box_default,
3250
+ {
3251
+ sx: {
3252
+ position: "relative",
3253
+ display: "inline-flex",
3254
+ alignItems: "center",
3255
+ justifyContent: "center"
3256
+ },
3257
+ children: [
3258
+ resolvedIcon ? /* @__PURE__ */ jsx55(SidebarItemIcon, { icon: resolvedIcon, color: itemColor }) : null,
3259
+ badgeContent != null && !disabled ? /* @__PURE__ */ jsx55(
3260
+ Box_default,
3261
+ {
3262
+ sx: {
3263
+ position: "absolute",
3264
+ top: -10,
3265
+ insetInlineEnd: -14
3266
+ },
3267
+ children: /* @__PURE__ */ jsx55(Badge_default, { content: badgeContent, color: badgeColor, textColor: badgeTextColor })
3268
+ }
3269
+ ) : null
3270
+ ]
3271
+ }
3272
+ ) : /* @__PURE__ */ jsxs10(Fragment5, { children: [
3273
+ /* @__PURE__ */ jsxs10(
3274
+ Box_default,
3275
+ {
3276
+ sx: {
3277
+ display: "flex",
3278
+ alignItems: "center",
3279
+ gap: child ? "8px" : "12px",
3280
+ minWidth: 0,
3281
+ paddingInlineEnd: child ? "16px" : "12px",
3282
+ paddingInlineStart: child ? "32px" : "12px"
3283
+ },
3284
+ children: [
3285
+ resolvedIcon ? /* @__PURE__ */ jsx55(SidebarItemIcon, { icon: resolvedIcon, color: itemColor }) : child ? /* @__PURE__ */ jsx55(SidebarDot, { collapsed, disabled }) : null,
3286
+ /* @__PURE__ */ jsx55(
3287
+ Typography_default,
3288
+ {
3289
+ fontSize: 14,
3290
+ sx: {
3291
+ color: itemColor,
3292
+ fontWeight: active && !disabled ? 500 : 400,
3293
+ whiteSpace: "nowrap",
3294
+ overflow: "hidden",
3295
+ textOverflow: "ellipsis"
3296
+ },
3297
+ children: title
3298
+ }
3299
+ )
3300
+ ]
3301
+ }
3302
+ ),
3303
+ hasChildren || badgeContent != null ? /* @__PURE__ */ jsxs10(
3304
+ Box_default,
3305
+ {
3306
+ sx: {
3307
+ marginInlineStart: "12px",
3308
+ marginInlineEnd: "12px",
3309
+ display: "flex",
3310
+ alignItems: "center",
3311
+ justifyContent: "center",
3312
+ gap: "8px",
3313
+ flexShrink: 0
3314
+ },
3315
+ children: [
3316
+ badgeContent != null && !disabled ? /* @__PURE__ */ jsx55(Badge_default, { content: badgeContent, color: badgeColor, textColor: badgeTextColor }) : null,
3317
+ hasChildren ? /* @__PURE__ */ jsx55(
3318
+ ArrowDown22,
3319
+ {
3320
+ size: 16,
3321
+ color: itemColor,
3322
+ variant: "Linear",
3323
+ style: {
3324
+ transition: "transform 0.2s ease",
3325
+ transform: expanded ? "rotate(180deg)" : "rotate(0deg)"
3326
+ }
3327
+ }
3328
+ ) : null
3329
+ ]
3330
+ }
3331
+ ) : null
3332
+ ] })
3333
+ }
3334
+ );
3335
+ };
3336
+ var SidebarRow_default = SidebarRow;
3337
+
3338
+ // src/shared/components/TemplateDashboardSidebar.tsx
3339
+ import { useState as useState8 } from "react";
3340
+ import { ArrowLeft, ArrowRight } from "iconsax-reactjs";
3341
+ import { jsx as jsx56, jsxs as jsxs11 } from "react/jsx-runtime";
3342
+ var templateDashboardSidebarWidths = {
3343
+ expanded: 220,
3344
+ collapsed: 76
3345
+ };
3346
+ var TemplateDashboardSidebar = ({
3347
+ activeItemId,
3348
+ badgeColor = "#FACC15",
3349
+ badgeTextColor,
3350
+ buttonColor = "#0F8DDC",
3351
+ collapsed = false,
3352
+ items = [],
3353
+ logo,
3354
+ logoCollapsed,
3355
+ onItemClick,
3356
+ onToggleCollapse,
3357
+ sidebarColor,
3358
+ title = "\u062A\u0646\u0638\u06CC\u0645\u0627\u062A"
3359
+ }) => {
3360
+ const resolvedItems = items.length > 0 ? items : [
3361
+ {
3362
+ id: "settings",
3363
+ title,
3364
+ icon: "settings"
3365
+ }
3366
+ ];
3367
+ const [expandedItemIds, setExpandedItemIds] = useState8(
3368
+ resolvedItems.length > 0 ? [resolvedItems[0].id] : []
3369
+ );
3370
+ const handleParentClick = (item) => {
3371
+ if (item.disabled) return;
3372
+ if (!item.children?.length) {
3373
+ onItemClick?.(item);
3374
+ return;
3375
+ }
3376
+ setExpandedItemIds(
3377
+ (prev) => prev.includes(item.id) ? prev.filter((id) => id !== item.id) : [...prev, item.id]
3378
+ );
3379
+ };
3380
+ return /* @__PURE__ */ jsxs11(
3381
+ Box_default,
3382
+ {
3383
+ component: "aside",
3384
+ sx: {
3385
+ position: "relative",
3386
+ width: "100%",
3387
+ height: "100%",
3388
+ background: sidebarColor ?? "var(--Blue-primary, #0661A2)",
3389
+ color: "white",
3390
+ display: "flex",
3391
+ flexDirection: "column",
3392
+ overflow: "visible",
3393
+ px: collapsed ? 0.8 : 1.05,
3394
+ pt: logo || logoCollapsed ? 0 : "64px",
3395
+ pb: 1.7
3396
+ },
3397
+ children: [
3398
+ logo || logoCollapsed ? /* @__PURE__ */ jsx56(
3399
+ Box_default,
3400
+ {
3401
+ sx: {
3402
+ display: "flex",
3403
+ alignItems: "center",
3404
+ justifyContent: collapsed ? "center" : "flex-start",
3405
+ px: collapsed ? 0 : 1.5,
3406
+ py: 2,
3407
+ minHeight: collapsed ? 56 : 80,
3408
+ overflow: "hidden",
3409
+ flexShrink: 0
3410
+ },
3411
+ children: collapsed && logoCollapsed ? logoCollapsed : logo
3412
+ }
3413
+ ) : null,
3414
+ /* @__PURE__ */ jsx56(
3415
+ Box_default,
3416
+ {
3417
+ component: "nav",
3418
+ sx: {
3419
+ display: "flex",
3420
+ flexDirection: "column",
3421
+ gap: "4px",
3422
+ minHeight: 0,
3423
+ overflowY: "auto",
3424
+ "&::-webkit-scrollbar": {
3425
+ width: 6
3426
+ },
3427
+ "&::-webkit-scrollbar-thumb": {
3428
+ bgcolor: "#73A8CF",
3429
+ borderRadius: 999
3430
+ }
3431
+ },
3432
+ children: resolvedItems.map((item) => {
3433
+ const hasChildren = Boolean(item.children?.length);
3434
+ const isExpanded = expandedItemIds.includes(item.id);
3435
+ return /* @__PURE__ */ jsxs11(Box_default, { children: [
3436
+ /* @__PURE__ */ jsx56(
3437
+ SidebarRow_default,
3438
+ {
3439
+ title: item.title,
3440
+ icon: item.icon,
3441
+ badgeColor,
3442
+ badgeTextColor,
3443
+ badgeContent: hasChildren && isExpanded && !collapsed ? void 0 : item.badgeContent,
3444
+ disabled: item.disabled,
3445
+ collapsed,
3446
+ hasChildren,
3447
+ expanded: isExpanded,
3448
+ active: item.id === activeItemId,
3449
+ onClick: () => handleParentClick(item)
3450
+ }
3451
+ ),
3452
+ hasChildren ? /* @__PURE__ */ jsx56(
3453
+ Box_default,
3454
+ {
3455
+ sx: {
3456
+ overflow: "hidden",
3457
+ maxHeight: !collapsed && isExpanded ? "500px" : 0,
3458
+ opacity: !collapsed && isExpanded ? 1 : 0,
3459
+ visibility: !collapsed && isExpanded ? "visible" : "hidden",
3460
+ transition: "max-height 200ms ease, opacity 120ms ease, visibility 0s linear 200ms"
3461
+ },
3462
+ children: /* @__PURE__ */ jsx56(
3463
+ Box_default,
3464
+ {
3465
+ sx: {
3466
+ display: "flex",
3467
+ flexDirection: "column",
3468
+ gap: !collapsed && isExpanded ? "4px" : 0,
3469
+ pt: !collapsed && isExpanded ? "4px" : 0
3470
+ },
3471
+ children: item.children?.map((child) => /* @__PURE__ */ jsx56(
3472
+ Box_default,
3473
+ {
3474
+ sx: {
3475
+ boxSizing: "border-box"
3476
+ },
3477
+ children: /* @__PURE__ */ jsx56(
3478
+ SidebarRow_default,
3479
+ {
3480
+ title: child.title,
3481
+ icon: child.icon,
3482
+ badgeColor,
3483
+ badgeTextColor,
3484
+ badgeContent: child.badgeContent,
3485
+ disabled: child.disabled,
3486
+ collapsed: false,
3487
+ child: true,
3488
+ active: child.id === activeItemId,
3489
+ onClick: () => onItemClick?.({
3490
+ id: child.id,
3491
+ title: child.title,
3492
+ icon: child.icon,
3493
+ badgeContent: child.badgeContent,
3494
+ disabled: child.disabled
3495
+ })
3496
+ }
3497
+ )
3498
+ },
3499
+ child.id
3500
+ ))
3501
+ }
3502
+ )
3503
+ }
3504
+ ) : null
3505
+ ] }, item.id);
3506
+ })
3507
+ }
3508
+ ),
3509
+ /* @__PURE__ */ jsx56(
3510
+ IconButton_default,
3511
+ {
3512
+ "aria-label": collapsed ? "\u0628\u0627\u0632 \u06A9\u0631\u062F\u0646 \u0633\u0627\u06CC\u062F\u0628\u0627\u0631" : "\u0628\u0633\u062A\u0646 \u0633\u0627\u06CC\u062F\u0628\u0627\u0631",
3513
+ onClick: onToggleCollapse,
3514
+ sx: {
3515
+ position: "absolute",
3516
+ insetInlineEnd: "-16px",
3517
+ top: "16px",
3518
+ width: "34px",
3519
+ height: "34px",
3520
+ minWidth: "34px",
3521
+ borderRadius: "8px",
3522
+ bgcolor: "#FFFFFF",
3523
+ border: "1px solid #D8E0EA",
3524
+ p: 0,
3525
+ display: "inline-flex",
3526
+ alignItems: "center",
3527
+ justifyContent: "center",
3528
+ flexShrink: 0,
3529
+ boxSizing: "border-box",
3530
+ zIndex: 10,
3531
+ "&:hover": {
3532
+ bgcolor: "#FFFFFF"
3533
+ }
3534
+ },
3535
+ children: collapsed ? /* @__PURE__ */ jsx56(ArrowLeft, { size: 20, color: buttonColor }) : /* @__PURE__ */ jsx56(ArrowRight, { size: 20, color: buttonColor })
3536
+ }
3537
+ )
3538
+ ]
3539
+ }
3540
+ );
3541
+ };
3542
+ var TemplateDashboardSidebar_default = TemplateDashboardSidebar;
3543
+
3544
+ // src/shared/components/template-dashboard/TemplateDashboard.tsx
3545
+ import { useState as useState9 } from "react";
3546
+ import { jsx as jsx57, jsxs as jsxs12 } from "react/jsx-runtime";
3547
+ function TemplateDashboard({
3548
+ sidebarTitle,
3549
+ sidebarItems,
3550
+ sidebarActiveItemId,
3551
+ sidebarExpandedItemId,
3552
+ sidebarColor,
3553
+ badgeColor,
3554
+ badgeTextColor,
3555
+ buttonColor,
3556
+ sidebarLogo,
3557
+ sidebarLogoCollapsed,
3558
+ onSidebarItemClick,
3559
+ header,
3560
+ pageHeader,
3561
+ children
3562
+ }) {
3563
+ const [collapsed, setCollapsed] = useState9(false);
3564
+ const sidebarWidth = collapsed ? templateDashboardSidebarWidths.collapsed : templateDashboardSidebarWidths.expanded;
3565
+ return /* @__PURE__ */ jsxs12(Box_default, { sx: { height: "100%", display: "flex", direction: "ltr" }, children: [
3566
+ /* @__PURE__ */ jsx57(
3567
+ Box_default,
3568
+ {
3569
+ sx: {
3570
+ height: "100%",
3571
+ width: sidebarWidth,
3572
+ flexShrink: 0,
3573
+ transition: "width 0.2s ease"
3574
+ },
3575
+ children: /* @__PURE__ */ jsx57(
3576
+ TemplateDashboardSidebar_default,
3577
+ {
3578
+ collapsed,
3579
+ logo: sidebarLogo,
3580
+ logoCollapsed: sidebarLogoCollapsed,
3581
+ sidebarColor,
3582
+ badgeColor,
3583
+ badgeTextColor,
3584
+ buttonColor,
3585
+ onToggleCollapse: () => setCollapsed((v) => !v),
3586
+ title: sidebarTitle,
3587
+ items: sidebarItems,
3588
+ activeItemId: sidebarActiveItemId,
3589
+ expandedItemId: sidebarExpandedItemId,
3590
+ onItemClick: onSidebarItemClick
3591
+ }
3592
+ )
3593
+ }
3594
+ ),
3595
+ /* @__PURE__ */ jsxs12(
3596
+ Box_default,
3597
+ {
3598
+ sx: {
3599
+ height: "100%",
3600
+ minHeight: 0,
3601
+ minWidth: 0,
3602
+ flex: 1,
3603
+ display: "flex",
3604
+ flexDirection: "column"
3605
+ },
3606
+ children: [
3607
+ header ? /* @__PURE__ */ jsx57(Box_default, { sx: { flexShrink: 0 }, children: header }) : null,
3608
+ pageHeader ? /* @__PURE__ */ jsx57(Box_default, { sx: { flexShrink: 0 }, children: pageHeader }) : null,
3609
+ /* @__PURE__ */ jsx57(
3610
+ Box_default,
3611
+ {
3612
+ component: "main",
3613
+ sx: {
3614
+ bgcolor: defaultColors.neutral[50],
3615
+ flex: 1,
3616
+ minHeight: 0,
3617
+ overflowY: "auto",
3618
+ p: "24px"
3619
+ },
3620
+ children
3621
+ }
3622
+ )
3623
+ ]
3624
+ }
3625
+ )
3626
+ ] });
3627
+ }
3628
+
3629
+ // src/shared/components/template-dashboard-header/TemplateDashboardHeader.styles.ts
3630
+ var surfaceButtonStyles = {
3631
+ width: "42px",
3632
+ height: "42px",
3633
+ minWidth: "42px",
3634
+ borderRadius: "8px",
3635
+ bgcolor: "#F5F7FA",
3636
+ border: "none",
3637
+ p: 0,
3638
+ display: "inline-flex",
3639
+ alignItems: "center",
3640
+ justifyContent: "center",
3641
+ flexShrink: 0,
3642
+ boxSizing: "border-box"
3643
+ };
3644
+ var templateDashboardHeaderStyles = {
3645
+ root: {
3646
+ width: "100%",
3647
+ height: "72px",
3648
+ minHeight: "72px",
3649
+ maxHeight: "72px",
3650
+ bgcolor: "#FFFFFF",
3651
+ px: "24px",
3652
+ py: "18px",
3653
+ boxSizing: "border-box",
3654
+ display: "flex",
3655
+ alignItems: "center",
3656
+ justifyContent: "space-between",
3657
+ direction: "ltr",
3658
+ flexShrink: 0
3659
+ },
3660
+ rightCluster: {
3661
+ display: "flex",
3662
+ flexDirection: "row",
3663
+ alignItems: "center",
3664
+ gap: "16px",
3665
+ flexShrink: 0
3666
+ },
3667
+ datePill: {
3668
+ width: "192px",
3669
+ height: "42px",
3670
+ minWidth: "192px",
3671
+ bgcolor: "#F5F7FA",
3672
+ borderRadius: "8px",
3673
+ display: "flex",
3674
+ alignItems: "center",
3675
+ justifyContent: "center",
3676
+ px: "12px",
3677
+ boxSizing: "border-box",
3678
+ flexShrink: 0
3679
+ },
3680
+ dateText: {
3681
+ fontSize: "12px",
3682
+ fontWeight: 500,
3683
+ lineHeight: "18px",
3684
+ color: "#374151",
3685
+ whiteSpace: "nowrap"
3686
+ },
3687
+ leftCluster: {
3688
+ display: "flex",
3689
+ flexDirection: "row",
3690
+ alignItems: "center",
3691
+ gap: "12px",
3692
+ flexShrink: 0
3693
+ },
3694
+ logoutButton: surfaceButtonStyles,
3695
+ profileButton: surfaceButtonStyles,
3696
+ userTextBlock: {
3697
+ display: "flex",
3698
+ flexDirection: "column",
3699
+ alignItems: "flex-start",
3700
+ direction: "ltr",
3701
+ textAlign: "left",
3702
+ minWidth: 0
3703
+ },
3704
+ userName: {
3705
+ fontSize: "13px",
3706
+ fontWeight: 600,
3707
+ lineHeight: "20px",
3708
+ color: "#374151"
3709
+ },
3710
+ userRole: {
3711
+ fontSize: "11px",
3712
+ fontWeight: 400,
3713
+ lineHeight: "16px",
3714
+ color: "#8A94A6"
3715
+ }
3716
+ };
3717
+
3718
+ // src/shared/components/template-dashboard-header/TemplateDashboardHeader.tsx
3719
+ import { jsx as jsx58, jsxs as jsxs13 } from "react/jsx-runtime";
3720
+ var TemplateDashboardHeader = ({
3721
+ left,
3722
+ right,
3723
+ children,
3724
+ className,
3725
+ sx
3726
+ }) => {
3727
+ return /* @__PURE__ */ jsxs13(
3728
+ Box_default,
3729
+ {
3730
+ component: "header",
3731
+ className,
3732
+ sx: {
3733
+ ...templateDashboardHeaderStyles.root,
3734
+ ...sx ?? {}
3735
+ },
3736
+ children: [
3737
+ right ? /* @__PURE__ */ jsx58(Box_default, { sx: templateDashboardHeaderStyles.rightCluster, children: right }) : null,
3738
+ left ? /* @__PURE__ */ jsx58(Box_default, { sx: templateDashboardHeaderStyles.leftCluster, children: left }) : null,
3739
+ children
3740
+ ]
3741
+ }
3742
+ );
3743
+ };
3744
+ var TemplateDashboardHeader_default = TemplateDashboardHeader;
3745
+
3746
+ // src/shared/components/app-page-header.tsx
3747
+ import { useRouter } from "@tanstack/react-router";
3748
+ import { ArrowRight as ArrowRight2, Notification as Notification2 } from "iconsax-reactjs";
3749
+
3750
+ // src/assets/icons/headphone.svg
3751
+ var headphone_default = "../headphone-FHILIBNI.svg";
3752
+
3753
+ // src/shared/components/app-page-header.tsx
3754
+ import { Fragment as Fragment6, jsx as jsx59, jsxs as jsxs14 } from "react/jsx-runtime";
3755
+ var AppPageHeader = ({
3756
+ title,
3757
+ subtitle,
3758
+ titleComponent,
3759
+ notificationBtn,
3760
+ chatbotBtn = true,
3761
+ headerActions,
3762
+ variant = "default",
3763
+ position = "fixed",
3764
+ rootSx,
3765
+ contentSx
3766
+ }) => {
3767
+ const router = useRouter();
3768
+ const onBackBtnClick = () => {
3769
+ router.history.back();
3770
+ };
3771
+ const navigateToChatbot = () => {
3772
+ window.location.href = "/chatbot";
3773
+ };
3774
+ const onNotificationBtnClick = () => {
3775
+ };
3776
+ const variantStyles = {
3777
+ default: {
3778
+ root: {
3779
+ display: "flex",
3780
+ flexDirection: "row",
3781
+ height: "60px",
3782
+ justifyContent: "center",
3783
+ alignItems: "center",
3784
+ bgcolor: "#F4F6FA"
3785
+ },
3786
+ content: {
3787
+ display: "flex",
3788
+ justifyContent: "space-between",
3789
+ alignItems: "center",
3790
+ p: 4,
3791
+ height: "60px",
3792
+ width: APP_LAYOUT_MAX_WIDTH,
3793
+ bgcolor: "#F4F6FA"
3794
+ },
3795
+ actionButton: {
3796
+ backgroundColor: defaultColors.neutral[200],
3797
+ borderRadius: "12px"
3798
+ },
3799
+ placeholder: {
3800
+ width: 20,
3801
+ height: 20
3802
+ },
3803
+ title: {
3804
+ variant: "h2",
3805
+ fontWeight: 700,
3806
+ sx: {
3807
+ textAlign: "center"
3808
+ }
3809
+ },
3810
+ titleContainer: {
3811
+ display: "flex",
3812
+ flexDirection: "column",
3813
+ alignItems: "center",
3814
+ justifyContent: "center",
3815
+ gap: "4px",
3816
+ flex: 1,
3817
+ minWidth: 0
3818
+ },
3819
+ subtitle: {
3820
+ sx: {
3821
+ textAlign: "center",
3822
+ fontSize: "14px",
3823
+ fontWeight: 400,
3824
+ color: defaultColors.neutral[500],
3825
+ lineHeight: 1.4
3826
+ }
3827
+ }
3828
+ },
3829
+ mobile: {
3830
+ root: {
3831
+ display: "flex",
3832
+ flexDirection: "row",
3833
+ justifyContent: "center",
3834
+ alignItems: "center",
3835
+ width: "100%",
3836
+ bgcolor: "#F4F6FA"
3837
+ },
3838
+ content: {
3839
+ display: "flex",
3840
+ justifyContent: "space-between",
3841
+ alignItems: "center",
3842
+ px: "18px",
3843
+ // pt: 'calc(12px + env(safe-area-inset-top))',
3844
+ pb: "0px",
3845
+ minHeight: "80px",
3846
+ width: "100%",
3847
+ maxWidth: APP_LAYOUT_MAX_WIDTH,
3848
+ bgcolor: "#F4F6FA",
3849
+ direction: "ltr",
3850
+ gap: "16px"
3851
+ },
3852
+ actionButton: {
3853
+ width: "36px",
3854
+ height: "36px",
3855
+ minWidth: "36px",
3856
+ backgroundColor: "#E9EDF4",
3857
+ borderRadius: "12px"
3858
+ },
3859
+ placeholder: {
3860
+ width: "64px",
3861
+ height: "64px"
3862
+ },
3863
+ title: {
3864
+ sx: {
3865
+ direction: "rtl",
3866
+ textAlign: "center",
3867
+ fontSize: "16px",
3868
+ fontWeight: 700,
3869
+ color: "#1F2937",
3870
+ lineHeight: 1.3
3871
+ }
3872
+ },
3873
+ titleContainer: {
3874
+ display: "flex",
3875
+ flexDirection: "column",
3876
+ alignItems: "center",
3877
+ justifyContent: "center",
3878
+ gap: "4px",
3879
+ flex: 1,
3880
+ minWidth: 0
3881
+ },
3882
+ subtitle: {
3883
+ sx: {
3884
+ direction: "rtl",
3885
+ textAlign: "center",
3886
+ fontSize: "14px",
3887
+ fontWeight: 400,
3888
+ color: "#9CA3AF",
3889
+ lineHeight: 1.4
3890
+ }
3891
+ }
3892
+ }
3893
+ };
3894
+ const selectedVariant = variantStyles[variant];
3895
+ const positionStyles = position === "fixed" ? {
3896
+ position: "fixed",
3897
+ left: 0,
3898
+ right: 0,
3899
+ top: 0,
3900
+ zIndex: 999
3901
+ } : {};
3902
+ const renderAction = (action) => {
3903
+ if (!action) {
3904
+ return /* @__PURE__ */ jsx59(Box_default, { sx: selectedVariant.placeholder });
3905
+ }
3906
+ return /* @__PURE__ */ jsx59(
3907
+ IconButton_default,
3908
+ {
3909
+ "aria-label": action.ariaLabel,
3910
+ onClick: action.onClick,
3911
+ disabled: action.disabled,
3912
+ sx: selectedVariant.actionButton,
3913
+ children: action.icon
3914
+ }
3915
+ );
3916
+ };
3917
+ const hasCustomActions = Boolean(headerActions);
3918
+ return /* @__PURE__ */ jsx59(
3919
+ Box_default,
3920
+ {
3921
+ sx: {
3922
+ ...selectedVariant.root,
3923
+ ...positionStyles,
3924
+ ...rootSx
3925
+ },
3926
+ children: /* @__PURE__ */ jsxs14(
3927
+ Box_default,
3928
+ {
3929
+ sx: {
3930
+ ...selectedVariant.content,
3931
+ ...contentSx
3932
+ },
3933
+ children: [
3934
+ hasCustomActions ? renderAction(headerActions?.leading) : /* @__PURE__ */ jsx59(Fragment6, { children: notificationBtn ? /* @__PURE__ */ jsx59(
3935
+ IconButton_default,
3936
+ {
3937
+ onClick: onNotificationBtnClick,
3938
+ sx: selectedVariant.actionButton,
3939
+ children: /* @__PURE__ */ jsx59(Notification2, { size: 20, color: defaultColors.neutral[700] })
3940
+ }
3941
+ ) : /* @__PURE__ */ jsx59(
3942
+ IconButton_default,
3943
+ {
3944
+ onClick: onBackBtnClick,
3945
+ sx: selectedVariant.actionButton,
3946
+ children: /* @__PURE__ */ jsx59(ArrowRight2, { size: 20, color: defaultColors.neutral[700] })
3947
+ }
3948
+ ) }),
3949
+ titleComponent ? titleComponent : title && /* @__PURE__ */ jsxs14(Box_default, { sx: selectedVariant.titleContainer, children: [
3950
+ /* @__PURE__ */ jsx59(
3951
+ Typography_default,
3952
+ {
3953
+ variant: selectedVariant.title.variant,
3954
+ component: "h1",
3955
+ fontWeight: selectedVariant.title.fontWeight,
3956
+ sx: selectedVariant.title.sx,
3957
+ children: title
3958
+ }
3959
+ ),
3960
+ subtitle ? /* @__PURE__ */ jsx59(Typography_default, { component: "span", sx: selectedVariant.subtitle.sx, children: subtitle }) : null
3961
+ ] }),
3962
+ hasCustomActions ? renderAction(headerActions?.trailing) : chatbotBtn ? /* @__PURE__ */ jsx59(IconButton_default, { onClick: navigateToChatbot, sx: selectedVariant.actionButton, children: /* @__PURE__ */ jsx59("img", { src: headphone_default, width: 20, height: 20, alt: "support" }) }) : /* @__PURE__ */ jsx59(Box_default, { sx: selectedVariant.placeholder })
3963
+ ]
3964
+ }
3965
+ )
3966
+ }
3967
+ );
3968
+ };
3969
+ var app_page_header_default = AppPageHeader;
3970
+
3971
+ // src/shared/components/app-page-footer.tsx
3972
+ import { jsx as jsx60 } from "react/jsx-runtime";
3973
+ var AppPageFooter = ({
3974
+ children,
3975
+ variant = "default",
3976
+ position = "fixed",
3977
+ rootSx,
3978
+ contentSx
3979
+ }) => {
3980
+ const variantStyles = {
3981
+ default: {
3982
+ root: {
3983
+ display: "flex",
3984
+ flexDirection: "row",
3985
+ height: "60px",
3986
+ justifyContent: "center",
3987
+ alignItems: "center",
3988
+ bgcolor: "#F4F6FA"
3989
+ },
3990
+ content: {
3991
+ bgcolor: "#F4F6FA",
3992
+ display: "flex",
3993
+ flexDirection: "row",
3994
+ width: APP_LAYOUT_MAX_WIDTH,
3995
+ height: "60px",
3996
+ alignItems: "center",
3997
+ px: 4,
3998
+ gap: 2.5,
3999
+ py: 5
4000
+ }
4001
+ },
4002
+ mobile: {
4003
+ root: {
4004
+ display: "flex",
4005
+ flexDirection: "row",
4006
+ justifyContent: "center",
4007
+ width: "100%",
4008
+ px: 0,
4009
+ pt: 0,
4010
+ pb: 0,
4011
+ mt: "auto",
4012
+ bgcolor: "#F4F6FA"
4013
+ },
4014
+ content: {
4015
+ bgcolor: "#F4F6FA",
4016
+ display: "flex",
4017
+ flexDirection: "row",
4018
+ width: "100%",
4019
+ maxWidth: APP_LAYOUT_MAX_WIDTH,
4020
+ alignItems: "center",
4021
+ px: "10px",
4022
+ pt: "18px",
4023
+ pb: "14px",
4024
+ minHeight: "108px"
4025
+ }
4026
+ }
4027
+ };
4028
+ const positionStyles = position === "fixed" ? {
4029
+ position: "fixed",
4030
+ left: 0,
4031
+ right: 0,
4032
+ bottom: 0,
4033
+ zIndex: 999
4034
+ } : position === "sticky" ? {
4035
+ position: "sticky",
4036
+ bottom: 0,
4037
+ zIndex: 2
4038
+ } : {};
4039
+ const selectedVariant = variantStyles[variant];
4040
+ return /* @__PURE__ */ jsx60(
4041
+ Box_default,
4042
+ {
4043
+ sx: {
4044
+ ...selectedVariant.root,
4045
+ ...positionStyles,
4046
+ ...rootSx
4047
+ },
4048
+ children: /* @__PURE__ */ jsx60(
4049
+ Box_default,
4050
+ {
4051
+ sx: {
4052
+ ...selectedVariant.content,
4053
+ ...contentSx
4054
+ },
4055
+ children
4056
+ }
4057
+ )
4058
+ }
4059
+ );
4060
+ };
4061
+ var app_page_footer_default = AppPageFooter;
4062
+
4063
+ // src/mobile-app-template/components/mobile-app-footer-nav.tsx
4064
+ import { Link } from "@tanstack/react-router";
4065
+
4066
+ // src/theme/colors.ts
4067
+ var appColors = {
4068
+ primary: {
4069
+ 50: "#EDFCF6",
4070
+ 100: "#D4F7E8",
4071
+ 200: "#ACEED6",
4072
+ 300: "#76DFBF",
4073
+ 400: "#3EC9A3",
4074
+ 500: "#1DBF98",
4075
+ 600: "#15A48F",
4076
+ 700: "#0E8983",
4077
+ 800: "#09696E",
4078
+ 900: "#054F5B",
4079
+ transparent: "#1DBF981A",
4080
+ main: "#1DBF98",
4081
+ light: "#D4F7E8",
4082
+ dark: "#054F5B",
4083
+ contrastText: "#fff"
4084
+ },
4085
+ secondary: {
4086
+ 50: "#E3FFEE",
4087
+ 100: "#FFF9DB",
4088
+ 200: "#FFEEA4",
4089
+ 300: "#FBE07D",
4090
+ 400: "#FDD352",
4091
+ 500: "#F4BC28",
4092
+ 600: "#DCA000",
4093
+ 700: "#BB820D",
4094
+ 800: "#A06B0B",
4095
+ 900: "#89580C",
4096
+ transparent: "#F4BC281A",
4097
+ main: "#F4BC28",
4098
+ light: "#FFF9DB",
4099
+ dark: "#A06B0B",
4100
+ contrastText: "#fff"
4101
+ }
4102
+ };
4103
+
4104
+ // src/mobile-app-template/components/mobile-app-footer-nav.tsx
4105
+ import { jsx as jsx61, jsxs as jsxs15 } from "react/jsx-runtime";
4106
+ var MobileAppFooterNav = ({ items }) => {
4107
+ const renderItemContent = (item) => {
4108
+ const isActive = Boolean(item.active);
4109
+ const icon = typeof item.icon === "function" ? item.icon(isActive) : item.icon;
4110
+ return /* @__PURE__ */ jsxs15(
4111
+ Box_default,
4112
+ {
4113
+ sx: {
4114
+ display: "flex",
4115
+ flexDirection: "column",
4116
+ alignItems: "center",
4117
+ justifyContent: "center",
4118
+ gap: "8px",
4119
+ color: isActive ? appColors.primary.main : "#9CA3AF",
4120
+ width: "100%",
4121
+ minHeight: "74px"
4122
+ },
4123
+ children: [
4124
+ /* @__PURE__ */ jsx61(
4125
+ Box_default,
4126
+ {
4127
+ sx: {
4128
+ display: "flex",
4129
+ lineHeight: 0,
4130
+ transform: "translateY(12px)"
4131
+ },
4132
+ children: icon
4133
+ }
4134
+ ),
4135
+ /* @__PURE__ */ jsx61(
4136
+ Typography_default,
4137
+ {
4138
+ component: "span",
4139
+ sx: {
4140
+ fontSize: "12px",
4141
+ fontWeight: isActive ? 500 : 400,
4142
+ color: isActive ? appColors.primary.main : "#9CA3AF",
4143
+ lineHeight: 1.4,
4144
+ transform: "translateY(12px)"
4145
+ },
4146
+ children: item.label
4147
+ }
4148
+ )
4149
+ ]
4150
+ }
4151
+ );
4152
+ };
4153
+ return /* @__PURE__ */ jsx61(app_page_footer_default, { variant: "mobile", position: "static", children: /* @__PURE__ */ jsx61(
4154
+ Box_default,
4155
+ {
4156
+ component: "nav",
4157
+ role: "navigation",
4158
+ sx: {
4159
+ display: "grid",
4160
+ gridTemplateColumns: `repeat(${items.length}, minmax(0, 1fr))`,
4161
+ alignItems: "center",
4162
+ justifyItems: "center",
4163
+ width: "100%"
4164
+ },
4165
+ children: items.map((item) => {
4166
+ if (item.to) {
4167
+ return /* @__PURE__ */ jsx61(
4168
+ Link,
4169
+ {
4170
+ to: item.to,
4171
+ style: {
4172
+ width: "100%",
4173
+ display: "flex",
4174
+ justifyContent: "center"
4175
+ },
4176
+ children: renderItemContent(item)
4177
+ },
4178
+ item.key
4179
+ );
4180
+ }
4181
+ return /* @__PURE__ */ jsx61(
4182
+ Box_default,
4183
+ {
4184
+ component: item.onClick ? "button" : "div",
4185
+ type: item.onClick ? "button" : void 0,
4186
+ onClick: item.onClick,
4187
+ sx: {
4188
+ width: "100%",
4189
+ display: "flex",
4190
+ justifyContent: "center",
4191
+ bgcolor: "transparent",
4192
+ border: "none",
4193
+ font: "inherit",
4194
+ cursor: item.onClick ? "pointer" : "default"
4195
+ },
4196
+ children: renderItemContent(item)
4197
+ },
4198
+ item.key
4199
+ );
4200
+ })
4201
+ }
4202
+ ) });
4203
+ };
4204
+ var mobile_app_footer_nav_default = MobileAppFooterNav;
4205
+
4206
+ // src/mobile-app-template/components/mobile-app-layout.tsx
4207
+ import { jsx as jsx62, jsxs as jsxs16 } from "react/jsx-runtime";
4208
+ var MobileAppLayout = ({
4209
+ title,
4210
+ subtitle,
4211
+ titleComponent,
4212
+ headerActions,
4213
+ footerItems = [],
4214
+ className,
4215
+ children
4216
+ }) => {
4217
+ return /* @__PURE__ */ jsxs16(
4218
+ Box_default,
4219
+ {
4220
+ className,
4221
+ sx: {
4222
+ width: "100%",
4223
+ minHeight: "100dvh",
4224
+ maxWidth: APP_LAYOUT_MAX_WIDTH,
4225
+ mx: "auto",
4226
+ display: "flex",
4227
+ flexDirection: "column",
4228
+ bgcolor: "#F5F6FA",
4229
+ color: defaultColors.neutral[900],
4230
+ overflowX: "hidden"
4231
+ },
4232
+ children: [
4233
+ /* @__PURE__ */ jsx62(
4234
+ app_page_header_default,
4235
+ {
4236
+ title,
4237
+ subtitle,
4238
+ titleComponent,
4239
+ headerActions,
4240
+ variant: "mobile",
4241
+ position: "static"
4242
+ }
4243
+ ),
4244
+ /* @__PURE__ */ jsx62(
4245
+ Box_default,
4246
+ {
4247
+ component: "section",
4248
+ sx: {
4249
+ px: "18px",
4250
+ pb: "24px",
4251
+ flex: 1
4252
+ },
4253
+ children
4254
+ }
4255
+ ),
4256
+ footerItems.length ? /* @__PURE__ */ jsx62(mobile_app_footer_nav_default, { items: footerItems }) : null
4257
+ ]
4258
+ }
4259
+ );
4260
+ };
4261
+ var mobile_app_layout_default = MobileAppLayout;
3133
4262
  export {
3134
4263
  Accordion_default as Accordion,
3135
4264
  AccordionDetails_default as AccordionDetails,
3136
4265
  AccordionSummary_default as AccordionSummary,
4266
+ app_page_footer_default as AppPageFooter,
4267
+ app_page_header_default as AppPageHeader,
3137
4268
  Autocomplete_default as Autocomplete,
4269
+ Badge_default as Badge,
3138
4270
  Box_default as Box,
3139
4271
  Button_default as Button,
3140
4272
  CardNumberInput_default as CardNumberInput,
@@ -3160,6 +4292,8 @@ export {
3160
4292
  Loading_default as Loading,
3161
4293
  LoadingModal_default as LoadingModal,
3162
4294
  MenuItem_default as MenuItem,
4295
+ mobile_app_footer_nav_default as MobileAppFooterNav,
4296
+ mobile_app_layout_default as MobileAppLayout,
3163
4297
  MobileDatePicker_default as MobileDatePicker,
3164
4298
  Modal_default as Modal,
3165
4299
  MultiSelect_default as MultiSelect,
@@ -3170,6 +4304,9 @@ export {
3170
4304
  Radio_default as Radio,
3171
4305
  RadioGroup_default as RadioGroup,
3172
4306
  Select_default as Select,
4307
+ SidebarDot,
4308
+ SidebarItemIcon,
4309
+ SidebarRow_default as SidebarRow,
3173
4310
  Skeleton_default as Skeleton,
3174
4311
  Slider_default as Slider,
3175
4312
  Step_default as Step,
@@ -3179,9 +4316,14 @@ export {
3179
4316
  Stepper_default as Stepper,
3180
4317
  SvgIcon_default as SvgIcon,
3181
4318
  Tab_default as Tab,
4319
+ TemplateDashboard,
4320
+ TemplateDashboardHeader_default as TemplateDashboardHeader,
4321
+ TemplateDashboardSidebar_default as TemplateDashboardSidebar,
3182
4322
  TextField_default as TextField,
3183
4323
  Toast_default as Toast,
3184
4324
  Toggle_default as Toggle,
3185
4325
  Typography_default as Typography,
3186
- WheelDatePicker_default as WheelDatePicker
4326
+ WheelDatePicker_default as WheelDatePicker,
4327
+ templateDashboardHeaderStyles,
4328
+ templateDashboardSidebarWidths
3187
4329
  };