@builder.io/mitosis 0.0.56-10 → 0.0.56-13

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 (99) hide show
  1. package/dist/src/__tests__/angular.test.js +31 -0
  2. package/dist/src/__tests__/data/basic-child-component.raw.jsx +4 -2
  3. package/dist/src/__tests__/data/basic-onMount-update.raw.d.ts +5 -1
  4. package/dist/src/__tests__/data/basic-onMount-update.raw.jsx +3 -3
  5. package/dist/src/__tests__/data/basic.raw.jsx +4 -2
  6. package/dist/src/__tests__/data/blocks/text.raw.jsx +6 -1
  7. package/dist/src/__tests__/data/blocks/video.raw.jsx +1 -1
  8. package/dist/src/__tests__/data/styles/class-and-className.raw.d.ts +1 -0
  9. package/dist/src/__tests__/data/styles/class-and-className.raw.jsx +12 -0
  10. package/dist/src/__tests__/data/styles/class.raw.d.ts +1 -0
  11. package/dist/src/__tests__/data/styles/class.raw.jsx +10 -0
  12. package/dist/src/__tests__/data/styles/className.raw.d.ts +1 -0
  13. package/dist/src/__tests__/data/styles/className.raw.jsx +12 -0
  14. package/dist/src/__tests__/html.test.js +6 -0
  15. package/dist/src/__tests__/liquid.test.js +6 -0
  16. package/dist/src/__tests__/qwik.directive.test.js +1 -0
  17. package/dist/src/__tests__/qwik.test.js +11 -3
  18. package/dist/src/__tests__/react-native.test.js +1 -1
  19. package/dist/src/__tests__/react.test.js +6 -0
  20. package/dist/src/__tests__/styles.test.d.ts +1 -0
  21. package/dist/src/__tests__/styles.test.js +15 -0
  22. package/dist/src/__tests__/svelte.test.js +6 -0
  23. package/dist/src/__tests__/webcomponent.test.js +6 -0
  24. package/dist/src/generators/angular.js +23 -21
  25. package/dist/src/generators/builder.d.ts +1 -1
  26. package/dist/src/generators/builder.js +16 -17
  27. package/dist/src/generators/html.js +65 -41
  28. package/dist/src/generators/liquid.js +12 -11
  29. package/dist/src/generators/mitosis.js +7 -6
  30. package/dist/src/generators/qwik/component.js +17 -20
  31. package/dist/src/generators/qwik/directives.js +7 -4
  32. package/dist/src/generators/qwik/handlers.js +3 -19
  33. package/dist/src/generators/qwik/jsx.js +25 -9
  34. package/dist/src/generators/qwik/src-generator.d.ts +2 -1
  35. package/dist/src/generators/qwik/src-generator.js +18 -15
  36. package/dist/src/generators/qwik/styles.js +2 -1
  37. package/dist/src/generators/react-native.js +6 -5
  38. package/dist/src/generators/react.js +29 -20
  39. package/dist/src/generators/solid.js +23 -23
  40. package/dist/src/generators/stencil/collect-class-string.js +5 -8
  41. package/dist/src/generators/stencil/generate.js +12 -11
  42. package/dist/src/generators/svelte.js +18 -16
  43. package/dist/src/generators/swift-ui.js +13 -9
  44. package/dist/src/generators/template.js +5 -4
  45. package/dist/src/generators/vue.d.ts +0 -2
  46. package/dist/src/generators/vue.js +51 -34
  47. package/dist/src/helpers/collect-styles.d.ts +1 -7
  48. package/dist/src/helpers/collect-styles.js +19 -21
  49. package/dist/src/helpers/get-refs.js +3 -2
  50. package/dist/src/helpers/get-styles.js +4 -3
  51. package/dist/src/helpers/is-children.js +3 -1
  52. package/dist/src/helpers/is-html-attribute.d.ts +4 -0
  53. package/dist/src/helpers/is-html-attribute.js +395 -0
  54. package/dist/src/helpers/map-refs.js +13 -2
  55. package/dist/src/helpers/strip-state-and-props-refs.js +1 -1
  56. package/dist/src/parsers/angular.js +12 -6
  57. package/dist/src/parsers/builder.js +44 -34
  58. package/dist/src/parsers/jsx.js +59 -28
  59. package/dist/src/plugins/compile-away-builder-components.js +159 -110
  60. package/dist/src/symbols/symbol-processor.js +9 -4
  61. package/dist/src/targets.d.ts +1 -1
  62. package/dist/src/types/mitosis-node.d.ts +4 -1
  63. package/dist/test/qwik/Accordion/low.jsx +8 -3
  64. package/dist/test/qwik/Accordion/med.jsx +2 -8
  65. package/dist/test/qwik/For/low.jsx +8 -3
  66. package/dist/test/qwik/For/med.jsx +2 -8
  67. package/dist/test/qwik/Image/high.js +1 -1
  68. package/dist/test/qwik/Image/med.js +14 -13
  69. package/dist/test/qwik/Image.slow/high.js +1 -1
  70. package/dist/test/qwik/Image.slow/med.js +14 -13
  71. package/dist/test/qwik/bindings/low.cjs +10 -3
  72. package/dist/test/qwik/bindings/med.cjs +1 -10
  73. package/dist/test/qwik/button/high.js +1 -1
  74. package/dist/test/qwik/button/low.js +8 -3
  75. package/dist/test/qwik/button/med.js +2 -8
  76. package/dist/test/qwik/component/bindings/low.jsx +47 -5
  77. package/dist/test/qwik/component/bindings/med.jsx +3 -49
  78. package/dist/test/qwik/component/component/inputs/high.cjsx +1 -1
  79. package/dist/test/qwik/component/component/inputs/med.cjsx +7 -9
  80. package/dist/test/qwik/hello_world/stylesheet/low.jsx +8 -3
  81. package/dist/test/qwik/hello_world/stylesheet/med.jsx +2 -8
  82. package/dist/test/qwik/page-with-symbol/low.js +8 -3
  83. package/dist/test/qwik/page-with-symbol/med.js +2 -8
  84. package/dist/test/qwik/show-hide/high.jsx +1 -1
  85. package/dist/test/qwik/show-hide/med.jsx +14 -13
  86. package/dist/test/qwik/svg/low.js +8 -3
  87. package/dist/test/qwik/svg/med.js +2 -8
  88. package/dist/test/qwik/todo/Todo.cjs/high.cjs +6 -10
  89. package/dist/test/qwik/todo/Todo.cjs/med.cjs +7 -9
  90. package/dist/test/qwik/todo/Todo.js/high.js +7 -10
  91. package/dist/test/qwik/todo/Todo.js/med.js +8 -9
  92. package/dist/test/qwik/todo/Todo.tsx/high.tsx +7 -10
  93. package/dist/test/qwik/todo/Todo.tsx/med.tsx +8 -9
  94. package/dist/test/qwik/todos/Todo.tsx/high.tsx +1 -1
  95. package/dist/test/qwik/todos/Todo.tsx/low.tsx +8 -4
  96. package/dist/test/qwik/todos/Todo.tsx/med.tsx +1 -6
  97. package/dist/tsconfig.build.tsbuildinfo +1 -1
  98. package/dist/tsconfig.tsbuildinfo +1 -1
  99. package/package.json +3 -2
@@ -8,18 +8,44 @@ var onMount = require('./data/blocks/onMount.raw');
8
8
  var onInitonMount = require('./data/blocks/onInit-onMount.raw');
9
9
  var onInit = require('./data/blocks/onInit.raw');
10
10
  var basicFor = require('./data/basic-for.raw');
11
+ var basic = require('./data/basic.raw');
12
+ var basicChildComponent = require('./data/basic-child-component.raw');
13
+ var basicOutputsMeta = require('./data/basic-outputs-meta.raw');
11
14
  var basicOutputs = require('./data/basic-outputs.raw');
12
15
  var contentSlotHtml = require('./data/blocks/content-slot-html.raw');
13
16
  var contentSlotJsx = require('./data/blocks/content-slot-jsx.raw');
14
17
  var slotJsx = require('./data/blocks/slot-jsx.raw');
15
18
  var classNameJsx = require('./data/blocks/classname-jsx.raw');
19
+ var text = require('./data/blocks/text.raw');
16
20
  // const slotHtml = require('./data/blocks/slot-html.raw');
17
21
  describe('Angular', function () {
22
+ test('Basic', function () {
23
+ var component = (0, jsx_1.parseJsx)(basic);
24
+ var output = (0, angular_1.componentToAngular)()({ component: component });
25
+ expect(output).toMatchSnapshot();
26
+ });
27
+ test('Basic Child Component', function () {
28
+ var component = (0, jsx_1.parseJsx)(basicChildComponent);
29
+ var output = (0, angular_1.componentToAngular)()({ component: component });
30
+ expect(output).toMatchSnapshot();
31
+ });
32
+ test('basic outputs meta', function () {
33
+ var component = (0, jsx_1.parseJsx)(basicOutputsMeta);
34
+ var output = (0, angular_1.componentToAngular)()({ component: component });
35
+ expect(output).toMatchSnapshot();
36
+ });
18
37
  test('basic outputs', function () {
19
38
  var component = (0, jsx_1.parseJsx)(basicOutputs);
20
39
  var output = (0, angular_1.componentToAngular)()({ component: component });
21
40
  expect(output).toMatchSnapshot();
22
41
  });
42
+ test('basic outputs same as meta', function () {
43
+ var component = (0, jsx_1.parseJsx)(basicOutputs);
44
+ var componentMeta = (0, jsx_1.parseJsx)(basicOutputsMeta);
45
+ var output = (0, angular_1.componentToAngular)()({ component: component });
46
+ var outputMeta = (0, angular_1.componentToAngular)()({ component: componentMeta });
47
+ expect(output).toMatch(outputMeta);
48
+ });
23
49
  test('multiple onUpdate', function () {
24
50
  var component = (0, jsx_1.parseJsx)(multipleOnUpdate);
25
51
  var output = (0, angular_1.componentToAngular)()({ component: component });
@@ -75,4 +101,9 @@ describe('Angular', function () {
75
101
  var output = (0, angular_1.componentToAngular)()({ component: component });
76
102
  expect(output).toMatchSnapshot();
77
103
  });
104
+ test('Text', function () {
105
+ var component = (0, jsx_1.parseJsx)(text);
106
+ var output = (0, angular_1.componentToAngular)()({ component: component });
107
+ expect(output).toMatchSnapshot();
108
+ });
78
109
  });
@@ -9,11 +9,13 @@ var basic_onMount_update_raw_1 = __importDefault(require("./basic-onMount-update
9
9
  function MyBasicChildComponent() {
10
10
  var state = (0, mitosis_1.useState)({
11
11
  name: 'Steve',
12
+ dev: 'PatrickJS',
12
13
  });
13
14
  return (<div>
14
- <basic_raw_1.default />
15
+ {/*// @ts-ignore */}
16
+ <basic_raw_1.default id={state.dev}/>
15
17
  <div>
16
- <basic_onMount_update_raw_1.default />
18
+ <basic_onMount_update_raw_1.default hi={state.name} bye={state.dev}/>
17
19
  </div>
18
20
  </div>);
19
21
  }
@@ -1 +1,5 @@
1
- export default function MyBasicOnMountUpdateComponent(): JSX.Element;
1
+ export interface Props {
2
+ hi: string;
3
+ bye: string;
4
+ }
5
+ export default function MyBasicOnMountUpdateComponent(props: Props): JSX.Element;
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var mitosis_1 = require("@builder.io/mitosis");
4
- function MyBasicOnMountUpdateComponent() {
4
+ function MyBasicOnMountUpdateComponent(props) {
5
5
  var state = (0, mitosis_1.useState)({
6
6
  name: 'PatrickJS',
7
7
  names: ['Steve', 'PatrickJS'],
8
8
  });
9
9
  (0, mitosis_1.onInit)(function () {
10
- state.name = 'PatrickJS onInit';
10
+ state.name = 'PatrickJS onInit' + props.hi;
11
11
  });
12
12
  (0, mitosis_1.onMount)(function () {
13
- state.name = 'PatrickJS onMount';
13
+ state.name = 'PatrickJS onMount' + props.bye;
14
14
  });
15
15
  return <div>Hello {state.name}</div>;
16
16
  }
@@ -5,8 +5,10 @@ function MyBasicComponent() {
5
5
  var state = (0, mitosis_1.useState)({
6
6
  name: 'Steve',
7
7
  });
8
- return (<div>
9
- <input value={state.name} onChange={function (event) { return (state.name = event.target.value); }}/>
8
+ return (<div class="test" css={{
9
+ padding: '10px',
10
+ }}>
11
+ <input value={state.name} onChange={function (myEvent) { return (state.name = myEvent.target.value); }}/>
10
12
  Hello! I can run in React, Vue, Solid, or Liquid!
11
13
  </div>);
12
14
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var sdk_1 = require("@builder.io/sdk");
4
+ var mitosis_1 = require("@builder.io/mitosis");
4
5
  function Text(props) {
5
6
  var _a, _b, _c, _d, _e, _f;
6
7
  var allowEditingText = sdk_1.Builder.isBrowser &&
@@ -9,9 +10,13 @@ function Text(props) {
9
10
  !(((_b = (_a = props.builderBlock) === null || _a === void 0 ? void 0 : _a.bindings) === null || _b === void 0 ? void 0 : _b['component.options.text']) ||
10
11
  ((_d = (_c = props.builderBlock) === null || _c === void 0 ? void 0 : _c.bindings) === null || _d === void 0 ? void 0 : _d['options.text']) ||
11
12
  ((_f = (_e = props.builderBlock) === null || _e === void 0 ? void 0 : _e.bindings) === null || _f === void 0 ? void 0 : _f['text']));
13
+ var state = (0, mitosis_1.useState)({ name: 'Decadef20' });
12
14
  // TODO: Add back dynamic `direction` CSS prop when we add support for some
13
15
  // sort of dynamic CSS
14
16
  // css={{ direction: props.rtlMode ? 'rtl' : 'ltr' }}
15
- return (<div contentEditable={allowEditingText || undefined} innerHTML={props.text || props.content || ''}/>);
17
+ return (<div contentEditable={allowEditingText || undefined} data-name={{ test: state.name || 'any name' }} innerHTML={props.text ||
18
+ props.content ||
19
+ state.name ||
20
+ '<p class="text-lg">my name</p>'}/>);
16
21
  }
17
22
  exports.default = Text;
@@ -16,6 +16,6 @@ function Video(props) {
16
16
  return (<video {...props.attributes} style={__assign(__assign({ width: '100%', height: '100%' }, (_a = props.attributes) === null || _a === void 0 ? void 0 : _a.style), { objectFit: props.fit, objectPosition: props.position,
17
17
  // Hack to get object fit to work as expected and
18
18
  // not have the video overflow
19
- borderRadius: 1 })} preload="none" key={props.video || 'no-src'} poster={props.posterImage} autoPlay={props.autoPlay} muted={props.muted} controls={props.controls} loop={props.loop}/>);
19
+ borderRadius: 1 })} preload="none" key={props.video || 'no-src'} poster={props.posterImage} autoplay={props.autoPlay} muted={props.muted} controls={props.controls} loop={props.loop}/>);
20
20
  }
21
21
  exports.default = Video;
@@ -0,0 +1 @@
1
+ export default function MyBasicComponent(): JSX.Element;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function MyBasicComponent() {
4
+ return (<div
5
+ // @ts-ignore
6
+ className="test" class="test2" css={{
7
+ padding: '10px',
8
+ }}>
9
+ Hello! I can run in React, Vue, Solid, or Liquid!
10
+ </div>);
11
+ }
12
+ exports.default = MyBasicComponent;
@@ -0,0 +1 @@
1
+ export default function MyBasicComponent(): JSX.Element;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function MyBasicComponent() {
4
+ return (<div class="test" css={{
5
+ padding: '10px',
6
+ }}>
7
+ Hello! I can run in React, Vue, Solid, or Liquid!
8
+ </div>);
9
+ }
10
+ exports.default = MyBasicComponent;
@@ -0,0 +1 @@
1
+ export default function MyBasicComponent(): JSX.Element;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function MyBasicComponent() {
4
+ return (<div
5
+ // @ts-ignore
6
+ className="test" css={{
7
+ padding: '10px',
8
+ }}>
9
+ Hello! I can run in React, Vue, Solid, or Liquid!
10
+ </div>);
11
+ }
12
+ exports.default = MyBasicComponent;
@@ -4,6 +4,7 @@ var html_1 = require("../generators/html");
4
4
  var jsx_1 = require("../parsers/jsx");
5
5
  var basic = require('./data/basic.raw');
6
6
  var basicFor = require('./data/basic-for.raw');
7
+ var className = require('./data/blocks/classname-jsx.raw');
7
8
  var submitButtonBlock = require('./data/blocks/submit-button.raw');
8
9
  var inputBlock = require('./data/blocks/input.raw');
9
10
  var selectBlock = require('./data/blocks/select.raw');
@@ -26,6 +27,11 @@ var onMount = require('./data/blocks/onMount.raw');
26
27
  var stamped = require('./data/blocks/stamped-io.raw');
27
28
  var shadowDom = require('./data/blocks/shadow-dom.raw');
28
29
  describe('Html', function () {
30
+ test('className', function () {
31
+ var component = (0, jsx_1.parseJsx)(className);
32
+ var output = (0, html_1.componentToHtml)()({ component: component });
33
+ expect(output).toMatchSnapshot();
34
+ });
29
35
  test('Basic', function () {
30
36
  var component = (0, jsx_1.parseJsx)(basic);
31
37
  var output = (0, html_1.componentToHtml)()({ component: component });
@@ -19,6 +19,7 @@ var stamped = require('./data/blocks/stamped-io.raw');
19
19
  var embed = require('./data/blocks/embed.raw');
20
20
  var image = require('./data/blocks/image.raw');
21
21
  var columns = require('./data/blocks/columns.raw');
22
+ var classNameJsx = require('./data/blocks/classname-jsx.raw');
22
23
  describe('Liquid', function () {
23
24
  test('Basic', function () {
24
25
  var component = (0, jsx_1.parseJsx)(basic);
@@ -105,4 +106,9 @@ describe('Liquid', function () {
105
106
  var output = (0, liquid_1.componentToLiquid)()({ component: component });
106
107
  expect(output).toMatchSnapshot();
107
108
  });
109
+ test('ClassName', function () {
110
+ var component = (0, jsx_1.parseJsx)(classNameJsx);
111
+ var output = (0, liquid_1.componentToLiquid)()({ component: component });
112
+ expect(output).toMatchSnapshot();
113
+ });
108
114
  });
@@ -103,5 +103,6 @@ function srcSet(url, additionalSizes) {
103
103
  parsedUrl.searchParams.set('width', size);
104
104
  return "".concat(parsedUrl, " ").concat(size, "w");
105
105
  })
106
+ .concat([url.replace('?format=webp', '')])
106
107
  .join(', ');
107
108
  }
@@ -395,16 +395,24 @@ describe('qwik', function () {
395
395
  });
396
396
  }); });
397
397
  describe('src-generator', function () {
398
- test('should format code', function () {
399
- var file = new qwik_1.File('test.js', {
398
+ var file;
399
+ beforeEach(function () {
400
+ return (file = new qwik_1.File('test.js', {
400
401
  isPretty: true,
401
402
  isTypeScript: false,
402
403
  isJSX: true,
403
404
  isModule: true,
404
- }, '', '');
405
+ }, '', ''));
406
+ });
407
+ test('should format code', function () {
405
408
  file.src.emit('const x=1');
406
409
  expect(file.toString()).toEqual('const x = 1;\n');
407
410
  });
411
+ test('should deal with empty bindings', function () {
412
+ file.src.jsxBegin('Image', {}, { image: '' });
413
+ file.src.jsxEnd('Image');
414
+ expect(file.toString()).toEqual('<Image></Image>;\n');
415
+ });
408
416
  });
409
417
  describe('helper functions', function () {
410
418
  describe('isStatement', function () {
@@ -24,7 +24,7 @@ var onUpdateWithDeps = require('./data/blocks/onUpdateWithDeps.raw');
24
24
  var multipleOnUpdate = require('./data/blocks/multiple-onUpdate.raw');
25
25
  var multipleOnUpdateWithDeps = require('./data/blocks/multiple-onUpdateWithDeps.raw');
26
26
  var onMount = require('./data/blocks/onMount.raw');
27
- describe('React', function () {
27
+ describe('React Native', function () {
28
28
  test('Basic', function () {
29
29
  var component = (0, jsx_1.parseJsx)(basic);
30
30
  var output = (0, react_native_1.componentToReactNative)()({ component: component });
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var react_1 = require("../generators/react");
4
4
  var jsx_1 = require("../parsers/jsx");
5
5
  var basic = require('./data/basic.raw');
6
+ var basicChildComponent = require('./data/basic-child-component.raw');
6
7
  var basicFor = require('./data/basic-for.raw');
7
8
  var submitButtonBlock = require('./data/blocks/submit-button.raw');
8
9
  var inputBlock = require('./data/blocks/input.raw');
@@ -57,6 +58,11 @@ describe('React', function () {
57
58
  var output = (0, react_1.componentToReact)()({ component: component });
58
59
  expect(output).toMatchSnapshot();
59
60
  });
61
+ test('Basic Child Component', function () {
62
+ var component = (0, jsx_1.parseJsx)(basicChildComponent);
63
+ var output = (0, react_1.componentToReact)()({ component: component });
64
+ expect(output).toMatchSnapshot();
65
+ });
60
66
  test('BasicFor', function () {
61
67
  var component = (0, jsx_1.parseJsx)(basicFor);
62
68
  var output = (0, react_1.componentToReact)()({ component: component });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var jsx_1 = require("../parsers/jsx");
4
+ var classRaw = require('./data/styles/class.raw');
5
+ var className = require('./data/styles/className.raw');
6
+ var classAndClassName = require('./data/styles/class-and-className.raw');
7
+ describe('Styles', function () {
8
+ test('class and className are equivalent', function () {
9
+ expect((0, jsx_1.parseJsx)(classRaw)).toMatchSnapshot(className);
10
+ });
11
+ test('class and className are merged', function () {
12
+ var component = (0, jsx_1.parseJsx)(classAndClassName);
13
+ expect(component).toMatchSnapshot();
14
+ });
15
+ });
@@ -13,6 +13,7 @@ var rootShow = require('./data/blocks/rootShow.raw');
13
13
  var simpleExample = require('./data/context/simple.context.lite');
14
14
  var componentWithContext = require('./data/context/component-with-context.lite');
15
15
  var renderBlock = require('./data/blocks/builder-render-block.raw');
16
+ var text = require('./data/blocks/text.raw');
16
17
  describe('Svelte', function () {
17
18
  test('onUpdate', function () {
18
19
  var component = (0, jsx_1.parseJsx)(onUpdate);
@@ -67,4 +68,9 @@ describe('Svelte', function () {
67
68
  expect(output).toMatchSnapshot();
68
69
  });
69
70
  });
71
+ test('Text', function () {
72
+ var component = (0, jsx_1.parseJsx)(text);
73
+ var output = (0, svelte_2.componentToSvelte)()({ component: component });
74
+ expect(output).toMatchSnapshot();
75
+ });
70
76
  });
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var html_1 = require("../generators/html");
4
4
  var jsx_1 = require("../parsers/jsx");
5
5
  var basic = require('./data/basic.raw');
6
+ var basicChildComponent = require('./data/basic-child-component.raw');
6
7
  var basicFor = require('./data/basic-for.raw');
7
8
  var basicForShow = require('./data/basic-for-show.raw');
8
9
  var basicOnMountUpdate = require('./data/basic-onMount-update.raw');
@@ -35,6 +36,11 @@ describe('webcomponent', function () {
35
36
  var output = (0, html_1.componentToCustomElement)()({ component: component });
36
37
  expect(output).toMatchSnapshot();
37
38
  });
39
+ test('Basic Child Component', function () {
40
+ var component = (0, jsx_1.parseJsx)(basicChildComponent);
41
+ var output = (0, html_1.componentToCustomElement)()({ component: component });
42
+ expect(output).toMatchSnapshot();
43
+ });
38
44
  test('BasicFor', function () {
39
45
  var component = (0, jsx_1.parseJsx)(basicFor);
40
46
  var output = (0, html_1.componentToCustomElement)()({ component: component });
@@ -44,18 +44,22 @@ var mappers = {
44
44
  Slot: function (json, options, blockOptions) {
45
45
  return "<ng-content ".concat(Object.keys(json.bindings)
46
46
  .map(function (binding) {
47
- var _a;
47
+ var _a, _b, _c;
48
48
  if (binding === 'name') {
49
- var selector = (0, lodash_1.kebabCase)((_a = json.bindings.name) === null || _a === void 0 ? void 0 : _a.replace('props.slot', ''));
49
+ var selector = (0, lodash_1.kebabCase)((_b = (_a = json.bindings.name) === null || _a === void 0 ? void 0 : _a.code) === null || _b === void 0 ? void 0 : _b.replace('props.slot', ''));
50
50
  return "select=\"[".concat(selector, "]\"");
51
51
  }
52
- return "".concat(json.bindings[binding]);
52
+ return "".concat((_c = json.bindings[binding]) === null || _c === void 0 ? void 0 : _c.code);
53
53
  })
54
54
  .join('\n'), "></ng-content>");
55
55
  },
56
56
  };
57
+ // TODO: Maybe in the future allow defining `string | function` as values
58
+ var BINDINGS_MAPPER = {
59
+ innerHTML: 'innerHTML',
60
+ };
57
61
  var blockToAngular = function (json, options, blockOptions) {
58
- var _a;
62
+ var _a, _b, _c, _d, _e, _f;
59
63
  if (options === void 0) { options = {}; }
60
64
  if (blockOptions === void 0) { blockOptions = {}; }
61
65
  var contextVars = (blockOptions === null || blockOptions === void 0 ? void 0 : blockOptions.contextVars) || [];
@@ -70,12 +74,12 @@ var blockToAngular = function (json, options, blockOptions) {
70
74
  if (json.properties._text) {
71
75
  return json.properties._text;
72
76
  }
73
- if (/props\.slot/.test(json.bindings._text)) {
74
- var selector = (0, lodash_1.kebabCase)((_a = json.bindings._text) === null || _a === void 0 ? void 0 : _a.replace('props.slot', ''));
77
+ if (/props\.slot/.test((_a = json.bindings._text) === null || _a === void 0 ? void 0 : _a.code)) {
78
+ var selector = (0, lodash_1.kebabCase)((_c = (_b = json.bindings._text) === null || _b === void 0 ? void 0 : _b.code) === null || _c === void 0 ? void 0 : _c.replace('props.slot', ''));
75
79
  return "<ng-content select=\"[".concat(selector, "]\"></ng-content>");
76
80
  }
77
- if (json.bindings._text) {
78
- return "{{".concat((0, strip_state_and_props_refs_1.stripStateAndPropsRefs)(json.bindings._text, {
81
+ if ((_d = json.bindings._text) === null || _d === void 0 ? void 0 : _d.code) {
82
+ return "{{".concat((0, strip_state_and_props_refs_1.stripStateAndPropsRefs)(json.bindings._text.code, {
79
83
  contextVars: contextVars,
80
84
  outputVars: outputVars,
81
85
  }), "}}");
@@ -83,7 +87,7 @@ var blockToAngular = function (json, options, blockOptions) {
83
87
  var str = '';
84
88
  var needsToRenderSlots = [];
85
89
  if (json.name === 'For') {
86
- str += "<ng-container *ngFor=\"let ".concat(json.properties._forName, " of ").concat((0, strip_state_and_props_refs_1.stripStateAndPropsRefs)(json.bindings.each, {
90
+ str += "<ng-container *ngFor=\"let ".concat(json.properties._forName, " of ").concat((0, strip_state_and_props_refs_1.stripStateAndPropsRefs)((_e = json.bindings.each) === null || _e === void 0 ? void 0 : _e.code, {
87
91
  contextVars: contextVars,
88
92
  outputVars: outputVars,
89
93
  }), "\">");
@@ -93,7 +97,7 @@ var blockToAngular = function (json, options, blockOptions) {
93
97
  str += "</ng-container>";
94
98
  }
95
99
  else if (json.name === 'Show') {
96
- str += "<ng-container *ngIf=\"".concat((0, strip_state_and_props_refs_1.stripStateAndPropsRefs)(json.bindings.when, { contextVars: contextVars, outputVars: outputVars }), "\">");
100
+ str += "<ng-container *ngIf=\"".concat((0, strip_state_and_props_refs_1.stripStateAndPropsRefs)((_f = json.bindings.when) === null || _f === void 0 ? void 0 : _f.code, { contextVars: contextVars, outputVars: outputVars }), "\">");
97
101
  str += json.children
98
102
  .map(function (item) { return (0, exports.blockToAngular)(item, options, blockOptions); })
99
103
  .join('\n');
@@ -115,12 +119,7 @@ var blockToAngular = function (json, options, blockOptions) {
115
119
  continue;
116
120
  }
117
121
  var value = json.properties[key];
118
- if (key === 'className') {
119
- str += " class=\"".concat(value, "\" ");
120
- }
121
- else {
122
- str += " ".concat(key, "=\"").concat(value, "\" ");
123
- }
122
+ str += " ".concat(key, "=\"").concat(value, "\" ");
124
123
  }
125
124
  for (var key in json.bindings) {
126
125
  if (key === '_spread') {
@@ -129,9 +128,9 @@ var blockToAngular = function (json, options, blockOptions) {
129
128
  if (key.startsWith('$')) {
130
129
  continue;
131
130
  }
132
- var value = json.bindings[key];
131
+ var _g = json.bindings[key], code = _g.code, _h = _g.arguments, cusArgs = _h === void 0 ? ['event'] : _h;
133
132
  // TODO: proper babel transform to replace. Util for this
134
- var useValue = (0, strip_state_and_props_refs_1.stripStateAndPropsRefs)(value, {
133
+ var useValue = (0, strip_state_and_props_refs_1.stripStateAndPropsRefs)(code, {
135
134
  contextVars: contextVars,
136
135
  outputVars: outputVars,
137
136
  });
@@ -142,10 +141,10 @@ var blockToAngular = function (json, options, blockOptions) {
142
141
  event_1 = 'input';
143
142
  }
144
143
  // TODO: proper babel transform to replace. Util for this
145
- var finalValue = (0, remove_surrounding_block_1.removeSurroundingBlock)(useValue.replace(/event\./g, '$event.'));
144
+ var finalValue = (0, remove_surrounding_block_1.removeSurroundingBlock)(useValue.replace(new RegExp("".concat(cusArgs[0], "\\."), 'g'), '$event.'));
146
145
  str += " (".concat(event_1, ")=\"").concat(finalValue, "\" ");
147
146
  }
148
- else if (key === 'className') {
147
+ else if (key === 'class') {
149
148
  str += " [class]=\"".concat(useValue, "\" ");
150
149
  }
151
150
  else if (key === 'ref') {
@@ -156,8 +155,11 @@ var blockToAngular = function (json, options, blockOptions) {
156
155
  key.replace('slot', '').substring(1);
157
156
  needsToRenderSlots.push("".concat(useValue.replace(/(\/\>)|\>/, " ".concat(lowercaseKey, ">"))));
158
157
  }
158
+ else if (BINDINGS_MAPPER[key]) {
159
+ str += " [".concat(BINDINGS_MAPPER[key], "]=\"").concat(useValue.replace(/"/g, "\\'"), "\" ");
160
+ }
159
161
  else {
160
- str += " [".concat(key, "]=\"").concat(useValue, "\" ");
162
+ str += " [".concat(key, "]='").concat(useValue, "' ");
161
163
  }
162
164
  }
163
165
  if (jsx_1.selfClosingTags.has(json.name)) {
@@ -10,7 +10,7 @@ declare type InternalOptions = {
10
10
  export declare const blockToBuilder: (json: MitosisNode, options?: ToBuilderOptions, _internalOptions?: InternalOptions) => BuilderElement;
11
11
  export declare const componentToBuilder: (options?: ToBuilderOptions) => ({ component }: TranspilerArgs) => {
12
12
  data: {
13
- httpRequests: any;
13
+ httpRequests: import("../types/json").JSON;
14
14
  jsCode: string;
15
15
  tsCode: string;
16
16
  blocks: BuilderElement[];
@@ -57,8 +57,7 @@ var componentMappers = __assign(__assign({}, (!builder_1.symbolBlocksAsChildren
57
57
  : {
58
58
  Symbol: function (node, options) {
59
59
  var child = node.children[0];
60
- var symbolOptions = (node.bindings.symbol &&
61
- json5_1.default.parse(node.bindings.symbol)) ||
60
+ var symbolOptions = (node.bindings.symbol && json5_1.default.parse(node.bindings.symbol.code)) ||
62
61
  {};
63
62
  if (child) {
64
63
  (0, lodash_1.set)(symbolOptions, 'content.data.blocks', child.children.map(function (item) { return (0, exports.blockToBuilder)(item, options); }));
@@ -82,12 +81,13 @@ var componentMappers = __assign(__assign({}, (!builder_1.symbolBlocksAsChildren
82
81
  block.children = [];
83
82
  return block;
84
83
  }, For: function (node, options) {
84
+ var _a;
85
85
  return el({
86
86
  component: {
87
87
  name: 'Core:Fragment',
88
88
  },
89
89
  repeat: {
90
- collection: node.bindings.each,
90
+ collection: (_a = node.bindings.each) === null || _a === void 0 ? void 0 : _a.code,
91
91
  itemName: node.properties._forName,
92
92
  },
93
93
  children: node.children
@@ -95,13 +95,14 @@ var componentMappers = __assign(__assign({}, (!builder_1.symbolBlocksAsChildren
95
95
  .map(function (node) { return (0, exports.blockToBuilder)(node, options); }),
96
96
  }, options);
97
97
  }, Show: function (node, options) {
98
+ var _a;
98
99
  return el({
99
100
  // TODO: the reverse mapping for this
100
101
  component: {
101
102
  name: 'Core:Fragment',
102
103
  },
103
104
  bindings: {
104
- show: node.bindings.when,
105
+ show: (_a = node.bindings.when) === null || _a === void 0 ? void 0 : _a.code,
105
106
  },
106
107
  children: node.children
107
108
  .filter(filter_empty_text_nodes_1.filterEmptyTextNodes)
@@ -129,20 +130,20 @@ function tryFormat(code) {
129
130
  }
130
131
  var blockToBuilder = function (json, options, _internalOptions) {
131
132
  var _a;
132
- var _b;
133
+ var _b, _c, _d, _e, _f, _g;
133
134
  if (options === void 0) { options = {}; }
134
135
  if (_internalOptions === void 0) { _internalOptions = {}; }
135
136
  var mapper = !_internalOptions.skipMapper && componentMappers[json.name];
136
137
  if (mapper) {
137
138
  return mapper(json, options);
138
139
  }
139
- if (json.properties._text || json.bindings._text) {
140
+ if (json.properties._text || ((_b = json.bindings._text) === null || _b === void 0 ? void 0 : _b.code)) {
140
141
  return el({
141
142
  tagName: 'span',
142
- bindings: __assign({}, (json.bindings._text
143
+ bindings: __assign({}, (((_c = json.bindings._text) === null || _c === void 0 ? void 0 : _c.code)
143
144
  ? {
144
- 'component.options.text': json.bindings._text,
145
- 'json.bindings._text': undefined,
145
+ 'component.options.text': json.bindings._text.code,
146
+ 'json.bindings._text.code': undefined,
146
147
  }
147
148
  : {})),
148
149
  component: {
@@ -158,9 +159,9 @@ var blockToBuilder = function (json, options, _internalOptions) {
158
159
  var actions = {};
159
160
  for (var key in bindings) {
160
161
  var eventBindingKeyRegex = /^on([A-Z])/;
161
- var firstCharMatchForEventBindingKey = (_b = key.match(eventBindingKeyRegex)) === null || _b === void 0 ? void 0 : _b[1];
162
+ var firstCharMatchForEventBindingKey = (_d = key.match(eventBindingKeyRegex)) === null || _d === void 0 ? void 0 : _d[1];
162
163
  if (firstCharMatchForEventBindingKey) {
163
- actions[key.replace(eventBindingKeyRegex, firstCharMatchForEventBindingKey.toLowerCase())] = (0, remove_surrounding_block_1.removeSurroundingBlock)(bindings[key]);
164
+ actions[key.replace(eventBindingKeyRegex, firstCharMatchForEventBindingKey.toLowerCase())] = (0, remove_surrounding_block_1.removeSurroundingBlock)((_e = bindings[key]) === null || _e === void 0 ? void 0 : _e.code);
164
165
  delete bindings[key];
165
166
  }
166
167
  }
@@ -172,7 +173,7 @@ var blockToBuilder = function (json, options, _internalOptions) {
172
173
  return "continue";
173
174
  }
174
175
  var value = bindings[key];
175
- var parsed = (0, lodash_1.attempt)(function () { return json5_1.default.parse(value); });
176
+ var parsed = (0, lodash_1.attempt)(function () { return json5_1.default.parse(value === null || value === void 0 ? void 0 : value.code); });
176
177
  if (!(parsed instanceof Error)) {
177
178
  componentOptions[key] = parsed;
178
179
  }
@@ -184,12 +185,12 @@ var blockToBuilder = function (json, options, _internalOptions) {
184
185
  _loop_1(key);
185
186
  }
186
187
  }
187
- var hasCss = !!bindings.css;
188
+ var hasCss = !!((_f = bindings.css) === null || _f === void 0 ? void 0 : _f.code);
188
189
  var responsiveStyles = {
189
190
  large: {},
190
191
  };
191
192
  if (hasCss) {
192
- var cssRules = json5_1.default.parse(bindings.css);
193
+ var cssRules = json5_1.default.parse((_g = bindings.css) === null || _g === void 0 ? void 0 : _g.code);
193
194
  var cssRuleKeys = Object.keys(cssRules);
194
195
  for (var _i = 0, cssRuleKeys_1 = cssRuleKeys; _i < cssRuleKeys_1.length; _i++) {
195
196
  var ruleKey = cssRuleKeys_1[_i];
@@ -223,9 +224,7 @@ var blockToBuilder = function (json, options, _internalOptions) {
223
224
  actions: actions,
224
225
  }, properties: thisIsComponent
225
226
  ? undefined
226
- : omitMetaProperties(json.properties), bindings: thisIsComponent
227
- ? builderBindings
228
- : (0, lodash_1.omit)(bindings, 'css'), actions: actions, children: json.children
227
+ : omitMetaProperties(json.properties), bindings: thisIsComponent ? builderBindings : (0, lodash_1.omit)(bindings, 'css'), actions: actions, children: json.children
229
228
  .filter(filter_empty_text_nodes_1.filterEmptyTextNodes)
230
229
  .map(function (child) { return (0, exports.blockToBuilder)(child, options); }) }), options);
231
230
  };