@floegence/floe-webapp-core 0.55.2 → 0.56.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
1
  @import './workbench-themes.css';
2
+ @import './workbench-composition.css';
2
3
 
3
4
  @layer components {
4
5
  /* ------------------------------------------------------------------ */
@@ -342,7 +343,7 @@
342
343
 
343
344
  .workbench-canvas__projected-layer.is-work-layer-locked
344
345
  .workbench-canvas__projected-work-layer
345
- > .workbench-widget {
346
+ > :is(.workbench-widget, .workbench-sticky) {
346
347
  pointer-events: none;
347
348
  }
348
349
 
@@ -350,31 +351,17 @@
350
351
  position: absolute;
351
352
  inset: 0;
352
353
  pointer-events: none;
353
- background-image:
354
- linear-gradient(
355
- to right,
356
- color-mix(in srgb, var(--border, #e5e5e5) 42%, transparent) 1px,
357
- transparent 1px
358
- ),
359
- linear-gradient(
360
- to bottom,
361
- color-mix(in srgb, var(--border, #e5e5e5) 42%, transparent) 1px,
362
- transparent 1px
363
- ),
364
- radial-gradient(
365
- circle,
366
- color-mix(in srgb, var(--border, #e5e5e5) 70%, transparent) 0.9px,
367
- transparent 1px
368
- );
369
- background-size:
370
- var(--wb-grid-major) var(--wb-grid-major),
371
- var(--wb-grid-major) var(--wb-grid-major),
372
- var(--wb-grid-minor) var(--wb-grid-minor);
373
- background-position:
374
- 0 0,
375
- 0 0,
376
- var(--wb-grid-minor-offset) var(--wb-grid-minor-offset);
377
- opacity: 0.78;
354
+ background-image: radial-gradient(
355
+ circle,
356
+ color-mix(in srgb, var(--foreground) 11%, transparent) 0.65px,
357
+ transparent 0.8px
358
+ );
359
+ background-size: 28px 28px;
360
+ opacity: 0.55;
361
+ }
362
+
363
+ :root[data-floe-shell-theme='hc-light'] .workbench-canvas__grid {
364
+ display: none;
378
365
  }
379
366
 
380
367
  .workbench-background-layer,
@@ -429,9 +416,6 @@
429
416
  .workbench-canvas__field.is-work-layer-muted .workbench-work-layer {
430
417
  pointer-events: none;
431
418
  }
432
- .workbench-canvas__field.is-work-layer-muted .workbench-sticky {
433
- pointer-events: auto;
434
- }
435
419
 
436
420
  /* ------------------------------------------------------------------ */
437
421
  /* Workbench freeform layers */
@@ -450,148 +434,6 @@
450
434
  will-change: transform;
451
435
  }
452
436
 
453
- :is(
454
- .workbench-background-region,
455
- .workbench-layer-swatch--region,
456
- .workbench-region-material__sample
457
- ) {
458
- --workbench-region-face: oklch(from var(--workbench-region-fill) 0.84 0.065 h);
459
- --workbench-region-edge: oklch(from var(--workbench-region-fill) 0.7 0.032 h);
460
- --workbench-region-outline: oklch(from var(--workbench-region-fill) 0.56 0.065 h);
461
- --workbench-region-surface: color-mix(
462
- in oklab,
463
- var(--workbench-region-face) var(--workbench-region-strength, 100%),
464
- var(--wb-canvas, var(--background))
465
- );
466
- --workbench-region-ink: color-mix(
467
- in oklab,
468
- var(--workbench-region-outline) 20%,
469
- var(--workbench-region-surface)
470
- );
471
- border: 1px solid var(--workbench-region-edge);
472
- border-radius: 12px;
473
- background: var(--workbench-region-surface);
474
- }
475
- .dark
476
- :is(
477
- .workbench-background-region,
478
- .workbench-layer-swatch--region,
479
- .workbench-region-material__sample
480
- ) {
481
- --workbench-region-face: oklch(from var(--workbench-region-fill) 0.32 0.045 h);
482
- --workbench-region-edge: oklch(from var(--workbench-region-fill) 0.405 0.025 h);
483
- --workbench-region-outline: oklch(from var(--workbench-region-fill) 0.58 0.055 h);
484
- }
485
- .workbench-background-region {
486
- pointer-events: none;
487
- }
488
- .workbench-background-region.is-transforming {
489
- will-change: transform;
490
- }
491
- .workbench-background-region.is-editable {
492
- pointer-events: auto;
493
- cursor: grab;
494
- }
495
- :is(
496
- .workbench-background-region,
497
- .workbench-layer-swatch--region,
498
- .workbench-region-material__sample
499
- ).is-material-frame {
500
- background: transparent;
501
- border: 2px dashed var(--workbench-region-outline);
502
- }
503
- :is(
504
- .workbench-background-region,
505
- .workbench-layer-swatch--region,
506
- .workbench-region-material__sample
507
- ).is-material-hatched {
508
- background-image: repeating-linear-gradient(
509
- 135deg,
510
- transparent 0 9px,
511
- var(--workbench-region-ink) 9px 10px
512
- );
513
- }
514
- :is(
515
- .workbench-background-region,
516
- .workbench-layer-swatch--region,
517
- .workbench-region-material__sample
518
- ).is-material-dotted {
519
- background-image: radial-gradient(var(--workbench-region-ink) 1px, transparent 1px);
520
- background-size: 10px 10px;
521
- }
522
- :is(
523
- .workbench-background-region,
524
- .workbench-layer-swatch--region,
525
- .workbench-region-material__sample
526
- ).is-material-grid {
527
- background-image:
528
- linear-gradient(var(--workbench-region-ink) 1px, transparent 1px),
529
- linear-gradient(90deg, var(--workbench-region-ink) 1px, transparent 1px);
530
- background-size: 24px 24px;
531
- }
532
- :is(
533
- .workbench-background-region,
534
- .workbench-layer-swatch--region,
535
- .workbench-region-material__sample
536
- ).is-material-glass {
537
- background-image: linear-gradient(
538
- 135deg,
539
- color-mix(in srgb, white 10%, transparent),
540
- transparent 60%
541
- );
542
- }
543
-
544
- .workbench-background-region__toolbar,
545
- .workbench-text-annotation__toolbar {
546
- position: absolute;
547
- left: -8px;
548
- bottom: calc(100% + 10px);
549
- display: inline-flex;
550
- align-items: center;
551
- gap: 5px;
552
- padding: 5px;
553
- border-radius: 10px;
554
- border: 1px solid color-mix(in srgb, var(--border, #e5e5e5) 80%, transparent);
555
- background: color-mix(in srgb, var(--card, #fff) 92%, transparent);
556
- box-shadow:
557
- 0 14px 32px -18px color-mix(in srgb, var(--foreground, #000) 30%, transparent),
558
- 0 1px 0 color-mix(in srgb, white 60%, transparent) inset;
559
- transform: scale(var(--workbench-layer-control-inverse-scale, 1));
560
- transform-origin: bottom left;
561
- z-index: 20;
562
- }
563
-
564
- .workbench-background-region__toolbar {
565
- left: 0;
566
- }
567
-
568
- .workbench-background-region__label {
569
- --ring: var(--wb-window-active, var(--foreground));
570
- position: absolute;
571
- left: 10px;
572
- top: 10px;
573
- max-width: calc(100% - 20px);
574
- min-width: 100px;
575
- border: 1px solid transparent;
576
- border-radius: 5px;
577
- padding: 4px 6px;
578
- color: var(--foreground);
579
- background: var(--wb-canvas, var(--background));
580
- font-size: 13px;
581
- font-weight: 550;
582
- cursor: text;
583
- }
584
- .workbench-background-region__label.is-empty {
585
- display: none;
586
- }
587
- .workbench-background-region__label [contenteditable] {
588
- white-space: pre-wrap;
589
- overflow-wrap: anywhere;
590
- min-height: 20px;
591
- user-select: text;
592
- cursor: text;
593
- }
594
-
595
437
  .workbench-layer-mini-button,
596
438
  .workbench-layer-swatch {
597
439
  display: inline-flex;
@@ -739,84 +581,6 @@
739
581
  line-height: 1;
740
582
  }
741
583
 
742
- .workbench-text-emoji-picker {
743
- position: relative;
744
- display: inline-flex;
745
- align-items: center;
746
- }
747
-
748
- .workbench-text-emoji-trigger {
749
- display: inline-flex;
750
- align-items: center;
751
- justify-content: center;
752
- width: 28px;
753
- height: 26px;
754
- padding: 0;
755
- border: 1px solid color-mix(in srgb, var(--border, #e5e5e5) 70%, transparent);
756
- border-radius: 8px;
757
- background: color-mix(in srgb, var(--card, #fff) 88%, transparent);
758
- color: var(--foreground, #111);
759
- font-size: 14px;
760
- line-height: 1;
761
- cursor: pointer;
762
- transition:
763
- background-color 140ms ease,
764
- border-color 140ms ease,
765
- transform 140ms ease;
766
- }
767
-
768
- .workbench-text-emoji-trigger:hover,
769
- .workbench-text-emoji-trigger[aria-expanded='true'] {
770
- border-color: color-mix(in srgb, var(--primary, #3b82f6) 50%, transparent);
771
- background: color-mix(in srgb, var(--primary, #3b82f6) 10%, var(--card, #fff));
772
- }
773
-
774
- .workbench-text-emoji-trigger:active {
775
- transform: translateY(1px);
776
- }
777
-
778
- .workbench-text-emoji-popover {
779
- position: absolute;
780
- right: 0;
781
- bottom: calc(100% + 7px);
782
- display: grid;
783
- grid-template-columns: repeat(6, 28px);
784
- gap: 4px;
785
- padding: 6px;
786
- border-radius: 11px;
787
- border: 1px solid color-mix(in srgb, var(--border, #e5e5e5) 78%, transparent);
788
- background: color-mix(in srgb, var(--popover, var(--card, #fff)) 96%, transparent);
789
- box-shadow:
790
- 0 16px 34px -18px color-mix(in srgb, var(--foreground, #000) 34%, transparent),
791
- 0 1px 0 color-mix(in srgb, white 50%, transparent) inset;
792
- z-index: 30;
793
- }
794
-
795
- .workbench-text-emoji-option {
796
- display: inline-flex;
797
- align-items: center;
798
- justify-content: center;
799
- width: 28px;
800
- height: 28px;
801
- padding: 0;
802
- border: 1px solid transparent;
803
- border-radius: 8px;
804
- background: transparent;
805
- font-size: 16px;
806
- line-height: 1;
807
- cursor: pointer;
808
- transition:
809
- background-color 120ms ease,
810
- border-color 120ms ease,
811
- transform 120ms ease;
812
- }
813
-
814
- .workbench-text-emoji-option:hover {
815
- border-color: color-mix(in srgb, var(--primary, #3b82f6) 34%, transparent);
816
- background: color-mix(in srgb, var(--primary, #3b82f6) 10%, transparent);
817
- transform: translateY(-1px);
818
- }
819
-
820
584
  .workbench-text-size-stepper__button {
821
585
  display: inline-flex;
822
586
  align-items: center;
@@ -853,36 +617,6 @@
853
617
  outline-offset: 2px;
854
618
  }
855
619
 
856
- .workbench-region-material-group {
857
- display: flex;
858
- flex-wrap: wrap;
859
- gap: 3px;
860
- border-left: 1px solid var(--border);
861
- padding-left: 5px;
862
- }
863
- .workbench-region-material {
864
- display: grid;
865
- justify-items: center;
866
- gap: 3px;
867
- padding: 4px;
868
- border: 1px solid transparent;
869
- border-radius: 6px;
870
- background: transparent;
871
- color: var(--foreground);
872
- font-size: 10px;
873
- cursor: pointer;
874
- }
875
- .workbench-region-material.is-active {
876
- border-color: var(--wb-window-active, var(--foreground));
877
- background: var(--accent);
878
- }
879
- .workbench-region-material__sample {
880
- display: block;
881
- width: 40px;
882
- height: 28px;
883
- border-radius: 4px;
884
- }
885
-
886
620
  .workbench-layer-resize {
887
621
  position: absolute;
888
622
  right: -1px;
@@ -926,21 +660,9 @@
926
660
  box-sizing: border-box;
927
661
  pointer-events: none;
928
662
  transform-origin: 0 0;
929
- border: 1px dashed var(--workbench-region-edge, var(--border));
930
- border-radius: 12px;
931
- }
932
- .workbench-layer-control__selection {
933
- position: absolute;
934
- inset: 0;
935
- pointer-events: none;
936
- border: 1px solid var(--wb-window-active, var(--foreground));
663
+
937
664
  border-radius: 12px;
938
665
  }
939
- .workbench-layer-control__selection.is-text {
940
- border-style: dashed;
941
- border-radius: 4px;
942
- }
943
-
944
666
  .workbench-layer-control .workbench-background-region__toolbar,
945
667
  .workbench-layer-control .workbench-text-annotation__toolbar,
946
668
  .workbench-layer-control .workbench-layer-resize {
@@ -968,7 +690,8 @@
968
690
  font-family: var(--workbench-text-family);
969
691
  font-size: var(--workbench-text-size);
970
692
  font-weight: var(--workbench-text-weight);
971
- line-height: 1.3;
693
+ line-height: var(--workbench-text-line-height, 1.35);
694
+ letter-spacing: var(--workbench-text-letter-spacing, -1.2px);
972
695
  text-align: var(--workbench-text-align);
973
696
  overflow: auto;
974
697
  white-space: pre-wrap;
@@ -1002,247 +725,6 @@
1002
725
  outline: none;
1003
726
  }
1004
727
 
1005
- /* Notes and palette samples share one matte material renderer. */
1006
- [data-note-color] {
1007
- --note-hue: 85;
1008
- --note-chroma: 0.038;
1009
- --note-face: oklch(0.945 var(--note-chroma) var(--note-hue));
1010
- --note-ink: oklch(0.32 0.025 var(--note-hue));
1011
- --note-marker: oklch(0.54 0.075 var(--note-hue));
1012
- --note-edge: oklch(0.79 0.025 var(--note-hue));
1013
- }
1014
- [data-note-color='sage'] {
1015
- --note-hue: 155;
1016
- }
1017
- [data-note-color='azure'] {
1018
- --note-hue: 245;
1019
- }
1020
- [data-note-color='coral'] {
1021
- --note-hue: 42;
1022
- }
1023
- [data-note-color='rose'] {
1024
- --note-hue: 350;
1025
- }
1026
- [data-note-color='graphite'] {
1027
- --note-hue: 255;
1028
- --note-chroma: 0.008;
1029
- --note-marker: oklch(0.54 0.012 255);
1030
- }
1031
- .dark [data-note-color] {
1032
- --note-face: oklch(
1033
- from var(--background) clamp(0.29, calc(l + 0.08), 0.4) var(--note-chroma) var(--note-hue)
1034
- );
1035
- --note-ink: oklch(0.9 0.016 var(--note-hue));
1036
- --note-marker: oklch(0.68 0.07 var(--note-hue));
1037
- --note-edge: oklch(from var(--note-face) calc(l + 0.065) 0.018 var(--note-hue));
1038
- }
1039
- .dark [data-note-color='graphite'] {
1040
- --note-marker: oklch(0.68 0.012 255);
1041
- }
1042
- [data-note-material] {
1043
- --note-fill: var(--note-face);
1044
- --note-rule: color-mix(in oklab, var(--note-marker) 22%, var(--note-fill));
1045
- background-color: var(--note-fill);
1046
- color: var(--note-ink);
1047
- border: 1px solid var(--note-edge);
1048
- border-radius: 9px;
1049
- position: relative;
1050
- overflow: hidden;
1051
- }
1052
- [data-note-material='tab'] {
1053
- --note-fill: var(--wb-window, var(--card));
1054
- --note-ink: var(--foreground);
1055
- --note-edge: var(--wb-window-edge, var(--border));
1056
- }
1057
- [data-note-material='tab']::before {
1058
- content: '';
1059
- position: absolute;
1060
- inset: 0 auto 0 0;
1061
- width: var(--note-stripe, 8px);
1062
- background: var(--note-marker);
1063
- pointer-events: none;
1064
- }
1065
- [data-note-material='ruled'] {
1066
- --note-fill: color-mix(in oklab, var(--note-face) 48%, var(--wb-window, var(--card)));
1067
- --note-ink: var(--foreground);
1068
- border-radius: 3px;
1069
- }
1070
- [data-note-material='ruled']::before {
1071
- content: '';
1072
- position: absolute;
1073
- inset: 0;
1074
- pointer-events: none;
1075
- background-image:
1076
- linear-gradient(
1077
- to right,
1078
- transparent var(--note-margin, 30px),
1079
- color-mix(in oklab, var(--note-marker) 38%, var(--note-fill)) var(--note-margin, 30px),
1080
- color-mix(in oklab, var(--note-marker) 38%, var(--note-fill))
1081
- calc(var(--note-margin, 30px) + 1px),
1082
- transparent calc(var(--note-margin, 30px) + 1px)
1083
- ),
1084
- repeating-linear-gradient(
1085
- to bottom,
1086
- transparent 0 calc(var(--note-rule-space, 28px) - 1px),
1087
- var(--note-rule) calc(var(--note-rule-space, 28px) - 1px) var(--note-rule-space, 28px)
1088
- );
1089
- }
1090
- .workbench-sticky {
1091
- display: flex;
1092
- overflow: visible;
1093
- transform-origin: 0 0;
1094
- cursor: grab;
1095
- }
1096
- .workbench-sticky__surface {
1097
- --ring: var(--wb-window-active, var(--border));
1098
- width: 100%;
1099
- height: 100%;
1100
- padding: 26px 22px 22px;
1101
- box-shadow: 0 3px 7px -5px rgb(0 0 0 / 24%);
1102
- }
1103
- .workbench-sticky.is-selected .workbench-sticky__surface {
1104
- border-color: var(--wb-window-active, var(--foreground));
1105
- }
1106
- .workbench-sticky__surface[data-note-material='ruled'] {
1107
- padding-left: 42px;
1108
- }
1109
- .workbench-sticky__body {
1110
- position: relative;
1111
- height: 100%;
1112
- overflow: auto;
1113
- font-size: 16px;
1114
- line-height: 28px;
1115
- white-space: pre-wrap;
1116
- overflow-wrap: anywhere;
1117
- user-select: text;
1118
- cursor: text;
1119
- }
1120
- .workbench-sticky__grip {
1121
- position: absolute;
1122
- top: 3px;
1123
- right: 4px;
1124
- z-index: 2;
1125
- width: 22px;
1126
- height: 22px;
1127
- display: grid;
1128
- place-items: center;
1129
- border: 0;
1130
- border-radius: 4px;
1131
- color: inherit;
1132
- background: transparent;
1133
- cursor: grab;
1134
- opacity: 0;
1135
- }
1136
- .workbench-sticky:hover .workbench-sticky__grip,
1137
- .workbench-sticky.is-selected .workbench-sticky__grip {
1138
- opacity: 0.7;
1139
- }
1140
- .workbench-sticky__grip:active {
1141
- cursor: grabbing;
1142
- }
1143
- .workbench-sticky__tool {
1144
- display: grid;
1145
- place-items: center;
1146
- width: 28px;
1147
- height: 28px;
1148
- border: 0;
1149
- border-radius: 5px;
1150
- color: var(--foreground);
1151
- background: transparent;
1152
- cursor: pointer;
1153
- }
1154
- .workbench-sticky__tool.is-danger {
1155
- color: var(--destructive);
1156
- }
1157
- .workbench-sticky__resize {
1158
- opacity: 0;
1159
- width: 34px;
1160
- height: 34px;
1161
- z-index: 4;
1162
- pointer-events: auto;
1163
- background: transparent;
1164
- right: -3px;
1165
- bottom: -3px;
1166
- }
1167
- .workbench-sticky__resize::after {
1168
- content: '';
1169
- position: absolute;
1170
- right: 6px;
1171
- bottom: 6px;
1172
- width: 10px;
1173
- height: 10px;
1174
- border-right: 2px solid var(--muted-foreground);
1175
- border-bottom: 2px solid var(--muted-foreground);
1176
- }
1177
- .workbench-sticky:hover .workbench-sticky__resize,
1178
- .workbench-sticky.is-selected .workbench-sticky__resize {
1179
- opacity: 1;
1180
- }
1181
- .workbench-note-preview {
1182
- display: block;
1183
- width: 21px;
1184
- height: 25px;
1185
- --note-stripe: 5px;
1186
- --note-margin: 7px;
1187
- --note-rule-space: 8px;
1188
- pointer-events: none;
1189
- }
1190
- .workbench-material-choices {
1191
- display: flex;
1192
- gap: 3px;
1193
- border-left: 1px solid var(--border);
1194
- padding-left: 5px;
1195
- }
1196
- .workbench-style-choice {
1197
- display: grid;
1198
- gap: 3px;
1199
- justify-items: center;
1200
- padding: 4px;
1201
- border: 1px solid transparent;
1202
- border-radius: 6px;
1203
- background: transparent;
1204
- color: var(--foreground);
1205
- cursor: pointer;
1206
- font-size: 10px;
1207
- }
1208
- .workbench-style-choice[aria-pressed='true'] {
1209
- border-color: var(--wb-window-active, var(--foreground));
1210
- background: var(--accent);
1211
- }
1212
- .workbench-style-choice:hover {
1213
- background: var(--accent);
1214
- }
1215
- .workbench-style-choice.is-material .workbench-note-preview {
1216
- width: 40px;
1217
- height: 31px;
1218
- }
1219
- .workbench-object-tools {
1220
- pointer-events: auto;
1221
- }
1222
- .workbench-object-tools
1223
- :is(
1224
- .workbench-sticky__actions,
1225
- .workbench-background-region__toolbar,
1226
- .workbench-text-annotation__toolbar
1227
- ) {
1228
- position: relative;
1229
- inset: auto;
1230
- transform: none;
1231
- display: flex;
1232
- flex-wrap: wrap;
1233
- align-items: center;
1234
- gap: 4px;
1235
- padding: 6px;
1236
- max-width: 100%;
1237
- width: max-content;
1238
- border: 1px solid var(--border);
1239
- border-radius: 10px;
1240
- background: var(--card);
1241
- color: var(--foreground);
1242
- box-shadow: 0 5px 15px -7px rgb(0 0 0 / 24%);
1243
- backdrop-filter: none;
1244
- }
1245
-
1246
728
  /* ------------------------------------------------------------------ */
1247
729
  /* Widget */
1248
730
  /* ------------------------------------------------------------------ */
@@ -1335,11 +817,11 @@
1335
817
 
1336
818
  .workbench-canvas__field.is-work-layer-muted
1337
819
  .workbench-work-layer
1338
- > .workbench-widget
820
+ > :is(.workbench-widget, .workbench-sticky)
1339
821
  :is(.workbench-widget__surface, .workbench-sticky__surface)::after,
1340
822
  .workbench-canvas__projected-layer.is-work-layer-locked
1341
823
  .workbench-canvas__projected-work-layer
1342
- > .workbench-widget
824
+ > :is(.workbench-widget, .workbench-sticky)
1343
825
  :is(.workbench-widget__surface, .workbench-sticky__surface)::after {
1344
826
  opacity: 0.84;
1345
827
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floegence/floe-webapp-core",
3
- "version": "0.55.2",
3
+ "version": "0.56.2",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",