From 2281fa13614d2a264bdf8d41e3ce0449190836ed Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Fri, 12 Jul 2024 00:38:11 +0200 Subject: [PATCH 01/50] refactor: Update ADS Foundations and Neutral color scales in palettePackage.ts --- src/utils/palettePackage.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/utils/palettePackage.ts b/src/utils/palettePackage.ts index 4cb09999..3e9dec2e 100644 --- a/src/utils/palettePackage.ts +++ b/src/utils/palettePackage.ts @@ -37,19 +37,16 @@ export const presets: Array = [ id: 'ANT', }, { - name: 'ADS Foundations, 50-500 (Atlassian)', - scale: [50, 75, 100, 200, 300, 400, 500], + name: 'ADS Foundations, 100-1000 (Atlassian)', + scale: [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000], min: 24, max: 96, isDistributed: true, id: 'ADS', }, { - name: 'ADS Foundations, Neutral 50-500 (Atlassian)', - scale: [ - 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500, 600, 700, - 800, 900, - ], + name: 'ADS Foundations, Neutral 0-1100 (Atlassian)', + scale: [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100], min: 8, max: 100, isDistributed: true, From 7c1763b82171cb4f65810317d491bf2bf4c7bb79 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Mon, 5 Aug 2024 23:15:53 +0200 Subject: [PATCH 02/50] feat: update locals.ts tagline to reflect new features --- src/content/locals.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/content/locals.ts b/src/content/locals.ts index 806967e3..f5a46967 100644 --- a/src/content/locals.ts +++ b/src/content/locals.ts @@ -18,8 +18,7 @@ const glossary: { export const locals: { [key: string]: any } = { 'en-US': { name: 'UI Color Palette', - tagline: - 'Create accessible color palettes for UI with consistent lightness and contrast', + tagline: 'Create, Manage, Deploy & Publish WCAG-compliant color palettes.', url: 'www.ui-color-palette.com', global: { description: { From e9ee2eb93878bec49345cb6fc22e33b06668f737 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Tue, 13 Aug 2024 19:32:32 +0200 Subject: [PATCH 03/50] fix: handle NaN values in newLabA and newLabB --- src/canvas/Colors.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/canvas/Colors.ts b/src/canvas/Colors.ts index 060cf360..16f50c25 100644 --- a/src/canvas/Colors.ts +++ b/src/canvas/Colors.ts @@ -179,6 +179,9 @@ export default class Colors { newLabB *= -1 } + if (Number.isNaN(newLabA)) newLabA = 0 + if (Number.isNaN(newLabB)) newLabB = 0 + const newColor = chroma .oklab( lightness / 100, From 6a1dd83bdbabecb209920b3e16abdf57ec1ece6c Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Tue, 13 Aug 2024 19:41:51 +0200 Subject: [PATCH 04/50] fix: correct event feature name in Publication --- src/ui/modules/Publication.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/modules/Publication.tsx b/src/ui/modules/Publication.tsx index a3f4f87b..e50aa67b 100644 --- a/src/ui/modules/Publication.tsx +++ b/src/ui/modules/Publication.tsx @@ -267,7 +267,7 @@ export default class Publication extends React.Component< (consent) => consent.id === 'mixpanel' )?.isConsented ?? false, { - feature: 'UNPUBLISH_PALETTE', + feature: 'PUBLISH_PALETTE', } ) }) From 5700e8a0827279c3b3500aaf42f653b7a02ca073 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Tue, 13 Aug 2024 20:09:36 +0200 Subject: [PATCH 05/50] refactor: post sensitive data only to figma.com --- src/bridges/publication/authentication.ts | 6 ++++-- src/ui/App.tsx | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/bridges/publication/authentication.ts b/src/bridges/publication/authentication.ts index d8d513ee..c80c4fcd 100644 --- a/src/bridges/publication/authentication.ts +++ b/src/bridges/publication/authentication.ts @@ -31,8 +31,9 @@ export const signIn = async () => { type: 'OPEN_IN_BROWSER', url: `${authUrl}/?passkey=${result.passkey}`, }, + pluginId: '1063959496693642315', }, - '*' + 'https://www.figma.com' ) const poll = setInterval(async () => { fetch(workerUrl, { @@ -66,8 +67,9 @@ export const signIn = async () => { }, ], }, + pluginId: '1063959496693642315', }, - '*' + 'https://www.figma.com' ) checkConnectionStatus(result.access_token, result.refresh_token) .then(() => { diff --git a/src/ui/App.tsx b/src/ui/App.tsx index 27c702e4..d412c468 100644 --- a/src/ui/App.tsx +++ b/src/ui/App.tsx @@ -240,8 +240,9 @@ class App extends React.Component, AppStates> { }, ], }, + pluginId: '1063959496693642315', }, - '*' + 'https://www.figma.com' ) }, } @@ -794,8 +795,9 @@ class App extends React.Component, AppStates> { }, ], }, + pluginId: '1063959496693642315', }, - '*' + 'https://www.figma.com' ) parent.postMessage( { From f0316819af4b81621401848e80dc09b315f779de Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Tue, 13 Aug 2024 20:09:59 +0200 Subject: [PATCH 06/50] fix: put the right url to open a video --- src/ui/contexts/Scale.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/contexts/Scale.tsx b/src/ui/contexts/Scale.tsx index 19c8d406..54f0c15e 100644 --- a/src/ui/contexts/Scale.tsx +++ b/src/ui/contexts/Scale.tsx @@ -785,7 +785,7 @@ export default class Scale extends React.Component { { pluginMessage: { type: 'OPEN_IN_BROWSER', - url: 'https://uicp.link/v', + url: 'https://uicp.link/how-to-adjust', }, }, '*' From 66cd05c9945e052245c9f3a01b21a7fc33ec90ae Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Wed, 14 Aug 2024 02:41:09 +0200 Subject: [PATCH 07/50] chore: update @a_ng_d/figmug-ui dependency to version 0.68.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b4e8927d..2dca22a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "figma-ui-color-palette", "version": "4.0.4", "dependencies": { - "@a_ng_d/figmug-ui": "^0.65.0", + "@a_ng_d/figmug-ui": "^0.68.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", @@ -64,9 +64,9 @@ } }, "node_modules/@a_ng_d/figmug-ui": { - "version": "0.65.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.65.0.tgz", - "integrity": "sha512-Mgl5BhEErqazmNNbyabFbf7LTh33rKSVEKnvSQHv5T0cE28cpVc+lYxW3GOJjYXPrM0wylSd6hlgWKxk091isg==", + "version": "0.68.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.68.0.tgz", + "integrity": "sha512-2uFiYbPLPB7jBIoXEBBl5VxNQ5rCD2X5iaKMUKnF5aMMIErO+KoCusp5ydyRzJvGSfOsJy3T3zqxG7EqM7vEUw==", "dependencies": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" @@ -7015,9 +7015,9 @@ }, "dependencies": { "@a_ng_d/figmug-ui": { - "version": "0.65.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.65.0.tgz", - "integrity": "sha512-Mgl5BhEErqazmNNbyabFbf7LTh33rKSVEKnvSQHv5T0cE28cpVc+lYxW3GOJjYXPrM0wylSd6hlgWKxk091isg==", + "version": "0.68.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.68.0.tgz", + "integrity": "sha512-2uFiYbPLPB7jBIoXEBBl5VxNQ5rCD2X5iaKMUKnF5aMMIErO+KoCusp5ydyRzJvGSfOsJy3T3zqxG7EqM7vEUw==", "requires": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" diff --git a/package.json b/package.json index 5a1df547..a5a207fa 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "webpack-cli": "^4.9.1" }, "dependencies": { - "@a_ng_d/figmug-ui": "^0.65.0", + "@a_ng_d/figmug-ui": "^0.68.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", From d26d826e307a235ac39af075e11c3ac5162a746a Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Wed, 14 Aug 2024 02:41:22 +0200 Subject: [PATCH 08/50] feat: Add isGrowing and isFlex props to ColorItem and Knob components --- src/ui/components/ColorItem.tsx | 1 + src/ui/components/Knob.tsx | 3 ++- src/ui/components/ThemeItem.tsx | 1 + src/ui/contexts/Settings.tsx | 1 + src/ui/stylesheets/app.css | 2 +- 5 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ui/components/ColorItem.tsx b/src/ui/components/ColorItem.tsx index 034970b6..068c86aa 100644 --- a/src/ui/components/ColorItem.tsx +++ b/src/ui/components/ColorItem.tsx @@ -288,6 +288,7 @@ export default class ColorItem extends React.Component { locals[this.props.lang].global.description.placeholder } feature="UPDATE_DESCRIPTION" + isGrowing={true} onFocus={this.props.onCancellationSelection} onBlur={this.props.onChangeColors} onConfirm={this.props.onChangeColors} diff --git a/src/ui/components/Knob.tsx b/src/ui/components/Knob.tsx index 3da4f496..b4a90375 100644 --- a/src/ui/components/Knob.tsx +++ b/src/ui/components/Knob.tsx @@ -53,7 +53,7 @@ export default class Knob extends React.Component { }) }, Escape: () => { - ;(e.target as HTMLElement).blur() + (e.target as HTMLElement).blur() this.setState({ isStopInputOpen: false }) }, Backspace: () => { @@ -110,6 +110,7 @@ export default class Knob extends React.Component { step="0.1" feature="TYPE_STOP_VALUE" isAutoFocus={true} + isFlex={true} onFocus={() => this.setState({ stopInputValue: this.props.value, diff --git a/src/ui/components/ThemeItem.tsx b/src/ui/components/ThemeItem.tsx index a660f683..933746ec 100644 --- a/src/ui/components/ThemeItem.tsx +++ b/src/ui/components/ThemeItem.tsx @@ -226,6 +226,7 @@ export default class ThemeItem extends React.Component< locals[this.props.lang].global.description.placeholder } feature="UPDATE_DESCRIPTION" + isGrowing={true} onFocus={this.props.onCancellationSelection} onBlur={this.props.onChangeThemes} onConfirm={this.props.onChangeThemes} diff --git a/src/ui/contexts/Settings.tsx b/src/ui/contexts/Settings.tsx index 6955f920..b6af82b7 100644 --- a/src/ui/contexts/Settings.tsx +++ b/src/ui/contexts/Settings.tsx @@ -442,6 +442,7 @@ export default class Settings extends React.Component { this.props.planStatus )} feature="UPDATE_DESCRIPTION" + isGrowing={true} onFocus={ isBlocked('SETTINGS_PALETTE_DESCRIPTION', this.props.planStatus) ? () => null diff --git a/src/ui/stylesheets/app.css b/src/ui/stylesheets/app.css index 4338bdaa..53e4a1e7 100644 --- a/src/ui/stylesheets/app.css +++ b/src/ui/stylesheets/app.css @@ -159,7 +159,7 @@ div.export-palette__preview { } div.export-palette__preview textarea { - height: 100%; + height: 100% !important; margin: 0; } From 6254c057a5c1b8569d3451601f2150aee114ac53 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Wed, 21 Aug 2024 14:30:12 +0200 Subject: [PATCH 09/50] feat: Add chromaShifting property to color configuration --- src/canvas/Colors.ts | 46 +++++++++++++++++++++++++------- src/canvas/Palette.ts | 1 + src/content/locals.ts | 3 +++ src/types/configurations.ts | 1 + src/types/events.ts | 1 + src/ui/components/ColorItem.tsx | 37 ++++++++++++++++++++++--- src/ui/components/ThemeItem.tsx | 1 + src/ui/contexts/Colors.tsx | 27 ++++++++++++++++++- src/utils/config.ts | 9 +++++++ src/utils/setPaletteMigration.ts | 8 ++++++ 10 files changed, 119 insertions(+), 15 deletions(-) diff --git a/src/canvas/Colors.ts b/src/canvas/Colors.ts index 16f50c25..537dd119 100644 --- a/src/canvas/Colors.ts +++ b/src/canvas/Colors.ts @@ -68,6 +68,7 @@ export default class Colors { sourceColor: [number, number, number], lightness: number, hueShifting: number, + chromaShifting: number, algorithmVersion: string ) => { const lch = chroma(sourceColor).lch(), @@ -75,8 +76,10 @@ export default class Colors { .lch( lightness, algorithmVersion === 'v2' - ? Math.sin((lightness / 100) * Math.PI) * lch[1] - : lch[1], + ? Math.sin((lightness / 100) * Math.PI) * + lch[1] * + (chromaShifting / 100) + : lch[1] * (chromaShifting / 100), lch[2] + hueShifting < 0 ? 0 : lch[2] + hueShifting > 360 @@ -92,6 +95,7 @@ export default class Colors { sourceColor: [number, number, number], lightness: number, hueShifting: number, + chromaShifting: number, algorithmVersion: string ) => { const oklch = chroma(sourceColor).oklch(), @@ -99,8 +103,10 @@ export default class Colors { .oklch( lightness / 100, algorithmVersion === 'v2' - ? Math.sin((lightness / 100) * Math.PI) * oklch[1] - : oklch[1], + ? Math.sin((lightness / 100) * Math.PI) * + oklch[1] * + (chromaShifting / 100) + : oklch[1] * (chromaShifting / 100), oklch[2] + hueShifting < 0 ? 0 : oklch[2] + hueShifting > 360 @@ -116,11 +122,12 @@ export default class Colors { sourceColor: [number, number, number], lightness: number, hueShifting: number, + chromaShifting: number, algorithmVersion: string ) => { const labA = chroma(sourceColor).get('lab.a'), labB = chroma(sourceColor).get('lab.b'), - chr = Math.sqrt(labA ** 2 + labB ** 2) + chr = Math.sqrt(labA ** 2 + labB ** 2) * (chromaShifting / 100) let h = Math.atan(labB / labA) + hueShifting * (Math.PI / 180) if (h > Math.PI) h = Math.PI @@ -157,11 +164,12 @@ export default class Colors { sourceColor: [number, number, number], lightness: number, hueShifting: number, + chromaShifting: number, algorithmVersion: string ) => { const labA = chroma(sourceColor).get('oklab.a'), labB = chroma(sourceColor).get('oklab.b'), - chr = Math.sqrt(labA ** 2 + labB ** 2) + chr = Math.sqrt(labA ** 2 + labB ** 2) * (chromaShifting / 100) let h = Math.atan(labB / labA) + hueShifting * (Math.PI / 180) if (h > Math.PI) h = Math.PI @@ -201,6 +209,7 @@ export default class Colors { sourceColor: [number, number, number], lightness: number, hueShifting: number, + chromaShifting: number, algorithmVersion: string ) => { const hsl = chroma(sourceColor).hsl(), @@ -212,8 +221,10 @@ export default class Colors { ? 360 : hsl[0] + hueShifting, algorithmVersion === 'v2' - ? Math.sin((lightness / 100) * Math.PI) * hsl[1] - : hsl[1], + ? Math.sin((lightness / 100) * Math.PI) * + hsl[1] * + (chromaShifting / 100) + : hsl[1] * (chromaShifting / 100), lightness / 100 ) .rgb() @@ -225,6 +236,7 @@ export default class Colors { sourceColor: [number, number, number], lightness: number, hueShifting: number, + chromaShifting: number, algorithmVersion: string ) => { const hsluv = new Hsluv() @@ -238,8 +250,10 @@ export default class Colors { hsluv.hsluv_l = lightness hsluv.hsluv_s = algorithmVersion === 'v2' - ? Math.sin((lightness / 100) * Math.PI) * hsluv.hsluv_s - : hsluv.hsluv_s + ? Math.sin((lightness / 100) * Math.PI) * + hsluv.hsluv_s * + (chromaShifting / 100) + : hsluv.hsluv_s * (chromaShifting / 100) hsluv.hsluv_h = hsluv.hsluv_h + hueShifting < 0 ? 0 @@ -451,6 +465,7 @@ export default class Colors { sourceColor, lightness, color.hueShifting, + color.chromaShifting, this.parent.algorithmVersion ) else if (this.parent.colorSpace === 'OKLCH') @@ -458,6 +473,7 @@ export default class Colors { sourceColor, lightness, color.hueShifting, + color.chromaShifting, this.parent.algorithmVersion ) else if (this.parent.colorSpace === 'LAB') @@ -465,6 +481,7 @@ export default class Colors { sourceColor, lightness, color.hueShifting, + color.chromaShifting, this.parent.algorithmVersion ) else if (this.parent.colorSpace === 'OKLAB') @@ -472,6 +489,7 @@ export default class Colors { sourceColor, lightness, color.hueShifting, + color.chromaShifting, this.parent.algorithmVersion ) else if (this.parent.colorSpace === 'HSL') @@ -479,6 +497,7 @@ export default class Colors { sourceColor, lightness, color.hueShifting, + color.chromaShifting, this.parent.algorithmVersion ) else if (this.parent.colorSpace === 'HSLUV') @@ -486,6 +505,7 @@ export default class Colors { sourceColor, lightness, color.hueShifting, + color.chromaShifting, this.parent.algorithmVersion ) @@ -645,6 +665,7 @@ export default class Colors { sourceColor, lightness, color.hueShifting, + color.chromaShifting, this.parent.algorithmVersion ) else if (this.parent.colorSpace === 'OKLCH') @@ -652,6 +673,7 @@ export default class Colors { sourceColor, lightness, color.hueShifting, + color.chromaShifting, this.parent.algorithmVersion ) else if (this.parent.colorSpace === 'LAB') @@ -659,6 +681,7 @@ export default class Colors { sourceColor, lightness, color.hueShifting, + color.chromaShifting, this.parent.algorithmVersion ) else if (this.parent.colorSpace === 'OKLAB') @@ -666,6 +689,7 @@ export default class Colors { sourceColor, lightness, color.hueShifting, + color.chromaShifting, this.parent.algorithmVersion ) else if (this.parent.colorSpace === 'HSL') @@ -673,6 +697,7 @@ export default class Colors { sourceColor, lightness, color.hueShifting, + color.chromaShifting, this.parent.algorithmVersion ) else if (this.parent.colorSpace === 'HSLUV') @@ -680,6 +705,7 @@ export default class Colors { sourceColor, lightness, color.hueShifting, + color.chromaShifting, this.parent.algorithmVersion ) diff --git a/src/canvas/Palette.ts b/src/canvas/Palette.ts index 68b79793..3c5d1208 100644 --- a/src/canvas/Palette.ts +++ b/src/canvas/Palette.ts @@ -170,6 +170,7 @@ export default class Palette { id: uid(), oklch: false, hueShifting: 0, + chromaShifting: 100, }) ) diff --git a/src/content/locals.ts b/src/content/locals.ts index f5a46967..c2949682 100644 --- a/src/content/locals.ts +++ b/src/content/locals.ts @@ -198,6 +198,9 @@ export const locals: { [key: string]: any } = { hueShifting: { label: 'Shift hue', }, + chromaShifting: { + label: 'Shift chroma', + }, }, themes: { title: 'Color themes', diff --git a/src/types/configurations.ts b/src/types/configurations.ts index bda534f3..e3d127d4 100644 --- a/src/types/configurations.ts +++ b/src/types/configurations.ts @@ -60,6 +60,7 @@ export interface ColorConfiguration { } oklch: boolean hueShifting: number + chromaShifting: number id: string } diff --git a/src/types/events.ts b/src/types/events.ts index 3a2e4cbe..5e05b844 100644 --- a/src/types/events.ts +++ b/src/types/events.ts @@ -55,6 +55,7 @@ export interface SourceColorEvent { | 'UPDATE_HEX' | 'UPDATE_LCH' | 'SHIFT_HUE' + | 'SHIFT_CHROMA' | 'DESCRIBE_COLOR' } diff --git a/src/ui/components/ColorItem.tsx b/src/ui/components/ColorItem.tsx index 068c86aa..b25e8c23 100644 --- a/src/ui/components/ColorItem.tsx +++ b/src/ui/components/ColorItem.tsx @@ -12,7 +12,8 @@ interface ColorItemProps { name: string hex: HexModel oklch: boolean - shift: number + hueShifting: number + chromaShifting: number description: string uuid: string index: number @@ -251,13 +252,14 @@ export default class ColorItem extends React.Component { >
{
+ feature.name === 'COLORS_CHROMA_SHIFTING' + )?.isActive + } + > +
+ + + +
+
{ id: uid(), oklch: false, hueShifting: 0, + chromaShifting: 100, }) this.props.onChangeColors({ @@ -332,6 +333,28 @@ export default class Colors extends React.Component { ) } + const setChromaShifting = () => { + this.colorsMessage.data = this.props.colors.map((item) => { + if (item.id === id) item.chromaShifting = parseFloat(currentElement.value) + return item + }) + + this.props.onChangeColors({ + colors: this.colorsMessage.data, + onGoingStep: 'colors changed', + }) + + parent.postMessage({ pluginMessage: this.colorsMessage }, '*') + trackSourceColorsManagementEvent( + this.props.figmaUserId, + this.props.userConsent.find((consent) => consent.id === 'mixpanel') + ?.isConsented ?? false, + { + feature: 'SHIFT_CHROMA', + } + ) + } + const updateColorDescription = () => { this.colorsMessage.data = this.props.colors.map((item) => { if (item.id === id) item.description = currentElement.value @@ -385,6 +408,7 @@ export default class Colors extends React.Component { UPDATE_CHROMA: () => updateChromaProp(), UPDATE_HUE: () => updateHueProp(), SHIFT_HUE: () => setHueShifting(), + SHIFT_CHROMA: () => setChromaShifting(), UPDATE_DESCRIPTION: () => updateColorDescription(), REMOVE_COLOR: () => removeColor(), NULL: () => null, @@ -526,7 +550,8 @@ export default class Colors extends React.Component { ).hex() as HexModel } oklch={color.oklch} - shift={color.hueShifting} + hueShifting={color.hueShifting} + chromaShifting={color.chromaShifting} description={color.description} uuid={color.id} selected={ diff --git a/src/utils/config.ts b/src/utils/config.ts index 52f9ed59..d7cf9fdc 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -371,6 +371,15 @@ export const features: Array = [ type: 'ACTION', service: ['EDIT'], }, + { + name: 'COLORS_CHROMA_SHIFTING', + description: 'Source color chroma shifting number', + isActive: true, + isPro: false, + isNew: false, + type: 'ACTION', + service: ['EDIT'], + }, { name: 'COLORS_DESCRIPTION', description: 'Source color description of the purpose', diff --git a/src/utils/setPaletteMigration.ts b/src/utils/setPaletteMigration.ts index d855eabe..b2dd5977 100644 --- a/src/utils/setPaletteMigration.ts +++ b/src/utils/setPaletteMigration.ts @@ -70,6 +70,14 @@ const setPaletteMigration = async (palette: BaseNode) => { if (!Object.prototype.hasOwnProperty.call(colorsObject[0], 'hueShifting')) palette.setPluginData('colors', setData(colorsObject, 'hueShifting', 0)) + if ( + !Object.prototype.hasOwnProperty.call(colorsObject[0], 'chromaShifting') + ) + palette.setPluginData( + 'colors', + setData(colorsObject, 'chromaShifting', 100) + ) + if (!Object.prototype.hasOwnProperty.call(colorsObject[0], 'description')) palette.setPluginData('colors', setData(colorsObject, 'description', '')) From 268828dd49e0c623ab82fe96cb85340b960eae7c Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Wed, 21 Aug 2024 14:33:26 +0200 Subject: [PATCH 10/50] chore: Update @a_ng_d/figmug-ui dependency to version 0.69.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2dca22a3..5fdb991e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "figma-ui-color-palette", "version": "4.0.4", "dependencies": { - "@a_ng_d/figmug-ui": "^0.68.0", + "@a_ng_d/figmug-ui": "^0.69.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", @@ -64,9 +64,9 @@ } }, "node_modules/@a_ng_d/figmug-ui": { - "version": "0.68.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.68.0.tgz", - "integrity": "sha512-2uFiYbPLPB7jBIoXEBBl5VxNQ5rCD2X5iaKMUKnF5aMMIErO+KoCusp5ydyRzJvGSfOsJy3T3zqxG7EqM7vEUw==", + "version": "0.69.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.69.0.tgz", + "integrity": "sha512-6zxrCOMhBYYAu2v2wd2Uhd5wpmaY/+M67YNTiAF7OKU2YWsRYqSQDDaVBJ/f0sn9jb+L+ED9Gedzgvdf4askkQ==", "dependencies": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" @@ -7015,9 +7015,9 @@ }, "dependencies": { "@a_ng_d/figmug-ui": { - "version": "0.68.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.68.0.tgz", - "integrity": "sha512-2uFiYbPLPB7jBIoXEBBl5VxNQ5rCD2X5iaKMUKnF5aMMIErO+KoCusp5ydyRzJvGSfOsJy3T3zqxG7EqM7vEUw==", + "version": "0.69.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.69.0.tgz", + "integrity": "sha512-6zxrCOMhBYYAu2v2wd2Uhd5wpmaY/+M67YNTiAF7OKU2YWsRYqSQDDaVBJ/f0sn9jb+L+ED9Gedzgvdf4askkQ==", "requires": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" diff --git a/package.json b/package.json index a5a207fa..99fed73b 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "webpack-cli": "^4.9.1" }, "dependencies": { - "@a_ng_d/figmug-ui": "^0.68.0", + "@a_ng_d/figmug-ui": "^0.69.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", From d64fea22363173de56aedc5914eb0a2ad82cfd45 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Wed, 28 Aug 2024 02:18:56 +0200 Subject: [PATCH 11/50] chore: Update allowed domains in manifest.json and authentication.ts --- manifest.json | 6 +++++- src/bridges/publication/authentication.ts | 10 +++++++--- src/utils/config.ts | 10 ++++++++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/manifest.json b/manifest.json index 829b459a..de979fb8 100644 --- a/manifest.json +++ b/manifest.json @@ -30,11 +30,15 @@ "https://tally.so", "https://corsproxy.io", "https://zclweepgvqkrelyfwhma.supabase.co", - "https://hook.eu1.make.com", + "https://oauth.yelbolt.workers.dev", "https://www.colourlovers.com", "https://*.mixpanel.com", "https://asset.brandfetch.io", "https://*.sentry.io" + ], + "devAllowedDomains": [ + "http://localhost:3000", + "http://localhost:8787" ] }, "parameters": [ diff --git a/src/bridges/publication/authentication.ts b/src/bridges/publication/authentication.ts index c80c4fcd..ccad1810 100644 --- a/src/bridges/publication/authentication.ts +++ b/src/bridges/publication/authentication.ts @@ -11,13 +11,15 @@ export const supabase = createClient( process.env.REACT_APP_SUPABASE_PUBLIC_ANON_KEY ?? '' ) -export const signIn = async () => { +export const signIn = async (disinctId: string) => { return new Promise((resolve, reject) => { fetch(workerUrl, { + method: 'GET', cache: 'no-cache', credentials: 'omit', headers: { type: 'GET_PASSKEY', + 'distinct-id': disinctId, }, }) .then((response) => { @@ -37,10 +39,12 @@ export const signIn = async () => { ) const poll = setInterval(async () => { fetch(workerUrl, { + method: 'GET', cache: 'no-cache', credentials: 'omit', headers: { type: 'GET_TOKENS', + 'distinct-id': disinctId, passkey: result.passkey, }, }) @@ -59,11 +63,11 @@ export const signIn = async () => { items: [ { key: 'supabase_access_token', - value: result.access_token, + value: result.tokens.access_token, }, { key: 'supabase_refresh_token', - value: result.refresh_token, + value: result.tokens.refresh_token, }, ], }, diff --git a/src/utils/config.ts b/src/utils/config.ts index d7cf9fdc..1e8aee9b 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -5,9 +5,15 @@ export const oldTrialTime = 48 export const releaseNotesVersion = '4.0.0' export const pageSize = 20 -export const workerUrl = process.env.REACT_APP_WORKER_URL as string +export const workerUrl = + process.env.NODE_ENV === 'development' + ? 'http://localhost:8787' + : (process.env.REACT_APP_WORKER_URL as string) export const databaseUrl = process.env.REACT_APP_SUPABASE_URL as string -export const authUrl = process.env.REACT_APP_AUTH_URL as string +export const authUrl = + process.env.NODE_ENV === 'development' + ? 'http://localhost:3000' + : (process.env.REACT_APP_AUTH_URL as string) export const palettesDbTableName = process.env.NODE_ENV === 'development' ? 'sandbox.palettes' : 'palettes' From 3341ea00f293f982376f865eecb6c1537a67e426 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Wed, 28 Aug 2024 02:20:59 +0200 Subject: [PATCH 12/50] chore: Remove unused trackRunningEvent function call --- src/ui/App.tsx | 6 ------ src/utils/eventsTracker.ts | 40 ++++++++++++++++++++++---------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/ui/App.tsx b/src/ui/App.tsx index d412c468..e6b02b88 100644 --- a/src/ui/App.tsx +++ b/src/ui/App.tsx @@ -40,7 +40,6 @@ import { trackEditorEvent, trackExportEvent, trackPurchaseEvent, - trackRunningEvent, trackTrialEnablementEvent, trackUserConsentEvent, } from '../utils/eventsTracker' @@ -259,11 +258,6 @@ class App extends React.Component, AppStates> { this.setState({ figmaUserId: e.data.pluginMessage.id, }) - trackRunningEvent( - e.data.pluginMessage.id, - this.state.userConsent.find((consent) => consent.id === 'mixpanel') - ?.isConsented ?? false - ) } const checkUserConsent = () => diff --git a/src/utils/eventsTracker.ts b/src/utils/eventsTracker.ts index 2a36c986..3a8b1e37 100644 --- a/src/utils/eventsTracker.ts +++ b/src/utils/eventsTracker.ts @@ -1,18 +1,11 @@ -import { ConsentConfiguration } from '@a_ng_d/figmug-ui' -import mixpanel from 'mixpanel-figma' - -import { - ColorThemeEvent, - EditorEvent, - ExportEvent, - ImportEvent, - PublicationEvent, - ScaleEvent, - SettingEvent, - SourceColorEvent, - TrialEvent, -} from '../types/events' -import { userConsentVersion } from './config' +import { ConsentConfiguration } from '@a_ng_d/figmug-ui'; +import mixpanel from 'mixpanel-figma'; + + + +import { ColorThemeEvent, EditorEvent, ExportEvent, ImportEvent, PublicationEvent, ScaleEvent, SettingEvent, SourceColorEvent, TrialEvent } from '../types/events'; +import { userConsentVersion } from './config'; + const eventsRecurringProperties = { Env: process.env.NODE_ENV === 'development' ? 'Dev' : 'Prod', @@ -50,13 +43,13 @@ export const trackEditorEvent = ( export const trackSignInEvent = (id: string, consent: boolean) => { if (!consent) return mixpanel.identify(id) - mixpanel.track('Signed in', { ...eventsRecurringProperties }) + mixpanel.track('Signed In', { ...eventsRecurringProperties }) } export const trackSignOutEvent = (id: string, consent: boolean) => { if (!consent) return mixpanel.identify(id) - mixpanel.track('Signed out', { ...eventsRecurringProperties }) + mixpanel.track('Signed Out', { ...eventsRecurringProperties }) } export const trackTrialEnablementEvent = ( @@ -174,3 +167,16 @@ export const trackExportEvent = ( ...eventsRecurringProperties, }) } + +export const trackActionEvent = ( + id: string, + consent: boolean, + options: ExportEvent +) => { + if (!consent) return + mixpanel.identify(id) + mixpanel.track('Action Triggered', { + Feature: options.feature, + ...eventsRecurringProperties, + }) +} \ No newline at end of file From 5e07693a58b757a53f97024dff386d017cd5d638 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Wed, 28 Aug 2024 02:22:09 +0200 Subject: [PATCH 13/50] chore: add tracker --- src/ui/contexts/MyPalettes.tsx | 49 +++++++++++----------------- src/ui/modules/PriorityContainer.tsx | 2 +- src/ui/modules/Shortcuts.tsx | 2 +- src/ui/services/CreatePalette.tsx | 12 ++++++- src/ui/services/EditPalette.tsx | 17 ++++++++++ 5 files changed, 49 insertions(+), 33 deletions(-) diff --git a/src/ui/contexts/MyPalettes.tsx b/src/ui/contexts/MyPalettes.tsx index 49ff07b5..381dc3c3 100644 --- a/src/ui/contexts/MyPalettes.tsx +++ b/src/ui/contexts/MyPalettes.tsx @@ -1,32 +1,21 @@ -import { - Bar, - Button, - ConsentConfiguration, - Icon, - Input, - Menu, - Message, -} from '@a_ng_d/figmug-ui' -import React from 'react' +import { Bar, Button, ConsentConfiguration, Icon, Input, Menu, Message } from '@a_ng_d/figmug-ui'; +import React from 'react'; + + + +import { signIn, supabase } from '../../bridges/publication/authentication'; +import unpublishPalette from '../../bridges/publication/unpublishPalette'; +import { locals } from '../../content/locals'; +import { Context, Language, PlanStatus } from '../../types/app'; +import { ColorConfiguration, MetaConfiguration, PaletteConfiguration, SourceColorConfiguration, ThemeConfiguration } from '../../types/configurations'; +import { ExternalPalettes } from '../../types/data'; +import { FetchStatus } from '../../types/management'; +import { ActionsList } from '../../types/models'; +import { UserSession } from '../../types/user'; +import { pageSize, palettesDbTableName } from '../../utils/config'; +import { trackPublicationEvent } from '../../utils/eventsTracker'; +import PaletteItem from '../components/PaletteItem'; -import { signIn, supabase } from '../../bridges/publication/authentication' -import unpublishPalette from '../../bridges/publication/unpublishPalette' -import { locals } from '../../content/locals' -import { Context, Language, PlanStatus } from '../../types/app' -import { - ColorConfiguration, - MetaConfiguration, - PaletteConfiguration, - SourceColorConfiguration, - ThemeConfiguration, -} from '../../types/configurations' -import { ExternalPalettes } from '../../types/data' -import { FetchStatus } from '../../types/management' -import { ActionsList } from '../../types/models' -import { UserSession } from '../../types/user' -import { pageSize, palettesDbTableName } from '../../utils/config' -import { trackPublicationEvent } from '../../utils/eventsTracker' -import PaletteItem from '../components/PaletteItem' interface MyPalettesProps { context: Context @@ -497,7 +486,7 @@ export default class MyPalettes extends React.Component< isLoading={this.state.isSignInActionLoading} action={async () => { this.setState({ isSignInActionLoading: true }) - signIn() + signIn(this.props.figmaUserId) .finally(() => { this.setState({ isSignInActionLoading: false }) }) @@ -561,4 +550,4 @@ export default class MyPalettes extends React.Component< ) } -} +} \ No newline at end of file diff --git a/src/ui/modules/PriorityContainer.tsx b/src/ui/modules/PriorityContainer.tsx index 11d981fb..88a09649 100644 --- a/src/ui/modules/PriorityContainer.tsx +++ b/src/ui/modules/PriorityContainer.tsx @@ -353,7 +353,7 @@ export default class PriorityContainer extends React.Component< : 'DEFAULT', action: async () => { this.setState({ isPrimaryActionLoading: true }) - signIn() + signIn(this.props.figmaUserId) .then(() => { trackSignInEvent( this.props.figmaUserId, diff --git a/src/ui/modules/Shortcuts.tsx b/src/ui/modules/Shortcuts.tsx index ac1b196d..44a6872c 100644 --- a/src/ui/modules/Shortcuts.tsx +++ b/src/ui/modules/Shortcuts.tsx @@ -239,7 +239,7 @@ export default class Shortcuts extends React.Component< children: [], action: async () => { this.setState({ isUserMenuLoading: true }) - signIn() + signIn(this.props.figmaUserId) .then(() => { trackSignInEvent( this.props.figmaUserId, diff --git a/src/ui/services/CreatePalette.tsx b/src/ui/services/CreatePalette.tsx index 8900d4f5..47fb1125 100644 --- a/src/ui/services/CreatePalette.tsx +++ b/src/ui/services/CreatePalette.tsx @@ -17,6 +17,7 @@ import { ContextItem, ThirdParty } from '../../types/management' import { TextColorsThemeHexModel } from '../../types/models' import { UserSession } from '../../types/user' import doLightnessScale from '../../utils/doLightnessScale' +import { trackActionEvent } from '../../utils/eventsTracker' import { palette } from '../../utils/palettePackage' import { setContexts } from '../../utils/setContexts' import type { AppStates } from '../App' @@ -94,7 +95,7 @@ export default class CreatePalette extends React.Component< }) // Direct actions - onCreatePalette = () => + onCreatePalette = () => { parent.postMessage( { pluginMessage: { @@ -110,6 +111,15 @@ export default class CreatePalette extends React.Component< }, '*' ) + trackActionEvent( + this.props.figmaUserId, + this.props.userConsent.find((consent) => consent.id === 'mixpanel') + ?.isConsented ?? false, + { + feature: 'CREATE_PALETTE', + } + ) + } onConfigureExternalSourceColors = (name: string, colors: Array) => { palette.name = name diff --git a/src/ui/services/EditPalette.tsx b/src/ui/services/EditPalette.tsx index 93eaf09c..b5310f96 100644 --- a/src/ui/services/EditPalette.tsx +++ b/src/ui/services/EditPalette.tsx @@ -24,6 +24,7 @@ import { TextColorsThemeHexModel } from '../../types/models' import { Identity } from '../../types/user' import features from '../../utils/config' import doLightnessScale from '../../utils/doLightnessScale' +import { trackActionEvent } from '../../utils/eventsTracker' import isBlocked from '../../utils/isBlocked' import { palette } from '../../utils/palettePackage' import { setContexts } from '../../utils/setContexts' @@ -170,6 +171,14 @@ export default class EditPalette extends React.Component< position: null, }, }) + trackActionEvent( + this.props.figmaUserId, + this.props.userConsent.find((consent) => consent.id === 'mixpanel') + ?.isConsented ?? false, + { + feature: 'SYNC_STYLES', + } + ) } onSyncVariables = () => { @@ -180,6 +189,14 @@ export default class EditPalette extends React.Component< position: null, }, }) + trackActionEvent( + this.props.figmaUserId, + this.props.userConsent.find((consent) => consent.id === 'mixpanel') + ?.isConsented ?? false, + { + feature: 'SYNC_VARIABLES', + } + ) } onExport = () => { From 62c845638bd303f8c9ef282708a22b8f193010f5 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Wed, 28 Aug 2024 23:22:40 +0200 Subject: [PATCH 14/50] feat: allow to share/unshare palette without using canvas --- src/bridges/publication/sharePalette.ts | 22 +++++ src/content/locals.ts | 10 +- src/types/data.ts | 2 + src/types/events.ts | 17 +++- src/ui/contexts/MyPalettes.tsx | 122 ++++++++++++++++++++---- src/ui/modules/Publication.tsx | 6 +- src/utils/eventsTracker.ts | 28 ++++-- 7 files changed, 175 insertions(+), 32 deletions(-) create mode 100644 src/bridges/publication/sharePalette.ts diff --git a/src/bridges/publication/sharePalette.ts b/src/bridges/publication/sharePalette.ts new file mode 100644 index 00000000..b3b5920f --- /dev/null +++ b/src/bridges/publication/sharePalette.ts @@ -0,0 +1,22 @@ +import { palettesDbTableName } from '../../utils/config' +import { supabase } from './authentication' + +const sharePalette = async (id: string, isShared: boolean): Promise => { + const now = new Date().toISOString() + + const { error } = await supabase + .from(palettesDbTableName) + .update([ + { + is_shared: isShared, + published_at: now, + updated_at: now, + }, + ]) + .match({ palette_id: id }) + + if (!error) return + else throw error +} + +export default sharePalette diff --git a/src/content/locals.ts b/src/content/locals.ts index c2949682..269f87d2 100644 --- a/src/content/locals.ts +++ b/src/content/locals.ts @@ -45,7 +45,9 @@ export const locals: { [key: string]: any } = { titleSignIn: 'Publish or Synchronize palette', message: 'Publish your palette as a single source of truth and reuse it in other Figma documents (like a component instance). You can also distribute your palettes by sharing them with the community.', - selectToShare: 'Share with the community', + share: 'Share with the community', + unshare: 'Remove from the community', + statusShared: 'Shared', statusLocalChanges: 'Local changes', statusUptoDate: 'No change', statusUnpublished: 'Unpublished', @@ -460,6 +462,8 @@ export const locals: { [key: string]: any } = { synchronization: '✓ The palette has been synchronized', detachment: '✓ The palette has been detached', report: '✓ Thanks for your report', + share: '✓ The palette has been shared with the community', + unshare: '✓ The palette is no longer shared with community', }, info: { createdLocalStyle: 'local color style created', @@ -471,7 +475,7 @@ export const locals: { [key: string]: any } = { variableMode: 'variable mode', variableModes: 'variable modes', signOut: '☻ See you later', - noResult: 'No palette match your search', + noResult: 'No palette matches your search', }, warning: { tooManyThemesToCreateModes: @@ -501,6 +505,8 @@ export const locals: { [key: string]: any } = { publication: '✕ The palette cannot be published', nonPublication: '✕ The palette cannot be unpublished', synchronization: '✕ The palette has not been synchronized', + share: '✕ The palette has not been shared with the community', + unshare: '✕ The palette has not been removed from the community', fetchPalette: 'The palettes cannot be loaded', addToFile: '✕ The palette cannot be added', noInternetConnection: diff --git a/src/types/data.ts b/src/types/data.ts index 193c71ed..024acb9f 100644 --- a/src/types/data.ts +++ b/src/types/data.ts @@ -75,4 +75,6 @@ export interface ExternalPalettes { themes: Array creator_avatar: string creator_full_name: string + creator_id: string + is_shared: boolean } diff --git a/src/types/events.ts b/src/types/events.ts index 5e05b844..972c9187 100644 --- a/src/types/events.ts +++ b/src/types/events.ts @@ -25,6 +25,7 @@ export interface PublicationEvent { | 'REVERT_PALETTE' | 'DETACH_PALETTE' | 'ADD_PALETTE' + | 'SHARE_PALETTE' } export interface ImportEvent { @@ -70,7 +71,17 @@ export interface ColorThemeEvent { } export interface ExportEvent { - feature?: string + feature: + | 'TOKENS_GLOBAL' + | 'TOKENS_AMZN_STYLE_DICTIONARY' + | 'TOKENS_TOKENS_STUDIO' + | 'CSS' + | 'TAILWIND' + | 'APPLE_SWIFTUI' + | 'APPLE_UIKIT' + | 'ANDROID_COMPOSE' + | 'ANDROID_XML' + | 'CSV' colorSpace?: ColorSpaceConfiguration } @@ -84,3 +95,7 @@ export interface SettingEvent { | 'UPDATE_ALGORITHM' | 'UPDATE_TEXT_COLORS_THEME' } + +export interface ActionEvent { + feature: 'CREATE_PALETTE' | 'SYNC_STYLES' | 'SYNC_VARIABLES' +} diff --git a/src/ui/contexts/MyPalettes.tsx b/src/ui/contexts/MyPalettes.tsx index 381dc3c3..2b6fe95e 100644 --- a/src/ui/contexts/MyPalettes.tsx +++ b/src/ui/contexts/MyPalettes.tsx @@ -4,18 +4,24 @@ import React from 'react'; import { signIn, supabase } from '../../bridges/publication/authentication'; -import unpublishPalette from '../../bridges/publication/unpublishPalette'; -import { locals } from '../../content/locals'; -import { Context, Language, PlanStatus } from '../../types/app'; -import { ColorConfiguration, MetaConfiguration, PaletteConfiguration, SourceColorConfiguration, ThemeConfiguration } from '../../types/configurations'; -import { ExternalPalettes } from '../../types/data'; -import { FetchStatus } from '../../types/management'; -import { ActionsList } from '../../types/models'; -import { UserSession } from '../../types/user'; -import { pageSize, palettesDbTableName } from '../../utils/config'; -import { trackPublicationEvent } from '../../utils/eventsTracker'; -import PaletteItem from '../components/PaletteItem'; - +import sharePalette from '../../bridges/publication/sharePalette' +import unpublishPalette from '../../bridges/publication/unpublishPalette' +import { locals } from '../../content/locals' +import { Context, Language, PlanStatus } from '../../types/app' +import { + ColorConfiguration, + MetaConfiguration, + PaletteConfiguration, + SourceColorConfiguration, + ThemeConfiguration, +} from '../../types/configurations' +import { ExternalPalettes } from '../../types/data' +import { FetchStatus } from '../../types/management' +import { ActionsList } from '../../types/models' +import { UserSession } from '../../types/user' +import { pageSize, palettesDbTableName } from '../../utils/config' +import { trackPublicationEvent } from '../../utils/eventsTracker' +import PaletteItem from '../components/PaletteItem' interface MyPalettesProps { context: Context @@ -112,7 +118,7 @@ export default class MyPalettes extends React.Component< ;({ data, error } = await supabase .from(palettesDbTableName) .select( - 'palette_id, screenshot, name, preset, colors, themes, creator_avatar, creator_full_name, creator_id' + 'palette_id, screenshot, name, preset, colors, themes, creator_avatar, creator_full_name, creator_id, is_shared' ) .eq('creator_id', this.props.userSession.userId) .range(pageSize * (currentPage - 1), pageSize * currentPage - 1)) @@ -121,7 +127,7 @@ export default class MyPalettes extends React.Component< ;({ data, error } = await supabase .from(palettesDbTableName) .select( - 'palette_id, screenshot, name, preset, colors, themes, creator_avatar, creator_full_name, creator_id' + 'palette_id, screenshot, name, preset, colors, themes, creator_avatar, creator_full_name, creator_id, is_shared' ) .eq('creator_id', this.props.userSession.userId) .range(pageSize * (currentPage - 1), pageSize * currentPage - 1) @@ -332,6 +338,14 @@ export default class MyPalettes extends React.Component< palette.colors ?? [], palette.themes ?? [] )} + indicator={ + palette.is_shared + ? { + status: 'ACTIVE', + label: locals[this.props.lang].publication.statusShared, + } + : undefined + } action={() => null} > { + this.setState({ + isContextActionLoading: + this.state.isContextActionLoading.map((loading, i) => + i === index ? true : loading + ), + }) + sharePalette(palette.palette_id, !palette.is_shared) + .then(() => { + parent.postMessage( + { + pluginMessage: { + type: 'SEND_MESSAGE', + message: !palette.is_shared + ? locals[this.props.lang].success.share + : locals[this.props.lang].success.unshare, + }, + }, + '*' + ) + + const currentPalettesList = + this.props.palettesList.map((pal) => + pal.palette_id === palette.palette_id + ? { + ...pal, + is_shared: !pal.is_shared, + } + : pal + ) + this.props.onLoadPalettesList(currentPalettesList) + + trackPublicationEvent( + this.props.figmaUserId, + this.props.userConsent.find( + (consent) => consent.id === 'mixpanel' + )?.isConsented ?? false, + { + feature: 'SHARE_PALETTE', + } + ) + }) + .finally(() => { + this.setState({ + isContextActionLoading: + this.state.isContextActionLoading.map( + (loading, i) => (i === index ? false : loading) + ), + }) + }) + .catch(() => { + parent.postMessage( + { + pluginMessage: { + type: 'SEND_MESSAGE', + message: !palette.is_shared + ? locals[this.props.lang].error.share + : locals[this.props.lang].error.unshare, }, }, '*' diff --git a/src/ui/modules/Publication.tsx b/src/ui/modules/Publication.tsx index e50aa67b..2bc23ff9 100644 --- a/src/ui/modules/Publication.tsx +++ b/src/ui/modules/Publication.tsx @@ -799,13 +799,13 @@ export default class Publication extends React.Component< ): PublicationOption | undefined => { const actions: Record = { UNPUBLISHED: { - label: locals[this.props.lang].publication.selectToShare, + label: locals[this.props.lang].publication.share, state: this.state.isPaletteShared, action: () => this.setState({ isPaletteShared: !this.state.isPaletteShared }), }, CAN_BE_PUSHED: { - label: locals[this.props.lang].publication.selectToShare, + label: locals[this.props.lang].publication.share, state: this.state.isPaletteShared, action: () => this.setState({ isPaletteShared: !this.state.isPaletteShared }), @@ -813,7 +813,7 @@ export default class Publication extends React.Component< MUST_BE_PULLED: undefined, MAY_BE_PULLED: undefined, PUBLISHED: { - label: locals[this.props.lang].publication.selectToShare, + label: locals[this.props.lang].publication.share, state: this.state.isPaletteShared, action: () => this.setState({ isPaletteShared: !this.state.isPaletteShared }), diff --git a/src/utils/eventsTracker.ts b/src/utils/eventsTracker.ts index 3a8b1e37..dfb01be1 100644 --- a/src/utils/eventsTracker.ts +++ b/src/utils/eventsTracker.ts @@ -1,11 +1,19 @@ -import { ConsentConfiguration } from '@a_ng_d/figmug-ui'; -import mixpanel from 'mixpanel-figma'; - - - -import { ColorThemeEvent, EditorEvent, ExportEvent, ImportEvent, PublicationEvent, ScaleEvent, SettingEvent, SourceColorEvent, TrialEvent } from '../types/events'; -import { userConsentVersion } from './config'; - +import { ConsentConfiguration } from '@a_ng_d/figmug-ui' +import mixpanel from 'mixpanel-figma' + +import { + ActionEvent, + ColorThemeEvent, + EditorEvent, + ExportEvent, + ImportEvent, + PublicationEvent, + ScaleEvent, + SettingEvent, + SourceColorEvent, + TrialEvent, +} from '../types/events' +import { userConsentVersion } from './config' const eventsRecurringProperties = { Env: process.env.NODE_ENV === 'development' ? 'Dev' : 'Prod', @@ -171,7 +179,7 @@ export const trackExportEvent = ( export const trackActionEvent = ( id: string, consent: boolean, - options: ExportEvent + options: ActionEvent ) => { if (!consent) return mixpanel.identify(id) @@ -179,4 +187,4 @@ export const trackActionEvent = ( Feature: options.feature, ...eventsRecurringProperties, }) -} \ No newline at end of file +} From 78f359a6e8648ec77a906ee682456693f3010f1b Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Wed, 28 Aug 2024 23:26:26 +0200 Subject: [PATCH 15/50] style: format code --- src/ui/components/Knob.tsx | 2 +- src/ui/contexts/Colors.tsx | 3 ++- src/ui/contexts/MyPalettes.tsx | 20 +++++++++++++------- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/ui/components/Knob.tsx b/src/ui/components/Knob.tsx index b4a90375..39244551 100644 --- a/src/ui/components/Knob.tsx +++ b/src/ui/components/Knob.tsx @@ -53,7 +53,7 @@ export default class Knob extends React.Component { }) }, Escape: () => { - (e.target as HTMLElement).blur() + ;(e.target as HTMLElement).blur() this.setState({ isStopInputOpen: false }) }, Backspace: () => { diff --git a/src/ui/contexts/Colors.tsx b/src/ui/contexts/Colors.tsx index 510c81a0..8739260e 100644 --- a/src/ui/contexts/Colors.tsx +++ b/src/ui/contexts/Colors.tsx @@ -335,7 +335,8 @@ export default class Colors extends React.Component { const setChromaShifting = () => { this.colorsMessage.data = this.props.colors.map((item) => { - if (item.id === id) item.chromaShifting = parseFloat(currentElement.value) + if (item.id === id) + item.chromaShifting = parseFloat(currentElement.value) return item }) diff --git a/src/ui/contexts/MyPalettes.tsx b/src/ui/contexts/MyPalettes.tsx index 2b6fe95e..ef2fb91d 100644 --- a/src/ui/contexts/MyPalettes.tsx +++ b/src/ui/contexts/MyPalettes.tsx @@ -1,9 +1,15 @@ -import { Bar, Button, ConsentConfiguration, Icon, Input, Menu, Message } from '@a_ng_d/figmug-ui'; -import React from 'react'; - - - -import { signIn, supabase } from '../../bridges/publication/authentication'; +import { + Bar, + Button, + ConsentConfiguration, + Icon, + Input, + Menu, + Message, +} from '@a_ng_d/figmug-ui' +import React from 'react' + +import { signIn, supabase } from '../../bridges/publication/authentication' import sharePalette from '../../bridges/publication/sharePalette' import unpublishPalette from '../../bridges/publication/unpublishPalette' import { locals } from '../../content/locals' @@ -640,4 +646,4 @@ export default class MyPalettes extends React.Component< ) } -} \ No newline at end of file +} From cdd0d8ce1e44d10f4d3f61e74db32a9c01adaf45 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Fri, 30 Aug 2024 19:21:45 +0200 Subject: [PATCH 16/50] chore: Update @a_ng_d/figmug-ui dependency to version 0.70.0 --- package-lock.json | 372 +++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 168 insertions(+), 206 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5fdb991e..0e15b9da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "figma-ui-color-palette", "version": "4.0.4", "dependencies": { - "@a_ng_d/figmug-ui": "^0.69.0", + "@a_ng_d/figmug-ui": "^0.70.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", @@ -64,9 +64,9 @@ } }, "node_modules/@a_ng_d/figmug-ui": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.69.0.tgz", - "integrity": "sha512-6zxrCOMhBYYAu2v2wd2Uhd5wpmaY/+M67YNTiAF7OKU2YWsRYqSQDDaVBJ/f0sn9jb+L+ED9Gedzgvdf4askkQ==", + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.70.0.tgz", + "integrity": "sha512-Ah+/KO251doN9Nl0Xp0a3GkFLXvLeY2ujKT1zD+Q+95K3R3IpHWy9eF84AK5RihgWN46SBcrMzWB3aJvZn07/Q==", "dependencies": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" @@ -1626,24 +1626,6 @@ "@types/node": "*" } }, - "node_modules/@types/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -1984,9 +1966,9 @@ "dev": true }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -2003,9 +1985,9 @@ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", @@ -2023,14 +2005,14 @@ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -2055,26 +2037,26 @@ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -2082,22 +2064,22 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -2106,11 +2088,11 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -2171,10 +2153,10 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "peerDependencies": { "acorn": "^8" } @@ -2975,9 +2957,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -4984,12 +4966,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -6107,9 +6089,9 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dependencies": { "randombytes": "^2.1.0" } @@ -6409,9 +6391,9 @@ } }, "node_modules/terser": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", - "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -6426,15 +6408,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" @@ -6760,9 +6742,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -6777,33 +6759,32 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.89.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", - "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "dependencies": { + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -7015,9 +6996,9 @@ }, "dependencies": { "@a_ng_d/figmug-ui": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.69.0.tgz", - "integrity": "sha512-6zxrCOMhBYYAu2v2wd2Uhd5wpmaY/+M67YNTiAF7OKU2YWsRYqSQDDaVBJ/f0sn9jb+L+ED9Gedzgvdf4askkQ==", + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.70.0.tgz", + "integrity": "sha512-Ah+/KO251doN9Nl0Xp0a3GkFLXvLeY2ujKT1zD+Q+95K3R3IpHWy9eF84AK5RihgWN46SBcrMzWB3aJvZn07/Q==", "requires": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" @@ -8167,24 +8148,6 @@ "@types/node": "*" } }, - "@types/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -8436,9 +8399,9 @@ "dev": true }, "@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "requires": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -8455,9 +8418,9 @@ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" }, "@webassemblyjs/helper-numbers": { "version": "1.11.6", @@ -8475,14 +8438,14 @@ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "@webassemblyjs/ieee754": { @@ -8507,26 +8470,26 @@ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -8534,22 +8497,22 @@ } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -8558,11 +8521,11 @@ } }, "@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -8604,10 +8567,10 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" }, - "acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "requires": {} }, "acorn-jsx": { @@ -9178,9 +9141,9 @@ "dev": true }, "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -10645,12 +10608,12 @@ "dev": true }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -11405,9 +11368,9 @@ } }, "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "requires": { "randombytes": "^2.1.0" } @@ -11628,9 +11591,9 @@ } }, "terser": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", - "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", "requires": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -11646,15 +11609,15 @@ } }, "terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "requires": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "terser": "^5.26.0" } }, "text-table": { @@ -11858,9 +11821,9 @@ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" }, "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -11872,33 +11835,32 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "webpack": { - "version": "5.89.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", - "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "requires": { + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" } }, diff --git a/package.json b/package.json index 99fed73b..fa12a316 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "webpack-cli": "^4.9.1" }, "dependencies": { - "@a_ng_d/figmug-ui": "^0.69.0", + "@a_ng_d/figmug-ui": "^0.70.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", From 6b0131a95a70d055ef9cd10bc04f378acc5a464a Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Fri, 30 Aug 2024 19:39:33 +0200 Subject: [PATCH 17/50] chore: Update @a_ng_d/figmug-ui dependency to version 0.71.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0e15b9da..be71806a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "figma-ui-color-palette", "version": "4.0.4", "dependencies": { - "@a_ng_d/figmug-ui": "^0.70.0", + "@a_ng_d/figmug-ui": "^0.71.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", @@ -64,9 +64,9 @@ } }, "node_modules/@a_ng_d/figmug-ui": { - "version": "0.70.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.70.0.tgz", - "integrity": "sha512-Ah+/KO251doN9Nl0Xp0a3GkFLXvLeY2ujKT1zD+Q+95K3R3IpHWy9eF84AK5RihgWN46SBcrMzWB3aJvZn07/Q==", + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.71.0.tgz", + "integrity": "sha512-dRMyU1biUyxd0QiIg8xEHFXzyir1OudnvkuRECh4yf2KBugzRT162dTPnX+8oGXhd02qPt9+leUAQMOl7gF/xQ==", "dependencies": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" @@ -6996,9 +6996,9 @@ }, "dependencies": { "@a_ng_d/figmug-ui": { - "version": "0.70.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.70.0.tgz", - "integrity": "sha512-Ah+/KO251doN9Nl0Xp0a3GkFLXvLeY2ujKT1zD+Q+95K3R3IpHWy9eF84AK5RihgWN46SBcrMzWB3aJvZn07/Q==", + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.71.0.tgz", + "integrity": "sha512-dRMyU1biUyxd0QiIg8xEHFXzyir1OudnvkuRECh4yf2KBugzRT162dTPnX+8oGXhd02qPt9+leUAQMOl7gF/xQ==", "requires": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" diff --git a/package.json b/package.json index fa12a316..e8b84df9 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "webpack-cli": "^4.9.1" }, "dependencies": { - "@a_ng_d/figmug-ui": "^0.70.0", + "@a_ng_d/figmug-ui": "^0.71.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", From a452dc9a5ef02fe5af41e2066949611093324232 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Fri, 30 Aug 2024 20:52:56 +0200 Subject: [PATCH 18/50] chore: Update @a_ng_d/figmug-ui dependency to version 0.75.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index be71806a..06c827af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "figma-ui-color-palette", "version": "4.0.4", "dependencies": { - "@a_ng_d/figmug-ui": "^0.71.0", + "@a_ng_d/figmug-ui": "^0.75.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", @@ -64,9 +64,9 @@ } }, "node_modules/@a_ng_d/figmug-ui": { - "version": "0.71.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.71.0.tgz", - "integrity": "sha512-dRMyU1biUyxd0QiIg8xEHFXzyir1OudnvkuRECh4yf2KBugzRT162dTPnX+8oGXhd02qPt9+leUAQMOl7gF/xQ==", + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.75.0.tgz", + "integrity": "sha512-7l6WFj7o/jai5ElssT9QBV4BNADgzHMRLdQkndIcjoJ1Mn4CebmhLSu6vu7bVZXhUC931ttU1uMtLPySsDQiOw==", "dependencies": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" @@ -6996,9 +6996,9 @@ }, "dependencies": { "@a_ng_d/figmug-ui": { - "version": "0.71.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.71.0.tgz", - "integrity": "sha512-dRMyU1biUyxd0QiIg8xEHFXzyir1OudnvkuRECh4yf2KBugzRT162dTPnX+8oGXhd02qPt9+leUAQMOl7gF/xQ==", + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.75.0.tgz", + "integrity": "sha512-7l6WFj7o/jai5ElssT9QBV4BNADgzHMRLdQkndIcjoJ1Mn4CebmhLSu6vu7bVZXhUC931ttU1uMtLPySsDQiOw==", "requires": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" diff --git a/package.json b/package.json index e8b84df9..cb186ccf 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "webpack-cli": "^4.9.1" }, "dependencies": { - "@a_ng_d/figmug-ui": "^0.71.0", + "@a_ng_d/figmug-ui": "^0.75.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", From ac9a06fed0b7c6374e0c73fd1168495f92a3ed2f Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Fri, 30 Aug 2024 20:55:11 +0200 Subject: [PATCH 19/50] feat: order community and user palettes by published date in descending order --- src/ui/contexts/CommunityPalettes.tsx | 2 ++ src/ui/contexts/MyPalettes.tsx | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/ui/contexts/CommunityPalettes.tsx b/src/ui/contexts/CommunityPalettes.tsx index 68b60726..8e3f5ad9 100644 --- a/src/ui/contexts/CommunityPalettes.tsx +++ b/src/ui/contexts/CommunityPalettes.tsx @@ -112,6 +112,7 @@ export default class CommunityPalettes extends React.Component< 'palette_id, screenshot, name, preset, colors, themes, creator_avatar, creator_full_name, is_shared' ) .eq('is_shared', true) + .order('published_at', { ascending: false }) .range(pageSize * (currentPage - 1), pageSize * currentPage - 1)) } else { // eslint-disable-next-line @typescript-eslint/no-extra-semi @@ -121,6 +122,7 @@ export default class CommunityPalettes extends React.Component< 'palette_id, screenshot, name, preset, colors, themes, creator_avatar, creator_full_name, is_shared' ) .eq('is_shared', true) + .order('published_at', { ascending: false }) .range(pageSize * (currentPage - 1), pageSize * currentPage - 1) .ilike('name', `%${searchQuery}%`)) } diff --git a/src/ui/contexts/MyPalettes.tsx b/src/ui/contexts/MyPalettes.tsx index ef2fb91d..308b3333 100644 --- a/src/ui/contexts/MyPalettes.tsx +++ b/src/ui/contexts/MyPalettes.tsx @@ -127,6 +127,7 @@ export default class MyPalettes extends React.Component< 'palette_id, screenshot, name, preset, colors, themes, creator_avatar, creator_full_name, creator_id, is_shared' ) .eq('creator_id', this.props.userSession.userId) + .order('published_at', { ascending: false }) .range(pageSize * (currentPage - 1), pageSize * currentPage - 1)) } else { // eslint-disable-next-line @typescript-eslint/no-extra-semi @@ -136,6 +137,7 @@ export default class MyPalettes extends React.Component< 'palette_id, screenshot, name, preset, colors, themes, creator_avatar, creator_full_name, creator_id, is_shared' ) .eq('creator_id', this.props.userSession.userId) + .order('published_at', { ascending: false }) .range(pageSize * (currentPage - 1), pageSize * currentPage - 1) .ilike('name', `%${searchQuery}%`)) } From 5b5aa99981502aaa9cc75e7c64cba75a14e36a0a Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Fri, 30 Aug 2024 20:56:22 +0200 Subject: [PATCH 20/50] refactor: Initialize hueShifting and chromaShifting with default values in Palette.ts --- src/canvas/Palette.ts | 4 ++-- src/types/configurations.ts | 2 ++ src/ui/contexts/MyPalettes.tsx | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/canvas/Palette.ts b/src/canvas/Palette.ts index 3c5d1208..e87b606b 100644 --- a/src/canvas/Palette.ts +++ b/src/canvas/Palette.ts @@ -169,8 +169,8 @@ export default class Palette { rgb: sourceColor.rgb, id: uid(), oklch: false, - hueShifting: 0, - chromaShifting: 100, + hueShifting: sourceColor.hueShifting ?? 0, + chromaShifting: sourceColor.chromaShifting ?? 100, }) ) diff --git a/src/types/configurations.ts b/src/types/configurations.ts index e3d127d4..f83958e5 100644 --- a/src/types/configurations.ts +++ b/src/types/configurations.ts @@ -9,6 +9,8 @@ export interface SourceColorConfiguration { source: 'CANVAS' | 'REMOTE' | ThirdParty id: string isRemovable: boolean + hueShifting?: number + chromaShifting?: number } export interface PaletteConfiguration { diff --git a/src/ui/contexts/MyPalettes.tsx b/src/ui/contexts/MyPalettes.tsx index 308b3333..5525894e 100644 --- a/src/ui/contexts/MyPalettes.tsx +++ b/src/ui/contexts/MyPalettes.tsx @@ -202,6 +202,8 @@ export default class MyPalettes extends React.Component< rgb: color.rgb, source: 'REMOTE', id: color.id, + hueShifting: color.hueShifting, + chromaShifting: color.chromaShifting, } } ) as Array, From 956198eb829a6f31a628f8980d6f09c110f3145b Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Fri, 30 Aug 2024 20:57:00 +0200 Subject: [PATCH 21/50] feat: add clear functionality to search input in CommunityPalettes and MyPalettes --- src/ui/contexts/CommunityPalettes.tsx | 14 ++++++++++++++ src/ui/contexts/MyPalettes.tsx | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/ui/contexts/CommunityPalettes.tsx b/src/ui/contexts/CommunityPalettes.tsx index 8e3f5ad9..24989a83 100644 --- a/src/ui/contexts/CommunityPalettes.tsx +++ b/src/ui/contexts/CommunityPalettes.tsx @@ -397,6 +397,8 @@ export default class CommunityPalettes extends React.Component< locals[this.props.lang].palettes.lazyLoad.search } value={this.props.searchQuery} + isClearable + isFramed={false} onChange={(e) => { this.props.onChangeSearchQuery( (e.target as HTMLInputElement).value @@ -409,6 +411,18 @@ export default class CommunityPalettes extends React.Component< (e.target as HTMLInputElement).value ) }} + onCleared={(e) => { + this.props.onChangeSearchQuery( + e + ) + this.props.onChangeStatus('LOADING') + this.props.onChangeCurrentPage(1) + this.props.onLoadPalettesList([]) + this.callUICPAgent( + 1, + e + ) + }} /> } border={['BOTTOM']} diff --git a/src/ui/contexts/MyPalettes.tsx b/src/ui/contexts/MyPalettes.tsx index 5525894e..de02b937 100644 --- a/src/ui/contexts/MyPalettes.tsx +++ b/src/ui/contexts/MyPalettes.tsx @@ -628,6 +628,8 @@ export default class MyPalettes extends React.Component< locals[this.props.lang].palettes.lazyLoad.search } value={this.props.searchQuery} + isClearable + isFramed={false} onChange={(e) => { this.props.onChangeSearchQuery( (e.target as HTMLInputElement).value @@ -640,6 +642,18 @@ export default class MyPalettes extends React.Component< (e.target as HTMLInputElement).value ) }} + onCleared={(e) => { + this.props.onChangeSearchQuery( + e + ) + this.props.onChangeStatus('LOADING') + this.props.onChangeCurrentPage(1) + this.props.onLoadPalettesList([]) + this.callUICPAgent( + 1, + e + ) + }} /> } border={['BOTTOM']} From 12e07a9228e532de1203e7155e4125a0173798ee Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Fri, 30 Aug 2024 20:57:15 +0200 Subject: [PATCH 22/50] refactor: add units to hueShifting and chromaShifting in ColorItem component --- src/ui/components/ColorItem.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ui/components/ColorItem.tsx b/src/ui/components/ColorItem.tsx index b25e8c23..3749a9f9 100644 --- a/src/ui/components/ColorItem.tsx +++ b/src/ui/components/ColorItem.tsx @@ -259,7 +259,8 @@ export default class ColorItem extends React.Component { id="hue-shifting" type="NUMBER" icon={{ type: 'LETTER', value: 'H' }} - value={this.props.hueShifting.toString()} + unit="°" + value={this.props.hueShifting.toString() ?? '0'} min="-360" max="360" feature="SHIFT_HUE" @@ -286,7 +287,8 @@ export default class ColorItem extends React.Component { id="chroma-shifting" type="NUMBER" icon={{ type: 'LETTER', value: 'C' }} - value={this.props.chromaShifting.toString()} + unit="%" + value={this.props.chromaShifting.toString() ?? '100'} min="0" max="200" feature="SHIFT_CHROMA" From aca4a9e21478e612b716bf407f0903246623d677 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Fri, 30 Aug 2024 20:57:57 +0200 Subject: [PATCH 23/50] refactor: update signIn function to use result.tokens instead of result.access_token and result.refresh_token --- src/bridges/publication/authentication.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/bridges/publication/authentication.ts b/src/bridges/publication/authentication.ts index ccad1810..5ced9faf 100644 --- a/src/bridges/publication/authentication.ts +++ b/src/bridges/publication/authentication.ts @@ -75,7 +75,10 @@ export const signIn = async (disinctId: string) => { }, 'https://www.figma.com' ) - checkConnectionStatus(result.access_token, result.refresh_token) + checkConnectionStatus( + result.tokens.access_token, + result.tokens.refresh_token + ) .then(() => { clearInterval(poll) resolve(result) From 4427a074a2f49b2708b5b0ec5303ffa064283b3c Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Fri, 30 Aug 2024 20:58:03 +0200 Subject: [PATCH 24/50] refactor: remove shouldFill prop from FormItem in Overview.tsx --- src/ui/contexts/Overview.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ui/contexts/Overview.tsx b/src/ui/contexts/Overview.tsx index 2d3289ba..b1fbc404 100644 --- a/src/ui/contexts/Overview.tsx +++ b/src/ui/contexts/Overview.tsx @@ -335,7 +335,6 @@ export default class Overview extends React.Component< Date: Fri, 30 Aug 2024 22:49:13 +0200 Subject: [PATCH 25/50] chore: Update @a_ng_d/figmug-ui dependency to version 0.76.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 06c827af..ed5c8542 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "figma-ui-color-palette", "version": "4.0.4", "dependencies": { - "@a_ng_d/figmug-ui": "^0.75.0", + "@a_ng_d/figmug-ui": "^0.76.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", @@ -64,9 +64,9 @@ } }, "node_modules/@a_ng_d/figmug-ui": { - "version": "0.75.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.75.0.tgz", - "integrity": "sha512-7l6WFj7o/jai5ElssT9QBV4BNADgzHMRLdQkndIcjoJ1Mn4CebmhLSu6vu7bVZXhUC931ttU1uMtLPySsDQiOw==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.76.0.tgz", + "integrity": "sha512-gKnPorUDm2wtW27N9V5NjUwxTKR6r4O9kGutifantPz3iApRehbbGObwpb6DN8PjFqQ2iw/M/QSnBcSjXOQMGQ==", "dependencies": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" @@ -6996,9 +6996,9 @@ }, "dependencies": { "@a_ng_d/figmug-ui": { - "version": "0.75.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.75.0.tgz", - "integrity": "sha512-7l6WFj7o/jai5ElssT9QBV4BNADgzHMRLdQkndIcjoJ1Mn4CebmhLSu6vu7bVZXhUC931ttU1uMtLPySsDQiOw==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.76.0.tgz", + "integrity": "sha512-gKnPorUDm2wtW27N9V5NjUwxTKR6r4O9kGutifantPz3iApRehbbGObwpb6DN8PjFqQ2iw/M/QSnBcSjXOQMGQ==", "requires": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" diff --git a/package.json b/package.json index cb186ccf..7b2f5dbb 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "webpack-cli": "^4.9.1" }, "dependencies": { - "@a_ng_d/figmug-ui": "^0.75.0", + "@a_ng_d/figmug-ui": "^0.76.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", From 3e8e1aee433753755c941e0f0047b68c88568f23 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Fri, 30 Aug 2024 22:49:27 +0200 Subject: [PATCH 26/50] refactor: Update hueShifting and chromaShifting logic in Colors component --- src/ui/contexts/Colors.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/ui/contexts/Colors.tsx b/src/ui/contexts/Colors.tsx index 8739260e..572fa039 100644 --- a/src/ui/contexts/Colors.tsx +++ b/src/ui/contexts/Colors.tsx @@ -312,8 +312,15 @@ export default class Colors extends React.Component { } const setHueShifting = () => { + const max = parseFloat(currentElement.max), + min = parseFloat(currentElement.min) + let value = parseFloat(currentElement.value) + + if (value >= max) value = max + if (value <= min) value = min + this.colorsMessage.data = this.props.colors.map((item) => { - if (item.id === id) item.hueShifting = parseFloat(currentElement.value) + if (item.id === id) item.hueShifting = value return item }) @@ -334,9 +341,15 @@ export default class Colors extends React.Component { } const setChromaShifting = () => { + const max = parseFloat(currentElement.max), + min = parseFloat(currentElement.min) + let value = parseFloat(currentElement.value) + + if (value >= max) value = max + if (value <= min) value = min + this.colorsMessage.data = this.props.colors.map((item) => { - if (item.id === id) - item.chromaShifting = parseFloat(currentElement.value) + if (item.id === id) item.chromaShifting = value return item }) From 0fbb2d8248e3260443b6e9b14ad92f37c4cbfc3c Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Fri, 30 Aug 2024 23:19:02 +0200 Subject: [PATCH 27/50] refactor: update signOut function to remove unnecessary code and improve readability --- src/bridges/publication/authentication.ts | 52 +++++++++++++---------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/src/bridges/publication/authentication.ts b/src/bridges/publication/authentication.ts index 5ced9faf..4a3f18d6 100644 --- a/src/bridges/publication/authentication.ts +++ b/src/bridges/publication/authentication.ts @@ -111,29 +111,37 @@ export const signIn = async (disinctId: string) => { } export const signOut = async () => { - const { error } = await supabase.auth.signOut({ - scope: 'others', - }) - - if (!error) { - parent.postMessage( - { - pluginMessage: { - type: 'DELETE_ITEMS', - items: ['supabase_access_token', 'supabase_refresh_token'], - }, + parent.postMessage( + { + pluginMessage: { + type: 'OPEN_IN_BROWSER', + url: `${authUrl}/?action=sign_out`, }, - '*' - ) - parent.postMessage( - { - pluginMessage: { - type: 'SIGN_OUT', - }, + pluginId: '1063959496693642315', + }, + 'https://www.figma.com' + ) + parent.postMessage( + { + pluginMessage: { + type: 'DELETE_ITEMS', + items: ['supabase_access_token'], }, - '*' - ) + }, + '*' + ) + parent.postMessage( + { + pluginMessage: { + type: 'SIGN_OUT', + }, + }, + '*' + ) - return - } else throw error + setTimeout(async () => { + await supabase.auth.signOut({ + scope: 'local', + }) + }, 2000) } From 6548f2923c75809c8c2a86a4d5944cef58229f32 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Sat, 31 Aug 2024 14:55:43 +0200 Subject: [PATCH 28/50] fix: update Explore component to handle active filters and filter options --- src/types/app.ts | 9 +++++++ src/ui/contexts/Explore.tsx | 52 +++++++++++++------------------------ src/ui/contexts/Source.tsx | 11 +++++++- 3 files changed, 37 insertions(+), 35 deletions(-) diff --git a/src/types/app.ts b/src/types/app.ts index e01582e2..15d2074e 100644 --- a/src/types/app.ts +++ b/src/types/app.ts @@ -24,6 +24,15 @@ export type Context = | 'EXPORT' | 'SETTINGS' +export type FilterOptions = + | 'ANY' + | 'YELLOW' + | 'ORANGE' + | 'RED' + | 'GREEN' + | 'VIOLET' + | 'BLUE' + export type EditorType = 'figma' | 'figjam' | 'dev' export type PlanStatus = 'UNPAID' | 'PAID' | 'NOT_SUPPORTED' diff --git a/src/ui/contexts/Explore.tsx b/src/ui/contexts/Explore.tsx index fde01cdb..35370526 100644 --- a/src/ui/contexts/Explore.tsx +++ b/src/ui/contexts/Explore.tsx @@ -15,7 +15,7 @@ import React from 'react' import { uid } from 'uid' import { locals } from '../../content/locals' -import { Language } from '../../types/app' +import { FilterOptions, Language } from '../../types/app' import { SourceColorConfiguration } from '../../types/configurations' import { ColourLovers } from '../../types/data' import { FetchStatus, ThirdParty } from '../../types/management' @@ -25,6 +25,7 @@ import PaletteItem from '../components/PaletteItem' interface ExploreProps { colourLoversPaletteList: Array + activeFilters: Array userConsent: Array lang: Language figmaUserId: string @@ -37,22 +38,13 @@ interface ExploreProps { palettes: Array, shouldBeEmpty: boolean ) => void + onChangeFilters: (filters: Array) => void } -type FilterOptions = - | 'ANY' - | 'YELLOW' - | 'ORANGE' - | 'RED' - | 'GREEN' - | 'VIOLET' - | 'BLUE' - interface ExploreStates { colourLoversPalettesListStatus: FetchStatus currentPage: number isLoadMoreActionLoading: boolean - activeFilters: Array } export default class Explore extends React.Component< @@ -76,7 +68,6 @@ export default class Explore extends React.Component< colourLoversPalettesListStatus: 'LOADING', currentPage: 1, isLoadMoreActionLoading: false, - activeFilters: ['ANY'], }) } @@ -102,7 +93,7 @@ export default class Explore extends React.Component< return } - if (this.state.activeFilters !== prevState.activeFilters) { + if (this.props.activeFilters !== prevProps.activeFilters) { this.setState({ currentPage: 1, colourLoversPalettesListStatus: 'LOADING', @@ -119,7 +110,7 @@ export default class Explore extends React.Component< encodeURIComponent( `https://www.colourlovers.com/api/palettes?format=json&numResults=${pageSize}&resultOffset=${ this.state.currentPage - 1 - }&hueOption=${this.state.activeFilters + }&hueOption=${this.props.activeFilters .filter((filter) => filter !== 'ANY') .map((filter) => filter.toLowerCase()) .join(',')}` @@ -172,22 +163,15 @@ export default class Explore extends React.Component< } onAddFilter = (value: FilterOptions) => { - if (value === 'ANY' || this.state.activeFilters.length === 0) - this.setState({ - activeFilters: this.state.activeFilters.filter( - (filter) => filter === 'ANY' - ), - }) - else if (this.state.activeFilters.includes(value)) - this.setState({ - activeFilters: this.state.activeFilters.filter( - (filter) => filter !== value - ), - }) - else - this.setState({ - activeFilters: this.state.activeFilters.concat(value), - }) + if (value === 'ANY' || this.props.activeFilters.length === 0) + this.props.onChangeFilters( + this.props.activeFilters.filter((filter) => filter === 'ANY') + ) + else if (this.props.activeFilters.includes(value)) + this.props.onChangeFilters( + this.props.activeFilters.filter((filter) => filter !== value) + ) + else this.props.onChangeFilters(this.props.activeFilters.concat(value)) } // Templates @@ -341,12 +325,12 @@ export default class Explore extends React.Component< id="explore__filters" options={this.setFilters()} selected={ - this.state.activeFilters.includes('ANY') && - this.state.activeFilters.length > 1 - ? this.state.activeFilters + this.props.activeFilters.includes('ANY') && + this.props.activeFilters.length > 1 + ? this.props.activeFilters .filter((filter) => filter !== 'ANY') .join(', ') - : this.state.activeFilters.join(', ') + : this.props.activeFilters.join(', ') } isDisabled={ this.state.colourLoversPalettesListStatus === 'LOADING' || diff --git a/src/ui/contexts/Source.tsx b/src/ui/contexts/Source.tsx index b5befbcd..2fb16f12 100644 --- a/src/ui/contexts/Source.tsx +++ b/src/ui/contexts/Source.tsx @@ -1,7 +1,12 @@ import { Bar, ConsentConfiguration, Tabs } from '@a_ng_d/figmug-ui' import React from 'react' -import { EditorType, Language, PlanStatus } from '../../types/app' +import { + EditorType, + FilterOptions, + Language, + PlanStatus, +} from '../../types/app' import { SourceColorConfiguration } from '../../types/configurations' import { ColourLovers } from '../../types/data' import { ContextItem, ThirdParty } from '../../types/management' @@ -27,6 +32,7 @@ interface SourceProps { interface SourceStates { context: string | undefined colourLoversPaletteList: Array + activeFilters: Array } export default class Source extends React.Component { @@ -38,6 +44,7 @@ export default class Source extends React.Component { this.state = { context: this.contexts[0] !== undefined ? this.contexts[0].id : '', colourLoversPaletteList: [], + activeFilters: ['ANY'], } } @@ -67,6 +74,7 @@ export default class Source extends React.Component { fragment = ( this.setState({ context: 'SOURCE_OVERVIEW' }) @@ -78,6 +86,7 @@ export default class Source extends React.Component { : [], }) } + onChangeFilters={(e) => this.setState({ activeFilters: e })} /> ) break From b4946fcb3e4cf63d3977338f12b7e8812114053f Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Sat, 31 Aug 2024 16:08:38 +0200 Subject: [PATCH 29/50] feat: add preview feature to Scale, Settings, and Source components --- src/ui/contexts/Scale.tsx | 8 +++ src/ui/contexts/Settings.tsx | 18 +++++-- src/ui/contexts/Source.tsx | 10 ++++ src/ui/modules/Preview.tsx | 100 +++++++++++++++++++++++++++++++++++ src/ui/stylesheets/app.css | 19 +++++++ src/utils/config.ts | 9 ++++ 6 files changed, 160 insertions(+), 4 deletions(-) create mode 100644 src/ui/modules/Preview.tsx diff --git a/src/ui/contexts/Scale.tsx b/src/ui/contexts/Scale.tsx index 54f0c15e..6cdd689b 100644 --- a/src/ui/contexts/Scale.tsx +++ b/src/ui/contexts/Scale.tsx @@ -33,6 +33,7 @@ import Feature from '../components/Feature' import Slider from '../components/Slider' import Actions from '../modules/Actions' import Dispatcher from '../modules/Dispatcher' +import Preview from '../modules/Preview' interface ScaleProps { sourceColors?: Array @@ -817,6 +818,13 @@ export default class Scale extends React.Component { {...this.props} context="CREATE" /> + feature.name === 'PREVIEW')?.isActive + } + > + + ) } diff --git a/src/ui/contexts/Settings.tsx b/src/ui/contexts/Settings.tsx index b6af82b7..37a87ffc 100644 --- a/src/ui/contexts/Settings.tsx +++ b/src/ui/contexts/Settings.tsx @@ -34,6 +34,7 @@ import type { AppStates } from '../App' import Feature from '../components/Feature' import Actions from '../modules/Actions' import Dispatcher from '../modules/Dispatcher' +import Preview from '../modules/Preview' interface SettingsProps { context: string @@ -1200,10 +1201,19 @@ export default class Settings extends React.Component { {this.props.context === 'CREATE' ? ( - + <> + + feature.name === 'PREVIEW')?.isActive + } + > + + + ) : ( { : () => null } /> + feature.name === 'PREVIEW')?.isActive + } + > + + ) } diff --git a/src/ui/modules/Preview.tsx b/src/ui/modules/Preview.tsx new file mode 100644 index 00000000..6d5fd7d5 --- /dev/null +++ b/src/ui/modules/Preview.tsx @@ -0,0 +1,100 @@ +import * as blinder from 'color-blind' +import chroma from 'chroma-js' +import { Hsluv } from 'hsluv' +import React from 'react' + +import { SourceColorConfiguration } from '../../types/configurations' +import { RgbModel } from '../../types/models' +import { palette } from '../../utils/palettePackage' + +interface PreviewProps { + sourceColors: Array | [] +} + +export default class Preview extends React.Component { + static defaultProps = { + sourceColors: [], + } + + // Direct actions + setColor = (rgb: RgbModel, scale: number) => { + scale = + palette.colorSpace.includes('OK') || palette.colorSpace === 'HSL' + ? scale / 100 + : scale + + if (palette.colorSpace === 'HSLUV') + return this.setVisionSimulation(this.setHsluv(rgb, scale)) + else + return this.setVisionSimulation( + chroma(Object.values(rgb).map((value) => value * 255)) + .set(`${palette.colorSpace.toLowerCase()}.l`, scale) + .hex() + ) + } + + setHsluv = (rgb: RgbModel, scale: number) => { + const hsluv = new Hsluv() + + hsluv.rgb_r = rgb.r + hsluv.rgb_g = rgb.g + hsluv.rgb_b = rgb.b + + hsluv.rgbToHsluv() + + hsluv.hsluv_l = scale + + if (Number.isNaN(hsluv.hsluv_s)) hsluv.hsluv_s = 0 + if (Number.isNaN(hsluv.hsluv_h)) hsluv.hsluv_h = 0 + + hsluv.hsluvToHex() + + return hsluv.hex + } + + setVisionSimulation = (hex: string) => { + if (palette.visionSimulationMode === 'PROTANOMALY') + return blinder.protanomaly(hex) + if (palette.visionSimulationMode === 'PROTANOPIA') + return blinder.protanopia(hex) + if (palette.visionSimulationMode === 'DEUTERANOMALY') + return blinder.deuteranomaly(hex) + if (palette.visionSimulationMode === 'DEUTERANOPIA') + return blinder.deuteranopia(hex) + if (palette.visionSimulationMode === 'TRITANOMALY') + return blinder.tritanomaly(hex) + if (palette.visionSimulationMode === 'TRITANOPIA') + return blinder.tritanopia(hex) + if (palette.visionSimulationMode === 'ACHROMATOMALY') + return blinder.achromatomaly(hex) + if (palette.visionSimulationMode === 'ACHROMATOPSIA') + return blinder.achromatopsia(hex) + return hex + } + + // Render + render() { + return ( +
+ {this.props.sourceColors.map((sourceColor, index) => ( +
+ {Object.values(palette.scale) + .reverse() + .map((scale, index) => ( +
+ ))} +
+ ))} +
+ ) + } +} diff --git a/src/ui/stylesheets/app.css b/src/ui/stylesheets/app.css index 53e4a1e7..cb0c0484 100644 --- a/src/ui/stylesheets/app.css +++ b/src/ui/stylesheets/app.css @@ -222,3 +222,22 @@ div.about__links { padding-bottom: var(--size-xxxsmall) !important; } } + +/* Preview */ +.preview { + display: flex; + flex-direction: column; + overflow: hidden; +} + +.preview__row { + display: flex; + flex: 1; + overflow: hidden; +} + +.preview__cell { + flex: 1; + overflow: hidden; + height: var(--size-xxxsmall); +} \ No newline at end of file diff --git a/src/utils/config.ts b/src/utils/config.ts index 1e8aee9b..43bdfc9e 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -836,6 +836,15 @@ export const features: Array = [ type: 'ACTION', service: ['CREATE', 'EDIT'], }, + { + name: 'PREVIEW', + description: 'Take a quick glance at the palette', + isActive: true, + isPro: false, + isNew: false, + type: 'DIVISION', + service: ['CREATE'], + }, { name: 'SHORTCUTS', description: 'Quick useful links', From 0534fbb85b60d9ad9f253621ed592e328f1577b6 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Sat, 31 Aug 2024 18:13:00 +0200 Subject: [PATCH 30/50] 4.1.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ed5c8542..45e7aedb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "figma-ui-color-palette", - "version": "4.0.4", + "version": "4.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "figma-ui-color-palette", - "version": "4.0.4", + "version": "4.1.0", "dependencies": { "@a_ng_d/figmug-ui": "^0.76.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", diff --git a/package.json b/package.json index 7b2f5dbb..398c4dcb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "figma-ui-color-palette", - "version": "4.0.4", + "version": "4.1.0", "description": "Create accessible UI color palettes with consistent lightness and contrast", "main": "code.js", "scripts": { From bf25e7ee30d9ed01068d5bbe8f4baebeb405d073 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Mon, 2 Sep 2024 00:01:42 +0200 Subject: [PATCH 31/50] chore: add new domain to allowed domains in manifest.json --- manifest.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index de979fb8..ceaece14 100644 --- a/manifest.json +++ b/manifest.json @@ -31,10 +31,12 @@ "https://corsproxy.io", "https://zclweepgvqkrelyfwhma.supabase.co", "https://oauth.yelbolt.workers.dev", + "https://announcements.yelbolt.workers.dev", "https://www.colourlovers.com", "https://*.mixpanel.com", "https://asset.brandfetch.io", - "https://*.sentry.io" + "https://*.sentry.io", + "https://*.amazonaws.com" ], "devAllowedDomains": [ "http://localhost:3000", From 679639b2c16e22d6aef806138c8580366677f849 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Mon, 2 Sep 2024 00:01:51 +0200 Subject: [PATCH 32/50] chore: update @a_ng_d/figmug-ui dependency to version 0.80.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 45e7aedb..09ef8461 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "figma-ui-color-palette", "version": "4.1.0", "dependencies": { - "@a_ng_d/figmug-ui": "^0.76.0", + "@a_ng_d/figmug-ui": "^0.80.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", @@ -64,9 +64,9 @@ } }, "node_modules/@a_ng_d/figmug-ui": { - "version": "0.76.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.76.0.tgz", - "integrity": "sha512-gKnPorUDm2wtW27N9V5NjUwxTKR6r4O9kGutifantPz3iApRehbbGObwpb6DN8PjFqQ2iw/M/QSnBcSjXOQMGQ==", + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.80.0.tgz", + "integrity": "sha512-bUHAWdc8b/ttmGlHtH1ZJSZIZx8SRrYV9V9R54Msh9Ax4wc5kH9CEuvGJvOjQB1jlA2sJ8gFOCFnrXlCL2a1bA==", "dependencies": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" @@ -6996,9 +6996,9 @@ }, "dependencies": { "@a_ng_d/figmug-ui": { - "version": "0.76.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.76.0.tgz", - "integrity": "sha512-gKnPorUDm2wtW27N9V5NjUwxTKR6r4O9kGutifantPz3iApRehbbGObwpb6DN8PjFqQ2iw/M/QSnBcSjXOQMGQ==", + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.80.0.tgz", + "integrity": "sha512-bUHAWdc8b/ttmGlHtH1ZJSZIZx8SRrYV9V9R54Msh9Ax4wc5kH9CEuvGJvOjQB1jlA2sJ8gFOCFnrXlCL2a1bA==", "requires": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" diff --git a/package.json b/package.json index 398c4dcb..a7654655 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "webpack-cli": "^4.9.1" }, "dependencies": { - "@a_ng_d/figmug-ui": "^0.76.0", + "@a_ng_d/figmug-ui": "^0.80.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", From 77fd83a653f930a6699aade94b0fce73824e8222 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Mon, 2 Sep 2024 00:03:17 +0200 Subject: [PATCH 33/50] refactor: update authentication code to use new authWorkerUrl variable --- .github/workflows/build.yml | 2 +- src/bridges/publication/authentication.ts | 6 +++--- src/utils/config.ts | 8 ++++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 86215bc2..b9100c74 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,7 +27,7 @@ jobs: echo REACT_APP_SENTRY_DSN="${{ vars.REACT_APP_SENTRY_DSN }}" >> .env echo SENTRY_AUTH_TOKEN="${{ secrets.SENTRY_AUTH_TOKEN }}" >> .env echo REACT_APP_MIXPANEL_TOKEN="${{ vars.REACT_APP_MIXPANEL_TOKEN }}" >> .env - echo REACT_APP_WORKER_URL="${{ vars.REACT_APP_WORKER_URL }}" >> .env + echo REACT_APP_AUTH_WORKER_URL="${{ vars.REACT_APP_AUTH_WORKER_URL }}" >> .env cat .env - name: Install and Build diff --git a/src/bridges/publication/authentication.ts b/src/bridges/publication/authentication.ts index 4a3f18d6..e1aa4400 100644 --- a/src/bridges/publication/authentication.ts +++ b/src/bridges/publication/authentication.ts @@ -1,7 +1,7 @@ import { createClient } from '@supabase/supabase-js' import { lang, locals } from '../../content/locals' -import { authUrl, databaseUrl, workerUrl } from '../../utils/config' +import { authUrl, authWorkerUrl, databaseUrl } from '../../utils/config' import checkConnectionStatus from '../checks/checkConnectionStatus' let isAuthenticated = false @@ -13,7 +13,7 @@ export const supabase = createClient( export const signIn = async (disinctId: string) => { return new Promise((resolve, reject) => { - fetch(workerUrl, { + fetch(authWorkerUrl, { method: 'GET', cache: 'no-cache', credentials: 'omit', @@ -38,7 +38,7 @@ export const signIn = async (disinctId: string) => { 'https://www.figma.com' ) const poll = setInterval(async () => { - fetch(workerUrl, { + fetch(authWorkerUrl, { method: 'GET', cache: 'no-cache', credentials: 'omit', diff --git a/src/utils/config.ts b/src/utils/config.ts index 43bdfc9e..2cf42d38 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -5,10 +5,14 @@ export const oldTrialTime = 48 export const releaseNotesVersion = '4.0.0' export const pageSize = 20 -export const workerUrl = +export const authWorkerUrl = process.env.NODE_ENV === 'development' ? 'http://localhost:8787' - : (process.env.REACT_APP_WORKER_URL as string) + : (process.env.REACT_APP_AUTH_WORKER_URL as string) +export const announcementsWorkerUrl = + process.env.NODE_ENV === 'development' + ? 'http://localhost:8787' + : (process.env.REACT_APP_ANNOUNCEMENTS_WORKER_URL as string) export const databaseUrl = process.env.REACT_APP_SUPABASE_URL as string export const authUrl = process.env.NODE_ENV === 'development' From d58346ed6dce3ed1bce622783197707e937980c7 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Mon, 2 Sep 2024 00:04:30 +0200 Subject: [PATCH 34/50] refactor: add HighlightStatus type and update Shortcuts component to display highlight notifications --- src/bridges/checks/checkHighlightStatus.ts | 48 +++--- src/bridges/loadUI.ts | 6 +- src/types/app.ts | 7 + src/types/management.ts | 5 + src/ui/App.tsx | 55 ++++++- src/ui/modules/Highlight.tsx | 168 ++++++++++++++------- src/ui/modules/PriorityContainer.tsx | 42 +++--- src/ui/modules/Shortcuts.tsx | 22 ++- 8 files changed, 249 insertions(+), 104 deletions(-) diff --git a/src/bridges/checks/checkHighlightStatus.ts b/src/bridges/checks/checkHighlightStatus.ts index c7ef56a7..273cd4a3 100644 --- a/src/bridges/checks/checkHighlightStatus.ts +++ b/src/bridges/checks/checkHighlightStatus.ts @@ -1,26 +1,38 @@ -import { releaseNotesVersion } from '../../utils/config' +const checkHighlightStatus = async (remoteVersion: string) => { + // figma.clientStorage.deleteAsync('highlight_version') + const localVersion = await figma.clientStorage.getAsync('highlight_version') + console.log('localVersion', localVersion) + console.log('remoteVersion', remoteVersion) -const checkHighlightStatus = async () => { - // figma.clientStorage.deleteAsync(`${version}_isRead`) - const isRead = await figma.clientStorage.getAsync( - `${releaseNotesVersion}_isRead` - ) - - if (isRead === undefined || !isRead) - figma.ui.postMessage({ - type: 'CHECK_HIGHLIGHT_STATUS', + if (localVersion === undefined) + return figma.ui.postMessage({ + type: 'PUSH_HIGHLIGHT_STATUS', data: figma.payments !== undefined ? figma.payments.getUserFirstRanSecondsAgo() > 60 - ? 'UNREAD_RELEASE_NOTE' - : 'READ_RELEASE_NOTE' - : 'READ_RELEASE_NOTE', - }) - else - figma.ui.postMessage({ - type: 'CHECK_HIGHLIGHT_STATUS', - data: 'READ_RELEASE_NOTE', + ? 'DISPLAY_HIGHLIGHT_DIALOG' + : 'NO_HIGHLIGHT' + : 'NO_HIGHLIGHT', }) + else { + const remoteMajorVersion = remoteVersion.split('.')[0], + remoteMinorVersion = remoteVersion.split('.')[1] + + const localMajorVersion = localVersion.split('.')[0], + localMinorVersion = localVersion.split('.')[1] + + if (remoteMajorVersion !== localMajorVersion) + return figma.ui.postMessage({ + type: 'PUSH_HIGHLIGHT_STATUS', + data: 'DISPLAY_HIGHLIGHT_DIALOG', + }) + + if (remoteMinorVersion !== localMinorVersion) + return figma.ui.postMessage({ + type: 'PUSH_HIGHLIGHT_STATUS', + data: 'DISPLAY_HIGHLIGHT_NOTIFICATION', + }) + } } export default checkHighlightStatus diff --git a/src/bridges/loadUI.ts b/src/bridges/loadUI.ts index 694c128b..e9cc7f99 100644 --- a/src/bridges/loadUI.ts +++ b/src/bridges/loadUI.ts @@ -44,9 +44,8 @@ const loadUI = async () => { themeColors: true, }) - checkUserConsent() - .then(() => checkEditorType()) - .then(() => checkHighlightStatus()) + checkUserConsent().then(() => checkEditorType()) + processSelection() await checkPlanStatus() @@ -81,6 +80,7 @@ const loadUI = async () => { figma.ui.resize(windowSize.w, windowSize.h) }, CHECK_USER_CONSENT: () => checkUserConsent(), + CHECK_HIGHLIGHT_STATUS: () => checkHighlightStatus(msg.version), CREATE_PALETTE: () => createPalette(msg), UPDATE_SCALE: () => updateScale(msg), UPDATE_VIEW: () => updateView(msg), diff --git a/src/types/app.ts b/src/types/app.ts index 15d2074e..ea8334b2 100644 --- a/src/types/app.ts +++ b/src/types/app.ts @@ -1,3 +1,5 @@ +import { HighlightStatus } from './management' + export interface Feature { name: string description: string @@ -45,3 +47,8 @@ export interface windowSize { w: number h: number } + +export interface HighlightDigest { + version: string + status: HighlightStatus +} diff --git a/src/types/management.ts b/src/types/management.ts index 019a41f6..a3165b8a 100644 --- a/src/types/management.ts +++ b/src/types/management.ts @@ -54,3 +54,8 @@ export type FetchStatus = | 'COMPLETE' | 'SIGN_IN_FIRST' | 'NO_RESULT' + +export type HighlightStatus = + | 'NO_HIGHLIGHT' + | 'DISPLAY_HIGHLIGHT_NOTIFICATION' + | 'DISPLAY_HIGHLIGHT_DIALOG' diff --git a/src/ui/App.tsx b/src/ui/App.tsx index e6b02b88..c23de048 100644 --- a/src/ui/App.tsx +++ b/src/ui/App.tsx @@ -10,6 +10,7 @@ import { supabase } from '../bridges/publication/authentication' import { locals } from '../content/locals' import { EditorType, + HighlightDigest, Language, PlanStatus, Service, @@ -35,7 +36,11 @@ import { import { PriorityContext } from '../types/management' import { ActionsList, TextColorsThemeHexModel } from '../types/models' import { UserSession } from '../types/user' -import features, { trialTime, userConsentVersion } from '../utils/config' +import features, { + announcementsWorkerUrl, + trialTime, + userConsentVersion, +} from '../utils/config' import { trackEditorEvent, trackExportEvent, @@ -86,6 +91,7 @@ export interface AppStates { lang: Language figmaUserId: string mustUserConsent: boolean + highlight: HighlightDigest isLoaded: boolean onGoingStep: string } @@ -180,13 +186,39 @@ class App extends React.Component, AppStates> { userConsent: userConsent, figmaUserId: '', mustUserConsent: true, + highlight: { + version: '', + status: 'NO_HIGHLIGHT', + }, isLoaded: false, onGoingStep: '', } } - componentDidMount = () => { + componentDidMount = async () => { setTimeout(() => this.setState({ isLoaded: true }), 1000) + fetch( + `${announcementsWorkerUrl}/?action=get_version&database_id=${process.env.REACT_APP_NOTION_ANNOUNCEMENTS_ID}` + ) + .then((response) => response.json()) + .then((data) => { + parent.postMessage( + { + pluginMessage: { + type: 'CHECK_HIGHLIGHT_STATUS', + version: data.version, + }, + }, + '*' + ) + this.setState({ + highlight: { + version: data.version, + status: 'NO_HIGHLIGHT', + }, + }) + }) + .catch((error) => console.error(error)) supabase.auth.onAuthStateChange((event, session) => { const actions: ActionsList = { SIGNED_IN: () => { @@ -283,13 +315,18 @@ class App extends React.Component, AppStates> { ) } - const checkHighlightStatus = () => + const handleHighlight = () => { this.setState({ priorityContainerContext: - e.data.pluginMessage.data === 'READ_RELEASE_NOTE' + e.data.pluginMessage.data !== 'DISPLAY_HIGHLIGHT_DIALOG' ? 'EMPTY' : 'HIGHLIGHT', + highlight: { + version: this.state.highlight.version, + status: e.data.pluginMessage.data, + }, }) + } const checkPlanStatus = () => this.setState({ @@ -737,7 +774,7 @@ class App extends React.Component, AppStates> { CHECK_USER_AUTHENTICATION: () => checkUserAuthentication(), CHECK_USER_CONSENT: () => checkUserConsent(), CHECK_EDITOR_TYPE: () => checkEditorType(), - CHECK_HIGHLIGHT_STATUS: () => checkHighlightStatus(), + PUSH_HIGHLIGHT_STATUS: () => handleHighlight(), CHECK_PLAN_STATUS: () => checkPlanStatus(), EMPTY_SELECTION: () => updateWhileEmptySelection(), COLOR_SELECTED: () => updateWhileColorSelected(), @@ -871,7 +908,13 @@ class App extends React.Component, AppStates> { this.setState({ ...this.state, ...e }) } onClose={() => - this.setState({ priorityContainerContext: 'EMPTY' }) + this.setState({ + priorityContainerContext: 'EMPTY', + highlight: { + version: this.state.highlight.version, + status: 'NO_HIGHLIGHT', + }, + }) } /> diff --git a/src/ui/modules/Highlight.tsx b/src/ui/modules/Highlight.tsx index 86c84f0a..36cc3741 100644 --- a/src/ui/modules/Highlight.tsx +++ b/src/ui/modules/Highlight.tsx @@ -1,10 +1,9 @@ -import { Dialog, texts } from '@a_ng_d/figmug-ui' +import { Dialog, Icon, texts } from '@a_ng_d/figmug-ui' import React from 'react' import { locals } from '../../content/locals' -import releaseNotes from '../../content/releaseNotes' import { Language } from '../../types/app' -import { ReleaseNote } from '../../types/content' +import { announcementsWorkerUrl } from '../../utils/config' interface HighlightProps { lang: Language @@ -13,6 +12,8 @@ interface HighlightProps { interface HighlightStates { position: number + announcements: Array + status: 'LOADING' | 'LOADED' | 'ERROR' } export default class Highlight extends React.Component< @@ -23,14 +24,38 @@ export default class Highlight extends React.Component< super(props) this.state = { position: 0, + announcements: [], + status: 'LOADING', } } - goNextSlide = ( - e: React.SyntheticEvent, - currentNote: ReleaseNote - ) => { - if (this.state.position + 1 < currentNote['numberOfNotes']) + componentDidMount = () => { + fetch( + `${announcementsWorkerUrl}/?action=get_announcements&database_id=${process.env.REACT_APP_NOTION_ANNOUNCEMENTS_ID}` + ) + .then((response) => response.json()) + .then((data) => { + this.setState({ + announcements: data.announcements, + status: 'LOADED', + }) + }) + .catch(() => { + parent.postMessage( + { + pluginMessage: { + type: 'SEND_MESSAGE', + message: 'Nope', + }, + }, + '*' + ) + this.setState({ status: 'ERROR' }) + }) + } + + goNextSlide = (e: React.SyntheticEvent) => { + if (this.state.position + 1 < this.state.announcements.length) this.setState({ position: this.state.position + 1 }) else { this.props.onCloseHighlight(e) @@ -39,51 +64,88 @@ export default class Highlight extends React.Component< } render() { - const currentNote = releaseNotes.filter((note) => note['isMostRecent'])[0] - return ( - this.goNextSlide(e, currentNote), - }, - secondary: { - label: locals[this.props.lang].highlight.cta.learnMore, - action: () => - window.open( - currentNote['learnMore'][this.state.position], - '_blank' - ), - }, - }} - indicator={ - currentNote['numberOfNotes'] > 1 - ? `${this.state.position + 1} of ${currentNote['numberOfNotes']}` - : undefined - } - onClose={(e) => { - this.props.onCloseHighlight(e) - this.setState({ position: 0 }) - }} - > -
- null, + }, + secondary: { + label: locals[this.props.lang].publication.waiting, + state: 'DISABLED', + action: () => null, + }, + }} + onClose={(e) => { + this.props.onCloseHighlight(e) + this.setState({ position: 0 }) + }} + > + -
-
-

- {currentNote['content'][this.state.position]} -

-
-
- ) + + ) + else + return ( + this.goNextSlide(e), + }, + secondary: { + label: locals[this.props.lang].highlight.cta.learnMore, + action: () => + window.open( + this.state.announcements[this.state.position].properties.URL + .url, + '_blank' + ), + }, + }} + indicator={ + this.state.announcements.length > 1 + ? `${this.state.position + 1} of ${this.state.announcements.length}` + : undefined + } + onClose={(e) => { + this.props.onCloseHighlight(e) + this.setState({ position: 0 }) + }} + > +
+ +
+
+

+ { + this.state.announcements[this.state.position].properties + .Description.rich_text[0].plain_text + } +

+
+
+ ) } } diff --git a/src/ui/modules/PriorityContainer.tsx b/src/ui/modules/PriorityContainer.tsx index 88a09649..895ff935 100644 --- a/src/ui/modules/PriorityContainer.tsx +++ b/src/ui/modules/PriorityContainer.tsx @@ -1,23 +1,24 @@ -import * as Sentry from '@sentry/browser' -import { - ConsentConfiguration, - Dialog, - FormItem, - Input, - texts, -} from '@a_ng_d/figmug-ui' -import React from 'react' +import * as Sentry from '@sentry/browser'; +import { ConsentConfiguration, Dialog, FormItem, Input, texts } from '@a_ng_d/figmug-ui'; +import React from 'react'; + + -import { signIn } from '../../bridges/publication/authentication' -import cp from '../../content/images/choose_plan.webp' -import pp from '../../content/images/pro_plan.webp' -import p from '../../content/images/publication.webp' -import t from '../../content/images/trial.webp' -import { locals } from '../../content/locals' -import { Language, PlanStatus, TrialStatus } from '../../types/app' +import { signIn } from '../../bridges/publication/authentication'; +import cp from '../../content/images/choose_plan.webp'; +import pp from '../../content/images/pro_plan.webp'; +import p from '../../content/images/publication.webp'; +import t from '../../content/images/trial.webp'; +import { locals } from '../../content/locals'; +import { + HighlightDigest, + Language, + PlanStatus, + TrialStatus, +} from '../../types/app' import { PriorityContext } from '../../types/management' import { UserSession } from '../../types/user' -import features, { releaseNotesVersion } from '../../utils/config' +import features from '../../utils/config' import { trackSignInEvent } from '../../utils/eventsTracker' import type { AppStates } from '../App' import Feature from '../components/Feature' @@ -32,6 +33,7 @@ interface PriorityContainerProps { planStatus: PlanStatus trialStatus: TrialStatus userSession: UserSession + highlight: HighlightDigest lang: Language figmaUserId: string onChangePublication: React.Dispatch> @@ -297,8 +299,8 @@ export default class PriorityContainer extends React.Component< type: 'SET_ITEMS', items: [ { - key: `${releaseNotesVersion}_isRead`, - value: true, + key: 'highlight_version', + value: this.props.highlight.version, }, ], }, @@ -518,4 +520,4 @@ export default class PriorityContainer extends React.Component< ) } -} +} \ No newline at end of file diff --git a/src/ui/modules/Shortcuts.tsx b/src/ui/modules/Shortcuts.tsx index 44a6872c..150a324d 100644 --- a/src/ui/modules/Shortcuts.tsx +++ b/src/ui/modules/Shortcuts.tsx @@ -11,7 +11,13 @@ import React from 'react' import { signIn, signOut } from '../../bridges/publication/authentication' import { locals } from '../../content/locals' -import { EditorType, Language, PlanStatus, TrialStatus } from '../../types/app' +import { + EditorType, + HighlightDigest, + Language, + PlanStatus, + TrialStatus, +} from '../../types/app' import { UserSession } from '../../types/user' import features from '../../utils/config' import { trackSignInEvent, trackSignOutEvent } from '../../utils/eventsTracker' @@ -25,6 +31,7 @@ interface ShortcutsProps { trialRemainingTime: number userSession: UserSession userConsent: Array + highlight: HighlightDigest lang: Language figmaUserId: string onReOpenFeedback: () => void @@ -309,9 +316,10 @@ export default class Shortcuts extends React.Component< this.props.planStatus ), isNew: - features.find( - (feature) => feature.name === 'SHORTCUTS_HIGHLIGHT' - )?.isNew ?? true, + this.props.highlight.status === + 'DISPLAY_HIGHLIGHT_NOTIFICATION' + ? true + : false, children: [], action: () => this.props.onReOpenHighlight(), }, @@ -508,6 +516,12 @@ export default class Shortcuts extends React.Component< }, ]} alignment="TOP_RIGHT" + isNew={ + this.props.highlight.status === + 'DISPLAY_HIGHLIGHT_NOTIFICATION' + ? true + : false + } /> {this.props.editorType !== 'dev' ? ( From 9bbd498715e25d87997b56b149f281797c686ad6 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Mon, 2 Sep 2024 00:28:12 +0200 Subject: [PATCH 35/50] refactor: remove previous release notes --- src/bridges/checks/checkHighlightStatus.ts | 4 +- src/content/images/release_note_v19.webp | Bin 6152 -> 0 bytes src/content/images/release_note_v20.webp | Bin 4866 -> 0 bytes src/content/images/release_note_v21.webp | Bin 5812 -> 0 bytes src/content/images/release_note_v22.webp | Bin 13052 -> 0 bytes src/content/images/release_note_v23.webp | Bin 19476 -> 0 bytes src/content/images/release_note_v24_1.webp | Bin 11746 -> 0 bytes src/content/images/release_note_v24_2.webp | Bin 6612 -> 0 bytes src/content/images/release_note_v25_1.webp | Bin 15582 -> 0 bytes src/content/images/release_note_v25_2.webp | Bin 6900 -> 0 bytes src/content/images/release_note_v25_3.webp | Bin 9136 -> 0 bytes src/content/images/release_note_v28_1.webp | Bin 13808 -> 0 bytes src/content/images/release_note_v28_2.webp | Bin 4578 -> 0 bytes src/content/images/release_note_v28_3.webp | Bin 7770 -> 0 bytes src/content/images/release_note_v29_1.webp | Bin 6076 -> 0 bytes src/content/images/release_note_v29_2.webp | Bin 10392 -> 0 bytes src/content/images/release_note_v30_1.webp | Bin 11502 -> 0 bytes src/content/images/release_note_v30_2.webp | Bin 12458 -> 0 bytes src/content/images/release_note_v31_1.webp | Bin 4098 -> 0 bytes src/content/images/release_note_v31_2.webp | Bin 10528 -> 0 bytes src/content/images/release_note_v31_3.webp | Bin 10250 -> 0 bytes src/content/images/release_note_v32_1.webp | Bin 10240 -> 0 bytes src/content/images/release_note_v32_2.webp | Bin 10532 -> 0 bytes src/content/images/release_note_v32_3.webp | Bin 2730 -> 0 bytes src/content/images/release_note_v33_1.webp | Bin 9836 -> 0 bytes src/content/images/release_note_v33_2.webp | Bin 14952 -> 0 bytes src/content/images/release_note_v33_3.webp | Bin 8672 -> 0 bytes src/content/images/release_note_v33_4.webp | Bin 11490 -> 0 bytes src/content/releaseNotes.ts | 231 --------------------- 29 files changed, 2 insertions(+), 233 deletions(-) delete mode 100644 src/content/images/release_note_v19.webp delete mode 100644 src/content/images/release_note_v20.webp delete mode 100644 src/content/images/release_note_v21.webp delete mode 100644 src/content/images/release_note_v22.webp delete mode 100644 src/content/images/release_note_v23.webp delete mode 100644 src/content/images/release_note_v24_1.webp delete mode 100644 src/content/images/release_note_v24_2.webp delete mode 100644 src/content/images/release_note_v25_1.webp delete mode 100644 src/content/images/release_note_v25_2.webp delete mode 100644 src/content/images/release_note_v25_3.webp delete mode 100644 src/content/images/release_note_v28_1.webp delete mode 100644 src/content/images/release_note_v28_2.webp delete mode 100644 src/content/images/release_note_v28_3.webp delete mode 100644 src/content/images/release_note_v29_1.webp delete mode 100644 src/content/images/release_note_v29_2.webp delete mode 100644 src/content/images/release_note_v30_1.webp delete mode 100644 src/content/images/release_note_v30_2.webp delete mode 100644 src/content/images/release_note_v31_1.webp delete mode 100644 src/content/images/release_note_v31_2.webp delete mode 100644 src/content/images/release_note_v31_3.webp delete mode 100644 src/content/images/release_note_v32_1.webp delete mode 100644 src/content/images/release_note_v32_2.webp delete mode 100644 src/content/images/release_note_v32_3.webp delete mode 100644 src/content/images/release_note_v33_1.webp delete mode 100644 src/content/images/release_note_v33_2.webp delete mode 100644 src/content/images/release_note_v33_3.webp delete mode 100644 src/content/images/release_note_v33_4.webp delete mode 100644 src/content/releaseNotes.ts diff --git a/src/bridges/checks/checkHighlightStatus.ts b/src/bridges/checks/checkHighlightStatus.ts index 273cd4a3..772a316b 100644 --- a/src/bridges/checks/checkHighlightStatus.ts +++ b/src/bridges/checks/checkHighlightStatus.ts @@ -1,8 +1,8 @@ const checkHighlightStatus = async (remoteVersion: string) => { // figma.clientStorage.deleteAsync('highlight_version') + // console.log('localVersion', localVersion) + // console.log('remoteVersion', remoteVersion) const localVersion = await figma.clientStorage.getAsync('highlight_version') - console.log('localVersion', localVersion) - console.log('remoteVersion', remoteVersion) if (localVersion === undefined) return figma.ui.postMessage({ diff --git a/src/content/images/release_note_v19.webp b/src/content/images/release_note_v19.webp deleted file mode 100644 index 93531a9df78249747470b81414eac73d31249e93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6152 zcmai&bx<7LvcLy-Nl1X;gkXyY*Tr3fyF&RxA2<|Kn zyN|qAx4v8T?yJ{Rea>&XySjUN>dYVWLPb##pacLz1zBwaZ4o1U000>7l>{ANMFUji z0JT={d_!p?qjt7vX|ZqxqG&|XEw)w zW1D|tTMw_l@d@`a60R=3e{21fza10WyXouR@3{9$19$^303|^7pXYZk0sxUS0KiE8 z$7Yia0L_sAKso=9?ODP7Tq6LWY2+WykdFo; zMQ1~k;-id}D`G4p{eJ$E0Ryx2fc)sX>NUq}XMADzi8bFyl=7|Z>gqOXG)OpT)%WUb#OE$WQ~SJR)Y9CtSc!J(f{iSKN;1MiYX>38XGlg{W4SB^XNg5A!5yY{oD zGZuvG$tLOZEHI1XiZJBXb73IJesr2pOKsoYI)N$@#1hHecK5=@T_MXH@tT%dN`FD#hT zagcI%WVe}@?(-vuFci`mHGopMLfdaY)jCEUp@yJnsAtGnWc1C?@A$>e~1`<{A7!_fL<=}5Le)+;do8IdbL~7-&5jKtR)vB1MOLIQpJV< zc7=IQB-9{A4V9)14l65_3cvD5CMRRE-1&frN6%0iRXwaf>7gX=Zr#s1<#lsDHwDT* zBO6wXjI=+#R;%h#kEJCfJsi@Pq(NuEYV7TR!!&GLNlSa^&B{#dK6$5{OSnIV|7d5G z%{sRn$8MaoIg z5zy4H21U-}^j-_+MbkcR5PBA3J$^U}BxSv&RX+i)dXyuA&L%*C*neb)|ff zMLV@8lv6dz=4O6oEy|~}1+KkW-L;6XX=$OXVLA8&EHXB1mfjx*n~6a9;9kmjNo)7F zrXuCq>+Fp6wmoUQdebr<6Zu&OUzJ?FbE(>rtLc-w8;kUs-;e zoVGu1)xazMaix-bv@$4g#)RMGPW+l@<;>$_p=He|UH-N8%5@8PvO2HulzB!6wp{(O zyk#nj3g>3o+u*mGF}*Cw*;g9JMiaWVI!3b;x8}!j%j=zlzEOTq=2DghvL>>%DRI*q zp=XRiylJ}TF4)#&!^AN|)X6eRChk?AMlWbn@YmzLD-E+*(0QMWro7QNoFEPMFK*@e zqlcOat$d0+z}RF)UT-cH1f%A@lV^$R+)^3ldJMDvX0&47HHAnv;IO*Ma(Vy*;g*Y7fzkIydilPnuhB|8b(Dr)Pn;EUWyvyRl5E)IVGMe9@t*rV}#z;e4+(Cv~3; zgiDPTl5E#^qqL@28+Wd;u#_gVzbJ%j==1QQBvg=b;Ne=l=~#d0F)pb@hEbDWWd%bj z3CE$RY0`Vgt#5j7qJ3$eJl{R9k5I4%VcI`z+ulh*VzJT;QBWd(Y#b>uu{L1qLkNei z`|%{cvk$djiXaN472$YpNwt=>P+=2N)Ln(l8@I;z+z>$~{?-uKUXK4{zwUMz-Q}41 zuEF}dl}DpZDvka5>xHP+??^@?oXN2C4)n)7<7O{DFur#z%*;>r5Z8y-q79rndjg_4 zc6KvqltxnY)NRrasyxJ=GS|kEZEXdI>!x1z81<*}if}Udn2Nt4*Y6c zG1caT+>{|c9()Ub%Avr70FdG(tvoNPTJZ+`5o4klb};Dm#(WI3N+GgcFcrYG?t|ydj;f}g(W;j8!{?EbqHE9S~ ziqEm`C+3k>v*aJ;r9RH#omd-`c11uN?q2S2#HefgNl3&U24EJfjuu z!SAieCH`y?*PB*(JrwP00y^U}IK8E^n25l<-h7B`Y*4$tse7rQh-zw@?D8*D2dUog z=`Ee598WH#aP;_OXv_#Jo zkdZUyZ%0DwS@}fO4da|19zQ=YKQe}d2v~(iv!L3T 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 Dz2s5A diff --git a/src/content/images/release_note_v20.webp b/src/content/images/release_note_v20.webp deleted file mode 100644 index 97ee6d0a009313c48c405fd6bf1af4469eb7df31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4866 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 KUq_exANe0IOuW$m diff --git a/src/content/images/release_note_v22.webp b/src/content/images/release_note_v22.webp deleted file mode 100644 index 8af987843e36c3e0da366c01a0ab665ad0a9a49d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13052 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 diff --git a/src/content/images/release_note_v23.webp b/src/content/images/release_note_v23.webp deleted file mode 100644 index b5c180d11da7918e35ae6b4fe11ef9f1fb00c994..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19476 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 diff --git a/src/content/images/release_note_v24_1.webp b/src/content/images/release_note_v24_1.webp deleted file mode 100644 index fbd63975337e9f0ee0f55daafaf53216b3937bb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11746 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 F{tHWyY0Lls diff --git a/src/content/images/release_note_v25_1.webp b/src/content/images/release_note_v25_1.webp deleted file mode 100644 index a0de8fb25033952151b6e585069951493851eb65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15582 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⪻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 DQ()1; diff --git a/src/content/images/release_note_v25_2.webp b/src/content/images/release_note_v25_2.webp deleted file mode 100644 index 2e7dbe9c2681e62c4d016b54e0b24dbb59b17b9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6900 zcmaKsWmuI>x5sZfr9*meKtK>dT58iNEghQ_^ItXVVnb&aN?oZLP&0O-m}sq3f<>EQwZ0D9FFDQuzmt45A7c_vv76#m;P7(pt_v>S3AY|zbgL!AdaP# ztHp!l_@OhqJZ%0@6WIfk+5F3Ff7$$B7X8bfZcc6w8uh>I@>)~+fh`}H&E~(@{J+@3 z$>py;=0PKB|IYpIUVrWH>F})_w6z|-*bki+a0N60c|hv#`5(p)=2!>-LKgslmhhjL zc_sifgaW|h#s9>Z^B?Xt1OV#C{}cPqoj94fnEjIu{lTMJTLZvpDF8gu2LRFu0Khf; zXYRrMAGLuVrf47Pa(rkuz&pSS00D}C17HC>e;^)!8+ZW-Jp5r0;xPblM+3Pi>_n(+ zDB>?3M@big3&2cnR09&2I93jSxbY*Z7(2&TAyhF+^n*+y#-P$#HTNObmA`dBjAAGEJitQ*o8FZ((zY;AKmF5^k2m*aP`B8#70km`=QOu z(4(5U~03ZfJDw>RaP!QE!F0^kn1lkFS6Yd zuWMkA6@kv98*Xf^XxN$aw6*7)FDTJ%#$mFXX`_U^kj~ z>Vw}x$X%I{<&5*Dy|f_;p%eDi(kwrSv`3N=MbT!#WG=*vl#=zm_}L1Qx;$#PNt|K$ z8Ur$+SB_tXz;vKcYg`R|4+p1LldntOb}MOE<9aV*DeBKYDiw{MYkY!-p4)R19a|a^ z0t7%ABRT9AaBrW3M_iA+ZqX007qZn`MN-{3z;;SQgQ{=5D;OplDQq*J#94z(jCmE$ zKB9?Yk6^4$gy1?6-r z>a)be#3l1d3Sok@&Fe_%zp1VZEPk(Y!tud~t4+dG24nDX!98`Z%~s?Z)PuF_9VCU|khO!M?y znzA3^*SKpCWb3w8UetGT4sYdnmE`)rIoQYZ1q{fysObBG}$SbW$tfVg@F zMexOJEZZ{Nxu|&8dF`<7cn|kwL_YDL8Yb^V&Q7)%@7v(&s!x;tDSRoVaEErQC{|c- z*U9#TVZ*;6tz@lxypsM-Y zI?0(&J*WHT6Xw$V7+FO@8S9*kOGx4+)_IbTtn^iox{_|@lkkp5iBLxsf`|8)>FZ)T zfH_dvP!cW$P?rEG5yJsi7#$?jlmP%K>8dn9y;9Nq_qoMF$|y_$x^`(lN`BRt-xZ0Zhekx+Z|A-w`00qke*66R^> zCj$iRc-{=$r=&b3pqgDh4R=^izii*zIv7j_hXpqZp8AT=LN&V6(|(LzGG6t1lHE<+ zuo{2$kbfngIZm&9c@=b6>5lsKBw=4}Lk~kGxYbvTVTcpKe^@DCfF`^ zmA9#+PB5Ss;LYvTPMwpxy;+t~$leIC^x=xd{>>3&*KnCpcO@lh)^S~iTp7IqE{@I! z;<{fwo#@jmUSMlEo;CNTX3999#p8Y?wOo@fL;`z0u((1Dx&Lk{F#t-vCRMECOr3A= zI@2<53DcWv2^&y+?bMkjouBX77&d5?B8tZI2W&to z>X??Ss+g+QbPg+pUBarax9F8-n2qu`WhQ8-43q@^-EntZ&6|`7cb#g2b|HuYLUGm7 zvKil2a$l-iS?BRyy)IFS%RUhc>N|qJyk@lTM?7|3Vn=+qD2u z$u-Z--s@kbH0Q60ztkrU^DilZmPP`+6B9XfX|_CJXa0(L3yQ${ z%HPp!?g8bgDSJV;Oz9oOgRBHC_OGS18Lp*_|BBw&D=+FWVja*=9!|G+Bahd6Nl-vb zlhhuL6^jTpW9r`KVA`WE%9H_fVe~zE&dy3E6)RdHw(&_Ymf@Q#3r^}ZdpEZ|lo!8= z3l^F*EcBr}|E`IfWPx~Q>E7K>9 z$($2?SG(CMnF0dQofYehwCqQ-F5eO~)PWPtlKz09b`u?~XVp6azsndnCn`;t|Ezhx zXRXYgqtjWf|E--cxHytNIV1vW>)AP!Hl`$4ym#NLq=;cIyjvt}pZ&~RDp}^jwwppp`r7AiRdDtX!X@*}!T_x%pBvTVuV0dtk_s^ewCC%sPI z9w;UHB;nF~HQYtla}yrF>bF8yTd9a>;9!?i!s~XEjmWYbzLY@iC%7uXRTUqk(z6Zy zB8}F7Pq3nbNCHOab}U|V;~?FqJVu#LuGZ=&N4vhkHbg-oJJDh>l)-E5PGz|{#aPY~ zW1U;+#Ms}lE#!lq%s3P%iqv=5ai3F}ZLNY!OA=ID|o5L-`4LOjR z5!1~to(XW+w>kLnmP*Iacs^UNrQuJs3!v!hRz+OlzoUbnI9E?GUt@nceLcLPx_x=W z)OP7a4q?pMg|9(^o<@!8+mXaS!NR~WM#k^cC->hRNb5+J7~pmwB6p^13tU#C%40eM zJ~{Bd=zq-MJ!RzlbR=u7)%HV}1P)z?ap`l;woc@T&9%sc^AA*ki765VSbUbKM_hVJ zeFRI#Xt#67vJ1_D9U48CcW~gO@Vc@lhrp&pnnRV)(IsU_Yj%RiWXbQr5h`K2atpT2 z3OTj0uMSj(cR}+ukj?XjI1*U8dc1Z0aEja$Vr%Anm-tR{ZU0koCoaYPvQ7t^)1v<9 z=xeY*mx5ivk#}sI%u)p zn)&8B$e(Tt&i!;*C;on>#)0n{a5MY!DHvMzpu}z0N9UI_E%Ab7hETJv;+aJUVmQ5+6NfL?_?S73`tq)UE<1EEx zzmDR|fu1&HM#5Kf{TG~vz?TasAa^H*50p&pJEB>kEAg7oG=!!v_lOwwG62k~l)&z@ z0PH`u!D$6<>kx0FB=xhiqgdAS;Qo2Zsq%uMAsA3MVLMbZi8)37pkkK=i0|q z&DLA{V$TgK#i%^bo5>ZhtwX_8`me2AlvbvoQx!8o>=dXfcz-?=CoEw;>3m}-{YvN8 zxtI#d+eGESR!v7x7Kc_Ux!)`gCEr!Z9u_M()L9jBXt(V;50E~|Qk8b#AME@1taWH3 zny(OOzZ7Z|YM{MeHA-MesN6_&{E)`;_W5rz<+CF;-b>-{D?kHujo|N^&-qP?5oXvyc11!44CLZIEuZn%fRg7-eKB zPo@CB{Kx&)l~&wKBdfeKnpOEb4}VeIx4u`Y&8mvIk_l!+%5F`?3g2LajU%>cGp_DO zSC*9hw!1}T8o9lg?cu*luN`qb2jFuGqqKT7%v#?7lxQthxQ05hD#xS^S^Ze2M)7si zU5X^LAl3vlqpORqDeh@uy0++QH`rvJ1nrsVMfd?7@(M4xd|1d1J$6;-hpk70{#W(g#D-5qyp9o>qJX0 z+ibD`ILJeP^xbx&*i19b+NSfDmQ7x3!|+fEJQ?fOYv+YYRiB5HE2ROQH)doHvru3C z(k6E=OSWn&{YyX0Z%bmI!&(Sqb;M?s(AapBp9#+ob6vPUR?p;KXK|@1+(J_v*ioz$ zmlbHqzb&opu{yx}`fRYKZF9l4P3;{zD7S!o_={MaVo<@XdG+Y(Z8XmqS$n*(+3@D2 z@4>FWz}d}HoU;Y(_;|Yk<_-S@f4N_;GZ)a>PCB5!u+oZ*^qJ^Sz`)3qb%GD?BiJEs zCl2e@%%gGa6JhoO!!(nA^u^df^5ggz%Aw`56&Z z1f}r)`@oCG;Q8RW6|pLLVUPa)`PT*+O^>>mY*46CwKKUG`B!@yLfWeD?iQ5xkcd{` zwwW=kJjsU#ye|rDXtJ#tW*+Ss*YR$s6D~(FeT(Ba#&uGcrs^#-6k2Gv+*}pHH6A+I zlIJvyP3)Ko$+y`j+A~Xxv5> z!QUEB1E+6)%CA12o1KwyuX&Jt%bE3lun)y4&L!;ftlJ%>$c+zWCx^(H)%rO$T`O9# zD*n-tRBxV$5VYz;e&kPc(Gz3i^h&vnFwF5N!C~eIahnP~-*gC&*Xq726h{+c>KVy% zN0Eo(v;9WFR8#fwi4(Ns)+EYH#5&0@+Bu41(uY!3Rr-h0rOZNUHMB9ONT))Y$oXY^E9* zRo`>$F;0ufxUSoujxUXTeI6g+=KwdR(}js>VzW-uB$;C?^(_W*n8HnXI_TSV7ROX+ zwHrpLnUvK{b2=mSVUK7ap8`o_{gLD!0rTzJU}KE^#Fri7H9g%)+*>(jia6Wi(LBfY zOL`gPp=;s*Zjx!6$WiGF%I-o{;Uj3DklMM<=&J7>-e{)7d zIN(ZKXV8oMYQ4?pw0o5t{91W~J9LA%e<4JQAbTt@(C5uWjp-Q5eHg!W&HO=pX&|RX zz8w8{wpuybc(;`6P{;kMZQTYmogG4)R0)e^`1d^)uPA)b+w7u|$>H((tO zHb~Yv_E;*k5t;xzPGxos)#CZ3-LA%`2ltATaUok3BfFwDDO%8cRHRDwWfsegHdS1l zSf7%!88q_E=R|#NaI(6`3P)=w3l8sM(x~B0t*d#=!lkE(%4f*&F?Q`}AMBk?SpuNb z6eV7iWSVCaXTd^Vc&?cLkfDp?{dm=&quJxf23L?zC%@IUH3OHV?`yxGK-iee$p13& zh6p`sL+Lvq)U+;=C0RrRnpRmS;at9!-t1jRuW_?s*!q2#$KrAZ&}Rw?eq6=$?p-=2$+7WAHn;;Eb`0wGvQC+J|uQL_V(SwTfM+)f0A&2 z)fXmCZu>$1SCvmkp!_S8pZ1tZAt#hV1l|}f)F?y7(?*37u18(3_s`Jtt%c=XQp(H! z&>21*M&oQE+ftbi#hAQ%&ad_MGJQ8IO{SnvEGsMz@$wzDbVvkhx!D@2$ z)UzW>rQ!|F)R$(>)axB!iLTXFo3jemRh#beU(6og>25!p;9+BT!|W`L34Y!mu7xl-zw8)(}az(hP=wY`?6=CWyNiEu>7gkPdT9 z8cEf$5VJKy z%+=|dkf#5AoWk9D?^XAUr&v+`Vhg;k<$o@{pNACie(u4%g4!oRd*hdzC9&c6b9PV; z`05PZRz!VGs=!3JYVA==-hj4#ORSzW^^0}#FkTz{t$f)*v<&hib+*N|LPbGSn>#-D zHacRFsxU!4MYj;gJQz1sG`u&-_SAhRN+FKb#nix@SeoFFuY9eSh2`n7q7R9$)DN<^ zgG))!d3&8^&+##vyjSJjSDwy4t#VR6;He$Ag>&=?RM-VUD&qQ5_hM kP+RZS@M5ulZtd2`p?09bj|v$Hm00Aa>OTELnFRp<1F$p%EC2ui diff --git a/src/content/images/release_note_v25_3.webp b/src/content/images/release_note_v25_3.webp deleted file mode 100644 index 98d34e119cf54cd1d6e9e4a1197a54de7f1ef438..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9136 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 IlaK)ZA5qyvy#N3J diff --git a/src/content/images/release_note_v28_2.webp b/src/content/images/release_note_v28_2.webp deleted file mode 100644 index 1707db1d7454b22ef9c0fb18d6c08052d361ca85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4578 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 D>}_+> diff --git a/src/content/images/release_note_v28_3.webp b/src/content/images/release_note_v28_3.webp deleted file mode 100644 index 74e2c6b9c8b9fe8d7706c1d1d442b91d235ddfa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7770 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 IngGE602DQLvH$=8 diff --git a/src/content/images/release_note_v29_2.webp b/src/content/images/release_note_v29_2.webp deleted file mode 100644 index 346bc894b2defca57901e0cd6480dde2bbcb1017..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10392 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 H0PueRKuolm diff --git a/src/content/images/release_note_v30_1.webp b/src/content/images/release_note_v30_1.webp deleted file mode 100644 index be5544f21f273df37db2b09d5f2678ed7c0b7334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11502 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 diff --git a/src/content/images/release_note_v31_1.webp b/src/content/images/release_note_v31_1.webp deleted file mode 100644 index 940e8c746c9f26603d4c426dcf255f1c3e9105bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4098 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 Ykx?|D7wrH+W0*(sPw3Bf+)v}b0C+S=vj6}9 diff --git a/src/content/images/release_note_v31_2.webp b/src/content/images/release_note_v31_2.webp deleted file mode 100644 index 925fe78ad9a59a8e8c8e646bea59bc98d5a5653d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10528 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 diff --git a/src/content/images/release_note_v32_2.webp b/src/content/images/release_note_v32_2.webp deleted file mode 100644 index 32ab3ee2c81222b7df8a2915bac1de8e9d27d947..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10532 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 diff --git a/src/content/images/release_note_v32_3.webp b/src/content/images/release_note_v32_3.webp deleted file mode 100644 index 7c5b4b83f51ec38c55d57680f18315388f0b4aca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2730 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 GpZ@?cU!*Yr diff --git a/src/content/images/release_note_v33_1.webp b/src/content/images/release_note_v33_1.webp deleted file mode 100644 index c465071e07745a15f9573820673c2f000a78044e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9836 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 diff --git a/src/content/images/release_note_v33_2.webp b/src/content/images/release_note_v33_2.webp deleted file mode 100644 index 47eace69da491a0fcfbb31041e69ec65c8ccdae9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14952 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 diff --git a/src/content/images/release_note_v33_3.webp b/src/content/images/release_note_v33_3.webp deleted file mode 100644 index 1880474ae19b76df8b5cb0d38733ad0e64036aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8672 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 Rj0BTacKtGOPWaBZ{2w+a = [ - { - version: '4.0.0', - isMostRecent: true, - title: [ - 'UI Color Palette at the Config!', - 'Let’s Celebrate with a Special Offer', - 'Publish and Share Palettes', - 'Score Indicator Enhancement', - ], - image: [rnv331, rnv332, rnv333, rnv334], - content: [ - 'We are happy to share with you this new: UI Color Palette will be exhibited in the Figma Config community showcase! During the next weeks, we would like to celebrate our current users and welcome our new comers!', - 'The celebration is followed with special offer! For a limited time, we are offering a discount on our service and a longer trial period to supercharge your palettes. Enjoy exploring and creating!', - 'You have the ability to publish color palettes for your personal use or for the wider community. This allows for the reuse of synchronized palettes in other documents and provides a source of inspiration drawn from the collective offerings of the UI Color Palette community!', - 'The score indicators offer precise and useful metrics (WCAG 2 and 3), enabling you to effectively assess the contrast ratio between text and background colors.', - ], - numberOfNotes: 4, - learnMore: [ - 'https://uicp.link/whats-new', - 'https://uicp.link/whats-new', - 'https://uicp.link/whats-new', - 'https://uicp.link/whats-new', - ], - }, - { - version: '3.2.0', - isMostRecent: false, - title: [ - 'Stops Distribution Easing', - 'Canny Forefront Integration', - 'Custom Naming Convention', - ], - image: [rnv321, rnv322, rnv323], - content: [ - 'You can distribute stops using pre-configured easing such as "ease" or "ease-in". This method provides a quick way to evenly distribute them across the range, thereby enhancing harmonized color scaling.', - 'Canny has been emphasized and prioritized. This promotes user feedback and increases the visibility of community discussions, creating a more interactive and communicative user experience.', - 'The naming convention within the Custom preset can be adjusted to either increase or decrease the stop number (from 1-10, 10-100, or 100-1000). This option is only available when creating a palette.', - ], - numberOfNotes: 3, - learnMore: [ - 'https://uicp.link/whats-new', - 'https://uicp.link/whats-new', - 'https://uicp.link/whats-new', - ], - }, - { - version: '3.1.0', - isMostRecent: false, - title: [ - 'Ready to Dev Mode', - 'Need More Trial Time?', - 'Import Colors from Realtime Colors', - ], - image: [rnv311, rnv312, rnv313], - content: [ - 'Dev Mode, after a six-month beta test, is now complete tool for handoffs, effectively connecting designers and developers. Code extraction from palettes is now possible with this mode.', - 'Trial periods are now seven days long, giving you an extra 96 hours to try out locked features, collaborate between roles, set up processes, etc. We believe you will find this extension beneficial.', - 'Realtime Colors is a practical tool that allows you to test and adjust color palettes using a template. This work can then be imported into Figma to convert these color variations into a color system.', - ], - numberOfNotes: 3, - learnMore: [ - 'https://uicp.link/whats-new', - 'https://uicp.link/whats-new', - 'https://uicp.link/whats-new', - ], - }, - { - version: '3.0.0', - isMostRecent: false, - title: [ - 'Simulate various visions for accessibility', - 'Exports more for Android and Apple apps', - ], - image: [rnv301, rnv302], - content: [ - 'You can simulate color perception and contrast for various types of color blindness. This is a step towards incorporating accessibility into the design process.', - 'Both Android and Apple offer numerous ways to apply color themes. Now, you can export your palette for use in Compose on Android and UIKit on Apple.', - ], - numberOfNotes: 2, - learnMore: ['https://uicp.link/whats-new', 'https://uicp.link/whats-new'], - }, - { - version: '2.9.0', - isMostRecent: false, - title: ['Use your palettes for Tailwind', 'Happy Xmas!'], - image: [rnv291, rnv292], - content: [ - 'You can now set your new palettes using the Tailwind color system and export all the shades and themes to a JSON file that complies with its configuration.', - "For Christmas, we're providing a special discount as an end-of-year gift.", - ], - numberOfNotes: 2, - learnMore: ['https://uicp.link/whats-new', 'https://uicp.link/whats-new'], - }, - { - version: '2.8.0', - isMostRecent: false, - title: [ - 'Black Friday Offer', - 'Import colors from Coolors', - 'Create a palette in fewer steps', - ], - image: [rnv283, rnv281, rnv282], - content: [ - 'The Pro plan for UI Color Palette is 90% off when billed yearly for the next two weeks. Happy Thanksgiving to our fellow Americans 🇺🇸!', - "In the Source context when creating, you can view the selected colors (from the document canvas). Additionally, you're able to paste a URL from a Coolors palette to supplement your color collection prior to scaling.", - 'You can create a color palette using the quick action feature in just a few steps. Simply select the colors, choose the preset, specify the color space, and finally, name it using a simple input field.', - ], - numberOfNotes: 3, - learnMore: [ - 'https://uicp.link/black-friday', - 'https://uicp.link/whats-new', - 'https://uicp.link/whats-new', - ], - }, - { - version: '2.5.0', - isMostRecent: false, - title: [ - '72-hour trial period to spread your palettes', - 'UI Color Palette is on LinkedIn', - ], - image: [rnv251, rnv252], - content: [ - 'Within 72 hours, all the tools will be available for you to test how you can distribute your color palettes among design and development teams. Our ambition is to make color palettes accessible, easy to handle, and publishable.', - 'Stay connected with our announcements and sharing, and help us spread good practices in building color palettes and systems.', - ], - numberOfNotes: 2, - learnMore: ['https://uicp.link/whats-new', 'https://uicp.link/network'], - }, - { - version: '2.4.0', - isMostRecent: false, - title: [ - 'UI Color palette 24: Create Color systems “like a Pro”', - 'UI Color palette 24: Color themes management “like a Pro”', - ], - image: [rnv241, rnv242], - content: [ - 'UI Color Palette allows you to create freely accessible color palettes. However, the Pro plan offers additional features such as color themes, more export options, and the ability to create variables that can transform your color palette into a color system. Are you ready to try it out?', - 'With the Pro plan, you can manage color themes within the same palette, enabling you to create as many variations of lightness scales as needed to build your color system. This feature is useful for managing both light and dark mode themes.', - ], - numberOfNotes: 2, - learnMore: ['https://uicp.link/whats-new', 'https://uicp.link/whats-new'], - }, - { - version: '2.3.0', - isMostRecent: false, - title: ['UI Color Palette 23 says welcome to Color spaces'], - image: [rnv23], - content: [ - 'Color spaces can be managed throughout the UI Color Palette. This allows you to select and switch between a variety of color spaces such as LCH, OKLCH, LAB, OKLAB, and HSL.', - ], - numberOfNotes: 1, - learnMore: ['https://uicp.link/whats-new'], - }, - { - version: '2.2.0', - isMostRecent: false, - title: ['UI Color Palette 22 update highlight'], - image: [rnv22], - content: [ - 'Newly extended to Figjam, the UI Color Palette plugin empowers designers to create and customize their UI color schemes at the start of the design process, providing greater flexibility to their workflow and enhancing their creative potential.', - ], - numberOfNotes: 1, - learnMore: ['https://uicp.link/whats-new'], - }, - { - version: '2.1.0', - isMostRecent: false, - title: ['UI Color Palette 21 update highlight'], - image: [rnv21], - content: [ - "Enhance your palette customization by editing the text colors used for the contrast score, surpassing the restrictions of using pure black and white. This ensures that your palette remains accessible, aligns with your brand's style, and complies with the WCAG and APCA standards.", - ], - numberOfNotes: 1, - learnMore: ['https://uicp.link/whats-new'], - }, - { - version: '2.0.0', - isMostRecent: false, - title: ['UI Color Palette 20 update highlight'], - image: [rnv20], - content: [ - "The color shades generation has been updated to improve the consistency of your palette's lightness and saturation. The new algorithm is automatically used for new palettes, and can be enabled for existing palettes in the settings.", - ], - numberOfNotes: 1, - learnMore: ['https://uicp.link/whats-new'], - }, - { - version: '1.9.0', - isMostRecent: false, - title: ['UI Color Palette 19 update highlight'], - image: [rnv19], - content: [ - 'Automatically identify the closest color shade to the source color when editing a palette. This feature aims to obtain the sRGB version of the source color that may not be natively within the gamut, making it easier to use in your UI.', - ], - numberOfNotes: 1, - learnMore: ['https://uicp.link/whats-new'], - }, -] - -export default releaseNotes From 8dc934158d414ac6046104ec0c49dd1547e7de4c Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Mon, 2 Sep 2024 00:28:20 +0200 Subject: [PATCH 36/50] chore: add new domain to allowed domains in manifest.json --- manifest.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index ceaece14..5794f3d9 100644 --- a/manifest.json +++ b/manifest.json @@ -40,7 +40,8 @@ ], "devAllowedDomains": [ "http://localhost:3000", - "http://localhost:8787" + "http://localhost:8787", + "http://localhost:8888" ] }, "parameters": [ From d26c549ec66fdf3799f2d8a721c0f66a3ab05dd1 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Mon, 2 Sep 2024 00:36:58 +0200 Subject: [PATCH 37/50] refactor: update localization strings for pending announcements and actions --- src/content/locals.ts | 9 +++- src/ui/modules/Highlight.tsx | 74 +++++++++++++++++----------- src/ui/modules/PriorityContainer.tsx | 20 +------- src/ui/modules/Publication.tsx | 4 +- src/utils/config.ts | 2 +- 5 files changed, 56 insertions(+), 53 deletions(-) diff --git a/src/content/locals.ts b/src/content/locals.ts index 269f87d2..9341ebc2 100644 --- a/src/content/locals.ts +++ b/src/content/locals.ts @@ -52,14 +52,13 @@ export const locals: { [key: string]: any } = { statusUptoDate: 'No change', statusUnpublished: 'Unpublished', statusRemoteChanges: 'Remote changes', - statusWaiting: 'Waiting…', + statusWaiting: 'Pending…', statusNotFound: 'Not found', publish: 'Publish…', unpublish: 'Unpublish', synchronize: 'Synchronize…', revert: 'Revert', detach: 'Detach', - waiting: 'Waiting…', signIn: 'Sign in to publish', }, relaunch: { @@ -456,6 +455,11 @@ export const locals: { [key: string]: any } = { 'A top analytics platform for tracking and understanding user interactions', }, }, + pending: { + announcements: 'Pending announcements…', + primaryAction: '………', + secondaryAction: '………', + }, success: { publication: '✓ The palette has been published', nonPublication: '✓ The palette has been unpublished', @@ -511,6 +515,7 @@ export const locals: { [key: string]: any } = { addToFile: '✕ The palette cannot be added', noInternetConnection: '✕ The connection with the remote palette is unlinked', + announcements: 'The announcements cannot be loaded', }, }, } diff --git a/src/ui/modules/Highlight.tsx b/src/ui/modules/Highlight.tsx index 36cc3741..c60f1e76 100644 --- a/src/ui/modules/Highlight.tsx +++ b/src/ui/modules/Highlight.tsx @@ -1,11 +1,12 @@ -import { Dialog, Icon, texts } from '@a_ng_d/figmug-ui' +import { Dialog, Icon, Message, texts } from '@a_ng_d/figmug-ui' import React from 'react' import { locals } from '../../content/locals' -import { Language } from '../../types/app' +import { HighlightDigest, Language } from '../../types/app' import { announcementsWorkerUrl } from '../../utils/config' interface HighlightProps { + highlight: HighlightDigest lang: Language onCloseHighlight: React.ReactEventHandler } @@ -41,15 +42,6 @@ export default class Highlight extends React.Component< }) }) .catch(() => { - parent.postMessage( - { - pluginMessage: { - type: 'SEND_MESSAGE', - message: 'Nope', - }, - }, - '*' - ) this.setState({ status: 'ERROR' }) }) } @@ -67,28 +59,37 @@ export default class Highlight extends React.Component< if (this.state.status === 'LOADING') return ( null, - }, - secondary: { - label: locals[this.props.lang].publication.waiting, - state: 'DISABLED', - action: () => null, - }, + primary: undefined, + secondary: undefined, }} - onClose={(e) => { - this.props.onCloseHighlight(e) - this.setState({ position: 0 }) + onClose={this.props.onCloseHighlight} + > +
+ +
+
+ ) + else if (this.state.status === 'ERROR') + return ( + - +
+ +
) else @@ -122,8 +123,21 @@ export default class Highlight extends React.Component< : undefined } onClose={(e) => { + parent.postMessage( + { + pluginMessage: { + type: 'SET_ITEMS', + items: [ + { + key: 'highlight_version', + value: this.props.highlight.version, + }, + ], + }, + }, + '*' + ) this.props.onCloseHighlight(e) - this.setState({ position: 0 }) }} >
diff --git a/src/ui/modules/PriorityContainer.tsx b/src/ui/modules/PriorityContainer.tsx index 895ff935..1a1ceff5 100644 --- a/src/ui/modules/PriorityContainer.tsx +++ b/src/ui/modules/PriorityContainer.tsx @@ -291,24 +291,8 @@ export default class PriorityContainer extends React.Component< } > { - parent.postMessage( - { - pluginMessage: { - type: 'SET_ITEMS', - items: [ - { - key: 'highlight_version', - value: this.props.highlight.version, - }, - ], - }, - }, - '*' - ) - this.props.onClose() - }} + {...this.props} + onCloseHighlight={this.props.onClose} /> ) diff --git a/src/ui/modules/Publication.tsx b/src/ui/modules/Publication.tsx index 2bc23ff9..091e76db 100644 --- a/src/ui/modules/Publication.tsx +++ b/src/ui/modules/Publication.tsx @@ -779,12 +779,12 @@ export default class Publication extends React.Component< }, WAITING: { primary: { - label: locals[this.props.lang].publication.waiting, + label: locals[this.props.lang].pending.primaryAction, state: 'DISABLED', action: () => null, }, secondary: { - label: locals[this.props.lang].publication.waiting, + label: locals[this.props.lang].pending.secondaryAction, state: 'DISABLED', action: () => null, }, diff --git a/src/utils/config.ts b/src/utils/config.ts index 2cf42d38..145a941f 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -11,7 +11,7 @@ export const authWorkerUrl = : (process.env.REACT_APP_AUTH_WORKER_URL as string) export const announcementsWorkerUrl = process.env.NODE_ENV === 'development' - ? 'http://localhost:8787' + ? 'http://localhost:8888' : (process.env.REACT_APP_ANNOUNCEMENTS_WORKER_URL as string) export const databaseUrl = process.env.REACT_APP_SUPABASE_URL as string export const authUrl = From 39ab6d51d8f56c35cae06d7d8e850ec1fce961f9 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Mon, 2 Sep 2024 00:48:27 +0200 Subject: [PATCH 38/50] refactor: arrange types --- src/types/app.ts | 62 ++++++++++++++++++++++++++- src/types/configurations.ts | 2 +- src/types/content.ts | 9 ---- src/types/events.ts | 3 +- src/types/management.ts | 61 -------------------------- src/ui/App.tsx | 2 +- src/ui/components/Slider.tsx | 2 +- src/ui/contexts/Colors.tsx | 9 +++- src/ui/contexts/CommunityPalettes.tsx | 12 ++---- src/ui/contexts/Explore.tsx | 8 +++- src/ui/contexts/MyPalettes.tsx | 12 ++---- src/ui/contexts/Overview.tsx | 3 +- src/ui/contexts/Palettes.tsx | 3 +- src/ui/contexts/Scale.tsx | 3 +- src/ui/contexts/Source.tsx | 3 +- src/ui/contexts/Themes.tsx | 9 +++- src/ui/modules/PriorityContainer.tsx | 30 +++++++------ src/ui/services/CreatePalette.tsx | 3 +- src/ui/services/EditPalette.tsx | 3 +- src/utils/config.ts | 1 - src/utils/doLightnessScale.ts | 2 +- 21 files changed, 115 insertions(+), 127 deletions(-) delete mode 100644 src/types/content.ts delete mode 100644 src/types/management.ts diff --git a/src/types/app.ts b/src/types/app.ts index ea8334b2..10f88dbd 100644 --- a/src/types/app.ts +++ b/src/types/app.ts @@ -1,5 +1,3 @@ -import { HighlightStatus } from './management' - export interface Feature { name: string description: string @@ -41,6 +39,21 @@ export type PlanStatus = 'UNPAID' | 'PAID' | 'NOT_SUPPORTED' export type TrialStatus = 'UNUSED' | 'PENDING' | 'EXPIRED' +export type FetchStatus = + | 'UNLOADED' + | 'LOADING' + | 'LOADED' + | 'ERROR' + | 'EMPTY' + | 'COMPLETE' + | 'SIGN_IN_FIRST' + | 'NO_RESULT' + +export type HighlightStatus = + | 'NO_HIGHLIGHT' + | 'DISPLAY_HIGHLIGHT_NOTIFICATION' + | 'DISPLAY_HIGHLIGHT_DIALOG' + export type Language = 'en-US' export interface windowSize { @@ -52,3 +65,48 @@ export interface HighlightDigest { version: string status: HighlightStatus } + +export interface SelectedColor { + id: string | undefined + position: number +} + +export interface HoveredColor extends SelectedColor { + hasGuideAbove: boolean + hasGuideBelow: boolean +} + +export type PriorityContext = + | 'EMPTY' + | 'FEEDBACK' + | 'TRIAL_FEEDBACK' + | 'HIGHLIGHT' + | 'WELCOME_TO_PRO' + | 'WELCOME_TO_TRIAL' + | 'TRY' + | 'ABOUT' + | 'PUBLICATION' + | 'REPORT' + +export type ThirdParty = 'COOLORS' | 'REALTIME_COLORS' | 'COLOUR_LOVERS' + +export type Easing = 'LINEAR' | 'EASE_IN' | 'EASE_OUT' | 'EASE_IN_OUT' + +export interface ImportUrl { + value: string + state: 'DEFAULT' | 'ERROR' | undefined + canBeSubmitted: boolean + helper: + | { + type: 'INFO' | 'ERROR' + message: string + } + | undefined +} + +export interface ContextItem { + label: string + id: Context + isUpdated: boolean + isActive: boolean +} diff --git a/src/types/configurations.ts b/src/types/configurations.ts index f83958e5..6eb1a9d1 100644 --- a/src/types/configurations.ts +++ b/src/types/configurations.ts @@ -1,6 +1,6 @@ import { HexModel } from '@a_ng_d/figmug-ui' -import { ThirdParty } from './management' +import { ThirdParty } from './app' import { RgbModel, TextColorsThemeHexModel } from './models' export interface SourceColorConfiguration { diff --git a/src/types/content.ts b/src/types/content.ts deleted file mode 100644 index 2633293c..00000000 --- a/src/types/content.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface ReleaseNote { - version: string - isMostRecent: boolean - title: Array - image: Array - content: Array - numberOfNotes: number - learnMore: Array<`https://${string}`> -} diff --git a/src/types/events.ts b/src/types/events.ts index 972c9187..a0579cf5 100644 --- a/src/types/events.ts +++ b/src/types/events.ts @@ -1,9 +1,8 @@ -import { EditorType } from './app' +import { Easing, EditorType } from './app' import { ColorSpaceConfiguration, NamingConventionConfiguration, } from './configurations' -import { Easing } from './management' export interface EditorEvent { editor: EditorType diff --git a/src/types/management.ts b/src/types/management.ts deleted file mode 100644 index a3165b8a..00000000 --- a/src/types/management.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Context } from './app' - -export interface SelectedColor { - id: string | undefined - position: number -} - -export interface HoveredColor extends SelectedColor { - hasGuideAbove: boolean - hasGuideBelow: boolean -} - -export type PriorityContext = - | 'EMPTY' - | 'FEEDBACK' - | 'TRIAL_FEEDBACK' - | 'HIGHLIGHT' - | 'WELCOME_TO_PRO' - | 'WELCOME_TO_TRIAL' - | 'TRY' - | 'ABOUT' - | 'PUBLICATION' - | 'REPORT' - -export type ThirdParty = 'COOLORS' | 'REALTIME_COLORS' | 'COLOUR_LOVERS' - -export type Easing = 'LINEAR' | 'EASE_IN' | 'EASE_OUT' | 'EASE_IN_OUT' - -export interface ImportUrl { - value: string - state: 'DEFAULT' | 'ERROR' | undefined - canBeSubmitted: boolean - helper: - | { - type: 'INFO' | 'ERROR' - message: string - } - | undefined -} - -export interface ContextItem { - label: string - id: Context - isUpdated: boolean - isActive: boolean -} - -export type FetchStatus = - | 'UNLOADED' - | 'LOADING' - | 'LOADED' - | 'ERROR' - | 'EMPTY' - | 'COMPLETE' - | 'SIGN_IN_FIRST' - | 'NO_RESULT' - -export type HighlightStatus = - | 'NO_HIGHLIGHT' - | 'DISPLAY_HIGHLIGHT_NOTIFICATION' - | 'DISPLAY_HIGHLIGHT_DIALOG' diff --git a/src/ui/App.tsx b/src/ui/App.tsx index c23de048..5d609d8e 100644 --- a/src/ui/App.tsx +++ b/src/ui/App.tsx @@ -13,6 +13,7 @@ import { HighlightDigest, Language, PlanStatus, + PriorityContext, Service, TrialStatus, } from '../types/app' @@ -33,7 +34,6 @@ import { ViewConfiguration, VisionSimulationModeConfiguration, } from '../types/configurations' -import { PriorityContext } from '../types/management' import { ActionsList, TextColorsThemeHexModel } from '../types/models' import { UserSession } from '../types/user' import features, { diff --git a/src/ui/components/Slider.tsx b/src/ui/components/Slider.tsx index 8a196220..acc255db 100644 --- a/src/ui/components/Slider.tsx +++ b/src/ui/components/Slider.tsx @@ -1,8 +1,8 @@ import { doMap } from '@a-ng-d/figmug.modules.do-map' import React from 'react' +import { Easing } from '../../types/app' import { ScaleConfiguration } from '../../types/configurations' -import { Easing } from '../../types/management' import doLightnessScale from '../../utils/doLightnessScale' import { palette } from '../../utils/palettePackage' import addStop from './../handlers/addStop' diff --git a/src/ui/contexts/Colors.tsx b/src/ui/contexts/Colors.tsx index 572fa039..465a72ad 100644 --- a/src/ui/contexts/Colors.tsx +++ b/src/ui/contexts/Colors.tsx @@ -10,9 +10,14 @@ import React from 'react' import { uid } from 'uid' import { locals } from '../../content/locals' -import { EditorType, Language, PlanStatus } from '../../types/app' +import { + EditorType, + HoveredColor, + Language, + PlanStatus, + SelectedColor, +} from '../../types/app' import { ColorConfiguration } from '../../types/configurations' -import { HoveredColor, SelectedColor } from '../../types/management' import { ColorsMessage } from '../../types/messages' import { ActionsList, DispatchProcess } from '../../types/models' import { Identity } from '../../types/user' diff --git a/src/ui/contexts/CommunityPalettes.tsx b/src/ui/contexts/CommunityPalettes.tsx index 24989a83..db7a0368 100644 --- a/src/ui/contexts/CommunityPalettes.tsx +++ b/src/ui/contexts/CommunityPalettes.tsx @@ -10,7 +10,7 @@ import React from 'react' import { supabase } from '../../bridges/publication/authentication' import { locals } from '../../content/locals' -import { Context, Language, PlanStatus } from '../../types/app' +import { Context, FetchStatus, Language, PlanStatus } from '../../types/app' import { ColorConfiguration, MetaConfiguration, @@ -19,7 +19,6 @@ import { ThemeConfiguration, } from '../../types/configurations' import { ExternalPalettes } from '../../types/data' -import { FetchStatus } from '../../types/management' import { ActionsList } from '../../types/models' import { UserSession } from '../../types/user' import { pageSize, palettesDbTableName } from '../../utils/config' @@ -412,16 +411,11 @@ export default class CommunityPalettes extends React.Component< ) }} onCleared={(e) => { - this.props.onChangeSearchQuery( - e - ) + this.props.onChangeSearchQuery(e) this.props.onChangeStatus('LOADING') this.props.onChangeCurrentPage(1) this.props.onLoadPalettesList([]) - this.callUICPAgent( - 1, - e - ) + this.callUICPAgent(1, e) }} /> } diff --git a/src/ui/contexts/Explore.tsx b/src/ui/contexts/Explore.tsx index 35370526..5a00d2b7 100644 --- a/src/ui/contexts/Explore.tsx +++ b/src/ui/contexts/Explore.tsx @@ -15,10 +15,14 @@ import React from 'react' import { uid } from 'uid' import { locals } from '../../content/locals' -import { FilterOptions, Language } from '../../types/app' +import { + FetchStatus, + FilterOptions, + Language, + ThirdParty, +} from '../../types/app' import { SourceColorConfiguration } from '../../types/configurations' import { ColourLovers } from '../../types/data' -import { FetchStatus, ThirdParty } from '../../types/management' import { pageSize } from '../../utils/config' import { trackImportEvent } from '../../utils/eventsTracker' import PaletteItem from '../components/PaletteItem' diff --git a/src/ui/contexts/MyPalettes.tsx b/src/ui/contexts/MyPalettes.tsx index de02b937..c120085e 100644 --- a/src/ui/contexts/MyPalettes.tsx +++ b/src/ui/contexts/MyPalettes.tsx @@ -13,7 +13,7 @@ import { signIn, supabase } from '../../bridges/publication/authentication' import sharePalette from '../../bridges/publication/sharePalette' import unpublishPalette from '../../bridges/publication/unpublishPalette' import { locals } from '../../content/locals' -import { Context, Language, PlanStatus } from '../../types/app' +import { Context, FetchStatus, Language, PlanStatus } from '../../types/app' import { ColorConfiguration, MetaConfiguration, @@ -22,7 +22,6 @@ import { ThemeConfiguration, } from '../../types/configurations' import { ExternalPalettes } from '../../types/data' -import { FetchStatus } from '../../types/management' import { ActionsList } from '../../types/models' import { UserSession } from '../../types/user' import { pageSize, palettesDbTableName } from '../../utils/config' @@ -643,16 +642,11 @@ export default class MyPalettes extends React.Component< ) }} onCleared={(e) => { - this.props.onChangeSearchQuery( - e - ) + this.props.onChangeSearchQuery(e) this.props.onChangeStatus('LOADING') this.props.onChangeCurrentPage(1) this.props.onLoadPalettesList([]) - this.callUICPAgent( - 1, - e - ) + this.callUICPAgent(1, e) }} /> } diff --git a/src/ui/contexts/Overview.tsx b/src/ui/contexts/Overview.tsx index b1fbc404..2f6a0c9e 100644 --- a/src/ui/contexts/Overview.tsx +++ b/src/ui/contexts/Overview.tsx @@ -12,9 +12,8 @@ import React from 'react' import { uid } from 'uid' import { locals } from '../../content/locals' -import { Language, PlanStatus } from '../../types/app' +import { ImportUrl, Language, PlanStatus, ThirdParty } from '../../types/app' import { SourceColorConfiguration } from '../../types/configurations' -import { ImportUrl, ThirdParty } from '../../types/management' import features from '../../utils/config' import { trackImportEvent } from '../../utils/eventsTracker' import isBlocked from '../../utils/isBlocked' diff --git a/src/ui/contexts/Palettes.tsx b/src/ui/contexts/Palettes.tsx index c731ede3..3ad8dc3c 100644 --- a/src/ui/contexts/Palettes.tsx +++ b/src/ui/contexts/Palettes.tsx @@ -1,9 +1,8 @@ import { Bar, ConsentConfiguration, HexModel, Tabs } from '@a_ng_d/figmug-ui' import React from 'react' -import { Language, PlanStatus } from '../../types/app' +import { ContextItem, FetchStatus, Language, PlanStatus } from '../../types/app' import { ExternalPalettes } from '../../types/data' -import { ContextItem, FetchStatus } from '../../types/management' import { UserSession } from '../../types/user' import { setContexts } from '../../utils/setContexts' import CommunityPalettes from './CommunityPalettes' diff --git a/src/ui/contexts/Scale.tsx b/src/ui/contexts/Scale.tsx index 6cdd689b..c3a3afd4 100644 --- a/src/ui/contexts/Scale.tsx +++ b/src/ui/contexts/Scale.tsx @@ -12,14 +12,13 @@ import { import React from 'react' import { locals } from '../../content/locals' -import { EditorType, Language, PlanStatus } from '../../types/app' +import { Easing, EditorType, Language, PlanStatus } from '../../types/app' import { NamingConventionConfiguration, PresetConfiguration, ScaleConfiguration, SourceColorConfiguration, } from '../../types/configurations' -import { Easing } from '../../types/management' import { ScaleMessage } from '../../types/messages' import { ActionsList, DispatchProcess } from '../../types/models' import { Identity } from '../../types/user' diff --git a/src/ui/contexts/Source.tsx b/src/ui/contexts/Source.tsx index 3b59eacf..938ad86c 100644 --- a/src/ui/contexts/Source.tsx +++ b/src/ui/contexts/Source.tsx @@ -2,14 +2,15 @@ import { Bar, ConsentConfiguration, Tabs } from '@a_ng_d/figmug-ui' import React from 'react' import { + ContextItem, EditorType, FilterOptions, Language, PlanStatus, + ThirdParty, } from '../../types/app' import { SourceColorConfiguration } from '../../types/configurations' import { ColourLovers } from '../../types/data' -import { ContextItem, ThirdParty } from '../../types/management' import features from '../../utils/config' import { setContexts } from '../../utils/setContexts' import Feature from '../components/Feature' diff --git a/src/ui/contexts/Themes.tsx b/src/ui/contexts/Themes.tsx index 188c9493..a328bab7 100644 --- a/src/ui/contexts/Themes.tsx +++ b/src/ui/contexts/Themes.tsx @@ -9,13 +9,18 @@ import React from 'react' import { uid } from 'uid' import { locals } from '../../content/locals' -import { EditorType, Language, PlanStatus } from '../../types/app' +import { + EditorType, + HoveredColor, + Language, + PlanStatus, + SelectedColor, +} from '../../types/app' import { PresetConfiguration, ScaleConfiguration, ThemeConfiguration, } from '../../types/configurations' -import { HoveredColor, SelectedColor } from '../../types/management' import { ThemesMessage } from '../../types/messages' import { ActionsList, DispatchProcess } from '../../types/models' import { Identity } from '../../types/user' diff --git a/src/ui/modules/PriorityContainer.tsx b/src/ui/modules/PriorityContainer.tsx index 1a1ceff5..73feef32 100644 --- a/src/ui/modules/PriorityContainer.tsx +++ b/src/ui/modules/PriorityContainer.tsx @@ -1,22 +1,26 @@ -import * as Sentry from '@sentry/browser'; -import { ConsentConfiguration, Dialog, FormItem, Input, texts } from '@a_ng_d/figmug-ui'; -import React from 'react'; - - +import * as Sentry from '@sentry/browser' +import { + ConsentConfiguration, + Dialog, + FormItem, + Input, + texts, +} from '@a_ng_d/figmug-ui' +import React from 'react' -import { signIn } from '../../bridges/publication/authentication'; -import cp from '../../content/images/choose_plan.webp'; -import pp from '../../content/images/pro_plan.webp'; -import p from '../../content/images/publication.webp'; -import t from '../../content/images/trial.webp'; -import { locals } from '../../content/locals'; +import { signIn } from '../../bridges/publication/authentication' +import cp from '../../content/images/choose_plan.webp' +import pp from '../../content/images/pro_plan.webp' +import p from '../../content/images/publication.webp' +import t from '../../content/images/trial.webp' +import { locals } from '../../content/locals' import { HighlightDigest, Language, PlanStatus, + PriorityContext, TrialStatus, } from '../../types/app' -import { PriorityContext } from '../../types/management' import { UserSession } from '../../types/user' import features from '../../utils/config' import { trackSignInEvent } from '../../utils/eventsTracker' @@ -504,4 +508,4 @@ export default class PriorityContainer extends React.Component< ) } -} \ No newline at end of file +} diff --git a/src/ui/services/CreatePalette.tsx b/src/ui/services/CreatePalette.tsx index 47fb1125..f7b3d2f2 100644 --- a/src/ui/services/CreatePalette.tsx +++ b/src/ui/services/CreatePalette.tsx @@ -3,7 +3,7 @@ import chroma from 'chroma-js' import React from 'react' import { uid } from 'uid' -import { Language, PlanStatus } from '../../types/app' +import { ContextItem, Language, PlanStatus, ThirdParty } from '../../types/app' import { ColorSpaceConfiguration, NamingConventionConfiguration, @@ -13,7 +13,6 @@ import { ViewConfiguration, VisionSimulationModeConfiguration, } from '../../types/configurations' -import { ContextItem, ThirdParty } from '../../types/management' import { TextColorsThemeHexModel } from '../../types/models' import { UserSession } from '../../types/user' import doLightnessScale from '../../utils/doLightnessScale' diff --git a/src/ui/services/EditPalette.tsx b/src/ui/services/EditPalette.tsx index b5310f96..37fc9695 100644 --- a/src/ui/services/EditPalette.tsx +++ b/src/ui/services/EditPalette.tsx @@ -6,7 +6,7 @@ import JSZip from 'jszip' import React from 'react' import { locals } from '../../content/locals' -import { EditorType, Language, PlanStatus } from '../../types/app' +import { ContextItem, EditorType, Language, PlanStatus } from '../../types/app' import { AlgorithmVersionConfiguration, ColorConfiguration, @@ -18,7 +18,6 @@ import { ViewConfiguration, VisionSimulationModeConfiguration, } from '../../types/configurations' -import { ContextItem } from '../../types/management' import { ThemesMessage } from '../../types/messages' import { TextColorsThemeHexModel } from '../../types/models' import { Identity } from '../../types/user' diff --git a/src/utils/config.ts b/src/utils/config.ts index 145a941f..a7fb4d40 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -2,7 +2,6 @@ import { Feature } from '../types/app' export const trialTime = 72 export const oldTrialTime = 48 -export const releaseNotesVersion = '4.0.0' export const pageSize = 20 export const authWorkerUrl = diff --git a/src/utils/doLightnessScale.ts b/src/utils/doLightnessScale.ts index fea59fd7..93be1b8f 100644 --- a/src/utils/doLightnessScale.ts +++ b/src/utils/doLightnessScale.ts @@ -1,7 +1,7 @@ import { doMap } from '@a-ng-d/figmug.modules.do-map' +import { Easing } from '../types/app' import { ScaleConfiguration } from '../types/configurations' -import { Easing } from '../types/management' const doLightnessScale = ( stops: Array, From 20d21cd69be9cdda5d50a7f754844e8783369271 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Thu, 5 Sep 2024 19:58:24 +0200 Subject: [PATCH 39/50] chore: update @a_ng_d/figmug-ui dependency to version 0.81.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 09ef8461..69071be1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "figma-ui-color-palette", "version": "4.1.0", "dependencies": { - "@a_ng_d/figmug-ui": "^0.80.0", + "@a_ng_d/figmug-ui": "^0.81.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", @@ -64,9 +64,9 @@ } }, "node_modules/@a_ng_d/figmug-ui": { - "version": "0.80.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.80.0.tgz", - "integrity": "sha512-bUHAWdc8b/ttmGlHtH1ZJSZIZx8SRrYV9V9R54Msh9Ax4wc5kH9CEuvGJvOjQB1jlA2sJ8gFOCFnrXlCL2a1bA==", + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.81.0.tgz", + "integrity": "sha512-j4zxtdsexewC+rZXTZ8JYmg2tlO498x0O4PilrOcK+yFIIXICOeska5xY1ojCq5HT6AclpcaoHhSqelxqr1byw==", "dependencies": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" @@ -6996,9 +6996,9 @@ }, "dependencies": { "@a_ng_d/figmug-ui": { - "version": "0.80.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.80.0.tgz", - "integrity": "sha512-bUHAWdc8b/ttmGlHtH1ZJSZIZx8SRrYV9V9R54Msh9Ax4wc5kH9CEuvGJvOjQB1jlA2sJ8gFOCFnrXlCL2a1bA==", + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.81.0.tgz", + "integrity": "sha512-j4zxtdsexewC+rZXTZ8JYmg2tlO498x0O4PilrOcK+yFIIXICOeska5xY1ojCq5HT6AclpcaoHhSqelxqr1byw==", "requires": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" diff --git a/package.json b/package.json index a7654655..48abe2e8 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "webpack-cli": "^4.9.1" }, "dependencies": { - "@a_ng_d/figmug-ui": "^0.80.0", + "@a_ng_d/figmug-ui": "^0.81.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", From 7e166525acc60173c9e803a27437a2b9fe6ae410 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Thu, 5 Sep 2024 20:01:48 +0200 Subject: [PATCH 40/50] refactor: update Highlight component to remove unnecessary actions --- src/ui/modules/Highlight.tsx | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/ui/modules/Highlight.tsx b/src/ui/modules/Highlight.tsx index c60f1e76..f7a6806f 100644 --- a/src/ui/modules/Highlight.tsx +++ b/src/ui/modules/Highlight.tsx @@ -60,10 +60,7 @@ export default class Highlight extends React.Component< return (
@@ -78,10 +75,7 @@ export default class Highlight extends React.Component< return (
@@ -99,6 +93,10 @@ export default class Highlight extends React.Component< this.state.announcements[this.state.position].properties.Titre .title[0].plain_text } + tag={ + this.state.announcements[this.state.position].properties.Type.select + .name + } actions={{ primary: { label: @@ -107,15 +105,19 @@ export default class Highlight extends React.Component< : locals[this.props.lang].highlight.cta.gotIt, action: (e) => this.goNextSlide(e), }, - secondary: { - label: locals[this.props.lang].highlight.cta.learnMore, - action: () => - window.open( - this.state.announcements[this.state.position].properties.URL - .url, - '_blank' - ), - }, + secondary: (() => { + if (this.state.announcements[this.state.position].properties.URL.url !== null) + return { + label: locals[this.props.lang].highlight.cta.learnMore, + action: () => + window.open( + this.state.announcements[this.state.position].properties.URL + .url, + '_blank' + ) + }; + else return undefined + })() }} indicator={ this.state.announcements.length > 1 From 23f78d71030f49ddad11098762d3893747455959 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Thu, 5 Sep 2024 20:20:32 +0200 Subject: [PATCH 41/50] refactor: update trialTime and oldTrialTime values in config.ts --- src/utils/config.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/utils/config.ts b/src/utils/config.ts index a7fb4d40..507897ef 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -1,7 +1,7 @@ import { Feature } from '../types/app' -export const trialTime = 72 -export const oldTrialTime = 48 +export const trialTime = 48 +export const oldTrialTime = 72 export const pageSize = 20 export const authWorkerUrl = @@ -26,7 +26,7 @@ export const palettesStorageName = : 'palette.screenshots' export const userConsentVersion = '2024.01' -export const trialVersion = '2024.02' +export const trialVersion = '2024.03' export const features: Array = [ { From d971a505a3cfeb5af33aa2889f1bbe47da771916 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Thu, 5 Sep 2024 20:50:28 +0200 Subject: [PATCH 42/50] chore: update allowed domains in manifest.json --- manifest.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index 5794f3d9..2997d04a 100644 --- a/manifest.json +++ b/manifest.json @@ -30,8 +30,7 @@ "https://tally.so", "https://corsproxy.io", "https://zclweepgvqkrelyfwhma.supabase.co", - "https://oauth.yelbolt.workers.dev", - "https://announcements.yelbolt.workers.dev", + "https://*.yelbolt.workers.dev", "https://www.colourlovers.com", "https://*.mixpanel.com", "https://asset.brandfetch.io", From 3c0e854554637022601b9932b4c31014adccbf81 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Thu, 5 Sep 2024 22:03:03 +0200 Subject: [PATCH 43/50] refactor: add isGrowing prop to userMessage input in PriorityContainer --- src/ui/modules/PriorityContainer.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/modules/PriorityContainer.tsx b/src/ui/modules/PriorityContainer.tsx index 73feef32..0d3d112f 100644 --- a/src/ui/modules/PriorityContainer.tsx +++ b/src/ui/modules/PriorityContainer.tsx @@ -476,6 +476,7 @@ export default class PriorityContainer extends React.Component< locals[this.props.lang].report.message.placeholder } value={this.state.userMessage} + isGrowing onChange={(e) => this.setState({ userMessage: e.target.value }) } From e017397c87b9b47df82832b5c9aa0940d3fbcc85 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Thu, 5 Sep 2024 22:03:07 +0200 Subject: [PATCH 44/50] chore: update @a_ng_d/figmug-ui dependency to version 0.83.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 69071be1..897a4e79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "figma-ui-color-palette", "version": "4.1.0", "dependencies": { - "@a_ng_d/figmug-ui": "^0.81.0", + "@a_ng_d/figmug-ui": "^0.83.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", @@ -64,9 +64,9 @@ } }, "node_modules/@a_ng_d/figmug-ui": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.81.0.tgz", - "integrity": "sha512-j4zxtdsexewC+rZXTZ8JYmg2tlO498x0O4PilrOcK+yFIIXICOeska5xY1ojCq5HT6AclpcaoHhSqelxqr1byw==", + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.83.0.tgz", + "integrity": "sha512-+Zcp8/HAdCww6A9NCRyyD3iFD3haRjK3KTGsJLelEd4pi3OqnDQtvMr4dV5x6ER17XgXP7VegNX/GafyHKMtag==", "dependencies": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" @@ -6996,9 +6996,9 @@ }, "dependencies": { "@a_ng_d/figmug-ui": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.81.0.tgz", - "integrity": "sha512-j4zxtdsexewC+rZXTZ8JYmg2tlO498x0O4PilrOcK+yFIIXICOeska5xY1ojCq5HT6AclpcaoHhSqelxqr1byw==", + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@a_ng_d/figmug-ui/-/figmug-ui-0.83.0.tgz", + "integrity": "sha512-+Zcp8/HAdCww6A9NCRyyD3iFD3haRjK3KTGsJLelEd4pi3OqnDQtvMr4dV5x6ER17XgXP7VegNX/GafyHKMtag==", "requires": { "@storybook/client-api": "^7.6.17", "figma-plugin-ds": "^1.0.1" diff --git a/package.json b/package.json index 48abe2e8..429dc9be 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "webpack-cli": "^4.9.1" }, "dependencies": { - "@a_ng_d/figmug-ui": "^0.81.0", + "@a_ng_d/figmug-ui": "^0.83.0", "@a-ng-d/figmug.modules.do-camel-case": "^0.0.4", "@a-ng-d/figmug.modules.do-kebab-case": "^0.0.4", "@a-ng-d/figmug.modules.do-map": "^0.0.3", From 10b3addd4efa208485089de76713417e279df31d Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Thu, 5 Sep 2024 22:03:14 +0200 Subject: [PATCH 45/50] refactor: update ColorItem component to block certain features for pro users --- src/ui/components/ColorItem.tsx | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/ui/components/ColorItem.tsx b/src/ui/components/ColorItem.tsx index 3749a9f9..c4e708d1 100644 --- a/src/ui/components/ColorItem.tsx +++ b/src/ui/components/ColorItem.tsx @@ -254,6 +254,11 @@ export default class ColorItem extends React.Component { feature.name === 'COLORS_CHROMA_SHIFTING' + )?.isPro + } > { min="-360" max="360" feature="SHIFT_HUE" + isBlocked={ + features.find( + (feature) => feature.name === 'COLORS_CHROMA_SHIFTING' + )?.isPro + } onFocus={this.props.onCancellationSelection} onBlur={this.props.onChangeColors} onConfirm={this.props.onChangeColors} @@ -282,6 +292,11 @@ export default class ColorItem extends React.Component { feature.name === 'COLORS_CHROMA_SHIFTING' + )?.isPro + } > { min="0" max="200" feature="SHIFT_CHROMA" + isBlocked={ + features.find( + (feature) => feature.name === 'COLORS_CHROMA_SHIFTING' + )?.isPro + } onFocus={this.props.onCancellationSelection} onBlur={this.props.onChangeColors} onConfirm={this.props.onChangeColors} From a1c8e1c70e7ae96e0c02d3dfff5f0ffa9ce0d0c0 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Thu, 5 Sep 2024 22:16:19 +0200 Subject: [PATCH 46/50] refactor: update trialTime variable in locals.ts to dynamically display the trial duration --- src/content/locals.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/content/locals.ts b/src/content/locals.ts index 9341ebc2..5019d9b1 100644 --- a/src/content/locals.ts +++ b/src/content/locals.ts @@ -1,3 +1,5 @@ +import { trialTime } from '../utils/config' + export const lang = 'en-US' const glossary: { @@ -392,16 +394,14 @@ export const locals: { [key: string]: any } = { title: 'Welcome to UI Color Palette Pro!', message: 'This upgrade will unlock a range of tools that enable you to convert your color palette into a color system. We hope you will enjoy the benefits.', - trial: - 'This upgrade will unlock a range of tools that enable you to convert your color palette into a color system. We hope you will enjoy the benefits for the next 72 hours.', + trial: `This upgrade will unlock a range of tools that enable you to convert your color palette into a color system. We hope you will enjoy the benefits for the next ${trialTime} hours.`, cta: "Let's build", }, trial: { - title: - 'Would you like to upgrade to the Pro plan within the next 72 hours?', + title: `Would you like to upgrade to the Pro plan within the next ${trialTime} hours?`, message: 'Explore the potential of synchronizing your color palette with variables, exporting it as design tokens, app resources, or for Tokens Studio and simulating a vision impairment.', - cta: 'Enable the 72-hour trial', + cta: `Enable the ${trialTime}-hour trial`, option: 'Purchase', }, }, From 857e6699ea7da79322f9d44eae1ef5134dda15ee Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Thu, 5 Sep 2024 22:16:44 +0200 Subject: [PATCH 47/50] refactor: update images --- src/content/images/choose_plan.webp | Bin 9694 -> 9958 bytes src/content/images/trial.webp | Bin 16532 -> 16774 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/content/images/choose_plan.webp b/src/content/images/choose_plan.webp index 66d12a39294db537d78b57f193b1e8d37582b6ec..d01a163f74edb8b34d51e227a0e38334fde78ce8 100644 GIT binary patch delta 9550 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 delta 9284 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 diff --git a/src/content/images/trial.webp b/src/content/images/trial.webp index 9ea3b64d273a1bc9e8877badf028d817d3cd0715..c9ab275fff4f2535f5751f3ac77077a92c3368b8 100644 GIT binary patch delta 16422 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 From 9e62077826ea5e2a44990cfe4640e03c53655603 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Thu, 5 Sep 2024 22:21:00 +0200 Subject: [PATCH 48/50] refactor: update isPro property for multiple features --- src/utils/config.ts | 60 ++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/utils/config.ts b/src/utils/config.ts index 507897ef..108066ec 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -78,7 +78,7 @@ export const features: Array = [ name: 'SYNC_LOCAL_STYLES', description: 'Styles local sychronization', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['EDIT'], @@ -87,7 +87,7 @@ export const features: Array = [ name: 'SYNC_LOCAL_VARIABLES', description: 'Variable local sychronization', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['EDIT'], @@ -97,7 +97,7 @@ export const features: Array = [ description: 'Publish palette to the community and self', isActive: true, isPro: false, - isNew: false, + isNew: true, type: 'ACTION', service: ['EDIT'], }, @@ -240,7 +240,7 @@ export const features: Array = [ name: 'PRESETS_MATERIAL_3', description: 'Material 3 color system', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE'], @@ -249,7 +249,7 @@ export const features: Array = [ name: 'PRESETS_TAILWIND', description: 'Tailwind color system', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE'], @@ -267,7 +267,7 @@ export const features: Array = [ name: 'PRESETS_ADS', description: 'ADS Foundation color system', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE'], @@ -276,7 +276,7 @@ export const features: Array = [ name: 'PRESETS_ADS_NEUTRAL', description: 'ADS Foundation Neutral color system', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE'], @@ -285,7 +285,7 @@ export const features: Array = [ name: 'PRESETS_CARBON', description: 'IBM Carbon color system', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE'], @@ -294,7 +294,7 @@ export const features: Array = [ name: 'PRESETS_BASE', description: 'Uber Base color system', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE'], @@ -375,7 +375,7 @@ export const features: Array = [ name: 'COLORS_HUE_SHIFTING', description: 'Source color hue shifting number', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['EDIT'], @@ -383,8 +383,8 @@ export const features: Array = [ { name: 'COLORS_CHROMA_SHIFTING', description: 'Source color chroma shifting number', - isActive: true, - isPro: false, + isActive: false, + isPro: true, isNew: false, type: 'ACTION', service: ['EDIT'], @@ -402,7 +402,7 @@ export const features: Array = [ name: 'THEMES', description: 'Color themes configuration', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'CONTEXT', service: ['EDIT'], @@ -465,7 +465,7 @@ export const features: Array = [ name: 'EXPORT_TOKENS_JSON_AMZN_STYLE_DICTIONARY', description: 'Palette export for the Amazon Style Dictionary', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['EDIT', 'TRANSFER'], @@ -474,7 +474,7 @@ export const features: Array = [ name: 'EXPORT_TOKENS_JSON_TOKENS_STUDIO', description: 'Palette export to the Tokens Studio plugin', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['EDIT', 'TRANSFER'], @@ -537,7 +537,7 @@ export const features: Array = [ name: 'EXPORT_TAILWIND', description: 'Palette export to Tailwind', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['EDIT', 'TRANSFER'], @@ -555,7 +555,7 @@ export const features: Array = [ name: 'EXPORT_APPLE_SWIFTUI', description: 'Palette export to SwiftUI (Apple)', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['EDIT', 'TRANSFER'], @@ -564,7 +564,7 @@ export const features: Array = [ name: 'EXPORT_APPLE_UIKIT', description: 'Palette export to UIkit (Apple)', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['EDIT', 'TRANSFER'], @@ -582,7 +582,7 @@ export const features: Array = [ name: 'EXPORT_ANDROID_COMPOSE', description: 'Palette export to Compose (Android)', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['EDIT', 'TRANSFER'], @@ -591,7 +591,7 @@ export const features: Array = [ name: 'EXPORT_ANDROID_XML', description: 'Palette export to XML (Android)', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['EDIT', 'TRANSFER'], @@ -600,7 +600,7 @@ export const features: Array = [ name: 'EXPORT_CSV', description: 'Palette LCH values export to CSV', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['EDIT', 'TRANSFER'], @@ -663,7 +663,7 @@ export const features: Array = [ name: 'VIEWS_SHEET', description: 'Detailed color sheet view', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE', 'EDIT'], @@ -753,7 +753,7 @@ export const features: Array = [ name: 'SETTINGS_VISION_SIMULATION_MODE_PROTANOMALY', description: 'Protanomaly vision simulation mode', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE', 'EDIT'], @@ -762,7 +762,7 @@ export const features: Array = [ name: 'SETTINGS_VISION_SIMULATION_MODE_PROTANOPIA', description: 'Protanopia vision simulation mode', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE', 'EDIT'], @@ -771,7 +771,7 @@ export const features: Array = [ name: 'SETTINGS_VISION_SIMULATION_MODE_DEUTERANOMALY', description: 'Deuteranomaly vision simulation mode', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE', 'EDIT'], @@ -780,7 +780,7 @@ export const features: Array = [ name: 'SETTINGS_VISION_SIMULATION_MODE_DEUTERANOPIA', description: 'Deuteranopia vision simulation mode', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE', 'EDIT'], @@ -789,7 +789,7 @@ export const features: Array = [ name: 'SETTINGS_VISION_SIMULATION_MODE_TRITANOMALY', description: 'Tritanomaly vision simulation mode', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE', 'EDIT'], @@ -798,7 +798,7 @@ export const features: Array = [ name: 'SETTINGS_VISION_SIMULATION_MODE_TRITANOPIA', description: 'Tritanopia vision simulation mode', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE', 'EDIT'], @@ -807,7 +807,7 @@ export const features: Array = [ name: 'SETTINGS_VISION_SIMULATION_MODE_ACHROMATOMALY', description: 'Achromatomaly vision simulation mode', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE', 'EDIT'], @@ -816,7 +816,7 @@ export const features: Array = [ name: 'SETTINGS_VISION_SIMULATION_MODE_ACHROMATOPSIA', description: 'Achromatopsia vision simulation mode', isActive: true, - isPro: false, + isPro: true, isNew: false, type: 'ACTION', service: ['CREATE', 'EDIT'], From 9c1e59240793689ddaa22b18574cd9c4fc500143 Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Thu, 5 Sep 2024 22:33:28 +0200 Subject: [PATCH 49/50] refactor: update .env file with new environment variables for Mixpanel and Announcements Worker URLs --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b9100c74..3745d580 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,8 +26,9 @@ jobs: echo REACT_APP_SUPABASE_PUBLIC_ANON_KEY="${{ secrets.REACT_APP_SUPABASE_PUBLIC_ANON_KEY }}" >> .env echo REACT_APP_SENTRY_DSN="${{ vars.REACT_APP_SENTRY_DSN }}" >> .env echo SENTRY_AUTH_TOKEN="${{ secrets.SENTRY_AUTH_TOKEN }}" >> .env - echo REACT_APP_MIXPANEL_TOKEN="${{ vars.REACT_APP_MIXPANEL_TOKEN }}" >> .env + echo REACT_APP_MIXPANEL_TOKEN="${{ secrets.REACT_APP_MIXPANEL_TOKEN }}" >> .env echo REACT_APP_AUTH_WORKER_URL="${{ vars.REACT_APP_AUTH_WORKER_URL }}" >> .env + echo REACT_APP_ANNOUNCEMENTS_WORKER_URL="${{ vars.REACT_APP_ANNOUNCEMENTS_WORKER_URL }}" >> .env cat .env - name: Install and Build From 1001db9d4189e1c032803caaa3d7cf8f5fcab50c Mon Sep 17 00:00:00 2001 From: "@a-ng-d" Date: Thu, 5 Sep 2024 22:42:30 +0200 Subject: [PATCH 50/50] refactor: update release workflow to set tag and release name dynamically --- .github/workflows/release.yml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 227a4db6..ea074417 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,16 +18,27 @@ jobs: with: fetch-depth: 0 + - name: Set tag and release name + id: set_vars + run: | + if [[ "${{ github.event_name }}" == "push" ]]; then + echo "TAG_NAME=${GITHUB_REF_NAME}" >> $GITHUB_ENV + echo "RELEASE_NAME=UI Color Palette ${GITHUB_REF_NAME}" >> $GITHUB_ENV + else + echo "TAG_NAME=${{ github.event.pull_request.milestone.title }}" >> $GITHUB_ENV + echo "RELEASE_NAME=UI Color Palette ${{ github.event.pull_request.milestone.title }} • ${{ github.event.pull_request.title }}" >> $GITHUB_ENV + fi + - name: Create release id: create_release uses: actions/create-release@v1 env: GH_TOKEN: ${{ secrets.GH_TOKEN }} with: - tag_name: ${{ github.event.pull_request.milestone }} - release_name: UI Color Palette ${{ github.event.pull_request.milestone }} • ${{ github.event.pull_request.title}} + tag_name: ${{ env.TAG_NAME }} + release_name: ${{ env.RELEASE_NAME }} body: | ## What's Changed [Friendly release note](https://ui-color-palette.canny.io/changelog/${{ github.ref }})・[Full Changelog](https://github.com/inVoltag/figma-ui-color-palette/commits/${{ github.ref }}) draft: false - prerelease: false + prerelease: false \ No newline at end of file