├── .changeset ├── README.md └── config.json ├── .eslintignore ├── .eslintrc.js ├── .github ├── actions │ └── setup-repo │ │ └── action.yml └── workflows │ ├── ci.yml │ └── publish.yml ├── .gitignore ├── .npmrc ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── .vscode ├── launch.json └── settings.json ├── LICENSE ├── README.md ├── apps └── electron-client │ ├── .eslintrc.js │ ├── .gitignore │ ├── README.md │ ├── assets │ ├── Icon-Template.png │ └── Icon-Template@2x.png │ ├── forge.config.ts │ ├── package.json │ ├── postcss.config.js │ ├── src │ ├── constants.ts │ ├── index.html │ ├── index.ts │ ├── menu.ts │ ├── nodeInstaller.html │ ├── nodeInstaller │ │ ├── App.tsx │ │ ├── events.ts │ │ ├── extendWindow.d.ts │ │ ├── preload.ts │ │ ├── renderer.ts │ │ ├── styles.scss │ │ └── types.ts │ ├── nrm.ts │ ├── preload.ts │ ├── renderer.ts │ ├── renderer │ │ ├── App.tsx │ │ ├── components │ │ │ ├── Detail │ │ │ │ ├── index.tsx │ │ │ │ └── markdown.scss │ │ │ ├── Devtool.tsx │ │ │ ├── ErrorBoundary.tsx │ │ │ ├── Form │ │ │ │ └── index.tsx │ │ │ ├── Highlight.tsx │ │ │ ├── Icon │ │ │ │ ├── README.md │ │ │ │ ├── images │ │ │ │ │ ├── add-person-16.svg │ │ │ │ │ ├── airplane-16.svg │ │ │ │ │ ├── airplane-filled-16.svg │ │ │ │ │ ├── airplane-landing-16.svg │ │ │ │ │ ├── airplane-takeoff-16.svg │ │ │ │ │ ├── airpods-16.svg │ │ │ │ │ ├── alarm-16.svg │ │ │ │ │ ├── alarm-ringing-16.svg │ │ │ │ │ ├── align-centre-16.svg │ │ │ │ │ ├── align-left-16.svg │ │ │ │ │ ├── align-right-16.svg │ │ │ │ │ ├── american-football-16.svg │ │ │ │ │ ├── anchor-16.svg │ │ │ │ │ ├── anchor-16.svg.svg │ │ │ │ │ ├── app-window-16.svg │ │ │ │ │ ├── app-window-16.svg.svg │ │ │ │ │ ├── app-window-grid-2x2-16.svg │ │ │ │ │ ├── app-window-grid-3x3-16.svg │ │ │ │ │ ├── app-window-grid-3x3-16.svg.svg │ │ │ │ │ ├── app-window-list-16 (1).svg │ │ │ │ │ ├── app-window-list-16.svg │ │ │ │ │ ├── app-window-list-16.svg.svg │ │ │ │ │ ├── app-window-sidebar-left-16.svg │ │ │ │ │ ├── app-window-sidebar-right-16.svg │ │ │ │ │ ├── arrow-clockwise-16.svg │ │ │ │ │ ├── arrow-clockwise-16.svg.svg │ │ │ │ │ ├── arrow-counter-clockwise-16.svg │ │ │ │ │ ├── arrow-down-16.svg │ │ │ │ │ ├── arrow-down-circle-16.svg │ │ │ │ │ ├── arrow-down-circle-filled-16.svg │ │ │ │ │ ├── arrow-left-16.svg │ │ │ │ │ ├── arrow-left-16.svg.svg │ │ │ │ │ ├── arrow-left-circle-16.svg │ │ │ │ │ ├── arrow-left-circle-filled-16.svg │ │ │ │ │ ├── arrow-ne-16.svg │ │ │ │ │ ├── arrow-ne-16.svg.svg │ │ │ │ │ ├── arrow-right-16.svg │ │ │ │ │ ├── arrow-right-16.svg.svg │ │ │ │ │ ├── arrow-right-circle-16.svg │ │ │ │ │ ├── arrow-right-circle-filled-16.svg │ │ │ │ │ ├── arrow-up-16.svg │ │ │ │ │ ├── arrow-up-circle-16.svg │ │ │ │ │ ├── arrow-up-circle-filled-16.svg │ │ │ │ │ ├── at-symbol-16.svg │ │ │ │ │ ├── band-aid-16.svg │ │ │ │ │ ├── bank-note-16.svg │ │ │ │ │ ├── bar-chart-16.svg │ │ │ │ │ ├── bar-code-16.svg │ │ │ │ │ ├── bath-tub-16.svg │ │ │ │ │ ├── battery-16.svg │ │ │ │ │ ├── battery-16.svg.svg │ │ │ │ │ ├── battery-charging-16.svg │ │ │ │ │ ├── battery-disabled-16.svg │ │ │ │ │ ├── bell-16.svg │ │ │ │ │ ├── bell-16.svg.svg │ │ │ │ │ ├── bell-disabled-16.svg │ │ │ │ │ ├── bike-16.svg │ │ │ │ │ ├── bike-16.svg.svg │ │ │ │ │ ├── binoculars-16.svg │ │ │ │ │ ├── bird-16.svg │ │ │ │ │ ├── blank-document-16.svg │ │ │ │ │ ├── bluetooth-16.svg │ │ │ │ │ ├── boat-16.svg │ │ │ │ │ ├── bold-16.svg │ │ │ │ │ ├── bolt-16.svg │ │ │ │ │ ├── bolt-disabled-16.svg │ │ │ │ │ ├── book-16.svg │ │ │ │ │ ├── bookmark-16.svg │ │ │ │ │ ├── box-16.svg │ │ │ │ │ ├── brush-16.svg │ │ │ │ │ ├── bug-16.svg │ │ │ │ │ ├── bullet-points-16.svg │ │ │ │ │ ├── bulls-eye-16.svg │ │ │ │ │ ├── buoy-16.svg │ │ │ │ │ ├── calculator-16.svg │ │ │ │ │ ├── calendar-16.svg │ │ │ │ │ ├── camera-16.svg │ │ │ │ │ ├── car-16.svg │ │ │ │ │ ├── cart-16.svg │ │ │ │ │ ├── cd-16.svg │ │ │ │ │ ├── center-16.svg │ │ │ │ │ ├── check-16.svg │ │ │ │ │ ├── check-circle-16.svg │ │ │ │ │ ├── chess-piece-16.svg │ │ │ │ │ ├── chevron-down-16.svg │ │ │ │ │ ├── chevron-down-small-16.svg │ │ │ │ │ ├── chevron-left-16.svg │ │ │ │ │ ├── chevron-left-small-16.svg │ │ │ │ │ ├── chevron-right-16.svg │ │ │ │ │ ├── chevron-right-small-16.svg │ │ │ │ │ ├── chevron-up-16.svg │ │ │ │ │ ├── chevron-up-small-16.svg │ │ │ │ │ ├── circle-16.svg │ │ │ │ │ ├── circle-ellipsis-16.svg │ │ │ │ │ ├── circle-filled-16.svg │ │ │ │ │ ├── circle-progress-100-16.svg │ │ │ │ │ ├── circle-progress-16.svg │ │ │ │ │ ├── circle-progress-25-16.svg │ │ │ │ │ ├── circle-progress-50-16.svg │ │ │ │ │ ├── circle-progress-75-16.svg │ │ │ │ │ ├── clear-formatting-16.svg │ │ │ │ │ ├── clock-16.svg │ │ │ │ │ ├── cloud-16.svg │ │ │ │ │ ├── cloud-lightning-16.svg │ │ │ │ │ ├── cloud-rain-16.svg │ │ │ │ │ ├── cloud-snow-16.svg │ │ │ │ │ ├── cloud-sun-16.svg │ │ │ │ │ ├── code-16.svg │ │ │ │ │ ├── code-block-16.svg │ │ │ │ │ ├── cog-16.svg │ │ │ │ │ ├── coin-16.svg │ │ │ │ │ ├── coins-16.svg │ │ │ │ │ ├── compass-16.svg │ │ │ │ │ ├── computer-chip-16.svg │ │ │ │ │ ├── contrast-16.svg │ │ │ │ │ ├── copy-clipboard-16.svg │ │ │ │ │ ├── credit-card-16.svg │ │ │ │ │ ├── cricket-ball-16.svg │ │ │ │ │ ├── crop-16.svg │ │ │ │ │ ├── crown-16.svg │ │ │ │ │ ├── crypto-16.svg │ │ │ │ │ ├── delete-document-16.svg │ │ │ │ │ ├── desktop-16.svg │ │ │ │ │ ├── dna-16.svg │ │ │ │ │ ├── dot-16.svg │ │ │ │ │ ├── download-16.svg │ │ │ │ │ ├── edit-shape-16.svg │ │ │ │ │ ├── eject-16.svg │ │ │ │ │ ├── ellipsis-16.svg │ │ │ │ │ ├── emoji-16.svg │ │ │ │ │ ├── envelope-16.svg │ │ │ │ │ ├── eraser-16.svg │ │ │ │ │ ├── exclamationmark-16.svg │ │ │ │ │ ├── exclamationmark-2-16.svg │ │ │ │ │ ├── exclamationmark-3-16.svg │ │ │ │ │ ├── eye-16.svg │ │ │ │ │ ├── eye-disabled-16.svg │ │ │ │ │ ├── eye-dropper-16.svg │ │ │ │ │ ├── female-16.svg │ │ │ │ │ ├── film-strip-16.svg │ │ │ │ │ ├── filter-16.svg │ │ │ │ │ ├── finder-16.svg │ │ │ │ │ ├── fingerprint-16.svg │ │ │ │ │ ├── folder-16.svg │ │ │ │ │ ├── footprints-16.svg │ │ │ │ │ ├── forward-16.svg │ │ │ │ │ ├── forward-filled-16.svg │ │ │ │ │ ├── fountain-tip-16.svg │ │ │ │ │ ├── full-signal-16.svg │ │ │ │ │ ├── game-controller-16.svg │ │ │ │ │ ├── gauge-16.svg │ │ │ │ │ ├── geopin-16.svg │ │ │ │ │ ├── germ-16.svg │ │ │ │ │ ├── gift-16.svg │ │ │ │ │ ├── glasses-16.svg │ │ │ │ │ ├── globe-01-16.svg │ │ │ │ │ ├── goal-16.svg │ │ │ │ │ ├── hammer-16.svg │ │ │ │ │ ├── hard-drive-16.svg │ │ │ │ │ ├── hashtag-16.svg │ │ │ │ │ ├── headphones-16.svg │ │ │ │ │ ├── heart-16.svg │ │ │ │ │ ├── heart-disabled-16.svg │ │ │ │ │ ├── heartbeat-16.svg │ │ │ │ │ ├── highlight-16.svg │ │ │ │ │ ├── hourglass-16.svg │ │ │ │ │ ├── house-16.svg │ │ │ │ │ ├── image-16.svg │ │ │ │ │ ├── important-01-16 (1).svg │ │ │ │ │ ├── important-01-16 (2).svg │ │ │ │ │ ├── important-01-16.svg │ │ │ │ │ ├── info-01-16.svg │ │ │ │ │ ├── italics-16.svg │ │ │ │ │ ├── key-16.svg │ │ │ │ │ ├── keyboard-16.svg │ │ │ │ │ ├── layers-16.svg │ │ │ │ │ ├── leaderboard-16.svg │ │ │ │ │ ├── leaf-16.svg │ │ │ │ │ ├── light-bulb-16.svg │ │ │ │ │ ├── light-bulb-off-16.svg │ │ │ │ │ ├── line-chart-16.svg │ │ │ │ │ ├── link-16.svg │ │ │ │ │ ├── livestream-01-16.svg │ │ │ │ │ ├── livestream-disabled-01-16.svg │ │ │ │ │ ├── lock-16.svg │ │ │ │ │ ├── lock-disabled-16.svg │ │ │ │ │ ├── lock-unlocked-16.svg │ │ │ │ │ ├── logout-16.svg │ │ │ │ │ ├── lorry-16.svg │ │ │ │ │ ├── lowercase-16.svg │ │ │ │ │ ├── magnifying-glass-16.svg │ │ │ │ │ ├── male-16.svg │ │ │ │ │ ├── map-16.svg │ │ │ │ │ ├── mask-16.svg │ │ │ │ │ ├── maximize-16.svg │ │ │ │ │ ├── medical-support-16.svg │ │ │ │ │ ├── megaphone-16.svg │ │ │ │ │ ├── memory-stick-16.svg │ │ │ │ │ ├── microphone-16.svg │ │ │ │ │ ├── microphone-disabled-16.svg │ │ │ │ │ ├── minimize-16.svg │ │ │ │ │ ├── minus-16.svg │ │ │ │ │ ├── minus-circle-16.svg │ │ │ │ │ ├── minus-circle-filled-16.svg │ │ │ │ │ ├── mobile-16.svg │ │ │ │ │ ├── monitor-16.svg │ │ │ │ │ ├── moon-16.svg │ │ │ │ │ ├── mountain-16.svg │ │ │ │ │ ├── mouse-16.svg │ │ │ │ │ ├── multiply-16.svg │ │ │ │ │ ├── music-16.svg │ │ │ │ │ ├── network-16.svg │ │ │ │ │ ├── new-document-16.svg │ │ │ │ │ ├── new-folder-16.svg │ │ │ │ │ ├── paperclip-16.svg │ │ │ │ │ ├── patch-16.svg │ │ │ │ │ ├── pause-16.svg │ │ │ │ │ ├── pause-filled-16.svg │ │ │ │ │ ├── pencil-16.svg │ │ │ │ │ ├── person-16.svg │ │ │ │ │ ├── person-circle-16.svg │ │ │ │ │ ├── person-lines-16.svg │ │ │ │ │ ├── phone-16.svg │ │ │ │ │ ├── phone-ringing-16.svg │ │ │ │ │ ├── pie-chart-16.svg │ │ │ │ │ ├── pill-16.svg │ │ │ │ │ ├── pin-16.svg │ │ │ │ │ ├── pin-disabled-16.svg │ │ │ │ │ ├── play-16.svg │ │ │ │ │ ├── play-filled-16.svg │ │ │ │ │ ├── plug-16.svg │ │ │ │ │ ├── plus-16.svg │ │ │ │ │ ├── plus-circle-16.svg │ │ │ │ │ ├── plus-circle-filled-16.svg │ │ │ │ │ ├── plus-minus-divide-multiply-16.svg │ │ │ │ │ ├── power-16.svg │ │ │ │ │ ├── print-16.svg │ │ │ │ │ ├── question-mark-circle-16.svg │ │ │ │ │ ├── quotation-marks-16.svg │ │ │ │ │ ├── quote-block-16.svg │ │ │ │ │ ├── racket-16.svg │ │ │ │ │ ├── raindrop-16.svg │ │ │ │ │ ├── raycast-logo-neg-16.svg │ │ │ │ │ ├── raycast-logo-pos-16.svg │ │ │ │ │ ├── receipt-16.svg │ │ │ │ │ ├── redo-16.svg │ │ │ │ │ ├── remove-person-16.svg │ │ │ │ │ ├── repeat-16.svg │ │ │ │ │ ├── reply-16.svg │ │ │ │ │ ├── rewind-16.svg │ │ │ │ │ ├── rewind-filled-16.svg │ │ │ │ │ ├── rocket-16.svg │ │ │ │ │ ├── rosette-16.svg │ │ │ │ │ ├── rotate-anti-clockwise-16.svg │ │ │ │ │ ├── rotate-clockwise-16.svg │ │ │ │ │ ├── ruler-16.svg │ │ │ │ │ ├── save-document-16.svg │ │ │ │ │ ├── shield-01-16.svg │ │ │ │ │ ├── shuffle-16.svg │ │ │ │ │ ├── signal-1-16.svg │ │ │ │ │ ├── signal-2-16.svg │ │ │ │ │ ├── signal-3-16.svg │ │ │ │ │ ├── snippets-16.svg │ │ │ │ │ ├── snowflake-16.svg │ │ │ │ │ ├── soccer-ball-16.svg │ │ │ │ │ ├── speaker-down-16.svg │ │ │ │ │ ├── speaker-high-16.svg │ │ │ │ │ ├── speaker-low-16.svg │ │ │ │ │ ├── speaker-off-16.svg │ │ │ │ │ ├── speaker-on-16.svg │ │ │ │ │ ├── speaker-up-16.svg │ │ │ │ │ ├── speech-bubble-16.svg │ │ │ │ │ ├── speech-bubble-active-16.svg │ │ │ │ │ ├── speech-bubble-important-16.svg │ │ │ │ │ ├── star-16.svg │ │ │ │ │ ├── star-circle-16.svg │ │ │ │ │ ├── star-disabled-16.svg │ │ │ │ │ ├── stars-16.svg │ │ │ │ │ ├── stop-16.svg │ │ │ │ │ ├── stop-filled-16.svg │ │ │ │ │ ├── stopwatch-16.svg │ │ │ │ │ ├── store-16.svg │ │ │ │ │ ├── strike-through-16.svg │ │ │ │ │ ├── sun-16.svg │ │ │ │ │ ├── sunrise-16.svg │ │ │ │ │ ├── swatch-16.svg │ │ │ │ │ ├── switch-16.svg │ │ │ │ │ ├── syringe-16.svg │ │ │ │ │ ├── tag-16.svg │ │ │ │ │ ├── temperature-16.svg │ │ │ │ │ ├── tennis-ball-16.svg │ │ │ │ │ ├── terminal-16.svg │ │ │ │ │ ├── text-16.svg │ │ │ │ │ ├── text-cursor-16.svg │ │ │ │ │ ├── torch-16.svg │ │ │ │ │ ├── train-16.svg │ │ │ │ │ ├── trash-16.svg │ │ │ │ │ ├── tray-16.svg │ │ │ │ │ ├── tree-16.svg │ │ │ │ │ ├── trophy-16.svg │ │ │ │ │ ├── two-people-16.svg │ │ │ │ │ ├── umbrella-16.svg │ │ │ │ │ ├── underline-16.svg │ │ │ │ │ ├── undo-16.svg │ │ │ │ │ ├── upload-16.svg │ │ │ │ │ ├── uppercase-16.svg │ │ │ │ │ ├── video-16.svg │ │ │ │ │ ├── wallet-16.svg │ │ │ │ │ ├── wand-16.svg │ │ │ │ │ ├── weights-16.svg │ │ │ │ │ ├── wifi-16.svg │ │ │ │ │ ├── wifi-disabled-16.svg │ │ │ │ │ ├── wrench-screwdriver-16.svg │ │ │ │ │ ├── wrist-watch-16.svg │ │ │ │ │ ├── x-mark-circle-16.svg │ │ │ │ │ └── x-mark-circle-filled-16.svg │ │ │ │ └── index.tsx │ │ │ ├── List │ │ │ │ ├── EmptyView.tsx │ │ │ │ ├── Item.tsx │ │ │ │ ├── ListFooter.tsx │ │ │ │ ├── RaycastDarkIcon.tsx │ │ │ │ ├── SubCommand.tsx │ │ │ │ ├── hooks.ts │ │ │ │ └── index.tsx │ │ │ ├── Navigation │ │ │ │ └── context.ts │ │ │ └── index.tsx │ │ ├── events.ts │ │ ├── lib │ │ │ └── typeUtils.ts │ │ ├── setupWS.ts │ │ ├── store.ts │ │ ├── styles │ │ │ ├── global.scss │ │ │ ├── index.css │ │ │ └── raycast.scss │ │ └── types.ts │ ├── runtime.ts │ ├── tray.ts │ ├── types │ │ └── svg.d.ts │ ├── utils │ │ └── commonPaths.ts │ └── window.ts │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── webpack.main.config.ts │ ├── webpack.plugins.ts │ ├── webpack.renderer.config.ts │ └── webpack.rules.ts ├── docs ├── app_flow.md ├── media │ ├── demo_todo.gif │ └── react_dev_tools.png └── prd.md ├── ecosystem.config.js ├── package.json ├── packages ├── blast-api │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src │ │ ├── @types │ │ │ └── reactAst.d.ts │ │ ├── Action │ │ │ └── index.tsx │ │ ├── ActionPanel │ │ │ ├── Section.tsx │ │ │ └── index.tsx │ │ ├── Cache.ts │ │ ├── Color.ts │ │ ├── Detail │ │ │ └── index.tsx │ │ ├── Form │ │ │ ├── TextField.tsx │ │ │ └── index.tsx │ │ ├── Icon │ │ │ └── index.tsx │ │ ├── LaunchType │ │ │ └── index.ts │ │ ├── List │ │ │ ├── Dropdown │ │ │ │ ├── Item.tsx │ │ │ │ └── index.tsx │ │ │ ├── EmptyView.tsx │ │ │ ├── Item │ │ │ │ ├── Accessory.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── LocalStorage │ │ │ └── index.ts │ │ ├── Navigation │ │ │ └── index.tsx │ │ ├── environment │ │ │ └── index.ts │ │ ├── index.ts │ │ └── internal │ │ │ ├── Error.ts │ │ │ ├── WsServerProvider.ts │ │ │ ├── hooks │ │ │ ├── index.ts │ │ │ └── useServerEvent.ts │ │ │ └── index.ts │ └── tsconfig.json ├── blast-cli │ ├── CHANGELOG.md │ ├── README.md │ ├── build.js │ ├── index.js │ └── package.json ├── blast-renderer │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src │ │ ├── @types │ │ │ └── svgImports.d.ts │ │ ├── README.md │ │ ├── __tests__ │ │ │ └── hello.test.ts │ │ ├── index.ts │ │ ├── renderer │ │ │ ├── elements │ │ │ │ ├── BaseElement.ts │ │ │ │ ├── Command.ts │ │ │ │ ├── PrimitiveElements.ts │ │ │ │ ├── createElement.ts │ │ │ │ ├── elements.ts │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── index.ts │ │ │ ├── reconciler.ts │ │ │ ├── render.ts │ │ │ └── types.ts │ │ └── server.ts │ └── tsconfig.json ├── blast-runtime │ ├── .eslintrc.js │ ├── CHANGELOG.md │ ├── README.md │ ├── build.js │ ├── nodemon.json │ ├── package.json │ ├── src │ │ ├── @types │ │ │ ├── raycast.d.ts │ │ │ └── react-devtools-core.d.ts │ │ ├── App.tsx │ │ ├── components │ │ │ ├── CommandList │ │ │ │ ├── index.tsx │ │ │ │ ├── loadCommands.ts │ │ │ │ └── utils.ts │ │ │ └── Store │ │ │ │ ├── StoreCommand.tsx │ │ │ │ ├── api.ts │ │ │ │ ├── index.ts │ │ │ │ └── npmClient.ts │ │ ├── constants.ts │ │ ├── index.ts │ │ ├── run.ts │ │ └── utils │ │ │ ├── connectDevtools.ts │ │ │ ├── nrm.ts │ │ │ ├── run.ts │ │ │ └── window.js │ └── tsconfig.json └── blast-utils │ ├── CHANGELOG.md │ ├── jest.config.js │ ├── package.json │ ├── src │ ├── debug.ts │ ├── index.ts │ └── nrm │ │ ├── index.ts │ │ ├── types.ts │ │ └── utils.ts │ ├── test │ └── nrm.spec.ts │ └── tsconfig.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── tools └── add-macos-cert.sh └── tsconfig.json /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [["@blastlauncher/*"]], 7 | "access": "public", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": ["@blastlauncher/electron-client"] 11 | } 12 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | .webpack -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | shamefully-hoist=true 2 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 18 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Ignore artifacts: 2 | build 3 | coverage 4 | dist -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "singleQuote": false 4 | } 5 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "cSpell.words": [ 4 | "Raycast" 5 | ] 6 | } -------------------------------------------------------------------------------- /apps/electron-client/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | browser: true, 5 | es6: true, 6 | node: true, 7 | }, 8 | extends: [ 9 | "eslint:recommended", 10 | "plugin:@typescript-eslint/eslint-recommended", 11 | "plugin:@typescript-eslint/recommended", 12 | "plugin:import/recommended", 13 | "plugin:import/electron", 14 | "plugin:import/typescript", 15 | ], 16 | parser: "@typescript-eslint/parser", 17 | rules: { 18 | "import/order": [ 19 | "error", 20 | { 21 | "newlines-between": "always", 22 | alphabetize: { 23 | order: "asc", 24 | caseInsensitive: true, 25 | }, 26 | }, 27 | ], 28 | }, 29 | }; 30 | -------------------------------------------------------------------------------- /apps/electron-client/README.md: -------------------------------------------------------------------------------- 1 | # The frontend of Blast 2 | 3 | The client app uses WebSocket to connect to the backend and then render the JSON element tree. 4 | 5 | Most of the code is inside `src/renderer`, which is a React app built with Electron. 6 | -------------------------------------------------------------------------------- /apps/electron-client/assets/Icon-Template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlastLauncher/blast/685e26bfdc5062fadf9cf5efedfd8877a204e220/apps/electron-client/assets/Icon-Template.png -------------------------------------------------------------------------------- /apps/electron-client/assets/Icon-Template@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlastLauncher/blast/685e26bfdc5062fadf9cf5efedfd8877a204e220/apps/electron-client/assets/Icon-Template@2x.png -------------------------------------------------------------------------------- /apps/electron-client/postcss.config.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-var-requires */ 2 | const tailwindcss = require("tailwindcss"); 3 | 4 | module.exports = { 5 | syntax: "postcss-scss", 6 | plugins: ["postcss-preset-env", tailwindcss], 7 | }; 8 | -------------------------------------------------------------------------------- /apps/electron-client/src/constants.ts: -------------------------------------------------------------------------------- 1 | import os from 'os' 2 | import path from 'path' 3 | 4 | export const USER_DIR = path.join(os.homedir(), '.blast') 5 | export const NODE_INSTALL_PATH = path.join(USER_DIR, 'node') 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Blast 6 | 7 | 8 |
9 | 10 | 11 | -------------------------------------------------------------------------------- /apps/electron-client/src/nodeInstaller.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Blast Node Installer 6 | 7 | 8 |
9 | 10 | 11 | -------------------------------------------------------------------------------- /apps/electron-client/src/nodeInstaller/extendWindow.d.ts: -------------------------------------------------------------------------------- 1 | interface Window { 2 | electron: { 3 | startNodeInstallation: () => Promise; 4 | exitAndStart: () => Promise; 5 | closeWindow: () => void; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /apps/electron-client/src/nodeInstaller/preload.ts: -------------------------------------------------------------------------------- 1 | import { contextBridge, ipcRenderer } from 'electron' 2 | 3 | import { EventTypes } from './types' 4 | 5 | contextBridge.exposeInMainWorld('electron', { 6 | startNodeInstallation: () => ipcRenderer.invoke(EventTypes.INSTALL_NODE), 7 | exitAndStart: () => ipcRenderer.invoke(EventTypes.EXIT_AND_START) 8 | }) 9 | 10 | -------------------------------------------------------------------------------- /apps/electron-client/src/nodeInstaller/renderer.ts: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { createRoot } from "react-dom/client"; 3 | import './styles.scss' 4 | 5 | import App from "./App"; 6 | 7 | function start() { 8 | const container = document.getElementById("app"); 9 | if (!container) { 10 | return; 11 | } 12 | 13 | const root = createRoot(container); 14 | 15 | root.render(React.createElement(App)); 16 | } 17 | 18 | start(); 19 | -------------------------------------------------------------------------------- /apps/electron-client/src/nodeInstaller/styles.scss: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | html, 6 | body, 7 | #app { 8 | height: 100%; 9 | } 10 | -------------------------------------------------------------------------------- /apps/electron-client/src/nodeInstaller/types.ts: -------------------------------------------------------------------------------- 1 | export const enum EventTypes { 2 | INSTALL_NODE = 'INSTALL_NODE', 3 | EXIT_AND_START = 'EXIT_AND_START', 4 | } 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/nrm.ts: -------------------------------------------------------------------------------- 1 | import { NRM } from '@blastlauncher/utils' 2 | 3 | import { NODE_INSTALL_PATH } from './constants' 4 | 5 | const NODE_VERSION = "v18.17.1" 6 | 7 | export const nrm = new NRM({ 8 | installPath: NODE_INSTALL_PATH, 9 | }) 10 | 11 | export function hasVersionInstalled () { 12 | return nrm.hasVersion(NODE_VERSION) 13 | } 14 | 15 | export function installNode () { 16 | return nrm.download(NODE_VERSION) 17 | } 18 | 19 | -------------------------------------------------------------------------------- /apps/electron-client/src/preload.ts: -------------------------------------------------------------------------------- 1 | import { contextBridge, ipcRenderer } from 'electron' 2 | 3 | import { EventTypes } from './renderer/types' 4 | 5 | contextBridge.exposeInMainWorld('electron', { 6 | closeWindow: () => ipcRenderer.invoke(EventTypes.CLOSE), 7 | }) 8 | 9 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/App.tsx: -------------------------------------------------------------------------------- 1 | import { TreeComponent } from "./components"; 2 | import { Devtool } from "./components/Devtool"; 3 | import { useRemoteBlastTree } from "./store"; 4 | 5 | export const App = () => { 6 | const { tree } = useRemoteBlastTree(); 7 | 8 | return ( 9 | <> 10 |
{tree && }
11 | 12 | 13 | 14 | ); 15 | }; 16 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Detail/index.tsx: -------------------------------------------------------------------------------- 1 | import rehypeStringify from 'rehype-stringify'; 2 | import { remark } from 'remark'; 3 | import remarkRehype from 'remark-rehype'; 4 | 5 | import './markdown.scss' 6 | 7 | export type DetailProps = { isLoading?: boolean, markdown?: string, navigationTitle?: string } 8 | export const Detail = ({ markdown }: DetailProps) => { 9 | const processedContent = markdown 10 | ? remark() 11 | .use(remarkRehype) 12 | .use(rehypeStringify) 13 | .processSync(markdown) 14 | .toString() 15 | : ''; 16 | return ( 17 |
18 | ); 19 | }; 20 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Detail/markdown.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../../../node_modules/github-markdown-css/github-markdown-dark.css"; 2 | 3 | .markdown-body { 4 | @apply w-full p-4 bg-transparent; 5 | 6 | pre { 7 | @apply text-xs w-full rounded-md; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Highlight.tsx: -------------------------------------------------------------------------------- 1 | import hljs from "highlight.js"; 2 | import { useEffect, useRef } from "react"; 3 | 4 | type HighlightProps = { 5 | children: string; 6 | className?: string; 7 | language?: string; 8 | }; 9 | 10 | export const Highlight = ({ children, className }: HighlightProps) => { 11 | const ref = useRef(null); 12 | 13 | useEffect(() => { 14 | if (ref.current) { 15 | hljs.highlightElement(ref.current); 16 | } 17 | }, []); 18 | 19 | return ( 20 | 21 | {children} 22 | 23 | ); 24 | }; 25 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/add-person-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/airpods-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/alarm-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/alarm-ringing-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/align-centre-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/align-left-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/align-right-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/american-football-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/anchor-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/anchor-16.svg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/app-window-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/app-window-16.svg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/app-window-grid-2x2-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/app-window-list-16 (1).svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/app-window-list-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/app-window-list-16.svg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/app-window-sidebar-left-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/app-window-sidebar-right-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-clockwise-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-clockwise-16.svg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-counter-clockwise-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-down-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-down-circle-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-down-circle-filled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-left-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-left-16.svg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-left-circle-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-left-circle-filled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-ne-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-ne-16.svg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-right-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-right-16.svg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-right-circle-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-right-circle-filled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-up-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-up-circle-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/arrow-up-circle-filled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/at-symbol-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/bank-note-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/bar-chart-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/bar-code-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/bath-tub-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/battery-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/battery-16.svg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/battery-charging-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/battery-disabled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/bike-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/bike-16.svg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/blank-document-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/bluetooth-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/boat-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/bold-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/bolt-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/bolt-disabled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/book-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/bookmark-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/box-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/brush-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/buoy-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/calendar-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/cart-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/cd-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/center-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/check-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/check-circle-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/chess-piece-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/chevron-down-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/chevron-down-small-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/chevron-left-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/chevron-left-small-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/chevron-right-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/chevron-right-small-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/chevron-up-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/chevron-up-small-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/circle-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/circle-ellipsis-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/circle-filled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/circle-progress-100-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/circle-progress-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/circle-progress-25-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/circle-progress-50-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/circle-progress-75-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/clock-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/cloud-lightning-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/cloud-rain-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/cloud-snow-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/cloud-sun-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/code-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/code-block-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/coin-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/coins-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/compass-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/computer-chip-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/contrast-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/copy-clipboard-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/credit-card-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/cricket-ball-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/crop-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/crown-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/crypto-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/delete-document-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/desktop-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/dna-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/dot-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/download-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/eject-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/ellipsis-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/envelope-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/eraser-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/exclamationmark-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/eye-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/eye-disabled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/eye-dropper-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/female-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/film-strip-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/filter-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/finder-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/fingerprint-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/folder-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/forward-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/forward-filled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/fountain-tip-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/full-signal-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/gauge-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/geopin-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/gift-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/glasses-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/globe-01-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/goal-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/hammer-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/hard-drive-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/hashtag-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/headphones-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/heart-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/heart-disabled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/heartbeat-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/highlight-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/hourglass-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/house-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/important-01-16 (1).svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/important-01-16 (2).svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/important-01-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/info-01-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/italics-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/key-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/keyboard-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/layers-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/leaderboard-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/leaf-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/light-bulb-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/line-chart-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/link-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/livestream-01-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/livestream-disabled-01-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/lock-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/lock-disabled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/lock-unlocked-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/logout-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/lorry-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/lowercase-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/magnifying-glass-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/male-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/map-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/mask-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/maximize-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/medical-support-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/memory-stick-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/minimize-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/minus-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/minus-circle-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/minus-circle-filled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/mobile-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/monitor-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/moon-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/mountain-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/mouse-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/multiply-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/music-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/network-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/new-document-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/new-folder-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/paperclip-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/pause-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/pause-filled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/pencil-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/person-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/phone-ringing-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/pie-chart-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/pill-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/pin-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/play-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/play-filled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/plug-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/plus-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/plus-circle-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/plus-circle-filled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/plus-minus-divide-multiply-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/power-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/print-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/question-mark-circle-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/quote-block-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/racket-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/raindrop-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/receipt-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/redo-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/remove-person-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/repeat-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/reply-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/rewind-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/rewind-filled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/rocket-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/rosette-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/rotate-anti-clockwise-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/rotate-clockwise-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/ruler-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/save-document-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/shield-01-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/shuffle-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/signal-1-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/signal-2-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/signal-3-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/snippets-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/snowflake-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/soccer-ball-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/speaker-down-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/speaker-high-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/speaker-low-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/speaker-off-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/speaker-on-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/speaker-up-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/star-circle-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/star-disabled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/stars-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/stop-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/stop-filled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/stopwatch-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/strike-through-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/sun-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/sunrise-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/swatch-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/switch-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/syringe-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/tag-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/temperature-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/tennis-ball-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/terminal-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/text-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/text-cursor-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/torch-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/trash-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/tray-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/tree-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/trophy-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/umbrella-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/underline-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/undo-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/upload-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/uppercase-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/video-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/wallet-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/weights-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/wifi-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/wifi-disabled-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/wrist-watch-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Icon/images/x-mark-circle-16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/List/EmptyView.tsx: -------------------------------------------------------------------------------- 1 | type Props = { 2 | title: string; 3 | description: string; 4 | icon: string; 5 | }; 6 | 7 | export const EmptyView = (props: Props): JSX.Element => { 8 | return ( 9 | <> 10 | {props.icon && {props.icon}} 11 | 12 | {props.title} 13 | {props.description} 14 | 15 | ); 16 | }; 17 | 18 | export default EmptyView; 19 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/List/Item.tsx: -------------------------------------------------------------------------------- 1 | export const Item = (): JSX.Element => { 2 | return null; 3 | }; 4 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/components/Navigation/context.ts: -------------------------------------------------------------------------------- 1 | import { createContext, useContext } from "react"; 2 | 3 | export const NavigationContext = createContext<{ 4 | pop: () => void; 5 | softPop: () => void; 6 | canPop: boolean; 7 | }>({ 8 | pop: () => { 9 | /* noop */ 10 | }, 11 | softPop: () => { 12 | /* noop */ 13 | }, 14 | canPop: false, 15 | }); 16 | 17 | export const useNavigationContext = () => { 18 | return useContext(NavigationContext); 19 | }; 20 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/events.ts: -------------------------------------------------------------------------------- 1 | import { ipcMain } from "electron"; 2 | 3 | import { hideMainWindow } from '../window' 4 | 5 | import { EventTypes } from "./types"; 6 | 7 | export function registerIPCMainEvents() { 8 | ipcMain.handle(EventTypes.CLOSE, async () => { 9 | hideMainWindow(); 10 | }); 11 | } 12 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/lib/typeUtils.ts: -------------------------------------------------------------------------------- 1 | export type ObjectFromList, V = string> = { 2 | [K in T extends ReadonlyArray ? U : never]: V; 3 | }; 4 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/setupWS.ts: -------------------------------------------------------------------------------- 1 | import { Client } from "rpc-websockets"; 2 | 3 | export function setupWS(onOpened: (ws: Client) => void) { 4 | const ws = new Client("ws://localhost:8763", { 5 | reconnect: true, 6 | }); 7 | 8 | ws.on("open", function () { 9 | onOpened(ws); 10 | }); 11 | } 12 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/styles/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | html, 6 | body, 7 | #app { 8 | height: 100%; 9 | } 10 | -------------------------------------------------------------------------------- /apps/electron-client/src/renderer/types.ts: -------------------------------------------------------------------------------- 1 | import { Client } from "rpc-websockets"; 2 | 3 | export type BlastComponent = { 4 | elementType: string; 5 | props: Record; 6 | children: BlastComponent[]; 7 | }; 8 | 9 | export type BlastStore = { 10 | tree: BlastComponent | null; 11 | setTree: (tree: BlastComponent) => void; 12 | 13 | ws: Client | null; 14 | setWs: (ws: Client) => void; 15 | }; 16 | 17 | export const enum EventTypes { 18 | CLOSE = "close", 19 | } 20 | -------------------------------------------------------------------------------- /apps/electron-client/src/types/svg.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.svg" { 2 | const content: any; 3 | export default content; 4 | } 5 | 6 | -------------------------------------------------------------------------------- /apps/electron-client/src/utils/commonPaths.ts: -------------------------------------------------------------------------------- 1 | import os from 'os' 2 | import path from 'path' 3 | 4 | import fs from 'fs-extra' 5 | 6 | export const blastHome = path.join(os.homedir(), '.blast') 7 | export const extensionHome = path.join(blastHome, 'extensions') 8 | export const logDir = path.join(blastHome, 'logs') 9 | 10 | 11 | fs.ensureDirSync(blastHome) 12 | fs.ensureDirSync(extensionHome) 13 | fs.ensureDirSync(logDir) 14 | -------------------------------------------------------------------------------- /apps/electron-client/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: ["src/**/*"], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | }; 9 | -------------------------------------------------------------------------------- /apps/electron-client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES6", 4 | "allowJs": true, 5 | "module": "commonjs", 6 | "skipLibCheck": true, 7 | "esModuleInterop": true, 8 | "noImplicitAny": true, 9 | "sourceMap": true, 10 | "baseUrl": ".", 11 | "outDir": "dist", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "paths": { 15 | "*": [ 16 | "node_modules/*" 17 | ] 18 | }, 19 | "jsx": "react-jsx" 20 | }, 21 | "include": [ 22 | "src/**/*" 23 | ] 24 | } -------------------------------------------------------------------------------- /apps/electron-client/webpack.plugins.ts: -------------------------------------------------------------------------------- 1 | import type IForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin'; 2 | 3 | // eslint-disable-next-line @typescript-eslint/no-var-requires 4 | const ForkTsCheckerWebpackPlugin: typeof IForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); 5 | 6 | export const plugins = [ 7 | new ForkTsCheckerWebpackPlugin({ 8 | logger: 'webpack-infrastructure', 9 | }), 10 | ]; 11 | -------------------------------------------------------------------------------- /apps/electron-client/webpack.renderer.config.ts: -------------------------------------------------------------------------------- 1 | import type { Configuration } from "webpack"; 2 | 3 | import { plugins } from "./webpack.plugins"; 4 | import { rules } from "./webpack.rules"; 5 | 6 | rules.push({ 7 | test: /\.(scss|css)$/, 8 | use: [{ loader: "style-loader" }, { loader: "css-loader" }, { loader: "postcss-loader" }, { loader: "sass-loader" }], 9 | }); 10 | 11 | rules.push({ 12 | test: /\.tsx?$/, 13 | use: "ts-loader", 14 | exclude: /node_modules/, 15 | }); 16 | 17 | rules.push({ 18 | test: /\.svg$/, 19 | use: ["@svgr/webpack"], 20 | }); 21 | 22 | export const rendererConfig: Configuration = { 23 | devtool: "source-map", 24 | module: { 25 | rules, 26 | }, 27 | plugins, 28 | resolve: { 29 | extensions: [".js", ".ts", ".jsx", ".tsx", ".css"], 30 | }, 31 | }; 32 | -------------------------------------------------------------------------------- /docs/media/demo_todo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlastLauncher/blast/685e26bfdc5062fadf9cf5efedfd8877a204e220/docs/media/demo_todo.gif -------------------------------------------------------------------------------- /docs/media/react_dev_tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlastLauncher/blast/685e26bfdc5062fadf9cf5efedfd8877a204e220/docs/media/react_dev_tools.png -------------------------------------------------------------------------------- /ecosystem.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | apps: [ 3 | { 4 | name: 'runtime', 5 | script: "pnpm run watch-runtime", 6 | }, 7 | { 8 | name: 'client', 9 | script: "pnpm run start-client" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /packages/blast-api/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @blastlauncher/api 2 | 3 | ## 1.1.0 4 | 5 | ### Patch Changes 6 | 7 | - Updated dependencies 8 | - @blastlauncher/renderer@1.1.0 9 | 10 | ## 1.0.5 11 | 12 | ### Patch Changes 13 | 14 | - Update README and fixing `prepublishOnly` script 15 | - Updated dependencies 16 | - @blastlauncher/renderer@1.0.5 17 | 18 | ## 1.0.1 19 | 20 | ### Patch Changes 21 | 22 | - Initial npm publish 23 | - Updated dependencies 24 | - @blastlauncher/utils@1.0.1 25 | - @blastlauncher/renderer@1.0.1 26 | -------------------------------------------------------------------------------- /packages/blast-api/README.md: -------------------------------------------------------------------------------- 1 | # `@blastlauncher/api` 2 | 3 | The `@blastlauncher/api` is a superset and open source implementation of `@raycast/api`. 4 | 5 | The components will used by the `@blastlauncher/runtime`, then being rendered and serialized to JSON in `@blastlauncher/renderer` 6 | 7 | During build stage or runtime, the `@raycast/api` will be replaced by `@blastlauncher/api` automatically. 8 | -------------------------------------------------------------------------------- /packages/blast-api/src/ActionPanel/Section.tsx: -------------------------------------------------------------------------------- 1 | import { ElementTypes } from "@blastlauncher/renderer/src"; 2 | import type { ActionPanel } from "raycast-original"; 3 | 4 | 5 | type ActionPanelSectionPropKeys = (keyof ActionPanel.Section.Props)[]; 6 | const serializedKeys: ActionPanelSectionPropKeys = ["title"]; 7 | 8 | export const Section = (props: ActionPanel.Section.Props) => { 9 | return ; 10 | }; 11 | -------------------------------------------------------------------------------- /packages/blast-api/src/ActionPanel/index.tsx: -------------------------------------------------------------------------------- 1 | import { ElementTypes } from "@blastlauncher/renderer/src"; 2 | import type { ActionPanel as RActionPanel } from "raycast-original"; 3 | import { FunctionComponent } from "react"; 4 | 5 | import { Section } from "./Section"; 6 | 7 | type ActionPanelPropKeys = (keyof RActionPanel.Props)[]; 8 | const serializedKeys: ActionPanelPropKeys = ["title"]; 9 | 10 | export const ActionPanel: FunctionComponent = (props) => { 11 | return ; 12 | }; 13 | 14 | (ActionPanel as any).Section = Section; 15 | -------------------------------------------------------------------------------- /packages/blast-api/src/Color.ts: -------------------------------------------------------------------------------- 1 | import { type Color as RColor } from "raycast-original"; 2 | 3 | export const Color = { 4 | Blue: "raycast-blue", 5 | Green: "raycast-green", 6 | Magenta: "raycast-magenta", 7 | Orange: "raycast-orange", 8 | Purple: "raycast-purple", 9 | Red: "raycast-red", 10 | Yellow: "raycast-yellow", 11 | PrimaryText: "raycast-primary-text", 12 | SecondaryText: "raycast-secondary-text", 13 | } as const as unknown as RColor 14 | 15 | -------------------------------------------------------------------------------- /packages/blast-api/src/Detail/index.tsx: -------------------------------------------------------------------------------- 1 | import { ElementTypes } from "@blastlauncher/renderer/src"; 2 | import type { Detail as RDetail } from "raycast-original"; 3 | 4 | type DetailPropKeys = (keyof RDetail.Props)[]; 5 | const serializedKeys: DetailPropKeys = ["isLoading", "markdown", "navigationTitle"]; 6 | 7 | export const Detail = (props: RDetail.Props) => { 8 | const { metadata, ...rest } = props; 9 | return ( 10 | <> 11 | 12 | {metadata} 13 | 14 | ); 15 | }; 16 | -------------------------------------------------------------------------------- /packages/blast-api/src/LaunchType/index.ts: -------------------------------------------------------------------------------- 1 | export type { Environment } from "raycast-original"; 2 | 3 | export enum LaunchType { 4 | /** 5 | * A regular launch through user interaction 6 | */ 7 | UserInitiated = "userInitiated", 8 | /** 9 | * Scheduled through an interval and launched from background 10 | */ 11 | Background = "background", 12 | } 13 | 14 | -------------------------------------------------------------------------------- /packages/blast-api/src/List/Dropdown/Item.tsx: -------------------------------------------------------------------------------- 1 | import { ElementTypes } from "@blastlauncher/renderer"; 2 | import { createDebug } from "@blastlauncher/utils/src"; 3 | import type { List as RList } from "raycast-original"; 4 | 5 | const debug = createDebug("blast:list:item"); 6 | 7 | type DropdownItemPropKeys = (keyof RList.Dropdown.Item.Props)[]; 8 | const serializedKeys: DropdownItemPropKeys = ["icon", "keywords", "title", "value"]; 9 | 10 | export const Item = (props: RList.Dropdown.Item.Props) => { 11 | return ; 12 | }; 13 | -------------------------------------------------------------------------------- /packages/blast-api/src/List/EmptyView.tsx: -------------------------------------------------------------------------------- 1 | import { ElementTypes } from "@blastlauncher/renderer/src"; 2 | import { List } from "raycast-original"; 3 | 4 | 5 | type EmptyViewPropKeys = (keyof List.EmptyView.Props)[]; 6 | const serializedKeys: EmptyViewPropKeys = ["title", "description", "icon"]; 7 | 8 | export const EmptyView = (props: List.EmptyView.Props) => { 9 | const { actions, ...rest } = props; 10 | 11 | return ( 12 | 13 | {actions} 14 | 15 | ); 16 | }; 17 | -------------------------------------------------------------------------------- /packages/blast-api/src/List/Item/Accessory.tsx: -------------------------------------------------------------------------------- 1 | export const Accessory = () => { 2 | return null 3 | } 4 | -------------------------------------------------------------------------------- /packages/blast-api/src/List/Item/index.tsx: -------------------------------------------------------------------------------- 1 | import { ElementTypes } from "@blastlauncher/renderer/src"; 2 | import type { List } from "raycast-original"; 3 | 4 | import { Accessory } from './Accessory' 5 | 6 | type ListItemPropKeys = (keyof List.Item.Props)[]; 7 | const serializedKeys: ListItemPropKeys = [ 8 | "accessories", 9 | "accessoryTitle", 10 | "id", 11 | "keywords", 12 | "quickLook", 13 | "subtitle", 14 | "title", 15 | "icon", 16 | ]; 17 | 18 | export const Item = (props: List.Item.Props) => { 19 | const { actions, ...rest } = props; 20 | 21 | return ( 22 | 23 | {actions} 24 | 25 | ); 26 | }; 27 | 28 | (Item as any).Accessory = Accessory 29 | -------------------------------------------------------------------------------- /packages/blast-api/src/index.ts: -------------------------------------------------------------------------------- 1 | export { List } from "./List"; 2 | export { LocalStorage } from "./LocalStorage"; 3 | export { useNavigation, NavigationProvider, NavigationContext } from "./Navigation"; 4 | export { Detail } from "./Detail"; 5 | export { Form } from "./Form"; 6 | export { Action } from "./Action"; 7 | export { ActionPanel } from "./ActionPanel"; 8 | export { Icon } from "./Icon"; 9 | export { WsContext, WsServerProvider, useWsServer, ErrorBoundary } from "./internal"; 10 | export * from "./environment"; 11 | export { LaunchType } from "./LaunchType"; 12 | export * from "./Color"; 13 | export * from "./Cache"; 14 | -------------------------------------------------------------------------------- /packages/blast-api/src/internal/Error.ts: -------------------------------------------------------------------------------- 1 | import { ElementTypes } from "@blastlauncher/renderer"; 2 | import { createElement } from "react"; 3 | 4 | export const ErrorBoundary = ({ error }: { error?: Error | null }) => { 5 | const errorMessage = String(error); 6 | const errorStack = String(error?.stack); 7 | return createElement(ElementTypes.ErrorBoundary, { 8 | error: errorMessage, 9 | errorStack, 10 | serializedKeys: ["error", "errorStack"], 11 | }); 12 | }; 13 | -------------------------------------------------------------------------------- /packages/blast-api/src/internal/WsServerProvider.ts: -------------------------------------------------------------------------------- 1 | import { createElement, createContext, useContext } from "react"; 2 | import type { Server } from "rpc-websockets"; 3 | 4 | export const WsContext = createContext(null); 5 | 6 | export const WsServerProvider = ({ children, server }: { children: React.ReactNode; server: Server }) => { 7 | return createElement(WsContext.Provider, { value: server }, children); 8 | }; 9 | 10 | export const useWsServer = () => { 11 | const server = useContext(WsContext); 12 | return server; 13 | }; 14 | -------------------------------------------------------------------------------- /packages/blast-api/src/internal/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useServerEvent' 2 | -------------------------------------------------------------------------------- /packages/blast-api/src/internal/hooks/useServerEvent.ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react"; 2 | 3 | import { useWsServer } from "../WsServerProvider"; 4 | 5 | type NonUndefined = T extends undefined ? never : T; 6 | 7 | export function useServerEvent (eventName: string, handler: (data: any) => NonUndefined) { 8 | const server = useWsServer(); 9 | 10 | useEffect(() => { 11 | const runRegister = !!server; 12 | 13 | if (!runRegister) { 14 | return; 15 | } 16 | 17 | server.register(eventName, handler); 18 | 19 | return () => { 20 | delete (server as any).namespaces["/"].rpc_methods[eventName]; 21 | // server.removeListener(onChangeEventName, fn); 22 | }; 23 | }, [eventName, handler, server]); 24 | } 25 | -------------------------------------------------------------------------------- /packages/blast-api/src/internal/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./WsServerProvider"; 2 | export * from "./Error"; 3 | -------------------------------------------------------------------------------- /packages/blast-api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "include": [ 4 | "src/**/*", 5 | "src/@types", 6 | "node_modules/raycast-original" 7 | ], 8 | "compilerOptions": { 9 | "outDir": "dist", 10 | "declaration": true 11 | } 12 | } -------------------------------------------------------------------------------- /packages/blast-cli/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @blastlauncher/cli 2 | 3 | ## 1.0.5 4 | 5 | ### Patch Changes 6 | 7 | - Update README and fixing `prepublishOnly` script 8 | 9 | ## 1.0.4 10 | 11 | ### Patch Changes 12 | 13 | - Replace raycast extension publish command 14 | 15 | ## 1.0.3 16 | 17 | ### Patch Changes 18 | 19 | - Fix package should run build before publish 20 | 21 | ## 1.0.2 22 | 23 | ### Patch Changes 24 | 25 | - Run build in publish command 26 | 27 | ## 1.0.1 28 | 29 | ### Patch Changes 30 | 31 | - Initial npm publish 32 | -------------------------------------------------------------------------------- /packages/blast-cli/build.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-var-requires */ 2 | import { build } from "esbuild"; 3 | import { nodeExternalsPlugin } from "esbuild-node-externals"; 4 | 5 | build({ 6 | entryPoints: ["index.js"], 7 | bundle: true, 8 | platform: "node", 9 | format: 'esm', 10 | outfile: "dist/index.mjs", 11 | plugins: [ 12 | nodeExternalsPlugin({ 13 | allowList: ["tempy"], 14 | }), 15 | ], 16 | }); 17 | -------------------------------------------------------------------------------- /packages/blast-renderer/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @blastlauncher/renderer 2 | 3 | ## 1.1.0 4 | 5 | ### Patch Changes 6 | 7 | - Expose host and port 8 | 9 | ## 1.0.5 10 | 11 | ### Patch Changes 12 | 13 | - Update README and fixing `prepublishOnly` script 14 | 15 | ## 1.0.1 16 | 17 | ### Patch Changes 18 | 19 | - Initial npm publish 20 | - Updated dependencies 21 | - @blastlauncher/utils@1.0.1 22 | -------------------------------------------------------------------------------- /packages/blast-renderer/src/@types/svgImports.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.svg" { 2 | const content: React.FunctionComponent>; 3 | export default content; 4 | } 5 | -------------------------------------------------------------------------------- /packages/blast-renderer/src/README.md: -------------------------------------------------------------------------------- 1 | # The backend of Blast 2 | 3 | - `reconciler.ts` is the custom React renderer that utilizes the `react-reconciler` package. 4 | - Inside `raycast` folder, I tried to implement the Raycast APIs in my own way. Some of them are not implemented yet. 5 | - `elements` included the React Elements that are used in `reconciler.ts`. The folder and file naming structure is based on 6 | -------------------------------------------------------------------------------- /packages/blast-renderer/src/__tests__/hello.test.ts: -------------------------------------------------------------------------------- 1 | describe("Hello", () => { 2 | it("should return hello", () => { 3 | expect("hello").toBe("hello"); 4 | }); 5 | }); 6 | -------------------------------------------------------------------------------- /packages/blast-renderer/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./renderer"; 2 | export { runServer } from "./server"; 3 | -------------------------------------------------------------------------------- /packages/blast-renderer/src/renderer/elements/createElement.ts: -------------------------------------------------------------------------------- 1 | import type { HostContext, Props } from "../types"; 2 | 3 | import type { IElement } from "./BaseElement"; 4 | import { elements } from "./elements"; 5 | 6 | import { debug } from "."; 7 | 8 | export default function createElement(elementType: keyof typeof elements, props: Props, hostContext: HostContext) { 9 | const Element: IElement = elements[elementType]; 10 | 11 | debug(`createElement(${elementType})`); 12 | 13 | if (!Element) throw new Error(`unknown element of type '${elementType}'`); 14 | 15 | return new Element(props, hostContext); 16 | } 17 | -------------------------------------------------------------------------------- /packages/blast-renderer/src/renderer/elements/elements.ts: -------------------------------------------------------------------------------- 1 | import type { IElement } from "./BaseElement"; 2 | import Command from "./Command"; 3 | import * as Primitives from "./PrimitiveElements"; 4 | 5 | export const elements: { [key: string]: IElement } = { 6 | Command, 7 | ...Primitives, 8 | }; 9 | -------------------------------------------------------------------------------- /packages/blast-renderer/src/renderer/elements/index.ts: -------------------------------------------------------------------------------- 1 | import { createDebug } from "@blastlauncher/utils/src"; 2 | 3 | export const debug = createDebug("blast:elements:index"); 4 | 5 | import createElement from "./createElement"; 6 | 7 | export default createElement; 8 | 9 | export * from "./elements"; 10 | export * as ElementTypes from "./types"; 11 | -------------------------------------------------------------------------------- /packages/blast-renderer/src/renderer/elements/types.ts: -------------------------------------------------------------------------------- 1 | export const Action = "Action"; 2 | export const List = "List"; 3 | export const ListItem = "ListItem"; 4 | export const ListItemAccessory = "ListItemAccessory"; 5 | export const Dropdown = "Dropdown"; 6 | export const DropdownSection = "DropdownSection"; 7 | export const DropdownItem = "DropdownItem"; 8 | export const Form = "Form"; 9 | export const ActionPanel = "ActionPanel"; 10 | export const ActionPanelSection = "ActionPanelSection"; 11 | export const Icon = "Icon"; 12 | export const EmptyView = "EmptyView"; 13 | export const Detail = "Detail"; 14 | export const TextField = "TextField"; 15 | export const NavigationRoot = "NavigationRoot"; 16 | export const ErrorBoundary = "ErrorBoundary" 17 | -------------------------------------------------------------------------------- /packages/blast-renderer/src/renderer/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./types"; 2 | export { default as JSONTreeRenderer } from "./reconciler"; 3 | export { default as render } from "./render"; 4 | export { default as createElement, elements, ElementTypes } from "./elements"; 5 | -------------------------------------------------------------------------------- /packages/blast-renderer/src/server.ts: -------------------------------------------------------------------------------- 1 | import { Server } from "rpc-websockets"; 2 | 3 | export function runServer({ 4 | port = 8763, 5 | host = "localhost", 6 | }) { 7 | const server = new Server({ 8 | port, 9 | host 10 | }); 11 | 12 | return server; 13 | } 14 | -------------------------------------------------------------------------------- /packages/blast-renderer/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "include": [ 4 | "src/**/*" 5 | ], 6 | "compilerOptions": { 7 | "outDir": "dist", 8 | "declaration": true 9 | } 10 | } -------------------------------------------------------------------------------- /packages/blast-runtime/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ["../../.eslintrc.js"], 3 | settings: { 4 | "import/core-modules": ["@raycast/api"], 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /packages/blast-runtime/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @blastlauncher/runtime 2 | 3 | ## 1.1.0 4 | 5 | ### Minor Changes 6 | 7 | - Expose host and port 8 | 9 | ### Patch Changes 10 | 11 | - Updated dependencies 12 | - @blastlauncher/renderer@1.1.0 13 | - @blastlauncher/api@1.1.0 14 | 15 | ## 1.0.5 16 | 17 | ### Patch Changes 18 | 19 | - Update README and fixing `prepublishOnly` script 20 | - Updated dependencies 21 | - @blastlauncher/renderer@1.0.5 22 | - @blastlauncher/api@1.0.5 23 | 24 | ## 1.0.1 25 | 26 | ### Patch Changes 27 | 28 | - Initial npm publish 29 | - Updated dependencies 30 | - @blastlauncher/api@1.0.1 31 | - @blastlauncher/renderer@1.0.1 32 | -------------------------------------------------------------------------------- /packages/blast-runtime/README.md: -------------------------------------------------------------------------------- 1 | # `@blastlauncher/runtime` 2 | 3 | `@blastlauncher/runtime` is the runtime of Blast Launcher. 4 | 5 | In Raycast Launcher, you can build extensions in React.js. In Blast Launcher, we're taking this idea furthur. The **whole application** is build in React.js. 6 | 7 | The Launcher itself is a huge React.js application, and the extensions are also React.js components. Wrap components inside components, just regular React.js things, right? 8 | 9 | 10 | WIP WIP WIP WIP WIP 11 | 12 | -------------------------------------------------------------------------------- /packages/blast-runtime/build.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-var-requires */ 2 | const esbuild = require("esbuild"); 3 | 4 | const watch = process.argv.includes("--watch"); 5 | 6 | const esbuildConfig = { 7 | entryPoints: ["./src/run.ts"], 8 | bundle: true, 9 | platform: "node", 10 | outfile: "dist/run.cjs", 11 | keepNames: true, 12 | define: { 'import.meta.url': '_importMetaUrl' }, 13 | banner: { 14 | js: "const _importMetaUrl=require('url').pathToFileURL(__filename)", 15 | }, 16 | }; 17 | 18 | if (watch) { 19 | esbuild.context(esbuildConfig).then((ctx) => { 20 | ctx.watch() 21 | }); 22 | } else { 23 | esbuild.build(esbuildConfig).catch(() => process.exit(1)); 24 | } 25 | -------------------------------------------------------------------------------- /packages/blast-runtime/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "ignoreRoot": [".git"] 3 | } 4 | -------------------------------------------------------------------------------- /packages/blast-runtime/src/@types/raycast.d.ts: -------------------------------------------------------------------------------- 1 | // Create a module alias for raycast-original to @raycast/api 2 | declare module "@raycast/api" { 3 | export * from "raycast-original"; 4 | } 5 | -------------------------------------------------------------------------------- /packages/blast-runtime/src/@types/react-devtools-core.d.ts: -------------------------------------------------------------------------------- 1 | declare module "react-devtools-core" { 2 | import type { w3cwebsocket as W3CWebSocket } from "websocket"; 3 | type ResolveNativeStyle = any; 4 | type DevToolsSettingsManager = any; 5 | 6 | interface ConnectOptions { 7 | host?: string; 8 | nativeStyleEditorValidAttributes?: ReadonlyArray; 9 | port?: number; 10 | useHttps?: boolean; 11 | resolveRNStyle?: ResolveNativeStyle; 12 | retryConnectionDelay?: number; 13 | isAppActive?: () => boolean; 14 | websocket?: WebSocket | W3CWebSocket | null; 15 | devToolsSettingsManager?: DevToolsSettingsManager | null; 16 | } 17 | 18 | export function connectToDevTools(options?: ConnectOptions): void; 19 | } 20 | -------------------------------------------------------------------------------- /packages/blast-runtime/src/App.tsx: -------------------------------------------------------------------------------- 1 | import { NavigationProvider, WsServerProvider } from "@blastlauncher/api"; 2 | import type { Server } from "rpc-websockets"; 3 | 4 | import { CommandList } from "./components/CommandList"; 5 | 6 | export type AppProps = { 7 | server: Server; 8 | }; 9 | 10 | export const App = ({ server }: AppProps) => { 11 | return ( 12 | 13 | 14 | 15 | 16 | 17 | ); 18 | }; 19 | -------------------------------------------------------------------------------- /packages/blast-runtime/src/components/Store/api.ts: -------------------------------------------------------------------------------- 1 | import { NpmRegistryClient } from './npmClient' 2 | 3 | const client = new NpmRegistryClient() 4 | 5 | const org = '@blast-extensions' 6 | 7 | export async function searchExtensions (query: string) { 8 | const result = await client.search(`${org} ${query}`) 9 | 10 | const packages = result.objects.map(obj => obj.package).filter(pkg => pkg.name.startsWith(org)) 11 | 12 | return packages 13 | } 14 | -------------------------------------------------------------------------------- /packages/blast-runtime/src/components/Store/index.ts: -------------------------------------------------------------------------------- 1 | export * from './StoreCommand' 2 | -------------------------------------------------------------------------------- /packages/blast-runtime/src/constants.ts: -------------------------------------------------------------------------------- 1 | import os from 'node:os' 2 | import path from 'node:path' 3 | 4 | export const USER_DIR = path.join(os.homedir(), '.blast') 5 | export const NODE_INSTALL_PATH = path.join(USER_DIR, 'node') 6 | export const EXTENSIONS_DIR = path.join(USER_DIR, 'extensions') 7 | export const DEV_EXTENSIONS_DIR = path.join(USER_DIR, 'dev-extensions') 8 | -------------------------------------------------------------------------------- /packages/blast-runtime/src/index.ts: -------------------------------------------------------------------------------- 1 | import "./utils/window"; 2 | 3 | import { runServer } from "@blastlauncher/renderer/src"; 4 | import { createDebug } from '@blastlauncher/utils/src' 5 | 6 | import { App } from "./App"; 7 | import { connect } from "./utils/connectDevtools"; 8 | import { run as runApp } from "./utils/run"; 9 | 10 | const debug = createDebug("blast-runtime:run") 11 | 12 | export function run({ host = "localhost", port = 8763 } = {}) { 13 | console.info("Starting Blast Runtime"); 14 | debug("run"); 15 | 16 | connect(); 17 | 18 | runApp(App, { 19 | server: runServer({ 20 | host, 21 | port, 22 | }), 23 | }); 24 | } 25 | 26 | export default run; 27 | -------------------------------------------------------------------------------- /packages/blast-runtime/src/run.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import { program } from "commander"; 3 | 4 | import { run } from "."; 5 | 6 | program 7 | .option("--host ", "Host to run the runtime", "localhost") 8 | .option("--port ", "Port to run the runtime", (value) => Number.parseInt(value, 10), 8763) 9 | .parse(process.argv); 10 | 11 | const opts = program.opts(); 12 | run({ 13 | host: opts.host, 14 | port: opts.port, 15 | }); 16 | -------------------------------------------------------------------------------- /packages/blast-runtime/src/utils/connectDevtools.ts: -------------------------------------------------------------------------------- 1 | import { connectToDevTools } from "react-devtools-core"; 2 | import { w3cwebsocket as W3CWebSocket } from "websocket"; 3 | 4 | export function connect() { 5 | connectToDevTools({ 6 | websocket: new W3CWebSocket("ws://localhost:8097"), 7 | }); 8 | } 9 | -------------------------------------------------------------------------------- /packages/blast-runtime/src/utils/nrm.ts: -------------------------------------------------------------------------------- 1 | import { NRM } from '@blastlauncher/utils/src' 2 | 3 | import { NODE_INSTALL_PATH } from '../constants' 4 | 5 | export const NODE_VERSION = "v18.17.1" 6 | 7 | export const nrm = new NRM({ 8 | installPath: NODE_INSTALL_PATH, 9 | }) 10 | 11 | -------------------------------------------------------------------------------- /packages/blast-runtime/src/utils/run.ts: -------------------------------------------------------------------------------- 1 | import { render } from "@blastlauncher/renderer/src"; 2 | import React, { Attributes } from "react"; 3 | import type { Server } from "rpc-websockets"; 4 | 5 | export function run(App: (...args: any) => JSX.Element, props: { server: Server }) { 6 | render(React.createElement(App, props as Attributes), props.server); 7 | } 8 | -------------------------------------------------------------------------------- /packages/blast-runtime/src/utils/window.js: -------------------------------------------------------------------------------- 1 | global.window = globalThis; 2 | global.self = globalThis; 3 | -------------------------------------------------------------------------------- /packages/blast-runtime/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "include": [ 4 | "src/**/*" 5 | ], 6 | "compilerOptions": { 7 | "outDir": "dist", 8 | "declaration": true 9 | } 10 | } -------------------------------------------------------------------------------- /packages/blast-utils/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @blastlauncher/utils 2 | 3 | ## 1.0.1 4 | 5 | ### Patch Changes 6 | 7 | - Initial npm publish 8 | -------------------------------------------------------------------------------- /packages/blast-utils/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "testEnvironment": "node", 3 | "verbose": true, 4 | "preset": "ts-jest", 5 | "transform": { 6 | "^.+\\.ts?$": "ts-jest" 7 | }, 8 | "transformIgnorePatterns": [ 9 | "/node_modules/" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /packages/blast-utils/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@blastlauncher/utils", 3 | "version": "1.0.1", 4 | "description": "Utilities for working with Blast", 5 | "main": "dist/index.js", 6 | "scripts": { 7 | "build": "tsc", 8 | "test": "jest", 9 | "watch": "tsc -w" 10 | }, 11 | "dependencies": { 12 | "debug": "^4.3.4", 13 | "tar": "^6.1.15" 14 | }, 15 | "repository": "https://github.com/BlastLauncher/blast.git", 16 | "devDependencies": { 17 | "@types/tar": "^6.1.5" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/blast-utils/src/debug.ts: -------------------------------------------------------------------------------- 1 | import debug from "debug"; 2 | 3 | export function createDebug(name?: string) { 4 | return debug(name || "blast"); 5 | } 6 | 7 | export const defaultDebug = createDebug(); 8 | -------------------------------------------------------------------------------- /packages/blast-utils/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./debug"; 2 | export * from "./nrm"; 3 | -------------------------------------------------------------------------------- /packages/blast-utils/src/nrm/types.ts: -------------------------------------------------------------------------------- 1 | export type OperatingSystem = "darwin" | "linux"; 2 | 3 | export interface NRMOptions { 4 | installPath?: string; 5 | } 6 | -------------------------------------------------------------------------------- /packages/blast-utils/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "include": [ 4 | "src/**/*" 5 | ], 6 | "compilerOptions": { 7 | "outDir": "dist", 8 | "declaration": true 9 | } 10 | } -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'apps/*' 3 | - 'packages/*' -------------------------------------------------------------------------------- /tools/add-macos-cert.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | KEY_CHAIN=build.keychain 4 | MACOS_CERT_P12_FILE=certificate.p12 5 | 6 | # Recreate the certificate from the secure environment variable 7 | echo $MACOS_CERT_P12 | base64 --decode > $MACOS_CERT_P12_FILE 8 | 9 | #create a keychain 10 | security create-keychain -p actions $KEY_CHAIN 11 | 12 | # Make the keychain the default so identities are found 13 | security default-keychain -s $KEY_CHAIN 14 | 15 | # Unlock the keychain 16 | security unlock-keychain -p actions $KEY_CHAIN 17 | 18 | security import $MACOS_CERT_P12_FILE -k $KEY_CHAIN -P $MACOS_CERT_PASSWORD -T /usr/bin/codesign; 19 | 20 | security set-key-partition-list -S apple-tool:,apple: -s -k actions $KEY_CHAIN 21 | 22 | # remove certs 23 | rm -fr *.p12 24 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "display": "Node 16", 3 | "compilerOptions": { 4 | "lib": [ 5 | "es2020" 6 | ], 7 | "module": "CommonJS", 8 | "target": "ESNext", 9 | "strict": true, 10 | "esModuleInterop": true, 11 | "skipLibCheck": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "allowSyntheticDefaultImports": true, 14 | "jsx": "react-jsx", 15 | "moduleResolution": "node", 16 | "allowJs": true 17 | }, 18 | "ts-node": { 19 | "esm": true 20 | } 21 | } 22 | --------------------------------------------------------------------------------