@mastra/playground-ui 5.1.5 → 5.1.6-alpha.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.
package/dist/index.cjs.js CHANGED
@@ -566,13 +566,13 @@ const arbitraryVariableRegex = /^\((?:(\w[\w-]*):)?(.+)\)$/i;
566
566
  const fractionRegex = /^\d+\/\d+$/;
567
567
  const tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
568
568
  const lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
569
- const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/;
569
+ const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/;
570
570
  // Shadow always begins with x and y offset separated by underscore optionally prepended by inset
571
571
  const shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
572
572
  const imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
573
573
  const isFraction = value => fractionRegex.test(value);
574
- const isNumber = value => Boolean(value) && !Number.isNaN(Number(value));
575
- const isInteger = value => Boolean(value) && Number.isInteger(Number(value));
574
+ const isNumber = value => !!value && !Number.isNaN(Number(value));
575
+ const isInteger = value => !!value && Number.isInteger(Number(value));
576
576
  const isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));
577
577
  const isTshirtSize = value => tshirtUnitRegex.test(value);
578
578
  const isAny = () => true;
@@ -591,7 +591,7 @@ const isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isL
591
591
  const isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);
592
592
  const isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);
593
593
  const isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);
594
- const isArbitraryShadow = value => getIsArbitraryValue(value, isNever, isShadow);
594
+ const isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);
595
595
  const isArbitraryVariable = value => arbitraryVariableRegex.test(value);
596
596
  const isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);
597
597
  const isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);
@@ -621,11 +621,9 @@ const getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) =>
621
621
  return false;
622
622
  };
623
623
  // Labels
624
- const isLabelPosition = label => label === 'position';
625
- const imageLabels = /*#__PURE__*/new Set(['image', 'url']);
626
- const isLabelImage = label => imageLabels.has(label);
627
- const sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);
628
- const isLabelSize = label => sizeLabels.has(label);
624
+ const isLabelPosition = label => label === 'position' || label === 'percentage';
625
+ const isLabelImage = label => label === 'image' || label === 'url';
626
+ const isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';
629
627
  const isLabelLength = label => label === 'length';
630
628
  const isLabelNumber = label => label === 'number';
631
629
  const isLabelFamilyName = label => label === 'family-name';
@@ -648,6 +646,7 @@ const getDefaultConfig = () => {
648
646
  const themeRadius = fromTheme('radius');
649
647
  const themeShadow = fromTheme('shadow');
650
648
  const themeInsetShadow = fromTheme('inset-shadow');
649
+ const themeTextShadow = fromTheme('text-shadow');
651
650
  const themeDropShadow = fromTheme('drop-shadow');
652
651
  const themeBlur = fromTheme('blur');
653
652
  const themePerspective = fromTheme('perspective');
@@ -662,7 +661,16 @@ const getDefaultConfig = () => {
662
661
  */
663
662
  /***/
664
663
  const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];
665
- const scalePosition = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];
664
+ const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',
665
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
666
+ 'left-top', 'top-right',
667
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
668
+ 'right-top', 'bottom-right',
669
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
670
+ 'right-bottom', 'bottom-left',
671
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
672
+ 'left-bottom'];
673
+ const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];
666
674
  const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];
667
675
  const scaleOverscroll = () => ['auto', 'contain', 'none'];
668
676
  const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];
@@ -670,25 +678,34 @@ const getDefaultConfig = () => {
670
678
  const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];
671
679
  const scaleGridColRowStartAndEnd = () => ['auto', {
672
680
  span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]
673
- }, isArbitraryVariable, isArbitraryValue];
681
+ }, isInteger, isArbitraryVariable, isArbitraryValue];
674
682
  const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];
675
683
  const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];
676
- const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline'];
677
- const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch'];
684
+ const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];
685
+ const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];
678
686
  const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];
679
687
  const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];
680
688
  const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];
681
- const scaleGradientStopPosition = () => [isPercent, isArbitraryLength];
689
+ const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {
690
+ position: [isArbitraryVariable, isArbitraryValue]
691
+ }];
692
+ const scaleBgRepeat = () => ['no-repeat', {
693
+ repeat: ['', 'x', 'y', 'space', 'round']
694
+ }];
695
+ const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {
696
+ size: [isArbitraryVariable, isArbitraryValue]
697
+ }];
698
+ const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];
682
699
  const scaleRadius = () => [
683
700
  // Deprecated since Tailwind CSS v4.0.0
684
701
  '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];
685
702
  const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];
686
703
  const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];
687
704
  const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];
705
+ const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];
688
706
  const scaleBlur = () => [
689
707
  // Deprecated since Tailwind CSS v4.0.0
690
708
  '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];
691
- const scaleOrigin = () => ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryVariable, isArbitraryValue];
692
709
  const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];
693
710
  const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];
694
711
  const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];
@@ -713,6 +730,7 @@ const getDefaultConfig = () => {
713
730
  shadow: [isTshirtSize],
714
731
  spacing: ['px', isNumber],
715
732
  text: [isTshirtSize],
733
+ 'text-shadow': [isTshirtSize],
716
734
  tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']
717
735
  },
718
736
  classGroups: {
@@ -815,7 +833,7 @@ const getDefaultConfig = () => {
815
833
  * @see https://tailwindcss.com/docs/object-position
816
834
  */
817
835
  'object-position': [{
818
- object: [...scalePosition(), isArbitraryValue, isArbitraryVariable]
836
+ object: scalePositionWithArbitrary()
819
837
  }],
820
838
  /**
821
839
  * Overflow
@@ -1122,14 +1140,18 @@ const getDefaultConfig = () => {
1122
1140
  * @see https://tailwindcss.com/docs/align-items
1123
1141
  */
1124
1142
  'align-items': [{
1125
- items: [...scaleAlignSecondaryAxis(), 'baseline']
1143
+ items: [...scaleAlignSecondaryAxis(), {
1144
+ baseline: ['', 'last']
1145
+ }]
1126
1146
  }],
1127
1147
  /**
1128
1148
  * Align Self
1129
1149
  * @see https://tailwindcss.com/docs/align-self
1130
1150
  */
1131
1151
  'align-self': [{
1132
- self: ['auto', ...scaleAlignSecondaryAxis(), 'baseline']
1152
+ self: ['auto', ...scaleAlignSecondaryAxis(), {
1153
+ baseline: ['', 'last']
1154
+ }]
1133
1155
  }],
1134
1156
  /**
1135
1157
  * Place Content
@@ -1344,21 +1366,21 @@ const getDefaultConfig = () => {
1344
1366
  * @see https://tailwindcss.com/docs/height
1345
1367
  */
1346
1368
  h: [{
1347
- h: ['screen', ...scaleSizing()]
1369
+ h: ['screen', 'lh', ...scaleSizing()]
1348
1370
  }],
1349
1371
  /**
1350
1372
  * Min-Height
1351
1373
  * @see https://tailwindcss.com/docs/min-height
1352
1374
  */
1353
1375
  'min-h': [{
1354
- 'min-h': ['screen', 'none', ...scaleSizing()]
1376
+ 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]
1355
1377
  }],
1356
1378
  /**
1357
1379
  * Max-Height
1358
1380
  * @see https://tailwindcss.com/docs/max-height
1359
1381
  */
1360
1382
  'max-h': [{
1361
- 'max-h': ['screen', ...scaleSizing()]
1383
+ 'max-h': ['screen', 'lh', ...scaleSizing()]
1362
1384
  }],
1363
1385
  // ------------------
1364
1386
  // --- Typography ---
@@ -1574,6 +1596,13 @@ const getDefaultConfig = () => {
1574
1596
  break: [{
1575
1597
  break: ['normal', 'words', 'all', 'keep']
1576
1598
  }],
1599
+ /**
1600
+ * Overflow Wrap
1601
+ * @see https://tailwindcss.com/docs/overflow-wrap
1602
+ */
1603
+ wrap: [{
1604
+ wrap: ['break-word', 'anywhere', 'normal']
1605
+ }],
1577
1606
  /**
1578
1607
  * Hyphens
1579
1608
  * @see https://tailwindcss.com/docs/hyphens
@@ -1617,23 +1646,21 @@ const getDefaultConfig = () => {
1617
1646
  * @see https://tailwindcss.com/docs/background-position
1618
1647
  */
1619
1648
  'bg-position': [{
1620
- bg: [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition]
1649
+ bg: scaleBgPosition()
1621
1650
  }],
1622
1651
  /**
1623
1652
  * Background Repeat
1624
1653
  * @see https://tailwindcss.com/docs/background-repeat
1625
1654
  */
1626
1655
  'bg-repeat': [{
1627
- bg: ['no-repeat', {
1628
- repeat: ['', 'x', 'y', 'space', 'round']
1629
- }]
1656
+ bg: scaleBgRepeat()
1630
1657
  }],
1631
1658
  /**
1632
1659
  * Background Size
1633
1660
  * @see https://tailwindcss.com/docs/background-size
1634
1661
  */
1635
1662
  'bg-size': [{
1636
- bg: ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize]
1663
+ bg: scaleBgSize()
1637
1664
  }],
1638
1665
  /**
1639
1666
  * Background Image
@@ -2002,7 +2029,7 @@ const getDefaultConfig = () => {
2002
2029
  * @see https://tailwindcss.com/docs/outline-color
2003
2030
  */
2004
2031
  'outline-color': [{
2005
- outline: [themeColor]
2032
+ outline: scaleColor()
2006
2033
  }],
2007
2034
  // ---------------
2008
2035
  // --- Effects ---
@@ -2028,7 +2055,7 @@ const getDefaultConfig = () => {
2028
2055
  * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow
2029
2056
  */
2030
2057
  'inset-shadow': [{
2031
- 'inset-shadow': ['none', isArbitraryVariable, isArbitraryValue, themeInsetShadow]
2058
+ 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]
2032
2059
  }],
2033
2060
  /**
2034
2061
  * Inset Box Shadow Color
@@ -2090,6 +2117,20 @@ const getDefaultConfig = () => {
2090
2117
  'inset-ring-color': [{
2091
2118
  'inset-ring': scaleColor()
2092
2119
  }],
2120
+ /**
2121
+ * Text Shadow
2122
+ * @see https://tailwindcss.com/docs/text-shadow
2123
+ */
2124
+ 'text-shadow': [{
2125
+ 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]
2126
+ }],
2127
+ /**
2128
+ * Text Shadow Color
2129
+ * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color
2130
+ */
2131
+ 'text-shadow-color': [{
2132
+ 'text-shadow': scaleColor()
2133
+ }],
2093
2134
  /**
2094
2135
  * Opacity
2095
2136
  * @see https://tailwindcss.com/docs/opacity
@@ -2111,6 +2152,202 @@ const getDefaultConfig = () => {
2111
2152
  'bg-blend': [{
2112
2153
  'bg-blend': scaleBlendMode()
2113
2154
  }],
2155
+ /**
2156
+ * Mask Clip
2157
+ * @see https://tailwindcss.com/docs/mask-clip
2158
+ */
2159
+ 'mask-clip': [{
2160
+ 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']
2161
+ }, 'mask-no-clip'],
2162
+ /**
2163
+ * Mask Composite
2164
+ * @see https://tailwindcss.com/docs/mask-composite
2165
+ */
2166
+ 'mask-composite': [{
2167
+ mask: ['add', 'subtract', 'intersect', 'exclude']
2168
+ }],
2169
+ /**
2170
+ * Mask Image
2171
+ * @see https://tailwindcss.com/docs/mask-image
2172
+ */
2173
+ 'mask-image-linear-pos': [{
2174
+ 'mask-linear': [isNumber]
2175
+ }],
2176
+ 'mask-image-linear-from-pos': [{
2177
+ 'mask-linear-from': scaleMaskImagePosition()
2178
+ }],
2179
+ 'mask-image-linear-to-pos': [{
2180
+ 'mask-linear-to': scaleMaskImagePosition()
2181
+ }],
2182
+ 'mask-image-linear-from-color': [{
2183
+ 'mask-linear-from': scaleColor()
2184
+ }],
2185
+ 'mask-image-linear-to-color': [{
2186
+ 'mask-linear-to': scaleColor()
2187
+ }],
2188
+ 'mask-image-t-from-pos': [{
2189
+ 'mask-t-from': scaleMaskImagePosition()
2190
+ }],
2191
+ 'mask-image-t-to-pos': [{
2192
+ 'mask-t-to': scaleMaskImagePosition()
2193
+ }],
2194
+ 'mask-image-t-from-color': [{
2195
+ 'mask-t-from': scaleColor()
2196
+ }],
2197
+ 'mask-image-t-to-color': [{
2198
+ 'mask-t-to': scaleColor()
2199
+ }],
2200
+ 'mask-image-r-from-pos': [{
2201
+ 'mask-r-from': scaleMaskImagePosition()
2202
+ }],
2203
+ 'mask-image-r-to-pos': [{
2204
+ 'mask-r-to': scaleMaskImagePosition()
2205
+ }],
2206
+ 'mask-image-r-from-color': [{
2207
+ 'mask-r-from': scaleColor()
2208
+ }],
2209
+ 'mask-image-r-to-color': [{
2210
+ 'mask-r-to': scaleColor()
2211
+ }],
2212
+ 'mask-image-b-from-pos': [{
2213
+ 'mask-b-from': scaleMaskImagePosition()
2214
+ }],
2215
+ 'mask-image-b-to-pos': [{
2216
+ 'mask-b-to': scaleMaskImagePosition()
2217
+ }],
2218
+ 'mask-image-b-from-color': [{
2219
+ 'mask-b-from': scaleColor()
2220
+ }],
2221
+ 'mask-image-b-to-color': [{
2222
+ 'mask-b-to': scaleColor()
2223
+ }],
2224
+ 'mask-image-l-from-pos': [{
2225
+ 'mask-l-from': scaleMaskImagePosition()
2226
+ }],
2227
+ 'mask-image-l-to-pos': [{
2228
+ 'mask-l-to': scaleMaskImagePosition()
2229
+ }],
2230
+ 'mask-image-l-from-color': [{
2231
+ 'mask-l-from': scaleColor()
2232
+ }],
2233
+ 'mask-image-l-to-color': [{
2234
+ 'mask-l-to': scaleColor()
2235
+ }],
2236
+ 'mask-image-x-from-pos': [{
2237
+ 'mask-x-from': scaleMaskImagePosition()
2238
+ }],
2239
+ 'mask-image-x-to-pos': [{
2240
+ 'mask-x-to': scaleMaskImagePosition()
2241
+ }],
2242
+ 'mask-image-x-from-color': [{
2243
+ 'mask-x-from': scaleColor()
2244
+ }],
2245
+ 'mask-image-x-to-color': [{
2246
+ 'mask-x-to': scaleColor()
2247
+ }],
2248
+ 'mask-image-y-from-pos': [{
2249
+ 'mask-y-from': scaleMaskImagePosition()
2250
+ }],
2251
+ 'mask-image-y-to-pos': [{
2252
+ 'mask-y-to': scaleMaskImagePosition()
2253
+ }],
2254
+ 'mask-image-y-from-color': [{
2255
+ 'mask-y-from': scaleColor()
2256
+ }],
2257
+ 'mask-image-y-to-color': [{
2258
+ 'mask-y-to': scaleColor()
2259
+ }],
2260
+ 'mask-image-radial': [{
2261
+ 'mask-radial': [isArbitraryVariable, isArbitraryValue]
2262
+ }],
2263
+ 'mask-image-radial-from-pos': [{
2264
+ 'mask-radial-from': scaleMaskImagePosition()
2265
+ }],
2266
+ 'mask-image-radial-to-pos': [{
2267
+ 'mask-radial-to': scaleMaskImagePosition()
2268
+ }],
2269
+ 'mask-image-radial-from-color': [{
2270
+ 'mask-radial-from': scaleColor()
2271
+ }],
2272
+ 'mask-image-radial-to-color': [{
2273
+ 'mask-radial-to': scaleColor()
2274
+ }],
2275
+ 'mask-image-radial-shape': [{
2276
+ 'mask-radial': ['circle', 'ellipse']
2277
+ }],
2278
+ 'mask-image-radial-size': [{
2279
+ 'mask-radial': [{
2280
+ closest: ['side', 'corner'],
2281
+ farthest: ['side', 'corner']
2282
+ }]
2283
+ }],
2284
+ 'mask-image-radial-pos': [{
2285
+ 'mask-radial-at': scalePosition()
2286
+ }],
2287
+ 'mask-image-conic-pos': [{
2288
+ 'mask-conic': [isNumber]
2289
+ }],
2290
+ 'mask-image-conic-from-pos': [{
2291
+ 'mask-conic-from': scaleMaskImagePosition()
2292
+ }],
2293
+ 'mask-image-conic-to-pos': [{
2294
+ 'mask-conic-to': scaleMaskImagePosition()
2295
+ }],
2296
+ 'mask-image-conic-from-color': [{
2297
+ 'mask-conic-from': scaleColor()
2298
+ }],
2299
+ 'mask-image-conic-to-color': [{
2300
+ 'mask-conic-to': scaleColor()
2301
+ }],
2302
+ /**
2303
+ * Mask Mode
2304
+ * @see https://tailwindcss.com/docs/mask-mode
2305
+ */
2306
+ 'mask-mode': [{
2307
+ mask: ['alpha', 'luminance', 'match']
2308
+ }],
2309
+ /**
2310
+ * Mask Origin
2311
+ * @see https://tailwindcss.com/docs/mask-origin
2312
+ */
2313
+ 'mask-origin': [{
2314
+ 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']
2315
+ }],
2316
+ /**
2317
+ * Mask Position
2318
+ * @see https://tailwindcss.com/docs/mask-position
2319
+ */
2320
+ 'mask-position': [{
2321
+ mask: scaleBgPosition()
2322
+ }],
2323
+ /**
2324
+ * Mask Repeat
2325
+ * @see https://tailwindcss.com/docs/mask-repeat
2326
+ */
2327
+ 'mask-repeat': [{
2328
+ mask: scaleBgRepeat()
2329
+ }],
2330
+ /**
2331
+ * Mask Size
2332
+ * @see https://tailwindcss.com/docs/mask-size
2333
+ */
2334
+ 'mask-size': [{
2335
+ mask: scaleBgSize()
2336
+ }],
2337
+ /**
2338
+ * Mask Type
2339
+ * @see https://tailwindcss.com/docs/mask-type
2340
+ */
2341
+ 'mask-type': [{
2342
+ 'mask-type': ['alpha', 'luminance']
2343
+ }],
2344
+ /**
2345
+ * Mask Image
2346
+ * @see https://tailwindcss.com/docs/mask-image
2347
+ */
2348
+ 'mask-image': [{
2349
+ mask: ['none', isArbitraryVariable, isArbitraryValue]
2350
+ }],
2114
2351
  // ---------------
2115
2352
  // --- Filters ---
2116
2353
  // ---------------
@@ -2151,7 +2388,14 @@ const getDefaultConfig = () => {
2151
2388
  'drop-shadow': [{
2152
2389
  'drop-shadow': [
2153
2390
  // Deprecated since Tailwind CSS v4.0.0
2154
- '', 'none', themeDropShadow, isArbitraryVariable, isArbitraryValue]
2391
+ '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]
2392
+ }],
2393
+ /**
2394
+ * Drop Shadow Color
2395
+ * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color
2396
+ */
2397
+ 'drop-shadow-color': [{
2398
+ 'drop-shadow': scaleColor()
2155
2399
  }],
2156
2400
  /**
2157
2401
  * Grayscale
@@ -2372,7 +2616,7 @@ const getDefaultConfig = () => {
2372
2616
  * @see https://tailwindcss.com/docs/perspective-origin
2373
2617
  */
2374
2618
  'perspective-origin': [{
2375
- 'perspective-origin': scaleOrigin()
2619
+ 'perspective-origin': scalePositionWithArbitrary()
2376
2620
  }],
2377
2621
  /**
2378
2622
  * Rotate
@@ -2468,7 +2712,7 @@ const getDefaultConfig = () => {
2468
2712
  * @see https://tailwindcss.com/docs/transform-origin
2469
2713
  */
2470
2714
  'transform-origin': [{
2471
- origin: scaleOrigin()
2715
+ origin: scalePositionWithArbitrary()
2472
2716
  }],
2473
2717
  /**
2474
2718
  * Transform Style
@@ -2836,10 +3080,10 @@ const getDefaultConfig = () => {
2836
3080
  'rounded-b': ['rounded-br', 'rounded-bl'],
2837
3081
  'rounded-l': ['rounded-tl', 'rounded-bl'],
2838
3082
  'border-spacing': ['border-spacing-x', 'border-spacing-y'],
2839
- 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],
3083
+ 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],
2840
3084
  'border-w-x': ['border-w-r', 'border-w-l'],
2841
3085
  'border-w-y': ['border-w-t', 'border-w-b'],
2842
- 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],
3086
+ 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],
2843
3087
  'border-color-x': ['border-color-r', 'border-color-l'],
2844
3088
  'border-color-y': ['border-color-t', 'border-color-b'],
2845
3089
  translate: ['translate-x', 'translate-y', 'translate-none'],
@@ -2858,7 +3102,7 @@ const getDefaultConfig = () => {
2858
3102
  conflictingClassGroupModifiers: {
2859
3103
  'font-size': ['leading']
2860
3104
  },
2861
- orderSensitiveModifiers: ['before', 'after', 'placeholder', 'file', 'marker', 'selection', 'first-line', 'first-letter', 'backdrop', '*', '**']
3105
+ orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']
2862
3106
  };
2863
3107
  };
2864
3108
  const twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);
@@ -5185,10 +5429,6 @@ function ScoreIndicator({ score }) {
5185
5429
  return /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "secondary", children: score.toFixed(2) });
5186
5430
  }
5187
5431
 
5188
- function Skeleton({ className, ...props }) {
5189
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("animate-pulse rounded-md bg-muted/50", className), ...props });
5190
- }
5191
-
5192
5432
  const Table$1 = React__namespace.forwardRef(
5193
5433
  ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("table", { ref, className: cn("w-full caption-bottom text-sm border-spacing-0", className), ...props })
5194
5434
  );
@@ -5260,32 +5500,6 @@ const TabsContent = React__namespace.forwardRef(({ className, ...props }, ref) =
5260
5500
  ));
5261
5501
  TabsContent.displayName = TabsPrimitive__namespace.Content.displayName;
5262
5502
 
5263
- const useEvalsByAgentId = (agentId, type) => {
5264
- const [evals, setEvals] = React.useState([]);
5265
- const [isLoading, setIsLoading] = React.useState(true);
5266
- const client = useMastraClient();
5267
- const fetchEvals = async (_agentId) => {
5268
- setIsLoading(true);
5269
- const activeAgentId = _agentId ?? agentId;
5270
- try {
5271
- const res = type === "live" ? await client.getAgent(activeAgentId).liveEvals() : await client.getAgent(activeAgentId).evals();
5272
- setEvals(res.evals);
5273
- } catch (error) {
5274
- setEvals([]);
5275
- console.error("Error fetching evals", error);
5276
- sonner.toast.error("Error fetching evals");
5277
- } finally {
5278
- setIsLoading(false);
5279
- }
5280
- };
5281
- React.useEffect(() => {
5282
- fetchEvals(agentId);
5283
- }, [agentId]);
5284
- return { evals, isLoading, refetchEvals: fetchEvals };
5285
- };
5286
-
5287
- const AgentEvalsContext = React.createContext({ handleRefresh: () => {
5288
- }, isLoading: true });
5289
5503
  const scrollableContentClass = cn(
5290
5504
  "relative overflow-y-auto overflow-x-hidden invisible hover:visible focus:visible",
5291
5505
  "[&::-webkit-scrollbar]:w-1",
@@ -5301,26 +5515,13 @@ const tabIndicatorClass = cn(
5301
5515
  "focus-visible:outline-none"
5302
5516
  );
5303
5517
  const tabContentClass = cn("data-[state=inactive]:mt-0 min-h-0 h-full grid grid-rows-[1fr]");
5304
- function AgentEvals({ agentId }) {
5518
+ function AgentEvals({ liveEvals, ciEvals, onRefetchLiveEvals, onRefetchCiEvals }) {
5305
5519
  const [activeTab, setActiveTab] = React.useState("live");
5306
- const {
5307
- evals: liveEvals,
5308
- isLoading: isLiveLoading,
5309
- refetchEvals: refetchLiveEvals
5310
- } = useEvalsByAgentId(agentId, "live");
5311
- const { evals: ciEvals, isLoading: isCiLoading, refetchEvals: refetchCiEvals } = useEvalsByAgentId(agentId, "ci");
5312
- const contextValue = {
5313
- handleRefresh,
5314
- isLoading: activeTab === "live" ? isLiveLoading : isCiLoading
5315
- };
5316
5520
  function handleRefresh() {
5317
- if (activeTab === "live") {
5318
- refetchLiveEvals();
5319
- } else {
5320
- refetchCiEvals();
5321
- }
5521
+ if (activeTab === "live") return onRefetchLiveEvals();
5522
+ return onRefetchCiEvals();
5322
5523
  }
5323
- return /* @__PURE__ */ jsxRuntime.jsx(AgentEvalsContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsxs(
5524
+ return /* @__PURE__ */ jsxRuntime.jsxs(
5324
5525
  Tabs,
5325
5526
  {
5326
5527
  value: activeTab,
@@ -5331,14 +5532,13 @@ function AgentEvals({ agentId }) {
5331
5532
  /* @__PURE__ */ jsxRuntime.jsx(TabsTrigger, { value: "live", className: tabIndicatorClass, children: "Live" }),
5332
5533
  /* @__PURE__ */ jsxRuntime.jsx(TabsTrigger, { value: "ci", className: tabIndicatorClass, children: "CI" })
5333
5534
  ] }) }),
5334
- /* @__PURE__ */ jsxRuntime.jsx(TabsContent, { value: "live", className: tabContentClass, children: /* @__PURE__ */ jsxRuntime.jsx(EvalTable, { evals: liveEvals, isCIMode: false }) }),
5335
- /* @__PURE__ */ jsxRuntime.jsx(TabsContent, { value: "ci", className: tabContentClass, children: /* @__PURE__ */ jsxRuntime.jsx(EvalTable, { evals: ciEvals, isCIMode: true }) })
5535
+ /* @__PURE__ */ jsxRuntime.jsx(TabsContent, { value: "live", className: tabContentClass, children: /* @__PURE__ */ jsxRuntime.jsx(EvalTable, { evals: liveEvals, isCIMode: false, onRefresh: handleRefresh }) }),
5536
+ /* @__PURE__ */ jsxRuntime.jsx(TabsContent, { value: "ci", className: tabContentClass, children: /* @__PURE__ */ jsxRuntime.jsx(EvalTable, { evals: ciEvals, isCIMode: true, onRefresh: handleRefresh }) })
5336
5537
  ]
5337
5538
  }
5338
- ) });
5539
+ );
5339
5540
  }
5340
- function EvalTable({ evals, isCIMode = false }) {
5341
- const { handleRefresh, isLoading: isTableLoading } = React.useContext(AgentEvalsContext);
5541
+ function EvalTable({ evals, isCIMode = false, onRefresh }) {
5342
5542
  const [expandedMetrics, setExpandedMetrics] = React.useState(/* @__PURE__ */ new Set());
5343
5543
  const [searchTerm, setSearchTerm] = React.useState("");
5344
5544
  const [sortConfig, setSortConfig] = React.useState({ field: "metricName", direction: "asc" });
@@ -5361,7 +5561,7 @@ function EvalTable({ evals, isCIMode = false }) {
5361
5561
  evals.length,
5362
5562
  " Total Evaluations"
5363
5563
  ] }),
5364
- /* @__PURE__ */ jsxRuntime.jsx(Button$1, { variant: "ghost", size: "icon", onClick: handleRefresh, disabled: isTableLoading, className: "h-9 w-9", children: isTableLoading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCcwIcon, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCcwIcon, { className: "h-4 w-4" }) })
5564
+ /* @__PURE__ */ jsxRuntime.jsx(Button$1, { variant: "ghost", size: "icon", onClick: onRefresh, className: "h-9 w-9", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCcwIcon, { className: "h-4 w-4" }) })
5365
5565
  ] }),
5366
5566
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-auto", children: /* @__PURE__ */ jsxRuntime.jsxs(Table$1, { className: "w-full", children: [
5367
5567
  /* @__PURE__ */ jsxRuntime.jsx(TableHeader, { className: "bg-mastra-bg-2 h-[var(--table-header-height)] sticky top-0 z-10", children: /* @__PURE__ */ jsxRuntime.jsxs(TableRow, { className: "border-gray-6 border-b-[0.1px] text-[0.8125rem]", children: [
@@ -5384,13 +5584,7 @@ function EvalTable({ evals, isCIMode = false }) {
5384
5584
  ] }) }),
5385
5585
  /* @__PURE__ */ jsxRuntime.jsx(TableHead, { className: "w-48 text-mastra-el-3", children: "Evaluations" })
5386
5586
  ] }) }),
5387
- /* @__PURE__ */ jsxRuntime.jsx(TableBody, { className: "border-b border-gray-6 relative", children: /* @__PURE__ */ jsxRuntime.jsx(react$1.AnimatePresence, { mode: "wait", presenceAffectsLayout: false, children: isTableLoading ? Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs(TableRow, { className: "border-b-gray-6 border-b-[0.1px] text-[0.8125rem]", children: [
5388
- /* @__PURE__ */ jsxRuntime.jsx(TableCell, { className: "w-12 h-12", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-8 w-8 rounded-full" }) }),
5389
- /* @__PURE__ */ jsxRuntime.jsx(TableCell, { className: "min-w-[200px] max-w-[30%]", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-4 w-3/4" }) }),
5390
- /* @__PURE__ */ jsxRuntime.jsx(TableCell, { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-4 w-full" }) }),
5391
- /* @__PURE__ */ jsxRuntime.jsx(TableCell, { className: "w-48", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-4 w-20" }) }),
5392
- /* @__PURE__ */ jsxRuntime.jsx(TableCell, { className: "w-48", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-4 w-20" }) })
5393
- ] }, i)) : groupEvals(evals).length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs(TableRow, { children: [
5587
+ /* @__PURE__ */ jsxRuntime.jsx(TableBody, { className: "border-b border-gray-6 relative", children: /* @__PURE__ */ jsxRuntime.jsx(react$1.AnimatePresence, { mode: "wait", presenceAffectsLayout: false, children: groupEvals(evals).length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs(TableRow, { children: [
5394
5588
  /* @__PURE__ */ jsxRuntime.jsx(TableCell, { className: "h-12 w-16" }),
5395
5589
  /* @__PURE__ */ jsxRuntime.jsx(TableCell, { colSpan: 4, className: "h-32 px-4 text-center text-mastra-el-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-2", children: [
5396
5590
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "size-5" }),
@@ -6743,6 +6937,10 @@ function WorkflowTracesInner({ traces, error, runId, stepName }) {
6743
6937
  ] });
6744
6938
  }
6745
6939
 
6940
+ function Skeleton({ className, ...props }) {
6941
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("animate-pulse rounded-md bg-muted/50", className), ...props });
6942
+ }
6943
+
6746
6944
  const sanitizeWorkflowWatchResult = (record) => {
6747
6945
  const formattedResults = Object.entries(record.payload.workflowState.steps || {}).reduce(
6748
6946
  (acc, [key, value]) => {
@@ -6823,33 +7021,6 @@ const useLegacyWorkflow = (workflowId) => {
6823
7021
  }, [workflowId]);
6824
7022
  return { legacyWorkflow, isLoading };
6825
7023
  };
6826
- const useWorkflow = (workflowId) => {
6827
- const [workflow, setWorkflow] = React.useState(null);
6828
- const [isLoading, setIsLoading] = React.useState(true);
6829
- const client = useMastraClient();
6830
- React.useEffect(() => {
6831
- const fetchWorkflow = async () => {
6832
- setIsLoading(true);
6833
- try {
6834
- if (!workflowId) {
6835
- setWorkflow(null);
6836
- setIsLoading(false);
6837
- return;
6838
- }
6839
- const res = await client.getWorkflow(workflowId).details();
6840
- setWorkflow(res);
6841
- } catch (error) {
6842
- setWorkflow(null);
6843
- console.error("Error fetching workflow", error);
6844
- sonner.toast.error("Error fetching workflow");
6845
- } finally {
6846
- setIsLoading(false);
6847
- }
6848
- };
6849
- fetchWorkflow();
6850
- }, [workflowId]);
6851
- return { workflow, isLoading };
6852
- };
6853
7024
  const useExecuteWorkflow = () => {
6854
7025
  const client = useMastraClient();
6855
7026
  const createLegacyWorkflowRun = async ({ workflowId, prevRunId }) => {
@@ -9638,8 +9809,7 @@ function WorkflowGraphInner({ workflow, onShowTrace }) {
9638
9809
  ) });
9639
9810
  }
9640
9811
 
9641
- function WorkflowGraph({ workflowId, onShowTrace }) {
9642
- const { workflow, isLoading } = useWorkflow(workflowId);
9812
+ function WorkflowGraph({ workflowId, onShowTrace, workflow, isLoading }) {
9643
9813
  const { snapshot } = React.useContext(WorkflowRunContext);
9644
9814
  if (isLoading) {
9645
9815
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "h-full" }) });
@@ -9663,10 +9833,14 @@ function WorkflowGraph({ workflowId, onShowTrace }) {
9663
9833
  ) }) }, snapshot?.runId ?? workflowId);
9664
9834
  }
9665
9835
 
9666
- function WorkflowTrigger({ workflowId, setRunId }) {
9836
+ function WorkflowTrigger({
9837
+ workflowId,
9838
+ setRunId,
9839
+ workflow,
9840
+ isLoading
9841
+ }) {
9667
9842
  const { runtimeContext } = usePlaygroundStore();
9668
9843
  const { result, setResult, payload, setPayload } = React.useContext(WorkflowRunContext);
9669
- const { isLoading, workflow } = useWorkflow(workflowId);
9670
9844
  const { createWorkflowRun, startWorkflowRun } = useExecuteWorkflow();
9671
9845
  const { watchWorkflow, watchResult, isWatchingWorkflow } = useWatchWorkflow();
9672
9846
  const { resumeWorkflow, isResumingWorkflow } = useResumeWorkflow();
@@ -9709,7 +9883,8 @@ function WorkflowTrigger({ workflowId, setRunId }) {
9709
9883
  const suspended = Object.entries(watchResultToUse.payload.workflowState.steps).filter(([_, { status }]) => status === "suspended").map(([stepId, { payload: payload2 }]) => ({
9710
9884
  stepId,
9711
9885
  runId: result.runId,
9712
- suspendPayload: payload2
9886
+ suspendPayload: payload2,
9887
+ isLoading: false
9713
9888
  }));
9714
9889
  setSuspendedSteps(suspended);
9715
9890
  }, [watchResultToUse, result]);
@@ -9780,8 +9955,7 @@ function WorkflowTrigger({ workflowId, setRunId }) {
9780
9955
  stepId: step.stepId,
9781
9956
  runId: step.runId,
9782
9957
  suspendPayload: step.suspendPayload,
9783
- resumeData: data
9784
- });
9958
+ resumeData: data});
9785
9959
  }
9786
9960
  }
9787
9961
  )