Full Code of qwreey/quick-settings-tweaks for AI

master 7d05bba4b8a6 cached
99 files
747.0 KB
211.4k tokens
595 symbols
1 requests
Download .txt
Showing preview only (812K chars total). Download the full file or copy to clipboard to get everything.
Repository: qwreey/quick-settings-tweaks
Branch: master
Commit: 7d05bba4b8a6
Files: 99
Total size: 747.0 KB

Directory structure:
gitextract_1mwh9xy9/

├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   └── bug---error-report.md
│   └── workflows/
│       └── build.yml
├── .gitignore
├── LICENSE
├── README.md
├── Todo.md
├── dirzsh.zsh
├── docker-compose.example.yml
├── install.sh
├── media/
│   ├── Changelog.md
│   ├── dbus.xml
│   ├── licenses.json
│   └── rounded_corners.frag
├── metadata.json
├── old/
│   ├── features/
│   │   └── volumeMixer.ts
│   ├── inputOutput.ts
│   ├── layoutCustomize.ts
│   ├── libs/
│   │   ├── streamSlider.ts
│   │   └── volumeMixerHandlerNotImpled.ts
│   ├── menus.ts
│   ├── other.ts
│   ├── panel.ts
│   ├── prefsPages/
│   │   └── volumeMixer.ts
│   ├── sidebarPrefs.ts
│   └── widgetManager.ts
├── package.json
├── po/
│   ├── ca.po
│   ├── cs.po
│   ├── de.po
│   ├── en.po
│   ├── ja.po
│   ├── ko.po
│   ├── pl.po
│   ├── pt.po
│   ├── quick-settings-tweaks@qwreey.pot
│   ├── ru.po
│   ├── ta.po
│   └── zh_Hans.po
├── schemas/
│   └── org.gnome.shell.extensions.quick-settings-tweaks.gschema.xml
├── scripts/
│   ├── contributor-labels.json
│   ├── reindent.js
│   └── version/
│       ├── gnome-docker-version
│       ├── latest-build-number
│       ├── latest-middle-version
│       ├── latest-minor-version
│       └── major-version
├── src/
│   ├── ambient.d.ts
│   ├── config.ts
│   ├── extension.ts
│   ├── features/
│   │   ├── debug.ts
│   │   ├── layout/
│   │   │   ├── dateMenu.ts
│   │   │   ├── sound.ts
│   │   │   ├── systemIndicator.ts
│   │   │   ├── systemItems.ts
│   │   │   └── toggles.ts
│   │   ├── menuAnimation.ts
│   │   ├── overlayMenu.ts
│   │   ├── toggle/
│   │   │   └── unsafeQuickToggle.ts
│   │   └── widget/
│   │       ├── media.ts
│   │       ├── notifications.ts
│   │       ├── volumeMixer.ts
│   │       └── weather.ts
│   ├── global.scss
│   ├── global.ts
│   ├── libs/
│   │   ├── prefs/
│   │   │   └── components.ts
│   │   ├── shared/
│   │   │   ├── colors.ts
│   │   │   ├── imageUtils.ts
│   │   │   ├── jsUtils.ts
│   │   │   ├── logger.ts
│   │   │   ├── maid.ts
│   │   │   └── styleClass.ts
│   │   ├── shell/
│   │   │   ├── advani.ts
│   │   │   ├── effects.ts
│   │   │   ├── feature.ts
│   │   │   ├── gesture.ts
│   │   │   ├── quickSettingsUtils.ts
│   │   │   └── styler.ts
│   │   └── types/
│   │       ├── quickSettingsOrderItem.ts
│   │       ├── systemIndicatorOrderItem.ts
│   │       └── toggleOrderItem.ts
│   ├── prefPages/
│   │   ├── about.ts
│   │   ├── layout.ts
│   │   ├── menu.ts
│   │   ├── toggles.ts
│   │   └── widgets.ts
│   ├── prefs.ts
│   ├── styles/
│   │   ├── date-menu.scss
│   │   ├── debug.scss
│   │   ├── media-widget.scss
│   │   ├── message-compact.scss
│   │   ├── message-remove-shadow.scss
│   │   ├── notification-widget.scss
│   │   ├── system-indicator.scss
│   │   ├── volume-mixer-widget.scss
│   │   └── weather-widget.scss
│   ├── stylesheet.scss
│   └── types.d.ts
└── tsconfig.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: [qwreey] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']


================================================
FILE: .github/ISSUE_TEMPLATE/bug---error-report.md
================================================
---
name: Bug & Error report
about: Create a report to help us improve
title: "[bug] "
labels: bug
assignees: ''

---

<!--
  Note:
  0. Don't waste the author's time.
  As a university student, there is little time left for studying, starting projects,
  or working to cover insufficient funds. Open source activities outside of vacation periods
  are almost impossible. (Of course, it is difficult even during vacation periods)
  So, please understand. Please read all messages and write an issue. **PLEASE**

  1. PLEASE SEARCH YOUR ISSUE FIRST, DO NOT MAKE DUPLICATED ISSUE
     The author checks all issues in real time because they get notifications on their watch

  2. Attach log file
     You can print your system log with command `journalctl` if you use systemd based disto.
     You should mask your personal information, then cut and upload only the parts related to the GNOME shell.

  3. Please clearly state your GNOME Shell version, extension version and distribution.
     To get distribution information, run this command, `cat /etc/os-release`.
     To get gnome-shell version, run this command, `gnome-shell --version`.
     To get extension version, go extension preferences -> about

  4. Make sure all other extensions are turned off and only the 'Quick Settings Tweaks'
     extension is turned on.
-->

## Describe the bug
<!-- A clear and concise description of what the bug is. -->

## To Reproduce
<!--
  Steps to reproduce the behavior
  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error
-->

## Expected behavior
<!--
  A clear and concise description of what you expected to happen.
  Clear this section if not needed
-->

## Screenshots
<!--
  If applicable, add screen recordings and screenshots to help explain your problem.
  Clear this section if not needed
-->

## Environment

1. gnome-shell version: (ex) GNOME Shell 47.5
2. distro information:
```
(ex)
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
```
3. Extension version: 2.1 - stable


================================================
FILE: .github/workflows/build.yml
================================================
name: Build

on: [push, pull_request]

jobs:
  build:
    name: Build extension
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Install dependencies
        run: |
          sudo apt update
          DEBIAN_FRONTEND=noninteractive sudo apt install -y gettext gnome-shell
      - name: Build extension
        run: |
          npm i
          ./install.sh build
      - name: Archive current compilation
        uses: actions/upload-artifact@v4
        with:
          name: "quick-settings-tweaks-${{ github.sha }}"
          path: "target/quick-settings-tweaks@qwreey.shell-extension.zip"


================================================
FILE: .gitignore
================================================
target/
i
*.po~
host/
docker-compose.yml
node_modules/


================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.


================================================
FILE: README.md
================================================
# Quick Settings Tweaks [<img src=".github/images/quick-settings-tweaker.png" width="200px" align="right" alt="QuickSettings-Tweaker SkeletonUI">](https://extensions.gnome.org/extension/5446/quick-settings-tweaker/)

<div align="center">

### Let's tweak Gnome Quick Settings!

[<img src="https://raw.githubusercontent.com/andyholmes/gnome-shell-extensions-badge/master/get-it-on-ego.svg?sanitize=true" alt="Get it on GNOME Extensions" height="100" align="middle">](https://extensions.gnome.org/extension/5446/quick-settings-tweaker/)
<br>
<br>
Quick Settings Tweaker is a Gnome 46+ extension which allows you to customize the new Quick Settings Panel to your liking!

</div>
<br>
<br>

## Features

| <p align="center">With this extension, you can...</p> | How it will appear |
|:-------------------------------|:--------------------:|
| <p align="center">**Add the Media Controls Widget**</p><p align="center">Control your music and videos directly from the Quick Settings, instead of the Date Menu.<br><br>For a cooler look, you can also get colors from the cover image and create a gradient.</p> | <img src=".github/images/media-control.png" width="600px" alt="Media controls widget screenshot"> |
| <p align="center">**Add the Volume Mixer Widget**</p><p align="center">Adjust application volumes, without opening extra application.<br><br>Place the menu button next to the output slider for a compact and natural layout.</p> | <img src=".github/images/volume-mixer.png" width="600px" alt="Volume mixer widget screenshot"> |
| <p align="center">**Add the Notifications Widget**</p><p align="center">You can check what has been sent to your mailbox or messenger, without missing!</p> | <img src=".github/images/notifications.png" width="600px" alt="Notifications widget screenshot"> |
| <p align="center">**Layout customize**</p><p align="center">Hide, re-order, re-color your panel and Quick Settings layout<br><br>Make it simple and keep organized!</p> | <img src=".github/images/layout.png" width="600px" alt="Notifications widget screenshot"> |
| <p align="center">**Overlay menu layout**</p><p align="center">Your Quick Settings panel is too big?<br><br>Try overlay layout! you can customize background and animation style too.</p> | <img src=".github/images/overlay.png" width="600px" alt="Notifications widget screenshot"> |

## Sponsor

You can promote and support development by [github sponsor!](https://github.com/sponsors/qwreey) You can help keep this project maintained

Here is my sponsors, thank for your support!

[![sponsors](https://readme-contribs.as93.net/sponsors/qwreey?shape=square&margin=16&perRow=15&title=Qwreey's%20Sponsors&textColor=f5acff&backgroundColor=0e001a&fontFamily=cursive&fontSize=14&limit=90&footerText=none&outerBorderRadius=24)](https://github.com/sponsors/qwreey)

## Stars

[![Star History Chart](https://api.star-history.com/svg?repos=qwreey/quick-settings-tweaks&type=Date)](https://star-history.com/#qwreey/quick-settings-tweaks&Date)

## Development

### Building

> Prerequirements: You need to install nodejs, bash, and gnome-shell for compiling extension from source

You can create development build by executing `TARGET=dev ./install.sh create-release`. make sure run `npm i` first to ensure all build dependencies installed

Or, you can get nightly preview build from [github releases tab](https://github.com/qwreey/quick-settings-tweaks/releases). Build extension from `dev` branch is not encouraged, because the `dev` branch has unchecked bleeding-edge features not guaranteed to work. github-preview build is tested by developer and much stable than building `dev` branch.

### Contribution and Issues

Keep in mind that there may be one or a few developers, but there may be many issues and users. I think you know how to behave with manners without even having to say it.

Please check github [project board page](https://github.com/users/qwreey/projects/2) for issue priority and progress.

#### Raise an issue

If you want to raise an issue, First, **you must search your issue first.** duplicated issue will be closed, and disturb developer's time.

Second, **you must attach a related log files, gnome version and extension version informations.** if you don't provide information much about your issue, it is hard to solve your issue. and to be clear, Please use `[migration]`, `[feature]`, `[bug]` prefix for issue title, It is very useful for searching and organizing issues

And last, **you must use well-formed english** You can use a translator or AI to write it, so avoid wasting time by having the developer translate and take notes. This takes up a surprising amount of the developer's time, making analysis very difficult, especially if the logs are mixed in English and other languages.

#### PR and code contribution

If you want to contribute, **you must pull `dev` branch, Not master branch.** master branch is release branch, because AUR and some user distributions use master branch as build source. **If you create pull-request to master branch, it will be closed.** you should re-open PR to dev branch.

### Testing

![gnome-docker devlopment screenshot](.github/images/dev-preview.png)

You can test extension with command `./install.sh dev`. You will need tigervnc client and docker in host. Tested in arch linux but it should working on any systemd based platform

You can re-build extension by log out and close vnc window or send SIGINT to exit dev docker.


================================================
FILE: Todo.md
================================================
Scroll view layout for media widget
Touch enchantments:
    Notifications: slide to discard

Readme file
homepage?

배터리 알약 아이콘

widgets:
    sound output:
        device to hide
        show device name
    sound input:
        always show slider
        show device name
        device to hide
    volume mixer
        item to hide
            show hidden item button (temporary)
        as submenu (like background apps)

키보드로 포커스 가능해야함

더보기 아이콘 sound card 로 바꾸고 싶은데 그런 옵션이 있으면 좋겠음

Add cover image round clip effect option
이미지 비율 설정 기능

날씨 로딩중에 라벨 위치

패널 전체 오더링 << 가능했으면 좋겠음.......... 왼쪽 오른쪽 중간 고르기 가능하고
위젯 오더링

습도계
시스템 메뉴에 시간 표시
datemenu format
백그라운드 앱스 스타일: 일반, 퀵토글, 시스템레이아웃
열리는 애니메이션
미디어 타이틀 움직이도록

show full title
    never
    when hover, move around
    always, move around
    when hover, as tooltip

어나더: 자동으로 지우는 알림 리스트 (타이틀 regex)
datemenu 왼쪽 레이아웃 오른쪽레이아웃, 메뉴 열지 않기
more dimmer

option to hide widget header?
믹서 디바이스 변경 구현하기


================================================
FILE: dirzsh.zsh
================================================
$ID:load() {
    lib:path-alloc2 "PATHALLOC_$ID" ./scripts :
    alias execute="ID=$ID $ID:execute"
    alias lg="ID=$ID $ID:lg"
    alias dbus-docker="ID=$ID $ID:dbus-docker"
    alias notify="ID=$ID $ID:notify"
    alias notify-test="ID=$ID $ID:notify-test"
    alias prefs="ID=$ID $ID:prefs"
}

$ID:unload() {
    lib:path-free "PATHALLOC_$ID"
    unalias execute
    unalias lg
    unalias dbus-docker
    unalias notify
    unalias notify-test
    unalias prefs
}

$ID:execute() {
    if [ -e ./host/vncready ]; then
        sudo docker compose exec -u gnome gnome-docker env DISPLAY=":0" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus gdbus call -e -d org.gnome.Shell -o /org/gnome/Shell -m org.gnome.Shell.Eval "$1"
    else
        gdbus call -e -d org.gnome.Shell -o /org/gnome/Shell -m org.gnome.Shell.Eval "$1"
    fi
}
$ID:dbus-docker() {
    sudo docker compose exec -u gnome gnome-docker env DISPLAY=":0" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus $@
}
$ID:lg() {
     $ID:execute "Main.createLookingGlass().toggle()"
}
$ID:notify() {
    if [ -e ./host/vncready ]; then
        $ID:dbus-docker notify-send $@
    else
        notify-send $@
    fi
}
$ID:notify-test() {
    $ID:notify test testmessage -u normal -t 0
}
$ID:prefs() {
    if [ -e ./host/vncready ]; then
        $ID:dbus-docker gnome-extensions prefs quick-settings-tweaks@qwreey
    else
        gnome-extensions prefs quick-settings-tweaks@qwreey
    fi
}


================================================
FILE: docker-compose.example.yml
================================================
services:
  gnome-docker:
    container_name: gnome-docker
    hostname: gnome-docker
    build: ./host/gnome-docker

    environment:
      VNC_OPTION: -SecurityTypes=None -rfbunixpath /host/vncsocket -rfbport 5900
      BEFORE_GNOME: "/extension/install.sh dev-guest"
      ROOTMODE: false
      XVFB_GPU: false
      XVFB_SCREEN_WIDTH: 1080
      RDP_OPTION: "-auth /monitors:0"

    # Remote
    ports:
      # for rdp
      - 3389:3389
      # for vnc
      - 5900:5900

    # For systemd
    security_opt:
      - seccomp:unconfined
      - apparmor:unconfined
    cgroup: host

    # Mounts
    volumes:
      # Systemd requirements
      - type: tmpfs
        target: /tmp
      - type: tmpfs
        target: /run
      - /sys/fs/cgroup:/sys/fs/cgroup:ro
      - /sys/fs/cgroup/system.slice:/sys/fs/cgroup/system.slice:rw

      # Host dir
      - ./host:/host:rw
      - ./:/extension
      - ./host/home:/home/gnome


================================================
FILE: install.sh
================================================
#!/usr/bin/env bash
cd "$(dirname "$(readlink -f "$0")")"

function update-po() {
	build

	echo '' > messages.po
	[ "$?" != "0" ] && echo "update-po: Unable to create ./messages.po file" && return 1

	which xgettext 2>/dev/null >/dev/null
	[ "$?" != "0" ] && echo "update-po: xgettext is not installed on this system. please install and try again" && return 1

	find ./target/out -type f \( -name "*.ui" -or -name "*.js" \) | xgettext --from-code utf-8 -j messages.po -f -
	[ "$?" != "0" ] && echo "update-po: Unable to update messages.po file by xgettext" && return 1

	sed -i 's|"Content\-Type: text/plain; charset=CHARSET\\n"|"Content-Type: text/plain; charset=UTF-8\\n"|g' messages.po
	[ "$?" != "0" ] && echo "update-po: Unable to set charset in messages.po file" && return 1

	find ./po -type f -name "*.po" | xargs -i msgmerge {} messages.po -N --no-wrap -U
	[ "$?" != "0" ] && echo "update-po: Failed to update *.po files (msgmerge error)" && return 1

	mv messages.po $(find ./po -type f -name "*.pot")
	[ "$?" != "0" ] && echo "update-po: Unable to move messages.po file (pot file not found)" && return 1

	return 0
}

function fetch-contributors() {
	LABELS=$(cat scripts/contributor-labels.json)
	echo "["
	FIRST="1"
	curl -Ls "https://api.github.com/repos/qwreey/quick-settings-tweaks/contributors?per_page=16&page=1" | while read line; do
		if echo $line | grep -oP '^ *{ *$' > /dev/null; then
			[ "$FIRST" = "0" ] && echo -e "\t},"
			FIRST="0"
			echo -e "\t{"
		fi

		if NAME=$(echo $line | grep -oP '(?<="login": ").*(?=")'); then
			USER_LABEL=$(printf "%s" "$LABELS" | grep -oP "(?<=\"$NAME\": \").*(?=\")")
			echo -e "\t\t\"name\": \"$NAME\","
			echo -e "\t\t\"image\": \"$NAME\","
			echo -en "\t\t"
			echo "\"label\": \"${USER_LABEL:-ETC}\","
			curl -Lso target/contributors/$NAME.png "https://github.com/$NAME.png?size=38"
		fi
		if HOMEPAGE=$(echo $line | grep -oP '(?<="html_url": ").*(?=")'); then
			echo -e "\t\t\"link\": \"$HOMEPAGE\""
		fi
	done
	echo -e "\t}"
	echo "]"
}

function build() {
	rm -rf target/out
	mkdir -p target/out

	# Typescript compiling
	(
		npx tsc --noCheck
		cp -r target/tsc/* target/out
	) &
	TSC_PID=$!

	# Stylesheet compiling
	(
		npx sass\
			--no-source-map\
			src/stylesheet.scss:target/out/stylesheet.css
		sed $'s/^  /\t/g' -i target/out/stylesheet.css
	) &
	SASS_PID=$!

	# Fetch contributors & Copy assets
	(
		if [ ! -e target/contributors ]; then
			mkdir -p target/contributors
			fetch-contributors > target/contributors/data.json
		fi
		cp metadata.json target/out
		cp -r schemas target/out
		cp -r media target/out
		cp -r target/contributors target/out/media
	) &
	COPYING_PID=$!

	# Wait for tasks
	wait $TSC_PID
	wait $SASS_PID
	wait $COPYING_PID

	# Update config metadata
	case "$TARGET" in
		dev )
			sed 's/isDevelopmentBuild: false/isDevelopmentBuild: true/' -i target/out/config.js
		;;
		preview )
		;;
		release )
			sed 's/isReleaseBuild: false/isReleaseBuild: true/' -i target/out/config.js
		;;
		github-release )
			sed 's/isReleaseBuild: false/isReleaseBuild: true/' -i target/out/config.js
			sed 's/isGithubBuild: false/isGithubBuild: true/' -i target/out/config.js
		;;
		github-preview )
			sed 's/isGithubBuild: false/isGithubBuild: true/' -i target/out/config.js
		;;
	esac
	if [ -z "$VERSION" ]; then
		VERSION=$(git branch --show-current)
	fi
	sed "s/version: \"unknown\"/version: \"$VERSION\"/" -i target/out/config.js
	[ ! -z "$BUILD_NUMBER" ] && sed "s/buildNumber: 0/buildNumber: $BUILD_NUMBER/" -i target/out/config.js

	# Change indents for reducing size of target
	node scripts/reindent.js -- target/out/**/*.js

	# Pack extension
	gnome-extensions pack target/out\
		--podir=../../po\
		--extra-source=features\
		--extra-source=libs\
		--extra-source=prefPages\
		--extra-source=media\
		--extra-source=global.js\
		--extra-source=config.js\
		--out-dir=target\
		--force
	[ "$?" != "0" ] && echo "Failed to pack extension" && return 1

	return 0
}

function enable() {
	gnome-extensions enable quick-settings-tweaks@qwreey
}

function install() {
	gnome-extensions install\
		target/quick-settings-tweaks@qwreey.shell-extension.zip\
		--force
	[ "$?" != "0" ] && echo "Failed to install extension" && return 1
	echo "Extension was installed. logout and login shell, and check extension list."

	return 0
}

function log() {
	journalctl /usr/bin/gnome-shell -f -q --output cat | grep '\[EXTENSION QSTweaks\] '
}

function clear-old-po() {
	rm ./po/*.po~
}

function compile-preferences() {
	glib-compile-schemas --targetdir=target/out/schemas schemas
	[ "$?" != "0" ] && echo "compile-preferences: glib-compile-schemas command failed" && return 1

	return 0
}

function increase-middle-version() {
	echo $(( $(cat scripts/version/latest-middle-version) + 1 )) > scripts/version/latest-middle-version
	echo $(( $(cat scripts/version/latest-build-number) + 1 )) > scripts/version/latest-build-number
	echo 1 > scripts/version/latest-minor-version
}
function increase-minor-version() {
	echo $(( $(cat scripts/version/latest-build-number) + 1 )) > scripts/version/latest-build-number
	echo $(( $(cat scripts/version/latest-minor-version) + 1 )) > scripts/version/latest-minor-version
}

function get-full-version() {
	VERSION_MAJOR=$(cat scripts/version/major-version)
	VERSION_MIDDLE=$(cat scripts/version/latest-middle-version)
	VERSION_MINOR=$(cat scripts/version/latest-minor-version)
	BUILD_NUMBER=$(cat scripts/version/latest-build-number)
	VERSION_TAG=""
	case "$TARGET" in
		dev )
			VERSION_TAG="-dev$VERSION_MINOR"
		;;
		preview )
			VERSION_TAG="-pre$VERSION_MINOR"
		;;
		release )
			VERSION_TAG=""
		;;
		github-release )
			VERSION_TAG=""
		;;
		github-preview )
			VERSION_TAG="-pre$VERSION_MINOR"
		;;
	esac
	VERSION="$VERSION_MAJOR.$VERSION_MIDDLE$VERSION_TAG"
}

function update-metadata-version() {
	get-full-version
	sed 's| *"version-name": *"[^"]*",|  "version-name": "'$VERSION'",|g' -i metadata.json
}

function create-release() {
	get-full-version
	update-metadata-version
	VERSION=$VERSION BUILD_NUMBER=$BUILD_NUMBER build
	cp target/quick-settings-tweaks@qwreey.shell-extension.zip target/$VERSION-$TARGET.zip
}

function dev() {
	if ! sudo echo > /dev/null; then
		return
	fi
	mkdir -p host
	[ -e host/extension-ready ] && rm host/extension-ready
	mkfifo host/extension-ready
	[ -e host/extension-build ] && rm host/extension-build
	mkfifo host/extension-build

	# Build
	(
		TARGET="${TARGET:-dev}" create-release
		echo > host/extension-ready
	) &

	# Watch Build Request
read -d '' INNER_BUILDWATCH << EOF
	cat host/extension-build > /dev/null
	while true; do
		cat host/extension-build > /dev/null
		if [ ! -e host/vncready ]; then
			break
		fi
		TARGET="\${TARGET:-dev}" create-release
		echo > host/extension-ready
	done
EOF
	setsid bash -c "$INNER_BUILDWATCH" &
	BUILDWATCH_PID=$!

	[ ! -e ./docker-compose.yml ] && cp ./docker-compose.example.yml ./docker-compose.yml

	CURTAG=""
	if [ -e "./host/gnome-docker" ]; then
		CURTAG="$(git -C host/gnome-docker describe --tags --always --abbrev=0 HEAD)"
	else
		git clone https://github.com/qwreey/gnome-docker host/gnome-docker --recursive --tags
	fi

	TARTAG="$(cat scripts/version/gnome-docker-version)"
	if [[ "$CURTAG" != "$TARTAG" ]]; then
		git -C host/gnome-docker pull origin master --tags
		git -C host/gnome-docker submodule update
		git -C host/gnome-docker checkout "$TARTAG"
		sudo docker compose -f ./docker-compose.yml build
	fi

	COMPOSEFILE="./docker-compose.yml" ./host/gnome-docker/test.sh
	rm host/extension-build host/extension-ready
	kill $BUILDWATCH_PID 2> /dev/null
	wait $BUILDWATCH_PID
	exit 0
}

function dev-guest() {
	echo > /host/extension-build
	cat /host/extension-ready > /dev/null
	install
	enable
}

function usage() {
	echo 'Usage: ./install.sh COMMAND'
	echo 'COMMAND:'
	echo "  install             install the extension in the user's home directory"
	echo '                      under ~/.local'
	echo '  build               Creates a zip file of the extension'
	echo '  update-po           Update po files to match source files'
	echo '  dev                 Run dev docker'
	echo '  log                 show extension logs (live)'
	echo '  clear-old-po        clear *.po~'
	echo '  enable              enable extension'
	echo '  install-enable      install and enable'
	echo '  compile-preferences compile schema file (test)'
}

case "$1" in
	"install" )
		install
	;;

	"install-enable" )
		install
		enable
	;;

	"build" )
		build
	;;

	"log" )
		log
	;;

	"update-po" )
		update-po
	;;

	"clear-old-po" )
		clear-old-po
	;;

	"enable" )
		enable
	;;

	"dev" )
		dev
	;;
	"dev-guest" )
		dev-guest
	;;
	
	"compile-preferences")
		compile-preferences
	;;

	"increase-minor-version")
		increase-minor-version
	;;

	"increase-middle-version")
		increase-middle-version
	;;

	"update-metadata-version")
		update-metadata-version
	;;

	"create-release")
		create-release
	;;

	* )
		usage
	;;
esac
exit


================================================
FILE: media/Changelog.md
================================================
<!-- markdownlint-disable-file MD025 MD024 MD034 -->
<!-- Note: -->
<!-- This file is visible in prefs so if -->
<!-- it is erased it may cause an error -->
# 2.3-stable
<!-- @BuildNumber: 10 -->
<!-- @Includes: [] -->
<!-- @Date: "2025-07-15 00:37:00 KST" -->
<!-- @Git: "7142389" -->

{{HEADER}}

- Drop gnome 48 support
- Add support for gnome 49
- Remove dnd quick toggle (now gnome support it natively)
- Add 'overlay-menu-overflow-anchor' option for adjust overlay menu box overflowing

## Fix

- VolumeMixer widget
  - Fix already been disposed warning

# 2.2-stable
<!-- @BuildNumber: 9 -->
<!-- @Includes: [] -->
<!-- @Date: "2025-07-15 00:37:00 KST" -->
<!-- @Git: "7142389" -->

{{HEADER}}

- Drop gnome 46, 47 support
- Add support for gnome 48
- Remove non-compatible feature
  - Date Menu
    - Hide Media Control
    - Hide Notifications

## Fix

- Weather widget
  - Fix 'already disposed' warning
- DND Toggle
  - Fix missing icon when it's turned off by PR #191
- Notification
  - Better padding for Native notifications clear button by PR #184
- Fix settings names by PR #183

# 2.1-stable
<!-- @BuildNumber: 8 -->
<!-- @Includes: [] -->
<!-- @Date: "2025-02-15 04:25:00 KST" -->
<!-- @Git: "5428193" -->

{{HEADER}}

- Layout editor shows only useful items
  > For example, a DND quick toggle only appears when enabled
- Migration for gnome 48 (partially)
  - 'vertical' property migration
- Fix some typescript type errors
- Update locales
- Add github sponsor (replace original one)

## New Features

- Menu animation
  - Add background brightness option
- Weather widget
  - Add show or hide location label option
  - Add max forecasts option
  - Add weather interval option
- System Indicators
  - Monochrome option for privacy indicators

## Fix

- System Indicators
  - Fix accent indicators color not match with shell accent color
- Weather widget
  - Fix status label style
- Fix project name

# 2.1-pre7
<!-- @BuildNumber: 7 -->
<!-- @Includes: [] -->
<!-- @Date: "2025-02-12 4:56:00 KST" -->
<!-- @Git: "dafca5e" -->

{{HEADER}}

- Improve ordering editors
- Update locale files
- Migration for gnome 48 (partially)
  - Media widget: Lowered GNOME Shell API dependency for backwards compatibility

## New Features

- Quick toggle layout
  - Add GType name filter option
  - Now you can hide 'Unsorted items'
- System indicators layout
  - Add ordering and hiding option
  - Add accent screen sharing &amp; recording indicators option
  - Add accent privacy indicators option

## Fix

- Default value optimization for menu animation
- Fix broken scrollbar padding
- Fix mixer description only shows 'Playback Stream'
- Fix smooth scroll cause scrolling issue on media widget
- Fix mixer widget menu section initial state
- Fix #170, some quick toggles are not hiding
- Fix 'has been already disposed' error on weather widget
- Fix '(intermediate value).Extension.features is null' error when extension unloading

# 2.1-pre6
<!-- @BuildNumber: 6 -->
<!-- @Includes: [] -->
<!-- @Date: "2025-02-09 03:57:00 KST" -->
<!-- @Git: "30ad4df" -->

{{HEADER}}

- Reduce reloading cost

## New Features

- Media widget
  - Add adjust smooth scroll speed option
- Overlay menu
  - Smoother animation
  - Better animation start offset for flyout style
- Volume mixer widget
  - Add show stream icon option
  - Add attach menu to output slider option

## Fix

- Media widget
  - Fix 'event.moveStartCoords is undefined' error

# 2.1-pre5
<!-- @BuildNumber: 5 -->
<!-- @Includes: [] -->
<!-- @Date: "2025-02-08 13:49:00 KST" -->
<!-- @Git: "7acb2a4" -->

{{HEADER}}

- List the license in more detail
- Weather feature is now stable

## New Features

- Media widget
  - Add round clip effect detailed option
  - Support trackpad and trackpoint smooth scroll
- Date menu
  - Add hide left box option
  - Add hide right box option
  - Add menu disable option
  - Add menu button hide option
- VolumeMixer widget
  - Migrated from 1.18

## Fix

- Fix 'st_widget_get_theme_node called on the widget which is not in the stage' issue

## Prefs QOL patch

- Add detailed button on some options

# 2.1-pre4
<!-- @BuildNumber: 4 -->
<!-- @Includes: [] -->
<!-- @Date: "2025-02-03 09:31:00 KST" -->
<!-- @Git: "0f05873" -->

{{HEADER}}

- Changelog viewer enchantments
  - Show build number, git hash, and date in detailed view

## New Features

- Media widget
  - Add gradient background option
  - Add progress bar style option
  - Add contorl button opacity option
  - Implement swipe to switch page
  - Implement round clip effect to make transition better
- Weather widget
  - Add click command option
- Debugging
  - Expose features

## Fix

- Fix gnome-shell segfault on dragging media widget
- Media widget
  - Fix page indicator click action

## New Licenses

- rounded-window-corners
  - Auther: yilozt
  - URL: https://github.com/yilozt/rounded-window-corners

# 2.1-pre3
<!-- @BuildNumber: 3 -->
<!-- @Includes: [] -->
<!-- @Date: "2025-01-31 20:39:00 KST" -->
<!-- @Git: "0f05873" -->

{{HEADER}}

- Update repo url in metadata

## New Features

- Option to hide dnd indicator completely
- Debugging
  - Use better logging format
  - Add logging level option
  - Add extension environment expose option
- Notifications widget
  - Add vfade offset option
  - Add scrollbar visibility option

## Fix

- Fix 'PageIndicators has been already disposed' issue
- Add more promise catch handlers and source naming for debugging
- Removed fixStScrollViewScrollbarOverflow, use vscrollbar_policy instead

## Known issues

- Cannot hide keyboard quick toggle

# 2.1-pre2
<!-- @BuildNumber: 2 -->
<!-- @Includes: [] -->
<!-- @Date: "2025-01-23 00:40:00 KST" -->
<!-- @Git: "1ef912f" -->

{{HEADER}}

## New Features

- Add quick toggle ordering and hiding
- Add page indicator on media widget
- Add DND indicator position option
- Add save last session state option on unsafe mode quick toggle

## Fix

- Fix changelog text align
- Fix pref page scroll flickering issue
- Fix weather widget empty when no location selected issue

## Prefs QOL patch

- Move contributor rows to dialog

# 2.1-pre1
<!-- @BuildNumber: 1 -->
<!-- @Includes: [] -->
<!-- @Date: "2025-01-22 13:16:00 KST" -->
<!-- @Git: "724eedd" -->

{{HEADER}}

- **Droped gnome-shell 43 and 44 support COMPLETELY** due to ESM incompatible
- Using major.middle.minor version system
- Using girs and typescript, for better development
- New stable, github-stable, github-preview release channel

## Shell version bump

shell-version >= 45, >= 48

## Prefs QOL patch

- Some space rich option groups are now using bottom sheet layout
- Add button for reset modified options
- Organize about section
  - Add changelogs subpage

## New Features

- Reorder and hide system items
- Reanimate menu, overlay menu mode
- Weather widget

## Known issues

- Sometime, the media progress bar displayed even should't be displayed
- Weather widget shows empty box when region wasn't selected


================================================
FILE: media/dbus.xml
================================================
<?xml version="1.0"?>
<node>
  <interface name="org.freedesktop.DBus.Properties">
    <method name="Get">
      <arg type="s" name="interface_name" direction="in"/>
      <arg type="s" name="property_name" direction="in"/>
      <arg type="v" name="value" direction="out"/>
    </method>
  </interface>
  <interface name="org.mpris.MediaPlayer2.Player">
    <method name="SetPosition">
      <arg type="o" name="TrackId" direction="in"/>
      <arg type="x" name="Position" direction="in"/>
    </method>
    <method name="PlayPause"/>
    <method name="Next"/>
    <method name="Previous"/>
    <property name="CanGoNext" type="b" access="read"/>
    <property name="CanGoPrevious" type="b" access="read"/>
    <property name="CanPlay" type="b" access="read"/>
    <property name="CanSeek" type="b" access="read"/>
    <property name="Metadata" type="a{sv}" access="read"/>
    <property name="PlaybackStatus" type="s" access="read"/>
  </interface>
  <interface name="org.mpris.MediaPlayer2">
    <method name="Raise"/>
    <property name="CanRaise" type="b" access="read"/>
    <property name="DesktopEntry" type="s" access="read"/>
    <property name="Identity" type="s" access="read"/>
  </interface>
</node>


================================================
FILE: media/licenses.json
================================================
[
	{
		"licenseUri": "https://github.com/qwreey/quick-settings-tweaks/blob/master/LICENSE",
		"name": "quick-settings-tweaks",
		"author": "qwreey",
		"url": "https://github.com/qwreey/quick-settings-tweaks",
		"licenseSummary": "LGPL v3.0"
	},
	{
		"licenseUri": "https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/COPYING",
		"name": "gnome-shell",
		"author": "gnome",
		"url": "https://gitlab.gnome.org/GNOME/gnome-shell",
		"licenseSummary": "GPL v2"
	},
	{
		"licenseUri": "https://github.com/microsoft/TypeScript/blob/main/LICENSE.txt",
		"name": "TypeScript",
		"author": "microsoft",
		"url": "https://www.typescriptlang.org",
		"description": "Typescript compiler",
		"licenseSummary": "Apache License 2.0"
	},
	{
		"licenseUri": "https://github.com/gjsify/gnome-shell/blob/main/LICENSE",
		"name": "girs",
		"author": "gisify",
		"url": "https://github.com/gjsify/gnome-shell",
		"description": "Gnome shell typescript types",
		"licenseSummary": "MIT License"
	},
	{
		"licenseUri": "https://github.com/sass/dart-sass/blob/main/LICENSE",
		"name": "sass",
		"url": "https://sass-lang.com/",
		"description": "Stylesheet pre-processor",
		"licenseSummary": "MIT License"
	},
	{
		"name": "gnome-volume-mixer",
		"author": "mymindstorm",
		"url": "https://github.com/mymindstorm/gnome-volume-mixer",
		"licenseUri": "https://github.com/mymindstorm/gnome-volume-mixer/blob/master/LICENSE",
		"description": "Volume mixer widget",
		"affectedFiles": [
			"features/widget/volumeMixer.ts"
		],
		"licenseSummary": "MIT License"
	},
	{
		"licenseUri": "https://github.com/yilozt/rounded-window-corners/blob/main/LICENSE",
		"name": "rounded-window-corners",
		"author": "yilozt",
		"url": "https://github.com/yilozt/rounded-window-corners",
		"affectedFiles": [
			"media/rounded_corners.frag",
			"libs/roundClip.ts"
		],
		"description": "Round clip shader"
	}
]


================================================
FILE: media/rounded_corners.frag
================================================
// This shader is copied from Mutter project:
// https://gitlab.gnome.org/GNOME/mutter/-/blob/main/src/compositor/meta-background-content.c
//
// With a litte change to make it works well with windows

// The uniforms variables for controls
uniform vec4  bounds;           // x, y: top left; z, w: bottom right
uniform float clip_radius;
uniform vec4  inner_bounds;
uniform float inner_clip_radius;
uniform vec2  pixel_step;
uniform float border_width;
uniform vec4  border_color;
uniform float exponent;


float circle_bounds(vec2 p, vec2 center, float clip_radius) {
  vec2 delta = p - vec2(center.x, center.y);
  float dist_squared = dot(delta, delta);

  // Fully outside the circle
  float outer_radius = clip_radius + 0.5;
  if(dist_squared >= (outer_radius * outer_radius))
    return 0.0;

  // Fully inside the circle
  float inner_radius = clip_radius - 0.5;
  if(dist_squared <= (inner_radius * inner_radius))
    return 1.0;

  // Only pixels on the edge of the curve need expensive antialiasing
  return outer_radius - sqrt(dist_squared);
}

float squircle_bounds(vec2 p, vec2 center, float clip_radius, float exponent) {
  vec2 delta = abs(p - center);

  float pow_dx = pow(delta.x, exponent);
  float pow_dy = pow(delta.y, exponent);
  
  float dist = pow(pow_dx + pow_dy, 1.0 / exponent);

  return clamp(clip_radius - dist + 0.5, 0.0, 1.0);
}

float rounded_rect_coverage(vec2 p, vec4 bounds, float clip_radius, float exponent) {
  // Outside the bounds
  if(p.x < bounds.x || p.x > bounds.z || p.y < bounds.y || p.y > bounds.w) {
    return 0.0;
  }
  
  vec2 center;
  
  float center_left = bounds.x + clip_radius;
  float center_right = bounds.z - clip_radius;

  if(p.x < center_left)
    center.x = center_left;
  else if(p.x > center_right)
    center.x = center_right;
  else
    return 1.0; // The vast majority of pixels exit early here

  float center_top = bounds.y + clip_radius;
  float center_bottom = bounds.w - clip_radius;

  if(p.y < center_top)
      center.y = center_top;
  else if(p.y > center_bottom)
    center.y = center_bottom;
  else
    return 1.0;
  
  if(exponent <= 2.0) {
    return circle_bounds(p, center, clip_radius);
  } else {
    return squircle_bounds(p, center, clip_radius, exponent);
  }
}

void main() {
  vec2 texture_coord = cogl_tex_coord0_in.xy / pixel_step;

  float outer_alpha = rounded_rect_coverage(texture_coord, bounds, clip_radius, exponent);

  if(border_width > 0.9 || border_width < -0.9) {
    float inner_alpha = rounded_rect_coverage(texture_coord, inner_bounds, inner_clip_radius, exponent);
    float border_alpha = clamp(abs(outer_alpha - inner_alpha), 0.0, 1.0);
    if (border_width > 0.0) {
      // Clip corners of window first
      cogl_color_out *= outer_alpha;
      // Then mix Rounded window and border
      cogl_color_out = mix(cogl_color_out, vec4(border_color.rgb, 1.0), border_alpha * border_color.a);
    } else {
      // Fill an rounded rectangle with border color first
      vec4 border_rect = vec4(border_color.rgb, 1.0) * inner_alpha * border_color.a;
      // Then mix rounded window and border, rounded window is smaller than border_rect
      cogl_color_out = mix(border_rect, cogl_color_out, outer_alpha);
    }
  } else {
    cogl_color_out *= outer_alpha;
  }
}

================================================
FILE: metadata.json
================================================
{
  "name": "Quick Settings Tweaks",
  "uuid": "quick-settings-tweaks@qwreey",
  "description": "Let's tweak gnome's quick settings! You can add Media Controls, Notifications, Volume Mixer on quick settings and remove useless buttons!",
  "shell-version": ["48", "49"],
  "url": "https://github.com/qwreey/quick-settings-tweaks",
  "settings-schema": "org.gnome.shell.extensions.quick-settings-tweaks",
  "gettext-domain": "quick-settings-tweaks",
  "version-name": "2.2-pre1",
  "donations": {
    "github": "qwreey"
  }
}


================================================
FILE: old/features/volumeMixer.ts
================================================
import { featureReloader } from "../libs/utility.js"
import { VolumeMixer } from "../libs/volumeMixerHandler.js"
import { Global } from "../global.js"

export class VolumeMixerFeature {
	load() {
		let settings = Global.Settings

		// setup reloader
		featureReloader.enableWithSettingKeys(this, [
			"volume-mixer-enabled",
			"volume-mixer-position",
			"volume-mixer-filtered-apps",
			"volume-mixer-show-description",
			"volume-mixer-show-icon",
			"volume-mixer-filter-mode",
			"volume-mixer-use-regex",
			"volume-mixer-check-description"
		])

		// check is feature enabled
		if (!Global.Settings.get_boolean("volume-mixer-enabled")) return

		// Make volume mixer
		this.volumeMixer = new VolumeMixer({
			'volume-mixer-filtered-apps': settings.get_strv("volume-mixer-filtered-apps"),
			'volume-mixer-filter-mode': settings.get_string("volume-mixer-filter-mode"),
			'volume-mixer-show-description': settings.get_boolean("volume-mixer-show-description"),
			'volume-mixer-show-icon': settings.get_boolean("volume-mixer-show-icon"),
			'volume-mixer-check-description': settings.get_boolean("volume-mixer-check-description"),
			'volume-mixer-use-regex': settings.get_boolean("volume-mixer-use-regex")
		})

		// Insert volume mixer into Quick Settings
		Global.QuickSettingsMenu.addItem(this.volumeMixer.actor, 2)
		if (Global.Settings.get_string("volume-mixer-position") === "top") {
			Global.GetStreamSlider(({ InputStreamSlider }) => {
				Global.QuickSettingsMenu._grid.set_child_above_sibling(
					this.volumeMixer.actor,
					InputStreamSlider
				)
			})
		}
	}

	unload() {
		// disable feature reloader
		featureReloader.disable(this)
		if (this.volumeMixer) this.volumeMixer.destroy()
		this.volumeMixer = null
	}
}


================================================
FILE: old/inputOutput.ts
================================================
import { Global } from "./global.js"
import St from "gi://St"
import * as Volume from "resource:///org/gnome/shell/ui/status/volume.js"
import * as PopupMenu from "resource:///org/gnome/shell/ui/popupMenu.js"
import { FeatureBase, type SettingLoader } from "./libs/shell/feature.js"
import { logger } from "./libs/shared/logger.js"
export class SoundTweakFeature extends FeatureBase {
	// #region settings
	outputShowSelected: boolean
	inputShowSelected: boolean
	inputAlwaysShow: boolean
	outputHide: {name: string}[]
	inputHide: {name: string}[]
	loadSettings(loader: SettingLoader): void {
		this.outputShowSelected = loader.loadBoolean("sound-output-show-selected")
		this.inputShowSelected = loader.loadBoolean("sound-input-show-selected")
		this.inputAlwaysShow = loader.loadBoolean("sound-input-always-show")
		this.outputHide = loader.loadValue("sound-output-hide")
		this.inputHide = loader.loadValue("sound-input-hide")
	}
	// #endregion settings

	onLoad() {
		if (this.outputShowSelected) {
			const label = this.maid.destroyJob(new St.Label({
				style_class: "QSTWEAKS-volume-mixer-label"
			}))
			Global.QuickSettingsMenu.addItem(label, 2)
			Global.GetStreamSlider().then(({ OutputStreamSlider }) => {
				Global.QuickSettingsGrid.set_child_below_sibling(label, OutputStreamSlider)
			}).catch(logger.error)
		}
	}
	onUnload(): void {}
}

	unload() {
		// disable feature reloader
		featureReloader.disable(this)

		if (this._inputListener) {
			this._detachInputLabel()
			Volume.getMixerControl().disconnect(this._inputListener)
			this._inputListener = null
		}
		if (this._inputVisibilityListener) {
			let inputVisibilityListener = this._inputVisibilityListener
			this._inputVisibilityListener = null
			Global.GetStreamSlider(({ InputStreamSlider }) => {
				InputStreamSlider.disconnect(inputVisibilityListener)
				InputStreamSlider.visible = InputStreamSlider._shouldBeVisible()
			})
		}
		if (this._outputListener) {
			this._detachOutputLabel()
			Volume.getMixerControl().disconnect(this._outputListener)
			this._outputListener = null
		}
	}

	// =========================================== Ouput ===========================================
	_setupOutputChangedListener() {
		this._attachOutputLabel()
		this._outputListener = Volume.getMixerControl().connect('active-output-update', (c, id) => this._onOutputDeviceChanged(id))
	}

	_onOutputDeviceChanged(deviceId) {
		const device = Volume.getMixerControl().lookup_output_id(deviceId)
		this.outputLabel.text = this._getDeviceName(device)
	}

	_attachOutputLabel() {
		this.outputLabel = new St.Label()
		this.outputLabel.style_class = "QSTWEAKS-volume-mixer-label"
		Global.QuickSettingsMenu.addItem(this.outputLabel, 2)
		this.outputLabel.visible = Global.Settings.get_boolean("output-show-selected")
		Global.GetStreamSlider(({ OutputStreamSlider }) => {
			Global.QuickSettingsGrid.set_child_below_sibling(this.outputLabel, OutputStreamSlider)
			this.outputLabel.text = this._findActiveDevice(OutputStreamSlider)
		})
	}

	_detachOutputLabel() {
		if (this.outputLabel && this.outputLabel.get_parent()) {
			this.outputLabel.get_parent().remove_child(this.outputLabel)
			this.outputLabel = null
		}
	}

	// =========================================== Input ===========================================
	_setupInputChangedListener() {
		this._attachInputLabel()
		this._inputListener = Volume.getMixerControl().connect('active-input-update', (c, id) => this._onInputDeviceChanged(id))
	}

	_attachInputLabel() {
		this.inputLabel = new St.Label()
		this.inputLabel.style_class = "QSTWEAKS-volume-mixer-label"
		Global.QuickSettingsMenu.addItem(this.inputLabel, 2)
		Global.GetStreamSlider(({ InputStreamSlider }) => {
			Global.QuickSettingsGrid.set_child_below_sibling(this.inputLabel, InputStreamSlider)
			this.inputLabel.text = this._findActiveDevice(InputStreamSlider)
		})
		this._setInputLabelVisibility()
	}

	_onInputDeviceChanged(deviceId) {
		const device = Volume.getMixerControl().lookup_input_id(deviceId)
		this.inputLabel.text = this._getDeviceName(device)
	}

	_detachInputLabel() {
		if (this.inputLabel && this.inputLabel.get_parent()) {
			this.inputLabel.get_parent().remove_child(this.inputLabel)
			this.inputLabel = null
		}
	}

	// =========================================== Input Visbility ===========================================
	_setupInputVisibilityObserver() {
		Global.GetStreamSlider(({ InputStreamSlider }) => {
			this._inputVisibilityListener = InputStreamSlider.connect("notify::visible", () => this._onInputStreamSliderSynced())
			this._onInputStreamSliderSynced()
		})
	}

	_onInputStreamSliderSynced() {
		this._setInputStreamSliderVisibility()
		if (this._inputListener) {
			this._setInputLabelVisibility()
		}
	}

	_setInputStreamSliderVisibility() {
		Global.GetStreamSlider(({ InputStreamSlider }) => {
			InputStreamSlider.visible = InputStreamSlider._shouldBeVisible() || Global.Settings.get_boolean("input-always-show")
		})
	}


	_setInputLabelVisibility() {
		Global.GetStreamSlider(({ InputStreamSlider }) => {
			this.inputLabel.visible = InputStreamSlider.visible && Global.Settings.get_boolean("input-show-selected")
		})
	}


	// =========================================== Utils ===========================================
	_findActiveDevice(sliderObject) {
		// find the current selected input and grab the input text from that
		let menuChildren = sliderObject.menu.box.get_children()[1].get_children()
		for (let index = 0; index < menuChildren.length; index++) {
			let item = menuChildren[index]
			if (item._ornament == PopupMenu.Ornament.CHECK) {
				return item.label.text
			}
		}
		return null
	}

	_getDeviceName(device) {
		if (!device)
			return

		const { description, origin } = device
		const name = origin
			? `${description} – ${origin}`
			: description

		return name
	}
}


================================================
FILE: old/layoutCustomize.ts
================================================
import St from "gi://St"
import { Global } from "../global.js"
import { FeatureBase, type SettingLoader } from "../libs/feature.js"
import { QuickMenuToggle } from "resource:///org/gnome/shell/ui/quickSettings.js"

export class LayoutCustomize extends FeatureBase {
	_scroll: St.ScrollView
	_sections: St.BoxLayout

	// #region settings
	override loadSettings(loader: SettingLoader): void {
	}
	// #endregion settings

	onChild(actor: QuickMenuToggle) {
		actor.get_parent().remove_child(actor)
		this._sections.add_child(actor)
	}
	checkChildren() {
		for (const item of Global.QuickSettingsGrid.get_children()) {
			if (item instanceof QuickMenuToggle) this.onChild(item)
		}
	}

	update() {
		
	}

	override onLoad(): void {
		Global.QuickSettingsBox.vertical = false
		// Global.QuickSettingsBox.add_child(
		// 	new St.Button({height: 100, width: 100, style: "background-color:red;"})
		// )

		this.maid.connectJob(
			Global.QuickSettingsBox, "notify::mapped", ()=>{
				if (Global.QuickSettingsBox.mapped) this.update()
			}
		)
	}
	override onUnload(): void {
		Global.QuickSettingsBox.vertical = true
	}
}


================================================
FILE: old/libs/streamSlider.ts
================================================
import GObject from "gi://GObject"
import Gio from "gi://Gio"
import GLib from "gi://GLib"
import Gvc from "gi://Gvc"

import { QuickSlider } from "resource:///org/gnome/shell/ui/quickSettings.js"
import * as PopupMenu from "resource:///org/gnome/shell/ui/popupMenu.js"

const ALLOW_AMPLIFIED_VOLUME_KEY = 'allow-volume-above-100-percent'

class StreamSlider extends QuickSlider {
	_init(control) {
		super._init()

		this._connections = []  // ADDED BY QWREEY
		this._control = control

		this._inDrag = false
		this._notifyVolumeChangeId = 0

		this._soundSettings = new Gio.Settings({
			schema_id: 'org.gnome.desktop.sound',
		})

		// MODED BY QWREEY
		this._connections.push([
			this._soundSettings,
			this._soundSettings.connect(`changed::${ALLOW_AMPLIFIED_VOLUME_KEY}`,
				() => this._amplifySettingsChanged())
		])
		this._amplifySettingsChanged()

		this._sliderChangedId = this.slider.connect('notify::value',
			() => this._sliderChanged())
		this._connections.push([ // ADDED BY QWREEY
			this.slider, this._sliderChangedId
		])
		this._connections.push([ // MODED BY QWREEY
			this.slider,
			this.slider.connect('drag-begin', () => (this._inDrag = true))
		])
		this._connections.push([ // MODED BY QWREEY
			this.slider,
			this.slider.connect('drag-end', () => {
				this._inDrag = false
				this._notifyVolumeChange()
			})
		])

		this._deviceItems = new Map()

		this._deviceSection = new PopupMenu.PopupMenuSection()
		this.menu.addMenuItem(this._deviceSection)

		this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem())
		this.menu.addSettingsAction(_('Sound Settings'), 'gnome-sound-panel.desktop')

		this._stream = null
		this._volumeCancellable = null
		this._icons = []

		this._sync()
		this._connections.push([ // ADDED BY QWREEY
			this,
			this.connect('destroy', this._destroy.bind(this))
		])
	}

	get stream() {
		return this._stream
	}

	set stream(stream) {
		this._stream?.disconnectObject(this)

		this._stream = stream

		if (this._stream) {
			this._connectStream(this._stream)
			this._updateVolume()
		} else {
			this.emit('stream-updated')
		}

		this._sync()
	}

	_connectStream(stream) {
		stream.connectObject(
			'notify::is-muted', this._updateVolume.bind(this),
			'notify::volume', this._updateVolume.bind(this), this)
	}

	_lookupDevice(_id) {
		throw new GObject.NotImplementedError(
			`_lookupDevice in ${this.constructor.name}`)
	}

	_activateDevice(_device) {
		throw new GObject.NotImplementedError(
			`_activateDevice in ${this.constructor.name}`)
	}

	_addDevice(id) {
		if (this._deviceItems.has(id))
			return

		const device = this._lookupDevice(id)
		if (!device)
			return

		const { description, origin } = device
		const name = origin
			? `${description} – ${origin}`
			: description
		const item = new PopupMenu.PopupImageMenuItem(name, device.get_gicon())
		this._connections.push([
			item,
			item.connect('activate', () => this._activateDevice(device))
		])

		this._deviceSection.addMenuItem(item)
		this._deviceItems.set(id, item)

		this._sync()
	}

	_removeDevice(id) {
		this._deviceItems.get(id)?.destroy()
		if (this._deviceItems.delete(id))
			this._sync()
	}

	_setActiveDevice(activeId) {
		for (const [id, item] of this._deviceItems) {
			item.setOrnament(id === activeId
				? PopupMenu.Ornament.CHECK
				: PopupMenu.Ornament.NONE)
		}
	}

	_shouldBeVisible() {
		return this._stream != null
	}

	_sync() {
		this.visible = this._shouldBeVisible()
		this.menuEnabled = this._deviceItems.size > 1
	}

	_sliderChanged() {
		if (!this._stream)
			return

		let value = this.slider.value
		let volume = value * this._control.get_vol_max_norm()
		let prevMuted = this._stream.is_muted
		let prevVolume = this._stream.volume
		if (volume < 1) {
			this._stream.volume = 0
			if (!prevMuted)
				this._stream.change_is_muted(true)
		} else {
			this._stream.volume = volume
			if (prevMuted)
				this._stream.change_is_muted(false)
		}
		this._stream.push_volume()

		let volumeChanged = this._stream.volume !== prevVolume
		if (volumeChanged && !this._notifyVolumeChangeId && !this._inDrag) {
			this._notifyVolumeChangeId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 30, () => {
				this._notifyVolumeChange()
				this._notifyVolumeChangeId = 0
				return GLib.SOURCE_REMOVE
			})
			GLib.Source.set_name_by_id(this._notifyVolumeChangeId,
				'[gnome-shell] this._notifyVolumeChangeId')
		}
	}

	_notifyVolumeChange() {
		if (this._volumeCancellable)
			this._volumeCancellable.cancel()
		this._volumeCancellable = null

		if (this._stream.state === Gvc.MixerStreamState.RUNNING)
			return // feedback not necessary while playing

		this._volumeCancellable = new Gio.Cancellable()
		let player = global.display.get_sound_player()
		player.play_from_theme('audio-volume-change',
			_('Volume changed'), this._volumeCancellable)
	}

	_changeSlider(value) {
		this.slider.block_signal_handler(this._sliderChangedId)
		this.slider.value = value
		this.slider.unblock_signal_handler(this._sliderChangedId)
	}

	_updateVolume() {
		let muted = this._stream.is_muted
		this._changeSlider(muted
			? 0 : this._stream.volume / this._control.get_vol_max_norm())
		this.emit('stream-updated')
	}

	_amplifySettingsChanged() {
		this._allowAmplified = this._soundSettings.get_boolean(ALLOW_AMPLIFIED_VOLUME_KEY)

		this.slider.maximum_value = this._allowAmplified
			? this.getMaxLevel() : 1

		if (this._stream)
			this._updateVolume()
	}

	getIcon() {
		if (!this._stream)
			return null

		let volume = this._stream.volume
		let n
		if (this._stream.is_muted || volume <= 0) {
			n = 0
		} else {
			n = Math.ceil(3 * volume / this._control.get_vol_max_norm())
			n = Math.clamp(n, 1, this._icons.length - 1)
		}
		return this._icons[n]
	}

	getLevel() {
		if (!this._stream)
			return null

		return this._stream.volume / this._control.get_vol_max_norm()
	}

	getMaxLevel() {
		let maxVolume = this._control.get_vol_max_norm()
		if (this._allowAmplified)
			maxVolume = this._control.get_vol_max_amplified()

		return maxVolume / this._control.get_vol_max_norm()
	}

	// ADDED BY QWREEY
	_destroy() {
		GLib.Source.remove(this._notifyVolumeChangeId)
		for (const item of this._connections) {
			item[0].disconnect(item[1])
		}
		this._connections = null
	}
}
GObject.registerClass({
	Signals: {
		'stream-updated': {},
	},
}, StreamSlider)


================================================
FILE: old/libs/volumeMixerHandlerNotImpled.ts
================================================
/*
 * This code is partially licensed under the gnome-volume-mixer license.
 * For more details, please check the license page in the about tab of the extension settings.
*/
import St from "gi://St"
import Gvc from "gi://Gvc"
import GObject from "gi://GObject"
import Gio from "gi://Gio"
import GLib from "gi://GLib"
import { QuickSlider } from "resource:///org/gnome/shell/ui/quickSettings.js"
import * as PopupMenu from "resource:///org/gnome/shell/ui/popupMenu.js"
import * as Volume from "resource:///org/gnome/shell/ui/status/volume.js"
import Maid from "./libs/maid.js"

const ALLOW_AMPLIFIED_VOLUME_KEY = 'allow-volume-above-100-percent'

// 디바이스 변경 구현하기
// 루프는 오직 컨테이너가 보이는 상태에서만 작동해야함
class StreamSlider extends QuickSlider {
	_init(control: Gvc.MixerControl, stream: Gvc.MixerStream) {
		// ...
		this._maid.connectJob(this.slider, "drag-begin", () => { this._inDrag = true })
		this._maid.connectJob(this.slider, "drag-end", () => { this._inDrag = false })

		// this._deviceItems = new Map()

		// this._deviceSection = new PopupMenu.PopupMenuSection()
		// this.menu.addMenuItem(this._deviceSection)

		this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem())
		this.menu.addSettingsAction(_('Sound Settings'), 'gnome-sound-panel.desktop')
		// ...
	}

	// ...
	_connectStream(stream: Gvc.MixerStream) {
	}
	// ...

	// _lookupDevice(_id) {
	// 	throw new GObject.NotImplementedError(
	// 		`_lookupDevice in ${this.constructor.name}`)
	// }

	// _activateDevice(_device) {
	// 	throw new GObject.NotImplementedError(
	// 		`_activateDevice in ${this.constructor.name}`)
	// }

	// _addDevice(id) {
	// 	if (this._deviceItems.has(id))
	// 		return

	// 	const device = this._lookupDevice(id)
	// 	if (!device)
	// 		return

	// 	const { description, origin } = device
	// 	const name = origin
	// 		? `${description} – ${origin}`
	// 		: description
	// 	const item = new PopupMenu.PopupImageMenuItem(name, device.get_gicon())
	// 	this._connections.push([
	// 		item,
	// 		item.connect('activate', () => this._activateDevice(device))
	// 	])

	// 	this._deviceSection.addMenuItem(item)
	// 	this._deviceItems.set(id, item)

	// 	this._sync()
	// }

	// _removeDevice(id) {
	// 	this._deviceItems.get(id)?.destroy()
	// 	if (this._deviceItems.delete(id))
	// 		this._sync()
	// }

	// _setActiveDevice(activeId) {
	// 	for (const [id, item] of this._deviceItems) {
	// 		item.setOrnament(id === activeId
	// 			? PopupMenu.Ornament.CHECK
	// 			: PopupMenu.Ornament.NONE)
	// 	}
	// }

	// ...
	_shouldBeVisible() {
		return this._stream != null
	}

	// not used
	getIcon() {
		if (!this._stream)
			return null

		let volume = this._stream.volume
		let n
		if (this._stream.is_muted || volume <= 0) {
			n = 0
		} else {
			n = Math.ceil(3 * volume / this._control.get_vol_max_norm())
			n = Math.clamp(n, 1, this._icons.length - 1)
		}
		return this._icons[n]
	}
}


================================================
FILE: old/menus.ts
================================================
// Sound output menu
// Sound input menu
// Bluetooth
// Wifi
// VPN
// Power mode (detailed?)
// Wired
// Hide item from...


================================================
FILE: old/other.ts
================================================
import Adw from "gi://Adw"
import GObject from "gi://GObject"
import Gio from "gi://Gio"
import { gettext as _ } from "resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js"
import Config from "../config.js"
import type QstExtensionPreferences from "../prefs.js"
import {
	Group,
	SwitchRow,
	fixPageScrollIssue,
} from "../libs/prefComponents.js"

export const OtherPage = GObject.registerClass({
	GTypeName: Config.baseGTypeName+"OtherPage",
}, class OtherPage extends Adw.PreferencesPage {
	constructor(settings: Gio.Settings, _prefs: QstExtensionPreferences, window: Adw.PreferencesWindow) {
		super({
			name: "Other",
			title: _("Other"),
			iconName: "preferences-system-symbolic",
		})
		fixPageScrollIssue(this)
	}
})


================================================
FILE: old/panel.ts
================================================


================================================
FILE: old/prefsPages/volumeMixer.ts
================================================
import Adw from "gi://Adw"
import Gtk from "gi://Gtk"
import GObject from "gi://GObject"
import Gio from "gi://Gio"

import { gettext as _ } from "resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js"

import {
	baseGTypeName,
	SwitchRow,
	makeDropdown
} from "../libs/prefComponents.js"

export const VolumeMixerAddFilterDialog = GObject.registerClass({
	GTypeName: baseGTypeName+'VolumeMixerAddFilterDialog',
}, class VolumeMixerAddFilterDialog extends Gtk.Dialog {
	appNameEntry
	filterListData

	constructor(callingWidget, filterListData) {
		super({
			use_header_bar: true,
			transient_for: callingWidget.get_root(),
			destroy_with_parent: true,
			modal: true,
			resizable: false,
			title: _("Add Application to filtering")
		})

		this.filterListData = filterListData

		const addButton = this.add_button(_("Add"), Gtk.ResponseType.OK)
		addButton.get_style_context().add_class('suggested-action')
		addButton.sensitive = false
		this.add_button(_("Cancel"), Gtk.ResponseType.CANCEL)

		const dialogContent = this.get_content_area()
		dialogContent.margin_top = 20
		dialogContent.margin_bottom = 20
		dialogContent.margin_end = 20
		dialogContent.margin_start = 20

		const appNameLabel = new Gtk.Label({
			label: _("Application name"),
			halign: Gtk.Align.START,
			margin_bottom: 10
		})
		dialogContent.append(appNameLabel)

		this.appNameEntry = new Gtk.Entry()
		this.appNameEntry.connect('activate', () => {
			if (this.checkInputValid()) {
				this.response(Gtk.ResponseType.OK)
			}
		})
		dialogContent.append(this.appNameEntry)

		this.appNameEntry.connect("changed", () => {
			addButton.sensitive = this.checkInputValid()
		})
	}

	checkInputValid() {
		if (this.appNameEntry.text.length === 0) {
			return false
		} else if (this.filterListData.indexOf(this.appNameEntry.text) !== -1) {
			return false
		} else {
			return true
		}
	}
})

export const FilterMode = GObject.registerClass({
	Properties: {
		'name': GObject.ParamSpec.string(
			'name', 'name', 'name',
			GObject.ParamFlags.READWRITE,
			null),
		'value': GObject.ParamSpec.string(
			'value', 'value', 'value',
			GObject.ParamFlags.READWRITE,
			null),
	},
}, class FilterMode extends GObject.Object {
	_init(name, value) {
		super._init({ name, value })
	}
})

export const volumeMixerPage = GObject.registerClass({
	GTypeName: baseGTypeName+'volumeMixerPage',
}, class volumeMixerPage extends Adw.PreferencesPage {
	constructor(settings) {
		// group config
		super({
			name: 'volumeMixer',
			title: _('Volume Mixer'),
			iconName: 'audio-volume-high-symbolic',
		})

		this.settings = settings
		this.filterListData = this.settings.get_strv("volume-mixer-filtered-apps")

		const generalGroup = new Adw.PreferencesGroup({
			title: _("General"),
			description: _("Enchant input/output slider")
		})
		SwitchRow({
			parent: generalGroup,
			title: _("Show current audio output selection"),
			value: settings.get_boolean("output-show-selected"),
			subtitle: _("Always show the current audio output selection above the volume slider"),
			bind: "output-show-selected]
		})
		SwitchRow({
			parent: generalGroup,
			title: _("Show current audio input selection"),
			value: settings.get_boolean("input-show-selected"),
			subtitle: _("Always show the current audio input selection above the volume slider"),
			bind: "input-show-selected]
		})
		SwitchRow({
			parent: generalGroup,
			title: _("Always show input"),
			value: settings.get_boolean("input-always-show"),
			subtitle: _("Always show the audio input volume slider, even when there is no audio input stream."),
			bind: "input-always-show]
		})
		this.add(generalGroup)

		// volumeMixerGroup
		const volumeMixerGroup = new Adw.PreferencesGroup({
			title: _("Add volume mixer (PulseAudio, Pipewire)"),
			description: _("Turn on to make the volume mixer visible\nForked from https://github.com/mymindstorm/gnome-volume-mixer"),
			headerSuffix: SwitchRow({
				title: "",
				value: settings.get_boolean("volume-mixer-enabled"),
				bind: "volume-mixer-enabled",
			})
		})
		makeDropdown({ // move to bottom
			parent: volumeMixerGroup,
			title: _("Position"),
			subtitle: _("Set volume mixer position"),
			value: this.settings.get_string('volume-mixer-position'),
			type: "string",
			bind: [this.settings, 'volume-mixer-position'],
			items: [
				{name: _("Top (Below Output/Input slider)"), value: "top"},
				{name: _("Bottom"), value: "bottom"},
			],
			sensitiveBind: "volume-mixer-enabled",
		})
		SwitchRow({ // show-description
			title: _('Show stream Description'),
			subtitle: _('Show audio stream description above the slider'),
			value: this.settings.get_boolean('volume-mixer-show-description'),
			parent: volumeMixerGroup,
			bind: [this.settings, 'volume-mixer-show-description'],
			sensitiveBind: "volume-mixer-enabled",
		})
		SwitchRow({ // show-icon
			title: _('Show stream Icon'),
			subtitle: _('Show application icon in front of the slider'),
			value: this.settings.get_boolean('volume-mixer-show-icon'),
			parent: volumeMixerGroup,
			bind: [this.settings, 'volume-mixer-show-icon'],
			sensitiveBind: "volume-mixer-enabled",
		})
		this.add(volumeMixerGroup)

		// Application filter settings group
		const filterGroup = new Adw.PreferencesGroup({
			title: "",
			description: _('Filter applications shown in the volume mixer.'),
		})
		this.add(filterGroup)

		// filter-mode
		makeDropdown({
			parent: filterGroup,
			title: _("Filter Mode"),
			value: this.settings.get_string('volume-mixer-filter-mode'),
			type: "string",
			bind: [this.settings, 'volume-mixer-filter-mode'],
			items: [
				{name: _("Blacklist"), value: "block"},
				{name: _("Whitelist"), value: "allow"},
			],
			sensitiveBind: "volume-mixer-enabled",
		})
		SwitchRow({
			parent: filterGroup,
			title: _('Using Javascript Regex'),
			subtitle: _('Use Javascript RegExp for filtering app name or description'),
			value: this.settings.get_boolean('volume-mixer-use-regex'),
			bind: [this.settings, 'volume-mixer-use-regex'],
			sensitiveBind: "volume-mixer-enabled",
		})
		SwitchRow({
			parent: filterGroup,
			title: _("Check Stream Description"),
			subtitle: _("Check Description also"),
			value: this.settings.get_boolean('volume-mixer-check-description'),
			bind: [this.settings, 'volume-mixer-check-description'],
			sensitiveBind: "volume-mixer-enabled",
		})

		// group to act as spacer for filter list
		this.filteredAppsGroup = new Adw.PreferencesGroup()
		settings.bind(
			"volume-mixer-enabled",
			this.filteredAppsGroup,'sensitive',
			Gio.SettingsBindFlags.DEFAULT
		)
		this.filteredAppsGroup.sensitive = settings.get_boolean("volume-mixer-enabled")
		this.add(this.filteredAppsGroup)

		// List of filtered apps
		for (const filteredAppName of this.filterListData) {
			this.filteredAppsGroup.add(this.buildFilterListRow(filteredAppName))
		}

		// Add filter entry button
		this.createAddFilteredAppButtonRow()

		// TODO: modes
		// - group by application
		// - group by application but as a dropdown with streams
		// - show all streams
		// TODO: go thru github issues
		// popularity: page 26, 5th from the top
		// TODO: style
	}

	createAddFilteredAppButtonRow() {
		// I wanted to use Adw.PrefrencesRow, but you can't get the 'row-activated' signal unless it's part of a Gtk.ListBox.
		// Adw.PrefrencesGroup doesn't extend Gtk.ListBox.
		// TODO: Learn a less hacky to do this. I'm currently too new to GTK to know the best practice.
		this.addFilteredAppButtonRow = new Adw.ActionRow()
		const addIcon = Gtk.Image.new_from_icon_name("list-add")
		addIcon.height_request = 40
		this.addFilteredAppButtonRow.set_child(addIcon)
		this.filteredAppsGroup.add(this.addFilteredAppButtonRow)
		// It won't send 'activated' signal w/o this being set.
		this.addFilteredAppButtonRow.activatable_widget = addIcon
		this.addFilteredAppButtonRow.connect('activated', (callingWidget) => {
			this.showFilteredAppDialog(callingWidget, this.filterListData)
		})
	}

	buildFilterListRow(filteredAppName) {
		const filterListRow = new Adw.PreferencesRow({
			title: filteredAppName,
			activatable: false,
		})

		// Make box for custom row
		const filterListBox = new Gtk.Box({
			margin_bottom:6,
			margin_top: 6,
			margin_end: 15,
			margin_start: 15
		})

		// Add title
		const filterListLabel = Gtk.Label.new(filterListRow.title)
		filterListLabel.hexpand = true
		filterListLabel.halign = Gtk.Align.START
		filterListBox.append(filterListLabel)

		// Add remove button
		const filterListButton = new Gtk.Button({
			halign: Gtk.Align.END
		})

		// Add icon to remove button
		const filterListImage = Gtk.Image.new_from_icon_name("user-trash-symbolic")
		filterListButton.set_child(filterListImage)

		// Tie action to remove button
		filterListButton.connect("clicked", (_button) => this.removeFilteredApp(filteredAppName, filterListRow))

		filterListBox.append(filterListButton)
		filterListRow.set_child(filterListBox)

		return filterListRow
	}

	removeFilteredApp(filteredAppName, filterListRow) {
		this.filterListData.splice(this.filterListData.indexOf(filteredAppName), 1)
		this.settings.set_strv("volume-mixer-filtered-apps", this.filterListData)
		this.filteredAppsGroup.remove(filterListRow)
	}

	addFilteredApp(filteredAppName) {
		this.filterListData.push(filteredAppName)
		this.settings.set_strv("volume-mixer-filtered-apps", this.filterListData)
		this.filteredAppsGroup.remove(this.addFilteredAppButtonRow)
		this.filteredAppsGroup.add(this.buildFilterListRow(filteredAppName))
		this.filteredAppsGroup.add(this.addFilteredAppButtonRow)
	}

	showFilteredAppDialog(callingWidget, filterListData) {
		const dialog = new VolumeMixerAddFilterDialog(callingWidget, filterListData)
		dialog.connect('response', (_dialog, response) => {
			if (response === Gtk.ResponseType.OK) {
				this.addFilteredApp(dialog.appNameEntry.text)
			}
			dialog.close()
			dialog.destroy()
		})
		dialog.show()
	}
})


================================================
FILE: old/sidebarPrefs.ts
================================================
import Gtk from "gi://Gtk"
import Gdk from "gi://Gdk"
import Gio from "gi://Gio"
import Adw from "gi://Adw"
import { ExtensionPreferences } from "resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js"
import { gettext as _ } from "resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js"
import { WidgetsPage } from "./prefPages/widgets.js"
import { TogglesPage } from "./prefPages/toggles.js"
import { OtherPage } from "./prefPages/other.js"
import { AboutPage } from "./prefPages/about.js"
import { MenuPage } from "./prefPages/menu.js"
import { ContributorsRow, LicenseRow, Row, Group } from "./libs/prefComponents.js"
import Config from "./config.js"

var pageList = [
	WidgetsPage,
	TogglesPage,
	MenuPage,
	OtherPage,
	AboutPage,
]

export default class QstExtensionPreferences extends ExtensionPreferences {
	appendIconPath(path: string) {
		const iconTheme = Gtk.IconTheme.get_for_display(Gdk.Display.get_default())
		if (!iconTheme.get_search_path().includes(path))
			iconTheme.add_search_path(path)
	}

	readExtensionFile(path: string) {
		const decoder = new TextDecoder()
		const file = Gio.File.new_for_path(`${this.path}/${path}`)
		const content = file.load_contents(null)[1]
		return decoder.decode(content)
	}

	getContributorRows(): ContributorsRow.Contributor[][] {
		const contributors = JSON.parse(
			this.readExtensionFile("media/contributors/data.json")
		) as ContributorsRow.Contributor[]
		if (!contributors.length) return []
		const rows: ContributorsRow.Contributor[][] = [[]]
		contributors.reduce((currentRow: ContributorsRow.Contributor[], obj: ContributorsRow.Contributor)=>{
			if (currentRow.length >= 4) rows.push(currentRow = [])
			currentRow.push(obj)
			return currentRow
		}, rows[0])
		return rows
	}

	getLicenses(): LicenseRow.License[] {
		const licenses = JSON.parse(
			this.readExtensionFile("media/licenses.json")
		) as LicenseRow.License[]
		for (const item of licenses) {
			if (item.file) {
				item.content = async () => this.readExtensionFile(item.file)
			}
		}
		return licenses
	}

	getVersionString(): string {
		let version = Config.version.toUpperCase().replace(/-.*?$/, "")
		if (this.metadata.version) {
			version += "." + this.metadata.version
		}
		version += "   —   "
		if (Config.isReleaseBuild) {
			version += _("Stable") 
		} else if (Config.isDevelopmentBuild) {
			version += _("Development")
		} else {
			version += _("Preview")
		}
		if (Config.isGithubBuild) {
			version += "  " + _("(Github Release)")
		} else if (!this.metadata.version) {
			version += "  " + _("(Built from source)")
		}
		return version
	}

	getChangelog(): string {
		return this.readExtensionFile("media/Changelog.md")
	}

	async fillPreferencesWindow(window: Adw.PreferencesWindow) {
		let settings = this.getSettings()

		// Register icon path
		this.appendIconPath(this.path + "/media")
		this.appendIconPath(this.path + "/media/contributors")

		// Set window options
		window.set_search_enabled(true)
		window.set_default_size(720, 640)

		// Create sidebar area
		const sidebar = new Adw.NavigationPage({
			title: this.metadata.name,
			width_request: 196,
		})
		const sidebarToolbar = new Adw.ToolbarView()
		const sidebarHeader = new Adw.HeaderBar()
		sidebarToolbar.add_top_bar(sidebarHeader)
		sidebar.set_child(sidebarToolbar)
		const sidebarPage = new Adw.PreferencesPage()
		sidebarToolbar.set_content(sidebarPage)
		
		// Create content area
		const content = new Adw.NavigationPage({
			title: "undefined"
		})
		const contentToolbar = new Adw.ToolbarView()
		const contentHeader = new Adw.HeaderBar()
		contentToolbar.add_top_bar(contentHeader)
		content.set_child(contentToolbar)

		// Create navigation
		const navigation = new Adw.NavigationSplitView({
			vexpand: true,
			hexpand: true,
		})
		navigation.set_show_content(true)
		navigation.set_sidebar(sidebar)
		navigation.set_content(content)
		window.set_content(navigation)
		window.add(new Adw.PreferencesPage())

		const open = (page: Adw.PreferencesPage) => {
			contentToolbar.content = page
			content.title = page.title
		}
		const sidebarGroup = Group({
			parent: sidebarPage,
		})
		for (const PageClass of pageList) {
			const page = new PageClass(settings, this, window)
			const row = Row({
				parent: sidebarGroup,
				title: page.title,
				icon: page.iconName,
				noLinkIcon: true,
				action: ()=>{
					open(page)
				}
			})
			if (!contentToolbar.content) open(page)
		}
	}
}


================================================
FILE: old/widgetManager.ts
================================================
import St from "gi://St"
import { Global } from "../global.js"
import Maid from "./maid.js"

export class WidgetManager {
    _scroll: St.ScrollView
    _sections: St.BoxLayout
    _maid: Maid
    _boxes: St.BoxLayout[]

    update() {
        this._boxes[]
    }

    load(): void {
        this._maid = new Maid()
        Global.QuickSettingsBox.vertical = false

        this._maid.connectJob(
            Global.Settings,
            "changed::layout",
            this.update.bind(this)
        )

        this._maid.connectJob(
            Global.QuickSettingsBox, "notify::mapped", ()=>{
                if (Global.QuickSettingsBox.mapped) this.update()
            }
        )
    }
    unload(): void {
        this._maid.destroy()
        Global.QuickSettingsBox.vertical = true
    }
}


================================================
FILE: package.json
================================================
{
  "name": "quick-settings-tweaks",
  "description": "A TypeScript GNOME Extension",
  "version": "0.0.0",
  "author": {
    "email": "me@qwreey.moe",
    "name": "qwreey",
    "url": "https://github.com/qwreey"
  },
  "type": "module",
  "sideEffects": false,
  "license": "LGPL-3.0-or-later",
  "homepage": "https://github.com/qwreey/quick-settings-tweaks#readme",
  "private": true,
  "bugs": {
    "url": "https://github.com/qwreey/quick-settings-tweaks/issues"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/qwreey/quick-settings-tweaks.git"
  },
  "devDependencies": {
    "sass": "^1.83.4",
    "typescript": "^5.7.3"
  },
  "dependencies": {
    "@girs/gjs": "^4.0.0-beta.38",
    "@girs/gnome-shell": "^49.0.1"
  }
}


================================================
FILE: po/ca.po
================================================
# AUTHORS
# jcatfor https://github.com/jcatfor, 2023.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-07-20 15:34+0000\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: target/out/libs/prefs/components.js:57
msgid "Details"
msgstr ""

#: target/out/libs/prefs/components.js:144
msgid "This feature marked as experimental"
msgstr ""

#: target/out/libs/prefs/components.js:274
msgid "Reset to default"
msgstr ""

#: target/out/libs/prefs/components.js:512
msgid "Theme default"
msgstr ""

#: target/out/libs/prefs/components.js:853
msgid "Homepage"
msgstr ""

#: target/out/libs/prefs/components.js:859
#: target/out/libs/prefs/components.js:863 target/out/prefPages/about.js:49
#: target/out/prefPages/about.js:51 target/out/prefPages/about.js:56
msgid "License"
msgstr ""

#: target/out/libs/prefs/components.js:860
msgid "Loading ..."
msgstr ""

#: target/out/libs/prefs/components.js:869
msgid "Affected Files"
msgstr ""

#: target/out/libs/prefs/components.js:924
msgid "Changelog"
msgstr ""

#: target/out/libs/prefs/components.js:938
msgid "(Current)"
msgstr ""

#: target/out/libs/prefs/components.js:969
#, javascript-format
msgid "> **Date:** %s"
msgstr ""

#: target/out/libs/prefs/components.js:970
#, javascript-format
msgid "> **Git Hash:** %s"
msgstr ""

#: target/out/libs/prefs/components.js:971
#, javascript-format
msgid "> **Build Number:** %d"
msgstr ""

#: target/out/libs/prefs/components.js:1034
msgid "Padding"
msgstr ""

#: target/out/libs/prefs/components.js:1038
msgid "Top"
msgstr ""

#: target/out/libs/prefs/components.js:1049
msgid "Bottom"
msgstr ""

#: target/out/libs/prefs/components.js:1060
msgid "Left"
msgstr ""

#: target/out/libs/prefs/components.js:1071
msgid "Right"
msgstr ""

#: target/out/prefs.js:60
msgid "Stable"
msgstr ""

#: target/out/prefs.js:63
msgid "Development"
msgstr ""

#: target/out/prefs.js:66
msgid "Preview"
msgstr ""

#: target/out/prefs.js:69
msgid "(Github Release)"
msgstr ""

#: target/out/prefs.js:72
msgid "(Built from source)"
msgstr ""

#: target/out/features/widget/notifications.js:26
msgid "No Notifications"
msgstr ""

#: target/out/features/widget/notifications.js:58
#: target/out/features/widget/notifications.js:122
msgid "Clear"
msgstr ""

# Quick settings notifications title text
# Notifications title
#: target/out/features/widget/notifications.js:76
msgid "Notifications"
msgstr "Notificacions"

#: target/out/features/widget/notifications.js:105
#: target/out/features/toggle/dndQuickToggle.js:10
#: target/out/prefPages/layout.js:345 target/out/prefPages/layout.js:485
msgid "Do Not Disturb"
msgstr ""

#: target/out/features/widget/media.js:118
msgid "Unknown title"
msgstr ""

#: target/out/features/widget/media.js:888
msgid "Media"
msgstr ""

#: target/out/features/widget/volumeMixer.js:105
msgid "Volume changed"
msgstr ""

#: target/out/features/widget/volumeMixer.js:463
msgid "Open volumx mixer"
msgstr ""

#: target/out/features/widget/volumeMixer.js:480
msgid "Volume Mixer"
msgstr ""

#: target/out/features/widget/weather.js:73
msgid "Weather"
msgstr ""

#: target/out/features/widget/weather.js:192
msgid "Location has not been set"
msgstr ""

# Unsafe mode
#: target/out/features/toggle/unsafeQuickToggle.js:11
#: target/out/prefPages/layout.js:346 target/out/prefPages/layout.js:496
msgid "Unsafe Mode"
msgstr "Mode no segur"

#: target/out/prefPages/widgets.js:11
msgid "Handle radius"
msgstr ""

#: target/out/prefPages/widgets.js:12
msgid "Set this to 0 to use default radius"
msgstr ""

#: target/out/prefPages/widgets.js:18
msgid "Handle color"
msgstr ""

#: target/out/prefPages/widgets.js:36
msgid "Slider style"
msgstr ""

#: target/out/prefPages/widgets.js:39
msgid "Slim"
msgstr ""

#: target/out/prefPages/widgets.js:40 target/out/prefPages/layout.js:766
msgid "Default"
msgstr ""

#: target/out/prefPages/widgets.js:48 target/out/prefPages/widgets.js:173
msgid "Background color"
msgstr ""

#: target/out/prefPages/widgets.js:55
msgid "Active Background color"
msgstr ""

#: target/out/prefPages/widgets.js:62
msgid "Thickness"
msgstr ""

#: target/out/prefPages/widgets.js:66
msgid "Set this to 0 to use default thickness"
msgstr ""

#: target/out/prefPages/widgets.js:76
msgid "Widgets"
msgstr ""

#: target/out/prefPages/widgets.js:83 target/out/prefPages/widgets.js:136
#: target/out/prefPages/widgets.js:162 target/out/prefPages/widgets.js:224
msgid "Media Widget"
msgstr ""

#: target/out/prefPages/widgets.js:88
msgid "Turn on to make the media widget visible on the Quick Settings panel"
msgstr ""

#: target/out/prefPages/widgets.js:92 target/out/prefPages/widgets.js:280
#: target/out/prefPages/widgets.js:343
msgid "Compact mode"
msgstr ""

#: target/out/prefPages/widgets.js:93
msgid ""
"Make Media Controls widget smaller\n"
"Make it more similar in size to the notification message"
msgstr ""

#: target/out/prefPages/widgets.js:99
msgid "Control buttons opacity"
msgstr ""

#: target/out/prefPages/widgets.js:100
msgid "Set this to 255 to make opaque, and 0 to make transparent"
msgstr ""

#: target/out/prefPages/widgets.js:108
msgid "Show next button"
msgstr ""

#: target/out/prefPages/widgets.js:109
msgid "Add next contorl button next to description"
msgstr ""

#: target/out/prefPages/widgets.js:115
msgid "Show previous button"
msgstr ""

#: target/out/prefPages/widgets.js:116
msgid "Add previous contorl button next to description"
msgstr ""

#: target/out/prefPages/widgets.js:122
msgid "Show pause button"
msgstr ""

#: target/out/prefPages/widgets.js:123
msgid "Add pause contorl button next to description"
msgstr ""

#: target/out/prefPages/widgets.js:129 target/out/prefPages/widgets.js:138
msgid "Show progress bar"
msgstr ""

#: target/out/prefPages/widgets.js:130 target/out/prefPages/widgets.js:139
msgid "Add progress bar under description"
msgstr ""

#: target/out/prefPages/widgets.js:155 target/out/prefPages/widgets.js:164
msgid "Gradient background"
msgstr ""

#: target/out/prefPages/widgets.js:156 target/out/prefPages/widgets.js:169
msgid ""
"Use gradient background extracted from cover image\n"
"May affect performance slightly"
msgstr ""

#: target/out/prefPages/widgets.js:174
msgid "Base background color"
msgstr ""

#: target/out/prefPages/widgets.js:182
msgid "Start opacity"
msgstr ""

#: target/out/prefPages/widgets.js:183
msgid "Adjust left side transparency, Set this to 1000 to make opaque"
msgstr ""

#: target/out/prefPages/widgets.js:190
msgid "Start color"
msgstr ""

#: target/out/prefPages/widgets.js:191
msgid "Adjust left side background color mixing, Set this to 1000 to show extracted color"
msgstr ""

#: target/out/prefPages/widgets.js:198
msgid "End opacity"
msgstr ""

#: target/out/prefPages/widgets.js:199
msgid "Adjust right side transparency, Set this to 1000 to make opaque"
msgstr ""

#: target/out/prefPages/widgets.js:206
msgid "End color"
msgstr ""

#: target/out/prefPages/widgets.js:207
msgid "Adjust right side background color mixing, Set this to 1000 to show extracted color"
msgstr ""

#: target/out/prefPages/widgets.js:216 target/out/prefPages/widgets.js:226
msgid "Round clip effect"
msgstr ""

#: target/out/prefPages/widgets.js:217 target/out/prefPages/widgets.js:231
msgid "Use round clip effect to make transition more natural"
msgstr ""

#: target/out/prefPages/widgets.js:234
msgid "Padding adjustment"
msgstr ""

#: target/out/prefPages/widgets.js:236
msgid "Adjust clip effect padding, edit this if your theme has a different margin or padding"
msgstr ""

#: target/out/prefPages/widgets.js:253 target/out/prefPages/widgets.js:318
#: target/out/prefPages/widgets.js:350
msgid "Remove shadow"
msgstr ""

#: target/out/prefPages/widgets.js:254
msgid ""
"Remove shadow from media message\n"
"Use if your theme creates unnecessary shadows"
msgstr ""

#: target/out/prefPages/widgets.js:260
msgid "Smooth scroll speed"
msgstr ""

#: target/out/prefPages/widgets.js:261
msgid "Adjust trackpad and trackpoint scroll speed, negative number for invert direction"
msgstr ""

#: target/out/prefPages/widgets.js:271
msgid "Notifications Widget"
msgstr ""

#: target/out/prefPages/widgets.js:276
msgid "Turn on to make the notifications widget visible on the Quick Settings panel"
msgstr ""

#: target/out/prefPages/widgets.js:281
msgid "Make notifications smaller"
msgstr ""

#: target/out/prefPages/widgets.js:287 target/out/prefPages/widgets.js:418
msgid "Max height"
msgstr ""

#: target/out/prefPages/widgets.js:288
#, javascript-format
msgid "Set maximum height of the Notifications widget, default is %d. Set this to 0 to disable max height"
msgstr ""

#: target/out/prefPages/widgets.js:296 target/out/prefPages/widgets.js:441
msgid "Fade out offset"
msgstr ""

#: target/out/prefPages/widgets.js:297 target/out/prefPages/widgets.js:442
msgid "Set position of the fade out effect begins. Set this to 0 to disable fade out effect. default is 46"
msgstr ""

#: target/out/prefPages/widgets.js:304
msgid "Auto hide"
msgstr ""

#: target/out/prefPages/widgets.js:305
msgid "Hide the Notifications widget when have no notifications"
msgstr ""

#: target/out/prefPages/widgets.js:311
msgid "Use native controls"
msgstr ""

#: target/out/prefPages/widgets.js:312
msgid "Use native dnd switch and clear button"
msgstr ""

#: target/out/prefPages/widgets.js:319
msgid ""
"Remove shadow from notification message\n"
"Use if your theme creates unnecessary shadows"
msgstr ""

#: target/out/prefPages/widgets.js:325 target/out/prefPages/widgets.js:427
msgid "Show scrollbar"
msgstr ""

#: target/out/prefPages/widgets.js:326
msgid "Show scrollbar on message list"
msgstr ""

#: target/out/prefPages/widgets.js:334
msgid "Weather Widget"
msgstr ""

#: target/out/prefPages/widgets.js:339
msgid "Turn on to make the weather widget visible on the Quick Settings panel"
msgstr ""

#: target/out/prefPages/widgets.js:344
msgid "Make weather widget smaller"
msgstr ""

#: target/out/prefPages/widgets.js:351
msgid ""
"Remove shadow from weather widget\n"
"Use if your theme creates unnecessary shadows"
msgstr ""

#: target/out/prefPages/widgets.js:357
msgid "Click command"
msgstr ""

#: target/out/prefPages/widgets.js:363
msgid "Show location"
msgstr ""

#: target/out/prefPages/widgets.js:364
msgid "Show the location label on header"
msgstr ""

#: target/out/prefPages/widgets.js:373
msgid "Forecast interval"
msgstr ""

#: target/out/prefPages/widgets.js:374
msgid "Adjust forecast interval in hour"
msgstr ""

#: target/out/prefPages/widgets.js:381
msgid "Max forecasts"
msgstr ""

#: target/out/prefPages/widgets.js:382
msgid "Adjust max forecasts"
msgstr ""

#: target/out/prefPages/widgets.js:388 target/out/prefPages/widgets.js:456
msgid "Volume mixer Widget"
msgstr ""

#: target/out/prefPages/widgets.js:393
msgid "Turn on to make the volume mixer widget visible on the Quick Settings panel"
msgstr ""

#: target/out/prefPages/widgets.js:397
msgid "Label text"
msgstr ""

#: target/out/prefPages/widgets.js:398
msgid "Choose label above slider text source"
msgstr ""

#: target/out/prefPages/widgets.js:400
msgid "Both"
msgstr ""

#: target/out/prefPages/widgets.js:401
msgid "Title"
msgstr ""

#: target/out/prefPages/widgets.js:402
msgid "Description"
msgstr ""

#: target/out/prefPages/widgets.js:403
msgid "None"
msgstr ""

#: target/out/prefPages/widgets.js:411
msgid "Label opacity"
msgstr ""

#: target/out/prefPages/widgets.js:412
msgid ""
"Adjust label opacity.\n"
"Set this to 255 to make opaque, and 0 to make transparent"
msgstr ""

#: target/out/prefPages/widgets.js:419
#, javascript-format
msgid "Set maximum height of the Volume mixer widget, default is %d. Set this to 0 to disable max height"
msgstr ""

#: target/out/prefPages/widgets.js:428
msgid "Show scrollbar on mixer list"
msgstr ""

#: target/out/prefPages/widgets.js:434
msgid "Show stream icon"
msgstr ""

#: target/out/prefPages/widgets.js:435
msgid "Show stream icon above mixer sliders"
msgstr ""

#: target/out/prefPages/widgets.js:450 target/out/prefPages/widgets.js:458
msgid "Attach to output slider"
msgstr ""

#: target/out/prefPages/widgets.js:451 target/out/prefPages/widgets.js:459
msgid "Attach volume mixer menu button to output slider. Use if you prefer compact layout"
msgstr ""

#: target/out/prefPages/widgets.js:468
msgid "Menu icon"
msgstr ""

#: target/out/prefPages/about.js:12 target/out/prefPages/about.js:32
msgid "About"
msgstr ""

#: target/out/prefPages/about.js:33
msgid "Common extension informations"
msgstr ""

#: target/out/prefPages/about.js:36 target/out/prefPages/about.js:40
msgid "Changelogs"
msgstr ""

#: target/out/prefPages/about.js:37 target/out/prefPages/about.js:41
msgid "View the change history for this extension"
msgstr ""

#: target/out/prefPages/about.js:50 target/out/prefPages/about.js:57
msgid "License of codes"
msgstr ""

#: target/out/prefPages/about.js:63 target/out/prefPages/about.js:65
#: target/out/prefPages/about.js:69
msgid "Contributors"
msgstr ""

#: target/out/prefPages/about.js:64 target/out/prefPages/about.js:70
msgid "The creators of this extension"
msgstr ""

#: target/out/prefPages/about.js:74
msgid "More contributors"
msgstr ""

#: target/out/prefPages/about.js:75
msgid "See more contributors on github"
msgstr ""

#: target/out/prefPages/about.js:85
msgid "Link"
msgstr ""

#: target/out/prefPages/about.js:86
msgid "External links about this extension"
msgstr ""

#: target/out/prefPages/about.js:90
msgid "Donate via github sponsors"
msgstr ""

#: target/out/prefPages/about.js:91
msgid "Support development!"
msgstr ""

#: target/out/prefPages/about.js:97
msgid "Rate and comment the extension!"
msgstr ""

#: target/out/prefPages/about.js:102
msgid "Github Repository"
msgstr ""

#: target/out/prefPages/about.js:103
msgid ""
"Add Star on Repository is helping me a lot!\n"
"Please, if you found bug from this extension, you can make issue to make me know that!\n"
"Or, you can create PR with wonderful features!"
msgstr ""

#: target/out/prefPages/about.js:109
msgid "Add translation to this extension!"
msgstr ""

#: target/out/prefPages/about.js:115
msgid "Debug"
msgstr ""

#: target/out/prefPages/about.js:116
msgid "Extension debugging options"
msgstr ""

#: target/out/prefPages/about.js:120
msgid "Expose environment"
msgstr ""

#: target/out/prefPages/about.js:121
msgid "Expose extension environment to globalThis.qst"
msgstr ""

#: target/out/prefPages/about.js:126
msgid "Show layout border"
msgstr ""

#: target/out/prefPages/about.js:127
msgid "Show layout borders on Quick Settings"
msgstr ""

#: target/out/prefPages/about.js:132
msgid "Log level"
msgstr ""

#: target/out/prefPages/about.js:135
msgid "none"
msgstr ""

#: target/out/prefPages/about.js:136
msgid "error"
msgstr ""

#: target/out/prefPages/about.js:137
msgid "info"
msgstr ""

#: target/out/prefPages/about.js:138
msgid "debug"
msgstr ""

#: target/out/prefPages/toggles.js:12
msgid "Toggles"
msgstr ""

#: target/out/prefPages/toggles.js:19
msgid "DND Quick Toggle"
msgstr ""

#: target/out/prefPages/toggles.js:20
msgid "Turn on to add the DND quick toggle on the Quick Settings panel"
msgstr ""

#: target/out/prefPages/toggles.js:28
msgid "DND indicator position"
msgstr ""

#: target/out/prefPages/toggles.js:29
msgid "Set DND indicator position"
msgstr ""

#: target/out/prefPages/toggles.js:33
msgid "System Tray"
msgstr ""

#: target/out/prefPages/toggles.js:34
msgid "Date Menu Button"
msgstr ""

#: target/out/prefPages/toggles.js:41
msgid "Unsafe Mode Quick Toggle"
msgstr ""

#: target/out/prefPages/toggles.js:42
msgid "Turn on to add the unsafe quick toggle on the Quick Settings panel"
msgstr ""

#: target/out/prefPages/toggles.js:50
msgid "Save last session state"
msgstr ""

#: target/out/prefPages/toggles.js:51
msgid "Turn on to save last session unsafe state"
msgstr ""

#: target/out/prefPages/menu.js:9 target/out/prefPages/menu.js:141
msgid "Advanced animation style"
msgstr ""

#: target/out/prefPages/menu.js:13
msgid "Open Duration"
msgstr ""

#: target/out/prefPages/menu.js:14
msgid "Open animation duration in microseconds"
msgstr ""

#: target/out/prefPages/menu.js:21
msgid "Close Duration"
msgstr ""

#: target/out/prefPages/menu.js:22
msgid "Close animation duration in microseconds"
msgstr ""

#: target/out/prefPages/menu.js:29
msgid "Grid Content Opacity"
msgstr ""

#: target/out/prefPages/menu.js:30
msgid ""
"Adjust grid content opacity.\n"
"Set this to 255 to make opaque, and 0 to make transparent"
msgstr ""

#: target/out/prefPages/menu.js:37
msgid "Background Blur Radius"
msgstr ""

#: target/out/prefPages/menu.js:38
msgid ""
"Adjust background blur radius.\n"
"Set this to 0 to disable blur effect"
msgstr ""

#: target/out/prefPages/menu.js:45
msgid "Background Brightness"
msgstr ""

#: target/out/prefPages/menu.js:46
msgid ""
"Adjust background brightness.\n"
"Set this to 1000 to disable brightness control effect.\n"
"Not impacts on gnome-shell's default dim effect."
msgstr ""

#: target/out/prefPages/menu.js:53
msgid "Background Opacity"
msgstr ""

#: target/out/prefPages/menu.js:54
msgid ""
"Adjust background opacity.\n"
"Set this to 255 to make opaque, and 0 to make transparent"
msgstr ""

#: target/out/prefPages/menu.js:61
msgid "Background X Scale"
msgstr ""

#: target/out/prefPages/menu.js:62
msgid "Adjust background x scale, 1000 means 1.0 scale"
msgstr ""

#: target/out/prefPages/menu.js:69
msgid "Background Y Scale"
msgstr ""

#: target/out/prefPages/menu.js:70
msgid "Adjust background y scale, 1000 means 1.0 scale"
msgstr ""

#: target/out/prefPages/menu.js:84
msgid "Menu"
msgstr ""

#: target/out/prefPages/menu.js:91
msgid "Overlay Mode"
msgstr ""

#: target/out/prefPages/menu.js:92
msgid "Display toggle, power, and sound menus as overlay"
msgstr ""

#: target/out/prefPages/menu.js:101
msgid "Overlay Width"
msgstr ""

#: target/out/prefPages/menu.js:102
msgid ""
"Adjust overlay menu width\n"
"Set this to 0 to disable adjusting"
msgstr ""

#: target/out/prefPages/menu.js:109
msgid "Overlay Animation Duration"
msgstr ""

#: target/out/prefPages/menu.js:110
msgid ""
"Custom menu open animation duration in microseconds\n"
"Set this to 0 to disable custom animation"
msgstr ""

#: target/out/prefPages/menu.js:117
msgid "Overlay Animation Style"
msgstr ""

#: target/out/prefPages/menu.js:118
msgid "Custom menu open animation style"
msgstr ""

#: target/out/prefPages/menu.js:120
msgid "Flyout"
msgstr ""

#: target/out/prefPages/menu.js:121
msgid "Dialog"
msgstr ""

#: target/out/prefPages/menu.js:130 target/out/prefPages/menu.js:143
msgid "Animation"
msgstr ""

#: target/out/prefPages/menu.js:131
msgid ""
"Add menu animation on toggle menu opening and closing\n"
"To get the best feel, turn on overlay mode"
msgstr ""

#: target/out/prefPages/menu.js:142
msgid "Adjust speed, blur, scale, and opacity"
msgstr ""

#: target/out/prefPages/layout.js:25
msgid "The item not found"
msgstr ""

#: target/out/prefPages/layout.js:28
msgid "No changes"
msgstr ""

#: target/out/prefPages/layout.js:31
msgid "The same item already exists"
msgstr ""

#: target/out/prefPages/layout.js:40
#, javascript-format
msgid "Properties of %s"
msgstr ""

#: target/out/prefPages/layout.js:47
msgid "Save"
msgstr ""

#: target/out/prefPages/layout.js:64
msgid "Toggle editor"
msgstr ""

#: target/out/prefPages/layout.js:84
msgid "This option requires full gnome-shell reloading"
msgstr ""

#: target/out/prefPages/layout.js:160 target/out/prefPages/layout.js:278
#: target/out/prefPages/layout.js:437 target/out/prefPages/layout.js:672
msgid "Hide"
msgstr ""

#: target/out/prefPages/layout.js:232
#, javascript-format
msgid "My item #%d"
msgstr ""

#: target/out/prefPages/layout.js:250
msgid "New Item"
msgstr ""

#: target/out/prefPages/layout.js:261 target/out/prefPages/layout.js:610
#: target/out/prefPages/layout.js:737 target/out/prefPages/layout.js:787
#: target/out/prefPages/layout.js:813
msgid "Ordering and Hiding"
msgstr ""

#: target/out/prefPages/layout.js:273 target/out/prefPages/layout.js:432
msgid "Friendly Name"
msgstr ""

#: target/out/prefPages/layout.js:283
msgid "Title Regex (Javascript Regex)"
msgstr ""

#: target/out/prefPages/layout.js:288 target/out/prefPages/layout.js:442
msgid "Constructor Name"
msgstr ""

#: target/out/prefPages/layout.js:294 target/out/prefPages/layout.js:448
msgid "GType Name"
msgstr ""

#: target/out/prefPages/layout.js:302 target/out/prefPages/layout.js:456
msgid "This is the comment for easy identification in the settings list. It has no effect on the behavior of the extension"
msgstr ""

#: target/out/prefPages/layout.js:307 target/out/prefPages/layout.js:461
msgid "Javascript constructor name"
msgstr ""

#: target/out/prefPages/layout.js:312 target/out/prefPages/layout.js:466
msgid "GObject gtype name. You can get this value by calling GObject.type_name_from_instance"
msgstr ""

#: target/out/prefPages/layout.js:342
msgid "Keyboard Backlight"
msgstr ""

#: target/out/prefPages/layout.js:388 target/out/prefPages/layout.js:538
msgid "Unordered items"
msgstr ""

#: target/out/prefPages/layout.js:486
msgid "Remote Access Applet"
msgstr ""

#: target/out/prefPages/layout.js:487
msgid "Camera"
msgstr ""

#: target/out/prefPages/layout.js:488
msgid "Volume Input"
msgstr ""

#: target/out/prefPages/layout.js:489
msgid "Location"
msgstr ""

#: target/out/prefPages/layout.js:490
msgid "Thunderbolt"
msgstr ""

#: target/out/prefPages/layout.js:492
msgid "Network"
msgstr ""

#: target/out/prefPages/layout.js:495
msgid "Volume Output"
msgstr ""

#: target/out/prefPages/layout.js:497
msgid "System (Battery)"
msgstr ""

#: target/out/prefPages/layout.js:618
msgid "Desktop Spacer"
msgstr ""

#: target/out/prefPages/layout.js:629
msgid "Laptop Spacer"
msgstr ""

#: target/out/prefPages/layout.js:641
msgid "Capture button"
msgstr ""

#: target/out/prefPages/layout.js:647
msgid "Settings button"
msgstr ""

#: target/out/prefPages/layout.js:653
msgid "Lock button"
msgstr ""

#: target/out/prefPages/layout.js:659
msgid "Shutdown button"
msgstr ""

#: target/out/prefPages/layout.js:665
msgid "Battery button"
msgstr ""

#: target/out/prefPages/layout.js:711
msgid "Layout"
msgstr ""

#: target/out/prefPages/layout.js:718
msgid "Quick Toggles Layout"
msgstr ""

#: target/out/prefPages/layout.js:719 target/out/prefPages/layout.js:734
msgid "Adjust quick toggles layout"
msgstr ""

#: target/out/prefPages/layout.js:738
msgid "Reorder and hide quick toggles"
msgstr ""

#: target/out/prefPages/layout.js:745
msgid "System Indicators"
msgstr ""

#: target/out/prefPages/layout.js:746
msgid "Adjust system indicators layout and style"
msgstr ""

#: target/out/prefPages/layout.js:751
msgid "Accent screen sharing indicator"
msgstr ""

#: target/out/prefPages/layout.js:752
msgid "Use shell accent color on screen sharing indicator"
msgstr ""

#: target/out/prefPages/layout.js:757
msgid "Accent screen recording indicator"
msgstr ""

#: target/out/prefPages/layout.js:758
msgid "Use shell accent color on screen recording indicator"
msgstr ""

#: target/out/prefPages/layout.js:763
msgid "Privacy indicators style"
msgstr ""

#: target/out/prefPages/layout.js:764
msgid "Use monochrome or shell accent color on privarcy indicators"
msgstr ""

#: target/out/prefPages/layout.js:767
msgid "Accent"
msgstr ""

#: target/out/prefPages/layout.js:768
msgid "Monochrome"
msgstr ""

#: target/out/prefPages/layout.js:777
msgid "Adjust system indicators"
msgstr ""

#: target/out/prefPages/layout.js:788
msgid "Reorder and hide system indicators"
msgstr ""

#: target/out/prefPages/layout.js:795
msgid "System Items Layout"
msgstr ""

#: target/out/prefPages/layout.js:800 target/out/prefPages/layout.js:815
msgid "Adjust system items layout"
msgstr ""

#: target/out/prefPages/layout.js:804
msgid "Hide layout box"
msgstr ""

#: target/out/prefPages/layout.js:805
msgid "Hide all buttons and layout box"
msgstr ""

#: target/out/prefPages/layout.js:814
msgid "Reorder and hide system items"
msgstr ""

#: target/out/prefPages/layout.js:823
msgid "Date Menu"
msgstr ""

#: target/out/prefPages/layout.js:824
msgid "Adjust Date Menu layout"
msgstr ""

#: target/out/prefPages/layout.js:828
msgid "Hide left box"
msgstr ""

#: target/out/prefPages/layout.js:829
msgid "Hide the left box of the date menu, which contains notifications and media control"
msgstr ""

#: target/out/prefPages/layout.js:834
msgid "Hide right box"
msgstr ""

#: target/out/prefPages/layout.js:835
msgid "Hide the right box of the date menu, which contains calendar, world clock and weather"
msgstr ""

#: target/out/prefPages/layout.js:840
msgid "Disable menu"
msgstr ""

#: target/out/prefPages/layout.js:841
msgid "Do not open date menu when the date menu button clicked"
msgstr ""


================================================
FILE: po/cs.po
================================================
# AUTHORS
# ondra05 https://github.com/ondra05, 2023.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-07-20 15:34+0000\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: target/out/libs/prefs/components.js:57
msgid "Details"
msgstr ""

#: target/out/libs/prefs/components.js:144
msgid "This feature marked as experimental"
msgstr ""

#: target/out/libs/prefs/components.js:274
msgid "Reset to default"
msgstr ""

#: target/out/libs/prefs/components.js:512
msgid "Theme default"
msgstr ""

#: target/out/libs/prefs/components.js:853
msgid "Homepage"
msgstr ""

#: target/out/libs/prefs/components.js:859
#: target/out/libs/prefs/components.js:863 target/out/prefPages/about.js:49
#: target/out/prefPages/about.js:51 target/out/prefPages/about.js:56
msgid "License"
msgstr ""

#: target/out/libs/prefs/components.js:860
msgid "Loading ..."
msgstr ""

#: target/out/libs/prefs/components.js:869
msgid "Affected Files"
msgstr ""

#: target/out/libs/prefs/components.js:924
msgid "Changelog"
msgstr ""

#: target/out/libs/prefs/components.js:938
msgid "(Current)"
msgstr ""

#: target/out/libs/prefs/components.js:969
#, javascript-format
msgid "> **Date:** %s"
msgstr ""

#: target/out/libs/prefs/components.js:970
#, javascript-format
msgid "> **Git Hash:** %s"
msgstr ""

#: target/out/libs/prefs/components.js:971
#, javascript-format
msgid "> **Build Number:** %d"
msgstr ""

#: target/out/libs/prefs/components.js:1034
msgid "Padding"
msgstr ""

#: target/out/libs/prefs/components.js:1038
msgid "Top"
msgstr ""

#: target/out/libs/prefs/components.js:1049
msgid "Bottom"
msgstr ""

#: target/out/libs/prefs/components.js:1060
msgid "Left"
msgstr ""

#: target/out/libs/prefs/components.js:1071
msgid "Right"
msgstr ""

#: target/out/prefs.js:60
msgid "Stable"
msgstr ""

#: target/out/prefs.js:63
msgid "Development"
msgstr ""

#: target/out/prefs.js:66
msgid "Preview"
msgstr ""

#: target/out/prefs.js:69
msgid "(Github Release)"
msgstr ""

#: target/out/prefs.js:72
msgid "(Built from source)"
msgstr ""

#: target/out/features/widget/notifications.js:26
msgid "No Notifications"
msgstr ""

#: target/out/features/widget/notifications.js:58
#: target/out/features/widget/notifications.js:122
msgid "Clear"
msgstr ""

# Quick settings notifications title text
#: target/out/features/widget/notifications.js:76
msgid "Notifications"
msgstr "Upozornění"

#: target/out/features/widget/notifications.js:105
#: target/out/features/toggle/dndQuickToggle.js:10
#: target/out/prefPages/layout.js:345 target/out/prefPages/layout.js:485
msgid "Do Not Disturb"
msgstr ""

#: target/out/features/widget/media.js:118
msgid "Unknown title"
msgstr ""

#: target/out/features/widget/media.js:888
msgid "Media"
msgstr ""

#: target/out/features/widget/volumeMixer.js:105
msgid "Volume changed"
msgstr ""

#: target/out/features/widget/volumeMixer.js:463
msgid "Open volumx mixer"
msgstr ""

#: target/out/features/widget/volumeMixer.js:480
msgid "Volume Mixer"
msgstr ""

#: target/out/features/widget/weather.js:73
msgid "Weather"
msgstr ""

#: target/out/features/widget/weather.js:192
msgid "Location has not been set"
msgstr ""

#: target/out/features/toggle/unsafeQuickToggle.js:11
#: target/out/prefPages/layout.js:346 target/out/prefPages/layout.js:496
msgid "Unsafe Mode"
msgstr ""

#: target/out/prefPages/widgets.js:11
msgid "Handle radius"
msgstr ""

#: target/out/prefPages/widgets.js:12
msgid "Set this to 0 to use default radius"
msgstr ""

#: target/out/prefPages/widgets.js:18
msgid "Handle color"
msgstr ""

#: target/out/prefPages/widgets.js:36
msgid "Slider style"
msgstr ""

#: target/out/prefPages/widgets.js:39
msgid "Slim"
msgstr ""

#: target/out/prefPages/widgets.js:40 target/out/prefPages/layout.js:766
msgid "Default"
msgstr ""

#: target/out/prefPages/widgets.js:48 target/out/prefPages/widgets.js:173
msgid "Background color"
msgstr ""

#: target/out/prefPages/widgets.js:55
msgid "Active Background color"
msgstr ""

#: target/out/prefPages/widgets.js:62
msgid "Thickness"
msgstr ""

#: target/out/prefPages/widgets.js:66
msgid "Set this to 0 to use default thickness"
msgstr ""

#: target/out/prefPages/widgets.js:76
msgid "Widgets"
msgstr ""

#: target/out/prefPages/widgets.js:83 target/out/prefPages/widgets.js:136
#: target/out/prefPages/widgets.js:162 target/out/prefPages/widgets.js:224
msgid "Media Widget"
msgstr ""

#: target/out/prefPages/widgets.js:88
msgid "Turn on to make the media widget visible on the Quick Settings panel"
msgstr ""

#: target/out/prefPages/widgets.js:92 target/out/prefPages/widgets.js:280
#: target/out/prefPages/widgets.js:343
msgid "Compact mode"
msgstr ""

#: target/out/prefPages/widgets.js:93
msgid ""
"Make Media Controls widget smaller\n"
"Make it more similar in size to the notification message"
msgstr ""

#: target/out/prefPages/widgets.js:99
msgid "Control buttons opacity"
msgstr ""

#: target/out/prefPages/widgets.js:100
msgid "Set this to 255 to make opaque, and 0 to make transparent"
msgstr ""

#: target/out/prefPages/widgets.js:108
msgid "Show next button"
msgstr ""

#: target/out/prefPages/widgets.js:109
msgid "Add next contorl button next to description"
msgstr ""

#: target/out/prefPages/widgets.js:115
msgid "Show previous button"
msgstr ""

#: target/out/prefPages/widgets.js:116
msgid "Add previous contorl button next to description"
msgstr ""

#: target/out/prefPages/widgets.js:122
msgid "Show pause button"
msgstr ""

#: target/out/prefPages/widgets.js:123
msgid "Add pause contorl button next to description"
msgstr ""

#: target/out/prefPages/widgets.js:129 target/out/prefPages/widgets.js:138
msgid "Show progress bar"
msgstr ""

#: target/out/prefPages/widgets.js:130 target/out/prefPages/widgets.js:139
msgid "Add progress bar under description"
msgstr ""

#: target/out/prefPages/widgets.js:155 target/out/prefPages/widgets.js:164
msgid "Gradient background"
msgstr ""

#: target/out/prefPages/widgets.js:156 target/out/prefPages/widgets.js:169
msgid ""
"Use gradient background extracted from cover image\n"
"May affect performance slightly"
msgstr ""

#: target/out/prefPages/widgets.js:174
msgid "Base background color"
msgstr ""

#: target/out/prefPages/widgets.js:182
msgid "Start opacity"
msgstr ""

#: target/out/prefPages/widgets.js:183
msgid "Adjust left side transparency, Set this to 1000 to make opaque"
msgstr ""

#: target/out/prefPages/widgets.js:190
msgid "Start color"
msgstr ""

#: target/out/prefPages/widgets.js:191
msgid "Adjust left side background color mixing, Set this to 1000 to show extracted color"
msgstr ""

#: target/out/prefPages/widgets.js:198
msgid "End opacity"
msgstr ""

#: target/out/prefPages/widgets.js:199
msgid "Adjust right side transparency, Set this to 1000 to make opaque"
msgstr ""

#: target/out/prefPages/widgets.js:206
msgid "End color"
msgstr ""

#: target/out/prefPages/widgets.js:207
msgid "Adjust right side background color mixing, Set this to 1000 to show extracted color"
msgstr ""

#: target/out/prefPages/widgets.js:216 target/out/prefPages/widgets.js:226
msgid "Round clip effect"
msgstr ""

#: target/out/prefPages/widgets.js:217 target/out/prefPages/widgets.js:231
msgid "Use round clip effect to make transition more natural"
msgstr ""

#: target/out/prefPages/widgets.js:234
msgid "Padding adjustment"
msgstr ""

#: target/out/prefPages/widgets.js:236
msgid "Adjust clip effect padding, edit this if your theme has a different margin or padding"
msgstr ""

#: target/out/prefPages/widgets.js:253 target/out/prefPages/widgets.js:318
#: target/out/prefPages/widgets.js:350
msgid "Remove shadow"
msgstr ""

#: target/out/prefPages/widgets.js:254
msgid ""
"Remove shadow from media message\n"
"Use if your theme creates unnecessary shadows"
msgstr ""

#: target/out/prefPages/widgets.js:260
msgid "Smooth scroll speed"
msgstr ""

#: target/out/prefPages/widgets.js:261
msgid "Adjust trackpad and trackpoint scroll speed, negative number for invert direction"
msgstr ""

#: target/out/prefPages/widgets.js:271
msgid "Notifications Widget"
msgstr ""

#: target/out/prefPages/widgets.js:276
msgid "Turn on to make the notifications widget visible on the Quick Settings panel"
msgstr ""

#: target/out/prefPages/widgets.js:281
msgid "Make notifications smaller"
msgstr ""

#: target/out/prefPages/widgets.js:287 target/out/prefPages/widgets.js:418
msgid "Max height"
msgstr ""

#: target/out/prefPages/widgets.js:288
#, javascript-format
msgid "Set maximum height of the Notifications widget, default is %d. Set this to 0 to disable max height"
msgstr ""

#: target/out/prefPages/widgets.js:296 target/out/prefPages/widgets.js:441
msgid "Fade out offset"
msgstr ""

#: target/out/prefPages/widgets.js:297 target/out/prefPages/widgets.js:442
msgid "Set position of the fade out effect begins. Set this to 0 to disable fade out effect. default is 46"
msgstr ""

#: target/out/prefPages/widgets.js:304
msgid "Auto hide"
msgstr ""

#: target/out/prefPages/widgets.js:305
msgid "Hide the Notifications widget when have no notifications"
msgstr ""

#: target/out/prefPages/widgets.js:311
msgid "Use native controls"
msgstr ""

#: target/out/prefPages/widgets.js:312
msgid "Use native dnd switch and clear button"
msgstr ""

#: target/out/prefPages/widgets.js:319
msgid ""
"Remove shadow from notification message\n"
"Use if your theme creates unnecessary shadows"
msgstr ""

#: target/out/prefPages/widgets.js:325 target/out/prefPages/widgets.js:427
msgid "Show scrollbar"
msgstr ""

#: target/out/prefPages/widgets.js:326
msgid "Show scrollbar on message list"
msgstr ""

#: target/out/prefPages/widgets.js:334
msgid "Weather Widget"
msgstr ""

#: target/out/prefPages/widgets.js:339
msgid "Turn on to make the weather widget visible on the Quick Settings panel"
msgstr ""

#: target/out/prefPages/widgets.js:344
msgid "Make weather widget smaller"
msgstr ""

#: target/out/prefPages/widgets.js:351
msgid ""
"Remove shadow from weather widget\n"
"Use if your theme creates unnecessary shadows"
msgstr ""

#: target/out/prefPages/widgets.js:357
msgid "Click command"
msgstr ""

#: target/out/prefPages/widgets.js:363
msgid "Show location"
msgstr ""

#: target/out/prefPages/widgets.js:364
msgid "Show the location label on header"
msgstr ""

#: target/out/prefPages/widgets.js:373
msgid "Forecast interval"
msgstr ""

#: target/out/prefPages/widgets.js:374
msgid "Adjust forecast interval in hour"
msgstr ""

#: target/out/prefPages/widgets.js:381
msgid "Max forecasts"
msgstr ""

#: target/out/prefPages/widgets.js:382
msgid "Adjust max forecasts"
msgstr ""

#: target/out/prefPages/widgets.js:388 target/out/prefPages/widgets.js:456
msgid "Volume mixer Widget"
msgstr ""

#: target/out/prefPages/widgets.js:393
msgid "Turn on to make the volume mixer widget visible on the Quick Settings panel"
msgstr ""

#: target/out/prefPages/widgets.js:397
msgid "Label text"
msgstr ""

#: target/out/prefPages/widgets.js:398
msgid "Choose label above slider text source"
msgstr ""

#: target/out/prefPages/widgets.js:400
msgid "Both"
msgstr ""

#: target/out/prefPages/widgets.js:401
msgid "Title"
msgstr ""

#: target/out/prefPages/widgets.js:402
msgid "Description"
msgstr ""

#: target/out/prefPages/widgets.js:403
msgid "None"
msgstr ""

#: target/out/prefPages/widgets.js:411
msgid "Label opacity"
msgstr ""

#: target/out/prefPages/widgets.js:412
msgid ""
"Adjust label opacity.\n"
"Set this to 255 to make opaque, and 0 to make transparent"
msgstr ""

#: target/out/prefPages/widgets.js:419
#, javascript-format
msgid "Set maximum height of the Volume mixer widget, default is %d. Set this to 0 to disable max height"
msgstr ""

#: target/out/prefPages/widgets.js:428
msgid "Show scrollbar on mixer list"
msgstr ""

#: target/out/prefPages/widgets.js:434
msgid "Show stream icon"
msgstr ""

#: target/out/prefPages/widgets.js:435
msgid "Show stream icon above mixer sliders"
msgstr ""

#: target/out/prefPages/widgets.js:450 target/out/prefPages/widgets.js:458
msgid "Attach to output slider"
msgstr ""

#: target/out/prefPages/widgets.js:451 target/out/prefPages/widgets.js:459
msgid "Attach volume mixer menu button to output slider. Use if you prefer compact layout"
msgstr ""

#: target/out/prefPages/widgets.js:468
msgid "Menu icon"
msgstr ""

#: target/out/prefPages/about.js:12 target/out/prefPages/about.js:32
msgid "About"
msgstr ""

#: target/out/prefPages/about.js:33
msgid "Common extension informations"
msgstr ""

#: target/out/prefPages/about.js:36 target/out/prefPages/about.js:40
msgid "Changelogs"
msgstr ""

#: target/out/prefPages/about.js:37 target/out/prefPages/about.js:41
msgid "View the change history for this extension"
msgstr ""

#: target/out/prefPages/about.js:50 target/out/prefPages/about.js:57
msgid "License of codes"
msgstr ""

#: target/out/prefPages/about.js:63 target/out/prefPages/about.js:65
#: target/out/prefPages/about.js:69
msgid "Contributors"
msgstr ""

#: target/out/prefPages/about.js:64 target/out/prefPages/about.js:70
msgid "The creators of this extension"
msgstr ""

#: target/out/prefPages/about.js:74
msgid "More contributors"
msgstr ""

#: target/out/prefPages/about.js:75
msgid "See more contributors on github"
msgstr ""

#: target/out/prefPages/about.js:85
msgid "Link"
msgstr ""

#: target/out/prefPages/about.js:86
msgid "External links about this extension"
msgstr ""

#: target/out/prefPages/about.js:90
msgid "Donate via github sponsors"
msgstr ""

#: target/out/prefPages/about.js:91
msgid "Support development!"
msgstr ""

#: target/out/prefPages/about.js:97
msgid "Rate and comment the extension!"
msgstr ""

#: target/out/prefPages/about.js:102
msgid "Github Repository"
msgstr ""

#: target/out/prefPages/about.js:103
msgid ""
"Add Star on Repository is helping me a lot!\n"
"Please, if you found bug from this extension, you can make issue to make me know that!\n"
"Or, you can create PR with wonderful features!"
msgstr ""

#: target/out/prefPages/about.js:109
msgid "Add translation to this extension!"
msgstr ""

#: target/out/prefPages/about.js:115
msgid "Debug"
msgstr ""

#: target/out/prefPages/about.js:116
msgid "Extension debugging options"
msgstr ""

#: target/out/prefPages/about.js:120
msgid "Expose environment"
msgstr ""

#: target/out/prefPages/about.js:121
msgid "Expose extension environment to globalThis.qst"
msgstr ""

#: target/out/prefPages/about.js:126
msgid "Show layout border"
msgstr ""

#: target/out/prefPages/about.js:127
msgid "Show layout borders on Quick Settings"
msgstr ""

#: target/out/prefPages/about.js:132
msgid "Log level"
msgstr ""

#: target/out/prefPages/about.js:135
msgid "none"
msgstr ""

#: target/out/prefPages/about.js:136
msgid "error"
msgstr ""

#: target/out/prefPages/about.js:137
msgid "info"
msgstr ""

#: target/out/prefPages/about.js:138
msgid "debug"
msgstr ""

#: target/out/prefPages/toggles.js:12
msgid "Toggles"
msgstr ""

#: target/out/prefPages/toggles.js:19
msgid "DND Quick Toggle"
msgstr ""

#: target/out/prefPages/toggles.js:20
msgid "Turn on to add the DND quick toggle on the Quick Settings panel"
msgstr ""

#: target/out/prefPages/toggles.js:28
msgid "DND indicator position"
msgstr ""

#: target/out/prefPages/toggles.js:29
msgid "Set DND indicator position"
msgstr ""

#: target/out/prefPages/toggles.js:33
msgid "System Tray"
msgstr ""

#: target/out/prefPages/toggles.js:34
msgid "Date Menu Button"
msgstr ""

#: target/out/prefPages/toggles.js:41
msgid "Unsafe Mode Quick Toggle"
msgstr ""

#: target/out/prefPages/toggles.js:42
msgid "Turn on to add the unsafe quick toggle on the Quick Settings panel"
msgstr ""

#: target/out/prefPages/toggles.js:50
msgid "Save last session state"
msgstr ""

#: target/out/prefPages/toggles.js:51
msgid "Turn on to save last session unsafe state"
msgstr ""

#: target/out/prefPages/menu.js:9 target/out/prefPages/menu.js:141
msgid "Advanced animation style"
msgstr ""

#: target/out/prefPages/menu.js:13
msgid "Open Duration"
msgstr ""

#: target/out/prefPages/menu.js:14
msgid "Open animation duration in microseconds"
msgstr ""

#: target/out/prefPages/menu.js:21
msgid "Close Duration"
msgstr ""

#: target/out/prefPages/menu.js:22
msgid "Close animation duration in microseconds"
msgstr ""

#: target/out/prefPages/menu.js:29
msgid "Grid Content Opacity"
msgstr ""

#: target/out/prefPages/menu.js:30
msgid ""
"Adjust grid content opacity.\n"
"Set this to 255 to make opaque, and 0 to make transparent"
msgstr ""

#: target/out/prefPages/menu.js:37
msgid "Background Blur Radius"
msgstr ""

#: target/out/prefPages/menu.js:38
msgid ""
"Adjust background blur radius.\n"
"Set this to 0 to disable blur effect"
msgstr ""

#: target/out/prefPages/menu.js:45
msgid "Background Brightness"
msgstr ""

#: target/out/prefPages/menu.js:46
msgid ""
"Adjust background brightness.\n"
"Set this to 1000 to disable brightness control effect.\n"
"Not impacts on gnome-shell's default dim effect."
msgstr ""

#: target/out/prefPages/menu.js:53
msgid "Background Opacity"
msgstr ""

#: target/out/prefPages/menu.js:54
msgid ""
"Adjust background opacity.\n"
"Set this to 255 to make opaque, and 0 to make transparent"
msgstr ""

#: target/out/prefPages/menu.js:61
msgid "Background X Scale"
msgstr ""

#: target/out/prefPages/menu.js:62
msgid "Adjust background x scale, 1000 means 1.0 scale"
msgstr ""

#: target/out/prefPages/menu.js:69
msgid "Background Y Scale"
msgstr ""

#: target/out/prefPages/menu.js:70
msgid "Adjust background y scale, 1000 means 1.0 scale"
msgstr ""

#: target/out/prefPages/menu.js:84
msgid "Menu"
msgstr ""

#: target/out/prefPages/menu.js:91
msgid "Overlay Mode"
msgstr ""

#: target/out/prefPages/menu.js:92
msgid "Display toggle, power, and sound menus as overlay"
msgstr ""

#: target/out/prefPages/menu.js:101
msgid "Overlay Width"
msgstr ""

#: target/out/prefPages/menu.js:102
msgid ""
"Adjust overlay menu width\n"
"Set this to 0 to disable adjusting"
msgstr ""

#: target/out/prefPages/menu.js:109
msgid "Overlay Animation Duration"
msgstr ""

#: target/out/prefPages/menu.js:110
msgid ""
"Custom menu open animation duration in microseconds\n"
"Set this to 0 to disable custom animation"
msgstr ""

#: target/out/prefPages/menu.js:117
msgid "Overlay Animation Style"
msgstr ""

#: target/out/prefPages/menu.js:118
msgid "Custom menu open animation style"
msgstr ""

#: target/out/prefPages/menu.js:120
msgid "Flyout"
msgstr ""

#: target/out/prefPages/menu.js:121
msgid "Dialog"
msgstr ""

#: target/out/prefPages/menu.js:130 target/out/prefPages/menu.js:143
msgid "Animation"
msgstr ""

#: target/out/prefPages/menu.js:131
msgid ""
"Add menu animation on toggle menu opening and closing\n"
"To get the best feel, turn on overlay mode"
msgstr ""

#: target/out/prefPages/menu.js:142
msgid "Adjust speed, blur, scale, and opacity"
msgstr ""

#: target/out/prefPages/layout.js:25
msgid "The item not found"
msgstr ""

#: target/out/prefPages/layout.js:28
msgid "No changes"
msgstr ""

#: target/out/prefPages/layout.js:31
msgid "The same item already exists"
msgstr ""

#: target/out/prefPages/layout.js:40
#, javascript-format
msgid "Properties of %s"
msgstr ""

#: target/out/prefPages/layout.js:47
msgid "Save"
msgstr ""

#: target/out/prefPages/layout.js:64
msgid "Toggle editor"
msgstr ""

#: target/out/prefPages/layout.js:84
msgid "This option requires full gnome-shell reloading"
msgstr ""

#: target/out/prefPages/layout.js:160 target/out/prefPages/layout.js:278
#: target/out/prefPages/layout.js:437 target/out/prefPages/layout.js:672
msgid "Hide"
msgstr ""

#: target/out/prefPages/layout.js:232
#, javascript-format
msgid "My item #%d"
msgstr ""

#: target/out/prefPages/layout.js:250
msgid "New Item"
msgstr ""

#: target/out/prefPages/layout.js:261 target/out/prefPages/layout.js:610
#: target/out/prefPages/layout.js:737 target/out/prefPages/layout.js:787
#: target/out/prefPages/layout.js:813
msgid "Ordering and Hiding"
msgstr ""

#: target/out/prefPages/layout.js:273 target/out/prefPages/layout.js:432
msgid "Friendly Name"
msgstr ""

#: target/out/prefPages/layout.js:283
msgid "Title Regex (Javascript Regex)"
msgstr ""

#: target/out/prefPages/layout.js:288 target/out/prefPages/layout.js:442
msgid "Constructor Name"
msgstr ""

#: target/out/prefPages/layout.js:294 target/out/prefPages/layout.js:448
msgid "GType Name"
msgstr ""

#: target/out/prefPages/layout.js:302 target/out/prefPages/layout.js:456
msgid "This is the comment for easy identification in the settings list. It has no effect on the behavior of the extension"
msgstr ""

#: target/out/prefPages/layout.js:307 target/out/prefPages/layout.js:461
msgid "Javascript constructor name"
msgstr ""

#: target/out/prefPages/layout.js:312 target/out/prefPages/layout.js:466
msgid "GObject gtype name. You can get this value by calling GObject.type_name_from_instance"
msgstr ""

#: target/out/prefPages/layout.js:342
msgid "Keyboard Backlight"
msgstr ""

#: target/out/prefPages/layout.js:388 target/out/prefPages/layout.js:538
msgid "Unordered items"
msgstr ""

#: target/out/prefPages/layout.js:486
msgid "Remote Access Applet"
msgstr ""

#: target/out/prefPages/layout.js:487
msgid "Camera"
msgstr ""

#: target/out/prefPages/layout.js:488
msgid "Volume Input"
msgstr ""

#: target/out/prefPages/layout.js:489
msgid "Location"
msgstr ""

#: target/out/prefPages/layout.js:490
msgid "Thunderbolt"
msgstr ""

#: target/out/prefPages/layout.js:492
msgid "Network"
msgstr ""

#: target/out/prefPages/layout.js:495
msgid "Volume Output"
msgstr ""

#: target/out/prefPages/layout.js:497
msgid "System (Battery)"
msgstr ""

#: target/out/prefPages/layout.js:618
msgid "Desktop Spacer"
msgstr ""

#: target/out/prefPages/layout.js:629
msgid "Laptop Spacer"
msgstr ""

#: target/out/prefPages/layout.js:641
msgid "Capture button"
msgstr ""

#: target/out/prefPages/layout.js:647
msgid "Settings button"
msgstr ""

#: target/out/prefPages/layout.js:653
msgid "Lock button"
msgstr ""

#: target/out/prefPages/layout.js:659
msgid "Shutdown button"
msgstr ""

#: target/out/prefPages/layout.js:665
msgid "Battery button"
msgstr ""

#: target/out/prefPages/layout.js:711
msgid "Layout"
msgstr ""

#: target/out/prefPages/layout.js:718
msgid "Quick Toggles Layout"
msgstr ""

#: target/out/prefPages/layout.js:719 target/out/prefPages/layout.js:734
msgid "Adjust quick toggles layout"
msgstr ""

#: target/out/prefPages/layout.js:738
msgid "Reorder and hide quick toggles"
msgstr ""

#: target/out/prefPages/layout.js:745
msgid "System Indicators"
msgstr ""

#: target/out/prefPages/layout.js:746
msgid "Adjust system indicators layout and style"
msgstr ""

#: target/out/prefPages/layout.js:751
msgid "Accent screen sharing indicator"
msgstr ""

#: target/out/prefPages/layout.js:752
msgid "Use shell accent color on screen sharing indicator"
msgstr ""

#: target/out/prefPages/layout.js:757
msgid "Accent screen recording indicator"
msgstr ""

#: target/out/prefPages/layout.js:758
msgid "Use shell accent color on screen recording indicator"
msgstr ""

#: target/out/prefPages/layout.js:763
msgid "Privacy indicators style"
msgstr ""

#: target/out/prefPages/layout.js:764
msgid "Use monochrome or shell accent color on privarcy indicators"
msgstr ""

#: target/out/prefPages/layout.js:767
msgid "Accent"
msgstr ""

#: target/out/prefPages/layout.js:768
msgid "Monochrome"
msgstr ""

#: target/out/prefPages/layout.js:777
msgid "Adjust system indicators"
msgstr ""

#: target/out/prefPages/layout.js:788
msgid "Reorder and hide system indicators"
msgstr ""

#: target/out/prefPages/layout.js:795
msgid "System Items Layout"
msgstr ""

#: target/out/prefPages/layout.js:800 target/out/prefPages/layout.js:815
msgid "Adjust system items layout"
msgstr ""

#: target/out/prefPages/layout.js:804
msgid "Hide layout box"
msgstr ""

#: target/out/prefPages/layout.js:805
msgid "Hide all buttons and layout box"
msgstr ""

#: target/out/prefPages/layout.js:814
msgid "Reorder and hide system items"
msgstr ""

#: target/out/prefPages/layout.js:823
msgid "Date Menu"
msgstr ""

#: target/out/prefPages/layout.js:824
msgid "Adjust Date Menu layout"
msgstr ""

#: target/out/prefPages/layout.js:828
msgid "Hide left box"
msgstr ""

#: target/out/prefPages/layout.js:829
msgid "Hide the left box of the date menu, which contains notifications and media control"
msgstr ""

#: target/out/prefPages/layout.js:834
msgid "Hide right box"
msgstr ""

#: target/out/prefPages/layout.js:835
msgid "Hide the right box of the date menu, which contains calendar, world clock and weather"
msgstr ""

#: target/out/prefPages/layout.js:840
msgid "Disable menu"
msgstr ""

#: target/out/prefPages/layout.js:841
msgid "Do not open date menu when the date menu button clicked"
msgstr ""


================================================
FILE: po/de.po
================================================
msgid ""
msgstr ""
"Project-Id-Version: quick-settings-tweaker\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-07-20 15:32+0000\n"
"PO-Revision-Date: 2025-07-16 23:47+0200\n"
"Last-Translator: Andreas Rohr <github@andreas-rohr.de>\n"
"Language-Team: German\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: quick-settings-tweaker\n"
"X-Crowdin-Project-ID: 809722\n"
"X-Crowdin-Language: de\n"
"X-Crowdin-File: quick-settings-tweaks@qwreey.pot\n"
"X-Crowdin-File-ID: 4\n"
"X-Generator: Poedit 3.6\n"

#: target/out/libs/prefs/components.js:57
msgid "Details"
msgstr "Details"

#: target/out/libs/prefs/components.js:144
msgid "This feature marked as experimental"
msgstr "Diese Funktion wurde als experimentell markiert"

#: target/out/libs/prefs/components.js:274
msgid "Reset to default"
msgstr "Auf Standard zurücksetzen"

#: target/out/libs/prefs/components.js:512
msgid "Theme default"
msgstr "Standard-Theme"

#: target/out/libs/prefs/components.js:853
msgid "Homepage"
msgstr "Homepage"

#: target/out/libs/prefs/components.js:859
#: target/out/libs/prefs/components.js:863 target/out/prefPages/about.js:49
#: target/out/prefPages/about.js:51 target/out/prefPages/about.js:56
msgid "License"
msgstr "Lizenz"

#: target/out/libs/prefs/components.js:860
msgid "Loading ..."
msgstr "Laden ..."

#: target/out/libs/prefs/components.js:869
msgid "Affected Files"
msgstr "Betroffene Dateien"

#: target/out/libs/prefs/components.js:924
msgid "Changelog"
msgstr "Changelog"

#: target/out/libs/prefs/components.js:938
msgid "(Current)"
msgstr "(Aktuell)"

#: target/out/libs/prefs/components.js:969
#, javascript-format
msgid "> **Date:** %s"
msgstr "> **Datum:** %s"

#: target/out/libs/prefs/components.js:970
#, javascript-format
msgid "> **Git Hash:** %s"
msgstr "> **Git Hash:** %s"

#: target/out/libs/prefs/components.js:971
#, javascript-format
msgid "> **Build Number:** %d"
msgstr "> **Build Nummer:** %d"

#: target/out/libs/prefs/components.js:1034
msgid "Padding"
msgstr "Padding"

#: target/out/libs/prefs/components.js:1038
msgid "Top"
msgstr "Oben"

#: target/out/libs/prefs/components.js:1049
msgid "Bottom"
msgstr "Unten"

#: target/out/libs/prefs/components.js:1060
msgid "Left"
msgstr "Links"

#: target/out/libs/prefs/components.js:1071
msgid "Right"
msgstr "Rechts"

#: target/out/prefs.js:60
msgid "Stable"
msgstr "Stabil"

#: target/out/prefs.js:63
msgid "Development"
msgstr "Entwicklung"

#: target/out/prefs.js:66
msgid "Preview"
msgstr "Vorschau"

#: target/out/prefs.js:69
msgid "(Github Release)"
msgstr "(Github Release)"

#: target/out/prefs.js:72
msgid "(Built from source)"
msgstr "(Aus Quelle gebaut)"

#: target/out/features/widget/notifications.js:26
msgid "No Notifications"
msgstr "Keine Benachrichtigungen"

#: target/out/features/widget/notifications.js:58
#: target/out/features/widget/notifications.js:122
msgid "Clear"
msgstr "Löschen"

#: target/out/features/widget/notifications.js:76
msgid "Notifications"
msgstr "Benachrichtigungen"

#: target/out/features/widget/notifications.js:105
#: target/out/features/toggle/dndQuickToggle.js:10
#: target/out/prefPages/layout.js:345 target/out/prefPages/layout.js:485
msgid "Do Not Disturb"
msgstr "Nicht stören"

#: target/out/features/widget/media.js:118
msgid "Unknown title"
msgstr "Unbekannter Titel"

#: target/out/features/widget/media.js:888
msgid "Media"
msgstr "Medien"

#: target/out/features/widget/volumeMixer.js:105
msgid "Volume changed"
msgstr "Lautstärke geändert"

#: target/out/features/widget/volumeMixer.js:463
msgid "Open volumx mixer"
msgstr "Lautstärkemixer öffnen"

#: target/out/features/widget/volumeMixer.js:480
msgid "Volume Mixer"
msgstr "Lautstärkemixer"

#: target/out/features/widget/weather.js:73
msgid "Weather"
msgstr "Wetter"

#: target/out/features/widget/weather.js:192
msgid "Location has not been set"
msgstr "Standort wurde nicht festgelegt"

#: target/out/features/toggle/unsafeQuickToggle.js:11
#: target/out/prefPages/layout.js:346 target/out/prefPages/layout.js:496
msgid "Unsafe Mode"
msgstr "Unsicherer Modus"

#: target/out/prefPages/widgets.js:11
msgid "Handle radius"
msgstr "Handle-Radius"

#: target/out/prefPages/widgets.js:12
msgid "Set this to 0 to use default radius"
msgstr "Setze dies auf 0, um den Standard-Radius zu verwenden"

#: target/out/prefPages/widgets.js:18
msgid "Handle color"
msgstr "Handle Farbe"

#: target/out/prefPages/widgets.js:36
msgid "Slider style"
msgstr "Slider-Stil"

#: target/out/prefPages/widgets.js:39
msgid "Slim"
msgstr "Schmal"

#: target/out/prefPages/widgets.js:40 target/out/prefPages/layout.js:766
msgid "Default"
msgstr "Vorgabe"

#: target/out/prefPages/widgets.js:48 target/out/prefPages/widgets.js:173
msgid "Background color"
msgstr "Hintergrundfarbe"

#: target/out/prefPages/widgets.js:55
msgid "Active Background color"
msgstr "Aktive Hintergrundfarbe"

#: target/out/prefPages/widgets.js:62
msgid "Thickness"
msgstr ""

#: target/out/prefPages/widgets.js:66
msgid "Set this to 0 to use default thickness"
msgstr ""

#: target/out/prefPages/widgets.js:76
msgid "Widgets"
msgstr "Widgets"

#: target/out/prefPages/widgets.js:83 target/out/prefPages/widgets.js:136
#: target/out/prefPages/widgets.js:162 target/out/prefPages/widgets.js:224
msgid "Media Widget"
msgstr "Medien-Widget"

#: target/out/prefPages/widgets.js:88
msgid "Turn on to make the media widget visible on the Quick Settings panel"
msgstr "Einschalten, um das Medien-Widget in den Schnelleinstellungen sichtbar zu machen"

#: target/out/prefPages/widgets.js:92 target/out/prefPages/widgets.js:280
#: target/out/prefPages/widgets.js:343
msgid "Compact mode"
msgstr "Kompakter Modus"

#: target/out/prefPages/widgets.js:93
msgid ""
"Make Media Controls widget smaller\n"
"Make it more similar in size to the notification message"
msgstr ""
"Verkleinern Sie das Widget „Mediensteuerung“\\n\n"
"Passen Sie die Größe der Benachrichtigungsnachricht an"

#: target/out/prefPages/widgets.js:99
msgid "Control buttons opacity"
msgstr "Deckkraft der Steuertasten"

#: target/out/prefPages/widgets.js:100
msgid "Set this to 255 to make opaque, and 0 to make transparent"
msgstr "Setze dies auf 255, um undurchsichtig zu machen und 0 um transparent zu machen"

#: target/out/prefPages/widgets.js:108
msgid "Show next button"
msgstr "Nächste Schaltfläche anzeigen"

#: target/out/prefPages/widgets.js:109
msgid "Add next contorl button next to description"
msgstr "Nächste Control-Taste neben der Beschreibung hinzufügen"

#: target/out/prefPages/widgets.js:115
msgid "Show previous button"
msgstr "Vorherige Schaltfläche anzeigen"

#: target/out/prefPages/widgets.js:116
msgid "Add previous contorl button next to description"
msgstr "Vorherige Control-Taste neben der Beschreibung hinzufügen"

#: target/out/prefPages/widgets.js:122
msgid "Show pause button"
msgstr "Pause-Button anzeigen"

#: target/out/prefPages/widgets.js:123
msgid "Add pause contorl button next to description"
msgstr "Füge Control-Taste neben der Beschreibung hinzu"

#: target/out/prefPages/widgets.js:129 target/out/prefPages/widgets.js:138
msgid "Show progress bar"
msgstr "Fortschrittsleiste anzeigen"

#: target/out/prefPages/widgets.js:130 target/out/prefPages/widgets.js:139
msgid "Add progress bar under description"
msgstr "Fortschrittsleiste unter Beschreibung hinzufügen"

#: target/out/prefPages/widgets.js:155 target/out/prefPages/widgets.js:164
msgid "Gradient background"
msgstr "Farbverlauf Hintergrund"

#: target/out/prefPages/widgets.js:156 target/out/prefPages/widgets.js:169
msgid ""
"Use gradient background extracted from cover image\n"
"May affect performance slightly"
msgstr ""
"Hintergrund des Farbverlaufs des Covers\n"
"kann die Leistung leicht beeinflussen"

#: target/out/prefPages/widgets.js:174
msgid "Base background color"
msgstr "Hintergrundfarbe Basis"

#: target/out/prefPages/widgets.js:182
msgid "Start opacity"
msgstr ""

#: target/out/prefPages/widgets.js:183
msgid "Adjust left side transparency, Set this to 1000 to make opaque"
msgstr "Linksseitige Transparenz anpassen. Auf 1000 setzen, um undurchsichtig zu machen"

#: target/out/prefPages/widgets.js:190
msgid "Start color"
msgstr ""

#: target/out/prefPages/widgets.js:191
msgid "Adjust left side background color mixing, Set this to 1000 to show extracted color"
msgstr "Linke Hintergrundfarbenmischung anpassen. Setze diese auf 1000 um, die extrahierte Farbe anzuzeigen"

#: target/out/prefPages/widgets.js:198
msgid "End opacity"
msgstr ""

#: target/out/prefPages/widgets.js:199
msgid "Adjust right side transparency, Set this to 1000 to make opaque"
msgstr "Rechtsseitige Transparenz einstellen, auf 1000 setzen, um undurchsichtig zu machen"

#: target/out/prefPages/widgets.js:206
msgid "End color"
msgstr ""

#: target/out/prefPages/widgets.js:207
msgid "Adjust right side background color mixing, Set this to 1000 to show extracted color"
msgstr "Anpassung der rechten Seite des Hintergrundfarbenmix auf 1000 setzen, um die extrahierte Farbe anzuzeigen"

#: target/out/prefPages/widgets.js:216 target/out/prefPages/widgets.js:226
msgid "Round clip effect"
msgstr "Clip-Effekt runden"

#: target/out/prefPages/widgets.js:217 target/out/prefPages/widgets.js:231
msgid "Use round clip effect to make transition more natural"
msgstr "Benutze den runden Clip-Effekt, um den Übergang natürlicher zu machen"

#: target/out/prefPages/widgets.js:234
msgid "Padding adjustment"
msgstr "Polsteranpassung"

#: target/out/prefPages/widgets.js:236
msgid "Adjust clip effect padding, edit this if your theme has a different margin or padding"
msgstr "Passen Sie Clip-Effekt an, bearbeiten Sie diese, wenn Ihr Theme einen anderen Rand oder Polster hat"

#: target/out/prefPages/widgets.js:253 target/out/prefPages/widgets.js:318
#: target/out/prefPages/widgets.js:350
msgid "Remove shadow"
msgstr "Schatten entfernen"

#: target/out/prefPages/widgets.js:254
msgid ""
"Remove shadow from media message\n"
"Use if your theme creates unnecessary shadows"
msgstr ""
"Schatten von Medien-Nachricht entfernen\n"
"Benutzen, wenn Ihr Theme unnötige Schatten erstellt"

#: target/out/prefPages/widgets.js:260
msgid "Smooth scroll speed"
msgstr "Glatte Scrollgeschwindigkeit"

#: target/out/prefPages/widgets.js:261
msgid "Adjust trackpad and trackpoint scroll speed, negative number for invert direction"
msgstr "Trackpad und Trackpoint-Scrollgeschwindigkeit anpassen, negative Zahl für Invert-Richtung"

#: target/out/prefPages/widgets.js:271
msgid "Notifications Widget"
msgstr "Benachrichtigungs-Widget"

#: target/out/prefPages/widgets.js:276
msgid "Turn on to make the notifications widget visible on the Quick Settings panel"
msgstr "Einschalten, um das Benachrichtigungs-Widget in den Schnelleinstellungen sichtbar zu machen"

#: target/out/prefPages/widgets.js:281
msgid "Make notifications smaller"
msgstr "Benachrichtigungen verkleinern"

#: target/out/prefPages/widgets.js:287 target/out/prefPages/widgets.js:418
msgid "Max height"
msgstr "Maximale Höhe"

#: target/out/prefPages/widgets.js:288
#, javascript-format
msgid "Set maximum height of the Notifications widget, default is %d. Set this to 0 to disable max height"
msgstr "Legen Sie die maximale Höhe des Benachrichtigungs-Widgets fest, Standard ist %d. Setzen Sie dies auf 0, um die maximale Höhe zu deaktivieren"

#: target/out/prefPages/widgets.js:296 target/out/prefPages/widgets.js:441
msgid "Fade out offset"
msgstr "Ausblenden Offset"

#: target/out/prefPages/widgets.js:297 target/out/prefPages/widgets.js:442
msgid "Set position of the fade out effect begins. Set this to 0 to disable fade out effect. default is 46"
msgstr "Setze die Position des Ausblendeffekts ein. Setze dies auf 0, um den Ausblendeffekt zu deaktivieren. Standard ist 46"

#: target/out/prefPages/widgets.js:304
msgid "Auto hide"
msgstr "Auto-Verstecken"

#: target/out/prefPages/widgets.js:305
msgid "Hide the Notifications widget when have no notifications"
msgstr "Das Benachrichtigungs-Widget ausblenden, wenn keine Benachrichtigungen vorhanden sind"

#: target/out/prefPages/widgets.js:311
msgid "Use native controls"
msgstr "Native Steuerelemente verwenden"

#: target/out/prefPages/widgets.js:312
msgid "Use native dnd switch and clear button"
msgstr "Benutze DND-Schalter und Löschen-Taste"

#: target/out/prefPages/widgets.js:319
msgid ""
"Remove shadow from notification message\n"
"Use if your theme creates unnecessary shadows"
msgstr ""
"Schatten aus der Benachrichtigungsnachricht entfernen\n"
"Benutzen, wenn Ihr Template unnötige Schatten erstellt"

#: target/out/prefPages/widgets.js:325 target/out/prefPages/widgets.js:427
msgid "Show scrollbar"
msgstr "Scrollbar anzeigen"

#: target/out/prefPages/widgets.js:326
msgid "Show scrollbar on message list"
msgstr "Scrollbar in der Nachrichtenliste anzeigen"

#: target/out/prefPages/widgets.js:334
msgid "Weather Widget"
msgstr "Wetter-Widget"

#: target/out/prefPages/widgets.js:339
msgid "Turn on to make the weather widget visible on the Quick Settings panel"
msgstr "Einschalten, um das Wetter-Widget in den Schnelleinstellungen sichtbar zu machen"

#: target/out/prefPages/widgets.js:344
msgid "Make weather widget smaller"
msgstr "Wetter-Widget verkleinern"

#: target/out/prefPages/widgets.js:351
msgid ""
"Remove shadow from weather widget\n"
"Use if your theme creates unnecessary shadows"
msgstr ""
"Schatten vom Wetter-Widget entfernen\n"
"Verwenden Sie diese Option, wenn Ihr Design unnötige Schatten erzeugt"

#: target/out/prefPages/widgets.js:357
msgid "Click command"
msgstr "Klick Befehl"

#: target/out/prefPages/widgets.js:363
msgid "Show location"
msgstr "Standort anzeigen"

#: target/out/prefPages/widgets.js:364
msgid "Show the location label on header"
msgstr "Standortbezeichnung im Kopfbereich anzeigen"

#: target/out/prefPages/widgets.js:373
msgid "Forecast interval"
msgstr "Prognoseintervall"

#: target/out/prefPages/widgets.js:374
msgid "Adjust forecast interval in hour"
msgstr "Vorhersageintervall in Stunde anpassen"

#: target/out/prefPages/widgets.js:381
msgid "Max forecasts"
msgstr "Maximale Vorhersagen"

#: target/out/prefPages/widgets.js:382
msgid "Adjust max forecasts"
msgstr "Maximale Vorhersagen anpassen"

#: target/out/prefPages/widgets.js:388 target/out/prefPages/widgets.js:456
msgid "Volume mixer Widget"
msgstr "Lautstärkeregler Widget"

#: target/out/prefPages/widgets.js:393
msgid "Turn on to make the volume mixer widget visible on the Quick Settings panel"
msgstr "Einschalten, um das Lautstärkeregler Widget in den Schnelleinstellungen sichtbar zu machen"

#: target/out/prefPages/widgets.js:397
msgid "Label text"
msgstr "Text der Beschriftung"

#: target/out/prefPages/widgets.js:398
msgid "Choose label above slider text source"
msgstr "Label über Slider-Textquelle wählen"

#: target/out/prefPages/widgets.js:400
msgid "Both"
msgstr "Beides"

#: target/out/prefPages/widgets.js:401
msgid "Title"
msgstr "Titel"

#: target/out/prefPages/widgets.js:402
msgid "Description"
msgstr "Beschreibung"

#: target/out/prefPages/widgets.js:403
msgid "None"
msgstr "Keine"

#: target/out/prefPages/widgets.js:411
msgid "Label opacity"
msgstr "Deckkraft des Labels"

#: target/out/prefPages/widgets.js:412
msgid ""
"Adjust label opacity.\n"
"Set this to 255 to make opaque, and 0 to make transparent"
msgstr ""
"Deckkraft des Labels anpassen.\n"
"Setze dies auf 255, um undurchsichtig zu machen, und 0 um transparent zu machen"

#: target/out/prefPages/widgets.js:419
#, javascript-format
msgid "Set maximum height of the Volume mixer widget, default is %d. Set this to 0 to disable max height"
msgstr "Legen Sie die maximale Höhe des Volume Mixer Widgets fest, Standard ist %d. Setzen Sie dies auf 0, um die maximale Höhe zu deaktivieren"

#: target/out/prefPages/widgets.js:428
msgid "Show scrollbar on mixer list"
msgstr "Scrollbar in der Mixer-Liste anzeigen"

#: target/out/prefPages/widgets.js:434
msgid "Show stream icon"
msgstr "Stream-Symbol anzeigen"

#: target/out/prefPages/widgets.js:435
msgid "Show stream icon above mixer sliders"
msgstr "Stream-Symbol über Mixer-Schieberegler anzeigen"

#: target/out/prefPages/widgets.js:450 target/out/prefPages/widgets.js:458
msgid "Attach to output slider"
msgstr "An Ausgaberegler anhängen"

#: target/out/prefPages/widgets.js:451 target/out/prefPages/widgets.js:459
msgid "Attach volume mixer menu button to output slider. Use if you prefer compact layout"
msgstr "Lautstärkeregler an den Ausgaberegler anhängen. Benutzen, wenn Sie ein kompaktes Layout bevorzugen"

#: target/out/prefPages/widgets.js:468
msgid "Menu icon"
msgstr "Menüsymbol"

#: target/out/prefPages/about.js:12 target/out/prefPages/about.js:32
msgid "About"
msgstr "Über"

#: target/out/prefPages/about.js:33
msgid "Common extension informations"
msgstr "Allgemeine Erweiterungsinformationen"

#: target/out/prefPages/about.js:36 target/out/prefPages/about.js:40
msgid "Changelogs"
msgstr "Changelogs"

#: target/out/prefPages/about.js:37 target/out/prefPages/about.js:41
msgid "View the change history for this extension"
msgstr "Änderungshistorie für diese Erweiterung anzeigen"

#: target/out/prefPages/about.js:50 target/out/prefPages/about.js:57
msgid "License of codes"
msgstr "Codelizenz"

#: target/out/prefPages/about.js:63 target/out/prefPages/about.js:65
#: target/out/prefPages/about.js:69
msgid "Contributors"
msgstr "Mitwirkende"

#: target/out/prefPages/about.js:64 target/out/prefPages/about.js:70
msgid "The creators of this extension"
msgstr "Die Ersteller dieser Erweiterung"

#: target/out/prefPages/about.js:74
msgid "More contributors"
msgstr "Mehr Mitwirkende"

#: target/out/prefPages/about.js:75
msgid "See more contributors on github"
msgstr "Mehr Mitwirkende auf Github ansehen"

#: target/out/prefPages/about.js:85
msgid "Link"
msgstr "Link"

#: target/out/prefPages/about.js:86
msgid "External links about this extension"
msgstr "Externe Links zu dieser Erweiterung"

#: target/out/prefPages/about.js:90
msgid "Donate via github sponsors"
msgstr "Spenden über GitHub Sponsoren"

#: target/out/prefPages/about.js:91
msgid "Support development!"
msgstr "Entwicklung unterstützen!"

#: target/out/prefPages/about.js:97
msgid "Rate and comment the extension!"
msgstr "Bewerten und kommentieren Sie die Erweiterung!"

#: target/out/prefPages/about.js:102
msgid "Github Repository"
msgstr "Github Repository"

#: target/out/prefPages/about.js:103
msgid ""
"Add Star on Repository is helping me a lot!\n"
"Please, if you found bug from this extension, you can make issue to make me know that!\n"
"Or, you can create PR with wonderful features!"
msgstr ""
"Das Hinzufügen eines Sterns zum Repository hilft mir sehr!\n"
"Wenn Sie einen Fehler in dieser Erweiterung finden, können Sie mir das Problem melden!\n"
"Oder Sie können einen PR mit tollen Funktionen erstellen!"

#: target/out/prefPages/about.js:109
msgid "Add translation to this extension!"
msgstr "Übersetzung zu dieser Erweiterung hinzufügen!"

#: target/out/prefPages/about.js:115
msgid "Debug"
msgstr "Debug"

#: target/out/prefPages/about.js:116
msgid "Extension debugging options"
msgstr "Debug-Optionen"

#: target/out/prefPages/about.js:120
msgid "Expose environment"
msgstr "Umgebung freigeben"

#: target/out/prefPages/about.js:121
msgid "Expose extension environment to globalThis.qst"
msgstr "Erweiterungsumgebung globalThis.qst anzeigen"

#: target/out/prefPages/about.js:126
msgid "Show layout border"
msgstr "Layout-Rahmen anzeigen"

#: target/out/prefPages/about.js:127
msgid "Show layout borders on Quick Settings"
msgstr "Layout-Ränder in Schnelleinstellungen anzeigen"

#: target/out/prefPages/about.js:132
msgid "Log level"
msgstr "Log-Level"

#: target/out/prefPages/about.js:135
msgid "none"
msgstr "keine"

#: target/out/prefPages/about.js:136
msgid "error"
msgstr "fehlerhaft"

#: target/out/prefPages/about.js:137
msgid "info"
msgstr "Info"

#: target/out/prefPages/about.js:138
msgid "debug"
msgstr "Debug"

#: target/out/prefPages/toggles.js:12
msgid "Toggles"
msgstr "Toggles"

#: target/out/prefPages/toggles.js:19
msgid "DND Quick Toggle"
msgstr "DND Quick Toggle"

#: target/out/prefPages/toggles.js:20
msgid "Turn on to add the DND quick toggle on the Quick Settings panel"
msgstr "Aktivieren, um den DND-Schnellschalter in den Schnelleinstellungen hinzuzufügen"

#: target/out/prefPages/toggles.js:28
msgid "DND indicator position"
msgstr "DND-Indikatorposition"

#: target/out/prefPages/toggles.js:29
msgid "Set DND indicator position"
msgstr "DND-Indikatorposition festlegen"

#: target/out/prefPages/toggles.js:33
msgid "System Tray"
msgstr "System Tray"

#: target/out/prefPages/toggles.js:34
msgid "Date Menu Button"
msgstr "Datumsmenü-Taste"

#: target/out/prefPages/toggles.js:41
msgid "Unsafe Mode Quick Toggle"
msgstr "Unsicherer Modus Schnellwechsel"

#: target/out/prefPages/toggles.js:42
msgid "Turn on to add the unsafe quick toggle on the Quick Settings panel"
msgstr "Einschalten, um den unsicheren Schnelleinstellungen hinzuzufügen"

#: target/out/prefPages/toggles.js:50
msgid "Save last session state"
msgstr "Letzten Sitzungsstatus speichern"

#: target/out/prefPages/toggles.js:51
msgid "Turn on to save last session unsafe state"
msgstr "Aktivieren, um den unsicheren Status der letzten Sitzung zu speichern"

#: target/out/prefPages/menu.js:9 target/out/prefPages/menu.js:141
msgid "Advanced animation style"
msgstr "Erweiterter Animationsstil"

#: target/out/prefPages/menu.js:13
msgid "Open Duration"
msgstr "Öffne Dauer"

#: target/out/prefPages/menu.js:14
msgid "Open animation duration in microseconds"
msgstr "Animationsdauer in Mikrosekunden öffnen"

#: target/out/prefPages/menu.js:21
msgid "Close Duration"
msgstr "Dauer schließen"

#: target/out/prefPages/menu.js:22
msgid "Close animation duration in microseconds"
msgstr "Dauer der Animation in Mikrosekunden schließen"

#: target/out/prefPages/menu.js:29
msgid "Grid Content Opacity"
msgstr "Deckkraft des Gitters"

#: target/out/prefPages/menu.js:30
msgid ""
"Adjust grid content opacity.\n"
"Set this to 255 to make opaque, and 0 to make transparent"
msgstr ""
"Deckkraft des Gitters anpassen.\n"
"Auf 255 setzen, um Deckkraft zu erzeugen, und 0 um transparent zu machen"

#: target/out/prefPages/menu.js:37
msgid "Background Blur Radius"
msgstr "Hintergrundunschärfe-Radius"

#: target/out/prefPages/menu.js:38
msgid ""
"Adjust background blur radius.\n"
"Set this to 0 to disable blur effect"
msgstr ""
"Hintergrundunschärfe-Radius anpassen.\n"
"Setze dies auf 0, um Unschärfe-Effekt zu deaktivieren"

#: target/out/prefPages/menu.js:45
msgid "Background Brightness"
msgstr "Hintergrundhelligkeit"

#: target/out/prefPages/menu.js:46
msgid ""
"Adjust background brightness.\n"
"Set this to 1000 to disable brightness control effect.\n"
"Not impacts on gnome-shell's default dim effect."
msgstr ""
"Hintergrundhelligkeit anpassen.\n"
"Setze dies auf 1000 um, den Helligkeitskontroll-Effekt zu deaktivieren.\n"
"Wirkt sich nicht auf Gnome-Shells Standard-Dim-Effekt aus."

#: target/out/prefPages/menu.js:53
msgid "Background Opacity"
msgstr "Hintergrundtransparenz"

#: target/out/prefPages/menu.js:54
msgid ""
"Adjust background opacity.\n"
"Set this to 255 to make opaque, and 0 to make transparent"
msgstr ""
"Deckkraft des Hintergrunds anpassen.\n"
"Setze dies auf 255, um undurchsichtig zu machen, und 0 um transparent zu machen"

#: target/out/prefPages/menu.js:61
msgid "Background X Scale"
msgstr "Hintergrund X Skala"

#: target/out/prefPages/menu.js:62
msgid "Adjust background x scale, 1000 means 1.0 scale"
msgstr "Hintergrund x Skalierung anpassen, 1000 bedeutet 1,0 Skala"

#: target/out/prefPages/menu.js:69
msgid "Background Y Scale"
msgstr "Hintergrund Y-Skala"

#: target/out/prefPages/menu.js:70
msgid "Adjust background y scale, 1000 means 1.0 scale"
msgstr "Hintergrund y Skalierung anpassen, 1000 bedeutet 1,0 Skala"

#: target/out/prefPages/menu.js:84
msgid "Menu"
msgstr "Menü"

#: target/out/prefPages/menu.js:91
msgid "Overlay Mode"
msgstr "Overlay Mode"

#: target/out/prefPages/menu.js:92
msgid "Display toggle, power, and sound menus as overlay"
msgstr "Schalt-, Power- und Sound-Menüs als Overlay anzeigen"

#: target/out/prefPages/menu.js:101
msgid "Overlay Width"
msgstr "Overlay-Breite"

#: target/out/prefPages/menu.js:102
msgid ""
"Adjust overlay menu width\n"
"Set this to 0 to disable adjusting"
msgstr ""
"Überlagerungsmenü Breite\n"
"Auf 0 setzen, um Anpassung zu deaktivieren"

#: target/out/prefPages/menu.js:109
msgid "Overlay Animation Duration"
msgstr "Dauer der Overlay-Animation"

#: target/out/prefPages/menu.js:110
msgid ""
"Custom menu open animation duration in microseconds\n"
"Set this to 0 to disable custom animation"
msgstr ""
"Angepasste Menü-Animationsdauer in Mikrosekunden\n"
"Setze dies auf 0, um benutzerdefinierte Animation zu deaktivieren"

#: target/out/prefPages/menu.js:117
msgid "Overlay Animation Style"
msgstr "Animationsstil überlagern"

#: target/out/prefPages/menu.js:118
msgid "Custom menu open animation style"
msgstr "Animationsstil des Menüs öffnen"

#: target/out/prefPages/menu.js:120
msgid "Flyout"
msgstr "Flyout"

#: target/out/prefPages/menu.js:121
msgid "Dialog"
msgstr "Dialog"

#: target/out/prefPages/menu.js:130 target/out/prefPages/menu.js:143
msgid "Animation"
msgstr "Animation"

#: target/out/prefPages/menu.js:131
msgid ""
"Add menu animation on toggle menu opening and closing\n"
"To get the best feel, turn on overlay mode"
msgstr ""
"Menüanimation beim Öffnen und Schließen des Menüs\n"
"hinzufügen, um das beste Gefühl zu erhalten, aktivieren Sie den Overlay-Modus"

#: target/out/prefPages/menu.js:142
msgid "Adjust speed, blur, scale, and opacity"
msgstr "Schnelligkeit, Unschärfe, Skalierung und Deckkraft anpassen"

#: target/out/prefPages/layout.js:25
msgid "The item not found"
msgstr "Das Element nicht gefunden"

#: target/out/prefPages/layout.js:28
msgid "No changes"
msgstr "Keine Änderungen"

#: target/out/prefPages/layout.js:31
msgid "The same item already exists"
msgstr "Das gleiche Element existiert bereits"

#: target/out/prefPages/layout.js:40
#, javascript-format
msgid "Properties of %s"
msgstr "Objekte von %s"

#: target/out/prefPages/layout.js:47
msgid "Save"
msgstr "Speichern"

#: target/out/prefPages/layout.js:64
msgid "Toggle editor"
msgstr "Editor umschalten"

#: target/out/prefPages/layout.js:84
msgid "This option requires full gnome-shell reloading"
msgstr "Diese Option erfordert ein vollständiges Nachladen von Gnome-Shell"

#: target/out/prefPages/layout.js:160 target/out/prefPages/layout.js:278
#: target/out/prefPages/layout.js:437 target/out/prefPages/layout.js:672
msgid "Hide"
msgstr "Verstecken"

#: target/out/prefPages/layout.js:232
#, javascript-format
msgid "My item #%d"
msgstr "Mein Artikel #%d"

#: target/out/prefPages/layout.js:250
msgid "New Item"
msgstr "Neues Element"

#: target/out/prefPages/layout.js:261 target/out/prefPages/layout.js:610
#: target/out/prefPages/layout.js:737 target/out/prefPages/layout.js:787
#: target/out/prefPages/layout.js:813
msgid "Ordering and Hiding"
msgstr "Reihenfolge und Verstecken"

#: target/out/prefPages/layout.js:273 target/out/prefPages/layout.js:432
msgid "Friendly Name"
msgstr "Freundlicher Name"

#: target/out/prefPages/layout.js:283
msgid "Title Regex (Javascript Regex)"
msgstr "Titel Regex (Javascript Regex)"

#: target/out/prefPages/layout.js:288 target/out/prefPages/layout.js:442
msgid "Constructor Name"
msgstr "Name des Konstrukteurs"

#: target/out/prefPages/layout.js:294 target/out/prefPages/layout.js:448
msgid "GType Name"
msgstr "GType Name"

#: target/out/prefPages/layout.js:302 target/out/prefPages/layout.js:456
msgid "This is the comment for easy identification in the settings list. It has no effect on the behavior of the extension"
msgstr "Dies ist der Kommentar zur einfachen Identifizierung in der Einstellungsliste. Er hat keine Auswirkung auf das Verhalten der Erweiterung"

#: target/out/prefPages/layout.js:307 target/out/prefPages/layout.js:461
msgid "Javascript constructor name"
msgstr "Name des Javascript-Konstruktors"

#: target/out/prefPages/layout.js:312 target/out/prefPages/layout.js:466
msgid "GObject gtype name. You can get this value by calling GObject.type_name_from_instance"
msgstr "GObject gtype Name. Sie können diesen Wert erhalten, indem Sie GObject.type_name_from_instance aufrufen"

#: target/out/prefPages/layout.js:342
msgid "Keyboard Backlight"
msgstr "Tastaturbeleuchtung"

#: target/out/prefPages/layout.js:388 target/out/prefPages/layout.js:538
msgid "Unordered items"
msgstr "Unbestellte Artikel"

#: target/out/prefPages/layout.js:486
msgid "Remote Access Applet"
msgstr "Remote-Zugangs-Applet"

#: target/out/prefPages/layout.js:487
msgid "Camera"
msgstr "Kamera"

#: target/out/prefPages/layout.js:488
msgid "Volume Input"
msgstr "Volume Input"

#: target/out/prefPages/layout.js:489
msgid "Location"
msgstr "Standort"

#: target/out/prefPages/layout.js:490
msgid "Thunderbolt"
msgstr "Donnerblitz"

#: target/out/prefPages/layout.js:492
msgid "Network"
msgstr "Netzwerk"

#: target/out/prefPages/layout.js:495
msgid "Volume Output"
msgstr "Lautstärke-Ausgabe"

#: target/out/prefPages/layout.js:497
msgid "System (Battery)"
msgstr "System (Groß)"

#: target/out/prefPages/layout.js:618
msgid "Desktop Spacer"
msgstr "Desktop-Abstand"

#: target/out/prefPages/layout.js:629
msgid "Laptop Spacer"
msgstr "Laptop-Spacer"

#: target/out/prefPages/layout.js:641
msgid "Capture button"
msgstr "Aufnahme-Button"

#: target/out/prefPages/layout.js:647
msgid "Settings button"
msgstr "Einstellungen-Schaltfläche"

#: target/out/prefPages/layout.js:653
msgid "Lock button"
msgstr "Sperren-Taste"

#: target/out/prefPages/layout.js:659
msgid "Shutdown button"
msgstr "Herunterfahren-Schaltfläche"

#: target/out/prefPages/layout.js:665
msgid "Battery button"
msgstr "Akku-Taste"

#: target/out/prefPages/layout.js:711
msgid "Layout"
msgstr "Layout"

#: target/out/prefPages/layout.js:718
msgid "Quick Toggles Layout"
msgstr "Schnellwechsel-Layout"

#: target/out/prefPages/layout.js:719 target/out/prefPages/layout.js:734
msgid "Adjust quick toggles layout"
msgstr "Schnellschaltlayout anpassen"

#: target/out/prefPages/layout.js:738
msgid "Reorder and hide quick toggles"
msgstr "Schnellschalter neu anordnen und ausblenden"

#: target/out/prefPages/layout.js:745
msgid "System Indicators"
msgstr "Systemindikatoren"

#: target/out/prefPages/layout.js:746
msgid "Adjust system indicators layout and style"
msgstr "Layout und Stil der Systemindikatoren anpassen"

#: target/out/prefPages/layout.js:751
msgid "Accent screen sharing indicator"
msgstr "Display-Sharing-Indikator"

#: target/out/prefPages/layout.js:752
msgid "Use shell accent color on screen sharing indicator"
msgstr "Shell-Akzentfarbe für Bildschirmfreigabe verwenden"

#: target/out/prefPages/layout.js:757
msgid "Accent screen recording indicator"
msgstr "Display-Aufnahme-Indikator"

#: target/out/prefPages/layout.js:758
msgid "Use shell accent color on screen recording indicator"
msgstr "Shell-Akzentfarbe für Bildschirmaufzeichnung verwenden"

#: target/out/prefPages/layout.js:763
msgid "Privacy indicators style"
msgstr "Stil der Datenschutzindikatoren"

#: target/out/prefPages/layout.js:764
msgid "Use monochrome or shell accent color on privarcy indicators"
msgstr "Verwenden Sie monochrome oder Shell-Akzentfarbe in Privatsachen Indikatoren"

#: target/out/prefPages/layout.js:767
msgid "Accent"
msgstr "Akzent"

#: target/out/prefPages/layout.js:768
msgid "Monochrome"
msgstr "Monochrom"

#: target/out/prefPages/layout.js:777
msgid "Adjust system indicators"
msgstr "Systemindikatoren anpassen"

#: target/out/prefPages/layout.js:788
msgid "Reorder and hide system indicators"
msgstr "Systemindikatoren neu anordnen und verstecken"

#: target/out/prefPages/layout.js:795
msgid "System Items Layout"
msgstr "Layout der Systemelemente"

#: target/out/prefPages/layout.js:800 target/out/prefPages/layout.js:815
msgid "Adjust system items layout"
msgstr "Layout der Systemelemente anpassen"

#: target/out/prefPages/layout.js:804
msgid "Hide layout box"
msgstr "Layoutbox ausblenden"

#: target/out/prefPages/layout.js:805
msgid "Hide all buttons and layout box"
msgstr "Alle Buttons und Layout-Box ausblenden"

#: target/out/prefPages/layout.js:814
msgid "Reorder and hide system items"
msgstr "Systemelemente neu anordnen und verstecken"

#: target/out/prefPages/layout.js:823
msgid "Date Menu"
msgstr "Datumsmenü"

#: target/out/prefPages/layout.js:824
msgid "Adjust Date Menu layout"
msgstr "Datumsmenü-Layout anpassen"

#: target/out/prefPages/layout.js:828
msgid "Hide left box"
msgstr "Linkskiste ausblenden"

#: target/out/prefPages/layout.js:829
msgid "Hide the left box of the date menu, which contains notifications and media control"
msgstr "Verstecke das linke Feld des Datumsmenüs, welches Benachrichtigungen und Medienkontrolle enthält"

#: target/out/prefPages/layout.js:834
msgid "Hide right box"
msgstr "Verstecke rechte Box"

#: target/out/prefPages/layout.js:835
msgid "Hide the right box of the date menu, which contains calendar, world clock and weather"
msgstr "Verstecke das rechte Feld des Datumsmenüs, welches Kalender, Weltzeit und Wetter enthält"

#: target/out/prefPages/layout.js:840
msgid "Disable menu"
msgstr "Menü deaktivieren"

#: target/out/prefPages/layout.js:841
msgid "Do not open date menu when the date menu button clicked"
msgstr "Datumsmenü nicht öffnen, wenn der Datumsmenü-Button angeklickt wurde"

#~ msgid "Height"
#~ msgstr "Höhe"

#~ msgid "Set this to 0 to use default height"
#~ msgstr "Auf 0 setzen, um die Standardhöhe zu verwenden"

#~ msgid "Start opaque"
#~ msgstr "Starte Deckkraft"

#~ msgid "End opaque"
#~ msgstr "Undurchsichtig beenden"

#~ msgid "Hide Notifications"
#~ msgstr "Benachrichtigungen ausblenden"

#~ msgid "Hide notifications on the date menu"
#~ msgstr "Benachrichtigungen im Datumsmenü ausblenden"

#~ msgid "Hide Media Control"
#~ msgstr "Mediensteuerung ausblenden"

#~ msgid "Hide media control on the date menu"
#~ msgstr "Mediensteuerung im Datumsmenü ausblenden"


================================================
FILE: po/en.po
================================================
# AUTHORS
# qwreey75 (aka qwreey) https://github.com/qwreey75/, 2023.
# DodoLeDev https://github.com/DodoLeDev, 2023
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-07-20 15:34+0000\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: target/out/libs/prefs/components.js:57
msgid "Details"
msgstr ""

#: target/out/libs/prefs/components.js:144
msgid "This feature marked as experimental"
msgstr ""

#: target/out/libs/prefs/components.js:274
msgid "Reset to default"
msgstr ""

#: target/out/libs/prefs/components.js:512
msgid "Theme default"
msgstr ""

#: target/out/libs/prefs/components.js:853
msgid "Homepage"
msgstr ""

#: target/out/libs/prefs/components.js:859
#: target/out/libs/prefs/components.js:863 target/out/prefPages/about.js:49
#: target/out/prefPages/about.js:51 target/out/prefPages/about.js:56
msgid "License"
msgstr ""

#: target/out/libs/prefs/components.js:860
msgid "Loading ..."
msgstr ""

#: target/out/libs/prefs/components.js:869
msgid "Affected Files"
msgstr ""

#: target/out/libs/prefs/components.js:924
msgid "Changelog"
msgstr ""

#: target/out/libs/prefs/components.js:938
msgid "(Current)"
msgstr ""

#: target/out/libs/prefs/components.js:969
#, javascript-format
msgid "> **Date:** %s"
msgstr ""

#: target/out/libs/prefs/components.js:970
#, javascript-format
msgid "> **Git Hash:** %s"
msgstr ""

#: target/out/libs/prefs/components.js:971
#, javascript-format
msgid "> **Build Number:** %d"
msgstr ""

#: target/out/libs/prefs/components.js:1034
msgid "Padding"
msgstr ""

#: target/out/libs/prefs/components.js:1038
msgid "Top"
msgstr "Top"

#: target/out/libs/prefs/components.js:1049
msgid "Bottom"
msgstr "Bottom"

#: target/out/libs/prefs/components.js:1060
msgid "Left"
msgstr ""

#: target/out/libs/prefs/components.js:1071
msgid "Right"
msgstr ""

#: target/out/prefs.js:60
msgid "Stable"
msgstr ""

#: target/out/prefs.js:63
msgid "Development"
msgstr ""

#: target/out/prefs.js:66
msgid "Preview"
msgstr ""

#: target/out/prefs.js:69
msgid "(Github Release)"
msgstr ""

#: target/out/prefs.js:72
msgid "(Built from source)"
msgstr ""

#: target/out/features/widget/notifications.js:26
msgid "No Notifications"
msgstr "No Notifications"

#: target/out/features/widget/notifications.js:58
#: target/out/features/widget/notifications.js:122
msgid "Clear"
msgstr "Clear"

# Quick settings notifications title text
# Notifications title
#: target/out/features/widget/notifications.js:76
msgid "Notifications"
msgstr "Notifications"

#: target/out/features/widget/notifications.js:105
#: target/out/features/toggle/dndQuickToggle.js:10
#: target/out/prefPages/layout.js:345 target/out/prefPages/layout.js:485
msgid "Do Not Disturb"
msgstr "Do Not Disturb"

#: target/out/features/widget/media.js:118
msgid "Unknown title"
msgstr ""

#: target/out/features/widget/media.js:888
msgid "Media"
msgstr ""

#: target/out/features/widget/volumeMixer.js:105
msgid "Volume changed"
msgstr "Volume changed"

#: target/out/features/widget/volumeMixer.js:463
msgid "Open volumx mixer"
msgstr ""

#: target/out/features/widget/volumeMixer.js:480
msgid "Volume Mixer"
msgstr "Volume Mixer"

#: target/out/features/widget/weather.js:73
msgid "Weather"
msgstr ""

#: target/out/features/widget/weather.js:192
msgid "Location has not been set"
msgstr ""

# Unsafe mode
#: target/out/features/toggle/unsafeQuickToggle.js:11
#: target/out/prefPages/layout.js:346 target/out/prefPages/layout.js:496
msgid "Unsafe Mode"
msgstr "Unsafe Mode"

#: target/out/prefPages/widgets.js:11
msgid "Handle radius"
msgstr ""

#: target/out/prefPages/widgets.js:12
msgid "Set this to 0 to use default radius"
msgstr ""

#: target/out/prefPages/widgets.js:18
msgid "Handle color"
msgstr ""

#: target/out/prefPages/widgets.js:36
msgid "Slider style"
msgstr ""

#: target/out/prefPages/widgets.js:39
msgid "Slim"
msgstr ""

#: target/out/prefPages/widgets.js:40 target/out/prefPages/layout.js:766
msgid "Default"
msgstr ""

#: target/out/prefPages/widgets.js:48 target/out/prefPages/widgets.js:173
msgid "Background color"
msgstr ""

#: target/out/prefPages/widgets.js:55
msgid "Active Background color"
msgstr ""

#: target/out/prefPages/widgets.js:62
msgid "Thickness"
msgstr ""

#: target/out/prefPages/widgets.js:66
msgid "Set this to 0 to use default thickness"
msgstr ""

#: target/out/prefPages/widgets.js:76
msgid "Widgets"
msgstr ""

#: target/out/prefPages/widgets.js:83 target/out/prefPages/widgets.js:136
#: target/out/prefPages/widgets.js:162 target/out/prefPages/widgets.js:224
msgid "Media Widget"
msgstr ""

#: target/out/prefPages/widgets.js:88
msgid "Turn on to make the media widget visible on the Quick Settings panel"
msgstr ""

#: target/out/prefPages/widgets.js:92 target/out/prefPages/widgets.js:280
#: target/out/prefPages/widgets.js:343
msgid "Compact mode"
msgstr ""

#: target/out/prefPages/widgets.js:93
msgid ""
"Make Media Controls widget smaller\n"
"Make it more similar in size to the notification message"
msgstr ""
"Make Media Controls widget smaller\n"
"Make it more similar in size to the notification message"

#: target/out/prefPages/widgets.js:99
msgid "Control buttons opacity"
msgstr ""

#: target/out/prefPages/widgets.js:100
msgid "Set this to 255 to make opaque, and 0 to make transparent"
msgstr ""

#: target/out/prefPages/widgets.js:108
msgid "Show next button"
msgstr ""

#: target/out/prefPages/widgets.js:109
msgid "Add next contorl button next to description"
msgstr ""

#: target/out/prefPages/widgets.js:115
msgid "Show previous button"
msgstr ""

#: target/out/prefPages/widgets.js:116
msgid "Add previous contorl button next to description"
msgstr ""

#: target/out/prefPages/widgets.js:122
msgid "Show pause button"
msgstr ""

#: target/out/prefPages/widgets.js:123
msgid "Add pause contorl button next to description"
msgstr ""

#: target/out/prefPages/widgets.js:129 target/out/prefPages/widgets.js:138
msgid "Show progress bar"
msgstr ""

#: target/out/prefPages/widgets.js:130 target/out/prefPages/widgets.js:139
msgid "Add progress bar under description"
msgstr ""

#: target/out/prefPages/widgets.js:155 target/out/prefPages/widgets.js:164
msgid "Gradient background"
msgstr ""

#: target/out/prefPages/widgets.js:156 target/out/prefPages/widgets.js:169
msgid ""
"Use gradient background extracted from cover image\n"
"May affect performance slightly"
msgstr ""

#: target/out/prefPages/widgets.js:174
msgid "Base background color"
msgstr ""

#: target/out/prefPages/widgets.js:182
msgid "Start opacity"
msgstr ""

#: target/out/prefPages/widgets.js:183
msgid "Adjust left side transparency, Set this to 1000 to make opaque"
msgstr ""

#: target/out/prefPages/widgets.js:190
msgid "Start color"
msgstr ""

#: target/out/prefPages/widgets.js:191
msgid "Adjust left side background color mixing, Set this to 1000 to show extracted color"
msgstr ""

#: target/out/prefPages/widgets.js:198
msgid "End opacity"
msgstr ""

#: target/out/prefPages/widgets.js:199
msgid "Adjust right side transparency, Set this to 1000 to make opaque"
msgstr ""

#: target/out/prefPages/widgets.js:206
msgid "End color"
msgstr ""

#: target/out/prefPages/widgets.js:207
msgid "Adjust right side background color mixing, Set this to 1000 to show extracted color"
msgstr ""

#: target/out/prefPages/widgets.js:216 target/out/
Download .txt
gitextract_1mwh9xy9/

├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   └── bug---error-report.md
│   └── workflows/
│       └── build.yml
├── .gitignore
├── LICENSE
├── README.md
├── Todo.md
├── dirzsh.zsh
├── docker-compose.example.yml
├── install.sh
├── media/
│   ├── Changelog.md
│   ├── dbus.xml
│   ├── licenses.json
│   └── rounded_corners.frag
├── metadata.json
├── old/
│   ├── features/
│   │   └── volumeMixer.ts
│   ├── inputOutput.ts
│   ├── layoutCustomize.ts
│   ├── libs/
│   │   ├── streamSlider.ts
│   │   └── volumeMixerHandlerNotImpled.ts
│   ├── menus.ts
│   ├── other.ts
│   ├── panel.ts
│   ├── prefsPages/
│   │   └── volumeMixer.ts
│   ├── sidebarPrefs.ts
│   └── widgetManager.ts
├── package.json
├── po/
│   ├── ca.po
│   ├── cs.po
│   ├── de.po
│   ├── en.po
│   ├── ja.po
│   ├── ko.po
│   ├── pl.po
│   ├── pt.po
│   ├── quick-settings-tweaks@qwreey.pot
│   ├── ru.po
│   ├── ta.po
│   └── zh_Hans.po
├── schemas/
│   └── org.gnome.shell.extensions.quick-settings-tweaks.gschema.xml
├── scripts/
│   ├── contributor-labels.json
│   ├── reindent.js
│   └── version/
│       ├── gnome-docker-version
│       ├── latest-build-number
│       ├── latest-middle-version
│       ├── latest-minor-version
│       └── major-version
├── src/
│   ├── ambient.d.ts
│   ├── config.ts
│   ├── extension.ts
│   ├── features/
│   │   ├── debug.ts
│   │   ├── layout/
│   │   │   ├── dateMenu.ts
│   │   │   ├── sound.ts
│   │   │   ├── systemIndicator.ts
│   │   │   ├── systemItems.ts
│   │   │   └── toggles.ts
│   │   ├── menuAnimation.ts
│   │   ├── overlayMenu.ts
│   │   ├── toggle/
│   │   │   └── unsafeQuickToggle.ts
│   │   └── widget/
│   │       ├── media.ts
│   │       ├── notifications.ts
│   │       ├── volumeMixer.ts
│   │       └── weather.ts
│   ├── global.scss
│   ├── global.ts
│   ├── libs/
│   │   ├── prefs/
│   │   │   └── components.ts
│   │   ├── shared/
│   │   │   ├── colors.ts
│   │   │   ├── imageUtils.ts
│   │   │   ├── jsUtils.ts
│   │   │   ├── logger.ts
│   │   │   ├── maid.ts
│   │   │   └── styleClass.ts
│   │   ├── shell/
│   │   │   ├── advani.ts
│   │   │   ├── effects.ts
│   │   │   ├── feature.ts
│   │   │   ├── gesture.ts
│   │   │   ├── quickSettingsUtils.ts
│   │   │   └── styler.ts
│   │   └── types/
│   │       ├── quickSettingsOrderItem.ts
│   │       ├── systemIndicatorOrderItem.ts
│   │       └── toggleOrderItem.ts
│   ├── prefPages/
│   │   ├── about.ts
│   │   ├── layout.ts
│   │   ├── menu.ts
│   │   ├── toggles.ts
│   │   └── widgets.ts
│   ├── prefs.ts
│   ├── styles/
│   │   ├── date-menu.scss
│   │   ├── debug.scss
│   │   ├── media-widget.scss
│   │   ├── message-compact.scss
│   │   ├── message-remove-shadow.scss
│   │   ├── notification-widget.scss
│   │   ├── system-indicator.scss
│   │   ├── volume-mixer-widget.scss
│   │   └── weather-widget.scss
│   ├── stylesheet.scss
│   └── types.d.ts
└── tsconfig.json
Download .txt
SYMBOL INDEX (595 symbols across 49 files)

FILE: old/features/volumeMixer.ts
  class VolumeMixerFeature (line 5) | class VolumeMixerFeature {
    method load (line 6) | load() {
    method unload (line 46) | unload() {

FILE: old/inputOutput.ts
  class SoundTweakFeature (line 7) | class SoundTweakFeature extends FeatureBase {
    method loadSettings (line 14) | loadSettings(loader: SettingLoader): void {
    method onLoad (line 23) | onLoad() {
    method onUnload (line 34) | onUnload(): void {}

FILE: old/layoutCustomize.ts
  class LayoutCustomize (line 6) | class LayoutCustomize extends FeatureBase {
    method loadSettings (line 11) | override loadSettings(loader: SettingLoader): void {
    method onChild (line 15) | onChild(actor: QuickMenuToggle) {
    method checkChildren (line 19) | checkChildren() {
    method update (line 25) | update() {
    method onLoad (line 29) | override onLoad(): void {
    method onUnload (line 41) | override onUnload(): void {

FILE: old/libs/streamSlider.ts
  constant ALLOW_AMPLIFIED_VOLUME_KEY (line 9) | const ALLOW_AMPLIFIED_VOLUME_KEY = 'allow-volume-above-100-percent'
  class StreamSlider (line 11) | class StreamSlider extends QuickSlider {
    method _init (line 12) | _init(control) {
    method stream (line 69) | get stream() {
    method stream (line 73) | set stream(stream) {
    method _connectStream (line 88) | _connectStream(stream) {
    method _lookupDevice (line 94) | _lookupDevice(_id) {
    method _activateDevice (line 99) | _activateDevice(_device) {
    method _addDevice (line 104) | _addDevice(id) {
    method _removeDevice (line 128) | _removeDevice(id) {
    method _setActiveDevice (line 134) | _setActiveDevice(activeId) {
    method _shouldBeVisible (line 142) | _shouldBeVisible() {
    method _sync (line 146) | _sync() {
    method _sliderChanged (line 151) | _sliderChanged() {
    method _notifyVolumeChange (line 182) | _notifyVolumeChange() {
    method _changeSlider (line 196) | _changeSlider(value) {
    method _updateVolume (line 202) | _updateVolume() {
    method _amplifySettingsChanged (line 209) | _amplifySettingsChanged() {
    method getIcon (line 219) | getIcon() {
    method getLevel (line 234) | getLevel() {
    method getMaxLevel (line 241) | getMaxLevel() {
    method _destroy (line 250) | _destroy() {

FILE: old/libs/volumeMixerHandlerNotImpled.ts
  constant ALLOW_AMPLIFIED_VOLUME_KEY (line 15) | const ALLOW_AMPLIFIED_VOLUME_KEY = 'allow-volume-above-100-percent'
  class StreamSlider (line 19) | class StreamSlider extends QuickSlider {
    method _init (line 20) | _init(control: Gvc.MixerControl, stream: Gvc.MixerStream) {
    method _connectStream (line 36) | _connectStream(stream: Gvc.MixerStream) {
    method _shouldBeVisible (line 89) | _shouldBeVisible() {
    method getIcon (line 94) | getIcon() {

FILE: old/other.ts
  method constructor (line 16) | constructor(settings: Gio.Settings, _prefs: QstExtensionPreferences, win...

FILE: old/prefsPages/volumeMixer.ts
  method constructor (line 20) | constructor(callingWidget, filterListData) {
  method checkInputValid (line 63) | checkInputValid() {
  method _init (line 86) | _init(name, value) {
  method constructor (line 94) | constructor(settings) {
  method createAddFilteredAppButtonRow (line 237) | createAddFilteredAppButtonRow() {
  method buildFilterListRow (line 253) | buildFilterListRow(filteredAppName) {
  method removeFilteredApp (line 291) | removeFilteredApp(filteredAppName, filterListRow) {
  method addFilteredApp (line 297) | addFilteredApp(filteredAppName) {
  method showFilteredAppDialog (line 305) | showFilteredAppDialog(callingWidget, filterListData) {

FILE: old/sidebarPrefs.ts
  class QstExtensionPreferences (line 23) | class QstExtensionPreferences extends ExtensionPreferences {
    method appendIconPath (line 24) | appendIconPath(path: string) {
    method readExtensionFile (line 30) | readExtensionFile(path: string) {
    method getContributorRows (line 37) | getContributorRows(): ContributorsRow.Contributor[][] {
    method getLicenses (line 51) | getLicenses(): LicenseRow.License[] {
    method getVersionString (line 63) | getVersionString(): string {
    method getChangelog (line 84) | getChangelog(): string {
    method fillPreferencesWindow (line 88) | async fillPreferencesWindow(window: Adw.PreferencesWindow) {

FILE: old/widgetManager.ts
  class WidgetManager (line 5) | class WidgetManager {
    method update (line 11) | update() {
    method load (line 15) | load(): void {
    method unload (line 31) | unload(): void {

FILE: scripts/reindent.js
  function getItems (line 2) | function getItems() {
  function main (line 11) | async function main() {

FILE: src/ambient.d.ts
  type EasingParams (line 4) | interface EasingParams {
  type EasingParamsWithProps (line 12) | type EasingParamsWithProps = EasingParams & { [key: string]: any }
  class Info (line 17) | class Info extends GObject.Object {
  class Location (line 220) | class Location extends GObject.Object {
  type ConditionPhenomenon (line 224) | enum ConditionPhenomenon {
  type ConditionQualifier (line 255) | enum ConditionQualifier {
  type DistanceUnit (line 272) | enum DistanceUnit {
  type LocationLevel (line 288) | enum LocationLevel {
  type PressureUnit (line 305) | enum PressureUnit {
  type Provider (line 315) | enum Provider {
  type Sky (line 326) | enum Sky {
  type SpeedUnit (line 341) | enum SpeedUnit {
  type TemperatureUnit (line 356) | enum TemperatureUnit {
  type WindDirection (line 370) | enum WindDirection {
  class PageIndicators (line 400) | class PageIndicators extends St.BoxLayout {
  class WeatherClient (line 416) | class WeatherClient extends Signals.EventEmitter {

FILE: src/extension.ts
  class QstExtension (line 25) | class QstExtension extends Extension {
    method disable (line 29) | disable() {
    method enable (line 50) | enable() {

FILE: src/features/debug.ts
  class DebugFeature (line 6) | class DebugFeature extends FeatureBase {
    method loadSettings (line 13) | override loadSettings(loader: SettingLoader): void {
    method onLoad (line 20) | override onLoad() {
    method onUnload (line 49) | override onUnload(): void {}

FILE: src/features/layout/dateMenu.ts
  class DateMenuLayoutFeature (line 6) | class DateMenuLayoutFeature extends FeatureBase {
    method loadSettings (line 13) | override loadSettings(loader: SettingLoader): void {
    method onLoad (line 20) | override onLoad() {
    method onUnload (line 64) | override onUnload(): void {

FILE: src/features/layout/sound.ts
  class SoundLayoutFeature (line 5) | class SoundLayoutFeature extends FeatureBase {
    method loadSettings (line 8) | override loadSettings(loader: SettingLoader): void {
    method onLoad (line 13) | override onLoad(): void {
    method onUnload (line 16) | override onUnload(): void {

FILE: src/features/layout/systemIndicator.ts
  class SystemIndicatorLayoutFeature (line 10) | class SystemIndicatorLayoutFeature extends FeatureBase {
    method loadSettings (line 18) | override loadSettings(loader: SettingLoader): void {
    method onIndicatorCreated (line 28) | onIndicatorCreated(maid: Maid, indicator: SystemIndicator): void {
    method onUpdate (line 34) | onUpdate(): void {
    method onLoad (line 59) | override onLoad(): void {
    method onUnload (line 113) | override onUnload(): void {

FILE: src/features/layout/systemItems.ts
  class SystemItemsLayoutFeature (line 9) | class SystemItemsLayoutFeature extends FeatureBase {
    method loadSettings (line 19) | override loadSettings(loader: SettingLoader): void {
    method getItmes (line 31) | async getItmes(): Promise<{
    method onLoad (line 76) | override onLoad() {
    method onUnload (line 108) | override onUnload(): void {}

FILE: src/features/layout/toggles.ts
  class TogglesLayoutFeature (line 11) | class TogglesLayoutFeature extends FeatureBase {
    method loadSettings (line 16) | override loadSettings(loader: SettingLoader): void {
    method onToggleCreated (line 30) | onToggleCreated(maid: Maid, toggle: QuickToggle|QuickMenuToggle): void {
    method onUpdate (line 36) | onUpdate(): void {
    method onLoad (line 67) | override onLoad(): void {
    method onUnload (line 74) | override onUnload(): void {

FILE: src/features/menuAnimation.ts
  class MenuAnimation (line 9) | class MenuAnimation extends FeatureBase {
    method loadSettings (line 20) | override loadSettings(loader: SettingLoader): void {
    method onOpen (line 33) | onOpen(_maid: Maid, _menu: QuickSettingsMenu, isOpen: boolean) {
    method onLoad (line 70) | override onLoad(): void {
    method onUnload (line 88) | override onUnload(): void {

FILE: src/features/overlayMenu.ts
  class OverlayMenu (line 9) | class OverlayMenu extends FeatureBase {
    method loadSettings (line 16) | override loadSettings(loader: SettingLoader): void {
    method getCoords (line 25) | getCoords(menu: QuickSettingsMenu): {
    method onOpen (line 71) | onOpen(_maid: Maid, menu: QuickSettingsMenu, isOpen: boolean) {
    method onMenuCreated (line 117) | onMenuCreated(maid: Maid, menu: QuickSettingsMenu) {
    method reload (line 132) | override reload(changedKey?: string): void {
    method onLoad (line 138) | override onLoad(): void {
    method onUnload (line 163) | override onUnload(): void {

FILE: src/features/toggle/unsafeQuickToggle.ts
  class UnsafeQuickToggle (line 8) | class UnsafeQuickToggle extends QuickToggle {
    method constructor (line 10) | constructor(onUpdate: UnsafeQuickToggle["_onUpdate"]) { super(onUpdate...
    method _init (line 11) | _init(onUpdate: any) {
    method _updateIcon (line 25) | _updateIcon() {
    method _toggleMode (line 30) | _toggleMode() {
    method _sync (line 38) | _sync() {
  class UnsafeIndicator (line 47) | class UnsafeIndicator extends SystemIndicator {
    method constructor (line 48) | constructor(onUpdate: UnsafeQuickToggle["_onUpdate"]) { super(onUpdate...
    method _init (line 50) | _init(onUpdate: any) {
    method destroy (line 54) | destroy() {
  class UnsafeQuickToggleFeature (line 64) | class UnsafeQuickToggleFeature extends FeatureBase {
    method loadSettings (line 67) | override loadSettings(loader: SettingLoader): void {
    method onLoad (line 73) | override onLoad(): void {
    method onUnload (line 90) | override onUnload(): void {

FILE: src/features/widget/media.ts
  class Player (line 26) | class Player extends GObject.Object {
    method constructor (line 35) | constructor(busName: string) {
    method position (line 96) | get position(): Promise<number|null> {
    method position (line 104) | set position(value: number) {
    method busName (line 119) | get busName(): string {
    method trackId (line 122) | get trackId(): string {
    method length (line 125) | get length(): number|null {
    method trackArtists (line 128) | get trackArtists(): string[] | null {
    method trackTitle (line 131) | get trackTitle(): string | null {
    method trackCoverUrl (line 134) | get trackCoverUrl(): string | null {
    method app (line 137) | get app(): Shell.App | null {
    method canGoNext (line 140) | get canGoNext(): boolean | null {
    method canGoPrevious (line 143) | get canGoPrevious(): boolean | null {
    method status (line 146) | get status(): string | null {
    method _parseMetadata (line 151) | _parseMetadata(metadata: any) {
    method _update (line 206) | _update() {
    method previous (line 215) | previous() {
    method next (line 219) | next() {
    method playPause (line 223) | playPause() {
    method raise (line 227) | raise() {
    method isPlaying (line 234) | isPlaying(): boolean {
    method _ready (line 239) | _ready() {
    method _close (line 258) | _close() {
  constant MPRIS_PLAYER_PREFIX (line 290) | const MPRIS_PLAYER_PREFIX = "org.mpris.MediaPlayer2."
  class Source (line 291) | class Source extends GObject.Object {
    method _init (line 295) | _init() {
    method start (line 300) | start() {
    method players (line 309) | get players(): Player[] {
    method _addPlayer (line 313) | private _addPlayer(busName: string) {
    method _onProxyReady (line 329) | private async _onProxyReady() {
    method _onNameOwnerChanged (line 343) | private _onNameOwnerChanged(proxy: any, sender: any, [name, oldOwner, ...
  class ProgressControl (line 365) | class ProgressControl extends St.BoxLayout {
    method constructor (line 375) | constructor(player: Player, options: ProgressControl.Options) {
    method _init (line 378) | _init(player: Player, options: ProgressControl.Options): void {
    method _createLabels (line 403) | _createLabels() {
    method _createSlider (line 417) | _createSlider() {
    method _updateStatus (line 444) | _updateStatus(noAnimate?: boolean) {
    method _updatePosition (line 485) | _updatePosition(current: number) {
    method _trackPosition (line 495) | _trackPosition() {
    method _dropTracker (line 504) | _dropTracker() {
    method _createTracker (line 509) | _createTracker() {
    method _updateTracker (line 516) | _updateTracker() {
    method _formatSeconds (line 523) | _formatSeconds(seconds: number) {
  type OptionsBase (line 537) | interface OptionsBase {
  type Options (line 540) | type Options = {
  class MediaItem (line 546) | class MediaItem extends MessageList.Message {
    method constructor (line 557) | constructor(player: Player, options: MediaItem.Options) {
    method _createControlButtons (line 582) | _createControlButtons() {
    method _update (line 603) | _update() {
    method _updateGradient (line 639) | _updateGradient(): void {
    method vfunc_button_press_event (line 725) | vfunc_button_press_event(_event: Clutter.Event): boolean {
    method vfunc_button_release_event (line 728) | vfunc_button_release_event(_event: Clutter.Event): boolean {
    method vfunc_motion_event (line 731) | vfunc_motion_event(_event: Clutter.Event): boolean {
    method vfunc_touch_event (line 734) | vfunc_touch_event(_event: Clutter.Event): boolean {
    method addEventStop (line 738) | addEventStop<T extends Clutter.Actor>(actor: T): T {
  type OptionsBase (line 745) | interface OptionsBase {
  type Options (line 758) | type Options = {
  class MediaList (line 766) | class MediaList extends St.BoxLayout {
    method _messages (line 777) | get _messages(): MediaItem[] {
    method constructor (line 782) | constructor(options: MediaList.Options) {
    method _init (line 787) | _init(options: MediaList.Options): void {
    method _initEffect (line 839) | _initEffect() {
    method _updateEffect (line 859) | _updateEffect() {
    method _updateDragOffset (line 876) | _updateDragOffset(current: MediaItem, offset: number) {
    method _finalizeDragOffset (line 886) | _finalizeDragOffset(current: MediaItem, offset: number) {
    method dfunc_drag_end (line 910) | dfunc_drag_end(event: Drag.Event): void {
    method dfunc_drag_start (line 926) | dfunc_drag_start(_event: Drag.Event): void {
    method dfunc_drag_motion (line 932) | dfunc_drag_motion(event: Drag.Event): void {
    method dfunc_scroll_start (line 941) | dfunc_scroll_start(_event: Scroll.Event): void {
    method dfunc_scroll_motion (line 947) | dfunc_scroll_motion(event: Scroll.Event): void {
    method dfunc_scroll_end (line 953) | dfunc_scroll_end(event: Scroll.Event): void {
    method page (line 964) | get page(): number {
    method page (line 967) | set page(page: number) {
    method maxPage (line 970) | get maxPage(): number {
    method _showFirstPlaying (line 973) | _showFirstPlaying() {
    method _setPage (line 981) | _setPage(to: MediaItem) {
    method _seekPage (line 1031) | _seekPage(offset: number) {
    method _sync (line 1041) | _sync() {
  type Options (line 1088) | type Options = Partial<{
  class Header (line 1099) | class Header extends St.BoxLayout {
    method constructor (line 1103) | constructor(options: Header.Options) {
    method _init (line 1106) | _init(_options: Header.Options) {
    method maxPage (line 1132) | set maxPage(maxPage: number) {
    method maxPage (line 1135) | get maxPage(): number {
    method page (line 1138) | set page(page: number) {
    method page (line 1141) | get page(): number {
  type Options (line 1151) | type Options = Partial<{
  class MediaWidget (line 1157) | class MediaWidget extends St.BoxLayout {
    method constructor (line 1164) | constructor(options: MediaWidget.Options) {
    method _init (line 1167) | _init(options: MediaWidget.Options) {
    method _syncEmpty (line 1207) | _syncEmpty() {
    method _updateStyleClass (line 1211) | _updateStyleClass() {
  type Options (line 1221) | type Options = Partial<{
  class MediaWidgetFeature (line 1231) | class MediaWidgetFeature extends FeatureBase {
    method loadSettings (line 1252) | override loadSettings(loader: SettingLoader): void {
    method reload (line 1286) | override reload(key: string): void {
    method onLoad (line 1339) | override onLoad(): void {
    method onUnload (line 1350) | override onUnload(): void {

FILE: src/features/widget/notifications.ts
  class Placeholder (line 12) | class Placeholder extends St.BoxLayout {
    method _init (line 16) | _init() {
  class ClearButton (line 41) | class ClearButton extends St.Button {
    method _init (line 46) | _init() {
  class Header (line 82) | class Header extends St.BoxLayout {
    method constructor (line 86) | constructor(options: Header.Options) {
    method _init (line 89) | _init(options: Header.Options) {
  type Options (line 113) | type Options = Partial<{
  class NativeControl (line 120) | class NativeControl extends St.BoxLayout {
    method _init (line 126) | _init() {
  class NotificationList (line 172) | class NotificationList extends MessageList.MessageView {
    method constructor (line 173) | constructor() {
    method _setupMpris (line 177) | _setupMpris() {}
  class NotificationWidget (line 183) | class NotificationWidget extends St.BoxLayout {
    method constructor (line 191) | constructor(options: NotificationWidget.Options) {
    method _init (line 194) | _init(options: NotificationWidget.Options) {
    method _updateMaxHeight (line 228) | _updateMaxHeight() {
    method _updateStyleClass (line 234) | _updateStyleClass() {
    method _createScroll (line 244) | _createScroll() {
    method _updateScrollStyle (line 259) | _updateScrollStyle() {
    method _syncScrollbarPadding (line 262) | _syncScrollbarPadding() {
    method _createHeaderArea (line 269) | _createHeaderArea() {
    method _createPlaceholder (line 280) | _createPlaceholder() {
    method _createNativeControl (line 284) | _createNativeControl() {
    method _syncClear (line 295) | _syncClear() {
    method _syncEmpty (line 325) | _syncEmpty() {
  type Options (line 338) | type Options = {
  class NotificationsWidgetFeature (line 351) | class NotificationsWidgetFeature extends FeatureBase {
    method loadSettings (line 361) | override loadSettings(loader: SettingLoader): void {
    method reload (line 374) | override reload(key: string): void {
    method onLoad (line 395) | override onLoad(): void {
    method onUnload (line 409) | override onUnload(): void {

FILE: src/features/widget/volumeMixer.ts
  constant ALLOW_AMPLIFIED_VOLUME_KEY (line 22) | const ALLOW_AMPLIFIED_VOLUME_KEY = "allow-volume-above-100-percent"
  class StreamSlider (line 25) | class StreamSlider extends QuickSlider {
    method constructor (line 34) | constructor(
    method _init (line 44) | _init(control: Gvc.MixerControl, stream: Gvc.MixerStream|undefined, op...
    method stream (line 89) | get stream(): Gvc.MixerStream {
    method stream (line 92) | set stream(stream: Gvc.MixerStream) {
    method _sync (line 112) | _sync() {
    method _feedbackVolumeChange (line 126) | _feedbackVolumeChange() {
    method _updateSlider (line 147) | _updateSlider() {
    method _sliderChanged (line 158) | _sliderChanged() {
    method _updateAllowAmplified (line 190) | _updateAllowAmplified() {
    method getLevel (line 196) | getLevel(): number|null {
    method getMaxLevel (line 200) | getMaxLevel(): number {
    method _destroy (line 208) | _destroy() {
    method vfunc_get_preferred_height (line 223) | vfunc_get_preferred_height(for_width: number): [number, number] {
  type Options (line 233) | interface Options {
  class VolumeMixerItem (line 240) | class VolumeMixerItem extends St.BoxLayout {
    method constructor (line 246) | constructor(
    method _init (line 253) | _init(
    method _updateLabel (line 280) | _updateLabel() {
    method _sync (line 310) | _sync() {
  type Options (line 317) | type Options = {
  class VolumeMixerList (line 325) | class VolumeMixerList extends St.BoxLayout {
    method constructor (line 332) | constructor(options: VolumeMixerList.Options) {
    method _streamAdded (line 376) | _streamAdded(control: Gvc.MixerControl, id: number) {
    method _streamChanged (line 415) | _streamChanged(control: Gvc.MixerControl, id: number) {
    method _streamRemoved (line 423) | _streamRemoved(_control: Gvc.MixerControl, id: number) {
    method _sync (line 431) | _sync() {
  type Options (line 454) | type Options = {
  class VolumeMixerWidget (line 460) | class VolumeMixerWidget extends St.BoxLayout {
    method constructor (line 466) | constructor(options: VolumeMixerWidget.Options) {
    method _init (line 469) | _init(options: VolumeMixerWidget.Options) {
    method _updateMaxHeight (line 489) | _updateMaxHeight() {
    method _updateStyleClass (line 495) | _updateStyleClass() {
    method _createScroll (line 502) | _createScroll() {
    method _updateScrollStyle (line 523) | _updateScrollStyle() {
    method _syncScrollbarPadding (line 526) | _syncScrollbarPadding() {
    method vfunc_get_preferred_height (line 534) | vfunc_get_preferred_height(for_width: number): [number, number] {
    method _sync (line 542) | _sync() {
  type Options (line 548) | type Options = {
  class VolumeMixerWidgetFeature (line 558) | class VolumeMixerWidgetFeature extends FeatureBase {
    method loadSettings (line 568) | override loadSettings(loader: SettingLoader): void {
    method createMenu (line 583) | createMenu(slider: QuickSlider) {
    method reload (line 631) | override reload(key: string): void {
    method onLoad (line 647) | override onLoad(): void {
    method onUnload (line 665) | override onUnload(): void {

FILE: src/features/widget/weather.ts
  class Client (line 15) | class Client extends WeatherClient {
    method getInfos (line 16) | getInfos(maxForecasts: number, intervalHour: number): GWeather.Info[] {
    method getBestCurrentLocationName (line 40) | getBestCurrentLocationName(): string {
    method getBestLocationName (line 43) | getBestLocationName(loc: GWeather.Location): string {
  class Header (line 63) | class Header extends St.BoxLayout {
    method constructor (line 68) | constructor(client: Client, options: Header.Options) {
    method _init (line 71) | _init(client: Client, options: Header.Options) {
    method _sync (line 98) | _sync() {
  type Options (line 110) | type Options = {
  class WeatherSection (line 117) | class WeatherSection extends St.Button {
    method constructor (line 122) | constructor(client: Client, options: WeatherSection.Options) {
    method _init (line 125) | _init(client: Client, options: WeatherSection.Options) {
    method _addForecast (line 152) | _addForecast(forecast: GWeather.Info, col: number) {
    method _updateForecasts (line 185) | _updateForecasts() {
    method _setStatusLabel (line 203) | _setStatusLabel(text: string) {
    method _sync (line 212) | _sync() {
    method _click (line 238) | _click() {
  type Options (line 251) | type Options = {
  class WeatherWidget (line 260) | class WeatherWidget extends St.BoxLayout {
    method constructor (line 265) | constructor(options: WeatherWidget.Options) {
    method _init (line 268) | _init(options: WeatherWidget.Options) {
    method _updateStyleClass (line 290) | _updateStyleClass(): void {
    method vfunc_map (line 299) | vfunc_map() {
  type Options (line 306) | type Options = {
  class WeatherWidgetFeature (line 314) | class WeatherWidgetFeature extends FeatureBase {
    method loadSettings (line 324) | override loadSettings(loader: SettingLoader): void {
    method reload (line 337) | override reload(key: string): void {
    method onLoad (line 351) | override onLoad(): void {
    method onUnload (line 362) | override onUnload(): void {

FILE: src/global.ts
  type StreamSlider (line 21) | type StreamSlider = {
  class Global (line 26) | class Global {
    method QuickSettingsSystemIndicator (line 32) | static get QuickSettingsSystemIndicator(): Promise<SystemIndicator> {
    method QuickSettingsSystemItem (line 47) | static get QuickSettingsSystemItem(): Promise<SystemItem> {
    method MessageList (line 64) | static get MessageList(): CalendarMessageList {
    method DateMenuIndicator (line 67) | static get DateMenuIndicator(): Clutter.Actor {
    method GetShutdownMenuBox (line 71) | static GetShutdownMenuBox(): Promise<Clutter.Actor> {
    method StreamSliderGetter (line 83) | private static StreamSliderGetter(): StreamSlider|null {
    method GetStreamSlider (line 92) | static GetStreamSlider(): Promise<StreamSlider> {
    method GetDbusInterface (line 110) | static GetDbusInterface(path: string, interfaceName: string) {
    method GetShader (line 121) | static GetShader(path: string): [string, string] {
    method unload (line 137) | static unload() {
    method load (line 155) | static load(extension: Extension) {

FILE: src/libs/prefs/components.ts
  function addChildren (line 11) | function addChildren(target: any, funcName: string, children?: any[]) {
  function setLinkCursor (line 19) | function setLinkCursor(target: any) {
  function setScrollToFocus (line 23) | function setScrollToFocus(target: Adw.PreferencesPage, value: boolean) {
  function delayedSetScrollToFocus (line 29) | function delayedSetScrollToFocus(target: Adw.PreferencesPage, value: boo...
  function fixPageScrollIssue (line 37) | function fixPageScrollIssue(page: Adw.PreferencesPage) {
  function pushButton (line 45) | function pushButton(row_with_suffix: Adw.ActionRow, button: any): any {
  function pushDetailedButton (line 56) | function pushDetailedButton(
  function removeRowBottomBorder (line 77) | function removeRowBottomBorder(row: Adw.EntryRow|Adw.ActionRow) {
  function removeRowMinHeight (line 82) | function removeRowMinHeight(row: Adw.EntryRow|Adw.ActionRow) {
  function Dialog (line 92) | function Dialog({
  type ChildrenRequest (line 105) | type ChildrenRequest = (page: Adw.PreferencesPage, dialog: Adw.Preferenc...
  type Options (line 106) | interface Options {
  method constructor (line 116) | constructor(childrenRequest: ChildrenRequest, dialog: Adw.PreferencesDia...
  method constructor (line 129) | constructor(title: string, childrenRequest: ChildrenRequest, usePopup: b...
  function StackedPage (line 140) | function StackedPage({ title, dialog, childrenRequest }: {
  function ExperimentalIcon (line 159) | function ExperimentalIcon(options?: ExperimentalIcon.Options): Gtk.Image {
  type Options (line 172) | interface Options {
  function prependExperimentalIcon (line 177) | function prependExperimentalIcon(holder: Gtk.Widget, options?: Experimen...
  function Group (line 184) | function Group(options: Group.Options, children?: any[]): Adw.Preference...
  type Options (line 203) | type Options = Partial<Adw.PreferencesGroup.ConstructorProps & {
  function Row (line 213) | function Row({
  type Options (line 270) | interface Options {
  function appendLinkIcon (line 285) | function appendLinkIcon(row: any, name: string) {
  function addSuffixIcon (line 298) | function addSuffixIcon(row: Adw.ActionRow, name: string) {
  function DialogRow (line 311) | function DialogRow(options: DialogRow.Options): Adw.ActionRow {
  type Options (line 326) | interface Options extends Dialog.Options, Row.Options {
  function ResetButton (line 334) | function ResetButton(options: ResetButton.Options): Gtk.Box {
  type Options (line 362) | interface Options extends Button.OptionsBase {
  function getOptionState (line 366) | function getOptionState(settings: Gio.Settings, key: string): {
  function pushResetButton (line 379) | function pushResetButton(row_with_suffix: Adw.ActionRow, options: ResetB...
  function SwitchRow (line 386) | function SwitchRow({
  type Options (line 442) | interface Options {
  function ToggleButtonRow (line 460) | function ToggleButtonRow({
  type Options (line 529) | interface Options {
  function Button (line 547) | function Button({
  type Options (line 612) | interface Options extends OptionsBase {
  type OptionsBase (line 615) | interface OptionsBase {
  function ButtonRow (line 631) | function ButtonRow(options: ButtonRow.Options): Adw.ActionRow {
  type Options (line 659) | interface Options extends Button.OptionsBase {
  function UpDownButton (line 676) | function UpDownButton({
  type Options (line 730) | interface Options {
  type Direction (line 740) | enum Direction {
  function RgbColorRow (line 748) | function RgbColorRow({
  type Color (line 853) | type Color = number[]
  type Options (line 854) | interface Options {
  function EntryRow (line 873) | function EntryRow({
  type Options (line 924) | interface Options {
  function AdjustmentRow (line 940) | function AdjustmentRow({
  type Options (line 1014) | interface Options {
  function ExpanderRow (line 1035) | function ExpanderRow({
  type Options (line 1064) | interface Options {
  function DropdownRow (line 1078) | function DropdownRow<T>({
  type Options (line 1175) | interface Options<T> {
  method _init (line 1198) | _init(name: string, value: T) {
  function ContributorsRow (line 1207) | function ContributorsRow(row: ContributorsRow.Contributor[]): Adw.Action...
  type Contributor (line 1264) | interface Contributor {
  function LicenseRow (line 1274) | function LicenseRow(item: LicenseRow.License): Adw.ExpanderRow {
  type License (line 1319) | interface License {
  function LogoBox (line 1333) | function LogoBox({
  type Options (line 1373) | interface Options {
  function LogoGroup (line 1383) | function LogoGroup(options: LogoGroup.Options): Adw.PreferencesGroup {
  type Options (line 1391) | interface Options extends LogoBox.Options {
  function ChangelogDialog (line 1398) | function ChangelogDialog({
  type Options (line 1438) | interface Options {
  function simpleMarked (line 1450) | function simpleMarked(mdlike: string): string {
  type Release (line 1475) | interface Release {
  function createHeader (line 1483) | function createHeader(release: Partial<Release>): string {
  function getReleases (line 1490) | function getReleases(content: string): Release[] {
  function ChangelogPage (line 1517) | function ChangelogPage(
  function PaddingDialog (line 1540) | function PaddingDialog({
  type Options (line 1619) | interface Options {

FILE: src/libs/shared/colors.ts
  type Rgba (line 1) | type Rgba = [number, number, number, number]
  function formatCss (line 3) | function formatCss(color: Rgba): string {
  type Rgb (line 8) | type Rgb = [number, number, number]

FILE: src/libs/shared/imageUtils.ts
  function getImageMeanColor (line 14) | function getImageMeanColor(

FILE: src/libs/shared/jsUtils.ts
  function lerp (line 2) | function lerp(init: number, target: number, ratio: number) {
  function deepEqual (line 7) | function deepEqual(a: any, b: any): boolean {

FILE: src/libs/shared/logger.ts
  function Logger (line 2) | function Logger(str: string|(()=>string)) {
  function setHeader (line 12) | function setHeader(header: string) {
  type LogLevel (line 19) | enum LogLevel {
  function debug_internal (line 28) | function debug_internal(str: string|(()=>string)) {
  function error_internal (line 33) | function error_internal(str: string|(()=>string)) {
  function setLogLevel (line 39) | function setLogLevel(level: number) {

FILE: src/libs/shared/maid.ts
  class Maid (line 2) | class Maid {
    method constructor (line 5) | constructor() {
    method connectJob (line 9) | connectJob(
    method functionJob (line 20) | functionJob(func: (...args: any)=>any, priority: number = 0) {
    method disposeJob (line 24) | disposeJob<T extends { dispose: ()=>void }>(object: T, priority: numbe...
    method runDisposeJob (line 29) | runDisposeJob<T extends { run_dispose: ()=>void }>(object: any, priori...
    method destroyJob (line 34) | destroyJob<T extends { destroy: ()=>void }>(object: T, priority: numbe...
    method destroy (line 39) | destroy() {
    method getRecords (line 44) | getRecords(): Maid["records"] {
    method patchJob (line 49) | patchJob(
    method hideJob (line 66) | hideJob<T extends {hide: any, visible: boolean, connect: any}>(
    method clear (line 84) | clear() {
  type TaskType (line 137) | enum TaskType {

FILE: src/libs/shared/styleClass.ts
  class StyleClass (line 3) | class StyleClass {
    method constructor (line 6) | constructor(classString: string) {
    method remove (line 10) | remove(className: string): StyleClass {
    method add (line 20) | add(className: string): StyleClass {
    method stringify (line 26) | stringify(): string {

FILE: src/libs/shell/advani.ts
  type EasingParams (line 5) | interface EasingParams {
  type AdvEasingParams (line 16) | interface AdvEasingParams extends EasingParams {
  type ModeDefineIface (line 21) | interface ModeDefineIface {
  type ModeDefine (line 26) | interface ModeDefine extends ModeDefineIface {}
    method constructor (line 28) | constructor(params: ModeDefineIface) {
  class ModeDefine (line 27) | class ModeDefine {
    method constructor (line 28) | constructor(params: ModeDefineIface) {
  function createBezier (line 36) | function createBezier(
  type AdvAnimationMode (line 46) | enum AdvAnimationMode {
  function ease (line 62) | function ease(actor: Clutter.Actor, params: AdvEasingParams) {

FILE: src/libs/shell/effects.ts
  class RoundClipEffect (line 8) | class RoundClipEffect extends Shell.GLSLEffect {
    method vfunc_build_pipeline (line 11) | vfunc_build_pipeline (): void {
    method vfunc_paint_target (line 22) | vfunc_paint_target (node: Clutter.PaintNode, ctx: Clutter.PaintContext) {
    method updateUniforms (line 30) | updateUniforms (
    method getLocation (line 96) | getLocation(): RoundClipEffect.Uniforms {
  class Uniforms (line 111) | class Uniforms {

FILE: src/libs/shell/feature.ts
  class SettingLoader (line 6) | class SettingLoader {
    method constructor (line 11) | constructor(
    method push (line 21) | private push(key: string) {
    method clear (line 33) | clear() {
    method loadBoolean (line 44) | loadBoolean(key: string): boolean {
    method loadString (line 48) | loadString(key: string): string {
    method loadInt (line 52) | loadInt(key: string): number {
    method loadStrv (line 56) | loadStrv(key: string): string[] {
    method loadValue (line 60) | loadValue<T>(key: string): T {
    method loadRgb (line 64) | loadRgb(key: string): Rgb|null {
    method loadRgba (line 70) | loadRgba(key: string): Rgba|null {
  method constructor (line 83) | constructor() {
  method load (line 92) | load(noSettingsLoad?: boolean): void {
  method unload (line 96) | unload(noSettingsUnload?: boolean): void {
  method reload (line 103) | reload(changedKey?: string): void {

FILE: src/libs/shell/gesture.ts
  method _dragStart (line 17) | _dragStart(event: Clutter.Event): boolean {
  method _dragEnd (line 37) | _dragEnd(event: Clutter.Event): boolean {
  method _dragMotion (line 66) | _dragMotion(event: Clutter.Event): boolean {
  method _checkDragIsClick (line 78) | _checkDragIsClick(coords: Drag.Coords) {
  method vfunc_button_press_event (line 90) | vfunc_button_press_event(event: Clutter.Event): boolean {
  method vfunc_button_release_event (line 94) | vfunc_button_release_event(event: Clutter.Event): boolean {
  method vfunc_touch_event (line 98) | vfunc_touch_event(event: Clutter.Event): boolean {
  method vfunc_motion_event (line 116) | vfunc_motion_event(event: Clutter.Event): boolean {
  method applyTo (line 123) | static applyTo(widgetClass: any) {
  method getCoordsDistanceSquare (line 134) | static getCoordsDistanceSquare(coordsA: Drag.Coords, coordsB: Drag.Coord...
  type Coords (line 145) | type Coords = [number, number]
  type Event (line 146) | type Event = Clutter.Event & {
  method vfunc_scroll_event (line 164) | vfunc_scroll_event(event: Clutter.Event): boolean {
  method applyTo (line 209) | static applyTo(widgetClass: any) {
  type Event (line 222) | type Event = Clutter.Event & {

FILE: src/libs/shell/quickSettingsUtils.ts
  method load (line 17) | load(): void {
  method unload (line 29) | unload(): void {
  method items (line 37) | get items(): T[] {
  class QuickSettingsMenuTracker (line 44) | class QuickSettingsMenuTracker extends ChildrenTrackerBase<QuickSettings...
    method catchChild (line 47) | protected override catchChild(child: any): void {
    method getConnectTarget (line 65) | protected override getConnectTarget() {
    method menus (line 68) | get menus() {
  class QuickSettingsToggleTracker (line 74) | class QuickSettingsToggleTracker extends ChildrenTrackerBase<QuickToggle...
    method catchChild (line 76) | protected override catchChild(child: any): void {
    method getConnectTarget (line 93) | protected override getConnectTarget() {
  class SystemIndicatorTracker (line 98) | class SystemIndicatorTracker extends ChildrenTrackerBase<SystemIndicator> {
    method catchChild (line 100) | protected override catchChild(child: any): void {
    method getConnectTarget (line 116) | protected override getConnectTarget() {
  function updateMenuSeparators (line 121) | function updateMenuSeparators(menu: PopupMenuBase) {

FILE: src/libs/shell/styler.ts
  type Options (line 6) | interface Options {
  function getStyle (line 14) | function getStyle(options: Options): string {
  function fromLoader (line 54) | function fromLoader(loader: SettingLoader, prefix: string): Options {
  function isStyleKey (line 64) | function isStyleKey(prefix: string, key: string): boolean {
  type Options (line 77) | interface Options {
  function updateStyle (line 81) | function updateStyle(scroll: St.ScrollView, options: Options) {
  function fromLoader (line 96) | function fromLoader(loader: SettingLoader, prefix: string): Options {

FILE: src/libs/types/quickSettingsOrderItem.ts
  type QuickSettingsOrderItem (line 1) | interface QuickSettingsOrderItem {
  function match (line 9) | function match(a: QuickSettingsOrderItem, b: QuickSettingsOrderItem) {

FILE: src/libs/types/systemIndicatorOrderItem.ts
  type SystemIndicatorOrderItem (line 6) | interface SystemIndicatorOrderItem {
  function match (line 15) | function match(a: SystemIndicatorOrderItem, b: SystemIndicatorOrderItem) {
  function indicatorMatch (line 29) | function indicatorMatch(item: SystemIndicatorOrderItem, indicator: Syste...
  function create (line 43) | function create(friendlyName: string): SystemIndicatorOrderItem {

FILE: src/libs/types/toggleOrderItem.ts
  type ToggleOrderItem (line 7) | interface ToggleOrderItem {
  function match (line 18) | function match(a: ToggleOrderItem, b: ToggleOrderItem) {
  function toggleMatch (line 33) | function toggleMatch(item: ToggleOrderItem, toggle: QuickToggle|QuickMen...
  function create (line 51) | function create(friendlyName: string): ToggleOrderItem {

FILE: src/prefPages/about.ts
  method constructor (line 23) | constructor(settings: Gio.Settings, prefs: QstExtensionPreferences, wind...

FILE: src/prefPages/layout.ts
  function OrderGroup (line 31) | function OrderGroup<T extends OrderInfo.Base>({
  method constructor (line 254) | constructor(settings: Gio.Settings) {
  method systemNames (line 264) | get systemNames(): Map<string, string> {
  method systemIcons (line 267) | get systemIcons(): Map<string, string> {
  method getNextName (line 275) | getNextName(list: T[]): string {
  method skip (line 288) | skip(_list: T[], _moving: T, _movingIndex: number, target: T, _targetInd...
  method moveBlocking (line 291) | moveBlocking(_list: T[], _moving: T, _movingIndex: number, target: T, _t...
  method createAddButton (line 294) | createAddButton(editItem: (item: T)=>void): Gtk.Widget {
  method getGroupTitle (line 309) | getGroupTitle(): string {
  method getGroupDescription (line 312) | getGroupDescription(): string|null {
  type EditLayout (line 317) | type EditLayout<T> = {
  type Base (line 321) | type Base = {
  class ToggleOrderInfo (line 328) | class ToggleOrderInfo extends OrderInfo<ToggleOrderItem> {
    method createEditLayout (line 329) | createEditLayout(item: ToggleOrderItem): OrderInfo.EditLayout<ToggleOr...
    method getSystemKey (line 387) | getSystemKey(item: ToggleOrderItem): string {
    method getSystemNames (line 390) | getSystemNames(): Map<string, string> {
    method getSystemIcons (line 409) | getSystemIcons(): Map<string, string> {
    method getListFromSettings (line 427) | getListFromSettings(): ToggleOrderItem[] {
    method setListToSettings (line 430) | setListToSettings(list: ToggleOrderItem[]): void {
    method getDisplayName (line 450) | getDisplayName(item: ToggleOrderItem): string {
    method getSubtitle (line 455) | getSubtitle(item: ToggleOrderItem): string {
    method canHide (line 461) | canHide(item: ToggleOrderItem): boolean {
    method canEdit (line 467) | canEdit(item: ToggleOrderItem): boolean {
    method match (line 470) | match(a: ToggleOrderItem, b: ToggleOrderItem): boolean {
    method create (line 473) | create(friendlyName: string): ToggleOrderItem {
    method shouldShow (line 476) | shouldShow(item: ToggleOrderItem): boolean {
  class SystemIndicatorOrderInfo (line 484) | class SystemIndicatorOrderInfo extends OrderInfo<SystemIndicatorOrderIte...
    method createEditLayout (line 485) | createEditLayout(item: SystemIndicatorOrderItem): OrderInfo.EditLayout...
    method getSystemKey (line 536) | getSystemKey(item: SystemIndicatorOrderItem): string {
    method getSystemNames (line 539) | getSystemNames(): Map<string, string> {
    method getSystemIcons (line 557) | getSystemIcons(): Map<string, string> {
    method getListFromSettings (line 574) | getListFromSettings(): SystemIndicatorOrderItem[] {
    method setListToSettings (line 577) | setListToSettings(list: SystemIndicatorOrderItem[]): void {
    method getDisplayName (line 597) | getDisplayName(item: SystemIndicatorOrderItem): string {
    method getSubtitle (line 602) | getSubtitle(item: SystemIndicatorOrderItem): string {
    method canHide (line 608) | canHide(item: SystemIndicatorOrderItem): boolean {
    method canEdit (line 612) | canEdit(item: SystemIndicatorOrderItem): boolean {
    method match (line 615) | match(a: SystemIndicatorOrderItem, b: SystemIndicatorOrderItem): boole...
    method create (line 618) | create(friendlyName: string): SystemIndicatorOrderItem {
    method shouldShow (line 621) | shouldShow(item: SystemIndicatorOrderItem): boolean {
  function SystemItemOrderGroup (line 636) | function SystemItemOrderGroup(settings: Gio.Settings, page: Adw.Preferen...
  function copyOrder (line 751) | function copyOrder(order: string[]): string[] {
  method constructor (line 766) | constructor(settings: Gio.Settings, _prefs: QstExtensionPreferences, win...

FILE: src/prefPages/menu.ts
  function AdvancedAnimationStyleGroup (line 17) | function AdvancedAnimationStyleGroup(settings: Gio.Settings): Adw.Prefer...
  method constructor (line 92) | constructor(settings: Gio.Settings, _prefs: QstExtensionPreferences, win...

FILE: src/prefPages/toggles.ts
  method constructor (line 16) | constructor(settings: Gio.Settings, _prefs: QstExtensionPreferences, win...

FILE: src/prefPages/widgets.ts
  function SliderCustomizes (line 19) | function SliderCustomizes({
  method constructor (line 100) | constructor(settings: Gio.Settings, _prefs: QstExtensionPreferences, win...

FILE: src/prefs.ts
  class QstExtensionPreferences (line 23) | class QstExtensionPreferences extends ExtensionPreferences {
    method appendIconPath (line 24) | appendIconPath(path: string) {
    method readExtensionFile (line 30) | readExtensionFile(path: string) {
    method getContributorRows (line 37) | getContributorRows(): ContributorsRow.Contributor[][] {
    method getLicenses (line 51) | getLicenses(): LicenseRow.License[] {
    method getVersionString (line 63) | getVersionString(): string {
    method getChangelog (line 84) | getChangelog(): string {
    method fillPreferencesWindow (line 88) | async fillPreferencesWindow(window: Adw.PreferencesWindow) {

FILE: src/types.d.ts
  type Actor (line 13) | interface Actor {
  type Object (line 22) | interface Object {
Condensed preview — 99 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (870K chars).
[
  {
    "path": ".github/FUNDING.yml",
    "chars": 930,
    "preview": "# These are supported funding model platforms\n\ngithub: [qwreey] # Replace with up to 4 GitHub Sponsors-enabled usernames"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug---error-report.md",
    "chars": 2029,
    "preview": "---\nname: Bug & Error report\nabout: Create a report to help us improve\ntitle: \"[bug] \"\nlabels: bug\nassignees: ''\n\n---\n\n<"
  },
  {
    "path": ".github/workflows/build.yml",
    "chars": 651,
    "preview": "name: Build\n\non: [push, pull_request]\n\njobs:\n  build:\n    name: Build extension\n    runs-on: ubuntu-latest\n    steps:\n  "
  },
  {
    "path": ".gitignore",
    "chars": 55,
    "preview": "target/\ni\n*.po~\nhost/\ndocker-compose.yml\nnode_modules/\n"
  },
  {
    "path": "LICENSE",
    "chars": 35149,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "README.md",
    "chars": 5447,
    "preview": "# Quick Settings Tweaks [<img src=\".github/images/quick-settings-tweaker.png\" width=\"200px\" align=\"right\" alt=\"QuickSett"
  },
  {
    "path": "Todo.md",
    "chars": 938,
    "preview": "Scroll view layout for media widget\nTouch enchantments:\n    Notifications: slide to discard\n\nReadme file\nhomepage?\n\n배터리 "
  },
  {
    "path": "dirzsh.zsh",
    "chars": 1456,
    "preview": "$ID:load() {\n    lib:path-alloc2 \"PATHALLOC_$ID\" ./scripts :\n    alias execute=\"ID=$ID $ID:execute\"\n    alias lg=\"ID=$ID"
  },
  {
    "path": "docker-compose.example.yml",
    "chars": 926,
    "preview": "services:\n  gnome-docker:\n    container_name: gnome-docker\n    hostname: gnome-docker\n    build: ./host/gnome-docker\n\n  "
  },
  {
    "path": "install.sh",
    "chars": 8933,
    "preview": "#!/usr/bin/env bash\ncd \"$(dirname \"$(readlink -f \"$0\")\")\"\n\nfunction update-po() {\n\tbuild\n\n\techo '' > messages.po\n\t[ \"$?\""
  },
  {
    "path": "media/Changelog.md",
    "chars": 6946,
    "preview": "<!-- markdownlint-disable-file MD025 MD024 MD034 -->\n<!-- Note: -->\n<!-- This file is visible in prefs so if -->\n<!-- it"
  },
  {
    "path": "media/dbus.xml",
    "chars": 1214,
    "preview": "<?xml version=\"1.0\"?>\n<node>\n  <interface name=\"org.freedesktop.DBus.Properties\">\n    <method name=\"Get\">\n      <arg typ"
  },
  {
    "path": "media/licenses.json",
    "chars": 1875,
    "preview": "[\n\t{\n\t\t\"licenseUri\": \"https://github.com/qwreey/quick-settings-tweaks/blob/master/LICENSE\",\n\t\t\"name\": \"quick-settings-tw"
  },
  {
    "path": "media/rounded_corners.frag",
    "chars": 3273,
    "preview": "// This shader is copied from Mutter project:\n// https://gitlab.gnome.org/GNOME/mutter/-/blob/main/src/compositor/meta-b"
  },
  {
    "path": "metadata.json",
    "chars": 524,
    "preview": "{\n  \"name\": \"Quick Settings Tweaks\",\n  \"uuid\": \"quick-settings-tweaks@qwreey\",\n  \"description\": \"Let's tweak gnome's qui"
  },
  {
    "path": "old/features/volumeMixer.ts",
    "chars": 1739,
    "preview": "import { featureReloader } from \"../libs/utility.js\"\nimport { VolumeMixer } from \"../libs/volumeMixerHandler.js\"\nimport "
  },
  {
    "path": "old/inputOutput.ts",
    "chars": 5843,
    "preview": "import { Global } from \"./global.js\"\nimport St from \"gi://St\"\nimport * as Volume from \"resource:///org/gnome/shell/ui/st"
  },
  {
    "path": "old/layoutCustomize.ts",
    "chars": 1116,
    "preview": "import St from \"gi://St\"\nimport { Global } from \"../global.js\"\nimport { FeatureBase, type SettingLoader } from \"../libs/"
  },
  {
    "path": "old/libs/streamSlider.ts",
    "chars": 6321,
    "preview": "import GObject from \"gi://GObject\"\nimport Gio from \"gi://Gio\"\nimport GLib from \"gi://GLib\"\nimport Gvc from \"gi://Gvc\"\n\ni"
  },
  {
    "path": "old/libs/volumeMixerHandlerNotImpled.ts",
    "chars": 2886,
    "preview": "/*\n * This code is partially licensed under the gnome-volume-mixer license.\n * For more details, please check the licens"
  },
  {
    "path": "old/menus.ts",
    "chars": 125,
    "preview": "// Sound output menu\n// Sound input menu\n// Bluetooth\n// Wifi\n// VPN\n// Power mode (detailed?)\n// Wired\n// Hide item fro"
  },
  {
    "path": "old/other.ts",
    "chars": 736,
    "preview": "import Adw from \"gi://Adw\"\nimport GObject from \"gi://GObject\"\nimport Gio from \"gi://Gio\"\nimport { gettext as _ } from \"r"
  },
  {
    "path": "old/panel.ts",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "old/prefsPages/volumeMixer.ts",
    "chars": 9934,
    "preview": "import Adw from \"gi://Adw\"\nimport Gtk from \"gi://Gtk\"\nimport GObject from \"gi://GObject\"\nimport Gio from \"gi://Gio\"\n\nimp"
  },
  {
    "path": "old/sidebarPrefs.ts",
    "chars": 4443,
    "preview": "import Gtk from \"gi://Gtk\"\nimport Gdk from \"gi://Gdk\"\nimport Gio from \"gi://Gio\"\nimport Adw from \"gi://Adw\"\nimport { Ext"
  },
  {
    "path": "old/widgetManager.ts",
    "chars": 797,
    "preview": "import St from \"gi://St\"\nimport { Global } from \"../global.js\"\nimport Maid from \"./maid.js\"\n\nexport class WidgetManager "
  },
  {
    "path": "package.json",
    "chars": 757,
    "preview": "{\n  \"name\": \"quick-settings-tweaks\",\n  \"description\": \"A TypeScript GNOME Extension\",\n  \"version\": \"0.0.0\",\n  \"author\": "
  },
  {
    "path": "po/ca.po",
    "chars": 24773,
    "preview": "# AUTHORS\n# jcatfor https://github.com/jcatfor, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: 1\\n\"\n\"Report-Ms"
  },
  {
    "path": "po/cs.po",
    "chars": 24721,
    "preview": "# AUTHORS\n# ondra05 https://github.com/ondra05, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: 1\\n\"\n\"Report-Ms"
  },
  {
    "path": "po/de.po",
    "chars": 34210,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: quick-settings-tweaker\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-07"
  },
  {
    "path": "po/en.po",
    "chars": 34364,
    "preview": "# AUTHORS\n# qwreey75 (aka qwreey) https://github.com/qwreey75/, 2023.\n# DodoLeDev https://github.com/DodoLeDev, 2023\n#\n#"
  },
  {
    "path": "po/ja.po",
    "chars": 24950,
    "preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
  },
  {
    "path": "po/ko.po",
    "chars": 36945,
    "preview": "# AUTHORS\n# qwreey75 (aka qwreey) https://github.com/qwreey75/, 2023.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: 1\\n\"\n\"Re"
  },
  {
    "path": "po/pl.po",
    "chars": 31917,
    "preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
  },
  {
    "path": "po/pt.po",
    "chars": 39019,
    "preview": "# AUTHORS\n# DanGLES3 https://github.com/DanGLES3, 2023.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: 1\\n\"\n\"Report-Msgid-Bug"
  },
  {
    "path": "po/quick-settings-tweaks@qwreey.pot",
    "chars": 25029,
    "preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
  },
  {
    "path": "po/ru.po",
    "chars": 33759,
    "preview": "# AUTHORS\n# David Lapshin https://github.com/daudix-UFO, 2023.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: 1\\n\"\n\"Report-Ms"
  },
  {
    "path": "po/ta.po",
    "chars": 33733,
    "preview": "#Killersparrow1\n\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: 1\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-07-20 "
  },
  {
    "path": "po/zh_Hans.po",
    "chars": 31319,
    "preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
  },
  {
    "path": "schemas/org.gnome.shell.extensions.quick-settings-tweaks.gschema.xml",
    "chars": 15951,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<schemalist>\n  <schema id=\"org.gnome.shell.extensions.quick-settings-tweaks\" path"
  },
  {
    "path": "scripts/contributor-labels.json",
    "chars": 688,
    "preview": "{\n  \"qwreey\": \"Owner\",\n  \"DaPigGuy\": \"Gnome 45 Port\",\n  \"Leleat\": \"Style &amp; Code\\nimprove\",\n  \"kgdn\": \"Gnome 45 Port\""
  },
  {
    "path": "scripts/reindent.js",
    "chars": 551,
    "preview": "import { promises as fs } from \"fs\"\nfunction getItems() {\n\tlet allowed = false\n\tconst items = process.argv.filter(item ="
  },
  {
    "path": "scripts/version/gnome-docker-version",
    "chars": 5,
    "preview": "1.0.3"
  },
  {
    "path": "scripts/version/latest-build-number",
    "chars": 2,
    "preview": "9\n"
  },
  {
    "path": "scripts/version/latest-middle-version",
    "chars": 2,
    "preview": "2\n"
  },
  {
    "path": "scripts/version/latest-minor-version",
    "chars": 2,
    "preview": "1\n"
  },
  {
    "path": "scripts/version/major-version",
    "chars": 1,
    "preview": "2"
  },
  {
    "path": "src/ambient.d.ts",
    "chars": 13870,
    "preview": "// Provide missing types\n\ndeclare global {\n\texport interface EasingParams {\n\t\trepeatCount?: number\n\t\tautoReverse?: boole"
  },
  {
    "path": "src/config.ts",
    "chars": 237,
    "preview": "export default {\n    isDevelopmentBuild: false,\n    isReleaseBuild: false,\n    isGithubBuild: false,\n    version: \"unkno"
  },
  {
    "path": "src/extension.ts",
    "chars": 2868,
    "preview": "/**\n * Viewer Note:\n * stylesheet and javascript files are compiled from scss and typescript. \n * To modify this extensi"
  },
  {
    "path": "src/features/debug.ts",
    "chars": 1686,
    "preview": "import { FeatureBase, type SettingLoader } from \"../libs/shell/feature.js\"\nimport Global from \"../global.js\"\nimport Logg"
  },
  {
    "path": "src/features/layout/dateMenu.ts",
    "chars": 2011,
    "preview": "import { FeatureBase, type SettingLoader } from \"../../libs/shell/feature.js\"\nimport { StyleClass } from \"../../libs/sha"
  },
  {
    "path": "src/features/layout/sound.ts",
    "chars": 472,
    "preview": "import { FeatureBase, SettingLoader } from \"../../libs/shell/feature.js\"\nimport GObject from \"gi://GObject\"\n\n// TODO: mi"
  },
  {
    "path": "src/features/layout/systemIndicator.ts",
    "chars": 4854,
    "preview": "import * as Main from \"resource:///org/gnome/shell/ui/main.js\"\nimport { SystemIndicator } from \"resource:///org/gnome/sh"
  },
  {
    "path": "src/features/layout/systemItems.ts",
    "chars": 3514,
    "preview": "import Clutter from \"gi://Clutter\"\nimport { type PowerToggle } from \"resource:///org/gnome/shell/ui/status/system.js\"\nim"
  },
  {
    "path": "src/features/layout/toggles.ts",
    "chars": 2559,
    "preview": "import {\n\tQuickToggle,\n\tQuickMenuToggle,\n} from \"resource:///org/gnome/shell/ui/quickSettings.js\"\nimport { FeatureBase, "
  },
  {
    "path": "src/features/menuAnimation.ts",
    "chars": 3518,
    "preview": "import Clutter from \"gi://Clutter\"\nimport Shell from \"gi://Shell\"\nimport { type QuickSettingsMenu } from \"resource:///or"
  },
  {
    "path": "src/features/overlayMenu.ts",
    "chars": 6209,
    "preview": "import Clutter from \"gi://Clutter\"\nimport { QuickSlider, type QuickSettingsMenu } from \"resource:///org/gnome/shell/ui/q"
  },
  {
    "path": "src/features/toggle/unsafeQuickToggle.ts",
    "chars": 2754,
    "preview": "import GObject from \"gi://GObject\"\nimport { gettext as _ } from \"resource:///org/gnome/shell/extensions/extension.js\"\nim"
  },
  {
    "path": "src/features/widget/media.ts",
    "chars": 36873,
    "preview": "import St from \"gi://St\"\nimport Clutter from \"gi://Clutter\"\nimport GObject from \"gi://GObject\"\nimport GLib from \"gi://GL"
  },
  {
    "path": "src/features/widget/notifications.ts",
    "chars": 11151,
    "preview": "import GObject from \"gi://GObject\"\nimport St from \"gi://St\"\nimport Clutter from \"gi://Clutter\"\nimport * as MessageList f"
  },
  {
    "path": "src/features/widget/volumeMixer.ts",
    "chars": 18852,
    "preview": "/*\n * This code is partially licensed under the gnome-volume-mixer license.\n * For more details, please check the licens"
  },
  {
    "path": "src/features/widget/weather.ts",
    "chars": 10070,
    "preview": "import Clutter from \"gi://Clutter\"\nimport GObject from \"gi://GObject\"\nimport GLib from \"gi://GLib\"\nimport Pango from \"gi"
  },
  {
    "path": "src/global.scss",
    "chars": 34,
    "preview": "$p: \".QSTWEAKS\";\n$v: \"-QSTWEAKS\";\n"
  },
  {
    "path": "src/global.ts",
    "chars": 5890,
    "preview": "import Clutter from \"gi://Clutter\"\nimport St from \"gi://St\"\nimport GLib from \"gi://GLib\"\nimport Gio from \"gi://Gio\"\nimpo"
  },
  {
    "path": "src/libs/prefs/components.ts",
    "chars": 38077,
    "preview": "\nimport Adw from \"gi://Adw\"\nimport Gio from \"gi://Gio\"\nimport Gtk from \"gi://Gtk\"\nimport Gdk from \"gi://Gdk\"\nimport GLib"
  },
  {
    "path": "src/libs/shared/colors.ts",
    "chars": 260,
    "preview": "export type Rgba = [number, number, number, number]\nexport namespace Rgba {\n    export function formatCss(color: Rgba): "
  },
  {
    "path": "src/libs/shared/imageUtils.ts",
    "chars": 3328,
    "preview": "import GdkPixbuf from \"gi://GdkPixbuf\"\nimport GLib from \"gi://GLib\"\n\nnamespace ImageMeanColor {\n\tconst BASE_SIZE = 128\n\t"
  },
  {
    "path": "src/libs/shared/jsUtils.ts",
    "chars": 948,
    "preview": "// Lerp number\nexport function lerp(init: number, target: number, ratio: number) {\n\treturn (target - init) * ratio + ini"
  },
  {
    "path": "src/libs/shared/logger.ts",
    "chars": 1460,
    "preview": "// Prefixed, leveled logger\nfunction Logger(str: string|(()=>string)) {\n\tif (str instanceof Function) str = str()\n\tif (L"
  },
  {
    "path": "src/libs/shared/maid.ts",
    "chars": 3761,
    "preview": "// Connection destroyer\nclass Maid {\n\tprivate records: [Maid.TaskType, number, ...any][]\n\n\tconstructor() {\n\t\tthis.record"
  },
  {
    "path": "src/libs/shared/styleClass.ts",
    "chars": 749,
    "preview": "// Re-layout & painting only once\n// We use StyleClass instead of add_style_class_name in this extension\nexport class St"
  },
  {
    "path": "src/libs/shell/advani.ts",
    "chars": 2733,
    "preview": "import Clutter from \"gi://Clutter\"\nimport Graphene from \"gi://Graphene\"\n\n// Gnome base ease function params\nexport inter"
  },
  {
    "path": "src/libs/shell/effects.ts",
    "chars": 3582,
    "preview": "import GObject from 'gi://GObject'\nimport Shell from 'gi://Shell'\nimport Cogl from 'gi://Cogl'\nimport Clutter from 'gi:/"
  },
  {
    "path": "src/libs/shell/feature.ts",
    "chars": 2674,
    "preview": "import { type Rgb, type Rgba } from \"../shared/colors.js\"\nimport Maid from \"../shared/maid.js\";\nimport Global from \"../."
  },
  {
    "path": "src/libs/shell/gesture.ts",
    "chars": 6597,
    "preview": "import St from \"gi://St\"\nimport Clutter from \"gi://Clutter\"\n\n// #region Drag\nexport abstract class Drag extends St.Bin {"
  },
  {
    "path": "src/libs/shell/quickSettingsUtils.ts",
    "chars": 3874,
    "preview": "import {\n\tQuickMenuToggle,\n\tQuickToggle,\n\tSystemIndicator,\n\ttype QuickSettingsMenu,\n} from \"resource:///org/gnome/shell/"
  },
  {
    "path": "src/libs/shell/styler.ts",
    "chars": 3011,
    "preview": "import St from \"gi://St\"\nimport { type SettingLoader } from \"./feature.js\"\nimport { Rgba } from \"../shared/colors.js\"\n\ne"
  },
  {
    "path": "src/libs/types/quickSettingsOrderItem.ts",
    "chars": 337,
    "preview": "export interface QuickSettingsOrderItem {\n    id?: string\n    lineBreak?: boolean\n    pageBreak?: boolean\n    hide?: boo"
  },
  {
    "path": "src/libs/types/systemIndicatorOrderItem.ts",
    "chars": 1601,
    "preview": "import GObject from \"gi://GObject\"\nimport {\n    type SystemIndicator,\n} from \"resource:///org/gnome/shell/ui/quickSettin"
  },
  {
    "path": "src/libs/types/toggleOrderItem.ts",
    "chars": 1900,
    "preview": "import GObject from \"gi://GObject\"\nimport {\n    type QuickToggle,\n    type QuickMenuToggle,\n} from \"resource:///org/gnom"
  },
  {
    "path": "src/prefPages/about.ts",
    "chars": 4449,
    "preview": "import Adw from \"gi://Adw\"\nimport GObject from \"gi://GObject\"\nimport Gio from \"gi://Gio\"\nimport { gettext as _ } from \"r"
  },
  {
    "path": "src/prefPages/layout.ts",
    "chars": 27821,
    "preview": "import Adw from \"gi://Adw\"\nimport GObject from \"gi://GObject\"\nimport Gio from \"gi://Gio\"\nimport GLib from \"gi://GLib\"\nim"
  },
  {
    "path": "src/prefPages/menu.ts",
    "chars": 5308,
    "preview": "import Adw from \"gi://Adw\"\nimport GObject from \"gi://GObject\"\nimport Gio from \"gi://Gio\"\nimport { gettext as _ } from \"r"
  },
  {
    "path": "src/prefPages/toggles.ts",
    "chars": 1262,
    "preview": "import Adw from \"gi://Adw\"\nimport GObject from \"gi://GObject\"\nimport Gio from \"gi://Gio\"\nimport { gettext as _ } from \"r"
  },
  {
    "path": "src/prefPages/widgets.ts",
    "chars": 14405,
    "preview": "import Adw from \"gi://Adw\"\nimport GObject from \"gi://GObject\"\nimport Gio from \"gi://Gio\"\nimport { gettext as _ } from \"r"
  },
  {
    "path": "src/prefs.ts",
    "chars": 3090,
    "preview": "import Gtk from \"gi://Gtk\"\nimport Gdk from \"gi://Gdk\"\nimport Gio from \"gi://Gio\"\nimport Adw from \"gi://Adw\"\nimport { Ext"
  },
  {
    "path": "src/styles/date-menu.scss",
    "chars": 305,
    "preview": "@use \"../global.scss\" as *;\n\n.datemenu-popover {\n    &#{$p}-hide-left-box {\n        .datemenu-calendar-column {\n        "
  },
  {
    "path": "src/styles/debug.scss",
    "chars": 87,
    "preview": "@use \"../global.scss\" as *;\n\n#{$p}-debug-show-layout * {\n    outline: 1px solid red;\n}\n"
  },
  {
    "path": "src/styles/media-widget.scss",
    "chars": 1095,
    "preview": "@use \"../global.scss\" as *;\n\n#{$p}-media {\n    padding: 0px;\n    margin: 0px 0px 0px 0px;\n\n    // Message Card\n    .mess"
  },
  {
    "path": "src/styles/message-compact.scss",
    "chars": 1292,
    "preview": "@use \"../global.scss\" as *;\n\n#{$p}-message-compact {\n    // Message Card\n    .message {\n        margin-bottom: 8px;\n    "
  },
  {
    "path": "src/styles/message-remove-shadow.scss",
    "chars": 103,
    "preview": "@use \"../global.scss\" as *;\n\n#{$p}-message-remove-shadow .message {\n    box-shadow: none !important;\n}\n"
  },
  {
    "path": "src/styles/notification-widget.scss",
    "chars": 2213,
    "preview": "@use \"../global.scss\" as *;\n\n#{$p}-notifications {\n    padding: 0px;\n    margin: 0px 0px 0px 0px;\n\n    // Message Card\n "
  },
  {
    "path": "src/styles/system-indicator.scss",
    "chars": 653,
    "preview": "@use \"../global.scss\" as *;\n\n#panel {\n    #{$p}-privacy-indicator-use-accent .privacy-indicator {\n        color: -st-acc"
  },
  {
    "path": "src/styles/volume-mixer-widget.scss",
    "chars": 531,
    "preview": "@use \"../global.scss\" as *;\n\n/* volume mixer label */\n#{$p}-volume-mixer {\n    #{$p}-item {\n        #{$p}-label {\n      "
  },
  {
    "path": "src/styles/weather-widget.scss",
    "chars": 1025,
    "preview": "@use \"../global.scss\" as *;\n\n#{$p}-weather {\n    &#{$p}-weather-remove-shadow {\n        .weather-button {\n            bo"
  },
  {
    "path": "src/stylesheet.scss",
    "chars": 438,
    "preview": "@use \"./global.scss\" as *;\n\n@use \"./styles/notification-widget.scss\";\n@use \"./styles/media-widget.scss\";\n@use \"./styles/"
  },
  {
    "path": "src/types.d.ts",
    "chars": 1024,
    "preview": "import \"@girs/gnome-shell/ambient\"\nimport \"@girs/gnome-shell/extensions/global\"\nimport \"@girs/gjs/dom\"\nimport \"@girs/gjs"
  },
  {
    "path": "tsconfig.json",
    "chars": 489,
    "preview": "{\n    \"compilerOptions\": {\n        \"moduleResolution\": \"Bundler\",\n        \"outDir\": \"target/tsc\",\n        \"target\": \"ESN"
  }
]

About this extraction

This page contains the full source code of the qwreey/quick-settings-tweaks GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 99 files (747.0 KB), approximately 211.4k tokens, and a symbol index with 595 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!