├── .changeset
├── README.md
└── config.json
├── .editorconfig
├── .github
├── FUNDING.yml
└── workflows
│ └── ci-cd.yaml
├── .gitignore
├── .npmrc
├── .nvmrc
├── .prettierignore
├── .tshy
├── build.json
├── commonjs.json
└── esm.json
├── .vscode
├── extensions.json
└── settings.json
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── assets
└── logo.svg
├── base.css
├── package.json
├── pnpm-lock.yaml
├── reset-scoped.css
├── reset.css
├── src
└── reset-scoped
│ ├── index.ts
│ └── react
│ ├── index.ts
│ ├── jsx-dev-runtime.ts
│ ├── jsx-runtime.ts
│ └── transformProps.ts
├── test-pages
└── reset.html
├── tsconfig.json
└── ua-sheets
├── SOURCES.md
├── chrome.css
├── firefox.css
└── safari.css
/.changeset/README.md:
--------------------------------------------------------------------------------
1 | # Changesets
2 |
3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
4 | with multi-package repos, or single-package repos to help you version and publish your code. You can
5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets)
6 |
7 | We have a quick list of common questions to get you started engaging with this project in
8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
9 |
--------------------------------------------------------------------------------
/.changeset/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://unpkg.com/@changesets/config@3.0.3/schema.json",
3 | "changelog": [
4 | "@changesets/changelog-github",
5 | { "repo": "kripod/css-homogenizer" }
6 | ],
7 | "access": "public",
8 | "baseBranch": "main"
9 | }
10 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 2
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: kripod
2 |
--------------------------------------------------------------------------------
/.github/workflows/ci-cd.yaml:
--------------------------------------------------------------------------------
1 | name: CI/CD
2 | on:
3 | push:
4 | branches:
5 | - main
6 | pull_request:
7 |
8 | concurrency:
9 | group: ${{ github.workflow }}-${{ github.ref }}
10 | cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
11 |
12 | jobs:
13 | build-lint-test-release:
14 | runs-on: ubuntu-latest
15 | permissions:
16 | contents: write
17 | id-token: write
18 | pull-requests: write
19 | steps:
20 | - uses: actions/checkout@v4
21 | - uses: pnpm/action-setup@v4
22 | - uses: actions/setup-node@v4
23 | with:
24 | node-version-file: .nvmrc
25 | cache: pnpm
26 | - run: pnpm install
27 | - run: pnpm run lint
28 | - run: pnpm run --if-present test
29 | - name: Create Release Pull Request or Publish to npm
30 | if: ${{ github.ref == 'refs/heads/main' }}
31 | uses: changesets/action@v1
32 | with:
33 | publish: pnpm exec changeset publish
34 | commit: "chore: release"
35 | title: "chore: release"
36 | env:
37 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
38 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
39 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | dist/
3 | .tshy-build/
4 | *.log*
5 | .DS_Store
6 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | provenance=true
2 | strict-peer-dependencies=true
3 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | 22
2 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | pnpm-lock.yaml
2 | ua-sheets/*.css
3 | dist/
4 | .tshy/
5 | .tshy-build/
6 |
--------------------------------------------------------------------------------
/.tshy/build.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "rootDir": "../src",
5 | "module": "nodenext",
6 | "moduleResolution": "nodenext"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/.tshy/commonjs.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./build.json",
3 | "include": [
4 | "../src/**/*.ts",
5 | "../src/**/*.cts",
6 | "../src/**/*.tsx",
7 | "../src/**/*.json"
8 | ],
9 | "exclude": [
10 | "../src/**/*.mts",
11 | "../src/package.json"
12 | ],
13 | "compilerOptions": {
14 | "outDir": "../.tshy-build/commonjs"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/.tshy/esm.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./build.json",
3 | "include": [
4 | "../src/**/*.ts",
5 | "../src/**/*.mts",
6 | "../src/**/*.tsx",
7 | "../src/**/*.json"
8 | ],
9 | "exclude": [
10 | "../src/package.json"
11 | ],
12 | "compilerOptions": {
13 | "outDir": "../.tshy-build/esm"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "EditorConfig.EditorConfig",
4 | "esbenp.prettier-vscode",
5 | "GitHub.vscode-github-actions"
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.defaultFormatter": "esbenp.prettier-vscode",
3 | "editor.formatOnSave": true
4 | }
5 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # css-homogenizer
2 |
3 | ## 4.1.3
4 |
5 | ### Patch Changes
6 |
7 | - [`9b7f94e`](https://github.com/kripod/css-homogenizer/commit/9b7f94e19c4c4377c7c97e5d95dc579802dea4ed) Thanks [@kripod](https://github.com/kripod)! - fix(base): respect `hidden="until-found"` attribute
8 |
9 | ## 4.1.2
10 |
11 | ### Patch Changes
12 |
13 | - [`5684082`](https://github.com/kripod/css-homogenizer/commit/5684082624f98fe043ce1d087cd0c7888b6e2d1c) Thanks [@kripod](https://github.com/kripod)! - docs(readme): simplify version badge
14 |
15 | ## 4.1.1
16 |
17 | ### Patch Changes
18 |
19 | - [`e3fdeb5`](https://github.com/kripod/css-homogenizer/commit/e3fdeb563c7774e58c3735116869901db2327142) Thanks [@kripod](https://github.com/kripod)! - fix(reset): table `border-color` inheritance to enable `*` overrides (e.g. [Tailwind’s Preflight styles](https://unpkg.com/tailwindcss@%5E3/src/css/preflight.css) rely upon this)
20 |
21 | ## 4.1.0
22 |
23 | ### Minor Changes
24 |
25 | - [`9290a23`](https://github.com/kripod/css-homogenizer/commit/9290a23dfcf23489e9951623e1454d8260255568) Thanks [@kripod](https://github.com/kripod)! - feat(reset): table `border-color` inheritance from `color` (based upon [sindresorhus/modern-normalize#79](https://github.com/sindresorhus/modern-normalize/pull/79))
26 |
27 | ## 4.0.0
28 |
29 | ### Major Changes
30 |
31 | - [`704ca8e`](https://github.com/kripod/css-homogenizer/commit/704ca8edbdd7283160c21a3dfbfcaca704bb696c) Thanks [@kripod](https://github.com/kripod)! - refactor(reset-scoped)!: rewrite runtime, bundled using [tshy](https://github.com/isaacs/tshy)
32 |
33 | ### Patch Changes
34 |
35 | - [`b8b9116`](https://github.com/kripod/css-homogenizer/commit/b8b9116b871b150d70d357b6efa4ef31c3a9d459) Thanks [@kripod](https://github.com/kripod)! - fix(reset): disabled select opacity in Chrome
36 |
37 | - [`7da2b14`](https://github.com/kripod/css-homogenizer/commit/7da2b14c3ec9d699b72aefdbb2c3fa5a3c89fca2) Thanks [@kripod](https://github.com/kripod)! - fix(reset): select border-radius in Safari
38 |
39 | ## [3.2.1] - 2023-06-05
40 |
41 | ### Fixed
42 |
43 | - **reset-scoped:** compatibility with legacy module resolution strategies
44 |
45 | ## [3.2.0] - 2023-06-05
46 |
47 | ### Added
48 |
49 | - **reset-scoped:** ship CommonJS modules alongside ESM
50 |
51 | ### Removed
52 |
53 | - **reset:** main package entry point as an undocumented alias
54 |
55 | ## [3.1.0] - 2023-06-04
56 |
57 | ### Added
58 |
59 | - **reset-scoped:** initial release
60 |
61 | ## [3.0.2] - 2023-06-04
62 |
63 | ### Fixed
64 |
65 | - **base:** respect `hidden` attribute of embedded content elements (`img`, `iframe`, `embed`, `object`, `video`, `audio`, `svg`) and `canvas`
66 |
67 | ## [3.0.1] - 2023-06-03
68 |
69 | ### Fixed
70 |
71 | - **reset:** replace `border: 0` with `border-width: 0` for compatibility with base styles
72 |
73 | ## [3.0.0] - 2023-06-03
74 |
75 | ### Added
76 |
77 | - **base:** set `box-sizing: border-box` on `*, ::before, ::after`
78 | - **base:** set `border-style: solid` and `border-width: 0` on on `*, ::before, ::after` to allow adding a border with just a `border-width`
79 | - **base:** set `tab-size: 2` on `html` to prevent overflow in code blocks
80 | - **base:** set `-webkit-text-size-adjust: 100%` on `html` to prevent erroneous text scaling in iOS Safari
81 | - **base:** set `margin: 0` on `body`
82 | - **base:** make `embed` and `object` elements responsive
83 |
84 | ### Changed
85 |
86 | - **base:** reorder styles for better maintainability
87 |
88 | ### Removed
89 |
90 | - **base:** redundant `height: auto` on `canvas`
91 | - **base:** strict enforcement of `display: none` when a `hidden` attribute is present
92 |
93 | ## [2.1.0] - 2023-06-03
94 |
95 | ### Added
96 |
97 | - **reset:** inherit `letter-spacing` and `word-spacing` on form controls
98 |
99 | ## [2.0.1] - 2023-05-27
100 |
101 | ### Changed
102 |
103 | - **reset:** apply `::placeholder` styles only on `input` and `textarea`
104 | - **reset:** reorder styles for better maintainability
105 |
106 | ## [2.0.0] - 2023-05-11
107 |
108 | ### Added
109 |
110 | - **reset:** nullify `padding`, `border` and `background` on form controls
111 | - **reset:** inherit `font` and `color` on form controls
112 | - **reset:** inherit `color` and `text-decoration` on links
113 | - **reset:** set `opacity: 1` and `color: gray` on `::placeholder` to make Firefox styles consistent
114 |
115 | ### Fixed
116 |
117 | - **base:** `hr` border width and style
118 |
119 | ### Changed
120 |
121 | - **base:** rename `opinionated-base.css` to `base.css`
122 | - **reset:** set `line-height: 1` on `html` instead of `body`
123 |
124 | ## [1.1.0] - 2020-08-20
125 |
126 | ### Added
127 |
128 | - **base:** vertical `writing-mode` support for changing the `resize` property of `textarea` elements
129 |
130 | ## [1.0.0] - 2020-08-18
131 |
132 | ### Added
133 |
134 | - **reset:** initial release
135 | - **base:** initial release
136 |
137 | [3.2.1]: https://github.com/kripod/css-homogenizer/compare/v3.2.0...v3.2.1
138 | [3.2.0]: https://github.com/kripod/css-homogenizer/compare/v3.1.0...v3.2.0
139 | [3.1.0]: https://github.com/kripod/css-homogenizer/compare/v3.0.2...v3.1.0
140 | [3.0.2]: https://github.com/kripod/css-homogenizer/compare/v3.0.1...v3.0.2
141 | [3.0.1]: https://github.com/kripod/css-homogenizer/compare/v3.0.0...v3.0.1
142 | [3.0.0]: https://github.com/kripod/css-homogenizer/compare/v2.1.0...v3.0.0
143 | [2.1.0]: https://github.com/kripod/css-homogenizer/compare/v2.0.1...v2.1.0
144 | [2.0.1]: https://github.com/kripod/css-homogenizer/compare/v2.0.0...v2.0.1
145 | [2.0.0]: https://github.com/kripod/css-homogenizer/compare/v1.1.0...v2.0.0
146 | [1.1.0]: https://github.com/kripod/css-homogenizer/compare/v1.0.0...v1.1.0
147 | [1.0.0]: https://github.com/kripod/css-homogenizer/releases/tag/v1.0.0
148 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | We as members, contributors, and leaders pledge to make participation in our
6 | community a harassment-free experience for everyone, regardless of age, body
7 | size, visible or invisible disability, ethnicity, sex characteristics, gender
8 | identity and expression, level of experience, education, socio-economic status,
9 | nationality, personal appearance, race, caste, color, religion, or sexual
10 | identity and orientation.
11 |
12 | We pledge to act and interact in ways that contribute to an open, welcoming,
13 | diverse, inclusive, and healthy community.
14 |
15 | ## Our Standards
16 |
17 | Examples of behavior that contributes to a positive environment for our
18 | community include:
19 |
20 | - Demonstrating empathy and kindness toward other people
21 | - Being respectful of differing opinions, viewpoints, and experiences
22 | - Giving and gracefully accepting constructive feedback
23 | - Accepting responsibility and apologizing to those affected by our mistakes,
24 | and learning from the experience
25 | - Focusing on what is best not just for us as individuals, but for the overall
26 | community
27 |
28 | Examples of unacceptable behavior include:
29 |
30 | - The use of sexualized language or imagery, and sexual attention or advances of
31 | any kind
32 | - Trolling, insulting or derogatory comments, and personal or political attacks
33 | - Public or private harassment
34 | - Publishing others' private information, such as a physical or email address,
35 | without their explicit permission
36 | - Other conduct which could reasonably be considered inappropriate in a
37 | professional setting
38 |
39 | ## Enforcement Responsibilities
40 |
41 | Community leaders are responsible for clarifying and enforcing our standards of
42 | acceptable behavior and will take appropriate and fair corrective action in
43 | response to any behavior that they deem inappropriate, threatening, offensive,
44 | or harmful.
45 |
46 | Community leaders have the right and responsibility to remove, edit, or reject
47 | comments, commits, code, wiki edits, issues, and other contributions that are
48 | not aligned to this Code of Conduct, and will communicate reasons for moderation
49 | decisions when appropriate.
50 |
51 | ## Scope
52 |
53 | This Code of Conduct applies within all community spaces, and also applies when
54 | an individual is officially representing the community in public spaces.
55 | Examples of representing our community include using an official email address,
56 | posting via an official social media account, or acting as an appointed
57 | representative at an online or offline event.
58 |
59 | ## Enforcement
60 |
61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
62 | reported to the community leaders responsible for enforcement at
63 | hi@kripod.dev.
64 | All complaints will be reviewed and investigated promptly and fairly.
65 |
66 | All community leaders are obligated to respect the privacy and security of the
67 | reporter of any incident.
68 |
69 | ## Enforcement Guidelines
70 |
71 | Community leaders will follow these Community Impact Guidelines in determining
72 | the consequences for any action they deem in violation of this Code of Conduct:
73 |
74 | ### 1. Correction
75 |
76 | **Community Impact**: Use of inappropriate language or other behavior deemed
77 | unprofessional or unwelcome in the community.
78 |
79 | **Consequence**: A private, written warning from community leaders, providing
80 | clarity around the nature of the violation and an explanation of why the
81 | behavior was inappropriate. A public apology may be requested.
82 |
83 | ### 2. Warning
84 |
85 | **Community Impact**: A violation through a single incident or series of
86 | actions.
87 |
88 | **Consequence**: A warning with consequences for continued behavior. No
89 | interaction with the people involved, including unsolicited interaction with
90 | those enforcing the Code of Conduct, for a specified period of time. This
91 | includes avoiding interactions in community spaces as well as external channels
92 | like social media. Violating these terms may lead to a temporary or permanent
93 | ban.
94 |
95 | ### 3. Temporary Ban
96 |
97 | **Community Impact**: A serious violation of community standards, including
98 | sustained inappropriate behavior.
99 |
100 | **Consequence**: A temporary ban from any sort of interaction or public
101 | communication with the community for a specified period of time. No public or
102 | private interaction with the people involved, including unsolicited interaction
103 | with those enforcing the Code of Conduct, is allowed during this period.
104 | Violating these terms may lead to a permanent ban.
105 |
106 | ### 4. Permanent Ban
107 |
108 | **Community Impact**: Demonstrating a pattern of violation of community
109 | standards, including sustained inappropriate behavior, harassment of an
110 | individual, or aggression toward or disparagement of classes of individuals.
111 |
112 | **Consequence**: A permanent ban from any sort of public interaction within the
113 | community.
114 |
115 | ## Attribution
116 |
117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118 | version 2.1, available at
119 | [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
120 |
121 | Community Impact Guidelines were inspired by
122 | [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
123 |
124 | For answers to common questions about this code of conduct, see the FAQ at
125 | [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
126 | [https://www.contributor-covenant.org/translations][translations].
127 |
128 | [homepage]: https://www.contributor-covenant.org
129 | [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
130 | [Mozilla CoC]: https://github.com/mozilla/diversity
131 | [FAQ]: https://www.contributor-covenant.org/faq
132 | [translations]: https://www.contributor-covenant.org/translations
133 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to css-homogenizer
2 |
3 | Thank you for taking the time to contribute! Guidelines below are meant to help you along the way. All contributions are welcome, including ideas, tweaks and more.
4 |
5 | ## Code of Conduct
6 |
7 | This project is governed by the [Contributor Covenant Code of Conduct](./CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code.
8 |
9 | ## Proposing a change
10 |
11 | Before making a non-trivial change, please discuss through [issues].
12 |
13 | ## Development process
14 |
15 | Keep the scope of each pull request to **one** specific feature or fix.
16 |
17 | ### Prequisites
18 |
19 | - [Node.js](https://nodejs.org/) – version specified in `.nvmrc`
20 | - [pnpm](https://pnpm.io/) – available via [Corepack](https://nodejs.org/api/corepack.html)
21 |
22 | ### Workflow
23 |
24 | 0. Assign related [issues] to yourself.
25 | 1. Clone a fork of the 'main' branch and install all the required dependencies via `pnpm install`.
26 | 2. Make changes to the codebase, running `pnpm prepare` to build them.
27 | 3. Open a new pull request, [referencing corresponding issues](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword) if available.
28 |
29 | ## License
30 |
31 | As a collaborator, you agree to license your contributions under the project's [MIT license](./LICENSE).
32 |
33 | [issues]: https://github.com/kripod/css-homogenizer/issues
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2020 Kristóf Poduszló
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 |
2 |
3 |
4 |
5 |
6 | Base CSS endorsing semantic HTML and design token usage
7 |
8 |
9 |
10 |
11 |
12 |
13 | ## Backstory
14 |
15 | Browsing through the issues of [CSS Remedy](https://github.com/jensimmons/cssremedy), I came across an important observation by Jen Simmons:
16 |
17 | > Why don’t people use `` far more — instead of divs in their forms?
18 | >
19 | > Perhaps it’s because fieldset comes with ugly default styling.
20 |
21 | This made me question common [HTML rendering suggestions](https://html.spec.whatwg.org/multipage/rendering.html). Each design is different, so **there isn’t a single set of sensible defaults** for every website.
22 |
23 | Style normalization is crucial for a consistent user experience among browsers. With the emergence of various design systems, however, **CSS normalizers and resets should coexist and complement each other.**
24 |
25 | Catering to the needs of token-based theming systems, this project was born.
26 |
27 | ## Usage
28 |
29 | 1. Install the library and a normalizer with your package manager (or use [a CDN](https://www.jsdelivr.com/package/npm/css-homogenizer)):
30 |
31 | ```sh
32 | npm install css-homogenizer modern-normalize
33 | ```
34 |
35 | _Using either [modern-normalize](https://github.com/sindresorhus/modern-normalize) or [@csstools/normalize.css](https://github.com/csstools/normalize.css) is optional but recommended to fix common browser inconsistencies._
36 |
37 | 2. Include the following styles **in the order below, before any custom CSS:**
38 |
39 | ```js
40 | import "modern-normalize/modern-normalize.css";
41 | import "css-homogenizer/reset.css"; // or "css-homogenizer/reset-scoped.css"
42 | import "css-homogenizer/base.css";
43 | ```
44 |
45 | You may adopt each stylesheet one by one.
46 |
47 | Please refer to your framework’s guidelines for importing CSS files at the top level. Plain ` ` tags may also be used, but be aware of the [performance costs](https://csswizardry.com/2018/11/css-and-network-performance/).
48 |
49 | ## What’s included?
50 |
51 | ### [`reset.css`](./reset.css)
52 |
53 | Nullifies spacings, borders and several typography-related settings.
54 |
55 | - Line heights are matched up with font sizes.
56 | - Heading (`h1`–`h6`), `th` and `address` elements inherit their font properties and text alignment from parents.
57 | - List (`ul`, `ol`, `menu`) and `a` elements are unstyled to promote proper HTML semantics over misleading visuals.
58 | - Form controls are unstyled to cater for overrides.
59 | - Placeholders have `opacity: 1` set for consistency between browsers.
60 | - Tables inherit their `border-color` for consistency between browsers.
61 |
62 | Obsolete and deprecated HTML elements are ignored, as their usage is strongly discouraged.
63 |
64 | ### [`reset-scoped.css`](./reset-scoped.css)
65 |
66 | A scoped variant of the reset, targeting classes instead of element types.
67 |
68 | - Classes are prefixed by `_` to avoid collisions with other selectors. E.g. `._p` contains declarations applicable to `p` elements.
69 | - Rules for `html` and `body` elements are omitted.
70 |
71 | #### Usage with React
72 |
73 | When using a compiler like Babel, the [underlying JSX runtime](https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html) may be overridden. This allows for auto-injecting scoped reset classes to plain HTML elements on the fly:
74 |
75 | - `Hi
` → `Hi
`
76 | - `Hi
` → `Hi
`
77 |
78 | ```jsonc
79 | // babel.config.json
80 | {
81 | "presets": [
82 | [
83 | "@babel/preset-react",
84 | {
85 | "runtime": "automatic",
86 | "importSource": "css-homogenizer/reset-scoped/react",
87 | },
88 | ],
89 | ],
90 | }
91 | ```
92 |
93 | #### Usage manually
94 |
95 | You may attach a scoped reset class to an element on your own, e.g.:
96 |
97 | ```html
98 | Hi
99 | ```
100 |
101 | To see all the classes available, execute the following snippet:
102 |
103 | ```js
104 | import { getResetClassName, resetElements } from "css-homogenizer/reset-scoped";
105 |
106 | console.log(resetElements.map((element) => getResetClassName(element)));
107 | ```
108 |
109 | Helper methods also come in handy when dealing with third-party libraries, e.g.:
110 |
111 | ```jsx
112 | import { Listbox } from "@headlessui/react";
113 | import { getResetClassName } from "css-homogenizer/reset-scoped";
114 |
115 | function Select(/* … */) {
116 | return (
117 |
118 |
119 | {/* … */}
120 |
121 | {/* … */}
122 |
123 | );
124 | }
125 | ```
126 |
127 | ### [`base.css`](./base.css)
128 |
129 | Provides a minimalistic set of generally useful rules. Please refer to the file’s inline comments for further details.
130 |
131 | ## Browser support
132 |
133 | - Latest Chrome
134 | - Latest Firefox
135 | - Latest Safari
136 |
137 | ## Acknowledgments
138 |
139 | This project was mainly inspired by [Reset CSS](https://meyerweb.com/eric/tools/css/reset/), [CSS Remedy](https://github.com/jensimmons/cssremedy) and [sanitize.css](https://github.com/csstools/sanitize.css). It wouldn’t have been possible without the long-standing efforts of the authors behind those predecessors.
140 |
141 | The logo’s test tube emoji is courtesy of [Twemoji](https://twemoji.twitter.com/) and the font in use is [Lobster](https://fonts.google.com/specimen/Lobster).
142 |
--------------------------------------------------------------------------------
/assets/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/base.css:
--------------------------------------------------------------------------------
1 | *,
2 | ::before,
3 | ::after {
4 | /* Prevent padding and border from affecting element width */
5 | /* https://github.com/jensimmons/cssremedy/issues/4 */
6 | box-sizing: border-box;
7 |
8 | /* Allow adding a border with just a border-width */
9 | /* https://github.com/tailwindlabs/tailwindcss/pull/116 */
10 | border-width: 0;
11 | border-style: solid;
12 | }
13 |
14 | html {
15 | /* Prevent overflow in code blocks */
16 | tab-size: 2;
17 |
18 | /* Prevent overflow caused by long words if all other methods fail */
19 | overflow-wrap: break-word;
20 |
21 | /* Prevent erroneous text scaling in iOS Safari */
22 | /* https://kilianvalkhof.com/2022/css-html/your-css-reset-needs-text-size-adjust-probably/ */
23 | -webkit-text-size-adjust: 100%;
24 | }
25 |
26 | body {
27 | /* Remove space around edges */
28 | margin: 0;
29 | }
30 |
31 | hr {
32 | /* Ensure visibility */
33 | border-top-width: 1px;
34 | }
35 |
36 | pre {
37 | /* Prevent overflow */
38 | white-space: pre-wrap;
39 | }
40 |
41 | u {
42 | /* Valid use cases are usually indicated by a wavy underline */
43 | /* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/u#usage_notes */
44 | text-decoration-style: wavy;
45 | }
46 |
47 | /* https://github.com/jensimmons/cssremedy/issues/14 */
48 | img,
49 | iframe,
50 | embed,
51 | object,
52 | video,
53 | audio,
54 | svg,
55 | canvas {
56 | /* Block display is usually what we want */
57 | display: block;
58 |
59 | /* Prevent overflow */
60 | max-width: 100%;
61 |
62 | /* Remove strange space-below when inline */
63 | vertical-align: middle;
64 | }
65 |
66 | /* https://github.com/jensimmons/cssremedy/issues/14 */
67 | img,
68 | video,
69 | svg {
70 | /* Preserve aspect ratio when the height attribute is set */
71 | height: auto;
72 | }
73 |
74 | audio {
75 | /* Fill available space instead of using a fixed width */
76 | width: 100%;
77 | }
78 |
79 | /* https://github.com/jensimmons/cssremedy/issues/39 */
80 | table {
81 | /* Prevent double borders */
82 | border-collapse: collapse;
83 |
84 | /* Use equal-width numerals */
85 | font-variant-numeric: tabular-nums;
86 | }
87 |
88 | textarea {
89 | /* Constrain resizing to the block direction */
90 | resize: vertical;
91 | resize: block;
92 | }
93 |
94 | [hidden]:not([hidden="until-found"]),
95 | audio:not([controls]) {
96 | /* Prioritize default behavior over custom styles above */
97 | display: none;
98 | }
99 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "css-homogenizer",
3 | "version": "4.1.3",
4 | "description": "Base CSS endorsing semantic HTML and design token usage",
5 | "keywords": [
6 | "css",
7 | "reset",
8 | "base",
9 | "normalize"
10 | ],
11 | "homepage": "https://github.com/kripod/css-homogenizer#readme",
12 | "bugs": "https://github.com/kripod/css-homogenizer/issues",
13 | "repository": "kripod/css-homogenizer",
14 | "license": "MIT",
15 | "author": "Kristóf Poduszló (https://www.kripod.dev/)",
16 | "sideEffects": [
17 | "*.css"
18 | ],
19 | "type": "module",
20 | "exports": {
21 | "./base.css": "./base.css",
22 | "./reset.css": "./reset.css",
23 | "./reset-scoped.css": "./reset-scoped.css",
24 | "./reset-scoped": {
25 | "import": {
26 | "types": "./dist/esm/reset-scoped/index.d.ts",
27 | "default": "./dist/esm/reset-scoped/index.js"
28 | },
29 | "require": {
30 | "types": "./dist/commonjs/reset-scoped/index.d.ts",
31 | "default": "./dist/commonjs/reset-scoped/index.js"
32 | }
33 | },
34 | "./reset-scoped/react": {
35 | "import": {
36 | "types": "./dist/esm/reset-scoped/react/index.d.ts",
37 | "default": "./dist/esm/reset-scoped/react/index.js"
38 | },
39 | "require": {
40 | "types": "./dist/commonjs/reset-scoped/react/index.d.ts",
41 | "default": "./dist/commonjs/reset-scoped/react/index.js"
42 | }
43 | },
44 | "./reset-scoped/react/jsx-runtime": {
45 | "import": {
46 | "types": "./dist/esm/reset-scoped/react/jsx-runtime.d.ts",
47 | "default": "./dist/esm/reset-scoped/react/jsx-runtime.js"
48 | },
49 | "require": {
50 | "types": "./dist/commonjs/reset-scoped/react/jsx-runtime.d.ts",
51 | "default": "./dist/commonjs/reset-scoped/react/jsx-runtime.js"
52 | }
53 | },
54 | "./reset-scoped/react/jsx-dev-runtime": {
55 | "import": {
56 | "types": "./dist/esm/reset-scoped/react/jsx-dev-runtime.d.ts",
57 | "default": "./dist/esm/reset-scoped/react/jsx-dev-runtime.js"
58 | },
59 | "require": {
60 | "types": "./dist/commonjs/reset-scoped/react/jsx-dev-runtime.d.ts",
61 | "default": "./dist/commonjs/reset-scoped/react/jsx-dev-runtime.js"
62 | }
63 | }
64 | },
65 | "files": [
66 | "base.css",
67 | "reset.css",
68 | "reset-scoped.css",
69 | "dist/"
70 | ],
71 | "scripts": {
72 | "prepare": "tshy",
73 | "clean": "git clean --interactive -dx --exclude node_modules/",
74 | "lint": "pnpm run \"/^lint:(?!fix)/\"",
75 | "lint:format": "prettier --check .",
76 | "lint:types": "tsc --noEmit",
77 | "lint:fix": "pnpm run \"/^lint:fix:/\"",
78 | "lint:fix:format": "prettier --write ."
79 | },
80 | "devDependencies": {
81 | "@changesets/changelog-github": "0.5.0",
82 | "@changesets/cli": "2.27.9",
83 | "@total-typescript/tsconfig": "1.0.4",
84 | "@types/react": "18.3.12",
85 | "prettier": "3.3.3",
86 | "react": "18.3.1",
87 | "tshy": "3.0.2",
88 | "typescript": "5.6.3"
89 | },
90 | "peerDependencies": {
91 | "react": "^0.14.10 || ^15.7.0 || ^16.14.0 || >=17"
92 | },
93 | "peerDependenciesMeta": {
94 | "react": {
95 | "optional": true
96 | }
97 | },
98 | "packageManager": "pnpm@9.12.2",
99 | "tshy": {
100 | "exports": {
101 | "./base.css": "./base.css",
102 | "./reset.css": "./reset.css",
103 | "./reset-scoped.css": "./reset-scoped.css",
104 | "./reset-scoped": "./src/reset-scoped/index.ts",
105 | "./reset-scoped/react": "./src/reset-scoped/react/index.ts",
106 | "./reset-scoped/react/jsx-runtime": "./src/reset-scoped/react/jsx-runtime.ts",
107 | "./reset-scoped/react/jsx-dev-runtime": "./src/reset-scoped/react/jsx-dev-runtime.ts"
108 | }
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | devDependencies:
11 | '@changesets/changelog-github':
12 | specifier: 0.5.0
13 | version: 0.5.0
14 | '@changesets/cli':
15 | specifier: 2.27.9
16 | version: 2.27.9
17 | '@total-typescript/tsconfig':
18 | specifier: 1.0.4
19 | version: 1.0.4
20 | '@types/react':
21 | specifier: 18.3.12
22 | version: 18.3.12
23 | prettier:
24 | specifier: 3.3.3
25 | version: 3.3.3
26 | react:
27 | specifier: 18.3.1
28 | version: 18.3.1
29 | tshy:
30 | specifier: 3.0.2
31 | version: 3.0.2
32 | typescript:
33 | specifier: 5.6.3
34 | version: 5.6.3
35 |
36 | packages:
37 |
38 | '@babel/runtime@7.26.0':
39 | resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==}
40 | engines: {node: '>=6.9.0'}
41 |
42 | '@changesets/apply-release-plan@7.0.5':
43 | resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==}
44 |
45 | '@changesets/assemble-release-plan@6.0.4':
46 | resolution: {integrity: sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==}
47 |
48 | '@changesets/changelog-git@0.2.0':
49 | resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==}
50 |
51 | '@changesets/changelog-github@0.5.0':
52 | resolution: {integrity: sha512-zoeq2LJJVcPJcIotHRJEEA2qCqX0AQIeFE+L21L8sRLPVqDhSXY8ZWAt2sohtBpFZkBwu+LUwMSKRr2lMy3LJA==}
53 |
54 | '@changesets/cli@2.27.9':
55 | resolution: {integrity: sha512-q42a/ZbDnxPpCb5Wkm6tMVIxgeI9C/bexntzTeCFBrQEdpisQqk8kCHllYZMDjYtEc1ZzumbMJAG8H0Z4rdvjg==}
56 | hasBin: true
57 |
58 | '@changesets/config@3.0.3':
59 | resolution: {integrity: sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==}
60 |
61 | '@changesets/errors@0.2.0':
62 | resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==}
63 |
64 | '@changesets/get-dependents-graph@2.1.2':
65 | resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==}
66 |
67 | '@changesets/get-github-info@0.6.0':
68 | resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==}
69 |
70 | '@changesets/get-release-plan@4.0.4':
71 | resolution: {integrity: sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==}
72 |
73 | '@changesets/get-version-range-type@0.4.0':
74 | resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==}
75 |
76 | '@changesets/git@3.0.1':
77 | resolution: {integrity: sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==}
78 |
79 | '@changesets/logger@0.1.1':
80 | resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==}
81 |
82 | '@changesets/parse@0.4.0':
83 | resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==}
84 |
85 | '@changesets/pre@2.0.1':
86 | resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==}
87 |
88 | '@changesets/read@0.6.1':
89 | resolution: {integrity: sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==}
90 |
91 | '@changesets/should-skip-package@0.1.1':
92 | resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==}
93 |
94 | '@changesets/types@4.1.0':
95 | resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==}
96 |
97 | '@changesets/types@6.0.0':
98 | resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==}
99 |
100 | '@changesets/write@0.3.2':
101 | resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==}
102 |
103 | '@isaacs/cliui@8.0.2':
104 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
105 | engines: {node: '>=12'}
106 |
107 | '@manypkg/find-root@1.1.0':
108 | resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
109 |
110 | '@manypkg/get-packages@1.1.3':
111 | resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==}
112 |
113 | '@nodelib/fs.scandir@2.1.5':
114 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
115 | engines: {node: '>= 8'}
116 |
117 | '@nodelib/fs.stat@2.0.5':
118 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
119 | engines: {node: '>= 8'}
120 |
121 | '@nodelib/fs.walk@1.2.8':
122 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
123 | engines: {node: '>= 8'}
124 |
125 | '@total-typescript/tsconfig@1.0.4':
126 | resolution: {integrity: sha512-fO4ctMPGz1kOFOQ4RCPBRBfMy3gDn+pegUfrGyUFRMv/Rd0ZM3/SHH3hFCYG4u6bPLG8OlmOGcBLDexvyr3A5w==}
127 |
128 | '@types/node@12.20.55':
129 | resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
130 |
131 | '@types/prop-types@15.7.13':
132 | resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==}
133 |
134 | '@types/react@18.3.12':
135 | resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==}
136 |
137 | ansi-colors@4.1.3:
138 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
139 | engines: {node: '>=6'}
140 |
141 | ansi-regex@5.0.1:
142 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
143 | engines: {node: '>=8'}
144 |
145 | ansi-regex@6.1.0:
146 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
147 | engines: {node: '>=12'}
148 |
149 | ansi-styles@4.3.0:
150 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
151 | engines: {node: '>=8'}
152 |
153 | ansi-styles@6.2.1:
154 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
155 | engines: {node: '>=12'}
156 |
157 | anymatch@3.1.3:
158 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
159 | engines: {node: '>= 8'}
160 |
161 | argparse@1.0.10:
162 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
163 |
164 | array-union@2.1.0:
165 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
166 | engines: {node: '>=8'}
167 |
168 | balanced-match@1.0.2:
169 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
170 |
171 | better-path-resolve@1.0.0:
172 | resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
173 | engines: {node: '>=4'}
174 |
175 | binary-extensions@2.3.0:
176 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
177 | engines: {node: '>=8'}
178 |
179 | brace-expansion@2.0.1:
180 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
181 |
182 | braces@3.0.3:
183 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
184 | engines: {node: '>=8'}
185 |
186 | chalk@5.3.0:
187 | resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
188 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
189 |
190 | chardet@0.7.0:
191 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
192 |
193 | chokidar@3.6.0:
194 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
195 | engines: {node: '>= 8.10.0'}
196 |
197 | ci-info@3.9.0:
198 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
199 | engines: {node: '>=8'}
200 |
201 | color-convert@2.0.1:
202 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
203 | engines: {node: '>=7.0.0'}
204 |
205 | color-name@1.1.4:
206 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
207 |
208 | cross-spawn@5.1.0:
209 | resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}
210 |
211 | cross-spawn@7.0.3:
212 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
213 | engines: {node: '>= 8'}
214 |
215 | csstype@3.1.3:
216 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
217 |
218 | dataloader@1.4.0:
219 | resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==}
220 |
221 | detect-indent@6.1.0:
222 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
223 | engines: {node: '>=8'}
224 |
225 | dir-glob@3.0.1:
226 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
227 | engines: {node: '>=8'}
228 |
229 | dotenv@8.6.0:
230 | resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==}
231 | engines: {node: '>=10'}
232 |
233 | eastasianwidth@0.2.0:
234 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
235 |
236 | emoji-regex@8.0.0:
237 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
238 |
239 | emoji-regex@9.2.2:
240 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
241 |
242 | enquirer@2.4.1:
243 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
244 | engines: {node: '>=8.6'}
245 |
246 | esprima@4.0.1:
247 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
248 | engines: {node: '>=4'}
249 | hasBin: true
250 |
251 | extendable-error@0.1.7:
252 | resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
253 |
254 | external-editor@3.1.0:
255 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
256 | engines: {node: '>=4'}
257 |
258 | fast-glob@3.3.2:
259 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
260 | engines: {node: '>=8.6.0'}
261 |
262 | fastq@1.17.1:
263 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
264 |
265 | fill-range@7.1.1:
266 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
267 | engines: {node: '>=8'}
268 |
269 | find-up@4.1.0:
270 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
271 | engines: {node: '>=8'}
272 |
273 | foreground-child@3.3.0:
274 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
275 | engines: {node: '>=14'}
276 |
277 | fs-extra@7.0.1:
278 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
279 | engines: {node: '>=6 <7 || >=8'}
280 |
281 | fs-extra@8.1.0:
282 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
283 | engines: {node: '>=6 <7 || >=8'}
284 |
285 | fsevents@2.3.3:
286 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
287 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
288 | os: [darwin]
289 |
290 | glob-parent@5.1.2:
291 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
292 | engines: {node: '>= 6'}
293 |
294 | glob@11.0.0:
295 | resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==}
296 | engines: {node: 20 || >=22}
297 | hasBin: true
298 |
299 | globby@11.1.0:
300 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
301 | engines: {node: '>=10'}
302 |
303 | graceful-fs@4.2.11:
304 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
305 |
306 | human-id@1.0.2:
307 | resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==}
308 |
309 | iconv-lite@0.4.24:
310 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
311 | engines: {node: '>=0.10.0'}
312 |
313 | ignore@5.3.2:
314 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
315 | engines: {node: '>= 4'}
316 |
317 | is-binary-path@2.1.0:
318 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
319 | engines: {node: '>=8'}
320 |
321 | is-extglob@2.1.1:
322 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
323 | engines: {node: '>=0.10.0'}
324 |
325 | is-fullwidth-code-point@3.0.0:
326 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
327 | engines: {node: '>=8'}
328 |
329 | is-glob@4.0.3:
330 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
331 | engines: {node: '>=0.10.0'}
332 |
333 | is-number@7.0.0:
334 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
335 | engines: {node: '>=0.12.0'}
336 |
337 | is-subdir@1.2.0:
338 | resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==}
339 | engines: {node: '>=4'}
340 |
341 | is-windows@1.0.2:
342 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
343 | engines: {node: '>=0.10.0'}
344 |
345 | isexe@2.0.0:
346 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
347 |
348 | jackspeak@4.0.2:
349 | resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==}
350 | engines: {node: 20 || >=22}
351 |
352 | js-tokens@4.0.0:
353 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
354 |
355 | js-yaml@3.14.1:
356 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
357 | hasBin: true
358 |
359 | jsonfile@4.0.0:
360 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
361 |
362 | locate-path@5.0.0:
363 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
364 | engines: {node: '>=8'}
365 |
366 | lodash.startcase@4.4.0:
367 | resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
368 |
369 | loose-envify@1.4.0:
370 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
371 | hasBin: true
372 |
373 | lru-cache@11.0.1:
374 | resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==}
375 | engines: {node: 20 || >=22}
376 |
377 | lru-cache@4.1.5:
378 | resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
379 |
380 | merge2@1.4.1:
381 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
382 | engines: {node: '>= 8'}
383 |
384 | micromatch@4.0.8:
385 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
386 | engines: {node: '>=8.6'}
387 |
388 | minimatch@10.0.1:
389 | resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
390 | engines: {node: 20 || >=22}
391 |
392 | minipass@7.1.2:
393 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
394 | engines: {node: '>=16 || 14 >=14.17'}
395 |
396 | mkdirp@3.0.1:
397 | resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
398 | engines: {node: '>=10'}
399 | hasBin: true
400 |
401 | mri@1.2.0:
402 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
403 | engines: {node: '>=4'}
404 |
405 | node-fetch@2.7.0:
406 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
407 | engines: {node: 4.x || >=6.0.0}
408 | peerDependencies:
409 | encoding: ^0.1.0
410 | peerDependenciesMeta:
411 | encoding:
412 | optional: true
413 |
414 | normalize-path@3.0.0:
415 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
416 | engines: {node: '>=0.10.0'}
417 |
418 | os-tmpdir@1.0.2:
419 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
420 | engines: {node: '>=0.10.0'}
421 |
422 | outdent@0.5.0:
423 | resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==}
424 |
425 | p-filter@2.1.0:
426 | resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==}
427 | engines: {node: '>=8'}
428 |
429 | p-limit@2.3.0:
430 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
431 | engines: {node: '>=6'}
432 |
433 | p-locate@4.1.0:
434 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
435 | engines: {node: '>=8'}
436 |
437 | p-map@2.1.0:
438 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
439 | engines: {node: '>=6'}
440 |
441 | p-try@2.2.0:
442 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
443 | engines: {node: '>=6'}
444 |
445 | package-json-from-dist@1.0.1:
446 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
447 |
448 | package-manager-detector@0.2.2:
449 | resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==}
450 |
451 | path-exists@4.0.0:
452 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
453 | engines: {node: '>=8'}
454 |
455 | path-key@3.1.1:
456 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
457 | engines: {node: '>=8'}
458 |
459 | path-scurry@2.0.0:
460 | resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
461 | engines: {node: 20 || >=22}
462 |
463 | path-type@4.0.0:
464 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
465 | engines: {node: '>=8'}
466 |
467 | picocolors@1.1.1:
468 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
469 |
470 | picomatch@2.3.1:
471 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
472 | engines: {node: '>=8.6'}
473 |
474 | pify@4.0.1:
475 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
476 | engines: {node: '>=6'}
477 |
478 | polite-json@5.0.0:
479 | resolution: {integrity: sha512-OLS/0XeUAcE8a2fdwemNja+udKgXNnY6yKVIXqAD2zVRx1KvY6Ato/rZ2vdzbxqYwPW0u6SCNC/bAMPNzpzxbw==}
480 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
481 |
482 | prettier@2.8.8:
483 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
484 | engines: {node: '>=10.13.0'}
485 | hasBin: true
486 |
487 | prettier@3.3.3:
488 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
489 | engines: {node: '>=14'}
490 | hasBin: true
491 |
492 | pseudomap@1.0.2:
493 | resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
494 |
495 | queue-microtask@1.2.3:
496 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
497 |
498 | react@18.3.1:
499 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
500 | engines: {node: '>=0.10.0'}
501 |
502 | read-yaml-file@1.1.0:
503 | resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==}
504 | engines: {node: '>=6'}
505 |
506 | readdirp@3.6.0:
507 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
508 | engines: {node: '>=8.10.0'}
509 |
510 | regenerator-runtime@0.14.1:
511 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
512 |
513 | resolve-from@5.0.0:
514 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
515 | engines: {node: '>=8'}
516 |
517 | resolve-import@2.0.0:
518 | resolution: {integrity: sha512-jpKjLibLuc8D1XEV2+7zb0aqN7I8d12u89g/v6IsgCzdVlccMQJq4TKkPw5fbhHdxhm7nbVtN+KvOTnjFf+nEA==}
519 | engines: {node: 20 || >=22}
520 |
521 | reusify@1.0.4:
522 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
523 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
524 |
525 | rimraf@6.0.1:
526 | resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
527 | engines: {node: 20 || >=22}
528 | hasBin: true
529 |
530 | run-parallel@1.2.0:
531 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
532 |
533 | safer-buffer@2.1.2:
534 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
535 |
536 | semver@7.6.3:
537 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
538 | engines: {node: '>=10'}
539 | hasBin: true
540 |
541 | shebang-command@1.2.0:
542 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
543 | engines: {node: '>=0.10.0'}
544 |
545 | shebang-command@2.0.0:
546 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
547 | engines: {node: '>=8'}
548 |
549 | shebang-regex@1.0.0:
550 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
551 | engines: {node: '>=0.10.0'}
552 |
553 | shebang-regex@3.0.0:
554 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
555 | engines: {node: '>=8'}
556 |
557 | signal-exit@3.0.7:
558 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
559 |
560 | signal-exit@4.1.0:
561 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
562 | engines: {node: '>=14'}
563 |
564 | slash@3.0.0:
565 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
566 | engines: {node: '>=8'}
567 |
568 | spawndamnit@2.0.0:
569 | resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==}
570 |
571 | sprintf-js@1.0.3:
572 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
573 |
574 | string-width@4.2.3:
575 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
576 | engines: {node: '>=8'}
577 |
578 | string-width@5.1.2:
579 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
580 | engines: {node: '>=12'}
581 |
582 | strip-ansi@6.0.1:
583 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
584 | engines: {node: '>=8'}
585 |
586 | strip-ansi@7.1.0:
587 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
588 | engines: {node: '>=12'}
589 |
590 | strip-bom@3.0.0:
591 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
592 | engines: {node: '>=4'}
593 |
594 | sync-content@2.0.1:
595 | resolution: {integrity: sha512-NI1mo514yFhr8pV/5Etvgh+pSBUIpoAKoiBIUwALVlQQNAwb40bTw8hhPFaip/dvv0GhpHVOq0vq8iY02ppLTg==}
596 | engines: {node: 20 || >=22}
597 | hasBin: true
598 |
599 | term-size@2.2.1:
600 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
601 | engines: {node: '>=8'}
602 |
603 | tmp@0.0.33:
604 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
605 | engines: {node: '>=0.6.0'}
606 |
607 | to-regex-range@5.0.1:
608 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
609 | engines: {node: '>=8.0'}
610 |
611 | tr46@0.0.3:
612 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
613 |
614 | tshy@3.0.2:
615 | resolution: {integrity: sha512-8GkWnAfmNXxl8iDTZ1o2H4jdaj9H7HeDKkr5qd0ZhQBCNA41D3xqTyg2Ycs51VCfmjJ5e+0v9AUmD6ylAI9Bgw==}
616 | engines: {node: 20 || >=22}
617 | hasBin: true
618 |
619 | typescript@5.6.3:
620 | resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
621 | engines: {node: '>=14.17'}
622 | hasBin: true
623 |
624 | universalify@0.1.2:
625 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
626 | engines: {node: '>= 4.0.0'}
627 |
628 | walk-up-path@4.0.0:
629 | resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==}
630 | engines: {node: 20 || >=22}
631 |
632 | webidl-conversions@3.0.1:
633 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
634 |
635 | whatwg-url@5.0.0:
636 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
637 |
638 | which@1.3.1:
639 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
640 | hasBin: true
641 |
642 | which@2.0.2:
643 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
644 | engines: {node: '>= 8'}
645 | hasBin: true
646 |
647 | wrap-ansi@7.0.0:
648 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
649 | engines: {node: '>=10'}
650 |
651 | wrap-ansi@8.1.0:
652 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
653 | engines: {node: '>=12'}
654 |
655 | yallist@2.1.2:
656 | resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
657 |
658 | snapshots:
659 |
660 | '@babel/runtime@7.26.0':
661 | dependencies:
662 | regenerator-runtime: 0.14.1
663 |
664 | '@changesets/apply-release-plan@7.0.5':
665 | dependencies:
666 | '@changesets/config': 3.0.3
667 | '@changesets/get-version-range-type': 0.4.0
668 | '@changesets/git': 3.0.1
669 | '@changesets/should-skip-package': 0.1.1
670 | '@changesets/types': 6.0.0
671 | '@manypkg/get-packages': 1.1.3
672 | detect-indent: 6.1.0
673 | fs-extra: 7.0.1
674 | lodash.startcase: 4.4.0
675 | outdent: 0.5.0
676 | prettier: 2.8.8
677 | resolve-from: 5.0.0
678 | semver: 7.6.3
679 |
680 | '@changesets/assemble-release-plan@6.0.4':
681 | dependencies:
682 | '@changesets/errors': 0.2.0
683 | '@changesets/get-dependents-graph': 2.1.2
684 | '@changesets/should-skip-package': 0.1.1
685 | '@changesets/types': 6.0.0
686 | '@manypkg/get-packages': 1.1.3
687 | semver: 7.6.3
688 |
689 | '@changesets/changelog-git@0.2.0':
690 | dependencies:
691 | '@changesets/types': 6.0.0
692 |
693 | '@changesets/changelog-github@0.5.0':
694 | dependencies:
695 | '@changesets/get-github-info': 0.6.0
696 | '@changesets/types': 6.0.0
697 | dotenv: 8.6.0
698 | transitivePeerDependencies:
699 | - encoding
700 |
701 | '@changesets/cli@2.27.9':
702 | dependencies:
703 | '@changesets/apply-release-plan': 7.0.5
704 | '@changesets/assemble-release-plan': 6.0.4
705 | '@changesets/changelog-git': 0.2.0
706 | '@changesets/config': 3.0.3
707 | '@changesets/errors': 0.2.0
708 | '@changesets/get-dependents-graph': 2.1.2
709 | '@changesets/get-release-plan': 4.0.4
710 | '@changesets/git': 3.0.1
711 | '@changesets/logger': 0.1.1
712 | '@changesets/pre': 2.0.1
713 | '@changesets/read': 0.6.1
714 | '@changesets/should-skip-package': 0.1.1
715 | '@changesets/types': 6.0.0
716 | '@changesets/write': 0.3.2
717 | '@manypkg/get-packages': 1.1.3
718 | ansi-colors: 4.1.3
719 | ci-info: 3.9.0
720 | enquirer: 2.4.1
721 | external-editor: 3.1.0
722 | fs-extra: 7.0.1
723 | mri: 1.2.0
724 | p-limit: 2.3.0
725 | package-manager-detector: 0.2.2
726 | picocolors: 1.1.1
727 | resolve-from: 5.0.0
728 | semver: 7.6.3
729 | spawndamnit: 2.0.0
730 | term-size: 2.2.1
731 |
732 | '@changesets/config@3.0.3':
733 | dependencies:
734 | '@changesets/errors': 0.2.0
735 | '@changesets/get-dependents-graph': 2.1.2
736 | '@changesets/logger': 0.1.1
737 | '@changesets/types': 6.0.0
738 | '@manypkg/get-packages': 1.1.3
739 | fs-extra: 7.0.1
740 | micromatch: 4.0.8
741 |
742 | '@changesets/errors@0.2.0':
743 | dependencies:
744 | extendable-error: 0.1.7
745 |
746 | '@changesets/get-dependents-graph@2.1.2':
747 | dependencies:
748 | '@changesets/types': 6.0.0
749 | '@manypkg/get-packages': 1.1.3
750 | picocolors: 1.1.1
751 | semver: 7.6.3
752 |
753 | '@changesets/get-github-info@0.6.0':
754 | dependencies:
755 | dataloader: 1.4.0
756 | node-fetch: 2.7.0
757 | transitivePeerDependencies:
758 | - encoding
759 |
760 | '@changesets/get-release-plan@4.0.4':
761 | dependencies:
762 | '@changesets/assemble-release-plan': 6.0.4
763 | '@changesets/config': 3.0.3
764 | '@changesets/pre': 2.0.1
765 | '@changesets/read': 0.6.1
766 | '@changesets/types': 6.0.0
767 | '@manypkg/get-packages': 1.1.3
768 |
769 | '@changesets/get-version-range-type@0.4.0': {}
770 |
771 | '@changesets/git@3.0.1':
772 | dependencies:
773 | '@changesets/errors': 0.2.0
774 | '@manypkg/get-packages': 1.1.3
775 | is-subdir: 1.2.0
776 | micromatch: 4.0.8
777 | spawndamnit: 2.0.0
778 |
779 | '@changesets/logger@0.1.1':
780 | dependencies:
781 | picocolors: 1.1.1
782 |
783 | '@changesets/parse@0.4.0':
784 | dependencies:
785 | '@changesets/types': 6.0.0
786 | js-yaml: 3.14.1
787 |
788 | '@changesets/pre@2.0.1':
789 | dependencies:
790 | '@changesets/errors': 0.2.0
791 | '@changesets/types': 6.0.0
792 | '@manypkg/get-packages': 1.1.3
793 | fs-extra: 7.0.1
794 |
795 | '@changesets/read@0.6.1':
796 | dependencies:
797 | '@changesets/git': 3.0.1
798 | '@changesets/logger': 0.1.1
799 | '@changesets/parse': 0.4.0
800 | '@changesets/types': 6.0.0
801 | fs-extra: 7.0.1
802 | p-filter: 2.1.0
803 | picocolors: 1.1.1
804 |
805 | '@changesets/should-skip-package@0.1.1':
806 | dependencies:
807 | '@changesets/types': 6.0.0
808 | '@manypkg/get-packages': 1.1.3
809 |
810 | '@changesets/types@4.1.0': {}
811 |
812 | '@changesets/types@6.0.0': {}
813 |
814 | '@changesets/write@0.3.2':
815 | dependencies:
816 | '@changesets/types': 6.0.0
817 | fs-extra: 7.0.1
818 | human-id: 1.0.2
819 | prettier: 2.8.8
820 |
821 | '@isaacs/cliui@8.0.2':
822 | dependencies:
823 | string-width: 5.1.2
824 | string-width-cjs: string-width@4.2.3
825 | strip-ansi: 7.1.0
826 | strip-ansi-cjs: strip-ansi@6.0.1
827 | wrap-ansi: 8.1.0
828 | wrap-ansi-cjs: wrap-ansi@7.0.0
829 |
830 | '@manypkg/find-root@1.1.0':
831 | dependencies:
832 | '@babel/runtime': 7.26.0
833 | '@types/node': 12.20.55
834 | find-up: 4.1.0
835 | fs-extra: 8.1.0
836 |
837 | '@manypkg/get-packages@1.1.3':
838 | dependencies:
839 | '@babel/runtime': 7.26.0
840 | '@changesets/types': 4.1.0
841 | '@manypkg/find-root': 1.1.0
842 | fs-extra: 8.1.0
843 | globby: 11.1.0
844 | read-yaml-file: 1.1.0
845 |
846 | '@nodelib/fs.scandir@2.1.5':
847 | dependencies:
848 | '@nodelib/fs.stat': 2.0.5
849 | run-parallel: 1.2.0
850 |
851 | '@nodelib/fs.stat@2.0.5': {}
852 |
853 | '@nodelib/fs.walk@1.2.8':
854 | dependencies:
855 | '@nodelib/fs.scandir': 2.1.5
856 | fastq: 1.17.1
857 |
858 | '@total-typescript/tsconfig@1.0.4': {}
859 |
860 | '@types/node@12.20.55': {}
861 |
862 | '@types/prop-types@15.7.13': {}
863 |
864 | '@types/react@18.3.12':
865 | dependencies:
866 | '@types/prop-types': 15.7.13
867 | csstype: 3.1.3
868 |
869 | ansi-colors@4.1.3: {}
870 |
871 | ansi-regex@5.0.1: {}
872 |
873 | ansi-regex@6.1.0: {}
874 |
875 | ansi-styles@4.3.0:
876 | dependencies:
877 | color-convert: 2.0.1
878 |
879 | ansi-styles@6.2.1: {}
880 |
881 | anymatch@3.1.3:
882 | dependencies:
883 | normalize-path: 3.0.0
884 | picomatch: 2.3.1
885 |
886 | argparse@1.0.10:
887 | dependencies:
888 | sprintf-js: 1.0.3
889 |
890 | array-union@2.1.0: {}
891 |
892 | balanced-match@1.0.2: {}
893 |
894 | better-path-resolve@1.0.0:
895 | dependencies:
896 | is-windows: 1.0.2
897 |
898 | binary-extensions@2.3.0: {}
899 |
900 | brace-expansion@2.0.1:
901 | dependencies:
902 | balanced-match: 1.0.2
903 |
904 | braces@3.0.3:
905 | dependencies:
906 | fill-range: 7.1.1
907 |
908 | chalk@5.3.0: {}
909 |
910 | chardet@0.7.0: {}
911 |
912 | chokidar@3.6.0:
913 | dependencies:
914 | anymatch: 3.1.3
915 | braces: 3.0.3
916 | glob-parent: 5.1.2
917 | is-binary-path: 2.1.0
918 | is-glob: 4.0.3
919 | normalize-path: 3.0.0
920 | readdirp: 3.6.0
921 | optionalDependencies:
922 | fsevents: 2.3.3
923 |
924 | ci-info@3.9.0: {}
925 |
926 | color-convert@2.0.1:
927 | dependencies:
928 | color-name: 1.1.4
929 |
930 | color-name@1.1.4: {}
931 |
932 | cross-spawn@5.1.0:
933 | dependencies:
934 | lru-cache: 4.1.5
935 | shebang-command: 1.2.0
936 | which: 1.3.1
937 |
938 | cross-spawn@7.0.3:
939 | dependencies:
940 | path-key: 3.1.1
941 | shebang-command: 2.0.0
942 | which: 2.0.2
943 |
944 | csstype@3.1.3: {}
945 |
946 | dataloader@1.4.0: {}
947 |
948 | detect-indent@6.1.0: {}
949 |
950 | dir-glob@3.0.1:
951 | dependencies:
952 | path-type: 4.0.0
953 |
954 | dotenv@8.6.0: {}
955 |
956 | eastasianwidth@0.2.0: {}
957 |
958 | emoji-regex@8.0.0: {}
959 |
960 | emoji-regex@9.2.2: {}
961 |
962 | enquirer@2.4.1:
963 | dependencies:
964 | ansi-colors: 4.1.3
965 | strip-ansi: 6.0.1
966 |
967 | esprima@4.0.1: {}
968 |
969 | extendable-error@0.1.7: {}
970 |
971 | external-editor@3.1.0:
972 | dependencies:
973 | chardet: 0.7.0
974 | iconv-lite: 0.4.24
975 | tmp: 0.0.33
976 |
977 | fast-glob@3.3.2:
978 | dependencies:
979 | '@nodelib/fs.stat': 2.0.5
980 | '@nodelib/fs.walk': 1.2.8
981 | glob-parent: 5.1.2
982 | merge2: 1.4.1
983 | micromatch: 4.0.8
984 |
985 | fastq@1.17.1:
986 | dependencies:
987 | reusify: 1.0.4
988 |
989 | fill-range@7.1.1:
990 | dependencies:
991 | to-regex-range: 5.0.1
992 |
993 | find-up@4.1.0:
994 | dependencies:
995 | locate-path: 5.0.0
996 | path-exists: 4.0.0
997 |
998 | foreground-child@3.3.0:
999 | dependencies:
1000 | cross-spawn: 7.0.3
1001 | signal-exit: 4.1.0
1002 |
1003 | fs-extra@7.0.1:
1004 | dependencies:
1005 | graceful-fs: 4.2.11
1006 | jsonfile: 4.0.0
1007 | universalify: 0.1.2
1008 |
1009 | fs-extra@8.1.0:
1010 | dependencies:
1011 | graceful-fs: 4.2.11
1012 | jsonfile: 4.0.0
1013 | universalify: 0.1.2
1014 |
1015 | fsevents@2.3.3:
1016 | optional: true
1017 |
1018 | glob-parent@5.1.2:
1019 | dependencies:
1020 | is-glob: 4.0.3
1021 |
1022 | glob@11.0.0:
1023 | dependencies:
1024 | foreground-child: 3.3.0
1025 | jackspeak: 4.0.2
1026 | minimatch: 10.0.1
1027 | minipass: 7.1.2
1028 | package-json-from-dist: 1.0.1
1029 | path-scurry: 2.0.0
1030 |
1031 | globby@11.1.0:
1032 | dependencies:
1033 | array-union: 2.1.0
1034 | dir-glob: 3.0.1
1035 | fast-glob: 3.3.2
1036 | ignore: 5.3.2
1037 | merge2: 1.4.1
1038 | slash: 3.0.0
1039 |
1040 | graceful-fs@4.2.11: {}
1041 |
1042 | human-id@1.0.2: {}
1043 |
1044 | iconv-lite@0.4.24:
1045 | dependencies:
1046 | safer-buffer: 2.1.2
1047 |
1048 | ignore@5.3.2: {}
1049 |
1050 | is-binary-path@2.1.0:
1051 | dependencies:
1052 | binary-extensions: 2.3.0
1053 |
1054 | is-extglob@2.1.1: {}
1055 |
1056 | is-fullwidth-code-point@3.0.0: {}
1057 |
1058 | is-glob@4.0.3:
1059 | dependencies:
1060 | is-extglob: 2.1.1
1061 |
1062 | is-number@7.0.0: {}
1063 |
1064 | is-subdir@1.2.0:
1065 | dependencies:
1066 | better-path-resolve: 1.0.0
1067 |
1068 | is-windows@1.0.2: {}
1069 |
1070 | isexe@2.0.0: {}
1071 |
1072 | jackspeak@4.0.2:
1073 | dependencies:
1074 | '@isaacs/cliui': 8.0.2
1075 |
1076 | js-tokens@4.0.0: {}
1077 |
1078 | js-yaml@3.14.1:
1079 | dependencies:
1080 | argparse: 1.0.10
1081 | esprima: 4.0.1
1082 |
1083 | jsonfile@4.0.0:
1084 | optionalDependencies:
1085 | graceful-fs: 4.2.11
1086 |
1087 | locate-path@5.0.0:
1088 | dependencies:
1089 | p-locate: 4.1.0
1090 |
1091 | lodash.startcase@4.4.0: {}
1092 |
1093 | loose-envify@1.4.0:
1094 | dependencies:
1095 | js-tokens: 4.0.0
1096 |
1097 | lru-cache@11.0.1: {}
1098 |
1099 | lru-cache@4.1.5:
1100 | dependencies:
1101 | pseudomap: 1.0.2
1102 | yallist: 2.1.2
1103 |
1104 | merge2@1.4.1: {}
1105 |
1106 | micromatch@4.0.8:
1107 | dependencies:
1108 | braces: 3.0.3
1109 | picomatch: 2.3.1
1110 |
1111 | minimatch@10.0.1:
1112 | dependencies:
1113 | brace-expansion: 2.0.1
1114 |
1115 | minipass@7.1.2: {}
1116 |
1117 | mkdirp@3.0.1: {}
1118 |
1119 | mri@1.2.0: {}
1120 |
1121 | node-fetch@2.7.0:
1122 | dependencies:
1123 | whatwg-url: 5.0.0
1124 |
1125 | normalize-path@3.0.0: {}
1126 |
1127 | os-tmpdir@1.0.2: {}
1128 |
1129 | outdent@0.5.0: {}
1130 |
1131 | p-filter@2.1.0:
1132 | dependencies:
1133 | p-map: 2.1.0
1134 |
1135 | p-limit@2.3.0:
1136 | dependencies:
1137 | p-try: 2.2.0
1138 |
1139 | p-locate@4.1.0:
1140 | dependencies:
1141 | p-limit: 2.3.0
1142 |
1143 | p-map@2.1.0: {}
1144 |
1145 | p-try@2.2.0: {}
1146 |
1147 | package-json-from-dist@1.0.1: {}
1148 |
1149 | package-manager-detector@0.2.2: {}
1150 |
1151 | path-exists@4.0.0: {}
1152 |
1153 | path-key@3.1.1: {}
1154 |
1155 | path-scurry@2.0.0:
1156 | dependencies:
1157 | lru-cache: 11.0.1
1158 | minipass: 7.1.2
1159 |
1160 | path-type@4.0.0: {}
1161 |
1162 | picocolors@1.1.1: {}
1163 |
1164 | picomatch@2.3.1: {}
1165 |
1166 | pify@4.0.1: {}
1167 |
1168 | polite-json@5.0.0: {}
1169 |
1170 | prettier@2.8.8: {}
1171 |
1172 | prettier@3.3.3: {}
1173 |
1174 | pseudomap@1.0.2: {}
1175 |
1176 | queue-microtask@1.2.3: {}
1177 |
1178 | react@18.3.1:
1179 | dependencies:
1180 | loose-envify: 1.4.0
1181 |
1182 | read-yaml-file@1.1.0:
1183 | dependencies:
1184 | graceful-fs: 4.2.11
1185 | js-yaml: 3.14.1
1186 | pify: 4.0.1
1187 | strip-bom: 3.0.0
1188 |
1189 | readdirp@3.6.0:
1190 | dependencies:
1191 | picomatch: 2.3.1
1192 |
1193 | regenerator-runtime@0.14.1: {}
1194 |
1195 | resolve-from@5.0.0: {}
1196 |
1197 | resolve-import@2.0.0:
1198 | dependencies:
1199 | glob: 11.0.0
1200 | walk-up-path: 4.0.0
1201 |
1202 | reusify@1.0.4: {}
1203 |
1204 | rimraf@6.0.1:
1205 | dependencies:
1206 | glob: 11.0.0
1207 | package-json-from-dist: 1.0.1
1208 |
1209 | run-parallel@1.2.0:
1210 | dependencies:
1211 | queue-microtask: 1.2.3
1212 |
1213 | safer-buffer@2.1.2: {}
1214 |
1215 | semver@7.6.3: {}
1216 |
1217 | shebang-command@1.2.0:
1218 | dependencies:
1219 | shebang-regex: 1.0.0
1220 |
1221 | shebang-command@2.0.0:
1222 | dependencies:
1223 | shebang-regex: 3.0.0
1224 |
1225 | shebang-regex@1.0.0: {}
1226 |
1227 | shebang-regex@3.0.0: {}
1228 |
1229 | signal-exit@3.0.7: {}
1230 |
1231 | signal-exit@4.1.0: {}
1232 |
1233 | slash@3.0.0: {}
1234 |
1235 | spawndamnit@2.0.0:
1236 | dependencies:
1237 | cross-spawn: 5.1.0
1238 | signal-exit: 3.0.7
1239 |
1240 | sprintf-js@1.0.3: {}
1241 |
1242 | string-width@4.2.3:
1243 | dependencies:
1244 | emoji-regex: 8.0.0
1245 | is-fullwidth-code-point: 3.0.0
1246 | strip-ansi: 6.0.1
1247 |
1248 | string-width@5.1.2:
1249 | dependencies:
1250 | eastasianwidth: 0.2.0
1251 | emoji-regex: 9.2.2
1252 | strip-ansi: 7.1.0
1253 |
1254 | strip-ansi@6.0.1:
1255 | dependencies:
1256 | ansi-regex: 5.0.1
1257 |
1258 | strip-ansi@7.1.0:
1259 | dependencies:
1260 | ansi-regex: 6.1.0
1261 |
1262 | strip-bom@3.0.0: {}
1263 |
1264 | sync-content@2.0.1:
1265 | dependencies:
1266 | glob: 11.0.0
1267 | mkdirp: 3.0.1
1268 | path-scurry: 2.0.0
1269 | rimraf: 6.0.1
1270 | tshy: 3.0.2
1271 |
1272 | term-size@2.2.1: {}
1273 |
1274 | tmp@0.0.33:
1275 | dependencies:
1276 | os-tmpdir: 1.0.2
1277 |
1278 | to-regex-range@5.0.1:
1279 | dependencies:
1280 | is-number: 7.0.0
1281 |
1282 | tr46@0.0.3: {}
1283 |
1284 | tshy@3.0.2:
1285 | dependencies:
1286 | chalk: 5.3.0
1287 | chokidar: 3.6.0
1288 | foreground-child: 3.3.0
1289 | minimatch: 10.0.1
1290 | mkdirp: 3.0.1
1291 | polite-json: 5.0.0
1292 | resolve-import: 2.0.0
1293 | rimraf: 6.0.1
1294 | sync-content: 2.0.1
1295 | typescript: 5.6.3
1296 | walk-up-path: 4.0.0
1297 |
1298 | typescript@5.6.3: {}
1299 |
1300 | universalify@0.1.2: {}
1301 |
1302 | walk-up-path@4.0.0: {}
1303 |
1304 | webidl-conversions@3.0.1: {}
1305 |
1306 | whatwg-url@5.0.0:
1307 | dependencies:
1308 | tr46: 0.0.3
1309 | webidl-conversions: 3.0.1
1310 |
1311 | which@1.3.1:
1312 | dependencies:
1313 | isexe: 2.0.0
1314 |
1315 | which@2.0.2:
1316 | dependencies:
1317 | isexe: 2.0.0
1318 |
1319 | wrap-ansi@7.0.0:
1320 | dependencies:
1321 | ansi-styles: 4.3.0
1322 | string-width: 4.2.3
1323 | strip-ansi: 6.0.1
1324 |
1325 | wrap-ansi@8.1.0:
1326 | dependencies:
1327 | ansi-styles: 6.2.1
1328 | string-width: 5.1.2
1329 | strip-ansi: 7.1.0
1330 |
1331 | yallist@2.1.2: {}
1332 |
--------------------------------------------------------------------------------
/reset-scoped.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Based on HTML rendering suggestions and the differences across UA sheets:
3 | * https://html.spec.whatwg.org/multipage/rendering.html
4 | *
5 | * Selectors sorted as they appear in the HTML Standard for better compression.
6 | */
7 |
8 | ._h1,
9 | ._h2,
10 | ._h3,
11 | ._h4,
12 | ._h5,
13 | ._h6,
14 | ._p,
15 | ._hr,
16 | ._pre,
17 | ._blockquote,
18 | ._ol,
19 | ._ul,
20 | ._menu,
21 | ._dl,
22 | ._dd,
23 | ._figure,
24 | ._input, /* Safari-only */
25 | ._button, /* Safari-only */
26 | ._select, /* Safari-only */
27 | ._textarea, /* Safari-only */
28 | ._fieldset {
29 | margin: 0;
30 | }
31 |
32 | ._hr,
33 | ._iframe,
34 | ._input,
35 | ._button,
36 | ._select,
37 | ._textarea,
38 | ._fieldset {
39 | border-width: 0;
40 | }
41 |
42 | ._ol,
43 | ._ul,
44 | ._menu,
45 | ._td,
46 | ._th,
47 | ._input,
48 | ._button,
49 | ._select,
50 | ._textarea,
51 | ._fieldset,
52 | ._legend {
53 | padding: 0;
54 | }
55 |
56 | ._h1,
57 | ._h2,
58 | ._h3,
59 | ._h4,
60 | ._h5,
61 | ._h6,
62 | ._address,
63 | ._th {
64 | font: inherit; /* font-size, font-weight, font-style */
65 | }
66 |
67 | ._ol,
68 | ._ul,
69 | ._menu {
70 | list-style: none; /* list-style-type */
71 | }
72 |
73 | ._a {
74 | color: inherit;
75 | text-decoration: inherit;
76 | }
77 |
78 | ._table {
79 | border-spacing: 0;
80 | border-color: inherit;
81 | }
82 |
83 | ._th {
84 | text-align: inherit;
85 | }
86 |
87 | ._input,
88 | ._button,
89 | ._select,
90 | ._textarea {
91 | background: none;
92 |
93 | /* https://adrianroselli.com/2019/09/under-engineered-text-boxen.html */
94 | font: inherit;
95 | letter-spacing: inherit;
96 | word-spacing: inherit;
97 |
98 | color: inherit;
99 | }
100 |
101 | ._input::placeholder,
102 | ._textarea::placeholder {
103 | color: gray;
104 | opacity: 1; /* Firefox-only */
105 | }
106 |
107 | /* Safari-only */
108 | ._select {
109 | border-radius: 0;
110 | }
111 |
112 | /* Chrome-only */
113 | ._select:disabled {
114 | opacity: 1;
115 | }
116 |
--------------------------------------------------------------------------------
/reset.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Based on HTML rendering suggestions and the differences across UA sheets:
3 | * https://html.spec.whatwg.org/multipage/rendering.html
4 | *
5 | * Selectors sorted as they appear in the HTML Standard for better compression.
6 | */
7 |
8 | html {
9 | line-height: 1;
10 | }
11 |
12 | body,
13 | h1,
14 | h2,
15 | h3,
16 | h4,
17 | h5,
18 | h6,
19 | p,
20 | hr,
21 | pre,
22 | blockquote,
23 | ol,
24 | ul,
25 | menu,
26 | dl,
27 | dd,
28 | figure,
29 | input, /* Safari-only */
30 | button, /* Safari-only */
31 | select, /* Safari-only */
32 | textarea, /* Safari-only */
33 | fieldset {
34 | margin: 0;
35 | }
36 |
37 | hr,
38 | iframe,
39 | input,
40 | button,
41 | select,
42 | textarea,
43 | fieldset {
44 | border-width: 0;
45 | }
46 |
47 | ol,
48 | ul,
49 | menu,
50 | td,
51 | th,
52 | input,
53 | button,
54 | select,
55 | textarea,
56 | fieldset,
57 | legend {
58 | padding: 0;
59 | }
60 |
61 | h1,
62 | h2,
63 | h3,
64 | h4,
65 | h5,
66 | h6,
67 | address,
68 | th {
69 | font: inherit; /* font-size, font-weight, font-style */
70 | }
71 |
72 | ol,
73 | ul,
74 | menu {
75 | list-style: none; /* list-style-type */
76 | }
77 |
78 | a {
79 | color: inherit;
80 | text-decoration: inherit;
81 | }
82 |
83 | table {
84 | border-spacing: 0;
85 | border-color: inherit;
86 | }
87 |
88 | th {
89 | text-align: inherit;
90 | }
91 |
92 | input,
93 | button,
94 | select,
95 | textarea {
96 | background: none;
97 |
98 | /* https://adrianroselli.com/2019/09/under-engineered-text-boxen.html */
99 | font: inherit;
100 | letter-spacing: inherit;
101 | word-spacing: inherit;
102 |
103 | color: inherit;
104 | }
105 |
106 | input::placeholder,
107 | textarea::placeholder {
108 | color: gray;
109 | opacity: 1; /* Firefox-only */
110 | }
111 |
112 | /* Safari-only */
113 | select {
114 | border-radius: 0;
115 | }
116 |
117 | /* Chrome-only */
118 | select:disabled {
119 | opacity: 1;
120 | }
121 |
--------------------------------------------------------------------------------
/src/reset-scoped/index.ts:
--------------------------------------------------------------------------------
1 | export const resetElements = [
2 | "a",
3 | "address",
4 | "blockquote",
5 | "button",
6 | "dd",
7 | "dl",
8 | "fieldset",
9 | "figure",
10 | "h1",
11 | "h2",
12 | "h3",
13 | "h4",
14 | "h5",
15 | "h6",
16 | "hr",
17 | "iframe",
18 | "input",
19 | "legend",
20 | "menu",
21 | "ol",
22 | "p",
23 | "pre",
24 | "select",
25 | "table",
26 | "td",
27 | "textarea",
28 | "th",
29 | "ul",
30 | ] as const;
31 |
32 | const resetElementsSet = new Set(resetElements);
33 |
34 | export function getResetClassName(
35 | element: (typeof resetElements)[number] | (string & {}),
36 | ) {
37 | return resetElementsSet.has(element) ? "_" + element : undefined;
38 | }
39 |
--------------------------------------------------------------------------------
/src/reset-scoped/react/index.ts:
--------------------------------------------------------------------------------
1 | import { createElement as createElementBase } from "react";
2 |
3 | import { transformProps } from "./transformProps.js";
4 |
5 | export const createElement = (
6 | type: React.ElementType,
7 | props: unknown,
8 | ...restArgs: any[]
9 | ) => createElementBase(type, transformProps(type, props), ...restArgs);
10 |
--------------------------------------------------------------------------------
/src/reset-scoped/react/jsx-dev-runtime.ts:
--------------------------------------------------------------------------------
1 | import { Fragment, jsxDEV as jsxDEVBase } from "react/jsx-dev-runtime";
2 |
3 | import { transformProps } from "./transformProps.js";
4 |
5 | export { Fragment };
6 |
7 | export const jsxDEV: typeof jsxDEVBase = (type, props, ...restArgs) =>
8 | jsxDEVBase(type, transformProps(type, props), ...restArgs);
9 |
--------------------------------------------------------------------------------
/src/reset-scoped/react/jsx-runtime.ts:
--------------------------------------------------------------------------------
1 | import { Fragment, jsx as jsxBase, jsxs as jsxsBase } from "react/jsx-runtime";
2 |
3 | import { transformProps } from "./transformProps.js";
4 |
5 | export { Fragment };
6 |
7 | export const jsx: typeof jsxBase = (type, props, ...restArgs) =>
8 | jsxBase(type, transformProps(type, props), ...restArgs);
9 |
10 | export const jsxs: typeof jsxsBase = (type, props, ...restArgs) =>
11 | jsxsBase(type, transformProps(type, props), ...restArgs);
12 |
--------------------------------------------------------------------------------
/src/reset-scoped/react/transformProps.ts:
--------------------------------------------------------------------------------
1 | import { getResetClassName } from "../index.js";
2 |
3 | export function transformProps(type: React.ElementType, props: unknown) {
4 | if (typeof type === "string") {
5 | const resetClassName = getResetClassName(type);
6 | if (resetClassName !== undefined) {
7 | return typeof props === "object" && props !== null
8 | ? {
9 | ...props,
10 | className:
11 | "className" in props
12 | ? resetClassName + " " + props.className
13 | : resetClassName,
14 | }
15 | : {
16 | className: resetClassName,
17 | };
18 | }
19 | }
20 | return props;
21 | }
22 |
--------------------------------------------------------------------------------
/test-pages/reset.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | HTML5 Test Page
7 |
11 |
12 |
13 |
14 |
15 |
16 |
23 |
24 |
65 |
66 |
67 |
68 |
69 |
70 |
73 |
74 |
Heading 1
75 | Heading 2
76 | Heading 3
77 | Heading 4
78 | Heading 5
79 | Heading 6
80 |
81 |
84 |
85 |
86 |
87 |
88 |
89 | A paragraph (from the Greek paragraphos, “to write beside” or
90 | “written beside”) is a self-contained unit of a discourse in
91 | writing dealing with a particular point or idea. A paragraph
92 | consists of one or more sentences. Though not required by the
93 | syntax of any language, paragraphs are usually an expected part
94 | of formal writing, used to organize longer prose.
95 |
96 |
97 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | A block quotation (also known as a long quotation or extract)
107 | is a quotation in a written document, that is set off from the
108 | main text as a paragraph, or block of text.
109 |
110 |
111 | It is typically distinguished visually using indentation and a
112 | different typeface or smaller size quotation. It may or may
113 | not include a citation, usually placed at the bottom.
114 |
115 | Said no one, ever.
116 |
117 |
118 |
121 |
122 |
123 |
124 |
125 |
Definition list
126 |
127 | Definition List Title
128 | This is a definition list division.
129 |
130 |
Ordered List
131 |
132 | List Item 1
133 | List Item 2
134 | List Item 3
135 |
136 |
Unordered List
137 |
138 | List Item 1
139 | List Item 2
140 | List Item 3
141 |
142 |
143 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
155 |
156 |
157 |
158 |
159 |
160 | Table Caption
161 |
162 |
163 |
164 | Table Heading 1
165 | Table Heading 2
166 | Table Heading 3
167 | Table Heading 4
168 | Table Heading 5
169 |
170 |
171 |
172 |
173 | Table Footer 1
174 | Table Footer 2
175 | Table Footer 3
176 | Table Footer 4
177 | Table Footer 5
178 |
179 |
180 |
181 |
182 | Table Cell 1
183 | Table Cell 2
184 | Table Cell 3
185 | Table Cell 4
186 | Table Cell 5
187 |
188 |
189 | Table Cell 1
190 | Table Cell 2
191 | Table Cell 3
192 | Table Cell 4
193 | Table Cell 5
194 |
195 |
196 | Table Cell 1
197 | Table Cell 2
198 | Table Cell 3
199 | Table Cell 4
200 | Table Cell 5
201 |
202 |
203 | Table Cell 1
204 | Table Cell 2
205 | Table Cell 3
206 | Table Cell 4
207 | Table Cell 5
208 |
209 |
210 |
211 |
214 |
215 |
216 |
217 |
218 |
Keyboard input: Cmd
219 |
220 | Inline code:
221 | <div>code</div>
222 |
223 |
224 | Sample output:
225 | This is sample output from a computer program.
226 |
227 |
Pre-formatted text
228 |
229 | P R E F O R M A T T E D T E X T
230 | ! " # $ % & ' ( ) * + , - . /
231 | 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
232 | @ A B C D E F G H I J K L M N O
233 | P Q R S T U V W X Y Z [ \ ] ^ _
234 | ` a b c d e f g h i j k l m n o
235 | p q r s t u v w x y z { | } ~
237 |
238 |
241 |
242 |
243 |
244 |
245 |
This is a text link .
246 |
247 | Strong is used to indicate strong importance.
248 |
249 |
This text has added emphasis.
250 |
251 | The b element is stylistically different text from normal
252 | text, without any special importance.
253 |
254 |
255 | The i element is text that is offset from the normal
256 | text.
257 |
258 |
259 | The u element is text with an unarticulated, though
260 | explicitly rendered, non-textual annotation.
261 |
262 |
263 | This text is deleted and
264 | This text is inserted .
265 |
266 |
This text has a strikethrough .
267 |
Superscript® .
268 |
Subscript for things like H2 O.
269 |
270 | This small text is small for for fine print, etc.
271 |
272 |
273 | Abbreviation:
274 | HTML
275 |
276 |
277 | This text is a short inline quotation.
281 |
282 |
This is a citation.
283 |
The dfn element indicates a definition.
284 |
The mark element indicates a highlight.
285 |
286 | The variable element , such as x =
287 | y .
288 |
289 |
290 | The time element:
291 | 2 weeks ago
292 |
293 |
294 |
297 |
298 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
No <figure>
element
323 |
324 |
328 |
329 |
330 | Wrapped in a <figure>
element, no
331 | <figcaption>
332 |
333 |
334 |
338 |
339 |
340 | Wrapped in a <figure>
element, with a
341 | <figcaption>
342 |
343 |
344 |
348 | Here is a caption for this image.
349 |
350 |
351 |
354 |
355 |
356 |
357 |
358 |
361 |
362 |
363 |
364 | video
365 |
368 |
369 |
370 |
371 | canvas
372 |
375 |
376 |
377 |
378 | 2 out of 10
379 |
382 |
383 |
384 |
385 |
386 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
400 |
401 |
402 |
403 |
404 |
407 |
408 |
409 |
640 |
641 |
647 |
648 |
649 |
650 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@total-typescript/tsconfig/tsc/no-dom/library",
3 | "include": ["src/**/*"],
4 | "compilerOptions": {
5 | "target": "ES2017",
6 | "lib": ["ES2017"],
7 | "verbatimModuleSyntax": false
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/ua-sheets/SOURCES.md:
--------------------------------------------------------------------------------
1 | - [`chrome.css`](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/third_party/blink/renderer/core/html/resources/html.css)
2 | - [`firefox.css`](https://searchfox.org/mozilla-central/source/layout/style/res/html.css)
3 | - [`safari.css`](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/css/html.css)
4 |
--------------------------------------------------------------------------------
/ua-sheets/chrome.css:
--------------------------------------------------------------------------------
1 | /*
2 | * The default style sheet used to render HTML.
3 | *
4 | * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
5 | * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
6 | *
7 | * This library is free software; you can redistribute it and/or
8 | * modify it under the terms of the GNU Library General Public
9 | * License as published by the Free Software Foundation; either
10 | * version 2 of the License, or (at your option) any later version.
11 | *
12 | * This library is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | * Library General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU Library General Public License
18 | * along with this library; see the file COPYING.LIB. If not, write to
19 | * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 | * Boston, MA 02110-1301, USA.
21 | *
22 | */
23 |
24 | @namespace "http://www.w3.org/1999/xhtml";
25 |
26 | html {
27 | display: block;
28 | }
29 |
30 | :root {
31 | view-transition-name: root;
32 | }
33 |
34 | /* generic block-level elements */
35 |
36 | body {
37 | display: block;
38 | margin: 8px;
39 | }
40 |
41 | body:-webkit-full-page-media {
42 | background-color: rgb(0, 0, 0)
43 | }
44 |
45 | p {
46 | display: block;
47 | margin-block-start: 1__qem;
48 | margin-block-end: 1__qem;
49 | margin-inline-start: 0;
50 | margin-inline-end: 0;
51 | }
52 |
53 | div {
54 | display: block
55 | }
56 |
57 | article, aside, footer, header, hgroup, main, nav, search, section {
58 | display: block
59 | }
60 |
61 | marquee {
62 | display: inline-block;
63 | width: -webkit-fill-available;
64 | }
65 |
66 | address {
67 | display: block
68 | }
69 |
70 | blockquote {
71 | display: block;
72 | margin-block-start: 1__qem;
73 | margin-block-end: 1em;
74 | margin-inline-start: 40px;
75 | margin-inline-end: 40px;
76 | }
77 |
78 | figcaption {
79 | display: block
80 | }
81 |
82 | figure {
83 | display: block;
84 | margin-block-start: 1em;
85 | margin-block-end: 1em;
86 | margin-inline-start: 40px;
87 | margin-inline-end: 40px;
88 | }
89 |
90 | q {
91 | display: inline
92 | }
93 |
94 | q:before {
95 | content: open-quote;
96 | }
97 |
98 | q:after {
99 | content: close-quote;
100 | }
101 |
102 | center {
103 | display: block;
104 | /* special centering to be able to emulate the html4/netscape behaviour */
105 | text-align: -webkit-center
106 | }
107 |
108 | hr {
109 | display: block;
110 | overflow: hidden;
111 | margin-block-start: 0.5em;
112 | margin-block-end: 0.5em;
113 | margin-inline-start: auto;
114 | margin-inline-end: auto;
115 | border-style: inset;
116 | border-width: 1px
117 | }
118 |
119 | map {
120 | display: inline
121 | }
122 |
123 | video {
124 | object-fit: contain;
125 | }
126 |
127 | video:-webkit-full-page-media {
128 | margin: auto;
129 | position: absolute;
130 | top: 0;
131 | right: 0;
132 | bottom: 0;
133 | left: 0;
134 | max-height: 100%;
135 | max-width: 100%;
136 | }
137 |
138 | audio:not([controls]) {
139 | display: none !important;
140 | }
141 |
142 | /** TODO(crbug.com/985623): Remove these hard-coded audio tag size.
143 | * This fixed audio tag width/height leads to fail the wpt tests below.
144 | * crbug.com/955170 external/wpt/css/css-contain/contain-size-replaced-003a.html
145 | * crbug.com/955163 external/wpt/css/css-contain/contain-size-replaced-003b.html
146 | * crbug.com/955163 external/wpt/css/css-contain/contain-size-replaced-003c.html
147 | */
148 | audio {
149 | width: 300px;
150 | height: 54px;
151 | }
152 |
153 | video, canvas, img {
154 | overflow: clip;
155 | overflow-clip-margin: content-box;
156 | }
157 |
158 | iframe, embed, object, fencedframe {
159 | overflow: clip !important;
160 | overflow-clip-margin: content-box !important;
161 | }
162 |
163 | /* heading elements */
164 |
165 | h1 {
166 | display: block;
167 | font-size: 2em;
168 | margin-block-start: 0.67__qem;
169 | margin-block-end: 0.67em;
170 | margin-inline-start: 0;
171 | margin-inline-end: 0;
172 | font-weight: bold
173 | }
174 |
175 | :-webkit-any(article,aside,nav,section) h1 {
176 | font-size: 1.5em;
177 | margin-block-start: 0.83__qem;
178 | margin-block-end: 0.83em;
179 | }
180 |
181 | :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1 {
182 | font-size: 1.17em;
183 | margin-block-start: 1__qem;
184 | margin-block-end: 1em;
185 | }
186 |
187 | :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1 {
188 | font-size: 1.00em;
189 | margin-block-start: 1.33__qem;
190 | margin-block-end: 1.33em;
191 | }
192 |
193 | :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1 {
194 | font-size: .83em;
195 | margin-block-start: 1.67__qem;
196 | margin-block-end: 1.67em;
197 | }
198 |
199 | :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1 {
200 | font-size: .67em;
201 | margin-block-start: 2.33__qem;
202 | margin-block-end: 2.33em;
203 | }
204 |
205 | h2 {
206 | display: block;
207 | font-size: 1.5em;
208 | margin-block-start: 0.83__qem;
209 | margin-block-end: 0.83em;
210 | margin-inline-start: 0;
211 | margin-inline-end: 0;
212 | font-weight: bold
213 | }
214 |
215 | h3 {
216 | display: block;
217 | font-size: 1.17em;
218 | margin-block-start: 1__qem;
219 | margin-block-end: 1em;
220 | margin-inline-start: 0;
221 | margin-inline-end: 0;
222 | font-weight: bold
223 | }
224 |
225 | h4 {
226 | display: block;
227 | margin-block-start: 1.33__qem;
228 | margin-block-end: 1.33em;
229 | margin-inline-start: 0;
230 | margin-inline-end: 0;
231 | font-weight: bold
232 | }
233 |
234 | h5 {
235 | display: block;
236 | font-size: .83em;
237 | margin-block-start: 1.67__qem;
238 | margin-block-end: 1.67em;
239 | margin-inline-start: 0;
240 | margin-inline-end: 0;
241 | font-weight: bold
242 | }
243 |
244 | h6 {
245 | display: block;
246 | font-size: .67em;
247 | margin-block-start: 2.33__qem;
248 | margin-block-end: 2.33em;
249 | margin-inline-start: 0;
250 | margin-inline-end: 0;
251 | font-weight: bold
252 | }
253 |
254 | /* tables */
255 |
256 | table {
257 | display: table;
258 | border-collapse: separate;
259 | border-spacing: 2px;
260 | border-color: gray;
261 | box-sizing: border-box;
262 | text-indent: initial
263 | }
264 |
265 | thead {
266 | display: table-header-group;
267 | vertical-align: middle;
268 | border-color: inherit
269 | }
270 |
271 | tbody {
272 | display: table-row-group;
273 | vertical-align: middle;
274 | border-color: inherit
275 | }
276 |
277 | tfoot {
278 | display: table-footer-group;
279 | vertical-align: middle;
280 | border-color: inherit
281 | }
282 |
283 | /* for tables without table section elements (can happen with XHTML or dynamically created tables) */
284 | table > tr {
285 | vertical-align: middle;
286 | }
287 |
288 | col {
289 | display: table-column
290 | }
291 |
292 | colgroup {
293 | display: table-column-group
294 | }
295 |
296 | tr {
297 | display: table-row;
298 | vertical-align: inherit;
299 | border-color: inherit
300 | }
301 |
302 | td, th {
303 | display: table-cell;
304 | vertical-align: inherit;
305 | }
306 |
307 | /* When the td/th are inside a table (the normal case), the padding is taken
308 | care of by HTMLTableCellElement::AdditionalPresentationAttributeStyle(). */
309 | td:not(table td),
310 | th:not(table th) {
311 | padding: 1px;
312 | }
313 |
314 | th {
315 | font-weight: bold;
316 | text-align: -internal-center
317 | }
318 |
319 | caption {
320 | display: table-caption;
321 | text-align: -webkit-center
322 | }
323 |
324 | /* lists */
325 |
326 | ul, menu, dir {
327 | display: block;
328 | list-style-type: disc;
329 | margin-block-start: 1__qem;
330 | margin-block-end: 1em;
331 | margin-inline-start: 0;
332 | margin-inline-end: 0;
333 | padding-inline-start: 40px
334 | }
335 |
336 | ol {
337 | display: block;
338 | list-style-type: decimal;
339 | margin-block-start: 1__qem;
340 | margin-block-end: 1em;
341 | margin-inline-start: 0;
342 | margin-inline-end: 0;
343 | padding-inline-start: 40px
344 | }
345 |
346 | li {
347 | display: list-item;
348 | text-align: -webkit-match-parent;
349 | }
350 |
351 | ul ul, ol ul {
352 | list-style-type: circle
353 | }
354 |
355 | ol ol ul, ol ul ul, ul ol ul, ul ul ul {
356 | list-style-type: square
357 | }
358 |
359 | dd {
360 | display: block;
361 | margin-inline-start: 40px
362 | }
363 |
364 | dl {
365 | display: block;
366 | margin-block-start: 1__qem;
367 | margin-block-end: 1em;
368 | margin-inline-start: 0;
369 | margin-inline-end: 0;
370 | }
371 |
372 | dt {
373 | display: block
374 | }
375 |
376 | ol ul, ul ol, ul ul, ol ol {
377 | margin-block-start: 0;
378 | margin-block-end: 0
379 | }
380 |
381 | /* form elements */
382 |
383 | form {
384 | display: block;
385 | margin-top: 0__qem;
386 | }
387 |
388 | :-webkit-any(table, thead, tbody, tfoot, tr) > form:-internal-is-html {
389 | display: none !important;
390 | }
391 |
392 | label {
393 | cursor: default;
394 | }
395 |
396 | legend {
397 | display: block;
398 | padding-inline-start: 2px;
399 | padding-inline-end: 2px;
400 | border: none
401 | }
402 |
403 | fieldset {
404 | display: block;
405 | margin-inline-start: 2px;
406 | margin-inline-end: 2px;
407 | padding-block-start: 0.35em;
408 | padding-inline-start: 0.75em;
409 | padding-inline-end: 0.75em;
410 | padding-block-end: 0.625em;
411 | border: 2px groove #C0C0C0;
412 | min-inline-size: min-content;
413 | }
414 |
415 | button {
416 | appearance: auto;
417 | -internal-align-content-block: center;
418 | }
419 |
420 | input, textarea, select, button {
421 | margin: 0__qem;
422 | font: -webkit-small-control;
423 | text-rendering: auto; /* FIXME: Remove when tabs work with optimizeLegibility. */
424 | color: FieldText;
425 | letter-spacing: normal;
426 | word-spacing: normal;
427 | line-height: normal;
428 | text-transform: none;
429 | text-indent: 0;
430 | text-shadow: none;
431 | display: inline-block;
432 | text-align: start;
433 | }
434 |
435 | textarea {
436 | appearance: auto;
437 | border: 1px solid light-dark(#767676, #858585);
438 | column-count: initial !important;
439 | -webkit-rtl-ordering: logical;
440 | resize: -internal-textarea-auto;
441 | cursor: text;
442 | padding: 2px;
443 | white-space: pre-wrap;
444 | word-wrap: break-word;
445 | background-color: Field;
446 | font-family: monospace;
447 | }
448 |
449 | input {
450 | appearance: auto;
451 | padding:1px 0;
452 | border: 2px inset light-dark(#767676, #858585);
453 | -webkit-rtl-ordering: logical;
454 | cursor: text;
455 | background-color: Field;
456 | }
457 |
458 | input:not([type="file" i], [type="image" i], [type="checkbox" i], [type="radio" i]) {
459 | -internal-align-content-block: center;
460 | }
461 |
462 | input[type="search" i] {
463 | appearance: auto;
464 | box-sizing: border-box;
465 | }
466 |
467 | input::-webkit-textfield-decoration-container {
468 | display: flex !important;
469 | align-items: center;
470 | -webkit-user-modify: read-only !important;
471 | content: none !important;
472 | writing-mode: inherit !important;
473 | }
474 |
475 | input::-webkit-clear-button {
476 | appearance: auto;
477 | display: inline-block;
478 | cursor: default;
479 | flex: none;
480 | -webkit-user-modify: read-only !important;
481 | margin-inline-start: 2px;
482 | opacity: 0;
483 | pointer-events: none;
484 | }
485 |
486 | input:enabled:read-write:-webkit-any(:focus,:hover)::-webkit-clear-button {
487 | opacity: 1;
488 | pointer-events: auto;
489 | }
490 |
491 | input[type="search" i]::-webkit-search-cancel-button {
492 | appearance: auto;
493 | display: block;
494 | cursor: default;
495 | flex: none;
496 | -webkit-user-modify: read-only !important;
497 | margin-inline-start: 1px;
498 | margin-right: 3px;
499 | opacity: 0;
500 | pointer-events: none;
501 | user-select: none !important;
502 | }
503 |
504 | input[type="search" i]:enabled:read-write:-webkit-any(:focus,:hover)::-webkit-search-cancel-button {
505 | opacity: 1;
506 | pointer-events: auto;
507 | }
508 |
509 | input[type="search" i]::-webkit-search-results-decoration {
510 | margin: auto 3px auto 2px;
511 | }
512 |
513 | input,
514 | input[type="email" i],
515 | input[type="number" i],
516 | input[type="password" i],
517 | input[type="search" i],
518 | input[type="tel" i],
519 | input[type="text" i],
520 | input[type="url" i] {
521 | padding-block: 1px;
522 | padding-inline: 2px;
523 | }
524 |
525 | input[type="tel" i] {
526 | direction: ltr;
527 | }
528 |
529 | input::-webkit-inner-spin-button {
530 | appearance: auto;
531 | display: inline-block;
532 | cursor: default;
533 | flex: none;
534 | align-self: stretch;
535 | -webkit-user-modify: read-only !important;
536 | opacity: 0;
537 | pointer-events: none;
538 | }
539 |
540 | input:enabled:read-write:-webkit-any(:focus,:hover)::-webkit-inner-spin-button {
541 | opacity: 1;
542 | pointer-events: auto;
543 | }
544 |
545 | ::-webkit-input-placeholder {
546 | -webkit-text-security: none;
547 | color: #757575;
548 | direction: inherit !important;
549 | pointer-events: none !important;
550 | text-orientation: inherit !important;
551 | writing-mode: inherit !important;
552 | }
553 |
554 | input::-webkit-input-placeholder {
555 | text-overflow: inherit;
556 | line-height: initial !important;
557 | white-space: pre;
558 | word-wrap: normal;
559 | overflow: hidden;
560 | -webkit-user-modify: read-only !important;
561 | }
562 |
563 | input::-internal-input-suggested {
564 | text-overflow: inherit;
565 | white-space: nowrap;
566 | overflow: hidden;
567 | }
568 |
569 | input::-internal-input-suggested,
570 | textarea::-internal-input-suggested {
571 | font: -webkit-small-control !important;
572 | /* -webkit-small-control does not pin the font-feature-settings and we want
573 | previews to look consistent. */
574 | font-feature-settings: normal !important;
575 | /* Prevent that overflow affects the scrollable area. Without this,
576 | LayoutBox::*Scroll{Height,Width}() may determine the scroll width/height
577 | from the scrollable area instead of from the overrides in
578 | LayoutTextControl{Single,Multi}Line::Scroll{Height,Width}(). */
579 | overflow: hidden !important;
580 | overflow-anchor: none;
581 | }
582 |
583 | textarea::-internal-input-suggested {
584 | font-family: monospace !important;
585 | }
586 |
587 | input[type="password" i] {
588 | -webkit-text-security: disc !important;
589 | }
590 |
591 | input[type="password" i]::-internal-input-suggested:not(.reveal-password) {
592 | -webkit-text-security: disc !important;
593 | }
594 |
595 | input[type="password" i]::-internal-input-suggested.reveal-password {
596 | -webkit-text-security: none;
597 | }
598 |
599 | input[type="password" i]::-internal-input-suggested.fade-out-password {
600 | width: fit-content;
601 | -webkit-mask: linear-gradient(to right, #000 50%, #0000);
602 | mask: linear-gradient(to right, #000 50%, #0000);
603 | }
604 |
605 | input[type="password" i]::-internal-reveal {
606 | width: 1.3em;
607 | height: 1.3em;
608 | cursor: default;
609 | flex: none;
610 | background-image: url(images/password_reveal_on.svg);
611 | background-repeat: no-repeat;
612 | background-position: center;
613 | background-size: contain;
614 | margin-left: 3px;
615 | margin-right: 3px;
616 | }
617 |
618 | input[type="password" i]::-internal-reveal.reveal {
619 | background-image: url(images/password_reveal_off.svg);
620 | }
621 |
622 | input[type="password" i]::-internal-reveal:hover,
623 | input[type="password" i]::-internal-reveal:focus {
624 | border-radius: 1px;
625 | cursor: pointer;
626 | }
627 |
628 | input[type="password" i]::-internal-strong {
629 | color: light-dark(#0B57D0, #A8C7FA);
630 | font-family: roboto;
631 | -webkit-text-security: none;
632 | }
633 |
634 | input[type="hidden" i], input[type="image" i], input[type="file" i] {
635 | appearance: none;
636 | padding: initial;
637 | background-color: initial;
638 | border: initial;
639 | cursor: default;
640 | }
641 |
642 | input[type="file" i] {
643 | align-items: baseline;
644 | color: inherit;
645 | overflow: hidden !important;
646 | text-align: start !important;
647 | text-overflow: ellipsis;
648 | white-space: pre;
649 | }
650 |
651 | input[type="image" i] {
652 | cursor: pointer;
653 | }
654 |
655 | input[type="radio" i],
656 | input[type="checkbox" i] {
657 | margin:3px 3px 3px 4px;
658 | padding: initial;
659 | background-color: initial;
660 | border: initial;
661 | cursor: default;
662 | }
663 |
664 | input[type="radio" i] {
665 | margin:3px 3px 0 5px;
666 | }
667 |
668 | input[type="button" i], input[type="submit" i], input[type="reset" i] {
669 | -internal-empty-line-height: fabricated;
670 | appearance: auto;
671 | user-select: none;
672 | white-space: pre
673 | }
674 |
675 | input[type="file" i]::-webkit-file-upload-button {
676 | appearance: auto;
677 | -webkit-user-modify: read-only !important;
678 | white-space: nowrap;
679 | margin: 0;
680 | margin-inline-end: 4px; /* See FileUploadControlIntrinsicInlineSize() */
681 | font-size: inherit;
682 | }
683 |
684 | input[type="button" i],
685 | input[type="submit" i],
686 | input[type="reset" i],
687 | input[type="file" i]::-webkit-file-upload-button,
688 | button {
689 | align-items: flex-start;
690 | text-align: center;
691 | cursor: default;
692 | padding-block: 1px;
693 | padding-inline: 6px;
694 | border: 2px outset ButtonBorder;
695 | box-sizing: border-box;
696 | background-color: ButtonFace;
697 | color: ButtonText;
698 | }
699 |
700 | input[type="checkbox" i]:disabled,
701 | input[type="file" i]:disabled,
702 | input[type="hidden" i]:disabled,
703 | input[type="image" i]:disabled,
704 | input[type="radio" i]:disabled,
705 | input[type="range" i]:disabled {
706 | background-color: initial;
707 | }
708 |
709 | input[type="range" i] {
710 | appearance: auto;
711 | padding: initial;
712 | border: initial;
713 | margin: 2px;
714 | cursor: default;
715 | color: light-dark(#101010, #ffffff);
716 | }
717 |
718 | input[type="range" i]::-webkit-slider-container,
719 | input[type="range" i]::-webkit-media-slider-container {
720 | appearance: inherit;
721 | flex: 1;
722 | min-inline-size: 0;
723 | box-sizing: border-box;
724 | -webkit-user-modify: read-only !important;
725 | display: flex;
726 | }
727 |
728 | input[type="range" i]:-internal-has-datalist::-webkit-slider-container {
729 | /*
730 | * See LayoutThemeDefault. "22px" is
731 | * 2 * (SliderTickOffsetFromTrackCenter() + SliderTickSize().Height()).
732 | */
733 | min-block-size: 22px;
734 | }
735 |
736 | input[type="range" i]::-webkit-slider-runnable-track {
737 | flex: 1;
738 | min-inline-size: 0;
739 | align-self: center;
740 |
741 | box-sizing: border-box;
742 | -webkit-user-modify: read-only !important;
743 | display: block;
744 | }
745 |
746 | input[type="range" i]::-webkit-slider-thumb,
747 | input[type="range" i]::-webkit-media-slider-thumb {
748 | appearance: auto;
749 | box-sizing: border-box;
750 | -webkit-user-modify: read-only !important;
751 | display: block;
752 | }
753 |
754 | input[type="range" i]:disabled {
755 | color: #c5c5c5;
756 | }
757 |
758 | input[type="button" i]:disabled,
759 | input[type="submit" i]:disabled,
760 | input[type="reset" i]:disabled,
761 | input[type="color" i]:disabled,
762 | input[type="file" i]:disabled::-webkit-file-upload-button,
763 | button:disabled {
764 | background-color: light-dark(rgba(239, 239, 239, 0.3), rgba(19, 1, 1, 0.3));
765 | border-color: light-dark(rgba(118, 118, 118, 0.3), rgba(195, 195, 195, 0.3));
766 | color: light-dark(rgba(16, 16, 16, 0.3), rgba(255, 255, 255, 0.3));
767 | }
768 |
769 | input[type="button" i]:active, input[type="submit" i]:active, input[type="reset" i]:active, input[type="file" i]:active::-webkit-file-upload-button, button:active {
770 | border-style: inset
771 | }
772 |
773 | input[type="button" i]:active:disabled, input[type="submit" i]:active:disabled, input[type="reset" i]:active:disabled, input[type="file" i]:active:disabled::-webkit-file-upload-button, button:active:disabled {
774 | border-style: outset
775 | }
776 |
777 | input:disabled, textarea:disabled {
778 | cursor: default;
779 | background-color: light-dark(rgba(239, 239, 239, 0.3), rgba(59, 59, 59, 0.3));
780 | color: light-dark(#545454, #aaaaaa);
781 | }
782 |
783 | option:-internal-spatial-navigation-focus {
784 | outline: light-dark(black, white) dashed 1px;
785 | outline-offset: -1px;
786 | }
787 |
788 | /* https://html.spec.whatwg.org/multipage/rendering.html#hidden-elements */
789 | /* TODO(crbug.com/1231263): should be display:none. */
790 | area {
791 | display: inline;
792 | }
793 | base, basefont, datalist, head, link, meta, noembed,
794 | noframes, param, rp, script, style, template, title {
795 | display: none;
796 | }
797 | input[type="hidden" i] {
798 | display: none !important;
799 | }
800 |
801 | area:-webkit-any-link {
802 | cursor: pointer;
803 | }
804 |
805 | input[type="checkbox" i] {
806 | appearance: auto;
807 | box-sizing: border-box;
808 | }
809 |
810 | input[type="radio" i] {
811 | appearance: auto;
812 | box-sizing: border-box;
813 | }
814 |
815 | input[type="color" i] {
816 | appearance: auto;
817 | inline-size: 50px;
818 | block-size: 27px;
819 | /* Same as native_theme_base. */
820 | border: 1px solid ButtonBorder;
821 | padding: 1px 2px;
822 | cursor: default;
823 | box-sizing: border-box;
824 | background-color: ButtonFace;
825 | color: ButtonText;
826 | }
827 |
828 | input[type="color" i]::-webkit-color-swatch-wrapper {
829 | display: flex;
830 | padding: 4px 2px;
831 | box-sizing: border-box;
832 | -webkit-user-modify: read-only !important;
833 | width: 100%;
834 | height: 100%
835 | }
836 |
837 | input[type="color" i]::-webkit-color-swatch {
838 | /* The swatch should not be affected by color scheme. */
839 | color-scheme: only light;
840 | background-color: #000000;
841 | border: 1px solid #777777;
842 | flex: 1;
843 | min-width: 0;
844 | -webkit-user-modify: read-only !important;
845 | }
846 |
847 | input[type="color" i][list] {
848 | appearance: auto;
849 | inline-size: 94px;
850 | block-size: 27px
851 | }
852 |
853 | input[type="color" i][list]::-webkit-color-swatch-wrapper {
854 | padding-inline-start: 8px;
855 | padding-inline-end: 24px;
856 | }
857 |
858 | input[type="color" i][list]::-webkit-color-swatch {
859 | border-color: #000000;
860 | }
861 |
862 | input::-webkit-calendar-picker-indicator {
863 | display: inline-block;
864 | inline-size: 0.66em;
865 | block-size: 0.66em;
866 | padding-block: 0.17em;
867 | padding-inline: 0.34em;
868 | -webkit-user-modify: read-only !important;
869 | opacity: 0;
870 | cursor: default;
871 | pointer-events: none;
872 | }
873 |
874 | input::-webkit-calendar-picker-indicator:hover {
875 | background-color: #eee;
876 | }
877 |
878 | input:enabled:read-write:-webkit-any(:focus,:hover)::-webkit-calendar-picker-indicator,
879 | input::-webkit-calendar-picker-indicator:focus {
880 | opacity: 1;
881 | pointer-events: auto;
882 | }
883 |
884 | input[type="date" i]:disabled::-webkit-clear-button,
885 | input[type="date" i]:disabled::-webkit-inner-spin-button,
886 | input[type="datetime-local" i]:disabled::-webkit-clear-button,
887 | input[type="datetime-local" i]:disabled::-webkit-inner-spin-button,
888 | input[type="month" i]:disabled::-webkit-clear-button,
889 | input[type="month" i]:disabled::-webkit-inner-spin-button,
890 | input[type="week" i]:disabled::-webkit-clear-button,
891 | input[type="week" i]:disabled::-webkit-inner-spin-button,
892 | input:disabled::-webkit-calendar-picker-indicator,
893 | input[type="date" i][readonly]::-webkit-clear-button,
894 | input[type="date" i][readonly]::-webkit-inner-spin-button,
895 | input[type="datetime-local" i][readonly]::-webkit-clear-button,
896 | input[type="datetime-local" i][readonly]::-webkit-inner-spin-button,
897 | input[type="month" i][readonly]::-webkit-clear-button,
898 | input[type="month" i][readonly]::-webkit-inner-spin-button,
899 | input[type="week" i][readonly]::-webkit-clear-button,
900 | input[type="week" i][readonly]::-webkit-inner-spin-button,
901 | input[readonly]::-webkit-calendar-picker-indicator {
902 | visibility: hidden;
903 | }
904 |
905 | /* Form controls that measure the inline size without doing actual layout
906 | need to disable `text-autospace`, if their content can be affected by
907 | the property. crbug.com/1484863 */
908 | input[type="date" i], input[type="datetime-local" i], input[type="month" i],
909 | input[type="week" i], select {
910 | text-autospace: no-autospace !important;
911 | }
912 |
913 | select {
914 | appearance: auto;
915 | box-sizing: border-box;
916 | align-items: center;
917 | white-space: pre;
918 | -webkit-rtl-ordering: logical;
919 | color: FieldText;
920 | background-color: Field;
921 | border: 1px solid light-dark(#767676, #858585);
922 | cursor: default;
923 | border-radius: 0;
924 | }
925 |
926 | select:disabled {
927 | opacity: 0.7;
928 | }
929 |
930 | /* -internal-list-box is how we specify select[multiple] */
931 | /* select[multiple] is an exception to the prohibition on sizes here
932 | because it is one of the few controls with borders that grow on zoom
933 | (to solve a nasty scrollbar location problem) */
934 | select:-internal-list-box {
935 | appearance: auto;
936 | align-items: flex-start;
937 | -internal-overflow-inline: hidden;
938 | -internal-overflow-block: scroll;
939 | vertical-align: text-bottom;
940 | white-space: nowrap;
941 | border-radius: 2px;
942 | }
943 |
944 | select:not(:-internal-list-box) {
945 | overflow: visible !important;
946 | }
947 |
948 | /* The padding here should match the value of
949 | |extraPaddingForOptionInsideOptgroup| in list_picker.js, which is the
950 | padding for select optgroup option. */
951 | select:-internal-list-box optgroup option {
952 | padding-inline-start: 20px;
953 | }
954 |
955 | select:-internal-list-box option,
956 | select:-internal-list-box optgroup {
957 | line-height: initial !important;
958 | }
959 |
960 | /* option selected, list-box focused */
961 | /* TODO(crbug.com/1244986): We should be able to remove !important here, but
962 | it breaks some WebUI menus. */
963 | select:-internal-list-box:focus option:checked,
964 | select:-internal-list-box:focus option:checked:hover {
965 | background-color: SelectedItem !important;
966 | color: SelectedItemText !important;
967 | }
968 |
969 | /* TODO(crbug.com/1244986): We should be able to remove !important here, but
970 | it breaks some WebUI menus. */
971 | select:-internal-list-box:focus option:checked:disabled {
972 | background-color: -internal-inactive-list-box-selection !important;
973 | }
974 |
975 | /* option selected, list-box not focused */
976 | select:-internal-list-box option:checked,
977 | select:-internal-list-box option:checked:hover {
978 | background-color: light-dark(#cecece, #545454);
979 | color: light-dark(#101010, #FFFFFF);
980 | }
981 |
982 | select:-internal-list-box:disabled option:checked,
983 | select:-internal-list-box option:checked:disabled,
984 | select:-internal-list-box option:checked:disabled:hover {
985 | color: light-dark(gray, #aaa);
986 | }
987 |
988 | select:-internal-list-box hr {
989 | border-style: none;
990 | margin-block-start: 0.5em;
991 | margin-block-end: 0;
992 | }
993 |
994 | select:-internal-list-box:focus-visible option:-internal-multi-select-focus {
995 | outline: auto 1px -webkit-focus-ring-color;
996 | outline-offset: -1px;
997 | }
998 |
999 | select:-internal-list-box option:hover {
1000 | background-color: initial;
1001 | }
1002 |
1003 | optgroup {
1004 | font-weight: bolder;
1005 | display: block;
1006 | }
1007 |
1008 | option {
1009 | font-weight: normal;
1010 | display: block;
1011 | padding-inline: 2px;
1012 | padding-block-start: 0;
1013 | padding-block-end: 1px;
1014 | white-space: nowrap;
1015 | min-block-size: 1.2em;
1016 | }
1017 |
1018 | /* The following select style rules have to go after the other
1019 | select styles in order to have higher precedence. */
1020 |
1021 | /* TODO(crbug.com/880258): Use different styles for
1022 | `-internal-autofill-previewed` and `-internal-autofill-selected`. */
1023 | input:-internal-autofill-previewed,
1024 | input:-internal-autofill-selected,
1025 | textarea:-internal-autofill-previewed,
1026 | textarea:-internal-autofill-selected,
1027 | select:-internal-autofill-previewed,
1028 | select:-internal-autofill-selected {
1029 | appearance: menulist-button;
1030 | background-image:none !important;
1031 | background-color: light-dark(#E8F0FE, rgba(70,90,126,0.4)) !important;
1032 | color: FieldText !important;
1033 | }
1034 |
1035 | input:disabled,
1036 | select:disabled,
1037 | textarea:disabled {
1038 | border-color: rgba(118, 118, 118, 0.3);
1039 | }
1040 |
1041 | select:disabled,
1042 | optgroup:disabled,
1043 | option:disabled,
1044 | select[disabled]>option {
1045 | color: light-dark(GrayText, #aaa);
1046 | }
1047 |
1048 | output {
1049 | display: inline;
1050 | }
1051 |
1052 | /* meter */
1053 |
1054 | meter {
1055 | appearance: auto;
1056 | box-sizing: border-box;
1057 | display: inline-block;
1058 | block-size: 1em;
1059 | inline-size: 5em;
1060 | vertical-align: -0.2em;
1061 | -webkit-user-modify: read-only !important;
1062 | }
1063 |
1064 | meter::-webkit-meter-inner-element {
1065 | appearance: inherit;
1066 | box-sizing: inherit;
1067 | display: none;
1068 | -webkit-user-modify: read-only !important;
1069 | block-size: 100%;
1070 | inline-size: 100%;
1071 | }
1072 |
1073 | meter::-webkit-meter-inner-element:-internal-shadow-host-has-appearance {
1074 | display: grid;
1075 | grid-template-rows: 1fr [line1] 2fr [line2] 1fr;
1076 | position: relative;
1077 | }
1078 |
1079 | meter::-internal-fallback:-internal-shadow-host-has-appearance {
1080 | display: none;
1081 | }
1082 |
1083 | meter::-webkit-meter-bar {
1084 | block-size: 100%;
1085 | inline-size: 100%;
1086 | -webkit-user-modify: read-only !important;
1087 | background: light-dark(#efefef, #3B3B3B);
1088 | border: thin solid light-dark(rgba(118, 118, 118, 0.3), #858585);
1089 | grid-row-start: line1;
1090 | grid-row-end: line2;
1091 | border-radius: 20px;
1092 | box-sizing: border-box;
1093 | align-self: unsafe center;
1094 | position: absolute;
1095 | overflow: hidden;
1096 | }
1097 |
1098 | meter::-webkit-meter-optimum-value {
1099 | block-size: 100%;
1100 | -webkit-user-modify: read-only !important;
1101 | box-sizing: border-box;
1102 | background: light-dark(#107c10, #74b374)
1103 | }
1104 |
1105 | meter::-webkit-meter-suboptimum-value {
1106 | block-size: 100%;
1107 | -webkit-user-modify: read-only !important;
1108 | box-sizing: border-box;
1109 | background: light-dark(#ffb900, #f2c812)
1110 | }
1111 |
1112 | meter::-webkit-meter-even-less-good-value {
1113 | block-size: 100%;
1114 | -webkit-user-modify: read-only !important;
1115 | box-sizing: border-box;
1116 | background: light-dark(#d83b01, #e98f6d)
1117 | }
1118 |
1119 | /* progress */
1120 |
1121 | progress {
1122 | appearance: auto;
1123 | box-sizing: border-box;
1124 | display: inline-block;
1125 | block-size: 1em;
1126 | inline-size: 10em;
1127 | vertical-align: -0.2em;
1128 | }
1129 |
1130 | progress::-webkit-progress-inner-element {
1131 | box-sizing: inherit;
1132 | -webkit-user-modify: read-only;
1133 | block-size: 100%;
1134 | inline-size: 100%;
1135 | }
1136 |
1137 | progress::-webkit-progress-bar {
1138 | background-color: gray;
1139 | block-size: 100%;
1140 | inline-size: 100%;
1141 | -webkit-user-modify: read-only !important;
1142 | box-sizing: border-box;
1143 | }
1144 |
1145 | progress::-webkit-progress-value {
1146 | background-color: green;
1147 | block-size: 100%;
1148 | inline-size: 50%; /* should be removed later */
1149 | -webkit-user-modify: read-only !important;
1150 | box-sizing: border-box;
1151 | }
1152 |
1153 | /* inline elements */
1154 |
1155 | u, ins {
1156 | text-decoration: underline
1157 | }
1158 |
1159 | abbr[title], acronym[title] {
1160 | text-decoration: dotted underline;
1161 | }
1162 |
1163 | strong, b {
1164 | font-weight: bold
1165 | }
1166 |
1167 | i, cite, em, var, address, dfn {
1168 | font-style: italic
1169 | }
1170 |
1171 | tt, code, kbd, samp {
1172 | font-family: monospace
1173 | }
1174 |
1175 | pre, xmp, plaintext, listing {
1176 | display: block;
1177 | font-family: monospace;
1178 | white-space: pre;
1179 | margin: 1__qem 0
1180 | }
1181 |
1182 | mark {
1183 | background-color: Mark;
1184 | color: MarkText;
1185 | }
1186 |
1187 | big {
1188 | font-size: larger
1189 | }
1190 |
1191 | small {
1192 | font-size: smaller
1193 | }
1194 |
1195 | s, strike, del {
1196 | text-decoration: line-through
1197 | }
1198 |
1199 | sub {
1200 | vertical-align: sub;
1201 | font-size: smaller
1202 | }
1203 |
1204 | sup {
1205 | vertical-align: super;
1206 | font-size: smaller
1207 | }
1208 |
1209 | nobr {
1210 | white-space: nowrap
1211 | }
1212 |
1213 | /* states */
1214 |
1215 | :-internal-selector-fragment-anchor {
1216 | outline: Highlight 3px solid;
1217 | }
1218 |
1219 | :focus-visible {
1220 | outline: auto 1px -webkit-focus-ring-color
1221 | }
1222 |
1223 | html:focus-visible, body:focus-visible {
1224 | outline: none
1225 | }
1226 |
1227 | embed:focus-visible, iframe:focus-visible, object:focus-visible {
1228 | outline: none
1229 | }
1230 |
1231 | input:focus-visible, textarea:focus-visible, select:focus-visible {
1232 | outline-offset: 0;
1233 | }
1234 |
1235 | input[type="button" i]:focus-visible,
1236 | input[type="file" i]:focus-visible,
1237 | input[type="hidden" i]:focus-visible,
1238 | input[type="image" i]:focus-visible,
1239 | input[type="reset" i]:focus-visible,
1240 | input[type="submit" i]:focus-visible,
1241 | input[type="file" i]:focus-visible::-webkit-file-upload-button {
1242 | outline-offset: 0
1243 | }
1244 |
1245 | input[type="checkbox" i]:focus-visible,
1246 | input[type="radio" i]:focus-visible {
1247 | outline-offset: 2px;
1248 | }
1249 |
1250 |
1251 | input[type="date" i]::-webkit-calendar-picker-indicator,
1252 | input[type="datetime-local" i]::-webkit-calendar-picker-indicator,
1253 | input[type="month" i]::-webkit-calendar-picker-indicator,
1254 | input[type="week" i]::-webkit-calendar-picker-indicator {
1255 | background-image: light-dark(url(images/calendar_icon.svg), url(images/calendar_icon_white.svg));
1256 | background-origin: content-box;
1257 | background-repeat: no-repeat;
1258 | background-size: contain;
1259 | block-size: 1.0em;
1260 | inline-size: 1.0em;
1261 | opacity: 1;
1262 | outline: none;
1263 | padding: 2px;
1264 | }
1265 |
1266 | input[type="date" i]::-webkit-calendar-picker-indicator:focus-visible,
1267 | input[type="datetime-local" i]::-webkit-calendar-picker-indicator:focus-visible,
1268 | input[type="month" i]::-webkit-calendar-picker-indicator:focus-visible,
1269 | input[type="week" i]::-webkit-calendar-picker-indicator:focus-visible {
1270 | outline: solid 2px -webkit-focus-ring-color;
1271 | outline-offset: -2px;
1272 | }
1273 |
1274 | input[type="time" i]::-webkit-calendar-picker-indicator {
1275 | background-image: light-dark(url(images/time_icon.svg), url(images/time_icon_white.svg));
1276 | background-origin: content-box;
1277 | background-repeat: no-repeat;
1278 | background-size: contain;
1279 | opacity: 1;
1280 | outline: none;
1281 | margin-inline-start: 8px;
1282 | padding-inline-start: 3px;
1283 | padding-inline-end: 3px;
1284 | padding-block: 3px;
1285 | block-size: 1.05em;
1286 | inline-size: 1.05em;
1287 | }
1288 |
1289 | input[type="time" i]::-webkit-calendar-picker-indicator:focus-visible {
1290 | outline: solid 2px -webkit-focus-ring-color;
1291 | outline-offset: -2px;
1292 | }
1293 |
1294 | input::-webkit-calendar-picker-indicator:hover {
1295 | background-color: initial;
1296 | }
1297 |
1298 | input::-webkit-datetime-edit-ampm-field:focus,
1299 | input::-webkit-datetime-edit-day-field:focus,
1300 | input::-webkit-datetime-edit-hour-field:focus,
1301 | input::-webkit-datetime-edit-millisecond-field:focus,
1302 | input::-webkit-datetime-edit-minute-field:focus,
1303 | input::-webkit-datetime-edit-month-field:focus,
1304 | input::-webkit-datetime-edit-second-field:focus,
1305 | input::-webkit-datetime-edit-week-field:focus,
1306 | input::-webkit-datetime-edit-year-field:focus {
1307 | background-color: light-dark(highlight, #99C8FF);
1308 | color: light-dark(highlighttext, #000000);
1309 | outline: none;
1310 | }
1311 |
1312 | input::-webkit-datetime-edit-year-field[disabled],
1313 | input::-webkit-datetime-edit-month-field[disabled],
1314 | input::-webkit-datetime-edit-week-field[disabled],
1315 | input::-webkit-datetime-edit-day-field[disabled],
1316 | input::-webkit-datetime-edit-ampm-field[disabled],
1317 | input::-webkit-datetime-edit-hour-field[disabled],
1318 | input::-webkit-datetime-edit-millisecond-field[disabled],
1319 | input::-webkit-datetime-edit-minute-field[disabled],
1320 | input::-webkit-datetime-edit-second-field[disabled] {
1321 | color: light-dark(GrayText, rgb(165, 165, 165));
1322 | }
1323 |
1324 | a:-webkit-any-link {
1325 | color: -webkit-link;
1326 | text-decoration: underline;
1327 | cursor: pointer;
1328 | }
1329 |
1330 | a:-webkit-any-link:active {
1331 | color: -webkit-activelink
1332 | }
1333 |
1334 | a:-webkit-any-link:read-write {
1335 | cursor: text;
1336 | }
1337 |
1338 | a:-webkit-any-link:focus-visible {
1339 | outline-offset: 1px;
1340 | }
1341 |
1342 | /* HTML5 ruby elements */
1343 |
1344 | ruby, rt {
1345 | text-indent: 0; /* blocks used for ruby rendering should not trigger this */
1346 | }
1347 |
1348 | ruby {
1349 | display: ruby;
1350 | }
1351 |
1352 | rt {
1353 | line-height: normal;
1354 | text-emphasis: none;
1355 | }
1356 |
1357 | ruby > rt {
1358 | display: ruby-text;
1359 | font-size: 50%;
1360 | text-align: start;
1361 | }
1362 |
1363 | /* other elements */
1364 |
1365 | frameset, frame {
1366 | display: block
1367 | }
1368 |
1369 | frameset {
1370 | border-color: inherit
1371 | }
1372 |
1373 | iframe {
1374 | border: 2px inset
1375 | }
1376 |
1377 | fencedframe {
1378 | border: 2px inset;
1379 | object-fit: contain !important;
1380 | object-position: 50% 50% !important;
1381 | }
1382 |
1383 | details {
1384 | display: block
1385 | }
1386 |
1387 | summary {
1388 | display: block
1389 | }
1390 |
1391 | /*
1392 | * https://html.spec.whatwg.org/C/#the-details-and-summary-elements
1393 | * The specification doesn't have |details >| and |:first-of-type|.
1394 | * We add them because:
1395 | * - We had provided |summary { display: block }| for a long time,
1396 | * there are sites using without details, and they
1397 | * expect that is not a list-item.
1398 | * - Firefox does so.
1399 | */
1400 | details > summary:first-of-type {
1401 | display: list-item;
1402 | counter-increment: list-item 0;
1403 | list-style: disclosure-closed inside;
1404 | }
1405 |
1406 | details[open] > summary:first-of-type {
1407 | list-style-type: disclosure-open;
1408 | }
1409 |
1410 | /* https://html.spec.whatwg.org/multipage/rendering.html#bidi-rendering */
1411 | /* This chunk of styles interacts with the `name == html_names::kDirAttr` case
1412 | in HTMLElement::CollectStyleForPresentationAttribute(). Make sure any changes
1413 | here are congruent with changes made there. */
1414 | address, blockquote, center, div, figure, figcaption, footer, form, header, hr,
1415 | legend, listing, main, p, plaintext, pre, summary, xmp, article, aside, h1, h2,
1416 | h3, h4, h5, h6, hgroup, nav, section, search, table, caption, colgroup, col,
1417 | thead, tbody, tfoot, tr, td, th, dir, dd, dl, dt, menu, ol, ul, li, bdi,
1418 | output, [dir=ltr i], [dir=rtl i], [dir=auto i] {
1419 | unicode-bidi: isolate;
1420 | }
1421 | bdo, bdo[dir] {
1422 | unicode-bidi: isolate-override;
1423 | }
1424 | textarea[dir=auto i], pre[dir=auto i] {
1425 | unicode-bidi: plaintext;
1426 | }
1427 |
1428 | dialog {
1429 | display: none;
1430 | /* https://html.spec.whatwg.org/multipage/rendering.html#flow-content-3 */
1431 | position: absolute;
1432 | inset-inline-start: 0;
1433 | inset-inline-end: 0;
1434 | width: fit-content;
1435 | height: fit-content;
1436 | margin: auto;
1437 | border: solid;
1438 | padding: 1em;
1439 | background-color: Canvas;
1440 | color: CanvasText;
1441 | }
1442 |
1443 | dialog[open] {
1444 | display: block;
1445 | }
1446 |
1447 | dialog:-internal-dialog-in-top-layer {
1448 | /* https://html.spec.whatwg.org/multipage/rendering.html#flow-content-3 */
1449 | position: fixed;
1450 | overflow: auto;
1451 | inset-block-start: 0;
1452 | inset-block-end: 0;
1453 | max-width: calc(100% - 6px - 2em);
1454 | max-height: calc(100% - 6px - 2em);
1455 | /* https://github.com/w3c/csswg-drafts/issues/6939#issuecomment-1016679588 */
1456 | user-select: text;
1457 | visibility: visible;
1458 | }
1459 |
1460 | dialog:modal {
1461 | overlay: auto !important;
1462 | }
1463 |
1464 | /* TODO(foolip): In the Fullscreen spec, there's a ::backdrop block with the
1465 | properties shared with :fullscreen::backdrop (see fullscreen.css). */
1466 | dialog:-internal-dialog-in-top-layer::backdrop {
1467 | position: fixed;
1468 | inset: 0;
1469 | /* https://html.spec.whatwg.org/multipage/rendering.html#flow-content-3 */
1470 | background: rgba(0,0,0,0.1);
1471 | }
1472 |
1473 | slot {
1474 | display: contents;
1475 | }
1476 |
1477 | [popover] {
1478 | position: fixed;
1479 | inset: 0;
1480 | width: fit-content;
1481 | height: fit-content;
1482 | margin: auto;
1483 | border: solid;
1484 | padding: 0.25em;
1485 | overflow: auto;
1486 | color: CanvasText;
1487 | background-color: Canvas;
1488 | }
1489 |
1490 | /* This ensures that popovers get display:none when they are not open, and we
1491 | need to be careful not to affect `` when open as a dialog. */
1492 | [popover]:not(:popover-open):not(dialog[open]) {
1493 | display:none;
1494 | }
1495 |
1496 | /* The UA stylesheet has a rule like dialog{display:none}, so
1497 | needs this to be visible when it is open as a popover. */
1498 | dialog:popover-open {
1499 | display:block;
1500 | }
1501 |
1502 | /* This rule matches popovers (dialog or not) that are currently open as a
1503 | popover. */
1504 | [popover]:popover-open:not(dialog), dialog:popover-open:not([open]) {
1505 | overlay: auto !important;
1506 | }
1507 |
1508 | [popover]:-internal-popover-in-top-layer::backdrop {
1509 | /* From the (modified) fullscreen spec: https://fullscreen.spec.whatwg.org/#user-agent-level-style-sheet-defaults: */
1510 | position: fixed;
1511 | inset: 0;
1512 | /* Specific to [popover]: */
1513 | pointer-events: none !important;
1514 | background-color: transparent;
1515 | }
1516 |
1517 | /* Pagination */
1518 |
1519 | @media print {
1520 | @page {
1521 | /* FIXME: Define the right default values for page properties. */
1522 | size: auto;
1523 |
1524 | padding: 0px;
1525 | border-width: 0px;
1526 | }
1527 |
1528 | /* Allows table headers and footers to print at the top / bottom of each
1529 | page. */
1530 | thead { break-inside: avoid; }
1531 | tfoot { break-inside: avoid; }
1532 | }
1533 |
1534 | /* spelling/grammar error pseudos */
1535 |
1536 | html::spelling-error {
1537 | text-decoration: -internal-spelling-error-color spelling-error;
1538 | }
1539 |
1540 | html::grammar-error {
1541 | text-decoration: -internal-grammar-error-color grammar-error;
1542 | }
1543 |
1544 | /* noscript is handled internally, as it depends on settings. */
1545 |
--------------------------------------------------------------------------------
/ua-sheets/firefox.css:
--------------------------------------------------------------------------------
1 | /* This Source Code Form is subject to the terms of the Mozilla Public
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this
3 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 |
5 | @namespace url(http://www.w3.org/1999/xhtml); /* set default namespace to HTML */
6 | @namespace xul url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);
7 |
8 | @font-face {
9 | font-family: -moz-bullet-font;
10 | src: url("data:font/woff2;base64,d09GMgABAAAAAARYAAwAAAAACqAAAAQFAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cBmAAgwIRCAqKDIcYATYCJAMsCxgABCAFg2AHIBtDCFGUrM0MyM/DGJyndUclpZwnU8QPQ6wsFOHO+/yHNvV9IEqSQgsVJW2p+uZkohKbVExPEz/JUW7zk6rzYH9723UJ/4DzBII8CSzwgFMOOE4KW2rjAmh4qQWSiid60f7Y9FsXScfUpeluagFqTTQYyoQaQSubXil0lHRsBehAI9KofG/6ogF9/Hl6lBd920LmeTxj8JXBfFWKwYAY3QsAAXD17ZAB4M6Ocv/nsZlkaTl0gLipewIQEMB2d9lKDAT1ZjP/F7jmWsQ3wn8AZvZFgIIC7ESh4AP1iFb4nPnfWyJgcQArpUWqW9W96j71kHr/L9a/dNRbj+8/ujXLWCMMFYVYiXoEaZQ4YOC/E7Dkz3JEjaokxAP6i3hIUjv9fwYyE6I3yIozKkaGN63fP36aeLJmxlRZwZiFziPrMVvOlnCF98SQJfGO/Xllv/FnWAcEjrMqaMCPwVmktCDO5zzxcXqeKS+QFxYnvJLFVzKZAFcKnlZRwHEPVM3mXxNt2gdZEpkKaIAG9gbgDTU5SOYDcmX7Rr61evEA1U+1/3SMb6FFtUqh55nYleE95j2zPNxzdlnGoR5xu/PxQKzb7bFaFLvl79Z54Lx9OH+g0/PPYlcsNo/nwP2V2vsHUHsV4KqEsd+e2r6Fu2v7abkfvsb65b41uwvRvqewH25kTntqolbYsEr5DAqrX97a0jrBLjFRExVHR2dH1Za6unyZfCVZHqQP0BtYjuUYlg9J6SurcrTEiOr26m5xcuTW4Sp3ljkUYWJ9+/iVmzbzPpcuXnGeqU3U7IKjz/qeKSSCltyhuSoxkqqTZX+DXt/OMmAikC8SzVD0jg3dbhIE0eUqc04UFFrxCSXzFxgHclzRMPe0ocOjiKRoSZISE0OtpkBjECdxkkRM1KiaJV0ed0V5umBP1wyUPL2ZBGLSDh5itIHahHRF0CY5nZMGib6T3cOmDvcTSZKuPiFJFpPRGNTIOq7jl5OjDiGIoo6qEE0QtfQJ3VYUD2RZvbm5uWWCWOgR4HXAk5GxLEO0izhLdvPTfpTV3xeOnOfT96uR53CdPrPq+P9HZvzO4QCMmDr7lTcNZorT6iMOYgI+IxClMzeCspeoLt5ABGSpta6gRZmQSnzk9e9jmOAYKC7RsyGMYaB6MpbNKMiRq2U6vI0yPZuTMiODFytMrGEBi7pjGgkAMoaNLGOFSoYceaZMx1+XTC/UNpmRzY1nmwT7AIcK+fK5lYNjz893lwMTuXlD2AKl8Md+24AxitRaLH/MUMqd9z862owy/bZTuZUqs1iRQop0KdLgZwPc9JS0lprnkef1gitBCRhjgV+vjGK8BfIV8CrlVghj1vIyZfyC/AJvqbsQYAEA/v+IAQA=");
11 | }
12 |
13 | /* bidi */
14 |
15 | :-moz-has-dir-attr {
16 | unicode-bidi: isolate;
17 | }
18 | :-moz-dir-attr-rtl {
19 | direction: rtl;
20 | }
21 | :-moz-dir-attr-ltr {
22 | direction: ltr;
23 | }
24 |
25 | :-moz-dir-attr-like-auto:dir(ltr) { direction: ltr; }
26 | :-moz-dir-attr-like-auto:dir(rtl) { direction: rtl; }
27 |
28 | /* https://html.spec.whatwg.org/#bidi-rendering */
29 | input[type=tel]:dir(ltr) {
30 | direction: ltr;
31 | }
32 |
33 | /* To ensure http://www.w3.org/TR/REC-html40/struct/dirlang.html#style-bidi:
34 | *
35 | * "When a block element that does not have a dir attribute is transformed to
36 | * the style of an inline element by a style sheet, the resulting presentation
37 | * should be equivalent, in terms of bidirectional formatting, to the
38 | * formatting obtained by explicitly adding a dir attribute (assigned the
39 | * inherited value) to the transformed element."
40 | *
41 | * and the rules in http://dev.w3.org/html5/spec/rendering.html#rendering
42 | */
43 |
44 | address,
45 | article,
46 | aside,
47 | blockquote,
48 | body,
49 | caption,
50 | center,
51 | col,
52 | colgroup,
53 | dd,
54 | dir,
55 | div,
56 | dl,
57 | dt,
58 | fieldset,
59 | figcaption,
60 | figure,
61 | footer,
62 | form,
63 | h1,
64 | h2,
65 | h3,
66 | h4,
67 | h5,
68 | h6,
69 | header,
70 | hgroup,
71 | hr,
72 | html,
73 | legend,
74 | li,
75 | listing,
76 | main,
77 | marquee,
78 | menu,
79 | nav,
80 | noframes,
81 | ol,
82 | p,
83 | plaintext,
84 | pre,
85 | search,
86 | section,
87 | summary,
88 | table,
89 | tbody,
90 | td,
91 | tfoot,
92 | th,
93 | thead,
94 | tr,
95 | ul,
96 | xmp {
97 | unicode-bidi: isolate;
98 | }
99 |
100 | bdi, output {
101 | unicode-bidi: isolate;
102 | }
103 | /* We need the "bdo:-moz-has-dir-attr" bit because "bdo" has lower
104 | specificity than the ":-moz-has-dir-attr" selector above. */
105 | bdo, bdo:-moz-has-dir-attr {
106 | unicode-bidi: isolate-override;
107 | }
108 | textarea:-moz-dir-attr-like-auto,
109 | pre:-moz-dir-attr-like-auto {
110 | unicode-bidi: plaintext;
111 | }
112 |
113 | /* blocks */
114 |
115 | article,
116 | aside,
117 | details,
118 | div,
119 | dt,
120 | figcaption,
121 | footer,
122 | form,
123 | header,
124 | hgroup,
125 | html,
126 | main,
127 | nav,
128 | search,
129 | section,
130 | summary {
131 | display: block;
132 | }
133 |
134 | body {
135 | display: block;
136 | margin: 8px;
137 | }
138 |
139 | p, dl {
140 | display: block;
141 | margin-block-start: 1em;
142 | margin-block-end: 1em;
143 | }
144 |
145 | dd {
146 | display: block;
147 | margin-inline-start: 40px;
148 | }
149 |
150 | blockquote, figure {
151 | display: block;
152 | margin-block: 1em;
153 | margin-inline: 40px;
154 | }
155 |
156 | address {
157 | display: block;
158 | font-style: italic;
159 | }
160 |
161 | center {
162 | display: block;
163 | text-align: -moz-center;
164 | }
165 |
166 | h1 {
167 | display: block;
168 | font-size: 2em;
169 | font-weight: bold;
170 | margin-block: .67em;
171 | }
172 |
173 | h2 {
174 | display: block;
175 | font-size: 1.5em;
176 | font-weight: bold;
177 | margin-block: .83em;
178 | }
179 |
180 | h3 {
181 | display: block;
182 | font-size: 1.17em;
183 | font-weight: bold;
184 | margin-block: 1em;
185 | }
186 |
187 | h4 {
188 | display: block;
189 | font-size: 1.00em;
190 | font-weight: bold;
191 | margin-block: 1.33em;
192 | }
193 |
194 | h5 {
195 | display: block;
196 | font-size: 0.83em;
197 | font-weight: bold;
198 | margin-block: 1.67em;
199 | }
200 |
201 | h6 {
202 | display: block;
203 | font-size: 0.67em;
204 | font-weight: bold;
205 | margin-block: 2.33em;
206 | }
207 |
208 | /* stylelint-disable-next-line media-query-no-invalid */
209 | @media (-moz-bool-pref: "layout.css.h1-in-section-ua-styles.enabled") {
210 | :is(article, aside, nav, section)
211 | h1 {
212 | margin-block: 0.83em;
213 | font-size: 1.50em;
214 | }
215 |
216 | :is(article, aside, nav, section)
217 | :is(article, aside, nav, section)
218 | h1 {
219 | margin-block: 1.00em;
220 | font-size: 1.17em;
221 | }
222 |
223 | :is(article, aside, nav, section)
224 | :is(article, aside, nav, section)
225 | :is(article, aside, nav, section)
226 | h1 {
227 | margin-block: 1.33em;
228 | font-size: 1.00em;
229 | }
230 |
231 | :is(article, aside, nav, section)
232 | :is(article, aside, nav, section)
233 | :is(article, aside, nav, section)
234 | :is(article, aside, nav, section)
235 | h1 {
236 | margin-block: 1.67em;
237 | font-size: 0.83em;
238 | }
239 |
240 | :is(article, aside, nav, section)
241 | :is(article, aside, nav, section)
242 | :is(article, aside, nav, section)
243 | :is(article, aside, nav, section)
244 | :is(article, aside, nav, section)
245 | h1 {
246 | margin-block: 2.33em;
247 | font-size: 0.67em;
248 | }
249 | }
250 |
251 | listing {
252 | display: block;
253 | font-family: -moz-fixed;
254 | font-size: medium;
255 | white-space: pre;
256 | margin-block: 1em;
257 | }
258 |
259 | xmp, pre, plaintext {
260 | display: block;
261 | font-family: -moz-fixed;
262 | white-space: pre;
263 | margin-block: 1em;
264 | }
265 |
266 | /* tables */
267 |
268 | table {
269 | display: table;
270 | border-spacing: 2px;
271 | border-collapse: separate;
272 | /* XXXldb do we want this if we're border-collapse:collapse ? */
273 | box-sizing: border-box;
274 | text-indent: 0;
275 | }
276 |
277 | table[align="left"] {
278 | float: left;
279 | }
280 |
281 | table[align="right"] {
282 | float: right;
283 | text-align: start;
284 | }
285 |
286 |
287 | /* border collapse rules */
288 |
289 | /* Set hidden if we have 'frame' or 'rules' attribute.
290 | Set it on all sides when we do so there's more consistency
291 | in what authors should expect */
292 |
293 | /* Put this first so 'border' and 'frame' rules can override it. */
294 | table[rules] {
295 | border-width: thin;
296 | border-style: hidden;
297 | }
298 |
299 | /* 'border' before 'frame' so 'frame' overrides
300 | A border with a given value should, of course, pass that value
301 | as the border-width in pixels -> attr mapping */
302 |
303 | /* :-moz-table-border-nonzero is like [border]:not([border="0"]) except it
304 | also checks for other zero-like values according to HTML attribute
305 | parsing rules */
306 | table:-moz-table-border-nonzero {
307 | border-width: thin;
308 | border-style: outset;
309 | }
310 |
311 | table[frame] {
312 | border: thin hidden;
313 | }
314 |
315 | /* specificity must beat table:-moz-table-border-nonzero rule above */
316 | table[frame="void"] { border-style: hidden; }
317 | table[frame="above"] { border-style: outset hidden hidden hidden; }
318 | table[frame="below"] { border-style: hidden hidden outset hidden; }
319 | table[frame="lhs"] { border-style: hidden hidden hidden outset; }
320 | table[frame="rhs"] { border-style: hidden outset hidden hidden; }
321 | table[frame="hsides"] { border-style: outset hidden; }
322 | table[frame="vsides"] { border-style: hidden outset; }
323 | table[frame="box"],
324 | table[frame="border"] { border-style: outset; }
325 |
326 |
327 | /* Internal Table Borders */
328 |
329 | /* 'border' cell borders first */
330 |
331 | table:-moz-table-border-nonzero > * > tr > td,
332 | table:-moz-table-border-nonzero > * > tr > th,
333 | table:-moz-table-border-nonzero > * > td,
334 | table:-moz-table-border-nonzero > * > th,
335 | table:-moz-table-border-nonzero > td,
336 | table:-moz-table-border-nonzero > th
337 | {
338 | border-width: thin;
339 | border-style: inset;
340 | }
341 |
342 | /* collapse only if rules are really specified */
343 | table[rules]:not([rules="none"], [rules=""]) {
344 | border-collapse: collapse;
345 | }
346 |
347 | /* only specified rules override 'border' settings
348 | (increased specificity to achieve this) */
349 | table[rules]:not([rules=""])> tr > td,
350 | table[rules]:not([rules=""])> * > tr > td,
351 | table[rules]:not([rules=""])> tr > th,
352 | table[rules]:not([rules=""])> * > tr > th,
353 | table[rules]:not([rules=""])> td,
354 | table[rules]:not([rules=""])> th
355 | {
356 | border-width: thin;
357 | border-style: none;
358 | }
359 |
360 |
361 | table[rules][rules="none"] > tr > td,
362 | table[rules][rules="none"] > * > tr > td,
363 | table[rules][rules="none"] > tr > th,
364 | table[rules][rules="none"] > * > tr > th,
365 | table[rules][rules="none"] > td,
366 | table[rules][rules="none"] > th
367 | {
368 | border-width: thin;
369 | border-style: none;
370 | }
371 |
372 | table[rules][rules="all"] > tr > td,
373 | table[rules][rules="all"] > * > tr > td,
374 | table[rules][rules="all"] > tr > th,
375 | table[rules][rules="all"] > * > tr > th,
376 | table[rules][rules="all"] > td,
377 | table[rules][rules="all"] > th
378 | {
379 | border-width: thin;
380 | border-style: solid;
381 | }
382 |
383 | table[rules][rules="rows"] > tr,
384 | table[rules][rules="rows"] > * > tr {
385 | border-block-start-width: thin;
386 | border-block-end-width: thin;
387 | border-block-start-style: solid;
388 | border-block-end-style: solid;
389 | }
390 |
391 |
392 | table[rules][rules="cols"] > tr > td,
393 | table[rules][rules="cols"] > * > tr > td,
394 | table[rules][rules="cols"] > tr > th,
395 | table[rules][rules="cols"] > * > tr > th {
396 | border-inline-width: thin;
397 | border-inline-style: solid;
398 | }
399 |
400 | table[rules][rules="groups"] > colgroup {
401 | border-inline-width: thin;
402 | border-inline-style: solid;
403 | }
404 | table[rules][rules="groups"] > tfoot,
405 | table[rules][rules="groups"] > thead,
406 | table[rules][rules="groups"] > tbody {
407 | border-block-width: thin;
408 | border-block-style: solid;
409 | }
410 |
411 |
412 | /* caption inherits from table not table-outer */
413 | caption {
414 | display: table-caption;
415 | text-align: center;
416 | }
417 |
418 | table[align="center"] > caption {
419 | margin-inline: auto;
420 | }
421 |
422 | table[align="center"] > caption[align="left"]:dir(ltr) {
423 | margin-inline-end: 0;
424 | }
425 | table[align="center"] > caption[align="left"]:dir(rtl) {
426 | margin-inline-start: 0;
427 | }
428 |
429 | table[align="center"] > caption[align="right"]:dir(ltr) {
430 | margin-inline-start: 0;
431 | }
432 | table[align="center"] > caption[align="right"]:dir(rtl) {
433 | margin-inline-end: 0;
434 | }
435 |
436 | tr {
437 | display: table-row;
438 | vertical-align: inherit;
439 | }
440 |
441 | col {
442 | display: table-column;
443 | }
444 |
445 | colgroup {
446 | display: table-column-group;
447 | }
448 |
449 | tbody {
450 | display: table-row-group;
451 | vertical-align: middle;
452 | }
453 |
454 | thead {
455 | display: table-header-group;
456 | vertical-align: middle;
457 | }
458 |
459 | tfoot {
460 | display: table-footer-group;
461 | vertical-align: middle;
462 | }
463 |
464 | /* for XHTML tables without tbody */
465 | table > tr {
466 | vertical-align: middle;
467 | }
468 |
469 | td {
470 | display: table-cell;
471 | vertical-align: inherit;
472 | text-align: unset;
473 | padding: 1px;
474 | }
475 |
476 | th {
477 | display: table-cell;
478 | vertical-align: inherit;
479 | font-weight: bold;
480 | padding: 1px;
481 | text-align: -moz-center-or-inherit;
482 | }
483 |
484 | :is(tr, tbody, thead, tfoot, table) > form:-moz-is-html {
485 | /* Important: don't show these forms in HTML */
486 | display: none !important;
487 | }
488 |
489 | table[bordercolor] > tbody,
490 | table[bordercolor] > thead,
491 | table[bordercolor] > tfoot,
492 | table[bordercolor] > col,
493 | table[bordercolor] > colgroup,
494 | table[bordercolor] > tr,
495 | table[bordercolor] > * > tr,
496 | table[bordercolor] > tr > td,
497 | table[bordercolor] > * > tr > td,
498 | table[bordercolor] > tr > th,
499 | table[bordercolor] > * > tr > th {
500 | border-color: inherit;
501 | }
502 |
503 | /* inlines */
504 |
505 | q:before {
506 | content: open-quote;
507 | }
508 |
509 | q:after {
510 | content: close-quote;
511 | }
512 |
513 | b, strong {
514 | font-weight: bolder;
515 | }
516 |
517 | i, cite, em, var, dfn {
518 | font-style: italic;
519 | }
520 |
521 | tt, code, kbd, samp {
522 | font-family: -moz-fixed;
523 | }
524 |
525 | u, ins {
526 | text-decoration: underline;
527 | }
528 |
529 | s, strike, del {
530 | text-decoration: line-through;
531 | }
532 |
533 | big {
534 | font-size: larger;
535 | }
536 |
537 | small {
538 | font-size: smaller;
539 | }
540 |
541 | sub {
542 | vertical-align: sub;
543 | font-size: smaller;
544 | }
545 |
546 | sup {
547 | vertical-align: super;
548 | font-size: smaller;
549 | }
550 |
551 | nobr {
552 | white-space: nowrap;
553 | }
554 |
555 | mark {
556 | background: Mark;
557 | color: MarkText;
558 | }
559 |
560 | /* titles */
561 | abbr[title], acronym[title] {
562 | text-decoration: dotted underline;
563 | }
564 |
565 | /* lists */
566 |
567 | ul, menu, dir {
568 | display: block;
569 | list-style-type: disc;
570 | margin-block-start: 1em;
571 | margin-block-end: 1em;
572 | padding-inline-start: 40px;
573 | }
574 |
575 | ul, ol, menu {
576 | counter-reset: list-item;
577 | }
578 |
579 | ol {
580 | display: block;
581 | list-style-type: decimal;
582 | margin-block-start: 1em;
583 | margin-block-end: 1em;
584 | padding-inline-start: 40px;
585 | }
586 |
587 | li {
588 | display: list-item;
589 | text-align: match-parent;
590 | }
591 |
592 | /* nested lists have no top/bottom margins */
593 | :is(ul, ol, dir, menu, dl) ul,
594 | :is(ul, ol, dir, menu, dl) ol,
595 | :is(ul, ol, dir, menu, dl) dir,
596 | :is(ul, ol, dir, menu, dl) menu,
597 | :is(ul, ol, dir, menu, dl) dl {
598 | margin-block: 0;
599 | }
600 |
601 | /* 2 deep unordered lists use a circle */
602 | :is(ol, ul, menu, dir) ul,
603 | :is(ol, ul, menu, dir) menu,
604 | :is(ol, ul, menu, dir) dir {
605 | list-style-type: circle;
606 | }
607 |
608 | /* 3 deep (or more) unordered lists use a square */
609 | :is(ol, ul, menu, dir) :is(ol, ul, menu, dir) ul,
610 | :is(ol, ul, menu, dir) :is(ol, ul, menu, dir) menu,
611 | :is(ol, ul, menu, dir) :is(ol, ul, menu, dir) dir {
612 | list-style-type: square;
613 | }
614 |
615 |
616 | /* leafs */
617 |
618 | /* noshade and color attributes are handled completely by
619 | * HTMLHRElement::MapAttributesIntoRule.
620 | * https://html.spec.whatwg.org/#the-hr-element-2
621 | */
622 | hr {
623 | color: gray;
624 | border-width: 1px;
625 | border-style: inset;
626 | margin-block: 0.5em;
627 | margin-inline: auto;
628 | overflow: hidden;
629 |
630 | /* FIXME: This is not really per spec */
631 | display: block;
632 | }
633 |
634 | hr[size="1"] {
635 | border-style: solid none none none;
636 | }
637 |
638 | /* Note that we only intend for the alt content to show up if the image is
639 | * broken. But non-broken images/inputs will have a replaced box, and thus we
640 | * won't we don't generate the pseudo-element anyways. This prevents
641 | * unnecessary reframing when images become broken / non-broken. */
642 | input[type=image]::before,
643 | img::before {
644 | content: -moz-alt-content !important;
645 | unicode-bidi: isolate;
646 | }
647 |
648 | img[usemap], object[usemap] {
649 | color: blue;
650 | }
651 |
652 | frameset {
653 | display: block ! important;
654 | overflow: clip;
655 | position: static ! important;
656 | float: none ! important;
657 | border: none ! important;
658 | }
659 |
660 | frame {
661 | border-radius: 0 ! important;
662 | }
663 |
664 | iframe {
665 | border: 2px inset;
666 | }
667 |
668 | spacer {
669 | position: static ! important;
670 | float: none ! important;
671 | }
672 |
673 | canvas {
674 | user-select: none;
675 | }
676 |
677 | iframe:focus-visible,
678 | body:focus-visible,
679 | html:focus-visible {
680 | /* These elements historically don't show outlines when focused by default.
681 | * We could consider changing that if needed. */
682 | outline-style: none;
683 | }
684 |
685 | /* hidden elements: https://html.spec.whatwg.org/#hidden-elements
686 | *
687 | * Exceptions:
688 | *
689 | * * area declaration needs to be !important, see below / bug 135040. That's
690 | * hacky and broken.
691 | *
692 | * * [hidden] is implemented as a presentation attribute to avoid a global
693 | * selector in a UA sheet.
694 | */
695 | base, basefont, datalist, head, link, meta, noembed,
696 | noframes, param, rp, script, style, template, title {
697 | display: none;
698 | }
699 |
700 | area {
701 | /* Don't give it frames other than its imageframe */
702 | display: none ! important;
703 | }
704 |
705 | iframe:fullscreen {
706 | /* iframes in full-screen mode don't show a border. */
707 | border: none !important;
708 | padding: unset !important;
709 | }
710 |
711 | /* Details and summary
712 | * https://html.spec.whatwg.org/#the-details-and-summary-elements
713 | *
714 | * Note that these rules need to be duplicated in details.css for the anonymous
715 | * summary, which wouldn't match otherwise.
716 | *
717 | * The spec here says something different, see
718 | * https://github.com/whatwg/html/issues/8610
719 | */
720 | details > summary:first-of-type {
721 | display: list-item;
722 | counter-increment: list-item 0;
723 | list-style: disclosure-closed inside;
724 | }
725 | details[open] > summary:first-of-type {
726 | list-style-type: disclosure-open;
727 | }
728 |
729 | /* media elements */
730 | video {
731 | object-fit: contain;
732 | }
733 |
734 | video > img:-moz-native-anonymous {
735 | /* Video poster images should render with the video element's "object-fit" &
736 | "object-position" properties */
737 | object-fit: inherit !important;
738 | object-position: inherit !important;
739 | }
740 |
741 | audio:not([controls]) {
742 | display: none !important;
743 | }
744 |
745 | audio[controls] {
746 | /* This ensures that intrinsic sizing can reliably shrinkwrap our
747 | controls (which are also always horizontal) and produce a
748 | reasonable intrinsic size from them. */
749 | writing-mode: horizontal-tb !important;
750 | }
751 |
752 | *|*::-moz-html-canvas-content {
753 | display: block !important;
754 | /* we want to be an absolute and fixed container */
755 | transform: translate(0) !important;
756 | }
757 |
758 | video > .caption-box {
759 | width: 100%;
760 | height: 100%;
761 | position: relative;
762 | }
763 |
764 | /**
765 | * The pseudo element won't inherit CSS styles from its direct parent, `::cue`
766 | * would actually inherit styles from video because it's video's pseudo element.
767 | * Therefore, we have to explicitly set some styles which are already defined
768 | * in its parent element in vtt.sys.mjs.
769 | */
770 | ::cue {
771 | color: rgba(255, 255, 255, 1);
772 | white-space: pre-line;
773 | background-color: rgba(0, 0, 0, 0.8);
774 | font: 10px sans-serif;
775 | overflow-wrap: break-word;
776 | /* TODO : enable unicode-bidi, right now enable it would cause incorrect
777 | display direction, maybe related with bug 1558431. */
778 | }
779 |
780 | /* element styles */
781 |
782 | dialog {
783 | position: absolute;
784 | display: block;
785 | inset-inline-start: 0;
786 | inset-inline-end: 0;
787 | margin: auto;
788 | border-width: initial;
789 | border-style: solid;
790 | border-color: initial;
791 | border-image: initial;
792 | padding: 1em;
793 | background-color: Canvas;
794 | color: CanvasText;
795 | width: -moz-fit-content;
796 | height: -moz-fit-content;
797 | }
798 |
799 | dialog:not([open]) {
800 | display: none;
801 | }
802 |
803 | dialog:modal {
804 | -moz-top-layer: top !important;
805 | position: fixed;
806 | overflow: auto;
807 | visibility: visible;
808 | inset-block-start: 0;
809 | inset-block-end: 0;
810 | max-width: calc(100% - 6px - 2em);
811 | max-height: calc(100% - 6px - 2em);
812 | }
813 |
814 | /* https://html.spec.whatwg.org/#flow-content-3 */
815 | dialog::backdrop {
816 | background: rgba(0, 0, 0, 0.1);
817 | }
818 |
819 | /* https://html.spec.whatwg.org/#the-marquee-element-2 */
820 | marquee {
821 | display: inline-block;
822 | text-align: initial;
823 | overflow: hidden !important;
824 |
825 | /* See https://github.com/whatwg/html/issues/10249 */
826 | inline-size: -moz-available;
827 | vertical-align: text-bottom;
828 | white-space: nowrap;
829 | }
830 |
831 | marquee:is([direction="up"], [direction="down"]) {
832 | block-size: 200px;
833 | white-space: unset;
834 | }
835 |
836 | /* Ruby */
837 |
838 | ruby {
839 | display: ruby;
840 | }
841 | rb {
842 | display: ruby-base;
843 | white-space: nowrap;
844 | }
845 | rt {
846 | display: ruby-text;
847 | }
848 | rtc {
849 | display: ruby-text-container;
850 | }
851 | rtc, rt {
852 | white-space: nowrap;
853 | font-size: 50%;
854 | -moz-min-font-size-ratio: 50%;
855 | line-height: 1;
856 | }
857 | @media not (-moz-platform: windows) {
858 | rtc, rt {
859 | /* The widely-used Windows font Meiryo doesn't work fine with this
860 | * setting, so disable this on Windows. We should re-enable it once
861 | * Microsoft fixes this issue. See bug 1164279. */
862 | font-variant-east-asian: ruby;
863 | }
864 | }
865 | rtc, rt {
866 | text-emphasis: none;
867 | }
868 | rtc:lang(zh), rt:lang(zh) {
869 | ruby-align: center;
870 | }
871 | rtc:lang(zh-TW), rt:lang(zh-TW) {
872 | font-size: 30%; /* bopomofo */
873 | -moz-min-font-size-ratio: 30%;
874 | }
875 | rtc > rt {
876 | font-size: unset;
877 | }
878 | ruby, rb, rt, rtc {
879 | unicode-bidi: isolate;
880 | }
881 |
882 | /* Shadow DOM v1
883 | * https://drafts.csswg.org/css-scoping/#slots-in-shadow-tree */
884 | slot {
885 | display: contents;
886 | }
887 |
888 | /* Hide noscript elements if scripting is enabled */
889 | @media (scripting) {
890 | noscript {
891 | display: none !important;
892 | }
893 | }
894 |
895 | @media print {
896 | input, textarea, select, button, details {
897 | -moz-user-input: none !important;
898 | pointer-events: none !important;
899 | }
900 | }
901 |
902 | /* Popover UA style, https://html.spec.whatwg.org/#flow-content-3 */
903 | /* stylelint-disable-next-line media-query-no-invalid */
904 | @media (-moz-bool-pref: "dom.element.popover.enabled") {
905 | [popover]:not(:popover-open):not(dialog[open]) {
906 | display:none;
907 | }
908 |
909 | dialog:popover-open {
910 | display:block;
911 | }
912 |
913 | [popover] {
914 | position: fixed;
915 | inset: 0;
916 | width: fit-content;
917 | height: fit-content;
918 | margin: auto;
919 | border: solid;
920 | padding: 0.25em;
921 | overflow: auto;
922 | color: CanvasText;
923 | background-color: Canvas;
924 | }
925 |
926 | :popover-open {
927 | -moz-top-layer: top;
928 | }
929 |
930 | :popover-open::backdrop {
931 | position: fixed;
932 | inset: 0;
933 | pointer-events: none !important;
934 | background-color: transparent;
935 | }
936 | }
937 |
--------------------------------------------------------------------------------