astro-tractstack 2.0.11 → 2.0.12

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.
@@ -352,14 +352,18 @@ export function processRichTextToNodes(
352
352
 
353
353
  // Process each node to restore interactive element properties
354
354
  parsedNodes.forEach((node) => {
355
- if (['a', 'button'].includes(node.tagName)) {
355
+ if (['a', 'button', 'span'].includes(node.tagName)) {
356
356
  const matchingOriginalNode = findMatchingNode(node, originalNodes);
357
-
358
357
  if (matchingOriginalNode) {
359
- // Preserve properties from the original node
360
- node.buttonPayload = matchingOriginalNode.buttonPayload;
361
- if (node.tagName === 'a' && matchingOriginalNode.href) {
362
- node.href = matchingOriginalNode.href;
358
+ if (node.tagName === 'a') {
359
+ if (matchingOriginalNode.href) {
360
+ node.href = matchingOriginalNode.href;
361
+ }
362
+ } else if (node.tagName === 'button') {
363
+ node.buttonPayload = matchingOriginalNode.buttonPayload;
364
+ } else if (node.tagName === 'span') {
365
+ node.elementCss = matchingOriginalNode.elementCss;
366
+ node.overrideClasses = matchingOriginalNode.overrideClasses;
363
367
  }
364
368
  } else if (onInsertSignal) {
365
369
  // New interactive element detected, trigger insert signal
@@ -381,49 +385,64 @@ export function findMatchingNode(
381
385
  newNode: FlatNode,
382
386
  originalNodes: FlatNode[]
383
387
  ): FlatNode | undefined {
384
- if (newNode.tagName === 'a' && newNode.href) {
385
- // Exact href match for links
386
- const hrefMatch = originalNodes.find(
387
- (node) => node.tagName === 'a' && node.href === newNode.href
388
- );
389
- if (hrefMatch) return hrefMatch;
390
-
391
- // Domain-based partial match
392
- const partialMatch = originalNodes.find((node) => {
393
- if (node.tagName !== 'a' || !node.href || !newNode.href) return false;
394
- try {
395
- const origDomain = new URL(node.href).hostname;
396
- const newDomain = new URL(newNode.href).hostname;
397
- return origDomain === newDomain;
398
- } catch {
399
- return false;
388
+ switch (newNode.tagName) {
389
+ case 'a': {
390
+ if (!newNode.href) {
391
+ break;
400
392
  }
401
- });
402
- if (partialMatch) return partialMatch;
403
- }
404
393
 
405
- if (newNode.tagName === 'button') {
406
- const newText = getNodeText(newNode);
407
- const buttonMatches = originalNodes.filter(
408
- (node) => node.tagName === 'button'
409
- );
394
+ const hrefMatch = originalNodes.find(
395
+ (node) => node.tagName === 'a' && node.href === newNode.href
396
+ );
397
+ if (hrefMatch) {
398
+ return hrefMatch;
399
+ }
400
+
401
+ const partialMatch = originalNodes.find((node) => {
402
+ if (node.tagName !== 'a' || !node.href || !newNode.href) {
403
+ return false;
404
+ }
405
+ try {
406
+ const origDomain = new URL(node.href).hostname;
407
+ const newDomain = new URL(newNode.href).hostname;
408
+ return origDomain === newDomain;
409
+ } catch {
410
+ return false;
411
+ }
412
+ });
413
+ if (partialMatch) {
414
+ return partialMatch;
415
+ }
416
+
417
+ break;
418
+ }
419
+
420
+ case 'button':
421
+ case 'span': {
422
+ const newText = getNodeText(newNode);
423
+ const matches = originalNodes.filter(
424
+ (node) => node.tagName === newNode.tagName
425
+ );
426
+
427
+ for (const match of matches) {
428
+ const matchText = getNodeText(match);
429
+ if (
430
+ matchText.includes(newText) ||
431
+ newText.includes(matchText) ||
432
+ calculateSimilarity(matchText, newText) > 0.7
433
+ ) {
434
+ return match;
435
+ }
436
+ }
410
437
 
411
- for (const button of buttonMatches) {
412
- const buttonText = getNodeText(button);
413
438
  if (
414
- buttonText.includes(newText) ||
415
- newText.includes(buttonText) ||
416
- calculateSimilarity(buttonText, newText) > 0.7
439
+ matches.length === 1 &&
440
+ originalNodes.filter((n) => n.tagName === newNode.tagName).length === 1
417
441
  ) {
418
- return button;
442
+ return matches[0];
419
443
  }
420
- }
421
444
 
422
- if (
423
- buttonMatches.length === 1 &&
424
- originalNodes.filter((n) => n.tagName === 'button').length === 1
425
- ) {
426
- return buttonMatches[0];
445
+ break;
427
446
  }
428
447
  }
429
448
 
@@ -444,17 +444,7 @@ export const tailwindClasses: TailwindClasses = {
444
444
  priority: 0,
445
445
  },
446
446
  fontWEIGHT: {
447
- values: [
448
- //"thin",
449
- //"extralight",
450
- //"light",
451
- 'normal',
452
- //"medium",
453
- //"semibold",
454
- 'bold',
455
- //"extrabold",
456
- //"black",
457
- ],
447
+ values: ['normal', 'bold'],
458
448
  group: 'Typography',
459
449
  title: 'Font Weight',
460
450
  className: 'font',
@@ -740,6 +730,7 @@ export const tailwindClasses: TailwindClasses = {
740
730
  className: 'm',
741
731
  prefix: 'm-',
742
732
  priority: 1,
733
+ allowNegative: true,
743
734
  },
744
735
  mx: {
745
736
  values: [...spacing],
@@ -748,6 +739,7 @@ export const tailwindClasses: TailwindClasses = {
748
739
  className: 'mx',
749
740
  prefix: 'mx-',
750
741
  priority: 1,
742
+ allowNegative: true,
751
743
  },
752
744
  my: {
753
745
  values: [...spacing],
@@ -756,6 +748,7 @@ export const tailwindClasses: TailwindClasses = {
756
748
  className: 'my',
757
749
  prefix: 'my-',
758
750
  priority: 1,
751
+ allowNegative: true,
759
752
  },
760
753
  mt: {
761
754
  values: [...spacing],
@@ -764,6 +757,7 @@ export const tailwindClasses: TailwindClasses = {
764
757
  className: 'mt',
765
758
  prefix: 'mt-',
766
759
  priority: 1,
760
+ allowNegative: true,
767
761
  },
768
762
  mr: {
769
763
  values: [...spacing],
@@ -772,6 +766,7 @@ export const tailwindClasses: TailwindClasses = {
772
766
  className: 'mr',
773
767
  prefix: 'mr-',
774
768
  priority: 1,
769
+ allowNegative: true,
775
770
  },
776
771
  mb: {
777
772
  values: [...spacing],
@@ -780,6 +775,7 @@ export const tailwindClasses: TailwindClasses = {
780
775
  className: 'mb',
781
776
  prefix: 'mb-',
782
777
  priority: 1,
778
+ allowNegative: true,
783
779
  },
784
780
  ml: {
785
781
  values: [...spacing],
@@ -788,6 +784,7 @@ export const tailwindClasses: TailwindClasses = {
788
784
  className: 'ml',
789
785
  prefix: 'ml-',
790
786
  priority: 1,
787
+ allowNegative: true,
791
788
  },
792
789
  p: {
793
790
  values: [...spacing],
@@ -845,6 +842,24 @@ export const tailwindClasses: TailwindClasses = {
845
842
  prefix: 'pl-',
846
843
  priority: 1,
847
844
  },
845
+ spaceX: {
846
+ values: [...spacing],
847
+ group: 'Spacing',
848
+ title: 'Space Between X',
849
+ className: 'space-x',
850
+ prefix: 'space-x-',
851
+ priority: 1,
852
+ allowNegative: true,
853
+ },
854
+ spaceY: {
855
+ values: [...spacing],
856
+ group: 'Spacing',
857
+ title: 'Space Between Y',
858
+ className: 'space-y',
859
+ prefix: 'space-y-',
860
+ priority: 1,
861
+ allowNegative: true,
862
+ },
848
863
  flex: {
849
864
  values: ['1', 'auto', 'initial', 'none'],
850
865
  group: 'Flexbox',
@@ -869,6 +884,48 @@ export const tailwindClasses: TailwindClasses = {
869
884
  prefix: 'flex-',
870
885
  priority: 1,
871
886
  },
887
+ flexGROW: {
888
+ values: ['0', '1'],
889
+ group: 'Flexbox',
890
+ title: 'Flex Grow',
891
+ className: 'grow',
892
+ prefix: 'grow-',
893
+ priority: 1,
894
+ },
895
+ flexSHRINK: {
896
+ values: ['0', '1'],
897
+ group: 'Flexbox',
898
+ title: 'Flex Shrink',
899
+ className: 'shrink',
900
+ prefix: 'shrink-',
901
+ priority: 1,
902
+ },
903
+ flexBASIS: {
904
+ values: [
905
+ ...spacing,
906
+ '1/2',
907
+ '1/3',
908
+ '2/3',
909
+ '1/4',
910
+ '3/4',
911
+ '1/5',
912
+ '2/5',
913
+ '3/5',
914
+ '4/5',
915
+ '1/6',
916
+ '5/6',
917
+ '1/12',
918
+ '5/12',
919
+ '7/12',
920
+ '11/12',
921
+ 'full',
922
+ ],
923
+ group: 'Flexbox',
924
+ title: 'Flex Basis',
925
+ className: 'basis',
926
+ prefix: 'basis-',
927
+ priority: 1,
928
+ },
872
929
  justifyITEMS: {
873
930
  values: ['start', 'end', 'center', 'stretch'],
874
931
  group: 'Flexbox',
@@ -978,7 +1035,7 @@ export const tailwindClasses: TailwindClasses = {
978
1035
  group: 'Flexbox',
979
1036
  title: 'Gap X',
980
1037
  className: 'gap-x',
981
- prefix: 'gap-',
1038
+ prefix: 'gap-x-',
982
1039
  priority: 1,
983
1040
  },
984
1041
  gapY: {
@@ -1022,7 +1079,7 @@ export const tailwindClasses: TailwindClasses = {
1022
1079
  group: 'Flexbox',
1023
1080
  title: 'Gap Y',
1024
1081
  className: 'gap-y',
1025
- prefix: 'gap-',
1082
+ prefix: 'gap-y-',
1026
1083
  priority: 1,
1027
1084
  },
1028
1085
  borderSTYLE: {
@@ -1034,25 +1091,49 @@ export const tailwindClasses: TailwindClasses = {
1034
1091
  priority: 2,
1035
1092
  },
1036
1093
  borderWIDTH: {
1037
- values: ['0', '2', '4', '8'],
1094
+ values: ['0', '1', '2', '4', '8'],
1038
1095
  group: 'Borders',
1039
1096
  title: 'Border Width',
1040
1097
  className: 'border',
1041
1098
  prefix: 'border-',
1042
1099
  priority: 2,
1043
1100
  },
1044
- borderCOLOR: {
1045
- values: ['inherit', 'current', 'transparent', ...colorValues],
1101
+ borderT_WIDTH: {
1102
+ values: ['0', '1', '2', '4', '8'],
1046
1103
  group: 'Borders',
1047
- title: 'Border Color',
1048
- className: 'border',
1049
- prefix: 'border-',
1104
+ title: 'Border Top Width',
1105
+ className: 'border-t',
1106
+ prefix: 'border-t-',
1050
1107
  priority: 2,
1051
1108
  },
1052
- borderSTROKE: {
1053
- values: ['0', '2', '4', '8'],
1109
+ borderR_WIDTH: {
1110
+ values: ['0', '1', '2', '4', '8'],
1111
+ group: 'Borders',
1112
+ title: 'Border Right Width',
1113
+ className: 'border-r',
1114
+ prefix: 'border-r-',
1115
+ priority: 2,
1116
+ },
1117
+ borderB_WIDTH: {
1118
+ values: ['0', '1', '2', '4', '8'],
1054
1119
  group: 'Borders',
1055
- title: 'Border Stroke Size',
1120
+ title: 'Border Bottom Width',
1121
+ className: 'border-b',
1122
+ prefix: 'border-b-',
1123
+ priority: 2,
1124
+ },
1125
+ borderL_WIDTH: {
1126
+ values: ['0', '1', '2', '4', '8'],
1127
+ group: 'Borders',
1128
+ title: 'Border Left Width',
1129
+ className: 'border-l',
1130
+ prefix: 'border-l-',
1131
+ priority: 2,
1132
+ },
1133
+ borderCOLOR: {
1134
+ values: ['inherit', 'current', 'transparent', ...colorValues],
1135
+ group: 'Borders',
1136
+ title: 'Border Color',
1056
1137
  className: 'border',
1057
1138
  prefix: 'border-',
1058
1139
  priority: 2,
@@ -1069,8 +1150,8 @@ export const tailwindClasses: TailwindClasses = {
1069
1150
  values: ['0', '2', '4', '8'],
1070
1151
  group: 'Borders',
1071
1152
  title: 'Divide Width',
1072
- className: 'divide',
1073
- prefix: 'divide-',
1153
+ className: 'divide-x',
1154
+ prefix: 'divide-x-',
1074
1155
  priority: 2,
1075
1156
  },
1076
1157
  divideCOLOR: {
@@ -1090,7 +1171,7 @@ export const tailwindClasses: TailwindClasses = {
1090
1171
  priority: 2,
1091
1172
  },
1092
1173
  outlineWIDTH: {
1093
- values: ['0', '2', '4', '8'],
1174
+ values: ['0', '1', '2', '4', '8'],
1094
1175
  group: 'Borders',
1095
1176
  title: 'Outline Width',
1096
1177
  className: 'outline',
@@ -1114,7 +1195,7 @@ export const tailwindClasses: TailwindClasses = {
1114
1195
  priority: 2,
1115
1196
  },
1116
1197
  ringWIDTH: {
1117
- values: ['0', '2', '4', '8'],
1198
+ values: ['0', '1', '2', '4', '8'],
1118
1199
  group: 'Borders',
1119
1200
  title: 'Ring Width',
1120
1201
  className: 'ring',
@@ -1130,7 +1211,7 @@ export const tailwindClasses: TailwindClasses = {
1130
1211
  priority: 2,
1131
1212
  },
1132
1213
  ringOffsetWIDTH: {
1133
- values: ['0', '2', '4', '8'],
1214
+ values: ['0', '1', '2', '4', '8'],
1134
1215
  group: 'Borders',
1135
1216
  title: 'Ring Offset Width',
1136
1217
  className: 'ring-offset',
@@ -1219,6 +1300,38 @@ export const tailwindClasses: TailwindClasses = {
1219
1300
  prefix: 'bg-origin-',
1220
1301
  priority: 2,
1221
1302
  },
1303
+ bgGradientDIRECTION: {
1304
+ values: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'],
1305
+ group: 'Backgrounds',
1306
+ title: 'Gradient Direction',
1307
+ className: 'bg-gradient-to',
1308
+ prefix: 'bg-gradient-to-',
1309
+ priority: 2,
1310
+ },
1311
+ gradientFrom: {
1312
+ values: ['inherit', 'current', 'transparent', ...colorValues],
1313
+ group: 'Backgrounds',
1314
+ title: 'Gradient From',
1315
+ className: 'from',
1316
+ prefix: 'from-',
1317
+ priority: 2,
1318
+ },
1319
+ gradientVia: {
1320
+ values: ['inherit', 'current', 'transparent', ...colorValues],
1321
+ group: 'Backgrounds',
1322
+ title: 'Gradient Via',
1323
+ className: 'via',
1324
+ prefix: 'via-',
1325
+ priority: 2,
1326
+ },
1327
+ gradientTo: {
1328
+ values: ['inherit', 'current', 'transparent', ...colorValues],
1329
+ group: 'Backgrounds',
1330
+ title: 'Gradient To',
1331
+ className: 'to',
1332
+ prefix: 'to-',
1333
+ priority: 2,
1334
+ },
1222
1335
  fill: {
1223
1336
  values: ['inherit', 'current', 'transparent', ...colorValues],
1224
1337
  group: 'Colors',
@@ -1276,7 +1389,7 @@ export const tailwindClasses: TailwindClasses = {
1276
1389
  useKeyAsClass: true,
1277
1390
  priority: 3,
1278
1391
  },
1279
- transitionPROPERTY: {
1392
+ transition: {
1280
1393
  values: ['none', 'all', 'colors', 'opacity', 'shadow', 'transform'],
1281
1394
  group: 'Transitions',
1282
1395
  title: 'Transition Property',
@@ -1296,47 +1409,44 @@ export const tailwindClasses: TailwindClasses = {
1296
1409
  values: ['0', '1', '2', '3', '6', '12'],
1297
1410
  group: 'Transforms',
1298
1411
  title: 'Skew',
1299
- className: 'skew',
1300
- prefix: 'skew-',
1412
+ className: 'skew-x',
1413
+ prefix: 'skew-x-',
1301
1414
  priority: 3,
1415
+ allowNegative: true,
1302
1416
  },
1303
1417
  translate: {
1304
1418
  values: [
1305
- '0',
1306
- '1',
1307
- '2',
1308
- '3',
1309
- '4',
1310
- '5',
1311
- '6',
1312
- '7',
1313
- '8',
1314
- '9',
1315
- '10',
1316
- '11',
1317
- '12',
1318
- '14',
1319
- '16',
1320
- '20',
1321
- '24',
1322
- '28',
1323
- '32',
1324
- '36',
1325
- '40',
1326
- '44',
1327
- '48',
1328
- '52',
1329
- '56',
1330
- '60',
1331
- '64',
1332
- '72',
1333
- '80',
1334
- '96',
1419
+ ...spacing.slice(0, 31),
1420
+ '1/2',
1421
+ '1/3',
1422
+ '1/4',
1423
+ '2/3',
1424
+ '3/4',
1425
+ 'full',
1335
1426
  ],
1336
1427
  group: 'Transforms',
1337
1428
  title: 'Translate',
1338
- className: 'translate',
1339
- prefix: 'translate-',
1429
+ className: 'translate-x',
1430
+ prefix: 'translate-x-',
1431
+ priority: 3,
1432
+ allowNegative: true,
1433
+ },
1434
+ transformORIGIN: {
1435
+ values: [
1436
+ 'center',
1437
+ 'top',
1438
+ 'top-right',
1439
+ 'right',
1440
+ 'bottom-right',
1441
+ 'bottom',
1442
+ 'bottom-left',
1443
+ 'left',
1444
+ 'top-left',
1445
+ ],
1446
+ group: 'Transforms',
1447
+ title: 'Transform Origin',
1448
+ className: 'origin',
1449
+ prefix: 'origin-',
1340
1450
  priority: 3,
1341
1451
  },
1342
1452
  listSTYLETYPE: {
@@ -1506,6 +1616,7 @@ export const tailwindClasses: TailwindClasses = {
1506
1616
  className: 'hue-rotate',
1507
1617
  prefix: 'hue-rotate-',
1508
1618
  priority: 3,
1619
+ allowNegative: true,
1509
1620
  },
1510
1621
  invert: {
1511
1622
  values: ['0', '1'],
@@ -1591,6 +1702,7 @@ export const tailwindClasses: TailwindClasses = {
1591
1702
  className: 'backdrop-hue-rotate',
1592
1703
  prefix: 'backdrop-hue-rotate-',
1593
1704
  priority: 3,
1705
+ allowNegative: true,
1594
1706
  },
1595
1707
  backdropINVERT: {
1596
1708
  values: ['0', '1'],
@@ -1640,14 +1752,6 @@ export const tailwindClasses: TailwindClasses = {
1640
1752
  prefix: 'backdrop-sepia-',
1641
1753
  priority: 3,
1642
1754
  },
1643
- transition: {
1644
- values: ['none', 'all', 'colors', 'opacity', 'shadow', 'transform'],
1645
- group: 'Transitions',
1646
- title: 'Transition',
1647
- className: 'transition',
1648
- prefix: 'transition-',
1649
- priority: 3,
1650
- },
1651
1755
  transitionDURATION: {
1652
1756
  values: ['75', '100', '150', '200', '300', '500', '700', '1000'],
1653
1757
  group: 'Transitions',
@@ -1725,6 +1829,14 @@ export const tailwindClasses: TailwindClasses = {
1725
1829
  prefix: 'cursor-',
1726
1830
  priority: 3,
1727
1831
  },
1832
+ appearance: {
1833
+ values: ['none', 'auto'],
1834
+ group: 'Interactivity',
1835
+ title: 'Appearance',
1836
+ className: 'appearance',
1837
+ prefix: 'appearance-',
1838
+ priority: 3,
1839
+ },
1728
1840
  pointerEVENTS: {
1729
1841
  values: ['none', 'auto'],
1730
1842
  group: 'Interactivity',
@@ -1749,6 +1861,15 @@ export const tailwindClasses: TailwindClasses = {
1749
1861
  prefix: 'scroll-',
1750
1862
  priority: 3,
1751
1863
  },
1864
+ scrollMARGIN: {
1865
+ values: [...spacing],
1866
+ group: 'Interactivity',
1867
+ title: 'Scroll Margin',
1868
+ className: 'scroll-m',
1869
+ prefix: 'scroll-m-',
1870
+ priority: 3,
1871
+ allowNegative: true,
1872
+ },
1752
1873
  scrollSNAP: {
1753
1874
  values: ['none', 'x', 'y', 'both'],
1754
1875
  group: 'Interactivity',
@@ -1792,4 +1913,13 @@ export const tailwindClasses: TailwindClasses = {
1792
1913
  prefix: 'will-change-',
1793
1914
  priority: 3,
1794
1915
  },
1916
+ screenREADERS: {
1917
+ values: ['sr-only', 'not-sr-only'],
1918
+ group: 'Accessibility',
1919
+ title: 'Screen Readers',
1920
+ className: 'sr-only',
1921
+ prefix: '',
1922
+ useKeyAsClass: true,
1923
+ priority: 3,
1924
+ },
1795
1925
  };
@@ -430,22 +430,12 @@ export async function injectTemplateFiles(
430
430
  dest: 'src/components/edit/pane/AddPanePanel_codehook.tsx',
431
431
  },
432
432
  {
433
- src: resolve(
434
- '../templates/src/components/edit/pane/AddPanePanel_newAICopy_modal.tsx'
435
- ),
436
- dest: 'src/components/edit/pane/AddPanePanel_newAICopy_modal.tsx',
437
- },
438
- {
439
- src: resolve(
440
- '../templates/src/components/edit/pane/AddPanePanel_newAICopy.tsx'
441
- ),
442
- dest: 'src/components/edit/pane/AddPanePanel_newAICopy.tsx',
433
+ src: resolve('../templates/src/components/edit/pane/AiPaneGenerator.tsx'),
434
+ dest: 'src/components/edit/pane/AiPaneGenerator.tsx',
443
435
  },
444
436
  {
445
- src: resolve(
446
- '../templates/src/components/edit/pane/AddPanePanel_newCopyMode.tsx'
447
- ),
448
- dest: 'src/components/edit/pane/AddPanePanel_newCopyMode.tsx',
437
+ src: resolve('../templates/src/components/edit/pane/AiPanePreview.tsx'),
438
+ dest: 'src/components/edit/pane/AiPanePreview.tsx',
449
439
  },
450
440
  {
451
441
  src: resolve(
@@ -607,6 +597,10 @@ export async function injectTemplateFiles(
607
597
  dest: 'src/utils/etl/loader.ts',
608
598
  },
609
599
  // Compositor utils
600
+ {
601
+ src: resolve('../templates/src/utils/compositor/aiPaneParser.ts'),
602
+ dest: 'src/utils/compositor/aiPaneParser.ts',
603
+ },
610
604
  {
611
605
  src: resolve('../templates/src/utils/compositor/processMarkdown.ts'),
612
606
  dest: 'src/utils/compositor/processMarkdown.ts',