search and/or read your saved and liked bluesky posts
wails go svelte sqlite desktop bluesky
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

initial commit

Owais Jamil 9f72d4ff

+3167
+4
.gitignore
··· 1 + build/bin 2 + node_modules 3 + frontend/dist 4 + .sandbox/
+1
README.md
··· 1 + # BlueSky Browser (Desktop)
+27
app.go
··· 1 + package main 2 + 3 + import ( 4 + "context" 5 + "fmt" 6 + ) 7 + 8 + // App struct 9 + type App struct { 10 + ctx context.Context 11 + } 12 + 13 + // NewApp creates a new App application struct 14 + func NewApp() *App { 15 + return &App{} 16 + } 17 + 18 + // startup is called when the app starts. The context is saved 19 + // so we can call the runtime methods 20 + func (a *App) startup(ctx context.Context) { 21 + a.ctx = ctx 22 + } 23 + 24 + // Greet returns a greeting for the given name 25 + func (a *App) Greet(name string) string { 26 + return fmt.Sprintf("Hello %s, It's show time!", name) 27 + }
+35
build/README.md
··· 1 + # Build Directory 2 + 3 + The build directory is used to house all the build files and assets for your application. 4 + 5 + The structure is: 6 + 7 + * bin - Output directory 8 + * darwin - macOS specific files 9 + * windows - Windows specific files 10 + 11 + ## Mac 12 + 13 + The `darwin` directory holds files specific to Mac builds. 14 + These may be customised and used as part of the build. To return these files to the default state, simply delete them 15 + and 16 + build with `wails build`. 17 + 18 + The directory contains the following files: 19 + 20 + - `Info.plist` - the main plist file used for Mac builds. It is used when building using `wails build`. 21 + - `Info.dev.plist` - same as the main plist file but used when building using `wails dev`. 22 + 23 + ## Windows 24 + 25 + The `windows` directory contains the manifest and rc files used when building with `wails build`. 26 + These may be customised for your application. To return these files to the default state, simply delete them and 27 + build with `wails build`. 28 + 29 + - `icon.ico` - The icon used for the application. This is used when building using `wails build`. If you wish to 30 + use a different icon, simply replace this file with your own. If it is missing, a new `icon.ico` file 31 + will be created using the `appicon.png` file in the build directory. 32 + - `installer/*` - The files used to create the Windows installer. These are used when building using `wails build`. 33 + - `info.json` - Application details used for Windows builds. The data here will be used by the Windows installer, 34 + as well as the application itself (right click the exe -> properties -> details) 35 + - `wails.exe.manifest` - The main application manifest file.
build/appicon.png

This is a binary file and will not be displayed.

+68
build/darwin/Info.dev.plist
··· 1 + <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 2 + <plist version="1.0"> 3 + <dict> 4 + <key>CFBundlePackageType</key> 5 + <string>APPL</string> 6 + <key>CFBundleName</key> 7 + <string>{{.Info.ProductName}}</string> 8 + <key>CFBundleExecutable</key> 9 + <string>{{.OutputFilename}}</string> 10 + <key>CFBundleIdentifier</key> 11 + <string>com.wails.{{.Name}}</string> 12 + <key>CFBundleVersion</key> 13 + <string>{{.Info.ProductVersion}}</string> 14 + <key>CFBundleGetInfoString</key> 15 + <string>{{.Info.Comments}}</string> 16 + <key>CFBundleShortVersionString</key> 17 + <string>{{.Info.ProductVersion}}</string> 18 + <key>CFBundleIconFile</key> 19 + <string>iconfile</string> 20 + <key>LSMinimumSystemVersion</key> 21 + <string>10.13.0</string> 22 + <key>NSHighResolutionCapable</key> 23 + <string>true</string> 24 + <key>NSHumanReadableCopyright</key> 25 + <string>{{.Info.Copyright}}</string> 26 + {{if .Info.FileAssociations}} 27 + <key>CFBundleDocumentTypes</key> 28 + <array> 29 + {{range .Info.FileAssociations}} 30 + <dict> 31 + <key>CFBundleTypeExtensions</key> 32 + <array> 33 + <string>{{.Ext}}</string> 34 + </array> 35 + <key>CFBundleTypeName</key> 36 + <string>{{.Name}}</string> 37 + <key>CFBundleTypeRole</key> 38 + <string>{{.Role}}</string> 39 + <key>CFBundleTypeIconFile</key> 40 + <string>{{.IconName}}</string> 41 + </dict> 42 + {{end}} 43 + </array> 44 + {{end}} 45 + {{if .Info.Protocols}} 46 + <key>CFBundleURLTypes</key> 47 + <array> 48 + {{range .Info.Protocols}} 49 + <dict> 50 + <key>CFBundleURLName</key> 51 + <string>com.wails.{{.Scheme}}</string> 52 + <key>CFBundleURLSchemes</key> 53 + <array> 54 + <string>{{.Scheme}}</string> 55 + </array> 56 + <key>CFBundleTypeRole</key> 57 + <string>{{.Role}}</string> 58 + </dict> 59 + {{end}} 60 + </array> 61 + {{end}} 62 + <key>NSAppTransportSecurity</key> 63 + <dict> 64 + <key>NSAllowsLocalNetworking</key> 65 + <true/> 66 + </dict> 67 + </dict> 68 + </plist>
+63
build/darwin/Info.plist
··· 1 + <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 2 + <plist version="1.0"> 3 + <dict> 4 + <key>CFBundlePackageType</key> 5 + <string>APPL</string> 6 + <key>CFBundleName</key> 7 + <string>{{.Info.ProductName}}</string> 8 + <key>CFBundleExecutable</key> 9 + <string>{{.OutputFilename}}</string> 10 + <key>CFBundleIdentifier</key> 11 + <string>com.wails.{{.Name}}</string> 12 + <key>CFBundleVersion</key> 13 + <string>{{.Info.ProductVersion}}</string> 14 + <key>CFBundleGetInfoString</key> 15 + <string>{{.Info.Comments}}</string> 16 + <key>CFBundleShortVersionString</key> 17 + <string>{{.Info.ProductVersion}}</string> 18 + <key>CFBundleIconFile</key> 19 + <string>iconfile</string> 20 + <key>LSMinimumSystemVersion</key> 21 + <string>10.13.0</string> 22 + <key>NSHighResolutionCapable</key> 23 + <string>true</string> 24 + <key>NSHumanReadableCopyright</key> 25 + <string>{{.Info.Copyright}}</string> 26 + {{if .Info.FileAssociations}} 27 + <key>CFBundleDocumentTypes</key> 28 + <array> 29 + {{range .Info.FileAssociations}} 30 + <dict> 31 + <key>CFBundleTypeExtensions</key> 32 + <array> 33 + <string>{{.Ext}}</string> 34 + </array> 35 + <key>CFBundleTypeName</key> 36 + <string>{{.Name}}</string> 37 + <key>CFBundleTypeRole</key> 38 + <string>{{.Role}}</string> 39 + <key>CFBundleTypeIconFile</key> 40 + <string>{{.IconName}}</string> 41 + </dict> 42 + {{end}} 43 + </array> 44 + {{end}} 45 + {{if .Info.Protocols}} 46 + <key>CFBundleURLTypes</key> 47 + <array> 48 + {{range .Info.Protocols}} 49 + <dict> 50 + <key>CFBundleURLName</key> 51 + <string>com.wails.{{.Scheme}}</string> 52 + <key>CFBundleURLSchemes</key> 53 + <array> 54 + <string>{{.Scheme}}</string> 55 + </array> 56 + <key>CFBundleTypeRole</key> 57 + <string>{{.Role}}</string> 58 + </dict> 59 + {{end}} 60 + </array> 61 + {{end}} 62 + </dict> 63 + </plist>
build/windows/icon.ico

This is a binary file and will not be displayed.

+15
build/windows/info.json
··· 1 + { 2 + "fixed": { 3 + "file_version": "{{.Info.ProductVersion}}" 4 + }, 5 + "info": { 6 + "0000": { 7 + "ProductVersion": "{{.Info.ProductVersion}}", 8 + "CompanyName": "{{.Info.CompanyName}}", 9 + "FileDescription": "{{.Info.ProductName}}", 10 + "LegalCopyright": "{{.Info.Copyright}}", 11 + "ProductName": "{{.Info.ProductName}}", 12 + "Comments": "{{.Info.Comments}}" 13 + } 14 + } 15 + }
+114
build/windows/installer/project.nsi
··· 1 + Unicode true 2 + 3 + #### 4 + ## Please note: Template replacements don't work in this file. They are provided with default defines like 5 + ## mentioned underneath. 6 + ## If the keyword is not defined, "wails_tools.nsh" will populate them with the values from ProjectInfo. 7 + ## If they are defined here, "wails_tools.nsh" will not touch them. This allows to use this project.nsi manually 8 + ## from outside of Wails for debugging and development of the installer. 9 + ## 10 + ## For development first make a wails nsis build to populate the "wails_tools.nsh": 11 + ## > wails build --target windows/amd64 --nsis 12 + ## Then you can call makensis on this file with specifying the path to your binary: 13 + ## For a AMD64 only installer: 14 + ## > makensis -DARG_WAILS_AMD64_BINARY=..\..\bin\app.exe 15 + ## For a ARM64 only installer: 16 + ## > makensis -DARG_WAILS_ARM64_BINARY=..\..\bin\app.exe 17 + ## For a installer with both architectures: 18 + ## > makensis -DARG_WAILS_AMD64_BINARY=..\..\bin\app-amd64.exe -DARG_WAILS_ARM64_BINARY=..\..\bin\app-arm64.exe 19 + #### 20 + ## The following information is taken from the ProjectInfo file, but they can be overwritten here. 21 + #### 22 + ## !define INFO_PROJECTNAME "MyProject" # Default "{{.Name}}" 23 + ## !define INFO_COMPANYNAME "MyCompany" # Default "{{.Info.CompanyName}}" 24 + ## !define INFO_PRODUCTNAME "MyProduct" # Default "{{.Info.ProductName}}" 25 + ## !define INFO_PRODUCTVERSION "1.0.0" # Default "{{.Info.ProductVersion}}" 26 + ## !define INFO_COPYRIGHT "Copyright" # Default "{{.Info.Copyright}}" 27 + ### 28 + ## !define PRODUCT_EXECUTABLE "Application.exe" # Default "${INFO_PROJECTNAME}.exe" 29 + ## !define UNINST_KEY_NAME "UninstKeyInRegistry" # Default "${INFO_COMPANYNAME}${INFO_PRODUCTNAME}" 30 + #### 31 + ## !define REQUEST_EXECUTION_LEVEL "admin" # Default "admin" see also https://nsis.sourceforge.io/Docs/Chapter4.html 32 + #### 33 + ## Include the wails tools 34 + #### 35 + !include "wails_tools.nsh" 36 + 37 + # The version information for this two must consist of 4 parts 38 + VIProductVersion "${INFO_PRODUCTVERSION}.0" 39 + VIFileVersion "${INFO_PRODUCTVERSION}.0" 40 + 41 + VIAddVersionKey "CompanyName" "${INFO_COMPANYNAME}" 42 + VIAddVersionKey "FileDescription" "${INFO_PRODUCTNAME} Installer" 43 + VIAddVersionKey "ProductVersion" "${INFO_PRODUCTVERSION}" 44 + VIAddVersionKey "FileVersion" "${INFO_PRODUCTVERSION}" 45 + VIAddVersionKey "LegalCopyright" "${INFO_COPYRIGHT}" 46 + VIAddVersionKey "ProductName" "${INFO_PRODUCTNAME}" 47 + 48 + # Enable HiDPI support. https://nsis.sourceforge.io/Reference/ManifestDPIAware 49 + ManifestDPIAware true 50 + 51 + !include "MUI.nsh" 52 + 53 + !define MUI_ICON "..\icon.ico" 54 + !define MUI_UNICON "..\icon.ico" 55 + # !define MUI_WELCOMEFINISHPAGE_BITMAP "resources\leftimage.bmp" #Include this to add a bitmap on the left side of the Welcome Page. Must be a size of 164x314 56 + !define MUI_FINISHPAGE_NOAUTOCLOSE # Wait on the INSTFILES page so the user can take a look into the details of the installation steps 57 + !define MUI_ABORTWARNING # This will warn the user if they exit from the installer. 58 + 59 + !insertmacro MUI_PAGE_WELCOME # Welcome to the installer page. 60 + # !insertmacro MUI_PAGE_LICENSE "resources\eula.txt" # Adds a EULA page to the installer 61 + !insertmacro MUI_PAGE_DIRECTORY # In which folder install page. 62 + !insertmacro MUI_PAGE_INSTFILES # Installing page. 63 + !insertmacro MUI_PAGE_FINISH # Finished installation page. 64 + 65 + !insertmacro MUI_UNPAGE_INSTFILES # Uinstalling page 66 + 67 + !insertmacro MUI_LANGUAGE "English" # Set the Language of the installer 68 + 69 + ## The following two statements can be used to sign the installer and the uninstaller. The path to the binaries are provided in %1 70 + #!uninstfinalize 'signtool --file "%1"' 71 + #!finalize 'signtool --file "%1"' 72 + 73 + Name "${INFO_PRODUCTNAME}" 74 + OutFile "..\..\bin\${INFO_PROJECTNAME}-${ARCH}-installer.exe" # Name of the installer's file. 75 + InstallDir "$PROGRAMFILES64\${INFO_COMPANYNAME}\${INFO_PRODUCTNAME}" # Default installing folder ($PROGRAMFILES is Program Files folder). 76 + ShowInstDetails show # This will always show the installation details. 77 + 78 + Function .onInit 79 + !insertmacro wails.checkArchitecture 80 + FunctionEnd 81 + 82 + Section 83 + !insertmacro wails.setShellContext 84 + 85 + !insertmacro wails.webview2runtime 86 + 87 + SetOutPath $INSTDIR 88 + 89 + !insertmacro wails.files 90 + 91 + CreateShortcut "$SMPROGRAMS\${INFO_PRODUCTNAME}.lnk" "$INSTDIR\${PRODUCT_EXECUTABLE}" 92 + CreateShortCut "$DESKTOP\${INFO_PRODUCTNAME}.lnk" "$INSTDIR\${PRODUCT_EXECUTABLE}" 93 + 94 + !insertmacro wails.associateFiles 95 + !insertmacro wails.associateCustomProtocols 96 + 97 + !insertmacro wails.writeUninstaller 98 + SectionEnd 99 + 100 + Section "uninstall" 101 + !insertmacro wails.setShellContext 102 + 103 + RMDir /r "$AppData\${PRODUCT_EXECUTABLE}" # Remove the WebView2 DataPath 104 + 105 + RMDir /r $INSTDIR 106 + 107 + Delete "$SMPROGRAMS\${INFO_PRODUCTNAME}.lnk" 108 + Delete "$DESKTOP\${INFO_PRODUCTNAME}.lnk" 109 + 110 + !insertmacro wails.unassociateFiles 111 + !insertmacro wails.unassociateCustomProtocols 112 + 113 + !insertmacro wails.deleteUninstaller 114 + SectionEnd
+249
build/windows/installer/wails_tools.nsh
··· 1 + # DO NOT EDIT - Generated automatically by `wails build` 2 + 3 + !include "x64.nsh" 4 + !include "WinVer.nsh" 5 + !include "FileFunc.nsh" 6 + 7 + !ifndef INFO_PROJECTNAME 8 + !define INFO_PROJECTNAME "{{.Name}}" 9 + !endif 10 + !ifndef INFO_COMPANYNAME 11 + !define INFO_COMPANYNAME "{{.Info.CompanyName}}" 12 + !endif 13 + !ifndef INFO_PRODUCTNAME 14 + !define INFO_PRODUCTNAME "{{.Info.ProductName}}" 15 + !endif 16 + !ifndef INFO_PRODUCTVERSION 17 + !define INFO_PRODUCTVERSION "{{.Info.ProductVersion}}" 18 + !endif 19 + !ifndef INFO_COPYRIGHT 20 + !define INFO_COPYRIGHT "{{.Info.Copyright}}" 21 + !endif 22 + !ifndef PRODUCT_EXECUTABLE 23 + !define PRODUCT_EXECUTABLE "${INFO_PROJECTNAME}.exe" 24 + !endif 25 + !ifndef UNINST_KEY_NAME 26 + !define UNINST_KEY_NAME "${INFO_COMPANYNAME}${INFO_PRODUCTNAME}" 27 + !endif 28 + !define UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${UNINST_KEY_NAME}" 29 + 30 + !ifndef REQUEST_EXECUTION_LEVEL 31 + !define REQUEST_EXECUTION_LEVEL "admin" 32 + !endif 33 + 34 + RequestExecutionLevel "${REQUEST_EXECUTION_LEVEL}" 35 + 36 + !ifdef ARG_WAILS_AMD64_BINARY 37 + !define SUPPORTS_AMD64 38 + !endif 39 + 40 + !ifdef ARG_WAILS_ARM64_BINARY 41 + !define SUPPORTS_ARM64 42 + !endif 43 + 44 + !ifdef SUPPORTS_AMD64 45 + !ifdef SUPPORTS_ARM64 46 + !define ARCH "amd64_arm64" 47 + !else 48 + !define ARCH "amd64" 49 + !endif 50 + !else 51 + !ifdef SUPPORTS_ARM64 52 + !define ARCH "arm64" 53 + !else 54 + !error "Wails: Undefined ARCH, please provide at least one of ARG_WAILS_AMD64_BINARY or ARG_WAILS_ARM64_BINARY" 55 + !endif 56 + !endif 57 + 58 + !macro wails.checkArchitecture 59 + !ifndef WAILS_WIN10_REQUIRED 60 + !define WAILS_WIN10_REQUIRED "This product is only supported on Windows 10 (Server 2016) and later." 61 + !endif 62 + 63 + !ifndef WAILS_ARCHITECTURE_NOT_SUPPORTED 64 + !define WAILS_ARCHITECTURE_NOT_SUPPORTED "This product can't be installed on the current Windows architecture. Supports: ${ARCH}" 65 + !endif 66 + 67 + ${If} ${AtLeastWin10} 68 + !ifdef SUPPORTS_AMD64 69 + ${if} ${IsNativeAMD64} 70 + Goto ok 71 + ${EndIf} 72 + !endif 73 + 74 + !ifdef SUPPORTS_ARM64 75 + ${if} ${IsNativeARM64} 76 + Goto ok 77 + ${EndIf} 78 + !endif 79 + 80 + IfSilent silentArch notSilentArch 81 + silentArch: 82 + SetErrorLevel 65 83 + Abort 84 + notSilentArch: 85 + MessageBox MB_OK "${WAILS_ARCHITECTURE_NOT_SUPPORTED}" 86 + Quit 87 + ${else} 88 + IfSilent silentWin notSilentWin 89 + silentWin: 90 + SetErrorLevel 64 91 + Abort 92 + notSilentWin: 93 + MessageBox MB_OK "${WAILS_WIN10_REQUIRED}" 94 + Quit 95 + ${EndIf} 96 + 97 + ok: 98 + !macroend 99 + 100 + !macro wails.files 101 + !ifdef SUPPORTS_AMD64 102 + ${if} ${IsNativeAMD64} 103 + File "/oname=${PRODUCT_EXECUTABLE}" "${ARG_WAILS_AMD64_BINARY}" 104 + ${EndIf} 105 + !endif 106 + 107 + !ifdef SUPPORTS_ARM64 108 + ${if} ${IsNativeARM64} 109 + File "/oname=${PRODUCT_EXECUTABLE}" "${ARG_WAILS_ARM64_BINARY}" 110 + ${EndIf} 111 + !endif 112 + !macroend 113 + 114 + !macro wails.writeUninstaller 115 + WriteUninstaller "$INSTDIR\uninstall.exe" 116 + 117 + SetRegView 64 118 + WriteRegStr HKLM "${UNINST_KEY}" "Publisher" "${INFO_COMPANYNAME}" 119 + WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "${INFO_PRODUCTNAME}" 120 + WriteRegStr HKLM "${UNINST_KEY}" "DisplayVersion" "${INFO_PRODUCTVERSION}" 121 + WriteRegStr HKLM "${UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_EXECUTABLE}" 122 + WriteRegStr HKLM "${UNINST_KEY}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" 123 + WriteRegStr HKLM "${UNINST_KEY}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" 124 + 125 + ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 126 + IntFmt $0 "0x%08X" $0 127 + WriteRegDWORD HKLM "${UNINST_KEY}" "EstimatedSize" "$0" 128 + !macroend 129 + 130 + !macro wails.deleteUninstaller 131 + Delete "$INSTDIR\uninstall.exe" 132 + 133 + SetRegView 64 134 + DeleteRegKey HKLM "${UNINST_KEY}" 135 + !macroend 136 + 137 + !macro wails.setShellContext 138 + ${If} ${REQUEST_EXECUTION_LEVEL} == "admin" 139 + SetShellVarContext all 140 + ${else} 141 + SetShellVarContext current 142 + ${EndIf} 143 + !macroend 144 + 145 + # Install webview2 by launching the bootstrapper 146 + # See https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#online-only-deployment 147 + !macro wails.webview2runtime 148 + !ifndef WAILS_INSTALL_WEBVIEW_DETAILPRINT 149 + !define WAILS_INSTALL_WEBVIEW_DETAILPRINT "Installing: WebView2 Runtime" 150 + !endif 151 + 152 + SetRegView 64 153 + # If the admin key exists and is not empty then webview2 is already installed 154 + ReadRegStr $0 HKLM "SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv" 155 + ${If} $0 != "" 156 + Goto ok 157 + ${EndIf} 158 + 159 + ${If} ${REQUEST_EXECUTION_LEVEL} == "user" 160 + # If the installer is run in user level, check the user specific key exists and is not empty then webview2 is already installed 161 + ReadRegStr $0 HKCU "Software\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv" 162 + ${If} $0 != "" 163 + Goto ok 164 + ${EndIf} 165 + ${EndIf} 166 + 167 + SetDetailsPrint both 168 + DetailPrint "${WAILS_INSTALL_WEBVIEW_DETAILPRINT}" 169 + SetDetailsPrint listonly 170 + 171 + InitPluginsDir 172 + CreateDirectory "$pluginsdir\webview2bootstrapper" 173 + SetOutPath "$pluginsdir\webview2bootstrapper" 174 + File "tmp\MicrosoftEdgeWebview2Setup.exe" 175 + ExecWait '"$pluginsdir\webview2bootstrapper\MicrosoftEdgeWebview2Setup.exe" /silent /install' 176 + 177 + SetDetailsPrint both 178 + ok: 179 + !macroend 180 + 181 + # Copy of APP_ASSOCIATE and APP_UNASSOCIATE macros from here https://gist.github.com/nikku/281d0ef126dbc215dd58bfd5b3a5cd5b 182 + !macro APP_ASSOCIATE EXT FILECLASS DESCRIPTION ICON COMMANDTEXT COMMAND 183 + ; Backup the previously associated file class 184 + ReadRegStr $R0 SHELL_CONTEXT "Software\Classes\.${EXT}" "" 185 + WriteRegStr SHELL_CONTEXT "Software\Classes\.${EXT}" "${FILECLASS}_backup" "$R0" 186 + 187 + WriteRegStr SHELL_CONTEXT "Software\Classes\.${EXT}" "" "${FILECLASS}" 188 + 189 + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}" "" `${DESCRIPTION}` 190 + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\DefaultIcon" "" `${ICON}` 191 + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\shell" "" "open" 192 + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\shell\open" "" `${COMMANDTEXT}` 193 + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\shell\open\command" "" `${COMMAND}` 194 + !macroend 195 + 196 + !macro APP_UNASSOCIATE EXT FILECLASS 197 + ; Backup the previously associated file class 198 + ReadRegStr $R0 SHELL_CONTEXT "Software\Classes\.${EXT}" `${FILECLASS}_backup` 199 + WriteRegStr SHELL_CONTEXT "Software\Classes\.${EXT}" "" "$R0" 200 + 201 + DeleteRegKey SHELL_CONTEXT `Software\Classes\${FILECLASS}` 202 + !macroend 203 + 204 + !macro wails.associateFiles 205 + ; Create file associations 206 + {{range .Info.FileAssociations}} 207 + !insertmacro APP_ASSOCIATE "{{.Ext}}" "{{.Name}}" "{{.Description}}" "$INSTDIR\{{.IconName}}.ico" "Open with ${INFO_PRODUCTNAME}" "$INSTDIR\${PRODUCT_EXECUTABLE} $\"%1$\"" 208 + 209 + File "..\{{.IconName}}.ico" 210 + {{end}} 211 + !macroend 212 + 213 + !macro wails.unassociateFiles 214 + ; Delete app associations 215 + {{range .Info.FileAssociations}} 216 + !insertmacro APP_UNASSOCIATE "{{.Ext}}" "{{.Name}}" 217 + 218 + Delete "$INSTDIR\{{.IconName}}.ico" 219 + {{end}} 220 + !macroend 221 + 222 + !macro CUSTOM_PROTOCOL_ASSOCIATE PROTOCOL DESCRIPTION ICON COMMAND 223 + DeleteRegKey SHELL_CONTEXT "Software\Classes\${PROTOCOL}" 224 + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}" "" "${DESCRIPTION}" 225 + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}" "URL Protocol" "" 226 + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\DefaultIcon" "" "${ICON}" 227 + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\shell" "" "" 228 + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\shell\open" "" "" 229 + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\shell\open\command" "" "${COMMAND}" 230 + !macroend 231 + 232 + !macro CUSTOM_PROTOCOL_UNASSOCIATE PROTOCOL 233 + DeleteRegKey SHELL_CONTEXT "Software\Classes\${PROTOCOL}" 234 + !macroend 235 + 236 + !macro wails.associateCustomProtocols 237 + ; Create custom protocols associations 238 + {{range .Info.Protocols}} 239 + !insertmacro CUSTOM_PROTOCOL_ASSOCIATE "{{.Scheme}}" "{{.Description}}" "$INSTDIR\${PRODUCT_EXECUTABLE},0" "$INSTDIR\${PRODUCT_EXECUTABLE} $\"%1$\"" 240 + 241 + {{end}} 242 + !macroend 243 + 244 + !macro wails.unassociateCustomProtocols 245 + ; Delete app custom protocol associations 246 + {{range .Info.Protocols}} 247 + !insertmacro CUSTOM_PROTOCOL_UNASSOCIATE "{{.Scheme}}" 248 + {{end}} 249 + !macroend
+15
build/windows/wails.exe.manifest
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 2 + <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> 3 + <assemblyIdentity type="win32" name="com.wails.{{.Name}}" version="{{.Info.ProductVersion}}.0" processorArchitecture="*"/> 4 + <dependency> 5 + <dependentAssembly> 6 + <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/> 7 + </dependentAssembly> 8 + </dependency> 9 + <asmv3:application> 10 + <asmv3:windowsSettings> 11 + <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware> <!-- fallback for Windows 7 and 8 --> 12 + <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness> <!-- falls back to per-monitor if per-monitor v2 is not supported --> 13 + </asmv3:windowsSettings> 14 + </asmv3:application> 15 + </assembly>
+65
frontend/README.md
··· 1 + # Svelte + TS + Vite 2 + 3 + This template should help get you started developing with Svelte and TypeScript in Vite. 4 + 5 + ## Recommended IDE Setup 6 + 7 + [VS Code](https://code.visualstudio.com/) 8 + 9 + + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). 10 + 11 + ## Need an official Svelte framework? 12 + 13 + Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its 14 + serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, 15 + and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more. 16 + 17 + ## Technical considerations 18 + 19 + **Why use this over SvelteKit?** 20 + 21 + - It brings its own routing solution which might not be preferable for some users. 22 + - It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app. 23 + `vite dev` and `vite build` wouldn't work in a SvelteKit environment, for example. 24 + 25 + This template contains as little as possible to get started with Vite + TypeScript + Svelte, while taking into account 26 + the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the 27 + other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte 28 + project. 29 + 30 + Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been 31 + structured similarly to SvelteKit so that it is easy to migrate. 32 + 33 + **Why `global.d.ts` instead of `compilerOptions.types` inside `jsconfig.json` or `tsconfig.json`?** 34 + 35 + Setting `compilerOptions.types` shuts out all other types not explicitly listed in the configuration. Using triple-slash 36 + references keeps the default TypeScript setting of accepting type information from the entire workspace, while also 37 + adding `svelte` and `vite/client` type information. 38 + 39 + **Why include `.vscode/extensions.json`?** 40 + 41 + Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to 42 + install the recommended extension upon opening the project. 43 + 44 + **Why enable `allowJs` in the TS template?** 45 + 46 + While `allowJs: false` would indeed prevent the use of `.js` files in the project, it does not prevent the use of 47 + JavaScript syntax in `.svelte` files. In addition, it would force `checkJs: false`, bringing the worst of both worlds: 48 + not being able to guarantee the entire codebase is TypeScript, and also having worse typechecking for the existing 49 + JavaScript. In addition, there are valid use cases in which a mixed codebase may be relevant. 50 + 51 + **Why is HMR not preserving my local component state?** 52 + 53 + HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` 54 + and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the 55 + details [here](https://github.com/rixo/svelte-hmr#svelte-hmr). 56 + 57 + If you have state that's important to retain within a component, consider creating an external store which would not be 58 + replaced by HMR. 59 + 60 + ```ts 61 + // store.ts 62 + // An extremely simple external store 63 + import { writable } from 'svelte/store' 64 + export default writable(0) 65 + ```
+12
frontend/index.html
··· 1 + <!DOCTYPE html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8"/> 5 + <meta content="width=device-width, initial-scale=1.0" name="viewport"/> 6 + <title>bsky-browser-gui</title> 7 + </head> 8 + <body> 9 + <div id="app"></div> 10 + <script src="./src/main.ts" type="module"></script> 11 + </body> 12 + </html>
+1524
frontend/package-lock.json
··· 1 + { 2 + "name": "frontend", 3 + "version": "0.0.0", 4 + "lockfileVersion": 3, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "frontend", 9 + "version": "0.0.0", 10 + "devDependencies": { 11 + "@sveltejs/vite-plugin-svelte": "^6.2.4", 12 + "svelte": "^5.53.12", 13 + "svelte-check": "^4.4.5", 14 + "tslib": "^2.8.1", 15 + "typescript": "^5.9.3", 16 + "vite": "^7.2.6" 17 + } 18 + }, 19 + "node_modules/@esbuild/aix-ppc64": { 20 + "version": "0.27.4", 21 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", 22 + "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", 23 + "cpu": [ 24 + "ppc64" 25 + ], 26 + "dev": true, 27 + "license": "MIT", 28 + "optional": true, 29 + "os": [ 30 + "aix" 31 + ], 32 + "engines": { 33 + "node": ">=18" 34 + } 35 + }, 36 + "node_modules/@esbuild/android-arm": { 37 + "version": "0.27.4", 38 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", 39 + "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", 40 + "cpu": [ 41 + "arm" 42 + ], 43 + "dev": true, 44 + "license": "MIT", 45 + "optional": true, 46 + "os": [ 47 + "android" 48 + ], 49 + "engines": { 50 + "node": ">=18" 51 + } 52 + }, 53 + "node_modules/@esbuild/android-arm64": { 54 + "version": "0.27.4", 55 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", 56 + "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", 57 + "cpu": [ 58 + "arm64" 59 + ], 60 + "dev": true, 61 + "license": "MIT", 62 + "optional": true, 63 + "os": [ 64 + "android" 65 + ], 66 + "engines": { 67 + "node": ">=18" 68 + } 69 + }, 70 + "node_modules/@esbuild/android-x64": { 71 + "version": "0.27.4", 72 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", 73 + "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", 74 + "cpu": [ 75 + "x64" 76 + ], 77 + "dev": true, 78 + "license": "MIT", 79 + "optional": true, 80 + "os": [ 81 + "android" 82 + ], 83 + "engines": { 84 + "node": ">=18" 85 + } 86 + }, 87 + "node_modules/@esbuild/darwin-arm64": { 88 + "version": "0.27.4", 89 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", 90 + "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", 91 + "cpu": [ 92 + "arm64" 93 + ], 94 + "dev": true, 95 + "license": "MIT", 96 + "optional": true, 97 + "os": [ 98 + "darwin" 99 + ], 100 + "engines": { 101 + "node": ">=18" 102 + } 103 + }, 104 + "node_modules/@esbuild/darwin-x64": { 105 + "version": "0.27.4", 106 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", 107 + "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", 108 + "cpu": [ 109 + "x64" 110 + ], 111 + "dev": true, 112 + "license": "MIT", 113 + "optional": true, 114 + "os": [ 115 + "darwin" 116 + ], 117 + "engines": { 118 + "node": ">=18" 119 + } 120 + }, 121 + "node_modules/@esbuild/freebsd-arm64": { 122 + "version": "0.27.4", 123 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", 124 + "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", 125 + "cpu": [ 126 + "arm64" 127 + ], 128 + "dev": true, 129 + "license": "MIT", 130 + "optional": true, 131 + "os": [ 132 + "freebsd" 133 + ], 134 + "engines": { 135 + "node": ">=18" 136 + } 137 + }, 138 + "node_modules/@esbuild/freebsd-x64": { 139 + "version": "0.27.4", 140 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", 141 + "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", 142 + "cpu": [ 143 + "x64" 144 + ], 145 + "dev": true, 146 + "license": "MIT", 147 + "optional": true, 148 + "os": [ 149 + "freebsd" 150 + ], 151 + "engines": { 152 + "node": ">=18" 153 + } 154 + }, 155 + "node_modules/@esbuild/linux-arm": { 156 + "version": "0.27.4", 157 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", 158 + "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", 159 + "cpu": [ 160 + "arm" 161 + ], 162 + "dev": true, 163 + "license": "MIT", 164 + "optional": true, 165 + "os": [ 166 + "linux" 167 + ], 168 + "engines": { 169 + "node": ">=18" 170 + } 171 + }, 172 + "node_modules/@esbuild/linux-arm64": { 173 + "version": "0.27.4", 174 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", 175 + "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", 176 + "cpu": [ 177 + "arm64" 178 + ], 179 + "dev": true, 180 + "license": "MIT", 181 + "optional": true, 182 + "os": [ 183 + "linux" 184 + ], 185 + "engines": { 186 + "node": ">=18" 187 + } 188 + }, 189 + "node_modules/@esbuild/linux-ia32": { 190 + "version": "0.27.4", 191 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", 192 + "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", 193 + "cpu": [ 194 + "ia32" 195 + ], 196 + "dev": true, 197 + "license": "MIT", 198 + "optional": true, 199 + "os": [ 200 + "linux" 201 + ], 202 + "engines": { 203 + "node": ">=18" 204 + } 205 + }, 206 + "node_modules/@esbuild/linux-loong64": { 207 + "version": "0.27.4", 208 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", 209 + "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", 210 + "cpu": [ 211 + "loong64" 212 + ], 213 + "dev": true, 214 + "license": "MIT", 215 + "optional": true, 216 + "os": [ 217 + "linux" 218 + ], 219 + "engines": { 220 + "node": ">=18" 221 + } 222 + }, 223 + "node_modules/@esbuild/linux-mips64el": { 224 + "version": "0.27.4", 225 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", 226 + "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", 227 + "cpu": [ 228 + "mips64el" 229 + ], 230 + "dev": true, 231 + "license": "MIT", 232 + "optional": true, 233 + "os": [ 234 + "linux" 235 + ], 236 + "engines": { 237 + "node": ">=18" 238 + } 239 + }, 240 + "node_modules/@esbuild/linux-ppc64": { 241 + "version": "0.27.4", 242 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", 243 + "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", 244 + "cpu": [ 245 + "ppc64" 246 + ], 247 + "dev": true, 248 + "license": "MIT", 249 + "optional": true, 250 + "os": [ 251 + "linux" 252 + ], 253 + "engines": { 254 + "node": ">=18" 255 + } 256 + }, 257 + "node_modules/@esbuild/linux-riscv64": { 258 + "version": "0.27.4", 259 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", 260 + "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", 261 + "cpu": [ 262 + "riscv64" 263 + ], 264 + "dev": true, 265 + "license": "MIT", 266 + "optional": true, 267 + "os": [ 268 + "linux" 269 + ], 270 + "engines": { 271 + "node": ">=18" 272 + } 273 + }, 274 + "node_modules/@esbuild/linux-s390x": { 275 + "version": "0.27.4", 276 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", 277 + "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", 278 + "cpu": [ 279 + "s390x" 280 + ], 281 + "dev": true, 282 + "license": "MIT", 283 + "optional": true, 284 + "os": [ 285 + "linux" 286 + ], 287 + "engines": { 288 + "node": ">=18" 289 + } 290 + }, 291 + "node_modules/@esbuild/linux-x64": { 292 + "version": "0.27.4", 293 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", 294 + "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", 295 + "cpu": [ 296 + "x64" 297 + ], 298 + "dev": true, 299 + "license": "MIT", 300 + "optional": true, 301 + "os": [ 302 + "linux" 303 + ], 304 + "engines": { 305 + "node": ">=18" 306 + } 307 + }, 308 + "node_modules/@esbuild/netbsd-x64": { 309 + "version": "0.27.4", 310 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", 311 + "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", 312 + "cpu": [ 313 + "x64" 314 + ], 315 + "dev": true, 316 + "license": "MIT", 317 + "optional": true, 318 + "os": [ 319 + "netbsd" 320 + ], 321 + "engines": { 322 + "node": ">=18" 323 + } 324 + }, 325 + "node_modules/@esbuild/openbsd-arm64": { 326 + "version": "0.27.4", 327 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", 328 + "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", 329 + "cpu": [ 330 + "arm64" 331 + ], 332 + "dev": true, 333 + "license": "MIT", 334 + "optional": true, 335 + "os": [ 336 + "openbsd" 337 + ], 338 + "engines": { 339 + "node": ">=18" 340 + } 341 + }, 342 + "node_modules/@esbuild/openbsd-x64": { 343 + "version": "0.27.4", 344 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", 345 + "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", 346 + "cpu": [ 347 + "x64" 348 + ], 349 + "dev": true, 350 + "license": "MIT", 351 + "optional": true, 352 + "os": [ 353 + "openbsd" 354 + ], 355 + "engines": { 356 + "node": ">=18" 357 + } 358 + }, 359 + "node_modules/@esbuild/openharmony-arm64": { 360 + "version": "0.27.4", 361 + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", 362 + "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", 363 + "cpu": [ 364 + "arm64" 365 + ], 366 + "dev": true, 367 + "license": "MIT", 368 + "optional": true, 369 + "os": [ 370 + "openharmony" 371 + ], 372 + "engines": { 373 + "node": ">=18" 374 + } 375 + }, 376 + "node_modules/@esbuild/sunos-x64": { 377 + "version": "0.27.4", 378 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", 379 + "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", 380 + "cpu": [ 381 + "x64" 382 + ], 383 + "dev": true, 384 + "license": "MIT", 385 + "optional": true, 386 + "os": [ 387 + "sunos" 388 + ], 389 + "engines": { 390 + "node": ">=18" 391 + } 392 + }, 393 + "node_modules/@esbuild/win32-arm64": { 394 + "version": "0.27.4", 395 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", 396 + "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", 397 + "cpu": [ 398 + "arm64" 399 + ], 400 + "dev": true, 401 + "license": "MIT", 402 + "optional": true, 403 + "os": [ 404 + "win32" 405 + ], 406 + "engines": { 407 + "node": ">=18" 408 + } 409 + }, 410 + "node_modules/@esbuild/win32-ia32": { 411 + "version": "0.27.4", 412 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", 413 + "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", 414 + "cpu": [ 415 + "ia32" 416 + ], 417 + "dev": true, 418 + "license": "MIT", 419 + "optional": true, 420 + "os": [ 421 + "win32" 422 + ], 423 + "engines": { 424 + "node": ">=18" 425 + } 426 + }, 427 + "node_modules/@esbuild/win32-x64": { 428 + "version": "0.27.4", 429 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", 430 + "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", 431 + "cpu": [ 432 + "x64" 433 + ], 434 + "dev": true, 435 + "license": "MIT", 436 + "optional": true, 437 + "os": [ 438 + "win32" 439 + ], 440 + "engines": { 441 + "node": ">=18" 442 + } 443 + }, 444 + "node_modules/@jridgewell/gen-mapping": { 445 + "version": "0.3.13", 446 + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", 447 + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", 448 + "dev": true, 449 + "license": "MIT", 450 + "dependencies": { 451 + "@jridgewell/sourcemap-codec": "^1.5.0", 452 + "@jridgewell/trace-mapping": "^0.3.24" 453 + } 454 + }, 455 + "node_modules/@jridgewell/remapping": { 456 + "version": "2.3.5", 457 + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", 458 + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", 459 + "dev": true, 460 + "license": "MIT", 461 + "dependencies": { 462 + "@jridgewell/gen-mapping": "^0.3.5", 463 + "@jridgewell/trace-mapping": "^0.3.24" 464 + } 465 + }, 466 + "node_modules/@jridgewell/resolve-uri": { 467 + "version": "3.1.2", 468 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 469 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 470 + "dev": true, 471 + "license": "MIT", 472 + "engines": { 473 + "node": ">=6.0.0" 474 + } 475 + }, 476 + "node_modules/@jridgewell/sourcemap-codec": { 477 + "version": "1.5.5", 478 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 479 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 480 + "dev": true, 481 + "license": "MIT" 482 + }, 483 + "node_modules/@jridgewell/trace-mapping": { 484 + "version": "0.3.31", 485 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", 486 + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", 487 + "dev": true, 488 + "license": "MIT", 489 + "dependencies": { 490 + "@jridgewell/resolve-uri": "^3.1.0", 491 + "@jridgewell/sourcemap-codec": "^1.4.14" 492 + } 493 + }, 494 + "node_modules/@rollup/rollup-android-arm-eabi": { 495 + "version": "4.59.0", 496 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", 497 + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", 498 + "cpu": [ 499 + "arm" 500 + ], 501 + "dev": true, 502 + "license": "MIT", 503 + "optional": true, 504 + "os": [ 505 + "android" 506 + ] 507 + }, 508 + "node_modules/@rollup/rollup-android-arm64": { 509 + "version": "4.59.0", 510 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", 511 + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", 512 + "cpu": [ 513 + "arm64" 514 + ], 515 + "dev": true, 516 + "license": "MIT", 517 + "optional": true, 518 + "os": [ 519 + "android" 520 + ] 521 + }, 522 + "node_modules/@rollup/rollup-darwin-arm64": { 523 + "version": "4.59.0", 524 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", 525 + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", 526 + "cpu": [ 527 + "arm64" 528 + ], 529 + "dev": true, 530 + "license": "MIT", 531 + "optional": true, 532 + "os": [ 533 + "darwin" 534 + ] 535 + }, 536 + "node_modules/@rollup/rollup-darwin-x64": { 537 + "version": "4.59.0", 538 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", 539 + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", 540 + "cpu": [ 541 + "x64" 542 + ], 543 + "dev": true, 544 + "license": "MIT", 545 + "optional": true, 546 + "os": [ 547 + "darwin" 548 + ] 549 + }, 550 + "node_modules/@rollup/rollup-freebsd-arm64": { 551 + "version": "4.59.0", 552 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", 553 + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", 554 + "cpu": [ 555 + "arm64" 556 + ], 557 + "dev": true, 558 + "license": "MIT", 559 + "optional": true, 560 + "os": [ 561 + "freebsd" 562 + ] 563 + }, 564 + "node_modules/@rollup/rollup-freebsd-x64": { 565 + "version": "4.59.0", 566 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", 567 + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", 568 + "cpu": [ 569 + "x64" 570 + ], 571 + "dev": true, 572 + "license": "MIT", 573 + "optional": true, 574 + "os": [ 575 + "freebsd" 576 + ] 577 + }, 578 + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 579 + "version": "4.59.0", 580 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", 581 + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", 582 + "cpu": [ 583 + "arm" 584 + ], 585 + "dev": true, 586 + "libc": [ 587 + "glibc" 588 + ], 589 + "license": "MIT", 590 + "optional": true, 591 + "os": [ 592 + "linux" 593 + ] 594 + }, 595 + "node_modules/@rollup/rollup-linux-arm-musleabihf": { 596 + "version": "4.59.0", 597 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", 598 + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", 599 + "cpu": [ 600 + "arm" 601 + ], 602 + "dev": true, 603 + "libc": [ 604 + "musl" 605 + ], 606 + "license": "MIT", 607 + "optional": true, 608 + "os": [ 609 + "linux" 610 + ] 611 + }, 612 + "node_modules/@rollup/rollup-linux-arm64-gnu": { 613 + "version": "4.59.0", 614 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", 615 + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", 616 + "cpu": [ 617 + "arm64" 618 + ], 619 + "dev": true, 620 + "libc": [ 621 + "glibc" 622 + ], 623 + "license": "MIT", 624 + "optional": true, 625 + "os": [ 626 + "linux" 627 + ] 628 + }, 629 + "node_modules/@rollup/rollup-linux-arm64-musl": { 630 + "version": "4.59.0", 631 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", 632 + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", 633 + "cpu": [ 634 + "arm64" 635 + ], 636 + "dev": true, 637 + "libc": [ 638 + "musl" 639 + ], 640 + "license": "MIT", 641 + "optional": true, 642 + "os": [ 643 + "linux" 644 + ] 645 + }, 646 + "node_modules/@rollup/rollup-linux-loong64-gnu": { 647 + "version": "4.59.0", 648 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", 649 + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", 650 + "cpu": [ 651 + "loong64" 652 + ], 653 + "dev": true, 654 + "libc": [ 655 + "glibc" 656 + ], 657 + "license": "MIT", 658 + "optional": true, 659 + "os": [ 660 + "linux" 661 + ] 662 + }, 663 + "node_modules/@rollup/rollup-linux-loong64-musl": { 664 + "version": "4.59.0", 665 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", 666 + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", 667 + "cpu": [ 668 + "loong64" 669 + ], 670 + "dev": true, 671 + "libc": [ 672 + "musl" 673 + ], 674 + "license": "MIT", 675 + "optional": true, 676 + "os": [ 677 + "linux" 678 + ] 679 + }, 680 + "node_modules/@rollup/rollup-linux-ppc64-gnu": { 681 + "version": "4.59.0", 682 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", 683 + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", 684 + "cpu": [ 685 + "ppc64" 686 + ], 687 + "dev": true, 688 + "libc": [ 689 + "glibc" 690 + ], 691 + "license": "MIT", 692 + "optional": true, 693 + "os": [ 694 + "linux" 695 + ] 696 + }, 697 + "node_modules/@rollup/rollup-linux-ppc64-musl": { 698 + "version": "4.59.0", 699 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", 700 + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", 701 + "cpu": [ 702 + "ppc64" 703 + ], 704 + "dev": true, 705 + "libc": [ 706 + "musl" 707 + ], 708 + "license": "MIT", 709 + "optional": true, 710 + "os": [ 711 + "linux" 712 + ] 713 + }, 714 + "node_modules/@rollup/rollup-linux-riscv64-gnu": { 715 + "version": "4.59.0", 716 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", 717 + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", 718 + "cpu": [ 719 + "riscv64" 720 + ], 721 + "dev": true, 722 + "libc": [ 723 + "glibc" 724 + ], 725 + "license": "MIT", 726 + "optional": true, 727 + "os": [ 728 + "linux" 729 + ] 730 + }, 731 + "node_modules/@rollup/rollup-linux-riscv64-musl": { 732 + "version": "4.59.0", 733 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", 734 + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", 735 + "cpu": [ 736 + "riscv64" 737 + ], 738 + "dev": true, 739 + "libc": [ 740 + "musl" 741 + ], 742 + "license": "MIT", 743 + "optional": true, 744 + "os": [ 745 + "linux" 746 + ] 747 + }, 748 + "node_modules/@rollup/rollup-linux-s390x-gnu": { 749 + "version": "4.59.0", 750 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", 751 + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", 752 + "cpu": [ 753 + "s390x" 754 + ], 755 + "dev": true, 756 + "libc": [ 757 + "glibc" 758 + ], 759 + "license": "MIT", 760 + "optional": true, 761 + "os": [ 762 + "linux" 763 + ] 764 + }, 765 + "node_modules/@rollup/rollup-linux-x64-gnu": { 766 + "version": "4.59.0", 767 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", 768 + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", 769 + "cpu": [ 770 + "x64" 771 + ], 772 + "dev": true, 773 + "libc": [ 774 + "glibc" 775 + ], 776 + "license": "MIT", 777 + "optional": true, 778 + "os": [ 779 + "linux" 780 + ] 781 + }, 782 + "node_modules/@rollup/rollup-linux-x64-musl": { 783 + "version": "4.59.0", 784 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", 785 + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", 786 + "cpu": [ 787 + "x64" 788 + ], 789 + "dev": true, 790 + "libc": [ 791 + "musl" 792 + ], 793 + "license": "MIT", 794 + "optional": true, 795 + "os": [ 796 + "linux" 797 + ] 798 + }, 799 + "node_modules/@rollup/rollup-openbsd-x64": { 800 + "version": "4.59.0", 801 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", 802 + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", 803 + "cpu": [ 804 + "x64" 805 + ], 806 + "dev": true, 807 + "license": "MIT", 808 + "optional": true, 809 + "os": [ 810 + "openbsd" 811 + ] 812 + }, 813 + "node_modules/@rollup/rollup-openharmony-arm64": { 814 + "version": "4.59.0", 815 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", 816 + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", 817 + "cpu": [ 818 + "arm64" 819 + ], 820 + "dev": true, 821 + "license": "MIT", 822 + "optional": true, 823 + "os": [ 824 + "openharmony" 825 + ] 826 + }, 827 + "node_modules/@rollup/rollup-win32-arm64-msvc": { 828 + "version": "4.59.0", 829 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", 830 + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", 831 + "cpu": [ 832 + "arm64" 833 + ], 834 + "dev": true, 835 + "license": "MIT", 836 + "optional": true, 837 + "os": [ 838 + "win32" 839 + ] 840 + }, 841 + "node_modules/@rollup/rollup-win32-ia32-msvc": { 842 + "version": "4.59.0", 843 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", 844 + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", 845 + "cpu": [ 846 + "ia32" 847 + ], 848 + "dev": true, 849 + "license": "MIT", 850 + "optional": true, 851 + "os": [ 852 + "win32" 853 + ] 854 + }, 855 + "node_modules/@rollup/rollup-win32-x64-gnu": { 856 + "version": "4.59.0", 857 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", 858 + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", 859 + "cpu": [ 860 + "x64" 861 + ], 862 + "dev": true, 863 + "license": "MIT", 864 + "optional": true, 865 + "os": [ 866 + "win32" 867 + ] 868 + }, 869 + "node_modules/@rollup/rollup-win32-x64-msvc": { 870 + "version": "4.59.0", 871 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", 872 + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", 873 + "cpu": [ 874 + "x64" 875 + ], 876 + "dev": true, 877 + "license": "MIT", 878 + "optional": true, 879 + "os": [ 880 + "win32" 881 + ] 882 + }, 883 + "node_modules/@sveltejs/acorn-typescript": { 884 + "version": "1.0.9", 885 + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz", 886 + "integrity": "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==", 887 + "dev": true, 888 + "license": "MIT", 889 + "peerDependencies": { 890 + "acorn": "^8.9.0" 891 + } 892 + }, 893 + "node_modules/@sveltejs/vite-plugin-svelte": { 894 + "version": "6.2.4", 895 + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.4.tgz", 896 + "integrity": "sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==", 897 + "dev": true, 898 + "license": "MIT", 899 + "dependencies": { 900 + "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", 901 + "deepmerge": "^4.3.1", 902 + "magic-string": "^0.30.21", 903 + "obug": "^2.1.0", 904 + "vitefu": "^1.1.1" 905 + }, 906 + "engines": { 907 + "node": "^20.19 || ^22.12 || >=24" 908 + }, 909 + "peerDependencies": { 910 + "svelte": "^5.0.0", 911 + "vite": "^6.3.0 || ^7.0.0" 912 + } 913 + }, 914 + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { 915 + "version": "5.0.2", 916 + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.2.tgz", 917 + "integrity": "sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==", 918 + "dev": true, 919 + "license": "MIT", 920 + "dependencies": { 921 + "obug": "^2.1.0" 922 + }, 923 + "engines": { 924 + "node": "^20.19 || ^22.12 || >=24" 925 + }, 926 + "peerDependencies": { 927 + "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", 928 + "svelte": "^5.0.0", 929 + "vite": "^6.3.0 || ^7.0.0" 930 + } 931 + }, 932 + "node_modules/@types/estree": { 933 + "version": "1.0.8", 934 + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 935 + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 936 + "dev": true, 937 + "license": "MIT" 938 + }, 939 + "node_modules/@types/trusted-types": { 940 + "version": "2.0.7", 941 + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", 942 + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", 943 + "dev": true, 944 + "license": "MIT" 945 + }, 946 + "node_modules/@typescript-eslint/types": { 947 + "version": "8.57.0", 948 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.0.tgz", 949 + "integrity": "sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==", 950 + "dev": true, 951 + "license": "MIT", 952 + "engines": { 953 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 954 + }, 955 + "funding": { 956 + "type": "opencollective", 957 + "url": "https://opencollective.com/typescript-eslint" 958 + } 959 + }, 960 + "node_modules/acorn": { 961 + "version": "8.16.0", 962 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", 963 + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", 964 + "dev": true, 965 + "license": "MIT", 966 + "bin": { 967 + "acorn": "bin/acorn" 968 + }, 969 + "engines": { 970 + "node": ">=0.4.0" 971 + } 972 + }, 973 + "node_modules/aria-query": { 974 + "version": "5.3.1", 975 + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz", 976 + "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==", 977 + "dev": true, 978 + "license": "Apache-2.0", 979 + "engines": { 980 + "node": ">= 0.4" 981 + } 982 + }, 983 + "node_modules/axobject-query": { 984 + "version": "4.1.0", 985 + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", 986 + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", 987 + "dev": true, 988 + "license": "Apache-2.0", 989 + "engines": { 990 + "node": ">= 0.4" 991 + } 992 + }, 993 + "node_modules/chokidar": { 994 + "version": "4.0.3", 995 + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", 996 + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", 997 + "dev": true, 998 + "license": "MIT", 999 + "dependencies": { 1000 + "readdirp": "^4.0.1" 1001 + }, 1002 + "engines": { 1003 + "node": ">= 14.16.0" 1004 + }, 1005 + "funding": { 1006 + "url": "https://paulmillr.com/funding/" 1007 + } 1008 + }, 1009 + "node_modules/clsx": { 1010 + "version": "2.1.1", 1011 + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", 1012 + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", 1013 + "dev": true, 1014 + "license": "MIT", 1015 + "engines": { 1016 + "node": ">=6" 1017 + } 1018 + }, 1019 + "node_modules/deepmerge": { 1020 + "version": "4.3.1", 1021 + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 1022 + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1023 + "dev": true, 1024 + "license": "MIT", 1025 + "engines": { 1026 + "node": ">=0.10.0" 1027 + } 1028 + }, 1029 + "node_modules/devalue": { 1030 + "version": "5.6.4", 1031 + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz", 1032 + "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==", 1033 + "dev": true, 1034 + "license": "MIT" 1035 + }, 1036 + "node_modules/esbuild": { 1037 + "version": "0.27.4", 1038 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", 1039 + "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", 1040 + "dev": true, 1041 + "hasInstallScript": true, 1042 + "license": "MIT", 1043 + "bin": { 1044 + "esbuild": "bin/esbuild" 1045 + }, 1046 + "engines": { 1047 + "node": ">=18" 1048 + }, 1049 + "optionalDependencies": { 1050 + "@esbuild/aix-ppc64": "0.27.4", 1051 + "@esbuild/android-arm": "0.27.4", 1052 + "@esbuild/android-arm64": "0.27.4", 1053 + "@esbuild/android-x64": "0.27.4", 1054 + "@esbuild/darwin-arm64": "0.27.4", 1055 + "@esbuild/darwin-x64": "0.27.4", 1056 + "@esbuild/freebsd-arm64": "0.27.4", 1057 + "@esbuild/freebsd-x64": "0.27.4", 1058 + "@esbuild/linux-arm": "0.27.4", 1059 + "@esbuild/linux-arm64": "0.27.4", 1060 + "@esbuild/linux-ia32": "0.27.4", 1061 + "@esbuild/linux-loong64": "0.27.4", 1062 + "@esbuild/linux-mips64el": "0.27.4", 1063 + "@esbuild/linux-ppc64": "0.27.4", 1064 + "@esbuild/linux-riscv64": "0.27.4", 1065 + "@esbuild/linux-s390x": "0.27.4", 1066 + "@esbuild/linux-x64": "0.27.4", 1067 + "@esbuild/netbsd-arm64": "0.27.4", 1068 + "@esbuild/netbsd-x64": "0.27.4", 1069 + "@esbuild/openbsd-arm64": "0.27.4", 1070 + "@esbuild/openbsd-x64": "0.27.4", 1071 + "@esbuild/openharmony-arm64": "0.27.4", 1072 + "@esbuild/sunos-x64": "0.27.4", 1073 + "@esbuild/win32-arm64": "0.27.4", 1074 + "@esbuild/win32-ia32": "0.27.4", 1075 + "@esbuild/win32-x64": "0.27.4" 1076 + } 1077 + }, 1078 + "node_modules/esbuild/node_modules/@esbuild/netbsd-arm64": { 1079 + "dev": true, 1080 + "optional": true 1081 + }, 1082 + "node_modules/esm-env": { 1083 + "version": "1.2.2", 1084 + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", 1085 + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", 1086 + "dev": true, 1087 + "license": "MIT" 1088 + }, 1089 + "node_modules/esrap": { 1090 + "version": "2.2.4", 1091 + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.4.tgz", 1092 + "integrity": "sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==", 1093 + "dev": true, 1094 + "license": "MIT", 1095 + "dependencies": { 1096 + "@jridgewell/sourcemap-codec": "^1.4.15", 1097 + "@typescript-eslint/types": "^8.2.0" 1098 + } 1099 + }, 1100 + "node_modules/fdir": { 1101 + "version": "6.5.0", 1102 + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 1103 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 1104 + "dev": true, 1105 + "license": "MIT", 1106 + "engines": { 1107 + "node": ">=12.0.0" 1108 + }, 1109 + "peerDependencies": { 1110 + "picomatch": "^3 || ^4" 1111 + }, 1112 + "peerDependenciesMeta": { 1113 + "picomatch": { 1114 + "optional": true 1115 + } 1116 + } 1117 + }, 1118 + "node_modules/fsevents": { 1119 + "version": "2.3.3", 1120 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1121 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1122 + "dev": true, 1123 + "hasInstallScript": true, 1124 + "license": "MIT", 1125 + "optional": true, 1126 + "os": [ 1127 + "darwin" 1128 + ], 1129 + "engines": { 1130 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1131 + } 1132 + }, 1133 + "node_modules/is-reference": { 1134 + "version": "3.0.3", 1135 + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", 1136 + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", 1137 + "dev": true, 1138 + "license": "MIT", 1139 + "dependencies": { 1140 + "@types/estree": "^1.0.6" 1141 + } 1142 + }, 1143 + "node_modules/locate-character": { 1144 + "version": "3.0.0", 1145 + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", 1146 + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", 1147 + "dev": true, 1148 + "license": "MIT" 1149 + }, 1150 + "node_modules/magic-string": { 1151 + "version": "0.30.21", 1152 + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", 1153 + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", 1154 + "dev": true, 1155 + "license": "MIT", 1156 + "dependencies": { 1157 + "@jridgewell/sourcemap-codec": "^1.5.5" 1158 + } 1159 + }, 1160 + "node_modules/mri": { 1161 + "version": "1.2.0", 1162 + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 1163 + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 1164 + "dev": true, 1165 + "license": "MIT", 1166 + "engines": { 1167 + "node": ">=4" 1168 + } 1169 + }, 1170 + "node_modules/nanoid": { 1171 + "version": "3.3.11", 1172 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 1173 + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 1174 + "dev": true, 1175 + "funding": [ 1176 + { 1177 + "type": "github", 1178 + "url": "https://github.com/sponsors/ai" 1179 + } 1180 + ], 1181 + "license": "MIT", 1182 + "bin": { 1183 + "nanoid": "bin/nanoid.cjs" 1184 + }, 1185 + "engines": { 1186 + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1187 + } 1188 + }, 1189 + "node_modules/obug": { 1190 + "version": "2.1.1", 1191 + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", 1192 + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", 1193 + "dev": true, 1194 + "funding": [ 1195 + "https://github.com/sponsors/sxzz", 1196 + "https://opencollective.com/debug" 1197 + ], 1198 + "license": "MIT" 1199 + }, 1200 + "node_modules/picocolors": { 1201 + "version": "1.1.1", 1202 + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1203 + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1204 + "dev": true, 1205 + "license": "ISC" 1206 + }, 1207 + "node_modules/picomatch": { 1208 + "version": "4.0.3", 1209 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 1210 + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 1211 + "dev": true, 1212 + "license": "MIT", 1213 + "engines": { 1214 + "node": ">=12" 1215 + }, 1216 + "funding": { 1217 + "url": "https://github.com/sponsors/jonschlinkert" 1218 + } 1219 + }, 1220 + "node_modules/postcss": { 1221 + "version": "8.5.8", 1222 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", 1223 + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", 1224 + "dev": true, 1225 + "funding": [ 1226 + { 1227 + "type": "opencollective", 1228 + "url": "https://opencollective.com/postcss/" 1229 + }, 1230 + { 1231 + "type": "tidelift", 1232 + "url": "https://tidelift.com/funding/github/npm/postcss" 1233 + }, 1234 + { 1235 + "type": "github", 1236 + "url": "https://github.com/sponsors/ai" 1237 + } 1238 + ], 1239 + "license": "MIT", 1240 + "dependencies": { 1241 + "nanoid": "^3.3.11", 1242 + "picocolors": "^1.1.1", 1243 + "source-map-js": "^1.2.1" 1244 + }, 1245 + "engines": { 1246 + "node": "^10 || ^12 || >=14" 1247 + } 1248 + }, 1249 + "node_modules/readdirp": { 1250 + "version": "4.1.2", 1251 + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", 1252 + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", 1253 + "dev": true, 1254 + "license": "MIT", 1255 + "engines": { 1256 + "node": ">= 14.18.0" 1257 + }, 1258 + "funding": { 1259 + "type": "individual", 1260 + "url": "https://paulmillr.com/funding/" 1261 + } 1262 + }, 1263 + "node_modules/rollup": { 1264 + "version": "4.59.0", 1265 + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", 1266 + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", 1267 + "dev": true, 1268 + "license": "MIT", 1269 + "dependencies": { 1270 + "@types/estree": "1.0.8" 1271 + }, 1272 + "bin": { 1273 + "rollup": "dist/bin/rollup" 1274 + }, 1275 + "engines": { 1276 + "node": ">=18.0.0", 1277 + "npm": ">=8.0.0" 1278 + }, 1279 + "optionalDependencies": { 1280 + "@rollup/rollup-android-arm-eabi": "4.59.0", 1281 + "@rollup/rollup-android-arm64": "4.59.0", 1282 + "@rollup/rollup-darwin-arm64": "4.59.0", 1283 + "@rollup/rollup-darwin-x64": "4.59.0", 1284 + "@rollup/rollup-freebsd-arm64": "4.59.0", 1285 + "@rollup/rollup-freebsd-x64": "4.59.0", 1286 + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", 1287 + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", 1288 + "@rollup/rollup-linux-arm64-gnu": "4.59.0", 1289 + "@rollup/rollup-linux-arm64-musl": "4.59.0", 1290 + "@rollup/rollup-linux-loong64-gnu": "4.59.0", 1291 + "@rollup/rollup-linux-loong64-musl": "4.59.0", 1292 + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", 1293 + "@rollup/rollup-linux-ppc64-musl": "4.59.0", 1294 + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", 1295 + "@rollup/rollup-linux-riscv64-musl": "4.59.0", 1296 + "@rollup/rollup-linux-s390x-gnu": "4.59.0", 1297 + "@rollup/rollup-linux-x64-gnu": "4.59.0", 1298 + "@rollup/rollup-linux-x64-musl": "4.59.0", 1299 + "@rollup/rollup-openbsd-x64": "4.59.0", 1300 + "@rollup/rollup-openharmony-arm64": "4.59.0", 1301 + "@rollup/rollup-win32-arm64-msvc": "4.59.0", 1302 + "@rollup/rollup-win32-ia32-msvc": "4.59.0", 1303 + "@rollup/rollup-win32-x64-gnu": "4.59.0", 1304 + "@rollup/rollup-win32-x64-msvc": "4.59.0", 1305 + "fsevents": "~2.3.2" 1306 + } 1307 + }, 1308 + "node_modules/sade": { 1309 + "version": "1.8.1", 1310 + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 1311 + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 1312 + "dev": true, 1313 + "license": "MIT", 1314 + "dependencies": { 1315 + "mri": "^1.1.0" 1316 + }, 1317 + "engines": { 1318 + "node": ">=6" 1319 + } 1320 + }, 1321 + "node_modules/source-map-js": { 1322 + "version": "1.2.1", 1323 + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1324 + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1325 + "dev": true, 1326 + "license": "BSD-3-Clause", 1327 + "engines": { 1328 + "node": ">=0.10.0" 1329 + } 1330 + }, 1331 + "node_modules/svelte": { 1332 + "version": "5.53.12", 1333 + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.53.12.tgz", 1334 + "integrity": "sha512-4x/uk4rQe/d7RhfvS8wemTfNjQ0bJbKvamIzRBfTe2eHHjzBZ7PZicUQrC2ryj83xxEacfA1zHKd1ephD1tAxA==", 1335 + "dev": true, 1336 + "license": "MIT", 1337 + "dependencies": { 1338 + "@jridgewell/remapping": "^2.3.4", 1339 + "@jridgewell/sourcemap-codec": "^1.5.0", 1340 + "@sveltejs/acorn-typescript": "^1.0.5", 1341 + "@types/estree": "^1.0.5", 1342 + "@types/trusted-types": "^2.0.7", 1343 + "acorn": "^8.12.1", 1344 + "aria-query": "5.3.1", 1345 + "axobject-query": "^4.1.0", 1346 + "clsx": "^2.1.1", 1347 + "devalue": "^5.6.4", 1348 + "esm-env": "^1.2.1", 1349 + "esrap": "^2.2.2", 1350 + "is-reference": "^3.0.3", 1351 + "locate-character": "^3.0.0", 1352 + "magic-string": "^0.30.11", 1353 + "zimmerframe": "^1.1.2" 1354 + }, 1355 + "engines": { 1356 + "node": ">=18" 1357 + } 1358 + }, 1359 + "node_modules/svelte-check": { 1360 + "version": "4.4.5", 1361 + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.4.5.tgz", 1362 + "integrity": "sha512-1bSwIRCvvmSHrlK52fOlZmVtUZgil43jNL/2H18pRpa+eQjzGt6e3zayxhp1S7GajPFKNM/2PMCG+DZFHlG9fw==", 1363 + "dev": true, 1364 + "license": "MIT", 1365 + "dependencies": { 1366 + "@jridgewell/trace-mapping": "^0.3.25", 1367 + "chokidar": "^4.0.1", 1368 + "fdir": "^6.2.0", 1369 + "picocolors": "^1.0.0", 1370 + "sade": "^1.7.4" 1371 + }, 1372 + "bin": { 1373 + "svelte-check": "bin/svelte-check" 1374 + }, 1375 + "engines": { 1376 + "node": ">= 18.0.0" 1377 + }, 1378 + "peerDependencies": { 1379 + "svelte": "^4.0.0 || ^5.0.0-next.0", 1380 + "typescript": ">=5.0.0" 1381 + } 1382 + }, 1383 + "node_modules/tinyglobby": { 1384 + "version": "0.2.15", 1385 + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", 1386 + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 1387 + "dev": true, 1388 + "license": "MIT", 1389 + "dependencies": { 1390 + "fdir": "^6.5.0", 1391 + "picomatch": "^4.0.3" 1392 + }, 1393 + "engines": { 1394 + "node": ">=12.0.0" 1395 + }, 1396 + "funding": { 1397 + "url": "https://github.com/sponsors/SuperchupuDev" 1398 + } 1399 + }, 1400 + "node_modules/tslib": { 1401 + "version": "2.8.1", 1402 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 1403 + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 1404 + "dev": true, 1405 + "license": "0BSD" 1406 + }, 1407 + "node_modules/typescript": { 1408 + "version": "5.9.3", 1409 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 1410 + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 1411 + "dev": true, 1412 + "license": "Apache-2.0", 1413 + "bin": { 1414 + "tsc": "bin/tsc", 1415 + "tsserver": "bin/tsserver" 1416 + }, 1417 + "engines": { 1418 + "node": ">=14.17" 1419 + } 1420 + }, 1421 + "node_modules/vite": { 1422 + "version": "7.3.1", 1423 + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", 1424 + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", 1425 + "dev": true, 1426 + "license": "MIT", 1427 + "dependencies": { 1428 + "esbuild": "^0.27.0", 1429 + "fdir": "^6.5.0", 1430 + "picomatch": "^4.0.3", 1431 + "postcss": "^8.5.6", 1432 + "rollup": "^4.43.0", 1433 + "tinyglobby": "^0.2.15" 1434 + }, 1435 + "bin": { 1436 + "vite": "bin/vite.js" 1437 + }, 1438 + "engines": { 1439 + "node": "^20.19.0 || >=22.12.0" 1440 + }, 1441 + "funding": { 1442 + "url": "https://github.com/vitejs/vite?sponsor=1" 1443 + }, 1444 + "optionalDependencies": { 1445 + "fsevents": "~2.3.3" 1446 + }, 1447 + "peerDependencies": { 1448 + "@types/node": "^20.19.0 || >=22.12.0", 1449 + "jiti": ">=1.21.0", 1450 + "less": "^4.0.0", 1451 + "lightningcss": "^1.21.0", 1452 + "sass": "^1.70.0", 1453 + "sass-embedded": "^1.70.0", 1454 + "stylus": ">=0.54.8", 1455 + "sugarss": "^5.0.0", 1456 + "terser": "^5.16.0", 1457 + "tsx": "^4.8.1", 1458 + "yaml": "^2.4.2" 1459 + }, 1460 + "peerDependenciesMeta": { 1461 + "@types/node": { 1462 + "optional": true 1463 + }, 1464 + "jiti": { 1465 + "optional": true 1466 + }, 1467 + "less": { 1468 + "optional": true 1469 + }, 1470 + "lightningcss": { 1471 + "optional": true 1472 + }, 1473 + "sass": { 1474 + "optional": true 1475 + }, 1476 + "sass-embedded": { 1477 + "optional": true 1478 + }, 1479 + "stylus": { 1480 + "optional": true 1481 + }, 1482 + "sugarss": { 1483 + "optional": true 1484 + }, 1485 + "terser": { 1486 + "optional": true 1487 + }, 1488 + "tsx": { 1489 + "optional": true 1490 + }, 1491 + "yaml": { 1492 + "optional": true 1493 + } 1494 + } 1495 + }, 1496 + "node_modules/vitefu": { 1497 + "version": "1.1.2", 1498 + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz", 1499 + "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==", 1500 + "dev": true, 1501 + "license": "MIT", 1502 + "workspaces": [ 1503 + "tests/deps/*", 1504 + "tests/projects/*", 1505 + "tests/projects/workspace/packages/*" 1506 + ], 1507 + "peerDependencies": { 1508 + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0" 1509 + }, 1510 + "peerDependenciesMeta": { 1511 + "vite": { 1512 + "optional": true 1513 + } 1514 + } 1515 + }, 1516 + "node_modules/zimmerframe": { 1517 + "version": "1.1.4", 1518 + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", 1519 + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", 1520 + "dev": true, 1521 + "license": "MIT" 1522 + } 1523 + } 1524 + }
+20
frontend/package.json
··· 1 + { 2 + "name": "frontend", 3 + "private": true, 4 + "version": "0.0.0", 5 + "type": "module", 6 + "scripts": { 7 + "dev": "vite", 8 + "build": "vite build", 9 + "preview": "vite preview", 10 + "check": "svelte-check --tsconfig ./tsconfig.json" 11 + }, 12 + "devDependencies": { 13 + "@sveltejs/vite-plugin-svelte": "^6.2.4", 14 + "svelte": "^5.53.12", 15 + "svelte-check": "^4.4.5", 16 + "tslib": "^2.8.1", 17 + "typescript": "^5.9.3", 18 + "vite": "^7.2.6" 19 + } 20 + }
+1
frontend/package.json.md5
··· 1 + 16c8e72b3f2fca4a3fca5becbd75bcd7
+83
frontend/src/App.svelte
··· 1 + <script lang="ts"> 2 + import logo from "./assets/images/logo-universal.png"; 3 + import { Greet } from "../wailsjs/go/main/App.js"; 4 + 5 + let resultText: string = "Please enter your name below 👇"; 6 + let name: string; 7 + 8 + function greet(): void { 9 + Greet(name).then((result) => (resultText = result)); 10 + } 11 + </script> 12 + 13 + <main> 14 + <img alt="Wails logo" id="logo" src={logo} /> 15 + <div class="result" id="result">{resultText}</div> 16 + <div class="input-box" id="input"> 17 + <input 18 + autocomplete="off" 19 + bind:value={name} 20 + class="input" 21 + id="name" 22 + type="text" 23 + /> 24 + <button class="btn" onclick={greet}>Greet</button> 25 + </div> 26 + </main> 27 + 28 + <style> 29 + #logo { 30 + display: block; 31 + width: 50%; 32 + height: 50%; 33 + margin: auto; 34 + padding: 10% 0 0; 35 + background-position: center; 36 + background-repeat: no-repeat; 37 + background-size: 100% 100%; 38 + background-origin: content-box; 39 + } 40 + 41 + .result { 42 + height: 20px; 43 + line-height: 20px; 44 + margin: 1.5rem auto; 45 + } 46 + 47 + .input-box .btn { 48 + width: 60px; 49 + height: 30px; 50 + line-height: 30px; 51 + border-radius: 3px; 52 + border: none; 53 + margin: 0 0 0 20px; 54 + padding: 0 8px; 55 + cursor: pointer; 56 + } 57 + 58 + .input-box .btn:hover { 59 + background-image: linear-gradient(to top, #cfd9df 0%, #e2ebf0 100%); 60 + color: #333333; 61 + } 62 + 63 + .input-box .input { 64 + border: none; 65 + border-radius: 3px; 66 + outline: none; 67 + height: 30px; 68 + line-height: 30px; 69 + padding: 0 10px; 70 + background-color: rgba(240, 240, 240, 1); 71 + -webkit-font-smoothing: antialiased; 72 + } 73 + 74 + .input-box .input:hover { 75 + border: none; 76 + background-color: rgba(255, 255, 255, 1); 77 + } 78 + 79 + .input-box .input:focus { 80 + border: none; 81 + background-color: rgba(255, 255, 255, 1); 82 + } 83 + </style>
+93
frontend/src/assets/fonts/OFL.txt
··· 1 + Copyright 2016 The Nunito Project Authors (contact@sansoxygen.com), 2 + 3 + This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 + This license is copied below, and is also available with a FAQ at: 5 + http://scripts.sil.org/OFL 6 + 7 + 8 + ----------------------------------------------------------- 9 + SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 + ----------------------------------------------------------- 11 + 12 + PREAMBLE 13 + The goals of the Open Font License (OFL) are to stimulate worldwide 14 + development of collaborative font projects, to support the font creation 15 + efforts of academic and linguistic communities, and to provide a free and 16 + open framework in which fonts may be shared and improved in partnership 17 + with others. 18 + 19 + The OFL allows the licensed fonts to be used, studied, modified and 20 + redistributed freely as long as they are not sold by themselves. The 21 + fonts, including any derivative works, can be bundled, embedded, 22 + redistributed and/or sold with any software provided that any reserved 23 + names are not used by derivative works. The fonts and derivatives, 24 + however, cannot be released under any other type of license. The 25 + requirement for fonts to remain under this license does not apply 26 + to any document created using the fonts or their derivatives. 27 + 28 + DEFINITIONS 29 + "Font Software" refers to the set of files released by the Copyright 30 + Holder(s) under this license and clearly marked as such. This may 31 + include source files, build scripts and documentation. 32 + 33 + "Reserved Font Name" refers to any names specified as such after the 34 + copyright statement(s). 35 + 36 + "Original Version" refers to the collection of Font Software components as 37 + distributed by the Copyright Holder(s). 38 + 39 + "Modified Version" refers to any derivative made by adding to, deleting, 40 + or substituting -- in part or in whole -- any of the components of the 41 + Original Version, by changing formats or by porting the Font Software to a 42 + new environment. 43 + 44 + "Author" refers to any designer, engineer, programmer, technical 45 + writer or other person who contributed to the Font Software. 46 + 47 + PERMISSION & CONDITIONS 48 + Permission is hereby granted, free of charge, to any person obtaining 49 + a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 + redistribute, and sell modified and unmodified copies of the Font 51 + Software, subject to the following conditions: 52 + 53 + 1) Neither the Font Software nor any of its individual components, 54 + in Original or Modified Versions, may be sold by itself. 55 + 56 + 2) Original or Modified Versions of the Font Software may be bundled, 57 + redistributed and/or sold with any software, provided that each copy 58 + contains the above copyright notice and this license. These can be 59 + included either as stand-alone text files, human-readable headers or 60 + in the appropriate machine-readable metadata fields within text or 61 + binary files as long as those fields can be easily viewed by the user. 62 + 63 + 3) No Modified Version of the Font Software may use the Reserved Font 64 + Name(s) unless explicit written permission is granted by the corresponding 65 + Copyright Holder. This restriction only applies to the primary font name as 66 + presented to the users. 67 + 68 + 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 + Software shall not be used to promote, endorse or advertise any 70 + Modified Version, except to acknowledge the contribution(s) of the 71 + Copyright Holder(s) and the Author(s) or with their explicit written 72 + permission. 73 + 74 + 5) The Font Software, modified or unmodified, in part or in whole, 75 + must be distributed entirely under this license, and must not be 76 + distributed under any other license. The requirement for fonts to 77 + remain under this license does not apply to any document created 78 + using the Font Software. 79 + 80 + TERMINATION 81 + This license becomes null and void if any of the above conditions are 82 + not met. 83 + 84 + DISCLAIMER 85 + THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 + OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 + COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 + INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 + DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 + FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 + OTHER DEALINGS IN THE FONT SOFTWARE.
frontend/src/assets/fonts/nunito-v16-latin-regular.woff2

This is a binary file and will not be displayed.

frontend/src/assets/images/logo-universal.png

This is a binary file and will not be displayed.

+9
frontend/src/main.ts
··· 1 + import './style.css' 2 + import App from './App.svelte' 3 + import { mount } from 'svelte' 4 + 5 + const app = mount(App, { 6 + target: document.getElementById('app')! 7 + }) 8 + 9 + export default app
+26
frontend/src/style.css
··· 1 + html { 2 + background-color: rgba(27, 38, 54, 1); 3 + text-align: center; 4 + color: white; 5 + } 6 + 7 + body { 8 + margin: 0; 9 + color: white; 10 + font-family: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", 11 + "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 12 + sans-serif; 13 + } 14 + 15 + @font-face { 16 + font-family: "Nunito"; 17 + font-style: normal; 18 + font-weight: 400; 19 + src: local(""), 20 + url("assets/fonts/nunito-v16-latin-regular.woff2") format("woff2"); 21 + } 22 + 23 + #app { 24 + height: 100vh; 25 + text-align: center; 26 + }
+2
frontend/src/vite-env.d.ts
··· 1 + /// <reference types="svelte" /> 2 + /// <reference types="vite/client" />
+5
frontend/svelte.config.js
··· 1 + import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' 2 + 3 + export default { 4 + preprocess: vitePreprocess() 5 + }
+26
frontend/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ESNext", 4 + "useDefineForClassFields": true, 5 + "module": "ESNext", 6 + "moduleResolution": "bundler", 7 + "resolveJsonModule": true, 8 + "baseUrl": ".", 9 + "allowJs": true, 10 + "checkJs": true, 11 + "isolatedModules": true, 12 + "verbatimModuleSyntax": true, 13 + "skipLibCheck": true 14 + }, 15 + "include": [ 16 + "src/**/*.d.ts", 17 + "src/**/*.ts", 18 + "src/**/*.js", 19 + "src/**/*.svelte" 20 + ], 21 + "references": [ 22 + { 23 + "path": "./tsconfig.node.json" 24 + } 25 + ] 26 + }
+10
frontend/tsconfig.node.json
··· 1 + { 2 + "compilerOptions": { 3 + "composite": true, 4 + "module": "ESNext", 5 + "moduleResolution": "bundler" 6 + }, 7 + "include": [ 8 + "vite.config.ts" 9 + ] 10 + }
+7
frontend/vite.config.ts
··· 1 + import {defineConfig} from 'vite' 2 + import {svelte} from '@sveltejs/vite-plugin-svelte' 3 + 4 + // https://vitejs.dev/config/ 5 + export default defineConfig({ 6 + plugins: [svelte()] 7 + })
+4
frontend/wailsjs/go/main/App.d.ts
··· 1 + // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL 2 + // This file is automatically generated. DO NOT EDIT 3 + 4 + export function Greet(arg1:string):Promise<string>;
+7
frontend/wailsjs/go/main/App.js
··· 1 + // @ts-check 2 + // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL 3 + // This file is automatically generated. DO NOT EDIT 4 + 5 + export function Greet(arg1) { 6 + return window['go']['main']['App']['Greet'](arg1); 7 + }
+24
frontend/wailsjs/runtime/package.json
··· 1 + { 2 + "name": "@wailsapp/runtime", 3 + "version": "2.0.0", 4 + "description": "Wails Javascript runtime library", 5 + "main": "runtime.js", 6 + "types": "runtime.d.ts", 7 + "scripts": { 8 + }, 9 + "repository": { 10 + "type": "git", 11 + "url": "git+https://github.com/wailsapp/wails.git" 12 + }, 13 + "keywords": [ 14 + "Wails", 15 + "Javascript", 16 + "Go" 17 + ], 18 + "author": "Lea Anthony <lea.anthony@gmail.com>", 19 + "license": "MIT", 20 + "bugs": { 21 + "url": "https://github.com/wailsapp/wails/issues" 22 + }, 23 + "homepage": "https://github.com/wailsapp/wails#readme" 24 + }
+249
frontend/wailsjs/runtime/runtime.d.ts
··· 1 + /* 2 + _ __ _ __ 3 + | | / /___ _(_) /____ 4 + | | /| / / __ `/ / / ___/ 5 + | |/ |/ / /_/ / / (__ ) 6 + |__/|__/\__,_/_/_/____/ 7 + The electron alternative for Go 8 + (c) Lea Anthony 2019-present 9 + */ 10 + 11 + export interface Position { 12 + x: number; 13 + y: number; 14 + } 15 + 16 + export interface Size { 17 + w: number; 18 + h: number; 19 + } 20 + 21 + export interface Screen { 22 + isCurrent: boolean; 23 + isPrimary: boolean; 24 + width : number 25 + height : number 26 + } 27 + 28 + // Environment information such as platform, buildtype, ... 29 + export interface EnvironmentInfo { 30 + buildType: string; 31 + platform: string; 32 + arch: string; 33 + } 34 + 35 + // [EventsEmit](https://wails.io/docs/reference/runtime/events#eventsemit) 36 + // emits the given event. Optional data may be passed with the event. 37 + // This will trigger any event listeners. 38 + export function EventsEmit(eventName: string, ...data: any): void; 39 + 40 + // [EventsOn](https://wails.io/docs/reference/runtime/events#eventson) sets up a listener for the given event name. 41 + export function EventsOn(eventName: string, callback: (...data: any) => void): () => void; 42 + 43 + // [EventsOnMultiple](https://wails.io/docs/reference/runtime/events#eventsonmultiple) 44 + // sets up a listener for the given event name, but will only trigger a given number times. 45 + export function EventsOnMultiple(eventName: string, callback: (...data: any) => void, maxCallbacks: number): () => void; 46 + 47 + // [EventsOnce](https://wails.io/docs/reference/runtime/events#eventsonce) 48 + // sets up a listener for the given event name, but will only trigger once. 49 + export function EventsOnce(eventName: string, callback: (...data: any) => void): () => void; 50 + 51 + // [EventsOff](https://wails.io/docs/reference/runtime/events#eventsoff) 52 + // unregisters the listener for the given event name. 53 + export function EventsOff(eventName: string, ...additionalEventNames: string[]): void; 54 + 55 + // [EventsOffAll](https://wails.io/docs/reference/runtime/events#eventsoffall) 56 + // unregisters all listeners. 57 + export function EventsOffAll(): void; 58 + 59 + // [LogPrint](https://wails.io/docs/reference/runtime/log#logprint) 60 + // logs the given message as a raw message 61 + export function LogPrint(message: string): void; 62 + 63 + // [LogTrace](https://wails.io/docs/reference/runtime/log#logtrace) 64 + // logs the given message at the `trace` log level. 65 + export function LogTrace(message: string): void; 66 + 67 + // [LogDebug](https://wails.io/docs/reference/runtime/log#logdebug) 68 + // logs the given message at the `debug` log level. 69 + export function LogDebug(message: string): void; 70 + 71 + // [LogError](https://wails.io/docs/reference/runtime/log#logerror) 72 + // logs the given message at the `error` log level. 73 + export function LogError(message: string): void; 74 + 75 + // [LogFatal](https://wails.io/docs/reference/runtime/log#logfatal) 76 + // logs the given message at the `fatal` log level. 77 + // The application will quit after calling this method. 78 + export function LogFatal(message: string): void; 79 + 80 + // [LogInfo](https://wails.io/docs/reference/runtime/log#loginfo) 81 + // logs the given message at the `info` log level. 82 + export function LogInfo(message: string): void; 83 + 84 + // [LogWarning](https://wails.io/docs/reference/runtime/log#logwarning) 85 + // logs the given message at the `warning` log level. 86 + export function LogWarning(message: string): void; 87 + 88 + // [WindowReload](https://wails.io/docs/reference/runtime/window#windowreload) 89 + // Forces a reload by the main application as well as connected browsers. 90 + export function WindowReload(): void; 91 + 92 + // [WindowReloadApp](https://wails.io/docs/reference/runtime/window#windowreloadapp) 93 + // Reloads the application frontend. 94 + export function WindowReloadApp(): void; 95 + 96 + // [WindowSetAlwaysOnTop](https://wails.io/docs/reference/runtime/window#windowsetalwaysontop) 97 + // Sets the window AlwaysOnTop or not on top. 98 + export function WindowSetAlwaysOnTop(b: boolean): void; 99 + 100 + // [WindowSetSystemDefaultTheme](https://wails.io/docs/next/reference/runtime/window#windowsetsystemdefaulttheme) 101 + // *Windows only* 102 + // Sets window theme to system default (dark/light). 103 + export function WindowSetSystemDefaultTheme(): void; 104 + 105 + // [WindowSetLightTheme](https://wails.io/docs/next/reference/runtime/window#windowsetlighttheme) 106 + // *Windows only* 107 + // Sets window to light theme. 108 + export function WindowSetLightTheme(): void; 109 + 110 + // [WindowSetDarkTheme](https://wails.io/docs/next/reference/runtime/window#windowsetdarktheme) 111 + // *Windows only* 112 + // Sets window to dark theme. 113 + export function WindowSetDarkTheme(): void; 114 + 115 + // [WindowCenter](https://wails.io/docs/reference/runtime/window#windowcenter) 116 + // Centers the window on the monitor the window is currently on. 117 + export function WindowCenter(): void; 118 + 119 + // [WindowSetTitle](https://wails.io/docs/reference/runtime/window#windowsettitle) 120 + // Sets the text in the window title bar. 121 + export function WindowSetTitle(title: string): void; 122 + 123 + // [WindowFullscreen](https://wails.io/docs/reference/runtime/window#windowfullscreen) 124 + // Makes the window full screen. 125 + export function WindowFullscreen(): void; 126 + 127 + // [WindowUnfullscreen](https://wails.io/docs/reference/runtime/window#windowunfullscreen) 128 + // Restores the previous window dimensions and position prior to full screen. 129 + export function WindowUnfullscreen(): void; 130 + 131 + // [WindowIsFullscreen](https://wails.io/docs/reference/runtime/window#windowisfullscreen) 132 + // Returns the state of the window, i.e. whether the window is in full screen mode or not. 133 + export function WindowIsFullscreen(): Promise<boolean>; 134 + 135 + // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) 136 + // Sets the width and height of the window. 137 + export function WindowSetSize(width: number, height: number): void; 138 + 139 + // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) 140 + // Gets the width and height of the window. 141 + export function WindowGetSize(): Promise<Size>; 142 + 143 + // [WindowSetMaxSize](https://wails.io/docs/reference/runtime/window#windowsetmaxsize) 144 + // Sets the maximum window size. Will resize the window if the window is currently larger than the given dimensions. 145 + // Setting a size of 0,0 will disable this constraint. 146 + export function WindowSetMaxSize(width: number, height: number): void; 147 + 148 + // [WindowSetMinSize](https://wails.io/docs/reference/runtime/window#windowsetminsize) 149 + // Sets the minimum window size. Will resize the window if the window is currently smaller than the given dimensions. 150 + // Setting a size of 0,0 will disable this constraint. 151 + export function WindowSetMinSize(width: number, height: number): void; 152 + 153 + // [WindowSetPosition](https://wails.io/docs/reference/runtime/window#windowsetposition) 154 + // Sets the window position relative to the monitor the window is currently on. 155 + export function WindowSetPosition(x: number, y: number): void; 156 + 157 + // [WindowGetPosition](https://wails.io/docs/reference/runtime/window#windowgetposition) 158 + // Gets the window position relative to the monitor the window is currently on. 159 + export function WindowGetPosition(): Promise<Position>; 160 + 161 + // [WindowHide](https://wails.io/docs/reference/runtime/window#windowhide) 162 + // Hides the window. 163 + export function WindowHide(): void; 164 + 165 + // [WindowShow](https://wails.io/docs/reference/runtime/window#windowshow) 166 + // Shows the window, if it is currently hidden. 167 + export function WindowShow(): void; 168 + 169 + // [WindowMaximise](https://wails.io/docs/reference/runtime/window#windowmaximise) 170 + // Maximises the window to fill the screen. 171 + export function WindowMaximise(): void; 172 + 173 + // [WindowToggleMaximise](https://wails.io/docs/reference/runtime/window#windowtogglemaximise) 174 + // Toggles between Maximised and UnMaximised. 175 + export function WindowToggleMaximise(): void; 176 + 177 + // [WindowUnmaximise](https://wails.io/docs/reference/runtime/window#windowunmaximise) 178 + // Restores the window to the dimensions and position prior to maximising. 179 + export function WindowUnmaximise(): void; 180 + 181 + // [WindowIsMaximised](https://wails.io/docs/reference/runtime/window#windowismaximised) 182 + // Returns the state of the window, i.e. whether the window is maximised or not. 183 + export function WindowIsMaximised(): Promise<boolean>; 184 + 185 + // [WindowMinimise](https://wails.io/docs/reference/runtime/window#windowminimise) 186 + // Minimises the window. 187 + export function WindowMinimise(): void; 188 + 189 + // [WindowUnminimise](https://wails.io/docs/reference/runtime/window#windowunminimise) 190 + // Restores the window to the dimensions and position prior to minimising. 191 + export function WindowUnminimise(): void; 192 + 193 + // [WindowIsMinimised](https://wails.io/docs/reference/runtime/window#windowisminimised) 194 + // Returns the state of the window, i.e. whether the window is minimised or not. 195 + export function WindowIsMinimised(): Promise<boolean>; 196 + 197 + // [WindowIsNormal](https://wails.io/docs/reference/runtime/window#windowisnormal) 198 + // Returns the state of the window, i.e. whether the window is normal or not. 199 + export function WindowIsNormal(): Promise<boolean>; 200 + 201 + // [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) 202 + // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. 203 + export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; 204 + 205 + // [ScreenGetAll](https://wails.io/docs/reference/runtime/window#screengetall) 206 + // Gets the all screens. Call this anew each time you want to refresh data from the underlying windowing system. 207 + export function ScreenGetAll(): Promise<Screen[]>; 208 + 209 + // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) 210 + // Opens the given URL in the system browser. 211 + export function BrowserOpenURL(url: string): void; 212 + 213 + // [Environment](https://wails.io/docs/reference/runtime/intro#environment) 214 + // Returns information about the environment 215 + export function Environment(): Promise<EnvironmentInfo>; 216 + 217 + // [Quit](https://wails.io/docs/reference/runtime/intro#quit) 218 + // Quits the application. 219 + export function Quit(): void; 220 + 221 + // [Hide](https://wails.io/docs/reference/runtime/intro#hide) 222 + // Hides the application. 223 + export function Hide(): void; 224 + 225 + // [Show](https://wails.io/docs/reference/runtime/intro#show) 226 + // Shows the application. 227 + export function Show(): void; 228 + 229 + // [ClipboardGetText](https://wails.io/docs/reference/runtime/clipboard#clipboardgettext) 230 + // Returns the current text stored on clipboard 231 + export function ClipboardGetText(): Promise<string>; 232 + 233 + // [ClipboardSetText](https://wails.io/docs/reference/runtime/clipboard#clipboardsettext) 234 + // Sets a text on the clipboard 235 + export function ClipboardSetText(text: string): Promise<boolean>; 236 + 237 + // [OnFileDrop](https://wails.io/docs/reference/runtime/draganddrop#onfiledrop) 238 + // OnFileDrop listens to drag and drop events and calls the callback with the coordinates of the drop and an array of path strings. 239 + export function OnFileDrop(callback: (x: number, y: number ,paths: string[]) => void, useDropTarget: boolean) :void 240 + 241 + // [OnFileDropOff](https://wails.io/docs/reference/runtime/draganddrop#dragandddropoff) 242 + // OnFileDropOff removes the drag and drop listeners and handlers. 243 + export function OnFileDropOff() :void 244 + 245 + // Check if the file path resolver is available 246 + export function CanResolveFilePaths(): boolean; 247 + 248 + // Resolves file paths for an array of files 249 + export function ResolveFilePaths(files: File[]): void
+242
frontend/wailsjs/runtime/runtime.js
··· 1 + /* 2 + _ __ _ __ 3 + | | / /___ _(_) /____ 4 + | | /| / / __ `/ / / ___/ 5 + | |/ |/ / /_/ / / (__ ) 6 + |__/|__/\__,_/_/_/____/ 7 + The electron alternative for Go 8 + (c) Lea Anthony 2019-present 9 + */ 10 + 11 + export function LogPrint(message) { 12 + window.runtime.LogPrint(message); 13 + } 14 + 15 + export function LogTrace(message) { 16 + window.runtime.LogTrace(message); 17 + } 18 + 19 + export function LogDebug(message) { 20 + window.runtime.LogDebug(message); 21 + } 22 + 23 + export function LogInfo(message) { 24 + window.runtime.LogInfo(message); 25 + } 26 + 27 + export function LogWarning(message) { 28 + window.runtime.LogWarning(message); 29 + } 30 + 31 + export function LogError(message) { 32 + window.runtime.LogError(message); 33 + } 34 + 35 + export function LogFatal(message) { 36 + window.runtime.LogFatal(message); 37 + } 38 + 39 + export function EventsOnMultiple(eventName, callback, maxCallbacks) { 40 + return window.runtime.EventsOnMultiple(eventName, callback, maxCallbacks); 41 + } 42 + 43 + export function EventsOn(eventName, callback) { 44 + return EventsOnMultiple(eventName, callback, -1); 45 + } 46 + 47 + export function EventsOff(eventName, ...additionalEventNames) { 48 + return window.runtime.EventsOff(eventName, ...additionalEventNames); 49 + } 50 + 51 + export function EventsOffAll() { 52 + return window.runtime.EventsOffAll(); 53 + } 54 + 55 + export function EventsOnce(eventName, callback) { 56 + return EventsOnMultiple(eventName, callback, 1); 57 + } 58 + 59 + export function EventsEmit(eventName) { 60 + let args = [eventName].slice.call(arguments); 61 + return window.runtime.EventsEmit.apply(null, args); 62 + } 63 + 64 + export function WindowReload() { 65 + window.runtime.WindowReload(); 66 + } 67 + 68 + export function WindowReloadApp() { 69 + window.runtime.WindowReloadApp(); 70 + } 71 + 72 + export function WindowSetAlwaysOnTop(b) { 73 + window.runtime.WindowSetAlwaysOnTop(b); 74 + } 75 + 76 + export function WindowSetSystemDefaultTheme() { 77 + window.runtime.WindowSetSystemDefaultTheme(); 78 + } 79 + 80 + export function WindowSetLightTheme() { 81 + window.runtime.WindowSetLightTheme(); 82 + } 83 + 84 + export function WindowSetDarkTheme() { 85 + window.runtime.WindowSetDarkTheme(); 86 + } 87 + 88 + export function WindowCenter() { 89 + window.runtime.WindowCenter(); 90 + } 91 + 92 + export function WindowSetTitle(title) { 93 + window.runtime.WindowSetTitle(title); 94 + } 95 + 96 + export function WindowFullscreen() { 97 + window.runtime.WindowFullscreen(); 98 + } 99 + 100 + export function WindowUnfullscreen() { 101 + window.runtime.WindowUnfullscreen(); 102 + } 103 + 104 + export function WindowIsFullscreen() { 105 + return window.runtime.WindowIsFullscreen(); 106 + } 107 + 108 + export function WindowGetSize() { 109 + return window.runtime.WindowGetSize(); 110 + } 111 + 112 + export function WindowSetSize(width, height) { 113 + window.runtime.WindowSetSize(width, height); 114 + } 115 + 116 + export function WindowSetMaxSize(width, height) { 117 + window.runtime.WindowSetMaxSize(width, height); 118 + } 119 + 120 + export function WindowSetMinSize(width, height) { 121 + window.runtime.WindowSetMinSize(width, height); 122 + } 123 + 124 + export function WindowSetPosition(x, y) { 125 + window.runtime.WindowSetPosition(x, y); 126 + } 127 + 128 + export function WindowGetPosition() { 129 + return window.runtime.WindowGetPosition(); 130 + } 131 + 132 + export function WindowHide() { 133 + window.runtime.WindowHide(); 134 + } 135 + 136 + export function WindowShow() { 137 + window.runtime.WindowShow(); 138 + } 139 + 140 + export function WindowMaximise() { 141 + window.runtime.WindowMaximise(); 142 + } 143 + 144 + export function WindowToggleMaximise() { 145 + window.runtime.WindowToggleMaximise(); 146 + } 147 + 148 + export function WindowUnmaximise() { 149 + window.runtime.WindowUnmaximise(); 150 + } 151 + 152 + export function WindowIsMaximised() { 153 + return window.runtime.WindowIsMaximised(); 154 + } 155 + 156 + export function WindowMinimise() { 157 + window.runtime.WindowMinimise(); 158 + } 159 + 160 + export function WindowUnminimise() { 161 + window.runtime.WindowUnminimise(); 162 + } 163 + 164 + export function WindowSetBackgroundColour(R, G, B, A) { 165 + window.runtime.WindowSetBackgroundColour(R, G, B, A); 166 + } 167 + 168 + export function ScreenGetAll() { 169 + return window.runtime.ScreenGetAll(); 170 + } 171 + 172 + export function WindowIsMinimised() { 173 + return window.runtime.WindowIsMinimised(); 174 + } 175 + 176 + export function WindowIsNormal() { 177 + return window.runtime.WindowIsNormal(); 178 + } 179 + 180 + export function BrowserOpenURL(url) { 181 + window.runtime.BrowserOpenURL(url); 182 + } 183 + 184 + export function Environment() { 185 + return window.runtime.Environment(); 186 + } 187 + 188 + export function Quit() { 189 + window.runtime.Quit(); 190 + } 191 + 192 + export function Hide() { 193 + window.runtime.Hide(); 194 + } 195 + 196 + export function Show() { 197 + window.runtime.Show(); 198 + } 199 + 200 + export function ClipboardGetText() { 201 + return window.runtime.ClipboardGetText(); 202 + } 203 + 204 + export function ClipboardSetText(text) { 205 + return window.runtime.ClipboardSetText(text); 206 + } 207 + 208 + /** 209 + * Callback for OnFileDrop returns a slice of file path strings when a drop is finished. 210 + * 211 + * @export 212 + * @callback OnFileDropCallback 213 + * @param {number} x - x coordinate of the drop 214 + * @param {number} y - y coordinate of the drop 215 + * @param {string[]} paths - A list of file paths. 216 + */ 217 + 218 + /** 219 + * OnFileDrop listens to drag and drop events and calls the callback with the coordinates of the drop and an array of path strings. 220 + * 221 + * @export 222 + * @param {OnFileDropCallback} callback - Callback for OnFileDrop returns a slice of file path strings when a drop is finished. 223 + * @param {boolean} [useDropTarget=true] - Only call the callback when the drop finished on an element that has the drop target style. (--wails-drop-target) 224 + */ 225 + export function OnFileDrop(callback, useDropTarget) { 226 + return window.runtime.OnFileDrop(callback, useDropTarget); 227 + } 228 + 229 + /** 230 + * OnFileDropOff removes the drag and drop listeners and handlers. 231 + */ 232 + export function OnFileDropOff() { 233 + return window.runtime.OnFileDropOff(); 234 + } 235 + 236 + export function CanResolveFilePaths() { 237 + return window.runtime.CanResolveFilePaths(); 238 + } 239 + 240 + export function ResolveFilePaths(files) { 241 + return window.runtime.ResolveFilePaths(files); 242 + }
+37
go.mod
··· 1 + module bsky-browser-gui 2 + 3 + go 1.23 4 + 5 + require github.com/wailsapp/wails/v2 v2.11.0 6 + 7 + require ( 8 + github.com/bep/debounce v1.2.1 // indirect 9 + github.com/go-ole/go-ole v1.3.0 // indirect 10 + github.com/godbus/dbus/v5 v5.1.0 // indirect 11 + github.com/google/uuid v1.6.0 // indirect 12 + github.com/gorilla/websocket v1.5.3 // indirect 13 + github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect 14 + github.com/labstack/echo/v4 v4.13.3 // indirect 15 + github.com/labstack/gommon v0.4.2 // indirect 16 + github.com/leaanthony/go-ansi-parser v1.6.1 // indirect 17 + github.com/leaanthony/gosod v1.0.4 // indirect 18 + github.com/leaanthony/slicer v1.6.0 // indirect 19 + github.com/leaanthony/u v1.1.1 // indirect 20 + github.com/mattn/go-colorable v0.1.13 // indirect 21 + github.com/mattn/go-isatty v0.0.20 // indirect 22 + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect 23 + github.com/pkg/errors v0.9.1 // indirect 24 + github.com/rivo/uniseg v0.4.7 // indirect 25 + github.com/samber/lo v1.49.1 // indirect 26 + github.com/tkrajina/go-reflector v0.5.8 // indirect 27 + github.com/valyala/bytebufferpool v1.0.0 // indirect 28 + github.com/valyala/fasttemplate v1.2.2 // indirect 29 + github.com/wailsapp/go-webview2 v1.0.22 // indirect 30 + github.com/wailsapp/mimetype v1.4.1 // indirect 31 + golang.org/x/crypto v0.33.0 // indirect 32 + golang.org/x/net v0.35.0 // indirect 33 + golang.org/x/sys v0.30.0 // indirect 34 + golang.org/x/text v0.22.0 // indirect 35 + ) 36 + 37 + // replace github.com/wailsapp/wails/v2 v2.11.0 => /Users/owais/go/pkg/mod
+81
go.sum
··· 1 + github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= 2 + github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= 3 + github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 4 + github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 5 + github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= 6 + github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= 7 + github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= 8 + github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= 9 + github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 10 + github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 11 + github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= 12 + github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= 13 + github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= 14 + github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= 15 + github.com/labstack/echo/v4 v4.13.3 h1:pwhpCPrTl5qry5HRdM5FwdXnhXSLSY+WE+YQSeCaafY= 16 + github.com/labstack/echo/v4 v4.13.3/go.mod h1:o90YNEeQWjDozo584l7AwhJMHN0bOC4tAfg+Xox9q5g= 17 + github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0= 18 + github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU= 19 + github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oOc= 20 + github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= 21 + github.com/leaanthony/go-ansi-parser v1.6.1 h1:xd8bzARK3dErqkPFtoF9F3/HgN8UQk0ed1YDKpEz01A= 22 + github.com/leaanthony/go-ansi-parser v1.6.1/go.mod h1:+vva/2y4alzVmmIEpk9QDhA7vLC5zKDTRwfZGOp3IWU= 23 + github.com/leaanthony/gosod v1.0.4 h1:YLAbVyd591MRffDgxUOU1NwLhT9T1/YiwjKZpkNFeaI= 24 + github.com/leaanthony/gosod v1.0.4/go.mod h1:GKuIL0zzPj3O1SdWQOdgURSuhkF+Urizzxh26t9f1cw= 25 + github.com/leaanthony/slicer v1.6.0 h1:1RFP5uiPJvT93TAHi+ipd3NACobkW53yUiBqZheE/Js= 26 + github.com/leaanthony/slicer v1.6.0/go.mod h1:o/Iz29g7LN0GqH3aMjWAe90381nyZlDNquK+mtH2Fj8= 27 + github.com/leaanthony/u v1.1.1 h1:TUFjwDGlNX+WuwVEzDqQwC2lOv0P4uhTQw7CMFdiK7M= 28 + github.com/leaanthony/u v1.1.1/go.mod h1:9+o6hejoRljvZ3BzdYlVL0JYCwtnAsVuN9pVTQcaRfI= 29 + github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= 30 + github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ= 31 + github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= 32 + github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= 33 + github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= 34 + github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= 35 + github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= 36 + github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= 37 + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= 38 + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= 39 + github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 40 + github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 41 + github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 42 + github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 43 + github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= 44 + github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= 45 + github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= 46 + github.com/samber/lo v1.49.1 h1:4BIFyVfuQSEpluc7Fua+j1NolZHiEHEpaSEKdsH0tew= 47 + github.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd6o= 48 + github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= 49 + github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 50 + github.com/tkrajina/go-reflector v0.5.8 h1:yPADHrwmUbMq4RGEyaOUpz2H90sRsETNVpjzo3DLVQQ= 51 + github.com/tkrajina/go-reflector v0.5.8/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= 52 + github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= 53 + github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= 54 + github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= 55 + github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= 56 + github.com/wailsapp/go-webview2 v1.0.22 h1:YT61F5lj+GGaat5OB96Aa3b4QA+mybD0Ggq6NZijQ58= 57 + github.com/wailsapp/go-webview2 v1.0.22/go.mod h1:qJmWAmAmaniuKGZPWwne+uor3AHMB5PFhqiK0Bbj8kc= 58 + github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= 59 + github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= 60 + github.com/wailsapp/wails/v2 v2.11.0 h1:seLacV8pqupq32IjS4Y7V8ucab0WZwtK6VvUVxSBtqQ= 61 + github.com/wailsapp/wails/v2 v2.11.0/go.mod h1:jrf0ZaM6+GBc1wRmXsM8cIvzlg0karYin3erahI4+0k= 62 + golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= 63 + golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= 64 + golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 65 + golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= 66 + golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= 67 + golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 68 + golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 69 + golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 70 + golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 71 + golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 72 + golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 73 + golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= 74 + golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 75 + golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 76 + golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 77 + golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= 78 + golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= 79 + golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 80 + gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 81 + gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+36
main.go
··· 1 + package main 2 + 3 + import ( 4 + "embed" 5 + 6 + "github.com/wailsapp/wails/v2" 7 + "github.com/wailsapp/wails/v2/pkg/options" 8 + "github.com/wailsapp/wails/v2/pkg/options/assetserver" 9 + ) 10 + 11 + //go:embed all:frontend/dist 12 + var assets embed.FS 13 + 14 + func main() { 15 + // Create an instance of the app structure 16 + app := NewApp() 17 + 18 + // Create application with options 19 + err := wails.Run(&options.App{ 20 + Title: "bsky-browser-gui", 21 + Width: 1024, 22 + Height: 768, 23 + AssetServer: &assetserver.Options{ 24 + Assets: assets, 25 + }, 26 + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, 27 + OnStartup: app.startup, 28 + Bind: []interface{}{ 29 + app, 30 + }, 31 + }) 32 + 33 + if err != nil { 34 + println("Error:", err.Error()) 35 + } 36 + }
+13
wails.json
··· 1 + { 2 + "$schema": "https://wails.io/schemas/config.v2.json", 3 + "name": "bsky-browser-gui", 4 + "outputfilename": "bsky-browser-gui", 5 + "frontend:install": "pnpm install", 6 + "frontend:build": "pnpm build", 7 + "frontend:dev:watcher": "pnpm dev", 8 + "frontend:dev:serverUrl": "auto", 9 + "author": { 10 + "name": "Owais Jamil", 11 + "email": "desertthunder.dev@gmail.com" 12 + } 13 + }