diff --git a/.gitignore b/.gitignore index 3faf97ab..0b15c178 100644 --- a/.gitignore +++ b/.gitignore @@ -33,5 +33,9 @@ test-results.xml dist/* +# Generated FarmControl desktop bundle +/public/desktop/bundle.json +/public/desktop/models/ + # Native macOS vibrancy (built by scripts/build-macos-effects.mjs) src/bun/libMacWindowEffects.dylib \ No newline at end of file diff --git a/public/desktop/.gitkeep b/public/desktop/.gitkeep new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/public/desktop/.gitkeep @@ -0,0 +1 @@ + diff --git a/public/legacyicons16/actionsicon.png b/public/legacyicons16/actionsicon.png new file mode 100644 index 00000000..4191f42c Binary files /dev/null and b/public/legacyicons16/actionsicon.png differ diff --git a/public/legacyicons16/apppasswordicon.png b/public/legacyicons16/apppasswordicon.png new file mode 100644 index 00000000..25743a78 Binary files /dev/null and b/public/legacyicons16/apppasswordicon.png differ diff --git a/public/legacyicons16/arrowdownicon.png b/public/legacyicons16/arrowdownicon.png new file mode 100644 index 00000000..691f6e0c Binary files /dev/null and b/public/legacyicons16/arrowdownicon.png differ diff --git a/public/legacyicons16/arrowlefticon.png b/public/legacyicons16/arrowlefticon.png new file mode 100644 index 00000000..d9c50c4d Binary files /dev/null and b/public/legacyicons16/arrowlefticon.png differ diff --git a/public/legacyicons16/arrowrighticon.png b/public/legacyicons16/arrowrighticon.png new file mode 100644 index 00000000..8d204afe Binary files /dev/null and b/public/legacyicons16/arrowrighticon.png differ diff --git a/public/legacyicons16/arrowupicon.png b/public/legacyicons16/arrowupicon.png new file mode 100644 index 00000000..30d005f2 Binary files /dev/null and b/public/legacyicons16/arrowupicon.png differ diff --git a/public/legacyicons16/auditlogicon.png b/public/legacyicons16/auditlogicon.png new file mode 100644 index 00000000..e808cb04 Binary files /dev/null and b/public/legacyicons16/auditlogicon.png differ diff --git a/public/legacyicons16/bellicon.png b/public/legacyicons16/bellicon.png new file mode 100644 index 00000000..8dce996f Binary files /dev/null and b/public/legacyicons16/bellicon.png differ diff --git a/public/legacyicons16/binicon.png b/public/legacyicons16/binicon.png new file mode 100644 index 00000000..aaeeb7c9 Binary files /dev/null and b/public/legacyicons16/binicon.png differ diff --git a/public/legacyicons16/blockquoteicon.png b/public/legacyicons16/blockquoteicon.png new file mode 100644 index 00000000..b6c638a1 Binary files /dev/null and b/public/legacyicons16/blockquoteicon.png differ diff --git a/public/legacyicons16/boldicon.png b/public/legacyicons16/boldicon.png new file mode 100644 index 00000000..0b59ee98 Binary files /dev/null and b/public/legacyicons16/boldicon.png differ diff --git a/public/legacyicons16/bulletlisticon.png b/public/legacyicons16/bulletlisticon.png new file mode 100644 index 00000000..f7ce7fae Binary files /dev/null and b/public/legacyicons16/bulletlisticon.png differ diff --git a/public/legacyicons16/checkcircleicon.png b/public/legacyicons16/checkcircleicon.png new file mode 100644 index 00000000..fd69e8fa Binary files /dev/null and b/public/legacyicons16/checkcircleicon.png differ diff --git a/public/legacyicons16/checkicon.png b/public/legacyicons16/checkicon.png new file mode 100644 index 00000000..c277e6b4 Binary files /dev/null and b/public/legacyicons16/checkicon.png differ diff --git a/public/legacyicons16/chevronlefticon.png b/public/legacyicons16/chevronlefticon.png new file mode 100644 index 00000000..73b83326 Binary files /dev/null and b/public/legacyicons16/chevronlefticon.png differ diff --git a/public/legacyicons16/chevronrighticon.png b/public/legacyicons16/chevronrighticon.png new file mode 100644 index 00000000..59b58a43 Binary files /dev/null and b/public/legacyicons16/chevronrighticon.png differ diff --git a/public/legacyicons16/clienticon.png b/public/legacyicons16/clienticon.png new file mode 100644 index 00000000..b8a9fea4 Binary files /dev/null and b/public/legacyicons16/clienticon.png differ diff --git a/public/legacyicons16/cloudicon.png b/public/legacyicons16/cloudicon.png new file mode 100644 index 00000000..0b4c531b Binary files /dev/null and b/public/legacyicons16/cloudicon.png differ diff --git a/public/legacyicons16/collapsesidebaricon.png b/public/legacyicons16/collapsesidebaricon.png new file mode 100644 index 00000000..9595b58c Binary files /dev/null and b/public/legacyicons16/collapsesidebaricon.png differ diff --git a/public/legacyicons16/contracticon.png b/public/legacyicons16/contracticon.png new file mode 100644 index 00000000..9595b58c Binary files /dev/null and b/public/legacyicons16/contracticon.png differ diff --git a/public/legacyicons16/controlicon.png b/public/legacyicons16/controlicon.png new file mode 100644 index 00000000..1467dcab Binary files /dev/null and b/public/legacyicons16/controlicon.png differ diff --git a/public/legacyicons16/copyicon.png b/public/legacyicons16/copyicon.png new file mode 100644 index 00000000..a61ec134 Binary files /dev/null and b/public/legacyicons16/copyicon.png differ diff --git a/public/legacyicons16/couriericon.png b/public/legacyicons16/couriericon.png new file mode 100644 index 00000000..4ce7e9c6 Binary files /dev/null and b/public/legacyicons16/couriericon.png differ diff --git a/public/legacyicons16/courierserviceicon.png b/public/legacyicons16/courierserviceicon.png new file mode 100644 index 00000000..b767dd3f Binary files /dev/null and b/public/legacyicons16/courierserviceicon.png differ diff --git a/public/legacyicons16/csvicon.png b/public/legacyicons16/csvicon.png new file mode 100644 index 00000000..f64dd011 Binary files /dev/null and b/public/legacyicons16/csvicon.png differ diff --git a/public/legacyicons16/designicon.png b/public/legacyicons16/designicon.png new file mode 100644 index 00000000..9dbfe0a6 Binary files /dev/null and b/public/legacyicons16/designicon.png differ diff --git a/public/legacyicons16/developericon.png b/public/legacyicons16/developericon.png new file mode 100644 index 00000000..c7299fd7 Binary files /dev/null and b/public/legacyicons16/developericon.png differ diff --git a/public/legacyicons16/documenticon.png b/public/legacyicons16/documenticon.png new file mode 100644 index 00000000..eda44886 Binary files /dev/null and b/public/legacyicons16/documenticon.png differ diff --git a/public/legacyicons16/documentjobicon.png b/public/legacyicons16/documentjobicon.png new file mode 100644 index 00000000..92953fec Binary files /dev/null and b/public/legacyicons16/documentjobicon.png differ diff --git a/public/legacyicons16/documentprintericon.png b/public/legacyicons16/documentprintericon.png new file mode 100644 index 00000000..8a33e0af Binary files /dev/null and b/public/legacyicons16/documentprintericon.png differ diff --git a/public/legacyicons16/documentsizeicon.png b/public/legacyicons16/documentsizeicon.png new file mode 100644 index 00000000..3ae64daa Binary files /dev/null and b/public/legacyicons16/documentsizeicon.png differ diff --git a/public/legacyicons16/documenttemplateicon.png b/public/legacyicons16/documenttemplateicon.png new file mode 100644 index 00000000..c723e094 Binary files /dev/null and b/public/legacyicons16/documenttemplateicon.png differ diff --git a/public/legacyicons16/downloadicon.png b/public/legacyicons16/downloadicon.png new file mode 100644 index 00000000..df01f339 Binary files /dev/null and b/public/legacyicons16/downloadicon.png differ diff --git a/public/legacyicons16/duplicateicon.png b/public/legacyicons16/duplicateicon.png new file mode 100644 index 00000000..9c718085 Binary files /dev/null and b/public/legacyicons16/duplicateicon.png differ diff --git a/public/legacyicons16/editicon.png b/public/legacyicons16/editicon.png new file mode 100644 index 00000000..d5ba3d59 Binary files /dev/null and b/public/legacyicons16/editicon.png differ diff --git a/public/legacyicons16/emailaccounticon.png b/public/legacyicons16/emailaccounticon.png new file mode 100644 index 00000000..12bd5928 Binary files /dev/null and b/public/legacyicons16/emailaccounticon.png differ diff --git a/public/legacyicons16/emailicon.png b/public/legacyicons16/emailicon.png new file mode 100644 index 00000000..83278739 Binary files /dev/null and b/public/legacyicons16/emailicon.png differ diff --git a/public/legacyicons16/emailmessageicon.png b/public/legacyicons16/emailmessageicon.png new file mode 100644 index 00000000..cb75c238 Binary files /dev/null and b/public/legacyicons16/emailmessageicon.png differ diff --git a/public/legacyicons16/emailtemplateicon.png b/public/legacyicons16/emailtemplateicon.png new file mode 100644 index 00000000..63e026ff Binary files /dev/null and b/public/legacyicons16/emailtemplateicon.png differ diff --git a/public/legacyicons16/equalicon.png b/public/legacyicons16/equalicon.png new file mode 100644 index 00000000..ed2747cc Binary files /dev/null and b/public/legacyicons16/equalicon.png differ diff --git a/public/legacyicons16/excelicon.png b/public/legacyicons16/excelicon.png new file mode 100644 index 00000000..04e03327 Binary files /dev/null and b/public/legacyicons16/excelicon.png differ diff --git a/public/legacyicons16/exclamationoctagonicon.png b/public/legacyicons16/exclamationoctagonicon.png new file mode 100644 index 00000000..2b601385 Binary files /dev/null and b/public/legacyicons16/exclamationoctagonicon.png differ diff --git a/public/legacyicons16/expandicon.png b/public/legacyicons16/expandicon.png new file mode 100644 index 00000000..0609b3e1 Binary files /dev/null and b/public/legacyicons16/expandicon.png differ diff --git a/public/legacyicons16/expandsidebaricon.png b/public/legacyicons16/expandsidebaricon.png new file mode 100644 index 00000000..65d8431e Binary files /dev/null and b/public/legacyicons16/expandsidebaricon.png differ diff --git a/public/legacyicons16/exporticon.png b/public/legacyicons16/exporticon.png new file mode 100644 index 00000000..924ad29c Binary files /dev/null and b/public/legacyicons16/exporticon.png differ diff --git a/public/legacyicons16/eyeicon.png b/public/legacyicons16/eyeicon.png new file mode 100644 index 00000000..403aaa41 Binary files /dev/null and b/public/legacyicons16/eyeicon.png differ diff --git a/public/legacyicons16/eyeslashicon.png b/public/legacyicons16/eyeslashicon.png new file mode 100644 index 00000000..687cad5d Binary files /dev/null and b/public/legacyicons16/eyeslashicon.png differ diff --git a/public/legacyicons16/filamenticon.png b/public/legacyicons16/filamenticon.png new file mode 100644 index 00000000..6afc04b7 Binary files /dev/null and b/public/legacyicons16/filamenticon.png differ diff --git a/public/legacyicons16/filamentprofileicon.png b/public/legacyicons16/filamentprofileicon.png new file mode 100644 index 00000000..4d42becd Binary files /dev/null and b/public/legacyicons16/filamentprofileicon.png differ diff --git a/public/legacyicons16/filamentskuicon.png b/public/legacyicons16/filamentskuicon.png new file mode 100644 index 00000000..c0e35850 Binary files /dev/null and b/public/legacyicons16/filamentskuicon.png differ diff --git a/public/legacyicons16/filamentstockicon.png b/public/legacyicons16/filamentstockicon.png new file mode 100644 index 00000000..5c93c4fe Binary files /dev/null and b/public/legacyicons16/filamentstockicon.png differ diff --git a/public/legacyicons16/fileicon.png b/public/legacyicons16/fileicon.png new file mode 100644 index 00000000..018816b0 Binary files /dev/null and b/public/legacyicons16/fileicon.png differ diff --git a/public/legacyicons16/filtercirclefilledicon.png b/public/legacyicons16/filtercirclefilledicon.png new file mode 100644 index 00000000..227e8436 Binary files /dev/null and b/public/legacyicons16/filtercirclefilledicon.png differ diff --git a/public/legacyicons16/filtercircleicon.png b/public/legacyicons16/filtercircleicon.png new file mode 100644 index 00000000..227e8436 Binary files /dev/null and b/public/legacyicons16/filtercircleicon.png differ diff --git a/public/legacyicons16/filtericon.png b/public/legacyicons16/filtericon.png new file mode 100644 index 00000000..227e8436 Binary files /dev/null and b/public/legacyicons16/filtericon.png differ diff --git a/public/legacyicons16/financeicon.png b/public/legacyicons16/financeicon.png new file mode 100644 index 00000000..866a729a Binary files /dev/null and b/public/legacyicons16/financeicon.png differ diff --git a/public/legacyicons16/fulfillmentpolicyicon.png b/public/legacyicons16/fulfillmentpolicyicon.png new file mode 100644 index 00000000..cd66ee85 Binary files /dev/null and b/public/legacyicons16/fulfillmentpolicyicon.png differ diff --git a/public/legacyicons16/functionicon.png b/public/legacyicons16/functionicon.png new file mode 100644 index 00000000..139641aa Binary files /dev/null and b/public/legacyicons16/functionicon.png differ diff --git a/public/legacyicons16/gcodefileicon.png b/public/legacyicons16/gcodefileicon.png new file mode 100644 index 00000000..931b0d6a Binary files /dev/null and b/public/legacyicons16/gcodefileicon.png differ diff --git a/public/legacyicons16/graphicon.png b/public/legacyicons16/graphicon.png new file mode 100644 index 00000000..fafb7e14 Binary files /dev/null and b/public/legacyicons16/graphicon.png differ diff --git a/public/legacyicons16/greaterthanicon.png b/public/legacyicons16/greaterthanicon.png new file mode 100644 index 00000000..32888de3 Binary files /dev/null and b/public/legacyicons16/greaterthanicon.png differ diff --git a/public/legacyicons16/greaterthanorequaltoicon.png b/public/legacyicons16/greaterthanorequaltoicon.png new file mode 100644 index 00000000..32888de3 Binary files /dev/null and b/public/legacyicons16/greaterthanorequaltoicon.png differ diff --git a/public/legacyicons16/gridicon.png b/public/legacyicons16/gridicon.png new file mode 100644 index 00000000..4a0c64e6 Binary files /dev/null and b/public/legacyicons16/gridicon.png differ diff --git a/public/legacyicons16/homeicon.png b/public/legacyicons16/homeicon.png new file mode 100644 index 00000000..da024e5a Binary files /dev/null and b/public/legacyicons16/homeicon.png differ diff --git a/public/legacyicons16/hosticon.png b/public/legacyicons16/hosticon.png new file mode 100644 index 00000000..d07d5fde Binary files /dev/null and b/public/legacyicons16/hosticon.png differ diff --git a/public/legacyicons16/hotendicon.png b/public/legacyicons16/hotendicon.png new file mode 100644 index 00000000..e13a0468 Binary files /dev/null and b/public/legacyicons16/hotendicon.png differ diff --git a/public/legacyicons16/infocircleicon.png b/public/legacyicons16/infocircleicon.png new file mode 100644 index 00000000..85c1876b Binary files /dev/null and b/public/legacyicons16/infocircleicon.png differ diff --git a/public/legacyicons16/infoicon.png b/public/legacyicons16/infoicon.png new file mode 100644 index 00000000..85c1876b Binary files /dev/null and b/public/legacyicons16/infoicon.png differ diff --git a/public/legacyicons16/inventoryicon.png b/public/legacyicons16/inventoryicon.png new file mode 100644 index 00000000..ef720cf4 Binary files /dev/null and b/public/legacyicons16/inventoryicon.png differ diff --git a/public/legacyicons16/invoiceicon.png b/public/legacyicons16/invoiceicon.png new file mode 100644 index 00000000..c7d5f3a1 Binary files /dev/null and b/public/legacyicons16/invoiceicon.png differ diff --git a/public/legacyicons16/italicicon.png b/public/legacyicons16/italicicon.png new file mode 100644 index 00000000..ca00ca5a Binary files /dev/null and b/public/legacyicons16/italicicon.png differ diff --git a/public/legacyicons16/jobicon.png b/public/legacyicons16/jobicon.png new file mode 100644 index 00000000..41ac590c Binary files /dev/null and b/public/legacyicons16/jobicon.png differ diff --git a/public/legacyicons16/jsonarrayicon.png b/public/legacyicons16/jsonarrayicon.png new file mode 100644 index 00000000..476c73f3 Binary files /dev/null and b/public/legacyicons16/jsonarrayicon.png differ diff --git a/public/legacyicons16/jsonboolicon.png b/public/legacyicons16/jsonboolicon.png new file mode 100644 index 00000000..476c73f3 Binary files /dev/null and b/public/legacyicons16/jsonboolicon.png differ diff --git a/public/legacyicons16/jsonnumbericon.png b/public/legacyicons16/jsonnumbericon.png new file mode 100644 index 00000000..476c73f3 Binary files /dev/null and b/public/legacyicons16/jsonnumbericon.png differ diff --git a/public/legacyicons16/jsonobjecticon.png b/public/legacyicons16/jsonobjecticon.png new file mode 100644 index 00000000..476c73f3 Binary files /dev/null and b/public/legacyicons16/jsonobjecticon.png differ diff --git a/public/legacyicons16/jsonstringicon.png b/public/legacyicons16/jsonstringicon.png new file mode 100644 index 00000000..476c73f3 Binary files /dev/null and b/public/legacyicons16/jsonstringicon.png differ diff --git a/public/legacyicons16/kanbanicon.png b/public/legacyicons16/kanbanicon.png new file mode 100644 index 00000000..0d1fa6f7 Binary files /dev/null and b/public/legacyicons16/kanbanicon.png differ diff --git a/public/legacyicons16/lessthanicon.png b/public/legacyicons16/lessthanicon.png new file mode 100644 index 00000000..369b25ea Binary files /dev/null and b/public/legacyicons16/lessthanicon.png differ diff --git a/public/legacyicons16/lessthanorequaltoicon.png b/public/legacyicons16/lessthanorequaltoicon.png new file mode 100644 index 00000000..369b25ea Binary files /dev/null and b/public/legacyicons16/lessthanorequaltoicon.png differ diff --git a/public/legacyicons16/levelbedicon.png b/public/legacyicons16/levelbedicon.png new file mode 100644 index 00000000..93db1764 Binary files /dev/null and b/public/legacyicons16/levelbedicon.png differ diff --git a/public/legacyicons16/linkicon.png b/public/legacyicons16/linkicon.png new file mode 100644 index 00000000..c4f00cb2 Binary files /dev/null and b/public/legacyicons16/linkicon.png differ diff --git a/public/legacyicons16/listicon.png b/public/legacyicons16/listicon.png new file mode 100644 index 00000000..8a08b522 Binary files /dev/null and b/public/legacyicons16/listicon.png differ diff --git a/public/legacyicons16/listingicon.png b/public/legacyicons16/listingicon.png new file mode 100644 index 00000000..9740f8ca Binary files /dev/null and b/public/legacyicons16/listingicon.png differ diff --git a/public/legacyicons16/listingvarienticon.png b/public/legacyicons16/listingvarienticon.png new file mode 100644 index 00000000..6fb1ca40 Binary files /dev/null and b/public/legacyicons16/listingvarienticon.png differ diff --git a/public/legacyicons16/loadingicon.png b/public/legacyicons16/loadingicon.png new file mode 100644 index 00000000..26535e51 Binary files /dev/null and b/public/legacyicons16/loadingicon.png differ diff --git a/public/legacyicons16/lockicon.png b/public/legacyicons16/lockicon.png new file mode 100644 index 00000000..ddf83d95 Binary files /dev/null and b/public/legacyicons16/lockicon.png differ diff --git a/public/legacyicons16/logouticon.png b/public/legacyicons16/logouticon.png new file mode 100644 index 00000000..23805d27 Binary files /dev/null and b/public/legacyicons16/logouticon.png differ diff --git a/public/legacyicons16/magicwandicon.png b/public/legacyicons16/magicwandicon.png new file mode 100644 index 00000000..ea6091a7 Binary files /dev/null and b/public/legacyicons16/magicwandicon.png differ diff --git a/public/legacyicons16/mailcheckicon.png b/public/legacyicons16/mailcheckicon.png new file mode 100644 index 00000000..1b3d933e Binary files /dev/null and b/public/legacyicons16/mailcheckicon.png differ diff --git a/public/legacyicons16/mailicon.png b/public/legacyicons16/mailicon.png new file mode 100644 index 00000000..83278739 Binary files /dev/null and b/public/legacyicons16/mailicon.png differ diff --git a/public/legacyicons16/mailtemplateicon.png b/public/legacyicons16/mailtemplateicon.png new file mode 100644 index 00000000..63e026ff Binary files /dev/null and b/public/legacyicons16/mailtemplateicon.png differ diff --git a/public/legacyicons16/marketplaceicon.png b/public/legacyicons16/marketplaceicon.png new file mode 100644 index 00000000..0e8f5a84 Binary files /dev/null and b/public/legacyicons16/marketplaceicon.png differ diff --git a/public/legacyicons16/materialicon.png b/public/legacyicons16/materialicon.png new file mode 100644 index 00000000..ca1f3422 Binary files /dev/null and b/public/legacyicons16/materialicon.png differ diff --git a/public/legacyicons16/menuicon.png b/public/legacyicons16/menuicon.png new file mode 100644 index 00000000..b58ad8db Binary files /dev/null and b/public/legacyicons16/menuicon.png differ diff --git a/public/legacyicons16/minusicon.png b/public/legacyicons16/minusicon.png new file mode 100644 index 00000000..ace289ed Binary files /dev/null and b/public/legacyicons16/minusicon.png differ diff --git a/public/legacyicons16/multimotionicon.png b/public/legacyicons16/multimotionicon.png new file mode 100644 index 00000000..6e13dd3d Binary files /dev/null and b/public/legacyicons16/multimotionicon.png differ diff --git a/public/legacyicons16/newmailicon.png b/public/legacyicons16/newmailicon.png new file mode 100644 index 00000000..98d24178 Binary files /dev/null and b/public/legacyicons16/newmailicon.png differ diff --git a/public/legacyicons16/newwindowicon.png b/public/legacyicons16/newwindowicon.png new file mode 100644 index 00000000..8da3ac41 Binary files /dev/null and b/public/legacyicons16/newwindowicon.png differ diff --git a/public/legacyicons16/noteicon.png b/public/legacyicons16/noteicon.png new file mode 100644 index 00000000..a9db17ae Binary files /dev/null and b/public/legacyicons16/noteicon.png differ diff --git a/public/legacyicons16/notequalicon.png b/public/legacyicons16/notequalicon.png new file mode 100644 index 00000000..33a38374 Binary files /dev/null and b/public/legacyicons16/notequalicon.png differ diff --git a/public/legacyicons16/notetypeicon.png b/public/legacyicons16/notetypeicon.png new file mode 100644 index 00000000..07d6c45b Binary files /dev/null and b/public/legacyicons16/notetypeicon.png differ diff --git a/public/legacyicons16/numberedlisticon.png b/public/legacyicons16/numberedlisticon.png new file mode 100644 index 00000000..6777890a Binary files /dev/null and b/public/legacyicons16/numberedlisticon.png differ diff --git a/public/legacyicons16/odataicon.png b/public/legacyicons16/odataicon.png new file mode 100644 index 00000000..7a0bc420 Binary files /dev/null and b/public/legacyicons16/odataicon.png differ diff --git a/public/legacyicons16/openappicon.png b/public/legacyicons16/openappicon.png new file mode 100644 index 00000000..217d1ecc Binary files /dev/null and b/public/legacyicons16/openappicon.png differ diff --git a/public/legacyicons16/openinappicon.png b/public/legacyicons16/openinappicon.png new file mode 100644 index 00000000..5eed3336 Binary files /dev/null and b/public/legacyicons16/openinappicon.png differ diff --git a/public/legacyicons16/openinbrowsericon.png b/public/legacyicons16/openinbrowsericon.png new file mode 100644 index 00000000..af64adbf Binary files /dev/null and b/public/legacyicons16/openinbrowsericon.png differ diff --git a/public/legacyicons16/orderitemicon.png b/public/legacyicons16/orderitemicon.png new file mode 100644 index 00000000..9aa521f5 Binary files /dev/null and b/public/legacyicons16/orderitemicon.png differ diff --git a/public/legacyicons16/otpicon.png b/public/legacyicons16/otpicon.png new file mode 100644 index 00000000..4ba50ece Binary files /dev/null and b/public/legacyicons16/otpicon.png differ diff --git a/public/legacyicons16/panfilledicon.png b/public/legacyicons16/panfilledicon.png new file mode 100644 index 00000000..dc79299d Binary files /dev/null and b/public/legacyicons16/panfilledicon.png differ diff --git a/public/legacyicons16/panicon.png b/public/legacyicons16/panicon.png new file mode 100644 index 00000000..dc79299d Binary files /dev/null and b/public/legacyicons16/panicon.png differ diff --git a/public/legacyicons16/particon.png b/public/legacyicons16/particon.png new file mode 100644 index 00000000..3ca4d1b5 Binary files /dev/null and b/public/legacyicons16/particon.png differ diff --git a/public/legacyicons16/partskuicon.png b/public/legacyicons16/partskuicon.png new file mode 100644 index 00000000..c0e35850 Binary files /dev/null and b/public/legacyicons16/partskuicon.png differ diff --git a/public/legacyicons16/partstockicon.png b/public/legacyicons16/partstockicon.png new file mode 100644 index 00000000..d69e9f71 Binary files /dev/null and b/public/legacyicons16/partstockicon.png differ diff --git a/public/legacyicons16/passkeysicon.png b/public/legacyicons16/passkeysicon.png new file mode 100644 index 00000000..b6ad1af4 Binary files /dev/null and b/public/legacyicons16/passkeysicon.png differ diff --git a/public/legacyicons16/pausecircleicon.png b/public/legacyicons16/pausecircleicon.png new file mode 100644 index 00000000..f5c483f7 Binary files /dev/null and b/public/legacyicons16/pausecircleicon.png differ diff --git a/public/legacyicons16/pauseicon.png b/public/legacyicons16/pauseicon.png new file mode 100644 index 00000000..6102c6b4 Binary files /dev/null and b/public/legacyicons16/pauseicon.png differ diff --git a/public/legacyicons16/paymenticon.png b/public/legacyicons16/paymenticon.png new file mode 100644 index 00000000..90b1fb40 Binary files /dev/null and b/public/legacyicons16/paymenticon.png differ diff --git a/public/legacyicons16/paymentpolicyicon.png b/public/legacyicons16/paymentpolicyicon.png new file mode 100644 index 00000000..00fea4e1 Binary files /dev/null and b/public/legacyicons16/paymentpolicyicon.png differ diff --git a/public/legacyicons16/permissionsettingicon.png b/public/legacyicons16/permissionsettingicon.png new file mode 100644 index 00000000..4c545930 Binary files /dev/null and b/public/legacyicons16/permissionsettingicon.png differ diff --git a/public/legacyicons16/permissionsettingsicon.png b/public/legacyicons16/permissionsettingsicon.png new file mode 100644 index 00000000..4c545930 Binary files /dev/null and b/public/legacyicons16/permissionsettingsicon.png differ diff --git a/public/legacyicons16/persongroupicon.png b/public/legacyicons16/persongroupicon.png new file mode 100644 index 00000000..247af645 Binary files /dev/null and b/public/legacyicons16/persongroupicon.png differ diff --git a/public/legacyicons16/personicon.png b/public/legacyicons16/personicon.png new file mode 100644 index 00000000..4166dbfe Binary files /dev/null and b/public/legacyicons16/personicon.png differ diff --git a/public/legacyicons16/pictureicon.png b/public/legacyicons16/pictureicon.png new file mode 100644 index 00000000..3b98f2d0 Binary files /dev/null and b/public/legacyicons16/pictureicon.png differ diff --git a/public/legacyicons16/playcircleicon.png b/public/legacyicons16/playcircleicon.png new file mode 100644 index 00000000..184be231 Binary files /dev/null and b/public/legacyicons16/playcircleicon.png differ diff --git a/public/legacyicons16/playicon.png b/public/legacyicons16/playicon.png new file mode 100644 index 00000000..eac3be18 Binary files /dev/null and b/public/legacyicons16/playicon.png differ diff --git a/public/legacyicons16/plusicon.png b/public/legacyicons16/plusicon.png new file mode 100644 index 00000000..0ea124a7 Binary files /dev/null and b/public/legacyicons16/plusicon.png differ diff --git a/public/legacyicons16/plusminusicon.png b/public/legacyicons16/plusminusicon.png new file mode 100644 index 00000000..005fdd1f Binary files /dev/null and b/public/legacyicons16/plusminusicon.png differ diff --git a/public/legacyicons16/printedparticon.png b/public/legacyicons16/printedparticon.png new file mode 100644 index 00000000..d69e9f71 Binary files /dev/null and b/public/legacyicons16/printedparticon.png differ diff --git a/public/legacyicons16/printericon.png b/public/legacyicons16/printericon.png new file mode 100644 index 00000000..8a33e0af Binary files /dev/null and b/public/legacyicons16/printericon.png differ diff --git a/public/legacyicons16/printerprofileicon.png b/public/legacyicons16/printerprofileicon.png new file mode 100644 index 00000000..5899ca1f Binary files /dev/null and b/public/legacyicons16/printerprofileicon.png differ diff --git a/public/legacyicons16/productcategoryicon.png b/public/legacyicons16/productcategoryicon.png new file mode 100644 index 00000000..f1ed9abe Binary files /dev/null and b/public/legacyicons16/productcategoryicon.png differ diff --git a/public/legacyicons16/producticon.png b/public/legacyicons16/producticon.png new file mode 100644 index 00000000..5c93c4fe Binary files /dev/null and b/public/legacyicons16/producticon.png differ diff --git a/public/legacyicons16/productionicon.png b/public/legacyicons16/productionicon.png new file mode 100644 index 00000000..a27b9dd1 Binary files /dev/null and b/public/legacyicons16/productionicon.png differ diff --git a/public/legacyicons16/productskuicon.png b/public/legacyicons16/productskuicon.png new file mode 100644 index 00000000..c0e35850 Binary files /dev/null and b/public/legacyicons16/productskuicon.png differ diff --git a/public/legacyicons16/productstockicon.png b/public/legacyicons16/productstockicon.png new file mode 100644 index 00000000..ef720cf4 Binary files /dev/null and b/public/legacyicons16/productstockicon.png differ diff --git a/public/legacyicons16/purchaseordericon.png b/public/legacyicons16/purchaseordericon.png new file mode 100644 index 00000000..1ff455e0 Binary files /dev/null and b/public/legacyicons16/purchaseordericon.png differ diff --git a/public/legacyicons16/questioncircleicon.png b/public/legacyicons16/questioncircleicon.png new file mode 100644 index 00000000..723c404a Binary files /dev/null and b/public/legacyicons16/questioncircleicon.png differ diff --git a/public/legacyicons16/reloadicon.png b/public/legacyicons16/reloadicon.png new file mode 100644 index 00000000..257cfee3 Binary files /dev/null and b/public/legacyicons16/reloadicon.png differ diff --git a/public/legacyicons16/returnpolicyicon.png b/public/legacyicons16/returnpolicyicon.png new file mode 100644 index 00000000..a588266d Binary files /dev/null and b/public/legacyicons16/returnpolicyicon.png differ diff --git a/public/legacyicons16/rssicon.png b/public/legacyicons16/rssicon.png new file mode 100644 index 00000000..99987a30 Binary files /dev/null and b/public/legacyicons16/rssicon.png differ diff --git a/public/legacyicons16/rulericon.png b/public/legacyicons16/rulericon.png new file mode 100644 index 00000000..ae13ed45 Binary files /dev/null and b/public/legacyicons16/rulericon.png differ diff --git a/public/legacyicons16/salesicon.png b/public/legacyicons16/salesicon.png new file mode 100644 index 00000000..2ea8f387 Binary files /dev/null and b/public/legacyicons16/salesicon.png differ diff --git a/public/legacyicons16/salesordericon.png b/public/legacyicons16/salesordericon.png new file mode 100644 index 00000000..72425907 Binary files /dev/null and b/public/legacyicons16/salesordericon.png differ diff --git a/public/legacyicons16/searchicon.png b/public/legacyicons16/searchicon.png new file mode 100644 index 00000000..b81b18de Binary files /dev/null and b/public/legacyicons16/searchicon.png differ diff --git a/public/legacyicons16/settingsicon.png b/public/legacyicons16/settingsicon.png new file mode 100644 index 00000000..8f4eeb76 Binary files /dev/null and b/public/legacyicons16/settingsicon.png differ diff --git a/public/legacyicons16/shipmenticon.png b/public/legacyicons16/shipmenticon.png new file mode 100644 index 00000000..4ce7e9c6 Binary files /dev/null and b/public/legacyicons16/shipmenticon.png differ diff --git a/public/legacyicons16/softwareupdateicon.png b/public/legacyicons16/softwareupdateicon.png new file mode 100644 index 00000000..b7639f15 Binary files /dev/null and b/public/legacyicons16/softwareupdateicon.png differ diff --git a/public/legacyicons16/sortcirclefilledicon.png b/public/legacyicons16/sortcirclefilledicon.png new file mode 100644 index 00000000..237b4019 Binary files /dev/null and b/public/legacyicons16/sortcirclefilledicon.png differ diff --git a/public/legacyicons16/sortcircleicon.png b/public/legacyicons16/sortcircleicon.png new file mode 100644 index 00000000..7e13fd98 Binary files /dev/null and b/public/legacyicons16/sortcircleicon.png differ diff --git a/public/legacyicons16/spoolicon.png b/public/legacyicons16/spoolicon.png new file mode 100644 index 00000000..fa938bcb Binary files /dev/null and b/public/legacyicons16/spoolicon.png differ diff --git a/public/legacyicons16/stockauditicon.png b/public/legacyicons16/stockauditicon.png new file mode 100644 index 00000000..9ae50527 Binary files /dev/null and b/public/legacyicons16/stockauditicon.png differ diff --git a/public/legacyicons16/stockauditlevelicon.png b/public/legacyicons16/stockauditlevelicon.png new file mode 100644 index 00000000..8a483dfb Binary files /dev/null and b/public/legacyicons16/stockauditlevelicon.png differ diff --git a/public/legacyicons16/stockeventicon.png b/public/legacyicons16/stockeventicon.png new file mode 100644 index 00000000..945af71e Binary files /dev/null and b/public/legacyicons16/stockeventicon.png differ diff --git a/public/legacyicons16/stocklocationicon.png b/public/legacyicons16/stocklocationicon.png new file mode 100644 index 00000000..6646b815 Binary files /dev/null and b/public/legacyicons16/stocklocationicon.png differ diff --git a/public/legacyicons16/stocktransfericon.png b/public/legacyicons16/stocktransfericon.png new file mode 100644 index 00000000..422dae74 Binary files /dev/null and b/public/legacyicons16/stocktransfericon.png differ diff --git a/public/legacyicons16/stopcircleicon.png b/public/legacyicons16/stopcircleicon.png new file mode 100644 index 00000000..34831bcb Binary files /dev/null and b/public/legacyicons16/stopcircleicon.png differ diff --git a/public/legacyicons16/subjobicon.png b/public/legacyicons16/subjobicon.png new file mode 100644 index 00000000..4d8bb59f Binary files /dev/null and b/public/legacyicons16/subjobicon.png differ diff --git a/public/legacyicons16/taxrateicon.png b/public/legacyicons16/taxrateicon.png new file mode 100644 index 00000000..005fdd1f Binary files /dev/null and b/public/legacyicons16/taxrateicon.png differ diff --git a/public/legacyicons16/taxrecordicon.png b/public/legacyicons16/taxrecordicon.png new file mode 100644 index 00000000..8a7c0436 Binary files /dev/null and b/public/legacyicons16/taxrecordicon.png differ diff --git a/public/legacyicons16/taxruleicon.png b/public/legacyicons16/taxruleicon.png new file mode 100644 index 00000000..54805d4d Binary files /dev/null and b/public/legacyicons16/taxruleicon.png differ diff --git a/public/legacyicons16/textformaticon.png b/public/legacyicons16/textformaticon.png new file mode 100644 index 00000000..7047aeab Binary files /dev/null and b/public/legacyicons16/textformaticon.png differ diff --git a/public/legacyicons16/texticon.png b/public/legacyicons16/texticon.png new file mode 100644 index 00000000..f64dd011 Binary files /dev/null and b/public/legacyicons16/texticon.png differ diff --git a/public/legacyicons16/threedotsicon.png b/public/legacyicons16/threedotsicon.png new file mode 100644 index 00000000..f7ce7fae Binary files /dev/null and b/public/legacyicons16/threedotsicon.png differ diff --git a/public/legacyicons16/timelineicon.png b/public/legacyicons16/timelineicon.png new file mode 100644 index 00000000..7efacde1 Binary files /dev/null and b/public/legacyicons16/timelineicon.png differ diff --git a/public/legacyicons16/underlineicon.png b/public/legacyicons16/underlineicon.png new file mode 100644 index 00000000..56404a65 Binary files /dev/null and b/public/legacyicons16/underlineicon.png differ diff --git a/public/legacyicons16/unloadicon.png b/public/legacyicons16/unloadicon.png new file mode 100644 index 00000000..00deee0d Binary files /dev/null and b/public/legacyicons16/unloadicon.png differ diff --git a/public/legacyicons16/uploadicon.png b/public/legacyicons16/uploadicon.png new file mode 100644 index 00000000..0d6c2ac8 Binary files /dev/null and b/public/legacyicons16/uploadicon.png differ diff --git a/public/legacyicons16/usergroupicon.png b/public/legacyicons16/usergroupicon.png new file mode 100644 index 00000000..247af645 Binary files /dev/null and b/public/legacyicons16/usergroupicon.png differ diff --git a/public/legacyicons16/usericon.png b/public/legacyicons16/usericon.png new file mode 100644 index 00000000..4166dbfe Binary files /dev/null and b/public/legacyicons16/usericon.png differ diff --git a/public/legacyicons16/vendoricon.png b/public/legacyicons16/vendoricon.png new file mode 100644 index 00000000..6646b815 Binary files /dev/null and b/public/legacyicons16/vendoricon.png differ diff --git a/public/legacyicons16/xmarkcircleicon.png b/public/legacyicons16/xmarkcircleicon.png new file mode 100644 index 00000000..33c876b2 Binary files /dev/null and b/public/legacyicons16/xmarkcircleicon.png differ diff --git a/public/legacyicons16/xmarkicon.png b/public/legacyicons16/xmarkicon.png new file mode 100644 index 00000000..33a38374 Binary files /dev/null and b/public/legacyicons16/xmarkicon.png differ diff --git a/public/legacyicons32/actionsicon.png b/public/legacyicons32/actionsicon.png new file mode 100644 index 00000000..f0c06cae Binary files /dev/null and b/public/legacyicons32/actionsicon.png differ diff --git a/public/legacyicons32/apppasswordicon.png b/public/legacyicons32/apppasswordicon.png new file mode 100644 index 00000000..466a062b Binary files /dev/null and b/public/legacyicons32/apppasswordicon.png differ diff --git a/public/legacyicons32/arrowdownicon.png b/public/legacyicons32/arrowdownicon.png new file mode 100644 index 00000000..2aa47f51 Binary files /dev/null and b/public/legacyicons32/arrowdownicon.png differ diff --git a/public/legacyicons32/arrowlefticon.png b/public/legacyicons32/arrowlefticon.png new file mode 100644 index 00000000..a7f6e91f Binary files /dev/null and b/public/legacyicons32/arrowlefticon.png differ diff --git a/public/legacyicons32/arrowrighticon.png b/public/legacyicons32/arrowrighticon.png new file mode 100644 index 00000000..036b9e29 Binary files /dev/null and b/public/legacyicons32/arrowrighticon.png differ diff --git a/public/legacyicons32/arrowupicon.png b/public/legacyicons32/arrowupicon.png new file mode 100644 index 00000000..6c463bc1 Binary files /dev/null and b/public/legacyicons32/arrowupicon.png differ diff --git a/public/legacyicons32/auditlogicon.png b/public/legacyicons32/auditlogicon.png new file mode 100644 index 00000000..39681a4d Binary files /dev/null and b/public/legacyicons32/auditlogicon.png differ diff --git a/public/legacyicons32/bellicon.png b/public/legacyicons32/bellicon.png new file mode 100644 index 00000000..663e246b Binary files /dev/null and b/public/legacyicons32/bellicon.png differ diff --git a/public/legacyicons32/binicon.png b/public/legacyicons32/binicon.png new file mode 100644 index 00000000..8bb7f37e Binary files /dev/null and b/public/legacyicons32/binicon.png differ diff --git a/public/legacyicons32/blockquoteicon.png b/public/legacyicons32/blockquoteicon.png new file mode 100644 index 00000000..7f51e45c Binary files /dev/null and b/public/legacyicons32/blockquoteicon.png differ diff --git a/public/legacyicons32/boldicon.png b/public/legacyicons32/boldicon.png new file mode 100644 index 00000000..9acc46c5 Binary files /dev/null and b/public/legacyicons32/boldicon.png differ diff --git a/public/legacyicons32/bulletlisticon.png b/public/legacyicons32/bulletlisticon.png new file mode 100644 index 00000000..b9945250 Binary files /dev/null and b/public/legacyicons32/bulletlisticon.png differ diff --git a/public/legacyicons32/checkcircleicon.png b/public/legacyicons32/checkcircleicon.png new file mode 100644 index 00000000..a1c080a4 Binary files /dev/null and b/public/legacyicons32/checkcircleicon.png differ diff --git a/public/legacyicons32/checkicon.png b/public/legacyicons32/checkicon.png new file mode 100644 index 00000000..71be0f67 Binary files /dev/null and b/public/legacyicons32/checkicon.png differ diff --git a/public/legacyicons32/chevronlefticon.png b/public/legacyicons32/chevronlefticon.png new file mode 100644 index 00000000..c8e52622 Binary files /dev/null and b/public/legacyicons32/chevronlefticon.png differ diff --git a/public/legacyicons32/chevronrighticon.png b/public/legacyicons32/chevronrighticon.png new file mode 100644 index 00000000..cdf10c75 Binary files /dev/null and b/public/legacyicons32/chevronrighticon.png differ diff --git a/public/legacyicons32/clienticon.png b/public/legacyicons32/clienticon.png new file mode 100644 index 00000000..63edef65 Binary files /dev/null and b/public/legacyicons32/clienticon.png differ diff --git a/public/legacyicons32/cloudicon.png b/public/legacyicons32/cloudicon.png new file mode 100644 index 00000000..43b143e1 Binary files /dev/null and b/public/legacyicons32/cloudicon.png differ diff --git a/public/legacyicons32/collapsesidebaricon.png b/public/legacyicons32/collapsesidebaricon.png new file mode 100644 index 00000000..cbc52a13 Binary files /dev/null and b/public/legacyicons32/collapsesidebaricon.png differ diff --git a/public/legacyicons32/contracticon.png b/public/legacyicons32/contracticon.png new file mode 100644 index 00000000..cbc52a13 Binary files /dev/null and b/public/legacyicons32/contracticon.png differ diff --git a/public/legacyicons32/controlicon.png b/public/legacyicons32/controlicon.png new file mode 100644 index 00000000..3a822f76 Binary files /dev/null and b/public/legacyicons32/controlicon.png differ diff --git a/public/legacyicons32/copyicon.png b/public/legacyicons32/copyicon.png new file mode 100644 index 00000000..7e387d63 Binary files /dev/null and b/public/legacyicons32/copyicon.png differ diff --git a/public/legacyicons32/couriericon.png b/public/legacyicons32/couriericon.png new file mode 100644 index 00000000..3627afc8 Binary files /dev/null and b/public/legacyicons32/couriericon.png differ diff --git a/public/legacyicons32/courierserviceicon.png b/public/legacyicons32/courierserviceicon.png new file mode 100644 index 00000000..03486ec0 Binary files /dev/null and b/public/legacyicons32/courierserviceicon.png differ diff --git a/public/legacyicons32/csvicon.png b/public/legacyicons32/csvicon.png new file mode 100644 index 00000000..d0ba55a8 Binary files /dev/null and b/public/legacyicons32/csvicon.png differ diff --git a/public/legacyicons32/designicon.png b/public/legacyicons32/designicon.png new file mode 100644 index 00000000..a42fdde4 Binary files /dev/null and b/public/legacyicons32/designicon.png differ diff --git a/public/legacyicons32/developericon.png b/public/legacyicons32/developericon.png new file mode 100644 index 00000000..563c364c Binary files /dev/null and b/public/legacyicons32/developericon.png differ diff --git a/public/legacyicons32/documenticon.png b/public/legacyicons32/documenticon.png new file mode 100644 index 00000000..7f1997a7 Binary files /dev/null and b/public/legacyicons32/documenticon.png differ diff --git a/public/legacyicons32/documentjobicon.png b/public/legacyicons32/documentjobicon.png new file mode 100644 index 00000000..7ae33c66 Binary files /dev/null and b/public/legacyicons32/documentjobicon.png differ diff --git a/public/legacyicons32/documentprintericon.png b/public/legacyicons32/documentprintericon.png new file mode 100644 index 00000000..d094d2b6 Binary files /dev/null and b/public/legacyicons32/documentprintericon.png differ diff --git a/public/legacyicons32/documentsizeicon.png b/public/legacyicons32/documentsizeicon.png new file mode 100644 index 00000000..2ccae7f3 Binary files /dev/null and b/public/legacyicons32/documentsizeicon.png differ diff --git a/public/legacyicons32/documenttemplateicon.png b/public/legacyicons32/documenttemplateicon.png new file mode 100644 index 00000000..2b2bb814 Binary files /dev/null and b/public/legacyicons32/documenttemplateicon.png differ diff --git a/public/legacyicons32/downloadicon.png b/public/legacyicons32/downloadicon.png new file mode 100644 index 00000000..e3e03772 Binary files /dev/null and b/public/legacyicons32/downloadicon.png differ diff --git a/public/legacyicons32/duplicateicon.png b/public/legacyicons32/duplicateicon.png new file mode 100644 index 00000000..4c21085e Binary files /dev/null and b/public/legacyicons32/duplicateicon.png differ diff --git a/public/legacyicons32/editicon.png b/public/legacyicons32/editicon.png new file mode 100644 index 00000000..0ee281c5 Binary files /dev/null and b/public/legacyicons32/editicon.png differ diff --git a/public/legacyicons32/emailaccounticon.png b/public/legacyicons32/emailaccounticon.png new file mode 100644 index 00000000..f192c840 Binary files /dev/null and b/public/legacyicons32/emailaccounticon.png differ diff --git a/public/legacyicons32/emailicon.png b/public/legacyicons32/emailicon.png new file mode 100644 index 00000000..98a99c28 Binary files /dev/null and b/public/legacyicons32/emailicon.png differ diff --git a/public/legacyicons32/emailmessageicon.png b/public/legacyicons32/emailmessageicon.png new file mode 100644 index 00000000..5ab195fa Binary files /dev/null and b/public/legacyicons32/emailmessageicon.png differ diff --git a/public/legacyicons32/emailtemplateicon.png b/public/legacyicons32/emailtemplateicon.png new file mode 100644 index 00000000..f186e888 Binary files /dev/null and b/public/legacyicons32/emailtemplateicon.png differ diff --git a/public/legacyicons32/equalicon.png b/public/legacyicons32/equalicon.png new file mode 100644 index 00000000..16f081dc Binary files /dev/null and b/public/legacyicons32/equalicon.png differ diff --git a/public/legacyicons32/excelicon.png b/public/legacyicons32/excelicon.png new file mode 100644 index 00000000..4ce1583b Binary files /dev/null and b/public/legacyicons32/excelicon.png differ diff --git a/public/legacyicons32/exclamationoctagonicon.png b/public/legacyicons32/exclamationoctagonicon.png new file mode 100644 index 00000000..807117fc Binary files /dev/null and b/public/legacyicons32/exclamationoctagonicon.png differ diff --git a/public/legacyicons32/expandicon.png b/public/legacyicons32/expandicon.png new file mode 100644 index 00000000..8a96a53b Binary files /dev/null and b/public/legacyicons32/expandicon.png differ diff --git a/public/legacyicons32/expandsidebaricon.png b/public/legacyicons32/expandsidebaricon.png new file mode 100644 index 00000000..687d74d1 Binary files /dev/null and b/public/legacyicons32/expandsidebaricon.png differ diff --git a/public/legacyicons32/exporticon.png b/public/legacyicons32/exporticon.png new file mode 100644 index 00000000..8359c0e5 Binary files /dev/null and b/public/legacyicons32/exporticon.png differ diff --git a/public/legacyicons32/eyeicon.png b/public/legacyicons32/eyeicon.png new file mode 100644 index 00000000..72edb6b7 Binary files /dev/null and b/public/legacyicons32/eyeicon.png differ diff --git a/public/legacyicons32/eyeslashicon.png b/public/legacyicons32/eyeslashicon.png new file mode 100644 index 00000000..d3f5b2c8 Binary files /dev/null and b/public/legacyicons32/eyeslashicon.png differ diff --git a/public/legacyicons32/filamenticon.png b/public/legacyicons32/filamenticon.png new file mode 100644 index 00000000..40e3ae94 Binary files /dev/null and b/public/legacyicons32/filamenticon.png differ diff --git a/public/legacyicons32/filamentprofileicon.png b/public/legacyicons32/filamentprofileicon.png new file mode 100644 index 00000000..25ad9f17 Binary files /dev/null and b/public/legacyicons32/filamentprofileicon.png differ diff --git a/public/legacyicons32/filamentskuicon.png b/public/legacyicons32/filamentskuicon.png new file mode 100644 index 00000000..3360dd88 Binary files /dev/null and b/public/legacyicons32/filamentskuicon.png differ diff --git a/public/legacyicons32/filamentstockicon.png b/public/legacyicons32/filamentstockicon.png new file mode 100644 index 00000000..448681ea Binary files /dev/null and b/public/legacyicons32/filamentstockicon.png differ diff --git a/public/legacyicons32/fileicon.png b/public/legacyicons32/fileicon.png new file mode 100644 index 00000000..464caf27 Binary files /dev/null and b/public/legacyicons32/fileicon.png differ diff --git a/public/legacyicons32/filtercirclefilledicon.png b/public/legacyicons32/filtercirclefilledicon.png new file mode 100644 index 00000000..dc486c44 Binary files /dev/null and b/public/legacyicons32/filtercirclefilledicon.png differ diff --git a/public/legacyicons32/filtercircleicon.png b/public/legacyicons32/filtercircleicon.png new file mode 100644 index 00000000..dc486c44 Binary files /dev/null and b/public/legacyicons32/filtercircleicon.png differ diff --git a/public/legacyicons32/filtericon.png b/public/legacyicons32/filtericon.png new file mode 100644 index 00000000..dc486c44 Binary files /dev/null and b/public/legacyicons32/filtericon.png differ diff --git a/public/legacyicons32/financeicon.png b/public/legacyicons32/financeicon.png new file mode 100644 index 00000000..c8c5a117 Binary files /dev/null and b/public/legacyicons32/financeicon.png differ diff --git a/public/legacyicons32/fulfillmentpolicyicon.png b/public/legacyicons32/fulfillmentpolicyicon.png new file mode 100644 index 00000000..ff6247fb Binary files /dev/null and b/public/legacyicons32/fulfillmentpolicyicon.png differ diff --git a/public/legacyicons32/functionicon.png b/public/legacyicons32/functionicon.png new file mode 100644 index 00000000..78c47cf9 Binary files /dev/null and b/public/legacyicons32/functionicon.png differ diff --git a/public/legacyicons32/gcodefileicon.png b/public/legacyicons32/gcodefileicon.png new file mode 100644 index 00000000..15281839 Binary files /dev/null and b/public/legacyicons32/gcodefileicon.png differ diff --git a/public/legacyicons32/graphicon.png b/public/legacyicons32/graphicon.png new file mode 100644 index 00000000..f51f8ff2 Binary files /dev/null and b/public/legacyicons32/graphicon.png differ diff --git a/public/legacyicons32/greaterthanicon.png b/public/legacyicons32/greaterthanicon.png new file mode 100644 index 00000000..e510b33f Binary files /dev/null and b/public/legacyicons32/greaterthanicon.png differ diff --git a/public/legacyicons32/greaterthanorequaltoicon.png b/public/legacyicons32/greaterthanorequaltoicon.png new file mode 100644 index 00000000..e510b33f Binary files /dev/null and b/public/legacyicons32/greaterthanorequaltoicon.png differ diff --git a/public/legacyicons32/gridicon.png b/public/legacyicons32/gridicon.png new file mode 100644 index 00000000..3763e0b6 Binary files /dev/null and b/public/legacyicons32/gridicon.png differ diff --git a/public/legacyicons32/homeicon.png b/public/legacyicons32/homeicon.png new file mode 100644 index 00000000..51e3c503 Binary files /dev/null and b/public/legacyicons32/homeicon.png differ diff --git a/public/legacyicons32/hosticon.png b/public/legacyicons32/hosticon.png new file mode 100644 index 00000000..8d207a8d Binary files /dev/null and b/public/legacyicons32/hosticon.png differ diff --git a/public/legacyicons32/hotendicon.png b/public/legacyicons32/hotendicon.png new file mode 100644 index 00000000..182f72fa Binary files /dev/null and b/public/legacyicons32/hotendicon.png differ diff --git a/public/legacyicons32/infocircleicon.png b/public/legacyicons32/infocircleicon.png new file mode 100644 index 00000000..93c67f2b Binary files /dev/null and b/public/legacyicons32/infocircleicon.png differ diff --git a/public/legacyicons32/infoicon.png b/public/legacyicons32/infoicon.png new file mode 100644 index 00000000..93c67f2b Binary files /dev/null and b/public/legacyicons32/infoicon.png differ diff --git a/public/legacyicons32/inventoryicon.png b/public/legacyicons32/inventoryicon.png new file mode 100644 index 00000000..5fe4ad69 Binary files /dev/null and b/public/legacyicons32/inventoryicon.png differ diff --git a/public/legacyicons32/invoiceicon.png b/public/legacyicons32/invoiceicon.png new file mode 100644 index 00000000..34d88a6d Binary files /dev/null and b/public/legacyicons32/invoiceicon.png differ diff --git a/public/legacyicons32/italicicon.png b/public/legacyicons32/italicicon.png new file mode 100644 index 00000000..8da72833 Binary files /dev/null and b/public/legacyicons32/italicicon.png differ diff --git a/public/legacyicons32/jobicon.png b/public/legacyicons32/jobicon.png new file mode 100644 index 00000000..b6d403d0 Binary files /dev/null and b/public/legacyicons32/jobicon.png differ diff --git a/public/legacyicons32/jsonarrayicon.png b/public/legacyicons32/jsonarrayicon.png new file mode 100644 index 00000000..04dab451 Binary files /dev/null and b/public/legacyicons32/jsonarrayicon.png differ diff --git a/public/legacyicons32/jsonboolicon.png b/public/legacyicons32/jsonboolicon.png new file mode 100644 index 00000000..04dab451 Binary files /dev/null and b/public/legacyicons32/jsonboolicon.png differ diff --git a/public/legacyicons32/jsonnumbericon.png b/public/legacyicons32/jsonnumbericon.png new file mode 100644 index 00000000..04dab451 Binary files /dev/null and b/public/legacyicons32/jsonnumbericon.png differ diff --git a/public/legacyicons32/jsonobjecticon.png b/public/legacyicons32/jsonobjecticon.png new file mode 100644 index 00000000..04dab451 Binary files /dev/null and b/public/legacyicons32/jsonobjecticon.png differ diff --git a/public/legacyicons32/jsonstringicon.png b/public/legacyicons32/jsonstringicon.png new file mode 100644 index 00000000..04dab451 Binary files /dev/null and b/public/legacyicons32/jsonstringicon.png differ diff --git a/public/legacyicons32/kanbanicon.png b/public/legacyicons32/kanbanicon.png new file mode 100644 index 00000000..deebfcf0 Binary files /dev/null and b/public/legacyicons32/kanbanicon.png differ diff --git a/public/legacyicons32/lessthanicon.png b/public/legacyicons32/lessthanicon.png new file mode 100644 index 00000000..acf6c769 Binary files /dev/null and b/public/legacyicons32/lessthanicon.png differ diff --git a/public/legacyicons32/lessthanorequaltoicon.png b/public/legacyicons32/lessthanorequaltoicon.png new file mode 100644 index 00000000..acf6c769 Binary files /dev/null and b/public/legacyicons32/lessthanorequaltoicon.png differ diff --git a/public/legacyicons32/levelbedicon.png b/public/legacyicons32/levelbedicon.png new file mode 100644 index 00000000..640767ed Binary files /dev/null and b/public/legacyicons32/levelbedicon.png differ diff --git a/public/legacyicons32/linkicon.png b/public/legacyicons32/linkicon.png new file mode 100644 index 00000000..b0c35b59 Binary files /dev/null and b/public/legacyicons32/linkicon.png differ diff --git a/public/legacyicons32/listicon.png b/public/legacyicons32/listicon.png new file mode 100644 index 00000000..f25da3d1 Binary files /dev/null and b/public/legacyicons32/listicon.png differ diff --git a/public/legacyicons32/listingicon.png b/public/legacyicons32/listingicon.png new file mode 100644 index 00000000..0e055096 Binary files /dev/null and b/public/legacyicons32/listingicon.png differ diff --git a/public/legacyicons32/listingvarienticon.png b/public/legacyicons32/listingvarienticon.png new file mode 100644 index 00000000..f2ef7dda Binary files /dev/null and b/public/legacyicons32/listingvarienticon.png differ diff --git a/public/legacyicons32/loadingicon.png b/public/legacyicons32/loadingicon.png new file mode 100644 index 00000000..cd14446b Binary files /dev/null and b/public/legacyicons32/loadingicon.png differ diff --git a/public/legacyicons32/lockicon.png b/public/legacyicons32/lockicon.png new file mode 100644 index 00000000..ceebba9d Binary files /dev/null and b/public/legacyicons32/lockicon.png differ diff --git a/public/legacyicons32/logouticon.png b/public/legacyicons32/logouticon.png new file mode 100644 index 00000000..e4efe062 Binary files /dev/null and b/public/legacyicons32/logouticon.png differ diff --git a/public/legacyicons32/magicwandicon.png b/public/legacyicons32/magicwandicon.png new file mode 100644 index 00000000..d99eec4c Binary files /dev/null and b/public/legacyicons32/magicwandicon.png differ diff --git a/public/legacyicons32/mailcheckicon.png b/public/legacyicons32/mailcheckicon.png new file mode 100644 index 00000000..f71e37a3 Binary files /dev/null and b/public/legacyicons32/mailcheckicon.png differ diff --git a/public/legacyicons32/mailicon.png b/public/legacyicons32/mailicon.png new file mode 100644 index 00000000..98a99c28 Binary files /dev/null and b/public/legacyicons32/mailicon.png differ diff --git a/public/legacyicons32/mailtemplateicon.png b/public/legacyicons32/mailtemplateicon.png new file mode 100644 index 00000000..f186e888 Binary files /dev/null and b/public/legacyicons32/mailtemplateicon.png differ diff --git a/public/legacyicons32/marketplaceicon.png b/public/legacyicons32/marketplaceicon.png new file mode 100644 index 00000000..5e8c648b Binary files /dev/null and b/public/legacyicons32/marketplaceicon.png differ diff --git a/public/legacyicons32/materialicon.png b/public/legacyicons32/materialicon.png new file mode 100644 index 00000000..2e61d75f Binary files /dev/null and b/public/legacyicons32/materialicon.png differ diff --git a/public/legacyicons32/menuicon.png b/public/legacyicons32/menuicon.png new file mode 100644 index 00000000..c1ccc619 Binary files /dev/null and b/public/legacyicons32/menuicon.png differ diff --git a/public/legacyicons32/minusicon.png b/public/legacyicons32/minusicon.png new file mode 100644 index 00000000..30a45b82 Binary files /dev/null and b/public/legacyicons32/minusicon.png differ diff --git a/public/legacyicons32/multimotionicon.png b/public/legacyicons32/multimotionicon.png new file mode 100644 index 00000000..2fcdc22f Binary files /dev/null and b/public/legacyicons32/multimotionicon.png differ diff --git a/public/legacyicons32/newmailicon.png b/public/legacyicons32/newmailicon.png new file mode 100644 index 00000000..15600f16 Binary files /dev/null and b/public/legacyicons32/newmailicon.png differ diff --git a/public/legacyicons32/newwindowicon.png b/public/legacyicons32/newwindowicon.png new file mode 100644 index 00000000..3ba12b1d Binary files /dev/null and b/public/legacyicons32/newwindowicon.png differ diff --git a/public/legacyicons32/noteicon.png b/public/legacyicons32/noteicon.png new file mode 100644 index 00000000..cee94b37 Binary files /dev/null and b/public/legacyicons32/noteicon.png differ diff --git a/public/legacyicons32/notequalicon.png b/public/legacyicons32/notequalicon.png new file mode 100644 index 00000000..4ee12537 Binary files /dev/null and b/public/legacyicons32/notequalicon.png differ diff --git a/public/legacyicons32/notetypeicon.png b/public/legacyicons32/notetypeicon.png new file mode 100644 index 00000000..d9bfd9f8 Binary files /dev/null and b/public/legacyicons32/notetypeicon.png differ diff --git a/public/legacyicons32/numberedlisticon.png b/public/legacyicons32/numberedlisticon.png new file mode 100644 index 00000000..0b95bee0 Binary files /dev/null and b/public/legacyicons32/numberedlisticon.png differ diff --git a/public/legacyicons32/odataicon.png b/public/legacyicons32/odataicon.png new file mode 100644 index 00000000..ba58bd7b Binary files /dev/null and b/public/legacyicons32/odataicon.png differ diff --git a/public/legacyicons32/openappicon.png b/public/legacyicons32/openappicon.png new file mode 100644 index 00000000..69d6132f Binary files /dev/null and b/public/legacyicons32/openappicon.png differ diff --git a/public/legacyicons32/openinappicon.png b/public/legacyicons32/openinappicon.png new file mode 100644 index 00000000..7485e340 Binary files /dev/null and b/public/legacyicons32/openinappicon.png differ diff --git a/public/legacyicons32/openinbrowsericon.png b/public/legacyicons32/openinbrowsericon.png new file mode 100644 index 00000000..7b800f1b Binary files /dev/null and b/public/legacyicons32/openinbrowsericon.png differ diff --git a/public/legacyicons32/orderitemicon.png b/public/legacyicons32/orderitemicon.png new file mode 100644 index 00000000..9d566af1 Binary files /dev/null and b/public/legacyicons32/orderitemicon.png differ diff --git a/public/legacyicons32/otpicon.png b/public/legacyicons32/otpicon.png new file mode 100644 index 00000000..c8de9dbd Binary files /dev/null and b/public/legacyicons32/otpicon.png differ diff --git a/public/legacyicons32/panfilledicon.png b/public/legacyicons32/panfilledicon.png new file mode 100644 index 00000000..d431afaa Binary files /dev/null and b/public/legacyicons32/panfilledicon.png differ diff --git a/public/legacyicons32/panicon.png b/public/legacyicons32/panicon.png new file mode 100644 index 00000000..d431afaa Binary files /dev/null and b/public/legacyicons32/panicon.png differ diff --git a/public/legacyicons32/particon.png b/public/legacyicons32/particon.png new file mode 100644 index 00000000..c1ee68de Binary files /dev/null and b/public/legacyicons32/particon.png differ diff --git a/public/legacyicons32/partskuicon.png b/public/legacyicons32/partskuicon.png new file mode 100644 index 00000000..3360dd88 Binary files /dev/null and b/public/legacyicons32/partskuicon.png differ diff --git a/public/legacyicons32/partstockicon.png b/public/legacyicons32/partstockicon.png new file mode 100644 index 00000000..b67b1b46 Binary files /dev/null and b/public/legacyicons32/partstockicon.png differ diff --git a/public/legacyicons32/passkeysicon.png b/public/legacyicons32/passkeysicon.png new file mode 100644 index 00000000..3cf460e1 Binary files /dev/null and b/public/legacyicons32/passkeysicon.png differ diff --git a/public/legacyicons32/pausecircleicon.png b/public/legacyicons32/pausecircleicon.png new file mode 100644 index 00000000..3ab8b69d Binary files /dev/null and b/public/legacyicons32/pausecircleicon.png differ diff --git a/public/legacyicons32/pauseicon.png b/public/legacyicons32/pauseicon.png new file mode 100644 index 00000000..186f361f Binary files /dev/null and b/public/legacyicons32/pauseicon.png differ diff --git a/public/legacyicons32/paymenticon.png b/public/legacyicons32/paymenticon.png new file mode 100644 index 00000000..79c5e884 Binary files /dev/null and b/public/legacyicons32/paymenticon.png differ diff --git a/public/legacyicons32/paymentpolicyicon.png b/public/legacyicons32/paymentpolicyicon.png new file mode 100644 index 00000000..f6a0417e Binary files /dev/null and b/public/legacyicons32/paymentpolicyicon.png differ diff --git a/public/legacyicons32/permissionsettingicon.png b/public/legacyicons32/permissionsettingicon.png new file mode 100644 index 00000000..be8cf761 Binary files /dev/null and b/public/legacyicons32/permissionsettingicon.png differ diff --git a/public/legacyicons32/permissionsettingsicon.png b/public/legacyicons32/permissionsettingsicon.png new file mode 100644 index 00000000..be8cf761 Binary files /dev/null and b/public/legacyicons32/permissionsettingsicon.png differ diff --git a/public/legacyicons32/persongroupicon.png b/public/legacyicons32/persongroupicon.png new file mode 100644 index 00000000..bea24889 Binary files /dev/null and b/public/legacyicons32/persongroupicon.png differ diff --git a/public/legacyicons32/personicon.png b/public/legacyicons32/personicon.png new file mode 100644 index 00000000..42b38107 Binary files /dev/null and b/public/legacyicons32/personicon.png differ diff --git a/public/legacyicons32/pictureicon.png b/public/legacyicons32/pictureicon.png new file mode 100644 index 00000000..adcd7b26 Binary files /dev/null and b/public/legacyicons32/pictureicon.png differ diff --git a/public/legacyicons32/playcircleicon.png b/public/legacyicons32/playcircleicon.png new file mode 100644 index 00000000..a1f7345f Binary files /dev/null and b/public/legacyicons32/playcircleicon.png differ diff --git a/public/legacyicons32/playicon.png b/public/legacyicons32/playicon.png new file mode 100644 index 00000000..3b64790b Binary files /dev/null and b/public/legacyicons32/playicon.png differ diff --git a/public/legacyicons32/plusicon.png b/public/legacyicons32/plusicon.png new file mode 100644 index 00000000..60a7a291 Binary files /dev/null and b/public/legacyicons32/plusicon.png differ diff --git a/public/legacyicons32/plusminusicon.png b/public/legacyicons32/plusminusicon.png new file mode 100644 index 00000000..ca39b387 Binary files /dev/null and b/public/legacyicons32/plusminusicon.png differ diff --git a/public/legacyicons32/printedparticon.png b/public/legacyicons32/printedparticon.png new file mode 100644 index 00000000..b67b1b46 Binary files /dev/null and b/public/legacyicons32/printedparticon.png differ diff --git a/public/legacyicons32/printericon.png b/public/legacyicons32/printericon.png new file mode 100644 index 00000000..d094d2b6 Binary files /dev/null and b/public/legacyicons32/printericon.png differ diff --git a/public/legacyicons32/printerprofileicon.png b/public/legacyicons32/printerprofileicon.png new file mode 100644 index 00000000..a120009c Binary files /dev/null and b/public/legacyicons32/printerprofileicon.png differ diff --git a/public/legacyicons32/productcategoryicon.png b/public/legacyicons32/productcategoryicon.png new file mode 100644 index 00000000..f37bb3ef Binary files /dev/null and b/public/legacyicons32/productcategoryicon.png differ diff --git a/public/legacyicons32/producticon.png b/public/legacyicons32/producticon.png new file mode 100644 index 00000000..448681ea Binary files /dev/null and b/public/legacyicons32/producticon.png differ diff --git a/public/legacyicons32/productionicon.png b/public/legacyicons32/productionicon.png new file mode 100644 index 00000000..53267140 Binary files /dev/null and b/public/legacyicons32/productionicon.png differ diff --git a/public/legacyicons32/productskuicon.png b/public/legacyicons32/productskuicon.png new file mode 100644 index 00000000..3360dd88 Binary files /dev/null and b/public/legacyicons32/productskuicon.png differ diff --git a/public/legacyicons32/productstockicon.png b/public/legacyicons32/productstockicon.png new file mode 100644 index 00000000..5fe4ad69 Binary files /dev/null and b/public/legacyicons32/productstockicon.png differ diff --git a/public/legacyicons32/purchaseordericon.png b/public/legacyicons32/purchaseordericon.png new file mode 100644 index 00000000..edd35f19 Binary files /dev/null and b/public/legacyicons32/purchaseordericon.png differ diff --git a/public/legacyicons32/questioncircleicon.png b/public/legacyicons32/questioncircleicon.png new file mode 100644 index 00000000..68f51bac Binary files /dev/null and b/public/legacyicons32/questioncircleicon.png differ diff --git a/public/legacyicons32/reloadicon.png b/public/legacyicons32/reloadicon.png new file mode 100644 index 00000000..fdf20e26 Binary files /dev/null and b/public/legacyicons32/reloadicon.png differ diff --git a/public/legacyicons32/returnpolicyicon.png b/public/legacyicons32/returnpolicyicon.png new file mode 100644 index 00000000..be4f8e92 Binary files /dev/null and b/public/legacyicons32/returnpolicyicon.png differ diff --git a/public/legacyicons32/rssicon.png b/public/legacyicons32/rssicon.png new file mode 100644 index 00000000..d69fc404 Binary files /dev/null and b/public/legacyicons32/rssicon.png differ diff --git a/public/legacyicons32/rulericon.png b/public/legacyicons32/rulericon.png new file mode 100644 index 00000000..a6d88888 Binary files /dev/null and b/public/legacyicons32/rulericon.png differ diff --git a/public/legacyicons32/salesicon.png b/public/legacyicons32/salesicon.png new file mode 100644 index 00000000..eaa10680 Binary files /dev/null and b/public/legacyicons32/salesicon.png differ diff --git a/public/legacyicons32/salesordericon.png b/public/legacyicons32/salesordericon.png new file mode 100644 index 00000000..9130dffb Binary files /dev/null and b/public/legacyicons32/salesordericon.png differ diff --git a/public/legacyicons32/searchicon.png b/public/legacyicons32/searchicon.png new file mode 100644 index 00000000..9cbc3618 Binary files /dev/null and b/public/legacyicons32/searchicon.png differ diff --git a/public/legacyicons32/settingsicon.png b/public/legacyicons32/settingsicon.png new file mode 100644 index 00000000..d53ebf1c Binary files /dev/null and b/public/legacyicons32/settingsicon.png differ diff --git a/public/legacyicons32/shipmenticon.png b/public/legacyicons32/shipmenticon.png new file mode 100644 index 00000000..3627afc8 Binary files /dev/null and b/public/legacyicons32/shipmenticon.png differ diff --git a/public/legacyicons32/softwareupdateicon.png b/public/legacyicons32/softwareupdateicon.png new file mode 100644 index 00000000..c1ab75d3 Binary files /dev/null and b/public/legacyicons32/softwareupdateicon.png differ diff --git a/public/legacyicons32/sortcirclefilledicon.png b/public/legacyicons32/sortcirclefilledicon.png new file mode 100644 index 00000000..aac33623 Binary files /dev/null and b/public/legacyicons32/sortcirclefilledicon.png differ diff --git a/public/legacyicons32/sortcircleicon.png b/public/legacyicons32/sortcircleicon.png new file mode 100644 index 00000000..3a7f470a Binary files /dev/null and b/public/legacyicons32/sortcircleicon.png differ diff --git a/public/legacyicons32/spoolicon.png b/public/legacyicons32/spoolicon.png new file mode 100644 index 00000000..4050ffa1 Binary files /dev/null and b/public/legacyicons32/spoolicon.png differ diff --git a/public/legacyicons32/stockauditicon.png b/public/legacyicons32/stockauditicon.png new file mode 100644 index 00000000..08c8e1ec Binary files /dev/null and b/public/legacyicons32/stockauditicon.png differ diff --git a/public/legacyicons32/stockauditlevelicon.png b/public/legacyicons32/stockauditlevelicon.png new file mode 100644 index 00000000..23502847 Binary files /dev/null and b/public/legacyicons32/stockauditlevelicon.png differ diff --git a/public/legacyicons32/stockeventicon.png b/public/legacyicons32/stockeventicon.png new file mode 100644 index 00000000..de88e67a Binary files /dev/null and b/public/legacyicons32/stockeventicon.png differ diff --git a/public/legacyicons32/stocklocationicon.png b/public/legacyicons32/stocklocationicon.png new file mode 100644 index 00000000..01688ea3 Binary files /dev/null and b/public/legacyicons32/stocklocationicon.png differ diff --git a/public/legacyicons32/stocktransfericon.png b/public/legacyicons32/stocktransfericon.png new file mode 100644 index 00000000..f47565b9 Binary files /dev/null and b/public/legacyicons32/stocktransfericon.png differ diff --git a/public/legacyicons32/stopcircleicon.png b/public/legacyicons32/stopcircleicon.png new file mode 100644 index 00000000..f15bf692 Binary files /dev/null and b/public/legacyicons32/stopcircleicon.png differ diff --git a/public/legacyicons32/subjobicon.png b/public/legacyicons32/subjobicon.png new file mode 100644 index 00000000..5d408a34 Binary files /dev/null and b/public/legacyicons32/subjobicon.png differ diff --git a/public/legacyicons32/taxrateicon.png b/public/legacyicons32/taxrateicon.png new file mode 100644 index 00000000..ca39b387 Binary files /dev/null and b/public/legacyicons32/taxrateicon.png differ diff --git a/public/legacyicons32/taxrecordicon.png b/public/legacyicons32/taxrecordicon.png new file mode 100644 index 00000000..0d1e11a8 Binary files /dev/null and b/public/legacyicons32/taxrecordicon.png differ diff --git a/public/legacyicons32/taxruleicon.png b/public/legacyicons32/taxruleicon.png new file mode 100644 index 00000000..da5b0d5e Binary files /dev/null and b/public/legacyicons32/taxruleicon.png differ diff --git a/public/legacyicons32/textformaticon.png b/public/legacyicons32/textformaticon.png new file mode 100644 index 00000000..5b19cecb Binary files /dev/null and b/public/legacyicons32/textformaticon.png differ diff --git a/public/legacyicons32/texticon.png b/public/legacyicons32/texticon.png new file mode 100644 index 00000000..d0ba55a8 Binary files /dev/null and b/public/legacyicons32/texticon.png differ diff --git a/public/legacyicons32/threedotsicon.png b/public/legacyicons32/threedotsicon.png new file mode 100644 index 00000000..b9945250 Binary files /dev/null and b/public/legacyicons32/threedotsicon.png differ diff --git a/public/legacyicons32/timelineicon.png b/public/legacyicons32/timelineicon.png new file mode 100644 index 00000000..eb27b9d5 Binary files /dev/null and b/public/legacyicons32/timelineicon.png differ diff --git a/public/legacyicons32/underlineicon.png b/public/legacyicons32/underlineicon.png new file mode 100644 index 00000000..264a9819 Binary files /dev/null and b/public/legacyicons32/underlineicon.png differ diff --git a/public/legacyicons32/unloadicon.png b/public/legacyicons32/unloadicon.png new file mode 100644 index 00000000..16e6ea90 Binary files /dev/null and b/public/legacyicons32/unloadicon.png differ diff --git a/public/legacyicons32/uploadicon.png b/public/legacyicons32/uploadicon.png new file mode 100644 index 00000000..244c57ba Binary files /dev/null and b/public/legacyicons32/uploadicon.png differ diff --git a/public/legacyicons32/usergroupicon.png b/public/legacyicons32/usergroupicon.png new file mode 100644 index 00000000..bea24889 Binary files /dev/null and b/public/legacyicons32/usergroupicon.png differ diff --git a/public/legacyicons32/usericon.png b/public/legacyicons32/usericon.png new file mode 100644 index 00000000..42b38107 Binary files /dev/null and b/public/legacyicons32/usericon.png differ diff --git a/public/legacyicons32/vendoricon.png b/public/legacyicons32/vendoricon.png new file mode 100644 index 00000000..01688ea3 Binary files /dev/null and b/public/legacyicons32/vendoricon.png differ diff --git a/public/legacyicons32/xmarkcircleicon.png b/public/legacyicons32/xmarkcircleicon.png new file mode 100644 index 00000000..1b20ae0d Binary files /dev/null and b/public/legacyicons32/xmarkcircleicon.png differ diff --git a/public/legacyicons32/xmarkicon.png b/public/legacyicons32/xmarkicon.png new file mode 100644 index 00000000..4ee12537 Binary files /dev/null and b/public/legacyicons32/xmarkicon.png differ diff --git a/src/App.jsx b/src/App.jsx index 8dc98e86..abfdb534 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -37,6 +37,7 @@ import AuthCallback from './components/App/AuthCallback.jsx' import EmailNotificationTemplate from './components/Email/EmailNotificationTemplate.jsx' import MarketplaceAuthCallback from './components/Dashboard/Sales/Marketplaces/MarketplaceAuthCallback.jsx' import AuthLaunch from './components/App/AppLaunch.jsx' +import DesktopAuthComplete from './pages/DesktopAuthComplete.jsx' import { TableStateProvider } from './components/Dashboard/context/TableStateContext.jsx' const SlicerIntegration = lazy( () => @@ -96,6 +97,10 @@ const AppContent = () => { + } + /> } diff --git a/src/components/Dashboard/context/AuthContext.jsx b/src/components/Dashboard/context/AuthContext.jsx index 8fb38610..c2426773 100644 --- a/src/components/Dashboard/context/AuthContext.jsx +++ b/src/components/Dashboard/context/AuthContext.jsx @@ -119,6 +119,7 @@ const AuthProvider = ({ children }) => { authenticated }) sessionRef.current = { token, expiresAt, userProfile, authenticated } + const isDesktopHelperRoute = location.pathname.startsWith('/desktop') var redirectType = 'web' @@ -191,13 +192,13 @@ const AuthProvider = ({ children }) => { // Check if cookies are enabled and show warning if not (web only) useEffect(() => { - if (isElectron) return + if (isElectron || isDesktopHelperRoute) return if (!areCookiesEnabled()) { messageApi.warning( 'Browser storage is disabled. Login state may not persist between tabs.' ) } - }, [messageApi, isElectron]) + }, [messageApi, isElectron, isDesktopHelperRoute]) // Read token from cookies (web) or electron session storage if present useEffect(() => { @@ -264,7 +265,15 @@ const AuthProvider = ({ children }) => { // An auth code represents a newly completed login and must take precedence // over any existing persisted session. - if (location.pathname === '/applaunch' || authCode != null) { + if ( + location.pathname === '/applaunch' || + location.pathname.startsWith('/desktop') || + authCode != null + ) { + if (location.pathname.startsWith('/desktop')) { + setRetreivedTokenFromCookies(true) + setInitialized(true) + } return } @@ -764,6 +773,9 @@ const AuthProvider = ({ children }) => { }, [expiresAt, authenticated, notificationApi, refreshToken, isElectron]) useEffect(() => { + if (location.pathname.startsWith('/desktop')) { + return + } const authCode = new URLSearchParams(location.search).get('authCode') || null if ( @@ -821,7 +833,12 @@ const AuthProvider = ({ children }) => { Session Expired } - open={showSessionExpiredModal && !loading && !showAuthErrorModal} + open={ + showSessionExpiredModal && + !isDesktopHelperRoute && + !loading && + !showAuthErrorModal + } onOk={handleSessionExpiredModalOk} okText='Log In' style={{ maxWidth: 430 }} @@ -849,6 +866,7 @@ const AuthProvider = ({ children }) => { } open={ showUnauthorizedModal && + !isDesktopHelperRoute && !authenticated && !loading && !showAuthErrorModal @@ -880,7 +898,7 @@ const AuthProvider = ({ children }) => { { Authentication Error } - open={showAuthErrorModal && !loading} + open={showAuthErrorModal && !loading && !isDesktopHelperRoute} style={{ maxWidth: 430 }} closable={false} centered diff --git a/src/desktop/legacyIcons.js b/src/desktop/legacyIcons.js new file mode 100644 index 00000000..3cb6d0d6 --- /dev/null +++ b/src/desktop/legacyIcons.js @@ -0,0 +1,49 @@ +import fs from 'node:fs' +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +const PUBLIC_DIR = path.resolve( + path.dirname(fileURLToPath(import.meta.url)), + '../../public' +) +const ICON_SIZES = [ + { size: '16', dirName: 'legacyicons16' }, + { size: '32', dirName: 'legacyicons32' } +] +const ICON_EXTENSIONS = new Set(['.png', '.ico', '.gif', '.jpg', '.jpeg', '.bmp']) + +const addAlias = (icons, key, size, url) => { + if (!icons[key]) { + icons[key] = {} + } + icons[key][size] = url +} + +export function buildLegacyIconUrlMap() { + const icons = {} + + for (const { size, dirName } of ICON_SIZES) { + const dir = path.join(PUBLIC_DIR, dirName) + if (!fs.existsSync(dir)) continue + + for (const file of fs.readdirSync(dir)) { + const extension = path.extname(file).toLowerCase() + if (!ICON_EXTENSIONS.has(extension)) continue + + const stem = path.basename(file, extension).toLowerCase() + const url = `/${dirName}/${file}` + addAlias(icons, stem, size, url) + if (stem.endsWith('icon')) { + addAlias(icons, stem.slice(0, -4), size, url) + } + } + } + + return icons +} + +export function getLegacyIconUrl(iconKey, iconMap = buildLegacyIconUrlMap()) { + if (!iconKey || typeof iconKey !== 'string') return null + const lower = iconKey.toLowerCase() + return iconMap[lower] || iconMap[`${lower}icon`] || null +} diff --git a/src/desktop/serializeBundle.js b/src/desktop/serializeBundle.js new file mode 100644 index 00000000..37bcbcfc --- /dev/null +++ b/src/desktop/serializeBundle.js @@ -0,0 +1,265 @@ +import { objectModels, evaluateVariable } from '../database/ObjectModels' +import { getSidebarMenuSections } from '../database/Sidebars' +import { buildLegacyIconUrlMap, getLegacyIconUrl } from './legacyIcons' +import config from '../config' +import packageJson from '../../package.json' + +const FUNCTION_KEYS = new Set([ + 'value', + 'visible', + 'readOnly', + 'required', + 'disabled' +]) + +const SKIP_KEYS = new Set(['content', 'icon', 'pages']) + +const isPlainObject = (value) => + value != null && + typeof value === 'object' && + !Array.isArray(value) && + Object.prototype.toString.call(value) === '[object Object]' + +const isReactish = (value) => { + if (value == null) return false + if (typeof value === 'object') { + if (value.$$typeof) return true + if (typeof value._init === 'function' && value._payload) return true + } + if (typeof value === 'function') { + const name = value.displayName || value.name || '' + if (name.endsWith('Icon') || name === 'Icon') return true + } + return false +} + +const functionToIconKey = (fn) => { + if (typeof fn !== 'function') return null + const name = fn.displayName || fn.name || '' + if (!name.endsWith('Icon')) return null + const base = name.slice(0, -4) + if (!base) return null + return base.charAt(0).toLowerCase() + base.slice(1) +} + +const serializeJsFunction = (fn) => { + try { + return { __js: Function.prototype.toString.call(fn) } + } catch { + return undefined + } +} + +const serializeValue = (value, key) => { + if (value == null) return value + if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { + return value + } + if (typeof value === 'bigint') { + return value.toString() + } + if (value instanceof Date) { + return value.toISOString() + } + if (typeof value === 'function') { + if (isReactish(value) || SKIP_KEYS.has(key)) { + return undefined + } + if (FUNCTION_KEYS.has(key) || key == null) { + return serializeJsFunction(value) + } + return serializeJsFunction(value) + } + if (Array.isArray(value)) { + return value + .map((item) => serializeValue(item, key)) + .filter((item) => item !== undefined) + } + if (isReactish(value)) { + return undefined + } + if (!isPlainObject(value)) { + return undefined + } + + const result = {} + for (const [childKey, childValue] of Object.entries(value)) { + if (SKIP_KEYS.has(childKey) && childKey !== 'pages') { + if (childKey === 'icon' && typeof childValue === 'function') { + const iconKey = functionToIconKey(childValue) + if (iconKey) { + result.iconKey = iconKey + } + } + continue + } + if (childKey === 'pages' && Array.isArray(childValue)) { + result.pages = childValue + .map((page) => { + if (!page || typeof page !== 'object') return null + return { + name: page.name + } + }) + .filter((page) => page?.name) + continue + } + const serialized = serializeValue(childValue, childKey) + if (serialized !== undefined) { + result[childKey] = serialized + } + } + return result +} + +const serializeModel = (model) => { + if (!model || typeof model !== 'object') return null + + const iconKey = + model.iconKey || functionToIconKey(model.icon) || model.name || null + + const serialized = serializeValue(model, null) || {} + serialized.name = model.name + serialized.label = model.label + serialized.labelPlural = model.labelPlural + serialized.url = typeof model.url === 'string' ? model.url : undefined + serialized.prefix = model.prefix + serialized.endpoint = model.endpoint || `${String(model.name || '').toLowerCase()}s` + serialized.iconKey = iconKey + serialized.columns = Array.isArray(model.columns) ? model.columns : [] + serialized.filters = Array.isArray(model.filters) ? model.filters : [] + serialized.sorters = Array.isArray(model.sorters) ? model.sorters : [] + + if (Array.isArray(model.actions)) { + serialized.actions = model.actions + .map((action) => { + if (!action || typeof action !== 'object') return null + if (action.type === 'divider') { + return { type: 'divider' } + } + const next = serializeValue(action, null) || {} + if (typeof action.icon === 'function') { + const actionIconKey = functionToIconKey(action.icon) + if (actionIconKey) next.iconKey = actionIconKey + } + delete next.content + delete next.children + return next + }) + .filter(Boolean) + } + + if (Array.isArray(model.properties)) { + serialized.properties = serializeValue(model.properties, 'properties') + } + + return serialized +} + +const attachModelsToSidebarItems = (items, modelsByUrl) => { + if (!Array.isArray(items)) return [] + return items + .map((item) => { + if (!item || item.type === 'divider') { + return { type: 'divider' } + } + const next = { + key: item.key, + label: item.label, + iconKey: item.iconKey, + path: item.path + } + if (item.path && modelsByUrl.has(item.path)) { + next.model = modelsByUrl.get(item.path) + } + if (Array.isArray(item.children) && item.children.length > 0) { + next.children = attachModelsToSidebarItems(item.children, modelsByUrl) + if ( + !next.model && + !next.children.some((child) => child.model || child.children) + ) { + return null + } + } + if (!next.model && !next.children) { + return null + } + return next + }) + .filter(Boolean) +} + +export function serializeDesktopBundle() { + const models = serializeDesktopModels() + const modelsByUrl = new Map( + models.filter((model) => model.url).map((model) => [model.url, model.name]) + ) + + const sidebars = getSidebarMenuSections({ includeDev: false }).map( + (section) => ({ + key: section.key, + label: section.label, + iconKey: section.iconKey, + items: attachModelsToSidebarItems(section.items, modelsByUrl) + }) + ) + + const icons = buildLegacyIconUrlMap() + const registerIconKey = (iconKey) => { + if (!iconKey) return + if (icons[iconKey] || icons[iconKey.toLowerCase()]) return + const urls = getLegacyIconUrl(iconKey, icons) + if (urls) { + icons[iconKey] = urls + } + } + + const registerSidebarIcons = (items) => { + if (!Array.isArray(items)) return + for (const item of items) { + registerIconKey(item?.iconKey) + registerSidebarIcons(item?.children) + } + } + + for (const model of models) { + registerIconKey(model.iconKey) + if (Array.isArray(model.actions)) { + for (const action of model.actions) { + registerIconKey(action?.iconKey) + } + } + } + for (const sidebar of sidebars) { + registerIconKey(sidebar.iconKey) + registerSidebarIcons(sidebar.items) + } + + return { + version: packageJson.version, + webAppUrl: config.webAppUrl, + apiUrl: config.backendUrl, + wsUrl: config.apiServerUrl, + printServerUrl: config.printServerUrl, + auth: { + loginPath: '/auth/web/login', + tokenPath: '/auth/web/token', + refreshPath: '/auth/refresh', + userPath: '/auth/user', + logoutPath: '/auth/logout' + }, + helpers: { + evaluateVariable: { __js: evaluateVariable.toString() } + }, + icons, + sidebars, + models: models.map((model) => ({ + name: model.name, + url: `/desktop/models/${model.name}.json` + })) + } +} + +export function serializeDesktopModels() { + return objectModels.map(serializeModel).filter(Boolean) +} diff --git a/src/desktop/vitePlugin.js b/src/desktop/vitePlugin.js new file mode 100644 index 00000000..2e6c12ae --- /dev/null +++ b/src/desktop/vitePlugin.js @@ -0,0 +1,121 @@ +/* eslint-env node */ +import fs from 'node:fs' +import path from 'node:path' +import { createServer } from 'vite' + +const OUTPUT_RELATIVE = 'public/desktop/bundle.json' +const MODELS_DIR_RELATIVE = 'public/desktop/models' +const GENERATE_FLAG = 'FARMCONTROL_GENERATING_BUNDLE' + +const shouldRegenerate = (file) => { + const normalized = file.replace(/\\/g, '/') + if (normalized.endsWith('/public/desktop/bundle.json')) return false + if (normalized.includes('/public/desktop/models/')) return false + return ( + normalized.includes('/src/database/') || + normalized.includes('/public/legacyicons16/') || + normalized.includes('/public/legacyicons32/') || + normalized.includes('/src/config.js') || + normalized.includes('/src/desktop/serializeBundle') || + normalized.includes('/src/desktop/legacyIcons') + ) +} + +function writeModelFiles(models) { + const modelsDir = path.resolve(process.cwd(), MODELS_DIR_RELATIVE) + fs.mkdirSync(modelsDir, { recursive: true }) + + const written = new Set() + for (const model of models) { + if (!model?.name) continue + const fileName = `${model.name}.json` + written.add(fileName) + fs.writeFileSync( + path.join(modelsDir, fileName), + `${JSON.stringify(model, null, 2)}\n` + ) + } + + for (const file of fs.readdirSync(modelsDir)) { + if (!file.endsWith('.json') || written.has(file)) continue + fs.unlinkSync(path.join(modelsDir, file)) + } +} + +async function writeDesktopBundle(vite) { + const { serializeDesktopBundle, serializeDesktopModels } = await vite.ssrLoadModule( + '/src/desktop/serializeBundle.js' + ) + const bundle = serializeDesktopBundle() + const models = serializeDesktopModels() + const outputPath = path.resolve(process.cwd(), OUTPUT_RELATIVE) + fs.mkdirSync(path.dirname(outputPath), { recursive: true }) + fs.writeFileSync(outputPath, `${JSON.stringify(bundle, null, 2)}\n`) + writeModelFiles(models) + return { outputPath, modelCount: models.length } +} + +function debounce(fn, wait) { + let timer + return (...args) => { + clearTimeout(timer) + timer = setTimeout(() => fn(...args), wait) + } +} + +export function desktopBundlePlugin() { + let command = 'serve' + + return { + name: 'farmcontrol-desktop-bundle', + configResolved(config) { + command = config.command + }, + configureServer(server) { + if (process.env[GENERATE_FLAG]) return + + const generate = async () => { + try { + const { outputPath, modelCount } = await writeDesktopBundle(server) + server.config.logger.info( + `[desktop-bundle] wrote ${path.relative(process.cwd(), outputPath)} and ${modelCount} model files` + ) + } catch (error) { + server.config.logger.error( + `[desktop-bundle] failed to generate bundle: ${error.stack || error.message}` + ) + } + } + + const generateDebounced = debounce(generate, 300) + + if (server.httpServer) { + server.httpServer.once('listening', generate) + } else { + setTimeout(generate, 0) + } + + server.watcher.on('change', (file) => { + if (shouldRegenerate(file)) generateDebounced() + }) + }, + async buildStart() { + if (command !== 'build' || process.env[GENERATE_FLAG]) return + + process.env[GENERATE_FLAG] = '1' + const vite = await createServer({ + server: { middlewareMode: true, hmr: false }, + appType: 'custom' + }) + try { + const { outputPath, modelCount } = await writeDesktopBundle(vite) + vite.config.logger.info( + `[desktop-bundle] wrote ${path.relative(process.cwd(), outputPath)} and ${modelCount} model files` + ) + } finally { + await vite.close() + delete process.env[GENERATE_FLAG] + } + } + } +} diff --git a/src/pages/DesktopAuthComplete.jsx b/src/pages/DesktopAuthComplete.jsx new file mode 100644 index 00000000..8f631cbb --- /dev/null +++ b/src/pages/DesktopAuthComplete.jsx @@ -0,0 +1,9 @@ +const DesktopAuthComplete = () => { + return ( +
+      Login complete. You can close this window.
+    
+ ) +} + +export default DesktopAuthComplete diff --git a/vite.config.js b/vite.config.js index 2594c1e5..98017f89 100644 --- a/vite.config.js +++ b/vite.config.js @@ -6,6 +6,7 @@ import svgr from 'vite-plugin-svgr' import path from 'path' import { fileURLToPath } from 'url' import { visualizer } from 'rollup-plugin-visualizer' +import { desktopBundlePlugin } from './src/desktop/vitePlugin.js' const require = createRequire(import.meta.url) const svgo = require('vite-plugin-svgo') @@ -90,6 +91,7 @@ export default defineConfig({ svgo(), svgr(), eslintPlugin(), + desktopBundlePlugin(), visualizer(), // Transform index.html paths to absolute when building for Cloudflare Pages isCloudflare && {