@micacms/editor-ui 0.6.0-rc.2 → 0.7.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.
Files changed (87) hide show
  1. package/dist/THIRD_PARTY_NOTICES.txt +39 -39
  2. package/dist/assets/ChangeComparison.vue_vue_type_script_setup_true_lang-CN7QLLgS.js +2 -0
  3. package/dist/assets/ChangeComparison.vue_vue_type_script_setup_true_lang-CN7QLLgS.js.map +1 -0
  4. package/dist/assets/ChangesView-Dp79M2fs.js +7 -0
  5. package/dist/assets/ChangesView-Dp79M2fs.js.map +1 -0
  6. package/dist/assets/CollectionView-D9VSxjMl.js +2 -0
  7. package/dist/assets/CollectionView-D9VSxjMl.js.map +1 -0
  8. package/dist/assets/ConfirmDialog.vue_vue_type_script_setup_true_lang-CWanooQO.js +2 -0
  9. package/dist/assets/{ConfirmDialog.vue_vue_type_script_setup_true_lang-DaYRluZs.js.map → ConfirmDialog.vue_vue_type_script_setup_true_lang-CWanooQO.js.map} +1 -1
  10. package/dist/assets/DashboardView-BPyKR5J3.js +2 -0
  11. package/dist/assets/DashboardView-BPyKR5J3.js.map +1 -0
  12. package/dist/assets/DeveloperDetails.vue_vue_type_script_setup_true_lang-Bp-D1Kf1.js +2 -0
  13. package/dist/assets/DeveloperDetails.vue_vue_type_script_setup_true_lang-Bp-D1Kf1.js.map +1 -0
  14. package/dist/assets/EntryView-qKGxmd49.js +2 -0
  15. package/dist/assets/EntryView-qKGxmd49.js.map +1 -0
  16. package/dist/assets/{LoginView-BMcE8J5l.js → LoginView-C4FlLD5n.js} +2 -2
  17. package/dist/assets/{LoginView-BMcE8J5l.js.map → LoginView-C4FlLD5n.js.map} +1 -1
  18. package/dist/assets/MediaView-C0FP8j4J.js +2 -0
  19. package/dist/assets/MediaView-C0FP8j4J.js.map +1 -0
  20. package/dist/assets/NotFoundView-BXXcZp2U.js +2 -0
  21. package/dist/assets/{NotFoundView-BT-zH9Ky.js.map → NotFoundView-BXXcZp2U.js.map} +1 -1
  22. package/dist/assets/ObjectField-BFAmw-Bf.js +2 -0
  23. package/dist/assets/{ObjectField-BHoHeIbi.js.map → ObjectField-BFAmw-Bf.js.map} +1 -1
  24. package/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-YO9Lox87.js +7 -0
  25. package/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-YO9Lox87.js.map +1 -0
  26. package/dist/assets/ReadOnlyNotice.vue_vue_type_script_setup_true_lang-83XB7mFB.js +7 -0
  27. package/dist/assets/ReadOnlyNotice.vue_vue_type_script_setup_true_lang-83XB7mFB.js.map +1 -0
  28. package/dist/assets/RepeaterField-BA5zPM54.js +12 -0
  29. package/dist/assets/RepeaterField-BA5zPM54.js.map +1 -0
  30. package/dist/assets/SingletonView-rtsXuJ8F.js +2 -0
  31. package/dist/assets/SingletonView-rtsXuJ8F.js.map +1 -0
  32. package/dist/assets/{SystemView-AMhNiUgh.css → SystemView-BBJFvsrr.css} +1 -1
  33. package/dist/assets/SystemView-CBTTQvCI.js +3 -0
  34. package/dist/assets/SystemView-CBTTQvCI.js.map +1 -0
  35. package/dist/assets/arrow-right-CVMfMI8t.js +7 -0
  36. package/dist/assets/arrow-right-CVMfMI8t.js.map +1 -0
  37. package/dist/assets/arrow-up-D5CzEqmi.js +12 -0
  38. package/dist/assets/arrow-up-D5CzEqmi.js.map +1 -0
  39. package/dist/assets/chevron-down-Cn8dXqbz.js +7 -0
  40. package/dist/assets/chevron-down-Cn8dXqbz.js.map +1 -0
  41. package/dist/assets/format-CAimH9FV.js +2 -0
  42. package/dist/assets/format-CAimH9FV.js.map +1 -0
  43. package/dist/assets/index-C-WfCDd6.js +118 -0
  44. package/dist/assets/index-C-WfCDd6.js.map +1 -0
  45. package/dist/assets/index-CBGzi5Bh.css +1 -0
  46. package/dist/assets/useUnsavedChanges-CErjJu5S.js +201 -0
  47. package/dist/assets/useUnsavedChanges-CErjJu5S.js.map +1 -0
  48. package/dist/index.html +2 -2
  49. package/package.json +2 -2
  50. package/dist/assets/ChangesView-B37VddpZ.js +0 -7
  51. package/dist/assets/ChangesView-B37VddpZ.js.map +0 -1
  52. package/dist/assets/CollectionView-DMmV03BG.js +0 -2
  53. package/dist/assets/CollectionView-DMmV03BG.js.map +0 -1
  54. package/dist/assets/ConfirmDialog.vue_vue_type_script_setup_true_lang-DaYRluZs.js +0 -2
  55. package/dist/assets/DashboardView-CslqN0A1.js +0 -2
  56. package/dist/assets/DashboardView-CslqN0A1.js.map +0 -1
  57. package/dist/assets/EntryView-CpappvZe.js +0 -2
  58. package/dist/assets/EntryView-CpappvZe.js.map +0 -1
  59. package/dist/assets/MediaView-CN7asOkJ.js +0 -2
  60. package/dist/assets/MediaView-CN7asOkJ.js.map +0 -1
  61. package/dist/assets/NotFoundView-BT-zH9Ky.js +0 -2
  62. package/dist/assets/ObjectField-BHoHeIbi.js +0 -2
  63. package/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-C3ip7WDx.js +0 -7
  64. package/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-C3ip7WDx.js.map +0 -1
  65. package/dist/assets/ReadOnlyNotice.vue_vue_type_script_setup_true_lang-B276O7Z8.js +0 -7
  66. package/dist/assets/ReadOnlyNotice.vue_vue_type_script_setup_true_lang-B276O7Z8.js.map +0 -1
  67. package/dist/assets/RepeaterField-CgFHog9l.js +0 -12
  68. package/dist/assets/RepeaterField-CgFHog9l.js.map +0 -1
  69. package/dist/assets/SingletonView-BHtlstaz.js +0 -2
  70. package/dist/assets/SingletonView-BHtlstaz.js.map +0 -1
  71. package/dist/assets/SystemView-S-i2v0ly.js +0 -3
  72. package/dist/assets/SystemView-S-i2v0ly.js.map +0 -1
  73. package/dist/assets/arrow-right-DMhFU3-4.js +0 -7
  74. package/dist/assets/arrow-right-DMhFU3-4.js.map +0 -1
  75. package/dist/assets/arrow-up-DeNDcETx.js +0 -12
  76. package/dist/assets/arrow-up-DeNDcETx.js.map +0 -1
  77. package/dist/assets/chevron-down-D4nmRhPt.js +0 -7
  78. package/dist/assets/chevron-down-D4nmRhPt.js.map +0 -1
  79. package/dist/assets/format-CW--BYT5.js +0 -2
  80. package/dist/assets/format-CW--BYT5.js.map +0 -1
  81. package/dist/assets/index-BBFDilFH.js +0 -118
  82. package/dist/assets/index-BBFDilFH.js.map +0 -1
  83. package/dist/assets/index-BSYHt4Oa.css +0 -1
  84. package/dist/assets/useField-DcIPoU4r.js +0 -2
  85. package/dist/assets/useField-DcIPoU4r.js.map +0 -1
  86. package/dist/assets/useUnsavedChanges-C4vyxObi.js +0 -145
  87. package/dist/assets/useUnsavedChanges-C4vyxObi.js.map +0 -1
@@ -3,7 +3,7 @@ The Inter font is under the SIL Open Font License: fonts/InterVariable-LICENSE.t
3
3
  This product includes the following third-party software.
4
4
 
5
5
  ------------------------------------------------------------------------------
6
- @lucide/vue@1.37.0 (ISC)
6
+ @lucide/vue@1.55.0 (ISC)
7
7
  ------------------------------------------------------------------------------
8
8
 
9
9
  ISC License
@@ -51,7 +51,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
51
51
  SOFTWARE.
52
52
 
53
53
  ------------------------------------------------------------------------------
54
- @markdoc/markdoc@0.5.9 (MIT)
54
+ @markdoc/markdoc@0.5.10 (MIT)
55
55
  ------------------------------------------------------------------------------
56
56
 
57
57
  The MIT License
@@ -102,7 +102,7 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
102
102
  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
103
103
 
104
104
  ------------------------------------------------------------------------------
105
- @tiptap/core@2.27.2 (MIT)
105
+ @tiptap/core@2.27.3 (MIT)
106
106
  ------------------------------------------------------------------------------
107
107
 
108
108
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -130,7 +130,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
130
130
  SOFTWARE.
131
131
 
132
132
  ------------------------------------------------------------------------------
133
- @tiptap/extension-blockquote@2.27.2 (MIT)
133
+ @tiptap/extension-blockquote@2.27.3 (MIT)
134
134
  ------------------------------------------------------------------------------
135
135
 
136
136
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -158,7 +158,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
158
158
  SOFTWARE.
159
159
 
160
160
  ------------------------------------------------------------------------------
161
- @tiptap/extension-bold@2.27.2 (MIT)
161
+ @tiptap/extension-bold@2.27.3 (MIT)
162
162
  ------------------------------------------------------------------------------
163
163
 
164
164
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -186,7 +186,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
186
186
  SOFTWARE.
187
187
 
188
188
  ------------------------------------------------------------------------------
189
- @tiptap/extension-bubble-menu@2.27.2 (MIT)
189
+ @tiptap/extension-bubble-menu@2.27.3 (MIT)
190
190
  ------------------------------------------------------------------------------
191
191
 
192
192
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -214,7 +214,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
214
214
  SOFTWARE.
215
215
 
216
216
  ------------------------------------------------------------------------------
217
- @tiptap/extension-bullet-list@2.27.2 (MIT)
217
+ @tiptap/extension-bullet-list@2.27.3 (MIT)
218
218
  ------------------------------------------------------------------------------
219
219
 
220
220
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -242,7 +242,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
242
242
  SOFTWARE.
243
243
 
244
244
  ------------------------------------------------------------------------------
245
- @tiptap/extension-code@2.27.2 (MIT)
245
+ @tiptap/extension-code@2.27.3 (MIT)
246
246
  ------------------------------------------------------------------------------
247
247
 
248
248
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -270,7 +270,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
270
270
  SOFTWARE.
271
271
 
272
272
  ------------------------------------------------------------------------------
273
- @tiptap/extension-code-block@2.27.2 (MIT)
273
+ @tiptap/extension-code-block@2.27.3 (MIT)
274
274
  ------------------------------------------------------------------------------
275
275
 
276
276
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -298,7 +298,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
298
298
  SOFTWARE.
299
299
 
300
300
  ------------------------------------------------------------------------------
301
- @tiptap/extension-document@2.27.2 (MIT)
301
+ @tiptap/extension-document@2.27.3 (MIT)
302
302
  ------------------------------------------------------------------------------
303
303
 
304
304
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -326,7 +326,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
326
326
  SOFTWARE.
327
327
 
328
328
  ------------------------------------------------------------------------------
329
- @tiptap/extension-dropcursor@2.27.2 (MIT)
329
+ @tiptap/extension-dropcursor@2.27.3 (MIT)
330
330
  ------------------------------------------------------------------------------
331
331
 
332
332
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -354,7 +354,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
354
354
  SOFTWARE.
355
355
 
356
356
  ------------------------------------------------------------------------------
357
- @tiptap/extension-floating-menu@2.27.2 (MIT)
357
+ @tiptap/extension-floating-menu@2.27.3 (MIT)
358
358
  ------------------------------------------------------------------------------
359
359
 
360
360
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -382,7 +382,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
382
382
  SOFTWARE.
383
383
 
384
384
  ------------------------------------------------------------------------------
385
- @tiptap/extension-gapcursor@2.27.2 (MIT)
385
+ @tiptap/extension-gapcursor@2.27.3 (MIT)
386
386
  ------------------------------------------------------------------------------
387
387
 
388
388
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -410,7 +410,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
410
410
  SOFTWARE.
411
411
 
412
412
  ------------------------------------------------------------------------------
413
- @tiptap/extension-hard-break@2.27.2 (MIT)
413
+ @tiptap/extension-hard-break@2.27.3 (MIT)
414
414
  ------------------------------------------------------------------------------
415
415
 
416
416
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -438,7 +438,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
438
438
  SOFTWARE.
439
439
 
440
440
  ------------------------------------------------------------------------------
441
- @tiptap/extension-heading@2.27.2 (MIT)
441
+ @tiptap/extension-heading@2.27.3 (MIT)
442
442
  ------------------------------------------------------------------------------
443
443
 
444
444
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -466,7 +466,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
466
466
  SOFTWARE.
467
467
 
468
468
  ------------------------------------------------------------------------------
469
- @tiptap/extension-history@2.27.2 (MIT)
469
+ @tiptap/extension-history@2.27.3 (MIT)
470
470
  ------------------------------------------------------------------------------
471
471
 
472
472
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -494,7 +494,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
494
494
  SOFTWARE.
495
495
 
496
496
  ------------------------------------------------------------------------------
497
- @tiptap/extension-horizontal-rule@2.27.2 (MIT)
497
+ @tiptap/extension-horizontal-rule@2.27.3 (MIT)
498
498
  ------------------------------------------------------------------------------
499
499
 
500
500
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -522,7 +522,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
522
522
  SOFTWARE.
523
523
 
524
524
  ------------------------------------------------------------------------------
525
- @tiptap/extension-italic@2.27.2 (MIT)
525
+ @tiptap/extension-italic@2.27.3 (MIT)
526
526
  ------------------------------------------------------------------------------
527
527
 
528
528
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -550,7 +550,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
550
550
  SOFTWARE.
551
551
 
552
552
  ------------------------------------------------------------------------------
553
- @tiptap/extension-link@2.27.2 (MIT)
553
+ @tiptap/extension-link@2.27.3 (MIT)
554
554
  ------------------------------------------------------------------------------
555
555
 
556
556
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -578,7 +578,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
578
578
  SOFTWARE.
579
579
 
580
580
  ------------------------------------------------------------------------------
581
- @tiptap/extension-list-item@2.27.2 (MIT)
581
+ @tiptap/extension-list-item@2.27.3 (MIT)
582
582
  ------------------------------------------------------------------------------
583
583
 
584
584
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -606,7 +606,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
606
606
  SOFTWARE.
607
607
 
608
608
  ------------------------------------------------------------------------------
609
- @tiptap/extension-ordered-list@2.27.2 (MIT)
609
+ @tiptap/extension-ordered-list@2.27.3 (MIT)
610
610
  ------------------------------------------------------------------------------
611
611
 
612
612
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -634,7 +634,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
634
634
  SOFTWARE.
635
635
 
636
636
  ------------------------------------------------------------------------------
637
- @tiptap/extension-paragraph@2.27.2 (MIT)
637
+ @tiptap/extension-paragraph@2.27.3 (MIT)
638
638
  ------------------------------------------------------------------------------
639
639
 
640
640
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -662,7 +662,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
662
662
  SOFTWARE.
663
663
 
664
664
  ------------------------------------------------------------------------------
665
- @tiptap/extension-strike@2.27.2 (MIT)
665
+ @tiptap/extension-strike@2.27.3 (MIT)
666
666
  ------------------------------------------------------------------------------
667
667
 
668
668
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -690,7 +690,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
690
690
  SOFTWARE.
691
691
 
692
692
  ------------------------------------------------------------------------------
693
- @tiptap/extension-text@2.27.2 (MIT)
693
+ @tiptap/extension-text@2.27.3 (MIT)
694
694
  ------------------------------------------------------------------------------
695
695
 
696
696
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -718,7 +718,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
718
718
  SOFTWARE.
719
719
 
720
720
  ------------------------------------------------------------------------------
721
- @tiptap/pm@2.27.2 (MIT)
721
+ @tiptap/pm@2.27.3 (MIT)
722
722
  ------------------------------------------------------------------------------
723
723
 
724
724
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -746,7 +746,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
746
746
  SOFTWARE.
747
747
 
748
748
  ------------------------------------------------------------------------------
749
- @tiptap/starter-kit@2.27.2 (MIT)
749
+ @tiptap/starter-kit@2.27.3 (MIT)
750
750
  ------------------------------------------------------------------------------
751
751
 
752
752
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -774,7 +774,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
774
774
  SOFTWARE.
775
775
 
776
776
  ------------------------------------------------------------------------------
777
- @tiptap/vue-3@2.27.2 (MIT)
777
+ @tiptap/vue-3@2.27.3 (MIT)
778
778
  ------------------------------------------------------------------------------
779
779
 
780
780
  (No license file in the package; the MIT text, with the author from its package.json.)
@@ -856,7 +856,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
856
856
  SOFTWARE.
857
857
 
858
858
  ------------------------------------------------------------------------------
859
- @vue/reactivity@3.5.42 (MIT)
859
+ @vue/reactivity@3.5.43 (MIT)
860
860
  ------------------------------------------------------------------------------
861
861
 
862
862
  The MIT License (MIT)
@@ -882,7 +882,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
882
882
  THE SOFTWARE.
883
883
 
884
884
  ------------------------------------------------------------------------------
885
- @vue/runtime-core@3.5.42 (MIT)
885
+ @vue/runtime-core@3.5.43 (MIT)
886
886
  ------------------------------------------------------------------------------
887
887
 
888
888
  The MIT License (MIT)
@@ -908,7 +908,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
908
908
  THE SOFTWARE.
909
909
 
910
910
  ------------------------------------------------------------------------------
911
- @vue/runtime-dom@3.5.42 (MIT)
911
+ @vue/runtime-dom@3.5.43 (MIT)
912
912
  ------------------------------------------------------------------------------
913
913
 
914
914
  The MIT License (MIT)
@@ -934,7 +934,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
934
934
  THE SOFTWARE.
935
935
 
936
936
  ------------------------------------------------------------------------------
937
- @vue/shared@3.5.42 (MIT)
937
+ @vue/shared@3.5.43 (MIT)
938
938
  ------------------------------------------------------------------------------
939
939
 
940
940
  The MIT License (MIT)
@@ -1032,7 +1032,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1032
1032
  THE SOFTWARE.
1033
1033
 
1034
1034
  ------------------------------------------------------------------------------
1035
- prosemirror-dropcursor@1.8.3 (MIT)
1035
+ prosemirror-dropcursor@1.8.4 (MIT)
1036
1036
  ------------------------------------------------------------------------------
1037
1037
 
1038
1038
  Copyright (C) 2015-2017 by Marijn Haverbeke <marijn@haverbeke.berlin> and others
@@ -1080,7 +1080,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1080
1080
  THE SOFTWARE.
1081
1081
 
1082
1082
  ------------------------------------------------------------------------------
1083
- prosemirror-history@1.5.0 (MIT)
1083
+ prosemirror-history@1.5.1 (MIT)
1084
1084
  ------------------------------------------------------------------------------
1085
1085
 
1086
1086
  Copyright (C) 2015-2017 by Marijn Haverbeke <marijn@haverbeke.berlin> and others
@@ -1128,7 +1128,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1128
1128
  THE SOFTWARE.
1129
1129
 
1130
1130
  ------------------------------------------------------------------------------
1131
- prosemirror-model@1.25.11 (MIT)
1131
+ prosemirror-model@1.25.12 (MIT)
1132
1132
  ------------------------------------------------------------------------------
1133
1133
 
1134
1134
  Copyright (C) 2015-2017 by Marijn Haverbeke <marijn@haverbeke.berlin> and others
@@ -1200,7 +1200,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1200
1200
  THE SOFTWARE.
1201
1201
 
1202
1202
  ------------------------------------------------------------------------------
1203
- prosemirror-transform@1.12.0 (MIT)
1203
+ prosemirror-transform@1.12.2 (MIT)
1204
1204
  ------------------------------------------------------------------------------
1205
1205
 
1206
1206
  Copyright (C) 2015-2017 by Marijn Haverbeke <marijn@haverbeke.berlin> and others
@@ -1224,7 +1224,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1224
1224
  THE SOFTWARE.
1225
1225
 
1226
1226
  ------------------------------------------------------------------------------
1227
- prosemirror-view@1.42.3 (MIT)
1227
+ prosemirror-view@1.42.6 (MIT)
1228
1228
  ------------------------------------------------------------------------------
1229
1229
 
1230
1230
  Copyright (C) 2015-2017 by Marijn Haverbeke <marijn@haverbeke.berlin> and others
@@ -1324,7 +1324,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1324
1324
  SOFTWARE.
1325
1325
 
1326
1326
  ------------------------------------------------------------------------------
1327
- vite@6.4.3 (MIT)
1327
+ vite@6.4.4 (MIT)
1328
1328
  ------------------------------------------------------------------------------
1329
1329
 
1330
1330
  # Vite core license
@@ -3735,7 +3735,7 @@ Repository: git+https://github.com/websockets/ws.git
3735
3735
  > CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3736
3736
 
3737
3737
  ------------------------------------------------------------------------------
3738
- vue@3.5.42 (MIT)
3738
+ vue@3.5.43 (MIT)
3739
3739
  ------------------------------------------------------------------------------
3740
3740
 
3741
3741
  The MIT License (MIT)
@@ -3811,7 +3811,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
3811
3811
  THE SOFTWARE.
3812
3812
 
3813
3813
  ------------------------------------------------------------------------------
3814
- zod@4.5.2 (MIT)
3814
+ zod@4.6.6 (MIT)
3815
3815
  ------------------------------------------------------------------------------
3816
3816
 
3817
3817
  MIT License
@@ -0,0 +1,2 @@
1
+ import{f as m,d as E,c as u,b,a as p,F as h,j as k,g as c,E as x,t as y,e as S}from"./index-C-WfCDd6.js";let I=0;function G(s){const e=`field-${++I}`,n=`${e}-hint`,o=`${e}-error`,l=m(()=>s.field.label??N(V(s.path))),i=m(()=>{var r;const t=(r=s.issues)==null?void 0:r.find(d=>d.path===s.path);return(t==null?void 0:t.message)??null}),a=m(()=>{const t=[s.field.description?n:null,i.value?o:null].filter(Boolean);return t.length>0?t.join(" "):void 0});return{inputId:e,label:l,error:i,describedBy:a,hintId:n,errorId:o}}function V(s){return s.split(".").at(-1)??s}function N(s){const e=s.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ");return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()}const $={full:"col-span-12",half:"col-span-12 sm:col-span-6",third:"col-span-12 sm:col-span-4"};function K(s){return $[s.width??"full"]??$.full}function L(s,e,n){return j(s,e,n,[],[])}function j(s,e,n,o,l){const i=[];for(const[a,t]of Object.entries(s)){if(t.hidden)continue;const r=e===null?void 0:e[a],d=n===null?void 0:n[a],f=[...o,a],g=[...l,t.label??N(a)];if(t.kind==="object"){i.push(...j(t.fields,e===null?null:_(r)??{},n===null?null:_(d)??{},f,g));continue}if(t.kind==="repeater"){i.push(...O(t.fields,t.itemLabel,B(r),B(d),f,g,{before:e!==null,after:n!==null}));continue}A(r)!==A(d)&&i.push({path:f.join("."),label:g,kind:t.kind,before:e===null?null:C(t,r),after:n===null?null:C(t,d)})}return i}function O(s,e,n,o,l,i,a){const t=[],r=Math.max((n==null?void 0:n.length)??0,(o==null?void 0:o.length)??0);for(let d=0;d<r;d++){const f=(n==null?void 0:n[d])??(a.before?{}:null),g=(o==null?void 0:o[d])??(a.after?{}:null),F=v=>{const w=e?v==null?void 0:v[e]:void 0;return typeof w=="string"&&w!==""?w:`${d+1}`};t.push(...j(s,f,g,[...l,String(d)],[...i,F(g??f)]))}return t}function C(s,e){if(e==null||e==="")return"Empty";if(s.kind==="boolean")return e===!0?"Yes":"No";if(s.kind==="select")return(Array.isArray(e)?e:[e]).map(o=>{var l;return((l=s.options.find(i=>i.value===o))==null?void 0:l.label)??String(o)}).join(", ");if(s.kind==="media"){const n=Array.isArray(e)?e:[e];return n.length===0?"Empty":n.map(o=>{const{path:l,alt:i}=typeof o=="string"?{path:o,alt:null}:_(o)??{},a=String(l).split("/").at(-1)??String(l);return typeof i=="string"&&i?`${a} ("${i}")`:a}).join(", ")}if(s.kind==="coordinates"){const n=_(e);if(n&&typeof n.lat=="number"&&typeof n.lng=="number")return`${n.lat.toFixed(5)}, ${n.lng.toFixed(5)}`}return Array.isArray(e)?e.map(String).join(", "):typeof e=="object"?A(e):String(e)}function _(s){return s!==null&&typeof s=="object"&&!Array.isArray(s)?s:null}function B(s){return Array.isArray(s)?s:null}function A(s){return JSON.stringify(s??null,(e,n)=>{if(n===null||typeof n!="object"||Array.isArray(n))return n;const o=n,l={};for(const i of Object.keys(o).sort())l[i]=o[i];return l})}const R={class:"mt-3 rounded-md border border-line bg-canvas/60 p-3 text-xs"},z={key:0,class:"mb-2 font-medium text-success"},D={key:1,class:"mb-2 font-medium text-danger"},M={key:2,class:"grid grid-cols-2 gap-3"},T={class:"list-decimal space-y-0.5 pl-5"},q={class:"list-decimal space-y-0.5 pl-5"},H={key:0,class:"text-muted"},J={key:1,class:"space-y-3"},P={class:"mb-1 font-medium"},U={key:0,class:"text-muted","aria-hidden":"true"},W={key:0,class:"max-h-48 overflow-y-auto whitespace-pre-wrap break-words rounded-sm border border-danger/15 bg-danger-soft/60 p-2"},Y={key:1,class:"max-h-48 overflow-y-auto whitespace-pre-wrap break-words rounded-sm border border-success/15 bg-success-soft/60 p-2"},Q=E({__name:"ChangeComparison",props:{comparison:{},fields:{}},setup(s){const e=s,n=m(()=>e.comparison.before===null?"created":e.comparison.after===null?"deleted":"changed"),o=m(()=>e.fields?L(e.fields,e.comparison.before,e.comparison.after):[]),l=m(()=>{if(e.fields)return null;const a=t=>Array.isArray(t==null?void 0:t.order)?t.order:[];return{before:a(e.comparison.before),after:a(e.comparison.after)}}),i=m(()=>{if(!l.value)return new Set;const a=new Map(l.value.before.map((t,r)=>[t.slug,r]));return new Set(l.value.after.filter((t,r)=>a.get(t.slug)!==r).map(t=>t.slug))});return(a,t)=>(c(),u("div",R,[n.value==="created"?(c(),u("p",z," New — publishing puts this on the site for the first time. ")):n.value==="deleted"?(c(),u("p",D," Publishing removes this from the site. ")):b("",!0),l.value?(c(),u("div",M,[p("div",null,[t[0]||(t[0]=p("p",{class:"mb-1.5 font-medium text-muted"},"Before",-1)),p("ol",T,[(c(!0),u(h,null,k(l.value.before,r=>(c(),u("li",{key:r.slug,class:x(i.value.has(r.slug)&&"font-medium text-ink")},y(r.title),3))),128))])]),p("div",null,[t[1]||(t[1]=p("p",{class:"mb-1.5 font-medium text-muted"},"After",-1)),p("ol",q,[(c(!0),u(h,null,k(l.value.after,r=>(c(),u("li",{key:r.slug,class:x(i.value.has(r.slug)&&"font-medium text-success")},y(r.title),3))),128))])])])):(c(),u(h,{key:3},[o.value.length===0?(c(),u("p",H," Nothing visible changed — files moved or were rewritten without a field changing its value. ")):(c(),u("dl",J,[(c(!0),u(h,null,k(o.value,r=>(c(),u("div",{key:r.path},[p("dt",P,[(c(!0),u(h,null,k(r.label,(d,f)=>(c(),u(h,{key:f},[f>0?(c(),u("span",U," › ")):b("",!0),p("span",null,y(d),1)],64))),128))]),p("dd",{class:x(["grid gap-2",n.value==="changed"?"grid-cols-2":"grid-cols-1"])},[n.value!=="created"?(c(),u("div",W,[t[2]||(t[2]=p("span",{class:"sr-only"},"Before: ",-1)),S(y(r.before),1)])):b("",!0),n.value!=="deleted"?(c(),u("div",Y,[t[3]||(t[3]=p("span",{class:"sr-only"},"After: ",-1)),S(y(r.after),1)])):b("",!0)],2)]))),128))]))],64))]))}});export{Q as _,N as h,G as u,K as w};
2
+ //# sourceMappingURL=ChangeComparison.vue_vue_type_script_setup_true_lang-CN7QLLgS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangeComparison.vue_vue_type_script_setup_true_lang-CN7QLLgS.js","sources":["../../src/composables/useField.ts","../../src/lib/compare.ts","../../src/components/ChangeComparison.vue"],"sourcesContent":["/**\n * Shared plumbing for every field component: a stable input id, the label to\n * show, and the server-side issue that belongs to this exact path.\n */\n\nimport { computed, type ComputedRef } from \"vue\";\n\nimport type { AnyField, FieldIssue } from \"@micacms/core\";\n\nlet sequence = 0;\n\nexport interface FieldProps {\n field: AnyField;\n /** Dotted path, e.g. `seo.metaTitle` or `facts.2.label`. */\n path: string;\n /** Flat issue list for the whole form; each field picks out its own. */\n issues?: FieldIssue[];\n disabled?: boolean;\n}\n\nexport interface UseField {\n inputId: string;\n label: ComputedRef<string>;\n error: ComputedRef<string | null>;\n describedBy: ComputedRef<string | undefined>;\n hintId: string;\n errorId: string;\n}\n\nexport function useField(props: FieldProps): UseField {\n const inputId = `field-${++sequence}`;\n const hintId = `${inputId}-hint`;\n const errorId = `${inputId}-error`;\n\n const label = computed(() => props.field.label ?? humanise(lastSegment(props.path)));\n\n const error = computed(() => {\n const match = props.issues?.find((issue) => issue.path === props.path);\n return match?.message ?? null;\n });\n\n const describedBy = computed(() => {\n const parts = [props.field.description ? hintId : null, error.value ? errorId : null].filter(\n Boolean,\n );\n return parts.length > 0 ? parts.join(\" \") : undefined;\n });\n\n return { inputId, label, error, describedBy, hintId, errorId };\n}\n\nfunction lastSegment(path: string): string {\n return path.split(\".\").at(-1) ?? path;\n}\n\n/** `metaTitle` → `Meta title`, used when a field declares no label. */\nexport function humanise(key: string): string {\n const spaced = key.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").replace(/[_-]+/g, \" \");\n return spaced.charAt(0).toUpperCase() + spaced.slice(1).toLowerCase();\n}\n\nconst WIDTHS: Record<string, string> = {\n full: \"col-span-12\",\n half: \"col-span-12 sm:col-span-6\",\n third: \"col-span-12 sm:col-span-4\",\n};\n\nexport function widthClass(field: AnyField): string {\n return WIDTHS[field.width ?? \"full\"] ?? WIDTHS.full!;\n}\n","/**\n * Turns a raw before/after pair into rows an editor reads.\n *\n * The server's comparison is two documents of field data; everything friendly\n * about it happens here, where the model is at hand: fields get their labels,\n * nesting becomes a breadcrumb, unchanged values disappear, and each value is\n * written the way its field type would show it — never as JSON with quotes.\n */\n\nimport type { AnyField, FieldMap } from \"@micacms/core\";\n\nimport { humanise } from \"@/composables/useField\";\n\n/** One changed value, named and rendered for both sides. */\nexport interface CompareRow {\n /** Unique among the rows — the dotted path of the leaf. */\n path: string;\n /** Breadcrumb of labels, e.g. `[\"Extra sections\", \"2\", \"Heading\"]`. */\n label: string[];\n /** The field's kind, as a rendering hint (`richText` wants more room). */\n kind: string;\n /** Display strings; null on the side where the document does not exist. */\n before: string | null;\n after: string | null;\n}\n\n/**\n * The changed fields between two documents, in model order.\n *\n * A side that is null means the document itself is absent there (a creation\n * or a deletion); every present value on the other side becomes a row, so the\n * comparison doubles as a summary of the new or removed document.\n */\nexport function compareRows(\n fields: FieldMap,\n before: Record<string, unknown> | null,\n after: Record<string, unknown> | null,\n): CompareRow[] {\n return walk(fields, before, after, [], []);\n}\n\nfunction walk(\n fields: FieldMap,\n before: Record<string, unknown> | null,\n after: Record<string, unknown> | null,\n path: string[],\n label: string[],\n): CompareRow[] {\n const rows: CompareRow[] = [];\n\n for (const [name, field] of Object.entries(fields)) {\n if (field.hidden) continue;\n\n const a = before === null ? undefined : before[name];\n const b = after === null ? undefined : after[name];\n const at = [...path, name];\n const named = [...label, field.label ?? humanise(name)];\n\n // Null means \"this side's document does not exist\" all the way down. A\n // *value* that is merely missing inside an existing document becomes an\n // empty record instead, so its leaves read as Empty rather than vanish.\n if (field.kind === \"object\") {\n rows.push(\n ...walk(\n field.fields,\n before === null ? null : (asRecord(a) ?? {}),\n after === null ? null : (asRecord(b) ?? {}),\n at,\n named,\n ),\n );\n continue;\n }\n\n if (field.kind === \"repeater\") {\n rows.push(\n ...repeaterRows(field.fields, field.itemLabel, asList(a), asList(b), at, named, {\n before: before !== null,\n after: after !== null,\n }),\n );\n continue;\n }\n\n if (canonical(a) === canonical(b)) continue;\n\n rows.push({\n path: at.join(\".\"),\n label: named,\n kind: field.kind,\n before: before === null ? null : displayValue(field, a),\n after: after === null ? null : displayValue(field, b),\n });\n }\n\n return rows;\n}\n\n/**\n * Repeater items compared by position. Position is what the editor sees and\n * what the file stores; chasing moved items across indexes would guess.\n */\nfunction repeaterRows(\n fields: FieldMap,\n itemLabel: string | undefined,\n before: Array<Record<string, unknown>> | null,\n after: Array<Record<string, unknown>> | null,\n path: string[],\n label: string[],\n present: { before: boolean; after: boolean },\n): CompareRow[] {\n const rows: CompareRow[] = [];\n const count = Math.max(before?.length ?? 0, after?.length ?? 0);\n\n for (let index = 0; index < count; index++) {\n const a = before?.[index] ?? (present.before ? {} : null);\n const b = after?.[index] ?? (present.after ? {} : null);\n\n // Name the item by its summary field where one is set, else its number.\n const caption = (item: Record<string, unknown> | null) => {\n const value = itemLabel ? item?.[itemLabel] : undefined;\n return typeof value === \"string\" && value !== \"\" ? value : `${index + 1}`;\n };\n\n rows.push(...walk(fields, a, b, [...path, String(index)], [...label, caption(b ?? a)]));\n }\n\n return rows;\n}\n\n/**\n * A field value as the editor would say it — `displayValue` never shows JSON.\n * Null on both ends of a row is prevented by the change filter, so \"Empty\"\n * only ever appears opposite a real value.\n */\nexport function displayValue(field: AnyField, value: unknown): string {\n if (value === null || value === undefined || value === \"\") return \"Empty\";\n\n if (field.kind === \"boolean\") return value === true ? \"Yes\" : \"No\";\n\n if (field.kind === \"select\") {\n const values = Array.isArray(value) ? value : [value];\n return values\n .map((entry) => field.options.find((option) => option.value === entry)?.label ?? String(entry))\n .join(\", \");\n }\n\n if (field.kind === \"media\") {\n const values = Array.isArray(value) ? value : [value];\n if (values.length === 0) return \"Empty\";\n return values\n .map((entry) => {\n // `media({ alt })` stores `{ path, alt }`.\n const { path, alt } = typeof entry === \"string\" ? { path: entry, alt: null } : (asRecord(entry) ?? {});\n const name = String(path).split(\"/\").at(-1) ?? String(path);\n return typeof alt === \"string\" && alt ? `${name} (\"${alt}\")` : name;\n })\n .join(\", \");\n }\n\n if (field.kind === \"coordinates\") {\n const point = asRecord(value);\n if (point && typeof point[\"lat\"] === \"number\" && typeof point[\"lng\"] === \"number\") {\n return `${point[\"lat\"].toFixed(5)}, ${point[\"lng\"].toFixed(5)}`;\n }\n }\n\n if (Array.isArray(value)) return value.map(String).join(\", \");\n if (typeof value === \"object\") return canonical(value);\n\n return String(value);\n}\n\n/* ------------------------------------------------------------------ */\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction asList(value: unknown): Array<Record<string, unknown>> | null {\n return Array.isArray(value) ? (value as Array<Record<string, unknown>>) : null;\n}\n\n/** Canonical JSON — keys sorted, so a rebuilt object compares equal. */\nfunction canonical(value: unknown): string {\n return JSON.stringify(value ?? null, (_key, entry: unknown) => {\n if (entry === null || typeof entry !== \"object\" || Array.isArray(entry)) return entry;\n const record = entry as Record<string, unknown>;\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(record).sort()) sorted[key] = record[key];\n return sorted;\n });\n}\n","<script setup lang=\"ts\">\n/**\n * What a pending change does, said as before and after.\n *\n * Not a diff: no line numbers, no `+`/`-`, no file contents. Each changed\n * field is one row with the stored value on the left and the staged one on\n * the right, worded by the field type — an editor who has never read a patch\n * can see exactly what publishing applies.\n */\n\nimport { computed } from \"vue\";\n\nimport type { FieldMap } from \"@micacms/core\";\n\nimport type { Comparison } from \"@/api\";\nimport { compareRows } from \"@/lib/compare\";\n\nconst props = defineProps<{\n comparison: Comparison;\n /** The owning document's fields; null for an order comparison. */\n fields: FieldMap | null;\n}>();\n\nconst mode = computed<\"created\" | \"deleted\" | \"changed\">(() => {\n if (props.comparison.before === null) return \"created\";\n if (props.comparison.after === null) return \"deleted\";\n return \"changed\";\n});\n\nconst rows = computed(() =>\n props.fields\n ? compareRows(props.fields, props.comparison.before, props.comparison.after)\n : [],\n);\n\n/** An order comparison — the collection's sequence on both sides. */\ninterface OrderItem {\n slug: string;\n title: string;\n}\n\nconst order = computed(() => {\n if (props.fields) return null;\n const side = (data: Record<string, unknown> | null): OrderItem[] =>\n Array.isArray(data?.[\"order\"]) ? (data[\"order\"] as OrderItem[]) : [];\n return { before: side(props.comparison.before), after: side(props.comparison.after) };\n});\n\n/** Slugs whose position changed, which is what an order change *is*. */\nconst moved = computed(() => {\n if (!order.value) return new Set<string>();\n const positions = new Map(order.value.before.map((item, index) => [item.slug, index]));\n return new Set(\n order.value.after\n .filter((item, index) => positions.get(item.slug) !== index)\n .map((item) => item.slug),\n );\n});\n</script>\n\n<template>\n <div class=\"mt-3 rounded-md border border-line bg-canvas/60 p-3 text-xs\">\n <p v-if=\"mode === 'created'\" class=\"mb-2 font-medium text-success\">\n New — publishing puts this on the site for the first time.\n </p>\n <p v-else-if=\"mode === 'deleted'\" class=\"mb-2 font-medium text-danger\">\n Publishing removes this from the site.\n </p>\n\n <!-- An order change: the sequence, before and after. -->\n <div v-if=\"order\" class=\"grid grid-cols-2 gap-3\">\n <div>\n <p class=\"mb-1.5 font-medium text-muted\">Before</p>\n <ol class=\"list-decimal space-y-0.5 pl-5\">\n <li\n v-for=\"item in order.before\"\n :key=\"item.slug\"\n :class=\"moved.has(item.slug) && 'font-medium text-ink'\"\n >\n {{ item.title }}\n </li>\n </ol>\n </div>\n <div>\n <p class=\"mb-1.5 font-medium text-muted\">After</p>\n <ol class=\"list-decimal space-y-0.5 pl-5\">\n <li\n v-for=\"item in order.after\"\n :key=\"item.slug\"\n :class=\"moved.has(item.slug) && 'font-medium text-success'\"\n >\n {{ item.title }}\n </li>\n </ol>\n </div>\n </div>\n\n <!-- Field changes. -->\n <template v-else>\n <p v-if=\"rows.length === 0\" class=\"text-muted\">\n Nothing visible changed — files moved or were rewritten without a field changing its value.\n </p>\n\n <dl v-else class=\"space-y-3\">\n <div v-for=\"row in rows\" :key=\"row.path\">\n <dt class=\"mb-1 font-medium\">\n <template v-for=\"(part, index) in row.label\" :key=\"index\">\n <span v-if=\"index > 0\" class=\"text-muted\" aria-hidden=\"true\"> › </span\n ><span>{{ part }}</span>\n </template>\n </dt>\n <dd :class=\"['grid gap-2', mode === 'changed' ? 'grid-cols-2' : 'grid-cols-1']\">\n <div\n v-if=\"mode !== 'created'\"\n class=\"max-h-48 overflow-y-auto whitespace-pre-wrap break-words rounded-sm border border-danger/15 bg-danger-soft/60 p-2\"\n >\n <span class=\"sr-only\">Before: </span>{{ row.before }}\n </div>\n <div\n v-if=\"mode !== 'deleted'\"\n class=\"max-h-48 overflow-y-auto whitespace-pre-wrap break-words rounded-sm border border-success/15 bg-success-soft/60 p-2\"\n >\n <span class=\"sr-only\">After: </span>{{ row.after }}\n </div>\n </dd>\n </div>\n </dl>\n </template>\n </div>\n</template>\n"],"names":["sequence","useField","props","inputId","hintId","errorId","label","computed","humanise","lastSegment","error","match","_a","issue","describedBy","parts","path","key","spaced","WIDTHS","widthClass","field","compareRows","fields","before","after","walk","rows","name","a","b","at","named","asRecord","repeaterRows","asList","canonical","displayValue","itemLabel","present","count","index","caption","item","value","entry","option","values","alt","point","_key","record","sorted","__props","mode","order","side","data","moved","positions","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createElementVNode","_cache","_hoisted_5","_Fragment","_renderList","_toDisplayString","_hoisted_6","_hoisted_7","_hoisted_8","row","_hoisted_9","part","_hoisted_10","_hoisted_11","_createTextVNode","_hoisted_12"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import{H as Ne,d as Re,q as he,o as We,c as o,i as S,w as P,a as s,k as c,F as m,s as J,b as i,t as l,j as B,B as Ee,v as Ie,x as Ae,l as Ve,r as v,f as y,n as $,A as D,p as Be,g as n,e as g,V as Fe,W as Ye,E as me,a2 as je,a3 as pe,a4 as qe,m as ze,y as Ke,Y as Oe,a5 as Ue,a6 as He}from"./index-C-WfCDd6.js";import{_ as ve}from"./ChangeComparison.vue_vue_type_script_setup_true_lang-CN7QLLgS.js";import{_ as Ge}from"./ConfirmDialog.vue_vue_type_script_setup_true_lang-CWanooQO.js";import{_ as Q}from"./DeveloperDetails.vue_vue_type_script_setup_true_lang-Bp-D1Kf1.js";import{_ as Je}from"./PageHeader.vue_vue_type_script_setup_true_lang-YO9Lox87.js";import{r as Qe}from"./format-CAimH9FV.js";/**
2
+ * @license @lucide/vue v1.55.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const Xe={name:"refresh-cw",size:24,node:[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]},Ze=Ne(Xe),et=["disabled"],tt={class:"mx-auto max-w-3xl space-y-5 px-4 py-6 sm:px-6"},st={key:0,class:"text-sm text-muted"},at={key:0,role:"status",class:"rounded-md border border-success/15 bg-success-soft p-4"},nt={class:"font-mono"},ot={key:1,role:"alert",class:"rounded-md border border-warning/15 bg-warning-soft p-4"},lt={class:"mt-1 text-xs text-muted"},it={key:2,class:"rounded-md border border-line bg-subtle p-4 text-sm text-muted"},rt={class:"mt-1"},ut={key:0,role:"alert",class:"rounded-md border border-warning/15 bg-warning-soft p-4"},dt={key:1,role:"alert",class:"rounded-md border border-warning/15 bg-warning-soft p-4"},ct={class:"text-sm font-medium text-warning"},ht={class:"mt-1 text-xs text-muted"},mt=["disabled"],pt={key:2,role:"status",class:"rounded-md border border-line bg-subtle p-4"},vt={class:"mt-1 text-xs text-muted"},gt={key:3,role:"alert",class:"rounded-md border border-danger/15 bg-danger-soft p-4"},bt={class:"mt-1 text-xs text-muted"},yt={key:4,"aria-labelledby":"conflicts-heading",class:"space-y-3"},ft={class:"card divide-y divide-line"},xt={class:"text-sm font-medium"},wt={class:"mt-0.5 text-xs text-muted"},kt={key:0,class:"mt-2 text-xs text-muted"},_t={key:1,class:"mt-2 text-xs text-danger"},Ct={key:1,role:"alert",class:"mt-2 text-xs text-danger"},Tt={class:"mt-2.5 flex flex-wrap gap-2"},Pt=["disabled","onClick"],Mt=["disabled","onClick"],St={key:4,role:"alert",class:"rounded-md border border-warning/15 bg-warning-soft p-4"},$t={class:"mt-1 text-xs text-muted"},Dt=["disabled"],Lt={key:5,role:"alert",class:"rounded-md border border-warning/15 bg-warning-soft p-4"},Nt={class:"mt-1 text-xs text-muted"},Rt={key:6,role:"alert",class:"rounded-md border border-danger/15 bg-danger-soft p-4"},Wt={class:"mt-1.5 space-y-1 text-xs text-danger"},Et={class:"font-medium"},It={key:7,class:"card p-8 text-center"},At={key:8,"aria-labelledby":"changes-heading",class:"space-y-2"},Vt={class:"flex flex-wrap items-baseline justify-between gap-2"},Bt={id:"changes-heading",class:"text-sm font-semibold"},Ft={key:0,class:"flex gap-1"},Yt={class:"card divide-y divide-line"},jt=["id","checked","disabled","aria-label","onChange"],qt={class:"min-w-0 flex-1"},zt={class:"flex flex-wrap items-baseline gap-x-2"},Kt={key:0,class:"text-xs text-muted"},Ot={key:1,class:"text-xs text-warning"},Ut={key:0,class:"mt-1 text-xs text-danger"},Ht={key:1,class:"mt-1 text-xs text-danger"},Gt={key:2,class:"mt-1 text-xs text-muted"},Jt={key:0,class:"mt-2 text-xs text-muted"},Qt={key:1,class:"mt-2 text-xs text-danger"},Xt={key:4,class:"mt-1 space-y-0.5"},Zt={class:"break-all font-mono"},es=["onClick"],ts={key:9,class:"card p-4","aria-labelledby":"publish-heading"},ss={id:"publish-heading",class:"text-sm font-semibold"},as={class:"flex flex-wrap items-center gap-2"},ns=["disabled"],os=["disabled"],ls={key:0},is={class:"font-mono"},rs={class:"font-mono"},us={key:1},ds={key:2,class:"text-sm text-muted"},ys=Re({__name:"ChangesView",setup(cs){const te=Ke(),M=Ve(),f=Be(),X=v(!0),L=v(!1),F=v(!1),N=v(null),Z=v(!1),R=v(null),W=v(null),r=M.status,h=M.edits,Y=y(()=>{var t;return Oe(h.value,((t=r.value)==null?void 0:t.validation.problems)??[])}),E=y(()=>Ue(h.value,Y.value)),ge=y(()=>new Map(h.value.map(t=>[t.key,t.label]))),be=y(()=>new Set(h.value.flatMap(t=>t.needs)));function se(t,e){const u=h.value.find(d=>(Y.value.get(d.key)??[]).some(G=>G.path===t));return u!=null&&u.link?{...u.link,...e?{query:{field:e}}:{}}:null}const _=v(new Set),ae=new Set;function ye(t){const e=new Set(t.map(d=>d.key)),u=new Set([..._.value].filter(d=>e.has(d)&&!E.value.has(d)));for(const d of t)ae.has(d.key)||E.value.has(d.key)||(ae.add(d.key),u.add(d.key));_.value=pe(u,t)}function fe(t){_.value=_.value.has(t)?je(_.value,t,h.value):pe([..._.value,t],h.value)}function ne(t){_.value=new Set(t?oe.value.map(e=>e.key):[])}const I=y(()=>h.value.filter(t=>_.value.has(t.key))),oe=y(()=>h.value.filter(t=>!E.value.has(t.key))),ee=v(null),j=y({get:()=>ee.value??He(I.value),set:t=>{ee.value=t}}),x=v({});function le(t){var e,u;return t.kind==="entry"?((e=te.collection(t.collection))==null?void 0:e.fields)??null:t.kind==="singleton"?((u=te.singleton(t.name))==null?void 0:u.fields)??null:null}async function ie(t){if(t.target){x.value[t.key]={loading:!0,error:null,comparison:null};try{const e=await $.staging.compare(t.target);x.value[t.key]={loading:!1,error:null,comparison:e}}catch(e){x.value[t.key]={loading:!1,error:e instanceof D?e.message:"Could not load the comparison.",comparison:null}}}}he(h,t=>{ye(t);for(const e of t)e.target&&!x.value[e.key]&&ie(e)},{immediate:!0});const q=y(()=>{var t;return((t=r.value)==null?void 0:t.owner)==="developer"}),b=y(()=>{var t;return((t=r.value)==null?void 0:t.sync)??null}),xe=y(()=>{var t,e;return q.value&&(W.value!==null||(((e=(t=r.value)==null?void 0:t.unpushed)==null?void 0:e.mica)??0)>0)}),w=y(()=>{var t,e;return q.value?((e=(t=r.value)==null?void 0:t.unpushed)==null?void 0:e.other)??0:0}),re=y(()=>{var t;return(((t=r.value)==null?void 0:t.publish.enabled)??!1)&&I.value.length>0&&j.value.trim()!==""&&w.value===0&&!L.value}),we={new:"New",changed:"Changed",removed:"Will be removed"},ke={create:"Added",update:"Changed",delete:"Removed"};async function z(){x.value={},await M.refresh();for(const t of h.value)t.target&&!x.value[t.key]&&ie(t);X.value=!1}We(z);async function _e(){var t;L.value=!0,R.value=null;try{const e=await $.staging.publish(j.value.trim(),qe(I.value));ee.value=null,e.state==="published"?(W.value=null,R.value={revision:e.revision}):q.value?(W.value=e,f.error("Published here, but not sent to the website.",e.pushError)):f.error("Published in Mica, not on the website yet.","Mica tries again every minute."),await M.refresh()}catch(e){e instanceof D?(f.error(e.message,(t=e.issues[0])==null?void 0:t.message),await M.refresh()):f.error("Could not publish.")}finally{L.value=!1}}async function Ce(){F.value=!0;try{const t=await $.staging.push();t.state==="published"?(W.value=null,R.value={revision:t.revision}):(W.value=t,f.error("It could not be sent again.",t.pushError)),await M.refresh()}catch(t){f.error(t instanceof D?t.message:"Could not send it to the website.")}finally{F.value=!1}}async function Te(){const t=N.value;if(t){Z.value=!0;try{await $.staging.discard(t.fileChanges.map(e=>e.path)),f.success(`Discarded the changes to ${t.label}.`),N.value=null,await M.refresh()}catch(e){f.error(e instanceof D?e.message:"Could not discard.")}finally{Z.value=!1}}}const K=v(!1),O=v(null),U=v(null);async function Pe(){K.value=!0;try{await $.staging.sync(),await z()}catch(t){f.error(t instanceof D?t.message:"Could not reach the website's files.")}finally{K.value=!1}}function Me(t){var u;const e=new Set((((u=r.value)==null?void 0:u.changes)??[]).filter(d=>d.kind==="create").map(d=>d.path));return t.paths.some(d=>e.has(d))}async function ue(t,e){if(e==="website"&&Me(t)&&U.value!==t){U.value=t;return}U.value=null,O.value=t.group;try{await $.staging.resolve(t.group,e),f.success(e==="mine"?`Kept your version of ${t.label}.`:`Took the website's version of ${t.label}.`),await z()}catch(u){f.error(u instanceof D?u.message:"Could not resolve the conflict.")}finally{O.value=null}}const Se={changed:"was changed on the website while you edited it",deleted:"was deleted on the website while you edited it",added:"was also created on the website"},C=v({});async function $e(t){if(t.target){C.value[t.group]={loading:!0,error:null,comparison:null};try{const e=await $.staging.compare(t.target,"origin");C.value[t.group]={loading:!1,error:null,comparison:e}}catch(e){C.value[t.group]={loading:!1,error:e instanceof D?e.message:"Could not load the comparison.",comparison:null}}}}he(()=>{var t;return((t=b.value)==null?void 0:t.conflicts)??[]},t=>{for(const e of t)C.value[e.group]||$e(e)});function De(t){return new Date(t).toLocaleString()}function de(t){return/^[0-9a-f]{20,}$/i.test(t)?t.slice(0,7):t}function H(t,e,u){return`${t} ${t===1?e:u}`}return(t,e)=>{var d,G,ce;const u=ze("RouterLink");return n(),o(m,null,[S(Je,{title:"Publish",subtitle:"Saved changes that are not on the website yet"},{default:P(()=>[s("button",{type:"button",class:"btn-ghost px-2",disabled:X.value,onClick:z},[S(c(Ze),{size:16,"aria-hidden":"true"}),e[5]||(e[5]=s("span",{class:"sr-only"},"Refresh the list of changes",-1))],8,et)]),_:1}),s("div",tt,[X.value?(n(),o("p",st,"Loading…")):c(r)?(n(),o(m,{key:1},[R.value?(n(),o("div",at,[e[8]||(e[8]=s("p",{class:"text-sm font-medium text-success"},"Published",-1)),e[9]||(e[9]=s("p",{class:"mt-1 text-xs text-muted"}," Your website is being rebuilt now. This usually takes a few minutes. ",-1)),R.value.revision?(n(),J(Q,{key:0},{default:P(()=>[s("p",null,[e[6]||(e[6]=g("Commit ",-1)),s("span",nt,l(de(R.value.revision)),1),e[7]||(e[7]=g(".",-1))])]),_:1})):i("",!0)])):i("",!0),(d=c(r).model)!=null&&d.warning?(n(),o("div",ot,[e[10]||(e[10]=s("p",{class:"text-sm font-medium text-warning"},"Publishing waits for the developer",-1)),s("p",lt," The website's new content model cannot be read. You can go on saving. Tell the developer: "+l(c(r).model.warning),1)])):i("",!0),c(r).publish.enabled?i("",!0):(n(),o("div",it,[e[11]||(e[11]=s("p",{class:"font-medium text-ink"},"Publishing is not available here",-1)),s("p",rt,l(c(r).publish.reason),1)])),b.value?(n(),o(m,{key:3},[b.value.restartRequired?(n(),o("div",ut,[...e[12]||(e[12]=[s("p",{class:"text-sm font-medium text-warning"},"The way the website stores its files changed",-1),s("p",{class:"mt-1 text-xs text-muted"}," You can go on saving. To publish, ask the person who runs Mica to restart it. ",-1)])])):i("",!0),b.value.error?(n(),o("div",dt,[s("p",ct,"Mica cannot reach the website's files since "+l(De(b.value.error.since)),1),s("p",ht," You can go on saving. Mica tries again every minute. If this stays, tell the person who runs Mica: "+l(b.value.error.message),1),s("button",{type:"button",class:"btn-secondary mt-2.5",disabled:K.value,onClick:Pe},l(K.value?"Trying…":"Try again"),9,mt)])):i("",!0),b.value.pendingPush?(n(),o("div",pt,[e[13]||(e[13]=s("p",{class:"text-sm font-medium"},"Published in Mica, not on the website yet",-1)),s("p",vt," Mica tries again every minute. If this stays, tell the person who runs Mica: "+l(b.value.pendingPush.reason),1)])):i("",!0),b.value.refused?(n(),o("div",gt,[e[14]||(e[14]=s("p",{class:"text-sm font-medium text-danger"},"The last publication was refused",-1)),s("p",bt," Its changes are listed below again. Tell the person who runs Mica: "+l(b.value.refused.reason),1)])):i("",!0),b.value.conflicts.length>0?(n(),o("section",yt,[e[16]||(e[16]=s("h2",{id:"conflicts-heading",class:"text-sm font-semibold"}," Changed on the website while you edited ",-1)),e[17]||(e[17]=s("p",{class:"text-xs text-muted"}," Choose a version for each. Until you do, nothing can be published and the website's newer changes stay out of Mica. ",-1)),s("ul",ft,[(n(!0),o(m,null,B(b.value.conflicts,a=>{var k,T,A,V;return n(),o("li",{key:a.group,class:"p-4"},[s("p",xt,l(a.label),1),s("p",wt,"It "+l(Se[a.upstream])+".",1),a.target?(n(),o(m,{key:0},[(k=C.value[a.group])!=null&&k.loading?(n(),o("p",kt,"Comparing…")):(T=C.value[a.group])!=null&&T.error?(n(),o("p",_t,l((A=C.value[a.group])==null?void 0:A.error),1)):(V=C.value[a.group])!=null&&V.comparison?(n(),o(m,{key:2},[e[15]||(e[15]=s("p",{class:"mt-2 text-xs text-muted"},"The website's version, then yours:",-1)),S(ve,{comparison:C.value[a.group].comparison,fields:le(a.target)},null,8,["comparison","fields"])],64)):i("",!0)],64)):i("",!0),U.value===a?(n(),o("p",Ct," This deletes the entry you created. Press the button again to confirm. ")):i("",!0),s("div",Tt,[s("button",{type:"button",class:"btn-secondary",disabled:O.value!==null,onClick:p=>ue(a,"mine")},l(a.upstream==="deleted"?"Restore it":"Keep my version"),9,Pt),s("button",{type:"button",class:"btn-ghost",disabled:O.value!==null,onClick:p=>ue(a,"website")},l(a.upstream==="deleted"?"Accept the deletion":"Use the website's version"),9,Mt)])])}),128))])])):i("",!0)],64)):i("",!0),xe.value?(n(),o("div",St,[e[19]||(e[19]=s("p",{class:"text-sm font-medium text-warning"},"Published here, but not sent to the website yet",-1)),s("p",$t,l(((G=W.value)==null?void 0:G.pushError)??"Try again to send it. Nothing is published twice."),1),s("button",{type:"button",class:"btn-secondary mt-2.5",disabled:F.value,onClick:Ce},l(F.value?"Sending…":"Try again"),9,Dt),S(Q,null,{default:P(()=>[...e[18]||(e[18]=[s("p",null,[g('The commit is in your checkout. "Try again" runs '),s("code",null,"git push"),g(" and never commits again.")],-1)])]),_:1})])):i("",!0),w.value>0?(n(),o("div",Lt,[e[21]||(e[21]=s("p",{class:"text-sm font-medium text-warning"},"Publishing waits for other work",-1)),s("p",Nt," This copy of the website has "+l(H(w.value,"change","changes"))+" that "+l(w.value===1?"was":"were")+" not made in Mica and "+l(w.value===1?"is":"are")+" not on the website yet. Publishing would send "+l(w.value===1?"it":"them")+" too. ",1),S(Q,null,{default:P(()=>[s("p",null,[g(l(H(w.value,"commit","commits"))+" on this branch "+l(w.value===1?"is":"are")+" on no remote. Push "+l(w.value===1?"it":"them")+" with ",1),e[20]||(e[20]=s("code",null,"git push",-1)),g(", or move "+l(w.value===1?"it":"them")+" to another branch. Then publish. ",1)])]),_:1})])):i("",!0),c(r).validation.ok?i("",!0):(n(),o("div",Rt,[e[22]||(e[22]=s("p",{class:"text-sm font-medium text-danger"},"Some changes cannot be published yet",-1)),e[23]||(e[23]=s("p",{class:"mt-1 text-xs text-muted"},"Fix them, or publish the other changes without them.",-1)),s("ul",Wt,[(n(!0),o(m,null,B(c(r).validation.problems,a=>(n(),o("li",{key:a.path},[s("span",Et,l(a.label),1),(n(!0),o(m,null,B(a.issues,(k,T)=>(n(),o(m,{key:T},[g(l(T===0?"—":";")+" ",1),se(a.path,k.path)?(n(),J(u,{key:0,to:se(a.path,k.path),class:"underline underline-offset-2 hover:no-underline"},{default:P(()=>[g(l(k.message),1)]),_:2},1032,["to"])):(n(),o(m,{key:1},[g(l(k.message),1)],64))],64))),128))]))),128))])])),c(h).length===0?(n(),o("div",It,[...e[24]||(e[24]=[s("p",{class:"text-sm font-medium"},"Nothing waiting to be published",-1),s("p",{class:"mt-1 text-sm text-muted"}," Saved changes collect here until somebody publishes them. Right now the website has everything. ",-1)])])):(n(),o("section",At,[s("div",Vt,[s("h2",Bt,l(H(c(h).length,"saved change","saved changes")),1),c(r).publish.enabled&&oe.value.length>1?(n(),o("div",Ft,[s("button",{type:"button",class:"btn-ghost text-xs",onClick:e[0]||(e[0]=a=>ne(!0))},"Select all"),s("button",{type:"button",class:"btn-ghost text-xs",onClick:e[1]||(e[1]=a=>ne(!1))},"Select none")])):i("",!0)]),s("ul",Yt,[(n(!0),o(m,null,B(c(h),a=>{var k,T,A,V;return n(),o("li",{key:a.key,class:"flex items-start gap-3 p-4"},[c(r).publish.enabled?(n(),o("input",{key:0,id:`publish-${a.key}`,type:"checkbox",class:"mt-1 h-4 w-4 shrink-0",checked:_.value.has(a.key),disabled:E.value.has(a.key)||L.value,"aria-label":`Publish ${a.label}`,onChange:p=>fe(a.key)},null,40,jt)):i("",!0),s("div",qt,[s("div",zt,[(n(),J(Ye(a.link?"RouterLink":"p"),Fe({ref_for:!0},a.link?{to:a.link}:{},{class:["text-sm font-medium",a.link&&"hover:underline"]}),{default:P(()=>[g(l(a.label),1)]),_:2},1040,["class"])),s("span",{class:me(["text-xs",a.state==="removed"?"text-danger":a.state==="new"?"text-success":"text-muted"])},l(we[a.state]),3),a.savedAt?(n(),o("span",Kt," · saved "+l(c(Qe)(a.savedAt)),1)):i("",!0),a.key.startsWith("media:")&&a.state==="new"&&!be.value.has(a.key)?(n(),o("span",Ot," · not in any field yet ")):i("",!0)]),Y.value.has(a.key)?(n(),o("p",Ut," Fix this first: "+l(Y.value.get(a.key).flatMap(p=>p.issues.map(Le=>Le.message)).join("; ")),1)):E.value.has(a.key)?(n(),o("p",Ht," It uses something that must be fixed first. ")):i("",!0),a.needs.length>0?(n(),o("p",Gt," Published together with "+l(a.needs.map(p=>ge.value.get(p)??p).join(", "))+", which it uses. ",1)):i("",!0),a.target?(n(),o(m,{key:3},[(k=x.value[a.key])!=null&&k.loading?(n(),o("p",Jt," Comparing… ")):(T=x.value[a.key])!=null&&T.error?(n(),o("p",Qt,l((A=x.value[a.key])==null?void 0:A.error),1)):(V=x.value[a.key])!=null&&V.comparison?(n(),J(ve,{key:2,comparison:x.value[a.key].comparison,fields:le(a.target)},null,8,["comparison","fields"])):i("",!0)],64)):(n(),o("ul",Xt,[(n(!0),o(m,null,B(a.fileChanges,p=>(n(),o("li",{key:p.path,class:"flex items-baseline gap-2 text-xs text-muted"},[s("span",{class:me(["w-16 shrink-0 font-mono text-[11px]",p.kind==="delete"?"text-danger":p.kind==="create"?"text-success":""])},l(ke[p.kind]),3),s("span",Zt,l(p.path),1)]))),128))]))]),s("button",{type:"button",class:"btn-ghost shrink-0 text-xs",onClick:p=>N.value=a}," Discard ",8,es)])}),128))])])),c(h).length>0&&c(r).publish.enabled?(n(),o("section",ts,[s("h2",ss,l(I.value.length===0?"Choose the changes to publish":`Publish ${H(I.value.length,"change","changes")}`),1),e[30]||(e[30]=s("p",{class:"mt-1 text-xs text-muted"}," The website is rebuilt after you publish. Changes that you do not choose stay saved here. ",-1)),s("form",{class:"mt-3 space-y-2",onSubmit:e[3]||(e[3]=Ee(a=>re.value&&_e(),["prevent"]))},[e[25]||(e[25]=s("label",{for:"publish-summary",class:"field-label"},"Say what changed",-1)),s("div",as,[Ie(s("input",{id:"publish-summary","onUpdate:modelValue":e[2]||(e[2]=a=>j.value=a),type:"text",class:"input min-w-0 flex-1",maxlength:"500",disabled:L.value},null,8,ns),[[Ae,j.value]]),s("button",{type:"submit",class:"btn-primary",disabled:!re.value},l(L.value?"Publishing…":"Publish"),9,os)])],32),S(Q,null,{default:P(()=>[q.value?(n(),o("p",ls,[e[28]||(e[28]=g(" One commit of the chosen files",-1)),c(r).branch?(n(),o(m,{key:0},[e[26]||(e[26]=g(" on branch ",-1)),s("span",is,l(c(r).branch),1)],64)):i("",!0),c(r).head?(n(),o(m,{key:1},[e[27]||(e[27]=g(", after ",-1)),s("span",rs,l(de(c(r).head)),1)],64)):i("",!0),e[29]||(e[29]=g(", pushed with your own Git configuration. The summary is the commit message. ",-1))])):(n(),o("p",us," One commit of the chosen files to the content repository, which starts your website's build. The summary is the commit message. "))]),_:1})])):i("",!0)],64)):(n(),o("p",ds,"The list of changes could not be loaded. Reload to try again."))]),S(Ge,{open:N.value!==null,title:`Discard the changes to “${(ce=N.value)==null?void 0:ce.label}”?`,"confirm-label":"Discard",destructive:"",busy:Z.value,onCancel:e[4]||(e[4]=a=>N.value=null),onConfirm:Te},{default:P(()=>[...e[31]||(e[31]=[s("p",null," This puts it back as it was at the last publication: something new is deleted, and something changed or removed comes back. It cannot be undone. ",-1)])]),_:1},8,["open","title","busy"])],64)}}});export{ys as default};
7
+ //# sourceMappingURL=ChangesView-Dp79M2fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangesView-Dp79M2fs.js","sources":["../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.55.0_vue@3.5.43_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/refresh-cw.mjs","../../src/views/ChangesView.vue"],"sourcesContent":["/**\n * @license @lucide/vue v1.55.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"refresh-cw\",\n size: 24,\n node: [\n [\"path\", { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n [\"path\", { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }],\n [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n ]\n};\nconst RefreshCw = createLucideIcon(__iconData);\n\nexport { __iconData, RefreshCw as default };\n//# sourceMappingURL=refresh-cw.mjs.map\n","<script setup lang=\"ts\">\n/**\n * The saved changes that are not on the website yet, and Publish. The whole\n * site shares them; the editor chooses which of them to publish now, and the\n * rest stays saved. `owner` changes only the developer details, not the words.\n */\n\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { RefreshCw } from \"@lucide/vue\";\n\nimport type { FieldMap } from \"@micacms/core\";\n\nimport {\n api,\n ApiError,\n type Comparison,\n type CompareTarget,\n type FileChange,\n type PublishOutcome,\n type SyncConflict,\n} from \"@/api\";\nimport ChangeComparison from \"@/components/ChangeComparison.vue\";\nimport ConfirmDialog from \"@/components/ConfirmDialog.vue\";\nimport DeveloperDetails from \"@/components/DeveloperDetails.vue\";\nimport PageHeader from \"@/components/PageHeader.vue\";\nimport {\n blockedEdits,\n problemsByEdit,\n publishSummary,\n reviewedPaths,\n withNeeds,\n withoutDependents,\n type Edit,\n} from \"@/lib/edits\";\nimport { relativeTime } from \"@/lib/format\";\nimport { useSchema } from \"@/stores/schema\";\nimport { useStaging } from \"@/stores/staging\";\nimport { useToast } from \"@/stores/toast\";\n\nconst schema = useSchema();\nconst staging = useStaging();\nconst toast = useToast();\n\nconst loading = ref(true);\nconst publishing = ref(false);\nconst pushing = ref(false);\nconst discardTarget = ref<Edit | null>(null);\nconst discarding = ref(false);\n\n/** The last publication on this page, for the success panel. */\nconst published = ref<{ revision: string | null } | null>(null);\n\n/** A publication in the developer's checkout that did not reach the website. */\nconst pendingPush = ref<PublishOutcome | null>(null);\n\nconst status = staging.status;\n\n/** One row per edit, never per file — see `lib/edits.ts`. */\nconst edits = staging.edits;\n\nconst problems = computed(() => problemsByEdit(edits.value, status.value?.validation.problems ?? []));\n/** Edits that cannot be published now: a problem in them, or in what they need. */\nconst blocked = computed(() => blockedEdits(edits.value, problems.value));\nconst labelOf = computed(() => new Map(edits.value.map((edit) => [edit.key, edit.label])));\n/** Edits that another pending edit uses: a new shared upload outside this set is not in any field yet. */\nconst neededKeys = computed(() => new Set(edits.value.flatMap((edit) => edit.needs)));\n\n/** Where a problem can be fixed: its entry or settings page, at the field. */\nfunction fixLink(problemPath: string, field: string) {\n const edit = edits.value.find((candidate) =>\n (problems.value.get(candidate.key) ?? []).some((problem) => problem.path === problemPath),\n );\n return edit?.link ? { ...edit.link, ...(field ? { query: { field } } : {}) } : null;\n}\n\n/* ------------------------------------------------- the selection */\n\n/**\n * The edits to publish now. A new edit starts selected unless it is blocked;\n * the editor's own choices stay when the list refreshes. An edit always comes\n * with the new edits it needs, and goes with the edits that need it.\n */\nconst selected = ref(new Set<string>());\nconst offered = new Set<string>();\n\nfunction updateSelection(next: Edit[]): void {\n const keys = new Set(next.map((edit) => edit.key));\n const kept = new Set([...selected.value].filter((key) => keys.has(key) && !blocked.value.has(key)));\n for (const edit of next) {\n // An edit that is blocked when it first appears is offered once it is fixed.\n if (offered.has(edit.key) || blocked.value.has(edit.key)) continue;\n offered.add(edit.key);\n kept.add(edit.key);\n }\n selected.value = withNeeds(kept, next);\n}\n\nfunction toggle(key: string): void {\n selected.value = selected.value.has(key)\n ? withoutDependents(selected.value, key, edits.value)\n : withNeeds([...selected.value, key], edits.value);\n}\n\nfunction selectAll(on: boolean): void {\n selected.value = new Set(on ? selectable.value.map((edit) => edit.key) : []);\n}\n\nconst chosen = computed(() => edits.value.filter((edit) => selected.value.has(edit.key)));\nconst selectable = computed(() => edits.value.filter((edit) => !blocked.value.has(edit.key)));\n\n/** The summary: Mica's suggestion until the editor types their own. */\nconst typed = ref<string | null>(null);\nconst summary = computed({\n get: () => typed.value ?? publishSummary(chosen.value),\n set: (value: string) => {\n typed.value = value;\n },\n});\n\n/* ------------------------------------------------- before/after */\n\ninterface LoadedComparison {\n loading: boolean;\n error: string | null;\n comparison: Comparison | null;\n}\n\nconst comparisons = ref<Record<string, LoadedComparison>>({});\n\n/** The compared document's fields — null for an order comparison. */\nfunction fieldsFor(target: CompareTarget): FieldMap | null {\n if (target.kind === \"entry\") return schema.collection(target.collection)?.fields ?? null;\n if (target.kind === \"singleton\") return schema.singleton(target.name)?.fields ?? null;\n return null;\n}\n\nasync function loadComparison(edit: Edit): Promise<void> {\n if (!edit.target) return;\n comparisons.value[edit.key] = { loading: true, error: null, comparison: null };\n try {\n const comparison = await api.staging.compare(edit.target);\n comparisons.value[edit.key] = { loading: false, error: null, comparison };\n } catch (error) {\n comparisons.value[edit.key] = {\n loading: false,\n error: error instanceof ApiError ? error.message : \"Could not load the comparison.\",\n comparison: null,\n };\n }\n}\n\n// Comparisons load with the change list, with nothing to click.\nwatch(\n edits,\n (next) => {\n updateSelection(next);\n for (const edit of next) {\n if (edit.target && !comparisons.value[edit.key]) void loadComparison(edit);\n }\n },\n { immediate: true },\n);\n\n/* ------------------------------------------------- state */\n\n/** The developer's checkout: the details for developers name Git. */\nconst isTree = computed(() => status.value?.owner === \"developer\");\nconst sync = computed(() => status.value?.sync ?? null);\n\n/** Publications made here that did not reach the website — also after a restart. */\nconst waitingToSend = computed(\n () => isTree.value && (pendingPush.value !== null || (status.value?.unpushed?.mica ?? 0) > 0),\n);\n/** Work in the developer's checkout that Publish would send too, so it waits. */\nconst otherWork = computed(() => (isTree.value ? (status.value?.unpushed?.other ?? 0) : 0));\n\nconst canPublish = computed(\n () =>\n (status.value?.publish.enabled ?? false) &&\n chosen.value.length > 0 &&\n summary.value.trim() !== \"\" &&\n otherWork.value === 0 &&\n !publishing.value,\n);\n\nconst stateWord: Record<Edit[\"state\"], string> = {\n new: \"New\",\n changed: \"Changed\",\n removed: \"Will be removed\",\n};\n\nconst kindWord: Record<FileChange[\"kind\"], string> = {\n create: \"Added\",\n update: \"Changed\",\n delete: \"Removed\",\n};\n\nasync function refresh(): Promise<void> {\n // Forget the comparisons first, so the edits watcher reloads every one of\n // them against the refreshed change set instead of showing a stale panel.\n comparisons.value = {};\n await staging.refresh();\n for (const edit of edits.value) {\n if (edit.target && !comparisons.value[edit.key]) void loadComparison(edit);\n }\n loading.value = false;\n}\n\nonMounted(refresh);\n\nasync function publish(): Promise<void> {\n publishing.value = true;\n published.value = null;\n try {\n // Exactly what the editor sees here, at the revision they see it: a file\n // saved again since makes the server refuse rather than publish it unseen.\n const outcome = await api.staging.publish(summary.value.trim(), reviewedPaths(chosen.value));\n typed.value = null;\n\n if (outcome.state === \"published\") {\n pendingPush.value = null;\n published.value = { revision: outcome.revision };\n } else if (isTree.value) {\n // Only the sending failed. Keep \"Try again\" visible: Publish again would\n // publish nothing new.\n pendingPush.value = outcome;\n toast.error(\"Published here, but not sent to the website.\", outcome.pushError);\n } else {\n toast.error(\"Published in Mica, not on the website yet.\", \"Mica tries again every minute.\");\n }\n\n await staging.refresh();\n } catch (error) {\n if (error instanceof ApiError) {\n toast.error(error.message, error.issues[0]?.message);\n // A conflict or a validation refusal means the list moved: show the truth.\n await staging.refresh();\n } else {\n toast.error(\"Could not publish.\");\n }\n } finally {\n publishing.value = false;\n }\n}\n\nasync function retryPush(): Promise<void> {\n pushing.value = true;\n try {\n const outcome = await api.staging.push();\n if (outcome.state === \"published\") {\n pendingPush.value = null;\n published.value = { revision: outcome.revision };\n } else {\n pendingPush.value = outcome;\n toast.error(\"It could not be sent again.\", outcome.pushError);\n }\n await staging.refresh();\n } catch (error) {\n toast.error(error instanceof ApiError ? error.message : \"Could not send it to the website.\");\n } finally {\n pushing.value = false;\n }\n}\n\nasync function discard(): Promise<void> {\n const edit = discardTarget.value;\n if (!edit) return;\n\n discarding.value = true;\n try {\n await api.staging.discard(edit.fileChanges.map((change) => change.path));\n toast.success(`Discarded the changes to ${edit.label}.`);\n discardTarget.value = null;\n await staging.refresh();\n } catch (error) {\n toast.error(error instanceof ApiError ? error.message : \"Could not discard.\");\n } finally {\n discarding.value = false;\n }\n}\n\n/* --------------------------------------------- Mica's own clone */\n\nconst syncing = ref(false);\nconst resolving = ref<string | null>(null);\n/** \"Use the website's version\" on a new entry deletes it, so it asks first. */\nconst confirmWebsite = ref<SyncConflict | null>(null);\n\nasync function syncNow(): Promise<void> {\n syncing.value = true;\n try {\n await api.staging.sync();\n await refresh();\n } catch (error) {\n toast.error(error instanceof ApiError ? error.message : \"Could not reach the website's files.\");\n } finally {\n syncing.value = false;\n }\n}\n\n/** Whether taking the website's version would delete an entry the editor created. */\nfunction discardsNewWork(conflict: SyncConflict): boolean {\n const created = new Set(\n (status.value?.changes ?? []).filter((change) => change.kind === \"create\").map((change) => change.path),\n );\n return conflict.paths.some((path) => created.has(path));\n}\n\nasync function resolve(conflict: SyncConflict, choice: \"mine\" | \"website\"): Promise<void> {\n if (choice === \"website\" && discardsNewWork(conflict) && confirmWebsite.value !== conflict) {\n confirmWebsite.value = conflict;\n return;\n }\n confirmWebsite.value = null;\n resolving.value = conflict.group;\n try {\n await api.staging.resolve(conflict.group, choice);\n toast.success(choice === \"mine\" ? `Kept your version of ${conflict.label}.` : `Took the website's version of ${conflict.label}.`);\n await refresh();\n } catch (error) {\n toast.error(error instanceof ApiError ? error.message : \"Could not resolve the conflict.\");\n } finally {\n resolving.value = null;\n }\n}\n\nconst upstreamWords: Record<SyncConflict[\"upstream\"], string> = {\n changed: \"was changed on the website while you edited it\",\n deleted: \"was deleted on the website while you edited it\",\n added: \"was also created on the website\",\n};\n\nconst conflictComparisons = ref<Record<string, LoadedComparison>>({});\n\nasync function loadConflictComparison(conflict: SyncConflict): Promise<void> {\n if (!conflict.target) return;\n conflictComparisons.value[conflict.group] = { loading: true, error: null, comparison: null };\n try {\n const comparison = await api.staging.compare(conflict.target, \"origin\");\n conflictComparisons.value[conflict.group] = { loading: false, error: null, comparison };\n } catch (error) {\n conflictComparisons.value[conflict.group] = {\n loading: false,\n error: error instanceof ApiError ? error.message : \"Could not load the comparison.\",\n comparison: null,\n };\n }\n}\n\nwatch(\n () => sync.value?.conflicts ?? [],\n (conflicts) => {\n for (const conflict of conflicts) {\n if (!conflictComparisons.value[conflict.group]) void loadConflictComparison(conflict);\n }\n },\n);\n\nfunction since(iso: string): string {\n return new Date(iso).toLocaleString();\n}\n\nfunction short(revision: string): string {\n return /^[0-9a-f]{20,}$/i.test(revision) ? revision.slice(0, 7) : revision;\n}\n\nfunction plural(count: number, one: string, many: string): string {\n return `${count} ${count === 1 ? one : many}`;\n}\n</script>\n\n<template>\n <PageHeader title=\"Publish\" subtitle=\"Saved changes that are not on the website yet\">\n <button type=\"button\" class=\"btn-ghost px-2\" :disabled=\"loading\" @click=\"refresh\">\n <RefreshCw :size=\"16\" aria-hidden=\"true\" />\n <span class=\"sr-only\">Refresh the list of changes</span>\n </button>\n </PageHeader>\n\n <div class=\"mx-auto max-w-3xl space-y-5 px-4 py-6 sm:px-6\">\n <p v-if=\"loading\" class=\"text-sm text-muted\">Loading…</p>\n\n <template v-else-if=\"status\">\n <div v-if=\"published\" role=\"status\" class=\"rounded-md border border-success/15 bg-success-soft p-4\">\n <p class=\"text-sm font-medium text-success\">Published</p>\n <p class=\"mt-1 text-xs text-muted\">\n Your website is being rebuilt now. This usually takes a few minutes.\n </p>\n <DeveloperDetails v-if=\"published.revision\">\n <p>Commit <span class=\"font-mono\">{{ short(published.revision) }}</span>.</p>\n </DeveloperDetails>\n </div>\n\n <div v-if=\"status.model?.warning\" role=\"alert\" class=\"rounded-md border border-warning/15 bg-warning-soft p-4\">\n <p class=\"text-sm font-medium text-warning\">Publishing waits for the developer</p>\n <p class=\"mt-1 text-xs text-muted\">\n The website's new content model cannot be read. You can go on saving. Tell the developer:\n {{ status.model.warning }}\n </p>\n </div>\n\n <!-- Publishing unavailable: still an honest, read-only list. -->\n <div\n v-if=\"!status.publish.enabled\"\n class=\"rounded-md border border-line bg-subtle p-4 text-sm text-muted\"\n >\n <p class=\"font-medium text-ink\">Publishing is not available here</p>\n <p class=\"mt-1\">{{ status.publish.reason }}</p>\n </div>\n\n <!-- Mica's own clone: shown only when something needs attention. -->\n <template v-if=\"sync\">\n <div v-if=\"sync.restartRequired\" role=\"alert\" class=\"rounded-md border border-warning/15 bg-warning-soft p-4\">\n <p class=\"text-sm font-medium text-warning\">The way the website stores its files changed</p>\n <p class=\"mt-1 text-xs text-muted\">\n You can go on saving. To publish, ask the person who runs Mica to restart it.\n </p>\n </div>\n\n <div v-if=\"sync.error\" role=\"alert\" class=\"rounded-md border border-warning/15 bg-warning-soft p-4\">\n <p class=\"text-sm font-medium text-warning\">Mica cannot reach the website's files since {{ since(sync.error.since) }}</p>\n <p class=\"mt-1 text-xs text-muted\">\n You can go on saving. Mica tries again every minute. If this stays, tell the person who runs Mica:\n {{ sync.error.message }}\n </p>\n <button type=\"button\" class=\"btn-secondary mt-2.5\" :disabled=\"syncing\" @click=\"syncNow\">\n {{ syncing ? \"Trying…\" : \"Try again\" }}\n </button>\n </div>\n\n <div v-if=\"sync.pendingPush\" role=\"status\" class=\"rounded-md border border-line bg-subtle p-4\">\n <p class=\"text-sm font-medium\">Published in Mica, not on the website yet</p>\n <p class=\"mt-1 text-xs text-muted\">\n Mica tries again every minute. If this stays, tell the person who runs Mica:\n {{ sync.pendingPush.reason }}\n </p>\n </div>\n\n <div v-if=\"sync.refused\" role=\"alert\" class=\"rounded-md border border-danger/15 bg-danger-soft p-4\">\n <p class=\"text-sm font-medium text-danger\">The last publication was refused</p>\n <p class=\"mt-1 text-xs text-muted\">\n Its changes are listed below again. Tell the person who runs Mica: {{ sync.refused.reason }}\n </p>\n </div>\n\n <section v-if=\"sync.conflicts.length > 0\" aria-labelledby=\"conflicts-heading\" class=\"space-y-3\">\n <h2 id=\"conflicts-heading\" class=\"text-sm font-semibold\">\n Changed on the website while you edited\n </h2>\n <p class=\"text-xs text-muted\">\n Choose a version for each. Until you do, nothing can be published and the website's newer\n changes stay out of Mica.\n </p>\n <ul class=\"card divide-y divide-line\">\n <li v-for=\"conflict in sync.conflicts\" :key=\"conflict.group\" class=\"p-4\">\n <p class=\"text-sm font-medium\">{{ conflict.label }}</p>\n <p class=\"mt-0.5 text-xs text-muted\">It {{ upstreamWords[conflict.upstream] }}.</p>\n\n <template v-if=\"conflict.target\">\n <p v-if=\"conflictComparisons[conflict.group]?.loading\" class=\"mt-2 text-xs text-muted\">Comparing…</p>\n <p v-else-if=\"conflictComparisons[conflict.group]?.error\" class=\"mt-2 text-xs text-danger\">\n {{ conflictComparisons[conflict.group]?.error }}\n </p>\n <template v-else-if=\"conflictComparisons[conflict.group]?.comparison\">\n <p class=\"mt-2 text-xs text-muted\">The website's version, then yours:</p>\n <ChangeComparison\n :comparison=\"conflictComparisons[conflict.group]!.comparison!\"\n :fields=\"fieldsFor(conflict.target)\"\n />\n </template>\n </template>\n\n <p v-if=\"confirmWebsite === conflict\" role=\"alert\" class=\"mt-2 text-xs text-danger\">\n This deletes the entry you created. Press the button again to confirm.\n </p>\n <div class=\"mt-2.5 flex flex-wrap gap-2\">\n <button\n type=\"button\"\n class=\"btn-secondary\"\n :disabled=\"resolving !== null\"\n @click=\"resolve(conflict, 'mine')\"\n >\n {{ conflict.upstream === \"deleted\" ? \"Restore it\" : \"Keep my version\" }}\n </button>\n <button\n type=\"button\"\n class=\"btn-ghost\"\n :disabled=\"resolving !== null\"\n @click=\"resolve(conflict, 'website')\"\n >\n {{ conflict.upstream === \"deleted\" ? \"Accept the deletion\" : \"Use the website's version\" }}\n </button>\n </div>\n </li>\n </ul>\n </section>\n </template>\n\n <!-- The developer's checkout: a publication that did not reach the website. -->\n <div v-if=\"waitingToSend\" role=\"alert\" class=\"rounded-md border border-warning/15 bg-warning-soft p-4\">\n <p class=\"text-sm font-medium text-warning\">Published here, but not sent to the website yet</p>\n <p class=\"mt-1 text-xs text-muted\">\n {{ pendingPush?.pushError ?? \"Try again to send it. Nothing is published twice.\" }}\n </p>\n <button type=\"button\" class=\"btn-secondary mt-2.5\" :disabled=\"pushing\" @click=\"retryPush\">\n {{ pushing ? \"Sending…\" : \"Try again\" }}\n </button>\n <DeveloperDetails>\n <p>The commit is in your checkout. \"Try again\" runs <code>git push</code> and never commits again.</p>\n </DeveloperDetails>\n </div>\n\n <div v-if=\"otherWork > 0\" role=\"alert\" class=\"rounded-md border border-warning/15 bg-warning-soft p-4\">\n <p class=\"text-sm font-medium text-warning\">Publishing waits for other work</p>\n <p class=\"mt-1 text-xs text-muted\">\n This copy of the website has {{ plural(otherWork, \"change\", \"changes\") }} that\n {{ otherWork === 1 ? \"was\" : \"were\" }} not made in Mica and {{ otherWork === 1 ? \"is\" : \"are\" }} not on the\n website yet. Publishing would send {{ otherWork === 1 ? \"it\" : \"them\" }} too.\n </p>\n <DeveloperDetails>\n <p>\n {{ plural(otherWork, \"commit\", \"commits\") }} on this branch {{ otherWork === 1 ? \"is\" : \"are\" }} on no\n remote. Push {{ otherWork === 1 ? \"it\" : \"them\" }} with <code>git push</code>, or move\n {{ otherWork === 1 ? \"it\" : \"them\" }} to another branch. Then publish.\n </p>\n </DeveloperDetails>\n </div>\n\n <div\n v-if=\"!status.validation.ok\"\n role=\"alert\"\n class=\"rounded-md border border-danger/15 bg-danger-soft p-4\"\n >\n <p class=\"text-sm font-medium text-danger\">Some changes cannot be published yet</p>\n <p class=\"mt-1 text-xs text-muted\">Fix them, or publish the other changes without them.</p>\n <ul class=\"mt-1.5 space-y-1 text-xs text-danger\">\n <li v-for=\"problem in status.validation.problems\" :key=\"problem.path\">\n <span class=\"font-medium\">{{ problem.label }}</span>\n <template v-for=\"(issue, index) in problem.issues\" :key=\"index\">\n {{ index === 0 ? \"—\" : \";\" }}\n <RouterLink\n v-if=\"fixLink(problem.path, issue.path)\"\n :to=\"fixLink(problem.path, issue.path)!\"\n class=\"underline underline-offset-2 hover:no-underline\"\n >\n {{ issue.message }}\n </RouterLink>\n <template v-else>{{ issue.message }}</template>\n </template>\n </li>\n </ul>\n </div>\n\n <div v-if=\"edits.length === 0\" class=\"card p-8 text-center\">\n <p class=\"text-sm font-medium\">Nothing waiting to be published</p>\n <p class=\"mt-1 text-sm text-muted\">\n Saved changes collect here until somebody publishes them. Right now the website has\n everything.\n </p>\n </div>\n\n <section v-else aria-labelledby=\"changes-heading\" class=\"space-y-2\">\n <div class=\"flex flex-wrap items-baseline justify-between gap-2\">\n <h2 id=\"changes-heading\" class=\"text-sm font-semibold\">\n {{ plural(edits.length, \"saved change\", \"saved changes\") }}\n </h2>\n <div v-if=\"status.publish.enabled && selectable.length > 1\" class=\"flex gap-1\">\n <button type=\"button\" class=\"btn-ghost text-xs\" @click=\"selectAll(true)\">Select all</button>\n <button type=\"button\" class=\"btn-ghost text-xs\" @click=\"selectAll(false)\">Select none</button>\n </div>\n </div>\n\n <ul class=\"card divide-y divide-line\">\n <li v-for=\"edit in edits\" :key=\"edit.key\" class=\"flex items-start gap-3 p-4\">\n <input\n v-if=\"status.publish.enabled\"\n :id=\"`publish-${edit.key}`\"\n type=\"checkbox\"\n class=\"mt-1 h-4 w-4 shrink-0\"\n :checked=\"selected.has(edit.key)\"\n :disabled=\"blocked.has(edit.key) || publishing\"\n :aria-label=\"`Publish ${edit.label}`\"\n @change=\"toggle(edit.key)\"\n />\n\n <div class=\"min-w-0 flex-1\">\n <div class=\"flex flex-wrap items-baseline gap-x-2\">\n <component\n :is=\"edit.link ? 'RouterLink' : 'p'\"\n v-bind=\"edit.link ? { to: edit.link } : {}\"\n :class=\"['text-sm font-medium', edit.link && 'hover:underline']\"\n >\n {{ edit.label }}\n </component>\n <span\n :class=\"[\n 'text-xs',\n edit.state === 'removed' ? 'text-danger' : edit.state === 'new' ? 'text-success' : 'text-muted',\n ]\"\n >\n {{ stateWord[edit.state] }}\n </span>\n <span v-if=\"edit.savedAt\" class=\"text-xs text-muted\">\n · saved {{ relativeTime(edit.savedAt) }}\n </span>\n <span\n v-if=\"edit.key.startsWith('media:') && edit.state === 'new' && !neededKeys.has(edit.key)\"\n class=\"text-xs text-warning\"\n >\n · not in any field yet\n </span>\n </div>\n\n <p v-if=\"problems.has(edit.key)\" class=\"mt-1 text-xs text-danger\">\n Fix this first: {{ problems.get(edit.key)!.flatMap((problem) => problem.issues.map((issue) => issue.message)).join(\"; \") }}\n </p>\n <p v-else-if=\"blocked.has(edit.key)\" class=\"mt-1 text-xs text-danger\">\n It uses something that must be fixed first.\n </p>\n <p v-if=\"edit.needs.length > 0\" class=\"mt-1 text-xs text-muted\">\n Published together with {{ edit.needs.map((key) => labelOf.get(key) ?? key).join(\", \") }}, which it uses.\n </p>\n\n <!-- What the change does. Edits with a document get the\n before/after view and no file paths; media and everything\n else have only their files to show. -->\n <template v-if=\"edit.target\">\n <p v-if=\"comparisons[edit.key]?.loading\" class=\"mt-2 text-xs text-muted\">\n Comparing…\n </p>\n <p v-else-if=\"comparisons[edit.key]?.error\" class=\"mt-2 text-xs text-danger\">\n {{ comparisons[edit.key]?.error }}\n </p>\n <ChangeComparison\n v-else-if=\"comparisons[edit.key]?.comparison\"\n :comparison=\"comparisons[edit.key]!.comparison!\"\n :fields=\"fieldsFor(edit.target)\"\n />\n </template>\n\n <ul v-else class=\"mt-1 space-y-0.5\">\n <li\n v-for=\"change in edit.fileChanges\"\n :key=\"change.path\"\n class=\"flex items-baseline gap-2 text-xs text-muted\"\n >\n <span\n :class=\"[\n 'w-16 shrink-0 font-mono text-[11px]',\n change.kind === 'delete' ? 'text-danger' : change.kind === 'create' ? 'text-success' : '',\n ]\"\n >\n {{ kindWord[change.kind] }}\n </span>\n <span class=\"break-all font-mono\">{{ change.path }}</span>\n </li>\n </ul>\n </div>\n\n <button type=\"button\" class=\"btn-ghost shrink-0 text-xs\" @click=\"discardTarget = edit\">\n Discard\n </button>\n </li>\n </ul>\n </section>\n\n <section v-if=\"edits.length > 0 && status.publish.enabled\" class=\"card p-4\" aria-labelledby=\"publish-heading\">\n <h2 id=\"publish-heading\" class=\"text-sm font-semibold\">\n {{ chosen.length === 0 ? \"Choose the changes to publish\" : `Publish ${plural(chosen.length, \"change\", \"changes\")}` }}\n </h2>\n <p class=\"mt-1 text-xs text-muted\">\n The website is rebuilt after you publish. Changes that you do not choose stay saved here.\n </p>\n\n <form class=\"mt-3 space-y-2\" @submit.prevent=\"canPublish && publish()\">\n <label for=\"publish-summary\" class=\"field-label\">Say what changed</label>\n <div class=\"flex flex-wrap items-center gap-2\">\n <input\n id=\"publish-summary\"\n v-model=\"summary\"\n type=\"text\"\n class=\"input min-w-0 flex-1\"\n maxlength=\"500\"\n :disabled=\"publishing\"\n />\n <button type=\"submit\" class=\"btn-primary\" :disabled=\"!canPublish\">\n {{ publishing ? \"Publishing…\" : \"Publish\" }}\n </button>\n </div>\n </form>\n\n <DeveloperDetails>\n <p v-if=\"isTree\">\n One commit of the chosen files<template v-if=\"status.branch\"> on branch <span class=\"font-mono\">{{ status.branch }}</span></template><template v-if=\"status.head\">, after <span class=\"font-mono\">{{ short(status.head) }}</span></template>,\n pushed with your own Git configuration. The summary is the commit message.\n </p>\n <p v-else>\n One commit of the chosen files to the content repository, which starts your website's build. The summary\n is the commit message.\n </p>\n </DeveloperDetails>\n </section>\n </template>\n\n <p v-else class=\"text-sm text-muted\">The list of changes could not be loaded. Reload to try again.</p>\n </div>\n\n <ConfirmDialog\n :open=\"discardTarget !== null\"\n :title=\"`Discard the changes to “${discardTarget?.label}”?`\"\n confirm-label=\"Discard\"\n destructive\n :busy=\"discarding\"\n @cancel=\"discardTarget = null\"\n @confirm=\"discard\"\n >\n <p>\n This puts it back as it was at the last publication: something new is deleted, and something changed or\n removed comes back. It cannot be undone.\n </p>\n </ConfirmDialog>\n</template>\n"],"names":["__iconData","RefreshCw","createLucideIcon","schema","useSchema","staging","useStaging","toast","useToast","loading","ref","publishing","pushing","discardTarget","discarding","published","pendingPush","status","edits","problems","computed","problemsByEdit","_a","blocked","blockedEdits","labelOf","edit","neededKeys","fixLink","problemPath","field","candidate","problem","selected","offered","updateSelection","next","keys","kept","key","withNeeds","toggle","withoutDependents","selectAll","on","selectable","chosen","typed","summary","publishSummary","value","comparisons","fieldsFor","target","_b","loadComparison","comparison","api","error","ApiError","watch","isTree","sync","waitingToSend","otherWork","canPublish","stateWord","kindWord","refresh","onMounted","publish","outcome","reviewedPaths","retryPush","discard","change","syncing","resolving","confirmWebsite","syncNow","discardsNewWork","conflict","created","path","resolve","choice","upstreamWords","conflictComparisons","loadConflictComparison","conflicts","since","iso","short","revision","plural","count","one","many","_createVNode","PageHeader","_createElementVNode","_unref","_cache","_hoisted_2","_createElementBlock","_hoisted_3","_Fragment","_openBlock","_hoisted_4","_createBlock","DeveloperDetails","_hoisted_5","_toDisplayString","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_renderList","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_c","_d","ChangeComparison","_hoisted_25","_hoisted_26","$event","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","issue","index","_createTextVNode","_component_RouterLink","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_44","_hoisted_45","_resolveDynamicComponent","_mergeProps","_normalizeClass","_hoisted_46","relativeTime","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_withModifiers","_hoisted_58","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_65","ConfirmDialog"],"mappings":"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","x_google_ignoreList":[0]}