eddyter 1.3.43 → 1.3.44

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.
@@ -0,0 +1,21 @@
1
+ export interface UserStats {
2
+ totalLoads: number;
3
+ totalCharacters: number;
4
+ totalWords: number;
5
+ lastSyncedAt: string | null;
6
+ }
7
+ export interface UserStatsResponse {
8
+ success: boolean;
9
+ data: UserStats;
10
+ }
11
+ export declare class AnalyticsAPI {
12
+ /**
13
+ * Get user stats by license key (API key)
14
+ * Returns total loads, characters, words for the user
15
+ */
16
+ static getUserStats(apiKey: string): Promise<UserStats>;
17
+ /**
18
+ * Track editor load - call this when the editor initializes
19
+ */
20
+ static trackEditorLoad(apiKey: string): Promise<void>;
21
+ }
@@ -0,0 +1,27 @@
1
+ export interface BugReport {
2
+ id: string;
3
+ title: string;
4
+ description: string;
5
+ errorMessage?: string;
6
+ status: string;
7
+ createdAt: string;
8
+ attachments?: {
9
+ fileName: string;
10
+ fileUrl: string;
11
+ }[];
12
+ adminResponse?: string;
13
+ }
14
+ export interface CreateBugReportData {
15
+ title: string;
16
+ description: string;
17
+ errorMessage?: string;
18
+ attachments?: {
19
+ fileName: string;
20
+ fileUrl: string;
21
+ }[];
22
+ }
23
+ export declare class BugReportAPI {
24
+ static createBugReport(data: CreateBugReportData, apiKey?: string): Promise<BugReport>;
25
+ static getUserBugReports(apiKey?: string): Promise<BugReport[]>;
26
+ static getBugReportById(id: string, apiKey?: string): Promise<BugReport>;
27
+ }
@@ -0,0 +1,26 @@
1
+ export interface Feedback {
2
+ id: string;
3
+ rating: number;
4
+ comment?: string;
5
+ isRead: boolean;
6
+ createdAt: string;
7
+ }
8
+ export interface CreateFeedbackData {
9
+ rating: number;
10
+ comment?: string;
11
+ }
12
+ export declare class FeedbackAPI {
13
+ static createFeedback(data: CreateFeedbackData, apiKey?: string): Promise<Feedback>;
14
+ /**
15
+ * Check if the current user has already submitted feedback
16
+ */
17
+ static hasUserSubmittedFeedback(apiKey?: string): Promise<boolean>;
18
+ /**
19
+ * Get feedback eligibility - combined endpoint returning hasSubmitted + totalLoads
20
+ * Use this instead of calling hasUserSubmittedFeedback + AnalyticsAPI.getUserStats separately
21
+ */
22
+ static getFeedbackEligibility(apiKey?: string): Promise<{
23
+ hasSubmitted: boolean;
24
+ totalLoads: number;
25
+ }>;
26
+ }
@@ -511,7 +511,9 @@ video {
511
511
  :root {
512
512
  --cteditorf47ac10b-background: 0 0% 100%;
513
513
  --cteditorf47ac10b-foreground: 240 6% 10%;
514
- --cteditorf47ac10b-secondary: 0 0% 92%;
514
+ --cteditorf47ac10b-secondary: 0 0% 95.3%;
515
+ --cteditorf47ac10b-e9e9e9: 0 0% 91.4%;
516
+ --cteditorf47ac10b-main-secondary:0 0% 89.9%;
515
517
  --cteditorf47ac10b-body: 0 0% 92%;
516
518
  --cteditorf47ac10b-card: 0 0% 100%;
517
519
  --cteditorf47ac10b-card-foreground: 0 0% 3.9%;
@@ -535,12 +537,15 @@ video {
535
537
  --cteditorf47ac10b-chart-4: 43 74% 66%;
536
538
  --cteditorf47ac10b-chart-5: 27 87% 67%;
537
539
  --cteditorf47ac10b-radius: 0.5rem;
540
+ --cteditorf47ac10b-main-background: 0 0% 96.5%;
541
+ --cteditorf47ac10b-dcdcdc: 0 0% 86.3%;
538
542
  }
539
543
 
540
544
  .dark {
541
545
  --cteditorf47ac10b-background: 240 6% 10%;
542
546
  --cteditorf47ac10b-foreground: 0 0% 100%;
543
547
  --cteditorf47ac10b-secondary: 240 7% 15%;
548
+ --cteditorf47ac10b-main-secondary: 0 0% 16.1%;
544
549
  --cteditorf47ac10b-body: 240 10% 4%;
545
550
  --cteditorf47ac10b-card: 0 0% 14.9%;
546
551
  --cteditorf47ac10b-card-foreground: 0 0% 98%;
@@ -563,6 +568,7 @@ video {
563
568
  --cteditorf47ac10b-chart-3: 30 80% 55%;
564
569
  --cteditorf47ac10b-chart-4: 280 65% 60%;
565
570
  --cteditorf47ac10b-chart-5: 340 75% 55%;
571
+ --cteditorf47ac10b-main-background: 0 0% 12.9%;
566
572
  }
567
573
 
568
574
  .\!cteditor-sr-only{
@@ -958,9 +964,9 @@ video {
958
964
  height: 2rem !important;
959
965
  }
960
966
 
961
- .\!cteditor-size-\[16px\]{
962
- width: 16px !important;
963
- height: 16px !important;
967
+ .\!cteditor-size-\[14px\]{
968
+ width: 14px !important;
969
+ height: 14px !important;
964
970
  }
965
971
 
966
972
  .\!cteditor-size-\[18px\]{
@@ -1231,6 +1237,10 @@ video {
1231
1237
  min-height: 1.25rem;
1232
1238
  }
1233
1239
 
1240
+ .cteditor-min-h-\[100px\]{
1241
+ min-height: 100px;
1242
+ }
1243
+
1234
1244
  .cteditor-min-h-\[120px\]{
1235
1245
  min-height: 120px;
1236
1246
  }
@@ -1423,6 +1433,10 @@ video {
1423
1433
  max-width: 24rem;
1424
1434
  }
1425
1435
 
1436
+ .cteditor-max-w-\[150px\]{
1437
+ max-width: 150px;
1438
+ }
1439
+
1426
1440
  .cteditor-max-w-\[435px\]{
1427
1441
  max-width: 435px;
1428
1442
  }
@@ -1625,6 +1639,10 @@ video {
1625
1639
  align-items: flex-start;
1626
1640
  }
1627
1641
 
1642
+ .cteditor-items-end{
1643
+ align-items: flex-end;
1644
+ }
1645
+
1628
1646
  .cteditor-items-center{
1629
1647
  align-items: center;
1630
1648
  }
@@ -1685,6 +1703,10 @@ video {
1685
1703
  gap: 1rem;
1686
1704
  }
1687
1705
 
1706
+ .cteditor-gap-6{
1707
+ gap: 1.5rem;
1708
+ }
1709
+
1688
1710
  .cteditor-space-x-0 > :not([hidden]) ~ :not([hidden]){
1689
1711
  --tw-space-x-reverse: 0;
1690
1712
  margin-right: calc(0px * var(--tw-space-x-reverse));
@@ -1991,6 +2013,10 @@ video {
1991
2013
  border-color: hsl(var(--cteditorf47ac10b-destructive) / 0.2);
1992
2014
  }
1993
2015
 
2016
+ .cteditor-border-destructive\/50{
2017
+ border-color: hsl(var(--cteditorf47ac10b-destructive) / 0.5);
2018
+ }
2019
+
1994
2020
  .cteditor-border-foreground{
1995
2021
  border-color: hsl(var(--cteditorf47ac10b-foreground));
1996
2022
  }
@@ -2062,6 +2088,14 @@ video {
2062
2088
  border-color: hsl(var(--cteditorf47ac10b-input));
2063
2089
  }
2064
2090
 
2091
+ .cteditor-border-main-background{
2092
+ border-color: hsl(var(--cteditorf47ac10b-main-background));
2093
+ }
2094
+
2095
+ .cteditor-border-muted-foreground\/25{
2096
+ border-color: hsl(var(--cteditorf47ac10b-muted-foreground) / 0.25);
2097
+ }
2098
+
2065
2099
  .cteditor-border-primary{
2066
2100
  border-color: hsl(var(--cteditorf47ac10b-primary));
2067
2101
  }
@@ -2127,10 +2161,6 @@ video {
2127
2161
  border-top-color: transparent;
2128
2162
  }
2129
2163
 
2130
- .\!cteditor-bg-accent{
2131
- background-color: hsl(var(--cteditorf47ac10b-accent)) !important;
2132
- }
2133
-
2134
2164
  .\!cteditor-bg-foreground\/10{
2135
2165
  background-color: hsl(var(--cteditorf47ac10b-foreground) / 0.1) !important;
2136
2166
  }
@@ -2139,12 +2169,8 @@ video {
2139
2169
  background-color: hsl(var(--cteditorf47ac10b-foreground) / 0.15) !important;
2140
2170
  }
2141
2171
 
2142
- .\!cteditor-bg-foreground\/5{
2143
- background-color: hsl(var(--cteditorf47ac10b-foreground) / 0.05) !important;
2144
- }
2145
-
2146
- .\!cteditor-bg-secondary{
2147
- background-color: hsl(var(--cteditorf47ac10b-secondary)) !important;
2172
+ .\!cteditor-bg-main-secondary{
2173
+ background-color: hsl(var(--cteditorf47ac10b-main-secondary)) !important;
2148
2174
  }
2149
2175
 
2150
2176
  .cteditor-bg-\[\#1a1a1a\]{
@@ -2315,6 +2341,14 @@ video {
2315
2341
  background-color: rgb(34 197 94 / 0.1);
2316
2342
  }
2317
2343
 
2344
+ .cteditor-bg-main-background{
2345
+ background-color: hsl(var(--cteditorf47ac10b-main-background));
2346
+ }
2347
+
2348
+ .cteditor-bg-main-secondary{
2349
+ background-color: hsl(var(--cteditorf47ac10b-main-secondary));
2350
+ }
2351
+
2318
2352
  .cteditor-bg-muted{
2319
2353
  background-color: hsl(var(--cteditorf47ac10b-muted));
2320
2354
  }
@@ -2380,10 +2414,6 @@ video {
2380
2414
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
2381
2415
  }
2382
2416
 
2383
- .cteditor-bg-white\/90{
2384
- background-color: rgb(255 255 255 / 0.9);
2385
- }
2386
-
2387
2417
  .cteditor-bg-yellow-50{
2388
2418
  --tw-bg-opacity: 1;
2389
2419
  background-color: rgb(254 252 232 / var(--tw-bg-opacity, 1));
@@ -2411,12 +2441,6 @@ video {
2411
2441
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important;
2412
2442
  }
2413
2443
 
2414
- .cteditor-from-background{
2415
- --tw-gradient-from: hsl(var(--cteditorf47ac10b-background)) var(--tw-gradient-from-position);
2416
- --tw-gradient-to: hsl(var(--cteditorf47ac10b-background) / 0) var(--tw-gradient-to-position);
2417
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
2418
- }
2419
-
2420
2444
  .cteditor-from-foreground\/0{
2421
2445
  --tw-gradient-from: hsl(var(--cteditorf47ac10b-foreground) / 0) var(--tw-gradient-from-position);
2422
2446
  --tw-gradient-to: hsl(var(--cteditorf47ac10b-foreground) / 0) var(--tw-gradient-to-position);
@@ -2439,19 +2463,10 @@ video {
2439
2463
  --tw-gradient-stops: var(--tw-gradient-from), hsl(var(--cteditorf47ac10b-foreground) / 0.15) var(--tw-gradient-via-position), var(--tw-gradient-to);
2440
2464
  }
2441
2465
 
2442
- .cteditor-via-primary\/10{
2443
- --tw-gradient-to: hsl(var(--cteditorf47ac10b-primary) / 0) var(--tw-gradient-to-position);
2444
- --tw-gradient-stops: var(--tw-gradient-from), hsl(var(--cteditorf47ac10b-primary) / 0.1) var(--tw-gradient-via-position), var(--tw-gradient-to);
2445
- }
2446
-
2447
2466
  .\!cteditor-to-foreground\/0{
2448
2467
  --tw-gradient-to: hsl(var(--cteditorf47ac10b-foreground) / 0) var(--tw-gradient-to-position) !important;
2449
2468
  }
2450
2469
 
2451
- .cteditor-to-background{
2452
- --tw-gradient-to: hsl(var(--cteditorf47ac10b-background)) var(--tw-gradient-to-position);
2453
- }
2454
-
2455
2470
  .cteditor-to-foreground\/0{
2456
2471
  --tw-gradient-to: hsl(var(--cteditorf47ac10b-foreground) / 0) var(--tw-gradient-to-position);
2457
2472
  }
@@ -2464,6 +2479,10 @@ video {
2464
2479
  fill: currentColor;
2465
2480
  }
2466
2481
 
2482
+ .cteditor-fill-yellow-400{
2483
+ fill: #facc15;
2484
+ }
2485
+
2467
2486
  .cteditor-object-contain{
2468
2487
  -o-object-fit: contain;
2469
2488
  object-fit: contain;
@@ -2967,6 +2986,14 @@ video {
2967
2986
  color: hsl(var(--cteditorf47ac10b-destructive-foreground));
2968
2987
  }
2969
2988
 
2989
+ .cteditor-text-destructive\/80{
2990
+ color: hsl(var(--cteditorf47ac10b-destructive) / 0.8);
2991
+ }
2992
+
2993
+ .cteditor-text-destructive\/90{
2994
+ color: hsl(var(--cteditorf47ac10b-destructive) / 0.9);
2995
+ }
2996
+
2970
2997
  .cteditor-text-foreground{
2971
2998
  color: hsl(var(--cteditorf47ac10b-foreground));
2972
2999
  }
@@ -3047,6 +3074,10 @@ video {
3047
3074
  color: hsl(var(--cteditorf47ac10b-muted-foreground));
3048
3075
  }
3049
3076
 
3077
+ .cteditor-text-muted-foreground\/40{
3078
+ color: hsl(var(--cteditorf47ac10b-muted-foreground) / 0.4);
3079
+ }
3080
+
3050
3081
  .cteditor-text-muted-foreground\/60{
3051
3082
  color: hsl(var(--cteditorf47ac10b-muted-foreground) / 0.6);
3052
3083
  }
@@ -3121,6 +3152,11 @@ video {
3121
3152
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
3122
3153
  }
3123
3154
 
3155
+ .cteditor-text-yellow-400{
3156
+ --tw-text-opacity: 1;
3157
+ color: rgb(250 204 21 / var(--tw-text-opacity, 1));
3158
+ }
3159
+
3124
3160
  .cteditor-text-yellow-500{
3125
3161
  --tw-text-opacity: 1;
3126
3162
  color: rgb(234 179 8 / var(--tw-text-opacity, 1));
@@ -3665,6 +3701,54 @@ body .EmojiPickerReact{
3665
3701
  --epr-category-label-text-color:hsl(var(--cteditorf47ac10b-foreground));
3666
3702
  }
3667
3703
 
3704
+ /* Editor spacing rules - override Tailwind's preflight reset for proper block spacing */
3705
+
3706
+ .cteditor-content h1,
3707
+ .cteditor-content h2,
3708
+ .cteditor-content h3,
3709
+ .cteditor-content h4,
3710
+ .cteditor-content h5,
3711
+ .cteditor-content h6 {
3712
+ margin-top: 0.83em !important;
3713
+ margin-bottom: 0.5em !important;
3714
+ }
3715
+
3716
+ .cteditor-content h1:first-child,
3717
+ .cteditor-content h2:first-child,
3718
+ .cteditor-content h3:first-child,
3719
+ .cteditor-content h4:first-child,
3720
+ .cteditor-content h5:first-child,
3721
+ .cteditor-content h6:first-child {
3722
+ margin-top: 0 !important;
3723
+ }
3724
+
3725
+ .cteditor-content code + h1,
3726
+ .cteditor-content code + h2,
3727
+ .cteditor-content code + h3,
3728
+ .cteditor-content code + h4,
3729
+ .cteditor-content code + h5,
3730
+ .cteditor-content code + h6 {
3731
+ margin-top: 1.5em !important;
3732
+ }
3733
+
3734
+ .cteditor-content code + p {
3735
+ margin-top: 1em !important;
3736
+ }
3737
+
3738
+ .cteditor-content p + p {
3739
+ margin-top: 1em !important;
3740
+ }
3741
+
3742
+ .cteditor-content p + code,
3743
+ .cteditor-content h1 + code,
3744
+ .cteditor-content h2 + code,
3745
+ .cteditor-content h3 + code,
3746
+ .cteditor-content h4 + code,
3747
+ .cteditor-content h5 + code,
3748
+ .cteditor-content h6 + code {
3749
+ margin-top: 0.5em !important;
3750
+ }
3751
+
3668
3752
  .\*\:cteditor-size-5 > *{
3669
3753
  width: 1.25rem;
3670
3754
  height: 1.25rem;
@@ -3732,6 +3816,10 @@ body .EmojiPickerReact{
3732
3816
  border-color: rgb(187 247 208 / var(--tw-border-opacity, 1));
3733
3817
  }
3734
3818
 
3819
+ .hover\:cteditor-border-muted-foreground\/50:hover{
3820
+ border-color: hsl(var(--cteditorf47ac10b-muted-foreground) / 0.5);
3821
+ }
3822
+
3735
3823
  .hover\:cteditor-border-primary:hover{
3736
3824
  border-color: hsl(var(--cteditorf47ac10b-primary));
3737
3825
  }
@@ -3844,6 +3932,10 @@ body .EmojiPickerReact{
3844
3932
  background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1));
3845
3933
  }
3846
3934
 
3935
+ .hover\:cteditor-bg-main-secondary:hover{
3936
+ background-color: hsl(var(--cteditorf47ac10b-main-secondary));
3937
+ }
3938
+
3847
3939
  .hover\:cteditor-bg-primary:hover{
3848
3940
  background-color: hsl(var(--cteditorf47ac10b-primary));
3849
3941
  }
@@ -3875,21 +3967,6 @@ body .EmojiPickerReact{
3875
3967
  background-color: hsl(var(--cteditorf47ac10b-secondary) / 0.8);
3876
3968
  }
3877
3969
 
3878
- .hover\:cteditor-from-background\/80:hover{
3879
- --tw-gradient-from: hsl(var(--cteditorf47ac10b-background) / 0.8) var(--tw-gradient-from-position);
3880
- --tw-gradient-to: hsl(var(--cteditorf47ac10b-background) / 0) var(--tw-gradient-to-position);
3881
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
3882
- }
3883
-
3884
- .hover\:cteditor-via-primary\/10:hover{
3885
- --tw-gradient-to: hsl(var(--cteditorf47ac10b-primary) / 0) var(--tw-gradient-to-position);
3886
- --tw-gradient-stops: var(--tw-gradient-from), hsl(var(--cteditorf47ac10b-primary) / 0.1) var(--tw-gradient-via-position), var(--tw-gradient-to);
3887
- }
3888
-
3889
- .hover\:cteditor-to-background\/80:hover{
3890
- --tw-gradient-to: hsl(var(--cteditorf47ac10b-background) / 0.8) var(--tw-gradient-to-position);
3891
- }
3892
-
3893
3970
  .hover\:cteditor-text-accent-foreground:hover{
3894
3971
  color: hsl(var(--cteditorf47ac10b-accent-foreground));
3895
3972
  }
@@ -3903,6 +3980,10 @@ body .EmojiPickerReact{
3903
3980
  color: rgb(30 64 175 / var(--tw-text-opacity, 1));
3904
3981
  }
3905
3982
 
3983
+ .hover\:cteditor-text-destructive:hover{
3984
+ color: hsl(var(--cteditorf47ac10b-destructive));
3985
+ }
3986
+
3906
3987
  .hover\:cteditor-text-destructive-foreground:hover{
3907
3988
  color: hsl(var(--cteditorf47ac10b-destructive-foreground));
3908
3989
  }
@@ -3944,6 +4025,10 @@ body .EmojiPickerReact{
3944
4025
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
3945
4026
  }
3946
4027
 
4028
+ .hover\:cteditor-text-yellow-400\/60:hover{
4029
+ color: rgb(250 204 21 / 0.6);
4030
+ }
4031
+
3947
4032
  .hover\:cteditor-underline:hover{
3948
4033
  text-decoration-line: underline;
3949
4034
  }
@@ -4340,10 +4425,6 @@ body .EmojiPickerReact{
4340
4425
  background-color: rgb(69 26 3 / 0.5);
4341
4426
  }
4342
4427
 
4343
- .dark\:cteditor-bg-background:is(.cteditor-dark *){
4344
- background-color: hsl(var(--cteditorf47ac10b-background));
4345
- }
4346
-
4347
4428
  .dark\:cteditor-bg-blue-900\/30:is(.cteditor-dark *){
4348
4429
  background-color: rgb(30 58 138 / 0.3);
4349
4430
  }
@@ -4542,6 +4623,10 @@ body .EmojiPickerReact{
4542
4623
  width: 28rem;
4543
4624
  }
4544
4625
 
4626
+ .sm\:cteditor-max-w-\[450px\]{
4627
+ max-width: 450px;
4628
+ }
4629
+
4545
4630
  .sm\:cteditor-max-w-\[500px\]{
4546
4631
  max-width: 500px;
4547
4632
  }
@@ -4619,10 +4704,6 @@ body .EmojiPickerReact{
4619
4704
  white-space: nowrap;
4620
4705
  }
4621
4706
 
4622
- .md\:\!cteditor-bg-secondary{
4623
- background-color: hsl(var(--cteditorf47ac10b-secondary)) !important;
4624
- }
4625
-
4626
4707
  .md\:cteditor-p-2{
4627
4708
  padding: 0.5rem;
4628
4709
  }
@@ -5423,6 +5504,28 @@ body .EmojiPickerReact{
5423
5504
  margin-top: 0;
5424
5505
  }
5425
5506
 
5507
+ /* Heading after code block needs extra space */
5508
+ .cteditor-content code + h1,
5509
+ .cteditor-content code + h2,
5510
+ .cteditor-content code + h3,
5511
+ .cteditor-content code + h4,
5512
+ .cteditor-content code + h5,
5513
+ .cteditor-content code + h6,
5514
+ .cteditor-content code.PlaygroundEditorTheme__code + h1,
5515
+ .cteditor-content code.PlaygroundEditorTheme__code + h2,
5516
+ .cteditor-content code.PlaygroundEditorTheme__code + h3,
5517
+ .cteditor-content code.PlaygroundEditorTheme__code + h4,
5518
+ .cteditor-content code.PlaygroundEditorTheme__code + h5,
5519
+ .cteditor-content code.PlaygroundEditorTheme__code + h6 {
5520
+ margin-top: 1.5em !important;
5521
+ }
5522
+
5523
+ /* Paragraph after code block needs spacing */
5524
+ .cteditor-content code + p,
5525
+ .cteditor-content code.PlaygroundEditorTheme__code + p {
5526
+ margin-top: 1em !important;
5527
+ }
5528
+
5426
5529
  .cteditor-content h1{
5427
5530
  font-size: 24px;
5428
5531
  font-weight: 600;
@@ -5465,9 +5568,10 @@ body .EmojiPickerReact{
5465
5568
  margin-top: 0;
5466
5569
  }
5467
5570
 
5468
- /* Paragraph spacing - minimal for tight line spacing */
5469
- .PlaygroundEditorTheme__paragraph {
5470
- margin-bottom: 0;
5571
+ /* Paragraph spacing - add spacing between paragraphs for readability */
5572
+ /* This mimics standard web content spacing (like BBC, news sites, etc.) */
5573
+ .PlaygroundEditorTheme__paragraph + .PlaygroundEditorTheme__paragraph {
5574
+ margin-top: 1em;
5471
5575
  }
5472
5576
 
5473
5577
  /* Heading after paragraph needs extra space above - CKEditor style */
@@ -5480,6 +5584,21 @@ body .EmojiPickerReact{
5480
5584
  margin-top: 1.5em;
5481
5585
  }
5482
5586
 
5587
+ /* Heading after code block needs extra space above */
5588
+ .PlaygroundEditorTheme__code + .PlaygroundEditorTheme__h1,
5589
+ .PlaygroundEditorTheme__code + .PlaygroundEditorTheme__h2,
5590
+ .PlaygroundEditorTheme__code + .PlaygroundEditorTheme__h3,
5591
+ .PlaygroundEditorTheme__code + .PlaygroundEditorTheme__h4,
5592
+ .PlaygroundEditorTheme__code + .PlaygroundEditorTheme__h5,
5593
+ .PlaygroundEditorTheme__code + .PlaygroundEditorTheme__h6 {
5594
+ margin-top: 1.5em;
5595
+ }
5596
+
5597
+ /* Paragraph after code block needs spacing */
5598
+ .PlaygroundEditorTheme__code + .PlaygroundEditorTheme__paragraph {
5599
+ margin-top: 1em;
5600
+ }
5601
+
5483
5602
  .PlaygroundEditorTheme__indent {
5484
5603
  --lexical-indent-base-value: 40px;
5485
5604
  }
@@ -0,0 +1,6 @@
1
+ interface BugReportDialogProps {
2
+ open: boolean;
3
+ onOpenChange: (open: boolean) => void;
4
+ }
5
+ export declare function BugReportDialog({ open, onOpenChange, }: BugReportDialogProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,7 @@
1
+ interface FeedbackDialogProps {
2
+ open: boolean;
3
+ onOpenChange: (open: boolean) => void;
4
+ onFeedbackSubmitted?: () => void;
5
+ }
6
+ export declare function FeedbackDialog({ open, onOpenChange, onFeedbackSubmitted }: FeedbackDialogProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -1,4 +1,5 @@
1
1
  import { FC, ReactNode } from 'react';
2
+ import { InsertMenuProps } from '../../types';
2
3
 
3
4
  export type ModalState = {
4
5
  show: (renderModal: (onClose: () => void) => ReactNode) => void;
@@ -6,5 +7,5 @@ export type ModalState = {
6
7
  activeModal: ReactNode | null;
7
8
  };
8
9
  export declare const useModal: () => ModalState;
9
- declare const InsertMenu: FC;
10
+ declare const InsertMenu: FC<InsertMenuProps>;
10
11
  export default InsertMenu;
@@ -1,4 +1,5 @@
1
1
  import { FC, ReactNode } from 'react';
2
+ import { InsertMenuProps } from '../../types';
2
3
 
3
4
  export type ModalState = {
4
5
  show: (renderModal: (onClose: () => void) => ReactNode) => void;
@@ -6,5 +7,5 @@ export type ModalState = {
6
7
  activeModal: ReactNode | null;
7
8
  };
8
9
  export declare const useModal: () => ModalState;
9
- declare const InsertMenuDrop: FC;
10
+ declare const InsertMenuDrop: FC<InsertMenuProps>;
10
11
  export default InsertMenuDrop;
@@ -19,9 +19,30 @@ export declare const editorConfig: {
19
19
  enableHtmlViewToggle: boolean;
20
20
  enableNotePanels: boolean;
21
21
  enableAutocompleteToggle: boolean;
22
+ enableHeadings: boolean;
23
+ enableLists: boolean;
24
+ enableBlockquote: boolean;
25
+ enableImageUpload: boolean;
26
+ enableWordCount: boolean;
27
+ enableCharts: boolean;
28
+ enableHighlight: boolean;
29
+ enableAutoCorrection: boolean;
30
+ enablePdfExport: boolean;
31
+ enableSpeechToText: boolean;
32
+ enableComments: boolean;
33
+ enableMentions: boolean;
34
+ enableHorizontalLine: boolean;
35
+ enableFileAttachments: boolean;
36
+ enableSignature: boolean;
37
+ enableEmbeds: boolean;
38
+ enableFormatPainter: boolean;
39
+ enableFeatureSuggestion: boolean;
22
40
  };
23
41
  enableFloatingMenu: boolean;
24
42
  htmlViewOption: boolean;
43
+ enableThemeToggle: boolean;
44
+ enableShortcuts: boolean;
45
+ enableFeatureSuggestion: boolean;
25
46
  floatingMenuOptions: {
26
47
  bold: boolean;
27
48
  italic: boolean;
@@ -37,6 +58,7 @@ export declare const editorConfig: {
37
58
  aiChat: boolean;
38
59
  comment: boolean;
39
60
  improve: boolean;
61
+ highlight: boolean;
40
62
  };
41
63
  enableAutocomplete: boolean;
42
64
  autocompleteOptions: {
@@ -0,0 +1,18 @@
1
+ declare const FEEDBACK_MINIMUM_LOADS = 50;
2
+ declare const FEEDBACK_REMINDER_INTERVAL = 10;
3
+ /**
4
+ * Hook to determine if the feedback dialog should be automatically shown.
5
+ *
6
+ * Logic:
7
+ * - First check backend if user has already submitted feedback (never show again if yes)
8
+ * - First prompt at 50 loads
9
+ * - If user dismisses without submitting, remind every 10 loads (60, 70, 80, etc.)
10
+ */
11
+ export declare function useFeedbackEligibility(apiKey: string | null): {
12
+ shouldAutoShowFeedback: boolean;
13
+ markFeedbackSubmitted: () => void;
14
+ markFeedbackDismissed: (currentLoads: number) => void;
15
+ totalLoads: number;
16
+ isLoading: boolean;
17
+ };
18
+ export { FEEDBACK_MINIMUM_LOADS, FEEDBACK_REMINDER_INTERVAL };
@@ -1,8 +1,18 @@
1
+ export interface StorageQuotaErrorDetails {
2
+ currentUsage: string;
3
+ maxStorage: string;
4
+ availableStorage: string;
5
+ requestedSize: string;
6
+ }
7
+ export declare class StorageQuotaError extends Error {
8
+ details?: StorageQuotaErrorDetails;
9
+ constructor(message: string, details?: StorageQuotaErrorDetails);
10
+ }
1
11
  interface UploadProgress {
2
12
  progress: number;
3
13
  uploading: boolean;
4
14
  uploadedUrl: string | null;
5
- error: Error | null;
15
+ error: Error | StorageQuotaError | null;
6
16
  }
7
17
  export declare const useS3Uploader: (apiKey?: string) => UploadProgress & {
8
18
  uploadFileToS3: (file: File) => Promise<string>;
@@ -4,7 +4,7 @@ var __publicField = (obj, key, value) => {
4
4
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
5
  return value;
6
6
  };
7
- import { g as getDefaultExportFromCjs, c as commonjsGlobal } from "./index-636eff7f.js";
7
+ import { g as getDefaultExportFromCjs, c as commonjsGlobal } from "./index-6eb4d179.js";
8
8
  function _mergeNamespaces(n, m) {
9
9
  for (var i = 0; i < m.length; i++) {
10
10
  const e = m[i];
@@ -46125,4 +46125,4 @@ const html2pdf_bundle$1 = /* @__PURE__ */ _mergeNamespaces({
46125
46125
  export {
46126
46126
  html2pdf_bundle$1 as h
46127
46127
  };
46128
- //# sourceMappingURL=html2pdf.bundle-29ea2f41.js.map
46128
+ //# sourceMappingURL=html2pdf.bundle-71c6840e.js.map