@makeswift/runtime 0.19.1 → 0.19.2-canary.1
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/cjs/controls/style.js +8 -2
- package/dist/cjs/controls/style.js.map +1 -1
- package/dist/cjs/jest-setup.js +4 -0
- package/dist/cjs/jest-setup.js.map +1 -1
- package/dist/cjs/mocks/server.js +30 -0
- package/dist/cjs/mocks/server.js.map +1 -0
- package/dist/cjs/next/api-handler/handlers/manifest.js +1 -1
- package/dist/cjs/next/components/tests/controls/page-control-prop-rendering.js +91 -0
- package/dist/cjs/next/components/tests/controls/page-control-prop-rendering.js.map +1 -0
- package/dist/cjs/next/components/tests/{page-prop-controller.js → prop-controllers/page-prop-controller.js} +4 -4
- package/dist/cjs/next/components/tests/prop-controllers/page-prop-controller.js.map +1 -0
- package/dist/cjs/prop-controllers/introspection.js +3 -0
- package/dist/cjs/prop-controllers/introspection.js.map +1 -1
- package/dist/cjs/utils/tests/element-data-test-test.js +4 -4
- package/dist/cjs/utils/tests/element-data-test-test.js.map +1 -1
- package/dist/esm/controls/style.js +6 -1
- package/dist/esm/controls/style.js.map +1 -1
- package/dist/esm/jest-setup.js +4 -0
- package/dist/esm/jest-setup.js.map +1 -1
- package/dist/esm/mocks/server.js +6 -0
- package/dist/esm/mocks/server.js.map +1 -0
- package/dist/esm/next/api-handler/handlers/manifest.js +1 -1
- package/dist/esm/next/components/tests/controls/page-control-prop-rendering.js +70 -0
- package/dist/esm/next/components/tests/controls/page-control-prop-rendering.js.map +1 -0
- package/dist/esm/next/components/tests/{page-prop-controller.js → prop-controllers/page-prop-controller.js} +4 -4
- package/dist/esm/next/components/tests/prop-controllers/page-prop-controller.js.map +1 -0
- package/dist/esm/prop-controllers/introspection.js +5 -0
- package/dist/esm/prop-controllers/introspection.js.map +1 -1
- package/dist/esm/utils/tests/element-data-test-test.js +4 -4
- package/dist/esm/utils/tests/element-data-test-test.js.map +1 -1
- package/dist/types/controls/style.d.ts +1 -0
- package/dist/types/controls/style.d.ts.map +1 -1
- package/dist/types/mocks/server.d.ts +2 -0
- package/dist/types/mocks/server.d.ts.map +1 -0
- package/dist/types/next/components/tests/controls/checkbox-control.test.d.ts +2 -0
- package/dist/types/next/components/tests/controls/checkbox-control.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/controls/color-control.test.d.ts +3 -0
- package/dist/types/next/components/tests/controls/color-control.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/controls/page-control-prop-rendering.d.ts +12 -0
- package/dist/types/next/components/tests/controls/page-control-prop-rendering.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-backgrounds-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-border-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-date-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-element-id-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-font-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-gap-x-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-gap-y-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-grid-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-image-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-images-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-link-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-margin-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-navigation-links-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-padding-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/{page-prop-controller.d.ts → prop-controllers/page-prop-controller.d.ts} +1 -1
- package/dist/types/next/components/tests/prop-controllers/page-prop-controller.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-responsive-icon-radio-group-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-responsive-number-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-responsive-opacity-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-responsive-select-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-social-links-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-table-form-fields-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-table-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-text-area-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-text-input-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-text-style-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-video-prop-controller.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/prop-controllers/page-width-prop-controller.test.d.ts.map +1 -0
- package/dist/types/prop-controllers/introspection.d.ts.map +1 -1
- package/dist/types/utils/tests/element-data-test-test.d.ts +2 -2
- package/dist/types/utils/tests/element-data-test-test.d.ts.map +1 -1
- package/package.json +5 -4
- package/dist/cjs/next/components/tests/page-prop-controller.js.map +0 -1
- package/dist/esm/next/components/tests/page-prop-controller.js.map +0 -1
- package/dist/types/next/components/tests/page-backgrounds-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-border-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-date-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-element-id-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-font-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-gap-x-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-gap-y-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-grid-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-image-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-images-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-link-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-margin-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-navigation-links-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-padding-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-prop-controller.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-responsive-icon-radio-group-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-responsive-number-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-responsive-opacity-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-responsive-select-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-social-links-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-table-form-fields-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-table-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-text-area-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-text-input-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-text-style-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-video-prop-controller.test.d.ts.map +0 -1
- package/dist/types/next/components/tests/page-width-prop-controller.test.d.ts.map +0 -1
- /package/dist/types/next/components/tests/{page-backgrounds-prop-controller.test.d.ts → prop-controllers/page-backgrounds-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-border-prop-controller.test.d.ts → prop-controllers/page-border-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-date-prop-controller.test.d.ts → prop-controllers/page-date-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-element-id-prop-controller.test.d.ts → prop-controllers/page-element-id-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-font-prop-controller.test.d.ts → prop-controllers/page-font-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-gap-x-prop-controller.test.d.ts → prop-controllers/page-gap-x-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-gap-y-prop-controller.test.d.ts → prop-controllers/page-gap-y-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-grid-prop-controller.test.d.ts → prop-controllers/page-grid-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-image-prop-controller.test.d.ts → prop-controllers/page-image-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-images-prop-controller.test.d.ts → prop-controllers/page-images-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-link-prop-controller.test.d.ts → prop-controllers/page-link-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-margin-prop-controller.test.d.ts → prop-controllers/page-margin-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-navigation-links-prop-controller.test.d.ts → prop-controllers/page-navigation-links-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-padding-prop-controller.test.d.ts → prop-controllers/page-padding-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-responsive-icon-radio-group-prop-controller.test.d.ts → prop-controllers/page-responsive-icon-radio-group-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-responsive-number-prop-controller.test.d.ts → prop-controllers/page-responsive-number-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-responsive-opacity-prop-controller.test.d.ts → prop-controllers/page-responsive-opacity-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-responsive-select-prop-controller.test.d.ts → prop-controllers/page-responsive-select-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-social-links-prop-controller.test.d.ts → prop-controllers/page-social-links-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-table-form-fields-prop-controller.test.d.ts → prop-controllers/page-table-form-fields-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-table-prop-controller.test.d.ts → prop-controllers/page-table-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-text-area-prop-controller.test.d.ts → prop-controllers/page-text-area-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-text-input-prop-controller.test.d.ts → prop-controllers/page-text-input-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-text-style-prop-controller.test.d.ts → prop-controllers/page-text-style-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-video-prop-controller.test.d.ts → prop-controllers/page-video-prop-controller.test.d.ts} +0 -0
- /package/dist/types/next/components/tests/{page-width-prop-controller.test.d.ts → prop-controllers/page-width-prop-controller.test.d.ts} +0 -0
|
@@ -23,10 +23,12 @@ __export(style_exports, {
|
|
|
23
23
|
StyleControlMessageType: () => StyleControlMessageType,
|
|
24
24
|
StyleControlProperty: () => StyleControlProperty,
|
|
25
25
|
StyleControlType: () => StyleControlType,
|
|
26
|
-
copyStyleData: () => copyStyleData
|
|
26
|
+
copyStyleData: () => copyStyleData,
|
|
27
|
+
getStyleSwatchIds: () => getStyleSwatchIds
|
|
27
28
|
});
|
|
28
29
|
module.exports = __toCommonJS(style_exports);
|
|
29
30
|
var import_controls = require("@makeswift/controls");
|
|
31
|
+
var import_prop_controllers = require("@makeswift/prop-controllers");
|
|
30
32
|
var import_base = require("../prop-controllers/base");
|
|
31
33
|
const StyleControlType = "makeswift::controls::style";
|
|
32
34
|
const StyleControlProperty = {
|
|
@@ -76,6 +78,9 @@ class StyleControl extends import_base.PropController {
|
|
|
76
78
|
recv() {
|
|
77
79
|
}
|
|
78
80
|
}
|
|
81
|
+
function getStyleSwatchIds(data) {
|
|
82
|
+
return (0, import_prop_controllers.getBorderPropControllerDataSwatchIds)(data.border);
|
|
83
|
+
}
|
|
79
84
|
function copyStyleData(value, context) {
|
|
80
85
|
if (value == null)
|
|
81
86
|
return value;
|
|
@@ -114,6 +119,7 @@ function copyStyleData(value, context) {
|
|
|
114
119
|
StyleControlMessageType,
|
|
115
120
|
StyleControlProperty,
|
|
116
121
|
StyleControlType,
|
|
117
|
-
copyStyleData
|
|
122
|
+
copyStyleData,
|
|
123
|
+
getStyleSwatchIds
|
|
118
124
|
});
|
|
119
125
|
//# sourceMappingURL=style.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/controls/style.ts"],"sourcesContent":["import { ColorData, copyColorData, ResponsiveValue } from '@makeswift/controls'\nimport { BorderRadiusPropertyData } from '../css/border-radius'\nimport type { LengthPercentageData } from '../css/length-percentage'\nimport { MarginPropertyData } from '../css/margin'\nimport { PaddingPropertyData } from '../css/padding'\nimport { CopyContext } from '../state/react-page'\nimport { Send } from '../prop-controllers/instances'\nimport { PropController } from '../prop-controllers/base'\nimport { BoxModel } from '../state/modules/box-models'\n\n/** @see https://developer.mozilla.org/en-US/docs/Web/CSS/width */\nexport type WidthPropertyData = LengthPercentageData\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-style\n */\ntype BorderStyle = 'dotted' | 'dashed' | 'solid'\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-top#constituent_properties\n *\n * @todos\n * - Change `width` to be a `Length`\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderSideShorthandPropertyData = {\n width: number | null | undefined\n style: BorderStyle\n color?: ColorData | null\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border\n *\n * @todos\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderPropertyData = {\n borderTop: BorderSideShorthandPropertyData | null | undefined\n borderRight: BorderSideShorthandPropertyData | null | undefined\n borderBottom: BorderSideShorthandPropertyData | null | undefined\n borderLeft: BorderSideShorthandPropertyData | null | undefined\n}\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-family\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontFamilyPropertyData = string | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type LetterSpacingPropertyData = number | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-size\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontSizePropertyData =\n | {\n value: number\n unit: 'px'\n }\n | null\n | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontWeightPropertyData = number | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform\n *\n * @todos\n * - Match the type with specification\n */\nexport type TextTransformPropertyData = 'uppercase'[]\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style\n *\n * @todos\n * - Match the type with specification\n */\nexport type FontStylePropertyData = 'italic'[]\n\n/**\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type TextStylePropertyData = {\n fontFamily?: FontFamilyPropertyData | null | undefined\n letterSpacing: LetterSpacingPropertyData | null | undefined\n fontSize: FontSizePropertyData | null | undefined\n fontWeight: FontWeightPropertyData | null | undefined\n textTransform: TextTransformPropertyData\n fontStyle: FontStylePropertyData\n}\n\n/**\n * Primitives like `string` and `number` are excluded from the style data because the relevant\n * panels from the Makeswift builder were originally implemented only to support object values, and\n * not CSS strings. For example, 100 pixels would be `{ value: 100, unit: 'px' }` but never `100` or\n * `'100px'`.\n */\nexport type StyleControlData = {\n width?: ResponsiveValue<Exclude<WidthPropertyData, string | number>>\n margin?: ResponsiveValue<{\n [K in keyof MarginPropertyData]: Exclude<MarginPropertyData[K], string | number> | 'auto'\n }>\n padding?: ResponsiveValue<{\n [K in keyof PaddingPropertyData]: Exclude<PaddingPropertyData[K], string | number>\n }>\n border?: ResponsiveValue<BorderPropertyData>\n borderRadius?: ResponsiveValue<{\n [K in keyof BorderRadiusPropertyData]: Exclude<BorderRadiusPropertyData[K], string | number>\n }>\n textStyle?: ResponsiveValue<TextStylePropertyData>\n}\n\nexport const StyleControlType = 'makeswift::controls::style'\n\nexport const StyleControlProperty = {\n Width: 'makeswift::controls::style::property::width',\n Margin: 'makeswift::controls::style::property::margin',\n Padding: 'makeswift::controls::style::property::padding',\n Border: 'makeswift::controls::style::property::border',\n BorderRadius: 'makeswift::controls::style::property::border-radius',\n TextStyle: 'makeswift::controls::style::property::text-style',\n} as const\n\nexport type StyleControlProperty = typeof StyleControlProperty[keyof typeof StyleControlProperty]\n\ntype StyleControlParams = { properties?: StyleControlProperty[] }\n\nexport type StyleControlConfig = { properties: StyleControlProperty[] }\n\nconst StyleControlDefaultProperties: StyleControlProperty[] = [\n StyleControlProperty.Width,\n StyleControlProperty.Margin,\n]\n\nconst AllStyleControlProperties: StyleControlProperty[] = [\n StyleControlProperty.Width,\n StyleControlProperty.Margin,\n StyleControlProperty.Padding,\n StyleControlProperty.Border,\n StyleControlProperty.BorderRadius,\n StyleControlProperty.TextStyle,\n]\n\nexport type StyleControlDefinition = {\n type: typeof StyleControlType\n config: StyleControlConfig\n}\n\n/**\n * @todos\n * - Add support for custom panel labels.\n * - Add support for default values. Internally, default values must be represented with the same\n * format as the underlying data so that controls can show these values.\n */\nexport function Style(params?: StyleControlParams): StyleControlDefinition {\n return {\n type: StyleControlType,\n config: { properties: params?.properties ?? StyleControlDefaultProperties },\n }\n}\n\nStyle.Default = StyleControlDefaultProperties\nStyle.All = AllStyleControlProperties\n\nStyle.Width = StyleControlProperty.Width\nStyle.Margin = StyleControlProperty.Margin\nStyle.Padding = StyleControlProperty.Padding\nStyle.Border = StyleControlProperty.Border\nStyle.BorderRadius = StyleControlProperty.BorderRadius\nStyle.TextStyle = StyleControlProperty.TextStyle\n\nexport const StyleControlMessageType = {\n CHANGE_BOX_MODEL: 'makeswift::controls::style::message::change-box-model',\n} as const\n\ntype StyleControlItemBoxModelChangeMessage = {\n type: typeof StyleControlMessageType.CHANGE_BOX_MODEL\n payload: { boxModel: BoxModel | null }\n}\n\nexport type StyleControlMessage = StyleControlItemBoxModelChangeMessage\n\nexport class StyleControl extends PropController<StyleControlMessage> {\n constructor(send: Send<StyleControlMessage>) {\n super(send)\n }\n\n changeBoxModel(boxModel: BoxModel | null): void {\n this.send({ type: StyleControlMessageType.CHANGE_BOX_MODEL, payload: { boxModel } })\n }\n\n recv() {}\n}\n\nexport function copyStyleData(\n value: StyleControlData | undefined,\n context: CopyContext,\n): StyleControlData | undefined {\n if (value == null) return value\n\n function copyResponsiveBorder(\n responsiveBorder: ResponsiveValue<BorderPropertyData> | undefined,\n ): ResponsiveValue<BorderPropertyData> | undefined {\n if (responsiveBorder == null) return undefined\n return responsiveBorder.map(deviceBorder => ({\n ...deviceBorder,\n value: copyBorder(deviceBorder.value),\n }))\n }\n\n function copyBorder(border: BorderPropertyData): BorderPropertyData {\n function copyBorderSide(side: BorderSideShorthandPropertyData | null | undefined) {\n if (side == null) return null\n\n if (side.color == null) return side\n\n return {\n ...side,\n color: copyColorData(side.color, context),\n }\n }\n\n return {\n borderTop: copyBorderSide(border.borderTop),\n borderBottom: copyBorderSide(border.borderBottom),\n borderRight: copyBorderSide(border.borderRight),\n borderLeft: copyBorderSide(border.borderLeft),\n }\n }\n\n return { ...value, border: copyResponsiveBorder(value.border) }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAA0D;AAO1D,kBAA+B;AAoIxB,MAAM,mBAAmB;AAEzB,MAAM,uBAAuB;AAAA,EAClC,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,WAAW;AACb;AAQA,MAAM,gCAAwD;AAAA,EAC5D,qBAAqB;AAAA,EACrB,qBAAqB;AACvB;AAEA,MAAM,4BAAoD;AAAA,EACxD,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AACvB;AAaO,SAAS,MAAM,QAAqD;AACzE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,EAAE,YAAY,QAAQ,cAAc,8BAA8B;AAAA,EAC5E;AACF;AAEA,MAAM,UAAU;AAChB,MAAM,MAAM;AAEZ,MAAM,QAAQ,qBAAqB;AACnC,MAAM,SAAS,qBAAqB;AACpC,MAAM,UAAU,qBAAqB;AACrC,MAAM,SAAS,qBAAqB;AACpC,MAAM,eAAe,qBAAqB;AAC1C,MAAM,YAAY,qBAAqB;AAEhC,MAAM,0BAA0B;AAAA,EACrC,kBAAkB;AACpB;AASO,MAAM,qBAAqB,2BAAoC;AAAA,EACpE,YAAY,MAAiC;AAC3C,UAAM,IAAI;AAAA,EACZ;AAAA,EAEA,eAAe,UAAiC;AAC9C,SAAK,KAAK,EAAE,MAAM,wBAAwB,kBAAkB,SAAS,EAAE,SAAS,EAAE,CAAC;AAAA,EACrF;AAAA,EAEA,OAAO;AAAA,EAAC;AACV;AAEO,SAAS,cACd,OACA,SAC8B;AAC9B,MAAI,SAAS;AAAM,WAAO;AAE1B,WAAS,qBACP,kBACiD;AACjD,QAAI,oBAAoB;AAAM,aAAO;AACrC,WAAO,iBAAiB,IAAI,mBAAiB;AAAA,MAC3C,GAAG;AAAA,MACH,OAAO,WAAW,aAAa,KAAK;AAAA,IACtC,EAAE;AAAA,EACJ;AAEA,WAAS,WAAW,QAAgD;AAClE,aAAS,eAAe,MAA0D;AAChF,UAAI,QAAQ;AAAM,eAAO;AAEzB,UAAI,KAAK,SAAS;AAAM,eAAO;AAE/B,aAAO;AAAA,QACL,GAAG;AAAA,QACH,WAAO,+BAAc,KAAK,OAAO,OAAO;AAAA,MAC1C;AAAA,IACF;AAEA,WAAO;AAAA,MACL,WAAW,eAAe,OAAO,SAAS;AAAA,MAC1C,cAAc,eAAe,OAAO,YAAY;AAAA,MAChD,aAAa,eAAe,OAAO,WAAW;AAAA,MAC9C,YAAY,eAAe,OAAO,UAAU;AAAA,IAC9C;AAAA,EACF;AAEA,SAAO,EAAE,GAAG,OAAO,QAAQ,qBAAqB,MAAM,MAAM,EAAE;AAChE;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/controls/style.ts"],"sourcesContent":["import { ColorData, copyColorData, ResponsiveValue } from '@makeswift/controls'\nimport { getBorderPropControllerDataSwatchIds } from '@makeswift/prop-controllers'\n\nimport { BorderRadiusPropertyData } from '../css/border-radius'\nimport type { LengthPercentageData } from '../css/length-percentage'\nimport { MarginPropertyData } from '../css/margin'\nimport { PaddingPropertyData } from '../css/padding'\nimport { CopyContext } from '../state/react-page'\nimport { Send } from '../prop-controllers/instances'\nimport { PropController } from '../prop-controllers/base'\nimport { BoxModel } from '../state/modules/box-models'\n\n/** @see https://developer.mozilla.org/en-US/docs/Web/CSS/width */\nexport type WidthPropertyData = LengthPercentageData\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-style\n */\ntype BorderStyle = 'dotted' | 'dashed' | 'solid'\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-top#constituent_properties\n *\n * @todos\n * - Change `width` to be a `Length`\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderSideShorthandPropertyData = {\n width: number | null | undefined\n style: BorderStyle\n color?: ColorData | null\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border\n *\n * @todos\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderPropertyData = {\n borderTop: BorderSideShorthandPropertyData | null | undefined\n borderRight: BorderSideShorthandPropertyData | null | undefined\n borderBottom: BorderSideShorthandPropertyData | null | undefined\n borderLeft: BorderSideShorthandPropertyData | null | undefined\n}\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-family\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontFamilyPropertyData = string | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type LetterSpacingPropertyData = number | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-size\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontSizePropertyData =\n | {\n value: number\n unit: 'px'\n }\n | null\n | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontWeightPropertyData = number | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform\n *\n * @todos\n * - Match the type with specification\n */\nexport type TextTransformPropertyData = 'uppercase'[]\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style\n *\n * @todos\n * - Match the type with specification\n */\nexport type FontStylePropertyData = 'italic'[]\n\n/**\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type TextStylePropertyData = {\n fontFamily?: FontFamilyPropertyData | null | undefined\n letterSpacing: LetterSpacingPropertyData | null | undefined\n fontSize: FontSizePropertyData | null | undefined\n fontWeight: FontWeightPropertyData | null | undefined\n textTransform: TextTransformPropertyData\n fontStyle: FontStylePropertyData\n}\n\n/**\n * Primitives like `string` and `number` are excluded from the style data because the relevant\n * panels from the Makeswift builder were originally implemented only to support object values, and\n * not CSS strings. For example, 100 pixels would be `{ value: 100, unit: 'px' }` but never `100` or\n * `'100px'`.\n */\nexport type StyleControlData = {\n width?: ResponsiveValue<Exclude<WidthPropertyData, string | number>>\n margin?: ResponsiveValue<{\n [K in keyof MarginPropertyData]: Exclude<MarginPropertyData[K], string | number> | 'auto'\n }>\n padding?: ResponsiveValue<{\n [K in keyof PaddingPropertyData]: Exclude<PaddingPropertyData[K], string | number>\n }>\n border?: ResponsiveValue<BorderPropertyData>\n borderRadius?: ResponsiveValue<{\n [K in keyof BorderRadiusPropertyData]: Exclude<BorderRadiusPropertyData[K], string | number>\n }>\n textStyle?: ResponsiveValue<TextStylePropertyData>\n}\n\nexport const StyleControlType = 'makeswift::controls::style'\n\nexport const StyleControlProperty = {\n Width: 'makeswift::controls::style::property::width',\n Margin: 'makeswift::controls::style::property::margin',\n Padding: 'makeswift::controls::style::property::padding',\n Border: 'makeswift::controls::style::property::border',\n BorderRadius: 'makeswift::controls::style::property::border-radius',\n TextStyle: 'makeswift::controls::style::property::text-style',\n} as const\n\nexport type StyleControlProperty = typeof StyleControlProperty[keyof typeof StyleControlProperty]\n\ntype StyleControlParams = { properties?: StyleControlProperty[] }\n\nexport type StyleControlConfig = { properties: StyleControlProperty[] }\n\nconst StyleControlDefaultProperties: StyleControlProperty[] = [\n StyleControlProperty.Width,\n StyleControlProperty.Margin,\n]\n\nconst AllStyleControlProperties: StyleControlProperty[] = [\n StyleControlProperty.Width,\n StyleControlProperty.Margin,\n StyleControlProperty.Padding,\n StyleControlProperty.Border,\n StyleControlProperty.BorderRadius,\n StyleControlProperty.TextStyle,\n]\n\nexport type StyleControlDefinition = {\n type: typeof StyleControlType\n config: StyleControlConfig\n}\n\n/**\n * @todos\n * - Add support for custom panel labels.\n * - Add support for default values. Internally, default values must be represented with the same\n * format as the underlying data so that controls can show these values.\n */\nexport function Style(params?: StyleControlParams): StyleControlDefinition {\n return {\n type: StyleControlType,\n config: { properties: params?.properties ?? StyleControlDefaultProperties },\n }\n}\n\nStyle.Default = StyleControlDefaultProperties\nStyle.All = AllStyleControlProperties\n\nStyle.Width = StyleControlProperty.Width\nStyle.Margin = StyleControlProperty.Margin\nStyle.Padding = StyleControlProperty.Padding\nStyle.Border = StyleControlProperty.Border\nStyle.BorderRadius = StyleControlProperty.BorderRadius\nStyle.TextStyle = StyleControlProperty.TextStyle\n\nexport const StyleControlMessageType = {\n CHANGE_BOX_MODEL: 'makeswift::controls::style::message::change-box-model',\n} as const\n\ntype StyleControlItemBoxModelChangeMessage = {\n type: typeof StyleControlMessageType.CHANGE_BOX_MODEL\n payload: { boxModel: BoxModel | null }\n}\n\nexport type StyleControlMessage = StyleControlItemBoxModelChangeMessage\n\nexport class StyleControl extends PropController<StyleControlMessage> {\n constructor(send: Send<StyleControlMessage>) {\n super(send)\n }\n\n changeBoxModel(boxModel: BoxModel | null): void {\n this.send({ type: StyleControlMessageType.CHANGE_BOX_MODEL, payload: { boxModel } })\n }\n\n recv() {}\n}\n\nexport function getStyleSwatchIds(data: StyleControlData): string[] {\n return getBorderPropControllerDataSwatchIds(data.border)\n}\n\nexport function copyStyleData(\n value: StyleControlData | undefined,\n context: CopyContext,\n): StyleControlData | undefined {\n if (value == null) return value\n\n function copyResponsiveBorder(\n responsiveBorder: ResponsiveValue<BorderPropertyData> | undefined,\n ): ResponsiveValue<BorderPropertyData> | undefined {\n if (responsiveBorder == null) return undefined\n return responsiveBorder.map(deviceBorder => ({\n ...deviceBorder,\n value: copyBorder(deviceBorder.value),\n }))\n }\n\n function copyBorder(border: BorderPropertyData): BorderPropertyData {\n function copyBorderSide(side: BorderSideShorthandPropertyData | null | undefined) {\n if (side == null) return null\n\n if (side.color == null) return side\n\n return {\n ...side,\n color: copyColorData(side.color, context),\n }\n }\n\n return {\n borderTop: copyBorderSide(border.borderTop),\n borderBottom: copyBorderSide(border.borderBottom),\n borderRight: copyBorderSide(border.borderRight),\n borderLeft: copyBorderSide(border.borderLeft),\n }\n }\n\n return { ...value, border: copyResponsiveBorder(value.border) }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAA0D;AAC1D,8BAAqD;AAQrD,kBAA+B;AAoIxB,MAAM,mBAAmB;AAEzB,MAAM,uBAAuB;AAAA,EAClC,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,WAAW;AACb;AAQA,MAAM,gCAAwD;AAAA,EAC5D,qBAAqB;AAAA,EACrB,qBAAqB;AACvB;AAEA,MAAM,4BAAoD;AAAA,EACxD,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AACvB;AAaO,SAAS,MAAM,QAAqD;AACzE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,EAAE,YAAY,QAAQ,cAAc,8BAA8B;AAAA,EAC5E;AACF;AAEA,MAAM,UAAU;AAChB,MAAM,MAAM;AAEZ,MAAM,QAAQ,qBAAqB;AACnC,MAAM,SAAS,qBAAqB;AACpC,MAAM,UAAU,qBAAqB;AACrC,MAAM,SAAS,qBAAqB;AACpC,MAAM,eAAe,qBAAqB;AAC1C,MAAM,YAAY,qBAAqB;AAEhC,MAAM,0BAA0B;AAAA,EACrC,kBAAkB;AACpB;AASO,MAAM,qBAAqB,2BAAoC;AAAA,EACpE,YAAY,MAAiC;AAC3C,UAAM,IAAI;AAAA,EACZ;AAAA,EAEA,eAAe,UAAiC;AAC9C,SAAK,KAAK,EAAE,MAAM,wBAAwB,kBAAkB,SAAS,EAAE,SAAS,EAAE,CAAC;AAAA,EACrF;AAAA,EAEA,OAAO;AAAA,EAAC;AACV;AAEO,SAAS,kBAAkB,MAAkC;AAClE,aAAO,8DAAqC,KAAK,MAAM;AACzD;AAEO,SAAS,cACd,OACA,SAC8B;AAC9B,MAAI,SAAS;AAAM,WAAO;AAE1B,WAAS,qBACP,kBACiD;AACjD,QAAI,oBAAoB;AAAM,aAAO;AACrC,WAAO,iBAAiB,IAAI,mBAAiB;AAAA,MAC3C,GAAG;AAAA,MACH,OAAO,WAAW,aAAa,KAAK;AAAA,IACtC,EAAE;AAAA,EACJ;AAEA,WAAS,WAAW,QAAgD;AAClE,aAAS,eAAe,MAA0D;AAChF,UAAI,QAAQ;AAAM,eAAO;AAEzB,UAAI,KAAK,SAAS;AAAM,eAAO;AAE/B,aAAO;AAAA,QACL,GAAG;AAAA,QACH,WAAO,+BAAc,KAAK,OAAO,OAAO;AAAA,MAC1C;AAAA,IACF;AAEA,WAAO;AAAA,MACL,WAAW,eAAe,OAAO,SAAS;AAAA,MAC1C,cAAc,eAAe,OAAO,YAAY;AAAA,MAChD,aAAa,eAAe,OAAO,WAAW;AAAA,MAC9C,YAAY,eAAe,OAAO,UAAU;AAAA,IAC9C;AAAA,EACF;AAEA,SAAO,EAAE,GAAG,OAAO,QAAQ,qBAAqB,MAAM,MAAM,EAAE;AAChE;","names":[]}
|
package/dist/cjs/jest-setup.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var import_jest_dom = require("@testing-library/jest-dom");
|
|
3
3
|
var import_jest = require("@emotion/jest");
|
|
4
|
+
var import_server = require("./mocks/server");
|
|
5
|
+
beforeAll(() => import_server.server.listen());
|
|
6
|
+
afterEach(() => import_server.server.resetHandlers());
|
|
7
|
+
afterAll(() => import_server.server.close());
|
|
4
8
|
expect.extend(import_jest.matchers);
|
|
5
9
|
if (typeof window !== "undefined") {
|
|
6
10
|
Object.defineProperty(window, "matchMedia", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/jest-setup.ts"],"sourcesContent":["import '@testing-library/jest-dom'\nimport { matchers } from '@emotion/jest'\n\nexpect.extend(matchers)\n\nif (typeof window !== 'undefined') {\n Object.defineProperty(window, 'matchMedia', {\n writable: true,\n value: jest.fn().mockImplementation(query => ({\n matches: false,\n media: query,\n onchange: null,\n addListener: jest.fn(), // deprecated\n removeListener: jest.fn(), // deprecated\n addEventListener: jest.fn(),\n removeEventListener: jest.fn(),\n dispatchEvent: jest.fn(),\n })),\n })\n\n Object.defineProperty(window, 'IntersectionObserver', {\n writable: true,\n value: jest.fn().mockImplementation(() => ({\n observe: jest.fn(),\n unobserve: jest.fn(),\n disconnect: jest.fn(),\n })),\n })\n}\n"],"mappings":";AAAA,sBAAO;AACP,kBAAyB;
|
|
1
|
+
{"version":3,"sources":["../../src/jest-setup.ts"],"sourcesContent":["import '@testing-library/jest-dom'\nimport { matchers } from '@emotion/jest'\nimport { server } from './mocks/server'\n\nbeforeAll(() => server.listen())\nafterEach(() => server.resetHandlers())\nafterAll(() => server.close())\n\nexpect.extend(matchers)\n\nif (typeof window !== 'undefined') {\n Object.defineProperty(window, 'matchMedia', {\n writable: true,\n value: jest.fn().mockImplementation(query => ({\n matches: false,\n media: query,\n onchange: null,\n addListener: jest.fn(), // deprecated\n removeListener: jest.fn(), // deprecated\n addEventListener: jest.fn(),\n removeEventListener: jest.fn(),\n dispatchEvent: jest.fn(),\n })),\n })\n\n Object.defineProperty(window, 'IntersectionObserver', {\n writable: true,\n value: jest.fn().mockImplementation(() => ({\n observe: jest.fn(),\n unobserve: jest.fn(),\n disconnect: jest.fn(),\n })),\n })\n}\n"],"mappings":";AAAA,sBAAO;AACP,kBAAyB;AACzB,oBAAuB;AAEvB,UAAU,MAAM,qBAAO,OAAO,CAAC;AAC/B,UAAU,MAAM,qBAAO,cAAc,CAAC;AACtC,SAAS,MAAM,qBAAO,MAAM,CAAC;AAE7B,OAAO,OAAO,oBAAQ;AAEtB,IAAI,OAAO,WAAW,aAAa;AACjC,SAAO,eAAe,QAAQ,cAAc;AAAA,IAC1C,UAAU;AAAA,IACV,OAAO,KAAK,GAAG,EAAE,mBAAmB,YAAU;AAAA,MAC5C,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,MACV,aAAa,KAAK,GAAG;AAAA;AAAA,MACrB,gBAAgB,KAAK,GAAG;AAAA;AAAA,MACxB,kBAAkB,KAAK,GAAG;AAAA,MAC1B,qBAAqB,KAAK,GAAG;AAAA,MAC7B,eAAe,KAAK,GAAG;AAAA,IACzB,EAAE;AAAA,EACJ,CAAC;AAED,SAAO,eAAe,QAAQ,wBAAwB;AAAA,IACpD,UAAU;AAAA,IACV,OAAO,KAAK,GAAG,EAAE,mBAAmB,OAAO;AAAA,MACzC,SAAS,KAAK,GAAG;AAAA,MACjB,WAAW,KAAK,GAAG;AAAA,MACnB,YAAY,KAAK,GAAG;AAAA,IACtB,EAAE;AAAA,EACJ,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var server_exports = {};
|
|
20
|
+
__export(server_exports, {
|
|
21
|
+
server: () => server
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(server_exports);
|
|
24
|
+
var import_node = require("msw/node");
|
|
25
|
+
const server = (0, import_node.setupServer)();
|
|
26
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
27
|
+
0 && (module.exports = {
|
|
28
|
+
server
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/mocks/server.ts"],"sourcesContent":["import { setupServer } from 'msw/node'\n\nexport const server = setupServer()\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA4B;AAErB,MAAM,aAAS,yBAAY;","names":[]}
|
|
@@ -36,7 +36,7 @@ async function handler(...args) {
|
|
|
36
36
|
const supportsPreviewMode = (0, import_ts_pattern.match)(args).with(routeHandlerPattern, () => false).with(apiRoutePattern, () => true).exhaustive();
|
|
37
37
|
const supportsDraftMode = (0, import_ts_pattern.match)(args).with(routeHandlerPattern, () => true).with(apiRoutePattern, () => false).exhaustive();
|
|
38
38
|
const body = {
|
|
39
|
-
version: "0.19.1",
|
|
39
|
+
version: "0.19.2-canary.1",
|
|
40
40
|
previewMode: supportsPreviewMode,
|
|
41
41
|
draftMode: supportsDraftMode,
|
|
42
42
|
interactionMode: true,
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var page_control_prop_rendering_exports = {};
|
|
20
|
+
__export(page_control_prop_rendering_exports, {
|
|
21
|
+
testPageControlPropRendering: () => testPageControlPropRendering
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(page_control_prop_rendering_exports);
|
|
24
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
25
|
+
var import_react = require("react");
|
|
26
|
+
var import_test_utils = require("react-dom/test-utils");
|
|
27
|
+
var import_react2 = require("@testing-library/react");
|
|
28
|
+
var import_jest_dom = require("@testing-library/jest-dom");
|
|
29
|
+
var import_page = require("../../page");
|
|
30
|
+
var import_react_runtime = require("../../../context/react-runtime");
|
|
31
|
+
var import_react3 = require("../../../../react");
|
|
32
|
+
var import_element_data_test_test = require("../../../../utils/tests/element-data-test-test");
|
|
33
|
+
const ROOT_ID = "00000000-0000-0000-0000-000000000000";
|
|
34
|
+
const ELEMENT_ID = "11111111-1111-1111-1111-111111111111";
|
|
35
|
+
async function testPageControlPropRendering(controlDefinition, {
|
|
36
|
+
toData,
|
|
37
|
+
value,
|
|
38
|
+
cacheData,
|
|
39
|
+
expectedRenders
|
|
40
|
+
}) {
|
|
41
|
+
const controlData = toData(value);
|
|
42
|
+
const TestComponentType = "TestComponent";
|
|
43
|
+
const testId = "test-id";
|
|
44
|
+
const renderCountTestId = "render-count-test-id";
|
|
45
|
+
const elementData = (0, import_element_data_test_test.createRootComponent)(
|
|
46
|
+
[
|
|
47
|
+
{
|
|
48
|
+
key: ELEMENT_ID,
|
|
49
|
+
type: TestComponentType,
|
|
50
|
+
props: {
|
|
51
|
+
propKey: controlData
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
ROOT_ID
|
|
56
|
+
);
|
|
57
|
+
const snapshot = (0, import_element_data_test_test.createMakeswiftPageSnapshot)(elementData, {}, cacheData);
|
|
58
|
+
const runtime = new import_react3.ReactRuntime();
|
|
59
|
+
runtime.registerComponent(
|
|
60
|
+
(0, import_react.forwardRef)(({ propKey }, ref) => {
|
|
61
|
+
const renderCount = (0, import_react.useRef)(0);
|
|
62
|
+
++renderCount.current;
|
|
63
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { ref, children: [
|
|
64
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { "data-testid": renderCountTestId, children: renderCount.current }),
|
|
65
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { "data-testid": testId, children: JSON.stringify(propKey) })
|
|
66
|
+
] });
|
|
67
|
+
}),
|
|
68
|
+
{
|
|
69
|
+
type: TestComponentType,
|
|
70
|
+
label: "TestComponent",
|
|
71
|
+
props: {
|
|
72
|
+
propKey: controlDefinition
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
await (0, import_test_utils.act)(
|
|
77
|
+
async () => (0, import_react2.render)(
|
|
78
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_runtime.ReactRuntimeProvider, { runtime, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_page.Page, { snapshot }) })
|
|
79
|
+
)
|
|
80
|
+
);
|
|
81
|
+
expect(snapshot).toMatchSnapshot("snapshot");
|
|
82
|
+
expect(JSON.parse(import_react2.screen.getByTestId(testId).textContent ?? "")).toMatchSnapshot("resolvedValue");
|
|
83
|
+
if (expectedRenders != null) {
|
|
84
|
+
expect(Number(import_react2.screen.getByTestId(renderCountTestId).textContent)).toBe(expectedRenders);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
88
|
+
0 && (module.exports = {
|
|
89
|
+
testPageControlPropRendering
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=page-control-prop-rendering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/next/components/tests/controls/page-control-prop-rendering.tsx"],"sourcesContent":["/** @jest-environment jsdom */\n\nimport { forwardRef, useRef } from 'react'\nimport { act } from 'react-dom/test-utils'\nimport { render, screen } from '@testing-library/react'\nimport '@testing-library/jest-dom'\n\nimport { Data } from '@makeswift/controls'\n\nimport { ElementData } from '../../../../state/react-page'\nimport { Page } from '../../page'\nimport { ReactRuntimeProvider } from '../../../context/react-runtime'\nimport { ReactRuntime } from '../../../../react'\n\nimport {\n createMakeswiftPageSnapshot,\n createRootComponent,\n} from '../../../../utils/tests/element-data-test-test'\n\nimport { type MakeswiftPageSnapshot } from '../../../../next'\nimport { ControlDefinition, ControlDefinitionData } from '../../../../controls'\n\nconst ROOT_ID = '00000000-0000-0000-0000-000000000000'\nconst ELEMENT_ID = '11111111-1111-1111-1111-111111111111'\n\nexport async function testPageControlPropRendering<T extends ControlDefinition>(\n controlDefinition: T,\n {\n toData,\n value,\n cacheData,\n expectedRenders,\n }: {\n toData: (value: Data) => ControlDefinitionData<T>\n value: Data\n cacheData?: MakeswiftPageSnapshot['cacheData']\n expectedRenders?: number\n },\n) {\n // Arrange\n const controlData = toData(value)\n const TestComponentType = 'TestComponent'\n const testId = 'test-id'\n const renderCountTestId = 'render-count-test-id'\n const elementData: ElementData = createRootComponent(\n [\n {\n key: ELEMENT_ID,\n type: TestComponentType,\n props: {\n propKey: controlData,\n },\n },\n ],\n ROOT_ID,\n )\n const snapshot = createMakeswiftPageSnapshot(elementData, {}, cacheData)\n const runtime = new ReactRuntime()\n\n // Act\n runtime.registerComponent(\n forwardRef<HTMLDivElement, { propKey?: any }>(({ propKey }, ref) => {\n const renderCount = useRef(0)\n ++renderCount.current\n return (\n <div ref={ref}>\n <div data-testid={renderCountTestId}>{renderCount.current}</div>\n <div data-testid={testId}>{JSON.stringify(propKey)}</div>\n </div>\n )\n }),\n {\n type: TestComponentType,\n label: 'TestComponent',\n props: {\n propKey: controlDefinition,\n },\n },\n )\n\n // Assert\n await act(async () =>\n render(\n <ReactRuntimeProvider runtime={runtime}>\n <Page snapshot={snapshot} />\n </ReactRuntimeProvider>,\n ),\n )\n\n expect(snapshot).toMatchSnapshot('snapshot')\n expect(JSON.parse(screen.getByTestId(testId).textContent ?? '')).toMatchSnapshot('resolvedValue')\n\n if (expectedRenders != null) {\n expect(Number(screen.getByTestId(renderCountTestId).textContent)).toBe(expectedRenders)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiEQ;AA/DR,mBAAmC;AACnC,wBAAoB;AACpB,IAAAA,gBAA+B;AAC/B,sBAAO;AAKP,kBAAqB;AACrB,2BAAqC;AACrC,IAAAA,gBAA6B;AAE7B,oCAGO;AAKP,MAAM,UAAU;AAChB,MAAM,aAAa;AAEnB,eAAsB,6BACpB,mBACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMA;AAEA,QAAM,cAAc,OAAO,KAAK;AAChC,QAAM,oBAAoB;AAC1B,QAAM,SAAS;AACf,QAAM,oBAAoB;AAC1B,QAAM,kBAA2B;AAAA,IAC/B;AAAA,MACE;AAAA,QACE,KAAK;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,UACL,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACA,QAAM,eAAW,2DAA4B,aAAa,CAAC,GAAG,SAAS;AACvE,QAAM,UAAU,IAAI,2BAAa;AAGjC,UAAQ;AAAA,QACN,yBAA8C,CAAC,EAAE,QAAQ,GAAG,QAAQ;AAClE,YAAM,kBAAc,qBAAO,CAAC;AAC5B,QAAE,YAAY;AACd,aACE,6CAAC,SAAI,KACH;AAAA,oDAAC,SAAI,eAAa,mBAAoB,sBAAY,SAAQ;AAAA,QAC1D,4CAAC,SAAI,eAAa,QAAS,eAAK,UAAU,OAAO,GAAE;AAAA,SACrD;AAAA,IAEJ,CAAC;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAGA,YAAM;AAAA,IAAI,gBACR;AAAA,MACE,4CAAC,6CAAqB,SACpB,sDAAC,oBAAK,UAAoB,GAC5B;AAAA,IACF;AAAA,EACF;AAEA,SAAO,QAAQ,EAAE,gBAAgB,UAAU;AAC3C,SAAO,KAAK,MAAM,qBAAO,YAAY,MAAM,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,eAAe;AAEhG,MAAI,mBAAmB,MAAM;AAC3B,WAAO,OAAO,qBAAO,YAAY,iBAAiB,EAAE,WAAW,CAAC,EAAE,KAAK,eAAe;AAAA,EACxF;AACF;","names":["import_react"]}
|
|
@@ -26,11 +26,11 @@ var import_react = require("@testing-library/react");
|
|
|
26
26
|
var import_jest_dom = require("@testing-library/jest-dom");
|
|
27
27
|
var import_prop_controllers = require("@makeswift/prop-controllers");
|
|
28
28
|
var import_crypto = require("crypto");
|
|
29
|
-
var import_page = require("
|
|
29
|
+
var import_page = require("../../page");
|
|
30
30
|
var import_test_utils = require("react-dom/test-utils");
|
|
31
|
-
var import_react_runtime = require("
|
|
32
|
-
var import_react2 = require("
|
|
33
|
-
var import_element_data_test_test = require("
|
|
31
|
+
var import_react_runtime = require("../../../context/react-runtime");
|
|
32
|
+
var import_react2 = require("../../../../react");
|
|
33
|
+
var import_element_data_test_test = require("../../../../utils/tests/element-data-test-test");
|
|
34
34
|
const pagePropControllerTest = (propDef, value, component, assert, options) => describe("Page", () => {
|
|
35
35
|
test(`can render ${propDef.type} v0 data`, async () => {
|
|
36
36
|
const descriptorV0 = {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/next/components/tests/prop-controllers/page-prop-controller.tsx"],"sourcesContent":["/** @jest-environment jsdom */\n\nimport { render, screen } from '@testing-library/react'\nimport '@testing-library/jest-dom'\n\nimport {\n type OptionsType,\n Types,\n type Descriptor,\n type PropDef,\n type Value,\n} from '@makeswift/prop-controllers'\n\nimport { type ElementData, type ComponentType } from '../../../../state/react-page'\nimport { randomUUID } from 'crypto'\n\nimport { Page } from '../../page'\nimport { act } from 'react-dom/test-utils'\nimport { ReactRuntimeProvider } from '../../../context/react-runtime'\nimport { ReactRuntime } from '../../../../react'\nimport {\n createMakeswiftPageSnapshot,\n createRootComponent,\n} from '../../../../utils/tests/element-data-test-test'\n\nexport const pagePropControllerTest = <\n P extends PropDef & ((options?: any) => any),\n C extends ComponentType<{ propKey: Value<P> | undefined }>,\n>(\n propDef: P,\n value: Value<typeof propDef>,\n component: (testId: string) => C,\n assert: (element: HTMLElement) => void,\n options?: OptionsType<P>,\n) =>\n describe('Page', () => {\n test(`can render ${propDef.type} v0 data`, async () => {\n // Arrange\n const descriptorV0: Descriptor<typeof propDef> = {\n type: propDef.type,\n options,\n }\n\n const TestComponentType = 'TestComponent'\n const testId = 'test-id'\n\n const elementData: ElementData = createRootComponent([\n {\n key: randomUUID(),\n type: TestComponentType,\n props: {\n propKey: propDef.toPropData(value, descriptorV0),\n },\n },\n ])\n const snapshot = createMakeswiftPageSnapshot(elementData)\n const runtime = new ReactRuntime()\n\n runtime.registerComponent(component(testId), {\n type: TestComponentType,\n label: 'TestComponent',\n props: {\n propKey: propDef(options),\n },\n })\n\n await act(async () =>\n render(\n <ReactRuntimeProvider runtime={runtime}>\n <Page snapshot={snapshot} />\n </ReactRuntimeProvider>,\n ),\n )\n\n assert(screen.getByTestId(testId))\n })\n\n test(`can render ${propDef.type} v1 data`, async () => {\n // Arrange\n const gapXDefinitionV1: Descriptor<typeof propDef> = {\n type: Types.GapX,\n version: 1,\n options: {},\n }\n\n const TestComponentType = 'TestComponent'\n const testId = 'test-id'\n const elementData: ElementData = createRootComponent([\n {\n key: randomUUID(),\n type: TestComponentType,\n props: {\n propKey: propDef.toPropData(value, gapXDefinitionV1),\n },\n },\n ])\n const snapshot = createMakeswiftPageSnapshot(elementData)\n const runtime = new ReactRuntime()\n\n runtime.registerComponent(component(testId), {\n type: TestComponentType,\n label: 'TestComponent',\n props: {\n propKey: propDef(options),\n },\n })\n\n await act(async () =>\n render(\n <ReactRuntimeProvider runtime={runtime}>\n <Page snapshot={snapshot} />\n </ReactRuntimeProvider>,\n ),\n )\n\n assert(screen.getByTestId(testId))\n })\n })\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqEY;AAnEZ,mBAA+B;AAC/B,sBAAO;AAEP,8BAMO;AAGP,oBAA2B;AAE3B,kBAAqB;AACrB,wBAAoB;AACpB,2BAAqC;AACrC,IAAAA,gBAA6B;AAC7B,oCAGO;AAEA,MAAM,yBAAyB,CAIpC,SACA,OACA,WACA,QACA,YAEA,SAAS,QAAQ,MAAM;AACrB,OAAK,cAAc,QAAQ,IAAI,YAAY,YAAY;AAErD,UAAM,eAA2C;AAAA,MAC/C,MAAM,QAAQ;AAAA,MACd;AAAA,IACF;AAEA,UAAM,oBAAoB;AAC1B,UAAM,SAAS;AAEf,UAAM,kBAA2B,mDAAoB;AAAA,MACnD;AAAA,QACE,SAAK,0BAAW;AAAA,QAChB,MAAM;AAAA,QACN,OAAO;AAAA,UACL,SAAS,QAAQ,WAAW,OAAO,YAAY;AAAA,QACjD;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,eAAW,2DAA4B,WAAW;AACxD,UAAM,UAAU,IAAI,2BAAa;AAEjC,YAAQ,kBAAkB,UAAU,MAAM,GAAG;AAAA,MAC3C,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,QACL,SAAS,QAAQ,OAAO;AAAA,MAC1B;AAAA,IACF,CAAC;AAED,cAAM;AAAA,MAAI,gBACR;AAAA,QACE,4CAAC,6CAAqB,SACpB,sDAAC,oBAAK,UAAoB,GAC5B;AAAA,MACF;AAAA,IACF;AAEA,WAAO,oBAAO,YAAY,MAAM,CAAC;AAAA,EACnC,CAAC;AAED,OAAK,cAAc,QAAQ,IAAI,YAAY,YAAY;AAErD,UAAM,mBAA+C;AAAA,MACnD,MAAM,8BAAM;AAAA,MACZ,SAAS;AAAA,MACT,SAAS,CAAC;AAAA,IACZ;AAEA,UAAM,oBAAoB;AAC1B,UAAM,SAAS;AACf,UAAM,kBAA2B,mDAAoB;AAAA,MACnD;AAAA,QACE,SAAK,0BAAW;AAAA,QAChB,MAAM;AAAA,QACN,OAAO;AAAA,UACL,SAAS,QAAQ,WAAW,OAAO,gBAAgB;AAAA,QACrD;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,eAAW,2DAA4B,WAAW;AACxD,UAAM,UAAU,IAAI,2BAAa;AAEjC,YAAQ,kBAAkB,UAAU,MAAM,GAAG;AAAA,MAC3C,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,QACL,SAAS,QAAQ,OAAO;AAAA,MAC1B;AAAA,IACF,CAAC;AAED,cAAM;AAAA,MAAI,gBACR;AAAA,QACE,4CAAC,6CAAqB,SACpB,sDAAC,oBAAK,UAAoB,GAC5B;AAAA,MACF;AAAA,IACF;AAEA,WAAO,oBAAO,YAAY,MAAM,CAAC;AAAA,EACnC,CAAC;AACH,CAAC;","names":["import_react"]}
|
|
@@ -92,6 +92,9 @@ function getSwatchIds(descriptor, prop) {
|
|
|
92
92
|
case import_controls.TypographyControlType: {
|
|
93
93
|
return (0, import_controls.getTypographySwatchIds)(prop);
|
|
94
94
|
}
|
|
95
|
+
case import_controls.StyleControlType: {
|
|
96
|
+
return (0, import_controls.getStyleSwatchIds)(prop);
|
|
97
|
+
}
|
|
95
98
|
case import_controls.StyleV2ControlType: {
|
|
96
99
|
const value = prop;
|
|
97
100
|
return value?.flatMap((value2) => getSwatchIds(descriptor.config.type, value2.value)) ?? [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prop-controllers/introspection.ts"],"sourcesContent":["import { Descriptor } from './descriptors'\nimport { Data, Element } from '../state/react-page'\nimport {\n ColorControlData,\n ColorControlType,\n getListElementChildren,\n getListFileIds,\n getListPageIds,\n getListSwatchIds,\n getListTypographyIds,\n getShapeElementChildren,\n getShapeFileIds,\n getShapePageIds,\n getShapeSwatchIds,\n getShapeTypographyIds,\n getTypographySwatchIds,\n getTypographyTypographyIds,\n ImageControlData,\n ImageControlType,\n LinkControlData,\n LinkControlType,\n ListControlData,\n ListControlType,\n RichTextControlData,\n RichTextControlType,\n RichTextValue,\n ShapeControlData,\n ShapeControlType,\n SlotControlData,\n SlotControlType,\n StyleV2ControlData,\n StyleV2ControlType,\n TypographyControlData,\n TypographyControlType,\n} from '../controls'\nimport {\n getRichTextPageIds,\n getRichTextSwatchIds,\n getRichTextTypographyIds,\n} from '../controls/rich-text/introspection'\nimport {\n getRichTextV2PageIds,\n getRichTextV2SwatchIds,\n getRichTextV2TypographyIds,\n} from '../controls/rich-text-v2/introspection'\nimport {\n RichTextV2ControlType,\n RichTextV2ControlData,\n isRichTextV1Data,\n} from '../controls/rich-text-v2/rich-text-v2'\nimport { match, P } from 'ts-pattern'\nimport {\n getLinkPropControllerPageIds,\n getResponsiveColorPropControllerDataSawtchIds,\n getShadowsPropControllerDataSwatchIds,\n LinkPropControllerData,\n Types as PropControllerTypes,\n ResponsiveColorData,\n ShadowsPropControllerData,\n getBorderPropControllerDataSwatchIds,\n TablePropControllerData,\n getTablePropControllerDataTableIds,\n getNavigationLinksPropControllerPageIds,\n NavigationLinksPropControllerData,\n getNavigationLinksPropControllerSwatchIds,\n BorderPropControllerData,\n getElementIDPropControllerDataElementID,\n ElementIDPropControllerData,\n getGridPropControllerElementChildren,\n GridPropControllerData,\n getImagePropControllerFileIds,\n ImagePropControllerData,\n getImagesPropControllerFileIds,\n ImagesPropControllerData,\n getBackgroundsPropControllerFileIds,\n getBackgroundsPropControllerSwatchIds,\n BackgroundsPropControllerData,\n} from '@makeswift/prop-controllers'\nimport { DELETED_PROP_CONTROLLER_TYPES } from './deleted'\n\nexport function getElementChildren<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): Element[] {\n if (prop == null) return []\n\n switch (descriptor.type) {\n case PropControllerTypes.Grid:\n return getGridPropControllerElementChildren(prop as GridPropControllerData | undefined)\n\n case SlotControlType:\n return (prop as SlotControlData).elements\n\n case ListControlType:\n return (prop as ListControlData).flatMap(({ value }) =>\n getElementChildren(descriptor.config.type, value),\n )\n\n case ShapeControlType: {\n return getShapeElementChildren(descriptor, prop as ShapeControlData)\n }\n\n case ListControlType: {\n return getListElementChildren(descriptor, prop as ListControlData)\n }\n\n default:\n return []\n }\n}\n\nexport function getElementId<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): string | null {\n if (prop == null) return null\n\n switch (descriptor.type) {\n case PropControllerTypes.ElementID:\n return getElementIDPropControllerDataElementID(prop as ElementIDPropControllerData) ?? null\n\n default:\n return null\n }\n}\n\nexport function getSwatchIds<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): string[] {\n if (prop == null) return []\n switch (descriptor.type) {\n case PropControllerTypes.Backgrounds:\n return getBackgroundsPropControllerSwatchIds(prop as BackgroundsPropControllerData)\n\n case PropControllerTypes.Border:\n return getBorderPropControllerDataSwatchIds(prop as BorderPropControllerData)\n\n case PropControllerTypes.NavigationLinks: {\n return getNavigationLinksPropControllerSwatchIds(prop as NavigationLinksPropControllerData)\n }\n\n case PropControllerTypes.ResponsiveColor:\n return getResponsiveColorPropControllerDataSawtchIds(prop as ResponsiveColorData)\n\n case PropControllerTypes.Shadows:\n return getShadowsPropControllerDataSwatchIds(prop as ShadowsPropControllerData)\n\n case RichTextControlType:\n case DELETED_PROP_CONTROLLER_TYPES.RichText: {\n return getRichTextSwatchIds(prop as RichTextValue)\n }\n\n case ColorControlType: {\n const value = prop as ColorControlData\n return value?.swatchId == null ? [] : [value.swatchId]\n }\n\n case TypographyControlType: {\n return getTypographySwatchIds(prop as TypographyControlData[number])\n }\n\n case StyleV2ControlType: {\n const value = prop as StyleV2ControlData\n\n return value?.flatMap(value => getSwatchIds(descriptor.config.type, value.value)) ?? []\n }\n\n case RichTextV2ControlType: {\n const data = prop as RichTextV2ControlData | RichTextControlData\n\n if (isRichTextV1Data(data)) return getRichTextSwatchIds(data)\n\n return getRichTextV2SwatchIds(descriptor, data)\n }\n\n case ShapeControlType: {\n return getShapeSwatchIds(descriptor, prop as ShapeControlData)\n }\n\n case ListControlType: {\n return getListSwatchIds(descriptor, prop as ListControlData)\n }\n\n default:\n return []\n }\n}\n\nexport function getFileIds<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): string[] {\n if (prop == null) return []\n\n switch (descriptor.type) {\n case PropControllerTypes.Backgrounds:\n return getBackgroundsPropControllerFileIds(prop as BackgroundsPropControllerData)\n\n case PropControllerTypes.Image: {\n return getImagePropControllerFileIds(prop as ImagePropControllerData)\n }\n\n case PropControllerTypes.Images: {\n return getImagesPropControllerFileIds(prop as ImagesPropControllerData)\n }\n\n case ImageControlType: {\n const value = prop as ImageControlData\n return match(value)\n .with(P.string, f => [f])\n .with({ type: 'makeswift-file' }, f => [f.id])\n .with({ type: 'external-file' }, () => [])\n .otherwise(() => [])\n }\n\n case ShapeControlType: {\n return getShapeFileIds(descriptor, prop as ShapeControlData)\n }\n\n case ListControlType: {\n return getListFileIds(descriptor, prop as ListControlData)\n }\n\n default:\n return []\n }\n}\n\nexport function getTypographyIds<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): string[] {\n if (prop == null) return []\n\n switch (descriptor.type) {\n case TypographyControlType: {\n return getTypographyTypographyIds(prop as TypographyControlData[number])\n }\n case RichTextControlType:\n case DELETED_PROP_CONTROLLER_TYPES.RichText: {\n return getRichTextTypographyIds(prop as RichTextControlData)\n }\n\n case RichTextV2ControlType: {\n const data = prop as RichTextV2ControlData | RichTextControlData\n\n if (isRichTextV1Data(data)) return getRichTextTypographyIds(data)\n\n return getRichTextV2TypographyIds(descriptor, data)\n }\n\n case ShapeControlType: {\n return getShapeTypographyIds(descriptor, prop as ShapeControlData)\n }\n\n case ListControlType: {\n return getListTypographyIds(descriptor, prop as ListControlData)\n }\n\n default:\n return []\n }\n}\n\nexport function getTableIds<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): string[] {\n if (prop == null) return []\n\n switch (descriptor.type) {\n case PropControllerTypes.Table: {\n return getTablePropControllerDataTableIds(prop as TablePropControllerData)\n }\n\n default:\n return []\n }\n}\n\nexport function getPageIds<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): string[] {\n if (prop == null) return []\n\n switch (descriptor.type) {\n case PropControllerTypes.Link: {\n return getLinkPropControllerPageIds(prop as LinkPropControllerData)\n }\n\n case LinkControlType: {\n const value = prop as LinkControlData\n\n if (value == null) return []\n\n switch (value.type) {\n case 'OPEN_PAGE':\n return value.payload.pageId == null ? [] : [value.payload.pageId]\n\n default:\n return []\n }\n }\n\n case PropControllerTypes.NavigationLinks: {\n return getNavigationLinksPropControllerPageIds(prop as NavigationLinksPropControllerData)\n }\n\n case RichTextControlType:\n case DELETED_PROP_CONTROLLER_TYPES.RichText: {\n return getRichTextPageIds(prop as RichTextControlData)\n }\n\n case RichTextV2ControlType: {\n const data = prop as RichTextV2ControlData | RichTextControlData\n\n if (isRichTextV1Data(data)) return getRichTextPageIds(data)\n\n return getRichTextV2PageIds(descriptor, data)\n }\n\n case ShapeControlType: {\n return getShapePageIds(descriptor, prop as ShapeControlData)\n }\n\n case ListControlType: {\n return getListPageIds(descriptor, prop as ListControlData)\n }\n\n default:\n return []\n }\n}\n"],"mappings":"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","names":["import_introspection","PropControllerTypes","value"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/prop-controllers/introspection.ts"],"sourcesContent":["import { Descriptor } from './descriptors'\nimport { Data, Element } from '../state/react-page'\nimport {\n ColorControlData,\n ColorControlType,\n getListElementChildren,\n getListFileIds,\n getListPageIds,\n getListSwatchIds,\n getListTypographyIds,\n getShapeElementChildren,\n getShapeFileIds,\n getShapePageIds,\n getShapeSwatchIds,\n getShapeTypographyIds,\n getStyleSwatchIds,\n getTypographySwatchIds,\n getTypographyTypographyIds,\n ImageControlData,\n ImageControlType,\n LinkControlData,\n LinkControlType,\n ListControlData,\n ListControlType,\n RichTextControlData,\n RichTextControlType,\n RichTextValue,\n ShapeControlData,\n ShapeControlType,\n SlotControlData,\n SlotControlType,\n StyleControlData,\n StyleControlType,\n StyleV2ControlData,\n StyleV2ControlType,\n TypographyControlData,\n TypographyControlType,\n} from '../controls'\nimport {\n getRichTextPageIds,\n getRichTextSwatchIds,\n getRichTextTypographyIds,\n} from '../controls/rich-text/introspection'\nimport {\n getRichTextV2PageIds,\n getRichTextV2SwatchIds,\n getRichTextV2TypographyIds,\n} from '../controls/rich-text-v2/introspection'\nimport {\n RichTextV2ControlType,\n RichTextV2ControlData,\n isRichTextV1Data,\n} from '../controls/rich-text-v2/rich-text-v2'\nimport { match, P } from 'ts-pattern'\nimport {\n getLinkPropControllerPageIds,\n getResponsiveColorPropControllerDataSawtchIds,\n getShadowsPropControllerDataSwatchIds,\n LinkPropControllerData,\n Types as PropControllerTypes,\n ResponsiveColorData,\n ShadowsPropControllerData,\n getBorderPropControllerDataSwatchIds,\n TablePropControllerData,\n getTablePropControllerDataTableIds,\n getNavigationLinksPropControllerPageIds,\n NavigationLinksPropControllerData,\n getNavigationLinksPropControllerSwatchIds,\n BorderPropControllerData,\n getElementIDPropControllerDataElementID,\n ElementIDPropControllerData,\n getGridPropControllerElementChildren,\n GridPropControllerData,\n getImagePropControllerFileIds,\n ImagePropControllerData,\n getImagesPropControllerFileIds,\n ImagesPropControllerData,\n getBackgroundsPropControllerFileIds,\n getBackgroundsPropControllerSwatchIds,\n BackgroundsPropControllerData,\n} from '@makeswift/prop-controllers'\nimport { DELETED_PROP_CONTROLLER_TYPES } from './deleted'\n\nexport function getElementChildren<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): Element[] {\n if (prop == null) return []\n\n switch (descriptor.type) {\n case PropControllerTypes.Grid:\n return getGridPropControllerElementChildren(prop as GridPropControllerData | undefined)\n\n case SlotControlType:\n return (prop as SlotControlData).elements\n\n case ListControlType:\n return (prop as ListControlData).flatMap(({ value }) =>\n getElementChildren(descriptor.config.type, value),\n )\n\n case ShapeControlType: {\n return getShapeElementChildren(descriptor, prop as ShapeControlData)\n }\n\n case ListControlType: {\n return getListElementChildren(descriptor, prop as ListControlData)\n }\n\n default:\n return []\n }\n}\n\nexport function getElementId<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): string | null {\n if (prop == null) return null\n\n switch (descriptor.type) {\n case PropControllerTypes.ElementID:\n return getElementIDPropControllerDataElementID(prop as ElementIDPropControllerData) ?? null\n\n default:\n return null\n }\n}\n\nexport function getSwatchIds<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): string[] {\n if (prop == null) return []\n switch (descriptor.type) {\n case PropControllerTypes.Backgrounds:\n return getBackgroundsPropControllerSwatchIds(prop as BackgroundsPropControllerData)\n\n case PropControllerTypes.Border:\n return getBorderPropControllerDataSwatchIds(prop as BorderPropControllerData)\n\n case PropControllerTypes.NavigationLinks: {\n return getNavigationLinksPropControllerSwatchIds(prop as NavigationLinksPropControllerData)\n }\n\n case PropControllerTypes.ResponsiveColor:\n return getResponsiveColorPropControllerDataSawtchIds(prop as ResponsiveColorData)\n\n case PropControllerTypes.Shadows:\n return getShadowsPropControllerDataSwatchIds(prop as ShadowsPropControllerData)\n\n case RichTextControlType:\n case DELETED_PROP_CONTROLLER_TYPES.RichText: {\n return getRichTextSwatchIds(prop as RichTextValue)\n }\n\n case ColorControlType: {\n const value = prop as ColorControlData\n return value?.swatchId == null ? [] : [value.swatchId]\n }\n\n case TypographyControlType: {\n return getTypographySwatchIds(prop as TypographyControlData[number])\n }\n\n case StyleControlType: {\n return getStyleSwatchIds(prop as StyleControlData)\n }\n\n case StyleV2ControlType: {\n const value = prop as StyleV2ControlData\n\n return value?.flatMap(value => getSwatchIds(descriptor.config.type, value.value)) ?? []\n }\n\n case RichTextV2ControlType: {\n const data = prop as RichTextV2ControlData | RichTextControlData\n\n if (isRichTextV1Data(data)) return getRichTextSwatchIds(data)\n\n return getRichTextV2SwatchIds(descriptor, data)\n }\n\n case ShapeControlType: {\n return getShapeSwatchIds(descriptor, prop as ShapeControlData)\n }\n\n case ListControlType: {\n return getListSwatchIds(descriptor, prop as ListControlData)\n }\n\n default:\n return []\n }\n}\n\nexport function getFileIds<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): string[] {\n if (prop == null) return []\n\n switch (descriptor.type) {\n case PropControllerTypes.Backgrounds:\n return getBackgroundsPropControllerFileIds(prop as BackgroundsPropControllerData)\n\n case PropControllerTypes.Image: {\n return getImagePropControllerFileIds(prop as ImagePropControllerData)\n }\n\n case PropControllerTypes.Images: {\n return getImagesPropControllerFileIds(prop as ImagesPropControllerData)\n }\n\n case ImageControlType: {\n const value = prop as ImageControlData\n return match(value)\n .with(P.string, f => [f])\n .with({ type: 'makeswift-file' }, f => [f.id])\n .with({ type: 'external-file' }, () => [])\n .otherwise(() => [])\n }\n\n case ShapeControlType: {\n return getShapeFileIds(descriptor, prop as ShapeControlData)\n }\n\n case ListControlType: {\n return getListFileIds(descriptor, prop as ListControlData)\n }\n\n default:\n return []\n }\n}\n\nexport function getTypographyIds<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): string[] {\n if (prop == null) return []\n\n switch (descriptor.type) {\n case TypographyControlType: {\n return getTypographyTypographyIds(prop as TypographyControlData[number])\n }\n case RichTextControlType:\n case DELETED_PROP_CONTROLLER_TYPES.RichText: {\n return getRichTextTypographyIds(prop as RichTextControlData)\n }\n\n case RichTextV2ControlType: {\n const data = prop as RichTextV2ControlData | RichTextControlData\n\n if (isRichTextV1Data(data)) return getRichTextTypographyIds(data)\n\n return getRichTextV2TypographyIds(descriptor, data)\n }\n\n case ShapeControlType: {\n return getShapeTypographyIds(descriptor, prop as ShapeControlData)\n }\n\n case ListControlType: {\n return getListTypographyIds(descriptor, prop as ListControlData)\n }\n\n default:\n return []\n }\n}\n\nexport function getTableIds<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): string[] {\n if (prop == null) return []\n\n switch (descriptor.type) {\n case PropControllerTypes.Table: {\n return getTablePropControllerDataTableIds(prop as TablePropControllerData)\n }\n\n default:\n return []\n }\n}\n\nexport function getPageIds<T extends Data>(\n descriptor: Descriptor<T>,\n prop: T | undefined,\n): string[] {\n if (prop == null) return []\n\n switch (descriptor.type) {\n case PropControllerTypes.Link: {\n return getLinkPropControllerPageIds(prop as LinkPropControllerData)\n }\n\n case LinkControlType: {\n const value = prop as LinkControlData\n\n if (value == null) return []\n\n switch (value.type) {\n case 'OPEN_PAGE':\n return value.payload.pageId == null ? [] : [value.payload.pageId]\n\n default:\n return []\n }\n }\n\n case PropControllerTypes.NavigationLinks: {\n return getNavigationLinksPropControllerPageIds(prop as NavigationLinksPropControllerData)\n }\n\n case RichTextControlType:\n case DELETED_PROP_CONTROLLER_TYPES.RichText: {\n return getRichTextPageIds(prop as RichTextControlData)\n }\n\n case RichTextV2ControlType: {\n const data = prop as RichTextV2ControlData | RichTextControlData\n\n if (isRichTextV1Data(data)) return getRichTextPageIds(data)\n\n return getRichTextV2PageIds(descriptor, data)\n }\n\n case ShapeControlType: {\n return getShapePageIds(descriptor, prop as ShapeControlData)\n }\n\n case ListControlType: {\n return getListPageIds(descriptor, prop as ListControlData)\n }\n\n default:\n return []\n }\n}\n"],"mappings":"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","names":["import_introspection","PropControllerTypes","value"]}
|
|
@@ -24,9 +24,9 @@ __export(element_data_test_test_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(element_data_test_test_exports);
|
|
25
25
|
var import_crypto = require("crypto");
|
|
26
26
|
var import_components = require("../../components");
|
|
27
|
-
function createRootComponent(elements) {
|
|
27
|
+
function createRootComponent(elements, rootId) {
|
|
28
28
|
return {
|
|
29
|
-
key: (0, import_crypto.randomUUID)(),
|
|
29
|
+
key: rootId ?? (0, import_crypto.randomUUID)(),
|
|
30
30
|
type: import_components.MakeswiftComponentType.Root,
|
|
31
31
|
props: {
|
|
32
32
|
children: {
|
|
@@ -44,7 +44,7 @@ function createRootComponent(elements) {
|
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
|
-
function createMakeswiftPageSnapshot(elementData, partialSnapshot = {}) {
|
|
47
|
+
function createMakeswiftPageSnapshot(elementData, partialSnapshot = {}, cacheData = {}) {
|
|
48
48
|
return {
|
|
49
49
|
document: {
|
|
50
50
|
id: "test-page-id",
|
|
@@ -59,7 +59,7 @@ function createMakeswiftPageSnapshot(elementData, partialSnapshot = {}) {
|
|
|
59
59
|
...partialSnapshot.document
|
|
60
60
|
},
|
|
61
61
|
apiOrigin: "https://test-api-origin.com",
|
|
62
|
-
cacheData
|
|
62
|
+
cacheData,
|
|
63
63
|
preview: false,
|
|
64
64
|
localizedResourcesMap: {},
|
|
65
65
|
locale: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/utils/tests/element-data-test-test.ts"],"sourcesContent":["import { randomUUID } from 'crypto'\nimport { MakeswiftPageSnapshot } from '../../next'\nimport { ElementData } from '../../state/react-page'\nimport { MakeswiftComponentType } from '../../components'\n\nexport function createRootComponent(elements: ElementData[]) {\n return {\n key: randomUUID(),\n type: MakeswiftComponentType.Root,\n props: {\n children: {\n columns: [\n {\n deviceId: 'desktop',\n value: {\n count: 12,\n spans: elements?.map(() => [12]),\n },\n },\n ],\n elements,\n },\n },\n }\n}\n\nexport function createMakeswiftPageSnapshot(\n elementData: ElementData,\n partialSnapshot: Partial<MakeswiftPageSnapshot> = {},\n): MakeswiftPageSnapshot {\n return {\n document: {\n id: 'test-page-id',\n site: { id: 'test-site-id' },\n data: elementData,\n snippets: [],\n fonts: [],\n meta: {},\n seo: {},\n localizedPages: [],\n locale: null,\n ...partialSnapshot.document,\n },\n apiOrigin: 'https://test-api-origin.com',\n cacheData
|
|
1
|
+
{"version":3,"sources":["../../../../src/utils/tests/element-data-test-test.ts"],"sourcesContent":["import { randomUUID } from 'crypto'\nimport { MakeswiftPageSnapshot } from '../../next'\nimport { ElementData } from '../../state/react-page'\nimport { MakeswiftComponentType } from '../../components'\n\nexport function createRootComponent(elements: ElementData[], rootId?: string) {\n return {\n key: rootId ?? randomUUID(),\n type: MakeswiftComponentType.Root,\n props: {\n children: {\n columns: [\n {\n deviceId: 'desktop',\n value: {\n count: 12,\n spans: elements?.map(() => [12]),\n },\n },\n ],\n elements,\n },\n },\n }\n}\n\nexport function createMakeswiftPageSnapshot(\n elementData: ElementData,\n partialSnapshot: Partial<MakeswiftPageSnapshot> = {},\n cacheData: MakeswiftPageSnapshot['cacheData'] = {},\n): MakeswiftPageSnapshot {\n return {\n document: {\n id: 'test-page-id',\n site: { id: 'test-site-id' },\n data: elementData,\n snippets: [],\n fonts: [],\n meta: {},\n seo: {},\n localizedPages: [],\n locale: null,\n ...partialSnapshot.document,\n },\n apiOrigin: 'https://test-api-origin.com',\n cacheData,\n preview: false,\n localizedResourcesMap: {},\n locale: null,\n ...partialSnapshot,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAG3B,wBAAuC;AAEhC,SAAS,oBAAoB,UAAyB,QAAiB;AAC5E,SAAO;AAAA,IACL,KAAK,cAAU,0BAAW;AAAA,IAC1B,MAAM,yCAAuB;AAAA,IAC7B,OAAO;AAAA,MACL,UAAU;AAAA,QACR,SAAS;AAAA,UACP;AAAA,YACE,UAAU;AAAA,YACV,OAAO;AAAA,cACL,OAAO;AAAA,cACP,OAAO,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC;AAAA,YACjC;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,4BACd,aACA,kBAAkD,CAAC,GACnD,YAAgD,CAAC,GAC1B;AACvB,SAAO;AAAA,IACL,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM,EAAE,IAAI,eAAe;AAAA,MAC3B,MAAM;AAAA,MACN,UAAU,CAAC;AAAA,MACX,OAAO,CAAC;AAAA,MACR,MAAM,CAAC;AAAA,MACP,KAAK,CAAC;AAAA,MACN,gBAAgB,CAAC;AAAA,MACjB,QAAQ;AAAA,MACR,GAAG,gBAAgB;AAAA,IACrB;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,SAAS;AAAA,IACT,uBAAuB,CAAC;AAAA,IACxB,QAAQ;AAAA,IACR,GAAG;AAAA,EACL;AACF;","names":[]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { copyColorData } from "@makeswift/controls";
|
|
2
|
+
import { getBorderPropControllerDataSwatchIds } from "@makeswift/prop-controllers";
|
|
2
3
|
import { PropController } from "../prop-controllers/base";
|
|
3
4
|
const StyleControlType = "makeswift::controls::style";
|
|
4
5
|
const StyleControlProperty = {
|
|
@@ -48,6 +49,9 @@ class StyleControl extends PropController {
|
|
|
48
49
|
recv() {
|
|
49
50
|
}
|
|
50
51
|
}
|
|
52
|
+
function getStyleSwatchIds(data) {
|
|
53
|
+
return getBorderPropControllerDataSwatchIds(data.border);
|
|
54
|
+
}
|
|
51
55
|
function copyStyleData(value, context) {
|
|
52
56
|
if (value == null)
|
|
53
57
|
return value;
|
|
@@ -85,6 +89,7 @@ export {
|
|
|
85
89
|
StyleControlMessageType,
|
|
86
90
|
StyleControlProperty,
|
|
87
91
|
StyleControlType,
|
|
88
|
-
copyStyleData
|
|
92
|
+
copyStyleData,
|
|
93
|
+
getStyleSwatchIds
|
|
89
94
|
};
|
|
90
95
|
//# sourceMappingURL=style.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/controls/style.ts"],"sourcesContent":["import { ColorData, copyColorData, ResponsiveValue } from '@makeswift/controls'\nimport { BorderRadiusPropertyData } from '../css/border-radius'\nimport type { LengthPercentageData } from '../css/length-percentage'\nimport { MarginPropertyData } from '../css/margin'\nimport { PaddingPropertyData } from '../css/padding'\nimport { CopyContext } from '../state/react-page'\nimport { Send } from '../prop-controllers/instances'\nimport { PropController } from '../prop-controllers/base'\nimport { BoxModel } from '../state/modules/box-models'\n\n/** @see https://developer.mozilla.org/en-US/docs/Web/CSS/width */\nexport type WidthPropertyData = LengthPercentageData\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-style\n */\ntype BorderStyle = 'dotted' | 'dashed' | 'solid'\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-top#constituent_properties\n *\n * @todos\n * - Change `width` to be a `Length`\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderSideShorthandPropertyData = {\n width: number | null | undefined\n style: BorderStyle\n color?: ColorData | null\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border\n *\n * @todos\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderPropertyData = {\n borderTop: BorderSideShorthandPropertyData | null | undefined\n borderRight: BorderSideShorthandPropertyData | null | undefined\n borderBottom: BorderSideShorthandPropertyData | null | undefined\n borderLeft: BorderSideShorthandPropertyData | null | undefined\n}\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-family\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontFamilyPropertyData = string | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type LetterSpacingPropertyData = number | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-size\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontSizePropertyData =\n | {\n value: number\n unit: 'px'\n }\n | null\n | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontWeightPropertyData = number | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform\n *\n * @todos\n * - Match the type with specification\n */\nexport type TextTransformPropertyData = 'uppercase'[]\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style\n *\n * @todos\n * - Match the type with specification\n */\nexport type FontStylePropertyData = 'italic'[]\n\n/**\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type TextStylePropertyData = {\n fontFamily?: FontFamilyPropertyData | null | undefined\n letterSpacing: LetterSpacingPropertyData | null | undefined\n fontSize: FontSizePropertyData | null | undefined\n fontWeight: FontWeightPropertyData | null | undefined\n textTransform: TextTransformPropertyData\n fontStyle: FontStylePropertyData\n}\n\n/**\n * Primitives like `string` and `number` are excluded from the style data because the relevant\n * panels from the Makeswift builder were originally implemented only to support object values, and\n * not CSS strings. For example, 100 pixels would be `{ value: 100, unit: 'px' }` but never `100` or\n * `'100px'`.\n */\nexport type StyleControlData = {\n width?: ResponsiveValue<Exclude<WidthPropertyData, string | number>>\n margin?: ResponsiveValue<{\n [K in keyof MarginPropertyData]: Exclude<MarginPropertyData[K], string | number> | 'auto'\n }>\n padding?: ResponsiveValue<{\n [K in keyof PaddingPropertyData]: Exclude<PaddingPropertyData[K], string | number>\n }>\n border?: ResponsiveValue<BorderPropertyData>\n borderRadius?: ResponsiveValue<{\n [K in keyof BorderRadiusPropertyData]: Exclude<BorderRadiusPropertyData[K], string | number>\n }>\n textStyle?: ResponsiveValue<TextStylePropertyData>\n}\n\nexport const StyleControlType = 'makeswift::controls::style'\n\nexport const StyleControlProperty = {\n Width: 'makeswift::controls::style::property::width',\n Margin: 'makeswift::controls::style::property::margin',\n Padding: 'makeswift::controls::style::property::padding',\n Border: 'makeswift::controls::style::property::border',\n BorderRadius: 'makeswift::controls::style::property::border-radius',\n TextStyle: 'makeswift::controls::style::property::text-style',\n} as const\n\nexport type StyleControlProperty = typeof StyleControlProperty[keyof typeof StyleControlProperty]\n\ntype StyleControlParams = { properties?: StyleControlProperty[] }\n\nexport type StyleControlConfig = { properties: StyleControlProperty[] }\n\nconst StyleControlDefaultProperties: StyleControlProperty[] = [\n StyleControlProperty.Width,\n StyleControlProperty.Margin,\n]\n\nconst AllStyleControlProperties: StyleControlProperty[] = [\n StyleControlProperty.Width,\n StyleControlProperty.Margin,\n StyleControlProperty.Padding,\n StyleControlProperty.Border,\n StyleControlProperty.BorderRadius,\n StyleControlProperty.TextStyle,\n]\n\nexport type StyleControlDefinition = {\n type: typeof StyleControlType\n config: StyleControlConfig\n}\n\n/**\n * @todos\n * - Add support for custom panel labels.\n * - Add support for default values. Internally, default values must be represented with the same\n * format as the underlying data so that controls can show these values.\n */\nexport function Style(params?: StyleControlParams): StyleControlDefinition {\n return {\n type: StyleControlType,\n config: { properties: params?.properties ?? StyleControlDefaultProperties },\n }\n}\n\nStyle.Default = StyleControlDefaultProperties\nStyle.All = AllStyleControlProperties\n\nStyle.Width = StyleControlProperty.Width\nStyle.Margin = StyleControlProperty.Margin\nStyle.Padding = StyleControlProperty.Padding\nStyle.Border = StyleControlProperty.Border\nStyle.BorderRadius = StyleControlProperty.BorderRadius\nStyle.TextStyle = StyleControlProperty.TextStyle\n\nexport const StyleControlMessageType = {\n CHANGE_BOX_MODEL: 'makeswift::controls::style::message::change-box-model',\n} as const\n\ntype StyleControlItemBoxModelChangeMessage = {\n type: typeof StyleControlMessageType.CHANGE_BOX_MODEL\n payload: { boxModel: BoxModel | null }\n}\n\nexport type StyleControlMessage = StyleControlItemBoxModelChangeMessage\n\nexport class StyleControl extends PropController<StyleControlMessage> {\n constructor(send: Send<StyleControlMessage>) {\n super(send)\n }\n\n changeBoxModel(boxModel: BoxModel | null): void {\n this.send({ type: StyleControlMessageType.CHANGE_BOX_MODEL, payload: { boxModel } })\n }\n\n recv() {}\n}\n\nexport function copyStyleData(\n value: StyleControlData | undefined,\n context: CopyContext,\n): StyleControlData | undefined {\n if (value == null) return value\n\n function copyResponsiveBorder(\n responsiveBorder: ResponsiveValue<BorderPropertyData> | undefined,\n ): ResponsiveValue<BorderPropertyData> | undefined {\n if (responsiveBorder == null) return undefined\n return responsiveBorder.map(deviceBorder => ({\n ...deviceBorder,\n value: copyBorder(deviceBorder.value),\n }))\n }\n\n function copyBorder(border: BorderPropertyData): BorderPropertyData {\n function copyBorderSide(side: BorderSideShorthandPropertyData | null | undefined) {\n if (side == null) return null\n\n if (side.color == null) return side\n\n return {\n ...side,\n color: copyColorData(side.color, context),\n }\n }\n\n return {\n borderTop: copyBorderSide(border.borderTop),\n borderBottom: copyBorderSide(border.borderBottom),\n borderRight: copyBorderSide(border.borderRight),\n borderLeft: copyBorderSide(border.borderLeft),\n }\n }\n\n return { ...value, border: copyResponsiveBorder(value.border) }\n}\n"],"mappings":"AAAA,SAAoB,qBAAsC;AAO1D,SAAS,sBAAsB;AAoIxB,MAAM,mBAAmB;AAEzB,MAAM,uBAAuB;AAAA,EAClC,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,WAAW;AACb;AAQA,MAAM,gCAAwD;AAAA,EAC5D,qBAAqB;AAAA,EACrB,qBAAqB;AACvB;AAEA,MAAM,4BAAoD;AAAA,EACxD,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AACvB;AAaO,SAAS,MAAM,QAAqD;AACzE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,EAAE,YAAY,QAAQ,cAAc,8BAA8B;AAAA,EAC5E;AACF;AAEA,MAAM,UAAU;AAChB,MAAM,MAAM;AAEZ,MAAM,QAAQ,qBAAqB;AACnC,MAAM,SAAS,qBAAqB;AACpC,MAAM,UAAU,qBAAqB;AACrC,MAAM,SAAS,qBAAqB;AACpC,MAAM,eAAe,qBAAqB;AAC1C,MAAM,YAAY,qBAAqB;AAEhC,MAAM,0BAA0B;AAAA,EACrC,kBAAkB;AACpB;AASO,MAAM,qBAAqB,eAAoC;AAAA,EACpE,YAAY,MAAiC;AAC3C,UAAM,IAAI;AAAA,EACZ;AAAA,EAEA,eAAe,UAAiC;AAC9C,SAAK,KAAK,EAAE,MAAM,wBAAwB,kBAAkB,SAAS,EAAE,SAAS,EAAE,CAAC;AAAA,EACrF;AAAA,EAEA,OAAO;AAAA,EAAC;AACV;AAEO,SAAS,cACd,OACA,SAC8B;AAC9B,MAAI,SAAS;AAAM,WAAO;AAE1B,WAAS,qBACP,kBACiD;AACjD,QAAI,oBAAoB;AAAM,aAAO;AACrC,WAAO,iBAAiB,IAAI,mBAAiB;AAAA,MAC3C,GAAG;AAAA,MACH,OAAO,WAAW,aAAa,KAAK;AAAA,IACtC,EAAE;AAAA,EACJ;AAEA,WAAS,WAAW,QAAgD;AAClE,aAAS,eAAe,MAA0D;AAChF,UAAI,QAAQ;AAAM,eAAO;AAEzB,UAAI,KAAK,SAAS;AAAM,eAAO;AAE/B,aAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO,cAAc,KAAK,OAAO,OAAO;AAAA,MAC1C;AAAA,IACF;AAEA,WAAO;AAAA,MACL,WAAW,eAAe,OAAO,SAAS;AAAA,MAC1C,cAAc,eAAe,OAAO,YAAY;AAAA,MAChD,aAAa,eAAe,OAAO,WAAW;AAAA,MAC9C,YAAY,eAAe,OAAO,UAAU;AAAA,IAC9C;AAAA,EACF;AAEA,SAAO,EAAE,GAAG,OAAO,QAAQ,qBAAqB,MAAM,MAAM,EAAE;AAChE;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/controls/style.ts"],"sourcesContent":["import { ColorData, copyColorData, ResponsiveValue } from '@makeswift/controls'\nimport { getBorderPropControllerDataSwatchIds } from '@makeswift/prop-controllers'\n\nimport { BorderRadiusPropertyData } from '../css/border-radius'\nimport type { LengthPercentageData } from '../css/length-percentage'\nimport { MarginPropertyData } from '../css/margin'\nimport { PaddingPropertyData } from '../css/padding'\nimport { CopyContext } from '../state/react-page'\nimport { Send } from '../prop-controllers/instances'\nimport { PropController } from '../prop-controllers/base'\nimport { BoxModel } from '../state/modules/box-models'\n\n/** @see https://developer.mozilla.org/en-US/docs/Web/CSS/width */\nexport type WidthPropertyData = LengthPercentageData\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-style\n */\ntype BorderStyle = 'dotted' | 'dashed' | 'solid'\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-top#constituent_properties\n *\n * @todos\n * - Change `width` to be a `Length`\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderSideShorthandPropertyData = {\n width: number | null | undefined\n style: BorderStyle\n color?: ColorData | null\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border\n *\n * @todos\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderPropertyData = {\n borderTop: BorderSideShorthandPropertyData | null | undefined\n borderRight: BorderSideShorthandPropertyData | null | undefined\n borderBottom: BorderSideShorthandPropertyData | null | undefined\n borderLeft: BorderSideShorthandPropertyData | null | undefined\n}\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-family\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontFamilyPropertyData = string | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type LetterSpacingPropertyData = number | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-size\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontSizePropertyData =\n | {\n value: number\n unit: 'px'\n }\n | null\n | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontWeightPropertyData = number | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform\n *\n * @todos\n * - Match the type with specification\n */\nexport type TextTransformPropertyData = 'uppercase'[]\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style\n *\n * @todos\n * - Match the type with specification\n */\nexport type FontStylePropertyData = 'italic'[]\n\n/**\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type TextStylePropertyData = {\n fontFamily?: FontFamilyPropertyData | null | undefined\n letterSpacing: LetterSpacingPropertyData | null | undefined\n fontSize: FontSizePropertyData | null | undefined\n fontWeight: FontWeightPropertyData | null | undefined\n textTransform: TextTransformPropertyData\n fontStyle: FontStylePropertyData\n}\n\n/**\n * Primitives like `string` and `number` are excluded from the style data because the relevant\n * panels from the Makeswift builder were originally implemented only to support object values, and\n * not CSS strings. For example, 100 pixels would be `{ value: 100, unit: 'px' }` but never `100` or\n * `'100px'`.\n */\nexport type StyleControlData = {\n width?: ResponsiveValue<Exclude<WidthPropertyData, string | number>>\n margin?: ResponsiveValue<{\n [K in keyof MarginPropertyData]: Exclude<MarginPropertyData[K], string | number> | 'auto'\n }>\n padding?: ResponsiveValue<{\n [K in keyof PaddingPropertyData]: Exclude<PaddingPropertyData[K], string | number>\n }>\n border?: ResponsiveValue<BorderPropertyData>\n borderRadius?: ResponsiveValue<{\n [K in keyof BorderRadiusPropertyData]: Exclude<BorderRadiusPropertyData[K], string | number>\n }>\n textStyle?: ResponsiveValue<TextStylePropertyData>\n}\n\nexport const StyleControlType = 'makeswift::controls::style'\n\nexport const StyleControlProperty = {\n Width: 'makeswift::controls::style::property::width',\n Margin: 'makeswift::controls::style::property::margin',\n Padding: 'makeswift::controls::style::property::padding',\n Border: 'makeswift::controls::style::property::border',\n BorderRadius: 'makeswift::controls::style::property::border-radius',\n TextStyle: 'makeswift::controls::style::property::text-style',\n} as const\n\nexport type StyleControlProperty = typeof StyleControlProperty[keyof typeof StyleControlProperty]\n\ntype StyleControlParams = { properties?: StyleControlProperty[] }\n\nexport type StyleControlConfig = { properties: StyleControlProperty[] }\n\nconst StyleControlDefaultProperties: StyleControlProperty[] = [\n StyleControlProperty.Width,\n StyleControlProperty.Margin,\n]\n\nconst AllStyleControlProperties: StyleControlProperty[] = [\n StyleControlProperty.Width,\n StyleControlProperty.Margin,\n StyleControlProperty.Padding,\n StyleControlProperty.Border,\n StyleControlProperty.BorderRadius,\n StyleControlProperty.TextStyle,\n]\n\nexport type StyleControlDefinition = {\n type: typeof StyleControlType\n config: StyleControlConfig\n}\n\n/**\n * @todos\n * - Add support for custom panel labels.\n * - Add support for default values. Internally, default values must be represented with the same\n * format as the underlying data so that controls can show these values.\n */\nexport function Style(params?: StyleControlParams): StyleControlDefinition {\n return {\n type: StyleControlType,\n config: { properties: params?.properties ?? StyleControlDefaultProperties },\n }\n}\n\nStyle.Default = StyleControlDefaultProperties\nStyle.All = AllStyleControlProperties\n\nStyle.Width = StyleControlProperty.Width\nStyle.Margin = StyleControlProperty.Margin\nStyle.Padding = StyleControlProperty.Padding\nStyle.Border = StyleControlProperty.Border\nStyle.BorderRadius = StyleControlProperty.BorderRadius\nStyle.TextStyle = StyleControlProperty.TextStyle\n\nexport const StyleControlMessageType = {\n CHANGE_BOX_MODEL: 'makeswift::controls::style::message::change-box-model',\n} as const\n\ntype StyleControlItemBoxModelChangeMessage = {\n type: typeof StyleControlMessageType.CHANGE_BOX_MODEL\n payload: { boxModel: BoxModel | null }\n}\n\nexport type StyleControlMessage = StyleControlItemBoxModelChangeMessage\n\nexport class StyleControl extends PropController<StyleControlMessage> {\n constructor(send: Send<StyleControlMessage>) {\n super(send)\n }\n\n changeBoxModel(boxModel: BoxModel | null): void {\n this.send({ type: StyleControlMessageType.CHANGE_BOX_MODEL, payload: { boxModel } })\n }\n\n recv() {}\n}\n\nexport function getStyleSwatchIds(data: StyleControlData): string[] {\n return getBorderPropControllerDataSwatchIds(data.border)\n}\n\nexport function copyStyleData(\n value: StyleControlData | undefined,\n context: CopyContext,\n): StyleControlData | undefined {\n if (value == null) return value\n\n function copyResponsiveBorder(\n responsiveBorder: ResponsiveValue<BorderPropertyData> | undefined,\n ): ResponsiveValue<BorderPropertyData> | undefined {\n if (responsiveBorder == null) return undefined\n return responsiveBorder.map(deviceBorder => ({\n ...deviceBorder,\n value: copyBorder(deviceBorder.value),\n }))\n }\n\n function copyBorder(border: BorderPropertyData): BorderPropertyData {\n function copyBorderSide(side: BorderSideShorthandPropertyData | null | undefined) {\n if (side == null) return null\n\n if (side.color == null) return side\n\n return {\n ...side,\n color: copyColorData(side.color, context),\n }\n }\n\n return {\n borderTop: copyBorderSide(border.borderTop),\n borderBottom: copyBorderSide(border.borderBottom),\n borderRight: copyBorderSide(border.borderRight),\n borderLeft: copyBorderSide(border.borderLeft),\n }\n }\n\n return { ...value, border: copyResponsiveBorder(value.border) }\n}\n"],"mappings":"AAAA,SAAoB,qBAAsC;AAC1D,SAAS,4CAA4C;AAQrD,SAAS,sBAAsB;AAoIxB,MAAM,mBAAmB;AAEzB,MAAM,uBAAuB;AAAA,EAClC,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,WAAW;AACb;AAQA,MAAM,gCAAwD;AAAA,EAC5D,qBAAqB;AAAA,EACrB,qBAAqB;AACvB;AAEA,MAAM,4BAAoD;AAAA,EACxD,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AACvB;AAaO,SAAS,MAAM,QAAqD;AACzE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,EAAE,YAAY,QAAQ,cAAc,8BAA8B;AAAA,EAC5E;AACF;AAEA,MAAM,UAAU;AAChB,MAAM,MAAM;AAEZ,MAAM,QAAQ,qBAAqB;AACnC,MAAM,SAAS,qBAAqB;AACpC,MAAM,UAAU,qBAAqB;AACrC,MAAM,SAAS,qBAAqB;AACpC,MAAM,eAAe,qBAAqB;AAC1C,MAAM,YAAY,qBAAqB;AAEhC,MAAM,0BAA0B;AAAA,EACrC,kBAAkB;AACpB;AASO,MAAM,qBAAqB,eAAoC;AAAA,EACpE,YAAY,MAAiC;AAC3C,UAAM,IAAI;AAAA,EACZ;AAAA,EAEA,eAAe,UAAiC;AAC9C,SAAK,KAAK,EAAE,MAAM,wBAAwB,kBAAkB,SAAS,EAAE,SAAS,EAAE,CAAC;AAAA,EACrF;AAAA,EAEA,OAAO;AAAA,EAAC;AACV;AAEO,SAAS,kBAAkB,MAAkC;AAClE,SAAO,qCAAqC,KAAK,MAAM;AACzD;AAEO,SAAS,cACd,OACA,SAC8B;AAC9B,MAAI,SAAS;AAAM,WAAO;AAE1B,WAAS,qBACP,kBACiD;AACjD,QAAI,oBAAoB;AAAM,aAAO;AACrC,WAAO,iBAAiB,IAAI,mBAAiB;AAAA,MAC3C,GAAG;AAAA,MACH,OAAO,WAAW,aAAa,KAAK;AAAA,IACtC,EAAE;AAAA,EACJ;AAEA,WAAS,WAAW,QAAgD;AAClE,aAAS,eAAe,MAA0D;AAChF,UAAI,QAAQ;AAAM,eAAO;AAEzB,UAAI,KAAK,SAAS;AAAM,eAAO;AAE/B,aAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO,cAAc,KAAK,OAAO,OAAO;AAAA,MAC1C;AAAA,IACF;AAEA,WAAO;AAAA,MACL,WAAW,eAAe,OAAO,SAAS;AAAA,MAC1C,cAAc,eAAe,OAAO,YAAY;AAAA,MAChD,aAAa,eAAe,OAAO,WAAW;AAAA,MAC9C,YAAY,eAAe,OAAO,UAAU;AAAA,IAC9C;AAAA,EACF;AAEA,SAAO,EAAE,GAAG,OAAO,QAAQ,qBAAqB,MAAM,MAAM,EAAE;AAChE;","names":[]}
|
package/dist/esm/jest-setup.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import "@testing-library/jest-dom";
|
|
2
2
|
import { matchers } from "@emotion/jest";
|
|
3
|
+
import { server } from "./mocks/server";
|
|
4
|
+
beforeAll(() => server.listen());
|
|
5
|
+
afterEach(() => server.resetHandlers());
|
|
6
|
+
afterAll(() => server.close());
|
|
3
7
|
expect.extend(matchers);
|
|
4
8
|
if (typeof window !== "undefined") {
|
|
5
9
|
Object.defineProperty(window, "matchMedia", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/jest-setup.ts"],"sourcesContent":["import '@testing-library/jest-dom'\nimport { matchers } from '@emotion/jest'\n\nexpect.extend(matchers)\n\nif (typeof window !== 'undefined') {\n Object.defineProperty(window, 'matchMedia', {\n writable: true,\n value: jest.fn().mockImplementation(query => ({\n matches: false,\n media: query,\n onchange: null,\n addListener: jest.fn(), // deprecated\n removeListener: jest.fn(), // deprecated\n addEventListener: jest.fn(),\n removeEventListener: jest.fn(),\n dispatchEvent: jest.fn(),\n })),\n })\n\n Object.defineProperty(window, 'IntersectionObserver', {\n writable: true,\n value: jest.fn().mockImplementation(() => ({\n observe: jest.fn(),\n unobserve: jest.fn(),\n disconnect: jest.fn(),\n })),\n })\n}\n"],"mappings":"AAAA,OAAO;AACP,SAAS,gBAAgB;
|
|
1
|
+
{"version":3,"sources":["../../src/jest-setup.ts"],"sourcesContent":["import '@testing-library/jest-dom'\nimport { matchers } from '@emotion/jest'\nimport { server } from './mocks/server'\n\nbeforeAll(() => server.listen())\nafterEach(() => server.resetHandlers())\nafterAll(() => server.close())\n\nexpect.extend(matchers)\n\nif (typeof window !== 'undefined') {\n Object.defineProperty(window, 'matchMedia', {\n writable: true,\n value: jest.fn().mockImplementation(query => ({\n matches: false,\n media: query,\n onchange: null,\n addListener: jest.fn(), // deprecated\n removeListener: jest.fn(), // deprecated\n addEventListener: jest.fn(),\n removeEventListener: jest.fn(),\n dispatchEvent: jest.fn(),\n })),\n })\n\n Object.defineProperty(window, 'IntersectionObserver', {\n writable: true,\n value: jest.fn().mockImplementation(() => ({\n observe: jest.fn(),\n unobserve: jest.fn(),\n disconnect: jest.fn(),\n })),\n })\n}\n"],"mappings":"AAAA,OAAO;AACP,SAAS,gBAAgB;AACzB,SAAS,cAAc;AAEvB,UAAU,MAAM,OAAO,OAAO,CAAC;AAC/B,UAAU,MAAM,OAAO,cAAc,CAAC;AACtC,SAAS,MAAM,OAAO,MAAM,CAAC;AAE7B,OAAO,OAAO,QAAQ;AAEtB,IAAI,OAAO,WAAW,aAAa;AACjC,SAAO,eAAe,QAAQ,cAAc;AAAA,IAC1C,UAAU;AAAA,IACV,OAAO,KAAK,GAAG,EAAE,mBAAmB,YAAU;AAAA,MAC5C,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,MACV,aAAa,KAAK,GAAG;AAAA;AAAA,MACrB,gBAAgB,KAAK,GAAG;AAAA;AAAA,MACxB,kBAAkB,KAAK,GAAG;AAAA,MAC1B,qBAAqB,KAAK,GAAG;AAAA,MAC7B,eAAe,KAAK,GAAG;AAAA,IACzB,EAAE;AAAA,EACJ,CAAC;AAED,SAAO,eAAe,QAAQ,wBAAwB;AAAA,IACpD,UAAU;AAAA,IACV,OAAO,KAAK,GAAG,EAAE,mBAAmB,OAAO;AAAA,MACzC,SAAS,KAAK,GAAG;AAAA,MACjB,WAAW,KAAK,GAAG;AAAA,MACnB,YAAY,KAAK,GAAG;AAAA,IACtB,EAAE;AAAA,EACJ,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/mocks/server.ts"],"sourcesContent":["import { setupServer } from 'msw/node'\n\nexport const server = setupServer()\n"],"mappings":"AAAA,SAAS,mBAAmB;AAErB,MAAM,SAAS,YAAY;","names":[]}
|
|
@@ -13,7 +13,7 @@ async function handler(...args) {
|
|
|
13
13
|
const supportsPreviewMode = match(args).with(routeHandlerPattern, () => false).with(apiRoutePattern, () => true).exhaustive();
|
|
14
14
|
const supportsDraftMode = match(args).with(routeHandlerPattern, () => true).with(apiRoutePattern, () => false).exhaustive();
|
|
15
15
|
const body = {
|
|
16
|
-
version: "0.19.1",
|
|
16
|
+
version: "0.19.2-canary.1",
|
|
17
17
|
previewMode: supportsPreviewMode,
|
|
18
18
|
draftMode: supportsDraftMode,
|
|
19
19
|
interactionMode: true,
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef, useRef } from "react";
|
|
3
|
+
import { act } from "react-dom/test-utils";
|
|
4
|
+
import { render, screen } from "@testing-library/react";
|
|
5
|
+
import "@testing-library/jest-dom";
|
|
6
|
+
import { Page } from "../../page";
|
|
7
|
+
import { ReactRuntimeProvider } from "../../../context/react-runtime";
|
|
8
|
+
import { ReactRuntime } from "../../../../react";
|
|
9
|
+
import {
|
|
10
|
+
createMakeswiftPageSnapshot,
|
|
11
|
+
createRootComponent
|
|
12
|
+
} from "../../../../utils/tests/element-data-test-test";
|
|
13
|
+
const ROOT_ID = "00000000-0000-0000-0000-000000000000";
|
|
14
|
+
const ELEMENT_ID = "11111111-1111-1111-1111-111111111111";
|
|
15
|
+
async function testPageControlPropRendering(controlDefinition, {
|
|
16
|
+
toData,
|
|
17
|
+
value,
|
|
18
|
+
cacheData,
|
|
19
|
+
expectedRenders
|
|
20
|
+
}) {
|
|
21
|
+
const controlData = toData(value);
|
|
22
|
+
const TestComponentType = "TestComponent";
|
|
23
|
+
const testId = "test-id";
|
|
24
|
+
const renderCountTestId = "render-count-test-id";
|
|
25
|
+
const elementData = createRootComponent(
|
|
26
|
+
[
|
|
27
|
+
{
|
|
28
|
+
key: ELEMENT_ID,
|
|
29
|
+
type: TestComponentType,
|
|
30
|
+
props: {
|
|
31
|
+
propKey: controlData
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
ROOT_ID
|
|
36
|
+
);
|
|
37
|
+
const snapshot = createMakeswiftPageSnapshot(elementData, {}, cacheData);
|
|
38
|
+
const runtime = new ReactRuntime();
|
|
39
|
+
runtime.registerComponent(
|
|
40
|
+
forwardRef(({ propKey }, ref) => {
|
|
41
|
+
const renderCount = useRef(0);
|
|
42
|
+
++renderCount.current;
|
|
43
|
+
return /* @__PURE__ */ jsxs("div", { ref, children: [
|
|
44
|
+
/* @__PURE__ */ jsx("div", { "data-testid": renderCountTestId, children: renderCount.current }),
|
|
45
|
+
/* @__PURE__ */ jsx("div", { "data-testid": testId, children: JSON.stringify(propKey) })
|
|
46
|
+
] });
|
|
47
|
+
}),
|
|
48
|
+
{
|
|
49
|
+
type: TestComponentType,
|
|
50
|
+
label: "TestComponent",
|
|
51
|
+
props: {
|
|
52
|
+
propKey: controlDefinition
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
await act(
|
|
57
|
+
async () => render(
|
|
58
|
+
/* @__PURE__ */ jsx(ReactRuntimeProvider, { runtime, children: /* @__PURE__ */ jsx(Page, { snapshot }) })
|
|
59
|
+
)
|
|
60
|
+
);
|
|
61
|
+
expect(snapshot).toMatchSnapshot("snapshot");
|
|
62
|
+
expect(JSON.parse(screen.getByTestId(testId).textContent ?? "")).toMatchSnapshot("resolvedValue");
|
|
63
|
+
if (expectedRenders != null) {
|
|
64
|
+
expect(Number(screen.getByTestId(renderCountTestId).textContent)).toBe(expectedRenders);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export {
|
|
68
|
+
testPageControlPropRendering
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=page-control-prop-rendering.js.map
|