@ziyarago/ui 0.6.1 → 0.8.0

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ziyarago/ui",
3
- "version": "0.6.1",
3
+ "version": "0.8.0",
4
4
  "homepage": "https://ziyara.vip",
5
5
  "imports": {
6
6
  "vue": "import { UiButton } from '@ziyarago/ui/vue'",
@@ -275,6 +275,18 @@
275
275
  "PageAccount",
276
276
  "PagePricing",
277
277
  "PageFaq",
278
+ "PageAnalytics",
279
+ "PageCalendar",
280
+ "PageKanban",
281
+ "PageBilling",
282
+ "PageTeam",
283
+ "PageIntegrations",
284
+ "PageSearch",
285
+ "PageNotifications",
286
+ "PageInbox",
287
+ "PageCheckout",
288
+ "PageOnboarding",
289
+ "PageLanding",
278
290
  "PageAuth",
279
291
  "PageStatus"
280
292
  ]
@@ -2648,6 +2660,1417 @@
2648
2660
  "use": "<UiAccordion :items=\"faq\" />"
2649
2661
  }
2650
2662
  ]
2663
+ },
2664
+ {
2665
+ "id": "landing",
2666
+ "label": "Landing",
2667
+ "component": "UiPageLanding",
2668
+ "description": "Marketing page: hero, logos, feature grid, social proof, pricing teaser, final call to action and footer.",
2669
+ "shell": false,
2670
+ "slots": [
2671
+ {
2672
+ "id": "hero",
2673
+ "title": "Hero",
2674
+ "desc": "Headline, subtitle and two buttons on a gradient card.",
2675
+ "accepts": [
2676
+ "HeroBanner",
2677
+ "Card",
2678
+ "Button"
2679
+ ],
2680
+ "props": [
2681
+ {
2682
+ "name": "title",
2683
+ "type": "string",
2684
+ "desc": "H1 and a short supporting line"
2685
+ }
2686
+ ],
2687
+ "use": "<UiHeroBanner title=\"Plan your Umrah\" cta=\"Get started\" />"
2688
+ },
2689
+ {
2690
+ "id": "logos",
2691
+ "title": "Logo strip",
2692
+ "desc": "Row of partner names under the hero.",
2693
+ "accepts": [
2694
+ "Chip",
2695
+ "Text"
2696
+ ],
2697
+ "props": [
2698
+ {
2699
+ "name": "items",
2700
+ "type": "string[]",
2701
+ "desc": "Partner names"
2702
+ }
2703
+ ],
2704
+ "use": "<UiChip pill>Hilton</UiChip>"
2705
+ },
2706
+ {
2707
+ "id": "features",
2708
+ "title": "Features",
2709
+ "desc": "Grid of icon, title and text cards.",
2710
+ "accepts": [
2711
+ "Card",
2712
+ "IconTile"
2713
+ ],
2714
+ "props": [
2715
+ {
2716
+ "name": "items",
2717
+ "type": "{icon,title,text}[]",
2718
+ "desc": "Three to six features"
2719
+ }
2720
+ ],
2721
+ "use": "<UiCard title=\"Offline guides\">…</UiCard>"
2722
+ },
2723
+ {
2724
+ "id": "proof",
2725
+ "title": "Social proof",
2726
+ "desc": "Stats strip and customer quotes.",
2727
+ "accepts": [
2728
+ "StatStrip",
2729
+ "Card",
2730
+ "Avatar"
2731
+ ],
2732
+ "props": [
2733
+ {
2734
+ "name": "items",
2735
+ "type": "{value,label}[]",
2736
+ "desc": "Headline numbers"
2737
+ }
2738
+ ],
2739
+ "use": "<UiStatStrip :items=\"stats\" />"
2740
+ },
2741
+ {
2742
+ "id": "pricing",
2743
+ "title": "Pricing teaser",
2744
+ "desc": "Two or three plans with a link to the full pricing page.",
2745
+ "accepts": [
2746
+ "PricingCard",
2747
+ "Button"
2748
+ ],
2749
+ "props": [
2750
+ {
2751
+ "name": "plans",
2752
+ "type": "Plan[]",
2753
+ "desc": "Name, price, features"
2754
+ }
2755
+ ],
2756
+ "use": "<UiPricingCard name=\"Plus\" price=\"$4.99\" />"
2757
+ },
2758
+ {
2759
+ "id": "cta",
2760
+ "title": "Call to action",
2761
+ "desc": "Closing block with one primary button.",
2762
+ "accepts": [
2763
+ "Card",
2764
+ "Button"
2765
+ ],
2766
+ "props": [
2767
+ {
2768
+ "name": "cta",
2769
+ "type": "string",
2770
+ "desc": "Button label"
2771
+ }
2772
+ ],
2773
+ "use": "<UiCard variant=\"gradient\">…</UiCard>"
2774
+ },
2775
+ {
2776
+ "id": "footer",
2777
+ "title": "Footer",
2778
+ "desc": "Copyright and links.",
2779
+ "accepts": [
2780
+ "Footer"
2781
+ ],
2782
+ "props": [
2783
+ {
2784
+ "name": "links",
2785
+ "type": "{label,href}[]",
2786
+ "desc": ""
2787
+ }
2788
+ ],
2789
+ "use": "<UiFooter copyright=\"© 2026\" :links=\"links\" />"
2790
+ }
2791
+ ]
2792
+ },
2793
+ {
2794
+ "id": "onboarding",
2795
+ "label": "Onboarding",
2796
+ "component": "UiPageOnboarding",
2797
+ "description": "First-run setup: progress, step content, checklist and side tips.",
2798
+ "shell": true,
2799
+ "slots": [
2800
+ {
2801
+ "id": "header",
2802
+ "title": "Page heading",
2803
+ "desc": "Breadcrumbs, heading, caption and action buttons on the right.",
2804
+ "accepts": [
2805
+ "PageHeader",
2806
+ "Breadcrumbs",
2807
+ "Button",
2808
+ "SegmentedControl"
2809
+ ],
2810
+ "props": [
2811
+ {
2812
+ "name": "title",
2813
+ "type": "string",
2814
+ "desc": "H1, up to 60 characters"
2815
+ },
2816
+ {
2817
+ "name": "subtitle",
2818
+ "type": "string?",
2819
+ "desc": "Gray caption below the heading"
2820
+ },
2821
+ {
2822
+ "name": "crumbs",
2823
+ "type": "{label,href?}[]",
2824
+ "desc": "Breadcrumbs"
2825
+ },
2826
+ {
2827
+ "name": "actions",
2828
+ "type": "VNode",
2829
+ "desc": "Buttons on the right; wrap below on a narrow screen"
2830
+ }
2831
+ ],
2832
+ "use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
2833
+ },
2834
+ {
2835
+ "id": "progress",
2836
+ "title": "Progress",
2837
+ "desc": "Stepper and overall completion bar.",
2838
+ "accepts": [
2839
+ "Stepper",
2840
+ "Progress"
2841
+ ],
2842
+ "props": [
2843
+ {
2844
+ "name": "current",
2845
+ "type": "number",
2846
+ "desc": "Index of the active step"
2847
+ }
2848
+ ],
2849
+ "use": "<UiStepper :steps=\"steps\" :current=\"1\" />"
2850
+ },
2851
+ {
2852
+ "id": "steps",
2853
+ "title": "Step content",
2854
+ "desc": "Form or choice for the active step.",
2855
+ "accepts": [
2856
+ "Card",
2857
+ "TextField",
2858
+ "OptionCards",
2859
+ "Button"
2860
+ ],
2861
+ "props": [
2862
+ {
2863
+ "name": "step",
2864
+ "type": "number",
2865
+ "desc": "Active step"
2866
+ }
2867
+ ],
2868
+ "use": "<UiCard title=\"Your company\">…</UiCard>"
2869
+ },
2870
+ {
2871
+ "id": "checklist",
2872
+ "title": "Checklist",
2873
+ "desc": "Tasks to finish setup with done marks.",
2874
+ "accepts": [
2875
+ "Card",
2876
+ "Checkbox",
2877
+ "Progress"
2878
+ ],
2879
+ "props": [
2880
+ {
2881
+ "name": "items",
2882
+ "type": "{id,label,done}[]",
2883
+ "desc": ""
2884
+ }
2885
+ ],
2886
+ "use": "<UiCheckbox v-model=\"done\" label=\"Add a hotel\" />"
2887
+ },
2888
+ {
2889
+ "id": "tips",
2890
+ "title": "Tips",
2891
+ "desc": "Side cards with help and a contact link.",
2892
+ "accepts": [
2893
+ "Card",
2894
+ "IconTile",
2895
+ "Button"
2896
+ ],
2897
+ "props": [
2898
+ {
2899
+ "name": "tips",
2900
+ "type": "{icon,title,text}[]",
2901
+ "desc": ""
2902
+ }
2903
+ ],
2904
+ "use": "<UiCard title=\"Need help?\">…</UiCard>"
2905
+ }
2906
+ ]
2907
+ },
2908
+ {
2909
+ "id": "checkout",
2910
+ "label": "Checkout",
2911
+ "component": "UiPageCheckout",
2912
+ "description": "Checkout: steps, cart items, address, payment method and an order summary.",
2913
+ "shell": true,
2914
+ "slots": [
2915
+ {
2916
+ "id": "header",
2917
+ "title": "Page heading",
2918
+ "desc": "Breadcrumbs, heading, caption and action buttons on the right.",
2919
+ "accepts": [
2920
+ "PageHeader",
2921
+ "Breadcrumbs",
2922
+ "Button",
2923
+ "SegmentedControl"
2924
+ ],
2925
+ "props": [
2926
+ {
2927
+ "name": "title",
2928
+ "type": "string",
2929
+ "desc": "H1, up to 60 characters"
2930
+ },
2931
+ {
2932
+ "name": "subtitle",
2933
+ "type": "string?",
2934
+ "desc": "Gray caption below the heading"
2935
+ },
2936
+ {
2937
+ "name": "crumbs",
2938
+ "type": "{label,href?}[]",
2939
+ "desc": "Breadcrumbs"
2940
+ },
2941
+ {
2942
+ "name": "actions",
2943
+ "type": "VNode",
2944
+ "desc": "Buttons on the right; wrap below on a narrow screen"
2945
+ }
2946
+ ],
2947
+ "use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
2948
+ },
2949
+ {
2950
+ "id": "steps",
2951
+ "title": "Steps",
2952
+ "desc": "Cart, details, payment, done.",
2953
+ "accepts": [
2954
+ "Stepper"
2955
+ ],
2956
+ "props": [
2957
+ {
2958
+ "name": "current",
2959
+ "type": "number",
2960
+ "desc": ""
2961
+ }
2962
+ ],
2963
+ "use": "<UiStepper :steps=\"steps\" :current=\"1\" />"
2964
+ },
2965
+ {
2966
+ "id": "items",
2967
+ "title": "Cart items",
2968
+ "desc": "Lines with quantity and price.",
2969
+ "accepts": [
2970
+ "Card",
2971
+ "NumberInput",
2972
+ "IconButton"
2973
+ ],
2974
+ "props": [
2975
+ {
2976
+ "name": "items",
2977
+ "type": "{title,qty,price}[]",
2978
+ "desc": ""
2979
+ }
2980
+ ],
2981
+ "use": "<UiCard title=\"Your cart\">…</UiCard>"
2982
+ },
2983
+ {
2984
+ "id": "address",
2985
+ "title": "Address",
2986
+ "desc": "Contact and delivery fields.",
2987
+ "accepts": [
2988
+ "Card",
2989
+ "TextField",
2990
+ "Select"
2991
+ ],
2992
+ "props": [
2993
+ {
2994
+ "name": "address",
2995
+ "type": "object",
2996
+ "desc": ""
2997
+ }
2998
+ ],
2999
+ "use": "<UiCard title=\"Address\">…</UiCard>"
3000
+ },
3001
+ {
3002
+ "id": "payment",
3003
+ "title": "Payment",
3004
+ "desc": "Payment method choice and card fields.",
3005
+ "accepts": [
3006
+ "OptionCards",
3007
+ "TextField"
3008
+ ],
3009
+ "props": [
3010
+ {
3011
+ "name": "method",
3012
+ "type": "string",
3013
+ "desc": ""
3014
+ }
3015
+ ],
3016
+ "use": "<UiOptionCards v-model=\"method\" :options=\"methods\" />"
3017
+ },
3018
+ {
3019
+ "id": "summary",
3020
+ "title": "Order summary",
3021
+ "desc": "Totals, promo code and the pay button.",
3022
+ "accepts": [
3023
+ "Card",
3024
+ "Descriptions",
3025
+ "Button"
3026
+ ],
3027
+ "props": [
3028
+ {
3029
+ "name": "total",
3030
+ "type": "string",
3031
+ "desc": ""
3032
+ }
3033
+ ],
3034
+ "use": "<UiCard title=\"Summary\">…</UiCard>"
3035
+ }
3036
+ ]
3037
+ },
3038
+ {
3039
+ "id": "inbox",
3040
+ "label": "Inbox",
3041
+ "component": "UiPageInbox",
3042
+ "description": "Conversation list, message thread with composer and a customer panel; stacks on mobile.",
3043
+ "shell": true,
3044
+ "slots": [
3045
+ {
3046
+ "id": "header",
3047
+ "title": "Page heading",
3048
+ "desc": "Breadcrumbs, heading, caption and action buttons on the right.",
3049
+ "accepts": [
3050
+ "PageHeader",
3051
+ "Breadcrumbs",
3052
+ "Button",
3053
+ "SegmentedControl"
3054
+ ],
3055
+ "props": [
3056
+ {
3057
+ "name": "title",
3058
+ "type": "string",
3059
+ "desc": "H1, up to 60 characters"
3060
+ },
3061
+ {
3062
+ "name": "subtitle",
3063
+ "type": "string?",
3064
+ "desc": "Gray caption below the heading"
3065
+ },
3066
+ {
3067
+ "name": "crumbs",
3068
+ "type": "{label,href?}[]",
3069
+ "desc": "Breadcrumbs"
3070
+ },
3071
+ {
3072
+ "name": "actions",
3073
+ "type": "VNode",
3074
+ "desc": "Buttons on the right; wrap below on a narrow screen"
3075
+ }
3076
+ ],
3077
+ "use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
3078
+ },
3079
+ {
3080
+ "id": "filters",
3081
+ "title": "Filters",
3082
+ "desc": "Search and folder chips above the list.",
3083
+ "accepts": [
3084
+ "SearchInput",
3085
+ "FilterChips"
3086
+ ],
3087
+ "props": [
3088
+ {
3089
+ "name": "query",
3090
+ "type": "string",
3091
+ "desc": ""
3092
+ }
3093
+ ],
3094
+ "use": "<UiSearchInput v-model=\"q\" />"
3095
+ },
3096
+ {
3097
+ "id": "list",
3098
+ "title": "Conversations",
3099
+ "desc": "List of conversations with unread marks.",
3100
+ "accepts": [
3101
+ "Card",
3102
+ "Avatar",
3103
+ "Badge"
3104
+ ],
3105
+ "props": [
3106
+ {
3107
+ "name": "items",
3108
+ "type": "{id,name,preview,time,unread}[]",
3109
+ "desc": ""
3110
+ }
3111
+ ],
3112
+ "use": "<UiCard>…</UiCard>"
3113
+ },
3114
+ {
3115
+ "id": "thread",
3116
+ "title": "Thread",
3117
+ "desc": "Messages of the open conversation.",
3118
+ "accepts": [
3119
+ "Card",
3120
+ "Avatar"
3121
+ ],
3122
+ "props": [
3123
+ {
3124
+ "name": "messages",
3125
+ "type": "{from,text,time}[]",
3126
+ "desc": ""
3127
+ }
3128
+ ],
3129
+ "use": "<UiCard title=\"Aziz Karimov\">…</UiCard>"
3130
+ },
3131
+ {
3132
+ "id": "composer",
3133
+ "title": "Composer",
3134
+ "desc": "Reply field and send button.",
3135
+ "accepts": [
3136
+ "Textarea",
3137
+ "Button"
3138
+ ],
3139
+ "props": [
3140
+ {
3141
+ "name": "value",
3142
+ "type": "string",
3143
+ "desc": ""
3144
+ }
3145
+ ],
3146
+ "use": "<UiTextarea v-model=\"reply\" />"
3147
+ },
3148
+ {
3149
+ "id": "customer",
3150
+ "title": "Customer",
3151
+ "desc": "Contact details and tags of the person.",
3152
+ "accepts": [
3153
+ "ContactPanel",
3154
+ "Descriptions",
3155
+ "Tag"
3156
+ ],
3157
+ "props": [
3158
+ {
3159
+ "name": "name",
3160
+ "type": "string",
3161
+ "desc": ""
3162
+ }
3163
+ ],
3164
+ "use": "<UiContactPanel name=\"Aziz Karimov\" />"
3165
+ }
3166
+ ]
3167
+ },
3168
+ {
3169
+ "id": "notifications",
3170
+ "label": "Notifications",
3171
+ "component": "UiPageNotifications",
3172
+ "description": "Activity feed grouped by day with filters, mark all as read and an empty state.",
3173
+ "shell": true,
3174
+ "slots": [
3175
+ {
3176
+ "id": "header",
3177
+ "title": "Page heading",
3178
+ "desc": "Breadcrumbs, heading, caption and action buttons on the right.",
3179
+ "accepts": [
3180
+ "PageHeader",
3181
+ "Breadcrumbs",
3182
+ "Button",
3183
+ "SegmentedControl"
3184
+ ],
3185
+ "props": [
3186
+ {
3187
+ "name": "title",
3188
+ "type": "string",
3189
+ "desc": "H1, up to 60 characters"
3190
+ },
3191
+ {
3192
+ "name": "subtitle",
3193
+ "type": "string?",
3194
+ "desc": "Gray caption below the heading"
3195
+ },
3196
+ {
3197
+ "name": "crumbs",
3198
+ "type": "{label,href?}[]",
3199
+ "desc": "Breadcrumbs"
3200
+ },
3201
+ {
3202
+ "name": "actions",
3203
+ "type": "VNode",
3204
+ "desc": "Buttons on the right; wrap below on a narrow screen"
3205
+ }
3206
+ ],
3207
+ "use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
3208
+ },
3209
+ {
3210
+ "id": "filters",
3211
+ "title": "Filters",
3212
+ "desc": "Filter chips: all, unread, mentions.",
3213
+ "accepts": [
3214
+ "FilterChips",
3215
+ "SegmentedControl"
3216
+ ],
3217
+ "props": [
3218
+ {
3219
+ "name": "value",
3220
+ "type": "string",
3221
+ "desc": ""
3222
+ }
3223
+ ],
3224
+ "use": "<UiFilterChips v-model=\"f\" :items=\"filters\" />"
3225
+ },
3226
+ {
3227
+ "id": "feed",
3228
+ "title": "Feed",
3229
+ "desc": "Day groups with notification rows.",
3230
+ "accepts": [
3231
+ "Card",
3232
+ "IconTile",
3233
+ "Badge",
3234
+ "Divider"
3235
+ ],
3236
+ "props": [
3237
+ {
3238
+ "name": "groups",
3239
+ "type": "{day,items}[]",
3240
+ "desc": ""
3241
+ }
3242
+ ],
3243
+ "use": "<UiCard title=\"Today\">…</UiCard>"
3244
+ },
3245
+ {
3246
+ "id": "empty",
3247
+ "title": "Empty state",
3248
+ "desc": "Shown when nothing matches or all is read.",
3249
+ "accepts": [
3250
+ "EmptyState"
3251
+ ],
3252
+ "props": [
3253
+ {
3254
+ "name": "title",
3255
+ "type": "string",
3256
+ "desc": ""
3257
+ }
3258
+ ],
3259
+ "use": "<UiEmptyState icon=\"bell-off\" title=\"All caught up\" />"
3260
+ }
3261
+ ]
3262
+ },
3263
+ {
3264
+ "id": "analytics",
3265
+ "label": "Analytics",
3266
+ "component": "UiPageAnalytics",
3267
+ "description": "Reports: period picker, KPI strip, charts, breakdown and a data table with export.",
3268
+ "shell": true,
3269
+ "slots": [
3270
+ {
3271
+ "id": "header",
3272
+ "title": "Page heading",
3273
+ "desc": "Breadcrumbs, heading, caption and action buttons on the right.",
3274
+ "accepts": [
3275
+ "PageHeader",
3276
+ "Breadcrumbs",
3277
+ "Button",
3278
+ "SegmentedControl"
3279
+ ],
3280
+ "props": [
3281
+ {
3282
+ "name": "title",
3283
+ "type": "string",
3284
+ "desc": "H1, up to 60 characters"
3285
+ },
3286
+ {
3287
+ "name": "subtitle",
3288
+ "type": "string?",
3289
+ "desc": "Gray caption below the heading"
3290
+ },
3291
+ {
3292
+ "name": "crumbs",
3293
+ "type": "{label,href?}[]",
3294
+ "desc": "Breadcrumbs"
3295
+ },
3296
+ {
3297
+ "name": "actions",
3298
+ "type": "VNode",
3299
+ "desc": "Buttons on the right; wrap below on a narrow screen"
3300
+ }
3301
+ ],
3302
+ "use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
3303
+ },
3304
+ {
3305
+ "id": "period",
3306
+ "title": "Period",
3307
+ "desc": "Range presets and compare toggle.",
3308
+ "accepts": [
3309
+ "SegmentedControl",
3310
+ "Select",
3311
+ "Switch"
3312
+ ],
3313
+ "props": [
3314
+ {
3315
+ "name": "value",
3316
+ "type": "string",
3317
+ "desc": ""
3318
+ }
3319
+ ],
3320
+ "use": "<UiSegmentedControl v-model=\"p\" :items=\"periods\" />"
3321
+ },
3322
+ {
3323
+ "id": "kpis",
3324
+ "title": "KPI strip",
3325
+ "desc": "Four headline numbers with deltas.",
3326
+ "accepts": [
3327
+ "KpiTile",
3328
+ "StatLine"
3329
+ ],
3330
+ "props": [
3331
+ {
3332
+ "name": "items",
3333
+ "type": "{label,value,delta}[]",
3334
+ "desc": ""
3335
+ }
3336
+ ],
3337
+ "use": "<UiKpiTile label=\"Revenue\" value=\"$48k\" delta=\"+8%\" />"
3338
+ },
3339
+ {
3340
+ "id": "trend",
3341
+ "title": "Trend chart",
3342
+ "desc": "Main time series.",
3343
+ "accepts": [
3344
+ "ChartCard",
3345
+ "MiniChart"
3346
+ ],
3347
+ "props": [
3348
+ {
3349
+ "name": "values",
3350
+ "type": "number[]",
3351
+ "desc": ""
3352
+ }
3353
+ ],
3354
+ "use": "<UiChartCard title=\"Revenue\">…</UiChartCard>"
3355
+ },
3356
+ {
3357
+ "id": "breakdown",
3358
+ "title": "Breakdown",
3359
+ "desc": "Split by channel or country.",
3360
+ "accepts": [
3361
+ "SegBar",
3362
+ "CountryRow",
3363
+ "Progress"
3364
+ ],
3365
+ "props": [
3366
+ {
3367
+ "name": "segments",
3368
+ "type": "{label,value}[]",
3369
+ "desc": ""
3370
+ }
3371
+ ],
3372
+ "use": "<UiSegBar :segments=\"segments\" />"
3373
+ },
3374
+ {
3375
+ "id": "table",
3376
+ "title": "Detail table",
3377
+ "desc": "Rows behind the numbers.",
3378
+ "accepts": [
3379
+ "DataTable"
3380
+ ],
3381
+ "props": [
3382
+ {
3383
+ "name": "rows",
3384
+ "type": "object[]",
3385
+ "desc": ""
3386
+ }
3387
+ ],
3388
+ "use": "<UiDataTable :columns=\"cols\" :rows=\"rows\" />"
3389
+ }
3390
+ ]
3391
+ },
3392
+ {
3393
+ "id": "calendar",
3394
+ "label": "Calendar",
3395
+ "component": "UiPageCalendar",
3396
+ "description": "Schedule: week, day and month switch, event grid, mini calendar and an event details side panel.",
3397
+ "shell": true,
3398
+ "slots": [
3399
+ {
3400
+ "id": "header",
3401
+ "title": "Page heading",
3402
+ "desc": "Breadcrumbs, heading, caption and action buttons on the right.",
3403
+ "accepts": [
3404
+ "PageHeader",
3405
+ "Breadcrumbs",
3406
+ "Button",
3407
+ "SegmentedControl"
3408
+ ],
3409
+ "props": [
3410
+ {
3411
+ "name": "title",
3412
+ "type": "string",
3413
+ "desc": "H1, up to 60 characters"
3414
+ },
3415
+ {
3416
+ "name": "subtitle",
3417
+ "type": "string?",
3418
+ "desc": "Gray caption below the heading"
3419
+ },
3420
+ {
3421
+ "name": "crumbs",
3422
+ "type": "{label,href?}[]",
3423
+ "desc": "Breadcrumbs"
3424
+ },
3425
+ {
3426
+ "name": "actions",
3427
+ "type": "VNode",
3428
+ "desc": "Buttons on the right; wrap below on a narrow screen"
3429
+ }
3430
+ ],
3431
+ "use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
3432
+ },
3433
+ {
3434
+ "id": "toolbar",
3435
+ "title": "Toolbar",
3436
+ "desc": "View switch, date navigation and filters.",
3437
+ "accepts": [
3438
+ "SegmentedControl",
3439
+ "Button",
3440
+ "IconButton",
3441
+ "Select"
3442
+ ],
3443
+ "props": [
3444
+ {
3445
+ "name": "content",
3446
+ "type": "VNode",
3447
+ "desc": ""
3448
+ }
3449
+ ],
3450
+ "use": "<UiSegmentedControl v-model=\"view\" :items=\"views\" />"
3451
+ },
3452
+ {
3453
+ "id": "grid",
3454
+ "title": "Event grid",
3455
+ "desc": "Week, day or month grid with events.",
3456
+ "accepts": [
3457
+ "CalendarView",
3458
+ "Card"
3459
+ ],
3460
+ "props": [
3461
+ {
3462
+ "name": "content",
3463
+ "type": "VNode",
3464
+ "desc": ""
3465
+ }
3466
+ ],
3467
+ "use": "<UiCard padding=\"none\">…grid…</UiCard>"
3468
+ },
3469
+ {
3470
+ "id": "mini",
3471
+ "title": "Mini calendar",
3472
+ "desc": "Small month picker.",
3473
+ "accepts": [
3474
+ "Calendar"
3475
+ ],
3476
+ "props": [
3477
+ {
3478
+ "name": "content",
3479
+ "type": "VNode",
3480
+ "desc": ""
3481
+ }
3482
+ ],
3483
+ "use": "<UiCalendar v-model=\"day\" />"
3484
+ },
3485
+ {
3486
+ "id": "details",
3487
+ "title": "Event details",
3488
+ "desc": "Selected event with time, place, guests and actions.",
3489
+ "accepts": [
3490
+ "Card",
3491
+ "Descriptions",
3492
+ "Avatar",
3493
+ "Button"
3494
+ ],
3495
+ "props": [
3496
+ {
3497
+ "name": "content",
3498
+ "type": "VNode",
3499
+ "desc": ""
3500
+ }
3501
+ ],
3502
+ "use": "<UiCard title=\"Hotel check-in\">…</UiCard>"
3503
+ }
3504
+ ]
3505
+ },
3506
+ {
3507
+ "id": "kanban",
3508
+ "label": "Kanban",
3509
+ "component": "UiPageKanban",
3510
+ "description": "Task board: columns with cards, filters and a card detail panel.",
3511
+ "shell": true,
3512
+ "slots": [
3513
+ {
3514
+ "id": "header",
3515
+ "title": "Page heading",
3516
+ "desc": "Breadcrumbs, heading, caption and action buttons on the right.",
3517
+ "accepts": [
3518
+ "PageHeader",
3519
+ "Breadcrumbs",
3520
+ "Button",
3521
+ "SegmentedControl"
3522
+ ],
3523
+ "props": [
3524
+ {
3525
+ "name": "title",
3526
+ "type": "string",
3527
+ "desc": "H1, up to 60 characters"
3528
+ },
3529
+ {
3530
+ "name": "subtitle",
3531
+ "type": "string?",
3532
+ "desc": "Gray caption below the heading"
3533
+ },
3534
+ {
3535
+ "name": "crumbs",
3536
+ "type": "{label,href?}[]",
3537
+ "desc": "Breadcrumbs"
3538
+ },
3539
+ {
3540
+ "name": "actions",
3541
+ "type": "VNode",
3542
+ "desc": "Buttons on the right; wrap below on a narrow screen"
3543
+ }
3544
+ ],
3545
+ "use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
3546
+ },
3547
+ {
3548
+ "id": "filters",
3549
+ "title": "Filters",
3550
+ "desc": "Search, assignee and label filters.",
3551
+ "accepts": [
3552
+ "SearchInput",
3553
+ "FilterChips",
3554
+ "Select"
3555
+ ],
3556
+ "props": [
3557
+ {
3558
+ "name": "content",
3559
+ "type": "VNode",
3560
+ "desc": ""
3561
+ }
3562
+ ],
3563
+ "use": "<UiFilterChips v-model=\"f\" :items=\"labels\" />"
3564
+ },
3565
+ {
3566
+ "id": "board",
3567
+ "title": "Board",
3568
+ "desc": "Task columns with cards.",
3569
+ "accepts": [
3570
+ "KanbanColumn",
3571
+ "KanbanCard"
3572
+ ],
3573
+ "props": [
3574
+ {
3575
+ "name": "content",
3576
+ "type": "VNode",
3577
+ "desc": ""
3578
+ }
3579
+ ],
3580
+ "use": "<UiKanbanColumn title=\"To do\" :count=\"3\">…</UiKanbanColumn>"
3581
+ },
3582
+ {
3583
+ "id": "detail",
3584
+ "title": "Card detail",
3585
+ "desc": "Side panel for the selected card.",
3586
+ "accepts": [
3587
+ "Card",
3588
+ "Descriptions",
3589
+ "Timeline",
3590
+ "Checkbox"
3591
+ ],
3592
+ "props": [
3593
+ {
3594
+ "name": "content",
3595
+ "type": "VNode",
3596
+ "desc": ""
3597
+ }
3598
+ ],
3599
+ "use": "<UiCard title=\"Task\">…</UiCard>"
3600
+ }
3601
+ ]
3602
+ },
3603
+ {
3604
+ "id": "billing",
3605
+ "label": "Billing",
3606
+ "component": "UiPageBilling",
3607
+ "description": "Billing: current plan, usage meters, invoices table, payment methods and upgrade.",
3608
+ "shell": true,
3609
+ "slots": [
3610
+ {
3611
+ "id": "header",
3612
+ "title": "Page heading",
3613
+ "desc": "Breadcrumbs, heading, caption and action buttons on the right.",
3614
+ "accepts": [
3615
+ "PageHeader",
3616
+ "Breadcrumbs",
3617
+ "Button",
3618
+ "SegmentedControl"
3619
+ ],
3620
+ "props": [
3621
+ {
3622
+ "name": "title",
3623
+ "type": "string",
3624
+ "desc": "H1, up to 60 characters"
3625
+ },
3626
+ {
3627
+ "name": "subtitle",
3628
+ "type": "string?",
3629
+ "desc": "Gray caption below the heading"
3630
+ },
3631
+ {
3632
+ "name": "crumbs",
3633
+ "type": "{label,href?}[]",
3634
+ "desc": "Breadcrumbs"
3635
+ },
3636
+ {
3637
+ "name": "actions",
3638
+ "type": "VNode",
3639
+ "desc": "Buttons on the right; wrap below on a narrow screen"
3640
+ }
3641
+ ],
3642
+ "use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
3643
+ },
3644
+ {
3645
+ "id": "plan",
3646
+ "title": "Current plan",
3647
+ "desc": "Plan name, price, renewal date and actions.",
3648
+ "accepts": [
3649
+ "Card",
3650
+ "Badge",
3651
+ "Button"
3652
+ ],
3653
+ "props": [
3654
+ {
3655
+ "name": "content",
3656
+ "type": "VNode",
3657
+ "desc": ""
3658
+ }
3659
+ ],
3660
+ "use": "<UiCard title=\"Pro plan\">…</UiCard>"
3661
+ },
3662
+ {
3663
+ "id": "usage",
3664
+ "title": "Usage",
3665
+ "desc": "Meters for seats, storage and requests.",
3666
+ "accepts": [
3667
+ "Progress",
3668
+ "Card"
3669
+ ],
3670
+ "props": [
3671
+ {
3672
+ "name": "content",
3673
+ "type": "VNode",
3674
+ "desc": ""
3675
+ }
3676
+ ],
3677
+ "use": "<UiProgress :value=\"72\" label=\"Seats\" />"
3678
+ },
3679
+ {
3680
+ "id": "invoices",
3681
+ "title": "Invoices",
3682
+ "desc": "Past invoices with status and download.",
3683
+ "accepts": [
3684
+ "DataTable",
3685
+ "Badge"
3686
+ ],
3687
+ "props": [
3688
+ {
3689
+ "name": "content",
3690
+ "type": "VNode",
3691
+ "desc": ""
3692
+ }
3693
+ ],
3694
+ "use": "<UiDataTable :columns=\"cols\" :rows=\"rows\" />"
3695
+ },
3696
+ {
3697
+ "id": "methods",
3698
+ "title": "Payment methods",
3699
+ "desc": "Saved cards with default marker.",
3700
+ "accepts": [
3701
+ "Card",
3702
+ "IconTile",
3703
+ "Badge"
3704
+ ],
3705
+ "props": [
3706
+ {
3707
+ "name": "content",
3708
+ "type": "VNode",
3709
+ "desc": ""
3710
+ }
3711
+ ],
3712
+ "use": "<UiCard title=\"Payment methods\">…</UiCard>"
3713
+ },
3714
+ {
3715
+ "id": "upgrade",
3716
+ "title": "Upgrade",
3717
+ "desc": "Upsell card for the next plan.",
3718
+ "accepts": [
3719
+ "Card",
3720
+ "PricingCard",
3721
+ "Button"
3722
+ ],
3723
+ "props": [
3724
+ {
3725
+ "name": "content",
3726
+ "type": "VNode",
3727
+ "desc": ""
3728
+ }
3729
+ ],
3730
+ "use": "<UiCard variant=\"inverse\">…</UiCard>"
3731
+ }
3732
+ ]
3733
+ },
3734
+ {
3735
+ "id": "team",
3736
+ "label": "Team",
3737
+ "component": "UiPageTeam",
3738
+ "description": "Team: members table, invite form and a roles and permissions matrix.",
3739
+ "shell": true,
3740
+ "slots": [
3741
+ {
3742
+ "id": "header",
3743
+ "title": "Page heading",
3744
+ "desc": "Breadcrumbs, heading, caption and action buttons on the right.",
3745
+ "accepts": [
3746
+ "PageHeader",
3747
+ "Breadcrumbs",
3748
+ "Button",
3749
+ "SegmentedControl"
3750
+ ],
3751
+ "props": [
3752
+ {
3753
+ "name": "title",
3754
+ "type": "string",
3755
+ "desc": "H1, up to 60 characters"
3756
+ },
3757
+ {
3758
+ "name": "subtitle",
3759
+ "type": "string?",
3760
+ "desc": "Gray caption below the heading"
3761
+ },
3762
+ {
3763
+ "name": "crumbs",
3764
+ "type": "{label,href?}[]",
3765
+ "desc": "Breadcrumbs"
3766
+ },
3767
+ {
3768
+ "name": "actions",
3769
+ "type": "VNode",
3770
+ "desc": "Buttons on the right; wrap below on a narrow screen"
3771
+ }
3772
+ ],
3773
+ "use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
3774
+ },
3775
+ {
3776
+ "id": "stats",
3777
+ "title": "Summary",
3778
+ "desc": "Seats, pending invites and admins.",
3779
+ "accepts": [
3780
+ "StatsCard",
3781
+ "KpiTile"
3782
+ ],
3783
+ "props": [
3784
+ {
3785
+ "name": "content",
3786
+ "type": "VNode",
3787
+ "desc": ""
3788
+ }
3789
+ ],
3790
+ "use": "<UiKpiTile label=\"Members\" value=\"12\" />"
3791
+ },
3792
+ {
3793
+ "id": "members",
3794
+ "title": "Members",
3795
+ "desc": "Members table with role and status.",
3796
+ "accepts": [
3797
+ "DataTable",
3798
+ "UserCell",
3799
+ "Select",
3800
+ "Badge"
3801
+ ],
3802
+ "props": [
3803
+ {
3804
+ "name": "content",
3805
+ "type": "VNode",
3806
+ "desc": ""
3807
+ }
3808
+ ],
3809
+ "use": "<UiDataTable :columns=\"cols\" :rows=\"rows\" />"
3810
+ },
3811
+ {
3812
+ "id": "roles",
3813
+ "title": "Roles and permissions",
3814
+ "desc": "Matrix of permissions per role.",
3815
+ "accepts": [
3816
+ "DataTable",
3817
+ "Checkbox",
3818
+ "Switch"
3819
+ ],
3820
+ "props": [
3821
+ {
3822
+ "name": "content",
3823
+ "type": "VNode",
3824
+ "desc": ""
3825
+ }
3826
+ ],
3827
+ "use": "<UiDataTable :columns=\"roleCols\" :rows=\"perms\" />"
3828
+ },
3829
+ {
3830
+ "id": "invite",
3831
+ "title": "Invite",
3832
+ "desc": "Email, role and send button.",
3833
+ "accepts": [
3834
+ "Card",
3835
+ "TextField",
3836
+ "Select",
3837
+ "Button"
3838
+ ],
3839
+ "props": [
3840
+ {
3841
+ "name": "content",
3842
+ "type": "VNode",
3843
+ "desc": ""
3844
+ }
3845
+ ],
3846
+ "use": "<UiCard title=\"Invite\">…</UiCard>"
3847
+ }
3848
+ ]
3849
+ },
3850
+ {
3851
+ "id": "integrations",
3852
+ "label": "Integrations",
3853
+ "component": "UiPageIntegrations",
3854
+ "description": "Integrations: connection cards with status, API keys table with reveal, copy and revoke, and a webhooks list.",
3855
+ "shell": true,
3856
+ "slots": [
3857
+ {
3858
+ "id": "header",
3859
+ "title": "Page heading",
3860
+ "desc": "Breadcrumbs, heading, caption and action buttons on the right.",
3861
+ "accepts": [
3862
+ "PageHeader",
3863
+ "Breadcrumbs",
3864
+ "Button",
3865
+ "SegmentedControl"
3866
+ ],
3867
+ "props": [
3868
+ {
3869
+ "name": "title",
3870
+ "type": "string",
3871
+ "desc": "H1, up to 60 characters"
3872
+ },
3873
+ {
3874
+ "name": "subtitle",
3875
+ "type": "string?",
3876
+ "desc": "Gray caption below the heading"
3877
+ },
3878
+ {
3879
+ "name": "crumbs",
3880
+ "type": "{label,href?}[]",
3881
+ "desc": "Breadcrumbs"
3882
+ },
3883
+ {
3884
+ "name": "actions",
3885
+ "type": "VNode",
3886
+ "desc": "Buttons on the right; wrap below on a narrow screen"
3887
+ }
3888
+ ],
3889
+ "use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
3890
+ },
3891
+ {
3892
+ "id": "filters",
3893
+ "title": "Filters",
3894
+ "desc": "Search and category filter.",
3895
+ "accepts": [
3896
+ "SearchInput",
3897
+ "FilterChips"
3898
+ ],
3899
+ "props": [
3900
+ {
3901
+ "name": "content",
3902
+ "type": "VNode",
3903
+ "desc": ""
3904
+ }
3905
+ ],
3906
+ "use": "<UiSearchInput v-model=\"q\" />"
3907
+ },
3908
+ {
3909
+ "id": "connections",
3910
+ "title": "Connections",
3911
+ "desc": "Cards with connected, error or off status.",
3912
+ "accepts": [
3913
+ "IntegrationCard"
3914
+ ],
3915
+ "props": [
3916
+ {
3917
+ "name": "content",
3918
+ "type": "VNode",
3919
+ "desc": ""
3920
+ }
3921
+ ],
3922
+ "use": "<UiIntegrationCard name=\"Telegram\" status=\"connected\" />"
3923
+ },
3924
+ {
3925
+ "id": "keys",
3926
+ "title": "API keys",
3927
+ "desc": "Keys with reveal, copy and revoke.",
3928
+ "accepts": [
3929
+ "DataTable",
3930
+ "CopyButton",
3931
+ "IconButton"
3932
+ ],
3933
+ "props": [
3934
+ {
3935
+ "name": "content",
3936
+ "type": "VNode",
3937
+ "desc": ""
3938
+ }
3939
+ ],
3940
+ "use": "<UiDataTable :columns=\"cols\" :rows=\"keys\" />"
3941
+ },
3942
+ {
3943
+ "id": "webhooks",
3944
+ "title": "Webhooks",
3945
+ "desc": "Endpoints with event types and on/off switch.",
3946
+ "accepts": [
3947
+ "Card",
3948
+ "Switch",
3949
+ "Chip"
3950
+ ],
3951
+ "props": [
3952
+ {
3953
+ "name": "content",
3954
+ "type": "VNode",
3955
+ "desc": ""
3956
+ }
3957
+ ],
3958
+ "use": "<UiCard title=\"Webhooks\">…</UiCard>"
3959
+ }
3960
+ ]
3961
+ },
3962
+ {
3963
+ "id": "search",
3964
+ "label": "Search results",
3965
+ "component": "UiPageSearch",
3966
+ "description": "Search results: query field, filters, grouped results and an empty state.",
3967
+ "shell": true,
3968
+ "slots": [
3969
+ {
3970
+ "id": "header",
3971
+ "title": "Page heading",
3972
+ "desc": "Breadcrumbs, heading, caption and action buttons on the right.",
3973
+ "accepts": [
3974
+ "PageHeader",
3975
+ "Breadcrumbs",
3976
+ "Button",
3977
+ "SegmentedControl"
3978
+ ],
3979
+ "props": [
3980
+ {
3981
+ "name": "title",
3982
+ "type": "string",
3983
+ "desc": "H1, up to 60 characters"
3984
+ },
3985
+ {
3986
+ "name": "subtitle",
3987
+ "type": "string?",
3988
+ "desc": "Gray caption below the heading"
3989
+ },
3990
+ {
3991
+ "name": "crumbs",
3992
+ "type": "{label,href?}[]",
3993
+ "desc": "Breadcrumbs"
3994
+ },
3995
+ {
3996
+ "name": "actions",
3997
+ "type": "VNode",
3998
+ "desc": "Buttons on the right; wrap below on a narrow screen"
3999
+ }
4000
+ ],
4001
+ "use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
4002
+ },
4003
+ {
4004
+ "id": "search",
4005
+ "title": "Search field",
4006
+ "desc": "Large query field with tabs for result types.",
4007
+ "accepts": [
4008
+ "SearchInput",
4009
+ "Tabs"
4010
+ ],
4011
+ "props": [
4012
+ {
4013
+ "name": "content",
4014
+ "type": "VNode",
4015
+ "desc": ""
4016
+ }
4017
+ ],
4018
+ "use": "<UiSearchInput v-model=\"q\" />"
4019
+ },
4020
+ {
4021
+ "id": "filters",
4022
+ "title": "Filters",
4023
+ "desc": "Sidebar with checkboxes, range and select.",
4024
+ "accepts": [
4025
+ "Card",
4026
+ "Checkbox",
4027
+ "RangeSlider",
4028
+ "Select"
4029
+ ],
4030
+ "props": [
4031
+ {
4032
+ "name": "content",
4033
+ "type": "VNode",
4034
+ "desc": ""
4035
+ }
4036
+ ],
4037
+ "use": "<UiCard title=\"Filters\">…</UiCard>"
4038
+ },
4039
+ {
4040
+ "id": "results",
4041
+ "title": "Results",
4042
+ "desc": "Result groups with titles and counts.",
4043
+ "accepts": [
4044
+ "Card",
4045
+ "Chip",
4046
+ "Divider"
4047
+ ],
4048
+ "props": [
4049
+ {
4050
+ "name": "content",
4051
+ "type": "VNode",
4052
+ "desc": ""
4053
+ }
4054
+ ],
4055
+ "use": "<UiCard padding=\"none\">…</UiCard>"
4056
+ },
4057
+ {
4058
+ "id": "empty",
4059
+ "title": "Empty state",
4060
+ "desc": "Shown when nothing matches.",
4061
+ "accepts": [
4062
+ "EmptyState"
4063
+ ],
4064
+ "props": [
4065
+ {
4066
+ "name": "content",
4067
+ "type": "VNode",
4068
+ "desc": ""
4069
+ }
4070
+ ],
4071
+ "use": "<UiEmptyState icon=\"search-x\" title=\"No results\" />"
4072
+ }
4073
+ ]
2651
4074
  }
2652
4075
  ]
2653
4076
  },
@@ -9156,149 +10579,419 @@
9156
10579
  "default": 360,
9157
10580
  "description": "Height in px."
9158
10581
  },
9159
- "theme": {
9160
- "type": "'light' | 'dark'",
10582
+ "theme": {
10583
+ "type": "'light' | 'dark'",
10584
+ "values": [
10585
+ "light",
10586
+ "dark"
10587
+ ],
10588
+ "description": "Tile theme. If omitted, dark is used when the page is inside a dark data-theme."
10589
+ },
10590
+ "style": {
10591
+ "type": "string",
10592
+ "description": "CARTO tile style path, for example \"light_all\" or \"dark_all\". Overrides theme."
10593
+ },
10594
+ "label": {
10595
+ "type": "string",
10596
+ "default": "Map",
10597
+ "description": "aria-label of the map region."
10598
+ },
10599
+ "labels": {
10600
+ "type": "{ zoomIn?: string; zoomOut?: string }",
10601
+ "default": "{ zoomIn: 'Zoom in', zoomOut: 'Zoom out' }",
10602
+ "description": "Accessible names of the zoom buttons."
10603
+ }
10604
+ },
10605
+ "events": {
10606
+ "select": "Called with the marker object when a marker is clicked.",
10607
+ "move": "Called with { lat, lon, zoom } while the user pans or zooms (drag, touch, wheel, double click or the +/- buttons).",
10608
+ "zoom": "Called with the new zoom level when it changes."
10609
+ },
10610
+ "notes": [
10611
+ "The center and zoom props are initial values; user panning and zooming is kept in internal state. Listen to move/zoom to track it.",
10612
+ "Drag or touch to pan, wheel or double click to zoom around the pointer. The tile theme follows the page data-theme after mount (light tiles on the server render) unless theme or style is set.",
10613
+ "Tiles come from a third-party CDN, so it needs network access."
10614
+ ]
10615
+ },
10616
+ {
10617
+ "name": "ProfileHeader",
10618
+ "tag": "UiProfileHeader",
10619
+ "group": "media",
10620
+ "description": "Profile card with a cover image, large avatar, name and a row of meta items.",
10621
+ "props": {
10622
+ "name": {
10623
+ "type": "string",
10624
+ "required": true,
10625
+ "description": "Person or organization name."
10626
+ },
10627
+ "src": {
10628
+ "type": "string",
10629
+ "description": "Avatar image URL; initials are shown without it."
10630
+ },
10631
+ "cover": {
10632
+ "type": "string",
10633
+ "description": "Cover image URL."
10634
+ },
10635
+ "meta": {
10636
+ "type": "{ icon: string; label: string }[]",
10637
+ "default": [],
10638
+ "description": "Facts under the name such as location or join date. label must be unique."
10639
+ }
10640
+ },
10641
+ "slots": {
10642
+ "default": "Extra content on the right of the name row, usually action buttons."
10643
+ }
10644
+ },
10645
+ {
10646
+ "name": "ChatAi",
10647
+ "tag": "UiChatAi",
10648
+ "group": "media",
10649
+ "description": "Chat panel with message bubbles, a typing indicator and an input, for AI assistant UIs.",
10650
+ "props": {
10651
+ "messages": {
10652
+ "type": "{ role: 'user' | 'ai'; text: string }[]",
10653
+ "required": true,
10654
+ "default": [],
10655
+ "description": "Conversation in order. Any role other than \"user\" renders as an assistant bubble."
10656
+ },
10657
+ "loading": {
10658
+ "type": "boolean",
10659
+ "default": false,
10660
+ "description": "Shows the typing dots and disables sending."
10661
+ },
10662
+ "title": {
10663
+ "type": "string",
10664
+ "default": "Assistant",
10665
+ "description": "Header title; also the aria-label. The header renders only when set."
10666
+ },
10667
+ "subtitle": {
10668
+ "type": "string",
10669
+ "description": "Muted text next to the title."
10670
+ },
10671
+ "placeholder": {
10672
+ "type": "string",
10673
+ "default": "Ask anything…",
10674
+ "description": "Input placeholder."
10675
+ }
10676
+ },
10677
+ "events": {
10678
+ "send": "Called with the trimmed message text when the user presses Enter or the send button. The component does not append it to messages."
10679
+ },
10680
+ "notes": [
10681
+ "Append the user message and the reply to messages yourself; set loading while waiting."
10682
+ ]
10683
+ },
10684
+ {
10685
+ "name": "HotelCard",
10686
+ "tag": "UiHotelCard",
10687
+ "group": "domain",
10688
+ "description": "Hotel listing card with photo, tags, stars, distance, rating and nightly price; use in catalogs and search results.",
10689
+ "props": {
10690
+ "name": {
10691
+ "type": "string",
10692
+ "required": true,
10693
+ "description": "Hotel name."
10694
+ },
10695
+ "image": {
10696
+ "type": "string",
10697
+ "description": "Photo URL, used as the card background image."
10698
+ },
10699
+ "tags": {
10700
+ "type": "string[]",
10701
+ "default": "[]",
10702
+ "description": "Brand badges over the photo, e.g. \"Haram view\"."
10703
+ },
10704
+ "stars": {
10705
+ "type": "number",
10706
+ "default": 0,
10707
+ "description": "Star class 0-5, rendered as repeated stars."
10708
+ },
10709
+ "distance": {
10710
+ "type": "string",
10711
+ "description": "Distance caption next to the stars, e.g. \"120 m to the Haram\"."
10712
+ },
10713
+ "rating": {
10714
+ "type": "string | number",
10715
+ "description": "Guest rating shown in a green badge, e.g. 9.2."
10716
+ },
10717
+ "price": {
10718
+ "type": "number",
10719
+ "description": "Price per unit, formatted with thousand separators; the currency label is fixed to SAR."
10720
+ },
10721
+ "night": {
10722
+ "type": "string",
10723
+ "default": "night",
10724
+ "description": "Unit after \"SAR /\", e.g. \"night\"."
10725
+ },
10726
+ "size": {
10727
+ "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
10728
+ "values": [
10729
+ "xs",
10730
+ "sm",
10731
+ "md",
10732
+ "lg",
10733
+ "xl"
10734
+ ],
10735
+ "default": "md",
10736
+ "description": "Scales padding, text and avatars."
10737
+ }
10738
+ },
10739
+ "notes": [
10740
+ "Currency is hard-coded to SAR.",
10741
+ "Wrap in a clickable element yourself; the card has no click handler."
10742
+ ]
10743
+ },
10744
+ {
10745
+ "name": "TourCard",
10746
+ "tag": "UiTourCard",
10747
+ "group": "domain",
10748
+ "description": "Tour or virtual-tour card with session count and a seat-occupancy bar.",
10749
+ "props": {
10750
+ "name": {
10751
+ "type": "string",
10752
+ "required": true,
10753
+ "description": "Tour title."
10754
+ },
10755
+ "city": {
10756
+ "type": "string",
10757
+ "description": "City shown in the subtitle."
10758
+ },
10759
+ "sessions": {
10760
+ "type": "number",
10761
+ "description": "Number of sessions, shown as \"N sessions\"."
10762
+ },
10763
+ "booked": {
10764
+ "type": "number",
10765
+ "required": true,
10766
+ "description": "Seats already booked."
10767
+ },
10768
+ "seats": {
10769
+ "type": "number",
10770
+ "required": true,
10771
+ "description": "Total seats; the bar shows booked / seats."
10772
+ },
10773
+ "size": {
10774
+ "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
10775
+ "values": [
10776
+ "xs",
10777
+ "sm",
10778
+ "md",
10779
+ "lg",
10780
+ "xl"
10781
+ ],
10782
+ "default": "md",
10783
+ "description": "Scales padding, text and avatars."
10784
+ }
10785
+ },
10786
+ "slots": {
10787
+ "actions": "Footer actions, usually Buttons."
10788
+ },
10789
+ "notes": [
10790
+ "A fixed \"360°\" badge is always shown.",
10791
+ "With seats = 0 or missing the bar is empty (0%) and the meta reads \"0/0\"."
10792
+ ]
10793
+ },
10794
+ {
10795
+ "name": "PrayerTimes",
10796
+ "tag": "UiPrayerTimes",
10797
+ "group": "domain",
10798
+ "description": "Row of daily prayer times with the upcoming prayer highlighted.",
10799
+ "props": {
10800
+ "items": {
10801
+ "type": "{ name: string; time: string }[]",
10802
+ "default": "[]",
10803
+ "description": "Prayers in display order; time is shown as-is, e.g. \"05:12\"."
10804
+ },
10805
+ "next": {
10806
+ "type": "number",
10807
+ "description": "Index in items of the next prayer; sets aria-current on it."
10808
+ },
10809
+ "size": {
10810
+ "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
10811
+ "values": [
10812
+ "xs",
10813
+ "sm",
10814
+ "md",
10815
+ "lg",
10816
+ "xl"
10817
+ ],
10818
+ "default": "md",
10819
+ "description": "Scales padding, text and avatars."
10820
+ }
10821
+ }
10822
+ },
10823
+ {
10824
+ "name": "RamadanTracker",
10825
+ "tag": "UiRamadanTracker",
10826
+ "group": "domain",
10827
+ "description": "Thirty-day Ramadan progress strip; the last ten days and odd nights are marked.",
10828
+ "props": {
10829
+ "day": {
10830
+ "type": "number",
10831
+ "required": true,
10832
+ "description": "Current day 1-30. Earlier days render as past, later days as upcoming."
10833
+ },
10834
+ "size": {
10835
+ "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
9161
10836
  "values": [
9162
- "light",
9163
- "dark"
10837
+ "xs",
10838
+ "sm",
10839
+ "md",
10840
+ "lg",
10841
+ "xl"
9164
10842
  ],
9165
- "description": "Tile theme. If omitted, dark is used when the page is inside a dark data-theme."
9166
- },
9167
- "style": {
9168
- "type": "string",
9169
- "description": "CARTO tile style path, for example \"light_all\" or \"dark_all\". Overrides theme."
9170
- },
9171
- "label": {
9172
- "type": "string",
9173
- "default": "Map",
9174
- "description": "aria-label of the map region."
9175
- },
9176
- "labels": {
9177
- "type": "{ zoomIn?: string; zoomOut?: string }",
9178
- "default": "{ zoomIn: 'Zoom in', zoomOut: 'Zoom out' }",
9179
- "description": "Accessible names of the zoom buttons."
10843
+ "default": "md",
10844
+ "description": "Scales padding, text and avatars."
9180
10845
  }
9181
10846
  },
9182
- "events": {
9183
- "select": "Called with the marker object when a marker is clicked.",
9184
- "move": "Called with { lat, lon, zoom } while the user pans or zooms (drag, touch, wheel, double click or the +/- buttons).",
9185
- "zoom": "Called with the new zoom level when it changes."
9186
- },
9187
10847
  "notes": [
9188
- "The center and zoom props are initial values; user panning and zooming is kept in internal state. Listen to move/zoom to track it.",
9189
- "Drag or touch to pan, wheel or double click to zoom around the pointer. The tile theme follows the page data-theme after mount (light tiles on the server render) unless theme or style is set.",
9190
- "Tiles come from a third-party CDN, so it needs network access."
10848
+ "Exposed as role=\"img\" with aria-label \"Day N of 30\"."
9191
10849
  ]
9192
10850
  },
9193
10851
  {
9194
- "name": "ProfileHeader",
9195
- "tag": "UiProfileHeader",
9196
- "group": "media",
9197
- "description": "Profile card with a cover image, large avatar, name and a row of meta items.",
10852
+ "name": "BookingCard",
10853
+ "tag": "UiBookingCard",
10854
+ "group": "domain",
10855
+ "description": "Compact booking summary: code, status, guest, hotel, dates and total.",
9198
10856
  "props": {
9199
- "name": {
10857
+ "code": {
9200
10858
  "type": "string",
9201
10859
  "required": true,
9202
- "description": "Person or organization name."
10860
+ "description": "Booking reference, monospaced."
9203
10861
  },
9204
- "src": {
10862
+ "status": {
10863
+ "type": "'Confirmed' | 'Pending' | 'Cancelled' | string",
10864
+ "values": [
10865
+ "Confirmed",
10866
+ "Pending",
10867
+ "Cancelled"
10868
+ ],
10869
+ "description": "Status text. Confirmed is green, Pending amber, Cancelled red; any other value gets a neutral badge."
10870
+ },
10871
+ "guest": {
9205
10872
  "type": "string",
9206
- "description": "Avatar image URL; initials are shown without it."
10873
+ "description": "Guest name, also drives the avatar initials."
9207
10874
  },
9208
- "cover": {
10875
+ "hotel": {
9209
10876
  "type": "string",
9210
- "description": "Cover image URL."
10877
+ "description": "Hotel name under the guest."
9211
10878
  },
9212
- "meta": {
9213
- "type": "{ icon: string; label: string }[]",
9214
- "default": [],
9215
- "description": "Facts under the name such as location or join date. label must be unique."
10879
+ "dates": {
10880
+ "type": "string",
10881
+ "description": "Preformatted date range, e.g. \"12-19 Mar\"."
10882
+ },
10883
+ "amount": {
10884
+ "type": "number",
10885
+ "description": "Total, formatted as \"SAR 1 200\"."
10886
+ },
10887
+ "size": {
10888
+ "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
10889
+ "values": [
10890
+ "xs",
10891
+ "sm",
10892
+ "md",
10893
+ "lg",
10894
+ "xl"
10895
+ ],
10896
+ "default": "md",
10897
+ "description": "Scales padding, text and avatars."
9216
10898
  }
9217
- },
9218
- "slots": {
9219
- "default": "Extra content on the right of the name row, usually action buttons."
9220
10899
  }
9221
10900
  },
9222
10901
  {
9223
- "name": "ChatAi",
9224
- "tag": "UiChatAi",
9225
- "group": "media",
9226
- "description": "Chat panel with message bubbles, a typing indicator and an input, for AI assistant UIs.",
10902
+ "name": "GuestCard",
10903
+ "tag": "UiGuestCard",
10904
+ "group": "domain",
10905
+ "description": "Guest profile card with avatar, country, stay length and tags.",
9227
10906
  "props": {
9228
- "messages": {
9229
- "type": "{ role: 'user' | 'ai'; text: string }[]",
10907
+ "name": {
10908
+ "type": "string",
9230
10909
  "required": true,
9231
- "default": [],
9232
- "description": "Conversation in order. Any role other than \"user\" renders as an assistant bubble."
10910
+ "description": "Guest name."
9233
10911
  },
9234
- "loading": {
10912
+ "country": {
10913
+ "type": "string",
10914
+ "description": "Country shown in the subtitle."
10915
+ },
10916
+ "nights": {
10917
+ "type": "number",
10918
+ "description": "Number of nights, shown as \"N nights\"."
10919
+ },
10920
+ "vip": {
9235
10921
  "type": "boolean",
9236
10922
  "default": false,
9237
- "description": "Shows the typing dots and disables sending."
10923
+ "description": "Shows a VIP badge."
9238
10924
  },
9239
- "title": {
9240
- "type": "string",
9241
- "default": "Assistant",
9242
- "description": "Header title; also the aria-label. The header renders only when set."
10925
+ "tags": {
10926
+ "type": "string[]",
10927
+ "default": "[]",
10928
+ "description": "Preference tags, e.g. \"Halal\", \"Late check-in\"."
9243
10929
  },
9244
- "subtitle": {
9245
- "type": "string",
9246
- "description": "Muted text next to the title."
10930
+ "size": {
10931
+ "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
10932
+ "values": [
10933
+ "xs",
10934
+ "sm",
10935
+ "md",
10936
+ "lg",
10937
+ "xl"
10938
+ ],
10939
+ "default": "md",
10940
+ "description": "Scales padding, text and avatars."
10941
+ }
10942
+ }
10943
+ },
10944
+ {
10945
+ "name": "RoomGrid",
10946
+ "tag": "UiRoomGrid",
10947
+ "group": "domain",
10948
+ "description": "Tile grid of rooms colored by housekeeping status; use for front-desk room selection.",
10949
+ "props": {
10950
+ "rooms": {
10951
+ "type": "{ no: string; type: string; status: \"occupied\" | \"clean\" | \"dirty\" | \"blocked\" }[]",
10952
+ "default": "[]",
10953
+ "description": "Rooms; no is the room number and the unique key, type is the room class label, status sets the tile color (any other value renders neutral)."
9247
10954
  },
9248
- "placeholder": {
9249
- "type": "string",
9250
- "default": "Ask anything…",
9251
- "description": "Input placeholder."
10955
+ "statusTones": {
10956
+ "type": "Record<string, 'brand' | 'sky' | 'success' | 'warning' | 'danger' | 'neutral'>",
10957
+ "default": "{ occupied: 'brand', clean: 'success', dirty: 'warning', blocked: 'danger' }",
10958
+ "description": "Maps a room status to a tile tone. Merged over the defaults, so you can add custom statuses (e.g. { maintenance: \"sky\" }) or recolor known ones. Statuses without a tone render neutral."
10959
+ },
10960
+ "size": {
10961
+ "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
10962
+ "values": [
10963
+ "xs",
10964
+ "sm",
10965
+ "md",
10966
+ "lg",
10967
+ "xl"
10968
+ ],
10969
+ "default": "md",
10970
+ "description": "Scales padding, text and avatars."
9252
10971
  }
9253
10972
  },
9254
10973
  "events": {
9255
- "send": "Called with the trimmed message text when the user presses Enter or the send button. The component does not append it to messages."
10974
+ "select": "Called with the room number (room.no) of the clicked tile."
9256
10975
  },
9257
10976
  "notes": [
9258
- "Append the user message and the reply to messages yourself; set loading while waiting."
10977
+ "Each tile is a button; status is conveyed by color only, so add a legend."
9259
10978
  ]
9260
10979
  },
9261
10980
  {
9262
- "name": "HotelCard",
9263
- "tag": "UiHotelCard",
10981
+ "name": "RoomCalendar",
10982
+ "tag": "UiRoomCalendar",
9264
10983
  "group": "domain",
9265
- "description": "Hotel listing card with photo, tags, stars, distance, rating and nightly price; use in catalogs and search results.",
10984
+ "description": "Gantt-style occupancy calendar: rooms as rows, days as columns, bookings as bars.",
9266
10985
  "props": {
9267
- "name": {
9268
- "type": "string",
9269
- "required": true,
9270
- "description": "Hotel name."
9271
- },
9272
- "image": {
9273
- "type": "string",
9274
- "description": "Photo URL, used as the card background image."
9275
- },
9276
- "tags": {
9277
- "type": "string[]",
10986
+ "rooms": {
10987
+ "type": "{ no: string; bookings?: { from: number; nights: number; guest: string }[] }[]",
9278
10988
  "default": "[]",
9279
- "description": "Brand badges over the photo, e.g. \"Haram view\"."
9280
- },
9281
- "stars": {
9282
- "type": "number",
9283
- "default": 0,
9284
- "description": "Star class 0-5, rendered as repeated stars."
9285
- },
9286
- "distance": {
9287
- "type": "string",
9288
- "description": "Distance caption next to the stars, e.g. \"120 m to the Haram\"."
9289
- },
9290
- "rating": {
9291
- "type": "string | number",
9292
- "description": "Guest rating shown in a green badge, e.g. 9.2."
10989
+ "description": "Rooms with their bookings; from is the zero-based day index of check-in, nights its length. guest is the cell tooltip."
9293
10990
  },
9294
- "price": {
10991
+ "days": {
9295
10992
  "type": "number",
9296
- "description": "Price per unit, formatted with thousand separators; the currency label is fixed to SAR."
9297
- },
9298
- "night": {
9299
- "type": "string",
9300
- "default": "night",
9301
- "description": "Unit after \"SAR /\", e.g. \"night\"."
10993
+ "default": 14,
10994
+ "description": "Number of day columns, labelled 1..days."
9302
10995
  },
9303
10996
  "size": {
9304
10997
  "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
@@ -9314,38 +11007,47 @@
9314
11007
  }
9315
11008
  },
9316
11009
  "notes": [
9317
- "Currency is hard-coded to SAR.",
9318
- "Wrap in a clickable element yourself; the card has no click handler."
11010
+ "Day headers are plain numbers 1..days; offset them yourself for a month view."
9319
11011
  ]
9320
11012
  },
9321
11013
  {
9322
- "name": "TourCard",
9323
- "tag": "UiTourCard",
11014
+ "name": "LeadCard",
11015
+ "tag": "UiLeadCard",
9324
11016
  "group": "domain",
9325
- "description": "Tour or virtual-tour card with session count and a seat-occupancy bar.",
11017
+ "description": "CRM lead card with avatar, code, phone and amount.",
9326
11018
  "props": {
9327
11019
  "name": {
9328
11020
  "type": "string",
9329
11021
  "required": true,
9330
- "description": "Tour title."
11022
+ "description": "Lead name."
9331
11023
  },
9332
- "city": {
11024
+ "code": {
9333
11025
  "type": "string",
9334
- "description": "City shown in the subtitle."
11026
+ "description": "Lead or deal code under the name, monospaced."
9335
11027
  },
9336
- "sessions": {
9337
- "type": "number",
9338
- "description": "Number of sessions, shown as \"N sessions\"."
11028
+ "tag": {
11029
+ "type": "string",
11030
+ "description": "Optional badge text, e.g. a source or status."
9339
11031
  },
9340
- "booked": {
9341
- "type": "number",
9342
- "required": true,
9343
- "description": "Seats already booked."
11032
+ "tone": {
11033
+ "type": "'default' | 'brand' | 'success' | 'warning' | 'danger' | 'info'",
11034
+ "values": [
11035
+ "default",
11036
+ "brand",
11037
+ "success",
11038
+ "warning",
11039
+ "danger",
11040
+ "info"
11041
+ ],
11042
+ "description": "Badge tone for tag; neutral when omitted."
9344
11043
  },
9345
- "seats": {
9346
- "type": "number",
9347
- "required": true,
9348
- "description": "Total seats; the bar shows booked / seats."
11044
+ "phone": {
11045
+ "type": "string",
11046
+ "description": "Phone number with a phone icon."
11047
+ },
11048
+ "amount": {
11049
+ "type": "string | number",
11050
+ "description": "Amount shown on the right, rendered as given (format it yourself)."
9349
11051
  },
9350
11052
  "size": {
9351
11053
  "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
@@ -9359,29 +11061,52 @@
9359
11061
  "default": "md",
9360
11062
  "description": "Scales padding, text and avatars."
9361
11063
  }
9362
- },
9363
- "slots": {
9364
- "actions": "Footer actions, usually Buttons."
9365
- },
9366
- "notes": [
9367
- "A fixed \"360°\" badge is always shown.",
9368
- "With seats = 0 or missing the bar is empty (0%) and the meta reads \"0/0\"."
9369
- ]
11064
+ }
9370
11065
  },
9371
11066
  {
9372
- "name": "PrayerTimes",
9373
- "tag": "UiPrayerTimes",
11067
+ "name": "DealCard",
11068
+ "tag": "UiDealCard",
9374
11069
  "group": "domain",
9375
- "description": "Row of daily prayer times with the upcoming prayer highlighted.",
11070
+ "description": "CRM deal card with stage badge, amount, win probability and owner; the card type inside PipelineBoard.",
9376
11071
  "props": {
9377
- "items": {
9378
- "type": "{ name: string; time: string }[]",
9379
- "default": "[]",
9380
- "description": "Prayers in display order; time is shown as-is, e.g. \"05:12\"."
11072
+ "title": {
11073
+ "type": "string",
11074
+ "required": true,
11075
+ "description": "Deal title."
9381
11076
  },
9382
- "next": {
11077
+ "stage": {
11078
+ "type": "string",
11079
+ "description": "Stage badge text; no badge when omitted."
11080
+ },
11081
+ "tone": {
11082
+ "type": "'default' | 'brand' | 'success' | 'warning' | 'danger' | 'info'",
11083
+ "values": [
11084
+ "default",
11085
+ "brand",
11086
+ "success",
11087
+ "warning",
11088
+ "danger",
11089
+ "info"
11090
+ ],
11091
+ "default": "info",
11092
+ "description": "Badge tone for the stage."
11093
+ },
11094
+ "amount": {
11095
+ "type": "string | number",
11096
+ "description": "Large amount, rendered as given."
11097
+ },
11098
+ "probability": {
9383
11099
  "type": "number",
9384
- "description": "Index in items of the next prayer; sets aria-current on it."
11100
+ "default": 0,
11101
+ "description": "Win probability 0-100, shown as a progress bar and percent."
11102
+ },
11103
+ "owner": {
11104
+ "type": "string",
11105
+ "description": "Owner name with avatar."
11106
+ },
11107
+ "due": {
11108
+ "type": "string",
11109
+ "description": "Due date caption, right aligned."
9385
11110
  },
9386
11111
  "size": {
9387
11112
  "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
@@ -9398,15 +11123,15 @@
9398
11123
  }
9399
11124
  },
9400
11125
  {
9401
- "name": "RamadanTracker",
9402
- "tag": "UiRamadanTracker",
11126
+ "name": "PipelineBoard",
11127
+ "tag": "UiPipelineBoard",
9403
11128
  "group": "domain",
9404
- "description": "Thirty-day Ramadan progress strip; the last ten days and odd nights are marked.",
11129
+ "description": "Horizontally scrolling kanban pipeline of stage columns filled with DealCards.",
9405
11130
  "props": {
9406
- "day": {
9407
- "type": "number",
9408
- "required": true,
9409
- "description": "Current day 1-30. Earlier days render as past, later days as upcoming."
11131
+ "stages": {
11132
+ "type": "{ id: string | number; title: string; cards: DealCardProps[] }[]",
11133
+ "default": "[]",
11134
+ "description": "Columns in order; cards take the DealCard props (title, stage, tone, amount, probability, owner, due). The column count badge is cards.length. Give cards an id so onMove can report which one moved (the index is used otherwise)."
9410
11135
  },
9411
11136
  "size": {
9412
11137
  "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
@@ -9421,45 +11146,49 @@
9421
11146
  "description": "Scales padding, text and avatars."
9422
11147
  }
9423
11148
  },
11149
+ "events": {
11150
+ "move": "Called with { id, from, to } (card id, source stage id, target stage id) when a card is dropped on another stage. The board does not reorder itself: update stages in your state."
11151
+ },
9424
11152
  "notes": [
9425
- "Exposed as role=\"img\" with aria-label \"Day N of 30\"."
11153
+ "Drag and drop is enabled only when a move handler is passed; without it the board renders and behaves as before.",
11154
+ "Uses HTML5 drag and drop (mouse and desktop browsers); there is no keyboard alternative, so also offer a stage select on the card if you need one.",
11155
+ "Cards are fixed to DealCard; for custom cards compose KanbanColumn and KanbanCard."
9426
11156
  ]
9427
11157
  },
9428
11158
  {
9429
- "name": "BookingCard",
9430
- "tag": "UiBookingCard",
11159
+ "name": "ContactPanel",
11160
+ "tag": "UiContactPanel",
9431
11161
  "group": "domain",
9432
- "description": "Compact booking summary: code, status, guest, hotel, dates and total.",
11162
+ "description": "Contact detail card with avatar, role, contact fields and Call / Message buttons.",
9433
11163
  "props": {
9434
- "code": {
11164
+ "name": {
9435
11165
  "type": "string",
9436
11166
  "required": true,
9437
- "description": "Booking reference, monospaced."
11167
+ "description": "Contact name."
9438
11168
  },
9439
- "status": {
9440
- "type": "'Confirmed' | 'Pending' | 'Cancelled' | string",
9441
- "values": [
9442
- "Confirmed",
9443
- "Pending",
9444
- "Cancelled"
9445
- ],
9446
- "description": "Status text. Confirmed is green, Pending amber, Cancelled red; any other value gets a neutral badge."
11169
+ "role": {
11170
+ "type": "string",
11171
+ "description": "Role or company under the name."
9447
11172
  },
9448
- "guest": {
11173
+ "phone": {
9449
11174
  "type": "string",
9450
- "description": "Guest name, also drives the avatar initials."
11175
+ "description": "Phone row."
9451
11176
  },
9452
- "hotel": {
11177
+ "telegram": {
9453
11178
  "type": "string",
9454
- "description": "Hotel name under the guest."
11179
+ "description": "Telegram handle row."
9455
11180
  },
9456
- "dates": {
11181
+ "email": {
9457
11182
  "type": "string",
9458
- "description": "Preformatted date range, e.g. \"12-19 Mar\"."
11183
+ "description": "Email row."
9459
11184
  },
9460
- "amount": {
9461
- "type": "number",
9462
- "description": "Total, formatted as \"SAR 1 200\"."
11185
+ "city": {
11186
+ "type": "string",
11187
+ "description": "City row."
11188
+ },
11189
+ "labels": {
11190
+ "type": "{ call?: string; message?: string }",
11191
+ "description": "Override built-in English strings."
9463
11192
  },
9464
11193
  "size": {
9465
11194
  "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
@@ -9473,36 +11202,26 @@
9473
11202
  "default": "md",
9474
11203
  "description": "Scales padding, text and avatars."
9475
11204
  }
11205
+ },
11206
+ "events": {
11207
+ "call": "Called with no arguments when Call is clicked.",
11208
+ "message": "Called with no arguments when Message is clicked."
9476
11209
  }
9477
11210
  },
9478
11211
  {
9479
- "name": "GuestCard",
9480
- "tag": "UiGuestCard",
11212
+ "name": "KanbanColumn",
11213
+ "tag": "UiKanbanColumn",
9481
11214
  "group": "domain",
9482
- "description": "Guest profile card with avatar, country, stay length and tags.",
11215
+ "description": "Single kanban column with a title, count badge and stacked cards.",
9483
11216
  "props": {
9484
- "name": {
11217
+ "title": {
9485
11218
  "type": "string",
9486
11219
  "required": true,
9487
- "description": "Guest name."
9488
- },
9489
- "country": {
9490
- "type": "string",
9491
- "description": "Country shown in the subtitle."
11220
+ "description": "Column heading."
9492
11221
  },
9493
- "nights": {
11222
+ "count": {
9494
11223
  "type": "number",
9495
- "description": "Number of nights, shown as \"N nights\"."
9496
- },
9497
- "vip": {
9498
- "type": "boolean",
9499
- "default": false,
9500
- "description": "Shows a VIP badge."
9501
- },
9502
- "tags": {
9503
- "type": "string[]",
9504
- "default": "[]",
9505
- "description": "Preference tags, e.g. \"Halal\", \"Late check-in\"."
11224
+ "description": "Count badge; defaults to the number of children."
9506
11225
  },
9507
11226
  "size": {
9508
11227
  "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
@@ -9516,59 +11235,41 @@
9516
11235
  "default": "md",
9517
11236
  "description": "Scales padding, text and avatars."
9518
11237
  }
11238
+ },
11239
+ "slots": {
11240
+ "default": "Cards, usually KanbanCard or DealCard. React passes them as children."
9519
11241
  }
9520
11242
  },
9521
11243
  {
9522
- "name": "RoomGrid",
9523
- "tag": "UiRoomGrid",
11244
+ "name": "KanbanCard",
11245
+ "tag": "UiKanbanCard",
9524
11246
  "group": "domain",
9525
- "description": "Tile grid of rooms colored by housekeeping status; use for front-desk room selection.",
11247
+ "description": "Simple kanban card with title, subtitle, free content and an optional tag.",
9526
11248
  "props": {
9527
- "rooms": {
9528
- "type": "{ no: string; type: string; status: \"occupied\" | \"clean\" | \"dirty\" | \"blocked\" }[]",
9529
- "default": "[]",
9530
- "description": "Rooms; no is the room number and the unique key, type is the room class label, status sets the tile color (any other value renders neutral)."
11249
+ "title": {
11250
+ "type": "string",
11251
+ "required": true,
11252
+ "description": "Card title."
9531
11253
  },
9532
- "statusTones": {
9533
- "type": "Record<string, 'brand' | 'sky' | 'success' | 'warning' | 'danger' | 'neutral'>",
9534
- "default": "{ occupied: 'brand', clean: 'success', dirty: 'warning', blocked: 'danger' }",
9535
- "description": "Maps a room status to a tile tone. Merged over the defaults, so you can add custom statuses (e.g. { maintenance: \"sky\" }) or recolor known ones. Statuses without a tone render neutral."
11254
+ "sub": {
11255
+ "type": "string",
11256
+ "description": "Subtitle under the title."
9536
11257
  },
9537
- "size": {
9538
- "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
11258
+ "tag": {
11259
+ "type": "string",
11260
+ "description": "Badge at the bottom."
11261
+ },
11262
+ "tone": {
11263
+ "type": "'default' | 'brand' | 'success' | 'warning' | 'danger' | 'info'",
9539
11264
  "values": [
9540
- "xs",
9541
- "sm",
9542
- "md",
9543
- "lg",
9544
- "xl"
11265
+ "default",
11266
+ "brand",
11267
+ "success",
11268
+ "warning",
11269
+ "danger",
11270
+ "info"
9545
11271
  ],
9546
- "default": "md",
9547
- "description": "Scales padding, text and avatars."
9548
- }
9549
- },
9550
- "events": {
9551
- "select": "Called with the room number (room.no) of the clicked tile."
9552
- },
9553
- "notes": [
9554
- "Each tile is a button; status is conveyed by color only, so add a legend."
9555
- ]
9556
- },
9557
- {
9558
- "name": "RoomCalendar",
9559
- "tag": "UiRoomCalendar",
9560
- "group": "domain",
9561
- "description": "Gantt-style occupancy calendar: rooms as rows, days as columns, bookings as bars.",
9562
- "props": {
9563
- "rooms": {
9564
- "type": "{ no: string; bookings?: { from: number; nights: number; guest: string }[] }[]",
9565
- "default": "[]",
9566
- "description": "Rooms with their bookings; from is the zero-based day index of check-in, nights its length. guest is the cell tooltip."
9567
- },
9568
- "days": {
9569
- "type": "number",
9570
- "default": 14,
9571
- "description": "Number of day columns, labelled 1..days."
11272
+ "description": "Badge tone for tag."
9572
11273
  },
9573
11274
  "size": {
9574
11275
  "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
@@ -9583,48 +11284,37 @@
9583
11284
  "description": "Scales padding, text and avatars."
9584
11285
  }
9585
11286
  },
9586
- "notes": [
9587
- "Day headers are plain numbers 1..days; offset them yourself for a month view."
9588
- ]
11287
+ "slots": {
11288
+ "default": "Extra content between the subtitle and the tag. React passes it as children."
11289
+ }
9589
11290
  },
9590
11291
  {
9591
- "name": "LeadCard",
9592
- "tag": "UiLeadCard",
11292
+ "name": "CallRow",
11293
+ "tag": "UiCallRow",
9593
11294
  "group": "domain",
9594
- "description": "CRM lead card with avatar, code, phone and amount.",
11295
+ "description": "One-line call log row with avatar, status, duration and a play button.",
9595
11296
  "props": {
9596
11297
  "name": {
9597
11298
  "type": "string",
9598
11299
  "required": true,
9599
- "description": "Lead name."
9600
- },
9601
- "code": {
9602
- "type": "string",
9603
- "description": "Lead or deal code under the name, monospaced."
11300
+ "description": "Caller name."
9604
11301
  },
9605
- "tag": {
11302
+ "status": {
9606
11303
  "type": "string",
9607
- "description": "Optional badge text, e.g. a source or status."
11304
+ "description": "Status text before the duration, e.g. \"Answered\"."
9608
11305
  },
9609
- "tone": {
9610
- "type": "'default' | 'brand' | 'success' | 'warning' | 'danger' | 'info'",
9611
- "values": [
9612
- "default",
9613
- "brand",
9614
- "success",
9615
- "warning",
9616
- "danger",
9617
- "info"
9618
- ],
9619
- "description": "Badge tone for tag; neutral when omitted."
11306
+ "duration": {
11307
+ "type": "number",
11308
+ "description": "Duration in seconds, formatted as \"3 m 05 s\" (units from durUnits); shows a dash when missing."
9620
11309
  },
9621
- "phone": {
9622
- "type": "string",
9623
- "description": "Phone number with a phone icon."
11310
+ "durUnits": {
11311
+ "type": "{ m?: string; s?: string }",
11312
+ "default": "{ m: 'm', s: 's' }",
11313
+ "description": "Minute and second unit labels for localized durations, e.g. { m: \"min\", s: \"sec\" }."
9624
11314
  },
9625
- "amount": {
9626
- "type": "string | number",
9627
- "description": "Amount shown on the right, rendered as given (format it yourself)."
11315
+ "labels": {
11316
+ "type": "{ play?: string }",
11317
+ "description": "Override built-in English strings. play is the aria-label of the play button."
9628
11318
  },
9629
11319
  "size": {
9630
11320
  "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
@@ -9638,52 +11328,58 @@
9638
11328
  "default": "md",
9639
11329
  "description": "Scales padding, text and avatars."
9640
11330
  }
11331
+ },
11332
+ "events": {
11333
+ "play": "Called with no arguments when the play button is clicked."
9641
11334
  }
9642
11335
  },
9643
11336
  {
9644
- "name": "DealCard",
9645
- "tag": "UiDealCard",
11337
+ "name": "CallCard",
11338
+ "tag": "UiCallCard",
9646
11339
  "group": "domain",
9647
- "description": "CRM deal card with stage badge, amount, win probability and owner; the card type inside PipelineBoard.",
11340
+ "description": "Call recording card with status badge, a playback progress bar and duration.",
9648
11341
  "props": {
9649
- "title": {
11342
+ "name": {
9650
11343
  "type": "string",
9651
11344
  "required": true,
9652
- "description": "Deal title."
11345
+ "description": "Caller name."
9653
11346
  },
9654
- "stage": {
11347
+ "phone": {
9655
11348
  "type": "string",
9656
- "description": "Stage badge text; no badge when omitted."
11349
+ "description": "Phone number."
9657
11350
  },
9658
- "tone": {
9659
- "type": "'default' | 'brand' | 'success' | 'warning' | 'danger' | 'info'",
11351
+ "status": {
11352
+ "type": "'Answered' | 'Missed' | 'Voicemail' | 'Busy' | 'Declined' | string",
9660
11353
  "values": [
9661
- "default",
9662
- "brand",
9663
- "success",
9664
- "warning",
9665
- "danger",
9666
- "info"
11354
+ "Answered",
11355
+ "Missed",
11356
+ "Voicemail",
11357
+ "Busy",
11358
+ "Declined"
9667
11359
  ],
9668
- "default": "info",
9669
- "description": "Badge tone for the stage."
11360
+ "description": "Badge text. Known statuses (case-insensitive): Answered green, Missed and Declined red, Voicemail and Busy amber, Ringing blue. Any other value is neutral. The badge is hidden when empty."
9670
11361
  },
9671
- "amount": {
9672
- "type": "string | number",
9673
- "description": "Large amount, rendered as given."
11362
+ "statusTones": {
11363
+ "type": "Record<string, 'success' | 'danger' | 'warning' | 'info' | 'brand'>",
11364
+ "description": "Extra or overriding status to tone mapping, e.g. { \"No answer\": \"warning\" }."
9674
11365
  },
9675
- "probability": {
11366
+ "progress": {
9676
11367
  "type": "number",
9677
11368
  "default": 0,
9678
- "description": "Win probability 0-100, shown as a progress bar and percent."
11369
+ "description": "Playback progress 0-100."
9679
11370
  },
9680
- "owner": {
9681
- "type": "string",
9682
- "description": "Owner name with avatar."
11371
+ "duration": {
11372
+ "type": "number",
11373
+ "description": "Duration in seconds."
9683
11374
  },
9684
- "due": {
9685
- "type": "string",
9686
- "description": "Due date caption, right aligned."
11375
+ "durUnits": {
11376
+ "type": "{ m?: string; s?: string }",
11377
+ "default": "{ m: 'm', s: 's' }",
11378
+ "description": "Minute and second unit labels for the duration."
11379
+ },
11380
+ "labels": {
11381
+ "type": "{ play?: string }",
11382
+ "description": "Override built-in English strings. play is the aria-label of the play button."
9687
11383
  },
9688
11384
  "size": {
9689
11385
  "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
@@ -9697,18 +11393,38 @@
9697
11393
  "default": "md",
9698
11394
  "description": "Scales padding, text and avatars."
9699
11395
  }
11396
+ },
11397
+ "events": {
11398
+ "play": "Called with no arguments when the play button is clicked."
9700
11399
  }
9701
11400
  },
9702
11401
  {
9703
- "name": "PipelineBoard",
9704
- "tag": "UiPipelineBoard",
11402
+ "name": "IncomingCall",
11403
+ "tag": "UiIncomingCall",
9705
11404
  "group": "domain",
9706
- "description": "Horizontally scrolling kanban pipeline of stage columns filled with DealCards.",
11405
+ "description": "Glass banner for an incoming call with Decline and Answer buttons.",
9707
11406
  "props": {
9708
- "stages": {
9709
- "type": "{ id: string | number; title: string; cards: DealCardProps[] }[]",
9710
- "default": "[]",
9711
- "description": "Columns in order; cards take the DealCard props (title, stage, tone, amount, probability, owner, due). The column count badge is cards.length. Give cards an id so onMove can report which one moved (the index is used otherwise)."
11407
+ "name": {
11408
+ "type": "string",
11409
+ "required": true,
11410
+ "description": "Caller name."
11411
+ },
11412
+ "phone": {
11413
+ "type": "string",
11414
+ "description": "Caller number."
11415
+ },
11416
+ "label": {
11417
+ "type": "string",
11418
+ "default": "Incoming call",
11419
+ "description": "Caption above the name."
11420
+ },
11421
+ "onDecline": {
11422
+ "type": "() => void",
11423
+ "description": "Decline button click."
11424
+ },
11425
+ "onAnswer": {
11426
+ "type": "() => void",
11427
+ "description": "Answer button click."
9712
11428
  },
9713
11429
  "size": {
9714
11430
  "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
@@ -9724,48 +11440,146 @@
9724
11440
  }
9725
11441
  },
9726
11442
  "events": {
9727
- "move": "Called with { id, from, to } (card id, source stage id, target stage id) when a card is dropped on another stage. The board does not reorder itself: update stages in your state."
11443
+ "decline": "Decline button clicked.",
11444
+ "answer": "Answer button clicked."
11445
+ }
11446
+ },
11447
+ {
11448
+ "name": "AuthSplit",
11449
+ "tag": "UiAuthSplit",
11450
+ "group": "domain",
11451
+ "description": "Two-column sign-in layout with a brand panel on the left and the form on the right.",
11452
+ "props": {
11453
+ "title": {
11454
+ "type": "string",
11455
+ "required": true,
11456
+ "description": "Form heading."
11457
+ },
11458
+ "subtitle": {
11459
+ "type": "string",
11460
+ "description": "Text under the heading."
11461
+ },
11462
+ "logo": {
11463
+ "type": "VNode",
11464
+ "description": "Logo node above the heading."
11465
+ },
11466
+ "aside": {
11467
+ "type": "VNode",
11468
+ "description": "Content of the left brand panel (hidden on narrow screens)."
11469
+ }
11470
+ },
11471
+ "slots": {
11472
+ "default": "Form content under the heading. React passes it as children."
9728
11473
  },
9729
11474
  "notes": [
9730
- "Drag and drop is enabled only when a move handler is passed; without it the board renders and behaves as before.",
9731
- "Uses HTML5 drag and drop (mouse and desktop browsers); there is no keyboard alternative, so also offer a stage select on the card if you need one.",
9732
- "Cards are fixed to DealCard; for custom cards compose KanbanColumn and KanbanCard."
11475
+ "logo and aside are props in both Vue and React (pass a VNode / element)."
9733
11476
  ]
9734
11477
  },
9735
11478
  {
9736
- "name": "ContactPanel",
9737
- "tag": "UiContactPanel",
11479
+ "name": "AuthShowcase",
11480
+ "tag": "UiAuthShowcase",
9738
11481
  "group": "domain",
9739
- "description": "Contact detail card with avatar, role, contact fields and Call / Message buttons.",
11482
+ "description": "Sign-in layout with a media panel: dark photo card with floating avatars, light gradient card with a social-proof pill, or a tinted panel with a glass caption. The default slot is the form.",
9740
11483
  "props": {
9741
- "name": {
11484
+ "variant": {
11485
+ "type": "'photo' | 'light' | 'tint'",
11486
+ "values": [
11487
+ "photo",
11488
+ "light",
11489
+ "tint"
11490
+ ],
11491
+ "default": "photo",
11492
+ "description": "'photo': one framed card, media on the left. 'light': gradient form card, proof pill below, glass caption on the media. 'tint': like light, with a coloured panel, a heading on the media and cyan accent."
11493
+ },
11494
+ "title": {
9742
11495
  "type": "string",
9743
11496
  "required": true,
9744
- "description": "Contact name."
11497
+ "description": "Form heading."
9745
11498
  },
9746
- "role": {
11499
+ "subtitle": {
9747
11500
  "type": "string",
9748
- "description": "Role or company under the name."
11501
+ "description": "Text under the heading."
9749
11502
  },
9750
- "phone": {
11503
+ "logo": {
11504
+ "type": "VNode",
11505
+ "description": "Logo node above the heading."
11506
+ },
11507
+ "footer": {
11508
+ "type": "VNode",
11509
+ "description": "Content under the fields, for example \"No account? Sign up\"."
11510
+ },
11511
+ "image": {
9751
11512
  "type": "string",
9752
- "description": "Phone row."
11513
+ "description": "URL of the media image. Without it the panel shows an accent gradient."
9753
11514
  },
9754
- "telegram": {
11515
+ "headline": {
9755
11516
  "type": "string",
9756
- "description": "Telegram handle row."
11517
+ "description": "Large text on the media panel (photo and tint)."
9757
11518
  },
9758
- "email": {
11519
+ "caption": {
9759
11520
  "type": "string",
9760
- "description": "Email row."
11521
+ "description": "Small text on the media panel (photo) or inside the glass bar (light, tint)."
9761
11522
  },
9762
- "city": {
11523
+ "quote": {
9763
11524
  "type": "string",
9764
- "description": "City row."
11525
+ "description": "Line at the bottom of the media panel; photo only."
11526
+ },
11527
+ "chips": {
11528
+ "type": "string[]",
11529
+ "description": "Pill labels inside the glass bar; light and tint."
11530
+ },
11531
+ "people": {
11532
+ "type": "{ name: string; src?: string }[]",
11533
+ "description": "Avatars: floating on the photo, stacked in the proof pill."
11534
+ },
11535
+ "proof": {
11536
+ "type": "string",
11537
+ "description": "Social-proof title, e.g. \"Join 20k+ users\"; light and tint. Shows the pill under the form."
11538
+ },
11539
+ "proofHint": {
11540
+ "type": "string",
11541
+ "description": "Second line of the proof pill."
11542
+ }
11543
+ },
11544
+ "slots": {
11545
+ "default": "Form fields and buttons. React passes them as children."
11546
+ },
11547
+ "notes": [
11548
+ "logo, footer, image, people are props in both Vue and React. The media panel is hidden below the form on narrow screens (stacks under it)."
11549
+ ]
11550
+ },
11551
+ {
11552
+ "name": "SocialAuth",
11553
+ "tag": "UiSocialAuth",
11554
+ "group": "domain",
11555
+ "description": "Continue with Google and Apple buttons with an \"or\" divider. Place it under the sign-in form.",
11556
+ "props": {
11557
+ "providers": {
11558
+ "type": "('google' | 'apple')[]",
11559
+ "default": "['google', 'apple']",
11560
+ "description": "Which buttons to show, in order."
11561
+ },
11562
+ "variant": {
11563
+ "type": "'stack' | 'icons'",
11564
+ "values": [
11565
+ "stack",
11566
+ "icons"
11567
+ ],
11568
+ "default": "stack",
11569
+ "description": "'stack': full-width buttons with a label, one per row. 'icons': a row of square icon buttons."
11570
+ },
11571
+ "divider": {
11572
+ "type": "boolean",
11573
+ "default": "true",
11574
+ "description": "Show the \"or\" line above the buttons."
9765
11575
  },
9766
11576
  "labels": {
9767
- "type": "{ call?: string; message?: string }",
9768
- "description": "Override built-in English strings."
11577
+ "type": "{ google?: string; apple?: string }",
11578
+ "description": "Provider names inserted into \"Continue with {provider}\"."
11579
+ },
11580
+ "onSelect": {
11581
+ "type": "(provider: 'google' | 'apple') => void",
11582
+ "description": "Called with the clicked provider. Start your OAuth flow here."
9769
11583
  },
9770
11584
  "size": {
9771
11585
  "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
@@ -9781,408 +11595,407 @@
9781
11595
  }
9782
11596
  },
9783
11597
  "events": {
9784
- "call": "Called with no arguments when Call is clicked.",
9785
- "message": "Called with no arguments when Message is clicked."
9786
- }
11598
+ "select": "A provider button was clicked; payload is \"google\" or \"apple\"."
11599
+ },
11600
+ "notes": [
11601
+ "The kit only renders the buttons. The OAuth flow itself is yours."
11602
+ ]
9787
11603
  },
9788
11604
  {
9789
- "name": "KanbanColumn",
9790
- "tag": "UiKanbanColumn",
9791
- "group": "domain",
9792
- "description": "Single kanban column with a title, count badge and stacked cards.",
11605
+ "name": "PageDashboard",
11606
+ "tag": "UiPageDashboard",
11607
+ "group": "pages",
11608
+ "description": "Dashboard template: greeting hero, KPI tiles, occupancy chart, sales funnel, top list and activity feed.",
9793
11609
  "props": {
9794
11610
  "title": {
11611
+ "forwarded": true,
9795
11612
  "type": "string",
9796
- "required": true,
9797
- "description": "Column heading."
11613
+ "description": "Page heading. The built-in header renders only when title is set and the header slot is empty."
9798
11614
  },
9799
- "count": {
9800
- "type": "number",
9801
- "description": "Count badge; defaults to the number of children."
11615
+ "subtitle": {
11616
+ "forwarded": true,
11617
+ "type": "string",
11618
+ "description": "Caption under the heading."
9802
11619
  },
9803
- "size": {
9804
- "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
9805
- "values": [
9806
- "xs",
9807
- "sm",
9808
- "md",
9809
- "lg",
9810
- "xl"
9811
- ],
9812
- "default": "md",
9813
- "description": "Scales padding, text and avatars."
11620
+ "crumbs": {
11621
+ "forwarded": true,
11622
+ "type": "{ label: string; href?: string }[]",
11623
+ "description": "Breadcrumb trail above the title."
9814
11624
  }
9815
11625
  },
9816
11626
  "slots": {
9817
- "default": "Cards, usually KanbanCard or DealCard. React passes them as children."
9818
- }
11627
+ "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
11628
+ "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
11629
+ "hero": "Large greeting/plan block; Card variant=\"inverse\" with Ring and a Button.",
11630
+ "kpis": "Four key figures; KpiTile, StatsCard or KpiInline.",
11631
+ "occupancy": "Per-day occupancy chart; OccupancyChart or MiniChart.",
11632
+ "funnel": "Inquiry-to-payment funnel; SalesFunnel.",
11633
+ "top": "Revenue leaderboard; DataTable with Progress share bars.",
11634
+ "activity": "Recent actions, newest first; Timeline."
11635
+ },
11636
+ "notes": [
11637
+ "Place inside AppShell; fill only the slots you need.",
11638
+ "hero and kpis share a row, as do occupancy/funnel and top/activity; they wrap on narrow screens."
11639
+ ]
9819
11640
  },
9820
11641
  {
9821
- "name": "KanbanCard",
9822
- "tag": "UiKanbanCard",
9823
- "group": "domain",
9824
- "description": "Simple kanban card with title, subtitle, free content and an optional tag.",
11642
+ "name": "PagePatterns",
11643
+ "tag": "UiPagePatterns",
11644
+ "group": "pages",
11645
+ "description": "Showcase template combining twelve recurring dashboard card patterns (banner, strips, stat lines, charts, lists).",
9825
11646
  "props": {
9826
11647
  "title": {
11648
+ "forwarded": true,
9827
11649
  "type": "string",
9828
- "required": true,
9829
- "description": "Card title."
9830
- },
9831
- "sub": {
9832
- "type": "string",
9833
- "description": "Subtitle under the title."
11650
+ "description": "Page heading. The built-in header renders only when title is set and the header slot is empty."
9834
11651
  },
9835
- "tag": {
11652
+ "subtitle": {
11653
+ "forwarded": true,
9836
11654
  "type": "string",
9837
- "description": "Badge at the bottom."
9838
- },
9839
- "tone": {
9840
- "type": "'default' | 'brand' | 'success' | 'warning' | 'danger' | 'info'",
9841
- "values": [
9842
- "default",
9843
- "brand",
9844
- "success",
9845
- "warning",
9846
- "danger",
9847
- "info"
9848
- ],
9849
- "description": "Badge tone for tag."
11655
+ "description": "Caption under the heading."
9850
11656
  },
9851
- "size": {
9852
- "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
9853
- "values": [
9854
- "xs",
9855
- "sm",
9856
- "md",
9857
- "lg",
9858
- "xl"
9859
- ],
9860
- "default": "md",
9861
- "description": "Scales padding, text and avatars."
11657
+ "crumbs": {
11658
+ "forwarded": true,
11659
+ "type": "{ label: string; href?: string }[]",
11660
+ "description": "Breadcrumb trail above the title."
9862
11661
  }
9863
11662
  },
9864
11663
  "slots": {
9865
- "default": "Extra content between the subtitle and the tag. React passes it as children."
9866
- }
9867
- },
9868
- {
9869
- "name": "CallRow",
9870
- "tag": "UiCallRow",
9871
- "group": "domain",
9872
- "description": "One-line call log row with avatar, status, duration and a play button.",
9873
- "props": {
9874
- "name": {
9875
- "type": "string",
9876
- "required": true,
9877
- "description": "Caller name."
9878
- },
9879
- "status": {
9880
- "type": "string",
9881
- "description": "Status text before the duration, e.g. \"Answered\"."
9882
- },
9883
- "duration": {
9884
- "type": "number",
9885
- "description": "Duration in seconds, formatted as \"3 m 05 s\" (units from durUnits); shows a dash when missing."
9886
- },
9887
- "durUnits": {
9888
- "type": "{ m?: string; s?: string }",
9889
- "default": "{ m: 'm', s: 's' }",
9890
- "description": "Minute and second unit labels for localized durations, e.g. { m: \"min\", s: \"sec\" }."
9891
- },
9892
- "labels": {
9893
- "type": "{ play?: string }",
9894
- "description": "Override built-in English strings. play is the aria-label of the play button."
9895
- },
9896
- "size": {
9897
- "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
9898
- "values": [
9899
- "xs",
9900
- "sm",
9901
- "md",
9902
- "lg",
9903
- "xl"
9904
- ],
9905
- "default": "md",
9906
- "description": "Scales padding, text and avatars."
9907
- }
11664
+ "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
11665
+ "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
11666
+ "hero": "Large banner; HeroBanner.",
11667
+ "strip": "One card with four metrics; StatStrip with IconTile.",
11668
+ "statlines": "Row of toned stat lines; StatLine (tone brand, sky, success, warning, danger).",
11669
+ "chartcard": "Titled chart with menu and period select; ChartCard with PillSelect and OccupancyChart or MiniChart.",
11670
+ "tiles": "Selectable tiles plus an add tile; TabTiles.",
11671
+ "listrows": "Icon, title and value rows; StatRow.",
11672
+ "countries": "Country amount rows; CountryRow.",
11673
+ "versus": "Two values with a share bar; VersusBar.",
11674
+ "segbar": "Composition bar with legend; SegBar.",
11675
+ "activity": "Timeline of events; Timeline.",
11676
+ "actioncard": "Card with collapse, refresh and close actions; ActionCard."
9908
11677
  },
9909
- "events": {
9910
- "play": "Called with no arguments when the play button is clicked."
9911
- }
11678
+ "notes": [
11679
+ "Place inside AppShell; fill only the slots you need."
11680
+ ]
9912
11681
  },
9913
11682
  {
9914
- "name": "CallCard",
9915
- "tag": "UiCallCard",
9916
- "group": "domain",
9917
- "description": "Call recording card with status badge, a playback progress bar and duration.",
11683
+ "name": "PageCrm",
11684
+ "tag": "UiPageCrm",
11685
+ "group": "pages",
11686
+ "description": "CRM template: summary tiles, filters, pipeline board and call queue.",
9918
11687
  "props": {
9919
- "name": {
11688
+ "title": {
11689
+ "forwarded": true,
9920
11690
  "type": "string",
9921
- "required": true,
9922
- "description": "Caller name."
11691
+ "description": "Page heading. The built-in header renders only when title is set and the header slot is empty."
9923
11692
  },
9924
- "phone": {
11693
+ "subtitle": {
11694
+ "forwarded": true,
9925
11695
  "type": "string",
9926
- "description": "Phone number."
9927
- },
9928
- "status": {
9929
- "type": "'Answered' | 'Missed' | 'Voicemail' | 'Busy' | 'Declined' | string",
9930
- "values": [
9931
- "Answered",
9932
- "Missed",
9933
- "Voicemail",
9934
- "Busy",
9935
- "Declined"
9936
- ],
9937
- "description": "Badge text. Known statuses (case-insensitive): Answered green, Missed and Declined red, Voicemail and Busy amber, Ringing blue. Any other value is neutral. The badge is hidden when empty."
9938
- },
9939
- "statusTones": {
9940
- "type": "Record<string, 'success' | 'danger' | 'warning' | 'info' | 'brand'>",
9941
- "description": "Extra or overriding status to tone mapping, e.g. { \"No answer\": \"warning\" }."
9942
- },
9943
- "progress": {
9944
- "type": "number",
9945
- "default": 0,
9946
- "description": "Playback progress 0-100."
9947
- },
9948
- "duration": {
9949
- "type": "number",
9950
- "description": "Duration in seconds."
9951
- },
9952
- "durUnits": {
9953
- "type": "{ m?: string; s?: string }",
9954
- "default": "{ m: 'm', s: 's' }",
9955
- "description": "Minute and second unit labels for the duration."
9956
- },
9957
- "labels": {
9958
- "type": "{ play?: string }",
9959
- "description": "Override built-in English strings. play is the aria-label of the play button."
11696
+ "description": "Caption under the heading."
9960
11697
  },
9961
- "size": {
9962
- "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
9963
- "values": [
9964
- "xs",
9965
- "sm",
9966
- "md",
9967
- "lg",
9968
- "xl"
9969
- ],
9970
- "default": "md",
9971
- "description": "Scales padding, text and avatars."
11698
+ "crumbs": {
11699
+ "forwarded": true,
11700
+ "type": "{ label: string; href?: string }[]",
11701
+ "description": "Breadcrumb trail above the title."
9972
11702
  }
9973
11703
  },
9974
- "events": {
9975
- "play": "Called with no arguments when the play button is clicked."
9976
- }
11704
+ "slots": {
11705
+ "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
11706
+ "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
11707
+ "summary": "Tiles above the board (leads, amount, conversion, overdue); StatsCard or KpiTile.",
11708
+ "filters": "Status tabs, search and period switch; Tabs, SearchInput, SegmentedControl, FilterChips.",
11709
+ "board": "Stage columns with deal cards; PipelineBoard, KanbanColumn, DealCard.",
11710
+ "calls": "Recent call queue; CallRow, CallCard, IncomingCall."
11711
+ },
11712
+ "notes": [
11713
+ "Place inside AppShell; fill only the slots you need."
11714
+ ]
9977
11715
  },
9978
11716
  {
9979
- "name": "IncomingCall",
9980
- "tag": "UiIncomingCall",
9981
- "group": "domain",
9982
- "description": "Glass banner for an incoming call with Decline and Answer buttons.",
11717
+ "name": "PageBookings",
11718
+ "tag": "UiPageBookings",
11719
+ "group": "pages",
11720
+ "description": "Bookings list template: stats, toolbar, bulk-action bar, table and pagination.",
9983
11721
  "props": {
9984
- "name": {
11722
+ "title": {
11723
+ "forwarded": true,
9985
11724
  "type": "string",
9986
- "required": true,
9987
- "description": "Caller name."
11725
+ "description": "Page heading. The built-in header renders only when title is set and the header slot is empty."
9988
11726
  },
9989
- "phone": {
11727
+ "subtitle": {
11728
+ "forwarded": true,
9990
11729
  "type": "string",
9991
- "description": "Caller number."
11730
+ "description": "Caption under the heading."
9992
11731
  },
9993
- "label": {
11732
+ "crumbs": {
11733
+ "forwarded": true,
11734
+ "type": "{ label: string; href?: string }[]",
11735
+ "description": "Breadcrumb trail above the title."
11736
+ }
11737
+ },
11738
+ "slots": {
11739
+ "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
11740
+ "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
11741
+ "stats": "Booking figures for the period; StatsCard.",
11742
+ "toolbar": "Search, quick filters and export menu above the table; SearchInput, FilterChips, Dropdown.",
11743
+ "bulk": "Selection bar shown when rows are selected; Alert with Buttons. Render it conditionally.",
11744
+ "table": "Sortable, selectable table; DataTable.",
11745
+ "pager": "Page numbers below the table; Pagination."
11746
+ },
11747
+ "notes": [
11748
+ "Place inside AppShell; fill only the slots you need."
11749
+ ]
11750
+ },
11751
+ {
11752
+ "name": "PageCatalog",
11753
+ "tag": "UiPageCatalog",
11754
+ "group": "pages",
11755
+ "description": "Catalog template with a filter sidebar and a card grid (hotels, tours).",
11756
+ "props": {
11757
+ "title": {
11758
+ "forwarded": true,
9994
11759
  "type": "string",
9995
- "default": "Incoming call",
9996
- "description": "Caption above the name."
9997
- },
9998
- "onDecline": {
9999
- "type": "() => void",
10000
- "description": "Decline button click."
11760
+ "description": "Page heading. The built-in header renders only when title is set and the header slot is empty."
10001
11761
  },
10002
- "onAnswer": {
10003
- "type": "() => void",
10004
- "description": "Answer button click."
11762
+ "subtitle": {
11763
+ "forwarded": true,
11764
+ "type": "string",
11765
+ "description": "Caption under the heading."
10005
11766
  },
10006
- "size": {
10007
- "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
10008
- "values": [
10009
- "xs",
10010
- "sm",
10011
- "md",
10012
- "lg",
10013
- "xl"
10014
- ],
10015
- "default": "md",
10016
- "description": "Scales padding, text and avatars."
11767
+ "crumbs": {
11768
+ "forwarded": true,
11769
+ "type": "{ label: string; href?: string }[]",
11770
+ "description": "Breadcrumb trail above the title."
10017
11771
  }
10018
11772
  },
10019
- "events": {
10020
- "decline": "Decline button clicked.",
10021
- "answer": "Answer button clicked."
10022
- }
11773
+ "slots": {
11774
+ "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
11775
+ "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
11776
+ "filters": "Left filter column (price, rating, services); Slider, Rating, RadioGroup, Checkbox.",
11777
+ "toolbar": "Search, view switch and sort above the grid; SearchInput, ToggleGroup, Select.",
11778
+ "grid": "Responsive grid of cards; HotelCard or TourCard.",
11779
+ "pager": "Pagination at the bottom; Pagination."
11780
+ },
11781
+ "notes": [
11782
+ "Place inside AppShell; fill only the slots you need.",
11783
+ "The filter column is 260 px wide; on phones put filters in a Drawer yourself."
11784
+ ]
10023
11785
  },
10024
11786
  {
10025
- "name": "AuthSplit",
10026
- "tag": "UiAuthSplit",
10027
- "group": "domain",
10028
- "description": "Two-column sign-in layout with a brand panel on the left and the form on the right.",
11787
+ "name": "PageDetail",
11788
+ "tag": "UiPageDetail",
11789
+ "group": "pages",
11790
+ "description": "Detail page template (hotel, tour): gallery, summary, tabs, history and a booking side card.",
10029
11791
  "props": {
10030
11792
  "title": {
11793
+ "forwarded": true,
10031
11794
  "type": "string",
10032
- "required": true,
10033
- "description": "Form heading."
11795
+ "description": "Page heading. The built-in header renders only when title is set and the header slot is empty."
10034
11796
  },
10035
11797
  "subtitle": {
11798
+ "forwarded": true,
10036
11799
  "type": "string",
10037
- "description": "Text under the heading."
10038
- },
10039
- "logo": {
10040
- "type": "VNode",
10041
- "description": "Logo node above the heading."
11800
+ "description": "Caption under the heading."
10042
11801
  },
10043
- "aside": {
10044
- "type": "VNode",
10045
- "description": "Content of the left brand panel (hidden on narrow screens)."
11802
+ "crumbs": {
11803
+ "forwarded": true,
11804
+ "type": "{ label: string; href?: string }[]",
11805
+ "description": "Breadcrumb trail above the title."
10046
11806
  }
10047
11807
  },
10048
11808
  "slots": {
10049
- "default": "Form content under the heading. React passes it as children."
11809
+ "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
11810
+ "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
11811
+ "gallery": "Main photo with thumbnails; Gallery, Carousel, LazyImage.",
11812
+ "summary": "Name, stars, rating, badges; Card with Badge and Rating.",
11813
+ "tabs": "Description, amenities, reviews; Tabs with Descriptions or Accordion.",
11814
+ "history": "What changed (status, notes, price); Timeline.",
11815
+ "booking": "Right-hand booking card with dates, guests, price and CTA; Card, Select, NumberInput, Button."
10050
11816
  },
10051
11817
  "notes": [
10052
- "logo and aside are props in both Vue and React (pass a VNode / element)."
11818
+ "Place inside AppShell; fill only the slots you need.",
11819
+ "gallery, summary, tabs and history are the main column; booking is the side column."
10053
11820
  ]
10054
11821
  },
10055
11822
  {
10056
- "name": "AuthShowcase",
10057
- "tag": "UiAuthShowcase",
10058
- "group": "domain",
10059
- "description": "Sign-in layout with a media panel: dark photo card with floating avatars, light gradient card with a social-proof pill, or a tinted panel with a glass caption. The default slot is the form.",
11823
+ "name": "PageSettings",
11824
+ "tag": "UiPageSettings",
11825
+ "group": "pages",
11826
+ "description": "Settings template with a section sub-navigation and stacked settings sections.",
10060
11827
  "props": {
10061
- "variant": {
10062
- "type": "'photo' | 'light' | 'tint'",
10063
- "values": [
10064
- "photo",
10065
- "light",
10066
- "tint"
10067
- ],
10068
- "default": "photo",
10069
- "description": "'photo': one framed card, media on the left. 'light': gradient form card, proof pill below, glass caption on the media. 'tint': like light, with a coloured panel, a heading on the media and cyan accent."
10070
- },
10071
11828
  "title": {
11829
+ "forwarded": true,
10072
11830
  "type": "string",
10073
- "required": true,
10074
- "description": "Form heading."
11831
+ "description": "Page heading. The built-in header renders only when title is set and the header slot is empty."
10075
11832
  },
10076
11833
  "subtitle": {
11834
+ "forwarded": true,
10077
11835
  "type": "string",
10078
- "description": "Text under the heading."
10079
- },
10080
- "logo": {
10081
- "type": "VNode",
10082
- "description": "Logo node above the heading."
11836
+ "description": "Caption under the heading."
10083
11837
  },
10084
- "footer": {
10085
- "type": "VNode",
10086
- "description": "Content under the fields, for example \"No account? Sign up\"."
11838
+ "crumbs": {
11839
+ "forwarded": true,
11840
+ "type": "{ label: string; href?: string }[]",
11841
+ "description": "Breadcrumb trail above the title."
11842
+ }
11843
+ },
11844
+ "slots": {
11845
+ "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
11846
+ "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
11847
+ "subnav": "Left section menu; SubNav or Tabs.",
11848
+ "profile": "Profile section; SettingsSection with TextField, PhoneInput.",
11849
+ "notifications": "Delivery channels; SettingsSection with Switch.",
11850
+ "integrations": "Service cards (connected, off, error); IntegrationCard.",
11851
+ "danger": "Irreversible actions; Alert, red Button, ConfirmDialog."
11852
+ },
11853
+ "notes": [
11854
+ "Place inside AppShell; fill only the slots you need."
11855
+ ]
11856
+ },
11857
+ {
11858
+ "name": "PageUserList",
11859
+ "tag": "UiPageUserList",
11860
+ "group": "pages",
11861
+ "description": "User or customer list template: stats, filters, toolbar, table and a right-hand add/edit drawer.",
11862
+ "props": {
11863
+ "title": {
11864
+ "forwarded": true,
11865
+ "type": "string",
11866
+ "description": "Page heading. The built-in header renders only when title is set and the header slot is empty."
10087
11867
  },
10088
- "image": {
11868
+ "subtitle": {
11869
+ "forwarded": true,
10089
11870
  "type": "string",
10090
- "description": "URL of the media image. Without it the panel shows an accent gradient."
11871
+ "description": "Caption under the heading."
10091
11872
  },
10092
- "headline": {
11873
+ "crumbs": {
11874
+ "forwarded": true,
11875
+ "type": "{ label: string; href?: string }[]",
11876
+ "description": "Breadcrumb trail above the title."
11877
+ }
11878
+ },
11879
+ "slots": {
11880
+ "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
11881
+ "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
11882
+ "stats": "Figures above the table; StatStrip.",
11883
+ "filters": "Filter selects in a card; Select.",
11884
+ "toolbar": "Page size, search, export and Add button; Select, SearchInput, Button.",
11885
+ "table": "Users table with checkboxes and actions; DataTable with UserCell, Chip, IconButton.",
11886
+ "drawer": "Side panel rendered in the side column; Drawer with TextField, Select, Button."
11887
+ },
11888
+ "notes": [
11889
+ "Place inside AppShell; fill only the slots you need."
11890
+ ]
11891
+ },
11892
+ {
11893
+ "name": "PageProfile",
11894
+ "tag": "UiPageProfile",
11895
+ "group": "pages",
11896
+ "description": "User profile template: cover header, tabs and two columns of about, activity and plan cards.",
11897
+ "props": {
11898
+ "title": {
11899
+ "forwarded": true,
10093
11900
  "type": "string",
10094
- "description": "Large text on the media panel (photo and tint)."
11901
+ "description": "Page heading. The built-in header renders only when title is set and the header slot is empty."
10095
11902
  },
10096
- "caption": {
11903
+ "subtitle": {
11904
+ "forwarded": true,
10097
11905
  "type": "string",
10098
- "description": "Small text on the media panel (photo) or inside the glass bar (light, tint)."
11906
+ "description": "Caption under the heading."
10099
11907
  },
10100
- "quote": {
11908
+ "crumbs": {
11909
+ "forwarded": true,
11910
+ "type": "{ label: string; href?: string }[]",
11911
+ "description": "Breadcrumb trail above the title."
11912
+ }
11913
+ },
11914
+ "slots": {
11915
+ "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
11916
+ "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
11917
+ "profile": "Cover with avatar, name and meta; ProfileHeader.",
11918
+ "tabs": "Section tabs; PillTabs.",
11919
+ "about": "Left column key-value info; Card with Descriptions.",
11920
+ "activity": "Right column activity feed; Timeline.",
11921
+ "plan": "Right column plan card and upgrade button; Card, Badge, Progress, Button."
11922
+ },
11923
+ "notes": [
11924
+ "Place inside AppShell; fill only the slots you need."
11925
+ ]
11926
+ },
11927
+ {
11928
+ "name": "PageForm",
11929
+ "tag": "UiPageForm",
11930
+ "group": "pages",
11931
+ "description": "Create/edit form template: main column, media, side column and header actions.",
11932
+ "props": {
11933
+ "title": {
11934
+ "forwarded": true,
10101
11935
  "type": "string",
10102
- "description": "Line at the bottom of the media panel; photo only."
10103
- },
10104
- "chips": {
10105
- "type": "string[]",
10106
- "description": "Pill labels inside the glass bar; light and tint."
10107
- },
10108
- "people": {
10109
- "type": "{ name: string; src?: string }[]",
10110
- "description": "Avatars: floating on the photo, stacked in the proof pill."
11936
+ "description": "Page heading. The built-in header renders only when title is set and the header slot is empty."
10111
11937
  },
10112
- "proof": {
11938
+ "subtitle": {
11939
+ "forwarded": true,
10113
11940
  "type": "string",
10114
- "description": "Social-proof title, e.g. \"Join 20k+ users\"; light and tint. Shows the pill under the form."
11941
+ "description": "Caption under the heading."
10115
11942
  },
10116
- "proofHint": {
10117
- "type": "string",
10118
- "description": "Second line of the proof pill."
11943
+ "crumbs": {
11944
+ "forwarded": true,
11945
+ "type": "{ label: string; href?: string }[]",
11946
+ "description": "Breadcrumb trail above the title."
10119
11947
  }
10120
11948
  },
10121
11949
  "slots": {
10122
- "default": "Form fields and buttons. React passes them as children."
11950
+ "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
11951
+ "actions": "Discard, Save draft and Publish buttons in the top-right of the built-in header; Button. Rendered right-aligned on their own when title is not set.",
11952
+ "main": "Main column cards (info, options); Card, TextField, Textarea.",
11953
+ "media": "Below main; upload dropzone; FileUpload or Gallery.",
11954
+ "side": "Side column cards (price, status, tags); Card, NumberInput, Select, ChipInput."
10123
11955
  },
10124
11956
  "notes": [
10125
- "logo, footer, image, people are props in both Vue and React. The media panel is hidden below the form on narrow screens (stacks under it)."
11957
+ "Place inside AppShell; fill only the slots you need."
10126
11958
  ]
10127
11959
  },
10128
11960
  {
10129
- "name": "SocialAuth",
10130
- "tag": "UiSocialAuth",
10131
- "group": "domain",
10132
- "description": "Continue with Google and Apple buttons with an \"or\" divider. Place it under the sign-in form.",
11961
+ "name": "PageOrder",
11962
+ "tag": "UiPageOrder",
11963
+ "group": "pages",
11964
+ "description": "Order/booking details template: status chips, items table, timeline and side info cards.",
10133
11965
  "props": {
10134
- "providers": {
10135
- "type": "('google' | 'apple')[]",
10136
- "default": "['google', 'apple']",
10137
- "description": "Which buttons to show, in order."
10138
- },
10139
- "variant": {
10140
- "type": "'stack' | 'icons'",
10141
- "values": [
10142
- "stack",
10143
- "icons"
10144
- ],
10145
- "default": "stack",
10146
- "description": "'stack': full-width buttons with a label, one per row. 'icons': a row of square icon buttons."
10147
- },
10148
- "divider": {
10149
- "type": "boolean",
10150
- "default": "true",
10151
- "description": "Show the \"or\" line above the buttons."
10152
- },
10153
- "labels": {
10154
- "type": "{ google?: string; apple?: string }",
10155
- "description": "Provider names inserted into \"Continue with {provider}\"."
11966
+ "title": {
11967
+ "forwarded": true,
11968
+ "type": "string",
11969
+ "description": "Page heading. The built-in header renders only when title is set and the header slot is empty."
10156
11970
  },
10157
- "onSelect": {
10158
- "type": "(provider: 'google' | 'apple') => void",
10159
- "description": "Called with the clicked provider. Start your OAuth flow here."
11971
+ "subtitle": {
11972
+ "forwarded": true,
11973
+ "type": "string",
11974
+ "description": "Caption under the heading."
10160
11975
  },
10161
- "size": {
10162
- "type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
10163
- "values": [
10164
- "xs",
10165
- "sm",
10166
- "md",
10167
- "lg",
10168
- "xl"
10169
- ],
10170
- "default": "md",
10171
- "description": "Scales padding, text and avatars."
11976
+ "crumbs": {
11977
+ "forwarded": true,
11978
+ "type": "{ label: string; href?: string }[]",
11979
+ "description": "Breadcrumb trail above the title."
10172
11980
  }
10173
11981
  },
10174
- "events": {
10175
- "select": "A provider button was clicked; payload is \"google\" or \"apple\"."
11982
+ "slots": {
11983
+ "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
11984
+ "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
11985
+ "status": "Payment and fulfillment chips; Chip (tone success, warning, danger).",
11986
+ "items": "Items table with totals; DataTable.",
11987
+ "shipping": "Event timeline; Timeline.",
11988
+ "side": "Customer, address and payment cards; UserCell, Descriptions, Button."
10176
11989
  },
10177
11990
  "notes": [
10178
- "The kit only renders the buttons. The OAuth flow itself is yours."
11991
+ "Place inside AppShell; fill only the slots you need."
10179
11992
  ]
10180
11993
  },
10181
11994
  {
10182
- "name": "PageDashboard",
10183
- "tag": "UiPageDashboard",
11995
+ "name": "PageAccount",
11996
+ "tag": "UiPageAccount",
10184
11997
  "group": "pages",
10185
- "description": "Dashboard template: greeting hero, KPI tiles, occupancy chart, sales funnel, top list and activity feed.",
11998
+ "description": "Account settings template with pill tabs and a swappable panel.",
10186
11999
  "props": {
10187
12000
  "title": {
10188
12001
  "forwarded": true,
@@ -10203,23 +12016,19 @@
10203
12016
  "slots": {
10204
12017
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10205
12018
  "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
10206
- "hero": "Large greeting/plan block; Card variant=\"inverse\" with Ring and a Button.",
10207
- "kpis": "Four key figures; KpiTile, StatsCard or KpiInline.",
10208
- "occupancy": "Per-day occupancy chart; OccupancyChart or MiniChart.",
10209
- "funnel": "Inquiry-to-payment funnel; SalesFunnel.",
10210
- "top": "Revenue leaderboard; DataTable with Progress share bars.",
10211
- "activity": "Recent actions, newest first; Timeline."
12019
+ "tabs": "Section tabs (account, security, billing, notifications); PillTabs.",
12020
+ "panel": "Content of the active tab; Card or SettingsSection with Switch and TextField."
10212
12021
  },
10213
12022
  "notes": [
10214
12023
  "Place inside AppShell; fill only the slots you need.",
10215
- "hero and kpis share a row, as do occupancy/funnel and top/activity; they wrap on narrow screens."
12024
+ "The template does not switch panels by itself: keep the active tab in your own state (PillTabs v-model) and render only that tab content in the panel slot."
10216
12025
  ]
10217
12026
  },
10218
12027
  {
10219
- "name": "PagePatterns",
10220
- "tag": "UiPagePatterns",
12028
+ "name": "PagePricing",
12029
+ "tag": "UiPagePricing",
10221
12030
  "group": "pages",
10222
- "description": "Showcase template combining twelve recurring dashboard card patterns (banner, strips, stat lines, charts, lists).",
12031
+ "description": "Pricing template: billing-period toggle, plan cards and an FAQ.",
10223
12032
  "props": {
10224
12033
  "title": {
10225
12034
  "forwarded": true,
@@ -10240,27 +12049,19 @@
10240
12049
  "slots": {
10241
12050
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10242
12051
  "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
10243
- "hero": "Large banner; HeroBanner.",
10244
- "strip": "One card with four metrics; StatStrip with IconTile.",
10245
- "statlines": "Row of toned stat lines; StatLine (tone brand, sky, success, warning, danger).",
10246
- "chartcard": "Titled chart with menu and period select; ChartCard with PillSelect and OccupancyChart or MiniChart.",
10247
- "tiles": "Selectable tiles plus an add tile; TabTiles.",
10248
- "listrows": "Icon, title and value rows; StatRow.",
10249
- "countries": "Country amount rows; CountryRow.",
10250
- "versus": "Two values with a share bar; VersusBar.",
10251
- "segbar": "Composition bar with legend; SegBar.",
10252
- "activity": "Timeline of events; Timeline.",
10253
- "actioncard": "Card with collapse, refresh and close actions; ActionCard."
12052
+ "toggle": "Monthly/annual switch with a savings badge; Switch, Chip.",
12053
+ "plans": "Plan cards, one marked featured; PricingCard.",
12054
+ "faq": "Questions accordion; Accordion."
10254
12055
  },
10255
12056
  "notes": [
10256
12057
  "Place inside AppShell; fill only the slots you need."
10257
12058
  ]
10258
12059
  },
10259
12060
  {
10260
- "name": "PageCrm",
10261
- "tag": "UiPageCrm",
12061
+ "name": "PageFaq",
12062
+ "tag": "UiPageFaq",
10262
12063
  "group": "pages",
10263
- "description": "CRM template: summary tiles, filters, pipeline board and call queue.",
12064
+ "description": "Help center template: search, categories, answers accordion and a contact block.",
10264
12065
  "props": {
10265
12066
  "title": {
10266
12067
  "forwarded": true,
@@ -10281,20 +12082,20 @@
10281
12082
  "slots": {
10282
12083
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10283
12084
  "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
10284
- "summary": "Tiles above the board (leads, amount, conversion, overdue); StatsCard or KpiTile.",
10285
- "filters": "Status tabs, search and period switch; Tabs, SearchInput, SegmentedControl, FilterChips.",
10286
- "board": "Stage columns with deal cards; PipelineBoard, KanbanColumn, DealCard.",
10287
- "calls": "Recent call queue; CallRow, CallCard, IncomingCall."
12085
+ "search": "Large search field; SearchInput.",
12086
+ "cats": "Category list on the left; vertical PillTabs.",
12087
+ "answers": "Answers on the right; Accordion.",
12088
+ "contact": "Contact cards below; Card, IconTile, Button."
10288
12089
  },
10289
12090
  "notes": [
10290
12091
  "Place inside AppShell; fill only the slots you need."
10291
12092
  ]
10292
12093
  },
10293
12094
  {
10294
- "name": "PageBookings",
10295
- "tag": "UiPageBookings",
12095
+ "name": "PageAnalytics",
12096
+ "tag": "UiPageAnalytics",
10296
12097
  "group": "pages",
10297
- "description": "Bookings list template: stats, toolbar, bulk-action bar, table and pagination.",
12098
+ "description": "Analytics template: period picker, KPI strip, trend charts, a breakdown block and a table. Put Export in actions.",
10298
12099
  "props": {
10299
12100
  "title": {
10300
12101
  "forwarded": true,
@@ -10315,21 +12116,22 @@
10315
12116
  "slots": {
10316
12117
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10317
12118
  "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
10318
- "stats": "Booking figures for the period; StatsCard.",
10319
- "toolbar": "Search, quick filters and export menu above the table; SearchInput, FilterChips, Dropdown.",
10320
- "bulk": "Selection bar shown when rows are selected; Alert with Buttons. Render it conditionally.",
10321
- "table": "Sortable, selectable table; DataTable.",
10322
- "pager": "Page numbers below the table; Pagination."
12119
+ "period": "Period presets and compare toggle; SegmentedControl, Select, Switch.",
12120
+ "kpis": "Headline numbers with deltas; KpiTile, StatLine.",
12121
+ "trend": "Main time series; ChartCard with MiniChart.",
12122
+ "breakdown": "Split by channel or country; ChartCard with SegBar and CountryRow.",
12123
+ "table": "Rows behind the numbers; DataTable."
10323
12124
  },
10324
12125
  "notes": [
10325
- "Place inside AppShell; fill only the slots you need."
12126
+ "Place inside AppShell; fill only the slots you need.",
12127
+ "Trend and breakdown share a row and wrap on narrow screens. Put Export in the actions slot."
10326
12128
  ]
10327
12129
  },
10328
12130
  {
10329
- "name": "PageCatalog",
10330
- "tag": "UiPageCatalog",
12131
+ "name": "PageCalendar",
12132
+ "tag": "UiPageCalendar",
10331
12133
  "group": "pages",
10332
- "description": "Catalog template with a filter sidebar and a card grid (hotels, tours).",
12134
+ "description": "Calendar template: view switch, time grid, mini calendar and event details.",
10333
12135
  "props": {
10334
12136
  "title": {
10335
12137
  "forwarded": true,
@@ -10350,21 +12152,21 @@
10350
12152
  "slots": {
10351
12153
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10352
12154
  "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
10353
- "filters": "Left filter column (price, rating, services); Slider, Rating, RadioGroup, Checkbox.",
10354
- "toolbar": "Search, view switch and sort above the grid; SearchInput, ToggleGroup, Select.",
10355
- "grid": "Responsive grid of cards; HotelCard or TourCard.",
10356
- "pager": "Pagination at the bottom; Pagination."
12155
+ "toolbar": "SegmentedControl, Button, IconButton.",
12156
+ "grid": "Time grid with events; Card with custom grid, or CalendarView for the month.",
12157
+ "mini": "Month picker; Calendar.",
12158
+ "details": "Selected event; Card, Descriptions, Avatar, Button."
10357
12159
  },
10358
12160
  "notes": [
10359
12161
  "Place inside AppShell; fill only the slots you need.",
10360
- "The filter column is 260 px wide; on phones put filters in a Drawer yourself."
12162
+ "The grid sits beside the mini calendar and details; they stack under 860 px."
10361
12163
  ]
10362
12164
  },
10363
12165
  {
10364
- "name": "PageDetail",
10365
- "tag": "UiPageDetail",
12166
+ "name": "PageKanban",
12167
+ "tag": "UiPageKanban",
10366
12168
  "group": "pages",
10367
- "description": "Detail page template (hotel, tour): gallery, summary, tabs, history and a booking side card.",
12169
+ "description": "Kanban template: filters, task board columns and a card detail panel.",
10368
12170
  "props": {
10369
12171
  "title": {
10370
12172
  "forwarded": true,
@@ -10385,22 +12187,20 @@
10385
12187
  "slots": {
10386
12188
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10387
12189
  "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
10388
- "gallery": "Main photo with thumbnails; Gallery, Carousel, LazyImage.",
10389
- "summary": "Name, stars, rating, badges; Card with Badge and Rating.",
10390
- "tabs": "Description, amenities, reviews; Tabs with Descriptions or Accordion.",
10391
- "history": "What changed (status, notes, price); Timeline.",
10392
- "booking": "Right-hand booking card with dates, guests, price and CTA; Card, Select, NumberInput, Button."
12190
+ "filters": "SearchInput, FilterChips, Select.",
12191
+ "board": "Columns with cards; KanbanColumn, KanbanCard.",
12192
+ "detail": "Selected card; Card, Descriptions, Checkbox, Timeline."
10393
12193
  },
10394
12194
  "notes": [
10395
12195
  "Place inside AppShell; fill only the slots you need.",
10396
- "gallery, summary, tabs and history are the main column; booking is the side column."
12196
+ "Board scrolls horizontally inside its area; detail goes below it under 860 px."
10397
12197
  ]
10398
12198
  },
10399
12199
  {
10400
- "name": "PageSettings",
10401
- "tag": "UiPageSettings",
12200
+ "name": "PageBilling",
12201
+ "tag": "UiPageBilling",
10402
12202
  "group": "pages",
10403
- "description": "Settings template with a section sub-navigation and stacked settings sections.",
12203
+ "description": "Billing template: current plan, usage meters, invoices, payment methods and an upgrade card.",
10404
12204
  "props": {
10405
12205
  "title": {
10406
12206
  "forwarded": true,
@@ -10421,21 +12221,22 @@
10421
12221
  "slots": {
10422
12222
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10423
12223
  "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
10424
- "subnav": "Left section menu; SubNav or Tabs.",
10425
- "profile": "Profile section; SettingsSection with TextField, PhoneInput.",
10426
- "notifications": "Delivery channels; SettingsSection with Switch.",
10427
- "integrations": "Service cards (connected, off, error); IntegrationCard.",
10428
- "danger": "Irreversible actions; Alert, red Button, ConfirmDialog."
12224
+ "plan": "Current plan; Card with Badge and Buttons.",
12225
+ "usage": "Usage meters; Progress.",
12226
+ "invoices": "Invoices; DataTable.",
12227
+ "methods": "Saved cards; Card, IconTile, Badge.",
12228
+ "upgrade": "Upgrade call to action; Card variant=\"inverse\" or PricingCard."
10429
12229
  },
10430
12230
  "notes": [
10431
- "Place inside AppShell; fill only the slots you need."
12231
+ "Place inside AppShell; fill only the slots you need.",
12232
+ "Plan, usage and invoices share the main column; methods and upgrade form the side column."
10432
12233
  ]
10433
12234
  },
10434
12235
  {
10435
- "name": "PageUserList",
10436
- "tag": "UiPageUserList",
12236
+ "name": "PageTeam",
12237
+ "tag": "UiPageTeam",
10437
12238
  "group": "pages",
10438
- "description": "User or customer list template: stats, filters, toolbar, table and a right-hand add/edit drawer.",
12239
+ "description": "Team template: member stats, members table, roles and permissions matrix, and an invite form.",
10439
12240
  "props": {
10440
12241
  "title": {
10441
12242
  "forwarded": true,
@@ -10456,21 +12257,21 @@
10456
12257
  "slots": {
10457
12258
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10458
12259
  "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
10459
- "stats": "Figures above the table; StatStrip.",
10460
- "filters": "Filter selects in a card; Select.",
10461
- "toolbar": "Page size, search, export and Add button; Select, SearchInput, Button.",
10462
- "table": "Users table with checkboxes and actions; DataTable with UserCell, Chip, IconButton.",
10463
- "drawer": "Side panel rendered in the side column; Drawer with TextField, Select, Button."
12260
+ "stats": "Counters; KpiTile, StatsCard.",
12261
+ "members": "Members; DataTable with UserCell, Select, Badge.",
12262
+ "roles": "Permissions matrix; DataTable with Checkbox cells.",
12263
+ "invite": "Invite form; Card, TextField, Select, Button."
10464
12264
  },
10465
12265
  "notes": [
10466
- "Place inside AppShell; fill only the slots you need."
12266
+ "Place inside AppShell; fill only the slots you need.",
12267
+ "Members and roles share the main column; the invite form is the side column."
10467
12268
  ]
10468
12269
  },
10469
12270
  {
10470
- "name": "PageProfile",
10471
- "tag": "UiPageProfile",
12271
+ "name": "PageIntegrations",
12272
+ "tag": "UiPageIntegrations",
10472
12273
  "group": "pages",
10473
- "description": "User profile template: cover header, tabs and two columns of about, activity and plan cards.",
12274
+ "description": "Integrations template: connection cards, API keys and webhooks.",
10474
12275
  "props": {
10475
12276
  "title": {
10476
12277
  "forwarded": true,
@@ -10491,21 +12292,21 @@
10491
12292
  "slots": {
10492
12293
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10493
12294
  "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
10494
- "profile": "Cover with avatar, name and meta; ProfileHeader.",
10495
- "tabs": "Section tabs; PillTabs.",
10496
- "about": "Left column key-value info; Card with Descriptions.",
10497
- "activity": "Right column activity feed; Timeline.",
10498
- "plan": "Right column plan card and upgrade button; Card, Badge, Progress, Button."
12295
+ "filters": "SearchInput, FilterChips.",
12296
+ "connections": "IntegrationCard grid.",
12297
+ "keys": "Keys; DataTable with CopyButton and IconButton.",
12298
+ "webhooks": "Webhooks list; Card, Switch, Chip."
10499
12299
  },
10500
12300
  "notes": [
10501
- "Place inside AppShell; fill only the slots you need."
12301
+ "Place inside AppShell; fill only the slots you need.",
12302
+ "Keys and webhooks share a row and wrap on narrow screens."
10502
12303
  ]
10503
12304
  },
10504
12305
  {
10505
- "name": "PageForm",
10506
- "tag": "UiPageForm",
12306
+ "name": "PageSearch",
12307
+ "tag": "UiPageSearch",
10507
12308
  "group": "pages",
10508
- "description": "Create/edit form template: main column, media, side column and header actions.",
12309
+ "description": "Search template: query field, filter sidebar, result groups and an empty state.",
10509
12310
  "props": {
10510
12311
  "title": {
10511
12312
  "forwarded": true,
@@ -10525,20 +12326,22 @@
10525
12326
  },
10526
12327
  "slots": {
10527
12328
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10528
- "actions": "Discard, Save draft and Publish buttons in the top-right of the built-in header; Button. Rendered right-aligned on their own when title is not set.",
10529
- "main": "Main column cards (info, options); Card, TextField, Textarea.",
10530
- "media": "Below main; upload dropzone; FileUpload or Gallery.",
10531
- "side": "Side column cards (price, status, tags); Card, NumberInput, Select, ChipInput."
12329
+ "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
12330
+ "search": "SearchInput, Tabs.",
12331
+ "filters": "Filters; Card, Checkbox, Select.",
12332
+ "results": "Result groups; Card, Chip, Divider.",
12333
+ "empty": "Shown only when there are no results; EmptyState."
10532
12334
  },
10533
12335
  "notes": [
10534
- "Place inside AppShell; fill only the slots you need."
12336
+ "Place inside AppShell; fill only the slots you need.",
12337
+ "Filters sit left of the results and stack above them under 860 px. Fill empty only when there are no results."
10535
12338
  ]
10536
12339
  },
10537
12340
  {
10538
- "name": "PageOrder",
10539
- "tag": "UiPageOrder",
12341
+ "name": "PageNotifications",
12342
+ "tag": "UiPageNotifications",
10540
12343
  "group": "pages",
10541
- "description": "Order/booking details template: status chips, items table, timeline and side info cards.",
12344
+ "description": "Notifications template: filters, a feed grouped by day and an empty state. Put Mark all read in actions.",
10542
12345
  "props": {
10543
12346
  "title": {
10544
12347
  "forwarded": true,
@@ -10559,20 +12362,20 @@
10559
12362
  "slots": {
10560
12363
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10561
12364
  "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
10562
- "status": "Payment and fulfillment chips; Chip (tone success, warning, danger).",
10563
- "items": "Items table with totals; DataTable.",
10564
- "shipping": "Event timeline; Timeline.",
10565
- "side": "Customer, address and payment cards; UserCell, Descriptions, Button."
12365
+ "filters": "Filter chips such as all, unread and mentions; FilterChips.",
12366
+ "feed": "Notification rows grouped by day; Card, IconTile, Badge, Divider.",
12367
+ "empty": "Shown instead of the feed when nothing matches; EmptyState."
10566
12368
  },
10567
12369
  "notes": [
10568
- "Place inside AppShell; fill only the slots you need."
12370
+ "Place inside AppShell; fill only the slots you need.",
12371
+ "Fill empty only when the feed has no rows. Mark all read goes in the actions slot."
10569
12372
  ]
10570
12373
  },
10571
12374
  {
10572
- "name": "PageAccount",
10573
- "tag": "UiPageAccount",
12375
+ "name": "PageInbox",
12376
+ "tag": "UiPageInbox",
10574
12377
  "group": "pages",
10575
- "description": "Account settings template with pill tabs and a swappable panel.",
12378
+ "description": "Inbox template: filters and conversation list, the open thread with a composer, and a customer panel.",
10576
12379
  "props": {
10577
12380
  "title": {
10578
12381
  "forwarded": true,
@@ -10593,19 +12396,22 @@
10593
12396
  "slots": {
10594
12397
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10595
12398
  "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
10596
- "tabs": "Section tabs (account, security, billing, notifications); PillTabs.",
10597
- "panel": "Content of the active tab; Card or SettingsSection with Switch and TextField."
12399
+ "filters": "Search and folder chips above the list; SearchInput, FilterChips.",
12400
+ "list": "Conversation rows with unread marks; Card, Avatar, Badge.",
12401
+ "thread": "Messages of the open conversation; Card, Avatar.",
12402
+ "composer": "Reply field and send button; Textarea, Button.",
12403
+ "customer": "Customer details; ContactPanel, Descriptions, Tag."
10598
12404
  },
10599
12405
  "notes": [
10600
12406
  "Place inside AppShell; fill only the slots you need.",
10601
- "The template does not switch panels by itself: keep the active tab in your own state (PillTabs v-model) and render only that tab content in the panel slot."
12407
+ "List, thread and customer panel sit side by side and stack in that order at 860px and below. Keep the selected conversation in your own state."
10602
12408
  ]
10603
12409
  },
10604
12410
  {
10605
- "name": "PagePricing",
10606
- "tag": "UiPagePricing",
12411
+ "name": "PageCheckout",
12412
+ "tag": "UiPageCheckout",
10607
12413
  "group": "pages",
10608
- "description": "Pricing template: billing-period toggle, plan cards and an FAQ.",
12414
+ "description": "Checkout template: step indicator, cart items, delivery address, payment and an order summary column.",
10609
12415
  "props": {
10610
12416
  "title": {
10611
12417
  "forwarded": true,
@@ -10626,19 +12432,22 @@
10626
12432
  "slots": {
10627
12433
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10628
12434
  "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
10629
- "toggle": "Monthly/annual switch with a savings badge; Switch, Chip.",
10630
- "plans": "Plan cards, one marked featured; PricingCard.",
10631
- "faq": "Questions accordion; Accordion."
12435
+ "steps": "Checkout steps above the content; Stepper.",
12436
+ "items": "Cart lines with quantity and price; Card with NumberInput.",
12437
+ "address": "Contact and delivery fields; Card with TextField and Select.",
12438
+ "payment": "Payment method and card fields; OptionCards, TextField.",
12439
+ "summary": "Totals, promo code and the pay button; Card, Descriptions, Button."
10632
12440
  },
10633
12441
  "notes": [
10634
- "Place inside AppShell; fill only the slots you need."
12442
+ "Place inside AppShell; fill only the slots you need.",
12443
+ "Summary sits in the side column and drops below the form on narrow screens."
10635
12444
  ]
10636
12445
  },
10637
12446
  {
10638
- "name": "PageFaq",
10639
- "tag": "UiPageFaq",
12447
+ "name": "PageOnboarding",
12448
+ "tag": "UiPageOnboarding",
10640
12449
  "group": "pages",
10641
- "description": "Help center template: search, categories, answers accordion and a contact block.",
12450
+ "description": "Onboarding template: progress block, active step content, setup checklist and a column of tips.",
10642
12451
  "props": {
10643
12452
  "title": {
10644
12453
  "forwarded": true,
@@ -10659,13 +12468,33 @@
10659
12468
  "slots": {
10660
12469
  "header": "Custom page header; replaces the built-in title/subtitle/crumbs header.",
10661
12470
  "actions": "Buttons on the right of the built-in header. With a title they sit beside it; without a title they render alone, right-aligned (unless the header slot is filled).",
10662
- "search": "Large search field; SearchInput.",
10663
- "cats": "Category list on the left; vertical PillTabs.",
10664
- "answers": "Answers on the right; Accordion.",
10665
- "contact": "Contact cards below; Card, IconTile, Button."
12471
+ "progress": "Stepper and a completion bar above the content; Stepper, Progress.",
12472
+ "steps": "Content of the active step; Card with form fields.",
12473
+ "checklist": "Remaining setup tasks; Card with Checkbox rows.",
12474
+ "tips": "Side column with help cards; Card, IconTile, Button."
10666
12475
  },
10667
12476
  "notes": [
10668
- "Place inside AppShell; fill only the slots you need."
12477
+ "Place inside AppShell; fill only the slots you need.",
12478
+ "Keep the active step in your own state; the template does not switch steps. Steps and checklist share the main column, tips go to the side and stack below it on narrow screens."
12479
+ ]
12480
+ },
12481
+ {
12482
+ "name": "PageLanding",
12483
+ "tag": "UiPageLanding",
12484
+ "group": "pages",
12485
+ "description": "Landing template: hero, logo strip, features, social proof, pricing teaser, call to action and footer. Used without the app shell.",
12486
+ "props": {},
12487
+ "slots": {
12488
+ "hero": "Hero block; HeroBanner, Card, Button.",
12489
+ "logos": "Partner row; Chip or Text.",
12490
+ "features": "Feature cards; Card, IconTile.",
12491
+ "proof": "Numbers and quotes; StatStrip, Card, Avatar.",
12492
+ "pricing": "Plan cards; PricingCard.",
12493
+ "cta": "Closing block; Card variant=\"gradient\", Button.",
12494
+ "footer": "Page footer; Footer."
12495
+ },
12496
+ "notes": [
12497
+ "Landing does not use the app shell: render it on its own page. Blocks stack in one column; each block may use its own grid and wraps on narrow screens."
10669
12498
  ]
10670
12499
  },
10671
12500
  {