@bendyline/squisq-editor-react 2.10.3 → 2.11.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.
@@ -7233,6 +7233,23 @@
7233
7233
  --squisq-block-props-surface: var(--squisq-surface);
7234
7234
  --squisq-block-props-surface-hover: var(--squisq-surface-hover);
7235
7235
  --squisq-block-props-input: var(--squisq-input-bg);
7236
+ --squisq-grid-bg: var(--squisq-surface);
7237
+ --squisq-grid-text: var(--squisq-text);
7238
+ --squisq-grid-text-muted: var(--squisq-text-muted);
7239
+ --squisq-grid-text-on-accent: var(--squisq-text-on-accent);
7240
+ --squisq-grid-border: var(--squisq-border);
7241
+ --squisq-grid-border-subtle: var(--squisq-border-subtle);
7242
+ --squisq-grid-header-bg: var(--squisq-surface-subtle);
7243
+ --squisq-grid-header-text: var(--squisq-text-strong);
7244
+ --squisq-grid-input-bg: var(--squisq-input-bg);
7245
+ --squisq-grid-row-hover: var(--squisq-row-hover);
7246
+ --squisq-grid-selection-bg: var(--squisq-accent-subtle);
7247
+ --squisq-grid-selection-border: var(--squisq-accent-border);
7248
+ --squisq-grid-focus-ring: var(--squisq-focus-ring);
7249
+ --squisq-grid-accent: var(--squisq-accent);
7250
+ --squisq-grid-dirty: var(--squisq-warning);
7251
+ --squisq-grid-error: var(--squisq-danger);
7252
+ --squisq-grid-resize-handle: var(--squisq-accent);
7236
7253
  --squisq-layout-accent-text: var(--squisq-accent-strong);
7237
7254
  --squisq-layout-accent-bg: var(--squisq-accent);
7238
7255
  --squisq-layout-accent-bg-hover: var(--squisq-accent-hover);
@@ -10665,6 +10682,11 @@
10665
10682
  outline: 2px solid var(--squisq-accent-border);
10666
10683
  outline-offset: -2px;
10667
10684
  }
10685
+ .squisq-media-bin-item--highlight {
10686
+ background: var(--squisq-accent-subtle);
10687
+ outline: 1px solid var(--squisq-accent-border);
10688
+ outline-offset: -1px;
10689
+ }
10668
10690
  .squisq-media-bin-thumb {
10669
10691
  width: 32px;
10670
10692
  height: 32px;
@@ -11944,7 +11966,6 @@
11944
11966
  min-height: 0;
11945
11967
  position: relative;
11946
11968
  display: flex;
11947
- padding: 6px 0;
11948
11969
  }
11949
11970
  .squisq-block-card-body > .squisq-raw-editor-container,
11950
11971
  .squisq-block-card-body > .squisq-wysiwyg-container {
@@ -11953,12 +11974,8 @@
11953
11974
  min-height: 0;
11954
11975
  }
11955
11976
  .squisq-block-card-body .squisq-wysiwyg-editor {
11956
- border-top: 1px solid var(--squisq-desk-border);
11957
- border-bottom: 1px solid var(--squisq-desk-border);
11958
- }
11959
- .squisq-block-card-body > .squisq-raw-editor-container {
11960
- border-top: 1px solid var(--squisq-desk-border);
11961
- border-bottom: 1px solid var(--squisq-desk-border);
11977
+ max-width: none;
11978
+ margin: 0;
11962
11979
  }
11963
11980
  .squisq-block-card-nav {
11964
11981
  display: flex;
@@ -11996,11 +12013,6 @@
11996
12013
  .squisq-block-card-add {
11997
12014
  margin-left: 8px;
11998
12015
  }
11999
- .squisq-editor-shell[data-theme=dark] .squisq-block-card-body .squisq-wysiwyg-editor,
12000
- .squisq-editor-shell[data-theme=dark] .squisq-block-card-body > .squisq-raw-editor-container {
12001
- border-top-color: var(--squisq-desk-border);
12002
- border-bottom-color: var(--squisq-desk-border);
12003
- }
12004
12016
  .squisq-editor-shell[data-theme=dark] .squisq-block-card-nav {
12005
12017
  background: var(--squisq-surface);
12006
12018
  }
@@ -16454,6 +16466,470 @@
16454
16466
  margin: 0.6rem 0;
16455
16467
  }
16456
16468
 
16469
+ /* src/styles/data-card.css */
16470
+ .squisq-wysiwyg-editor p.squisq-data-card-hidden {
16471
+ display: none;
16472
+ }
16473
+ .squisq-data-card-host {
16474
+ margin: 0.6rem 0;
16475
+ }
16476
+ .squisq-data-card {
16477
+ border: 1px solid var(--squisq-border);
16478
+ border-radius: 8px;
16479
+ background: var(--squisq-surface);
16480
+ color: var(--squisq-text);
16481
+ font-size: 0.85rem;
16482
+ overflow: hidden;
16483
+ }
16484
+ .squisq-data-card--missing {
16485
+ border-style: dashed;
16486
+ border-color: var(--squisq-warning-border);
16487
+ background: var(--squisq-warning-soft);
16488
+ }
16489
+ .squisq-data-card-header {
16490
+ display: flex;
16491
+ align-items: center;
16492
+ gap: 0.5rem;
16493
+ padding: 0.5rem 0.75rem;
16494
+ }
16495
+ .squisq-data-card-icon {
16496
+ flex: none;
16497
+ }
16498
+ .squisq-data-card-name {
16499
+ font-weight: 600;
16500
+ color: var(--squisq-text-strong);
16501
+ overflow: hidden;
16502
+ text-overflow: ellipsis;
16503
+ white-space: nowrap;
16504
+ }
16505
+ .squisq-data-card-meta {
16506
+ color: var(--squisq-text-soft);
16507
+ flex: 1 1 auto;
16508
+ overflow: hidden;
16509
+ text-overflow: ellipsis;
16510
+ white-space: nowrap;
16511
+ }
16512
+ .squisq-data-card-action {
16513
+ flex: none;
16514
+ border: 1px solid var(--squisq-border);
16515
+ border-radius: 6px;
16516
+ background: var(--squisq-surface-subtle);
16517
+ color: var(--squisq-text);
16518
+ font: inherit;
16519
+ font-size: 0.78rem;
16520
+ padding: 0.2rem 0.55rem;
16521
+ cursor: pointer;
16522
+ }
16523
+ .squisq-data-card-action:hover {
16524
+ background: var(--squisq-surface-hover);
16525
+ }
16526
+ .squisq-data-card-preview {
16527
+ border-top: 1px solid var(--squisq-border-subtle);
16528
+ padding: 0.4rem 0.75rem 0.55rem;
16529
+ overflow-x: auto;
16530
+ }
16531
+ .squisq-data-card-preview table {
16532
+ border-collapse: collapse;
16533
+ width: 100%;
16534
+ font-size: 0.78rem;
16535
+ }
16536
+ .squisq-data-card-preview th,
16537
+ .squisq-data-card-preview td {
16538
+ text-align: left;
16539
+ padding: 0.15rem 0.6rem 0.15rem 0;
16540
+ border-bottom: 1px solid var(--squisq-border-subtle);
16541
+ white-space: nowrap;
16542
+ max-width: 12rem;
16543
+ overflow: hidden;
16544
+ text-overflow: ellipsis;
16545
+ }
16546
+ .squisq-data-card-preview th {
16547
+ color: var(--squisq-text-soft);
16548
+ font-weight: 600;
16549
+ }
16550
+ .squisq-data-card-preview tr:last-child td {
16551
+ border-bottom: none;
16552
+ }
16553
+ .squisq-data-card-truncation {
16554
+ margin-top: 0.3rem;
16555
+ color: var(--squisq-text-muted);
16556
+ font-size: 0.72rem;
16557
+ }
16558
+ .squisq-data-card-error {
16559
+ padding: 0.4rem 0.75rem;
16560
+ border-top: 1px solid var(--squisq-border-subtle);
16561
+ color: var(--squisq-danger-strong);
16562
+ font-size: 0.72rem;
16563
+ }
16564
+ .squisq-data-card .squisq-data-card-grid {
16565
+ border: none;
16566
+ border-radius: 0;
16567
+ border-top: 1px solid var(--squisq-border-subtle);
16568
+ }
16569
+ .squisq-block-card-body .squisq-wysiwyg-editor:has(> .squisq-block-fill-available:last-child) {
16570
+ display: flex;
16571
+ flex-direction: column;
16572
+ box-sizing: border-box;
16573
+ }
16574
+ .squisq-block-card-body .squisq-wysiwyg-editor > .squisq-block-fill-available:last-child {
16575
+ display: flex;
16576
+ flex: 1 0 auto;
16577
+ flex-direction: column;
16578
+ }
16579
+ .squisq-block-card-body .squisq-wysiwyg-editor > .squisq-data-card-host:last-child > .squisq-data-card,
16580
+ .squisq-block-card-body .squisq-wysiwyg-editor > .squisq-data-card-host:last-child > .squisq-data-card > .squisq-data-card-grid {
16581
+ display: flex;
16582
+ flex: 1 1 auto;
16583
+ flex-direction: column;
16584
+ min-height: 0;
16585
+ }
16586
+ .squisq-block-card-body .squisq-wysiwyg-editor > .squisq-data-card-host:last-child .squisq-grid-scroller {
16587
+ flex: 1 1 420px;
16588
+ min-height: 0;
16589
+ }
16590
+
16591
+ /* ../grid-react/dist/styles/index.css */
16592
+ .squisq-grid {
16593
+ position: relative;
16594
+ display: flex;
16595
+ flex-direction: column;
16596
+ border: 1px solid var(--squisq-grid-border, #d1d5db);
16597
+ border-radius: 8px;
16598
+ background: var(--squisq-grid-bg, #ffffff);
16599
+ color: var(--squisq-grid-text, #1f2937);
16600
+ font-size: 0.82rem;
16601
+ overflow: hidden;
16602
+ }
16603
+ .squisq-grid-scroller {
16604
+ overflow: auto;
16605
+ overscroll-behavior: contain;
16606
+ position: relative;
16607
+ }
16608
+ .squisq-grid-header {
16609
+ display: grid;
16610
+ position: sticky;
16611
+ top: 0;
16612
+ z-index: 2;
16613
+ background: var(--squisq-grid-header-bg, #f9fafb);
16614
+ border-bottom: 1px solid var(--squisq-grid-border, #d1d5db);
16615
+ width: max-content;
16616
+ min-width: 100%;
16617
+ }
16618
+ .squisq-grid-headercell {
16619
+ position: relative;
16620
+ display: flex;
16621
+ flex-direction: column;
16622
+ border-right: 1px solid var(--squisq-grid-border-subtle, #e5e7eb);
16623
+ min-width: 0;
16624
+ }
16625
+ .squisq-grid-sortbutton {
16626
+ display: flex;
16627
+ align-items: center;
16628
+ gap: 4px;
16629
+ border: none;
16630
+ background: none;
16631
+ font: inherit;
16632
+ font-weight: 600;
16633
+ color: var(--squisq-grid-header-text, #374151);
16634
+ padding: 4px 8px 2px;
16635
+ cursor: pointer;
16636
+ text-align: left;
16637
+ min-width: 0;
16638
+ }
16639
+ .squisq-grid-colname {
16640
+ overflow: hidden;
16641
+ text-overflow: ellipsis;
16642
+ white-space: nowrap;
16643
+ }
16644
+ .squisq-grid-sortmark {
16645
+ flex: none;
16646
+ font-size: 0.65rem;
16647
+ color: var(--squisq-grid-accent, #2563eb);
16648
+ }
16649
+ .squisq-grid-filterrow {
16650
+ position: relative;
16651
+ display: flex;
16652
+ align-items: stretch;
16653
+ gap: 3px;
16654
+ margin: 0 6px 4px;
16655
+ min-width: 0;
16656
+ }
16657
+ .squisq-grid-opbutton {
16658
+ flex: none;
16659
+ display: flex;
16660
+ align-items: center;
16661
+ justify-content: center;
16662
+ gap: 1px;
16663
+ min-width: 26px;
16664
+ white-space: nowrap;
16665
+ padding: 0;
16666
+ border: 1px solid var(--squisq-grid-border-subtle, #e5e7eb);
16667
+ border-radius: 4px;
16668
+ background: var(--squisq-grid-input-bg, #ffffff);
16669
+ color: var(--squisq-grid-text-muted, #6b7280);
16670
+ font: inherit;
16671
+ font-size: 0.7rem;
16672
+ font-weight: 600;
16673
+ cursor: pointer;
16674
+ }
16675
+ .squisq-grid-opbutton:hover {
16676
+ color: var(--squisq-grid-text, #1f2937);
16677
+ }
16678
+ .squisq-grid-opbutton--cs .squisq-grid-opglyph {
16679
+ text-decoration: underline;
16680
+ color: var(--squisq-grid-accent, #2563eb);
16681
+ }
16682
+ .squisq-grid-opcaret {
16683
+ font-size: 0.55rem;
16684
+ line-height: 1;
16685
+ }
16686
+ .squisq-grid-opmenu {
16687
+ position: absolute;
16688
+ z-index: 3;
16689
+ min-width: 150px;
16690
+ padding: 3px;
16691
+ display: flex;
16692
+ flex-direction: column;
16693
+ border: 1px solid var(--squisq-grid-border, #d1d5db);
16694
+ border-radius: 6px;
16695
+ background: var(--squisq-grid-bg, #ffffff);
16696
+ box-shadow: 0 4px 14px rgba(0, 0, 0, 0.18);
16697
+ font-weight: 400;
16698
+ }
16699
+ .squisq-grid-opoption {
16700
+ display: flex;
16701
+ align-items: center;
16702
+ white-space: nowrap;
16703
+ gap: 8px;
16704
+ border: none;
16705
+ border-radius: 4px;
16706
+ background: none;
16707
+ color: var(--squisq-grid-text, #1f2937);
16708
+ font: inherit;
16709
+ font-size: 0.74rem;
16710
+ text-align: left;
16711
+ padding: 3px 8px;
16712
+ cursor: pointer;
16713
+ }
16714
+ .squisq-grid-opoption:hover {
16715
+ background: var(--squisq-grid-row-hover, #f3f4f6);
16716
+ }
16717
+ .squisq-grid-opoption--active {
16718
+ background: var(--squisq-grid-selection-bg, #eff6ff);
16719
+ }
16720
+ .squisq-grid-opclear {
16721
+ margin-bottom: 2px;
16722
+ padding-bottom: 4px;
16723
+ border-bottom: 1px solid var(--squisq-grid-border-subtle, #e5e7eb);
16724
+ border-radius: 4px 4px 0 0;
16725
+ color: var(--squisq-grid-text-muted, #6b7280);
16726
+ font-style: italic;
16727
+ }
16728
+ .squisq-grid-opoption .squisq-grid-opglyph {
16729
+ flex: none;
16730
+ min-width: 24px;
16731
+ text-align: center;
16732
+ font-weight: 600;
16733
+ white-space: nowrap;
16734
+ color: var(--squisq-grid-text-muted, #6b7280);
16735
+ }
16736
+ .squisq-grid-opcase {
16737
+ display: flex;
16738
+ align-items: center;
16739
+ gap: 6px;
16740
+ margin-top: 2px;
16741
+ padding: 4px 8px;
16742
+ border-top: 1px solid var(--squisq-grid-border-subtle, #e5e7eb);
16743
+ font-size: 0.72rem;
16744
+ color: var(--squisq-grid-text, #1f2937);
16745
+ cursor: pointer;
16746
+ }
16747
+ .squisq-grid-filterinput {
16748
+ flex: 1 1 auto;
16749
+ padding: 1px 6px;
16750
+ font: inherit;
16751
+ font-size: 0.72rem;
16752
+ font-weight: 400;
16753
+ border: 1px solid var(--squisq-grid-border-subtle, #e5e7eb);
16754
+ border-radius: 4px;
16755
+ background: var(--squisq-grid-input-bg, #ffffff);
16756
+ color: var(--squisq-grid-text, #1f2937);
16757
+ min-width: 0;
16758
+ }
16759
+ .squisq-grid-valuebutton {
16760
+ flex: none;
16761
+ width: 18px;
16762
+ padding: 0;
16763
+ border: 1px solid var(--squisq-grid-border-subtle, #e5e7eb);
16764
+ border-radius: 4px;
16765
+ background: var(--squisq-grid-input-bg, #ffffff);
16766
+ color: var(--squisq-grid-text-muted, #6b7280);
16767
+ font: inherit;
16768
+ font-size: 0.55rem;
16769
+ cursor: pointer;
16770
+ }
16771
+ .squisq-grid-valuebutton:hover {
16772
+ color: var(--squisq-grid-text, #1f2937);
16773
+ }
16774
+ .squisq-grid-valuemenu {
16775
+ position: absolute;
16776
+ z-index: 3;
16777
+ min-width: 150px;
16778
+ max-width: 260px;
16779
+ max-height: 260px;
16780
+ overflow-y: auto;
16781
+ padding: 3px;
16782
+ display: flex;
16783
+ flex-direction: column;
16784
+ border: 1px solid var(--squisq-grid-border, #d1d5db);
16785
+ border-radius: 6px;
16786
+ background: var(--squisq-grid-bg, #ffffff);
16787
+ box-shadow: 0 4px 14px rgba(0, 0, 0, 0.18);
16788
+ font-weight: 400;
16789
+ }
16790
+ .squisq-grid-valueoption {
16791
+ display: block;
16792
+ overflow: hidden;
16793
+ text-overflow: ellipsis;
16794
+ }
16795
+ .squisq-grid-valuemenu-note {
16796
+ padding: 4px 8px;
16797
+ border-top: 1px solid var(--squisq-grid-border-subtle, #e5e7eb);
16798
+ color: var(--squisq-grid-text-muted, #6b7280);
16799
+ font-size: 0.7rem;
16800
+ font-style: italic;
16801
+ }
16802
+ .squisq-grid-filterinput:disabled {
16803
+ background: var(--squisq-grid-row-hover, #f3f4f6);
16804
+ color: var(--squisq-grid-text-muted, #6b7280);
16805
+ font-style: italic;
16806
+ cursor: default;
16807
+ }
16808
+ .squisq-grid-resizer {
16809
+ position: absolute;
16810
+ top: 0;
16811
+ right: -3px;
16812
+ width: 6px;
16813
+ height: 100%;
16814
+ cursor: col-resize;
16815
+ z-index: 1;
16816
+ }
16817
+ .squisq-grid-resizer:hover {
16818
+ background: var(--squisq-grid-resize-handle, #2563eb);
16819
+ opacity: 0.5;
16820
+ }
16821
+ .squisq-grid-body {
16822
+ position: relative;
16823
+ width: max-content;
16824
+ min-width: 100%;
16825
+ }
16826
+ .squisq-grid-row {
16827
+ display: grid;
16828
+ position: absolute;
16829
+ top: 0;
16830
+ left: 0;
16831
+ width: max-content;
16832
+ min-width: 100%;
16833
+ }
16834
+ .squisq-grid-row:hover .squisq-grid-cell {
16835
+ background: var(--squisq-grid-row-hover, #f3f4f6);
16836
+ }
16837
+ .squisq-grid-cell {
16838
+ padding: 4px 8px;
16839
+ border-right: 1px solid var(--squisq-grid-border-subtle, #e5e7eb);
16840
+ border-bottom: 1px solid var(--squisq-grid-border-subtle, #e5e7eb);
16841
+ overflow: hidden;
16842
+ text-overflow: ellipsis;
16843
+ white-space: nowrap;
16844
+ outline: none;
16845
+ min-width: 0;
16846
+ }
16847
+ .squisq-grid-cell--num {
16848
+ text-align: right;
16849
+ font-variant-numeric: tabular-nums;
16850
+ }
16851
+ .squisq-grid-cell--selected,
16852
+ .squisq-grid-row:hover .squisq-grid-cell--selected {
16853
+ background: var(--squisq-grid-selection-bg, #eff6ff);
16854
+ }
16855
+ .squisq-grid-cell--focus {
16856
+ box-shadow: inset 0 0 0 2px var(--squisq-grid-focus-ring, #2563eb);
16857
+ }
16858
+ .squisq-grid:not(:focus-within) .squisq-grid-cell--focus {
16859
+ box-shadow: inset 0 0 0 2px var(--squisq-grid-border, #d1d5db);
16860
+ }
16861
+ .squisq-grid-cell--dirty {
16862
+ box-shadow: inset 2px 0 0 0 var(--squisq-grid-dirty, #d97706);
16863
+ }
16864
+ .squisq-grid-cell--locked {
16865
+ color: var(--squisq-grid-text-muted, #6b7280);
16866
+ cursor: not-allowed;
16867
+ }
16868
+ .squisq-grid-cell--formula {
16869
+ font-style: italic;
16870
+ }
16871
+ .squisq-grid-editor {
16872
+ width: 100%;
16873
+ height: 100%;
16874
+ border: none;
16875
+ outline: none;
16876
+ font: inherit;
16877
+ padding: 0;
16878
+ background: var(--squisq-grid-input-bg, #ffffff);
16879
+ color: var(--squisq-grid-text, #1f2937);
16880
+ }
16881
+ .squisq-grid-editor--error {
16882
+ box-shadow: inset 0 0 0 2px var(--squisq-grid-error, #dc2626);
16883
+ }
16884
+ .squisq-grid-footer {
16885
+ display: flex;
16886
+ align-items: center;
16887
+ gap: 12px;
16888
+ padding: 4px 10px;
16889
+ border-top: 1px solid var(--squisq-grid-border, #d1d5db);
16890
+ background: var(--squisq-grid-header-bg, #f9fafb);
16891
+ font-size: 0.74rem;
16892
+ color: var(--squisq-grid-text-muted, #6b7280);
16893
+ }
16894
+ .squisq-grid-status {
16895
+ flex: 1 1 auto;
16896
+ overflow: hidden;
16897
+ text-overflow: ellipsis;
16898
+ white-space: nowrap;
16899
+ }
16900
+ .squisq-grid-refresh,
16901
+ .squisq-grid-save,
16902
+ .squisq-grid-discard {
16903
+ border: 1px solid var(--squisq-grid-border, #d1d5db);
16904
+ border-radius: 5px;
16905
+ background: var(--squisq-grid-bg, #ffffff);
16906
+ color: var(--squisq-grid-text, #1f2937);
16907
+ font: inherit;
16908
+ font-size: 0.72rem;
16909
+ padding: 2px 8px;
16910
+ cursor: pointer;
16911
+ }
16912
+ .squisq-grid-save {
16913
+ background: var(--squisq-grid-accent, #2563eb);
16914
+ border-color: var(--squisq-grid-accent, #2563eb);
16915
+ color: var(--squisq-grid-text-on-accent, #ffffff);
16916
+ }
16917
+ .squisq-grid-save:disabled,
16918
+ .squisq-grid-discard:disabled {
16919
+ opacity: 0.6;
16920
+ cursor: default;
16921
+ }
16922
+ .squisq-grid-dirtybar {
16923
+ display: flex;
16924
+ align-items: center;
16925
+ gap: 8px;
16926
+ color: var(--squisq-grid-dirty, #d97706);
16927
+ font-weight: 600;
16928
+ }
16929
+ .squisq-grid-readonly {
16930
+ font-style: italic;
16931
+ }
16932
+
16457
16933
  /* src/styles/ascii-timeline.css */
16458
16934
  .squisq-wysiwyg-editor pre.squisq-ascii-timeline-fence-hidden {
16459
16935
  display: none;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bendyline/squisq-editor-react",
3
- "version": "2.10.3",
3
+ "version": "2.11.0",
4
4
  "description": "React editor shell with raw/WYSIWYG/preview modes for Squisq documents",
5
5
  "license": "MIT",
6
6
  "author": "Bendyline",
@@ -94,10 +94,12 @@
94
94
  }
95
95
  },
96
96
  "dependencies": {
97
- "@bendyline/squisq": "2.10.0",
98
- "@bendyline/squisq-formats": "2.5.1",
99
- "@bendyline/squisq-react": "2.10.1",
100
- "@bendyline/squisq-video-react": "2.4.3",
97
+ "@bendyline/squisq": "2.11.0",
98
+ "@bendyline/squisq-calc": "2.11.0",
99
+ "@bendyline/squisq-formats": "2.6.0",
100
+ "@bendyline/squisq-grid-react": "2.11.1",
101
+ "@bendyline/squisq-react": "2.11.0",
102
+ "@bendyline/squisq-video-react": "2.4.4",
101
103
  "@fortawesome/fontawesome-free": "7.2.0",
102
104
  "@tiptap/core": "2.27.2",
103
105
  "@tiptap/extension-heading": "2.27.2",