* fix: better handling of custom font
Practically speaking, custom font seems to have only worked on Linux, because
`net.fetch` would include the mime type in the response headers which could validate the payload.
This doesn't appear to be the case on windows/macOS. Instead:
1. On Linux (or if some other system supports it), check the content type. If good, serve as normal
2. Otherwise, fetch the payload. Read the first four to five bytes and check for a valid magic number.
Additionally, to prevent arbitrary requests fetching other paths via injected content, sync the custom font path
to the main process, and then make _every_ request to `feishin:/` point to the same renderer path.
When setting the font, first send the path to the main process. This will register `feishin:/` to point
to the path provided. This is done via a promise-based set.
Finally, provide a default value for the file input (a best effort approximation for the last part of the file path)
on the file input component.
* make the linter happy
* add getImageUrl to domain endpoints
* add new ItemImage component and hooks to generate image url
* add configuration for image resolution based on types
* Create a shared DragDrop Zone
- This zone allows the dropping of files
- The zone allows validation by parent
- The zone allows customisation like icon shown
* Import Settings
- Ability to import settings from a JSON file
- Validation to ensure file compatibility
- Visualiser for viewing string differences
* i18n
- Moved all hardcoded values to be en localised
* Zod / Validation
This commit contains the code to move settings to using ZOD, the reason for this is so that we can validate the settings schema that is being imported.
This commit also adds various validation and transforms to ensure the settings being reimported match values we expect.
I also removed the original crude validation and replaced it with the new ZOD parser that will handle this for us.
Finally the "styles-settings" component will listen to any external content updates and update its value, the reasoning is the external import wouldn't update the existing value.
- Split Settings schema into two parts, schema that is validated on import and schema that is not
- Schemas are merged to make the full SettingsStateSchema
* Migrate during validation
- Migration is done as part of validation
- Updated the store version to v10 as there has been changes to the settings
- Migrate will now add the fields from v9 to v10
- the build was failing due to ids not being mapped to their enum values
---------
Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
* [feature]: Support using system fonts
Uses the **experimental** queryLocalFonts API, when prompted, to get the fonts and do CSS.
Resolves#270 and #288 (by proxy)
Caveats/notes:
- This is experimental, and is only supported by Chrome/Chromium/Edgeium (see https://caniuse.com/?search=querylocalfonts)
- As far as I can tell, the only way to dynamically change the font (shown in https://wicg.github.io/local-font-access/#example-style-with-local-fonts) was by DOM manipulation; css variables did not seem to work
- This shows **all** fonts, including their variants (bold/italic/etc); given that the style names could be localized, not sure of a way to parse this (on my system, for instance, I had 859 different combinations)
- I made fonts a separate top-level setting because it was easier to manipulate without causing as many rerenders; feel free to put that back
* add permission chec
* add electron magic to support custom font
* restrict content types