@sanity/ui-codemod 1.0.0-alpha.5 → 1.0.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/_chunks-es/addAttribute.js +1 -1
  2. package/dist/_chunks-es/box.mods.js +1 -100
  3. package/dist/_chunks-es/box.mods.js.map +1 -1
  4. package/dist/_chunks-es/flex.mods.js +1 -150
  5. package/dist/_chunks-es/flex.mods.js.map +1 -1
  6. package/dist/_chunks-es/layout-mods.js +4 -0
  7. package/dist/_chunks-es/layout-mods.js.map +1 -1
  8. package/dist/_chunks-es/replaceElement.js +102 -0
  9. package/dist/_chunks-es/replaceElement.js.map +1 -0
  10. package/dist/_chunks-es/{transformComponent.js → transformStyledComponents.js} +150 -2
  11. package/dist/_chunks-es/transformStyledComponents.js.map +1 -0
  12. package/dist/commands/latest/inline.d.ts +47 -0
  13. package/dist/commands/latest/inline.js +17 -0
  14. package/dist/commands/latest/inline.js.map +1 -0
  15. package/dist/commands/latest/label.d.ts +47 -0
  16. package/dist/commands/latest/label.js +17 -0
  17. package/dist/commands/latest/label.js.map +1 -0
  18. package/dist/commands/latest/stack.d.ts +47 -0
  19. package/dist/commands/latest/stack.js +17 -0
  20. package/dist/commands/latest/stack.js.map +1 -0
  21. package/dist/transforms/latest/box/box.js +4 -3
  22. package/dist/transforms/latest/box/box.js.map +1 -1
  23. package/dist/transforms/latest/card/card.js +26 -10
  24. package/dist/transforms/latest/card/card.js.map +1 -1
  25. package/dist/transforms/latest/code/code.js +18 -7
  26. package/dist/transforms/latest/code/code.js.map +1 -1
  27. package/dist/transforms/latest/container/container.js +15 -7
  28. package/dist/transforms/latest/container/container.js.map +1 -1
  29. package/dist/transforms/latest/flex/flex.js +2 -2
  30. package/dist/transforms/latest/grid/grid.js +15 -7
  31. package/dist/transforms/latest/grid/grid.js.map +1 -1
  32. package/dist/transforms/latest/heading/heading.js +18 -7
  33. package/dist/transforms/latest/heading/heading.js.map +1 -1
  34. package/dist/transforms/latest/inline/inline.d.ts +18 -0
  35. package/dist/transforms/latest/inline/inline.js +80 -0
  36. package/dist/transforms/latest/inline/inline.js.map +1 -0
  37. package/dist/transforms/latest/label/label.d.ts +18 -0
  38. package/dist/transforms/latest/label/label.js +111 -0
  39. package/dist/transforms/latest/label/label.js.map +1 -0
  40. package/dist/transforms/latest/stack/stack.d.ts +18 -0
  41. package/dist/transforms/latest/stack/stack.js +67 -0
  42. package/dist/transforms/latest/stack/stack.js.map +1 -0
  43. package/dist/transforms/latest/text/text.js +18 -7
  44. package/dist/transforms/latest/text/text.js.map +1 -1
  45. package/package.json +7 -1
  46. package/src/constants/latest/layout-mods.ts +4 -0
  47. package/src/transforms/latest/box/box.test.ts +3 -8
  48. package/src/transforms/latest/card/card.test.ts +100 -1
  49. package/src/transforms/latest/card/card.ts +42 -19
  50. package/src/transforms/latest/code/code.test.ts +84 -1
  51. package/src/transforms/latest/code/code.ts +47 -16
  52. package/src/transforms/latest/container/container.test.ts +78 -1
  53. package/src/transforms/latest/container/container.ts +29 -9
  54. package/src/transforms/latest/grid/grid.test.ts +78 -1
  55. package/src/transforms/latest/grid/grid.ts +29 -9
  56. package/src/transforms/latest/heading/heading.test.ts +84 -1
  57. package/src/transforms/latest/heading/heading.ts +47 -16
  58. package/src/transforms/latest/inline/inline.test.ts +78 -1
  59. package/src/transforms/latest/inline/inline.ts +29 -9
  60. package/src/transforms/latest/label/label.test.ts +84 -1
  61. package/src/transforms/latest/label/label.ts +36 -1
  62. package/src/transforms/latest/stack/stack.test.ts +100 -1
  63. package/src/transforms/latest/stack/stack.ts +29 -7
  64. package/src/transforms/latest/text/text.test.ts +84 -1
  65. package/src/transforms/latest/text/text.ts +58 -19
  66. package/dist/_chunks-es/transformComponent.js.map +0 -1
@@ -0,0 +1,111 @@
1
+ import "jscodeshift";
2
+ import { addAttribute } from "../../../_chunks-es/addAttribute.js";
3
+ import { transformComponent, getComponentLocalNames, getStyledComponentAliases, shouldTransformComponent, transformImport, transformStyledComponents, transformAttributes } from "../../../_chunks-es/transformStyledComponents.js";
4
+ import { replaceElement } from "../../../_chunks-es/replaceElement.js";
5
+ const LABEL_MODS = {
6
+ accent: {
7
+ type: "rename-mapped",
8
+ name: "tone",
9
+ mapping: {
10
+ true: "suggest"
11
+ }
12
+ },
13
+ flex: {
14
+ type: "style-mapped",
15
+ style: "flex",
16
+ mapping: {
17
+ none: "0 0 auto",
18
+ auto: "1 1 auto",
19
+ initial: "0 1 auto",
20
+ 1: "1",
21
+ 2: "2",
22
+ 3: "3",
23
+ 4: "4",
24
+ 5: "5",
25
+ 6: "6",
26
+ 7: "7",
27
+ 8: "8",
28
+ 9: "9",
29
+ 10: "10",
30
+ 11: "11",
31
+ 12: "12"
32
+ }
33
+ },
34
+ maxWidth: {
35
+ type: "style-mapped",
36
+ style: "maxWidth",
37
+ mapping: {
38
+ auto: "none",
39
+ fill: "100%",
40
+ 0: "20rem",
41
+ 1: "40rem",
42
+ 2: "60rem",
43
+ 3: "80rem",
44
+ 4: "100rem",
45
+ 5: "120rem"
46
+ }
47
+ },
48
+ textOverflow: {
49
+ type: "rename-mapped",
50
+ name: "truncate",
51
+ mapping: {
52
+ ellipsis: 1,
53
+ clip: 1
54
+ }
55
+ },
56
+ width: {
57
+ type: "style-mapped",
58
+ style: "width",
59
+ mapping: {
60
+ auto: "auto",
61
+ fill: "100%",
62
+ stretch: "stretch",
63
+ min: "min-content",
64
+ max: "max-content",
65
+ 0: "20rem",
66
+ 1: "40rem",
67
+ 2: "60rem",
68
+ 3: "80rem",
69
+ 4: "100rem",
70
+ 5: "120rem"
71
+ }
72
+ }
73
+ }, TODO_WARNING = "Please double check the Label migration below";
74
+ function transform(fileInfo, api, options) {
75
+ const { fromPackage, toPackage } = options || {};
76
+ return transformComponent(fileInfo, api, ({ j, root, markChanged }) => {
77
+ const localNames = getComponentLocalNames(j, root, "Label", options), styledAliases = getStyledComponentAliases(
78
+ j,
79
+ root,
80
+ "Label",
81
+ fileInfo.path,
82
+ localNames,
83
+ options
84
+ );
85
+ shouldTransformComponent(j, root, "Label", localNames, options, styledAliases) && (transformImport(j, root, "Label", fromPackage, toPackage) && markChanged(), replaceElement(
86
+ j,
87
+ root,
88
+ () => !0,
89
+ {
90
+ element: "Label",
91
+ localNames
92
+ },
93
+ {
94
+ element: "Eyebrow",
95
+ callback: (path) => {
96
+ let changed = !1;
97
+ return transformAttributes(j, path, LABEL_MODS, TODO_WARNING) && (changed = !0), addAttribute(j, path.node, "as", "div") && (changed = !0), addAttribute(j, path.node, "trim", !0) && (changed = !0), changed;
98
+ }
99
+ }
100
+ ) && markChanged(), transformStyledComponents(j, root, styledAliases, () => !0, {
101
+ callback: (path) => {
102
+ let changed = !1;
103
+ return transformAttributes(j, path, LABEL_MODS, TODO_WARNING) && (changed = !0), addAttribute(j, path.node, "as", "div") && (changed = !0), addAttribute(j, path.node, "trim", !0) && (changed = !0), changed;
104
+ }
105
+ }) && markChanged());
106
+ });
107
+ }
108
+ export {
109
+ transform as default
110
+ };
111
+ //# sourceMappingURL=label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.js","sources":["../../../../src/transforms/latest/label/label.mods.ts","../../../../src/transforms/latest/label/label.ts"],"sourcesContent":["import type {AttributeMods} from '../../../types/AttributeMods'\n\n/** @internal */\nexport const LABEL_MODS: AttributeMods = {\n accent: {\n type: 'rename-mapped',\n name: 'tone',\n mapping: {\n true: 'suggest',\n },\n },\n flex: {\n type: 'style-mapped',\n style: 'flex',\n mapping: {\n none: '0 0 auto',\n auto: '1 1 auto',\n initial: '0 1 auto',\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 10: '10',\n 11: '11',\n 12: '12',\n },\n },\n maxWidth: {\n type: 'style-mapped',\n style: 'maxWidth',\n mapping: {\n auto: 'none',\n fill: '100%',\n 0: '20rem',\n 1: '40rem',\n 2: '60rem',\n 3: '80rem',\n 4: '100rem',\n 5: '120rem',\n },\n },\n textOverflow: {\n type: 'rename-mapped',\n name: 'truncate',\n mapping: {\n ellipsis: 1,\n clip: 1,\n },\n },\n width: {\n type: 'style-mapped',\n style: 'width',\n mapping: {\n auto: 'auto',\n fill: '100%',\n stretch: 'stretch',\n min: 'min-content',\n max: 'max-content',\n 0: '20rem',\n 1: '40rem',\n 2: '60rem',\n 3: '80rem',\n 4: '100rem',\n 5: '120rem',\n },\n },\n}\n","import {type API, type FileInfo} from 'jscodeshift'\n\nimport type {BaseOptions} from '../../../types/BaseOptions'\nimport {addAttribute} from '../../../utils/addAttribute'\nimport {getComponentLocalNames} from '../../../utils/getComponentLocalNames'\nimport {getStyledComponentAliases} from '../../../utils/getStyledComponentAliases'\nimport {replaceElement} from '../../../utils/replaceElement'\nimport {shouldTransformComponent} from '../../../utils/shouldTransformComponent'\nimport {transformAttributes} from '../../../utils/transformAttributes'\nimport {transformComponent} from '../../../utils/transformComponent'\nimport {transformImport} from '../../../utils/transformImport'\nimport {transformStyledComponents} from '../../../utils/transformStyledComponents'\nimport {LABEL_MODS} from './label.mods'\n\nconst TODO_WARNING = 'Please double check the Label migration below'\n\n/** @internal */\nexport default function transform(\n fileInfo: FileInfo,\n api: API,\n options: BaseOptions,\n): string | undefined {\n const {fromPackage, toPackage} = options || {}\n\n return transformComponent(fileInfo, api, ({j, root, markChanged}) => {\n const localNames = getComponentLocalNames(j, root, 'Label', options)\n const styledAliases = getStyledComponentAliases(\n j,\n root,\n 'Label',\n fileInfo.path,\n localNames,\n options,\n )\n\n if (!shouldTransformComponent(j, root, 'Label', localNames, options, styledAliases)) {\n return\n }\n\n if (transformImport(j, root, 'Label', fromPackage, toPackage)) {\n markChanged()\n }\n\n if (\n replaceElement(\n j,\n root,\n () => true,\n {\n element: 'Label',\n localNames,\n },\n {\n element: 'Eyebrow',\n callback: (path) => {\n let changed = false\n\n if (transformAttributes(j, path, LABEL_MODS, TODO_WARNING)) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'as', 'div')) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'trim', true)) {\n changed = true\n }\n\n return changed\n },\n },\n )\n ) {\n markChanged()\n }\n\n if (\n transformStyledComponents(j, root, styledAliases, () => true, {\n callback: (path) => {\n let changed = false\n\n if (transformAttributes(j, path, LABEL_MODS, TODO_WARNING)) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'as', 'div')) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'trim', true)) {\n changed = true\n }\n\n return changed\n },\n })\n ) {\n markChanged()\n }\n })\n}\n"],"names":[],"mappings":";;;;AAGO,MAAM,aAA4B;AAAA,EACvC,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,EACL;AAAA,EAEF,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,OAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,EACL;AAEJ,GCzDM,eAAe;AAGrB,SAAwB,UACtB,UACA,KACA,SACoB;AACpB,QAAM,EAAC,aAAa,UAAA,IAAa,WAAW,CAAA;AAE5C,SAAO,mBAAmB,UAAU,KAAK,CAAC,EAAC,GAAG,MAAM,kBAAiB;AACnE,UAAM,aAAa,uBAAuB,GAAG,MAAM,SAAS,OAAO,GAC7D,gBAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAGG,6BAAyB,GAAG,MAAM,SAAS,YAAY,SAAS,aAAa,MAI9E,gBAAgB,GAAG,MAAM,SAAS,aAAa,SAAS,KAC1D,eAIA;AAAA,MACE;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT;AAAA,MAAA;AAAA,MAEF;AAAA,QACE,SAAS;AAAA,QACT,UAAU,CAAC,SAAS;AAClB,cAAI,UAAU;AAEd,iBAAI,oBAAoB,GAAG,MAAM,YAAY,YAAY,MACvD,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,MAAM,KAAK,MACxC,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,QAAQ,EAAI,MACzC,UAAU,KAGL;AAAA,QACT;AAAA,MAAA;AAAA,IACF,KAGF,eAIA,0BAA0B,GAAG,MAAM,eAAe,MAAM,IAAM;AAAA,MAC5D,UAAU,CAAC,SAAS;AAClB,YAAI,UAAU;AAEd,eAAI,oBAAoB,GAAG,MAAM,YAAY,YAAY,MACvD,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,MAAM,KAAK,MACxC,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,QAAQ,EAAI,MACzC,UAAU,KAGL;AAAA,MACT;AAAA,IAAA,CACD,KAED,YAAA;AAAA,EAEJ,CAAC;AACH;"}
@@ -0,0 +1,18 @@
1
+ import { API } from "jscodeshift";
2
+ import { FileInfo } from "jscodeshift";
3
+ import type { Options } from "jscodeshift";
4
+
5
+ declare interface BaseOptions extends Options {
6
+ fromPackage?: string;
7
+ toPackage?: string;
8
+ }
9
+
10
+ /** @internal */
11
+ declare function transform(
12
+ fileInfo: FileInfo,
13
+ api: API,
14
+ options?: BaseOptions,
15
+ ): string | undefined;
16
+ export default transform;
17
+
18
+ export {};
@@ -0,0 +1,67 @@
1
+ import "jscodeshift";
2
+ import { addAttribute } from "../../../_chunks-es/addAttribute.js";
3
+ import { transformComponent, getComponentLocalNames, getStyledComponentAliases, shouldTransformComponent, transformImport, transformStyledComponents, transformAttributes } from "../../../_chunks-es/transformStyledComponents.js";
4
+ import { replaceElement } from "../../../_chunks-es/replaceElement.js";
5
+ import { FLEX_MODS } from "../../../_chunks-es/flex.mods.js";
6
+ const STACK_MODS = {
7
+ sizing: {
8
+ type: "remove"
9
+ },
10
+ space: {
11
+ type: "rename-only",
12
+ name: "gap"
13
+ }
14
+ }, STACK_TODO_WARNING = "Please double check the Stack migration below", FLEX_TODO_WARNING = "Please double check the Flex migration below", STYLED_TODO_WARNING = "Please double check styled(Stack) migration below";
15
+ function replaceWithFlex(attrs) {
16
+ return attrs ? attrs.some(
17
+ (attr) => attr.type === "JSXAttribute" && attr.name.type === "JSXIdentifier" && (attr.name.name.startsWith("padding") || attr.name.name.startsWith("margin") || attr.name.name.startsWith("overflow") || attr.name.name.startsWith("flex") || attr.name.name.endsWith("height") || attr.name.name.endsWith("width"))
18
+ ) : !1;
19
+ }
20
+ function transform(fileInfo, api, options) {
21
+ const { fromPackage, toPackage } = options || {};
22
+ return transformComponent(fileInfo, api, ({ j, root, markChanged }) => {
23
+ const localNames = getComponentLocalNames(j, root, "Stack", options), styledAliases = getStyledComponentAliases(
24
+ j,
25
+ root,
26
+ "Stack",
27
+ fileInfo.path,
28
+ localNames,
29
+ options
30
+ );
31
+ shouldTransformComponent(j, root, "Stack", localNames, options, styledAliases) && (transformImport(j, root, "Stack", fromPackage, toPackage) && markChanged(), replaceElement(
32
+ j,
33
+ root,
34
+ (attrs) => replaceWithFlex(attrs),
35
+ {
36
+ element: "Stack",
37
+ localNames
38
+ },
39
+ {
40
+ element: "Flex",
41
+ callback: (path) => {
42
+ let changed = !1;
43
+ return addAttribute(j, path.node, "flexDirection", "column") && (changed = !0), transformAttributes(j, path, FLEX_MODS, FLEX_TODO_WARNING) && (changed = !0), changed;
44
+ }
45
+ }
46
+ ) && markChanged(), replaceElement(
47
+ j,
48
+ root,
49
+ (attrs) => !replaceWithFlex(attrs),
50
+ {
51
+ element: "Stack",
52
+ localNames
53
+ },
54
+ {
55
+ element: "VStack",
56
+ callback: (path) => transformAttributes(j, path, STACK_MODS, STACK_TODO_WARNING)
57
+ }
58
+ ) && markChanged(), transformStyledComponents(j, root, styledAliases, (attrs) => !replaceWithFlex(attrs), {
59
+ warning: STYLED_TODO_WARNING,
60
+ callback: (path) => transformAttributes(j, path, STACK_MODS, STACK_TODO_WARNING)
61
+ }) && markChanged());
62
+ });
63
+ }
64
+ export {
65
+ transform as default
66
+ };
67
+ //# sourceMappingURL=stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack.js","sources":["../../../../src/transforms/latest/stack/stack.mods.ts","../../../../src/transforms/latest/stack/stack.ts"],"sourcesContent":["import type {AttributeMods} from '../../../types/AttributeMods'\n\n/** @internal */\nexport const STACK_MODS: AttributeMods = {\n sizing: {\n type: 'remove',\n },\n space: {\n type: 'rename-only',\n name: 'gap',\n },\n}\n","import {type API, type FileInfo, type JSXElement} from 'jscodeshift'\n\nimport type {BaseOptions} from '../../../types/BaseOptions'\nimport {addAttribute} from '../../../utils/addAttribute'\nimport {getComponentLocalNames} from '../../../utils/getComponentLocalNames'\nimport {getStyledComponentAliases} from '../../../utils/getStyledComponentAliases'\nimport {replaceElement} from '../../../utils/replaceElement'\nimport {shouldTransformComponent} from '../../../utils/shouldTransformComponent'\nimport {transformAttributes} from '../../../utils/transformAttributes'\nimport {transformComponent} from '../../../utils/transformComponent'\nimport {transformImport} from '../../../utils/transformImport'\nimport {transformStyledComponents} from '../../../utils/transformStyledComponents'\nimport {FLEX_MODS} from '../flex/flex.mods'\nimport {STACK_MODS} from './stack.mods'\n\nconst STACK_TODO_WARNING = 'Please double check the Stack migration below'\nconst FLEX_TODO_WARNING = 'Please double check the Flex migration below'\nconst STYLED_TODO_WARNING = 'Please double check styled(Stack) migration below'\n\nfunction replaceWithFlex(attrs: JSXElement['openingElement']['attributes']) {\n if (!attrs) {\n return false\n }\n\n return attrs.some(\n (attr) =>\n attr.type === 'JSXAttribute' &&\n attr.name.type === 'JSXIdentifier' &&\n (attr.name.name.startsWith('padding') ||\n attr.name.name.startsWith('margin') ||\n attr.name.name.startsWith('overflow') ||\n attr.name.name.startsWith('flex') ||\n attr.name.name.endsWith('height') ||\n attr.name.name.endsWith('width')),\n )\n}\n\n/** @internal */\nexport default function transform(\n fileInfo: FileInfo,\n api: API,\n options?: BaseOptions,\n): string | undefined {\n const {fromPackage, toPackage} = options || {}\n\n return transformComponent(fileInfo, api, ({j, root, markChanged}) => {\n const localNames = getComponentLocalNames(j, root, 'Stack', options)\n const styledAliases = getStyledComponentAliases(\n j,\n root,\n 'Stack',\n fileInfo.path,\n localNames,\n options,\n )\n\n if (!shouldTransformComponent(j, root, 'Stack', localNames, options, styledAliases)) {\n return\n }\n\n if (transformImport(j, root, 'Stack', fromPackage, toPackage)) {\n markChanged()\n }\n\n if (\n replaceElement(\n j,\n root,\n (attrs) => replaceWithFlex(attrs),\n {\n element: 'Stack',\n localNames,\n },\n {\n element: 'Flex',\n callback: (path) => {\n let changed = false\n\n if (addAttribute(j, path.node, 'flexDirection', 'column')) {\n changed = true\n }\n\n if (transformAttributes(j, path, FLEX_MODS, FLEX_TODO_WARNING)) {\n changed = true\n }\n\n return changed\n },\n },\n )\n ) {\n markChanged()\n }\n\n if (\n replaceElement(\n j,\n root,\n (attrs) => {\n return !replaceWithFlex(attrs)\n },\n {\n element: 'Stack',\n localNames,\n },\n {\n element: 'VStack',\n callback: (path) => transformAttributes(j, path, STACK_MODS, STACK_TODO_WARNING),\n },\n )\n ) {\n markChanged()\n }\n\n if (\n transformStyledComponents(j, root, styledAliases, (attrs) => !replaceWithFlex(attrs), {\n warning: STYLED_TODO_WARNING,\n callback: (path) => transformAttributes(j, path, STACK_MODS, STACK_TODO_WARNING),\n })\n ) {\n markChanged()\n }\n })\n}\n"],"names":[],"mappings":";;;;;AAGO,MAAM,aAA4B;AAAA,EACvC,QAAQ;AAAA,IACN,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,EAAA;AAEV,GCIM,qBAAqB,iDACrB,oBAAoB,gDACpB,sBAAsB;AAE5B,SAAS,gBAAgB,OAAmD;AAC1E,SAAK,QAIE,MAAM;AAAA,IACX,CAAC,SACC,KAAK,SAAS,kBACd,KAAK,KAAK,SAAS,oBAClB,KAAK,KAAK,KAAK,WAAW,SAAS,KAClC,KAAK,KAAK,KAAK,WAAW,QAAQ,KAClC,KAAK,KAAK,KAAK,WAAW,UAAU,KACpC,KAAK,KAAK,KAAK,WAAW,MAAM,KAChC,KAAK,KAAK,KAAK,SAAS,QAAQ,KAChC,KAAK,KAAK,KAAK,SAAS,OAAO;AAAA,EAAA,IAZ5B;AAcX;AAGA,SAAwB,UACtB,UACA,KACA,SACoB;AACpB,QAAM,EAAC,aAAa,UAAA,IAAa,WAAW,CAAA;AAE5C,SAAO,mBAAmB,UAAU,KAAK,CAAC,EAAC,GAAG,MAAM,kBAAiB;AACnE,UAAM,aAAa,uBAAuB,GAAG,MAAM,SAAS,OAAO,GAC7D,gBAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAGG,6BAAyB,GAAG,MAAM,SAAS,YAAY,SAAS,aAAa,MAI9E,gBAAgB,GAAG,MAAM,SAAS,aAAa,SAAS,KAC1D,eAIA;AAAA,MACE;AAAA,MACA;AAAA,MACA,CAAC,UAAU,gBAAgB,KAAK;AAAA,MAChC;AAAA,QACE,SAAS;AAAA,QACT;AAAA,MAAA;AAAA,MAEF;AAAA,QACE,SAAS;AAAA,QACT,UAAU,CAAC,SAAS;AAClB,cAAI,UAAU;AAEd,iBAAI,aAAa,GAAG,KAAK,MAAM,iBAAiB,QAAQ,MACtD,UAAU,KAGR,oBAAoB,GAAG,MAAM,WAAW,iBAAiB,MAC3D,UAAU,KAGL;AAAA,QACT;AAAA,MAAA;AAAA,IACF,KAGF,eAIA;AAAA,MACE;AAAA,MACA;AAAA,MACA,CAAC,UACQ,CAAC,gBAAgB,KAAK;AAAA,MAE/B;AAAA,QACE,SAAS;AAAA,QACT;AAAA,MAAA;AAAA,MAEF;AAAA,QACE,SAAS;AAAA,QACT,UAAU,CAAC,SAAS,oBAAoB,GAAG,MAAM,YAAY,kBAAkB;AAAA,MAAA;AAAA,IACjF,KAGF,YAAA,GAIA,0BAA0B,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,gBAAgB,KAAK,GAAG;AAAA,MACpF,SAAS;AAAA,MACT,UAAU,CAAC,SAAS,oBAAoB,GAAG,MAAM,YAAY,kBAAkB;AAAA,IAAA,CAChF,KAED,YAAA;AAAA,EAEJ,CAAC;AACH;"}
@@ -1,6 +1,6 @@
1
1
  import "jscodeshift";
2
2
  import { addAttribute } from "../../../_chunks-es/addAttribute.js";
3
- import { transformComponent, getComponentLocalNames, shouldTransformComponent, transformImport, transformAttributes } from "../../../_chunks-es/transformComponent.js";
3
+ import { transformComponent, getComponentLocalNames, getStyledComponentAliases, shouldTransformComponent, transformImport, transformAttributes, transformStyledComponents } from "../../../_chunks-es/transformStyledComponents.js";
4
4
  const TEXT_MODS = {
5
5
  accent: {
6
6
  type: "rename-mapped",
@@ -73,13 +73,24 @@ const TEXT_MODS = {
73
73
  function transform(fileInfo, api, options) {
74
74
  const { fromPackage, toPackage } = options || {};
75
75
  return transformComponent(fileInfo, api, ({ j, root, markChanged }) => {
76
- const localNames = getComponentLocalNames(j, root, "Text", options);
77
- shouldTransformComponent(j, root, "Text", localNames, options) && (transformImport(j, root, "Text", fromPackage, toPackage) && markChanged(), root.find(j.JSXOpeningElement, {
78
- name: { type: "JSXIdentifier", name: "Text" }
79
- }).forEach((path) => {
76
+ const localNames = getComponentLocalNames(j, root, "Text", options), styledAliases = getStyledComponentAliases(
77
+ j,
78
+ root,
79
+ "Text",
80
+ fileInfo.path,
81
+ localNames,
82
+ options
83
+ );
84
+ shouldTransformComponent(j, root, "Text", localNames, options, styledAliases) && (transformImport(j, root, "Text", fromPackage, toPackage) && markChanged(), root.find(j.JSXOpeningElement).forEach((path) => {
80
85
  let changed = !1;
81
- transformAttributes(j, path, TEXT_MODS, TODO_WARNING) && (changed = !0), addAttribute(j, path.node, "as", "div") && (changed = !0), addAttribute(j, path.node, "trim", !0) && (changed = !0), changed && markChanged();
82
- }));
86
+ const name = path.node.name;
87
+ name.type !== "JSXIdentifier" || !localNames.has(name.name) || (transformAttributes(j, path, TEXT_MODS, TODO_WARNING) && (changed = !0), addAttribute(j, path.node, "as", "div") && (changed = !0), addAttribute(j, path.node, "trim", !0) && (changed = !0), changed && markChanged());
88
+ }), transformStyledComponents(j, root, styledAliases, () => !0, {
89
+ callback: (path) => {
90
+ let changed = !1;
91
+ return transformAttributes(j, path, TEXT_MODS, TODO_WARNING) && (changed = !0), addAttribute(j, path.node, "as", "div") && (changed = !0), addAttribute(j, path.node, "trim", !0) && (changed = !0), changed && markChanged(), changed;
92
+ }
93
+ }) && markChanged());
83
94
  });
84
95
  }
85
96
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sources":["../../../../src/transforms/latest/text/text.mods.ts","../../../../src/transforms/latest/text/text.ts"],"sourcesContent":["import type {AttributeMods} from '../../../types/AttributeMods'\n\n/** @internal */\nexport const TEXT_MODS: AttributeMods = {\n accent: {\n type: 'rename-mapped',\n name: 'tone',\n mapping: {\n true: 'suggest',\n },\n },\n flex: {\n type: 'style-mapped',\n style: 'flex',\n mapping: {\n none: '0 0 auto',\n auto: '1 1 auto',\n initial: '0 1 auto',\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 10: '10',\n 11: '11',\n 12: '12',\n },\n },\n maxWidth: {\n type: 'style-mapped',\n style: 'maxWidth',\n mapping: {\n auto: 'none',\n fill: '100%',\n 0: '20rem',\n 1: '40rem',\n 2: '60rem',\n 3: '80rem',\n 4: '100rem',\n 5: '120rem',\n },\n },\n textOverflow: {\n type: 'rename-mapped',\n name: 'truncate',\n mapping: {\n ellipsis: 1,\n clip: 1,\n },\n },\n width: {\n type: 'style-mapped',\n style: 'width',\n mapping: {\n auto: 'auto',\n fill: '100%',\n stretch: 'stretch',\n min: 'min-content',\n max: 'max-content',\n 0: '20rem',\n 1: '40rem',\n 2: '60rem',\n 3: '80rem',\n 4: '100rem',\n 5: '120rem',\n },\n },\n}\n","import {type API, type FileInfo} from 'jscodeshift'\n\nimport type {BaseOptions} from '../../../types/BaseOptions'\nimport {addAttribute} from '../../../utils/addAttribute'\nimport {getComponentLocalNames} from '../../../utils/getComponentLocalNames'\nimport {shouldTransformComponent} from '../../../utils/shouldTransformComponent'\nimport {transformAttributes} from '../../../utils/transformAttributes'\nimport {transformComponent} from '../../../utils/transformComponent'\nimport {transformImport} from '../../../utils/transformImport'\nimport {TEXT_MODS} from './text.mods'\n\nconst TODO_WARNING = 'Please double check the Text migration below'\n\n/** @internal */\nexport default function transform(\n fileInfo: FileInfo,\n api: API,\n options: BaseOptions,\n): string | undefined {\n const {fromPackage, toPackage} = options || {}\n\n return transformComponent(fileInfo, api, ({j, root, markChanged}) => {\n const localNames = getComponentLocalNames(j, root, 'Text', options)\n\n if (!shouldTransformComponent(j, root, 'Text', localNames, options)) {\n return\n }\n\n if (transformImport(j, root, 'Text', fromPackage, toPackage)) {\n markChanged()\n }\n\n root\n .find(j.JSXOpeningElement, {\n name: {type: 'JSXIdentifier', name: 'Text'},\n })\n .forEach((path) => {\n let changed = false\n\n if (transformAttributes(j, path, TEXT_MODS, TODO_WARNING)) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'as', 'div')) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'trim', true)) {\n changed = true\n }\n\n if (changed) {\n markChanged()\n }\n })\n })\n}\n"],"names":[],"mappings":";;;AAGO,MAAM,YAA2B;AAAA,EACtC,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,EACL;AAAA,EAEF,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,OAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,EACL;AAEJ,GC5DM,eAAe;AAGrB,SAAwB,UACtB,UACA,KACA,SACoB;AACpB,QAAM,EAAC,aAAa,UAAA,IAAa,WAAW,CAAA;AAE5C,SAAO,mBAAmB,UAAU,KAAK,CAAC,EAAC,GAAG,MAAM,kBAAiB;AACnE,UAAM,aAAa,uBAAuB,GAAG,MAAM,QAAQ,OAAO;AAE7D,6BAAyB,GAAG,MAAM,QAAQ,YAAY,OAAO,MAI9D,gBAAgB,GAAG,MAAM,QAAQ,aAAa,SAAS,KACzD,YAAA,GAGF,KACG,KAAK,EAAE,mBAAmB;AAAA,MACzB,MAAM,EAAC,MAAM,iBAAiB,MAAM,OAAA;AAAA,IAAM,CAC3C,EACA,QAAQ,CAAC,SAAS;AACjB,UAAI,UAAU;AAEV,0BAAoB,GAAG,MAAM,WAAW,YAAY,MACtD,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,MAAM,KAAK,MACxC,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,QAAQ,EAAI,MACzC,UAAU,KAGR,WACF,YAAA;AAAA,IAEJ,CAAC;AAAA,EACL,CAAC;AACH;"}
1
+ {"version":3,"file":"text.js","sources":["../../../../src/transforms/latest/text/text.mods.ts","../../../../src/transforms/latest/text/text.ts"],"sourcesContent":["import type {AttributeMods} from '../../../types/AttributeMods'\n\n/** @internal */\nexport const TEXT_MODS: AttributeMods = {\n accent: {\n type: 'rename-mapped',\n name: 'tone',\n mapping: {\n true: 'suggest',\n },\n },\n flex: {\n type: 'style-mapped',\n style: 'flex',\n mapping: {\n none: '0 0 auto',\n auto: '1 1 auto',\n initial: '0 1 auto',\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 10: '10',\n 11: '11',\n 12: '12',\n },\n },\n maxWidth: {\n type: 'style-mapped',\n style: 'maxWidth',\n mapping: {\n auto: 'none',\n fill: '100%',\n 0: '20rem',\n 1: '40rem',\n 2: '60rem',\n 3: '80rem',\n 4: '100rem',\n 5: '120rem',\n },\n },\n textOverflow: {\n type: 'rename-mapped',\n name: 'truncate',\n mapping: {\n ellipsis: 1,\n clip: 1,\n },\n },\n width: {\n type: 'style-mapped',\n style: 'width',\n mapping: {\n auto: 'auto',\n fill: '100%',\n stretch: 'stretch',\n min: 'min-content',\n max: 'max-content',\n 0: '20rem',\n 1: '40rem',\n 2: '60rem',\n 3: '80rem',\n 4: '100rem',\n 5: '120rem',\n },\n },\n}\n","import {type API, type FileInfo} from 'jscodeshift'\n\nimport type {BaseOptions} from '../../../types/BaseOptions'\nimport {addAttribute} from '../../../utils/addAttribute'\nimport {getComponentLocalNames} from '../../../utils/getComponentLocalNames'\nimport {getStyledComponentAliases} from '../../../utils/getStyledComponentAliases'\nimport {shouldTransformComponent} from '../../../utils/shouldTransformComponent'\nimport {transformAttributes} from '../../../utils/transformAttributes'\nimport {transformComponent} from '../../../utils/transformComponent'\nimport {transformImport} from '../../../utils/transformImport'\nimport {transformStyledComponents} from '../../../utils/transformStyledComponents'\nimport {TEXT_MODS} from './text.mods'\n\nconst TODO_WARNING = 'Please double check the Text migration below'\n\n/** @internal */\nexport default function transform(\n fileInfo: FileInfo,\n api: API,\n options: BaseOptions,\n): string | undefined {\n const {fromPackage, toPackage} = options || {}\n\n return transformComponent(fileInfo, api, ({j, root, markChanged}) => {\n const localNames = getComponentLocalNames(j, root, 'Text', options)\n const styledAliases = getStyledComponentAliases(\n j,\n root,\n 'Text',\n fileInfo.path,\n localNames,\n options,\n )\n\n if (!shouldTransformComponent(j, root, 'Text', localNames, options, styledAliases)) {\n return\n }\n\n if (transformImport(j, root, 'Text', fromPackage, toPackage)) {\n markChanged()\n }\n\n root.find(j.JSXOpeningElement).forEach((path) => {\n let changed = false\n const name = path.node.name\n\n if (name.type !== 'JSXIdentifier' || !localNames.has(name.name)) {\n return\n }\n\n if (transformAttributes(j, path, TEXT_MODS, TODO_WARNING)) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'as', 'div')) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'trim', true)) {\n changed = true\n }\n\n if (changed) {\n markChanged()\n }\n })\n\n if (\n transformStyledComponents(j, root, styledAliases, () => true, {\n callback: (path) => {\n let changed = false\n\n if (transformAttributes(j, path, TEXT_MODS, TODO_WARNING)) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'as', 'div')) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'trim', true)) {\n changed = true\n }\n\n if (changed) {\n markChanged()\n }\n\n return changed\n },\n })\n ) {\n markChanged()\n }\n })\n}\n"],"names":[],"mappings":";;;AAGO,MAAM,YAA2B;AAAA,EACtC,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,EACL;AAAA,EAEF,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,OAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,EACL;AAEJ,GC1DM,eAAe;AAGrB,SAAwB,UACtB,UACA,KACA,SACoB;AACpB,QAAM,EAAC,aAAa,UAAA,IAAa,WAAW,CAAA;AAE5C,SAAO,mBAAmB,UAAU,KAAK,CAAC,EAAC,GAAG,MAAM,kBAAiB;AACnE,UAAM,aAAa,uBAAuB,GAAG,MAAM,QAAQ,OAAO,GAC5D,gBAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAGG,6BAAyB,GAAG,MAAM,QAAQ,YAAY,SAAS,aAAa,MAI7E,gBAAgB,GAAG,MAAM,QAAQ,aAAa,SAAS,KACzD,YAAA,GAGF,KAAK,KAAK,EAAE,iBAAiB,EAAE,QAAQ,CAAC,SAAS;AAC/C,UAAI,UAAU;AACd,YAAM,OAAO,KAAK,KAAK;AAEnB,WAAK,SAAS,mBAAmB,CAAC,WAAW,IAAI,KAAK,IAAI,MAI1D,oBAAoB,GAAG,MAAM,WAAW,YAAY,MACtD,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,MAAM,KAAK,MACxC,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,QAAQ,EAAI,MACzC,UAAU,KAGR,WACF;IAEJ,CAAC,GAGC,0BAA0B,GAAG,MAAM,eAAe,MAAM,IAAM;AAAA,MAC5D,UAAU,CAAC,SAAS;AAClB,YAAI,UAAU;AAEd,eAAI,oBAAoB,GAAG,MAAM,WAAW,YAAY,MACtD,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,MAAM,KAAK,MACxC,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,QAAQ,EAAI,MACzC,UAAU,KAGR,WACF,YAAA,GAGK;AAAA,MACT;AAAA,IAAA,CACD,KAED,YAAA;AAAA,EAEJ,CAAC;AACH;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/ui-codemod",
3
- "version": "1.0.0-alpha.5",
3
+ "version": "1.0.0-alpha.7",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "license": "ISC",
@@ -29,6 +29,12 @@
29
29
  "./latest/grid": "./dist/commands/latest/grid.js",
30
30
  "./transforms/latest/heading": "./dist/transforms/latest/heading/heading.js",
31
31
  "./latest/heading": "./dist/commands/latest/heading.js",
32
+ "./transforms/latest/inline": "./dist/transforms/latest/inline/inline.js",
33
+ "./latest/inline": "./dist/commands/latest/inline.js",
34
+ "./transforms/latest/label": "./dist/transforms/latest/label/label.js",
35
+ "./latest/label": "./dist/commands/latest/label.js",
36
+ "./transforms/latest/stack": "./dist/transforms/latest/stack/stack.js",
37
+ "./latest/stack": "./dist/commands/latest/stack.js",
32
38
  "./transforms/latest/text": "./dist/transforms/latest/text/text.js",
33
39
  "./latest/text": "./dist/commands/latest/text.js",
34
40
  "./package.json": "./package.json"
@@ -411,6 +411,10 @@ export const LAYOUT_MODS: AttributeMods = {
411
411
  border: 'border-box',
412
412
  },
413
413
  },
414
+ space: {
415
+ type: 'rename-only',
416
+ name: 'gap',
417
+ },
414
418
  textAlign: {
415
419
  type: 'style-only',
416
420
  style: 'textAlign',
@@ -255,8 +255,7 @@ defineCrossFileTest(
255
255
  }
256
256
  `,
257
257
  (output) => {
258
- expect(output).toContain('alignItems: "center"')
259
- expect(output).not.toContain('<RootBox alignItems="center" />')
258
+ expect(output.replace(/\s+/g, ' ')).toContain('<RootBox style={{ alignItems: "center" }} />')
260
259
  },
261
260
  'transforms attributes on imported styled Box wrappers',
262
261
  )
@@ -279,7 +278,6 @@ defineCrossFileTest(
279
278
  (output) => {
280
279
  expect(output).toContain('UI-CODEMOD TODO: Please double check styled(Box) migration below')
281
280
  expect(output).toContain('<RootBox display="flex" alignItems="center" />')
282
- expect(output).not.toContain('const RootBox = styled(Box)')
283
281
  },
284
282
  'adds todo warning when imported styled Box wrapper should be replaced',
285
283
  )
@@ -306,10 +304,8 @@ defineCrossFileTest(
306
304
  }
307
305
  `,
308
306
  (output) => {
309
- expect(output).toContain('alignItems: "center"')
310
- expect(output).not.toContain('<RootBox alignItems="center" />')
307
+ expect(output.replace(/\s+/g, ' ')).toContain('<RootBox style={{ alignItems: "center" }} />')
311
308
  expect(output).toContain('<Box display="flex" />')
312
- expect(output).not.toContain('<Flex')
313
309
  },
314
310
  'does not rewrite unrelated Box from another package',
315
311
  )
@@ -330,8 +326,7 @@ defineCrossFileTest(
330
326
  }
331
327
  `,
332
328
  (output) => {
333
- expect(output).toContain('alignItems: "center"')
334
- expect(output).not.toContain('<RootBox alignItems="center" />')
329
+ expect(output.replace(/\s+/g, ' ')).toContain('<RootBox style={{ alignItems: "center" }} />')
335
330
  },
336
331
  'transforms styled Box wrappers imported through barrel re-exports',
337
332
  {
@@ -1,4 +1,6 @@
1
- import {defineInlineTest} from '../../../utils/testUtils'
1
+ import {expect} from 'vitest'
2
+
3
+ import {defineCrossFileTest, defineInlineTest} from '../../../utils/testUtils'
2
4
  import transform from './card'
3
5
 
4
6
  defineInlineTest(
@@ -205,3 +207,100 @@ defineInlineTest(
205
207
  `,
206
208
  'warns if Card includes muted prop',
207
209
  )
210
+
211
+ defineCrossFileTest(
212
+ transform,
213
+ {},
214
+ `
215
+ import {Card} from '@sanity/ui'
216
+
217
+ export const RootCard = styled(Card)(({theme}) => ({}))
218
+ `,
219
+ `
220
+ import {RootCard} from './Component.styled'
221
+
222
+ export function Component() {
223
+ return <RootCard padding={4} radius={3} border />
224
+ }
225
+ `,
226
+ (output) => {
227
+ expect(output).toContain('<RootCard density="regular" />')
228
+ },
229
+ 'transforms attributes on imported styled Card wrappers',
230
+ )
231
+
232
+ defineCrossFileTest(
233
+ transform,
234
+ {},
235
+ `
236
+ import {Card} from '@sanity/ui'
237
+
238
+ export const RootCard = styled(Card)(({theme}) => ({}))
239
+ `,
240
+ `
241
+ import {RootCard} from './Component.styled'
242
+
243
+ export function Component() {
244
+ return <RootCard padding={1} />
245
+ }
246
+ `,
247
+ (output) => {
248
+ expect(output).toContain('UI-CODEMOD TODO: Please double check styled(Card) migration below')
249
+ expect(output).toContain('<RootCard padding={1} />')
250
+ },
251
+ 'adds todo warning when imported styled Card wrapper should be replaced',
252
+ )
253
+
254
+ defineCrossFileTest(
255
+ transform,
256
+ {},
257
+ `
258
+ import {Card} from '@sanity/ui'
259
+
260
+ export const RootCard = styled(Card)(({theme}) => ({}))
261
+ `,
262
+ `
263
+ import {Card} from 'another-package'
264
+ import {RootCard} from './Component.styled'
265
+
266
+ export function Component() {
267
+ return (
268
+ <>
269
+ <RootCard padding={4} radius={3} border />
270
+ <Card padding={4} radius={3} border />
271
+ </>
272
+ )
273
+ }
274
+ `,
275
+ (output) => {
276
+ expect(output).toContain('<RootCard density="regular" />')
277
+ expect(output).toContain('<Card padding={4} radius={3} border />')
278
+ },
279
+ 'does not rewrite unrelated Card from another package',
280
+ )
281
+
282
+ defineCrossFileTest(
283
+ transform,
284
+ {},
285
+ `
286
+ import {Card} from '@sanity/ui'
287
+
288
+ export const RootCard = styled(Card)(({theme}) => ({}))
289
+ `,
290
+ `
291
+ import {RootCard} from './index'
292
+
293
+ export function Component() {
294
+ return <RootCard padding={4} radius={3} border />
295
+ }
296
+ `,
297
+ (output) => {
298
+ expect(output).toContain('<RootCard density="regular" />')
299
+ },
300
+ 'transforms styled Card wrappers imported through barrel re-exports',
301
+ {
302
+ extraFiles: {
303
+ 'index.ts': `export {RootCard} from './Component.styled'`,
304
+ },
305
+ },
306
+ )
@@ -1,19 +1,22 @@
1
- import {type API, type FileInfo} from 'jscodeshift'
1
+ import {type API, type FileInfo, type JSXAttribute, type JSXSpreadAttribute} from 'jscodeshift'
2
2
 
3
3
  import type {BaseOptions} from '../../../types/BaseOptions'
4
4
  import {getAttribute} from '../../../utils/getAttribute'
5
5
  import {getComponentLocalNames} from '../../../utils/getComponentLocalNames'
6
6
  import {getStaticAttributeExpression} from '../../../utils/getStaticAttributeExpression'
7
+ import {getStyledComponentAliases} from '../../../utils/getStyledComponentAliases'
7
8
  import {replaceElement} from '../../../utils/replaceElement'
8
9
  import {shouldTransformComponent} from '../../../utils/shouldTransformComponent'
9
10
  import {transformAttributes} from '../../../utils/transformAttributes'
10
11
  import {transformComponent} from '../../../utils/transformComponent'
11
12
  import {transformImport} from '../../../utils/transformImport'
13
+ import {transformStyledComponents} from '../../../utils/transformStyledComponents'
12
14
  import {BOX_MODS} from '../box/box.mods'
13
15
  import {CARD_MODS} from './card.mods'
14
16
 
15
17
  const CARD_TODO_WARNING = 'Please double check the Card migration below'
16
18
  const BOX_TODO_WARNING = 'Please double check the Box migration below'
19
+ const STYLED_TODO_WARNING = 'Please double check styled(Card) migration below'
17
20
 
18
21
  /** @internal */
19
22
  export default function transform(
@@ -25,8 +28,16 @@ export default function transform(
25
28
 
26
29
  return transformComponent(fileInfo, api, ({j, root, markChanged}) => {
27
30
  const localNames = getComponentLocalNames(j, root, 'Card', options)
31
+ const styledAliases = getStyledComponentAliases(
32
+ j,
33
+ root,
34
+ 'Card',
35
+ fileInfo.path,
36
+ localNames,
37
+ options,
38
+ )
28
39
 
29
- if (!shouldTransformComponent(j, root, 'Card', localNames, options)) {
40
+ if (!shouldTransformComponent(j, root, 'Card', localNames, options, styledAliases)) {
30
41
  return
31
42
  }
32
43
 
@@ -34,29 +45,32 @@ export default function transform(
34
45
  markChanged()
35
46
  }
36
47
 
48
+ const replaceWithBox = (attrs: (JSXAttribute | JSXSpreadAttribute)[]) => {
49
+ const density = getAttribute(attrs, 'density')
50
+ const muted = getAttribute(attrs, 'muted')
51
+ const scheme = getAttribute(attrs, 'scheme')
52
+ const border = getAttribute(attrs, 'border')
53
+ const padding = getStaticAttributeExpression(j, attrs, 'padding')
54
+ const radius = getStaticAttributeExpression(j, attrs, 'radius')
55
+
56
+ return !(
57
+ density ||
58
+ muted ||
59
+ scheme ||
60
+ (border && padding === 3 && radius == 2) ||
61
+ (border && padding === 4 && radius == 3) ||
62
+ (border && padding === 5 && radius == 4)
63
+ )
64
+ }
65
+
37
66
  if (
38
67
  replaceElement(
39
68
  j,
40
69
  root,
41
- (attrs) => {
42
- const density = getAttribute(attrs, 'density')
43
- const muted = getAttribute(attrs, 'muted')
44
- const scheme = getAttribute(attrs, 'scheme')
45
- const border = getAttribute(attrs, 'border')
46
- const padding = getStaticAttributeExpression(j, attrs, 'padding')
47
- const radius = getStaticAttributeExpression(j, attrs, 'radius')
48
-
49
- return !(
50
- density ||
51
- muted ||
52
- scheme ||
53
- (border && padding === 3 && radius == 2) ||
54
- (border && padding === 4 && radius == 3) ||
55
- (border && padding === 5 && radius == 4)
56
- )
57
- },
70
+ (attrs) => replaceWithBox(attrs),
58
71
  {
59
72
  element: 'Card',
73
+ localNames,
60
74
  callback: (path) => transformAttributes(j, path, CARD_MODS, CARD_TODO_WARNING),
61
75
  },
62
76
  {
@@ -67,5 +81,14 @@ export default function transform(
67
81
  ) {
68
82
  markChanged()
69
83
  }
84
+
85
+ if (
86
+ transformStyledComponents(j, root, styledAliases, (attrs) => !replaceWithBox(attrs), {
87
+ warning: STYLED_TODO_WARNING,
88
+ callback: (path) => transformAttributes(j, path, CARD_MODS, CARD_TODO_WARNING),
89
+ })
90
+ ) {
91
+ markChanged()
92
+ }
70
93
  })
71
94
  }