@alpaca-editor/core 1.0.4015 → 1.0.4017

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/components/ui/calendar.js +2 -6
  2. package/dist/components/ui/calendar.js.map +1 -1
  3. package/dist/components/ui/card.d.ts +2 -1
  4. package/dist/components/ui/card.js +2 -2
  5. package/dist/components/ui/card.js.map +1 -1
  6. package/dist/components/ui/copy-button.js +31 -3
  7. package/dist/components/ui/copy-button.js.map +1 -1
  8. package/dist/config/config.js +20 -13
  9. package/dist/config/config.js.map +1 -1
  10. package/dist/editor/FieldList.js +1 -1
  11. package/dist/editor/FieldList.js.map +1 -1
  12. package/dist/editor/FieldListField.js +1 -1
  13. package/dist/editor/FieldListField.js.map +1 -1
  14. package/dist/editor/ScrollingContentTree.d.ts +2 -1
  15. package/dist/editor/ScrollingContentTree.js +2 -2
  16. package/dist/editor/ScrollingContentTree.js.map +1 -1
  17. package/dist/editor/client/editContext.d.ts +1 -0
  18. package/dist/editor/client/editContext.js.map +1 -1
  19. package/dist/editor/client/itemsRepository.d.ts +2 -2
  20. package/dist/editor/client/itemsRepository.js +15 -5
  21. package/dist/editor/client/itemsRepository.js.map +1 -1
  22. package/dist/editor/client/operations.js +18 -6
  23. package/dist/editor/client/operations.js.map +1 -1
  24. package/dist/editor/client/pageModelBuilder.js +2 -1
  25. package/dist/editor/client/pageModelBuilder.js.map +1 -1
  26. package/dist/editor/context-menu/InsertMenu.js +45 -12
  27. package/dist/editor/context-menu/InsertMenu.js.map +1 -1
  28. package/dist/editor/field-types/DateFieldEditor.js +1 -1
  29. package/dist/editor/field-types/DateFieldEditor.js.map +1 -1
  30. package/dist/editor/field-types/DateTimeFieldEditor.d.ts +5 -0
  31. package/dist/editor/field-types/DateTimeFieldEditor.js +151 -0
  32. package/dist/editor/field-types/DateTimeFieldEditor.js.map +1 -0
  33. package/dist/editor/field-types/InternalLinkFieldEditor.js +1 -1
  34. package/dist/editor/field-types/InternalLinkFieldEditor.js.map +1 -1
  35. package/dist/editor/field-types/TreeListEditor.js +17 -6
  36. package/dist/editor/field-types/TreeListEditor.js.map +1 -1
  37. package/dist/editor/fieldTypes.d.ts +6 -0
  38. package/dist/editor/menubar/ToolbarFactory.js +1 -1
  39. package/dist/editor/menubar/ToolbarFactory.js.map +1 -1
  40. package/dist/editor/menubar/toolbar-sections/EditControls.d.ts +7 -1
  41. package/dist/editor/menubar/toolbar-sections/EditControls.js +2 -2
  42. package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
  43. package/dist/editor/page-viewer/EditorForm.js +3 -1
  44. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  45. package/dist/editor/page-viewer/PageViewer.d.ts +2 -1
  46. package/dist/editor/page-viewer/PageViewer.js +7 -5
  47. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  48. package/dist/editor/page-viewer/PageViewerFrame.d.ts +2 -1
  49. package/dist/editor/page-viewer/PageViewerFrame.js +3 -2
  50. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  51. package/dist/editor/sidebar/ComponentPalette.js +28 -1
  52. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  53. package/dist/editor/sidebar/Debug.js +13 -3
  54. package/dist/editor/sidebar/Debug.js.map +1 -1
  55. package/dist/editor/ui/ItemSearch.d.ts +1 -0
  56. package/dist/editor/ui/ItemSearch.js +5 -5
  57. package/dist/editor/ui/ItemSearch.js.map +1 -1
  58. package/dist/editor/ui/SimpleTabs.d.ts +2 -1
  59. package/dist/editor/ui/SimpleTabs.js +8 -7
  60. package/dist/editor/ui/SimpleTabs.js.map +1 -1
  61. package/dist/editor/ui/Spinner.d.ts +1 -1
  62. package/dist/page-wizard/WizardSteps.js +5 -4
  63. package/dist/page-wizard/WizardSteps.js.map +1 -1
  64. package/dist/page-wizard/steps/CollectStep.js +1 -1
  65. package/dist/page-wizard/steps/CollectStep.js.map +1 -1
  66. package/dist/page-wizard/steps/ContentStep.js +4 -3
  67. package/dist/page-wizard/steps/ContentStep.js.map +1 -1
  68. package/dist/page-wizard/steps/FindItemsStep.js +2 -13
  69. package/dist/page-wizard/steps/FindItemsStep.js.map +1 -1
  70. package/dist/page-wizard/steps/usePageCreator.js +2 -4
  71. package/dist/page-wizard/steps/usePageCreator.js.map +1 -1
  72. package/dist/revision.d.ts +2 -2
  73. package/dist/revision.js +2 -2
  74. package/dist/styles.css +357 -60
  75. package/package.json +1 -1
  76. package/src/components/ui/calendar.tsx +2 -18
  77. package/src/components/ui/card.tsx +5 -0
  78. package/src/components/ui/copy-button.tsx +32 -3
  79. package/src/config/config.tsx +21 -14
  80. package/src/editor/FieldList.tsx +1 -1
  81. package/src/editor/FieldListField.tsx +1 -1
  82. package/src/editor/ScrollingContentTree.tsx +3 -0
  83. package/src/editor/client/editContext.ts +1 -0
  84. package/src/editor/client/itemsRepository.ts +25 -7
  85. package/src/editor/client/operations.ts +19 -5
  86. package/src/editor/client/pageModelBuilder.ts +1 -1
  87. package/src/editor/context-menu/InsertMenu.tsx +77 -30
  88. package/src/editor/field-types/DateFieldEditor.tsx +8 -2
  89. package/src/editor/field-types/DateTimeFieldEditor.tsx +281 -0
  90. package/src/editor/field-types/InternalLinkFieldEditor.tsx +1 -1
  91. package/src/editor/field-types/TreeListEditor.tsx +41 -8
  92. package/src/editor/fieldTypes.ts +8 -0
  93. package/src/editor/menubar/ToolbarFactory.tsx +2 -1
  94. package/src/editor/menubar/toolbar-sections/EditControls.tsx +37 -23
  95. package/src/editor/page-editor-chrome/PlaceholderDropZone.tsx +1 -1
  96. package/src/editor/page-viewer/EditorForm.tsx +3 -1
  97. package/src/editor/page-viewer/PageViewer.tsx +18 -15
  98. package/src/editor/page-viewer/PageViewerFrame.tsx +11 -2
  99. package/src/editor/sidebar/ComponentPalette.tsx +36 -1
  100. package/src/editor/sidebar/Debug.tsx +14 -6
  101. package/src/editor/ui/ItemSearch.tsx +6 -3
  102. package/src/editor/ui/SimpleTabs.tsx +10 -1
  103. package/src/editor/ui/Spinner.tsx +1 -1
  104. package/src/page-wizard/WizardSteps.tsx +2 -3
  105. package/src/page-wizard/steps/CollectStep.tsx +1 -1
  106. package/src/page-wizard/steps/ContentStep.tsx +18 -12
  107. package/src/page-wizard/steps/FindItemsStep.tsx +1 -50
  108. package/src/page-wizard/steps/usePageCreator.ts +2 -3
  109. package/src/revision.ts +2 -2
  110. package/styles.css +1 -0
package/dist/styles.css CHANGED
@@ -24,14 +24,12 @@
24
24
  --color-yellow-500: oklch(79.5% 0.184 86.047);
25
25
  --color-yellow-600: oklch(68.1% 0.162 75.834);
26
26
  --color-yellow-800: oklch(47.6% 0.114 61.907);
27
- --color-green-50: oklch(98.2% 0.018 155.826);
28
27
  --color-green-100: oklch(96.2% 0.044 156.743);
29
28
  --color-green-400: oklch(79.2% 0.209 151.711);
30
29
  --color-green-500: oklch(72.3% 0.219 149.579);
31
30
  --color-green-600: oklch(62.7% 0.194 149.214);
32
31
  --color-green-700: oklch(52.7% 0.154 150.069);
33
32
  --color-green-800: oklch(44.8% 0.119 151.328);
34
- --color-green-900: oklch(39.3% 0.095 152.535);
35
33
  --color-emerald-400: oklch(76.5% 0.177 163.223);
36
34
  --color-teal-100: oklch(95.3% 0.051 180.801);
37
35
  --color-teal-400: oklch(77.7% 0.152 181.912);
@@ -420,9 +418,6 @@
420
418
  .mt-\[-20px\] {
421
419
  margin-top: -20px;
422
420
  }
423
- .mt-\[9px\] {
424
- margin-top: 9px;
425
- }
426
421
  .mt-\[30px\] {
427
422
  margin-top: 30px;
428
423
  }
@@ -492,9 +487,6 @@
492
487
  .ml-\[-3px\] {
493
488
  margin-left: -3px;
494
489
  }
495
- .ml-\[1px\] {
496
- margin-left: 1px;
497
- }
498
490
  .ml-auto {
499
491
  margin-left: auto;
500
492
  }
@@ -700,6 +692,9 @@
700
692
  .max-h-40 {
701
693
  max-height: calc(var(--spacing) * 40);
702
694
  }
695
+ .max-h-48 {
696
+ max-height: calc(var(--spacing) * 48);
697
+ }
703
698
  .max-h-60 {
704
699
  max-height: calc(var(--spacing) * 60);
705
700
  }
@@ -1115,6 +1110,9 @@
1115
1110
  .grid-cols-1 {
1116
1111
  grid-template-columns: repeat(1, minmax(0, 1fr));
1117
1112
  }
1113
+ .grid-cols-4 {
1114
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1115
+ }
1118
1116
  .grid-cols-6 {
1119
1117
  grid-template-columns: repeat(6, minmax(0, 1fr));
1120
1118
  }
@@ -1642,9 +1640,6 @@
1642
1640
  .bg-gray-800 {
1643
1641
  background-color: var(--color-gray-800);
1644
1642
  }
1645
- .bg-green-50 {
1646
- background-color: var(--color-green-50);
1647
- }
1648
1643
  .bg-green-100 {
1649
1644
  background-color: var(--color-green-100);
1650
1645
  }
@@ -1924,6 +1919,9 @@
1924
1919
  .pt-5 {
1925
1920
  padding-top: calc(var(--spacing) * 5);
1926
1921
  }
1922
+ .pr-0 {
1923
+ padding-right: calc(var(--spacing) * 0);
1924
+ }
1927
1925
  .pr-1 {
1928
1926
  padding-right: calc(var(--spacing) * 1);
1929
1927
  }
@@ -2148,15 +2146,9 @@
2148
2146
  .text-green-600 {
2149
2147
  color: var(--color-green-600);
2150
2148
  }
2151
- .text-green-700 {
2152
- color: var(--color-green-700);
2153
- }
2154
2149
  .text-green-800 {
2155
2150
  color: var(--color-green-800);
2156
2151
  }
2157
- .text-green-900 {
2158
- color: var(--color-green-900);
2159
- }
2160
2152
  .text-indigo-800 {
2161
2153
  color: var(--color-indigo-800);
2162
2154
  }
@@ -2427,9 +2419,6 @@
2427
2419
  -webkit-user-select: text;
2428
2420
  user-select: text;
2429
2421
  }
2430
- .\[--cell-size\:--spacing\(8\)\] {
2431
- --cell-size: calc(var(--spacing) * 8);
2432
- }
2433
2422
  .\[animation-delay\:-0\.3s\] {
2434
2423
  animation-delay: -0.3s;
2435
2424
  }
@@ -3756,30 +3745,6 @@
3756
3745
  padding-left: calc(var(--spacing) * 5);
3757
3746
  }
3758
3747
  }
3759
- .\[\&\:first-child\[data-selected\=true\]_button\]\:rounded-l-md {
3760
- &:first-child[data-selected=true] button {
3761
- border-top-left-radius: calc(var(--radius) - 2px);
3762
- border-bottom-left-radius: calc(var(--radius) - 2px);
3763
- }
3764
- }
3765
- .rtl\:\*\*\:\[\.rdp-button\\_next\>svg\]\:rotate-180 {
3766
- &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) {
3767
- :is(& *) {
3768
- &:is(.rdp-button_next>svg) {
3769
- rotate: 180deg;
3770
- }
3771
- }
3772
- }
3773
- }
3774
- .rtl\:\*\*\:\[\.rdp-button\\_previous\>svg\]\:rotate-180 {
3775
- &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) {
3776
- :is(& *) {
3777
- &:is(.rdp-button_previous>svg) {
3778
- rotate: 180deg;
3779
- }
3780
- }
3781
- }
3782
- }
3783
3748
  .data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive {
3784
3749
  &[data-variant="destructive"] {
3785
3750
  :is(& > *) {
@@ -3789,12 +3754,6 @@
3789
3754
  }
3790
3755
  }
3791
3756
  }
3792
- .\[\&\:last-child\[data-selected\=true\]_button\]\:rounded-r-md {
3793
- &:last-child[data-selected=true] button {
3794
- border-top-right-radius: calc(var(--radius) - 2px);
3795
- border-bottom-right-radius: calc(var(--radius) - 2px);
3796
- }
3797
- }
3798
3757
  .\[\&\:not\(\:first-child\)\]\:mt-4 {
3799
3758
  &:not(:first-child) {
3800
3759
  margin-top: calc(var(--spacing) * 4);
@@ -3822,16 +3781,6 @@
3822
3781
  color: var(--muted-foreground);
3823
3782
  }
3824
3783
  }
3825
- .\[\[data-slot\=card-content\]_\&\]\:bg-transparent {
3826
- [data-slot=card-content] & {
3827
- background-color: transparent;
3828
- }
3829
- }
3830
- .\[\[data-slot\=popover-content\]_\&\]\:bg-transparent {
3831
- [data-slot=popover-content] & {
3832
- background-color: transparent;
3833
- }
3834
- }
3835
3784
  .\[a\&\]\:hover\:bg-accent {
3836
3785
  a& {
3837
3786
  &:hover {
@@ -3887,6 +3836,354 @@
3887
3836
  }
3888
3837
  }
3889
3838
  }
3839
+ .rdp-root {
3840
+ --rdp-accent-color: blue;
3841
+ --rdp-accent-background-color: #f0f0ff;
3842
+ --rdp-day-height: 44px;
3843
+ --rdp-day-width: 44px;
3844
+ --rdp-day_button-border-radius: 100%;
3845
+ --rdp-day_button-border: 2px solid transparent;
3846
+ --rdp-day_button-height: 42px;
3847
+ --rdp-day_button-width: 42px;
3848
+ --rdp-selected-border: 2px solid var(--rdp-accent-color);
3849
+ --rdp-disabled-opacity: 0.5;
3850
+ --rdp-outside-opacity: 0.75;
3851
+ --rdp-today-color: var(--rdp-accent-color);
3852
+ --rdp-dropdown-gap: 0.5rem;
3853
+ --rdp-months-gap: 2rem;
3854
+ --rdp-nav_button-disabled-opacity: 0.5;
3855
+ --rdp-nav_button-height: 2.25rem;
3856
+ --rdp-nav_button-width: 2.25rem;
3857
+ --rdp-nav-height: 2.75rem;
3858
+ --rdp-range_middle-background-color: var(--rdp-accent-background-color);
3859
+ --rdp-range_middle-color: inherit;
3860
+ --rdp-range_start-color: white;
3861
+ --rdp-range_start-background: linear-gradient(var(--rdp-gradient-direction), transparent 50%, var(--rdp-range_middle-background-color) 50%);
3862
+ --rdp-range_start-date-background-color: var(--rdp-accent-color);
3863
+ --rdp-range_end-background: linear-gradient(var(--rdp-gradient-direction), var(--rdp-range_middle-background-color) 50%, transparent 50%);
3864
+ --rdp-range_end-color: white;
3865
+ --rdp-range_end-date-background-color: var(--rdp-accent-color);
3866
+ --rdp-week_number-border-radius: 100%;
3867
+ --rdp-week_number-border: 2px solid transparent;
3868
+ --rdp-week_number-height: var(--rdp-day-height);
3869
+ --rdp-week_number-opacity: 0.75;
3870
+ --rdp-week_number-width: var(--rdp-day-width);
3871
+ --rdp-weeknumber-text-align: center;
3872
+ --rdp-weekday-opacity: 0.75;
3873
+ --rdp-weekday-padding: 0.5rem 0rem;
3874
+ --rdp-weekday-text-align: center;
3875
+ --rdp-gradient-direction: 90deg;
3876
+ --rdp-animation_duration: 0.3s;
3877
+ --rdp-animation_timing: cubic-bezier(0.4, 0, 0.2, 1);
3878
+ }
3879
+ .rdp-root[dir="rtl"] {
3880
+ --rdp-gradient-direction: -90deg;
3881
+ }
3882
+ .rdp-root[data-broadcast-calendar="true"] {
3883
+ --rdp-outside-opacity: unset;
3884
+ }
3885
+ .rdp-root {
3886
+ position: relative;
3887
+ box-sizing: border-box;
3888
+ }
3889
+ .rdp-root * {
3890
+ box-sizing: border-box;
3891
+ }
3892
+ .rdp-day {
3893
+ width: var(--rdp-day-width);
3894
+ height: var(--rdp-day-height);
3895
+ text-align: center;
3896
+ }
3897
+ .rdp-day_button {
3898
+ background: none;
3899
+ padding: 0;
3900
+ margin: 0;
3901
+ cursor: pointer;
3902
+ font: inherit;
3903
+ color: inherit;
3904
+ justify-content: center;
3905
+ align-items: center;
3906
+ display: flex;
3907
+ width: var(--rdp-day_button-width);
3908
+ height: var(--rdp-day_button-height);
3909
+ border: var(--rdp-day_button-border);
3910
+ border-radius: var(--rdp-day_button-border-radius);
3911
+ }
3912
+ .rdp-day_button:disabled {
3913
+ cursor: revert;
3914
+ }
3915
+ .rdp-caption_label {
3916
+ z-index: 1;
3917
+ position: relative;
3918
+ display: inline-flex;
3919
+ align-items: center;
3920
+ white-space: nowrap;
3921
+ border: 0;
3922
+ }
3923
+ .rdp-dropdown:focus-visible ~ .rdp-caption_label {
3924
+ outline: 5px auto Highlight;
3925
+ outline: 5px auto -webkit-focus-ring-color;
3926
+ }
3927
+ .rdp-button_next, .rdp-button_previous {
3928
+ border: none;
3929
+ background: none;
3930
+ padding: 0;
3931
+ margin: 0;
3932
+ cursor: pointer;
3933
+ font: inherit;
3934
+ color: inherit;
3935
+ -moz-appearance: none;
3936
+ -webkit-appearance: none;
3937
+ display: inline-flex;
3938
+ align-items: center;
3939
+ justify-content: center;
3940
+ position: relative;
3941
+ appearance: none;
3942
+ width: var(--rdp-nav_button-width);
3943
+ height: var(--rdp-nav_button-height);
3944
+ }
3945
+ .rdp-button_next:disabled, .rdp-button_next[aria-disabled="true"], .rdp-button_previous:disabled, .rdp-button_previous[aria-disabled="true"] {
3946
+ cursor: revert;
3947
+ opacity: var(--rdp-nav_button-disabled-opacity);
3948
+ }
3949
+ .rdp-chevron {
3950
+ display: inline-block;
3951
+ fill: var(--rdp-accent-color);
3952
+ }
3953
+ .rdp-root[dir="rtl"] .rdp-nav .rdp-chevron {
3954
+ transform: rotate(180deg);
3955
+ transform-origin: 50%;
3956
+ }
3957
+ .rdp-dropdowns {
3958
+ position: relative;
3959
+ display: inline-flex;
3960
+ align-items: center;
3961
+ gap: var(--rdp-dropdown-gap);
3962
+ }
3963
+ .rdp-dropdown {
3964
+ z-index: 2;
3965
+ opacity: 0;
3966
+ appearance: none;
3967
+ position: absolute;
3968
+ inset-block-start: 0;
3969
+ inset-block-end: 0;
3970
+ inset-inline-start: 0;
3971
+ width: 100%;
3972
+ margin: 0;
3973
+ padding: 0;
3974
+ cursor: inherit;
3975
+ border: none;
3976
+ line-height: inherit;
3977
+ }
3978
+ .rdp-dropdown_root {
3979
+ position: relative;
3980
+ display: inline-flex;
3981
+ align-items: center;
3982
+ }
3983
+ .rdp-dropdown_root[data-disabled="true"] .rdp-chevron {
3984
+ opacity: var(--rdp-disabled-opacity);
3985
+ }
3986
+ .rdp-month_caption {
3987
+ display: flex;
3988
+ align-content: center;
3989
+ height: var(--rdp-nav-height);
3990
+ font-weight: bold;
3991
+ font-size: large;
3992
+ }
3993
+ .rdp-root[data-nav-layout="around"] .rdp-month, .rdp-root[data-nav-layout="after"] .rdp-month {
3994
+ position: relative;
3995
+ }
3996
+ .rdp-root[data-nav-layout="around"] .rdp-month_caption {
3997
+ justify-content: center;
3998
+ margin-inline-start: var(--rdp-nav_button-width);
3999
+ margin-inline-end: var(--rdp-nav_button-width);
4000
+ position: relative;
4001
+ }
4002
+ .rdp-root[data-nav-layout="around"] .rdp-button_previous {
4003
+ position: absolute;
4004
+ inset-inline-start: 0;
4005
+ top: 0;
4006
+ height: var(--rdp-nav-height);
4007
+ display: inline-flex;
4008
+ }
4009
+ .rdp-root[data-nav-layout="around"] .rdp-button_next {
4010
+ position: absolute;
4011
+ inset-inline-end: 0;
4012
+ top: 0;
4013
+ height: var(--rdp-nav-height);
4014
+ display: inline-flex;
4015
+ justify-content: center;
4016
+ }
4017
+ .rdp-months {
4018
+ position: relative;
4019
+ display: flex;
4020
+ flex-wrap: wrap;
4021
+ gap: var(--rdp-months-gap);
4022
+ max-width: fit-content;
4023
+ }
4024
+ .rdp-month_grid {
4025
+ border-collapse: collapse;
4026
+ }
4027
+ .rdp-nav {
4028
+ position: absolute;
4029
+ inset-block-start: 0;
4030
+ inset-inline-end: 0;
4031
+ display: flex;
4032
+ align-items: center;
4033
+ height: var(--rdp-nav-height);
4034
+ }
4035
+ .rdp-weekday {
4036
+ opacity: var(--rdp-weekday-opacity);
4037
+ padding: var(--rdp-weekday-padding);
4038
+ font-weight: 500;
4039
+ font-size: smaller;
4040
+ text-align: var(--rdp-weekday-text-align);
4041
+ text-transform: var(--rdp-weekday-text-transform);
4042
+ }
4043
+ .rdp-week_number {
4044
+ opacity: var(--rdp-week_number-opacity);
4045
+ font-weight: 400;
4046
+ font-size: small;
4047
+ height: var(--rdp-week_number-height);
4048
+ width: var(--rdp-week_number-width);
4049
+ border: var(--rdp-week_number-border);
4050
+ border-radius: var(--rdp-week_number-border-radius);
4051
+ text-align: var(--rdp-weeknumber-text-align);
4052
+ }
4053
+ .rdp-today:not(.rdp-outside) {
4054
+ color: var(--rdp-today-color);
4055
+ }
4056
+ .rdp-selected {
4057
+ font-weight: bold;
4058
+ font-size: large;
4059
+ }
4060
+ .rdp-selected .rdp-day_button {
4061
+ border: var(--rdp-selected-border);
4062
+ }
4063
+ .rdp-outside {
4064
+ opacity: var(--rdp-outside-opacity);
4065
+ }
4066
+ .rdp-disabled {
4067
+ opacity: var(--rdp-disabled-opacity);
4068
+ }
4069
+ .rdp-hidden {
4070
+ visibility: hidden;
4071
+ color: var(--rdp-range_start-color);
4072
+ }
4073
+ .rdp-range_start {
4074
+ background: var(--rdp-range_start-background);
4075
+ }
4076
+ .rdp-range_start .rdp-day_button {
4077
+ background-color: var(--rdp-range_start-date-background-color);
4078
+ color: var(--rdp-range_start-color);
4079
+ }
4080
+ .rdp-range_middle {
4081
+ background-color: var(--rdp-range_middle-background-color);
4082
+ }
4083
+ .rdp-range_middle .rdp-day_button {
4084
+ border-color: transparent;
4085
+ border: unset;
4086
+ border-radius: unset;
4087
+ color: var(--rdp-range_middle-color);
4088
+ }
4089
+ .rdp-range_end {
4090
+ background: var(--rdp-range_end-background);
4091
+ color: var(--rdp-range_end-color);
4092
+ }
4093
+ .rdp-range_end .rdp-day_button {
4094
+ color: var(--rdp-range_start-color);
4095
+ background-color: var(--rdp-range_end-date-background-color);
4096
+ }
4097
+ .rdp-range_start.rdp-range_end {
4098
+ background: revert;
4099
+ }
4100
+ .rdp-focusable {
4101
+ cursor: pointer;
4102
+ }
4103
+ @keyframes rdp-slide_in_left {
4104
+ 0% {
4105
+ transform: translateX(-100%);
4106
+ }
4107
+ 100% {
4108
+ transform: translateX(0);
4109
+ }
4110
+ }
4111
+ @keyframes rdp-slide_in_right {
4112
+ 0% {
4113
+ transform: translateX(100%);
4114
+ }
4115
+ 100% {
4116
+ transform: translateX(0);
4117
+ }
4118
+ }
4119
+ @keyframes rdp-slide_out_left {
4120
+ 0% {
4121
+ transform: translateX(0);
4122
+ }
4123
+ 100% {
4124
+ transform: translateX(-100%);
4125
+ }
4126
+ }
4127
+ @keyframes rdp-slide_out_right {
4128
+ 0% {
4129
+ transform: translateX(0);
4130
+ }
4131
+ 100% {
4132
+ transform: translateX(100%);
4133
+ }
4134
+ }
4135
+ .rdp-weeks_before_enter {
4136
+ animation: rdp-slide_in_left var(--rdp-animation_duration) var(--rdp-animation_timing) forwards;
4137
+ }
4138
+ .rdp-weeks_before_exit {
4139
+ animation: rdp-slide_out_left var(--rdp-animation_duration) var(--rdp-animation_timing) forwards;
4140
+ }
4141
+ .rdp-weeks_after_enter {
4142
+ animation: rdp-slide_in_right var(--rdp-animation_duration) var(--rdp-animation_timing) forwards;
4143
+ }
4144
+ .rdp-weeks_after_exit {
4145
+ animation: rdp-slide_out_right var(--rdp-animation_duration) var(--rdp-animation_timing) forwards;
4146
+ }
4147
+ .rdp-root[dir="rtl"] .rdp-weeks_after_enter {
4148
+ animation: rdp-slide_in_left var(--rdp-animation_duration) var(--rdp-animation_timing) forwards;
4149
+ }
4150
+ .rdp-root[dir="rtl"] .rdp-weeks_before_exit {
4151
+ animation: rdp-slide_out_right var(--rdp-animation_duration) var(--rdp-animation_timing) forwards;
4152
+ }
4153
+ .rdp-root[dir="rtl"] .rdp-weeks_before_enter {
4154
+ animation: rdp-slide_in_right var(--rdp-animation_duration) var(--rdp-animation_timing) forwards;
4155
+ }
4156
+ .rdp-root[dir="rtl"] .rdp-weeks_after_exit {
4157
+ animation: rdp-slide_out_left var(--rdp-animation_duration) var(--rdp-animation_timing) forwards;
4158
+ }
4159
+ @keyframes rdp-fade_in {
4160
+ from {
4161
+ opacity: 0;
4162
+ }
4163
+ to {
4164
+ opacity: 1;
4165
+ }
4166
+ }
4167
+ @keyframes rdp-fade_out {
4168
+ from {
4169
+ opacity: 1;
4170
+ }
4171
+ to {
4172
+ opacity: 0;
4173
+ }
4174
+ }
4175
+ .rdp-caption_after_enter {
4176
+ animation: rdp-fade_in var(--rdp-animation_duration) var(--rdp-animation_timing) forwards;
4177
+ }
4178
+ .rdp-caption_after_exit {
4179
+ animation: rdp-fade_out var(--rdp-animation_duration) var(--rdp-animation_timing) forwards;
4180
+ }
4181
+ .rdp-caption_before_enter {
4182
+ animation: rdp-fade_in var(--rdp-animation_duration) var(--rdp-animation_timing) forwards;
4183
+ }
4184
+ .rdp-caption_before_exit {
4185
+ animation: rdp-fade_out var(--rdp-animation_duration) var(--rdp-animation_timing) forwards;
4186
+ }
3890
4187
  * {
3891
4188
  font-family: var(--font-inter), Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
3892
4189
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alpaca-editor/core",
3
- "version": "1.0.4015",
3
+ "version": "1.0.4017",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -28,12 +28,7 @@ function Calendar({
28
28
  return (
29
29
  <DayPicker
30
30
  showOutsideDays={showOutsideDays}
31
- className={cn(
32
- "bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
33
- String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
34
- String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
35
- className,
36
- )}
31
+ className={cn("bg-background group/calendar p-3", className)}
37
32
  captionLayout={captionLayout}
38
33
  formatters={{
39
34
  formatMonthDropdown: (date) =>
@@ -100,7 +95,7 @@ function Calendar({
100
95
  defaultClassNames.week_number,
101
96
  ),
102
97
  day: cn(
103
- "relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",
98
+ "relative w-full h-full p-0 text-center aspect-square",
104
99
  defaultClassNames.day,
105
100
  ),
106
101
  range_start: cn(
@@ -125,16 +120,6 @@ function Calendar({
125
120
  ...classNames,
126
121
  }}
127
122
  components={{
128
- Root: ({ className, rootRef, ...props }) => {
129
- return (
130
- <div
131
- data-slot="calendar"
132
- ref={rootRef}
133
- className={cn(className)}
134
- {...props}
135
- />
136
- );
137
- },
138
123
  Chevron: ({ className, orientation, ...props }) => {
139
124
  if (orientation === "left") {
140
125
  return (
@@ -155,7 +140,6 @@ function Calendar({
155
140
  <ChevronDownIcon className={cn("size-4", className)} {...props} />
156
141
  );
157
142
  },
158
- // DayButton: CalendarDayButton,
159
143
  WeekNumber: ({ children, ...props }) => {
160
144
  return (
161
145
  <td {...props}>
@@ -19,6 +19,7 @@ export function Card({
19
19
  footer,
20
20
  showFullscreenButton = false,
21
21
  onFullscreen,
22
+ headerActions,
22
23
  }: {
23
24
  children: React.ReactNode;
24
25
  icon: React.ReactNode;
@@ -32,6 +33,7 @@ export function Card({
32
33
  footer?: React.ReactNode;
33
34
  showFullscreenButton?: boolean;
34
35
  onFullscreen?: () => void;
36
+ headerActions?: React.ReactNode;
35
37
  }) {
36
38
  const [isExpanded, setIsExpanded] = useState(() => {
37
39
  if (defaultCollapsed === "yes") return false; // Starts collapsed
@@ -133,6 +135,9 @@ export function Card({
133
135
  </div>
134
136
  </div>
135
137
  <div className="flex items-center gap-2">
138
+ {/* Custom header actions */}
139
+ {headerActions}
140
+
136
141
  {/* Fullscreen button - only on mobile */}
137
142
  {showFullscreenButton && (
138
143
  <button
@@ -1,4 +1,4 @@
1
- import { useRef, useState } from "react";
1
+ import { useRef, useState, useEffect } from "react";
2
2
  import { createPortal } from "react-dom";
3
3
  import { Copy } from "lucide-react";
4
4
 
@@ -21,6 +21,35 @@ export function CopyButton({
21
21
  const [showCopiedHint, setShowCopiedHint] = useState(false);
22
22
  const buttonRef = useRef<HTMLElement>(null);
23
23
 
24
+ // Add keyframes to document head once
25
+ useEffect(() => {
26
+ const styleId = "copy-button-animations";
27
+ if (document.getElementById(styleId)) return;
28
+
29
+ const style = document.createElement("style");
30
+ style.id = styleId;
31
+ style.textContent = `
32
+ @keyframes shake {
33
+ 0%, 100% { transform: translateX(-50%) rotate(0deg); }
34
+ 10% { transform: translateX(-50%) rotate(-2deg) scale(1.05); }
35
+ 20% { transform: translateX(-50%) rotate(2deg) scale(1.1); }
36
+ 30% { transform: translateX(-50%) rotate(-2deg) scale(1.05); }
37
+ 40% { transform: translateX(-50%) rotate(2deg) scale(1.1); }
38
+ 50% { transform: translateX(-50%) rotate(-1deg) scale(1.02); }
39
+ 60% { transform: translateX(-50%) rotate(1deg) scale(1.02); }
40
+ 70% { transform: translateX(-50%) rotate(-1deg); }
41
+ 80% { transform: translateX(-50%) rotate(1deg); }
42
+ 90% { transform: translateX(-50%) rotate(0deg); }
43
+ }
44
+ @keyframes fadeOut {
45
+ 0% { opacity: 1; }
46
+ 70% { opacity: 1; }
47
+ 100% { opacity: 0; }
48
+ }
49
+ `;
50
+ document.head.appendChild(style);
51
+ }, []);
52
+
24
53
  const handleCopy = async () => {
25
54
  try {
26
55
  await navigator.clipboard.writeText(textToCopy);
@@ -56,9 +85,9 @@ export function CopyButton({
56
85
  buttonRef.current &&
57
86
  createPortal(
58
87
  <div
59
- className="pointer-events-none fixed z-[9999] animate-pulse rounded bg-gray-800 px-2 py-1 text-xs whitespace-nowrap text-white shadow-lg"
88
+ className="pointer-events-none fixed z-[9999] rounded bg-gray-800 px-2 py-1 text-xs whitespace-nowrap text-white shadow-lg"
60
89
  style={{
61
- animation: "fadeOut 2s ease-out forwards",
90
+ animation: "shake 0.5s ease-in-out, fadeOut 2s ease-out forwards",
62
91
  left:
63
92
  buttonRef.current.getBoundingClientRect().left +
64
93
  buttonRef.current.offsetWidth / 2,