diff --git a/mcp/package.json b/mcp/package.json index d1d1fcc72a..b490c1c342 100644 --- a/mcp/package.json +++ b/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@penpot/mcp", - "version": "2.19.0", + "version": "2.19.1", "description": "MCP server for Penpot integration", "license": "MPL-2.0", "bin": { diff --git a/mcp/packages/plugin/package.json b/mcp/packages/plugin/package.json index 68ed69afa9..17e3693e1a 100644 --- a/mcp/packages/plugin/package.json +++ b/mcp/packages/plugin/package.json @@ -13,8 +13,8 @@ "clean": "rm -rf dist/" }, "dependencies": { - "@penpot/plugin-styles": "1.5.0", - "@penpot/plugin-types": "1.5.0" + "@penpot/plugin-styles": "1.6.0", + "@penpot/plugin-types": "1.6.0" }, "devDependencies": { "cross-env": "^10.1.0", diff --git a/mcp/packages/server/data/api_types.yml b/mcp/packages/server/data/api_types.yml index cbfb243052..4790902202 100644 --- a/mcp/packages/server/data/api_types.yml +++ b/mcp/packages/server/data/api_types.yml @@ -128,7 +128,8 @@ Penpot: Example ``` - const size = penpot.ui.size;console.log(size); + const size = penpot.ui.size; + console.log(size); ``` * resize: (width: number, height: number) => void @@ -186,7 +187,8 @@ Penpot: Example ``` - const rootShape = context.root;console.log(rootShape); + const rootShape = context.root; + console.log(rootShape); ``` currentFile: |- ``` @@ -201,7 +203,8 @@ Penpot: Example ``` - const fileData = context.currentFile;console.log(fileData); + const fileData = context.currentFile; + console.log(fileData); ``` currentPage: |- ``` @@ -212,7 +215,8 @@ Penpot: Example ``` - const currentPage = context.currentPage;console.log(currentPage); + const currentPage = context.currentPage; + console.log(currentPage); ``` viewport: |- ``` @@ -223,7 +227,8 @@ Penpot: Example ``` - const viewportSettings = context.viewport;console.log(viewportSettings); + const viewportSettings = context.viewport; + console.log(viewportSettings); ``` flags: |- ``` @@ -240,7 +245,8 @@ Penpot: Example ``` - const historyContext = context.history;console.log(historyContext); + const historyContext = context.history; + console.log(historyContext); ``` library: |- ``` @@ -251,7 +257,8 @@ Penpot: Example ``` - const libraryContext = context.library;console.log(libraryContext); + const libraryContext = context.library; + console.log(libraryContext); ``` fonts: |- ``` @@ -262,7 +269,8 @@ Penpot: Example ``` - const fontsContext = context.fonts;console.log(fontsContext); + const fontsContext = context.fonts; + console.log(fontsContext); ``` currentUser: |- ``` @@ -273,7 +281,8 @@ Penpot: Example ``` - const currentUser = context.currentUser;console.log(currentUser); + const currentUser = context.currentUser; + console.log(currentUser); ``` activeUsers: |- ``` @@ -284,7 +293,8 @@ Penpot: Example ``` - const activeUsers = context.activeUsers;console.log(activeUsers); + const activeUsers = context.activeUsers; + console.log(activeUsers); ``` theme: |- ``` @@ -295,7 +305,8 @@ Penpot: Example ``` - const currentTheme = context.theme;console.log(currentTheme); + const currentTheme = context.theme; + console.log(currentTheme); ``` localStorage: |- ``` @@ -312,7 +323,8 @@ Penpot: Example ``` - const selectedShapes = context.selection;console.log(selectedShapes); + const selectedShapes = context.selection; + console.log(selectedShapes); ``` Methods: on: |- @@ -334,7 +346,8 @@ Penpot: that will be observed. For example: ``` - // Observe the current selected shapepenpot.on('shapechange', (shape) => console.log(shape.name), { shapeId: penpot.selection[0].id }); + // Observe the current selected shape + penpot.on('shapechange', (shape) => console.log(shape.name), { shapeId: penpot.selection[0].id }); ``` * selectionchange: event emitted when the current selection changes. The callback will receive the list of ids for the new selection @@ -384,7 +397,8 @@ Penpot: Example ``` - const listenerId = penpot.on('contentsave', () => console.log("Changed"));penpot.off(listenerId); + const listenerId = penpot.on('contentsave', () => console.log("Changed")); + penpot.off(listenerId); ``` shapesColors: |- ``` @@ -403,7 +417,8 @@ Penpot: Example ``` - const colors = context.shapesColors(shapes);console.log(colors); + const colors = context.shapesColors(shapes); + console.log(colors); ``` replaceColor: |- ``` @@ -446,7 +461,14 @@ Penpot: Example ``` - const imageData = await context.uploadMediaUrl('example', 'https://example.com/image.jpg');console.log(imageData);// to insert the image in a shape we can doconst board = penpot.createBoard();const shape = penpot.createRectangle();board.appendChild(shape);shape.fills = [{ fillOpacity: 1, fillImage: imageData }]; + const imageData = await context.uploadMediaUrl('example', 'https://example.com/image.jpg'); + console.log(imageData); + + // to insert the image in a shape we can do + const board = penpot.createBoard(); + const shape = penpot.createRectangle(); + board.appendChild(shape); + shape.fills = [{ fillOpacity: 1, fillImage: imageData }]; ``` uploadMediaData: |- ``` @@ -475,7 +497,8 @@ Penpot: Example ``` - const imageData = await context.uploadMediaData('example', imageData, 'image/jpeg');console.log(imageData); + const imageData = await context.uploadMediaData('example', imageData, 'image/jpeg'); + console.log(imageData); ``` group: |- ``` @@ -496,7 +519,8 @@ Penpot: Example ``` - const penpotShapesArray = penpot.selection;penpot.group(penpotShapesArray); + const penpotShapesArray = penpot.selection; + penpot.group(penpotShapesArray); ``` ungroup: |- ``` @@ -518,7 +542,11 @@ Penpot: Example ``` - const penpotShapesArray = penpot.selection;// We need to make sure that something is selected, and that the selected shape is a groupif (penpotShapesArray.length && penpot.utils.types.isGroup(penpotShapesArray[0])) { penpot.ungroup(penpotShapesArray[0]);} + const penpotShapesArray = penpot.selection; + // We need to make sure that something is selected, and that the selected shape is a group + if (penpotShapesArray.length && penpot.utils.types.isGroup(penpotShapesArray[0])) { + penpot.ungroup(penpotShapesArray[0]); + } ``` createRectangle: |- ``` @@ -531,7 +559,48 @@ Penpot: Example ``` - const shape = penpot.createRectangle();// just change the values like thisshape.name = "Example rectangle";// for solid colorshape.fills = [{ fillColor: "#7EFFF5" }];// for linear gradient colorshape.fills = [{ fillColorGradient: { "type": "linear", "startX": 0.5, "startY": 0, "endX": 0.5, "endY": 1, "width": 1, "stops": [ { "color": "#003ae9", "opacity": 1, "offset": 0 }, { "color": "#003ae9", "opacity": 0, "offset": 1 } ] }}];// for a image fillconst imageData = await context.uploadMediaUrl('example', 'https://example.com/image.jpg');shape.fills = [{ fillOpacity: 1, fillImage: imageData }];shape.borderRadius = 8;shape.strokes = [ { strokeColor: "#2e3434", strokeStyle: "solid", strokeWidth: 2, strokeAlignment: "center", },]; + const shape = penpot.createRectangle(); + // just change the values like this + shape.name = "Example rectangle"; + + // for solid color + shape.fills = [{ fillColor: "#7EFFF5" }]; + // for linear gradient color + shape.fills = [{ + fillColorGradient: { + "type": "linear", + "startX": 0.5, + "startY": 0, + "endX": 0.5, + "endY": 1, + "width": 1, + "stops": [ + { + "color": "#003ae9", + "opacity": 1, + "offset": 0 + }, + { + "color": "#003ae9", + "opacity": 0, + "offset": 1 + } + ] + } + }]; + // for a image fill + const imageData = await context.uploadMediaUrl('example', 'https://example.com/image.jpg'); + shape.fills = [{ fillOpacity: 1, fillImage: imageData }]; + + shape.borderRadius = 8; + shape.strokes = [ + { + strokeColor: "#2e3434", + strokeStyle: "solid", + strokeWidth: 2, + strokeAlignment: "center", + }, + ]; ``` createBoard: |- ``` @@ -546,7 +615,16 @@ Penpot: Example ``` - const board = penpot.createBoard();// to add grid layoutboard.addGridLayout();// to add flex layoutboard.addFlexLayout();// to create a shape inside the boardconst shape = penpot.createRectangle();board.appendChild(shape); + const board = penpot.createBoard(); + + // to add grid layout + board.addGridLayout(); + // to add flex layout + board.addFlexLayout(); + + // to create a shape inside the board + const shape = penpot.createRectangle(); + board.appendChild(shape); ``` createEllipse: |- ``` @@ -559,7 +637,47 @@ Penpot: Example ``` - const shape = penpot.createEllipse();// just change the values like thisshape.name = "Example ellipse";// for solid colorshape.fills = [{ fillColor: "#7EFFF5" }];// for linear gradient colorshape.fills = [{ fillColorGradient: { "type": "linear", "startX": 0.5, "startY": 0, "endX": 0.5, "endY": 1, "width": 1, "stops": [ { "color": "#003ae9", "opacity": 1, "offset": 0 }, { "color": "#003ae9", "opacity": 0, "offset": 1 } ] }}];// for an image fillconst imageData = await context.uploadMediaUrl('example', 'https://example.com/image.jpg');shape.fills = [{ fillOpacity: 1, fillImage: imageData }];shape.strokes = [ { strokeColor: "#2e3434", strokeStyle: "solid", strokeWidth: 2, strokeAlignment: "center", },]; + const shape = penpot.createEllipse(); + // just change the values like this + shape.name = "Example ellipse"; + + // for solid color + shape.fills = [{ fillColor: "#7EFFF5" }]; + // for linear gradient color + shape.fills = [{ + fillColorGradient: { + "type": "linear", + "startX": 0.5, + "startY": 0, + "endX": 0.5, + "endY": 1, + "width": 1, + "stops": [ + { + "color": "#003ae9", + "opacity": 1, + "offset": 0 + }, + { + "color": "#003ae9", + "opacity": 0, + "offset": 1 + } + ] + } + }]; + // for an image fill + const imageData = await context.uploadMediaUrl('example', 'https://example.com/image.jpg'); + shape.fills = [{ fillOpacity: 1, fillImage: imageData }]; + + shape.strokes = [ + { + strokeColor: "#2e3434", + strokeStyle: "solid", + strokeWidth: 2, + strokeAlignment: "center", + }, + ]; ``` createPath: |- ``` @@ -572,7 +690,11 @@ Penpot: Example ``` - const path = penpot.createPath();path.name = "My path";// for solid colorpath.fills = [{ fillColor: "#7EFFF5" }]; + const path = penpot.createPath(); + path.name = "My path"; + + // for solid color + path.fills = [{ fillColor: "#7EFFF5" }]; ``` createBoolean: |- ``` @@ -661,7 +783,16 @@ Penpot: Example ``` - const board = penpot.createBoard();let text;text = penpot.createText();// just change the values like thistext.growType = 'auto-height';text.fontFamily = 'Work Sans';text.fontSize = '12';text.fills = [{fillColor: '#9f05ff', fillOpacity: 1}];text.strokes = [{strokeOpacity: 1, strokeStyle: 'solid', strokeWidth: 2, strokeColor: '#deabff', strokeAlignment: 'outer'}];board.appendChild(text); + const board = penpot.createBoard(); + let text; + text = penpot.createText(); + // just change the values like this + text.growType = 'auto-height'; + text.fontFamily = 'Work Sans'; + text.fontSize = '12'; + text.fills = [{fillColor: '#9f05ff', fillOpacity: 1}]; + text.strokes = [{strokeOpacity: 1, strokeStyle: 'solid', strokeWidth: 2, strokeColor: '#deabff', strokeAlignment: 'outer'}]; + board.appendChild(text); ``` generateMarkup: |- ``` @@ -683,7 +814,8 @@ Penpot: Example ``` - const markup = context.generateMarkup(shapes, { type: 'html' });console.log(markup); + const markup = context.generateMarkup(shapes, { type: 'html' }); + console.log(markup); ``` generateStyle: |- ``` @@ -713,7 +845,8 @@ Penpot: Example ``` - const styles = context.generateStyle(shapes, { type: 'css' });console.log(styles); + const styles = context.generateStyle(shapes, { type: 'css' }); + console.log(styles); ``` generateFontFaces: |- ``` @@ -731,7 +864,8 @@ Penpot: Example ``` - const fontfaces = context.generateFontFaces(penpot.selection);console.log(fontfaces); + const fontfaces = context.generateFontFaces(penpot.selection); + console.log(fontfaces); ``` openViewer: |- ``` @@ -756,7 +890,12 @@ Penpot: Example ``` - const page = penpot.createPage();page.name = 'New Page';await penpot.openPage(page); // make the new page active firstconst board = penpot.createBoard();board.resize(375, 812);page.root.appendChild(board); + const page = penpot.createPage(); + page.name = 'New Page'; + await penpot.openPage(page); // make the new page active first + const board = penpot.createBoard(); + board.resize(375, 812); + page.root.appendChild(board); ``` openPage: |- ``` @@ -939,7 +1078,8 @@ ActiveUser: Example ``` - const userPosition = activeUser.position;console.log(userPosition); + const userPosition = activeUser.position; + console.log(userPosition); ``` zoom: |- ``` @@ -950,7 +1090,8 @@ ActiveUser: Example ``` - const userZoom = activeUser.zoom;console.log(userZoom); + const userZoom = activeUser.zoom; + console.log(userZoom); ``` id: |- ``` @@ -961,7 +1102,8 @@ ActiveUser: Example ``` - const userId = user.id;console.log(userId); + const userId = user.id; + console.log(userId); ``` name: |- ``` @@ -972,7 +1114,8 @@ ActiveUser: Example ``` - const userName = user.name;console.log(userName); + const userName = user.name; + console.log(userName); ``` avatarUrl: |- ``` @@ -983,7 +1126,8 @@ ActiveUser: Example ``` - const avatarUrl = user.avatarUrl;console.log(avatarUrl); + const avatarUrl = user.avatarUrl; + console.log(avatarUrl); ``` color: |- ``` @@ -994,7 +1138,8 @@ ActiveUser: Example ``` - const userColor = user.color;console.log(userColor); + const userColor = user.color; + console.log(userColor); ``` sessionId: |- ``` @@ -1005,7 +1150,8 @@ ActiveUser: Example ``` - const sessionId = user.sessionId;console.log(sessionId); + const sessionId = user.sessionId; + console.log(sessionId); ``` Blur: overview: |- @@ -1151,6 +1297,10 @@ Board: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -1187,6 +1337,7 @@ Board: detach(): void; swapComponent(component: LibraryComponent): void; resetOverrides(): void; + updateMain(): void; switchVariant(pos: number, value: string): void; combineAsVariants(ids: string[]): VariantContainer; isVariantHead(): boolean; @@ -1567,6 +1718,10 @@ Board: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -1661,7 +1816,16 @@ Board: Example ``` - const board = penpot.createBoard();const flex = board.addFlexLayout();// You can change the flex properties as follows.flex.dir = "column";flex.wrap = "wrap";flex.alignItems = "center";flex.justifyContent = "center";flex.horizontalSizing = "fill";flex.verticalSizing = "fill"; + const board = penpot.createBoard(); + const flex = board.addFlexLayout(); + + // You can change the flex properties as follows. + flex.dir = "column"; + flex.wrap = "wrap"; + flex.alignItems = "center"; + flex.justifyContent = "center"; + flex.horizontalSizing = "fill"; + flex.verticalSizing = "fill"; ``` addGridLayout: |- ``` @@ -1676,7 +1840,16 @@ Board: Example ``` - const board = penpot.createBoard();const grid = board.addGridLayout();// You can change the grid properties as follows.grid.alignItems = "center";grid.justifyItems = "start";grid.rowGap = 10;grid.columnGap = 10;grid.verticalPadding = 5;grid.horizontalPadding = 5; + const board = penpot.createBoard(); + const grid = board.addGridLayout(); + + // You can change the grid properties as follows. + grid.alignItems = "center"; + grid.justifyItems = "start"; + grid.rowGap = 10; + grid.columnGap = 10; + grid.verticalPadding = 5; + grid.horizontalPadding = 5; ``` addRulerGuide: |- ``` @@ -1734,7 +1907,8 @@ Board: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -1771,7 +1945,8 @@ Board: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -1795,7 +1970,8 @@ Board: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -1841,7 +2017,8 @@ Board: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` setParentIndex: |- ``` @@ -1971,6 +2148,18 @@ Board: Similar to the "reset overrides" action on the Penpot interface. The current shape must be a component copy instance. + Returns void + updateMain: |- + ``` + updateMain(): void + ``` + + Applies this copy's overrides to its main component and synchronizes copies. + Similar to the editor's "update main component" action. + Requires `content:write` and `library:write` permissions. + The shape must be a component copy head on the active page of the current file, + outside any other component copy, with a main component that is not deleted. + Returns void switchVariant: |- ``` @@ -2179,6 +2368,11 @@ Board: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties (`strokeWidthTop`, + `strokeWidthRight`, `strokeWidthBottom`, `strokeWidthLeft`) are only valid on + boards and rectangles. Applying one to any other shape raises a validation + error. The uniform `strokeWidth` property is accepted on every shape. + Returns void clone: |- ``` @@ -2326,6 +2520,10 @@ VariantContainer: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -2362,6 +2560,7 @@ VariantContainer: detach(): void; swapComponent(component: LibraryComponent): void; resetOverrides(): void; + updateMain(): void; switchVariant(pos: number, value: string): void; combineAsVariants(ids: string[]): VariantContainer; isVariantHead(): boolean; @@ -2745,6 +2944,10 @@ VariantContainer: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -2839,7 +3042,16 @@ VariantContainer: Example ``` - const board = penpot.createBoard();const flex = board.addFlexLayout();// You can change the flex properties as follows.flex.dir = "column";flex.wrap = "wrap";flex.alignItems = "center";flex.justifyContent = "center";flex.horizontalSizing = "fill";flex.verticalSizing = "fill"; + const board = penpot.createBoard(); + const flex = board.addFlexLayout(); + + // You can change the flex properties as follows. + flex.dir = "column"; + flex.wrap = "wrap"; + flex.alignItems = "center"; + flex.justifyContent = "center"; + flex.horizontalSizing = "fill"; + flex.verticalSizing = "fill"; ``` addGridLayout: |- ``` @@ -2854,7 +3066,16 @@ VariantContainer: Example ``` - const board = penpot.createBoard();const grid = board.addGridLayout();// You can change the grid properties as follows.grid.alignItems = "center";grid.justifyItems = "start";grid.rowGap = 10;grid.columnGap = 10;grid.verticalPadding = 5;grid.horizontalPadding = 5; + const board = penpot.createBoard(); + const grid = board.addGridLayout(); + + // You can change the grid properties as follows. + grid.alignItems = "center"; + grid.justifyItems = "start"; + grid.rowGap = 10; + grid.columnGap = 10; + grid.verticalPadding = 5; + grid.horizontalPadding = 5; ``` addRulerGuide: |- ``` @@ -2912,7 +3133,8 @@ VariantContainer: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -2949,7 +3171,8 @@ VariantContainer: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -2973,7 +3196,8 @@ VariantContainer: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -3019,7 +3243,8 @@ VariantContainer: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` setParentIndex: |- ``` @@ -3149,6 +3374,18 @@ VariantContainer: Similar to the "reset overrides" action on the Penpot interface. The current shape must be a component copy instance. + Returns void + updateMain: |- + ``` + updateMain(): void + ``` + + Applies this copy's overrides to its main component and synchronizes copies. + Similar to the editor's "update main component" action. + Requires `content:write` and `library:write` permissions. + The shape must be a component copy head on the active page of the current file, + outside any other component copy, with a main component that is not deleted. + Returns void switchVariant: |- ``` @@ -3357,6 +3594,11 @@ VariantContainer: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties (`strokeWidthTop`, + `strokeWidthRight`, `strokeWidthBottom`, `strokeWidthLeft`) are only valid on + boards and rectangles. Applying one to any other shape raises a validation + error. The uniform `strokeWidth` property is accepted on every shape. + Returns void clone: |- ``` @@ -3491,6 +3733,10 @@ Boolean: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -3527,6 +3773,7 @@ Boolean: detach(): void; swapComponent(component: LibraryComponent): void; resetOverrides(): void; + updateMain(): void; switchVariant(pos: number, value: string): void; combineAsVariants(ids: string[]): VariantContainer; isVariantHead(): boolean; @@ -3864,6 +4111,10 @@ Boolean: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -3978,7 +4229,8 @@ Boolean: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -4015,7 +4267,8 @@ Boolean: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -4039,7 +4292,8 @@ Boolean: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -4085,7 +4339,8 @@ Boolean: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` setParentIndex: |- ``` @@ -4215,6 +4470,18 @@ Boolean: Similar to the "reset overrides" action on the Penpot interface. The current shape must be a component copy instance. + Returns void + updateMain: |- + ``` + updateMain(): void + ``` + + Applies this copy's overrides to its main component and synchronizes copies. + Similar to the editor's "update main component" action. + Requires `content:write` and `library:write` permissions. + The shape must be a component copy head on the active page of the current file, + outside any other component copy, with a main component that is not deleted. + Returns void switchVariant: |- ``` @@ -4423,6 +4690,11 @@ Boolean: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties (`strokeWidthTop`, + `strokeWidthRight`, `strokeWidthBottom`, `strokeWidthLeft`) are only valid on + boards and rectangles. Applying one to any other shape raises a validation + error. The uniform `strokeWidth` property is accepted on every shape. + Returns void clone: |- ``` @@ -5097,7 +5369,8 @@ Context: Example ``` - const rootShape = context.root;console.log(rootShape); + const rootShape = context.root; + console.log(rootShape); ``` currentFile: |- ``` @@ -5112,7 +5385,8 @@ Context: Example ``` - const fileData = context.currentFile;console.log(fileData); + const fileData = context.currentFile; + console.log(fileData); ``` currentPage: |- ``` @@ -5123,7 +5397,8 @@ Context: Example ``` - const currentPage = context.currentPage;console.log(currentPage); + const currentPage = context.currentPage; + console.log(currentPage); ``` viewport: |- ``` @@ -5134,7 +5409,8 @@ Context: Example ``` - const viewportSettings = context.viewport;console.log(viewportSettings); + const viewportSettings = context.viewport; + console.log(viewportSettings); ``` flags: |- ``` @@ -5151,7 +5427,8 @@ Context: Example ``` - const historyContext = context.history;console.log(historyContext); + const historyContext = context.history; + console.log(historyContext); ``` library: |- ``` @@ -5162,7 +5439,8 @@ Context: Example ``` - const libraryContext = context.library;console.log(libraryContext); + const libraryContext = context.library; + console.log(libraryContext); ``` fonts: |- ``` @@ -5173,7 +5451,8 @@ Context: Example ``` - const fontsContext = context.fonts;console.log(fontsContext); + const fontsContext = context.fonts; + console.log(fontsContext); ``` currentUser: |- ``` @@ -5184,7 +5463,8 @@ Context: Example ``` - const currentUser = context.currentUser;console.log(currentUser); + const currentUser = context.currentUser; + console.log(currentUser); ``` activeUsers: |- ``` @@ -5195,7 +5475,8 @@ Context: Example ``` - const activeUsers = context.activeUsers;console.log(activeUsers); + const activeUsers = context.activeUsers; + console.log(activeUsers); ``` theme: |- ``` @@ -5206,7 +5487,8 @@ Context: Example ``` - const currentTheme = context.theme;console.log(currentTheme); + const currentTheme = context.theme; + console.log(currentTheme); ``` localStorage: |- ``` @@ -5223,7 +5505,8 @@ Context: Example ``` - const selectedShapes = context.selection;console.log(selectedShapes); + const selectedShapes = context.selection; + console.log(selectedShapes); ``` Methods: shapesColors: |- @@ -5243,7 +5526,8 @@ Context: Example ``` - const colors = context.shapesColors(shapes);console.log(colors); + const colors = context.shapesColors(shapes); + console.log(colors); ``` replaceColor: |- ``` @@ -5286,7 +5570,14 @@ Context: Example ``` - const imageData = await context.uploadMediaUrl('example', 'https://example.com/image.jpg');console.log(imageData);// to insert the image in a shape we can doconst board = penpot.createBoard();const shape = penpot.createRectangle();board.appendChild(shape);shape.fills = [{ fillOpacity: 1, fillImage: imageData }]; + const imageData = await context.uploadMediaUrl('example', 'https://example.com/image.jpg'); + console.log(imageData); + + // to insert the image in a shape we can do + const board = penpot.createBoard(); + const shape = penpot.createRectangle(); + board.appendChild(shape); + shape.fills = [{ fillOpacity: 1, fillImage: imageData }]; ``` uploadMediaData: |- ``` @@ -5315,7 +5606,8 @@ Context: Example ``` - const imageData = await context.uploadMediaData('example', imageData, 'image/jpeg');console.log(imageData); + const imageData = await context.uploadMediaData('example', imageData, 'image/jpeg'); + console.log(imageData); ``` group: |- ``` @@ -5336,7 +5628,8 @@ Context: Example ``` - const penpotShapesArray = penpot.selection;penpot.group(penpotShapesArray); + const penpotShapesArray = penpot.selection; + penpot.group(penpotShapesArray); ``` ungroup: |- ``` @@ -5358,7 +5651,11 @@ Context: Example ``` - const penpotShapesArray = penpot.selection;// We need to make sure that something is selected, and that the selected shape is a groupif (penpotShapesArray.length && penpot.utils.types.isGroup(penpotShapesArray[0])) { penpot.ungroup(penpotShapesArray[0]);} + const penpotShapesArray = penpot.selection; + // We need to make sure that something is selected, and that the selected shape is a group + if (penpotShapesArray.length && penpot.utils.types.isGroup(penpotShapesArray[0])) { + penpot.ungroup(penpotShapesArray[0]); + } ``` createRectangle: |- ``` @@ -5371,7 +5668,48 @@ Context: Example ``` - const shape = penpot.createRectangle();// just change the values like thisshape.name = "Example rectangle";// for solid colorshape.fills = [{ fillColor: "#7EFFF5" }];// for linear gradient colorshape.fills = [{ fillColorGradient: { "type": "linear", "startX": 0.5, "startY": 0, "endX": 0.5, "endY": 1, "width": 1, "stops": [ { "color": "#003ae9", "opacity": 1, "offset": 0 }, { "color": "#003ae9", "opacity": 0, "offset": 1 } ] }}];// for a image fillconst imageData = await context.uploadMediaUrl('example', 'https://example.com/image.jpg');shape.fills = [{ fillOpacity: 1, fillImage: imageData }];shape.borderRadius = 8;shape.strokes = [ { strokeColor: "#2e3434", strokeStyle: "solid", strokeWidth: 2, strokeAlignment: "center", },]; + const shape = penpot.createRectangle(); + // just change the values like this + shape.name = "Example rectangle"; + + // for solid color + shape.fills = [{ fillColor: "#7EFFF5" }]; + // for linear gradient color + shape.fills = [{ + fillColorGradient: { + "type": "linear", + "startX": 0.5, + "startY": 0, + "endX": 0.5, + "endY": 1, + "width": 1, + "stops": [ + { + "color": "#003ae9", + "opacity": 1, + "offset": 0 + }, + { + "color": "#003ae9", + "opacity": 0, + "offset": 1 + } + ] + } + }]; + // for a image fill + const imageData = await context.uploadMediaUrl('example', 'https://example.com/image.jpg'); + shape.fills = [{ fillOpacity: 1, fillImage: imageData }]; + + shape.borderRadius = 8; + shape.strokes = [ + { + strokeColor: "#2e3434", + strokeStyle: "solid", + strokeWidth: 2, + strokeAlignment: "center", + }, + ]; ``` createBoard: |- ``` @@ -5386,7 +5724,16 @@ Context: Example ``` - const board = penpot.createBoard();// to add grid layoutboard.addGridLayout();// to add flex layoutboard.addFlexLayout();// to create a shape inside the boardconst shape = penpot.createRectangle();board.appendChild(shape); + const board = penpot.createBoard(); + + // to add grid layout + board.addGridLayout(); + // to add flex layout + board.addFlexLayout(); + + // to create a shape inside the board + const shape = penpot.createRectangle(); + board.appendChild(shape); ``` createEllipse: |- ``` @@ -5399,7 +5746,47 @@ Context: Example ``` - const shape = penpot.createEllipse();// just change the values like thisshape.name = "Example ellipse";// for solid colorshape.fills = [{ fillColor: "#7EFFF5" }];// for linear gradient colorshape.fills = [{ fillColorGradient: { "type": "linear", "startX": 0.5, "startY": 0, "endX": 0.5, "endY": 1, "width": 1, "stops": [ { "color": "#003ae9", "opacity": 1, "offset": 0 }, { "color": "#003ae9", "opacity": 0, "offset": 1 } ] }}];// for an image fillconst imageData = await context.uploadMediaUrl('example', 'https://example.com/image.jpg');shape.fills = [{ fillOpacity: 1, fillImage: imageData }];shape.strokes = [ { strokeColor: "#2e3434", strokeStyle: "solid", strokeWidth: 2, strokeAlignment: "center", },]; + const shape = penpot.createEllipse(); + // just change the values like this + shape.name = "Example ellipse"; + + // for solid color + shape.fills = [{ fillColor: "#7EFFF5" }]; + // for linear gradient color + shape.fills = [{ + fillColorGradient: { + "type": "linear", + "startX": 0.5, + "startY": 0, + "endX": 0.5, + "endY": 1, + "width": 1, + "stops": [ + { + "color": "#003ae9", + "opacity": 1, + "offset": 0 + }, + { + "color": "#003ae9", + "opacity": 0, + "offset": 1 + } + ] + } + }]; + // for an image fill + const imageData = await context.uploadMediaUrl('example', 'https://example.com/image.jpg'); + shape.fills = [{ fillOpacity: 1, fillImage: imageData }]; + + shape.strokes = [ + { + strokeColor: "#2e3434", + strokeStyle: "solid", + strokeWidth: 2, + strokeAlignment: "center", + }, + ]; ``` createPath: |- ``` @@ -5412,7 +5799,11 @@ Context: Example ``` - const path = penpot.createPath();path.name = "My path";// for solid colorpath.fills = [{ fillColor: "#7EFFF5" }]; + const path = penpot.createPath(); + path.name = "My path"; + + // for solid color + path.fills = [{ fillColor: "#7EFFF5" }]; ``` createBoolean: |- ``` @@ -5501,7 +5892,16 @@ Context: Example ``` - const board = penpot.createBoard();let text;text = penpot.createText();// just change the values like thistext.growType = 'auto-height';text.fontFamily = 'Work Sans';text.fontSize = '12';text.fills = [{fillColor: '#9f05ff', fillOpacity: 1}];text.strokes = [{strokeOpacity: 1, strokeStyle: 'solid', strokeWidth: 2, strokeColor: '#deabff', strokeAlignment: 'outer'}];board.appendChild(text); + const board = penpot.createBoard(); + let text; + text = penpot.createText(); + // just change the values like this + text.growType = 'auto-height'; + text.fontFamily = 'Work Sans'; + text.fontSize = '12'; + text.fills = [{fillColor: '#9f05ff', fillOpacity: 1}]; + text.strokes = [{strokeOpacity: 1, strokeStyle: 'solid', strokeWidth: 2, strokeColor: '#deabff', strokeAlignment: 'outer'}]; + board.appendChild(text); ``` generateMarkup: |- ``` @@ -5523,7 +5923,8 @@ Context: Example ``` - const markup = context.generateMarkup(shapes, { type: 'html' });console.log(markup); + const markup = context.generateMarkup(shapes, { type: 'html' }); + console.log(markup); ``` generateStyle: |- ``` @@ -5553,7 +5954,8 @@ Context: Example ``` - const styles = context.generateStyle(shapes, { type: 'css' });console.log(styles); + const styles = context.generateStyle(shapes, { type: 'css' }); + console.log(styles); ``` generateFontFaces: |- ``` @@ -5571,7 +5973,8 @@ Context: Example ``` - const fontfaces = context.generateFontFaces(penpot.selection);console.log(fontfaces); + const fontfaces = context.generateFontFaces(penpot.selection); + console.log(fontfaces); ``` addListener: |- ``` @@ -5598,7 +6001,9 @@ Context: Example ``` - const listenerId = context.addListener('selectionchange', (event) => { console.log(event);}); + const listenerId = context.addListener('selectionchange', (event) => { + console.log(event); + }); ``` removeListener: |- ``` @@ -5640,7 +6045,12 @@ Context: Example ``` - const page = penpot.createPage();page.name = 'New Page';await penpot.openPage(page); // make the new page active firstconst board = penpot.createBoard();board.resize(375, 812);page.root.appendChild(board); + const page = penpot.createPage(); + page.name = 'New Page'; + await penpot.openPage(page); // make the new page active first + const board = penpot.createBoard(); + board.resize(375, 812); + page.root.appendChild(board); ``` openPage: |- ``` @@ -5795,7 +6205,8 @@ ContextGeometryUtils: Example ``` - const centerPoint = geometryUtils.center(shapes);console.log(centerPoint); + const centerPoint = geometryUtils.center(shapes); + console.log(centerPoint); ``` ``` @@ -5827,7 +6238,8 @@ ContextGeometryUtils: Example ``` - const centerPoint = geometryUtils.center(shapes);console.log(centerPoint); + const centerPoint = geometryUtils.center(shapes); + console.log(centerPoint); ``` ContextTypesUtils: overview: |- @@ -5838,7 +6250,8 @@ ContextTypesUtils: Example ``` - const isBoard = typesUtils.isBoard(shape);console.log(isBoard); + const isBoard = typesUtils.isBoard(shape); + console.log(isBoard); ``` ``` @@ -6067,7 +6480,8 @@ ContextUtils: Example ``` - const centerPoint = penpot.utils.geometry.center(shapes);console.log(centerPoint); + const centerPoint = penpot.utils.geometry.center(shapes); + console.log(centerPoint); ``` types: |- ``` @@ -6079,7 +6493,8 @@ ContextUtils: Example ``` - const isBoard = utils.types.isBoard(shape);console.log(isBoard); + const isBoard = utils.types.isBoard(shape); + console.log(isBoard); ``` Dissolve: overview: |- @@ -6205,6 +6620,10 @@ Ellipse: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -6241,6 +6660,7 @@ Ellipse: detach(): void; swapComponent(component: LibraryComponent): void; resetOverrides(): void; + updateMain(): void; switchVariant(pos: number, value: string): void; combineAsVariants(ids: string[]): VariantContainer; isVariantHead(): boolean; @@ -6550,6 +6970,10 @@ Ellipse: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -6609,7 +7033,8 @@ Ellipse: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -6646,7 +7071,8 @@ Ellipse: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -6670,7 +7096,8 @@ Ellipse: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -6716,7 +7143,8 @@ Ellipse: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` setParentIndex: |- ``` @@ -6846,6 +7274,18 @@ Ellipse: Similar to the "reset overrides" action on the Penpot interface. The current shape must be a component copy instance. + Returns void + updateMain: |- + ``` + updateMain(): void + ``` + + Applies this copy's overrides to its main component and synchronizes copies. + Similar to the editor's "update main component" action. + Requires `content:write` and `library:write` permissions. + The shape must be a component copy head on the active page of the current file, + outside any other component copy, with a main component that is not deleted. + Returns void switchVariant: |- ``` @@ -7054,6 +7494,11 @@ Ellipse: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties (`strokeWidthTop`, + `strokeWidthRight`, `strokeWidthBottom`, `strokeWidthLeft`) are only valid on + boards and rectangles. Applying one to any other shape raises a validation + error. The uniform `strokeWidth` property is accepted on every shape. + Returns void clone: |- ``` @@ -7104,7 +7549,9 @@ EventsMap: Example ``` - penpot.on('pagechange', (event) => { console.log(event);}); + penpot.on('pagechange', (event) => { + console.log(event); + }); ``` ``` @@ -7343,7 +7790,8 @@ File: Example ``` - const errors = file.validate();if (errors.length) console.error(errors); + const errors = file.validate(); + if (errors.length) console.error(errors); ``` getPluginData: |- ``` @@ -7364,7 +7812,8 @@ File: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -7401,7 +7850,8 @@ File: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -7425,7 +7875,8 @@ File: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -7471,7 +7922,8 @@ File: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` FileValidationError: overview: |- @@ -8192,7 +8644,10 @@ FontsContext: Example ``` - const font = fontsContext.findById('font-id');if (font) { console.log(font.name);} + const font = fontsContext.findById('font-id'); + if (font) { + console.log(font.name); + } ``` findByName: |- ``` @@ -8213,7 +8668,10 @@ FontsContext: Example ``` - const font = fontsContext.findByName('font-name');if (font) { console.log(font.name);} + const font = fontsContext.findByName('font-name'); + if (font) { + console.log(font.name); + } ``` findAllById: |- ``` @@ -8234,7 +8692,8 @@ FontsContext: Example ``` - const fonts = fontsContext.findAllById('font-id');console.log(fonts); + const fonts = fontsContext.findAllById('font-id'); + console.log(fonts); ``` findAllByName: |- ``` @@ -8255,7 +8714,8 @@ FontsContext: Example ``` - const fonts = fontsContext.findAllByName('font-name');console.log(fonts); + const fonts = fontsContext.findAllByName('font-name'); + console.log(fonts); ``` GridLayout: overview: |- @@ -8522,7 +8982,9 @@ GridLayout: Example ``` - const board = penpot.createBoard();const grid = board.addGridLayout();grid.addRow("flex", 1); + const board = penpot.createBoard(); + const grid = board.addGridLayout(); + grid.addRow("flex", 1); ``` addRowAtIndex: |- ``` @@ -8569,7 +9031,9 @@ GridLayout: Example ``` - const board = penpot.createBoard();const grid = board.addGridLayout();grid.addColumn('percent', 50); + const board = penpot.createBoard(); + const grid = board.addGridLayout(); + grid.addColumn('percent', 50); ``` addColumnAtIndex: |- ``` @@ -8803,6 +9267,10 @@ Group: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -8839,6 +9307,7 @@ Group: detach(): void; swapComponent(component: LibraryComponent): void; resetOverrides(): void; + updateMain(): void; switchVariant(pos: number, value: string): void; combineAsVariants(ids: string[]): VariantContainer; isVariantHead(): boolean; @@ -9152,6 +9621,10 @@ Group: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -9277,7 +9750,8 @@ Group: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -9314,7 +9788,8 @@ Group: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -9338,7 +9813,8 @@ Group: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -9384,7 +9860,8 @@ Group: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` setParentIndex: |- ``` @@ -9514,6 +9991,18 @@ Group: Similar to the "reset overrides" action on the Penpot interface. The current shape must be a component copy instance. + Returns void + updateMain: |- + ``` + updateMain(): void + ``` + + Applies this copy's overrides to its main component and synchronizes copies. + Similar to the editor's "update main component" action. + Requires `content:write` and `library:write` permissions. + The shape must be a component copy head on the active page of the current file, + outside any other component copy, with a main component that is not deleted. + Returns void switchVariant: |- ``` @@ -9722,6 +10211,11 @@ Group: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties (`strokeWidthTop`, + `strokeWidthRight`, `strokeWidthBottom`, `strokeWidthLeft`) are only valid on + boards and rectangles. Applying one to any other shape raises a validation + error. The uniform `strokeWidth` property is accepted on every shape. + Returns void clone: |- ``` @@ -10106,6 +10600,10 @@ Image: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -10142,6 +10640,7 @@ Image: detach(): void; swapComponent(component: LibraryComponent): void; resetOverrides(): void; + updateMain(): void; switchVariant(pos: number, value: string): void; combineAsVariants(ids: string[]): VariantContainer; isVariantHead(): boolean; @@ -10451,6 +10950,10 @@ Image: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -10510,7 +11013,8 @@ Image: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -10547,7 +11051,8 @@ Image: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -10571,7 +11076,8 @@ Image: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -10617,7 +11123,8 @@ Image: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` setParentIndex: |- ``` @@ -10747,6 +11254,18 @@ Image: Similar to the "reset overrides" action on the Penpot interface. The current shape must be a component copy instance. + Returns void + updateMain: |- + ``` + updateMain(): void + ``` + + Applies this copy's overrides to its main component and synchronizes copies. + Similar to the editor's "update main component" action. + Requires `content:write` and `library:write` permissions. + The shape must be a component copy head on the active page of the current file, + outside any other component copy, with a main component that is not deleted. + Returns void switchVariant: |- ``` @@ -10955,6 +11474,11 @@ Image: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties (`strokeWidthTop`, + `strokeWidthRight`, `strokeWidthBottom`, `strokeWidthLeft`) are only valid on + boards and rectangles. Applying one to any other shape raises a validation + error. The uniform `strokeWidth` property is accepted on every shape. + Returns void clone: |- ``` @@ -11282,6 +11806,7 @@ Library: colors: LibraryColor[]; typographies: LibraryTypography[]; components: LibraryComponent[]; + deletedComponents: LibraryComponent[]; tokens: TokenCatalog; createColor(): LibraryColor; createTypography(): LibraryTypography; @@ -11343,6 +11868,13 @@ Library: ``` console.log(penpot.library.local.components ``` + deletedComponents: |- + ``` + readonly deletedComponents: LibraryComponent[] + ``` + + Deleted components, including individual deleted variants. + Use a component's `restore()` method to restore it. tokens: |- ``` readonly tokens: TokenCatalog @@ -11365,7 +11897,8 @@ Library: Example ``` - const newColor = penpot.library.local.createColor();console.log(newColor); + const newColor = penpot.library.local.createColor(); + console.log(newColor); ``` createTypography: |- ``` @@ -11422,7 +11955,8 @@ Library: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -11459,7 +11993,8 @@ Library: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -11483,7 +12018,8 @@ Library: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -11529,7 +12065,8 @@ Library: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` LibraryColor: overview: |- @@ -11666,7 +12203,8 @@ LibraryColor: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -11703,7 +12241,8 @@ LibraryColor: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -11727,7 +12266,8 @@ LibraryColor: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -11773,7 +12313,8 @@ LibraryColor: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` LibraryComponent: overview: |- @@ -11785,6 +12326,10 @@ LibraryComponent: ``` interface LibraryComponent { + annotation: string | null; + duplicate(): LibraryComponent; + remove(): void; + restore(): void; instance(): Shape; mainInstance(): Shape; isVariant(): this is LibraryVariantComponent; @@ -11808,9 +12353,18 @@ LibraryComponent: + LibraryComponent - LibraryVariantComponent - Referenced by: Board, Boolean, ContextTypesUtils, Ellipse, Group, Image, Library, Path, Rectangle, ShapeBase, SvgRaw, Text, VariantContainer, Variants + Referenced by: Board, Boolean, ContextTypesUtils, Ellipse, Group, Image, Library, LibraryComponent, LibraryVariantComponent, Path, Rectangle, ShapeBase, SvgRaw, Text, VariantContainer, Variants members: Properties: + annotation: |- + ``` + annotation: string | null + ``` + + The component annotation, or null when none is set. + Set null to delete it. Text can contain at most 300 characters. + Writing requires `library:write` permission and a live component in the + current file's library. id: |- ``` readonly id: string @@ -11836,6 +12390,41 @@ LibraryComponent: The path of the library element. Methods: + duplicate: |- + ``` + duplicate(): LibraryComponent + ``` + + Duplicates this component and its main instance in the current file's library. + Requires `library:write` permission. The component must not be deleted. + + Returns LibraryComponent + remove: |- + ``` + remove(): void + ``` + + Deletes this component and its main instance from the current file's library. + Requires `library:write` permission. Does nothing if already deleted. + Surviving copies keep their link so the component can be restored later. + + Returns void + restore: |- + ``` + restore(): void + ``` + + Restores this component if it has been deleted, including its main instance, + in the current file's library. + Leaves the current page, selection, zoom, and viewport unchanged. + Requires `library:write` permission. Does nothing if already restored. + + Returns void + + Example + ``` + penpot.selection[0].component()?.restore(); + ``` instance: |- ``` instance(): Shape @@ -11898,7 +12487,8 @@ LibraryComponent: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -11935,7 +12525,8 @@ LibraryComponent: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -11959,7 +12550,8 @@ LibraryComponent: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -12005,7 +12597,8 @@ LibraryComponent: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` LibraryVariantComponent: overview: |- @@ -12017,6 +12610,10 @@ LibraryVariantComponent: ``` interface LibraryVariantComponent { + annotation: string | null; + duplicate(): LibraryComponent; + remove(): void; + restore(): void; instance(): Shape; mainInstance(): Shape; isVariant(): this is LibraryVariantComponent; @@ -12047,6 +12644,15 @@ LibraryVariantComponent: Referenced by: ContextTypesUtils, LibraryComponent, LibraryVariantComponent members: Properties: + annotation: |- + ``` + annotation: string | null + ``` + + The component annotation, or null when none is set. + Set null to delete it. Text can contain at most 300 characters. + Writing requires `library:write` permission and a live component in the + current file's library. variants: |- ``` readonly variants: Variants | null @@ -12091,6 +12697,41 @@ LibraryVariantComponent: The path of the library element. Methods: + duplicate: |- + ``` + duplicate(): LibraryComponent + ``` + + Duplicates this component and its main instance in the current file's library. + Requires `library:write` permission. The component must not be deleted. + + Returns LibraryComponent + remove: |- + ``` + remove(): void + ``` + + Deletes this component and its main instance from the current file's library. + Requires `library:write` permission. Does nothing if already deleted. + Surviving copies keep their link so the component can be restored later. + + Returns void + restore: |- + ``` + restore(): void + ``` + + Restores this component if it has been deleted, including its main instance, + in the current file's library. + Leaves the current page, selection, zoom, and viewport unchanged. + Requires `library:write` permission. Does nothing if already restored. + + Returns void + + Example + ``` + penpot.selection[0].component()?.restore(); + ``` instance: |- ``` instance(): Shape @@ -12178,7 +12819,8 @@ LibraryVariantComponent: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -12215,7 +12857,8 @@ LibraryVariantComponent: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -12239,7 +12882,8 @@ LibraryVariantComponent: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -12285,7 +12929,8 @@ LibraryVariantComponent: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` LibraryElement: overview: |- @@ -12363,7 +13008,8 @@ LibraryElement: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -12400,7 +13046,8 @@ LibraryElement: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -12424,7 +13071,8 @@ LibraryElement: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -12470,7 +13118,8 @@ LibraryElement: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` LibrarySummary: overview: |- @@ -12724,7 +13373,8 @@ LibraryTypography: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -12761,7 +13411,8 @@ LibraryTypography: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -12785,7 +13436,8 @@ LibraryTypography: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -12831,7 +13483,8 @@ LibraryTypography: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` LocalStorage: overview: |- @@ -13262,7 +13915,8 @@ Page: Example ``` - const page = penpot.createPage();page.remove(); + const page = penpot.createPage(); + page.remove(); ``` getShapeById: |- ``` @@ -13468,7 +14122,8 @@ Page: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -13505,7 +14160,8 @@ Page: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -13529,7 +14185,8 @@ Page: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -13575,7 +14232,8 @@ Page: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` Path: overview: |- @@ -13668,6 +14326,10 @@ Path: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -13704,6 +14366,7 @@ Path: detach(): void; swapComponent(component: LibraryComponent): void; resetOverrides(): void; + updateMain(): void; switchVariant(pos: number, value: string): void; combineAsVariants(ids: string[]): VariantContainer; isVariantHead(): boolean; @@ -14035,6 +14698,10 @@ Path: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -14108,7 +14775,8 @@ Path: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -14145,7 +14813,8 @@ Path: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -14169,7 +14838,8 @@ Path: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -14215,7 +14885,8 @@ Path: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` setParentIndex: |- ``` @@ -14345,6 +15016,18 @@ Path: Similar to the "reset overrides" action on the Penpot interface. The current shape must be a component copy instance. + Returns void + updateMain: |- + ``` + updateMain(): void + ``` + + Applies this copy's overrides to its main component and synchronizes copies. + Similar to the editor's "update main component" action. + Requires `content:write` and `library:write` permissions. + The shape must be a component copy head on the active page of the current file, + outside any other component copy, with a main component that is not deleted. + Returns void switchVariant: |- ``` @@ -14553,6 +15236,11 @@ Path: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties (`strokeWidthTop`, + `strokeWidthRight`, `strokeWidthBottom`, `strokeWidthLeft`) are only valid on + boards and rectangles. Applying one to any other shape raises a validation + error. The uniform `strokeWidth` property is accepted on every shape. + Returns void clone: |- ``` @@ -14787,7 +15475,8 @@ PluginData: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -14824,7 +15513,8 @@ PluginData: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -14848,7 +15538,8 @@ PluginData: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -14894,7 +15585,8 @@ PluginData: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` PreviousScreen: overview: |- @@ -15049,6 +15741,10 @@ Rectangle: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -15085,6 +15781,7 @@ Rectangle: detach(): void; swapComponent(component: LibraryComponent): void; resetOverrides(): void; + updateMain(): void; switchVariant(pos: number, value: string): void; combineAsVariants(ids: string[]): VariantContainer; isVariantHead(): boolean; @@ -15394,6 +16091,10 @@ Rectangle: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -15453,7 +16154,8 @@ Rectangle: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -15490,7 +16192,8 @@ Rectangle: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -15514,7 +16217,8 @@ Rectangle: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -15560,7 +16264,8 @@ Rectangle: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` setParentIndex: |- ``` @@ -15690,6 +16395,18 @@ Rectangle: Similar to the "reset overrides" action on the Penpot interface. The current shape must be a component copy instance. + Returns void + updateMain: |- + ``` + updateMain(): void + ``` + + Applies this copy's overrides to its main component and synchronizes copies. + Similar to the editor's "update main component" action. + Requires `content:write` and `library:write` permissions. + The shape must be a component copy head on the active page of the current file, + outside any other component copy, with a main component that is not deleted. + Returns void switchVariant: |- ``` @@ -15898,6 +16615,11 @@ Rectangle: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties (`strokeWidthTop`, + `strokeWidthRight`, `strokeWidthBottom`, `strokeWidthLeft`) are only valid on + boards and rectangles. Applying one to any other shape raises a validation + error. The uniform `strokeWidth` property is accepted on every shape. + Returns void clone: |- ``` @@ -16149,6 +16871,10 @@ ShapeBase: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -16185,6 +16911,7 @@ ShapeBase: detach(): void; swapComponent(component: LibraryComponent): void; resetOverrides(): void; + updateMain(): void; switchVariant(pos: number, value: string): void; combineAsVariants(ids: string[]): VariantContainer; isVariantHead(): boolean; @@ -16493,6 +17220,10 @@ ShapeBase: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -16552,7 +17283,8 @@ ShapeBase: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -16589,7 +17321,8 @@ ShapeBase: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -16613,7 +17346,8 @@ ShapeBase: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -16659,7 +17393,8 @@ ShapeBase: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` setParentIndex: |- ``` @@ -16789,6 +17524,18 @@ ShapeBase: Similar to the "reset overrides" action on the Penpot interface. The current shape must be a component copy instance. + Returns void + updateMain: |- + ``` + updateMain(): void + ``` + + Applies this copy's overrides to its main component and synchronizes copies. + Similar to the editor's "update main component" action. + Requires `content:write` and `library:write` permissions. + The shape must be a component copy head on the active page of the current file, + outside any other component copy, with a main component that is not deleted. + Returns void switchVariant: |- ``` @@ -16997,6 +17744,11 @@ ShapeBase: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties (`strokeWidthTop`, + `strokeWidthRight`, `strokeWidthBottom`, `strokeWidthLeft`) are only valid on + boards and rectangles. Applying one to any other shape raises a validation + error. The uniform `strokeWidth` property is accepted on every shape. + Returns void clone: |- ``` @@ -17100,8 +17852,8 @@ Stroke: Interface Stroke ================ - Represents stroke properties in Penpot. You can add a stroke to any shape except for groups. - This interface includes properties for defining the color, style, width, alignment, and caps of a stroke. + Stroke properties for any shape except groups. + Literals apply strokeWidth before top/right/bottom/left widths. ``` interface Stroke { @@ -17111,6 +17863,11 @@ Stroke: strokeOpacity?: number; strokeStyle?: "none" | "svg" | "mixed" | "solid" | "dotted" | "dashed"; strokeWidth?: number; + strokeWidthType?: "simple" | "multiple"; + strokeWidthTop?: number; + strokeWidthRight?: number; + strokeWidthBottom?: number; + strokeWidthLeft?: number; strokeAlignment?: "center" | "inner" | "outer"; strokeCapStart?: StrokeCap; strokeCapEnd?: StrokeCap; @@ -17158,7 +17915,41 @@ Stroke: strokeWidth?: number ``` - The optional width of the stroke. + Reads the top width. Setting it selects simple mode and sets all four sides. + strokeWidthType: |- + ``` + readonly strokeWidthType?: "simple" | "multiple" + ``` + + Computed width mode: simple when all four effective widths match, multiple otherwise. + strokeWidthTop: |- + ``` + strokeWidthTop?: number + ``` + + Top side width; setting it preserves the other side widths. + Boards and rectangles only; other shape types raise a validation error. + strokeWidthRight: |- + ``` + strokeWidthRight?: number + ``` + + Right side width; setting it preserves the other side widths. + Boards and rectangles only; other shape types raise a validation error. + strokeWidthBottom: |- + ``` + strokeWidthBottom?: number + ``` + + Bottom side width; setting it preserves the other side widths. + Boards and rectangles only; other shape types raise a validation error. + strokeWidthLeft: |- + ``` + strokeWidthLeft?: number + ``` + + Left side width; setting it preserves the other side widths. + Boards and rectangles only; other shape types raise a validation error. strokeAlignment: |- ``` strokeAlignment?: "center" | "inner" | "outer" @@ -17276,6 +18067,10 @@ SvgRaw: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -17312,6 +18107,7 @@ SvgRaw: detach(): void; swapComponent(component: LibraryComponent): void; resetOverrides(): void; + updateMain(): void; switchVariant(pos: number, value: string): void; combineAsVariants(ids: string[]): VariantContainer; isVariantHead(): boolean; @@ -17614,6 +18410,10 @@ SvgRaw: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -17679,7 +18479,8 @@ SvgRaw: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -17716,7 +18517,8 @@ SvgRaw: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -17740,7 +18542,8 @@ SvgRaw: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -17786,7 +18589,8 @@ SvgRaw: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` setParentIndex: |- ``` @@ -17916,6 +18720,18 @@ SvgRaw: Similar to the "reset overrides" action on the Penpot interface. The current shape must be a component copy instance. + Returns void + updateMain: |- + ``` + updateMain(): void + ``` + + Applies this copy's overrides to its main component and synchronizes copies. + Similar to the editor's "update main component" action. + Requires `content:write` and `library:write` permissions. + The shape must be a component copy head on the active page of the current file, + outside any other component copy, with a main component that is not deleted. + Returns void switchVariant: |- ``` @@ -18124,6 +18940,11 @@ SvgRaw: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties (`strokeWidthTop`, + `strokeWidthRight`, `strokeWidthBottom`, `strokeWidthLeft`) are only valid on + boards and rectangles. Applying one to any other shape raises a validation + error. The uniform `strokeWidth` property is accepted on every shape. + Returns void clone: |- ``` @@ -18251,6 +19072,10 @@ Text: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -18287,6 +19112,7 @@ Text: detach(): void; swapComponent(component: LibraryComponent): void; resetOverrides(): void; + updateMain(): void; switchVariant(pos: number, value: string): void; combineAsVariants(ids: string[]): VariantContainer; isVariantHead(): boolean; @@ -18607,6 +19433,10 @@ Text: shadow: string; strokeColor: string; strokeWidth: string; + strokeWidthTop: string; + strokeWidthRight: string; + strokeWidthBottom: string; + strokeWidthLeft: string; fontFamilies: string; fontSize: string; fontWeight: string; @@ -18774,7 +19604,8 @@ Text: Example ``` - const data = shape.getPluginData('exampleKey');console.log(data); + const data = shape.getPluginData('exampleKey'); + console.log(data); ``` setPluginData: |- ``` @@ -18811,7 +19642,8 @@ Text: Example ``` - const keys = shape.getPluginDataKeys();console.log(keys); + const keys = shape.getPluginDataKeys(); + console.log(keys); ``` getSharedPluginData: |- ``` @@ -18835,7 +19667,8 @@ Text: Example ``` - const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey');console.log(sharedData); + const sharedData = shape.getSharedPluginData('exampleNamespace', 'exampleKey'); + console.log(sharedData); ``` setSharedPluginData: |- ``` @@ -18881,7 +19714,8 @@ Text: Example ``` - const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace');console.log(sharedKeys); + const sharedKeys = shape.getSharedPluginDataKeys('exampleNamespace'); + console.log(sharedKeys); ``` setParentIndex: |- ``` @@ -19011,6 +19845,18 @@ Text: Similar to the "reset overrides" action on the Penpot interface. The current shape must be a component copy instance. + Returns void + updateMain: |- + ``` + updateMain(): void + ``` + + Applies this copy's overrides to its main component and synchronizes copies. + Similar to the editor's "update main component" action. + Requires `content:write` and `library:write` permissions. + The shape must be a component copy head on the active page of the current file, + outside any other component copy, with a main component that is not deleted. + Returns void switchVariant: |- ``` @@ -19219,6 +20065,11 @@ Text: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties (`strokeWidthTop`, + `strokeWidthRight`, `strokeWidthBottom`, `strokeWidthLeft`) are only valid on + boards and rectangles. Applying one to any other shape raises a validation + error. The uniform `strokeWidth` property is accepted on every shape. + Returns void clone: |- ``` @@ -19281,7 +20132,8 @@ Text: Example ``` - const textRange = textShape.getRange(0, 10);console.log(textRange.characters); + const textRange = textShape.getRange(0, 10); + console.log(textRange.characters); ``` applyTypography: |- ``` @@ -19716,6 +20568,10 @@ TokenBase: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -19857,6 +20713,10 @@ TokenBorderRadius: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -20120,6 +20980,10 @@ TokenShadow: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -20261,6 +21125,10 @@ TokenColor: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -20402,6 +21270,10 @@ TokenDimension: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -20546,6 +21418,10 @@ TokenFontFamilies: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -20687,6 +21563,10 @@ TokenFontSizes: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -20829,6 +21709,10 @@ TokenFontWeights: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -20970,6 +21854,10 @@ TokenLetterSpacing: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -21111,6 +21999,10 @@ TokenNumber: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -21253,6 +22145,10 @@ TokenOpacity: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -21395,6 +22291,10 @@ TokenRotation: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -21536,6 +22436,10 @@ TokenSizing: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -21677,6 +22581,10 @@ TokenSpacing: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -21818,6 +22726,10 @@ TokenBorderWidth: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -21960,6 +22872,10 @@ TokenTextCase: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -22102,6 +23018,10 @@ TokenTextDecoration: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -22378,6 +23298,10 @@ TokenTypography: and the value set to the attributes will depend on which sets are active (and will change if different sets or themes are activated later). + NOTE that the per-side stroke width properties are only valid on boards and + rectangles; applying one to any other shape raises a validation error. The + uniform `strokeWidth` property is accepted on every shape. + Returns void applyToSelected: |- ``` @@ -22807,7 +23731,8 @@ User: Example ``` - const userId = user.id;console.log(userId); + const userId = user.id; + console.log(userId); ``` name: |- ``` @@ -22818,7 +23743,8 @@ User: Example ``` - const userName = user.name;console.log(userName); + const userName = user.name; + console.log(userName); ``` avatarUrl: |- ``` @@ -22829,7 +23755,8 @@ User: Example ``` - const avatarUrl = user.avatarUrl;console.log(avatarUrl); + const avatarUrl = user.avatarUrl; + console.log(avatarUrl); ``` color: |- ``` @@ -22840,7 +23767,8 @@ User: Example ``` - const userColor = user.color;console.log(userColor); + const userColor = user.color; + console.log(userColor); ``` sessionId: |- ``` @@ -22851,7 +23779,8 @@ User: Example ``` - const sessionId = user.sessionId;console.log(sessionId); + const sessionId = user.sessionId; + console.log(sessionId); ``` Variants: overview: |- @@ -23096,7 +24025,8 @@ Bounds: Example ``` - const bounds = { x: 50, y: 50, width: 200, height: 100 };console.log(bounds); + const bounds = { x: 50, y: 50, width: 200, height: 100 }; + console.log(bounds); ``` ``` @@ -23459,7 +24389,10 @@ Shape: Example ``` - let shape: Shape;if (penpot.utils.types.isRectangle(shape)) { console.log(shape.type);} + let shape: Shape; + if (penpot.utils.types.isRectangle(shape)) { + console.log(shape.type); + } ``` Referenced by: Board, Boolean, Context, ContextGeometryUtils, ContextTypesUtils, Ellipse, EventsMap, FlexLayout, GridLayout, Group, Image, Interaction, Library, LibraryComponent, LibraryTypography, LibraryVariantComponent, OpenOverlay, OverlayAction, Page, Path, Penpot, Rectangle, ShapeBase, SvgRaw, Text, ToggleOverlay, TokenBase, TokenBorderRadius, TokenBorderWidth, TokenColor, TokenDimension, TokenFontFamilies, TokenFontSizes, TokenFontWeights, TokenLetterSpacing, TokenNumber, TokenOpacity, TokenRotation, TokenShadow, TokenSizing, TokenSpacing, TokenTextCase, TokenTextDecoration, TokenTypography, VariantContainer, Viewport @@ -23632,7 +24565,14 @@ TokenDimensionProps: ============================== ``` - TokenDimensionProps: "x" | "y" | "strokeWidth" + TokenDimensionProps: + | "x" + | "y" + | "strokeWidth" + | "strokeWidthTop" + | "strokeWidthRight" + | "strokeWidthBottom" + | "strokeWidthLeft" ``` The properties that a Dimension token can be applied to. @@ -23765,7 +24705,12 @@ TokenBorderWidthProps: ================================ ``` - TokenBorderWidthProps: "strokeWidth" + TokenBorderWidthProps: + | "strokeWidth" + | "strokeWidthTop" + | "strokeWidthRight" + | "strokeWidthBottom" + | "strokeWidthLeft" ``` The properties that a BorderWidth token can be applied to. diff --git a/mcp/packages/server/data/initial_instructions.md b/mcp/packages/server/data/initial_instructions.md index be9177619c..69da0c7aab 100644 --- a/mcp/packages/server/data/initial_instructions.md +++ b/mcp/packages/server/data/initial_instructions.md @@ -19,10 +19,12 @@ This allows you to inspect intermediate results while still being able to build ## Asynchronous Updates Changes made to a design may take effect asynchronously. -So if you need to read the result of your executions/observe properties affected by a change in the same `execude_code` call, use +So if you need to read the result of your executions/observe properties affected by a change in the same `execute_code` call, use `await penpot.waitForLayoutUpdate();` before trying to observe changes. -Every `execude_code` call waits for updates before applying your code, so you never need to call `waitForLayoutUpdate` at the beginning of your code. +To wait only for a single shape (and its children), use `await shape.waitForLayoutUpdate();`. +Both accept an optional timeout in milliseconds (default 30000) and reject when it elapses. +Every `execute_code` call waits for updates before applying your code, so you never need to call `waitForLayoutUpdate` at the beginning of your code. # The Structure of Penpot Designs @@ -57,6 +59,8 @@ Actual low-level shape types are `Rectangle`, `Path`, `Text`, `Ellipse`, `Image` The objects are not shared references; you can modify properties of the fills in the target shape without affecting the source shape. - Colors: Use hex strings with caps only (e.g. '#FF5533') - IMPORTANT: The contents of the arrays are read-only. You cannot modify individual fills/strokes; you need to replace the entire array to change them! + - Per-side stroke widths (boards and rectangles only; other shapes raise a validation error): `strokeWidthTop`, `strokeWidthRight`, `strokeWidthBottom`, `strokeWidthLeft`. + Setting `strokeWidth` sets all four sides. Read-only `strokeWidthType` is `"simple"` when all four widths match, `"multiple"` otherwise. * `borderRadius` - Uniform border radius for all corners * `borderRadiusTopLeft`, `borderRadiusTopRight`, `borderRadiusBottomRight`, `borderRadiusBottomLeft` - Individual corner radii. * `blur: Blur` - Blur properties @@ -204,6 +208,9 @@ General pointers for working with Penpot designs: * Prefer `penpotUtils` helper functions — avoid reimplementing shape searching. * To get an overview of a single page, use `penpotUtils.shapeStructure(page.root, 3)`. Note that `penpot.root` refers to the current page only. When working across pages, first determine the relevant page(s). + * IMPORTANT: Shapes can only be created or modified on the active page; changes to shapes on other pages raise a validation error. + To work on another page, first activate it with `await penpot.openPage(page)`. + `penpot.createPage()` does NOT activate the new page; call `openPage` before adding shapes to it. * Use `penpotUtils.findShapes()` or `penpotUtils.findShape()` with predicates to locate elements efficiently. Common tasks - Quick Reference (ALWAYS use penpotUtils for these): @@ -293,6 +300,17 @@ Detaching: * When creating new design elements based on a component instance/copy, use `shape.detach()` to break the link to the main component, allowing independent modification. * Without detaching, some manipulations will have no effect; e.g. child/descendant removal will not work. +Syncing copies and main components: + * `copy.resetOverrides()` - restores a copy (and its children) to the attributes of its main component. + * `copy.updateMain()` - applies the overrides of a copy to its main component and syncs all copies. + The copy must be a copy head on the active page, not nested in another copy. + +Managing components (current file's library only): + * `component.remove()` - deletes the component and its main instance; existing copies keep their link. + * `library.deletedComponents: LibraryComponent[]` - deleted components; `component.restore()` brings one back. + * `component.duplicate(): LibraryComponent` - duplicates the component and its main instance. + * `component.annotation: string | null` - writable annotation (max. 300 characters); set `null` to delete it. + ### Variants Variants are a system for grouping related component versions along named property axes (e.g. Type, Style), powering a structured swap UI for designers using component instances. @@ -355,11 +373,16 @@ The token library: `penpot.library.local.tokens` (type: `TokenCatalog`) * `addSet({name: string}): TokenSet` - Create new set * `addTheme({group: string, name: string}): TokenTheme` - Create new theme +Token source: `penpot.library.tokensSource: Library` is the library that supplies the file's tokens (default: `penpot.library.local`). + * Assigning a connected library makes its tokens the file's tokens; assign `penpot.library.local` to use local tokens again. + * With an external source, `penpot.library.local.tokens` lists the source's tokens and is where you toggle active sets/themes; + the source library's own catalog is read-only. + `TokenSet` contains tokens with unique names: * `active: boolean` - Only active sets affect shapes; use `set.toggleActive()` to change: `if (!set.active) set.toggleActive();` * `tokens: Token[]` - All tokens in set * `addToken({type: TokenType, name: string, value: TokenValueString}): Token` - Creates a token, adding it to the set. - - `TokenType`: "color" | "dimension" | "spacing" | "typography" | "shadow" | "opacity" | "borderRadius" | "borderWidth" | "fontWeights" | "fontSizes" | "fontFamilies" | "letterSpacing" | "textDecoration" | "textCase" + - `TokenType`: "color" | "dimension" | "spacing" | "sizing" | "typography" | "shadow" | "opacity" | "number" | "rotation" | "borderRadius" | "borderWidth" | "fontWeights" | "fontSizes" | "fontFamilies" | "letterSpacing" | "textDecoration" | "textCase" - `value`: depends on the type of token (inspect `Token` and related types) - Examples: const token = set.addToken({type: "color", name: "color.primary", value: "#0066FF"}); // direct value @@ -385,7 +408,7 @@ Applying tokens: - TokenBorderRadiusProps: "borderRadiusTopLeft", "borderRadiusTopRight", "borderRadiusBottomRight", "borderRadiusBottomLeft" - TokenShadowProps: "shadow" - TokenColorProps: "fill", "strokeColor" - - TokenDimensionProps: "x", "y", "strokeWidth" + - TokenDimensionProps: "x", "y", "strokeWidth", "strokeWidthTop", "strokeWidthRight", "strokeWidthBottom", "strokeWidthLeft" - TokenFontFamiliesProps: "fontFamilies" - TokenFontSizesProps: "fontSize" - TokenFontWeightProps: "fontWeight" @@ -394,10 +417,11 @@ Applying tokens: - TokenOpacityProps: "opacity" - TokenSizingProps: "width", "height", "layoutItemMinW", "layoutItemMaxW", "layoutItemMinH", "layoutItemMaxH" - TokenSpacingProps: "rowGap", "columnGap", "paddingLeft", "paddingTop", "paddingRight", "paddingBottom", "marginLeft", "marginTop", "marginRight", "marginBottom" - - TokenBorderWidthProps: "strokeWidth" + - TokenBorderWidthProps: "strokeWidth", "strokeWidthTop", "strokeWidthRight", "strokeWidthBottom", "strokeWidthLeft" - TokenTextCaseProps: "textCase" - TokenTextDecorationProps: "textDecoration" - TokenTypographyProps: "typography" + The per-side stroke width properties apply only to boards and rectangles; `strokeWidth` works on every shape. * `token.applyToShapes(shapes, properties)` - Apply from token * Application is **asynchronous** (use `waitForLayoutUpdate`) * After application: diff --git a/mcp/pnpm-lock.yaml b/mcp/pnpm-lock.yaml index 917b306858..11c3718d89 100644 --- a/mcp/pnpm-lock.yaml +++ b/mcp/pnpm-lock.yaml @@ -186,11 +186,11 @@ importers: packages/plugin: dependencies: '@penpot/plugin-styles': - specifier: 1.5.0 - version: 1.5.0 + specifier: 1.6.0 + version: 1.6.0 '@penpot/plugin-types': - specifier: 1.5.0 - version: 1.5.0 + specifier: 1.6.0 + version: 1.6.0 devDependencies: cross-env: specifier: ^10.1.0 @@ -657,11 +657,11 @@ packages: '@oxc-project/types@0.155.0': resolution: {integrity: sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==} - '@penpot/plugin-styles@1.5.0': - resolution: {integrity: sha512-rwXFBRPd0IZs3ens+eRT8oA5WqkQgF6xlW6fCfH7U1NHRjej9HH7vTGXmfjoIVml6Xx1sbyYHZVxkQC8Ub8+zA==} + '@penpot/plugin-styles@1.6.0': + resolution: {integrity: sha512-vmIDYbQqIcTPxYer7/C1nmo5QJyErTI4ZcFNELuENMnLcs+UeAFWtqsMENGoY6jfldEujbUwoglS9hBKI11x5Q==} - '@penpot/plugin-types@1.5.0': - resolution: {integrity: sha512-hFk4Rx66rLaSUWoN6bhxXkDI2ymwKg9xokdslvZvXM5MSmEmfhsJKUMwtuzgYWljbbfaQhK+DjK8g8yVbbavtA==} + '@penpot/plugin-types@1.6.0': + resolution: {integrity: sha512-jrKBY97CT0RLsJTbZTGWr3PYVKZimPNpFD4IlAQuvnrxtTuSwCEisSF3qx+ARnQeBUzgXivvHN3pB+eXCPGT/A==} '@pinojs/redact@0.4.0': resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} @@ -1853,9 +1853,9 @@ snapshots: '@oxc-project/types@0.155.0': {} - '@penpot/plugin-styles@1.5.0': {} + '@penpot/plugin-styles@1.6.0': {} - '@penpot/plugin-types@1.5.0': {} + '@penpot/plugin-types@1.6.0': {} '@pinojs/redact@0.4.0': {} diff --git a/mcp/pnpm-workspace.yaml b/mcp/pnpm-workspace.yaml index 3da100dca6..105bd49454 100644 --- a/mcp/pnpm-workspace.yaml +++ b/mcp/pnpm-workspace.yaml @@ -14,6 +14,8 @@ minimumReleaseAgeExclude: - fast-uri@3.1.3 || 3.1.4 || 3.1.5 - ip-address@10.2.1 || 10.2.2 || 10.3.1 - hono@4.12.34 + - "@penpot/plugin-styles@1.6.0" + - "@penpot/plugin-types@1.6.0" packages: - "packages/common" diff --git a/plugins/CHANGELOG.md b/plugins/CHANGELOG.md index de0f09ed73..8322c3a1f6 100644 --- a/plugins/CHANGELOG.md +++ b/plugins/CHANGELOG.md @@ -1,4 +1,4 @@ -## 1.6.0 (Unreleased) +## 1.6.0 (2026-11-10) ### 🚀 Features diff --git a/plugins/libs/plugin-types/package.json b/plugins/libs/plugin-types/package.json index e4959293fa..9ea3e45387 100644 --- a/plugins/libs/plugin-types/package.json +++ b/plugins/libs/plugin-types/package.json @@ -1,6 +1,6 @@ { "name": "@penpot/plugin-types", - "version": "1.5.0", + "version": "1.6.0", "typings": "./index.d.ts", "type": "module", "scripts": { diff --git a/plugins/libs/plugins-runtime/package.json b/plugins/libs/plugins-runtime/package.json index 23aeeb2ee5..2ceb163a29 100644 --- a/plugins/libs/plugins-runtime/package.json +++ b/plugins/libs/plugins-runtime/package.json @@ -1,8 +1,8 @@ { "name": "@penpot/plugins-runtime", - "version": "1.5.0", + "version": "1.6.0", "dependencies": { - "@penpot/plugin-types": "workspace:^", + "@penpot/plugin-types": "^1.6.0", "ses": "^2.3.0", "zod": "^4.6.5" }, diff --git a/plugins/libs/plugins-styles/package.json b/plugins/libs/plugins-styles/package.json index 5badd11056..57a50b567d 100644 --- a/plugins/libs/plugins-styles/package.json +++ b/plugins/libs/plugins-styles/package.json @@ -1,6 +1,6 @@ { "name": "@penpot/plugin-styles", - "version": "1.5.0", + "version": "1.6.0", "dependencies": {}, "scripts": { "build": "node ../../tools/scripts/build-css.mjs", diff --git a/plugins/pnpm-lock.yaml b/plugins/pnpm-lock.yaml index b84286c8f0..ca2f36c392 100644 --- a/plugins/pnpm-lock.yaml +++ b/plugins/pnpm-lock.yaml @@ -347,7 +347,7 @@ importers: version: 0.14.5(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(optionator@0.9.4)(typescript@6.0.2)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0)) vite-plugin-dts: specifier: 5.1.2 - version: 5.1.2(@microsoft/api-extractor@7.56.0(@types/node@26.6.4))(@rspack/core@1.6.8(@swc/helpers@0.5.18))(esbuild@0.28.2)(rolldown@1.2.2)(rollup@4.60.4)(supports-color@10.2.2)(typescript@6.0.2)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0))(webpack@5.106.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)) + version: 5.1.2(@microsoft/api-extractor@7.56.0(@types/node@26.6.4))(@rspack/core@1.6.8(@swc/helpers@0.5.18))(esbuild@0.28.2)(rolldown@1.2.12)(rollup@4.60.4)(supports-color@10.2.2)(typescript@6.0.2)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0))(webpack@5.106.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)) vite-plugin-static-copy: specifier: ^4.1.1 version: 4.1.1(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0)) @@ -380,10 +380,10 @@ importers: version: 7.0.2 vite: specifier: ^8.3.2 - version: 8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.97.3)(sass@1.101.0)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0) + version: 8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0) vite-live-preview: specifier: ^0.4.0 - version: 0.4.0(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.97.3)(sass@1.101.0)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0)) + version: 0.4.0(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0)) apps/contrast-plugin: {} @@ -416,7 +416,7 @@ importers: libs/plugins-runtime: dependencies: '@penpot/plugin-types': - specifier: workspace:^ + specifier: ^1.6.0 version: link:../plugin-types ses: specifier: ^2.3.0 @@ -1576,9 +1576,6 @@ packages: cpu: [x64] os: [win32] - '@oxc-project/types@0.142.0': - resolution: {integrity: sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==} - '@oxc-project/types@0.149.0': resolution: {integrity: sha512-Efcc+iF0j3Bf67YjEqIqWXbX5XddXoK/Mw4K1/JuXwRCZ8N16VR7iT23nlCc9XrveFVh/E5Rqs2StT0V8v9LdA==} @@ -1710,12 +1707,6 @@ packages: cpu: [arm64] os: [android] - '@rolldown/binding-android-arm64@1.2.2': - resolution: {integrity: sha512-l7x215OGvo1s52JWmR8U/DAVzEDWBCIbTm28aeJV/WDTSHgcKXaZTuBT0hJMs5NggilfJTW3clZVvd24yfKJxA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - '@rolldown/binding-android-arm64@1.2.8': resolution: {integrity: sha512-dIYTWl9XprMUiQFoc55KUyk/oS8SKYH3zFl0LTR7RT0Xj4hgSVyuJcroH8JUu8RcpF8fTB6E0aOwCkZoYPcDSQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1728,12 +1719,6 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.2.2': - resolution: {integrity: sha512-9u9Xv6c1AJZT0FfwH5vrMG5Jjcwhc1MlyrPu0XfTqkzsmqfks2M6W/o5XwAJgVVN/jHpqqngC1WevHKKTIUtIA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - '@rolldown/binding-darwin-arm64@1.2.8': resolution: {integrity: sha512-PCSDQGXD2IyTEFrcgPyBM8jJuGmrbCMuoIOXdbEGVemruKACXoLQJrb+A45Z0L5t1RQkdfJprAYPkikbh7dzdA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1746,12 +1731,6 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.2.2': - resolution: {integrity: sha512-9W1mbGZAfW3oqd85bhBkmpyHCCzL1TeG/zFFP3vg7b0rlly8cxOcre5nXwz+LHazCwac2MNWgPdPCHndABjpWQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - '@rolldown/binding-darwin-x64@1.2.8': resolution: {integrity: sha512-Uk7lRsGhPFHVX/sAUC6D5H9Ol30dFHd6iquokll2th3LpdJ3F5CzQB+7DHn0Ri2mG+U7k2zXiPHDrwZenXhwSA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1764,12 +1743,6 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.2.2': - resolution: {integrity: sha512-0p1lhiCSCyaerFwtrdZQUx7NqGk6LQnaRKWX7tFQqwQgvX0rjM15cIkm3pax1UpEakK14C4mOxx/jSqCBdBRqQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - '@rolldown/binding-freebsd-x64@1.2.8': resolution: {integrity: sha512-DjszaTEVogPqA5bYzsEeqDCQxbcp2fexQwKcRspYji2yzR68fCf+e4fx6kBSRDwX5/brZaHw/hWS9+A/+/w9sQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1782,12 +1755,6 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.2.2': - resolution: {integrity: sha512-e+cOJXrJ2L3zx6YzqPg+f6Wbk3V1cKB8bOhbaYdVYN3DdquzNdRAmrbETz1qnt5yp/c7JNlNjmITiA2cVneQ7w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.2.8': resolution: {integrity: sha512-zmwa7FTmdzB6aaEEuuls18H6Ap5JmJPSoPTuXixeJZV6tG40SyLkApQtz1g8ptZtiEKqj9OM0oNLPh1AgvE31Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1801,13 +1768,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.2.2': - resolution: {integrity: sha512-JsSMsj6sNat/MuhG5fnBD7QgbtpHKVe30x5/bAVirDHdhoQRXJkF6xc0Jqk8O4fiCUQAzMOoH9wZi3m60c8wtg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.2.8': resolution: {integrity: sha512-KdYQDPHwJVnbFwdTGMgxsI9SqblBlz6STGM+w1We/d5B8OWWidYH0MwkU/uA1wM5fIpO2MkOVxXrNzzuZhw9ew==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1822,13 +1782,6 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-arm64-musl@1.2.2': - resolution: {integrity: sha512-B5G/zJdHaoJn9vD50eGHWkiWfmq8Uhi3IiLPJTzmZTrAalk1bztUikSXo0qga18ibE0IXboyeMUnhPjhAJ45wQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - '@rolldown/binding-linux-arm64-musl@1.2.8': resolution: {integrity: sha512-jFJTifHnNPY+yzOoNZQfSIysrVyXzEQPhPnOUjmD1bcQGHH6s7c8cViKWar8YplQImE5N9JRqMCLrM2CdxOrZA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1843,13 +1796,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-ppc64-gnu@1.2.2': - resolution: {integrity: sha512-6mC/awzKka8W6EoekjegpfGkjz8jXWDX63pqu/HYVpyKtZfu65Jsh4QAH3Kej3CAv/c1oGX7psTmFEbr0mDxLA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-ppc64-gnu@1.2.8': resolution: {integrity: sha512-FhiOziBDWPBjbcmRzfLyIJnaP7AVMFXT7YCXPjXxj7wKU3vx24RjrCNN/zjvVa+N2vVoHJwCoUBvsrN/DG3zIA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1864,13 +1810,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.2.2': - resolution: {integrity: sha512-412MX9fJLdA1IK28EZnc8jYv2HRTleOZgfLQumJ5zy7OeJLZlg/CETwFaXjNmGVxG51cFHpKLqb5LKvBC+HsHA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.2.8': resolution: {integrity: sha512-WnHfADMzOV2Y55wlx1hzzQnar/wDt/VdvWSD99r18Mz9ylNieIGOkRx3UV21h7m/eJvjySYJkO26VvGNFkwsIQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1885,13 +1824,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.2.2': - resolution: {integrity: sha512-Q/+HI/ToJafZ1iCqGgVQXUEkIjufHCTF0gBQ2a5o3cg7GJ2h0qyq3nvvSmU+bGda2/7ygXpTY4TM6gO9OhQ0ZA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.2.8': resolution: {integrity: sha512-H9tRr5ibfXFVLxbPOseVewewFpl28zcEdjRDt2FTUZU7odxP0gEv1ki4/kGmcGOh78oRwZuuQllGLZ9zTJp84g==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1906,13 +1838,6 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-x64-musl@1.2.2': - resolution: {integrity: sha512-ZKp/w41n6wCvxzxQHtQSbuphfX3Y4cCvbjkKHusrLx4lh+JWLTU7StSltO/DKARISzbj368d+qUaCjI8K2wzXw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - '@rolldown/binding-linux-x64-musl@1.2.8': resolution: {integrity: sha512-UefiqfM3D6IVNlZ8tSGs9+Ejjud2T+oxO0IHADU45Y+lyEjD2dVFyZHbkfX0LUb5Zugo/oIv1eCO/KVYhgYJYA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1926,12 +1851,6 @@ packages: cpu: [arm64] os: [openharmony] - '@rolldown/binding-openharmony-arm64@1.2.2': - resolution: {integrity: sha512-pxE6xD4KS3eAROkKK5yrhB9/3+vhlhVGMvlQLbdpzrBGDbKrnzx3RLwPaHvasLo6jgaiBLn7e04Df9C4tYhjmA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - '@rolldown/binding-openharmony-arm64@1.2.8': resolution: {integrity: sha512-637Ke4kWSy6rp9cxQ9gMOXlxPgIw/c1beASV4M//3+9I4uwBVOOl74G+e3zyU3u19U7RkRl/HuewixZ/Z6+Rjg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1944,12 +1863,6 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.2.2': - resolution: {integrity: sha512-4MqEue5re+xIZzAWsB8sj0P1kqZySWqIuN4t6QaIO/YA6SFwySOLruvWQFzfmqk8LBK2P30KCSJwf6mJCZZ5/A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.2.8': resolution: {integrity: sha512-xWBkPOF1Q9k/Gv1nQXnVdLxKu74jXppuOM4Z3mnypVUJJJwLsMl7hNJGRAUJoG8A5MgOI1ACKM+wBFxSJzKy4A==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1962,12 +1875,6 @@ packages: cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.2.2': - resolution: {integrity: sha512-NweNxxD0Nf9t8v7kodun45Ijp3EIwYY+uydPP6qBEYvfBqhIjN6dZMzlQja3tqX/aLs3F3Uz+AxDpKgRhpOZQg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - '@rolldown/binding-win32-x64-msvc@1.2.8': resolution: {integrity: sha512-uz2ZvfgXbxqNwijjjbxrnvALwpyODDcgc1T1N8N3rf/DXKQmaFwmB4LX4yyjggpwN2obdQLb2rgirX5ffCWYng==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2846,10 +2753,6 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - chokidar@5.0.0: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} @@ -2887,9 +2790,6 @@ packages: resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} engines: {node: '>=20'} - colorjs.io@0.5.2: - resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} - colorjs.io@0.7.1: resolution: {integrity: sha512-LY7OHnJZxHwT5UlzNa9bbhHHDbzB6yE5+3MIPwJEQKRvSCt/T4G7epsj+9j2BExUIIfXFIJGsIXUKdfrK9Q5tA==} @@ -3511,6 +3411,7 @@ packages: image-size@0.5.5: resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} engines: {node: '>=0.10.0'} + deprecated: Please migrate to image-size@2.x hasBin: true immutable@5.1.9: @@ -4261,10 +4162,6 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - readdirp@5.0.0: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} @@ -4307,11 +4204,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rolldown@1.2.2: - resolution: {integrity: sha512-opwpo1tQBAcpSUJDt94B7hhLNGOKjCdE//XXjeLrnx9b83bjnw45tXdg1b09yEw/VLFBJGZpwRULMmOZo7ol+A==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - rolldown@1.2.8: resolution: {integrity: sha512-Z67nTmhZe7anqnM/EjI392w5i/ANUinjip7QYsOyN37oayduxt3ksdX0hf5OOamkAd53BiIHfbfSzfUmzKFQqQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4344,82 +4236,42 @@ packages: resolution: {integrity: sha512-toyMCyUKkT6DsYlHuKZGjd8T6WltaW4TGX07F7HnF4tNJM5m/8VaVsd74zrq3QSPqGE9JjxIDK4NrNc/QY9pkA==} cpu: ['!arm', '!arm64', '!riscv64', '!x64'] - sass-embedded-all-unknown@1.97.3: - resolution: {integrity: sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg==} - cpu: ['!arm', '!arm64', '!riscv64', '!x64'] - sass-embedded-android-arm64@1.104.1: resolution: {integrity: sha512-yW3BVW4YFpN2vu2cVQ+Pz5JrRTvoIz36aCdo+J/Mo1A9gEN8eVPV/AL7aeZ803YdKgIitd3qw3pY4wpmT6TXNg==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [android] - sass-embedded-android-arm64@1.97.3: - resolution: {integrity: sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [android] - sass-embedded-android-arm@1.104.1: resolution: {integrity: sha512-g/XPAJYAzSSQZFP4xCdGD0HLKB4mf24cJ/+5Nls8rMool3jNkBv9+AFO4EV0b+RxN8rLcEsMccH1CR64yIFYcQ==} engines: {node: '>=14.0.0'} cpu: [arm] os: [android] - sass-embedded-android-arm@1.97.3: - resolution: {integrity: sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [android] - sass-embedded-android-riscv64@1.104.1: resolution: {integrity: sha512-ZYY8oMKQS7Q/6FBoC8w3T16O3MucDe3xv8iKym41Nht5uvLCGGpm4fC4OF5nlv7wQkJv8oactYddGG3Wd0Rqkg==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [android] - sass-embedded-android-riscv64@1.97.3: - resolution: {integrity: sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA==} - engines: {node: '>=14.0.0'} - cpu: [riscv64] - os: [android] - sass-embedded-android-x64@1.104.1: resolution: {integrity: sha512-5WZKC4lSfjMIjzZdQUlYQUAV+UiatBhD8w28U7cYLLj4/dMgEPOBd4g3VMv0BwpgH2JOaycMS42dXq29W2bcDg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [android] - sass-embedded-android-x64@1.97.3: - resolution: {integrity: sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [android] - sass-embedded-darwin-arm64@1.104.1: resolution: {integrity: sha512-oatuHzn0NsEg0d9Dcze6CuWUPvuETtMxRK4cv0eRAg7p6R0vHnv5GZRyWG6gEy3nc/ha/L+GtTasWVU82f4jrQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - sass-embedded-darwin-arm64@1.97.3: - resolution: {integrity: sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [darwin] - sass-embedded-darwin-x64@1.104.1: resolution: {integrity: sha512-gql/5sHGzUTVwuHfM3QLCDeb6NYwen+LLj22gz81C2NKHF/4nUtDyh4N+fURWdT7J0/EhtMOd0+FLML3sGNP7g==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - sass-embedded-darwin-x64@1.97.3: - resolution: {integrity: sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [darwin] - sass-embedded-linux-arm64@1.104.1: resolution: {integrity: sha512-sVWUKXNTu8sP3X95Df0xo/t49Ce5IseTIMqXHxhFBKVmx7gf7kBWNLK0wH5ym+4khc+B5nNJPgq4IxpelG8tMQ==} engines: {node: '>=14.0.0'} @@ -4427,13 +4279,6 @@ packages: os: [linux] libc: glibc - sass-embedded-linux-arm64@1.97.3: - resolution: {integrity: sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [linux] - libc: glibc - sass-embedded-linux-arm@1.104.1: resolution: {integrity: sha512-WfmshPJOp9vUKxgp8wZ2ncaKBbyrlW9J51M2aUQHWECjMNxTULnGOHWSmD7FViXv4zwn1Co5FIFQUipW7RCxtA==} engines: {node: '>=14.0.0'} @@ -4441,13 +4286,6 @@ packages: os: [linux] libc: glibc - sass-embedded-linux-arm@1.97.3: - resolution: {integrity: sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [linux] - libc: glibc - sass-embedded-linux-musl-arm64@1.104.1: resolution: {integrity: sha512-H7b+LzZ/w8pwNExInM8HDHraqvxCMdUc5ZRGU/aSJJhZ9HjeRKBjF3GxaisVHnx7o18j1l4VQ5cLBL9tTmNzZw==} engines: {node: '>=14.0.0'} @@ -4455,13 +4293,6 @@ packages: os: [linux] libc: musl - sass-embedded-linux-musl-arm64@1.97.3: - resolution: {integrity: sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [linux] - libc: musl - sass-embedded-linux-musl-arm@1.104.1: resolution: {integrity: sha512-k0cQ/CxBzFVYiQEObg6CpF6CUglkdEhi/DZgZXQbwC27kbGGY+fatmIs/cFPJL2z1ulACwoAr86RQUFzYvw5eg==} engines: {node: '>=14.0.0'} @@ -4469,13 +4300,6 @@ packages: os: [linux] libc: musl - sass-embedded-linux-musl-arm@1.97.3: - resolution: {integrity: sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [linux] - libc: musl - sass-embedded-linux-musl-riscv64@1.104.1: resolution: {integrity: sha512-9DYdn4wfrkidjxJVtEd2iCx8HKdZe+uF82GDmrYEZhgu4NjVE6a4fQyW7OLwzn3erZMHKBaObBOH1d37DnXI1A==} engines: {node: '>=14.0.0'} @@ -4483,13 +4307,6 @@ packages: os: [linux] libc: musl - sass-embedded-linux-musl-riscv64@1.97.3: - resolution: {integrity: sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA==} - engines: {node: '>=14.0.0'} - cpu: [riscv64] - os: [linux] - libc: musl - sass-embedded-linux-musl-x64@1.104.1: resolution: {integrity: sha512-5xz+nAr01b6yaRdrGVgE7lNvm1lGFjwNdUvnz+teidvHCbD5oTcbhrRVrnDoLHHvq5n3Jve9TzWaaHhezaEfHA==} engines: {node: '>=14.0.0'} @@ -4497,13 +4314,6 @@ packages: os: [linux] libc: musl - sass-embedded-linux-musl-x64@1.97.3: - resolution: {integrity: sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [linux] - libc: musl - sass-embedded-linux-riscv64@1.104.1: resolution: {integrity: sha512-oWryPJWTXK5adtlz/FD7wd2kS4I0CEgp6mWLUVb4oMFURMLz9bA9fO87D7lc4SV++lds7T51PU1kykCbOvNHMg==} engines: {node: '>=14.0.0'} @@ -4511,13 +4321,6 @@ packages: os: [linux] libc: glibc - sass-embedded-linux-riscv64@1.97.3: - resolution: {integrity: sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA==} - engines: {node: '>=14.0.0'} - cpu: [riscv64] - os: [linux] - libc: glibc - sass-embedded-linux-x64@1.104.1: resolution: {integrity: sha512-j/sX/yKTx/wJKepC5/ISlR6kPeSuHKThf76D2za5i2VnbHg0MN19jQq3WMorowR3kRghqt6azs3awogG+e7IRA==} engines: {node: '>=14.0.0'} @@ -4525,70 +4328,32 @@ packages: os: [linux] libc: glibc - sass-embedded-linux-x64@1.97.3: - resolution: {integrity: sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [linux] - libc: glibc - sass-embedded-unknown-all@1.104.1: resolution: {integrity: sha512-RaMsYZB5mRioL4qhoI7T5mmNb2OunakbPTJW2cuu3MeIULnGoxo7Wd5QKFxeQvF7sSQL57RuaQ+q9pH+/pQ9Fg==} os: ['!android', '!darwin', '!linux', '!win32'] - sass-embedded-unknown-all@1.97.3: - resolution: {integrity: sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q==} - os: ['!android', '!darwin', '!linux', '!win32'] - sass-embedded-win32-arm64@1.104.1: resolution: {integrity: sha512-fS6DL7lcnTPclqGLF4xRt8egZlFY9cU23d57ufbWqaUbCFu9JTu0+8qB4jMxfx1la6byi3GoSTfbnNOLfWv8sw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - sass-embedded-win32-arm64@1.97.3: - resolution: {integrity: sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [win32] - sass-embedded-win32-x64@1.104.1: resolution: {integrity: sha512-/c4N2A93Ckms6DuRFVftKYISuI1tyC8gmlVJ8WaWFzgCBN/Swq2rARJIBUNeuxlmxjmYXfd3+2f/u887K63wbA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - sass-embedded-win32-x64@1.97.3: - resolution: {integrity: sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [win32] - sass-embedded@1.104.1: resolution: {integrity: sha512-7LxbtPJ1MWKVbhzOnGx1sHTkHTcHVJ9hbgVsU29p/8gY1VeXt19fcJFr5xsx2f6zfrrR3FeOcYMt0uYDLAxpgw==} engines: {node: '>=20.19.0'} hasBin: true - sass-embedded@1.97.3: - resolution: {integrity: sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA==} - engines: {node: '>=16.0.0'} - hasBin: true - - sass@1.101.0: - resolution: {integrity: sha512-OL3GoQyoUdDt843DpVmDO6y2k1sc5IhUDSpu8XucEI+35neq5QivZ1iuegnpraEVTJXlQGK1gl27zKcTLEPbQw==} - engines: {node: '>=20.19.0'} - hasBin: true - sass@1.104.1: resolution: {integrity: sha512-yDA+1aIG3EHgN4V/BvuhCvu61FF6hEd4e+9DxikUm9U0CAGuvdIZ/UYy7qbOxjhbbWQraoyLlMuzdRGOSV5Bmw==} engines: {node: '>=20.19.0'} hasBin: true - sass@1.97.3: - resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==} - engines: {node: '>=14.0.0'} - hasBin: true - sax@1.6.1: resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} engines: {node: '>=11.0.0'} @@ -5400,7 +5165,7 @@ snapshots: '@angular-devkit/core@22.2.1(chokidar@5.0.0)': dependencies: ajv: 8.20.0 - ajv-formats: 3.0.1(ajv@8.20.0) + ajv-formats: 3.0.1 jsonc-parser: 3.3.1 picomatch: 4.0.7 rxjs: 7.8.2 @@ -6439,9 +6204,6 @@ snapshots: '@oxc-parser/binding-win32-x64-msvc@0.150.0': optional: true - '@oxc-project/types@0.142.0': - optional: true - '@oxc-project/types@0.149.0': {} '@oxc-project/types@0.150.0': {} @@ -6524,126 +6286,84 @@ snapshots: '@rolldown/binding-android-arm64@1.2.12': optional: true - '@rolldown/binding-android-arm64@1.2.2': - optional: true - '@rolldown/binding-android-arm64@1.2.8': optional: true '@rolldown/binding-darwin-arm64@1.2.12': optional: true - '@rolldown/binding-darwin-arm64@1.2.2': - optional: true - '@rolldown/binding-darwin-arm64@1.2.8': optional: true '@rolldown/binding-darwin-x64@1.2.12': optional: true - '@rolldown/binding-darwin-x64@1.2.2': - optional: true - '@rolldown/binding-darwin-x64@1.2.8': optional: true '@rolldown/binding-freebsd-x64@1.2.12': optional: true - '@rolldown/binding-freebsd-x64@1.2.2': - optional: true - '@rolldown/binding-freebsd-x64@1.2.8': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.2.12': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.2.2': - optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.2.8': optional: true '@rolldown/binding-linux-arm64-gnu@1.2.12': optional: true - '@rolldown/binding-linux-arm64-gnu@1.2.2': - optional: true - '@rolldown/binding-linux-arm64-gnu@1.2.8': optional: true '@rolldown/binding-linux-arm64-musl@1.2.12': optional: true - '@rolldown/binding-linux-arm64-musl@1.2.2': - optional: true - '@rolldown/binding-linux-arm64-musl@1.2.8': optional: true '@rolldown/binding-linux-ppc64-gnu@1.2.12': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.2.2': - optional: true - '@rolldown/binding-linux-ppc64-gnu@1.2.8': optional: true '@rolldown/binding-linux-s390x-gnu@1.2.12': optional: true - '@rolldown/binding-linux-s390x-gnu@1.2.2': - optional: true - '@rolldown/binding-linux-s390x-gnu@1.2.8': optional: true '@rolldown/binding-linux-x64-gnu@1.2.12': optional: true - '@rolldown/binding-linux-x64-gnu@1.2.2': - optional: true - '@rolldown/binding-linux-x64-gnu@1.2.8': optional: true '@rolldown/binding-linux-x64-musl@1.2.12': optional: true - '@rolldown/binding-linux-x64-musl@1.2.2': - optional: true - '@rolldown/binding-linux-x64-musl@1.2.8': optional: true '@rolldown/binding-openharmony-arm64@1.2.12': optional: true - '@rolldown/binding-openharmony-arm64@1.2.2': - optional: true - '@rolldown/binding-openharmony-arm64@1.2.8': optional: true '@rolldown/binding-win32-arm64-msvc@1.2.12': optional: true - '@rolldown/binding-win32-arm64-msvc@1.2.2': - optional: true - '@rolldown/binding-win32-arm64-msvc@1.2.8': optional: true '@rolldown/binding-win32-x64-msvc@1.2.12': optional: true - '@rolldown/binding-win32-x64-msvc@1.2.2': - optional: true - '@rolldown/binding-win32-x64-msvc@1.2.8': optional: true @@ -6796,7 +6516,7 @@ snapshots: dependencies: ajv: 8.20.0 ajv-draft-04: 1.0.0(ajv@8.20.0) - ajv-formats: 3.0.1(ajv@8.20.0) + ajv-formats: 3.0.1 fs-extra: 11.3.6 import-lazy: 4.0.0 jju: 1.4.0 @@ -7282,13 +7002,13 @@ snapshots: ajv: 8.20.0 optional: true - ajv-formats@2.1.1(ajv@8.20.0): - optionalDependencies: + ajv-formats@2.1.1: + dependencies: ajv: 8.20.0 optional: true - ajv-formats@3.0.1(ajv@8.20.0): - optionalDependencies: + ajv-formats@3.0.1: + dependencies: ajv: 8.20.0 ajv-keywords@5.1.0(ajv@8.20.0): @@ -7538,11 +7258,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - optional: true - chokidar@5.0.0: dependencies: readdirp: 5.0.0 @@ -7577,9 +7292,6 @@ snapshots: strip-ansi: 7.2.0 wrap-ansi: 9.0.2 - colorjs.io@0.5.2: - optional: true - colorjs.io@0.7.1: {} combined-stream@1.0.8: @@ -9160,9 +8872,6 @@ snapshots: dependencies: picomatch: 2.3.2 - readdirp@4.1.2: - optional: true - readdirp@5.0.0: {} reflect-metadata@0.2.2: {} @@ -9234,27 +8943,6 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.2.12 '@rolldown/binding-win32-x64-msvc': 1.2.12 - rolldown@1.2.2: - dependencies: - '@oxc-project/types': 0.142.0 - '@rolldown/pluginutils': 1.0.1 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.2.2 - '@rolldown/binding-darwin-arm64': 1.2.2 - '@rolldown/binding-darwin-x64': 1.2.2 - '@rolldown/binding-freebsd-x64': 1.2.2 - '@rolldown/binding-linux-arm-gnueabihf': 1.2.2 - '@rolldown/binding-linux-arm64-gnu': 1.2.2 - '@rolldown/binding-linux-arm64-musl': 1.2.2 - '@rolldown/binding-linux-ppc64-gnu': 1.2.2 - '@rolldown/binding-linux-s390x-gnu': 1.2.2 - '@rolldown/binding-linux-x64-gnu': 1.2.2 - '@rolldown/binding-linux-x64-musl': 1.2.2 - '@rolldown/binding-openharmony-arm64': 1.2.2 - '@rolldown/binding-win32-arm64-msvc': 1.2.2 - '@rolldown/binding-win32-x64-msvc': 1.2.2 - optional: true - rolldown@1.2.8: dependencies: '@oxc-project/types': 0.149.0 @@ -9338,117 +9026,59 @@ snapshots: sass: 1.104.1 optional: true - sass-embedded-all-unknown@1.97.3: - dependencies: - sass: 1.97.3 - optional: true - sass-embedded-android-arm64@1.104.1: optional: true - sass-embedded-android-arm64@1.97.3: - optional: true - sass-embedded-android-arm@1.104.1: optional: true - sass-embedded-android-arm@1.97.3: - optional: true - sass-embedded-android-riscv64@1.104.1: optional: true - sass-embedded-android-riscv64@1.97.3: - optional: true - sass-embedded-android-x64@1.104.1: optional: true - sass-embedded-android-x64@1.97.3: - optional: true - sass-embedded-darwin-arm64@1.104.1: optional: true - sass-embedded-darwin-arm64@1.97.3: - optional: true - sass-embedded-darwin-x64@1.104.1: optional: true - sass-embedded-darwin-x64@1.97.3: - optional: true - sass-embedded-linux-arm64@1.104.1: optional: true - sass-embedded-linux-arm64@1.97.3: - optional: true - sass-embedded-linux-arm@1.104.1: optional: true - sass-embedded-linux-arm@1.97.3: - optional: true - sass-embedded-linux-musl-arm64@1.104.1: optional: true - sass-embedded-linux-musl-arm64@1.97.3: - optional: true - sass-embedded-linux-musl-arm@1.104.1: optional: true - sass-embedded-linux-musl-arm@1.97.3: - optional: true - sass-embedded-linux-musl-riscv64@1.104.1: optional: true - sass-embedded-linux-musl-riscv64@1.97.3: - optional: true - sass-embedded-linux-musl-x64@1.104.1: optional: true - sass-embedded-linux-musl-x64@1.97.3: - optional: true - sass-embedded-linux-riscv64@1.104.1: optional: true - sass-embedded-linux-riscv64@1.97.3: - optional: true - sass-embedded-linux-x64@1.104.1: optional: true - sass-embedded-linux-x64@1.97.3: - optional: true - sass-embedded-unknown-all@1.104.1: dependencies: sass: 1.104.1 optional: true - sass-embedded-unknown-all@1.97.3: - dependencies: - sass: 1.97.3 - optional: true - sass-embedded-win32-arm64@1.104.1: optional: true - sass-embedded-win32-arm64@1.97.3: - optional: true - sass-embedded-win32-x64@1.104.1: optional: true - sass-embedded-win32-x64@1.97.3: - optional: true - sass-embedded@1.104.1: dependencies: '@bufbuild/protobuf': 2.13.0 @@ -9478,45 +9108,6 @@ snapshots: sass-embedded-win32-arm64: 1.104.1 sass-embedded-win32-x64: 1.104.1 - sass-embedded@1.97.3: - dependencies: - '@bufbuild/protobuf': 2.13.0 - colorjs.io: 0.5.2 - immutable: 5.1.9 - rxjs: 7.8.2 - supports-color: 8.1.1 - sync-child-process: 1.0.2 - varint: 6.0.0 - optionalDependencies: - sass-embedded-all-unknown: 1.97.3 - sass-embedded-android-arm: 1.97.3 - sass-embedded-android-arm64: 1.97.3 - sass-embedded-android-riscv64: 1.97.3 - sass-embedded-android-x64: 1.97.3 - sass-embedded-darwin-arm64: 1.97.3 - sass-embedded-darwin-x64: 1.97.3 - sass-embedded-linux-arm: 1.97.3 - sass-embedded-linux-arm64: 1.97.3 - sass-embedded-linux-musl-arm: 1.97.3 - sass-embedded-linux-musl-arm64: 1.97.3 - sass-embedded-linux-musl-riscv64: 1.97.3 - sass-embedded-linux-musl-x64: 1.97.3 - sass-embedded-linux-riscv64: 1.97.3 - sass-embedded-linux-x64: 1.97.3 - sass-embedded-unknown-all: 1.97.3 - sass-embedded-win32-arm64: 1.97.3 - sass-embedded-win32-x64: 1.97.3 - optional: true - - sass@1.101.0: - dependencies: - chokidar: 5.0.0 - immutable: 5.1.9 - source-map-js: 1.2.1 - optionalDependencies: - '@parcel/watcher': 2.6.0 - optional: true - sass@1.104.1: dependencies: chokidar: 5.0.0 @@ -9525,15 +9116,6 @@ snapshots: optionalDependencies: '@parcel/watcher': 2.6.0 - sass@1.97.3: - dependencies: - chokidar: 4.0.3 - immutable: 5.1.9 - source-map-js: 1.2.1 - optionalDependencies: - '@parcel/watcher': 2.6.0 - optional: true - sax@1.6.1: optional: true @@ -9545,7 +9127,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 ajv: 8.20.0 - ajv-formats: 2.1.1(ajv@8.20.0) + ajv-formats: 2.1.1 ajv-keywords: 5.1.0(ajv@8.20.0) optional: true @@ -9936,7 +9518,7 @@ snapshots: universalify@2.0.1: {} - unplugin-dts@1.1.2(@microsoft/api-extractor@7.56.0(@types/node@26.6.4))(@rspack/core@1.6.8(@swc/helpers@0.5.18))(esbuild@0.28.2)(rolldown@1.2.2)(rollup@4.60.4)(supports-color@10.2.2)(typescript@6.0.2)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0))(webpack@5.106.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)): + unplugin-dts@1.1.2(@microsoft/api-extractor@7.56.0(@types/node@26.6.4))(@rspack/core@1.6.8(@swc/helpers@0.5.18))(esbuild@0.28.2)(rolldown@1.2.12)(rollup@4.60.4)(supports-color@10.2.2)(typescript@6.0.2)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0))(webpack@5.106.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)): dependencies: '@rollup/pluginutils': 5.4.0(rollup@4.60.4) '@volar/typescript': 2.4.28(typescript@6.0.2) @@ -9952,7 +9534,7 @@ snapshots: '@microsoft/api-extractor': 7.56.0(@types/node@26.6.4) '@rspack/core': 1.6.8(@swc/helpers@0.5.18) esbuild: 0.28.2 - rolldown: 1.2.2 + rolldown: 1.2.12 rollup: 4.60.4 vite: 8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0) webpack: 5.106.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28) @@ -9982,14 +9564,14 @@ snapshots: verkit@0.3.2: {} - vite-live-preview@0.4.0(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.97.3)(sass@1.101.0)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0)): + vite-live-preview@0.4.0(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0)): dependencies: '@seahax/deep-copy': 0.1.0 '@seahax/semaphore': 0.5.1 '@types/ws': 8.18.1 escape-goat: 4.0.0 strip-ansi: 7.2.0 - vite: 8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.97.3)(sass@1.101.0)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0) + vite: 8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0) ws: 8.21.1 transitivePeerDependencies: - bufferutil @@ -10010,9 +9592,9 @@ snapshots: optionator: 0.9.4 typescript: 6.0.2 - vite-plugin-dts@5.1.2(@microsoft/api-extractor@7.56.0(@types/node@26.6.4))(@rspack/core@1.6.8(@swc/helpers@0.5.18))(esbuild@0.28.2)(rolldown@1.2.2)(rollup@4.60.4)(supports-color@10.2.2)(typescript@6.0.2)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0))(webpack@5.106.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)): + vite-plugin-dts@5.1.2(@microsoft/api-extractor@7.56.0(@types/node@26.6.4))(@rspack/core@1.6.8(@swc/helpers@0.5.18))(esbuild@0.28.2)(rolldown@1.2.12)(rollup@4.60.4)(supports-color@10.2.2)(typescript@6.0.2)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0))(webpack@5.106.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)): dependencies: - unplugin-dts: 1.1.2(@microsoft/api-extractor@7.56.0(@types/node@26.6.4))(@rspack/core@1.6.8(@swc/helpers@0.5.18))(esbuild@0.28.2)(rolldown@1.2.2)(rollup@4.60.4)(supports-color@10.2.2)(typescript@6.0.2)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0))(webpack@5.106.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)) + unplugin-dts: 1.1.2(@microsoft/api-extractor@7.56.0(@types/node@26.6.4))(@rspack/core@1.6.8(@swc/helpers@0.5.18))(esbuild@0.28.2)(rolldown@1.2.12)(rollup@4.60.4)(supports-color@10.2.2)(typescript@6.0.2)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0))(webpack@5.106.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)) optionalDependencies: '@microsoft/api-extractor': 7.56.0(@types/node@26.6.4) rollup: 4.60.4 @@ -10072,25 +9654,6 @@ snapshots: tsx: 4.23.15 yaml: 2.9.0 - vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.97.3)(sass@1.101.0)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0): - dependencies: - lightningcss: 1.33.0 - picomatch: 4.0.7 - postcss: 8.5.28 - rolldown: 1.2.12 - tinyglobby: 0.2.17 - optionalDependencies: - '@types/node': 26.6.4 - esbuild: 0.28.2 - fsevents: 2.3.3 - jiti: 2.7.0 - less: 4.6.4 - sass: 1.101.0 - sass-embedded: 1.97.3 - terser: 5.46.2 - tsx: 4.23.15 - yaml: 2.9.0 - vitest@5.0.3(@types/node@26.6.4)(@vitest/coverage-v8@5.0.3)(@vitest/ui@5.0.3)(happy-dom@20.14.5)(jsdom@30.1.2)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.46.2)(tsx@4.23.15)(yaml@2.9.0)): dependencies: '@types/chai': 5.2.3