@nascentdigital/funnel-editor 4.5.7 → 4.6.1

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 (135) hide show
  1. package/dist/collection/hooks/CollectionController.d.ts +1 -1
  2. package/dist/core/components/ColorModeToggle.js +6 -4
  3. package/dist/core/components/Header.js +3 -2
  4. package/dist/core/components/UserEditor.d.ts +2 -2
  5. package/dist/core/components/feedback/Badge.d.ts +2 -1
  6. package/dist/core/components/feedback/Badge.js +4 -3
  7. package/dist/core/components/fields/DynamicPagesEditor.js +7 -6
  8. package/dist/core/components/fields/EmptyFieldCard.js +4 -4
  9. package/dist/core/components/fields/FieldCardLayout.js +5 -5
  10. package/dist/core/components/fields/FieldHeader.js +3 -2
  11. package/dist/core/components/fields/FieldsPanel.js +4 -4
  12. package/dist/core/components/fields/FormEditor.js +5 -4
  13. package/dist/core/components/fields/asset/AssetEditor.d.ts +3 -2
  14. package/dist/core/components/fields/asset/AssetEditor.js +1 -1
  15. package/dist/core/components/fields/asset/AssetUploader.d.ts +3 -2
  16. package/dist/core/components/fields/asset/AssetUploader.js +1 -1
  17. package/dist/core/components/fields/collection/CollectionCard.js +1 -11
  18. package/dist/core/components/fields/collection/CollectionPicker.js +3 -2
  19. package/dist/core/components/fields/collection/previews/index.d.ts +0 -1
  20. package/dist/core/components/fields/collection/previews/index.js +0 -1
  21. package/dist/core/components/fields/embed/EmbeddedVideoEditor.d.ts +2 -2
  22. package/dist/core/components/fields/factories/AssetFactory.d.ts +1 -1
  23. package/dist/core/components/fields/factories/CollectionFactory.d.ts +1 -1
  24. package/dist/core/components/fields/factories/EmbeddedVideoFactory.d.ts +2 -2
  25. package/dist/core/components/fields/factories/FieldValueFactory.d.ts +1 -1
  26. package/dist/core/components/fields/factories/FieldValueFactory.js +1 -1
  27. package/dist/core/components/fields/factories/LinkFactory.d.ts +2 -2
  28. package/dist/core/components/fields/factories/TextFactory.d.ts +2 -2
  29. package/dist/core/components/fields/form/FormFieldEditor.d.ts +3 -2
  30. package/dist/core/components/fields/index.d.ts +1 -0
  31. package/dist/core/components/fields/index.js +1 -0
  32. package/dist/core/components/fields/link/LinkEditor.d.ts +2 -2
  33. package/dist/core/components/fields/link/LinkEditor.js +4 -0
  34. package/dist/core/components/fields/list/CreateFieldButton.d.ts +1 -1
  35. package/dist/core/components/fields/list/CreateFieldButton.js +4 -5
  36. package/dist/core/components/fields/list/CreateFieldCard.js +4 -4
  37. package/dist/core/components/fields/page/PagePicker.js +4 -2
  38. package/dist/core/components/fields/richtext/FloatingToolbarPlugin.js +3 -2
  39. package/dist/core/components/fields/richtext/LinkEditor.js +17 -4
  40. package/dist/core/components/fields/richtext/LinkPopup.js +11 -7
  41. package/dist/core/components/interaction/AvatarButton.d.ts +2 -1
  42. package/dist/core/components/interaction/AvatarButton.js +3 -2
  43. package/dist/core/components/interaction/Button.d.ts +2 -0
  44. package/dist/core/components/interaction/Button.js +3 -2
  45. package/dist/core/components/interaction/Combobox.js +2 -2
  46. package/dist/core/components/interaction/IconButton.d.ts +2 -0
  47. package/dist/core/components/interaction/IconButton.js +3 -2
  48. package/dist/core/components/interaction/IconLink.d.ts +1 -1
  49. package/dist/core/components/interaction/MiniEditor.d.ts +3 -2
  50. package/dist/core/components/interaction/MiniEditor.js +7 -5
  51. package/dist/core/components/interaction/Popup.d.ts +20 -15
  52. package/dist/core/components/interaction/Popup.js +63 -66
  53. package/dist/core/components/interaction/QuickInput.js +2 -0
  54. package/dist/core/components/interaction/QuickPicker.js +4 -4
  55. package/dist/core/components/interaction/Tabs.d.ts +5 -1
  56. package/dist/core/components/interaction/Tabs.js +18 -8
  57. package/dist/core/components/interaction/menu/useMenuController.d.ts +2 -2
  58. package/dist/core/components/interaction/table/TableItem.d.ts +2 -1
  59. package/dist/core/components/interaction/table/TableItem.js +5 -3
  60. package/dist/core/components/layout/InfoPanel.js +4 -2
  61. package/dist/core/components/visuals/Icon.d.ts +1 -1
  62. package/dist/core/components/visuals/Icon.js +6 -0
  63. package/dist/core/components/visuals/index.d.ts +0 -1
  64. package/dist/core/components/visuals/index.js +0 -1
  65. package/dist/core/domain/Block.d.ts +4 -0
  66. package/dist/core/domain/Block.js +7 -0
  67. package/dist/core/domain/BlockConfiguration.d.ts +9 -2
  68. package/dist/core/domain/BlockConfiguration.js +49 -12
  69. package/dist/core/domain/CollectionBrowser.d.ts +2 -2
  70. package/dist/core/domain/CollectionFieldProxy.d.ts +7 -2
  71. package/dist/core/domain/CollectionFieldProxy.js +55 -66
  72. package/dist/core/domain/SectionBlock.d.ts +5 -0
  73. package/dist/core/domain/SectionBlock.js +15 -0
  74. package/dist/core/hooks/useBlockConfiguration.d.ts +7 -1
  75. package/dist/core/hooks/useBlockConfiguration.js +8 -1
  76. package/dist/core/hooks/usePage.d.ts +2 -2
  77. package/dist/core/hooks/usePage.js +5 -4
  78. package/dist/core/repository/CollectionRepository.js +1 -1
  79. package/dist/core/repository/CollectionSerializer.d.ts +3 -2
  80. package/dist/core/repository/CollectionSerializer.js +12 -7
  81. package/dist/core/repository/PageRepository.js +2 -2
  82. package/dist/core/repository/PageSerializer.d.ts +5 -3
  83. package/dist/core/repository/PageSerializer.js +10 -11
  84. package/dist/explore/components/CreateCollectionDialog.d.ts +2 -3
  85. package/dist/explore/components/CreateCollectionDialog.js +1 -1
  86. package/dist/explore/components/CreatePageDialog.d.ts +3 -3
  87. package/dist/explore/components/CreatePageDialog.js +2 -2
  88. package/dist/explore/screens/CollectionExplorer.js +4 -4
  89. package/dist/explore/screens/PageExplorer.js +4 -4
  90. package/dist/page/components/BlockEditor.js +10 -2
  91. package/dist/page/components/config/BlockConfigButton.d.ts +8 -0
  92. package/dist/page/components/config/BlockConfigButton.js +320 -0
  93. package/dist/page/components/config/BlockConfigurationProvider.d.ts +8 -0
  94. package/dist/page/components/config/BlockConfigurationProvider.js +17 -0
  95. package/dist/page/components/config/LegacyBlockPreview.d.ts +8 -0
  96. package/dist/page/components/config/{BlockPreview.js → LegacyBlockPreview.js} +30 -40
  97. package/dist/page/components/config/index.d.ts +3 -1
  98. package/dist/page/components/config/index.js +3 -1
  99. package/dist/page/components/index.d.ts +1 -1
  100. package/dist/page/components/index.js +1 -1
  101. package/dist/page/components/nav/NavSection.js +4 -3
  102. package/dist/page/components/panels/BlockConfigPanel.d.ts +1 -0
  103. package/dist/page/components/panels/BlockConfigPanel.js +25 -0
  104. package/dist/page/components/{PageStatus.d.ts → panels/PageStatus.d.ts} +3 -3
  105. package/dist/page/components/{PageStatus.js → panels/PageStatus.js} +10 -14
  106. package/dist/page/components/panels/index.d.ts +2 -0
  107. package/dist/page/components/{status → panels}/index.js +2 -1
  108. package/dist/page/hooks/PageController.d.ts +2 -2
  109. package/dist/page/screens/PageEditor.js +8 -1
  110. package/dist/styles/index.css +157 -46
  111. package/dist/styles/tailwind.js +7 -3
  112. package/dist/users/screens/UserExplorer.js +7 -6
  113. package/package.json +3 -2
  114. package/dist/core/components/fields/collection/previews/ClientPreview.d.ts +0 -10
  115. package/dist/core/components/fields/collection/previews/ClientPreview.js +0 -29
  116. package/dist/core/components/visuals/SkeletonLayout.d.ts +0 -9
  117. package/dist/core/components/visuals/SkeletonLayout.js +0 -429
  118. package/dist/page/components/config/BlockConfig.d.ts +0 -8
  119. package/dist/page/components/config/BlockConfig.js +0 -28
  120. package/dist/page/components/config/BlockConfigEditor.d.ts +0 -9
  121. package/dist/page/components/config/BlockConfigEditor.js +0 -129
  122. package/dist/page/components/config/BlockPreview.d.ts +0 -10
  123. package/dist/page/components/config/BlockView.d.ts +0 -4
  124. package/dist/page/components/config/BlockView.js +0 -9
  125. package/dist/page/components/config/LegacyBlockConfigEditor.d.ts +0 -9
  126. package/dist/page/components/config/LegacyBlockConfigEditor.js +0 -27
  127. package/dist/page/components/config/ListPanelEditor.d.ts +0 -8
  128. package/dist/page/components/config/ListPanelEditor.js +0 -102
  129. package/dist/page/components/config/MessagePanelEditor.d.ts +0 -8
  130. package/dist/page/components/config/MessagePanelEditor.js +0 -17
  131. package/dist/page/components/config/VisualPanelEditor.d.ts +0 -8
  132. package/dist/page/components/config/VisualPanelEditor.js +0 -76
  133. package/dist/page/components/status/index.d.ts +0 -1
  134. /package/dist/page/components/{status → panels}/AutoSave.d.ts +0 -0
  135. /package/dist/page/components/{status → panels}/AutoSave.js +0 -0
@@ -499,6 +499,13 @@ video {
499
499
  [hidden]:where(:not([hidden="until-found"])) {
500
500
  display: none;
501
501
  }
502
+
503
+ [popover]{
504
+ inset: var(--toolwind-toggle-BK394oP67O, 0px);
505
+ background-color: var(--toolwind-toggle-44E42ImXUl, canvas);
506
+ color: var(--toolwind-toggle-adoVjD3x5w, canvastext);
507
+ margin: var(--toolwind-toggle-4GI4by3Q5p, auto);
508
+ }
502
509
  html, body, #__next, .Editor-wrap{
503
510
  position: relative;
504
511
  height: 100lvh;
@@ -2730,6 +2737,18 @@ video {
2730
2737
  --tw-border-opacity: 1;
2731
2738
  border-color: rgb(var(--color-ix-primary) / var(--tw-border-opacity, 1));
2732
2739
  }
2740
+ .FieldCard-hover.FieldCard{
2741
+ --tw-border-opacity: 1;
2742
+ border-color: rgb(var(--color-ix-primary) / var(--tw-border-opacity, 1));
2743
+ }
2744
+ .FieldCard-press.FieldCard{
2745
+ --tw-scale-x: .97;
2746
+ --tw-scale-y: .97;
2747
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
2748
+ transition-timing-function: cubic-bezier(0.5, 1, 0.89, 1);
2749
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
2750
+ transition-duration: 200ms;
2751
+ }
2733
2752
  .iconbutton{
2734
2753
  flex-shrink: 0;
2735
2754
  cursor: pointer;
@@ -4229,33 +4248,35 @@ video {
4229
4248
  :root {
4230
4249
  --nd-visual-width: unset;
4231
4250
  --nd-visual-height: unset;
4251
+ --nd-visual-max-width: unset;
4252
+ --nd-visual-max-height: unset;
4232
4253
  --nd-visual-anchor: center;
4233
- }
4234
- .nd-Visual-image{
4235
- -o-object-fit: cover;
4236
- object-fit: cover;
4237
- -o-object-position: var(--nd-visual-anchor);
4238
- object-position: var(--nd-visual-anchor);
4239
- }
4240
- .nd-Visual-image img{
4241
- -o-object-fit: cover;
4242
- object-fit: cover;
4254
+ --nd-visual-aspect: unset;
4255
+ --nd-visual-object-fit: unset;
4256
+ }
4257
+ .nd-Visual-image,
4258
+ .nd-Visual-video
4259
+ {
4260
+ aspect-ratio: var(--nd-visual-aspect, var(--_nd-visual-native-width) / var(--_nd-visual-native-height));
4261
+ max-width: var(--nd-visual-max-width, 100%);
4262
+ max-height: var(--nd-visual-max-height, 100%);
4263
+ width: var(--nd-visual-width, calc(var(--_nd-visual-native-width) * 1px));
4264
+ height: var(--nd-visual-height, calc(var(--_nd-visual-native-height) * 1px));
4265
+ }
4266
+ .nd-Visual-image img, .nd-Visual-image video, .nd-Visual-video img, .nd-Visual-video video{
4267
+ width: 100%;
4268
+ height: 100%;
4269
+ -o-object-fit: var(--nd-visual-object-fit, cover);
4270
+ object-fit: var(--nd-visual-object-fit, cover);
4243
4271
  -o-object-position: var(--nd-visual-anchor);
4244
4272
  object-position: var(--nd-visual-anchor);
4245
4273
  }
4246
- .nd-Visual-video{
4247
- -o-object-fit: cover;
4248
- object-fit: cover;
4249
- aspect-ratio: var(--nd-visual-width) / var(--nd-visual-height);
4274
+ img.nd-Visual-image {
4275
+ -o-object-fit: var(--nd-visual-object-fit, cover);
4276
+ object-fit: var(--nd-visual-object-fit, cover);
4250
4277
  -o-object-position: var(--nd-visual-anchor);
4251
4278
  object-position: var(--nd-visual-anchor);
4252
- }
4253
- .nd-Visual-video video{
4254
- -o-object-fit: cover;
4255
- object-fit: cover;
4256
- -o-object-position: var(--nd-visual-anchor);
4257
- object-position: var(--nd-visual-anchor);
4258
- }
4279
+ }
4259
4280
  .pointer-events-none{
4260
4281
  pointer-events: none;
4261
4282
  }
@@ -4274,6 +4295,9 @@ video {
4274
4295
  .static{
4275
4296
  position: static;
4276
4297
  }
4298
+ .\!fixed{
4299
+ position: fixed !important;
4300
+ }
4277
4301
  .fixed{
4278
4302
  position: fixed;
4279
4303
  }
@@ -4367,9 +4391,6 @@ video {
4367
4391
  .col-span-10{
4368
4392
  grid-column: span 10 / span 10;
4369
4393
  }
4370
- .col-span-2{
4371
- grid-column: span 2 / span 2;
4372
- }
4373
4394
  .col-span-4{
4374
4395
  grid-column: span 4 / span 4;
4375
4396
  }
@@ -4779,9 +4800,6 @@ video {
4779
4800
  .w-8\/12{
4780
4801
  width: 66.666667%;
4781
4802
  }
4782
- .w-\[100px\]{
4783
- width: 100px;
4784
- }
4785
4803
  .w-\[120px\]{
4786
4804
  width: 120px;
4787
4805
  }
@@ -5514,6 +5532,9 @@ video {
5514
5532
  .p-3{
5515
5533
  padding: 3px;
5516
5534
  }
5535
+ .p-l1{
5536
+ padding: 2px;
5537
+ }
5517
5538
  .p-l2{
5518
5539
  padding: 4px;
5519
5540
  }
@@ -5591,6 +5612,10 @@ video {
5591
5612
  padding-top: 72px;
5592
5613
  padding-bottom: 72px;
5593
5614
  }
5615
+ .py-l2{
5616
+ padding-top: 4px;
5617
+ padding-bottom: 4px;
5618
+ }
5594
5619
  .py-l3{
5595
5620
  padding-top: 6px;
5596
5621
  padding-bottom: 6px;
@@ -5611,6 +5636,9 @@ video {
5611
5636
  padding-top: 24px;
5612
5637
  padding-bottom: 24px;
5613
5638
  }
5639
+ .pb-l10{
5640
+ padding-bottom: 40px;
5641
+ }
5614
5642
  .pb-l3{
5615
5643
  padding-bottom: 6px;
5616
5644
  }
@@ -5653,6 +5681,9 @@ video {
5653
5681
  .pt-10{
5654
5682
  padding-top: 10px;
5655
5683
  }
5684
+ .pt-l10{
5685
+ padding-top: 40px;
5686
+ }
5656
5687
  .pt-l12{
5657
5688
  padding-top: 56px;
5658
5689
  }
@@ -5699,9 +5730,6 @@ video {
5699
5730
  --tw-ordinal: ordinal;
5700
5731
  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
5701
5732
  }
5702
- .leading-\[100\%\]{
5703
- line-height: 100%;
5704
- }
5705
5733
  .leading-\[20px\]{
5706
5734
  line-height: 20px;
5707
5735
  }
@@ -5712,10 +5740,6 @@ video {
5712
5740
  --tw-text-opacity: 1;
5713
5741
  color: rgb(var(--color-background) / var(--tw-text-opacity, 1));
5714
5742
  }
5715
- .text-border-l1{
5716
- --tw-text-opacity: 1;
5717
- color: rgb(var(--color-border-l1) / var(--tw-text-opacity, 1));
5718
- }
5719
5743
  .text-content-button{
5720
5744
  --tw-text-opacity: 1;
5721
5745
  color: rgb(var(--color-content-button) / var(--tw-text-opacity, 1));
@@ -5901,6 +5925,44 @@ video {
5901
5925
  .\@container{
5902
5926
  container-type: inline-size;
5903
5927
  }
5928
+ .\!anchor{
5929
+ }
5930
+ .anchor{
5931
+ }
5932
+ .anchor\/\[--nd-popup-anchor\]{
5933
+ anchor-name: var(--nd-popup-anchor);
5934
+ }
5935
+ .anchored{
5936
+ }
5937
+ .anchored-bottom{
5938
+ position-area: bottom;
5939
+ }
5940
+ .anchored-bottom-span-left{
5941
+ position-area: bottom span-left;
5942
+ }
5943
+ .anchored-left{
5944
+ position-area: left;
5945
+ }
5946
+ .anchored-right{
5947
+ position-area: right;
5948
+ }
5949
+ .anchored-top{
5950
+ position-area: top;
5951
+ }
5952
+ .anchored-top-span-right{
5953
+ position-area: top span-right;
5954
+ }
5955
+ .anchored\/\[--nd-popup-anchor\]{
5956
+ position-anchor: var(--nd-popup-anchor);
5957
+ }
5958
+ .anchored\/\[--nd-popup-anchor\]:where(.anchored\/\[--nd-popup-anchor\]){
5959
+ position: absolute;
5960
+ view-transition-name: --tw-anchor-view-transition-2j1919322s193433343934192p322r2w33362l;
5961
+ --toolwind-toggle-BK394oP67O: auto;
5962
+ --toolwind-toggle-44E42ImXUl: transparent;
5963
+ --toolwind-toggle-adoVjD3x5w: inherit;
5964
+ --toolwind-toggle-4GI4by3Q5p: 0px;
5965
+ }
5904
5966
  .counter-l1{
5905
5967
  counter-reset: l1;
5906
5968
  }
@@ -5989,6 +6051,43 @@ video {
5989
6051
  pointer-events: auto;
5990
6052
  }
5991
6053
  }
6054
+ .scroller-edge{
6055
+ border-top-width: 1px;
6056
+ border-style: solid;
6057
+ border-color: transparent;
6058
+
6059
+ animation: scroller-edge linear both;
6060
+ animation-timeline: scroll(self);
6061
+ animation-range: 0px 20px;
6062
+ }
6063
+ /* animation */
6064
+ @keyframes scroller-edge {
6065
+ from {
6066
+ border-top-color: transparent;
6067
+ }
6068
+ to {
6069
+ border-top-color: #3b82f6;
6070
+ }
6071
+ }
6072
+ .scroller-fade-top{
6073
+ position: relative;
6074
+ }
6075
+ /* overlay */
6076
+ .scroller-fade-top::before{
6077
+ position: sticky;
6078
+ left: 0px;
6079
+ right: 0px;
6080
+ top: 0px;
6081
+ z-index: 2;
6082
+ display: block;
6083
+ height: 16px;
6084
+ width: 100%;
6085
+ background-color: inherit;
6086
+ --tw-content: "\00a0";
6087
+ content: var(--tw-content);
6088
+ -webkit-mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0) 100%);
6089
+ mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0) 100%);
6090
+ }
5992
6091
  .stacked{
5993
6092
  display: grid;
5994
6093
  grid-template-columns: repeat(1, minmax(0, 1fr));
@@ -6023,13 +6122,22 @@ video {
6023
6122
  inherits: false;
6024
6123
  initial-value: #000;
6025
6124
  }
6026
- .\[--nd-icon-color\:theme\(colors\.content-primary\)\]{
6027
- --nd-icon-color: rgb(var(--color-content-primary) / 1);
6028
- }
6029
6125
  .focus-within\:field-focused:focus-within.field {
6030
6126
  }
6031
6127
  .focus-visible\:field-focused:focus-visible.field {
6032
6128
  }
6129
+ .group:hover .group-hover\:FieldCard-hover.FieldCard{
6130
+ --tw-border-opacity: 1;
6131
+ border-color: rgb(var(--color-ix-primary) / var(--tw-border-opacity, 1));
6132
+ }
6133
+ .group:active .group-active\:FieldCard-press.FieldCard{
6134
+ --tw-scale-x: .97;
6135
+ --tw-scale-y: .97;
6136
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
6137
+ transition-timing-function: cubic-bezier(0.5, 1, 0.89, 1);
6138
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
6139
+ transition-duration: 200ms;
6140
+ }
6033
6141
  @media (min-width: 768px){
6034
6142
  .md\:display-md{
6035
6143
  font-family: var(--font-display), sans-serif;
@@ -6198,9 +6306,6 @@ video {
6198
6306
  .hover\:underline:hover{
6199
6307
  text-decoration-line: underline;
6200
6308
  }
6201
- .hover\:opacity-full:hover{
6202
- opacity: 1;
6203
- }
6204
6309
  .hover\:outline-ix-primary\/\[\.35\]:hover{
6205
6310
  outline-color: rgb(var(--color-ix-primary) / .35);
6206
6311
  }
@@ -6309,9 +6414,6 @@ video {
6309
6414
  --tw-bg-opacity: 1;
6310
6415
  background-color: rgb(var(--color-ix-primary-hover) / var(--tw-bg-opacity, 1));
6311
6416
  }
6312
- .group:hover .group-hover\:bg-ix-primary\/tint1{
6313
- background-color: rgb(var(--color-ix-primary) / .1);
6314
- }
6315
6417
  .group:hover .group-hover\:bg-ix-util-hover\/tint1{
6316
6418
  background-color: rgb(var(--color-ix-util-hover) / .1);
6317
6419
  }
@@ -6319,6 +6421,10 @@ video {
6319
6421
  --tw-text-opacity: 1;
6320
6422
  color: rgb(var(--color-content-primary) / var(--tw-text-opacity, 1));
6321
6423
  }
6424
+ .group:hover .group-hover\:text-content-secondary{
6425
+ --tw-text-opacity: 1;
6426
+ color: rgb(var(--color-content-secondary) / var(--tw-text-opacity, 1));
6427
+ }
6322
6428
  .group:focus-visible .group-focus-visible\:outline-ix-primary{
6323
6429
  outline-color: rgb(var(--color-ix-primary) / 1);
6324
6430
  }
@@ -6335,12 +6441,13 @@ video {
6335
6441
  --tw-bg-opacity: 1;
6336
6442
  background-color: rgb(var(--color-ix-primary-press) / var(--tw-bg-opacity, 1));
6337
6443
  }
6338
- .group:active .group-active\:bg-ix-primary\/tint3{
6339
- background-color: rgb(var(--color-ix-primary) / .3);
6340
- }
6341
6444
  .group:active .group-active\:bg-ix-util-press\/tint2{
6342
6445
  background-color: rgb(var(--color-ix-util-press) / .2);
6343
6446
  }
6447
+ .group:active .group-active\:text-content-primary{
6448
+ --tw-text-opacity: 1;
6449
+ color: rgb(var(--color-content-primary) / var(--tw-text-opacity, 1));
6450
+ }
6344
6451
  .group:active .group-active\:text-content-tertiary{
6345
6452
  --tw-text-opacity: 1;
6346
6453
  color: rgb(var(--color-content-tertiary) / var(--tw-text-opacity, 1));
@@ -6494,6 +6601,10 @@ video {
6494
6601
  display: block;
6495
6602
  }
6496
6603
 
6604
+ .lg\:flex{
6605
+ display: flex;
6606
+ }
6607
+
6497
6608
  .lg\:w-\[240px\]{
6498
6609
  width: 240px;
6499
6610
  }
@@ -9,6 +9,7 @@ const plugin_1 = __importDefault(require("tailwindcss/plugin"));
9
9
  const Tailwind_1 = require("@nascentdigital/funnel-ui/Tailwind");
10
10
  const aspect_ratio_1 = __importDefault(require("@tailwindcss/aspect-ratio"));
11
11
  const container_queries_1 = __importDefault(require("@tailwindcss/container-queries"));
12
+ const anchors_1 = __importDefault(require("@toolwind/anchors"));
12
13
  // tailwind
13
14
  exports.EditorTailwindConfig = {
14
15
  content: [
@@ -258,15 +259,16 @@ exports.EditorTailwindConfig = {
258
259
  'quad-in-out': 'cubic-bezier(0.45, 0, 0.55, 1)',
259
260
  'cube-in': 'cubic-bezier(0.32, 0, 0.67, 0)',
260
261
  'cube-out': 'cubic-bezier(0.33, 1, 0.68, 1)',
261
- 'cube-in-out': 'cubic-bezier(0.65, 0, 0.35, 1)',
262
+ 'cube-in-out': 'cubic-bezier(0.65, 0, 0.35, 1)'
262
263
  }
263
264
  }
264
265
  },
265
266
  plugins: [
266
267
  aspect_ratio_1.default,
267
268
  container_queries_1.default,
269
+ anchors_1.default,
270
+ // counter: provides custom counting control via tailwind
268
271
  (0, plugin_1.default)(function ({ matchUtilities, matchVariant, theme }) {
269
- // counter: provides custom counting control via tailwind
270
272
  matchUtilities({
271
273
  'counter': (value) => ({
272
274
  counterReset: value
@@ -280,7 +282,9 @@ exports.EditorTailwindConfig = {
280
282
  }, {
281
283
  values: theme('counterName')
282
284
  });
283
- // avoid: avoids child component (pass in selector to thing you want to not match)
285
+ }),
286
+ // avoid: avoids child component (pass in selector to thing you want to not match)
287
+ (0, plugin_1.default)(function ({ matchUtilities, matchVariant, theme }) {
284
288
  matchVariant('avoid', child => `&:not(:has(${child}:hover, ${child}:focus-visible, ${child}:active))`);
285
289
  })
286
290
  ]
@@ -12,6 +12,7 @@ const core_1 = require("../../core");
12
12
  // component
13
13
  function UserExplorer() {
14
14
  // bind hooks
15
+ const anchorId = (0, react_1.useId)();
15
16
  const userEditorRef = (0, react_1.useRef)(null);
16
17
  const { user } = (0, core_1.useAuthenticator)();
17
18
  const browser = (0, core_1.useUserBrowser)();
@@ -118,7 +119,7 @@ function renderUsers({ user: currentUser, router, browser, menu, userEditorRef,
118
119
  await browser.sync();
119
120
  }
120
121
  };
121
- const onMenuOpen = async (e, user) => {
122
+ const onMenuOpen = async (e, user, anchor) => {
122
123
  // consume event
123
124
  e.preventDefault();
124
125
  e.stopPropagation();
@@ -145,7 +146,7 @@ function renderUsers({ user: currentUser, router, browser, menu, userEditorRef,
145
146
  // open menu
146
147
  menu.items = menuItems;
147
148
  menu.selectedItem = undefined;
148
- menu.open(e.currentTarget, user);
149
+ menu.open(anchor, user);
149
150
  };
150
151
  const onMenuSelect = async (item) => {
151
152
  var _a;
@@ -173,21 +174,21 @@ function renderUsers({ user: currentUser, router, browser, menu, userEditorRef,
173
174
  const { users } = browser;
174
175
  const canManageUsers = currentUser.hasAny('user.update', 'user.delete', 'user.passwordReset');
175
176
  return ((0, jsx_runtime_1.jsxs)(react_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center gap-l8", children: [(0, jsx_runtime_1.jsx)("h2", { className: "heading-lg text-content-primary", children: "Users" }), currentUser.has('user.create') &&
176
- (0, jsx_runtime_1.jsx)(core_1.Button, { variant: "primary", iconLeft: "Plus", onClick: e => onCreateUser(e.currentTarget), children: "New user" })] }), (0, jsx_runtime_1.jsx)(core_1.Table, { className: "flex-1", children: users.map(user => {
177
+ (0, jsx_runtime_1.jsx)(core_1.Button, { anchorId: "user-create", variant: "primary", iconLeft: "Plus", onClick: e => onCreateUser('user-create'), children: "New user" })] }), (0, jsx_runtime_1.jsx)(core_1.Table, { className: "flex-1", children: users.map(user => {
177
178
  // bond props
178
179
  const isCurrentUser = currentUser.id === user.id;
179
180
  const isInferior = currentUser.role.compareTo(user.role) > 0;
180
181
  // render
181
- return ((0, jsx_runtime_1.jsx)(core_1.TableItem, { details: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [user.blocked &&
182
+ return ((0, jsx_runtime_1.jsx)(core_1.TableItem, { anchorId: `user-edit-${user.id}`, details: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [user.blocked &&
182
183
  (0, jsx_runtime_1.jsx)(core_1.StatusBadge, { variant: "error", label: "Blocked" }), isCurrentUser &&
183
184
  (0, jsx_runtime_1.jsx)(core_1.StatusBadge, { variant: "warn", label: "You" }), user.isAdmin
184
185
  ? (0, jsx_runtime_1.jsx)(core_1.StatusBadge, { variant: "success", label: user.role.name })
185
186
  : user.isEditor
186
187
  ? (0, jsx_runtime_1.jsx)(core_1.StatusBadge, { variant: "default", label: user.role.name })
187
188
  : (0, jsx_runtime_1.jsx)(core_1.StatusBadge, { variant: "warn", label: user.role.name }), canManageUsers &&
188
- (0, jsx_runtime_1.jsx)(core_1.IconButton, { className: (0, classnames_1.default)('interactive-child ml-l5', {
189
+ (0, jsx_runtime_1.jsx)(core_1.IconButton, { anchorId: `user-menu-${user.id}`, className: (0, classnames_1.default)('interactive-child ml-l5', {
189
190
  'opacity-none': isInferior
190
- }), variant: "util", size: "sm", icon: "EllipsisVertical", onClick: e => onMenuOpen(e, user), disabled: isInferior })] }), onClick: e => onEditUser(user, e.currentTarget), disabled: isInferior, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex-1 flex items-center gap-l6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "label-md label-strong text-content-primary", children: user.username }), (0, jsx_runtime_1.jsx)("span", { className: "label-xs text-content-secondary", children: user.email })] }) }, user.id));
191
+ }), variant: "util", size: "sm", icon: "EllipsisVertical", onClick: e => onMenuOpen(e, user, `user-menu-${user.id}`), disabled: isInferior })] }), onClick: e => onEditUser(user, `user-edit-${user.id}`), disabled: isInferior, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex-1 flex items-center gap-l6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "label-md label-strong text-content-primary", children: user.username }), (0, jsx_runtime_1.jsx)("span", { className: "label-xs text-content-secondary", children: user.email })] }) }, user.id));
191
192
  }) }), (0, jsx_runtime_1.jsx)(core_1.Menu, { controller: menu, onItemClick: onMenuSelect })] }, "changes"));
192
193
  }
193
194
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nascentdigital/funnel-editor",
3
- "version": "4.5.7",
3
+ "version": "4.6.1",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "restricted"
@@ -77,6 +77,7 @@
77
77
  "devDependencies": {
78
78
  "@tailwindcss/aspect-ratio": "^0",
79
79
  "@tailwindcss/container-queries": "^0",
80
+ "@toolwind/anchors": "^1",
80
81
  "@types/node": "^22",
81
82
  "@types/url-regex-safe": "^1",
82
83
  "autoprefixer": "^10",
@@ -89,5 +90,5 @@
89
90
  "ts-jest": "^29",
90
91
  "type-fest": "^4"
91
92
  },
92
- "gitHead": "aa14b53e99044a968b850c4f426e40d312a9306a"
93
+ "gitHead": "4a1d18f6f87148196b5e820c0ada8f2a8111b9f6"
93
94
  }
@@ -1,10 +0,0 @@
1
- import { Schema } from '@nascentdigital/funnel-core';
2
- import { Client } from '@nascentdigital/funnel-ui';
3
- export declare function ClientPreview({ className, client }: ClientPreview.Props): import("react/jsx-runtime").JSX.Element;
4
- export declare namespace ClientPreview {
5
- type Props = {
6
- className?: string;
7
- schema: Schema.CollectionField;
8
- client: Client.Value;
9
- };
10
- }
@@ -1,29 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ClientPreview = ClientPreview;
7
- const jsx_runtime_1 = require("react/jsx-runtime");
8
- const funnel_ui_1 = require("@nascentdigital/funnel-ui");
9
- const classnames_1 = __importDefault(require("classnames"));
10
- // components
11
- function ClientPreview({ className, client }) {
12
- // bind props
13
- const { name, fields } = client;
14
- const { logo: logoRaw, division: divisionRaw, location: locationRaw } = fields !== null && fields !== void 0 ? fields : {};
15
- const logo = logoRaw === null || logoRaw === void 0 ? void 0 : logoRaw.value;
16
- const division = divisionRaw === null || divisionRaw === void 0 ? void 0 : divisionRaw.value;
17
- const location = locationRaw === null || locationRaw === void 0 ? void 0 : locationRaw.value;
18
- // render
19
- return ((0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(className, 'h-full flex flex-col justify-center items-center gap-l8 p-l8', '[--nd-icon-color:theme(colors.content-primary)]', '[--nd-icon-color:theme(colors.content-primary)]'), children: [logo
20
- ?
21
- (0, jsx_runtime_1.jsx)(funnel_ui_1.Icon, { className: "w-[100px] h-40", icon: logo })
22
- :
23
- (0, jsx_runtime_1.jsx)("div", { className: "text-border-l1 border border-dashed border-border-l1 rounded-xs p-l6", children: "Logo" }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-center text-center", children: [(0, jsx_runtime_1.jsx)("h4", { className: "body-xs body-strong text-content-secondary", children: name }), division && location &&
24
- (0, jsx_runtime_1.jsx)("span", { className: "label-xs text-content-tertiary", children: division
25
- ? location
26
- ? `${division}, ${location}`
27
- : division
28
- : location })] })] }));
29
- }
@@ -1,9 +0,0 @@
1
- import { BlockLayout } from '@nascentdigital/funnel-core';
2
- export declare function SkeletonLayout({ variant, layout }: SkeletonLayout.Props): import("react/jsx-runtime").JSX.Element;
3
- export declare namespace SkeletonLayout {
4
- type Variant = 'mobile' | 'desktop';
5
- type Props = {
6
- variant: Variant;
7
- layout?: Readonly<BlockLayout>;
8
- };
9
- }