├── .editorconfig
├── .gitignore
├── .prettierignore
├── .prettierrc.json
├── .vscode
├── extensions.json
└── settings.json
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── Restart-Firefox.ps1
├── docs
├── .nojekyll
└── index.html
├── img
├── feature-buttons-false.dark.png
├── feature-buttons-false.light.png
├── feature-buttons-grouped.dark.png
├── feature-buttons-grouped.light.png
├── feature-buttons-true.dark.png
├── feature-buttons-true.light.png
├── feature-float-false.dark.png
├── feature-float-false.light.png
├── feature-float-true.dark.png
├── feature-float-true.light.png
├── feature-hide-close-button.dark.png
├── feature-hide-close-button.light.png
├── feature-order.dark.png
└── feature-order.light.png
├── package.json
├── pnpm-lock.yaml
└── src
└── refined-findbar.scss
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = tab
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.md]
10 | indent_style = unset
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | dist/
3 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | dist/
3 | LICENSE
4 | pnpm-lock.yaml
5 |
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 100,
3 | "singleQuote": true,
4 | "proseWrap": "always",
5 | "endOfLine": "auto",
6 | "overrides": [
7 | {
8 | "files": [".vscode/*.json"],
9 | "options": {
10 | "parser": "json5",
11 | "trailingComma": "all",
12 | "quoteProps": "preserve",
13 | "singleQuote": false
14 | }
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "EditorConfig.EditorConfig",
4 | "SomewhatStationery.some-sass",
5 | "esbenp.prettier-vscode",
6 | "ms-vscode.powershell",
7 | ],
8 | }
9 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "files.exclude": {
3 | "**/node_modules": true,
4 | },
5 | "editor.defaultFormatter": "esbenp.prettier-vscode",
6 | "editor.formatOnSave": true,
7 | "files.trimFinalNewlines": true,
8 | }
9 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | ## Tools
4 |
5 | - This project uses [PNPM](https://pnpm.io/).
6 |
7 | - Consider using [Visual Studio Code](https://code.visualstudio.com/) to make your changes. The repo
8 | includes a [workspace configuration](./.vscode/) that runs [Prettier](https://prettier.io/) on
9 | save.
10 |
11 | If you prefer to use a different text editor, please run the `pretty` script and resolve any
12 | issues reported before committing your changes.
13 |
14 | ## Scripts
15 |
16 | | Name | Description |
17 | | -------- | ----------------------------------------------------------------------------------------------- |
18 | | `build` | Compile the SCSS to the `./dist` folder. |
19 | | `watch` | Similar to build, but compile every time the SCSS changes. |
20 | | `clean` | Clean the build output. |
21 | | `site` | Starts an HTTP server at the root of the project. View the site at http://localhost:8080/docs/. |
22 | | `pretty` | Run Prettier. |
23 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Ravindu Liyanapathirana
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Refined find bar for Firefox
2 |
3 | `userChrome.css`[^userchrome] styles that improve the Firefox find bar by repositioning it,
4 | adjusting spacing and styling its elements.
5 |
6 | [^userchrome]:
7 | Learn more about `userChrome.css` at: https://kb.mozillazine.org/UserChrome.css,
8 | https://old.reddit.com/r/firefox/wiki/userchrome,
9 | https://old.reddit.com/r/FirefoxCSS/wiki/index/tutorials
10 |
11 |
12 |
13 | ## Features
14 |
15 |
16 |
17 |
18 | Variable
19 | Description
20 |
21 |
22 |
23 |
24 |
25 |
26 | $float
27 |
28 |
29 | If `true`, detaches the find bar from the toolbar, and positions it floating above the contents of
30 | web page,
31 |
32 |
33 |
34 |
35 |
36 |
37 | If `false`, positions the find bar towards the top right-hand corner of the browser window, docked
38 | to the toolbar,
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | $float-alignment
51 |
52 |
53 | Vertically positions the floating find bar. Either `top` or `bottom`.
54 |
55 |
56 |
57 |
58 |
59 |
60 | $float-distance
61 |
62 |
63 | Distance between the floating find bar and the respective window corner.
64 |
65 |
66 |
67 |
68 |
69 |
70 | $buttons
71 |
72 |
73 | If `true`, styles the find bar checkboxes to resemble buttons,
74 |
75 |
76 |
77 |
78 |
79 |
80 | If `false`, leaves them as is,
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 | $buttons-grouped
93 |
94 |
95 | If `true`, groups find bar buttons together,
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 | $hide-close-button
108 |
109 |
110 | If `true`, hides the close button.
111 |
112 | > [!IMPORTANT]
113 | >
114 | > With this option enabled, the only way to close the find bar would be to press Esc when
115 | > its textbox or buttons are focused. To focus the textbox, press the find shortcut
116 | > Ctrl/Cmd +F .
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 | $hide-when-unfocused
129 |
130 |
131 | If `true`, hides the find bar when its elements (textbox or buttons) are not in focus.
132 |
133 | > [!IMPORTANT]
134 | >
135 | > With this option enabled, press Ctrl/Cmd +F to reopen/focus the find bar, if
136 | > it loses focus (and is therefore, hidden).
137 |
138 |
139 |
140 |
141 |
142 |
143 | $opacity-when-unfocused
144 |
145 |
146 | Transparency of the find bar when its elements (textbox or buttons) are not in focus. Excepts a
147 | number between 0 (fully transparent) and 1 (fully opaque).
148 |
149 |
150 |
151 |
152 |
153 |
154 | $order
155 |
156 |
157 | Reorders elements of the find bar.
158 |
159 | This is a list that contains all of the following tokens (listed here in the default order), in any
160 | order: `TEXT_BOX`, `CHECKBOX_HIGHLIGHT_ALL`, `CHECKBOX_MATCH_CASE`, `CHECKBOX_MATCH_DIACRITICS`,
161 | `CHECKBOX_WHOLE_WORDS`, `LABELS`, `DESCRIPTION`.
162 |
163 | e.g., If the order is specified as `DESCRIPTION`, `LABELS`, `TEXT_BOX`, `CHECKBOX_HIGHLIGHT_ALL`,
164 | `CHECKBOX_MATCH_CASE`, `CHECKBOX_WHOLE_WORDS`, `CHECKBOX_MATCH_DIACRITICS`,
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 | ## Usage
180 |
181 | This style is authored as an [SCSS mixin][sassMixin] and must be transpiled to CSS first.
182 |
183 | - **The quickest way to get started** is to,
184 |
185 | 1. Visit https://ravindUwU.github.io/firefox-refined-findbar, which will automatically generate a
186 | link to the [Sass Playground][sassPlay].
187 |
188 | 2. Visit the generated link, modify the SCSS as necessary (specifically, the highlighted
189 | `@include` statement).
190 |
191 | 3. Copy the CSS output into your `userChrome.css` file and restart Firefox.
192 |
193 |
194 | If that didn't work,
195 |
196 | 1. Open an online transpiler (e.g., [Sass Playground][sassPlay] or
197 | [SassMeister](https://www.sassmeister.com/)).
198 |
199 | 2. Copy the contents of [`refined-findbar.scss`][src] into the SCSS pane.
200 |
201 | 3. Add the line `@include refined-findbar()` after the copied contents, and override variables as
202 | necessary. The default values can be found in the `@mixin refined-findbar` declaration near the
203 | top of the contents copied in step 2.
204 |
205 | ```scss
206 | //
207 |
208 | // prettier-ignore
209 | @include refined-findbar(
210 | $float: true,
211 | $float-alignment: top,
212 | // etc..
213 | );
214 | ```
215 |
216 | 4. Copy the CSS output into your `userChrome.css` file and restart Firefox.
217 |
218 |
219 |
220 | - **To transpile locally**, [`@use`][sassUse] the [`refined-findbar.scss`][src] file,
221 | [`@include`][sassMixin] the mixin changing any variables as necessary, and use [`sass`][npmSass]
222 | to transpile to CSS.
223 |
224 |
225 |
226 | [src]: ./src/refined-findbar.scss
227 | [sassUse]: https://sass-lang.com/documentation/at-rules/use/
228 | [sassMixin]: https://sass-lang.com/documentation/at-rules/mixin/
229 | [sassPlay]: https://sass-lang.com/playground/
230 | [npmSass]: https://www.npmjs.com/package/sass
231 |
--------------------------------------------------------------------------------
/Restart-Firefox.ps1:
--------------------------------------------------------------------------------
1 | <#
2 | .SYNOPSIS
3 | Stops currently running Firefox processes, stops them, and starts one.
4 | #>
5 | [CmdletBinding()]
6 | param (
7 | # Only affects Firefox developer edition (by checking whether "Developer" exists in path to the
8 | # process binary.
9 | [switch]
10 | $Dev
11 | )
12 |
13 | function main {
14 | $foxxos = Get-Process firefox -ErrorAction Ignore | Where-Object { $null -ne $_.Path }
15 |
16 | if ($Dev) {
17 | $foxxos = $foxxos | Where-Object { $_.Path.Contains('Developer') }
18 | }
19 |
20 | logMeh "Found $($foxxos.Count) foxxos"
21 |
22 | if ($foxxos.Count -eq 0) {
23 | kthxbai👋
24 | }
25 |
26 | $foxxo = ($foxxos | Select-Object Path -Unique).Path
27 |
28 | if ($foxxo.Count -eq 1) {
29 | logYay "Using foxxo at ``$foxxo`` :3"
30 | } else {
31 | logNay "Found $($foxxo.Count) unique foxxos; not sure which one to use :3"
32 | kthxbai👋
33 | }
34 |
35 | logYay 'Stopping foxxos'
36 | $foxxos | stoppppp😭
37 |
38 | logYay 'Starting Firefox'
39 | omghai❤️ $foxxo
40 | }
41 |
42 | function logYay($huh) {
43 | Write-Host -NoNewline -ForegroundColor Green '^_^ '
44 | Write-Host $huh
45 | }
46 |
47 | function logMeh($huh) {
48 | Write-Host -NoNewline -ForegroundColor Blue '-_- '
49 | Write-Host $huh
50 | }
51 |
52 | function logNay($huh) {
53 | Write-Host -NoNewline -ForegroundColor Red '>_< '
54 | Write-Host $huh
55 | }
56 |
57 | function stoppppp😭 {
58 | param(
59 | [Parameter(ValueFromPipeline)]
60 | $fox
61 | )
62 |
63 | process {
64 | $fox | Stop-Process
65 | }
66 | }
67 |
68 | function omghai❤️ {
69 | param($fox)
70 |
71 | & $fox
72 | }
73 |
74 | function kthxbai👋 {
75 | exit
76 | }
77 |
78 | main
79 |
--------------------------------------------------------------------------------
/docs/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/docs/.nojekyll
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | ← Back to Repository
43 |
44 |
45 | This page fetches the refined find bar mixin, adds a corresponding
46 | @include
rule with default arguments, and generates a link to open it in the
47 | Sass playground .
48 |
49 |
50 |
51 |
52 |
53 |
54 |
212 |
213 |
214 |
--------------------------------------------------------------------------------
/img/feature-buttons-false.dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-buttons-false.dark.png
--------------------------------------------------------------------------------
/img/feature-buttons-false.light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-buttons-false.light.png
--------------------------------------------------------------------------------
/img/feature-buttons-grouped.dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-buttons-grouped.dark.png
--------------------------------------------------------------------------------
/img/feature-buttons-grouped.light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-buttons-grouped.light.png
--------------------------------------------------------------------------------
/img/feature-buttons-true.dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-buttons-true.dark.png
--------------------------------------------------------------------------------
/img/feature-buttons-true.light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-buttons-true.light.png
--------------------------------------------------------------------------------
/img/feature-float-false.dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-float-false.dark.png
--------------------------------------------------------------------------------
/img/feature-float-false.light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-float-false.light.png
--------------------------------------------------------------------------------
/img/feature-float-true.dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-float-true.dark.png
--------------------------------------------------------------------------------
/img/feature-float-true.light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-float-true.light.png
--------------------------------------------------------------------------------
/img/feature-hide-close-button.dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-hide-close-button.dark.png
--------------------------------------------------------------------------------
/img/feature-hide-close-button.light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-hide-close-button.light.png
--------------------------------------------------------------------------------
/img/feature-order.dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-order.dark.png
--------------------------------------------------------------------------------
/img/feature-order.light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ravindUwU/firefox-refined-findbar/616ca6aa94e28c779b0ce0011ab768221797f210/img/feature-order.light.png
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "firefox-refined-findbar",
3 | "engines": {
4 | "node": "22"
5 | },
6 | "packageManager": "pnpm@9.15.1+sha512.1acb565e6193efbebda772702950469150cf12bcc764262e7587e71d19dc98a423dff9536e57ea44c49bdf790ff694e83c27be5faa23d67e0c033b583be4bfcf",
7 | "scripts": {
8 | "build": "sass ./src/refined-findbar.scss:./dist/refined-findbar.css --no-source-map --no-error-css",
9 | "watch": "pnpm run build -w",
10 | "clean": "rimraf ./dist",
11 | "site": "http-server",
12 | "pretty": "prettier -c ."
13 | },
14 | "devDependencies": {
15 | "http-server": "^14.1.1",
16 | "prettier": "^3.5.3",
17 | "rimraf": "^6.0.1",
18 | "sass": "^1.86.3"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | devDependencies:
11 | http-server:
12 | specifier: ^14.1.1
13 | version: 14.1.1
14 | prettier:
15 | specifier: ^3.5.3
16 | version: 3.5.3
17 | rimraf:
18 | specifier: ^6.0.1
19 | version: 6.0.1
20 | sass:
21 | specifier: ^1.86.3
22 | version: 1.86.3
23 |
24 | packages:
25 |
26 | '@isaacs/cliui@8.0.2':
27 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
28 | engines: {node: '>=12'}
29 |
30 | '@parcel/watcher-android-arm64@2.5.1':
31 | resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
32 | engines: {node: '>= 10.0.0'}
33 | cpu: [arm64]
34 | os: [android]
35 |
36 | '@parcel/watcher-darwin-arm64@2.5.1':
37 | resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
38 | engines: {node: '>= 10.0.0'}
39 | cpu: [arm64]
40 | os: [darwin]
41 |
42 | '@parcel/watcher-darwin-x64@2.5.1':
43 | resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
44 | engines: {node: '>= 10.0.0'}
45 | cpu: [x64]
46 | os: [darwin]
47 |
48 | '@parcel/watcher-freebsd-x64@2.5.1':
49 | resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
50 | engines: {node: '>= 10.0.0'}
51 | cpu: [x64]
52 | os: [freebsd]
53 |
54 | '@parcel/watcher-linux-arm-glibc@2.5.1':
55 | resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
56 | engines: {node: '>= 10.0.0'}
57 | cpu: [arm]
58 | os: [linux]
59 |
60 | '@parcel/watcher-linux-arm-musl@2.5.1':
61 | resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
62 | engines: {node: '>= 10.0.0'}
63 | cpu: [arm]
64 | os: [linux]
65 |
66 | '@parcel/watcher-linux-arm64-glibc@2.5.1':
67 | resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
68 | engines: {node: '>= 10.0.0'}
69 | cpu: [arm64]
70 | os: [linux]
71 |
72 | '@parcel/watcher-linux-arm64-musl@2.5.1':
73 | resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
74 | engines: {node: '>= 10.0.0'}
75 | cpu: [arm64]
76 | os: [linux]
77 |
78 | '@parcel/watcher-linux-x64-glibc@2.5.1':
79 | resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
80 | engines: {node: '>= 10.0.0'}
81 | cpu: [x64]
82 | os: [linux]
83 |
84 | '@parcel/watcher-linux-x64-musl@2.5.1':
85 | resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
86 | engines: {node: '>= 10.0.0'}
87 | cpu: [x64]
88 | os: [linux]
89 |
90 | '@parcel/watcher-win32-arm64@2.5.1':
91 | resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
92 | engines: {node: '>= 10.0.0'}
93 | cpu: [arm64]
94 | os: [win32]
95 |
96 | '@parcel/watcher-win32-ia32@2.5.1':
97 | resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
98 | engines: {node: '>= 10.0.0'}
99 | cpu: [ia32]
100 | os: [win32]
101 |
102 | '@parcel/watcher-win32-x64@2.5.1':
103 | resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
104 | engines: {node: '>= 10.0.0'}
105 | cpu: [x64]
106 | os: [win32]
107 |
108 | '@parcel/watcher@2.5.1':
109 | resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
110 | engines: {node: '>= 10.0.0'}
111 |
112 | '@pkgjs/parseargs@0.11.0':
113 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
114 | engines: {node: '>=14'}
115 |
116 | ansi-regex@5.0.1:
117 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
118 | engines: {node: '>=8'}
119 |
120 | ansi-regex@6.0.1:
121 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
122 | engines: {node: '>=12'}
123 |
124 | ansi-styles@4.3.0:
125 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
126 | engines: {node: '>=8'}
127 |
128 | ansi-styles@6.2.1:
129 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
130 | engines: {node: '>=12'}
131 |
132 | async@2.6.4:
133 | resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==}
134 |
135 | balanced-match@1.0.2:
136 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
137 |
138 | basic-auth@2.0.1:
139 | resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==}
140 | engines: {node: '>= 0.8'}
141 |
142 | brace-expansion@2.0.1:
143 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
144 |
145 | braces@3.0.3:
146 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
147 | engines: {node: '>=8'}
148 |
149 | call-bind@1.0.7:
150 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
151 | engines: {node: '>= 0.4'}
152 |
153 | chalk@4.1.2:
154 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
155 | engines: {node: '>=10'}
156 |
157 | chokidar@4.0.3:
158 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
159 | engines: {node: '>= 14.16.0'}
160 |
161 | color-convert@2.0.1:
162 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
163 | engines: {node: '>=7.0.0'}
164 |
165 | color-name@1.1.4:
166 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
167 |
168 | corser@2.0.1:
169 | resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==}
170 | engines: {node: '>= 0.4.0'}
171 |
172 | cross-spawn@7.0.3:
173 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
174 | engines: {node: '>= 8'}
175 |
176 | debug@3.2.7:
177 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
178 | peerDependencies:
179 | supports-color: '*'
180 | peerDependenciesMeta:
181 | supports-color:
182 | optional: true
183 |
184 | define-data-property@1.1.4:
185 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
186 | engines: {node: '>= 0.4'}
187 |
188 | detect-libc@1.0.3:
189 | resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
190 | engines: {node: '>=0.10'}
191 | hasBin: true
192 |
193 | eastasianwidth@0.2.0:
194 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
195 |
196 | emoji-regex@8.0.0:
197 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
198 |
199 | emoji-regex@9.2.2:
200 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
201 |
202 | es-define-property@1.0.0:
203 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
204 | engines: {node: '>= 0.4'}
205 |
206 | es-errors@1.3.0:
207 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
208 | engines: {node: '>= 0.4'}
209 |
210 | eventemitter3@4.0.7:
211 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
212 |
213 | fill-range@7.1.1:
214 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
215 | engines: {node: '>=8'}
216 |
217 | follow-redirects@1.15.6:
218 | resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
219 | engines: {node: '>=4.0'}
220 | peerDependencies:
221 | debug: '*'
222 | peerDependenciesMeta:
223 | debug:
224 | optional: true
225 |
226 | foreground-child@3.2.1:
227 | resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==}
228 | engines: {node: '>=14'}
229 |
230 | function-bind@1.1.2:
231 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
232 |
233 | get-intrinsic@1.2.4:
234 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
235 | engines: {node: '>= 0.4'}
236 |
237 | glob@11.0.0:
238 | resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==}
239 | engines: {node: 20 || >=22}
240 | hasBin: true
241 |
242 | gopd@1.0.1:
243 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
244 |
245 | has-flag@4.0.0:
246 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
247 | engines: {node: '>=8'}
248 |
249 | has-property-descriptors@1.0.2:
250 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
251 |
252 | has-proto@1.0.3:
253 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
254 | engines: {node: '>= 0.4'}
255 |
256 | has-symbols@1.0.3:
257 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
258 | engines: {node: '>= 0.4'}
259 |
260 | hasown@2.0.2:
261 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
262 | engines: {node: '>= 0.4'}
263 |
264 | he@1.2.0:
265 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
266 | hasBin: true
267 |
268 | html-encoding-sniffer@3.0.0:
269 | resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
270 | engines: {node: '>=12'}
271 |
272 | http-proxy@1.18.1:
273 | resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
274 | engines: {node: '>=8.0.0'}
275 |
276 | http-server@14.1.1:
277 | resolution: {integrity: sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==}
278 | engines: {node: '>=12'}
279 | hasBin: true
280 |
281 | iconv-lite@0.6.3:
282 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
283 | engines: {node: '>=0.10.0'}
284 |
285 | immutable@5.1.1:
286 | resolution: {integrity: sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==}
287 |
288 | is-extglob@2.1.1:
289 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
290 | engines: {node: '>=0.10.0'}
291 |
292 | is-fullwidth-code-point@3.0.0:
293 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
294 | engines: {node: '>=8'}
295 |
296 | is-glob@4.0.3:
297 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
298 | engines: {node: '>=0.10.0'}
299 |
300 | is-number@7.0.0:
301 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
302 | engines: {node: '>=0.12.0'}
303 |
304 | isexe@2.0.0:
305 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
306 |
307 | jackspeak@4.0.1:
308 | resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==}
309 | engines: {node: 20 || >=22}
310 |
311 | lodash@4.17.21:
312 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
313 |
314 | lru-cache@11.0.0:
315 | resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==}
316 | engines: {node: 20 || >=22}
317 |
318 | micromatch@4.0.8:
319 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
320 | engines: {node: '>=8.6'}
321 |
322 | mime@1.6.0:
323 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
324 | engines: {node: '>=4'}
325 | hasBin: true
326 |
327 | minimatch@10.0.1:
328 | resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
329 | engines: {node: 20 || >=22}
330 |
331 | minimist@1.2.8:
332 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
333 |
334 | minipass@7.1.2:
335 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
336 | engines: {node: '>=16 || 14 >=14.17'}
337 |
338 | mkdirp@0.5.6:
339 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
340 | hasBin: true
341 |
342 | ms@2.1.3:
343 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
344 |
345 | node-addon-api@7.1.1:
346 | resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
347 |
348 | object-inspect@1.13.2:
349 | resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
350 | engines: {node: '>= 0.4'}
351 |
352 | opener@1.5.2:
353 | resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==}
354 | hasBin: true
355 |
356 | package-json-from-dist@1.0.0:
357 | resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==}
358 |
359 | path-key@3.1.1:
360 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
361 | engines: {node: '>=8'}
362 |
363 | path-scurry@2.0.0:
364 | resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
365 | engines: {node: 20 || >=22}
366 |
367 | picomatch@2.3.1:
368 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
369 | engines: {node: '>=8.6'}
370 |
371 | portfinder@1.0.32:
372 | resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==}
373 | engines: {node: '>= 0.12.0'}
374 |
375 | prettier@3.5.3:
376 | resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
377 | engines: {node: '>=14'}
378 | hasBin: true
379 |
380 | qs@6.12.3:
381 | resolution: {integrity: sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==}
382 | engines: {node: '>=0.6'}
383 |
384 | readdirp@4.1.2:
385 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
386 | engines: {node: '>= 14.18.0'}
387 |
388 | requires-port@1.0.0:
389 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
390 |
391 | rimraf@6.0.1:
392 | resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
393 | engines: {node: 20 || >=22}
394 | hasBin: true
395 |
396 | safe-buffer@5.1.2:
397 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
398 |
399 | safer-buffer@2.1.2:
400 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
401 |
402 | sass@1.86.3:
403 | resolution: {integrity: sha512-iGtg8kus4GrsGLRDLRBRHY9dNVA78ZaS7xr01cWnS7PEMQyFtTqBiyCrfpTYTZXRWM94akzckYjh8oADfFNTzw==}
404 | engines: {node: '>=14.0.0'}
405 | hasBin: true
406 |
407 | secure-compare@3.0.1:
408 | resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==}
409 |
410 | set-function-length@1.2.2:
411 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
412 | engines: {node: '>= 0.4'}
413 |
414 | shebang-command@2.0.0:
415 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
416 | engines: {node: '>=8'}
417 |
418 | shebang-regex@3.0.0:
419 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
420 | engines: {node: '>=8'}
421 |
422 | side-channel@1.0.6:
423 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
424 | engines: {node: '>= 0.4'}
425 |
426 | signal-exit@4.1.0:
427 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
428 | engines: {node: '>=14'}
429 |
430 | source-map-js@1.2.1:
431 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
432 | engines: {node: '>=0.10.0'}
433 |
434 | string-width@4.2.3:
435 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
436 | engines: {node: '>=8'}
437 |
438 | string-width@5.1.2:
439 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
440 | engines: {node: '>=12'}
441 |
442 | strip-ansi@6.0.1:
443 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
444 | engines: {node: '>=8'}
445 |
446 | strip-ansi@7.1.0:
447 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
448 | engines: {node: '>=12'}
449 |
450 | supports-color@7.2.0:
451 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
452 | engines: {node: '>=8'}
453 |
454 | to-regex-range@5.0.1:
455 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
456 | engines: {node: '>=8.0'}
457 |
458 | union@0.5.0:
459 | resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==}
460 | engines: {node: '>= 0.8.0'}
461 |
462 | url-join@4.0.1:
463 | resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==}
464 |
465 | whatwg-encoding@2.0.0:
466 | resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
467 | engines: {node: '>=12'}
468 |
469 | which@2.0.2:
470 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
471 | engines: {node: '>= 8'}
472 | hasBin: true
473 |
474 | wrap-ansi@7.0.0:
475 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
476 | engines: {node: '>=10'}
477 |
478 | wrap-ansi@8.1.0:
479 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
480 | engines: {node: '>=12'}
481 |
482 | snapshots:
483 |
484 | '@isaacs/cliui@8.0.2':
485 | dependencies:
486 | string-width: 5.1.2
487 | string-width-cjs: string-width@4.2.3
488 | strip-ansi: 7.1.0
489 | strip-ansi-cjs: strip-ansi@6.0.1
490 | wrap-ansi: 8.1.0
491 | wrap-ansi-cjs: wrap-ansi@7.0.0
492 |
493 | '@parcel/watcher-android-arm64@2.5.1':
494 | optional: true
495 |
496 | '@parcel/watcher-darwin-arm64@2.5.1':
497 | optional: true
498 |
499 | '@parcel/watcher-darwin-x64@2.5.1':
500 | optional: true
501 |
502 | '@parcel/watcher-freebsd-x64@2.5.1':
503 | optional: true
504 |
505 | '@parcel/watcher-linux-arm-glibc@2.5.1':
506 | optional: true
507 |
508 | '@parcel/watcher-linux-arm-musl@2.5.1':
509 | optional: true
510 |
511 | '@parcel/watcher-linux-arm64-glibc@2.5.1':
512 | optional: true
513 |
514 | '@parcel/watcher-linux-arm64-musl@2.5.1':
515 | optional: true
516 |
517 | '@parcel/watcher-linux-x64-glibc@2.5.1':
518 | optional: true
519 |
520 | '@parcel/watcher-linux-x64-musl@2.5.1':
521 | optional: true
522 |
523 | '@parcel/watcher-win32-arm64@2.5.1':
524 | optional: true
525 |
526 | '@parcel/watcher-win32-ia32@2.5.1':
527 | optional: true
528 |
529 | '@parcel/watcher-win32-x64@2.5.1':
530 | optional: true
531 |
532 | '@parcel/watcher@2.5.1':
533 | dependencies:
534 | detect-libc: 1.0.3
535 | is-glob: 4.0.3
536 | micromatch: 4.0.8
537 | node-addon-api: 7.1.1
538 | optionalDependencies:
539 | '@parcel/watcher-android-arm64': 2.5.1
540 | '@parcel/watcher-darwin-arm64': 2.5.1
541 | '@parcel/watcher-darwin-x64': 2.5.1
542 | '@parcel/watcher-freebsd-x64': 2.5.1
543 | '@parcel/watcher-linux-arm-glibc': 2.5.1
544 | '@parcel/watcher-linux-arm-musl': 2.5.1
545 | '@parcel/watcher-linux-arm64-glibc': 2.5.1
546 | '@parcel/watcher-linux-arm64-musl': 2.5.1
547 | '@parcel/watcher-linux-x64-glibc': 2.5.1
548 | '@parcel/watcher-linux-x64-musl': 2.5.1
549 | '@parcel/watcher-win32-arm64': 2.5.1
550 | '@parcel/watcher-win32-ia32': 2.5.1
551 | '@parcel/watcher-win32-x64': 2.5.1
552 | optional: true
553 |
554 | '@pkgjs/parseargs@0.11.0':
555 | optional: true
556 |
557 | ansi-regex@5.0.1: {}
558 |
559 | ansi-regex@6.0.1: {}
560 |
561 | ansi-styles@4.3.0:
562 | dependencies:
563 | color-convert: 2.0.1
564 |
565 | ansi-styles@6.2.1: {}
566 |
567 | async@2.6.4:
568 | dependencies:
569 | lodash: 4.17.21
570 |
571 | balanced-match@1.0.2: {}
572 |
573 | basic-auth@2.0.1:
574 | dependencies:
575 | safe-buffer: 5.1.2
576 |
577 | brace-expansion@2.0.1:
578 | dependencies:
579 | balanced-match: 1.0.2
580 |
581 | braces@3.0.3:
582 | dependencies:
583 | fill-range: 7.1.1
584 | optional: true
585 |
586 | call-bind@1.0.7:
587 | dependencies:
588 | es-define-property: 1.0.0
589 | es-errors: 1.3.0
590 | function-bind: 1.1.2
591 | get-intrinsic: 1.2.4
592 | set-function-length: 1.2.2
593 |
594 | chalk@4.1.2:
595 | dependencies:
596 | ansi-styles: 4.3.0
597 | supports-color: 7.2.0
598 |
599 | chokidar@4.0.3:
600 | dependencies:
601 | readdirp: 4.1.2
602 |
603 | color-convert@2.0.1:
604 | dependencies:
605 | color-name: 1.1.4
606 |
607 | color-name@1.1.4: {}
608 |
609 | corser@2.0.1: {}
610 |
611 | cross-spawn@7.0.3:
612 | dependencies:
613 | path-key: 3.1.1
614 | shebang-command: 2.0.0
615 | which: 2.0.2
616 |
617 | debug@3.2.7:
618 | dependencies:
619 | ms: 2.1.3
620 |
621 | define-data-property@1.1.4:
622 | dependencies:
623 | es-define-property: 1.0.0
624 | es-errors: 1.3.0
625 | gopd: 1.0.1
626 |
627 | detect-libc@1.0.3:
628 | optional: true
629 |
630 | eastasianwidth@0.2.0: {}
631 |
632 | emoji-regex@8.0.0: {}
633 |
634 | emoji-regex@9.2.2: {}
635 |
636 | es-define-property@1.0.0:
637 | dependencies:
638 | get-intrinsic: 1.2.4
639 |
640 | es-errors@1.3.0: {}
641 |
642 | eventemitter3@4.0.7: {}
643 |
644 | fill-range@7.1.1:
645 | dependencies:
646 | to-regex-range: 5.0.1
647 | optional: true
648 |
649 | follow-redirects@1.15.6: {}
650 |
651 | foreground-child@3.2.1:
652 | dependencies:
653 | cross-spawn: 7.0.3
654 | signal-exit: 4.1.0
655 |
656 | function-bind@1.1.2: {}
657 |
658 | get-intrinsic@1.2.4:
659 | dependencies:
660 | es-errors: 1.3.0
661 | function-bind: 1.1.2
662 | has-proto: 1.0.3
663 | has-symbols: 1.0.3
664 | hasown: 2.0.2
665 |
666 | glob@11.0.0:
667 | dependencies:
668 | foreground-child: 3.2.1
669 | jackspeak: 4.0.1
670 | minimatch: 10.0.1
671 | minipass: 7.1.2
672 | package-json-from-dist: 1.0.0
673 | path-scurry: 2.0.0
674 |
675 | gopd@1.0.1:
676 | dependencies:
677 | get-intrinsic: 1.2.4
678 |
679 | has-flag@4.0.0: {}
680 |
681 | has-property-descriptors@1.0.2:
682 | dependencies:
683 | es-define-property: 1.0.0
684 |
685 | has-proto@1.0.3: {}
686 |
687 | has-symbols@1.0.3: {}
688 |
689 | hasown@2.0.2:
690 | dependencies:
691 | function-bind: 1.1.2
692 |
693 | he@1.2.0: {}
694 |
695 | html-encoding-sniffer@3.0.0:
696 | dependencies:
697 | whatwg-encoding: 2.0.0
698 |
699 | http-proxy@1.18.1:
700 | dependencies:
701 | eventemitter3: 4.0.7
702 | follow-redirects: 1.15.6
703 | requires-port: 1.0.0
704 | transitivePeerDependencies:
705 | - debug
706 |
707 | http-server@14.1.1:
708 | dependencies:
709 | basic-auth: 2.0.1
710 | chalk: 4.1.2
711 | corser: 2.0.1
712 | he: 1.2.0
713 | html-encoding-sniffer: 3.0.0
714 | http-proxy: 1.18.1
715 | mime: 1.6.0
716 | minimist: 1.2.8
717 | opener: 1.5.2
718 | portfinder: 1.0.32
719 | secure-compare: 3.0.1
720 | union: 0.5.0
721 | url-join: 4.0.1
722 | transitivePeerDependencies:
723 | - debug
724 | - supports-color
725 |
726 | iconv-lite@0.6.3:
727 | dependencies:
728 | safer-buffer: 2.1.2
729 |
730 | immutable@5.1.1: {}
731 |
732 | is-extglob@2.1.1:
733 | optional: true
734 |
735 | is-fullwidth-code-point@3.0.0: {}
736 |
737 | is-glob@4.0.3:
738 | dependencies:
739 | is-extglob: 2.1.1
740 | optional: true
741 |
742 | is-number@7.0.0:
743 | optional: true
744 |
745 | isexe@2.0.0: {}
746 |
747 | jackspeak@4.0.1:
748 | dependencies:
749 | '@isaacs/cliui': 8.0.2
750 | optionalDependencies:
751 | '@pkgjs/parseargs': 0.11.0
752 |
753 | lodash@4.17.21: {}
754 |
755 | lru-cache@11.0.0: {}
756 |
757 | micromatch@4.0.8:
758 | dependencies:
759 | braces: 3.0.3
760 | picomatch: 2.3.1
761 | optional: true
762 |
763 | mime@1.6.0: {}
764 |
765 | minimatch@10.0.1:
766 | dependencies:
767 | brace-expansion: 2.0.1
768 |
769 | minimist@1.2.8: {}
770 |
771 | minipass@7.1.2: {}
772 |
773 | mkdirp@0.5.6:
774 | dependencies:
775 | minimist: 1.2.8
776 |
777 | ms@2.1.3: {}
778 |
779 | node-addon-api@7.1.1:
780 | optional: true
781 |
782 | object-inspect@1.13.2: {}
783 |
784 | opener@1.5.2: {}
785 |
786 | package-json-from-dist@1.0.0: {}
787 |
788 | path-key@3.1.1: {}
789 |
790 | path-scurry@2.0.0:
791 | dependencies:
792 | lru-cache: 11.0.0
793 | minipass: 7.1.2
794 |
795 | picomatch@2.3.1:
796 | optional: true
797 |
798 | portfinder@1.0.32:
799 | dependencies:
800 | async: 2.6.4
801 | debug: 3.2.7
802 | mkdirp: 0.5.6
803 | transitivePeerDependencies:
804 | - supports-color
805 |
806 | prettier@3.5.3: {}
807 |
808 | qs@6.12.3:
809 | dependencies:
810 | side-channel: 1.0.6
811 |
812 | readdirp@4.1.2: {}
813 |
814 | requires-port@1.0.0: {}
815 |
816 | rimraf@6.0.1:
817 | dependencies:
818 | glob: 11.0.0
819 | package-json-from-dist: 1.0.0
820 |
821 | safe-buffer@5.1.2: {}
822 |
823 | safer-buffer@2.1.2: {}
824 |
825 | sass@1.86.3:
826 | dependencies:
827 | chokidar: 4.0.3
828 | immutable: 5.1.1
829 | source-map-js: 1.2.1
830 | optionalDependencies:
831 | '@parcel/watcher': 2.5.1
832 |
833 | secure-compare@3.0.1: {}
834 |
835 | set-function-length@1.2.2:
836 | dependencies:
837 | define-data-property: 1.1.4
838 | es-errors: 1.3.0
839 | function-bind: 1.1.2
840 | get-intrinsic: 1.2.4
841 | gopd: 1.0.1
842 | has-property-descriptors: 1.0.2
843 |
844 | shebang-command@2.0.0:
845 | dependencies:
846 | shebang-regex: 3.0.0
847 |
848 | shebang-regex@3.0.0: {}
849 |
850 | side-channel@1.0.6:
851 | dependencies:
852 | call-bind: 1.0.7
853 | es-errors: 1.3.0
854 | get-intrinsic: 1.2.4
855 | object-inspect: 1.13.2
856 |
857 | signal-exit@4.1.0: {}
858 |
859 | source-map-js@1.2.1: {}
860 |
861 | string-width@4.2.3:
862 | dependencies:
863 | emoji-regex: 8.0.0
864 | is-fullwidth-code-point: 3.0.0
865 | strip-ansi: 6.0.1
866 |
867 | string-width@5.1.2:
868 | dependencies:
869 | eastasianwidth: 0.2.0
870 | emoji-regex: 9.2.2
871 | strip-ansi: 7.1.0
872 |
873 | strip-ansi@6.0.1:
874 | dependencies:
875 | ansi-regex: 5.0.1
876 |
877 | strip-ansi@7.1.0:
878 | dependencies:
879 | ansi-regex: 6.0.1
880 |
881 | supports-color@7.2.0:
882 | dependencies:
883 | has-flag: 4.0.0
884 |
885 | to-regex-range@5.0.1:
886 | dependencies:
887 | is-number: 7.0.0
888 | optional: true
889 |
890 | union@0.5.0:
891 | dependencies:
892 | qs: 6.12.3
893 |
894 | url-join@4.0.1: {}
895 |
896 | whatwg-encoding@2.0.0:
897 | dependencies:
898 | iconv-lite: 0.6.3
899 |
900 | which@2.0.2:
901 | dependencies:
902 | isexe: 2.0.0
903 |
904 | wrap-ansi@7.0.0:
905 | dependencies:
906 | ansi-styles: 4.3.0
907 | string-width: 4.2.3
908 | strip-ansi: 6.0.1
909 |
910 | wrap-ansi@8.1.0:
911 | dependencies:
912 | ansi-styles: 6.2.1
913 | string-width: 5.1.2
914 | strip-ansi: 7.1.0
915 |
--------------------------------------------------------------------------------
/src/refined-findbar.scss:
--------------------------------------------------------------------------------
1 | @use 'sass:list';
2 | @use 'sass:math';
3 | @use 'sass:map';
4 |
5 | @mixin /* sig:start */
6 | refined-findbar(
7 | $float: true,
8 | $float-alignment: bottom,
9 | $float-distance: 18px,
10 |
11 | $buttons: true,
12 | $buttons-grouped: true,
13 |
14 | $hide-close-button: false,
15 | $hide-when-unfocused: false,
16 | $opacity-when-unfocused: 1,
17 |
18 | $order: (
19 | TEXT_BOX,
20 | CHECKBOX_HIGHLIGHT_ALL,
21 | CHECKBOX_MATCH_CASE,
22 | CHECKBOX_MATCH_DIACRITICS,
23 | CHECKBOX_WHOLE_WORDS,
24 | LABELS,
25 | DESCRIPTION,
26 | )
27 | )
28 | /* sig:end */ {
29 | @namespace url('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul');
30 | @namespace htmlNs url('http://www.w3.org/1999/xhtml');
31 |
32 | // MARK: Position
33 |
34 | findbar {
35 | contain: content;
36 |
37 | // The findbar sits in a relatively positioned a vbox.browserContainer, so we're free to
38 | // absolutely position the findbar within it.
39 | position: absolute;
40 |
41 | @if $float {
42 | // Top or bottom align the floating findbar.
43 | right: $float-distance;
44 | #{$float-alignment}: $float-distance;
45 | } @else {
46 | // Otherwise, top-align the findbar, move it up by 1px to "merge" it with the rest of
47 | // the chrome.
48 | top: -1px;
49 | right: 44px;
50 | }
51 | }
52 |
53 | // MARK: Children
54 |
55 | findbar {
56 | // Uniformly pad & space out direct descendants.
57 | gap: $-space;
58 | padding: 6px;
59 | padding-inline-start: $-space;
60 | padding-inline-end: $-space;
61 |
62 | // Remove horizontal margins of direct descendants because the gap (above) will space them
63 | // out.
64 | & > * {
65 | margin-inline-start: 0 !important;
66 | margin-inline-end: 0 !important;
67 | }
68 |
69 | // Findbar controls live within an hbox.findbar-container, which is a flex parent. Remove
70 | // horizontal margins of direct descendants and space them out evenly with gap.
71 | .findbar-container {
72 | gap: $-space;
73 |
74 | & > * {
75 | margin-inline-start: 0 !important;
76 | margin-inline-end: 0 !important;
77 | }
78 | }
79 |
80 | // Hide empty description element.
81 | description.findbar-label:empty {
82 | display: none;
83 | }
84 |
85 | @if ($hide-close-button) {
86 | toolbarbutton.findbar-closebutton {
87 | display: none;
88 | }
89 | }
90 | }
91 |
92 | // MARK: Border
93 |
94 | findbar {
95 | border: 1px solid var(--chrome-content-separator-color);
96 |
97 | @if $float {
98 | border-radius: var(--toolbarbutton-border-radius);
99 | } @else {
100 | border-bottom-left-radius: var(--toolbarbutton-border-radius);
101 | border-bottom-right-radius: var(--toolbarbutton-border-radius);
102 | border-top-width: 0 !important;
103 | }
104 | }
105 |
106 | // MARK: Animation
107 |
108 | @keyframes refined-findbar-scale-in {
109 | 0% {
110 | transform: scaleY(0);
111 | }
112 | 100% {
113 | transform: scaleY(1);
114 | }
115 | }
116 |
117 | @keyframes refined-findbar-scale-out {
118 | // Prolong visibility during animation.
119 | 0% {
120 | transform: scaleY(1);
121 | visibility: visible;
122 | }
123 | 99% {
124 | transform: scaleY(0);
125 | visibility: visible;
126 | }
127 | 100% {
128 | transform: scaleY(0);
129 | }
130 | }
131 |
132 | findbar {
133 | transform-origin: if($float, $float-alignment, top) center;
134 |
135 | // Scale in when shown, out when hidden.
136 | animation: refined-findbar-scale-in 0.1s;
137 |
138 | &[hidden='true'] {
139 | animation: refined-findbar-scale-out 0.1s;
140 | }
141 | }
142 |
143 | // MARK: Hide when unfocused
144 |
145 | @if ($hide-when-unfocused) {
146 | @keyframes refined-findbar-hide-when-unfocused {
147 | // Prolong opacity & height during animation.
148 | 0% {
149 | opacity: 1;
150 | height: auto;
151 | }
152 | 99% {
153 | opacity: 1;
154 | height: auto;
155 | }
156 | 100% {
157 | }
158 | }
159 |
160 | findbar:not(:focus-within) {
161 | animation:
162 | refined-findbar-scale-out 0.1s,
163 | refined-findbar-hide-when-unfocused 0.1s;
164 | height: 0;
165 | opacity: 0;
166 | pointer-events: none;
167 | overflow: hidden;
168 | }
169 | }
170 |
171 | // MARK: Opacity when unfocused
172 |
173 | @if ($opacity-when-unfocused < 1) {
174 | findbar {
175 | transition: opacity 0.1s;
176 | opacity: 1;
177 |
178 | &:not(:focus-within) {
179 | opacity: $opacity-when-unfocused;
180 | }
181 | }
182 | }
183 |
184 | // MARK: Text box
185 |
186 | findbar [anonid='findbar-textbox-wrapper'] {
187 | htmlNs|input {
188 | border: 1px solid ThreeDShadow;
189 |
190 | @if $buttons and $buttons-grouped {
191 | // Remove border radii along the right edge to merge the text box with the prev
192 | // & next buttons, if the findbar isn't opened in quick find mode.
193 | &:not(.minimal) {
194 | border-top-right-radius: 0 !important;
195 | border-bottom-right-radius: 0 !important;
196 | }
197 | }
198 | }
199 |
200 | /* Previous & next buttons. Hidden if the findbar is opened in quick find mode. */
201 | toolbarbutton {
202 | color: var(--button-color);
203 | background-color: #{-var(button-background-color, button-bgcolor)};
204 | border: 1px solid ThreeDShadow;
205 |
206 | // The previous & next buttons have left & right margins respectively, by default.
207 | // Remove them to merge the buttons with the text box.
208 | margin-inline: 0 !important;
209 |
210 | @if $buttons and $buttons-grouped {
211 | &:last-of-type {
212 | border-top-left-radius: 0 !important;
213 | border-bottom-left-radius: 0 !important;
214 | }
215 | &:not(:last-of-type) {
216 | border-radius: 0 !important;
217 | border-right-width: 0 !important;
218 | }
219 | }
220 | }
221 | }
222 |
223 | // MARK: Checkboxes
224 |
225 | // The :first-of-type and :last-of-type pseudo-classes can't be used here because the
226 | // selectors follow the DOM order, and checkboxes might have been reordered via $order.
227 | // Instead, identify the first & last checkboxes via their position in $order.
228 | $checkbox-by-index: ();
229 | @each $name in map.keys($-checkbox-selectors) {
230 | $checkbox-by-index: map.set($checkbox-by-index, list.index($order, $name), $name);
231 | }
232 | $first-checkbox: map.get($checkbox-by-index, math.min(map.keys($checkbox-by-index)...));
233 | $last-checkbox: map.get($checkbox-by-index, math.max(map.keys($checkbox-by-index)...));
234 |
235 | findbar checkbox {
236 | @if $buttons {
237 | padding: 3px 6px;
238 | border: 1px solid ThreeDShadow;
239 | border-radius: var(--toolbarbutton-border-radius);
240 | color: var(--button-color);
241 | background-color: #{-var(button-background-color, button-bgcolor)};
242 |
243 | &:hover {
244 | background-color: #{-var(button-background-color-hover, button-hover-bgcolor)};
245 | }
246 |
247 | &:active {
248 | background-color: #{-var(button-background-color-active, button-active-bgcolor)};
249 | }
250 |
251 | &[checked='true'] {
252 | color: #{-var(button-text-color-primary, button-primary-color)};
253 | background-color: #{-var(color-accent-primary, button-primary-bgcolor)};
254 |
255 | &:hover {
256 | background-color: #{-var(color-accent-primary-hover, button-primary-hover-bgcolor)};
257 | }
258 |
259 | &:active {
260 | background-color: #{-var(color-accent-primary-active, button-primary-active-bgcolor)};
261 | }
262 | }
263 |
264 | &:focus-visible {
265 | outline: var(--focus-outline);
266 | outline-offset: var(--focus-outline-inset);
267 | }
268 |
269 | .checkbox-check {
270 | display: none;
271 | }
272 |
273 | @if $buttons-grouped {
274 | // Restyle border thicknesses & radii of first & last checkboxes so they appear
275 | // grouped together.
276 |
277 | &:not(#{map.get($-checkbox-selectors, $last-checkbox)}) {
278 | border-top-right-radius: 0;
279 | border-bottom-right-radius: 0;
280 | }
281 |
282 | &:not(#{map.get($-checkbox-selectors, $first-checkbox)}) {
283 | border-top-left-radius: 0;
284 | border-bottom-left-radius: 0;
285 | border-left-width: 0;
286 |
287 | // Remove space between consecutive grouped buttons.
288 | margin-inline-start: -$-space !important;
289 | }
290 | } @else {
291 | &:not(#{map.get($-checkbox-selectors, $first-checkbox)}) {
292 | // Move non-grouped buttons closer to each other.
293 | margin-inline-start: -1 * math.div($-space, 2) !important;
294 | }
295 | }
296 | } @else {
297 | &:is(#{map.get($-checkbox-selectors, $first-checkbox)}) {
298 | margin-inline-start: math.div($-space, 2) !important;
299 | }
300 | &:is(#{map.get($-checkbox-selectors, $last-checkbox)}) {
301 | margin-inline-end: math.div($-space, 2) !important;
302 | }
303 | }
304 | }
305 |
306 | // MARK: Order
307 |
308 | findbar {
309 | [anonid='findbar-textbox-wrapper'] {
310 | order: list.index($order, TEXT_BOX) - 1;
311 | }
312 |
313 | @each $name, $selector in $-checkbox-selectors {
314 | #{$selector} {
315 | order: list.index($order, $name) - 1;
316 | }
317 | }
318 |
319 | label.findbar-label {
320 | order: list.index($order, LABELS) - 1;
321 | }
322 |
323 | description.findbar-label {
324 | order: list.index($order, DESCRIPTION) - 1;
325 | }
326 | }
327 | }
328 |
329 | $-space: 8px;
330 |
331 | /// `$order` tokens that match checkboxes, mapped to the corresponding CSS selector.
332 | $-checkbox-selectors: (
333 | CHECKBOX_HIGHLIGHT_ALL: "checkbox[anonid='highlight']",
334 | CHECKBOX_MATCH_CASE: "checkbox[anonid='find-case-sensitive']",
335 | CHECKBOX_MATCH_DIACRITICS: "checkbox[anonid='find-match-diacritics']",
336 | CHECKBOX_WHOLE_WORDS: "checkbox[anonid='find-entire-word']",
337 | );
338 |
339 | /// Makes a CSS `var()` expression that references a variable and any fallbacks, in the specified
340 | /// order.
341 | ///
342 | /// @example scss Variable without fallback
343 | /// @debug -var(a);
344 | /// // Prints var(--a)
345 | ///
346 | /// @example scss Variable with fallbacks
347 | /// @debug -var(a, b, c);
348 | /// // var(--a, var(--b, var(--c)))
349 | @function -var($names...) {
350 | $css: '';
351 | @for $i from list.length($names) through 1 {
352 | @if $css == '' {
353 | $css: 'var(--' + list.nth($names, $i) + ')';
354 | } @else {
355 | $css: 'var(--' + list.nth($names, $i) + ', ' + $css + ')';
356 | }
357 | }
358 | @return $css;
359 | }
360 |
--------------------------------------------------------------------------------